From 3a0a25f04bd0c2b40045e7f35add5599a2e641eb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 4 Oct 2026 15:25:58 +0000 Subject: [PATCH 1/9] docs(helm): update chart installation page --- apps/docs/docs/getting-started/installation/helm.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/docs/docs/getting-started/installation/helm.md b/apps/docs/docs/getting-started/installation/helm.md index 9092c0030..44b40cbd2 100644 --- a/apps/docs/docs/getting-started/installation/helm.md +++ b/apps/docs/docs/getting-started/installation/helm.md @@ -2,9 +2,9 @@ homarr logo -![Version: 8.30.0](https://img.shields.io/badge/Version-8.30.0-informational?style=flat) +![Version: 8.31.1](https://img.shields.io/badge/Version-8.31.1-informational?style=flat) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat) -![AppVersion: v2.0.0](https://img.shields.io/badge/AppVersion-v2.0.0-informational?style=flat) +![AppVersion: v2.1.2](https://img.shields.io/badge/AppVersion-v2.1.2-informational?style=flat) A Helm chart to deploy homarr for Kubernetes @@ -429,7 +429,7 @@ All available values are listed on the [artifacthub](https://artifacthub.io/pack | httproute.rules[0].matches[0].path.value | string | `"/"` | Path value to match | | image.pullPolicy | string | `"IfNotPresent"` | Image pull policy | | image.repository | string | `"ghcr.io/homarr-labs/homarr"` | Image repository | -| image.tag | string | `"v2.0.0"` | Overrides the image tag whose default is the chart appVersion | +| image.tag | string | `"v2.1.2"` | Overrides the image tag whose default is the chart appVersion | | imagePullSecrets | list | `[]` | Secrets for Docker registry | | ingress.annotations | object | `{}` | Ingress annotations | | ingress.enabled | bool | `false` | Enable ingress | From a17845aa1caacc7ce0aa8827664a63b70ad7a88e Mon Sep 17 00:00:00 2001 From: Thomas Date: Mon, 5 Oct 2026 09:48:06 +0200 Subject: [PATCH 2/9] feat: add create-only root certificate API (#7033) * feat: add create-only root certificate API [skip ci] * fix: harden root certificate API handling --- apps/docs/docs/management/api/index.mdx | 14 + apps/docs/public/api/open-api-schema.json | 267 ++++++++++++++++++ packages/api/src/open-api.ts | 5 + .../router/certificates/certificate-router.ts | 67 ++++- .../certificates/files/index.ts | 2 +- .../certificates/files/root-certificate.ts | 170 +++++++++++ .../src/infrastructure/certificates/index.ts | 5 + packages/validation/src/certificates.ts | 14 + 8 files changed, 542 insertions(+), 2 deletions(-) create mode 100644 packages/core/src/infrastructure/certificates/files/root-certificate.ts diff --git a/apps/docs/docs/management/api/index.mdx b/apps/docs/docs/management/api/index.mdx index ce05b7ebd..c01e17bdf 100644 --- a/apps/docs/docs/management/api/index.mdx +++ b/apps/docs/docs/management/api/index.mdx @@ -54,6 +54,20 @@ on every layout, and caps width to the available columns. `board.updateItemLayout` (`PATCH /api/boards/{boardId}/items/{itemId}/layouts/{layoutId}`) moves or resizes one item in one layout without replacing the board. It cannot move the item outside its section or overlap another item/container. +## Root CA automation + +Administrators can inspect a named CA with `GET /api/certificates/{fileName}` (`certificates.getCertificate`) or +create it with `POST /api/certificates/root` (`certificates.ensureRootCertificate`), using JSON `{ fileName, certificate }`. +Names are limited to 128 characters, start with a letter or digit, contain only letters, digits, dots, underscores and +hyphens, and end in `.crt` or `.pem`. Supply one currently valid self-signed PEM root CA, at most 64 KiB, without a chain +or private key. + +Inspection returns public metadata or `null` when absent. Creation returns `{ created, certificate }`; identical PEM +bytes return `created: false`, while different existing bytes or unsafe file paths return `CONFLICT` without replacement. +`sha256` hashes the exact UTF-8 PEM bytes, including whitespace; `fingerprint256` identifies the DER certificate. +Dates are ISO 8601. Certificate contents are never returned. Expired stored roots remain inspectable. Trust applies to +subsequent integration requests without a restart; it does not bypass hostname verification. + ## Docker targets Docker actions require `{ endpointId, id }` targets from `docker.getContainers`; `endpointId` distinguishes hosts. diff --git a/apps/docs/public/api/open-api-schema.json b/apps/docs/public/api/open-api-schema.json index 30129299f..e0e67aebb 100644 --- a/apps/docs/public/api/open-api-schema.json +++ b/apps/docs/public/api/open-api-schema.json @@ -5545,6 +5545,273 @@ } } }, + "/api/certificates/{fileName}": { + "get": { + "operationId": "certificates-getCertificate", + "summary": "Inspect a named custom root CA certificate", + "description": "Return public metadata or null when absent. Requires admin permission. Does not return PEM contents.", + "tags": [ + "certificates" + ], + "security": [ + { + "apikey": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "fileName", + "schema": { + "type": "string", + "maxLength": 128, + "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]*\\.(crt|pem)$" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "anyOf": [ + { + "type": "object", + "properties": { + "fileName": { + "type": "string", + "maxLength": 128, + "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]*\\.(crt|pem)$" + }, + "sha256": { + "type": "string" + }, + "fingerprint256": { + "type": "string" + }, + "ca": { + "type": "boolean", + "const": true + }, + "validFrom": { + "type": "string" + }, + "validTo": { + "type": "string" + } + }, + "required": [ + "fileName", + "sha256", + "fingerprint256", + "ca", + "validFrom", + "validTo" + ], + "additionalProperties": false + }, + { + "type": "null" + } + ] + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/api/certificates/root": { + "post": { + "operationId": "certificates-ensureRootCertificate", + "summary": "Ensure a named custom root CA certificate without overwriting", + "description": "Accept one currently valid self-signed PEM root CA (64 KiB maximum). Identical bytes are idempotent; different existing bytes return CONFLICT. Requires admin permission.", + "tags": [ + "certificates" + ], + "security": [ + { + "apikey": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "fileName": { + "type": "string", + "maxLength": 128, + "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]*\\.(crt|pem)$" + }, + "certificate": { + "type": "string", + "minLength": 1, + "maxLength": 65536 + } + }, + "required": [ + "fileName", + "certificate" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "created": { + "type": "boolean" + }, + "certificate": { + "type": "object", + "properties": { + "fileName": { + "type": "string", + "maxLength": 128, + "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]*\\.(crt|pem)$" + }, + "sha256": { + "type": "string" + }, + "fingerprint256": { + "type": "string" + }, + "ca": { + "type": "boolean", + "const": true + }, + "validFrom": { + "type": "string" + }, + "validTo": { + "type": "string" + } + }, + "required": [ + "fileName", + "sha256", + "fingerprint256", + "ca", + "validFrom", + "validTo" + ], + "additionalProperties": false + } + }, + "required": [ + "created", + "certificate" + ], + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, "/api/integrations/request": { "post": { "operationId": "integration-request", diff --git a/packages/api/src/open-api.ts b/packages/api/src/open-api.ts index f398036b1..cecd5a3ea 100644 --- a/packages/api/src/open-api.ts +++ b/packages/api/src/open-api.ts @@ -4,6 +4,7 @@ import { API_KEY_HEADER_NAME } from "@homarr/auth/api-key"; import { appRouter } from "./router/app"; import { boardRouter } from "./router/board"; +import { ensureRootCertificateProcedure, getCertificateProcedure } from "./router/certificates/certificate-router"; import { integrationRequestProcedure } from "./router/integration/integration-request"; import { integrationTestStoredConnectionProcedure } from "./router/integration/integration-test-stored-connection"; import { infoRouter } from "./router/info"; @@ -21,6 +22,10 @@ export const openApiRouter = createTRPCRouter({ inviteRouter, serverSettingsRouter, userRouter, + certificates: createTRPCRouter({ + getCertificate: getCertificateProcedure, + ensureRootCertificate: ensureRootCertificateProcedure, + }), integration: createTRPCRouter({ request: integrationRequestProcedure, testConnection: integrationTestStoredConnectionProcedure, diff --git a/packages/api/src/router/certificates/certificate-router.ts b/packages/api/src/router/certificates/certificate-router.ts index cab6633f0..a64489cb1 100644 --- a/packages/api/src/router/certificates/certificate-router.ts +++ b/packages/api/src/router/certificates/certificate-router.ts @@ -5,18 +5,83 @@ import { z } from "zod/v4"; import { addCustomRootCertificateAsync, + ensureCustomRootCertificateAsync, + getCustomRootCertificateAsync, removeCustomRootCertificateAsync, + RootCertificateError, } from "@homarr/core/infrastructure/certificates"; import { createLogger } from "@homarr/core/infrastructure/logs"; import { and, eq } from "@homarr/db"; import { trustedCertificateHostnames } from "@homarr/db/schema"; -import { certificateValidFileNameSchema, checkCertificateFile } from "@homarr/validation/certificates"; +import { + certificateValidFileNameSchema, + checkCertificateFile, + rootCertificateFileNameSchema, + rootCertificateMetadataSchema, +} from "@homarr/validation/certificates"; import { createTRPCRouter, permissionRequiredProcedure } from "../../trpc"; const logger = createLogger({ module: "certificateRouter" }); +const withCertificateErrorsAsync = async (operation: () => Promise) => { + try { + return await operation(); + } catch (error) { + if (error instanceof RootCertificateError) { + throw new TRPCError({ code: error.code, message: error.message }); + } + throw error; + } +}; + +export const getCertificateProcedure = permissionRequiredProcedure + .requiresPermission("admin") + .meta({ + openapi: { + method: "GET", + path: "/api/certificates/{fileName}", + tags: ["certificates"], + protect: true, + summary: "Inspect a named custom root CA certificate", + description: + "Return public metadata or null when absent. Requires admin permission. Does not return PEM contents.", + }, + }) + .input(z.object({ fileName: rootCertificateFileNameSchema })) + .output(rootCertificateMetadataSchema.nullable()) + .query(({ input }) => withCertificateErrorsAsync(() => getCustomRootCertificateAsync(input.fileName))); + +export const ensureRootCertificateProcedure = permissionRequiredProcedure + .requiresPermission("admin") + .meta({ + openapi: { + method: "POST", + path: "/api/certificates/root", + tags: ["certificates"], + protect: true, + summary: "Ensure a named custom root CA certificate without overwriting", + description: + "Accept one currently valid self-signed PEM root CA (64 KiB maximum). Identical bytes are idempotent; different existing bytes return CONFLICT. Requires admin permission.", + }, + }) + .input( + z.object({ + fileName: rootCertificateFileNameSchema, + certificate: z + .string() + .min(1) + .max(64 * 1024), + }), + ) + .output(z.object({ created: z.boolean(), certificate: rootCertificateMetadataSchema })) + .mutation(({ input }) => + withCertificateErrorsAsync(() => ensureCustomRootCertificateAsync(input.fileName, input.certificate)), + ); + export const certificateRouter = createTRPCRouter({ + getCertificate: getCertificateProcedure, + ensureRootCertificate: ensureRootCertificateProcedure, addCertificate: permissionRequiredProcedure .requiresPermission("admin") .input( diff --git a/packages/core/src/infrastructure/certificates/files/index.ts b/packages/core/src/infrastructure/certificates/files/index.ts index fcc058ad9..3b7e7ad3c 100644 --- a/packages/core/src/infrastructure/certificates/files/index.ts +++ b/packages/core/src/infrastructure/certificates/files/index.ts @@ -4,7 +4,7 @@ import fs from "node:fs/promises"; import path from "node:path"; import { rootCertificates } from "node:tls"; -const getCertificateFolder = () => { +export const getCertificateFolder = () => { if (process.env.NODE_ENV !== "production") return process.env.LOCAL_CERTIFICATE_PATH; return process.env.LOCAL_CERTIFICATE_PATH ?? path.join("/appdata", "trusted-certificates"); }; diff --git a/packages/core/src/infrastructure/certificates/files/root-certificate.ts b/packages/core/src/infrastructure/certificates/files/root-certificate.ts new file mode 100644 index 000000000..138e42a96 --- /dev/null +++ b/packages/core/src/infrastructure/certificates/files/root-certificate.ts @@ -0,0 +1,170 @@ +import { createHash, randomUUID, X509Certificate } from "node:crypto"; +import { constants } from "node:fs"; +import fs from "node:fs/promises"; +import path from "node:path"; + +import { createLogger } from "../../logs"; +import { getCertificateFolder } from "./index"; + +const logger = createLogger({ module: "rootCertificate" }); +const maxCertificateBytes = 64 * 1024; +const fileNamePattern = /^[a-zA-Z0-9][a-zA-Z0-9._-]*\.(crt|pem)$/; +const pemPattern = /^\s*-----BEGIN CERTIFICATE-----\s+([A-Za-z0-9+/=][A-Za-z0-9+/=\s]*)-----END CERTIFICATE-----\s*$/; + +export class RootCertificateError extends Error { + constructor( + public readonly code: "BAD_REQUEST" | "CONFLICT", + message: string, + ) { + super(message); + } +} + +const validateFileName = (fileName: string) => { + if (fileName.length > 128 || !fileNamePattern.test(fileName)) { + throw new RootCertificateError("BAD_REQUEST", "Invalid certificate file name"); + } +}; + +const describeCertificate = (fileName: string, content: Buffer, requireCurrent: boolean) => { + if (content.length > maxCertificateBytes) { + throw new RootCertificateError("BAD_REQUEST", "Expected one PEM root CA certificate, at most 64 KiB"); + } + const pem = pemPattern.exec(content.toString("utf8")); + if (!pem?.[1]) { + throw new RootCertificateError("BAD_REQUEST", "Expected one PEM root CA certificate, at most 64 KiB"); + } + + let certificate: X509Certificate; + try { + certificate = new X509Certificate(content); + // Reject extra DER data as well as PEM chains, keys, leaf certificates and non-root CAs. + const der = Buffer.from(pem[1].replace(/\s/g, ""), "base64"); + if ( + !certificate.raw.equals(der) || + !certificate.ca || + !certificate.checkIssued(certificate) || + !certificate.verify(certificate.publicKey) + ) { + throw new Error("Expected a self-signed root CA certificate"); + } + } catch { + throw new RootCertificateError("BAD_REQUEST", "Expected a self-signed root CA certificate"); + } + + const validFrom = new Date(certificate.validFrom); + const validTo = new Date(certificate.validTo); + const now = Date.now(); + if (requireCurrent && (validFrom.getTime() > now || validTo.getTime() <= now)) { + throw new RootCertificateError("BAD_REQUEST", "Root CA certificate is not currently valid"); + } + + return { + fileName, + sha256: createHash("sha256").update(content).digest("hex"), + fingerprint256: certificate.fingerprint256, + ca: true as const, + validFrom: validFrom.toISOString(), + validTo: validTo.toISOString(), + }; +}; + +const hasCode = (error: unknown, code: string) => { + return error instanceof Error && "code" in error && error.code === code; +}; + +const readCertificateAsync = async (fullPath: string) => { + let file; + try { + // NONBLOCK prevents opening a FIFO from hanging before the regular-file check. + file = await fs.open(fullPath, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK); + } catch (error) { + if (hasCode(error, "ENOENT")) return null; + if (hasCode(error, "ELOOP") || hasCode(error, "ENXIO")) { + throw new RootCertificateError("CONFLICT", "Certificate path is not a regular file"); + } + throw error; + } + + try { + const stat = await file.stat(); + if (!stat.isFile() || stat.size > maxCertificateBytes) { + throw new RootCertificateError("CONFLICT", "Certificate path is not a bounded regular file"); + } + const content = Buffer.alloc(maxCertificateBytes + 1); + let size = 0; + while (size < content.length) { + const { bytesRead } = await file.read(content, size, content.length - size, size); + if (bytesRead === 0) break; + size += bytesRead; + } + if (size > maxCertificateBytes) { + throw new RootCertificateError("CONFLICT", "Certificate file exceeds 64 KiB"); + } + return content.subarray(0, size); + } finally { + await file.close(); + } +}; + +export const getCustomRootCertificateAsync = async (fileName: string) => { + validateFileName(fileName); + const folder = getCertificateFolder(); + if (!folder) return null; + const content = await readCertificateAsync(path.join(folder, fileName)); + if (!content) return null; + return describeCertificate(fileName, content, false); +}; + +export const ensureCustomRootCertificateAsync = async (fileName: string, pem: string) => { + validateFileName(fileName); + const content = Buffer.from(pem, "utf8"); + const certificate = describeCertificate(fileName, content, true); + const folder = getCertificateFolder(); + if (!folder) { + throw new Error("Set LOCAL_CERTIFICATE_PATH to an absolute path to manage local certificates"); + } + await fs.mkdir(folder, { recursive: true }); + const fullPath = path.join(folder, fileName); + const existing = await readCertificateAsync(fullPath); + if (existing) { + if (!existing.equals(content)) { + throw new RootCertificateError("CONFLICT", "A different certificate already exists at this file name"); + } + return { created: false, certificate }; + } + + // Publish a complete file atomically without replacing an existing directory entry. + const temporaryPath = path.join(folder, `.root-certificate-${randomUUID()}.tmp`); + const temporaryFile = await fs.open( + temporaryPath, + constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL | constants.O_NOFOLLOW, + 0o644, + ); + try { + try { + await temporaryFile.writeFile(content); + await temporaryFile.sync(); + } finally { + await temporaryFile.close(); + } + try { + await fs.link(temporaryPath, fullPath); + } catch (error) { + if (!hasCode(error, "EEXIST")) throw error; + const concurrent = await readCertificateAsync(fullPath); + if (!concurrent?.equals(content)) { + throw new RootCertificateError("CONFLICT", "A different certificate already exists at this file name"); + } + return { created: false, certificate }; + } + return { created: true, certificate }; + } finally { + // Cleanup must not turn a published certificate into a failed operation. + try { + await fs.unlink(temporaryPath); + } catch (error) { + logger.warn("Failed to remove temporary root certificate file", { error }); + } + } +}; diff --git a/packages/core/src/infrastructure/certificates/index.ts b/packages/core/src/infrastructure/certificates/index.ts index fb4ecaa0b..025fa9ff5 100644 --- a/packages/core/src/infrastructure/certificates/index.ts +++ b/packages/core/src/infrastructure/certificates/index.ts @@ -1,4 +1,9 @@ export { getTrustedCertificateHostnamesAsync } from "./hostnames"; +export { + ensureCustomRootCertificateAsync, + getCustomRootCertificateAsync, + RootCertificateError, +} from "./files/root-certificate"; export { addCustomRootCertificateAsync, removeCustomRootCertificateAsync, diff --git a/packages/validation/src/certificates.ts b/packages/validation/src/certificates.ts index f01a13c55..104f2067c 100644 --- a/packages/validation/src/certificates.ts +++ b/packages/validation/src/certificates.ts @@ -4,6 +4,20 @@ import { createCustomErrorParams } from "./form/i18n"; export const certificateValidFileNameSchema = z.string().regex(/^[\w\-. ]+$/); +export const rootCertificateFileNameSchema = z + .string() + .max(128) + .regex(/^[a-zA-Z0-9][a-zA-Z0-9._-]*\.(crt|pem)$/); + +export const rootCertificateMetadataSchema = z.object({ + fileName: rootCertificateFileNameSchema, + sha256: z.string(), + fingerprint256: z.string(), + ca: z.literal(true), + validFrom: z.string(), + validTo: z.string(), +}); + export const checkCertificateFile: z.core.CheckFn = (context) => { const result = certificateValidFileNameSchema.safeParse(context.value.name); if (!result.success) { From 4dbe4343e5c3c0c6f2a3d4baf49215c09b0d9e12 Mon Sep 17 00:00:00 2001 From: Thomas Date: Mon, 5 Oct 2026 09:51:35 +0200 Subject: [PATCH 3/9] fix(demo): stop seeded widget background polling (#6980) * fix(demo): stop seeded widget background polling * docs(demo): clarify single-replica requirements * fix: abort startup when auth secret generation fails * docs: remove demo deployment changes from PR * fix: scope demo polling changes --- .../app/[locale]/_client-providers/trpc.tsx | 22 ++++++++++++------- apps/nextjs/src/app/[locale]/layout.tsx | 2 +- packages/widgets/package.json | 1 + .../widgets/src/beszel/_shared/stats-view.tsx | 4 +++- packages/widgets/src/custom-api/component.tsx | 7 ++++-- packages/widgets/src/demo-read-only.tsx | 9 ++++++++ packages/widgets/src/stats/component.tsx | 10 +++++---- packages/widgets/src/umami/umami-content.tsx | 3 ++- packages/widgets/src/umami/umami-top-list.tsx | 4 +++- packages/widgets/src/umami/umami-utils.ts | 5 ++++- 10 files changed, 48 insertions(+), 19 deletions(-) create mode 100644 packages/widgets/src/demo-read-only.tsx diff --git a/apps/nextjs/src/app/[locale]/_client-providers/trpc.tsx b/apps/nextjs/src/app/[locale]/_client-providers/trpc.tsx index ee611b313..a33ec44cf 100644 --- a/apps/nextjs/src/app/[locale]/_client-providers/trpc.tsx +++ b/apps/nextjs/src/app/[locale]/_client-providers/trpc.tsx @@ -34,6 +34,7 @@ import { createHeadersCallbackForSource, getTrpcUrl } from "@homarr/api/shared"; import { useSession } from "@homarr/auth/client"; import { env } from "@homarr/common/env"; import { showWarningNotification } from "@homarr/notifications"; +import { DemoReadOnlyProvider } from "@homarr/widgets/demo-read-only"; import { widgetQueryRefetchIntervals } from "@homarr/widgets/refetch-intervals"; import { useAuthContext } from "./session"; @@ -66,7 +67,7 @@ const constructWebsocketUrl = () => { return `${getWebSocketProtocol()}://${window.location.hostname}:${window.location.port}/websockets`; }; -export function TRPCReactProvider({ children }: PropsWithChildren) { +export function TRPCReactProvider({ children, demoReadOnly }: PropsWithChildren<{ demoReadOnly: boolean }>) { const { data: session } = useSession(); const { logoutRedirectInProgress } = useAuthContext(); const sessionQueryScope = getSessionQueryScope(session); @@ -81,7 +82,7 @@ export function TRPCReactProvider({ children }: PropsWithChildren) { currentScope={sessionQueryScope} onScopeChange={handleScopeChange} > - {children} + {children} ); } @@ -102,7 +103,7 @@ const clearLegacyDashboardPersistence = () => { } }; -const ScopedTRPCReactProvider = ({ children }: PropsWithChildren) => { +const ScopedTRPCReactProvider = ({ children, demoReadOnly }: PropsWithChildren<{ demoReadOnly: boolean }>) => { useEffect(clearLegacyDashboardPersistence, []); const wsClient = useMemo( () => @@ -150,21 +151,26 @@ const ScopedTRPCReactProvider = ({ children }: PropsWithChildren) => { }, }); client.setQueryDefaults([["widget"]], { - refetchInterval: queryCacheDefaultRefetchIntervalMs, + refetchInterval: demoReadOnly ? false : queryCacheDefaultRefetchIntervalMs, refetchOnWindowFocus: false, refetchOnReconnect: false, }); for (const queryDefaults of widgetQueryRefetchIntervals) { const policy: { refetchInterval?: number | false; staleTime?: number } = {}; - if (queryDefaults.intervalSeconds === null) policy.refetchInterval = false; - if (typeof queryDefaults.intervalSeconds === "number") { + if (demoReadOnly || queryDefaults.intervalSeconds === null) policy.refetchInterval = false; + else if (typeof queryDefaults.intervalSeconds === "number") { policy.refetchInterval = queryDefaults.intervalSeconds * 1000; } if ("staleTimeSeconds" in queryDefaults) policy.staleTime = queryDefaults.staleTimeSeconds * 1000; client.setQueryDefaults(queryDefaults.queryKey, policy); } for (const { queryKey, ...policy } of dashboardSupportingQueryPolicies) { - client.setQueryDefaults(queryKey, policy); + client.setQueryDefaults( + queryKey, + demoReadOnly + ? { ...policy, refetchInterval: false, refetchOnWindowFocus: false, refetchOnReconnect: false } + : policy, + ); } if (typeof window === "undefined") { client.getQueryCache().subscribe((event) => { @@ -239,7 +245,7 @@ const ScopedTRPCReactProvider = ({ children }: PropsWithChildren) => { }, }} > - {children} + {children} {process.env.NODE_ENV === "development" && } diff --git a/apps/nextjs/src/app/[locale]/layout.tsx b/apps/nextjs/src/app/[locale]/layout.tsx index 755d06b5a..8e4757d91 100644 --- a/apps/nextjs/src/app/[locale]/layout.tsx +++ b/apps/nextjs/src/app/[locale]/layout.tsx @@ -167,7 +167,7 @@ export default async function Layout(props: { /> ), (innerProps) => , - (innerProps) => , + (innerProps) => , (innerProps) => , (innerProps) => , (innerProps) => ( diff --git a/packages/widgets/package.json b/packages/widgets/package.json index 6ac7d70e9..251d9bf3a 100644 --- a/packages/widgets/package.json +++ b/packages/widgets/package.json @@ -19,6 +19,7 @@ "./custom-api/component": "./src/custom-api/component.tsx", "./custom-api/custom-jsx-display": "./src/custom-api/custom-jsx-display.tsx", "./custom-api/extract-display-data": "./src/custom-api/extract-display-data.ts", + "./demo-read-only": "./src/demo-read-only.tsx", "./assistant/context": "./src/assistant/context.tsx", "./catalog": "./src/catalog.ts", "./definition": "./src/definition.ts", diff --git a/packages/widgets/src/beszel/_shared/stats-view.tsx b/packages/widgets/src/beszel/_shared/stats-view.tsx index dfb5d7915..93ddaed28 100644 --- a/packages/widgets/src/beszel/_shared/stats-view.tsx +++ b/packages/widgets/src/beszel/_shared/stats-view.tsx @@ -28,6 +28,7 @@ import { import { createByteChartAxisFormatters, formatPercent } from "./format"; import { makeTooltipProps } from "./tooltip"; import { useLiveStats } from "./use-live-stats"; +import { useDemoReadOnly } from "../../demo-read-only"; const CHART_HEIGHT = 180; const MEBIBYTE = 1024 * 1024; @@ -97,9 +98,10 @@ export function BeszelStatsView({ ); const showDocker = visibility.dockerCpu || visibility.dockerMemory || visibility.dockerNetwork; const isLive = timePeriod === "1m"; + const demoReadOnly = useDemoReadOnly(); const historicalQuery = clientApi.widget.beszel.getSystemStats.useQuery( { integrationIds, systemId, timePeriod, includeDocker: showDocker }, - { refetchInterval: isLive ? false : 5_000, enabled: !isLive && systemId !== "" }, + { refetchInterval: isLive || demoReadOnly ? false : 5_000, enabled: !isLive && systemId !== "" }, ); const historicalData = isLive ? historicalQuery.data : getUsableWidgetQueryData(historicalQuery); const { data: liveData, error: liveError } = useLiveStats(integrationIds, systemId, isLive && systemId !== ""); diff --git a/packages/widgets/src/custom-api/component.tsx b/packages/widgets/src/custom-api/component.tsx index 0ce693ee3..8e5f104ea 100644 --- a/packages/widgets/src/custom-api/component.tsx +++ b/packages/widgets/src/custom-api/component.tsx @@ -11,6 +11,7 @@ import { Link, zoomCompensatedSize } from "@homarr/ui"; import { WidgetQueryLoadingState } from "../common/query-state-indicator"; import type { WidgetComponentProps } from "../definition"; +import { useDemoReadOnly } from "../demo-read-only"; import { isLegacyCustomWidgetMigrationError, isTerminalCustomWidgetDefinitionError } from "./migration-state"; const CustomJsxDisplay = dynamic(() => import("./custom-jsx-display"), { ssr: false }); @@ -23,6 +24,7 @@ export default function CustomApiWidget({ }: WidgetComponentProps<"customApi">) { const t = useI18n("widget.customApi"); const tCustomJsx = useI18n("widget.customApi.customJsx"); + const demoReadOnly = useDemoReadOnly(); const { data: session } = useSession(); const isAdmin = session?.user.permissions.includes("admin") ?? false; const definitionId = options.definitionId; @@ -33,8 +35,9 @@ export default function CustomApiWidget({ { enabled: Boolean(itemId) && Boolean(definitionId), refetchInterval: (currentQuery) => - isTerminalCustomWidgetDefinitionError(currentQuery.state.error) ? false : intervalMs, - retry: (failureCount, error) => !isTerminalCustomWidgetDefinitionError(error) && failureCount < 3, + demoReadOnly || isTerminalCustomWidgetDefinitionError(currentQuery.state.error) ? false : intervalMs, + retry: (failureCount, error) => + !demoReadOnly && !isTerminalCustomWidgetDefinitionError(error) && failureCount < 3, }, ); diff --git a/packages/widgets/src/demo-read-only.tsx b/packages/widgets/src/demo-read-only.tsx new file mode 100644 index 000000000..2e6470b70 --- /dev/null +++ b/packages/widgets/src/demo-read-only.tsx @@ -0,0 +1,9 @@ +"use client"; + +import { createContext, useContext } from "react"; + +const DemoReadOnlyContext = createContext(false); + +export const DemoReadOnlyProvider = DemoReadOnlyContext.Provider; + +export const useDemoReadOnly = () => useContext(DemoReadOnlyContext); diff --git a/packages/widgets/src/stats/component.tsx b/packages/widgets/src/stats/component.tsx index 79d2b07a3..9d5b5b9b7 100644 --- a/packages/widgets/src/stats/component.tsx +++ b/packages/widgets/src/stats/component.tsx @@ -22,6 +22,7 @@ import { clientApi } from "@homarr/api/client"; import { useI18n } from "@homarr/translation/client"; import type { WidgetComponentProps } from "../definition"; +import { useDemoReadOnly } from "../demo-read-only"; import { useWidgetRuntimeActions } from "../runtime-hooks"; import { statsEntriesSchema } from "./config"; import { StatsTable } from "./table"; @@ -41,6 +42,7 @@ export default function StatsWidget({ displayScale = 1, }: WidgetComponentProps<"stats">) { const board = useRequiredBoard(); + const demoReadOnly = useDemoReadOnly(); const advanced = displayMode === "advanced"; const t = useI18n("widget.stats"); const utils = clientApi.useUtils(); @@ -81,8 +83,8 @@ export default function StatsWidget({ { integrationId }, { staleTime: 30_000, - refetchInterval: 60_000, - refetchOnWindowFocus: true, + refetchInterval: demoReadOnly ? false : 60_000, + refetchOnWindowFocus: !demoReadOnly, refetchIntervalInBackground: false, retry: false, }, @@ -153,13 +155,13 @@ export default function StatsWidget({ }); useEffect(() => { - if (document.hidden) return; + if (demoReadOnly || document.hidden) return; for (const [index, integrationId] of visibleIds.entries()) { const snapshot = snapshots[index]; if (!snapshot?.data || snapshot.error) continue; if (snapshot.data.updatedAt === null && snapshot.data.retryAt <= Date.now()) void refresh(integrationId, false); } - }, [visibleIds, snapshots, refresh]); + }, [demoReadOnly, visibleIds, snapshots, refresh]); const tableEntries = advanced ? ids.flatMap((id) => { diff --git a/packages/widgets/src/umami/umami-content.tsx b/packages/widgets/src/umami/umami-content.tsx index 494a69980..f09fc87df 100644 --- a/packages/widgets/src/umami/umami-content.tsx +++ b/packages/widgets/src/umami/umami-content.tsx @@ -12,7 +12,7 @@ import classes from "./component.module.css"; import { UmamiEventsContent } from "./umami-events-content"; import { getUmamiLayout } from "./umami-layout"; import { UmamiTopPagesContent, UmamiTopReferrersContent } from "./umami-top-list"; -import { formatTimeFrameLabel, formatXLabel, umamiQueryOptions } from "./umami-utils"; +import { formatTimeFrameLabel, formatXLabel, useUmamiQueryOptions } from "./umami-utils"; import type { TimeFrame } from "./umami-utils"; import { getUsableWidgetQueryData, isInitialWidgetQueryPending } from "../common/query-state"; import { WidgetQueryLoadingState } from "../common/query-state-indicator"; @@ -48,6 +48,7 @@ export function UmamiContent({ }: UmamiContentProps) { const t = useI18n("widget.umami"); const locale = useCurrentIntlLocale(); + const umamiQueryOptions = useUmamiQueryOptions(); const tickColor = "var(--mantine-color-dimmed)"; const statsQuery = clientApi.widget.umami.getVisitorStats.useQuery( diff --git a/packages/widgets/src/umami/umami-top-list.tsx b/packages/widgets/src/umami/umami-top-list.tsx index ffb060134..e426558f3 100644 --- a/packages/widgets/src/umami/umami-top-list.tsx +++ b/packages/widgets/src/umami/umami-top-list.tsx @@ -7,7 +7,7 @@ import type { UmamiMetricItem } from "@homarr/integrations/types"; import { useCurrentIntlLocale, useI18n } from "@homarr/translation/client"; import classes from "./component.module.css"; -import { umamiQueryOptions } from "./umami-utils"; +import { useUmamiQueryOptions } from "./umami-utils"; import { getUsableWidgetQueryData } from "../common/query-state"; interface UmamiTopListProps { @@ -19,6 +19,7 @@ interface UmamiTopListProps { export function UmamiTopPagesContent({ integrationIds, websiteId, timeFrame, limit }: UmamiTopListProps) { const t = useI18n("widget.umami"); + const umamiQueryOptions = useUmamiQueryOptions(); const data = getUsableWidgetQueryData( clientApi.widget.umami.getTopPages.useQuery( @@ -31,6 +32,7 @@ export function UmamiTopPagesContent({ integrationIds, websiteId, timeFrame, lim export function UmamiTopReferrersContent({ integrationIds, websiteId, timeFrame, limit }: UmamiTopListProps) { const t = useI18n("widget.umami"); + const umamiQueryOptions = useUmamiQueryOptions(); const data = getUsableWidgetQueryData( clientApi.widget.umami.getTopReferrers.useQuery( diff --git a/packages/widgets/src/umami/umami-utils.ts b/packages/widgets/src/umami/umami-utils.ts index d87881f86..2d4a8d674 100644 --- a/packages/widgets/src/umami/umami-utils.ts +++ b/packages/widgets/src/umami/umami-utils.ts @@ -1,8 +1,11 @@ import type { useI18n } from "@homarr/translation/client"; +import { useDemoReadOnly } from "../demo-read-only"; import { timeFrameValues } from "./index"; -export const umamiQueryOptions = { refetchInterval: 60_000 } as const; +export const useUmamiQueryOptions = (): { refetchInterval: number | false } => ({ + refetchInterval: useDemoReadOnly() ? false : 60_000, +}); export const EVENT_COLORS = ["blue.5", "orange.5", "green.5", "red.5", "violet.5", "teal.5", "yellow.5", "pink.5"]; From 67196975f3e4189f5a3033d9848d04211733dbde Mon Sep 17 00:00:00 2001 From: Sobe Silvertree <69987691+Sobe1ac@users.noreply.github.com> Date: Mon, 5 Oct 2026 08:51:03 -0400 Subject: [PATCH 4/9] feat(sabnzbd): add archived history options to the Downloads widget (#6515) --- apps/docs/docs/widgets/downloads/index.ts | 14 +++ packages/api/src/router/widgets/downloads.ts | 16 ++- .../sabnzbd/sabnzbd-history.ts | 49 ++++++++ .../sabnzbd/sabnzbd-integration.ts | 27 +++- .../download-client/sabnzbd/sabnzbd-schema.ts | 2 + .../sabnzbd/test/sabnzbd-history.spec.ts | 115 ++++++++++++++++++ .../sabnzbd/test/sabnzbd-integration.spec.ts | 115 +++++++++++++++++- packages/request-handler/src/downloads.ts | 6 +- .../src/lib/request-handler.spec.ts | 24 ++++ packages/translation/src/lang/en.json | 8 ++ packages/widgets/src/downloads/component.tsx | 2 + packages/widgets/src/downloads/index.spec.ts | 38 ++++++ packages/widgets/src/downloads/index.ts | 19 +++ 13 files changed, 428 insertions(+), 7 deletions(-) create mode 100644 packages/integrations/src/download-client/sabnzbd/sabnzbd-history.ts create mode 100644 packages/integrations/src/download-client/sabnzbd/test/sabnzbd-history.spec.ts create mode 100644 packages/widgets/src/downloads/index.spec.ts diff --git a/apps/docs/docs/widgets/downloads/index.ts b/apps/docs/docs/widgets/downloads/index.ts index 7d5b10b34..ec638a179 100644 --- a/apps/docs/docs/widgets/downloads/index.ts +++ b/apps/docs/docs/widgets/downloads/index.ts @@ -98,6 +98,20 @@ export const downloadsWidget: WidgetDefinition = { values: "Any whole number from 1 upward", defaultValue: "50", }, + { + name: "Include archived SABnzbd history", + description: + "When enabled, the selected day window applies to finished normal and archived SABnzbd history. Queue and processing jobs remain visible.", + values: { type: "boolean" }, + defaultValue: "no", + }, + { + name: "Archived history window (days)", + description: + "At most 10,000 archived records are scanned. The item limit still controls how many rows are shown.", + values: "Any positive whole number of days", + defaultValue: "7", + }, ], }, }; diff --git a/packages/api/src/router/widgets/downloads.ts b/packages/api/src/router/widgets/downloads.ts index d7e0825fc..b6b448a2c 100644 --- a/packages/api/src/router/widgets/downloads.ts +++ b/packages/api/src/router/widgets/downloads.ts @@ -52,16 +52,26 @@ export const downloadsRouter = createTRPCRouter({ mcp: { enabled: true, description: - "Get active download jobs and queue status from connected download clients (qBittorrent, SABnzbd, Transmission, Deluge, NZBGet). REQUIRED: integrationIds (array of download client integration IDs from integration_all). OPTIONAL: limitPerIntegration (number, default 50)", + "Get active download jobs and queue status from connected download clients (qBittorrent, SABnzbd, Transmission, Deluge, NZBGet). REQUIRED: integrationIds (array of download client integration IDs from integration_all). OPTIONAL: limitPerIntegration (number, default 50). For SABnzbd, includeArchivedHistory includes archived jobs when true and defaults to false; historyWindowDays is a positive whole number of days and defaults to 7. Archived history is scanned in pages of 100, up to 100 pages.", }, }) .concat(createManyWidgetIntegrationMiddleware("query", "downloads")) - .input(z.object({ limitPerIntegration: z.number().default(50) })) + .input( + z.object({ + limitPerIntegration: z.number().default(50), + includeArchivedHistory: z.boolean().default(false), + historyWindowDays: z.number().int().min(1).default(7), + }), + ) .query(async ({ ctx, input }) => { return await settleIntegrationQueries<(typeof ctx.integrations)[number], DownloadClientQueryResult>( ctx.integrations, async (integration) => { - const innerHandler = downloadClientRequestHandler.handler(integration, { limit: input.limitPerIntegration }); + const innerHandler = downloadClientRequestHandler.handler(integration, { + limit: input.limitPerIntegration, + includeArchivedHistory: input.includeArchivedHistory, + historyWindowDays: input.historyWindowDays, + }); const { data, timestamp } = await innerHandler.getDataAsync(); return { integrationId: integration.id, diff --git a/packages/integrations/src/download-client/sabnzbd/sabnzbd-history.ts b/packages/integrations/src/download-client/sabnzbd/sabnzbd-history.ts new file mode 100644 index 000000000..2fb3c0c00 --- /dev/null +++ b/packages/integrations/src/download-client/sabnzbd/sabnzbd-history.ts @@ -0,0 +1,49 @@ +import type { SabnzbdHistorySlot } from "./sabnzbd-schema"; + +const SECONDS_PER_DAY = 24 * 60 * 60; +const ARCHIVED_HISTORY_PAGE_SIZE = 100; +const MAX_ARCHIVED_HISTORY_PAGES = 100; + +interface GetSabnzbdHistorySlotsInput { + activeSlots: SabnzbdHistorySlot[]; + historyWindowDays: number; + fetchPageAsync: (input: { start: number; limit: number }) => Promise; + now?: number; +} + +const isProcessingSlot = (slot: SabnzbdHistorySlot) => slot.status !== "Completed" && slot.status !== "Failed"; + +export async function getSabnzbdHistorySlotsAsync({ + activeSlots, + historyWindowDays, + fetchPageAsync, + now = Date.now(), +}: GetSabnzbdHistorySlotsInput): Promise { + const cutoff = Math.floor(now / 1000) - historyWindowDays * SECONDS_PER_DAY; + const archivedSlots: SabnzbdHistorySlot[] = []; + + for (let page = 0; page < MAX_ARCHIVED_HISTORY_PAGES; page += 1) { + const slots = await fetchPageAsync({ + start: page * ARCHIVED_HISTORY_PAGE_SIZE, + limit: ARCHIVED_HISTORY_PAGE_SIZE, + }); + archivedSlots.push(...slots); + + if (slots.length < ARCHIVED_HISTORY_PAGE_SIZE || slots.every((slot) => slot.completed < cutoff)) { + break; + } + } + + const seenIds = new Set(); + + return [ + ...activeSlots.filter(isProcessingSlot), + ...[...activeSlots, ...archivedSlots] + .filter((slot) => !isProcessingSlot(slot) && slot.completed >= cutoff) + .toSorted((first, second) => second.completed - first.completed), + ].filter((slot) => { + if (seenIds.has(slot.nzo_id)) return false; + seenIds.add(slot.nzo_id); + return true; + }); +} diff --git a/packages/integrations/src/download-client/sabnzbd/sabnzbd-integration.ts b/packages/integrations/src/download-client/sabnzbd/sabnzbd-integration.ts index e8f4d58a5..5a7b0ac49 100644 --- a/packages/integrations/src/download-client/sabnzbd/sabnzbd-integration.ts +++ b/packages/integrations/src/download-client/sabnzbd/sabnzbd-integration.ts @@ -12,6 +12,7 @@ import type { DownloadClientJobsAndStatus } from "../../interfaces/downloads/dow import type { IDownloadClientIntegration } from "../../interfaces/downloads/download-client-integration"; import type { DownloadClientItem } from "../../interfaces/downloads/download-client-items"; import type { DownloadClientStatus } from "../../interfaces/downloads/download-client-status"; +import { getSabnzbdHistorySlotsAsync } from "./sabnzbd-history"; import { historySchema, queueSchema } from "./sabnzbd-schema"; dayjs.extend(duration); @@ -23,7 +24,11 @@ export class SabnzbdIntegration extends Integration implements IDownloadClientIn return { success: true }; } - public async getClientJobsAndStatusAsync(input: { limit: number }): Promise { + public async getClientJobsAndStatusAsync(input: { + limit: number; + includeArchivedHistory?: boolean; + historyWindowDays?: number; + }): Promise { const type = "usenet"; const [queueResult, historyResult] = await Promise.all([ this.sabNzbApiCallAsync("queue", { limit: input.limit.toString() }).then((result) => @@ -35,6 +40,24 @@ export class SabnzbdIntegration extends Integration implements IDownloadClientIn ]); const { queue } = queueResult; const { history } = historyResult; + let historySlots = history.slots; + + if (input.includeArchivedHistory) { + historySlots = await getSabnzbdHistorySlotsAsync({ + activeSlots: history.slots, + historyWindowDays: input.historyWindowDays ?? 7, + fetchPageAsync: async ({ start, limit }) => { + const { history: archivedHistory } = await historySchema.parseAsync( + await this.sabNzbApiCallAsync("history", { + archive: "1", + start: start.toString(), + limit: limit.toString(), + }), + ); + return archivedHistory.slots; + }, + }); + } const status: DownloadClientStatus = { paused: queue.paused, // SABnzbd's legacy kbpersec field is kibibytes per second; normalize it to bytes per second. @@ -68,7 +91,7 @@ export class SabnzbdIntegration extends Integration implements IDownloadClientIn }; }) .concat( - history.slots.map((slot, index): DownloadClientItem => { + historySlots.map((slot, index): DownloadClientItem => { const state = SabnzbdIntegration.getUsenetHistoryState(slot.status); return { type, diff --git a/packages/integrations/src/download-client/sabnzbd/sabnzbd-schema.ts b/packages/integrations/src/download-client/sabnzbd/sabnzbd-schema.ts index c1bc9a249..c90cdd050 100644 --- a/packages/integrations/src/download-client/sabnzbd/sabnzbd-schema.ts +++ b/packages/integrations/src/download-client/sabnzbd/sabnzbd-schema.ts @@ -35,3 +35,5 @@ export const historySchema = z.object({ ), }), }); + +export type SabnzbdHistorySlot = z.infer["history"]["slots"][number]; diff --git a/packages/integrations/src/download-client/sabnzbd/test/sabnzbd-history.spec.ts b/packages/integrations/src/download-client/sabnzbd/test/sabnzbd-history.spec.ts new file mode 100644 index 000000000..0679a533f --- /dev/null +++ b/packages/integrations/src/download-client/sabnzbd/test/sabnzbd-history.spec.ts @@ -0,0 +1,115 @@ +import { describe, expect, test, vi } from "vitest"; + +import type { SabnzbdHistorySlot } from "../sabnzbd-schema"; +import { getSabnzbdHistorySlotsAsync } from "../sabnzbd-history"; + +const NOW = Date.UTC(2026, 7, 10); + +function createSlot(id: string, daysAgo: number): SabnzbdHistorySlot { + return { + category: "test", + download_time: 60, + status: "Completed", + completed: Math.floor(NOW / 1000) - daysAgo * 24 * 60 * 60, + nzo_id: id, + postproc_time: 30, + name: id, + bytes: 1000, + }; +} + +describe("getSabnzbdHistorySlotsAsync", () => { + test("merges active and archived history, filters by window, sorts newest first, and deduplicates", async () => { + const result = await getSabnzbdHistorySlotsAsync({ + activeSlots: [createSlot("active", 1), createSlot("duplicate", 3)], + historyWindowDays: 10, + now: NOW, + fetchPageAsync: vi + .fn() + .mockResolvedValue([createSlot("archived", 2), createSlot("duplicate", 3), createSlot("expired", 11)]), + }); + + expect(result.map((slot) => slot.nzo_id)).toEqual(["active", "archived", "duplicate"]); + }); + + test.each([1, 2, 7, 14, 28])("includes the exact %i-day cutoff", async (historyWindowDays) => { + const result = await getSabnzbdHistorySlotsAsync({ + activeSlots: [], + historyWindowDays, + now: NOW, + fetchPageAsync: vi + .fn() + .mockResolvedValue([createSlot("inside", historyWindowDays), createSlot("outside", historyWindowDays + 1)]), + }); + + expect(result.map((slot) => slot.nzo_id)).toEqual(["inside"]); + }); + + test("requests another page when the archive page is full", async () => { + const firstPage = Array.from({ length: 100 }, (_, index) => createSlot(`page-1-${index}`, 1)); + const fetchPageAsync = vi + .fn() + .mockResolvedValueOnce(firstPage) + .mockResolvedValueOnce([createSlot("page-2", 2)]); + + await getSabnzbdHistorySlotsAsync({ + activeSlots: [], + historyWindowDays: 10, + now: NOW, + fetchPageAsync, + }); + + expect(fetchPageAsync).toHaveBeenNthCalledWith(1, { start: 0, limit: 100 }); + expect(fetchPageAsync).toHaveBeenNthCalledWith(2, { start: 100, limit: 100 }); + expect(fetchPageAsync).toHaveBeenCalledTimes(2); + }); + + test("stops after a full page that is entirely outside the selected window", async () => { + const expiredPage = Array.from({ length: 100 }, (_, index) => createSlot(`expired-${index}`, 11)); + const fetchPageAsync = vi.fn().mockResolvedValue(expiredPage); + + await getSabnzbdHistorySlotsAsync({ + activeSlots: [], + historyWindowDays: 10, + now: NOW, + fetchPageAsync, + }); + + expect(fetchPageAsync).toHaveBeenCalledTimes(1); + }); + + test("stops after a partial archive page", async () => { + const fetchPageAsync = vi.fn().mockResolvedValue([createSlot("archived", 1)]); + + await getSabnzbdHistorySlotsAsync({ + activeSlots: [], + historyWindowDays: 10, + now: NOW, + fetchPageAsync, + }); + + expect(fetchPageAsync).toHaveBeenCalledTimes(1); + }); + + test("keeps processing jobs ahead of finished history even without a completion date", async () => { + const processingSlot = { ...createSlot("processing", 0), status: "Extracting", completed: 0 }; + const result = await getSabnzbdHistorySlotsAsync({ + activeSlots: [processingSlot, createSlot("expired", 8)], + historyWindowDays: 7, + now: NOW, + fetchPageAsync: vi.fn().mockResolvedValue([createSlot("archived", 1)]), + }); + + expect(result.map((slot) => slot.nzo_id)).toEqual(["processing", "archived"]); + }); + + test("bounds requests when the server keeps returning a full recent page", async () => { + const recentPage = Array.from({ length: 100 }, (_, index) => createSlot(`recent-${index}`, 1)); + const fetchPageAsync = vi.fn().mockResolvedValue(recentPage); + + await getSabnzbdHistorySlotsAsync({ activeSlots: [], historyWindowDays: 7, now: NOW, fetchPageAsync }); + + expect(fetchPageAsync).toHaveBeenCalledTimes(100); + expect(fetchPageAsync).toHaveBeenLastCalledWith({ start: 9900, limit: 100 }); + }); +}); diff --git a/packages/integrations/src/download-client/sabnzbd/test/sabnzbd-integration.spec.ts b/packages/integrations/src/download-client/sabnzbd/test/sabnzbd-integration.spec.ts index 9cde2689a..8ec2b2a3a 100644 --- a/packages/integrations/src/download-client/sabnzbd/test/sabnzbd-integration.spec.ts +++ b/packages/integrations/src/download-client/sabnzbd/test/sabnzbd-integration.spec.ts @@ -1,7 +1,7 @@ // @vitest-environment node import { Response } from "undici"; -import { beforeEach, describe, expect, test, vi } from "vitest"; +import { afterEach, beforeEach, describe, expect, test, vi } from "vitest"; vi.hoisted(() => { process.env.SKIP_ENV_VALIDATION = "true"; @@ -12,6 +12,7 @@ import { fetchWithTrustedCertificatesAsync } from "@homarr/core/infrastructure/h import type { IntegrationSecret } from "../../../base/types"; import { SabnzbdIntegration } from "../sabnzbd-integration"; +import type { SabnzbdHistorySlot } from "../sabnzbd-schema"; vi.mock("@homarr/core/infrastructure/http", () => ({ fetchWithTrustedCertificatesAsync: vi.fn(), @@ -19,6 +20,17 @@ vi.mock("@homarr/core/infrastructure/http", () => ({ const mockFetch = vi.mocked(fetchWithTrustedCertificatesAsync); const secrets: IntegrationSecret[] = [{ kind: "apiKey", value: "test-api-key" }]; +const NOW = Date.UTC(2026, 9, 4); +const createHistorySlot = (id: string, daysAgo: number): SabnzbdHistorySlot => ({ + category: "test", + download_time: 60, + status: "Completed", + completed: Math.floor(NOW / 1000) - daysAgo * 24 * 60 * 60, + nzo_id: id, + postproc_time: 30, + name: id, + bytes: 1000, +}); const createIntegration = () => new SabnzbdIntegration({ @@ -34,6 +46,10 @@ describe("SabnzbdIntegration.getClientJobsAndStatusAsync", () => { mockFetch.mockReset(); }); + afterEach(() => { + vi.useRealTimers(); + }); + test("starts queue and history requests together", async () => { const releaseRequests = Promise.withResolvers(); const startedModes: string[] = []; @@ -68,4 +84,101 @@ describe("SabnzbdIntegration.getClientJobsAndStatusAsync", () => { items: [], }); }); + + test.each([undefined, false])( + "keeps normal history when archive is disabled (%s)", + async (includeArchivedHistory) => { + mockFetch.mockImplementation(async (url) => { + const params = new URL(String(url)).searchParams; + expect(params.has("archive")).toBe(false); + const result = + params.get("mode") === "queue" + ? { queue: { paused: false, kbpersec: "0", slots: [] } } + : { history: { slots: [createHistorySlot("old-normal", 30)] } }; + return new Response(JSON.stringify(result)); + }); + + const result = await createIntegration().getClientJobsAndStatusAsync({ + limit: 10, + includeArchivedHistory, + historyWindowDays: 1, + }); + + expect(result.items.map((item) => item.id)).toEqual(["old-normal"]); + expect(mockFetch).toHaveBeenCalledTimes(2); + }, + ); + + test("merges archived history without displacing active jobs and applies the row limit", async () => { + vi.useFakeTimers({ toFake: ["Date"] }); + vi.setSystemTime(NOW); + mockFetch.mockImplementation(async (url) => { + const params = new URL(String(url)).searchParams; + let result; + if (params.get("mode") === "queue") { + result = { + queue: { + paused: false, + kbpersec: "1", + slots: [ + { + status: "Downloading", + index: 0, + mb: "1", + filename: "queue", + cat: "test", + timeleft: "0:00:10", + percentage: "50", + nzo_id: "queue", + }, + ], + }, + }; + } else if (params.get("archive") === "1") { + expect(params.get("start")).toBe("0"); + expect(params.get("limit")).toBe("100"); + result = { history: { slots: [createHistorySlot("archived", 3), createHistorySlot("duplicate", 2)] } }; + } else { + result = { + history: { + slots: [ + { ...createHistorySlot("processing", 0), status: "Extracting", completed: 0 }, + createHistorySlot("normal", 1), + createHistorySlot("duplicate", 2), + createHistorySlot("expired", 8), + ], + }, + }; + } + return new Response(JSON.stringify(result)); + }); + + const integration = createIntegration(); + const input = { limit: 10, includeArchivedHistory: true, historyWindowDays: 7 }; + const result = await integration.getClientJobsAndStatusAsync(input); + expect(result.items.map((item) => item.id)).toEqual(["queue", "processing", "normal", "duplicate", "archived"]); + expect(result.status.rates.down).toBe(1024); + + const limited = await integration.getClientJobsAndStatusAsync({ ...input, limit: 3 }); + expect(limited.items.map((item) => item.id)).toEqual(["queue", "processing", "normal"]); + }); + + test("rejects malformed archive timestamps through the existing history schema", async () => { + mockFetch.mockImplementation(async (url) => { + const params = new URL(String(url)).searchParams; + const result = + params.get("mode") === "queue" + ? { queue: { paused: false, kbpersec: "0", slots: [] } } + : { + history: { + slots: params.has("archive") ? [{ ...createHistorySlot("invalid", 0), completed: "bad" }] : [], + }, + }; + return new Response(JSON.stringify(result)); + }); + + await expect( + createIntegration().getClientJobsAndStatusAsync({ limit: 10, includeArchivedHistory: true }), + ).rejects.toThrow(); + }); }); diff --git a/packages/request-handler/src/downloads.ts b/packages/request-handler/src/downloads.ts index 1c2b9b900..baf83b784 100644 --- a/packages/request-handler/src/downloads.ts +++ b/packages/request-handler/src/downloads.ts @@ -7,7 +7,11 @@ import { createIntegrationRequestHandler } from "./lib/integration-request-handl export const downloadClientRequestHandler = createIntegrationRequestHandler< DownloadClientJobsAndStatus, IntegrationKindByCategory<"downloadClient">, - { limit: number } + { + limit: number; + includeArchivedHistory: boolean; + historyWindowDays: number; + } >({ cacheNamespace: "downloads:jobs-and-status", cacheTtlMs: 10 * 1000, diff --git a/packages/request-handler/src/lib/request-handler.spec.ts b/packages/request-handler/src/lib/request-handler.spec.ts index ea6e2801a..e37e02173 100644 --- a/packages/request-handler/src/lib/request-handler.spec.ts +++ b/packages/request-handler/src/lib/request-handler.spec.ts @@ -322,6 +322,30 @@ describe("createRequestHandler", () => { }); describe("createIntegrationRequestHandler", () => { + it("keeps SABnzbd history windows and archive modes in separate cache entries", async () => { + let calls = 0; + const handler = createIntegrationRequestHandler< + number, + "sabNzbd", + { limit: number; includeArchivedHistory: boolean; historyWindowDays: number } + >({ requestAsync: async () => ++calls }); + const integration = { ...createIntegration("test-secret"), kind: "sabNzbd" as const }; + const input = { limit: 50, includeArchivedHistory: true, historyWindowDays: 7 }; + + await expect(handler.handler(integration, input).getDataAsync()).resolves.toMatchObject({ data: 1 }); + await expect(handler.handler(integration, input).getDataAsync()).resolves.toMatchObject({ data: 1 }); + await expect( + handler.handler(integration, { ...input, historyWindowDays: 14 }).getDataAsync(), + ).resolves.toMatchObject({ data: 2 }); + await expect( + handler.handler(integration, { ...input, includeArchivedHistory: false }).getDataAsync(), + ).resolves.toMatchObject({ data: 3 }); + await expect( + handler.handler(integration, { ...input, historyWindowDays: 14 }).getDataAsync(), + ).resolves.toMatchObject({ data: 2 }); + expect(calls).toBe(3); + }); + it("does not deduplicate requests across rotated integration secrets", async () => { let calls = 0; const request = deferred(); diff --git a/packages/translation/src/lang/en.json b/packages/translation/src/lang/en.json index a3d6a30d6..64de699b7 100644 --- a/packages/translation/src/lang/en.json +++ b/packages/translation/src/lang/en.json @@ -4137,6 +4137,14 @@ "showCompletedHttp": { "label": "Show Miscellaneous entries marked as completed" }, + "includeArchivedHistory": { + "label": "Include archived SABnzbd history", + "description": "Show jobs moved to Archive." + }, + "historyWindowDays": { + "label": "Archived history window (days)", + "description": "Limit finished SABnzbd history to this many days. Increase the item limit to show more results." + }, "activeTorrentThreshold": { "label": "Hide completed torrent under this threshold" }, diff --git a/packages/widgets/src/downloads/component.tsx b/packages/widgets/src/downloads/component.tsx index e6ac70486..4920761f2 100644 --- a/packages/widgets/src/downloads/component.tsx +++ b/packages/widgets/src/downloads/component.tsx @@ -319,6 +319,8 @@ export default function DownloadClientsWidget({ const downloadsQuery = clientApi.widget.downloads.getJobsAndStatuses.useQuery({ integrationIds, limitPerIntegration: options.limitPerIntegration, + includeArchivedHistory: options.includeArchivedHistory, + historyWindowDays: options.historyWindowDays, }); const currentItems = getUsableWidgetQueryData(downloadsQuery); const availableItems = useMemo(() => currentItems?.filter((item) => item.data !== null) ?? [], [currentItems]); diff --git a/packages/widgets/src/downloads/index.spec.ts b/packages/widgets/src/downloads/index.spec.ts new file mode 100644 index 000000000..3dd8383b7 --- /dev/null +++ b/packages/widgets/src/downloads/index.spec.ts @@ -0,0 +1,38 @@ +import { describe, expect, test } from "vitest"; + +import { definition } from "."; + +describe("Downloads widget history options", () => { + test.each([1, 7, 14, 28])("accepts an arbitrary %i-day window", (days) => { + const options = definition.createOptions(); + expect(options.historyWindowDays.validate.safeParse(days).success).toBe(true); + }); + + test.each([0, -1, 1.5, "7"])("rejects an invalid day window %s", (days) => { + const options = definition.createOptions(); + expect(options.historyWindowDays.validate.safeParse(days).success).toBe(false); + }); + + test("only matches results for its own archive settings", () => { + const input = { + integrationIds: ["sabnzbd-1"], + limitPerIntegration: 50, + includeArchivedHistory: true, + historyWindowDays: 7, + }; + const scope = { + itemId: "widget-1", + boardId: "board-1", + integrationIds: input.integrationIds, + options: input, + runtimeQueries: [], + }; + const query = { path: ["widget", "downloads", "getJobsAndStatuses"], input }; + + expect(definition.queryMatcher(query, scope)).toBe(true); + expect(definition.queryMatcher({ ...query, input: { ...input, historyWindowDays: 14 } }, scope)).toBe(false); + expect(definition.queryMatcher({ ...query, input: { ...input, includeArchivedHistory: false } }, scope)).toBe( + false, + ); + }); +}); diff --git a/packages/widgets/src/downloads/index.ts b/packages/widgets/src/downloads/index.ts index 328cf51b4..f8e2f5463 100644 --- a/packages/widgets/src/downloads/index.ts +++ b/packages/widgets/src/downloads/index.ts @@ -30,6 +30,8 @@ export const { definition, componentLoader } = createWidgetDefinition("downloads widgetQueryInputMatches(input, { integrationIds: scope.integrationIds, limitPerIntegration: scope.options.limitPerIntegration, + includeArchivedHistory: scope.options.includeArchivedHistory, + historyWindowDays: scope.options.historyWindowDays, }), refetchInterval: 10, createOptions() { @@ -62,6 +64,16 @@ export const { definition, componentLoader } = createWidgetDefinition("downloads showCompletedHttp: factory.switch({ defaultValue: true, }), + includeArchivedHistory: factory.switch({ + defaultValue: false, + withDescription: true, + }), + historyWindowDays: factory.number({ + defaultValue: 7, + validate: z.number().int().min(1), + step: 1, + withDescription: true, + }), activeTorrentThreshold: factory.number({ validate: z.number().min(0), defaultValue: 0, @@ -89,6 +101,13 @@ export const { definition, componentLoader } = createWidgetDefinition("downloads { columnOrder: { shouldHide: () => true }, columnWidths: { shouldHide: () => true }, + includeArchivedHistory: { + shouldHide: (_, integrationKinds) => !integrationKinds.includes("sabNzbd"), + }, + historyWindowDays: { + shouldHide: ({ includeArchivedHistory }, integrationKinds) => + !integrationKinds.includes("sabNzbd") || !includeArchivedHistory, + }, showCompletedUsenet: { shouldHide: (_, integrationKinds) => !getIntegrationKindsByCategory("usenet").some((kinds) => integrationKinds.includes(kinds)), From 08412d5f1dc3a81816931be115ea2ad648216f1e Mon Sep 17 00:00:00 2001 From: "homarr-crowdin[bot]" <190541745+homarr-crowdin[bot]@users.noreply.github.com> Date: Mon, 5 Oct 2026 14:51:20 +0200 Subject: [PATCH 5/9] chore(lang): updated translations from crowdin (#6986) --- packages/translation/src/lang/ca.json | 5248 ++++++++++++++++------ packages/translation/src/lang/cn.json | 4766 ++++++++++++++------ packages/translation/src/lang/cr.json | 4796 ++++++++++++++------ packages/translation/src/lang/cs.json | 5154 +++++++++++++++------ packages/translation/src/lang/da.json | 4724 ++++++++++++++----- packages/translation/src/lang/de-CH.json | 4722 ++++++++++++++----- packages/translation/src/lang/de.json | 4708 +++++++++++++------ packages/translation/src/lang/el.json | 5158 +++++++++++++++------ packages/translation/src/lang/en-gb.json | 5193 +++++++++++++++------ packages/translation/src/lang/es.json | 4738 ++++++++++++++----- packages/translation/src/lang/et.json | 5158 +++++++++++++++------ packages/translation/src/lang/fi.json | 5204 +++++++++++++++------ packages/translation/src/lang/fr.json | 5125 +++++++++++++++------ packages/translation/src/lang/he.json | 4742 ++++++++++++++----- packages/translation/src/lang/hr.json | 5154 +++++++++++++++------ packages/translation/src/lang/hu.json | 5152 +++++++++++++++------ packages/translation/src/lang/it.json | 4696 ++++++++++++++----- packages/translation/src/lang/ja.json | 4742 ++++++++++++++----- packages/translation/src/lang/ko.json | 5142 +++++++++++++++------ packages/translation/src/lang/lt.json | 5158 +++++++++++++++------ packages/translation/src/lang/lv.json | 5156 +++++++++++++++------ packages/translation/src/lang/nl.json | 4722 ++++++++++++++----- packages/translation/src/lang/no.json | 4722 ++++++++++++++----- packages/translation/src/lang/pl.json | 4698 ++++++++++++++----- packages/translation/src/lang/pt-br.json | 5138 +++++++++++++++------ packages/translation/src/lang/pt.json | 5154 +++++++++++++++------ packages/translation/src/lang/ro.json | 4718 ++++++++++++++----- packages/translation/src/lang/ru.json | 4720 ++++++++++++++----- packages/translation/src/lang/sk.json | 5158 +++++++++++++++------ packages/translation/src/lang/sl.json | 4722 ++++++++++++++----- packages/translation/src/lang/sv.json | 4722 ++++++++++++++----- packages/translation/src/lang/tr.json | 5152 +++++++++++++++------ packages/translation/src/lang/uk.json | 5148 +++++++++++++++------ packages/translation/src/lang/vi.json | 4722 ++++++++++++++----- packages/translation/src/lang/zh.json | 5084 +++++++++++++++------ 35 files changed, 126069 insertions(+), 47147 deletions(-) diff --git a/packages/translation/src/lang/ca.json b/packages/translation/src/lang/ca.json index b0d838fea..7f3a73512 100644 --- a/packages/translation/src/lang/ca.json +++ b/packages/translation/src/lang/ca.json @@ -1,156 +1,246 @@ { "init": { - "step": { - "start": { - "title": "Us donem la benvinguda a Homarr", - "subtitle": "Comencem configurant la vostra instància de Homarr.", - "description": "Per començar, seleccioneu com voleu configurar la vostra instància de Homarr.", - "action": { - "scratch": "Comença des de zero", - "importOldmarr": "Importa des d'una versió de Homarr anterior a 1.0", - "restoreSqlite": "Restaura des d'una còpia de seguretat SQLite", - "restoreSqliteDescription": "Puja una còpia de seguretat completa de la base de dades SQLite d'una instància anterior d'Homarr. Això restaurarà tots els taulers, usuaris, aplicacions, integracions i configuracions.", - "backToOptions": "← Torna a les opcions de configuració" + "studio": { + "navigationLabel": "Seccions d'inici", + "back": "Enrere", + "buildBoard": "Crea el meu tauler", + "common": { + "unknownError": "Alguna cosa ha fallat. Les vostres opcions encara són aquí; torneu-ho a provar." + }, + "claim": { + "checking": "Protegint aquesta sessió d'inici…", + "checkingTitle": "Preparant la configuració segura", + "lockedTitle": "La configuració està oberta en un altre navegador", + "lockedDescription": "Continueu-hi o espereu que caduqui la seva sessió segura de primera execució abans de tornar-ho a provar.", + "signInTitle": "Cal iniciar sessió com a administrador", + "signInDescription": "Ja existeix un administrador. Inicieu sessió per reprendre la configuració sense exposar les credencials ni l'accés als serveis.", + "signIn": "Inicia la sessió i reprèn-la", + "errorTitle": "No s'ha pogut protegir la configuració", + "errorDescription": "Torneu a carregar la pàgina per tornar a provar la sessió segura de primera execució." + }, + "navigation": { + "essentials": "Imprescindibles", + "discover": "Descobreix", + "connect": "Connecta", + "board": "Tauler", + "extend": "Amplia", + "review": "Revisa" + }, + "welcome": { + "title": "Benvinguts a casa.", + "description": "Benvinguts a Homarr v{version}. Us guiarem pels aspectes essencials i us ajudarem a crear el vostre primer tauler.", + "start": "Comença", + "restore": "Restaura la còpia de seguretat", + "restoreTitle": "Restaura des d'una còpia de seguretat", + "restoreDescription": "Una còpia de seguretat completa de SQLite restaura els taulers, les persones, les aplicacions, les integracions i la configuració. Homarr la valida abans de substituir res.", + "errorTitle": "No s'ha pogut iniciar la configuració", + "errorDescription": "Les vostres opcions de configuració encara són aquí. Torneu-ho a provar o torneu a carregar la pàgina si el problema continua." + }, + "account": { + "title": "Crea el teu administrador", + "description": "Especifiqueu les credencials del vostre usuari administrador.", + "username": "Nom d'usuari de l'administrador", + "passwordHint": "Només cal el mínim de 8 caràcters. Les altres comprovacions de robustesa de la contrasenya són suggeriments.", + "create": "Crea l'administrador", + "errorTitle": "No s'ha pogut crear l'administrador", + "recoveryTitle": "S'ha creat el compte d'administrador", + "recoveryDescription": "L'inici de sessió automàtic no s'ha completat. Inicieu sessió amb les credencials de l'administrador que acabeu de crear per continuar la configuració.", + "recoveryAction": "Inicia la sessió i continua", + "unknownError": "No s'ha pogut crear l'administrador." + }, + "externalGroup": { + "title": "Connecta el teu grup d'administradors", + "description": "Utilitzeu el nom exacte del grup enviat per LDAP o OIDC. Els membres d'aquest grup obtindran accés d'administrador.", + "name": "Grup d'administradors extern", + "nameDescription": "Distingeix entre majúscules i minúscules i ha de coincidir amb el vostre proveïdor d'identitat.", + "continue": "Desa el grup i continua", + "errorTitle": "No s'ha pogut desar el grup", + "unknownError": "No s'ha pogut desar el grup d'administradors." + }, + "essentials": { + "title": "Comença amb els valors predeterminats habituals", + "description": "Establiu l'idioma i l'aparença que tothom veurà primer i, després, indiqueu a Homarr el patró d'adreça que utilitzen els vostres serveis.", + "language": "Idioma predeterminat", + "theme": "Tema predeterminat", + "themeAuto": "Sistema", + "themeLight": "Clar", + "themeDark": "Fosc", + "serverOriginHelp": "Homarr utilitza aquesta adreça per emplenar prèviament els URL dels serveis detectats. Encara podeu editar cada servei individualment.", + "serverDescription": "És una drecera, no una restricció. Tots els serveis detectats es poden editar.", + "serverOrigin": "Domini, IP o camí del proxy invers", + "serverOriginDescription": "Exemples: home.lan, 192.168.1.10 o https://home.example.com/services. Trieu com s'afegirà cada servei a continuació.", + "analytics": "Comparteix analítiques anònimes del producte", + "analyticsDescription": "Ajuda Homarr a millorar la fiabilitat de les funcions. No s'envien credencials dels serveis ni contingut del tauler." + }, + "discover": { + "title": "Descobreix a què pot accedir realment aquesta instal·lació", + "description": "Homarr comprova les capacitats disponibles. La manca d'un sòcol de Docker o d'un context de Kubernetes no bloqueja mai una configuració manual.", + "database": "Base de dades", + "docker": "Sòcols de Docker i compatibles", + "kubernetes": "Kubernetes", + "assistantWorkshop": "Assistent i Workshop", + "found": "S'han trobat {integrations} integracions i {apps} aplicacions addicionals", + "retryKubernetes": "Torna a comprovar Kubernetes", + "retryWorkshop": "Torna a comprovar Workshop", + "unknownVersion": "versió desconeguda", + "kubernetesAvailable": "Connectat a Kubernetes {version}", + "kubernetesDisabled": "No està habilitat; continua amb Docker o amb serveis manuals", + "kubernetesUnavailable": "Kubernetes està habilitat, però no s'hi pot accedir des d'aquest procés d'Homarr", + "workshopAvailable": "Es pot accedir al Workshop comunitari i als serveis de l'Assistent allotjats", + "workshopUnavailable": "Els proveïdors locals i personalitzats de l'Assistent continuen disponibles", + "partialTitle": "No s'han pogut escanejar algunes fonts", + "partialDescription": "Es conserven els resultats dels amfitrions accessibles. Comproveu els permisos del sòcol o afegiu els serveis manualment a la secció següent.", + "status": { + "checking": "Comprovant la disponibilitat…", + "available": "Disponible", + "partial": "Parcialment disponible", + "empty": "Accessible, sense serveis en execució coincidents", + "disabled": "Desactivat per la configuració del servidor", + "unavailable": "No disponible des d'aquest procés d'Homarr" } }, - "import": { - "title": "Importa dades", - "subtitle": "Pot importar dades des d'una instància de Homarr existent.", - "dropzone": { - "title": "Arrossegueu el fitxer zip aquí o feu clic per navegar", - "description": "El fitxer zip carregat es processarà i podreu seleccionar què voleu importar" + "connect": { + "title": "Connecta el que fa útil el tauler", + "description": "Seleccioneu diversos serveis alhora. Les etiquetes de Docker tenen prioritat, la coincidència d'imatges omple els buits i podeu revisar tots els URL i les credencials.", + "discoveredIntegrations": "Instàncies d'integració detectades ({count})", + "detectedIntegrationLabel": "Importa {name}, detectat com a {kind}", + "detectedAppLabel": "Importa l'aplicació detectada {name}", + "otherIntegrations": "Afegeix una altra integració", + "configureIntegrations": "Configura les integracions", + "discoveredApps": "Aplicacions detectades ({count})", + "appAddressRequired": "Afegeix una adreça per a {name} o elimina'l de la selecció.", + "empty": "No s'ha seleccionat cap integració. Homarr crearà igualment un tauler inicial útil amb ginys generals.", + "dockerSource": "Docker", + "manualSource": "Manual", + "url": "URL del servei", + "noCredentials": "Sense credencials", + "noCredentialsDescription": "Aquesta integració no necessita credencials.", + "credentialMethod": "Mètode de credencials", + "getApiKey": "Obre la configuració de la clau d'API d'aquest servei", + "openGuide": "Obre la guia de configuració d'Homarr per a aquest servei", + "testConnection": "Prova la connexió", + "testSuccess": "La connexió funciona", + "testSuccessDescription": "Homarr s'ha connectat amb l'adreça i les credencials actuals.", + "testError": "La connexió ha fallat", + "testErrorDescription": "Comproveu l'adreça i les credencials del servei i torneu-ho a provar.", + "needsConfiguration": "Requereix configuració", + "tested": "Connexió provada", + "testFailed": "Error en provar la connexió", + "incompleteConfirmation": "Les integracions inacabades s'ometran. Voleu continuar sense aquestes integracions?" + }, + "board": { + "title": "Dona forma al tauler abans de crear-lo", + "description": "Homarr crea disposicions protegides per a mòbils i bàsiques, i després col·loca les aplicacions i els ginys compatibles dels serveis que heu seleccionat.", + "target": "Tauler que es configurarà", + "targetDescription": "Trieu el tauler existent exacte que aquesta configuració ha d'actualitzar.", + "targetPlaceholder": "Seleccioneu un tauler", + "targetRequired": "Seleccioneu el tauler que voleu configurar abans de continuar.", + "name": "Nom del tauler", + "nameDescription": "S'utilitza a l'URL del tauler; només lletres, números, guions i guions baixos.", + "nameRequired": "Introduïu un nom del tauler abans de continuar.", + "primaryColor": "Color primari", + "secondaryColor": "Color secundari", + "resetColors": "Restableix els colors", + "radius": "Radi de les cantonades dels ginys", + "radiusOptions": { + "xs": "Estret", + "sm": "Subtil", + "md": "Equilibrat", + "lg": "Arrodonit", + "xl": "Suau" }, - "fileInfo": { - "action": { - "change": "Canvia el fitzer" - } + "columns": "Columnes del tauler", + "columnsDescription": "Les columnes defineixen la graella horitzontal que s'utilitza per dimensionar i posicionar els elements. 12 són suficients per a la majoria de persones.", + "columnCount": "{count, plural, one {# columna} other {# columnes}}", + "leftSidebar": "Barra lateral esquerra", + "rightSidebar": "Barra lateral dreta", + "previewLabel": "Vista prèvia en directe del primer disseny del tauler" + }, + "extend": { + "title": "Funcions avançades", + "tabsLabel": "Configuració de l'Assistent, Workshop i MCP", + "assistant": "Assistent", + "workshop": "Taller", + "assistantSetup": { + "loginTitle": "Cal iniciar sessió com a administrador", + "loginDescription": "Les claus dels proveïdors i l'accés als models són privilegis restringits. Acabeu la configuració, inicieu sessió i Homarr obrirà directament la configuració de l'Assistent.", + "loginAction": "Inicia sessió per configurar l'Assistent" }, - "importSettings": { - "title": "Importa la configuració", - "description": "Configura el comportament d'importació" + "workshopSetup": { + "title": "Taller de Homarr", + "description": "Exploreu ginys personalitzats de la comunitat, consulteu les capacitats que sol·liciten, instal·leu-los i publiqueu el vostre propi treball sense copiar codi entre servidors.", + "available": "Disponible", + "checking": "Comprovant…", + "unavailable": "No disponible", + "discoverTitle": "Descobreix", + "discoverDescription": "Troba ginys creats per a fluxos de treball reals autoallotjats.", + "installTitle": "Revisa i instal·la", + "installDescription": "Consulta les metadades i la configuració abans d'afegir res.", + "publishTitle": "Comparteix", + "publishDescription": "Publica ginys reutilitzables per a la comunitat.", + "browse": "Explora el Workshop" }, - "boardSelection": { - "title": "S'han trobat {count} taulers", - "description": "Escolliu tots els taulers amb la mida que voleu importar", - "action": { - "selectAll": "Seleccionar-ho tot", - "unselectAll": "Anul·la la selecció" - } - }, - "summary": { - "title": "Resum de la importació", - "description": "En el resum següent podeu veure el que s'importarà", - "action": { - "import": "Confirma la importació i continua" - }, - "entities": { - "apps": "Aplicacions", - "boards": "Tauler", - "integrations": "Integracions", - "credentialUsers": "Credencials d'usuari" - } - }, - "tokenModal": { - "title": "Introduïu el token d'importació", - "field": { - "token": { - "label": "Token", - "description": "Introduïu el token d'importació mostrat a la instància prèvia de Homarr" - } - }, - "notification": { - "error": { - "title": "Token invàlid", - "message": "El token que heu introduït no és vàlid" - } - } + "mcpSetup": { + "title": "MCP de Homarr", + "description": "Connecta Claude, Codex o un altre client MCP a les eines tipades d'Homarr. Les claus d'API mantenen l'accés explícit i revocable.", + "endpoint": "Punt final HTTP transmissible", + "keyTitle": "Copia aquesta clau ara", + "keyDescription": "Per motius de seguretat, Homarr no pot tornar a mostrar aquesta clau d'API.", + "copyKey": "Copia la clau d'API", + "createKey": "Crea una clau d'API MCP", + "errorTitle": "No s'ha pogut crear la clau d'API MCP", + "loginRequired": "Inicieu sessió com a administrador després de la configuració per crear una clau d'API.", + "configuration": "Configuració del client", + "copy": "Copia la configuració", + "copied": "Copiat", + "advanced": "Obre les eines MCP, els permisos i els detalls de configuració" } }, - "user": { - "title": "Usuari administrador", - "subtitle": "Especifiqueu les credencials del vostre usuari administrador.", - "notification": { - "success": { - "title": "S'ha creat l'usuari", - "message": "L'usuari s'ha creat correctament" - }, - "error": { - "title": "S'ha produït un error al crear l'usuari" - } - } - }, - "group": { - "title": "Grup extern", - "subtitle": "Especifiqueu el grup que s'ha d'utilitzar per als usuaris externs.", - "form": { - "name": { - "label": "Nom del grup", - "description": "El nom ha de coincidir amb el grup d'Administradors del proveïdor extern" - } - } - }, - "settings": { - "title": "Configuració", - "subtitle": "Configureu els paràmetres del servidor." - }, - "integrations": { - "title": "Integracions", - "subtitle": "Selecciona els serveis que utilitzes.", - "description": "Tria les integracions que vols connectar. Configurarem automàticament el teu tauler amb els widgets corresponents.", - "action": { - "continue": "Continua", - "skip": "Omet-ho ara" - }, - "configure": { - "progress": "{current} de {total}", - "skip": "Omet aquesta integració", - "finishing": "Configurant el teu tauler...", - "error": { - "title": "La configuració ha fallat", - "message": "S'ha produït un error en configurar el teu tauler. Torna-ho a provar." - }, - "helpers": { - "tooltip": "Ajuda per als URL", - "description": "Aquests ajudants intenten endevinar l'URL dels teus serveis. Si no funciona, escriu l'adreça manualment." - } - }, - "urlTemplate": { - "label": "URL base", - "placeholder": "homelab.local o 192.168.1.1", - "hint": "Introdueix el domini base o la IP per emplenar automàticament els URL de les integracions", - "warning": "Establir ara l'URL base emplenarà automàticament tots els URL de les integracions i t'estalviarà temps durant la configuració", - "preview": "p. ex. {example}", - "mode": { - "subdomain": "Subdomini", - "hostPort": "Amfitrió:port" - } - }, - "docker": { - "detected": "S'han detectat {count} serveis de Docker", - "detectedBreakdown": "{integrations} integracions · {apps} aplicacions", - "summary": "Homarr ha detectat {apps} aplicacions, {integrations} de les quals tenen integracions integrades", - "appBadge": "Aplicació", - "appSectionLabel": "Aplicacions que s'afegiran al tauler ({count} seleccionades)", - "scanning": "Analitzant Docker...", - "scanningDescription": "Cercant contenidors en execució al sistema" + "review": { + "title": "Un tauler creat al voltant dels vostres serveis", + "description": "Homarr prova les connexions no desades, importa les aplicacions seleccionades, aplica l'aparença i els dissenys i, a continuació, obre exactament el tauler que ha configurat.", + "board": "Primer tauler", + "columns": "Columnes del tauler", + "columnsValue": "{count, plural, one {# columna} other {# columnes}}", + "sidebars": "Barres laterals", + "sidebarsValue": "{count, plural, =0 {Cap} one {# barra lateral} other {# barres laterals}}", + "layouts": "Dissenys responsius", + "layoutsValue": "Mòbil + base", + "integrations": "Integracions", + "integrationsValue": "{count, plural, =0 {Cap integració seleccionada} one {# integració} other {# integracions}}", + "apps": "Rajoles d'aplicacions", + "appsValue": "{count, plural, =0 {Només aplicacions inicials} one {# rajola d'aplicació} other {# rajoles d'aplicacions}}", + "language": "Idioma", + "theme": "Tema", + "themeAuto": "Preferència del sistema", + "themeLight": "Clar", + "themeDark": "Fosc", + "colors": "Colors del tauler", + "radius": "Radi dels ginys", + "automaticTitle": "El que crearà Homarr", + "automaticDescription": "Els ginys compatibles, les icones, els enllaços a aplicacions, les relacions entre integracions i la ubicació responsiva provenen del catàleg compartit d'Homarr. Més endavant podeu editar tots els resultats.", + "dockerWarningTitle": "Algunes etiquetes de Docker han canviat durant la configuració", + "dockerWarningDescription": "{count, plural, one {No s'ha pogut aplicar # resultat de Docker seleccionat perquè el servei ha canviat, s'ha adreçat a un altre tauler o el seu giny no era compatible} other {No s'han pogut aplicar # resultats de Docker seleccionats perquè els serveis han canviat, s'han adreçat a un altre tauler o els seus ginys no eren compatibles}}.", + "errorTitle": "No s'ha pogut crear el tauler", + "progress": { + "applying": "S'estan provant les connexions i creant el vostre tauler", + "done": "El vostre tauler està preparat" } }, "finish": { - "title": "Finalitza la configuració", - "subtitle": "Ja està tot llest!", - "description": "El procés de configuració s'ha completat correctament. Podeu començar a utilitzar Homarr. Escolliu la vostra propera acció:", - "action": { - "goToBoard": "Ves al tauler {name}", - "createBoard": "Creeu el vostre primer tauler", - "inviteUser": "Convideu altres usuaris", - "docs": "Llegiu la documentació" - } + "title": "El vostre primer tauler està preparat.", + "description": "Homarr ha connectat les peces que heu seleccionat i ha mantingut la resta editable. Obriu ara el tauler; el breu recorregut integrat us pot mostrar el mode d'edició, els ginys, els dissenys i la cerca.", + "openBoard": "Obre el meu tauler", + "manageTitle": "Gestiona", + "manageDescription": "Ajusteu les aplicacions, les integracions, els taulers, els usuaris i la configuració del servidor.", + "workshopTitle": "Taller", + "workshopDescription": "Descobreix i instal·la ginys personalitzats de la comunitat.", + "docsTitle": "Aprèn sobre Homarr", + "docsDescription": "Llegiu les guies específiques sobre taulers, ginys, integracions i eines." } - }, - "backToStart": "Torna a l'inici" + } }, "user": { - "title": "Usuaris", "name": "Usuari", "page": { "login": { @@ -159,17 +249,15 @@ }, "invite": { "title": "Uneix-te a Homarr", + "titleWithAppName": "Uneix-te a {appName}", "subtitle": "Benvingut a Homarr! Si us plau, crea el teu compte", + "subtitleWithAppName": "Benvingut a {appName}! Crea el teu compte", "description": "Has sigut invitat per {username}" - }, - "init": { - "title": "Nova instal·lació de Homarr", - "subtitle": "Creeu l'usuari administrador inicial" } }, "field": { "email": { - "label": "Adreça electrònica", + "label": "E-mail", "verified": "Verificat" }, "username": { @@ -192,12 +280,17 @@ "previousPassword": { "label": "Contrasenya anterior" }, - "homeBoard": { - "label": "Tauler principal" - }, "pingIconsEnabled": { "label": "Utilitza icones pels pings" }, + "byteUnitSystem": { + "label": "Unitats de mida de les dades", + "description": "Trieu com Homarr mostra les mides i les velocitats de bytes. Les velocitats de bits sempre utilitzen unitats decimals.", + "options": { + "binary": "Binari", + "decimal": "Decimal" + } + }, "enableRightClickOnWidgets": { "label": "Activa el clic dret als ginys", "description": "Mostra el menú contextual d'Homarr en fer clic dret en un giny. Desactiveu-ho per utilitzar el menú predeterminat del navegador (p. ex., «Obre l'enllaç en una pestanya nova»)." @@ -217,16 +310,16 @@ }, "action": { "login": { - "label": "Inicia la sessió", - "labelWith": "Inicia la sessió amb {provider}", + "label": "Connexió", + "labelWith": "Iniciar sessió amb {provider}", "notification": { "success": { "title": "Inici de sessió correcte", "message": "Heu iniciat sessió" }, "error": { - "title": "No s'ha pogut iniciar sessió", - "message": "No s'ha pogut iniciar la sessió" + "title": "Connexió fallida", + "message": "No s'ha pogut iniciar sessió" } }, "forgotPassword": { @@ -247,7 +340,6 @@ } } }, - "create": "Crea un usuari", "changePassword": { "label": "Canvia la contrasenya", "notification": { @@ -259,56 +351,6 @@ } } }, - "changeHomeBoard": { - "notification": { - "success": { - "message": "El tauler d'inici s'ha canviat correctament" - }, - "error": { - "message": "No 'ha pogut canviar el tauler d'inici" - } - } - }, - "changeSearchPreferences": { - "notification": { - "success": { - "message": "Els paràmetres de cerca s'han canviat correctament" - }, - "error": { - "message": "No s'han pogut canviar els paràmetres de cerca" - } - } - }, - "changeFirstDayOfWeek": { - "notification": { - "success": { - "message": "Primer dia de la setmana establert correctament" - }, - "error": { - "message": "No s'ha pogut canviar el primer dia de la setmana" - } - } - }, - "changePingIconsEnabled": { - "notification": { - "success": { - "message": "Icones de ping alternats correctament" - }, - "error": { - "message": "Impossible d'alternar les icones de ping" - } - } - }, - "changeDdgBangs": { - "notification": { - "success": { - "message": "Els bangs de DuckDuckGo s'han activat correctament" - }, - "error": { - "message": "No s'han pogut activar els bangs de DuckDuckGo" - } - } - }, "manageAvatar": { "changeImage": { "label": "Canvia la imatge", @@ -338,36 +380,21 @@ } } }, - "editProfile": { - "notification": { - "success": { - "message": "El perfil s'ha actualitzat correctament" - }, - "error": { - "message": "No s'ha pogut actualitzar el perfil" - } - } - }, "delete": { "label": "Eliminar l'usuari permanentment", "description": "Elimina l'usuari incloent les seves configuracions. Això no esborrarà cap tauler. No es notificarà l'usuari.", - "confirm": "Esteu segur que voleu eliminar l'usuari {username} i les seves configuracions?" + "confirm": "¿Esteu segur que voleu eliminar l'usuari {username} i les seves configuracions?" }, "select": { - "label": "Seleccioneu l'usuari", + "label": "Selecciona l'usuari", "notFound": "No s'ha trobat l'usuari" - }, - "transfer": { - "label": "Seleccioneu un nou propietari" } } }, "group": { - "title": "Grups", "name": "Grup", - "search": "Troba un grup", + "search": "Trobar un grup", "field": { - "name": "Nom", "members": "Membres", "homeBoard": { "label": "Panell d'inici", @@ -380,7 +407,7 @@ }, "permission": { "admin": { - "title": "Administrador", + "title": "Admin", "item": { "admin": { "label": "Administrador", @@ -388,24 +415,37 @@ } } }, + "custom-widget": { + "title": "Ginys personalitzats", + "item": { + "manage": { + "label": "Gestiona els ginys personalitzats", + "description": "Permet als membres crear, editar i suprimir definicions de ginys personalitzats" + }, + "secret-write": { + "label": "Configura els secrets dels ginys personalitzats", + "description": "Permet als membres i a les seves claus d'API establir credencials xifrades dels ginys personalitzats" + } + } + }, "app": { - "title": "Aplicacions", + "title": "Apps", "item": { "create": { "label": "Crear aplicacions", - "description": "Permet que els membres crein aplicacions" + "description": "Permet als membres crear apps" }, "use-all": { - "label": "Utilitzar totes les aplicacions", - "description": "Permet que els membres afegeixin qualsevol aplicació als seus taulers" + "label": "Usar totes les apps", + "description": "Permet als membres afegir qualsevol aplicació als seus taulers" }, "modify-all": { - "label": "Modificar totes les aplicacions", + "label": "Modificar totes les apps", "description": "Permet que els membres modifiquin totes les aplicacions" }, "full-all": { - "label": "Accés complet a les aplicacions", - "description": "Permet que els membres gestionin, utilitzin i eliminin qualsevol aplicació" + "label": "Accés complet a les apps", + "description": "Permet als membres gestionar, utilitzar i eliminar qualsevol aplicació" } } }, @@ -414,19 +454,19 @@ "item": { "create": { "label": "Crear taulers", - "description": "Permet que els membres crein taulers" + "description": "Permet als membres crear taulers" }, "view-all": { - "label": "Visualitzar tots els taulers", - "description": "Permet que els membres visualitzin tots els taulers" + "label": "Veure tots els taulers", + "description": "Permet als membres visualitzar tots els taulers" }, "modify-all": { "label": "Modificar tots els taulers", - "description": "Permet que els membres modifiquin tots els taulers (No inclou control d'accés ni zona de perill)" + "description": "Permet als membres modificar tots els taulers (No inclou control d'accés ni zona de perill)" }, "full-all": { - "label": "Accés total a tots els taulers", - "description": "Permet que els membres visualitzin, modifiquin i esborrin tots els taulers (incloent-hi control d'accés i zona de perill)" + "label": "Accés total als taulers", + "description": "Permet als membres visualitzar, modificar i esborrar tots els taulers (incloent-hi control d'accés i zona de perill)" } } }, @@ -435,19 +475,19 @@ "item": { "create": { "label": "Crear integracions", - "description": "Permet que els membres crein integracions" + "description": "Permet als membres crear integracions" }, "use-all": { "label": "Utilitzar totes les integracions", - "description": "Permet que els membres afegeixin qualsevol integració als seus taulers" + "description": "Permet als membres afegir qualsevol integració als seus taulers" }, "interact-all": { "label": "Interactuar amb qualsevol integració", - "description": "Permet que els usuaris interaccionin amb qualsevol integració" + "description": "Permet als usuaris interaccionar amb qualsevol integració" }, "full-all": { "label": "Accés total a les integracions", - "description": "Permetre que els membres gestionin, utilitzin i interactuïn amb cada integració" + "description": "Permetre als membres gestionar, utilitzar i interactuar amb cada integració" } } }, @@ -460,7 +500,7 @@ }, "view-all": { "label": "Veure medis", - "description": "Permet que els membres vegin tots els continguts multimèdia" + "description": "Permet als membres veure tots els continguts multimèdia" }, "full-all": { "label": "Accés complet als medis", @@ -473,7 +513,7 @@ "item": { "view-logs": { "label": "Veure registres", - "description": "Permet que els membres visualitzin els registres" + "description": "Permet als membres visualitzar els registres" } } }, @@ -482,17 +522,46 @@ "item": { "create": { "label": "Crea motors de cerca", - "description": "Permet que els membres crein motors de cerca" + "description": "Permet als membres crear motors de cerca" }, "modify-all": { "label": "Modifica tots els motors de cerca", - "description": "Permet que els membres modifiquin tots els motors de cerca" + "description": "Permet als membres modificar tots els motors de cerca" }, "full-all": { "label": "Accés complet a la cerca", "description": "Permet als membres gestionar i esborrar els motors de cerca" } } + }, + "matrix": { + "none": "Sense accés", + "impliedHint": "També concedeix: {permissions}", + "grantedViaAdmin": "Els administradors ja tenen aquest permís. Establiu Administrador a «Sense accés» per configurar-lo per separat.", + "preset": { + "label": "Predefinicions", + "viewer": "Visualitzador", + "viewerDescription": "Només lectura: visualitza taulers i continguts multimèdia, i utilitza aplicacions i integracions existents.", + "editor": "Editor", + "editorDescription": "Gestió diària: crea i edita taulers, aplicacions, integracions i motors de cerca.", + "admin": "Admin", + "adminDescription": "Accés sense restriccions a totes les funcions i configuracions, inclosa la gestió d'usuaris.", + "custom": "Personalitzat" + }, + "effective": { + "title": "Permisos efectius", + "description": "El conjunt complet i sense duplicats de les accions que poden dur a terme els membres d'aquest grup, inclosos els permisos concedits indirectament.", + "empty": "No s'ha seleccionat cap permís" + }, + "noneDescription": "Els membres no tenen accés a aquesta àrea.", + "level": { + "view": "Visualitza", + "use": "Utilitza", + "interact": "Interactua", + "modify": "Modifica", + "full": "Complet" + }, + "capabilityIncluded": "Ja s'inclou a «{level}»" } }, "memberNotice": { @@ -607,63 +676,56 @@ "search": "Troba una aplicació", "page": { "list": { - "title": "Aplicacions", + "ariaLabel": "Aplicacions configurades", "noResults": { "title": "Encara no hi ha cap aplicació", - "action": "Creeu la vostra primera aplicació" + "description": "Les aplicacions són enllaços als serveis i les eines que voleu als vostres taulers.", + "action": "Creeu la vostra primera aplicació", + "filteredTitle": "Cap aplicació coincideix amb la cerca", + "filteredDescription": "Cap aplicació coincideix amb «{search}». Proveu un altre nom o URL.", + "createOnlyTitle": "Només podeu afegir aplicacions", + "createOnlyDescription": "Els vostres permisos us permeten crear aplicacions, però no explorar-ne les existents. Demaneu a un administrador accés a la gestió d'aplicacions per veure la llista completa." } }, "create": { - "title": "Nova aplicació", + "title": "Nova app", "notification": { "success": { - "title": "Creació correcta", "message": "L'aplicació s'ha creat correctament" }, "error": { - "title": "Creació fallida", "message": "No s'ha pogut crear l'aplicació" } } }, "edit": { - "title": "Edita l'aplicació", + "title": "Editar l'app", "notification": { "success": { - "title": "Els canvis s'han aplicat correctament", "message": "L'aplicació s'ha desat correctament" }, "error": { - "title": "No s'han pogut aplicar els canvis", "message": "L'aplicació no s'ha pogut desar" } } }, "delete": { - "title": "Elimina l'aplicació", + "title": "Eliminar l'app", "message": "Esteu segur que voleu eliminar l'aplicació {name}?", "notification": { "success": { - "title": "Eliminació correcta", "message": "L'aplicació s'ha eliminat correctament" }, "error": { - "title": "Eliminació fallida", "message": "No s'ha pogut eliminar l'aplicació" } } } }, "field": { - "name": { - "label": "Nom" - }, "description": { "label": "Descripció" }, - "url": { - "label": "URL" - }, "useDifferentUrlForPing": { "checkbox": { "label": "Utilitza una URL diferent per al ping", @@ -673,39 +735,587 @@ }, "action": { "select": { - "label": "Seleccioneu l'aplicació", - "notFound": "No s'ha trobat cap aplicació", + "label": "Seleccioneu l'app", + "notFound": "App no trobada", "search": "Cerca una aplicació", "noResults": "Cap resultat", "action": "Selecciona {app}", - "title": "Selecciona una aplicació per afegir-la a aquest tauler" + "title": "Selecciona una aplicació per afegir-la a aquest tauler", + "toggle": "Feu clic per seleccionar", + "selected": "Seleccionat", + "multiple": "Afegeix {count}", + "selectedCount": "{count, plural, one {# seleccionat} other {# seleccionats}}", + "appsSelected": "{count, plural, one {# aplicació seleccionada} other {# aplicacions seleccionades}}", + "selectMultiple": "Selecciona'n diverses", + "cancelMultiple": "Surt de la selecció múltiple", + "customApplication": "Aplicació personalitzada", + "application": "Aplicació" }, "create": { "title": "Crea una aplicació nova", "description": "Crea una aplicació nova ", "action": "Obre la creació d'aplicacions" + } + } + }, + "tips": { + "dismiss": "Descarta el consell", + "multiSelectApps": "Consell: manteniu premuda la tecla Ctrl / ⌘ per seleccionar diverses aplicacions alhora" + }, + "customWidget": { + "secretEntry": { + "title": "Configura la font de l'API", + "description": "Confirmeu l'URL del servidor i introduïu les credencials. Homarr xifra els valors secrets i mai no els retorna a l'agent sol·licitant.", + "loading": "S'està carregant una sol·licitud segura…", + "applying": "S'està aplicant aquesta configuració… Manteniu aquesta pàgina oberta.", + "saved": "Font de l'API configurada. Podeu tancar aquesta pàgina.", + "unavailable": "Sol·licitud no disponible", + "saveError": "No s'ha pogut configurar la font de l'API", + "source": "Font de l'API: {name}", + "baseUrl": "URL del servidor", + "networkScope": "Accés a la xarxa", + "save": "Desa la configuració de l'API", + "expires": "Aquesta sol·licitud d'un sol ús caduca a les {time}." + }, + "page": { + "list": { + "noResults": "Encara no hi ha widgets personalitzats. Crea el primer!", + "noDescription": "Sense descripció", + "enabled": "Activat", + "disabled": "Desactivat", + "disabledDescription": "Aquest giny continua configurat, però no es carregarà en cap tauler.", + "requestCount": "{count, plural, one {# sol·licitud} other {# sol·licituds}}", + "invalidDefinition": "Definició no vàlida", + "migrationRequired": "Cal migrar", + "migrationInstructions": "Obriu Accions per copiar o exportar la definició v1 original i recrear-la manualment. També podeu utilitzar la sol·licitud de migració amb un LLM. Les ubicacions existents als taulers continuaran funcionant després de la migració.", + "missingCredentials": "{count, plural, one {Falta una credencial} other {Falten # credencials}}", + "missingCredentialsDescription": "{count, plural, one {Aquest giny encara necessita una credencial.} other {Aquest giny encara necessita # credencials.}} Seleccioneu aquesta insígnia per configurar l'URL i els valors xifrats." }, - "add": "Afegeix una app" + "create": { + "title": "Crea un widget personalitzat", + "subtitle": "Defineix un URL d'API, l'autenticació i com es mostraran les dades de resposta." + }, + "tabs": { + "ariaLabel": "Seccions dels ginys personalitzats", + "installed": "Instal·lats", + "workshop": "Taller" + } + }, + "action": { + "pasteImportHint": "Enganxeu un JSON complet de giny personalitzat amb Ctrl+V o Command+V", + "delete": "Elimina el widget personalitzat", + "deleteConfirm": "Segur que vols eliminar «{name}»? Aquesta acció no es pot desfer.", + "export": "Exporta", + "duplicate": "Duplica", + "aiPrompt": "Dissenya amb IA", + "copyAiPrompt": "Copia la indicació per a la IA", + "enable": "Activa", + "disable": "Desactiva", + "menu": "Accions", + "downloadSkill": "Visualitza les capacitats dels ginys personalitzats", + "publishWorkshop": "Publica al Workshop", + "migrate": "Migra el giny personalitzat", + "configureSources": "Configura les fonts", + "copyLegacyDefinition": "Copia el contingut original del giny", + "exportLegacyDefinition": "Exporta el contingut original del giny", + "copyMigrationPrompt": "Copia la sol·licitud de migració de l'LLM", + "pasteMigration": "Enganxa el giny migrat", + "importMigration": "Importa el fitxer JSON migrat" + }, + "sourceSetupDialog": { + "title": "Configura les fonts del giny", + "description": "Reviseu a què es connecta aquest giny i afegiu o substituïu les seves credencials xifrades.", + "credentialsRequired": "Les sol·licituds fallaran fins que s'afegeixin les credencials necessàries.", + "save": "Desa la configuració" + }, + "field": { + "description": "Descripció" + }, + "editor": { + "errorBoundary": { + "title": "S'ha produït un error" + }, + "action": { + "components": "Components", + "format": "Format", + "insertStarter": "Insereix una plantilla inicial", + "redo": "Refés", + "copied": "Copiat", + "schema": "Esquema" + }, + "reference": { + "minimal": "Exemple mínim", + "full": "Exemple complet" + }, + "componentReference": { + "search": "Cerca components", + "empty": "No hi ha components coincidents", + "count": "Hi ha {count, number} components disponibles" + }, + "status": { + "errors": "{count, number} errors", + "warnings": "{count, number} advertiments", + "ready": "No s'ha trobat cap problema", + "position": "Línia {line, number}, columna {column, number}", + "characters": "{count, number} caràcters", + "charactersWithLimit": "{count, number} / {limit, number}" + }, + "diagnostics": { + "title": "Diagnòstic de la plantilla", + "line": "Línia {line, number}", + "ast": "{value}", + "bindingTypeConflict": "L'entrada «{value}» es comparteix entre controls amb tipus de valor incompatibles.", + "runtimeBindingTypeConflict": "L'entrada «{value}» està vinculada tant com a {firstType} com a {secondType}.", + "dynamicRequestId": "Cal un requestId literal. No s'accepten identificadors de sol·licitud dinàmics.", + "dynamicInputBinding": "Cal un nom d'entrada literal per a bind.", + "inlineRequestProps": "Els components de xarxa accepten requestId i params; les propietats URL, method, header i body en línia estan bloquejades.", + "invalidRequestManifest": "Les sol·licituds amb nom han de ser un mapa de sol·licituds vàlid. {value}", + "missingRequestId": "Aquest component de xarxa requereix un requestId literal.", + "templateEmpty": "Introduïu una plantilla JSX.", + "templateTooLong": "La plantilla supera el límit de 50.000 caràcters.", + "unknownRequest": "No existeix cap sol·licitud amb nom i ID «{value}»." + } + }, + "workbench": { + "configure": "Configura", + "sectionNavigation": "Seccions dels ginys personalitzats", + "widgetPreview": "Vista prèvia del giny", + "generalInformation": "Informació general", + "invalidWidget": "Giny no vàlid", + "section": { + "general": "General", + "sources": "Fonts de l'API", + "requests": "Sol·licituds", + "options": "Opcions", + "jsx": "JSX", + "preview": "Vista prèvia" + }, + "status": { + "unsaved": "Canvis no desats", + "invalid": "Requereix atenció", + "ready": "Preparat" + }, + "saveError": { + "title": "No s'ha desat el giny", + "description": "Corregiu aquests errors de validació i torneu a desar.", + "more": "Es mostren {count} errors més al banc de treball.", + "errors": "Errors de validació", + "copy": "Copia els errors", + "copied": "Errors copiats" + }, + "action": { + "preview": "Prova i previsualitza", + "previewLoading": "S'estan provant les sol·licituds" + }, + "requests": { + "title": "Consultes i accions amb nom", + "label": "Sol·licituds", + "description": "Les consultes carreguen dades; les accions només s'executen després de la interacció de l'usuari. Qualsevol mètode HTTP és vàlid per a tots dos tipus." + }, + "options": { + "title": "Opcions del giny" + }, + "builder": { + "advancedManifest": "Manifest avançat en brut", + "advancedJson": "JSON del manifest avançat", + "manifestFilename": "widget.json", + "request": "Sol·licitud {count, number}", + "requestId": "ID de la sol·licitud", + "type": "Tipus de client de descàrregues", + "method": "Mètode", + "source": "Font de l'API", + "run": "Executa", + "runLoad": "En carregar el giny", + "runManual": "Des de SubFetch", + "permission": "Permís", + "path": "Camí", + "pathDescription": "Utilitzeu «{option:name}» per a les opcions del giny i «{param:name}» per als valors d'invocació.", + "requestDetails": "Consulta, cos i comportament", + "queryValues": "Valors de consulta", + "queryKey": "Clau de consulta", + "queryKeyInvalid": "Utilitzeu un ID únic que comenci per una lletra i contingui només lletres, números, - o _.", + "valueSource": "Font del valor", + "literal": "Literal", + "widgetOption": "Opció del giny", + "invocationParameter": "Paràmetre d'invocació", + "option": "Opció", + "parameterName": "Nom del paràmetre", + "value": "Valor", + "removeQueryValue": "Elimina el valor de consulta", + "addQueryValue": "Afegeix un valor de consulta", + "jsonBody": "Cos JSON", + "jsonBodyDescription": "Opcional. Inseriu referències a $option i $param en qualsevol nivell.", + "insertOptionReference": "Insereix una referència d'opció", + "insertParameterReference": "Insereix una referència de paràmetre", + "confirmation": "Missatge de confirmació", + "invalidation": "Actualitza després de tenir èxit", + "invalidationDescription": "IDs de consulta separats per comes", + "noAuth": "Envia sense autenticació de la font", + "moveRequestUp": "Mou la sol·licitud amunt", + "moveRequestDown": "Mou la sol·licitud avall", + "removeRequest": "Elimina la sol·licitud", + "addRequest": "Afegeix una sol·licitud", + "optionName": "Nom de l'opció", + "label": "Etiqueta", + "control": "Control", + "description": "Descripció", + "default": "Per defecte", + "optionDetails": "Restriccions i opcions dinàmiques", + "minimum": "Mínim", + "maximum": "Màxim", + "step": "Pas", + "choiceLabel": "Etiqueta de l'opció", + "choiceValue": "Valor de l'opció", + "newChoice": "Opció nova", + "addChoice": "Afegeix una opció", + "removeChoice": "Elimina l'opció", + "choicesRequest": "Carrega les opcions des de la sol·licitud", + "itemsPath": "Camí dels elements", + "itemsPathPlaceholder": "elements (opcional)", + "valuePath": "Camí del valor", + "labelPath": "Camí de l'etiqueta", + "group": "Grup", + "advancedOption": "Opció avançada", + "moveOptionUp": "Mou l'opció amunt", + "moveOptionDown": "Mou l'opció avall", + "removeOption": "Elimina l'opció", + "addOption": "Afegeix una opció", + "invalidJson": "JSON no vàlid", + "invalidWidget": "Giny no vàlid" + }, + "jsx": { + "title": "Plantilla JSX", + "label": "Plantilla" + }, + "sources": { + "title": "Fonts de l'API i credencials", + "newName": "API {count, number}", + "duplicateSourceId": "Els IDs de les fonts de l'API han de ser únics.", + "credentialRemoved": "Credencial eliminada", + "credentialRemovedDescription": "S'ha suprimit el valor emmagatzemat.", + "primary": "API principal", + "id": "ID de la font", + "name": "Nom de la feina", + "baseUrl": "URL base", + "baseUrlError": { + "invalid": "Introduïu una URL completa.", + "protocol": "Utilitzeu una URL HTTP o HTTPS.", + "credentials": "Elimineu el nom d'usuari i la contrasenya d'aquesta URL. Configureu les credencials a continuació.", + "queryOrFragment": "Elimineu la cadena de consulta o el fragment d'aquesta URL base. Afegiu els valors de consulta a una sol·licitud amb nom." + }, + "networkScope": "Accés a la xarxa", + "authentication": "Autenticació", + "headerName": "Nom de la capçalera", + "queryParameter": "Paràmetre de consulta", + "configured": "Configurat — introduïu un reemplaçament", + "clear": "Esborra", + "remove": "Elimina la font i les seves sol·licituds", + "advanced": "Avançat", + "add": "Afegeix una altra font de l'API", + "sourceType": "Integració", + "manualSource": "API HTTP", + "existingIntegration": "Integració existent", + "integrationType": "Tipus d'integració", + "selectIntegration": "Integració configurada", + "noIntegrations": "No hi ha integracions coincidents disponibles", + "integrationUnavailable": "La integració seleccionada ja no està disponible. Seleccioneu-ne una altra.", + "integrationDescription": "Utilitza l'URL i les credencials de la integració desada. Els canvis s'apliquen automàticament. Cal accés complet a la integració per executar sol·licituds." + }, + "ai": { + "title": "Crea o corregeix amb qualsevol IA", + "description": "Afegiu primer una URL de documentació de l'API si en teniu una. Per a les correccions, executeu la vista prèvia si és possible. Copieu la sol·licitud a qualsevol IA; pot demanar els detalls que faltin. Enganxeu aquí el JSON final.", + "request": "Què hauria de fer aquest giny?", + "documentationUrl": "URL de la documentació de l'API (opcional)", + "paste": "Enganxa", + "response": "Resposta de la IA", + "manualCopyDescription": "L'accés al porta-retalls no està disponible. Seleccioneu la sol·licitud següent i copieu-la manualment.", + "manualPasteDescription": "L'accés al porta-retalls no està disponible o cal corregir la resposta copiada. Enganxeu aquí la resposta JSON de la IA.", + "selectAll": "Seleccionar-ho tot", + "loadResponse": "Carrega la resposta", + "loaded": "Giny carregat a l'editor", + "invalidResponse": "El porta-retalls no conté un giny v2 vàlid", + "invalidResponseDetail": "La resposta de la IA no és vàlida: {message}" + }, + "preview": { + "invalid": "Corregiu els errors de validació per previsualitzar aquest giny.", + "fixtureError": "Error de l'escenari de previsualització", + "requestData": "Sol·licita dades", + "status": { + "idle": "Les sol·licituds encara no s'han provat", + "loading": "S'estan provant les sol·licituds", + "success": "Totes les sol·licituds de càrrega s'han completat correctament", + "error": "Una o més sol·licituds de càrrega han fallat" + }, + "result": { + "loading": { + "title": "S'estan provant les sol·licituds de l'API", + "description": "Homarr està creant una sessió de previsualització i carregant les dades del giny." + }, + "success": { + "title": "Previsualització preparada", + "description": "{succeeded, plural, =0 {Aquest giny no té cap sol·licitud de càrrega.} one {# sol·licitud de càrrega s'ha completat correctament.} other {# sol·licituds de càrrega s'han completat correctament.}} Obriu Dades per inspeccionar la resposta." + }, + "error": { + "title": "Previsualització completada amb errors de sol·licituds", + "description": "{succeeded, number} s'han completat correctament i {failed, number} han fallat. Obriu Dades per consultar la resposta i els detalls dels errors." + } + }, + "instanceOptions": "Opcions de la instància", + "liveActions": "Executa accions amb l'API configurada", + "liveActionsDescription": "Desactivat és una simulació segura. Si ho activeu, afectarà el servei real.", + "noActions": "No hi ha cap acció definida.", + "containedFailures": "Les errades durant l'execució queden contingudes dins d'aquest giny. Els registres de sol·licituds mai no inclouen valors secrets.", + "validation": { + "title": "Validació", + "ready": "La definició del giny és vàlida." + }, + "accessibility": { + "title": "Comprovacions d'accessibilitat", + "ready": "No s'han detectat omissions habituals d'accessibilitat.", + "pending": "Les comprovacions d'accessibilitat s'executaran quan la definició del giny sigui vàlida.", + "imageAlt": "Afegiu text alternatiu a cada imatge; utilitzeu un atribut alt buit només per a les imatges decoratives.", + "actionIconLabel": "Afegiu un aria-label o un títol a cada ActionIcon.", + "inputLabel": "Afegiu una etiqueta visible o un nom accessible a cada camp d'entrada." + }, + "journal": "Registre de sol·licituds anonimitzat", + "actionParameters": "Paràmetres de l'acció (JSON)", + "invalidParameters": "Utilitzeu els tipus de paràmetre de cadena, nombre i booleà declarats.", + "runDestructive": "Executa una acció destructiva", + "runAction": "Executa l'acció", + "deleteConfirmation": "Aquesta acció de previsualització canvia dades remotes mitjançant l'API configurada.", + "simulated": "Acció simulada", + "httpStatus": "HTTP {status, number}", + "tab": { + "widget": "Giny", + "data": "Dades", + "options": "Opcions", + "state": "Estat de la feina", + "actions": "Controls", + "diagnostics": "Diagnòstic" + }, + "size": { + "compact": "Compacte", + "standard": "Estàndard", + "wide": "Ample" + }, + "fixture": { + "live": "En directe", + "loading": "S'està carregant", + "empty": "Buit", + "error": "Error" + } + } + }, + "preview": { + "request": { + "permission": { + "view": "Visualització", + "modify": "Modificació", + "full": "Complet" + } + } + }, + "notification": { + "created": "El widget «{name}» s'ha creat correctament.", + "updated": "El widget «{name}» s'ha actualitzat correctament.", + "deleted": "S'ha eliminat el widget «{name}».", + "imported": "El giny s'ha importat correctament.", + "migrated": "El giny heretat s'ha migrat correctament. Les ubicacions existents del tauler ara utilitzen la definició v2.", + "migrationError": "No s'ha pogut migrar el giny heretat. Assegureu-vos que el fitxer utilitzi l'esquema homarr-custom-widget-v2.", + "legacyDefinitionCopied": "S'ha copiat el contingut original del giny. No s'hi inclouen els valors de les credencials emmagatzemades.", + "legacyDefinitionCopyError": "No s'ha pogut copiar el contingut original del giny.", + "migrationPromptCopied": "S'ha copiat una indicació de migració anonimitzada. Enganxeu-la en un LLM, copieu-ne l'única resposta JSON i, a continuació, trieu Enganxa aquí el giny migrat.", + "migrationPromptCopyError": "No s'ha pogut copiar la indicació de migració.", + "sourcesConfigured": "S'han desat les fonts i les credencials del giny.", + "sourceConfigurationError": "No s'han pogut configurar les fonts del giny.", + "aiPromptCopiedWithCount": "Sol·licitud de la IA copiada al porta-retalls ({count, number} caràcters).", + "aiPromptCopyError": "No s'ha pogut copiar la indicació al porta-retalls. És possible que el navegador no admeti aquesta funció.", + "aiPromptSent": "Indicació enviada. Podeu continuar editant mentre l'assistent treballa en segon pla.", + "updateError": "No s'ha pogut actualitzar el widget. No s'han desat els canvis.", + "importError": "No s'ha pogut importar el widget. Assegura't que el fitxer sigui una exportació JSON de widget personalitzat vàlida.", + "exportError": "No s'ha pogut exportar el widget.", + "duplicated": "El widget «{name}» s'ha duplicat.", + "duplicateError": "No s'ha pogut duplicar el widget.", + "toggleError": "No s'ha pogut canviar l'estat del giny.", + "deleteError": "No s'ha pogut eliminar el giny.", + "previewError": "No s'ha pogut obtenir la previsualització. Comproveu l'URL i torneu-ho a provar." + }, + "importReview": { + "title": "Revisa la importació del giny personalitzat", + "description": "Comproveu a què es connecta aquest giny i quin accés al tauler requereixen els seus controls abans d'importar-lo.", + "migrationTitle": "Revisa el reemplaçament v2 migrat", + "migrationDescription": "Reviseu i confirmeu aquesta definició v2 generada. En confirmar-la, es reemplaçarà atòmicament el registre v1 conservat, mantenint les ubicacions existents del tauler enllaçades al mateix ID de giny.", + "fileLabel": "Trieu un fitxer JSON de giny personalitzat", + "name": "Nom de la feina", + "origin": "Origen base", + "authentication": "Autenticació", + "networkScope": "Àmbit de xarxa", + "methods": "Mètodes HTTP", + "permissions": "Permisos necessaris del tauler", + "sourceSetup": { + "title": "Configura les fonts de l'API", + "description": "Confirmeu a què es connecta aquest giny i afegiu-hi les credencials. Els URL privats i de bucle local són específics de la vostra instal·lació d'Homarr.", + "suggestedUrl": "URL suggerit", + "confirmUrl": "Confirmo que aquest URL del servidor és correcte per a la meva instal·lació d'Homarr", + "ready": "URL preparat", + "needsUrl": "Confirma l'URL", + "credentialsMissing": "Falten credencials", + "credentialsOptional": "Podeu instal·lar-lo sense credencials i configurar-les més tard, però les sol·licituds fallaran fins que les afegiu." + }, + "actionWarning": { + "title": "Aquest giny pot canviar dades remotes", + "description": "Reviseu cada acció amb nom, cada credencial heretada i cada confirmació destructiva després de la importació. Els secrets no s'inclouen al fitxer." + }, + "cancel": "Cancel·la la importació", + "confirm": "Importa el giny", + "confirmMigration": "Confirma el reemplaçament v2" + }, + "secret": { + "apiKey": "Clau o testimoni de l'API", + "username": "Nom d'usuari", + "password": "Contrasenya", + "savedPlaceholder": "••••••• (desat, deixa-ho buit per conservar-ho)" + } + }, + "workshop": { + "title": "Taller", + "browseWorkshop": "Explora el taller", + "openCommunity": "Obre el taller", + "openOnWorkshop": "Obre {title} al lloc web del taller", + "back": "Torna al taller", + "search": "Cerca ginys", + "searchCss": "Cerca temes CSS", + "sort": "Ordena", + "sortTop": "Més votats", + "sortNewest": "Més recents", + "listAriaLabel": "Ginys del taller", + "listAriaLabelCss": "Temes CSS del taller", + "empty": "Cap giny coincideix amb aquesta cerca.", + "emptyDescription": "Els ginys de la comunitat publicats al taller es mostren aquí.", + "emptyFilteredTitle": "Cap giny coincideix amb aquesta cerca", + "emptyFilteredDescription": "Cap giny del taller coincideix amb «{search}».", + "emptyCss": "Cap tema CSS coincideix amb aquesta cerca.", + "unavailableTitle": "El taller d'Homarr sembla no estar disponible", + "unavailable": "És possible que el servei de la comunitat estigui temporalment inactiu. Torneu-ho a provar d'aquí un moment. Els ginys instal·lats no es veuen afectats.", + "loadError": "No s'ha pogut carregar aquest enviament.", + "noDescription": "Sense descripció", + "author": "per {name}", + "communityMember": "Membre de la comunitat", + "outdated": "Desactualitzat", + "outdatedWarning": "L'autor ha marcat aquest enviament com a desactualitzat. Reviseu-lo detingudament abans d'importar-lo.", + "score": "Puntuació: {count, number}", + "upvote": "Vot positiu", + "downvote": "Vot negatiu", + "voteError": "No s'ha pogut desar el vot.", + "signIn": "Inicia la sessió amb GitHub", + "signInError": "No s'ha pogut iniciar la sessió amb GitHub. Comproveu que el proveïdor OAuth del taller estigui configurat i que les finestres emergents estiguin permeses.", + "signOut": "Tanca la sessió", + "signInHint": "Inicieu la sessió per votar o informar. Per instal·lar no cal tenir un compte del taller.", + "securityNotice": "Els ginys del taller poden cridar les seves fonts d'API declarades i executar accions declarades amb les credencials que configureu localment. Els secrets no s'inclouen mai.", + "securityNoticeCss": "El CSS de la comunitat pot canviar l'aparença i la usabilitat d'un tauler. Reviseu-lo abans d'importar-lo; no es desa res fins que no deseu la configuració del tauler.", + "install": "Instal·la", + "installReviewTitle": "Revisa abans d'instal·lar", + "installError": "No es pot instal·lar aquest giny", + "installErrorDescription": "L'enviament del taller no és un giny Custom JSX v2 vàlid.", + "useCss": "Importa CSS", + "importCss": "Importa CSS del taller", + "importCssConfirm": "Voleu reemplaçar el CSS personalitzat actual per «{title}»? No es desa res fins que no deseu la configuració del tauler.", + "screenshotAlt": "Captura de pantalla de {title}, {count, number}", + "screenshotViewer": "Visor de captures de pantalla de {title}", + "screenshotsLabel": "Captures de pantalla de {title}", + "zoomScreenshot": "Mostra la mida completa", + "previousScreenshot": "Captura de pantalla anterior", + "nextScreenshot": "Captura de pantalla següent", + "showScreenshotThumbnails": "Mostra les miniatures de les captures de pantalla", + "hideScreenshotThumbnails": "Amaga les miniatures de les captures de pantalla", + "closeScreenshotViewer": "Tanca el visor de captures de pantalla", + "technicalDetails": "Detalls tècnics", + "sourceCode": "Entrada del taller", + "export": "Exporta", + "report": "Informa", + "reportTitle": "Informa de l'enviament", + "reportReason": "Motiu", + "reportExplanation": "Què haurien de saber els moderadors del taller?", + "reportSend": "Envia l'informe", + "reportSent": "Informe enviat", + "reportSentDescription": "Els moderadors del taller ja poden revisar aquest enviament.", + "reportCount": "{count, plural, one {# informe} other {# informes}}", + "reportWarning": "{count, plural, one {Aquest enviament té # informe comunitari obert.} other {Aquest enviament té # informes comunitaris oberts.}} Es pot continuar instal·lant, però n'hauríeu de revisar primer el contingut.", + "reportVisibility": "Els detalls de l'informe només són visibles per a l'autor d'aquest enviament i els administradors del taller.", + "reportCategory": { + "outdated": "Desactualitzat o ja no funciona", + "malicious": "Maliciós", + "spam": "Correu brossa", + "copyright": "Drets d'autor", + "inappropriate": "Inadequat", + "other": "Altres" + }, + "publish": { + "title": "Publica al taller", + "introTitle": "Comparteix aquest giny amb la comunitat", + "introDescription": "Homarr exporta una còpia del giny actual sense credencials. Afegiu detalls clars perquè la gent sàpiga què fa abans d'instal·lar-lo.", + "listingDetails": "Fitxa del taller", + "listingDetailsDescription": "Aquests detalls es mostren públicament juntament amb la definició del giny exportat.", + "success": "Publicat immediatament. Els membres de la comunitat ja poden instal·lar i informar sobre aquest giny.", + "successTitle": "El vostre giny està disponible", + "manageDescription": "Obriu l'enviament per actualitzar-ne la fitxa, revisar informes, marcar-lo com a desactualitzat o eliminar-lo. La gestió de l'enviament es fa directament al lloc web del taller.", + "viewSubmission": "Visualitza i gestiona l'enviament", + "done": "Fet", + "signInHint": "Inicieu la sessió per publicar amb la vostra identitat del taller.", + "titleField": "Títol", + "descriptionField": "Descripció", + "screenshots": "Captures de pantalla", + "screenshotsDescription": "Fins a cinc imatges PNG, JPEG o WebP", + "screenshotsPlaceholder": "Trieu captures de pantalla", + "invalidScreenshot": "Utilitzeu imatges PNG, JPEG o WebP de com a màxim {maxSize} cadascuna.", + "privateSourceWarning": "Aquest giny conté URL de fonts privades per a: {sources}. Reemplaceu els amfitrions personals o les adreces IP per marcadors de servei segurs abans de publicar-lo.", + "reviewSourcesTitle": "Revisa els URL de fonts privades", + "privateSourceConfirmation": "He revisat aquests URL de fonts i no exposen detalls de la infraestructura privada", + "action": "Publica ara", + "publicationNote": "La publicació és immediata. Després podeu gestionar l'enviament al taller.", + "definitionChanged": "El giny ha canviat mentre es preparava la publicació. Torneu a revisar els URL de fonts privades i torneu-ho a provar.", + "error": "La publicació ha fallat" } }, "integration": { + "completion": { + "modalTitle": "Servei preparat", + "title": "{name} està connectat", + "description": "La connexió ha superat la prova. Trieu què voleu mostrar a continuació en aquest tauler.", + "connectionReady": "La connexió del servei està preparada", + "appReady": "La drecera de l'aplicació està preparada", + "compatibleWidgets": "{count, plural, =0 {No hi ha ginys compatibles} one {# giny compatible} other {# ginys compatibles}} disponibles", + "chooseWidget": "Trieu un giny", + "recipes": { + "title": "Recomanat per a aquest tauler", + "description": "Segons els serveis connectats i els ginys que ja hi ha en aquest tauler.", + "newConnectionReason": "Ara disponible mitjançant {integration}", + "existingConnectionReason": "Funciona amb un servei que ja heu connectat", + "dismiss": "Descarta les recomanacions d'aquest servei en aquest tauler" + } + }, "page": { "list": { - "title": "Integracions", + "ariaLabel": "Integracions configurades", "search": "Cercar integracions", + "scopedNote": "Només es mostren les integracions que teniu permís per gestionar.", "noResults": { - "title": "Encara no hi ha cap integració" + "title": "Encara no hi ha cap integració", + "description": "Connecteu un servei per utilitzar-ne les dades i les accions als ginys d'Homarr.", + "action": "Creeu la vostra primera integració", + "filteredTitle": "Cap integració coincideix amb la vostra cerca", + "filteredDescription": "Cap integració coincideix amb «{search}». Proveu un altre nom, tipus o URL.", + "createOnlyTitle": "Només podeu afegir integracions", + "createOnlyDescription": "Els vostres permisos us permeten crear integracions, però no gestionar-ne d'existents. Demaneu a un administrador accés a les que necessiteu." } }, "create": { "title": "Nova integració de {name}", "notification": { "success": { - "title": "Creació correcta", "message": "La integració s'ha creat correctament" }, "error": { - "title": "Creació fallida", "message": "No s'ha pogut crear la integració" } }, @@ -718,8 +1328,8 @@ "new": { "title": "Nou", "url": { - "label": "URL d'app", - "description": "URL que obrirà l'aplicació en accedir-hi des del tauler" + "label": "App URL", + "description": "L'URL que obrirà l'aplicació en accedir-hi des del tauler" } } } @@ -729,11 +1339,9 @@ "title": "Edita la integració de {name}", "notification": { "success": { - "title": "Els canvis s'han aplicat correctament", "message": "La integració s'ha desat correctament" }, "error": { - "title": "No s'han pogut aplicar els canvis", "message": "No s'ha pogut desar la integració" } }, @@ -750,26 +1358,18 @@ "message": "Esteu segur que voleu eliminar la integració {name}?", "notification": { "success": { - "title": "Eliminació correcta", "message": "La integració s'ha eliminat correctament" }, "error": { - "title": "Eliminació fallida", "message": "No s'ha pogut eliminar la integració" } } } }, "field": { - "name": { - "label": "Nom" - }, - "url": { - "label": "URL" - }, "attemptSearchEngineCreation": { "label": "Crea un motor de cerca", - "description": "La integració \"{kind}\" es pot utilitzar amb els motors de cerca. Seleccioneu aquesta opció per configurar el motor de cerca automàticament." + "description": "L'integració \"{kind}\" es pot utilitzar amb els motors de cerca. Seleccioneu aquesta opció per configurar el motor de cerca automàticament." }, "app": { "sectionTitle": "App enllaçada" @@ -778,6 +1378,10 @@ "label": "Crear aplicació", "description": "Crea una aplicació amb el mateix nom i icona que la integració. Deixa el camp d'entrada següent buit per crear l'aplicació amb l'URL de la integració." }, + "linkApp": { + "label": "Enllaça una aplicació existent", + "description": "Connecteu aquesta integració a una aplicació que ja pugueu utilitzar." + }, "appHref": { "placeholder": "URL d'app pròpia" }, @@ -791,7 +1395,11 @@ "grid": { "widgetCount": "{count} ginys", "noWidgets": "Cap widget", - "detected": "Detectat mitjançant Docker" + "detected": "Detectat mitjançant Docker", + "connected": "{count, plural, one {# connectada} other {# connectades}}", + "tiedWidgets": "Ginys vinculats", + "more": "+{count} més", + "loadError": "No s'han pogut carregar les integracions. Torneu-ho a provar abans de crear una connexió nova." }, "category": { "dnsHole": "DNS", @@ -822,7 +1430,10 @@ "analytics": "Analítica", "vpn": "VPN", "mediaLibrary": "Biblioteca multimèdia", - "uptimeMonitoring": "Monitoratge del temps d'activitat" + "uptimeMonitoring": "Monitoratge del temps d'activitat", + "beszel": "Beszel", + "systemMonitoring": "Monitoratge del sistema", + "security": "Seguretat" }, "testConnection": { "action": { @@ -857,7 +1468,7 @@ "tooManyRequests": "Massa sol·licituds", "internalServerError": "Error intern del servidor", "serviceUnavailable": "Servei no disponible", - "gatewayTimeout": "Temps d'espera gateway" + "gatewayTimeout": "Temps d'espera excedit" } }, "certificate": { @@ -962,7 +1573,7 @@ "message": "S'ha connectat correctament" }, "invalidUrl": { - "title": "Adreça URL no vàlida", + "title": "URL no vàlida", "message": "L'adreça URL no és vàlida" }, "secretNotDefined": { @@ -1107,6 +1718,22 @@ "slug": { "label": "Identificador de la pàgina d'estat", "newLabel": "Identificador de la pàgina d'estat nou" + }, + "wazuhIndexerUrl": { + "label": "URL de l'indexador", + "newLabel": "URL nou de l'indexador" + }, + "wazuhIndexerUsername": { + "label": "Nom d'usuari de l'indexador", + "newLabel": "Nom d'usuari nou de l'indexador" + }, + "wazuhIndexerPassword": { + "label": "Contrasenya de l'indexador", + "newLabel": "Contrasenya nova de l'indexador" + }, + "wazuhDashboardUrl": { + "label": "URL del tauler (opcional)", + "newLabel": "URL nou del tauler" } } }, @@ -1115,54 +1742,19 @@ "interact": "Interactuar amb integracions", "full": "Accés total a les integracions" }, - "audiobookshelf": { - "name": "Audiobookshelf", - "description": "Servidor autoallotjat de llibres d'àudio i podcasts" - }, - "navidrome": { - "name": "Navidrome", - "description": "Servidor autoallotjat de reproducció de música compatible amb l'API Subsonic" - }, - "uptimeKuma": { - "name": "Uptime Kuma", - "description": "Monitoratge autoallotjat del temps d'activitat amb pàgines d'estat públiques", - "secret": { - "slug": { - "description": "L'identificador de la pàgina d'estat pública. El valor predeterminat és «default» si no s'estableix." - }, - "apiKey": { - "description": "Clau d'API opcional per accedir autenticadament a /metrics" - } - } - }, - "traefik": { - "name": "Traefik", - "description": "Proxy invers i equilibrador de càrrega natius del núvol" - }, - "paperlessNgx": { - "name": "Paperless-ngx", - "description": "Sistema de gestió documental per arxivar i organitzar documents escanejats" - }, - "patchmon": { - "name": "PatchMon", - "description": "Gestió i supervisió de pedaços per a amfitrions Linux" - }, - "bazarr": { - "name": "Bazarr", - "description": "Aplicació complementària de Sonarr i Radarr que gestiona i descarrega subtítols" - }, - "wud": { - "name": "What's Up Docker", - "description": "Controla quins contenidors Docker tenen actualitzacions d'imatges disponibles" + "llamacpp": { + "name": "llama.cpp", + "description": "Superviseu un llama-server local de llama.cpp: mètriques d'estat, model i generació" } }, "media": { "plural": "Multimèdia", "search": "Cerca un element multimèdia", "field": { - "name": "Nom", + "preview": "Previsualització", "size": "Mida", - "creator": "Creador" + "creator": "Creador", + "actions": "Controls" }, "action": { "upload": { @@ -1190,10 +1782,12 @@ } }, "copy": { - "label": "Copia l'URL" + "label": "Copia l'URL", + "labelNamed": "Copia l'URL de {name}" }, "open": { - "label": "Obrir mitjà" + "label": "Obrir mitjà", + "labelNamed": "Obre {name}" } }, "noResults": { @@ -1208,7 +1802,6 @@ "add": "Afegeix", "apply": "Aplica", "backToOverview": "Torna a la visió general", - "skip": "Omet", "change": "Canvia", "create": "Crea", "createAnother": "Crear i començar de nou", @@ -1231,16 +1824,31 @@ "tryAgain": "Torna-ho a provar", "loading": "Carregant", "show": "Mostra", - "hide": "Oculta" + "hide": "Oculta", + "undo": "Desfés", + "editNamed": "Edita {name}", + "deleteNamed": "Elimina {name}", + "clearSearch": "Esborra la cerca", + "copy": "Copia", + "copied": "Copiat", + "refresh": "Actualitza" + }, + "pagination": { + "pageOf": "Pàgina {page} de {totalPages}" }, "here": "aquí", + "serviceUrlTemplate": { + "serverTitle": "Adreça habitual del servidor", + "urlModeLabel": "Patró de l'adreça del servei", + "hostPort": "Mateix amfitrió, ports diferents", + "subdomain": "Un subdomini per servei", + "path": "Un camí per servei" + }, "iconPicker": { "label": "URL de la icona", + "description": "Cerca a la biblioteca, enganxa l'URL d'una imatge o puja un fitxer.", "header": "Cerca {countIcons} imatges per nom", "headerLoading": "Cerca imatges per nom", - "noResults": "No hi ha icones que coincideixin amb «{search}».", - "error": "No s'han pogut carregar les icones.", - "description": "Cerca a la biblioteca, enganxa l'URL d'una imatge o puja un fitxer.", "clear": "Esborra la imatge", "uploadImage": "Puja una imatge", "results": "Resultats de la cerca d'imatges", @@ -1249,7 +1857,9 @@ "otherImages": "Altres imatges", "urlLoading": "Comprovant la imatge…", "urlReady": "La imatge està a punt per utilitzar", - "urlError": "No s'ha pogut carregar aquesta imatge. Comprova l'URL i torna-ho a provar." + "urlError": "No s'ha pogut carregar aquesta imatge. Comprova l'URL i torna-ho a provar.", + "noResults": "No hi ha icones que coincideixin amb «{search}».", + "error": "No s'han pogut carregar les icones." }, "colorScheme": { "options": { @@ -1261,7 +1871,6 @@ "information": { "min": "Mín", "max": "Màx", - "days": "Dies", "hours": "Hores", "minutes": "Minuts" }, @@ -1298,16 +1907,16 @@ }, "userAvatar": { "menu": { - "switchToDarkMode": "Canvia al mode fosc", - "switchToLightMode": "Canvia al mode clar", + "open": "Obre el menú de l'avatar de l'usuari", "management": "Gestió", - "docker": "Docker", "preferences": "Les vostres preferències", "logout": "Tanca la sessió", "login": "Inicia la sessió", "homeBoard": "El vostre panell d'inici", - "loggedOut": "Sessió tancada", - "updateAvailable": "{countUpdates} actualitzacions disponibles: {tag}" + "updateAvailable": "{countUpdates} actualitzacions disponibles: {tag}", + "assistant": "Assistent", + "assistantThinking": "Està pensant", + "modifier": "Mod" } }, "dangerZone": "Zona de perill", @@ -1355,13 +1964,66 @@ "kilometersPerHour": "km/h", "milesPerHour": "mph" } + }, + "widgetQuery": { + "loading": "S'estan carregant les dades del giny" + }, + "total": "Total", + "filesystemUsage": "{count, plural, one {Mostra l'ús de # sistema de fitxers} other {Mostra l'ús de # sistemes de fitxers}}", + "field": { + "name": "Nom de la feina" + }, + "label": { + "new": "Nou" + }, + "entity": { + "apps": "Apps", + "boards": "Taulers", + "certificates": "Certificats", + "customWidgets": "Ginys personalitzats", + "groups": "Grups", + "integrations": "Integracions", + "invites": "Invitacions", + "logs": "Registres", + "media": "Multimèdia", + "searchEngines": "Motors de cerca", + "tasks": "Tasques", + "users": "Usuaris" } }, "section": { - "dynamic": { + "option": { + "showLabel": { + "label": "Mostra l'etiqueta", + "description": "Mostra l'etiqueta del contenidor damunt del seu contingut." + }, + "collapsible": { + "label": "Permet contraure", + "description": "Permet que els espectadors expandisquen i contraguin aquest contenidor." + }, + "showOpenAll": { + "label": "Mostra l'acció d'obrir-ho tot", + "description": "Mostra una acció que obri cada aplicació d'aquest contenidor en pestanyes noves." + }, + "scrollable": { + "label": "Desplaçable", + "description": "Mantén aquest contenidor amb la mida establerta i desplaça'n el contingut en lloc d'ampliar-lo per encabir-lo." + } + }, + "action": { + "openAllInNewTabsFor": "Obre totes les aplicacions de {name} en pestanyes" + }, + "openAllInNewTabs": { + "title": "Obre-ho tot en pestanyes", + "text": "És possible que alguns navegadors bloquegin l'obertura massiva de pestanyes per motius de seguretat. Homarr no ha pogut obrir totes les finestres perquè el navegador ha bloquejat aquesta acció. Permeteu «Obrir finestres emergents» i torneu-ho a provar." + }, + "container": { + "untitled": "Contenidor sense títol", "action": { - "create": "Nova secció dinàmica", - "remove": "Elimina la secció dinàmica" + "create": "Contenidor nou", + "remove": "Elimina el contenidor", + "expand": "Expandeix", + "collapse": "Contrau" }, "option": { "title": { @@ -1375,55 +2037,12 @@ } }, "remove": { - "title": "Elimina la secció dinàmica", - "message": "Esteu segur que voleu eliminar aquesta secció dinàmica? Els elements es mouran a la mateixa ubicació dins la secció pare." - } - }, - "category": { - "field": { - "name": { - "label": "Nom" - } - }, - "action": { - "create": "Nova categoria", - "edit": "Canvia el nom de la categoria", - "remove": "Elimina la categoria", - "moveUp": "Mou cap amunt", - "moveDown": "Mou cap avall", - "createAbove": "Nova categoria a sobre", - "createBelow": "Nova categoria a sota", - "openAllInNewTabs": "Obrir-ho tot en pestanyes" - }, - "create": { - "title": "Nova categoria", - "submit": "Afegeix categoria" - }, - "remove": { - "title": "Elimina la categoria", - "message": "Esteu segur que voleu eliminar la categoria {name}?" - }, - "edit": { - "title": "Canvia el nom de la categoria", - "submit": "Canvia el nom de la categoria" - }, - "menu": { - "label": { - "create": "Nova categoria", - "changePosition": "Canvia la posició", - "settings": "Configuració" - } - }, - "openAllInNewTabs": { - "title": "Obrir-ho tot en pestanyes", - "text": "Alguns navegadors poden bloquejar l'obertura massiva de pestanyes per motius de seguretat. Homarr no ha pogut obrir totes les finestres perquè el teu navegador ha bloquejat aquesta acció. Si us plau, permet \"Obrir finestres emergents\" i torna-ho a intentar." + "message": "Voleu eliminar aquest contenidor? El contingut es mourà a l'àrea circumdant." } } }, "item": { "action": { - "create": "Nou element", - "import": "Importa element", "edit": "Edita element", "moveResize": "Mou / redimensiona element", "duplicate": "Duplica element", @@ -1432,7 +2051,7 @@ "menu": { "label": { "settings": "Configuració", - "refresh": "Actualitza", + "settingsFor": "Configuració de {name}", "options": "Opcions", "actions": "Accions" }, @@ -1441,21 +2060,96 @@ "error": "Error", "loading": "S'està carregant", "idle": "Inactiu" + }, + "notification": { + "saveError": { + "title": "No s'ha pogut desar el giny", + "message": "S'han revertit els canvis del giny" + } } }, "create": { "title": "Trieu l'element a afegir", "search": "Filtrar elements", - "addToBoard": "Afegeix al tauler" + "addToBoard": "Afegeix al tauler", + "addAtPosition": "Afegeix un element aquí", + "destination": { + "label": "Afegeix a", + "description": "Trieu on ha d'aparèixer el giny. Encara el podreu moure més tard.", + "mainCanvas": "Llenç principal", + "leftRail": "Barra esquerra", + "rightRail": "Barra dreta" + }, + "connectionStatus": { + "ready": "Preparat", + "needsSetup": "Cal configurar-ho", + "noConnectionRequired": "No cal connexió" + }, + "customWidget": "Giny personalitzat", + "standalone": "Independent", + "missingIntegration": { + "title": "Connecteu primer un servei", + "noPermission": "Aquest giny necessita una connexió de servei compatible. Demaneu a un administrador que en connecti una i torneu-ho a provar." + }, + "notification": { + "success": { + "title": "Giny afegit", + "message": "{name} s'ha afegit a aquest tauler.", + "relocatedMessage": "S'ha afegit {name} a {destination} perquè la destinació seleccionada no estava disponible." + }, + "error": { + "title": "No s'ha pogut afegir l'element", + "message": "No s'ha pogut afegir l'element a aquest tauler" + } + } + }, + "selection": { + "summary": "{count, plural, one {# element seleccionat} other {# elements seleccionats}}", + "selected": "{count, plural, one {# seleccionat} other {# seleccionats}}", + "copy": "Copia", + "copied": "{count, plural, one {S'ha copiat # element al porta-retalls} other {S'han copiat # elements al porta-retalls}}", + "copyError": "No s'han pogut copiar els elements seleccionats. És possible que el navegador no permeti accedir al porta-retalls.", + "paste": "Enganxa", + "pasteShortcut": "Enganxa aquí els elements copiats (Ctrl / ⌘ + V)", + "pasted": "{count, plural, one {S'ha enganxat # element} other {S'han enganxat # elements}}", + "pasteError": "No s'ha pogut llegir el porta-retalls. És possible que el navegador no permeti accedir al porta-retalls.", + "pasteInvalid": "El porta-retalls no conté elements de tauler d'Homarr vàlids.", + "pasteUnavailable": "Els elements copiats no caben en aquest tauler.", + "removed": "{count, plural, one {S'ha eliminat # element} other {S'han eliminat # elements}}", + "move": "Mou", + "moveTo": "Mou els elements seleccionats", + "delete": "Elimina", + "clear": "Esborra la selecció", + "clearShortcut": "Esborra la selecció (Escapada)", + "saveErrorTitle": "No s'han pogut actualitzar els elements", + "saveErrorMessage": "No s'han pogut desar els canvis. S'ha actualitzat el tauler.", + "moveUnavailableTitle": "No s'han pogut moure els elements seleccionats", + "moveUnavailableMessage": "La destinació no té prou espai per a tota la selecció." }, "moveResize": { "title": "Mou / redimensiona element", + "entryLabel": "{name}, columna {column}, fila {row}", + "target": { + "numbered": "{name}, destinació {index}", + "located": "{name}, {location}, destinació {index}" + }, + "keyboard": { + "instructions": "Premeu Retorn o la barra espaiadora per començar l'edició amb el teclat. Utilitzeu les tecles de fletxa per moure, Maj més les tecles de fletxa per redimensionar i Escapada per aturar.", + "started": "S'ha iniciat l'edició amb el teclat. Utilitzeu les tecles de fletxa per moure, Maj més les tecles de fletxa per redimensionar i Escapada per aturar.", + "stopped": "S'ha aturat l'edició amb el teclat.", + "boundary": "Aquest canvi no cap dins d'aquesta secció." + }, "field": { + "section": { + "label": "Secció o barra" + }, "width": { - "label": "Amplada" + "label": "Amplada", + "shortLabel": "A" }, "height": { - "label": "Alçada" + "label": "Alçada", + "shortLabel": "A" }, "xOffset": { "label": "Desplaçament X" @@ -1469,18 +2163,36 @@ "title": "Edita element", "tab": { "widget": "Edita el widget", - "app": "Edita l'aplicació" + "app": "Edita l'aplicació", + "integration": "Edita la integració" }, "app": { "propagationNotice": "Els canvis d'aquesta aplicació s'aplicaran a tot arreu on s'utilitzi, en tots els taulers." }, + "integration": { + "action": "Edita la connexió", + "description": "Proveu o repareu una connexió seleccionada sense sortir d'aquest giny.", + "editLabel": "Edita la integració de {name}", + "fullAccessRequired": "Cal accés complet", + "propagationNotice": "Els canvis en aquesta integració s'apliquen a tot arreu on s'utilitza. La connexió es prova abans de desar-la.", + "loading": "S'està carregant la integració", + "loadError": "No s'ha pogut carregar aquesta integració. Torneu-ho a provar abans de canviar-ne la configuració de connexió." + }, + "preview": { + "integrationRequired": "Trieu una connexió per previsualitzar aquest giny.", + "size": "Mida del fitxer" + }, + "settings": { + "label": "Configuració del giny" + }, "advancedOptions": { "label": "Opcions avançades", "title": "Opcions avançades de l'element" }, "field": { "integrations": { - "label": "Integracions" + "label": "Integracions", + "removeLabel": "Elimina la integració de {name}" }, "title": { "label": "Títol" @@ -1494,17 +2206,18 @@ } }, "remove": { - "title": "Elimina element", "message": "Esteu segur que voleu eliminar aquest element?" + }, + "advancedFocus": { + "open": "Obre la vista avançada", + "close": "Tanca la vista avançada", + "label": "Vista avançada de {widget}" } }, "widget": { "integrationSelect": { "configureIntegrationFirst": "Connecteu primer una integració", - "loading": "S'està carregant...", - "placeholder": "Seleccioneu una opció", - "noResults": "No s'han trobat resultats", - "loadError": "No s'han pogut carregar les opcions" + "placeholder": "Seleccioneu una opció" }, "app": { "name": "Aplicació", @@ -1513,9 +2226,6 @@ "appId": { "label": "Trieu l'aplicació" }, - "openInNewTab": { - "label": "Obre en una pestanya nova" - }, "showTitle": { "label": "Mostra el nom de l'aplicació" }, @@ -1523,11 +2233,8 @@ "label": "Activar comprovació d'estat" }, "layout": { - "label": "Disseny", "option": { - "row": "Horitzontal", "row-reverse": "Horitzontal (invertit)", - "column": "Vertical", "column-reverse": "Vertical (invertit)" } }, @@ -1552,23 +2259,60 @@ "name": "Adreces d'interès", "description": "Mostra diversos enllaços d'aplicacions", "option": { - "title": { - "label": "Títol" + "showTitle": { + "label": "Mostra el títol del giny" + }, + "titleSize": { + "label": "Mida del títol del giny (px)" }, "layout": { "label": "Disposició", "option": { - "row": { - "label": "Horitzontal" - }, - "column": { - "label": "Vertical" - }, - "grid": { - "label": "Quadrícula" + "adaptive": { + "label": "Adaptable" }, "gridHorizontal": { "label": "Quadrícula horitzontal" + }, + "icons": { + "label": "Icones" + } + } + }, + "variant": { + "label": "Aparença", + "option": { + "soft": { + "label": "Suau" + }, + "filled": { + "label": "Ple" + }, + "outline": { + "label": "Contorn" + }, + "plain": { + "label": "Senzill" + } + } + }, + "spacing": { + "label": "Espaiat de les targetes", + "option": { + "xs": { + "label": "Extra petit" + }, + "sm": { + "label": "Petit" + }, + "md": { + "label": "Mitjà" + }, + "lg": { + "label": "Gran" + }, + "xl": { + "label": "Extragran" } } }, @@ -1581,17 +2325,28 @@ "hideHostname": { "label": "Amaga noms d'amfitrió" }, - "openNewTab": { - "label": "Obrir en una pestanya nova" - }, "withBorder": { "label": "Mostra la vora" }, + "grow": { + "label": "Amplia les targetes per omplir la fila" + }, + "customUrls": { + "label": "Enllaços personalitzats" + }, "items": { "label": "Adreces d'interès", - "add": "Afegeix una adreça d'interès" + "remove": "Elimina l'adreça d'interès", + "apps": { + "label": "Afegeix adreces d'interès", + "description": "Enganxa URL o cerca aplicacions existents. Arrossega les adreces d'interès de sota per reordenar-les.", + "placeholder": "Enganxa URL o cerca aplicacions", + "addUrl": "Afegeix aquesta URL", + "hint": "Prem Retorn per afegir una URL. Enganxa URL separades per comes o una per línia per afegir-ne diverses." + } } - } + }, + "empty": "Afegeix una URL o una aplicació a la configuració del giny" }, "archiveTeamWarrior": { "name": "ArchiveTeam Warrior", @@ -1600,33 +2355,61 @@ "showBroadcastMessage": { "label": "Mostra els missatges de difusió" } + }, + "noProjectSelected": "No hi ha cap projecte seleccionat", + "runnerStatus": "Executor: {status}", + "projectId": "Projecte: {id}", + "sessionReceived": "Sessió rebuda: {value}", + "sessionSent": "Sessió enviada: {value}", + "sessionId": "Sessió: {id}", + "startedAt": "Iniciat {date}", + "emptyItems": "No hi ha tasques actives ni recents en aquesta instantània", + "metric": { + "running": "En execució", + "completed": "Fet", + "failed": "Error", + "canceled": "Cancel·lat", + "download": "Descàrrega", + "upload": "Càrrega" + }, + "status": { + "running": "En execució", + "completed": "Completat", + "failed": "Error", + "canceled": "Cancel·lat", + "stopped": "Aturat", + "idle": "Inactiu", + "unknown": "Desconegut" + } + }, + "wud": { + "name": "What's Up Docker", + "description": "Mostra quants contenidors supervisats tenen actualitzacions disponibles.", + "title": "What's Up Docker", + "monitored": "Monitoritzats", + "updatesAvailable": "{count, plural, one {# actualització disponible} other {# actualitzacions disponibles}}", + "updateAvailable": "Actualització disponible", + "openReleaseNotes": "Obre les notes de versió", + "option": { + "showRing": { + "label": "Mostra l'anell d'actualització" + }, + "showUpdateList": { + "label": "Mostra la llista d'actualitzacions de contenidors", + "description": "Llista cada contenidor monitoritzat que té una actualització d'imatge disponible" + } } }, "dnsHoleSummary": { "name": "Resum del forat DNS", "description": "Mostra el resum del vostre forat DNS", "option": { - "layout": { - "label": "Disposició", - "option": { - "row": { - "label": "Horitzontal" - }, - "column": { - "label": "Vertical" - }, - "grid": { - "label": "Quadrícula" - } - } - }, "usePiHoleColors": { "label": "Utilitza els colors de Pi-Hole" } }, "error": { - "internalServerError": "No s'ha pogut obtenir el resum del forat DNS", - "integrationsDisconnected": "No hi ha dades disponibles, totes les integracions estan desconnectades" + "internalServerError": "No s'ha pogut obtenir el resum del forat DNS" }, "data": { "adsBlockedToday": "Bloquejats avui", @@ -1634,32 +2417,24 @@ "dnsQueriesToday": "Consultes d'avui", "domainsBeingBlocked": "Dominis a la llista de bloqueig" }, - "domainsTooltip": "A causa de múltiples integracions, Homarr no pot calcular el nombre exacte de dominis bloquejats" + "domainsTooltip": "A causa de múltiples integracions, Homarr no pot calcular el nombre exacte de dominis bloquejats", + "status": { + "enabled": "Activat", + "disabled": "Desactivat", + "unknown": "Desconegut" + } }, "dnsHoleControls": { "name": "Controls del forat DNS", "description": "Controleu PiHole o AdGuard des del vostre tauler", "option": { - "layout": { - "label": "Disposició", - "option": { - "row": { - "label": "Horitzontal" - }, - "column": { - "label": "Vertical" - }, - "grid": { - "label": "Quadrícula" - } - } - }, "showToggleAllButtons": { "label": "Mostra els botons per activar/desactivar tot" } }, "error": { - "internalServerError": "No s'ha pogut controlar el forat DNS" + "internalServerError": "No s'ha pogut controlar el forat DNS", + "bulkActionsFailed": "{count, plural, one {# acció ha fallat} other {# accions han fallat}}" }, "controls": { "enableAll": "Activa-ho tot", @@ -1670,8 +2445,6 @@ "disabled": "Desactivat", "processing": "Processant", "disconnected": "Desconnectat", - "hours": "Hores", - "minutes": "Minuts", "unlimited": "Deixeu-ho en blanc per il·limitat" } }, @@ -1683,16 +2456,10 @@ "label": "Mostra un títol o ciutat personalitzat", "description": "Mostra un títol personalitzat o el nom de la ciutat/país a sobre del rellotge." }, - "customTitle": { - "label": "Títol" - }, "is24HourFormat": { "label": "Format de 24 hores", "description": "Utilitza el format de 24 hores en lloc del de 12 hores" }, - "showSeconds": { - "label": "Mostra els segons" - }, "useCustomTimezone": { "label": "Utilitza una zona horària fixa" }, @@ -1711,29 +2478,295 @@ "label": "Format horari personalitzat", "description": "Utilitza ISO 8601 per formatar l'hora (això anul·larà altres opcions)" }, - "customDateFormat": { - "label": "Format de data personalitzat", - "description": "Utilitza ISO 8601 per formatar la data (això anul·larà altres opcions)" - }, "showWeather": { "label": "Mostra el temps", "description": "Mostra una petita icona del temps animada i la temperatura a la cantonada de la targeta" }, - "weatherLocation": { - "label": "Ubicació meteorològica" - }, "isWeatherFormatFahrenheit": { "label": "Utilitza Fahrenheit" + }, + "animateWeatherIcon": { + "label": "Anima la icona del temps", + "description": "Anima la icona del temps. Està desactivat per defecte i sempre es desactiva quan se sol·licita moviment reduït." + }, + "colorWeatherByDayNight": { + "label": "Color del temps segons el dia o la nit", + "description": "Aplica a la icona del temps i a la temperatura un color de dia o de nit, segons si actualment és de dia o de nit a la ubicació triada." + }, + "dayWeatherColor": { + "label": "Color de dia" + }, + "nightWeatherColor": { + "label": "Color de nit" + }, + "worldClockCities": { + "label": "Ciutats del rellotge mundial", + "description": "Afegeix i ordena fins a sis ciutats per a la vista avançada." } + }, + "timezoneList": { + "timezone": "Fus horari", + "cityLabel": "Etiqueta de la ciutat", + "searchPlaceholder": "Cerca fusos horaris", + "noResults": "No s'ha trobat cap fus horari", + "unsupportedOption": "No compatible: {timeZone}", + "add": "Afegeix una ciutat", + "remove": "Elimina {city}", + "reorder": "Reordena {city}", + "limit": "{count} de {maximum} ciutats configurades" + }, + "worldClock": { + "primary": "Rellotge principal", + "local": "Hora local", + "today": "Avui", + "tomorrow": "Demà", + "yesterday": "Ahir", + "noSecondaryCities": "Afegeix ciutats a les opcions del giny per comparar-les aquí.", + "unsupportedPrimaryTitle": "El fus horari principal no està disponible", + "unsupportedPrimary": "{timeZone} no és compatible amb aquest navegador. Es mostra UTC com a alternativa clarament indicada.", + "unsupportedTimeZone": "Fus horari no compatible: {timeZone}", + "accessibleTime": "{city}: {time}, {date}, {timeZone}", + "advancedLabel": "Rellotge mundial avançat", + "cities": "Rellotges mundials", + "cityCount": "{count} fusos horaris", + "timeBarLabel": "Posició de l'hora del dia en 24 hores per a {city}", + "dayProgress": "{percent}% transcorregut · falten {hours} h {minutes} min", + "phaseLegend": "Llegenda de l'hora del dia", + "tick": { + "midnight": "00", + "morning": "06", + "noon": "12", + "evening": "18", + "end": "24" + }, + "phaseRange": { + "night": "00–05 · 21–24", + "dawn": "05–08", + "day": "08–18", + "dusk": "18–21" + }, + "phase": { + "night": "Nit", + "dawn": "Alba", + "day": "Dia", + "dusk": "Capvespre" + } + } + }, + "airQuality": { + "name": "Qualitat de l'aire i UV", + "description": "Mostra la qualitat de l'aire, l'índex ultraviolat, els contaminants i el pol·len d'una ubicació.", + "option": { + "location": { + "label": "Ubicació de la qualitat de l'aire" + }, + "aqiStandard": { + "label": "Estàndard de l'ICA", + "options": { + "auto": "Automàtic segons la configuració regional", + "european": "ICA europeu", + "us": "ICA dels EUA" + } + }, + "showUv": { + "label": "Mostra l'índex UV" + }, + "showPollutants": { + "label": "Mostra les concentracions de contaminants" + }, + "showPollen": { + "label": "Mostra les concentracions de pol·len" + } + }, + "category": { + "good": "Bona", + "fair": "Acceptable", + "moderate": "Moderada", + "unhealthySensitive": "No saludable per a grups sensibles", + "unhealthy": "No saludable", + "poor": "Dolenta", + "veryPoor": "Molt dolenta", + "veryUnhealthy": "Molt insalubre", + "extremelyPoor": "Extremadament dolenta", + "hazardous": "Perillosa", + "unknown": "Sense lectura de l'ICA" + }, + "uv": { + "label": "Índex UV", + "category": { + "low": "Baix", + "moderate": "Moderat", + "high": "Alt", + "veryHigh": "Molt alt", + "extreme": "Extrem", + "unknown": "Sense lectura" + } + }, + "dominantPollutant": "Contaminant dominant", + "aqiLabel": "IQA", + "strongestPollen": "Pol·len més abundant", + "unit": { + "concentration": "{value} µg/m³", + "pollen": "{value} grans/m³" + }, + "pollutant": { + "pm2_5": "PM2.5", + "pm10": "PM10", + "ozone": "Ozó", + "nitrogenDioxide": "Diòxid de nitrogen", + "sulphurDioxide": "Diòxid de sofre", + "carbonMonoxide": "Monòxid de carboni" + }, + "pollen": { + "alder": "Vern", + "birch": "Bedoll", + "grass": "Herba", + "mugwort": "Artemisa", + "olive": "Olivera", + "ragweed": "Ambrosia" + }, + "compact": { + "sixHourTrend": "Tendència de l'AQI per a les pròximes sis hores" + }, + "advanced": { + "observedAt": "Actualitzat a les {time}", + "next24Hours": "Pròximes 24 hores", + "pollutants": "Concentracions de contaminants", + "pollen": "Concentracions de pol·len", + "sevenDayForecast": "Previsió màxima de 7 dies", + "aqiValue": "IQA {value}", + "uvValue": "UV {value}", + "uvShort": "UV {value}", + "noForecast": "No hi ha dades de previsió disponibles" + } + }, + "countdown": { + "name": "Comptes enrere", + "description": "Fa un seguiment dels propers esdeveniments i dels aniversaris recurrents.", + "option": { + "events": { + "label": "Esdeveniments", + "description": "Afegeix i ordena fins a 20 comptes enrere puntuals o anuals. Les dates s'introdueixen en la zona horària seleccionada." + }, + "showProgress": { + "label": "Mostra el progrés" + }, + "showSeconds": { + "label": "Mostra els segons", + "description": "Mantén els segons visibles per a cada esdeveniment proper." + } + }, + "dateTimeEventList": { + "newEvent": "Esdeveniment nou", + "add": "Afegeix un esdeveniment", + "remove": "Elimina {event}", + "reorder": "Reordena {event}", + "eventLabel": "Etiqueta de l'esdeveniment", + "timezone": "Zona horària", + "unsupportedOption": "No compatible: {timeZone}", + "recurrence": "Repetició", + "recurrenceOption": { + "none": "No es repeteix", + "yearly": "Cada any" + }, + "target": "Data i hora de l'esdeveniment", + "trackProgress": "Fes un seguiment del progrés des d'una data d'inici", + "start": "Data i hora d'inici del progrés", + "confirmDateTime": "Confirma la data i l'hora", + "limit": "{count} de {maximum} esdeveniments configurats" + }, + "empty": { + "title": "Encara no hi ha comptes enrere", + "description": "Afegeix un esdeveniment a les opcions del giny per començar el compte enrere." + }, + "completed": "Completat", + "yearly": "Anual", + "progress": "Progrés de l'esdeveniment", + "upcoming": "Proper", + "completedEvents": "Esdeveniments completats", + "invalid": { + "title": "No es poden mostrar alguns esdeveniments", + "description": "{count, plural, one {Un esdeveniment té una data no vàlida o una zona horària no compatible.} other {# esdeveniments tenen una data no vàlida o una zona horària no compatible.}}", + "value": "No disponible" + }, + "alert": { + "notifications": "Notificacions del navegador", + "permissionDenied": "Les notificacions estan bloquejades en aquest navegador.", + "reached": "El compte enrere ha arribat al seu objectiu." + } + }, + "timer": { + "name": "Temporitzador / Pomodoro", + "description": "Executa un temporitzador senzill o una seqüència Pomodoro configurable.", + "option": { + "mode": { + "label": "Mode", + "options": { + "timer": "Temporitzador", + "pomodoro": "Pomodoro" + } + }, + "timerMinutes": { + "label": "Minuts del temporitzador" + }, + "focusMinutes": { + "label": "Minuts de concentració" + }, + "shortBreakMinutes": { + "label": "Minuts de descans curt" + }, + "longBreakMinutes": { + "label": "Minuts de descans llarg" + }, + "sessionsBeforeLongBreak": { + "label": "Sessions de concentració abans d'un descans llarg" + }, + "autoStartBreaks": { + "label": "Inicia automàticament els descansos" + }, + "autoStartFocus": { + "label": "Inicia automàticament les sessions de concentració" + } + }, + "phase": { + "timer": "Temporitzador", + "focus": "Concentració", + "shortBreak": "Descans curt", + "longBreak": "Descans llarg" + }, + "action": { + "start": "Inicia", + "pause": "Pausa", + "reset": "Restableix" + }, + "attention": { + "timerComplete": "Temporitzador completat", + "phaseReady": "{phase} preparat" + }, + "progress": "Progrés del temporitzador: {progress}%", + "compact": { + "completedFocus": "{count, plural, =0 {No s'ha completat cap sessió de concentració} one {S'ha completat # sessió de concentració} other {S'han completat # sessions de concentració}}" + }, + "alert": { + "title": "Temporitzador completat", + "completed": "{phase} completat." + }, + "advanced": { + "sequence": "Seqüència Pomodoro", + "focusSession": "Concentració {session}", + "settings": "Configuració permanent", + "settingsHint": "Utilitza el menú contextual del giny per editar aquesta configuració del tauler.", + "localAlerts": "Alertes locals", + "notifications": "Notificacions del navegador", + "sound": "Sons del temporitzador", + "localAlertsHint": "Els sons del temporitzador estan activats per defecte. Els sons i les notificacions només s'apliquen a aquest giny en aquest navegador.", + "notificationsDenied": "Les notificacions estan bloquejades en aquest navegador." } }, "minecraftServerStatus": { "name": "Estat del Servidor Minecraft", "description": "Mostra l'estat d'un servidor Minecraft", "option": { - "title": { - "label": "Títol" - }, "domain": { "label": "Adreça del servidor" }, @@ -1753,11 +2786,21 @@ "noStation": "No s'ha seleccionat cap estació", "option": { "baseUrl": { - "label": "URL de Search.ch" + "label": "URL de Search.ch", + "description": "Els URL personalitzats han de resoldre a una adreça IP pública. Els amfitrions privats i locals es rebutgen." }, "station": { - "label": "Estació" + "label": "Estació", + "placeholder": "Cerca una estació" } + }, + "error": { + "customSourceUnavailable": "La font de l'horari no està disponible. Comprova que el seu URL resolgui a una adreça IP pública.", + "stationSearch": "No s'han pogut cercar estacions. Comprova l'URL personalitzat i l'accés al tauler." + }, + "warning": { + "stale": "No s'ha pogut actualitzar l'horari. Es mostren les sortides actualitzades per darrera vegada a les {time}.", + "staleCompact": "Dades obsoletes" } }, "notebook": { @@ -1789,24 +2832,31 @@ "directionRtl": "Estableix la direcció del text de dreta a esquerra", "blockquote": "Citació", "horizontalLine": "Línia horitzontal", + "details": "Commuta la secció replegable", + "expandDetails": "Desplega la secció replegable", + "collapseDetails": "Replega la secció replegable", "bulletList": "Llista no ordenada", "orderedList": "Llista ordenada", - "checkList": "Llista de verificació", + "checkList": "Llista de control", "increaseIndent": "Augmenta el sagnat", "decreaseIndent": "Disminueix el sagnat", "link": "Enllaç", "unlink": "Elimina l'enllaç", "image": "Incrusta una imatge", - "addTable": "Afegeix una taula", + "insertTable": "Insereix una taula", + "insertTableSize": "Insereix una taula de {columns} × {rows}", "deleteTable": "Elimina la taula", "colorCell": "Color de la cel·la", - "mergeCell": "Fusiona/desfusiona cel·les", - "addColumnLeft": "Afegeix una columna a l'esquerra", - "addColumnRight": "Afegeix una columna a la dreta", + "mergeCells": "Combina les cel·les", + "splitCell": "Divideix la cel·la", + "addColumnLeft": "Afegir columna a l'esquerra", + "addColumnRight": "Afegir columna a la dreta", "deleteColumn": "Elimina la columna", "addRowTop": "Afegeix una fila a dalt", "addRowBelow": "Afegeix una fila a baix", - "deleteRow": "Elimina la fila" + "deleteRow": "Elimina la fila", + "toggleHeaderRow": "Commuta la fila de capçalera", + "toggleHeaderColumn": "Commuta la columna de capçalera" }, "align": { "left": "Esquerra", @@ -1817,8 +2867,6 @@ "clearColor": "Esborra el color", "source": "Font", "widthPlaceholder": "Valor en % o píxels", - "columns": "Columnes", - "rows": "Files", "width": "Amplada", "height": "Alçada" }, @@ -1830,7 +2878,9 @@ "discard": "Descarta els canvis", "keepEditing": "Continua editant" } - } + }, + "saveFailed": "No s'ha pogut desar la nota", + "documentStats": "{words, plural, one {# paraula} other {# paraules}} · {characters, plural, one {# caràcter} other {# caràcters}}" }, "anchorNote": { "name": "Nota d'Anchor", @@ -1839,9 +2889,6 @@ "noteId": { "label": "Nota" }, - "showTitle": { - "label": "Mostra el títol" - }, "showUpdatedAt": { "label": "Mostra l'última actualització" } @@ -1851,14 +2898,20 @@ "notFound": "No s'ha trobat la nota", "noNotes": "No s'han trobat notes", "integrationRequired": "Selecciona primer una integració d'Anchor", - "updatedAt": "Actualitzat {date}", "untitled": "Sense títol", - "edit": "Edita", - "save": "Desa", - "cancel": "Cancel·la", "readOnlyViewer": "Tens accés de visualització a aquesta nota. L'edició està desactivada.", "saveForbidden": "No tens permís per editar aquesta nota.", - "saveFailed": "No s'ha pogut desar aquesta nota. Torna-ho a provar." + "saveFailed": "No s'ha pogut desar aquesta nota. Torna-ho a provar.", + "createdAt": "Creat el {date}", + "permission": { + "owner": "Propietari", + "editor": "Editor", + "viewer": "Lector" + }, + "status": { + "pinned": "Fixat", + "archived": "Arxivat" + } }, "iframe": { "name": "iFrame", @@ -1917,6 +2970,25 @@ "clickable": { "label": "Clicable" } + }, + "state": { + "on": "Activat", + "off": "Desactivat", + "unavailable": "No disponible", + "unknown": "Desconegut" + }, + "advanced": { + "entityId": "ID de l'entitat: {id}", + "lastChanged": "Canviat el {date}", + "attribute": { + "unit": "Unitat", + "deviceClass": "Classe de dispositiu", + "icon": "Icona" + } + }, + "error": { + "loadFailed": "No s'ha pogut carregar l'entitat", + "toggleFailed": "No s'ha pogut actualitzar l'entitat" } }, "smartHome-executeAutomation": { @@ -1932,11 +3004,31 @@ }, "spotlightAction": { "run": "Executa {name}" + }, + "advanced": { + "lastExecuted": "Darrera execució a les {time}", + "automationId": "ID de l'automatització: {id}", + "ready": "A punt per executar", + "noPermission": "No tens permís per executar aquesta automatització" + }, + "status": { + "running": "S'està executant l'automatització", + "success": "Automatització completada" + }, + "error": { + "executeFailed": "No s'ha pogut executar l'automatització" } }, "stockPrice": { "name": "Preu de les accions", "description": "Mostra el preu actual de les accions d'una empresa", + "advanced": { + "currentPrice": "Preu actual", + "previousClose": "Tancament anterior", + "changePercentage": "Canvi (%)", + "minimum": "Mínim", + "maximum": "Màxim" + }, "option": { "stock": { "label": "Símbol de l'acció" @@ -2007,6 +3099,10 @@ "label": "1 mes" } } + }, + "showDetails": { + "label": "Mostra els detalls", + "description": "Mostra el nom, el canvi i l'interval de temps a la vista compacta. Desactiva-ho per mostrar només el símbol i el preu." } } }, @@ -2032,8 +3128,15 @@ "label": "Acaba a" }, "showUnmonitored": { - "label": "Mostrar no monitoritzat" + "label": "Mostrar no monitorat" } + }, + "advanced": { + "previousMonth": "Mostra el mes anterior", + "nextMonth": "Mostra el mes següent", + "eventCount": "{count, plural, one {# esdeveniment} other {# esdeveniments}}", + "loading": "S'estan carregant els esdeveniments del calendari...", + "noEvents": "No hi ha esdeveniments aquest mes" } }, "weather": { @@ -2046,16 +3149,18 @@ "disableTemperatureDecimals": { "label": "Desactivar decimals de temperatura" }, + "animateIcons": { + "label": "Anima les icones del temps" + }, + "showHumidity": { + "label": "Mostra la humitat" + }, "showCurrentWindSpeed": { - "label": "Mostrar velocitat actual del vent", - "description": "Només al temps actual" + "label": "Mostrar velocitat actual del vent" }, "useImperialSpeed": { "label": "Usa mph per al vent" }, - "location": { - "label": "Ubicació meteorològica" - }, "showCity": { "label": "Mostra la ciutat" }, @@ -2065,15 +3170,12 @@ "forecastDayCount": { "label": "Quantitat de dies de previsió", "description": "Quan el widget no és prou ample, es mostren menys dies" - }, - "dateFormat": { - "label": "Format de data", - "description": "Com s'ha de mostrar la data" } }, "currentWindSpeed": "{currentWindSpeed} {unit}", + "disabled": "Les dades meteorològiques no estan disponibles perquè les connexions sortints estan desactivades", "dailyForecast": { - "sunrise": "Sortida del sol", + "sunrise": "Albada", "sunset": "Posta de sol", "maxWindSpeed": "Velocitat màxima del vent: {maxWindSpeed} {unit}", "maxWindGusts": "Ràfegues màximes: {maxWindGusts} {unit}", @@ -2094,6 +3196,47 @@ "thunderstorm": "Tempesta", "thunderstormWithHail": "Tempesta amb calamarsa", "unknown": "Desconegut" + }, + "details": "Mostra els detalls meteorològics", + "detailsFor": "Mostra els detalls meteorològics del {date}", + "advanced": { + "forecast": "Previsió de 7 dies", + "hourlyForecast": "Properes 24 hores", + "day": "Dia", + "time": "Hora", + "conditions": "Condicions", + "temperature": "Temperatura", + "feelsLike": "Sensació de {temperature}", + "feelsLikeLabel": "Sensació", + "feelsLikeRange": "Sensació: {maximum} / {minimum}", + "highLow": "Màxima {maximum} · mínima {minimum}", + "observedAt": "Actualitzat a les {time}", + "humidity": "Humitat", + "averageHumidity": "Humitat mitjana: {humidity}%", + "currentHumidity": "Humitat actual", + "wind": "Vent / ràfegues ({unit})", + "currentWind": "Vent / ràfegues actuals", + "windValue": "{speed} / {gusts} {unit}", + "windDetail": "Vent / ràfegues màxims: {speed} / {gusts} {unit}", + "nextHourPrecipitation": "Precipitació durant la propera hora", + "precipitationChance": "Probabilitat de precipitació", + "precipitationValue": "{probability}% · {amount} mm", + "precipitationDetail": "Precipitació: {probability}% · {amount} mm", + "todayUv": "Índex UV màxim d'avui", + "uvIndex": "Índex UV màxim: {value}", + "daylight": "Llum diürna: {duration}", + "hourlyTooltip": "Sensació de {feelsLike}{temperatureUnit} · {amount} mm · {humidity}% d'humitat · vent de {speed} {speedUnit}", + "hourlyTooltipWithoutHumidity": "Sensació de {feelsLike}{temperatureUnit} · {amount} mm · vent de {speed} {speedUnit}", + "detailLabel": { + "feelsLike": "Sensació", + "precipitation": "Precipitació", + "humidity": "Humitat mitjana", + "wind": "Vent / ràfegues màxims", + "uv": "Índex UV màxim", + "daylight": "Llum diürna" + }, + "sun": "Sortida / posta de sol", + "noForecast": "No hi ha dades de previsió disponibles" } }, "indexerManager": { @@ -2106,8 +3249,15 @@ }, "title": "Gestor d'indexadors", "testAll": "Prova-ho tot", + "status": { + "healthy": "En bon estat", + "unhealthy": "En mal estat", + "disabled": "Desactivat", + "unknown": "Estat no disponible" + }, "error": { - "internalServerError": "No s'ha pogut obtenir l'estat dels indexadors" + "internalServerError": "No s'ha pogut obtenir l'estat dels indexadors", + "testAll": "La prova de l'indexador ha fallat. Torna-ho a provar." } }, "healthMonitoring": { @@ -2136,11 +3286,6 @@ "fileSystem": { "label": "Mostra informació del sistema de fitxers" }, - "visibleStorageVolumes": { - "label": "Volums d'emmagatzematge visibles", - "description": "Només està disponible quan totes les integracions seleccionades són de Synology. Deixeu-ho buit per mostrar tots els volums d'emmagatzematge detectats.", - "placeholder": "Seleccioneu volums d'emmagatzematge" - }, "defaultTab": { "label": "Pestanya predeterminada" }, @@ -2163,17 +3308,27 @@ "minutes": "{count} minuts", "used": "Utilitzat", "available": "Disponible", - "lastSeen": "Última actualització d'estat: {lastSeen}" + "lastSeen": "Última actualització d'estat: {lastSeen}", + "updatesAvailable": "{count, plural, one {Hi ha # actualització disponible} other {Hi ha # actualitzacions disponibles}}", + "rebootRequired": "Cal reiniciar", + "rebootNotRequired": "No cal reiniciar" + }, + "smartStatus": { + "attributesWithinThresholds": "SMART: atributs dins dels llindars", + "attributesFailed": "SMART: {attributes} han fallat", + "noCriticalWarning": "SMART: l'SSD no ha informat de cap avís", + "criticalWarning": "SMART: l'SSD ha informat d'un avís crític" + }, + "gauge": { + "cpuUsage": "Ús de la CPU", + "cpuTemperature": "Temperatura de la CPU", + "memoryUsage": "Ús de la memòria", + "gpuUsage": "Ús de la GPU {name}" }, - "memory": {}, "error": { "internalServerError": "No s'ha pogut obtenir l'estat de salut" }, "cluster": { - "summary": { - "cpu": "CPU", - "memory": "RAM" - }, "resource": { "node": { "name": "Nodes" @@ -2209,8 +3364,6 @@ "table": { "header": { "name": "Nom", - "cpu": "CPU", - "memory": "RAM", "node": "Node" } } @@ -2220,33 +3373,29 @@ "name": "Estadístiques Docker", "description": "Estadístiques dels teus contenidors (aquest giny només es pot afegir amb privilegis d'administrador)", "option": { - "columns": { - "label": "Columnes que es mostraran" + "endpointIds": { + "label": "Entorns Docker", + "description": "Deixa-ho buit per mostrar els contenidors de tots els entorns Docker", + "placeholder": "Tots els entorns Docker" }, - "enableRowSorting": { - "label": "Activa l'ordenació dels elements" + "containerFilter": { + "label": "Contenidors a filtrar" + }, + "filterIsWhitelist": { + "label": "Filtra com a llista blanca" }, "defaultSort": { - "label": "Columna utilitzada per ordenar per defecte", "option": { "name": "Nom", "state": "Estat", "cpuUsage": "Ús de la CPU", "memoryUsage": "Ús de la memòria" } - }, - "descendingDefaultSort": { - "label": "Inverteix l'ordenació" - }, - "columnOrder": { - "label": "Ordre de les columnes" - }, - "columnWidths": { - "label": "Amplades de les columnes" } }, "error": { "internalServerError": "No s'han obtingut estadístiques", + "endpointsUnavailable": "Els punts finals de Docker no estan disponibles", "layoutSaveTitle": "No s'ha desat la disposició de la taula", "layoutSaveMessage": "No s'ha pogut desar la disposició de la taula de Docker. Torneu a moure o canviar la mida de la columna." }, @@ -2255,7 +3404,6 @@ } }, "coolify": { - "name": "Coolify", "description": "Visió general de la teva instància de Coolify amb servidors i aplicacions", "option": { "showServers": { @@ -2281,17 +3429,49 @@ "internalServerError": "No s'han pogut obtenir les dades de Coolify" }, "server": { - "buildServer": "Muntar" + "buildServer": "Muntar", + "resourceCounts": "{applications, plural, one {# aplicació} other {# aplicacions}} / {services, plural, one {# servei} other {# serveis}}", + "reachability": "Connectivitat", + "usability": "Usabilitat" + }, + "source": { + "url": "Origen: {url}", + "unavailable": "{source}: no disponible" }, "instances": { "title": "Instàncies" + }, + "action": { + "openResource": "Obre {name}", + "openLogs": "Obre els registres de {name}", + "showIp": "Mostra l'adreça IP", + "hideIp": "Amaga l'adreça IP" + }, + "status": { + "running": "En execució", + "stopped": "Aturat", + "exited": "Finalitzat", + "starting": "S'està iniciant", + "restarting": "S'està reiniciant", + "unknown": "Desconegut", + "online": "En línia", + "offline": "Fora de línia", + "reachable": "Accessible", + "unreachable": "Inaccessible", + "usable": "Utilitzable", + "unusable": "Inutilitzable" } }, "vpn": { "name": "VPN", "description": "Resum de les vostres connexions VPN", "serviceUnavailable": "VPN no disponible", - "option": {} + "status": { + "running": "En execució", + "notRunning": "No està en execució", + "unavailable": "No disponible", + "vpn": "VPN: {status}" + } }, "ups": { "name": "UPS", @@ -2318,14 +3498,19 @@ "runtime": "Autonomia", "load": "Càrrega", "input": "Entrada", - "output": "Sortida" + "output": "Sortida", + "batteryVoltage": "Tensió de la bateria", + "power": "Potència", + "temperature": "Temperatura", + "manufacturer": "Fabricant", + "model": "Model", + "serial": "Número de sèrie" }, "error": { "internalServerError": "No s'han pogut obtenir les dades de l'UPS" } }, "tracearr": { - "name": "Tracearr", "description": "Supervisió millorada del servidor multimèdia amb dades detallades de transmissió i transcodificació", "option": { "showStreams": { @@ -2413,10 +3598,7 @@ "label": "Esdeveniment", "description": "Mostra el nombre total d'ocurrències d'un esdeveniment específic", "placeholder": "Selecciona un esdeveniment", - "loading": "Carregant esdeveniments...", - "noEvents": "No s'han trobat esdeveniments", - "none": "Cap esdeveniment", - "configureWebsiteFirst": "Selecciona primer un lloc web per carregar els esdeveniments" + "none": "Cap esdeveniment" }, "chartType": { "label": "Tipus de gràfic", @@ -2447,26 +3629,21 @@ "eventNames": { "label": "Esdeveniments", "description": "Selecciona un o més esdeveniments per al gràfic", - "placeholder": "Selecciona esdeveniments...", - "loading": "Carregant esdeveniments...", - "noEvents": "No s'han trobat esdeveniments", - "configureWebsiteFirst": "Selecciona primer un lloc web per carregar els esdeveniments" + "placeholder": "Selecciona esdeveniments..." }, "topCount": { "label": "Elements que es mostraran", "description": "Nombre màxim d'elements que es mostraran (màx. 500)" + }, + "events": { + "loading": "S'estan carregant els esdeveniments...", + "noEvents": "No s'ha trobat cap esdeveniment", + "configureWebsiteFirst": "Selecciona primer un lloc web per carregar els esdeveniments" } }, "event": { - "occurrences": "esdeveniments", "label": "esdeveniments" }, - "topPages": { - "direct": "Directe" - }, - "topReferrers": { - "direct": "Directe" - }, "events": { "selectPrompt": "Selecciona esdeveniments per al gràfic" }, @@ -2475,6 +3652,9 @@ "noWebsite": "No s'ha configurat cap lloc web", "noData": "No hi ha dades disponibles", "internalServerError": "No s'han pogut obtenir les dades d'Umami" + }, + "top": { + "direct": "Directe" } }, "common": { @@ -2502,7 +3682,8 @@ }, "integration": { "noData": "No s'ha trobat cap integració", - "description": "Feu clic a per crear una nova integració" + "description": "Feu clic a per crear una nova integració", + "manage": "Gestiona les integracions" }, "app": { "noData": "No s'ha trobat cap aplicació", @@ -2513,7 +3694,61 @@ "noIntegration": "No s'ha seleccionat cap integració", "noData": "No hi ha dades d'integració disponibles" }, - "option": {} + "integrationDisconnected": "No hi ha dades disponibles; totes les integracions estan desconnectades", + "updatedAt": "Actualitzat el {date}", + "title": { + "label": "Títol" + }, + "openInNewTab": { + "label": "Obre en una pestanya nova" + }, + "showTitle": { + "label": "Mostra el títol" + }, + "weatherLocation": { + "label": "Ubicació meteorològica" + }, + "layout": { + "label": "Disposició", + "option": { + "horizontal": "Horitzontal", + "vertical": "Vertical", + "grid": "Quadrícula" + } + }, + "select": { + "loading": "S'està carregant...", + "loadError": "No s'han pogut carregar les opcions" + }, + "dateFormat": { + "label": "Format de data", + "description": "Com s'ha de mostrar la data" + }, + "visibleStorageVolumes": { + "label": "Volums d'emmagatzematge visibles", + "description": "Només disponible quan totes les integracions seleccionades són OpenMediaVault o Synology. Deixa-ho buit per mostrar tots els volums d'emmagatzematge detectats.", + "placeholder": "Selecciona els volums d'emmagatzematge" + }, + "tableOptions": { + "columns": { + "label": "Columnes a mostrar" + }, + "columnOrder": { + "label": "Ordre de les columnes" + }, + "columnWidths": { + "label": "Amplades de les columnes" + }, + "enableRowSorting": { + "label": "Activa l'ordenació de les files" + }, + "defaultSort": { + "label": "Columna utilitzada per ordenar per defecte" + }, + "invertSorting": { + "label": "Inverteix l'ordenació" + } + } }, "video": { "name": "Transmissió de vídeo", @@ -2572,6 +3807,7 @@ "transcoding": "Transcodificació", "paused": "En pausa", "remaining": "Queden {minutes} min", + "seasonEpisode": "T{season} E{episode}", "metadata": { "title": "Dades curioses", "video": { @@ -2589,11 +3825,16 @@ "resolution": "Resolució", "target": "Còdec de destinació" } - } + }, + "unknownUser": "Usuari desconegut" + }, + "summary": { + "sessions": "{count, plural, one {# sessió} other {# sessions}}", + "playing": "{count} en reproducció", + "transcoding": "{count} transcodificant" } }, "paperlessNgx": { - "name": "Paperless-ngx", "description": "Visió general del teu arxiu de documents de Paperless-ngx", "documentsTotal": "Total de documents", "documentsInbox": "Safata d'entrada", @@ -2637,6 +3878,192 @@ "internalServerError": "No s'han pogut obtenir les dades de Paperless-ngx" } }, + "patchmon": { + "description": "Resum de l'estat dels pedaços dels amfitrions des de PatchMon", + "title": "Estadístiques de PatchMon", + "totalHosts": "Amfitrions totals", + "hostsNeedingUpdates": "Necessiten actualitzacions", + "securityUpdates": "Actualitzacions de seguretat", + "upToDateHosts": "Amfitrions actualitzats", + "hostsWithSecurityUpdates": "Amfitrions amb actualitzacions de seguretat", + "recentUpdates24h": "Actualitzacions (24 h)", + "totalOutdatedPackages": "Paquets obsolets", + "totalRepos": "Repositoris", + "osDistribution": "Distribució del sistema operatiu", + "compliance": "Compliment dels pedaços", + "complianceRatio": "{upToDate} / {total}", + "lastUpdated": "Actualitzat {time}", + "option": { + "showTotalHosts": { + "label": "Mostra el total d'amfitrions", + "description": "Mostra el nombre total d'amfitrions supervisats" + }, + "showHostsNeedingUpdates": { + "label": "Mostra els amfitrions que necessiten actualitzacions", + "description": "Mostra els amfitrions amb almenys un paquet obsolet" + }, + "showSecurityUpdates": { + "label": "Mostra les actualitzacions de seguretat", + "description": "Mostra el nombre total d'actualitzacions de seguretat disponibles" + }, + "showUpToDateHosts": { + "label": "Mostra els amfitrions actualitzats", + "description": "Mostra els amfitrions sense cap paquet obsolet" + }, + "showHostsWithSecurityUpdates": { + "label": "Mostra els amfitrions amb actualitzacions de seguretat", + "description": "Mostra els amfitrions que necessiten pedaços de seguretat" + }, + "showRecentUpdates24h": { + "label": "Mostra les actualitzacions recents (24 h)", + "description": "Mostra el nombre d'actualitzacions aplicades durant les darreres 24 hores" + }, + "showTotalOutdatedPackages": { + "label": "Mostra els paquets obsolets", + "description": "Mostra el nombre total de paquets obsolets de tots els amfitrions" + }, + "showTotalRepos": { + "label": "Mostra els repositoris", + "description": "Mostra el nombre de repositoris actius que se supervisen" + }, + "enableThresholdColors": { + "label": "Activa els colors dels llindars", + "description": "Acoloreix els valors de les estadístiques de verd, groc o vermell segons els nivells de gravetat predefinits" + }, + "useCustomThresholds": { + "label": "Llindars avançats", + "description": "Personalitzeu els llindars d'avís i crític per estadística mitjançant recomptes absoluts o percentatges del total d'amfitrions" + }, + "thresholdMode": { + "option": { + "absolute": "Recompte absolut", + "percent": "Percentatge del total d'amfitrions" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "Mode de llindar d'amfitrions que necessiten actualitzacions", + "description": "Compareu el recompte d'amfitrions que necessiten actualitzacions com a valor absolut o percentatge del total d'amfitrions" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "Llindar d'avís d'amfitrions que necessiten actualitzacions" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "Llindar crític d'amfitrions que necessiten actualitzacions" + }, + "securityUpdatesThresholdMode": { + "label": "Mode de llindar d'actualitzacions de seguretat", + "description": "Compareu el recompte d'actualitzacions de seguretat com a valor absolut o percentatge del total d'amfitrions" + }, + "securityUpdatesWarningAt": { + "label": "Llindar d'avís d'actualitzacions de seguretat" + }, + "securityUpdatesCriticalAt": { + "label": "Llindar crític d'actualitzacions de seguretat" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "Mode de llindar d'amfitrions amb actualitzacions de seguretat", + "description": "Compareu el recompte d'amfitrions com a valor absolut o percentatge del total d'amfitrions" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "Llindar d'avís d'amfitrions amb actualitzacions de seguretat" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "Llindar crític d'amfitrions amb actualitzacions de seguretat" + }, + "upToDateHostsThresholdMode": { + "label": "Mode de llindar d'amfitrions actualitzats", + "description": "Compareu el recompte d'amfitrions actualitzats com a valor absolut o percentatge del total d'amfitrions" + }, + "upToDateHostsWarningAt": { + "label": "Llindar d'avís d'amfitrions actualitzats", + "description": "Introduïu el groc quan el valor sigui igual o superior a aquest llindar però inferior a la cobertura total" + }, + "upToDateHostsCriticalAt": { + "label": "Llindar crític d'amfitrions actualitzats", + "description": "Introduïu el vermell quan el valor caigui per sota d'aquest llindar" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "Mode de llindar de paquets obsolets", + "description": "Compareu el recompte de paquets obsolets com a valor absolut o percentatge del total d'amfitrions" + }, + "totalOutdatedPackagesWarningAt": { + "label": "Llindar d'avís de paquets obsolets" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "Llindar crític de paquets obsolets" + }, + "showOsDistribution": { + "label": "Mostra la distribució del sistema operatiu", + "description": "Mostra el desglossament dels amfitrions supervisats per sistema operatiu" + }, + "osDistributionLimit": { + "label": "Límit de distribucions del sistema operatiu", + "description": "Nombre màxim de sistemes operatius que es mostraran", + "option": { + "3": "3 principals", + "5": "5 principals", + "10": "10 principals", + "all": "Tots" + } + }, + "showOsVersion": { + "label": "Mostra la versió del sistema operatiu", + "description": "Afegeix la versió del sistema operatiu a cada etiqueta de distribució quan estigui disponible" + }, + "showComplianceHero": { + "label": "Mostra el resum del compliment", + "description": "Mostra un anell de compliment amb el percentatge d'amfitrions actualitzats" + }, + "osDisplayMode": { + "label": "Mode de visualització del sistema operatiu", + "description": "Trieu com es mostrarà la distribució del sistema operatiu", + "option": { + "bars": "Barres horitzontals", + "donut": "Gràfic de rosca" + } + }, + "threshold": { + "warningAt": { + "description": "Introdueix el groc quan el valor arribi a aquest llindar" + }, + "criticalAt": { + "description": "Introdueix el vermell quan el valor arribi a aquest llindar" + } + } + }, + "error": { + "internalServerError": "No s'han pogut obtenir les dades de PatchMon" + } + }, + "bazarr": { + "description": "Resum dels subtítols que falten i de l'estat de salut de la vostra instància de Bazarr", + "episodes": "Episodis que falten", + "movies": "Pel·lícules que falten", + "providers": "Problemes dels proveïdors", + "status": "Problemes de salut", + "announcements": "Anuncis", + "option": { + "showMissingEpisodes": { + "label": "Mostra els episodis que falten", + "description": "Mostra el nombre d'episodis als quals falten subtítols" + }, + "showMissingMovies": { + "label": "Mostra les pel·lícules que falten", + "description": "Mostra el nombre de pel·lícules a les quals falten subtítols" + }, + "showProviderIssues": { + "label": "Mostra els problemes dels proveïdors", + "description": "Mostra el nombre de proveïdors de subtítols amb problemes" + }, + "showHealthIssues": { + "label": "Mostra els problemes de salut", + "description": "Mostra el nombre de problemes de salut de Bazarr" + } + }, + "error": { + "internalServerError": "No s'han pogut obtenir les dades de Bazarr" + } + }, "immich-serverStats": { "name": "Estadístiques del servidor Immich", "description": "Informació sobre la teva instància d'Immich", @@ -2661,7 +4088,8 @@ "users": "Usuaris", "photos": "Fotos", "videos": "Vídeos", - "storage": "Emmagatzematge utilitzat" + "storage": "Emmagatzematge utilitzat", + "albumLimit": "Àlbums més grans (se'n mostren fins a {count})" }, "immich-albumCarousel": { "name": "Àlbum d'Immich", @@ -2685,24 +4113,21 @@ } }, "description": "Presentació de fotos d'un àlbum d'Immich o de tota la biblioteca", - "noPhotos": "No s'han trobat fotos" + "noPhotos": "No s'han trobat fotos", + "albumPhoto": "Foto de l'àlbum", + "actions": { + "previousPhoto": "Foto anterior", + "nextPhoto": "Foto següent", + "pauseSlideshow": "Posa en pausa la presentació", + "resumeSlideshow": "Reprèn la presentació", + "toggleSlideshow": "Posa en pausa o reprèn la presentació", + "photo": "Foto {number}" + } }, "downloads": { "name": "Client de descàrregues", "description": "Us permet veure i gestionar les vostres descàrregues tant des de clients Torrent com Usenet.", "option": { - "columns": { - "label": "Columnes a mostrar" - }, - "enableRowSorting": { - "label": "Activa l'ordenació d'elements" - }, - "defaultSort": { - "label": "Columna utilitzada per ordenar per defecte" - }, - "descendingDefaultSort": { - "label": "Inverteix l'ordenació" - }, "showCompletedUsenet": { "label": "Mostra les entrades usenet marcades com a completades" }, @@ -2716,7 +4141,7 @@ "label": "Amaga els torrents completats sota aquest llindar" }, "categoryFilter": { - "label": "Categories/etiquetes per filtrar" + "label": "Categories/etiquetes a filtrar" }, "filterIsWhitelist": { "label": "Filtra com a llista blanca" @@ -2727,12 +4152,6 @@ "limitPerIntegration": { "label": "Limita els elements per integració", "description": "Això limitarà el nombre d'elements que es mostren per integració, no globalment" - }, - "columnOrder": { - "label": "Ordre de les columnes" - }, - "columnWidths": { - "label": "Amplades de les columnes" } }, "errors": { @@ -2763,7 +4182,7 @@ "detailsTitle": "Índex actual dins del client" }, "id": { - "columnTitle": "ID", + "columnTitle": "ID de l'element", "detailsTitle": "ID de l'element" }, "integration": { @@ -2893,9 +4312,13 @@ "mediaRequests-requestList": { "name": "Llista de sol·licituds multimèdia", "description": "Vegeu una llista de totes les sol·licituds multimèdia de la vostra instància Overseerr o Jellyseerr", + "empty": { + "title": "Encara no hi ha sol·licituds multimèdia", + "description": "Cerca una pel·lícula o una sèrie per iniciar una sol·licitud." + }, "option": { "linksTargetNewTab": { - "label": "Obre els enllaços en una pestanya nova" + "label": "Obrir enllaços en una pestanya nova" }, "statusFilter": { "label": "Estats que es mostraran" @@ -2926,12 +4349,16 @@ "failed": "Fallat", "completed": "Completat" }, + "unknown": "Desconegut", "toBeDetermined": "Per determinar" }, "mediaRequests-requestStats": { "name": "Estadístiques de sol·licituds multimèdia", "description": "Estadístiques sobre les vostres sol·licituds multimèdia", - "option": {}, + "empty": { + "title": "Encara no hi ha activitat de sol·licituds", + "description": "Les estadístiques apareixeran després de la primera sol·licitud multimèdia." + }, "titles": { "stats": { "main": "Estadístiques multimèdia", @@ -2941,8 +4368,7 @@ "declined": "Ja rebutjades", "available": "Ja disponibles", "tv": "Sol·licituds de TV", - "movie": "Sol·licituds de pel·lícules", - "total": "Total" + "movie": "Sol·licituds de pel·lícules" }, "users": { "main": "Usuaris principals", @@ -2968,7 +4394,6 @@ }, "currentIndex": "{start}-{end} de {total}", "healthCheck": { - "title": "Comprovació de salut", "queued": "En cua", "status": { "healthy": "Saludable", @@ -2977,38 +4402,63 @@ }, "panel": { "statistics": { - "empty": "Buit", - "transcodes": "Transcodificacions", - "transcodesCount": "Transcodificacions", - "healthChecksCount": "Comprovacions de salut", "filesCount": "Fitxers", "savedSpace": "Espai estalviat", - "healthChecks": "Comprovacions de salut", "videoCodecs": "Còdecs", "videoContainers": "Contenidors", "videoResolutions": "Resolucions" }, "workers": { - "empty": "Buit", "table": { - "file": "Fitxer", "eta": "ETA", - "progress": "Progrés", - "transcode": "Transcodifica", - "healthCheck": "Comprovació de salut" + "progress": "Progrés" } }, "queue": { - "empty": "Buit", "table": { - "file": "Fitxer", - "size": "Mida", - "transcode": "Transcodifica", - "healthCheck": "Comprovació de salut" + "size": "Mida" } + }, + "common": { + "empty": "Buit", + "file": "Fitxer", + "healthCheck": "Comprovació de l'estat", + "transcode": "Transcodifica", + "transcodes": "Transcodificacions", + "healthChecks": "Comprovacions de l'estat" } } }, + "mediaMissing": { + "name": "Contingut que falta i en cua", + "description": "Mostra les pel·lícules i els episodis que falten i en cua de Radarr i Sonarr", + "option": { + "showMissing": { + "label": "Mostra els elements que falten" + }, + "showQueued": { + "label": "Mostra els elements en cua" + }, + "pageSize": { + "label": "Elements per pàgina" + } + }, + "tab": { + "missing": "Falten", + "queued": "En cua" + }, + "type": { + "movie": "Pel·lícula", + "episode": "Episodi", + "book": "Llibre" + }, + "empty": { + "missing": "No hi ha elements que faltin", + "queued": "No hi ha elements en cua", + "noTabsEnabled": "Activeu almenys una pestanya a la configuració del giny" + }, + "timeLeft": "Temps restant" + }, "rssFeed": { "name": "Fonts RSS", "description": "Monitoritzeu i mostreu una o més fonts RSS, ATOM o JSON genèriques", @@ -3031,6 +4481,13 @@ "showPosterImage": { "label": "Mostra la imatge del pòster" } + }, + "error": { + "allFeedsFailed": "No s'han pogut carregar els canals RSS. Comprova els URL dels canals i torna-ho a provar." + }, + "warning": { + "partial": "{count, plural, one {No s'ha pogut carregar # canal RSS} other {No s'han pogut carregar # canals RSS}}", + "stale": "No s'han pogut actualitzar els canals RSS. Es mostren les entrades carregades anteriorment." } }, "releases": { @@ -3106,17 +4563,8 @@ "label": "Expressió regular" } }, - "edit": { - "label": "Edita" - }, "editForm": { - "title": "Edita el repositori", - "cancel": { - "label": "Cancel·la" - }, - "confirm": { - "label": "Confirma" - } + "title": "Edita el repositori" }, "importForm": { "title": "Importa des de Docker" @@ -3133,8 +4581,7 @@ "label": "Tokens del proveïdor", "token": "Testimoni", "configured": "Token configurat", - "notConfigured": "No s'ha definit cap token", - "save": "Desa" + "notConfigured": "No s'ha definit cap token" } } }, @@ -3161,17 +4608,32 @@ "noProviderResponse": "El proveïdor no ha respost", "unexpected": "Error inesperat del proveïdor" } - } + }, + "expandDetails": "Mostra els detalls de {name}", + "collapseDetails": "Amaga els detalls de {name}" }, "networkControllerSummary": { - "option": {}, - "card": { - "vpn": { - "countConnected": "{count} connectats" + "advanced": { + "updated": "Actualitzat", + "metric": { + "latency": "Latència", + "ping": "Ping", + "uptime": "Temps de funcionament", + "users": "Usuaris", + "guests": "Convidats" } }, + "card": { + "vpn": { + "countConnected": "{count, plural, one {# connectat} other {# connectats}}", + "label": "VPN" + }, + "wan": "WAN", + "web": "Web", + "wifi": "Wi-Fi", + "lan": "LAN" + }, "error": { - "integrationsDisconnected": "No hi ha dades disponibles; totes les integracions estan desconnectades", "unknownContentOption": "Opció de contingut desconeguda per al giny de resum del controlador de xarxa: " }, "name": "Resum del controlador de xarxa", @@ -3208,7 +4670,6 @@ } }, "error": { - "integrationsDisconnected": "No hi ha dades disponibles; totes les integracions estan desconnectades", "unknownContentOption": "Opció de contingut desconeguda per al giny d'estat de la xarxa: " }, "name": "Estat de la xarxa", @@ -3238,7 +4699,6 @@ "versiontitle": "Versions", "cputitle": "Ús de la CPU", "memorytitle": "Ús de la memòria", - "cpu": "CPU", "memory": "Memòria", "interfaces": { "name": "nom", @@ -3246,6 +4706,16 @@ "recv": "Rebut", "title": "Interfícies de xarxa" } + }, + "empty": { + "noInterfaces": "Encara no hi ha dades de les interfícies de xarxa" + }, + "versionUnknown": "Versió desconeguda", + "metricAccessible": "{metric}: {value}%, {status}", + "status": { + "normal": "Normal", + "warning": "Avís", + "critical": "Crític" } }, "notifications": { @@ -3255,8 +4725,21 @@ "option": { "hideLogos": { "label": "Amaga els logotips" + }, + "messageFormat": { + "label": "Format del missatge", + "option": { + "auto": "Automàtic", + "plain": "Text sense format", + "markdown": "Markdown", + "html": "HTML" + } } - } + }, + "openService": "Obre el servei de notificacions", + "deleteNotification": "Elimina la notificació de Gotify", + "deleteFailed": "No s'ha pogut eliminar la notificació", + "deleteFailedMessage": "No s'ha pogut eliminar la notificació. Torna-ho a provar." }, "speedtestTracker": { "name": "Speedtest Tracker", @@ -3298,7 +4781,6 @@ } }, "uptimeKuma": { - "name": "Uptime Kuma", "description": "Supervisa les estadístiques de temps d'activitat de la teva pàgina d'estat d'Uptime Kuma", "option": { "showAverageUptime": { @@ -3335,8 +4817,58 @@ }, "error": { "internalServerError": "No s'han pogut obtenir les dades de temps d'activitat" + }, + "status": { + "up": "Velocitat de pujada", + "down": "Velocitat de descàrrega", + "paused": "En pausa" } }, + "traefik": { + "description": "Resum dels encaminadors, serveis, intermediaris i punts d'entrada de Traefik", + "option": { + "showTcp": { + "label": "Mostra TCP" + }, + "showUdp": { + "label": "Mostra UDP" + }, + "showEntryPoints": { + "label": "Mostra els punts d'entrada" + } + }, + "instances": "Instàncies de Traefik", + "versionUnknown": "Versió desconeguda", + "summary": { + "routers": "Encaminadors", + "entryPoints": "Punts d'entrada" + }, + "resource": { + "routers": "Encaminadors", + "middlewares": "Intermediaris" + }, + "status": { + "healthy": "En bon estat", + "errors": "{count} errors", + "warnings": "{count} avisos" + }, + "error": { + "internalServerError": "No s'han pogut obtenir les dades de Traefik" + }, + "resourceType": { + "router": "Encaminador", + "service": "Servei", + "middleware": "Middleware" + }, + "resourceStatus": { + "enabled": "Activat", + "disabled": "Desactivat", + "warning": "Avís", + "error": "Error", + "unknown": "Desconegut" + }, + "failedEndpoint": "Error: {endpoint}" + }, "audioStats": { "name": "Estadístiques d'àudio", "description": "Estadístiques de la biblioteca i la reproducció de Navidrome o Audiobookshelf", @@ -3401,9 +4933,7 @@ "label": "Gràfics visibles", "description": "Selecciona els gràfics que vols que siguin visibles.", "option": { - "cpu": "CPU", "memory": "Memòria", - "gpu": "GPU", "network": "Xarxa" } }, @@ -3418,12 +4948,11 @@ } }, "card": { - "cpu": "CPU", "memory": "MEM", - "gpu": "GPU", "network": "XARXA", "up": "PUJ", - "down": "BAIXADA" + "down": "BAIXADA", + "memoryTooltip": "{used} / {available} ({percent}%)" } }, "systemDisks": { @@ -3449,151 +4978,88 @@ }, "showBackgroundBar": { "label": "Mostra la barra d'ús de fons" - }, - "visibleStorageVolumes": { - "label": "Volums d'emmagatzematge visibles", - "description": "Només està disponible quan totes les integracions seleccionades són de Synology. Deixeu-ho buit per mostrar tots els volums d'emmagatzematge detectats.", - "placeholder": "Seleccioneu volums d'emmagatzematge" } }, "status": { - "unhealthy": "En mal estat" + "unhealthy": "En mal estat", + "smart": "SMART", + "free": "{percentage}% lliure" + } + }, + "customApi": { + "name": "Giny personalitzat", + "description": "Renderitza una definició JSX personalitzada configurada.", + "customJsx": { + "noTemplate": "No s'ha configurat cap plantilla JSX.", + "templateWarnings": "{count} avisos de plantilla:", + "requestIdRequired": "Aquest control de xarxa requereix un requestId amb nom.", + "unsavedPreview": "Executa la prova de sol·licitud inicial a l'editor abans de provar les sol·licituds amb nom.", + "invalidParams": "Els paràmetres de la sol·licitud no són vàlids.", + "loading": "S'està carregant la sol·licitud...", + "loadRequest": "Carrega la sol·licitud", + "requestFailed": "La sol·licitud ha fallat.", + "retry": "Torna a provar la sol·licitud", + "actionCompleted": "L'acció s'ha completat correctament.", + "actionSimulated": "Acció simulada; no s'ha enviat cap sol·licitud.", + "actionsDisabledEditMode": "Les accions estan desactivades mentre el tauler es troba en mode d'edició.", + "widgetItemUnavailable": "Aquest element del giny no està disponible.", + "toggle": "Commuta", + "copied": "Copiat", + "confirmDelete": "Confirma aquesta acció destructiva." + }, + "option": { + "definitionId": { + "label": "Giny personalitzat" + }, + "refreshInterval": { + "label": "Interval d'actualització", + "description": "Amb quina freqüència es tornen a obtenir dades de l'API (en segons)" + } + }, + "noDefinition": "No s'ha seleccionat cap definició", + "definitionNotFound": "Giny personalitzat no disponible", + "migrationRequired": "Aquest giny personalitzat heretat es conserva, però s'ha de migrar a Custom JSX v2 des de Gestiona els ginys personalitzats abans de poder executar-lo.", + "manageMigration": "Obre Gestiona els ginys personalitzats", + "contactAdmin": "Contacta amb un administrador.", + "configurationNeedsRepair": "Les opcions d'aquest giny han canviat. Edita el giny per reparar-ne la configuració.", + "removeFromBoard": "Elimina del tauler", + "editModePending": "Desa el tauler per carregar aquest giny.", + "picker": { + "group": "Ginys JSX personalitzats", + "empty": "No s'han trobat ginys personalitzats", + "preview": "Previsualització", + "sources": "{count, plural, one {# origen} other {# orígens}}", + "requests": "{count, plural, one {# sol·licitud} other {# sol·licituds}}", + "migrationRequired": "Cal migrar", + "migrationDescription": "Aquest giny v1 col·locat encara no es pot executar. Copia la sol·licitud redactada a un LLM i enganxa la resposta JSON única a Homarr.", + "manageMigration": "Obre Gestiona els ginys personalitzats", + "contactAdmin": "Contacta amb un administrador." + }, + "configuration": { + "needsAttention": "La configuració requereix atenció: {message}", + "advancedOptions": "Opcions avançades", + "invalidJson": "JSON no vàlid" } }, "beszelSystemTable": { "name": "Sistemes Beszel (taula)", "description": "Vista en taula de tots els sistemes monitorats per Beszel, amb columnes ordenables i indicadors d'estat", "option": { - "statusFilter": { - "label": "Filtre d'estat" - }, "sortBy": { "label": "Ordena per" }, "sortDirection": { "label": "Direcció de l'ordenació" - }, - "showCpu": { - "label": "Mostra la CPU" - }, - "showMemory": { - "label": "Mostra la memòria" - }, - "showDisk": { - "label": "Mostra el disc" - }, - "showGpu": { - "label": "Mostra la GPU" - }, - "showLoadAvg": { - "label": "Mostra la càrrega mitjana" - }, - "showNet": { - "label": "Mostra la xarxa" - }, - "showTemp": { - "label": "Mostra la temperatura" - }, - "showBattery": { - "label": "Mostra la bateria" - }, - "showServices": { - "label": "Mostra els serveis" - }, - "showUptime": { - "label": "Mostra el temps d'activitat" - }, - "showAgent": { - "label": "Mostra la versió de l'agent" - }, - "columnOrder": { - "label": "Ordre de les columnes" - }, - "columnWidths": { - "label": "Amplades de les columnes" } }, - "noRecords": "No s'han trobat sistemes", "error": { - "internalServerError": "No es pot connectar amb Beszel. Comproveu la configuració de la integració.", "layoutSaveTitle": "No s'ha pogut desar la disposició de la taula", "layoutSaveMessage": "No s'ha pogut desar l'ordre o les amplades de les columnes. Torneu-ho a provar." - }, - "column": { - "system": "Sistema", - "cpu": "CPU", - "memory": "Memòria", - "disk": "Disc", - "gpu": "GPU", - "loadAvg": "Càrrega mitjana", - "net": "Xarxa", - "temp": "Temp", - "battery": "Bateria", - "services": "Serveis", - "uptime": "Temps d'activitat", - "agent": "Agent" } }, "beszelSystemGrid": { "name": "Sistemes Beszel (graella)", - "description": "Vista en graella de targetes de tots els sistemes monitorats per Beszel, amb mètriques en temps real", - "option": { - "statusFilter": { - "label": "Filtre d'estat" - }, - "showCpu": { - "label": "Mostra la CPU" - }, - "showMemory": { - "label": "Mostra la memòria" - }, - "showDisk": { - "label": "Mostra el disc" - }, - "showGpu": { - "label": "Mostra la GPU" - }, - "showLoadAvg": { - "label": "Mostra la càrrega mitjana" - }, - "showNet": { - "label": "Mostra la xarxa" - }, - "showTemp": { - "label": "Mostra la temperatura" - }, - "showBattery": { - "label": "Mostra la bateria" - }, - "showServices": { - "label": "Mostra els serveis" - }, - "showUptime": { - "label": "Mostra el temps d'activitat" - }, - "showAgent": { - "label": "Mostra la versió de l'agent" - } - }, - "error": { - "internalServerError": "No es pot connectar amb Beszel. Comproveu la configuració de la integració." - }, - "empty": { - "noSystems": "No s'han trobat sistemes" - }, - "metric": { - "cpu": "CPU", - "memory": "Memòria", - "disk": "Disc", - "gpu": "GPU", - "loadAvg": "Càrrega mitjana", - "net": "Xarxa", - "temp": "Temp", - "battery": "Bateria", - "services": "Serveis", - "uptime": "Temps d'activitat", - "agent": "Agent" - } + "description": "Vista en graella de targetes de tots els sistemes monitorats per Beszel, amb mètriques en temps real" }, "beszelAlerts": { "name": "Alertes de Beszel", @@ -3607,11 +5073,12 @@ } }, "empty": "No hi ha alertes configurades", - "error": { - "internalServerError": "No es pot connectar amb Beszel. Comproveu la configuració de la integració." - }, "history": "Historial", "resolved": "Resoltes", + "alertDescription": { + "statusDuration": "Inactiu durant {minutes} min", + "threshold": "Supera {value} durant {minutes} min" + }, "status": { "triggered": "Activada", "ok": "Correcte" @@ -3658,16 +5125,16 @@ "noSystems": "No s'han trobat sistemes" }, "error": { - "internalServerError": "No es pot connectar amb Beszel. Comproveu la configuració de la integració.", "liveConnectionFailed": "La connexió en directe ha fallat. És possible que la vostra instància de Beszel no admeti la transmissió en temps real.", "switchToHistorical": "Canvia a la vista històrica", - "systemNotFound": "No s'ha trobat el sistema seleccionat. Trieu-ne un altre." + "systemNotFound": "No s'ha trobat el sistema seleccionat. Trieu-ne un altre.", + "selectionSaveTitle": "No s'ha pogut desar la selecció", + "selectionSaveMessage": "No s'ha pogut desar la selecció del sistema o del període de temps. Torna-ho a provar." }, "chart": { "cpu": { "title": "Ús de la CPU", - "subtitle": "Ús mitjà de la CPU de tot el sistema", - "series": "CPU" + "subtitle": "Ús mitjà de la CPU de tot el sistema" }, "memory": { "title": "Ús de la memòria", @@ -3709,289 +5176,550 @@ "title": "E/S de xarxa de Docker", "subtitle": "Trànsit de xarxa dels contenidors Docker" } + }, + "period": { + "live": "En directe", + "oneHour": "1 h", + "twelveHours": "12 h", + "oneDay": "24 h", + "oneWeek": "1 set.", + "thirtyDays": "30 dies" } }, - "patchmon": { - "name": "PatchMon", - "description": "Resum de l'estat dels pedaços dels amfitrions des de PatchMon", - "title": "Estadístiques de PatchMon", - "totalHosts": "Amfitrions totals", - "hostsNeedingUpdates": "Necessiten actualitzacions", - "securityUpdates": "Actualitzacions de seguretat", - "upToDateHosts": "Amfitrions actualitzats", - "hostsWithSecurityUpdates": "Amfitrions amb actualitzacions de seguretat", - "recentUpdates24h": "Actualitzacions (24 h)", - "totalOutdatedPackages": "Paquets obsolets", - "totalRepos": "Repositoris", - "osDistribution": "Distribució del sistema operatiu", - "compliance": "Compliment dels pedaços", - "complianceRatio": "{upToDate} / {total}", - "lastUpdated": "Actualitzat {time}", - "option": { - "showTotalHosts": { - "label": "Mostra el total d'amfitrions", - "description": "Mostra el nombre total d'amfitrions supervisats" - }, - "showHostsNeedingUpdates": { - "label": "Mostra els amfitrions que necessiten actualitzacions", - "description": "Mostra els amfitrions amb almenys un paquet obsolet" - }, - "showSecurityUpdates": { - "label": "Mostra les actualitzacions de seguretat", - "description": "Mostra el nombre total d'actualitzacions de seguretat disponibles" - }, - "showUpToDateHosts": { - "label": "Mostra els amfitrions actualitzats", - "description": "Mostra els amfitrions sense cap paquet obsolet" - }, - "showHostsWithSecurityUpdates": { - "label": "Mostra els amfitrions amb actualitzacions de seguretat", - "description": "Mostra els amfitrions que necessiten pedaços de seguretat" - }, - "showRecentUpdates24h": { - "label": "Mostra les actualitzacions recents (24 h)", - "description": "Mostra el nombre d'actualitzacions aplicades durant les darreres 24 hores" - }, - "showTotalOutdatedPackages": { - "label": "Mostra els paquets obsolets", - "description": "Mostra el nombre total de paquets obsolets de tots els amfitrions" - }, - "showTotalRepos": { - "label": "Mostra els repositoris", - "description": "Mostra el nombre de repositoris actius que se supervisen" - }, - "enableThresholdColors": { - "label": "Activa els colors dels llindars", - "description": "Acoloreix els valors de les estadístiques de verd, groc o vermell segons els nivells de gravetat predefinits" - }, - "useCustomThresholds": { - "label": "Llindars avançats", - "description": "Personalitzeu els llindars d'avís i crític per estadística mitjançant recomptes absoluts o percentatges del total d'amfitrions" - }, - "thresholdMode": { - "option": { - "absolute": "Recompte absolut", - "percent": "Percentatge del total d'amfitrions" - } - }, - "hostsNeedingUpdatesThresholdMode": { - "label": "Mode de llindar d'amfitrions que necessiten actualitzacions", - "description": "Compareu el recompte d'amfitrions que necessiten actualitzacions com a valor absolut o percentatge del total d'amfitrions" - }, - "hostsNeedingUpdatesWarningAt": { - "label": "Llindar d'avís d'amfitrions que necessiten actualitzacions", - "description": "Introduïu el groc quan el valor arribi a aquest llindar" - }, - "hostsNeedingUpdatesCriticalAt": { - "label": "Llindar crític d'amfitrions que necessiten actualitzacions", - "description": "Introduïu el vermell quan el valor arribi a aquest llindar" - }, - "securityUpdatesThresholdMode": { - "label": "Mode de llindar d'actualitzacions de seguretat", - "description": "Compareu el recompte d'actualitzacions de seguretat com a valor absolut o percentatge del total d'amfitrions" - }, - "securityUpdatesWarningAt": { - "label": "Llindar d'avís d'actualitzacions de seguretat", - "description": "Introduïu el groc quan el valor arribi a aquest llindar" - }, - "securityUpdatesCriticalAt": { - "label": "Llindar crític d'actualitzacions de seguretat", - "description": "Introduïu el vermell quan el valor arribi a aquest llindar" - }, - "hostsWithSecurityUpdatesThresholdMode": { - "label": "Mode de llindar d'amfitrions amb actualitzacions de seguretat", - "description": "Compareu el recompte d'amfitrions com a valor absolut o percentatge del total d'amfitrions" - }, - "hostsWithSecurityUpdatesWarningAt": { - "label": "Llindar d'avís d'amfitrions amb actualitzacions de seguretat", - "description": "Introduïu el groc quan el valor arribi a aquest llindar" - }, - "hostsWithSecurityUpdatesCriticalAt": { - "label": "Llindar crític d'amfitrions amb actualitzacions de seguretat", - "description": "Introduïu el vermell quan el valor arribi a aquest llindar" - }, - "upToDateHostsThresholdMode": { - "label": "Mode de llindar d'amfitrions actualitzats", - "description": "Compareu el recompte d'amfitrions actualitzats com a valor absolut o percentatge del total d'amfitrions" - }, - "upToDateHostsWarningAt": { - "label": "Llindar d'avís d'amfitrions actualitzats", - "description": "Introduïu el groc quan el valor sigui igual o superior a aquest llindar però inferior a la cobertura total" - }, - "upToDateHostsCriticalAt": { - "label": "Llindar crític d'amfitrions actualitzats", - "description": "Introduïu el vermell quan el valor caigui per sota d'aquest llindar" - }, - "totalOutdatedPackagesThresholdMode": { - "label": "Mode de llindar de paquets obsolets", - "description": "Compareu el recompte de paquets obsolets com a valor absolut o percentatge del total d'amfitrions" - }, - "totalOutdatedPackagesWarningAt": { - "label": "Llindar d'avís de paquets obsolets", - "description": "Introduïu el groc quan el valor arribi a aquest llindar" - }, - "totalOutdatedPackagesCriticalAt": { - "label": "Llindar crític de paquets obsolets", - "description": "Introduïu el vermell quan el valor arribi a aquest llindar" - }, - "showOsDistribution": { - "label": "Mostra la distribució del sistema operatiu", - "description": "Mostra el desglossament dels amfitrions supervisats per sistema operatiu" - }, - "osDistributionLimit": { - "label": "Límit de distribucions del sistema operatiu", - "description": "Nombre màxim de sistemes operatius que es mostraran", - "option": { - "3": "3 principals", - "5": "5 principals", - "10": "10 principals", - "all": "Tots" - } - }, - "showOsVersion": { - "label": "Mostra la versió del sistema operatiu", - "description": "Afegeix la versió del sistema operatiu a cada etiqueta de distribució quan estigui disponible" - }, - "showComplianceHero": { - "label": "Mostra el resum del compliment", - "description": "Mostra un anell de compliment amb el percentatge d'amfitrions actualitzats" - }, - "osDisplayMode": { - "label": "Mode de visualització del sistema operatiu", - "description": "Trieu com es mostrarà la distribució del sistema operatiu", - "option": { - "bars": "Barres horitzontals", - "donut": "Gràfic de rosca" - } - } + "assistant": { + "name": "Assistent", + "description": "Mantén una conversa completa amb l'assistent directament al teu tauler.", + "unavailable": { + "title": "Assistent no disponible", + "description": "Inicia sessió i demana a un administrador que configuri l'assistent des del tauler de gestió." }, + "compact": { + "title": "Assistent", + "description": "Canvia la mida d'aquest giny per xatejar aquí o obre la conversa completa.", + "open": "Obre l'assistent", + "openTitle": "Assistent obert al tauler lateral", + "openDescription": "La conversa es manté en una única superfície activa.", + "returnToWidget": "Retorna la conversa a aquest giny", + "otherWidgetTitle": "L'assistent està actiu en un altre giny", + "otherWidgetDescription": "Només una superfície de conversa es manté activa alhora.", + "useHere": "Utilitza l'assistent en aquest giny" + } + }, + "beszel": { "error": { - "internalServerError": "No s'han pogut obtenir les dades de PatchMon" - } - }, - "bazarr": { - "name": "Bazarr", - "description": "Resum dels subtítols que falten i de l'estat de salut de la vostra instància de Bazarr", - "episodes": "Episodis que falten", - "movies": "Pel·lícules que falten", - "providers": "Problemes dels proveïdors", - "status": "Problemes de salut", - "option": { - "showMissingEpisodes": { - "label": "Mostra els episodis que falten", - "description": "Mostra el nombre d'episodis als quals falten subtítols" - }, - "showMissingMovies": { - "label": "Mostra les pel·lícules que falten", - "description": "Mostra el nombre de pel·lícules a les quals falten subtítols" - }, - "showProviderIssues": { - "label": "Mostra els problemes dels proveïdors", - "description": "Mostra el nombre de proveïdors de subtítols amb problemes" - }, - "showHealthIssues": { - "label": "Mostra els problemes de salut", - "description": "Mostra el nombre de problemes de salut de Bazarr" - } - }, - "error": { - "internalServerError": "No s'han pogut obtenir les dades de Bazarr" - } - }, - "mediaMissing": { - "name": "Contingut que falta i en cua", - "description": "Mostra les pel·lícules i els episodis que falten i en cua de Radarr i Sonarr", - "option": { - "showMissing": { - "label": "Mostra els elements que falten" - }, - "showQueued": { - "label": "Mostra els elements en cua" - }, - "pageSize": { - "label": "Elements per pàgina" - } - }, - "tab": { - "missing": "Falten", - "queued": "En cua" - }, - "type": { - "movie": "Pel·lícula", - "episode": "Episodi" + "internalServerError": "No s'ha pogut connectar amb Beszel. Comprova la configuració de la integració." }, "empty": { - "missing": "No hi ha elements que faltin", - "queued": "No hi ha elements en cua", - "noTabsEnabled": "Activeu almenys una pestanya a la configuració del giny" + "noSystems": "No s'han trobat sistemes" }, - "timeLeft": "Temps restant" - }, - "traefik": { - "name": "Traefik", - "description": "Resum dels encaminadors, serveis, intermediaris i punts d'entrada de Traefik", - "option": { - "showTcp": { - "label": "Mostra TCP" + "options": { + "statusFilter": { + "label": "Filtre d'estat" }, - "showUdp": { - "label": "Mostra UDP" + "showCpu": { + "label": "Mostra la CPU" }, - "showEntryPoints": { - "label": "Mostra els punts d'entrada" + "showMemory": { + "label": "Mostra la memòria" + }, + "showDisk": { + "label": "Mostra el disc" + }, + "showGpu": { + "label": "Mostra la GPU" + }, + "showLoadAvg": { + "label": "Mostra la càrrega mitjana" + }, + "showNet": { + "label": "Mostra la xarxa" + }, + "showTemp": { + "label": "Mostra la temperatura" + }, + "showBattery": { + "label": "Mostra la bateria" + }, + "showServices": { + "label": "Mostra els serveis" + }, + "showUptime": { + "label": "Mostra el temps de funcionament" + }, + "showAgent": { + "label": "Mostra la versió de l'agent" } }, - "instances": "Instàncies de Traefik", - "versionUnknown": "Versió desconeguda", - "summary": { - "routers": "Encaminadors", - "entryPoints": "Punts d'entrada" - }, - "resource": { - "routers": "Encaminadors", - "services": "Serveis", - "middlewares": "Intermediaris" - }, - "status": { - "healthy": "En bon estat", - "errors": "{count} errors", - "warnings": "{count} avisos" - }, - "error": { - "internalServerError": "No s'han pogut obtenir les dades de Traefik" + "metric": { + "system": "Sistema", + "source": "Integració", + "hostname": "Nom de l'amfitrió", + "cpuModel": "Model de CPU", + "cores": "Nuclis", + "memoryTotal": "Memòria total", + "memory": "Memòria", + "disk": "Disc", + "loadAvg": "Càrrega mitjana", + "net": "Xarxa", + "temp": "Temp", + "battery": "Bat", + "uptime": "Temps de funcionament", + "agent": "Agent" } }, - "wud": { - "name": "What's Up Docker", - "description": "Mostra quants contenidors supervisats tenen actualitzacions disponibles.", - "title": "What's Up Docker", - "monitored": "Monitoritzats", - "updatesAvailable": "{count, plural, one {# actualització disponible} other {# actualitzacions disponibles}}", - "updateAvailable": "Actualització disponible", - "openReleaseNotes": "Obre les notes de versió", + "llamacpp": { + "name": "llama.cpp", + "description": "Mostra l'estat, el model carregat i la velocitat de generació del teu servidor local llama.cpp.", + "title": "llama.cpp", + "status": { + "unhealthy": "En mal estat ({status})" + }, + "idle": "Inactiu", + "speedTooltip": { + "current": "Velocitat de generació actual", + "average": "Velocitat de generació mitjana des de l'inici", + "request": "Velocitat mitjana des de l'inici d'aquesta sol·licitud" + }, + "busy": "{count, plural, one {# sol·licitud en execució} other {# sol·licituds en execució}}", + "modelInfo": { + "context": "Context", + "size": "Mida del fitxer", + "parameters": "Paràmetres", + "model": "Model", + "quantization": "Quantificació" + }, + "stats": { + "tokensProcessed": "Fitxes processades", + "contextUsage": "Ús del context / KV", + "cacheHitRate": "Taxa d'encerts de la memòria cau de sol·licituds", + "tokensGenerated": "Fitxes generades" + }, + "error": { + "unreachable": "no es pot accedir a llama-server" + }, + "unit": { + "speed": "{value} t/s", + "parameters": "{value}B", + "none": "—", + "speedShort": "t/s" + }, "option": { "showTitle": { "label": "Mostra el títol" }, - "showRing": { - "label": "Mostra l'anell d'actualització" + "showModelInfo": { + "label": "Mostra la informació del model" }, - "layout": { - "label": "Disposició", + "showContextUsage": { + "label": "Mostra l'ús del context" + }, + "showCacheHitRate": { + "label": "Mostra la taxa d'encerts de la memòria cau" + }, + "showSpeedStats": { + "label": "Mostra les estadístiques de velocitat" + }, + "showRequests": { + "label": "Mostra la càrrega de sol·licituds" + }, + "showTokenStats": { + "label": "Mostra els totals de fitxes" + }, + "showSpeculative": { + "label": "Mostra la descodificació especulativa" + } + }, + "advanced": { + "promptSpeed": "Velocitat de la sol·licitud", + "avgSpeed": "Generació mitjana", + "requests": "Sol·licituds", + "deferred": "Ajornades", + "slots": "{processing}/{total} espais ocupats", + "speculative": "Descodificació especulativa", + "avgPrompt": "Sol·licitud mitjana", + "specDrafts": "Esborranys especulatius", + "specAccepted": "Fitxes especulatives acceptades", + "specDraftTokens": "Fitxes d'esborrany especulatives" + } + }, + "stats": { + "name": "Estadístiques", + "description": "Combina les estadístiques de les teves integracions en un únic giny configurable.", + "configure": "Configura les mètriques", + "refresh": "Actualitza les estadístiques", + "empty": "Obre la configuració del giny, selecciona les integracions i afegeix mètriques.", + "editorHelp": "Afegeix mètriques de les integracions seleccionades per a aquest giny. Els canvis es desen amb el teu tauler.", + "source": "Integració", + "metric": "Mètrica", + "noMetrics": "No hi ha estadístiques disponibles per a aquesta integració", + "add": "Afegeix una mètrica", + "label": "Etiqueta personalitzada", + "hidden": "Ocult", + "compact": "Nombres compactes", + "moveUp": "Mou amunt", + "moveDown": "Mou avall", + "remove": "Elimina la mètrica", + "loading": "S'està carregant…", + "unavailable": "No disponible", + "refreshFailed": "L'actualització ha fallat — es mostren les dades desades", + "stale": "Dades desades — actualitza per posar-les al dia", + "table": { + "value": "Valor", + "status": "Estat" + }, + "option": { + "table": { + "label": "Vista de taula" + }, + "rows": { + "label": "Files compactes" + }, + "showIcon": { + "label": "Mostra la icona de l'origen" + }, + "spacing": { + "label": "Espaiat", "option": { - "horizontal": { - "label": "Horitzontal" + "xs": { + "label": "Compacte" }, - "vertical": { - "label": "Vertical" + "sm": { + "label": "Còmode" + }, + "md": { + "label": "Espaiós" } } }, - "showUpdateList": { - "label": "Mostra la llista d'actualitzacions de contenidors", - "description": "Llista cada contenidor monitoritzat que té una actualització d'imatge disponible" + "entries": { + "label": "Mètriques" + }, + "plain": { + "label": "Elimina els fons de les targetes" } - } + }, + "fetchFailed": "No s'han pogut recuperar les estadístiques", + "viewOptions": "Personalitza aquesta vista", + "moreMetrics": "{count} més a la vista avançada", + "localHelp": "La disposició, el format i la visibilitat només s'apliquen a aquesta vista. La configuració compartida del tauler no canvia.", + "plain": "Elimina els fons de les targetes", + "resetView": "Restableix la vista", + "allHidden": "Totes les mètriques estan ocultes en aquesta vista. Utilitza «Personalitza aquesta vista» per restaurar-les." + }, + "wazuh": { + "target": { + "api": "API del servidor Wazuh", + "indexer": "Indexador Wazuh", + "wazuh": "Wazuh" + }, + "severity": { + "low": "Baix", + "medium": "Mitjà", + "high": "Alt", + "critical": "Crític" + }, + "error": { + "unauthorized": { + "title": "{target} ha rebutjat les credencials", + "description": "Comprova el nom d'usuari i la contrasenya desats a la integració de Wazuh. L'API del servidor (port 55000) i l'indexador (port 9200) utilitzen usuaris diferents." + }, + "certificate": { + "title": "El certificat de {target} no és de confiança", + "description": "Wazuh utilitza un certificat autofirmat per defecte. Executa «Prova la connexió» a la integració i confia en el certificat, o afegeix la teva CA a Configuració → Certificats." + }, + "unreachable": { + "title": "No es pot accedir a {target}", + "description": "L'amfitrió ha rebutjat o interromput la connexió. Comprova l'URL, el port i el tallafoc. En una instal·lació predeterminada tot en un, l'indexador només escolta a localhost." + }, + "timeout": { + "title": "S'ha esgotat el temps d'espera de {target}", + "description": "No hi ha hagut resposta en 15 segons. És possible que el servei estigui sobrecarregat o que l'adreça sigui incorrecta." + }, + "status": { + "title": "{target} ha retornat un error", + "description": "La sol·licitud ha fallat amb l'estat HTTP {status}." + }, + "invalidResponse": { + "title": "Resposta inesperada de {target}", + "description": "Comprova que l'URL apunti a l'API del servidor o a l'indexador Wazuh, i no al tauler." + }, + "indexerRequired": { + "title": "Calen les credencials de l'indexador Wazuh", + "description": "Les alertes, les vulnerabilitats i els esdeveniments d'integritat de fitxers es llegeixen de l'indexador Wazuh. Afegeix l'URL, el nom d'usuari i la contrasenya de l'indexador a la integració." + }, + "unknown": { + "title": "No s'han pogut carregar les dades de {target}", + "description": "Consulta els registres d'Homarr per obtenir més informació." + } + }, + "range": { + "1h": "1 h", + "24h": "24 h", + "7d": "7 dies", + "30d": "30 dies" + }, + "levelTooltip": "Nivell de regla {level} ({severity})" + }, + "wazuhAgents": { + "name": "Agents de Wazuh", + "description": "Llista ordenable d'agents de Wazuh amb l'estat, el sistema operatiu, la versió i l'últim manteniment de connexió", + "option": { + "statusFilter": { + "label": "Mostra els agents" + }, + "sortBy": { + "label": "Ordena per" + }, + "showVersion": { + "label": "Mostra la columna de versió de Wazuh" + }, + "showGroups": { + "label": "Mostra la columna de grups" + } + }, + "title": "Agents", + "total": "{count} agents", + "status": { + "active": "Actiu", + "disconnected": "Desconnectat", + "neverConnected": "Mai connectat", + "pending": "Pendent" + }, + "statusLabel": { + "active": "Actiu", + "disconnected": "Desconnectat", + "never_connected": "No s'ha connectat mai", + "pending": "Pendent", + "unknown": "Desconegut" + }, + "live": "En directe", + "snapshot": "Instantània de fa {age}", + "snapshotHint": "Llegeix les dades de la instantània de l'agent del tauler de Wazuh (wazuh-monitoring), presa a les {time}. Afegeix les credencials de l'API del servidor per obtenir dades en temps real.", + "staleSnapshot": "La instantània de l'agent de les {time} està obsoleta. Comprova que la tasca de supervisió del tauler de Wazuh s'estigui executant o afegeix les credencials de l'API del servidor.", + "noDisconnected": "Tots els agents estan connectats", + "empty": "Cap agent coincideix amb aquest filtre", + "column": { + "status": "Estat", + "name": "Nom de la feina", + "ip": "IP", + "os": "SO", + "version": "Versió", + "lastKeepAlive": "Manteniment de connexió", + "groups": "Grups" + }, + "outdated": "Més antiga que la versió més recent de l'agent ({version})" + }, + "wazuhAlerts": { + "name": "Canal d'alertes de Wazuh", + "description": "Alertes recents de Wazuh amb el nivell, les tècniques MITRE ATT&CK, l'agent i l'adreça IP d'origen", + "option": { + "minLevel": { + "label": "Nivell mínim de regla", + "description": "Nivells de Wazuh: 0-6 baix, 7-11 mitjà, 12-14 alt, 15 o més crític" + }, + "hours": { + "label": "Finestra temporal (hores)" + }, + "limit": { + "label": "Nombre d'alertes" + }, + "showMitre": { + "label": "Mostra les tècniques MITRE ATT&CK" + }, + "showAgent": { + "label": "Mostra l'agent" + }, + "showSourceIp": { + "label": "Mostra la IP d'origen" + }, + "showRuleId": { + "label": "Mostra l'identificador de la regla" + } + }, + "title": "Alertes · nivell {level}+ · {hours} h", + "empty": "No hi ha alertes en aquest nivell. Tot està tranquil.", + "rule": "Regla {id}", + "openInDashboard": "Obre aquesta alerta al tauler de Wazuh" + }, + "wazuhSummary": { + "name": "Gravetat de les alertes de Wazuh", + "description": "Desglossament de la gravetat de les alertes amb una tendència respecte del període anterior", + "option": { + "range": { + "label": "Interval de temps" + }, + "showTrend": { + "label": "Mostra la tendència respecte del període anterior" + }, + "showFooter": { + "label": "Mostra el peu de pàgina" + } + }, + "title": "Gravetat de les alertes · {range}", + "alerts": "alertes", + "none": "No hi ha alertes", + "trend": { + "new": "noves", + "tooltip": "Període anterior: {previous}" + }, + "previous": "Els {range} anteriors: {count}", + "maxLevel": "Nivell màxim {level}", + "health": "Estat de l'indexador: {status}", + "manager": "Gestor {version}" + }, + "wazuhTimeline": { + "name": "Línia temporal de les alertes de Wazuh", + "description": "Gràfic apilat de les alertes de Wazuh al llarg del temps per gravetat", + "option": { + "range": { + "label": "Interval de temps" + }, + "interval": { + "label": "Interval" + }, + "chartType": { + "label": "Tipus de gràfic" + }, + "yScale": { + "label": "Escala de l'eix Y", + "description": "L'arrel quadrada manté visibles les alertes altes i crítiques al costat de milers d'alertes baixes" + }, + "minLevel": { + "label": "Nivell mínim de la regla" + }, + "showLegend": { + "label": "Mostra la llegenda amb els totals" + } + }, + "title": "Línia temporal de les alertes · {range}", + "total": "{count} alertes", + "interval": "cada {interval}" + }, + "wazuhTopList": { + "name": "Llista principal de Wazuh", + "description": "Regles, agents, adreces IP d'origen o tàctiques i tècniques MITRE ATT&CK principals per nombre d'alertes", + "option": { + "kind": { + "label": "Classificació" + }, + "range": { + "label": "Interval de temps" + }, + "limit": { + "label": "Nombre d'entrades" + }, + "minLevel": { + "label": "Nivell mínim de la regla" + }, + "showBars": { + "label": "Mostra les barres" + } + }, + "title": { + "rules": "Regles principals · {range}", + "agents": "Agents principals · {range}", + "sourceIps": "IP d'origen principals · {range}", + "mitreTactics": "Tàctiques MITRE · {range}", + "mitreTechniques": "Tècniques MITRE · {range}" + }, + "empty": { + "rules": "No hi ha alertes en aquest període", + "agents": "No hi ha alertes en aquest període", + "sourceIps": "No hi ha alertes amb una IP d'origen en aquest període", + "mitreTactics": "No hi ha alertes assignades a MITRE ATT&CK en aquest període", + "mitreTechniques": "No hi ha alertes assignades a MITRE ATT&CK en aquest període" + }, + "totalTooltip": "{count} alertes coincidents", + "private": "LAN", + "public": "Pública", + "agents": "Vist en {count} agents", + "others": "{count} alertes més en altres entrades" + }, + "wazuhVulnerabilities": { + "name": "Vulnerabilitats de Wazuh", + "description": "Nombre de vulnerabilitats, CVE principals i agents més vulnerables", + "option": { + "cveOrder": { + "label": "Classifica els CVE per" + }, + "minSeverity": { + "label": "Gravetat del CVE" + }, + "cveLimit": { + "label": "Nombre de CVE" + }, + "agentLimit": { + "label": "Nombre d'agents" + }, + "showAgents": { + "label": "Mostra els agents més vulnerables" + } + }, + "title": "Vulnerabilitats", + "topCves": "CVE principals", + "score": "Puntuació", + "agentsShort": "Agents", + "topAgents": "Agents més vulnerables", + "criticalHigh": "Crític / alt", + "totalTooltip": "{count} troballes en {agents} agents", + "affected": "{count} agents", + "empty": "No s'han detectat vulnerabilitats", + "distribution": "Distribució de la gravetat. No es mostren {unscored} troballes sense puntuació.", + "worst": "Pitjor: {id} ({score}) en {agents} agents" + }, + "wazuhFim": { + "name": "Integritat dels fitxers de Wazuh", + "description": "Esdeveniments recents de supervisió de la integritat dels fitxers (syscheck)", + "option": { + "range": { + "label": "Interval de temps" + }, + "event": { + "label": "Esdeveniments" + }, + "limit": { + "label": "Nombre d'esdeveniments" + }, + "includeRegistry": { + "label": "Inclou els esdeveniments del registre de Windows" + } + }, + "title": "Integritat dels fitxers · {range}", + "event": { + "added": "Data d'addició", + "modified": "Modificat", + "deleted": "Eliminat", + "unknown": "Canviat" + }, + "empty": "No hi ha esdeveniments d'integritat dels fitxers en aquest període", + "user": "per {user}", + "registry": "Registre" + }, + "wazuhAuthFailures": { + "name": "Errors d'autenticació de Wazuh", + "description": "Inicis de sessió fallits i alertes de força bruta per agent amb gràfics horaris", + "option": { + "hours": { + "label": "Finestra temporal (hores)" + }, + "limit": { + "label": "Nombre d'agents" + }, + "showSourceIps": { + "label": "Mostra les IP d'origen principals" + } + }, + "title": "Errors d'autenticació · {hours} h", + "seriesTooltip": "Tots els agents durant les darreres {hours} h", + "peak": "Màxim: {count}/interval", + "empty": "No hi ha inicis de sessió fallits en aquest període", + "failed": "Inicis de sessió fallits", + "failedHint": "Errors d'autenticació individuals (sshd, PAM, inici de sessió de Windows, usuaris no vàlids)", + "bruteForce": "Força bruta", + "bruteForceHint": "Regles de força bruta correlacionades (diversos errors en un període curt, MITRE T1110)", + "sourceIps": "Adreces IP d'origen", + "ipTooltip": "{ip}: {count} errors", + "bruteForceCount": "{count} de força bruta" } }, "widgetPreview": { @@ -4004,7 +5732,76 @@ } }, "board": { + "emptyState": { + "title": "Crea la teva primera vista", + "description": "Afegeix un giny o una aplicació, o connecta un servei i utilitza'n les dades en aquest tauler.", + "addWidget": "Afegeix un giny", + "addApp": "Afegeix una aplicació", + "connectService": "Connecta un servei" + }, + "setupChecklist": { + "title": "Fes que aquest tauler sigui útil", + "description": "Reprèn la feina on l'havies deixat. El progrés segueix el contingut que ja hi ha en aquest tauler.", + "collapse": "Redueix la llista de configuració", + "dismiss": "", + "resume": "Continua la configuració ({completed}/{total})", + "progress": "Progrés de la configuració del tauler", + "step": { + "content": { + "label": "Afegeix contingut útil", + "description": "Tria un giny i configura'l abans de col·locar-lo." + }, + "app": { + "label": "Fixa una aplicació", + "description": "Mantén un servei o una eina a un clic d'aquest tauler." + }, + "service": { + "label": "Connecta un servei", + "description": "Desbloqueja les dades i les accions en temps real per als ginys compatibles.", + "permissionDescription": "Un administrador pot connectar un servei per desbloquejar les dades en temps real.", + "action": "Connecta" + } + } + }, "action": { + "addContent": "Afegeix contingut al tauler", + "settings": "Configuració del tauler", + "switch": "Canvia de tauler", + "switcher": { + "title": "Canvia de tauler", + "search": { + "empty": "No hi ha cap tauler que coincideixi amb \"{search}\"." + }, + "results": "Taulers disponibles", + "preview": "Previsualització de {name} amb {count} elements", + "currentHidden": "Tauler actual: {name}", + "keyboard": { + "navigate": "Navega", + "open": "Obre", + "instructions": "Escriu per filtrar els taulers. Utilitza les tecles de fletxa per moure't pels resultats i Retorn per obrir un tauler." + }, + "empty": { + "title": "No hi ha altres taulers", + "description": "No hi ha cap altre tauler al qual puguis accedir." + }, + "error": "No s'han pogut carregar els taulers." + }, + "create": { + "availability": { + "checking": "Comprovant la disponibilitat…", + "available": "{name} està disponible" + }, + "notification": { + "success": { + "title": "Tauler creat", + "message": "S'ha creat el tauler {name}" + }, + "error": { + "title": "No s'ha pogut crear el tauler", + "message": "No s'ha pogut crear el tauler {name}" + } + } + }, "duplicate": { "title": "Duplicar tauler", "message": "Això duplicarà el tauler {name} amb tot el seu contingut. Si els ginys fan referència a integracions que no tens permís per utilitzar, s'eliminaran.", @@ -4020,14 +5817,19 @@ } }, "edit": { + "enter": "Edita el tauler", + "save": "Desa el tauler", + "exit": "Surt del mode d'edició", "notification": { "success": { - "title": "Els canvis s'han aplicat correctament", "message": "El tauler s'ha desat correctament" }, "error": { - "title": "No s'han pogut aplicar els canvis", "message": "No s'ha pogut desar el tauler" + }, + "loadError": { + "title": "No es pot iniciar l'edició", + "message": "No s'ha pogut carregar l'editor del tauler. El tauler continua disponible en mode de visualització." } }, "confirmLeave": { @@ -4035,62 +5837,6 @@ "message": "Teniu canvis sense desar, esteu segur que voleu sortir?" } }, - "oldImport": { - "label": "Importa des d'Homarr anterior a la versió 1.0.0", - "notification": { - "success": { - "title": "Importació correcta", - "message": "El tauler s'ha importat correctament" - }, - "error": { - "title": "Importació fallida", - "message": "No s'ha pogut importar el tauler, comproveu els registres per a més detalls" - } - }, - "form": { - "file": { - "label": "Selecciona un fitxer JSON", - "invalidError": "Fitxer de configuració no vàlid" - }, - "apps": { - "label": "Aplicacions", - "avoidDuplicates": { - "label": "Evita duplicats", - "description": "Ignora les aplicacions on ja existeix una aplicació amb el mateix href" - }, - "onlyImportApps": { - "label": "Importa només les aplicacions", - "description": "Només afegeix les aplicacions, el tauler s'ha de tornar a crear manualment" - } - }, - "name": { - "label": "Nom del tauler" - }, - "screenSize": { - "label": "Mida de la pantalla", - "description": "En versions anteriors a la 1.0 existien tres modes diferents, de manera que podíeu triar la quantitat de columnes per a cada mida de pantalla.", - "option": { - "sm": "Petita", - "md": "Mitjana", - "lg": "Gran" - } - }, - "sidebarBehavior": { - "label": "Comportament de la barra lateral", - "description": "Les barres laterals es van eliminar a la versió 1.0, podeu seleccionar què ha de passar amb els elements que contenen.", - "option": { - "lastSection": { - "label": "Última secció", - "description": "La barra lateral es mostrarà sota l'última secció" - }, - "removeItems": { - "label": "Elimina els elements", - "description": "Els elements continguts a la barra lateral s'eliminaran" - } - } - } - } - }, "quickCreateApp": { "modal": { "title": "Crear aplicació al vol", @@ -4098,6 +5844,12 @@ } } }, + "landmark": { + "canvas": "Àrea del tauler", + "leftRail": "Barra lateral esquerra del tauler", + "rightRail": "Barra lateral dreta del tauler", + "items": "Elements del tauler" + }, "field": { "pageTitle": { "label": "Títol de la pàgina" @@ -4167,7 +5919,8 @@ } }, "primaryColor": { - "label": "Color primari" + "label": "Color primari", + "locked": "L'administrador manté el color de marca de la instància a tots els taulers." }, "secondaryColor": { "label": "Color secundari" @@ -4207,9 +5960,6 @@ "xl": "Molt gran" } }, - "name": { - "label": "Nom" - }, "isPublic": { "label": "Públic", "description": "Els taulers públics són accessibles per a tothom, fins i tot sense compte." @@ -4229,9 +5979,44 @@ "title": "Disposició", "responsive": { "title": "Disposicions responsives", + "description": "Cada disseny conserva les seves pròpies posicions i mides dels ginys. Mòbil i Base sempre estan disponibles; afegeix dissenys personalitzats en qualsevol altre punt d'interrupció.", "action": { "add": "Afegir disposició" } + }, + "role": { + "mobile": "Mòbil", + "base": "Base", + "custom": "Personalitzat" + }, + "custom": { + "defaultName": "Disposició personalitzada" + }, + "mobile": { + "breakpointDescription": "El disseny Mòbil sempre s'utilitza des de 0 px fins al punt d'interrupció següent." + }, + "preview": { + "columns": "columnes", + "empty": "Aquesta disposició és buida", + "dynamicSection": "Secció dinàmica", + "editorWidthLabel": "{layoutName} · {width} px" + }, + "reset": { + "action": "Restableix des de Base", + "confirm": { + "title": "Vols restablir {layoutName}?", + "message": "Això substituirà totes les posicions i mides desades d'aquest disseny per un disseny nou generat a partir de Base. No es pot desfer." + } + }, + "edit": { + "action": "Edita la disposició", + "saveAndEdit": "Desa i edita", + "save": "Desa la disposició", + "cancel": { + "action": "Cancel·la l'edició de la disposició", + "title": "Vols descartar els canvis de la disposició?", + "message": "Es descartaran els canvis no desats d'aquesta disposició." + } } }, "background": { @@ -4268,10 +6053,7 @@ "rename": { "label": "Canvia el nom del tauler", "description": "Canviar el nom trencarà qualsevol enllaç a aquest tauler.", - "button": "Canvia el nom", - "modal": { - "title": "Canvia el nom del tauler" - } + "button": "Canvia el nom" }, "visibility": { "label": "Canvia la visibilitat del tauler", @@ -4295,9 +6077,7 @@ } }, "delete": { - "label": "Elimina aquest tauler", "description": "Un cop elimineu un tauler, no el podreu recuperar. Estigueu-ne segurs.", - "button": "Elimina aquest tauler", "confirm": { "title": "Elimina el tauler", "description": "Esteu segur que voleu eliminar aquest tauler? Això suprimirà permanentment el tauler i tot el seu contingut." @@ -4342,28 +6122,41 @@ }, "layout": { "field": { - "name": { - "label": "Nom" - }, "columnCount": { "label": "Nombre de columnes" }, "breakpoint": { "label": "Punt de ruptura", "description": "La disposició s'utilitzarà en totes les pantalles més grans que aquest punt de ruptura fins al següent punt de ruptura més gran." + }, + "gutters": { + "label": "Barres laterals fixes", + "description": "Reserva fins a tres columnes del tauler a cada costat. El llenç restant es reorganitza automàticament.", + "left": { + "label": "Barra lateral esquerra", + "description": "Mantén aquesta àrea visible mentre es desplaça el tauler.", + "thumbLabel": "Amplada de la barra lateral esquerra" + }, + "right": { + "label": "Barra lateral dreta", + "description": "Mantén aquesta àrea visible mentre es desplaça el tauler.", + "thumbLabel": "Amplada de la barra lateral dreta" + }, + "width": { + "label": "Amplada en columnes" + }, + "preview": { + "label": "Previsualització de la disposició del tauler" + } } } }, "management": { "metaTitle": "Gestió", - "title": { - "morning": "Bon dia, {username}", - "afternoon": "Bona tarda, {username}", - "evening": "Bon vespre, {username}" - }, "notFound": { "title": "No trobat", - "text": "No s'ha pogut trobar el recurs sol·licitat" + "text": "No s'ha pogut trobar el recurs sol·licitat", + "backToHome": "Torna a l'inici de la gestió" }, "error": { "title": "No s'ha pogut carregar aquesta pàgina", @@ -4372,19 +6165,10 @@ }, "navbar": { "items": { - "workshop": "Workshop", "home": "Inici", - "boards": "Taulers", - "apps": "Aplicacions", - "integrations": "Integracions", - "searchEngies": "Motors de cerca", - "medias": "Multimèdia", "users": { - "label": "Usuaris", "items": { - "manage": "Gestiona", - "invites": "Invitacions", - "groups": "Grups" + "manage": "Gestiona" } }, "tools": { @@ -4392,10 +6176,7 @@ "items": { "docker": "Docker", "kubernetes": "Kubernetes", - "logs": "Registres", "api": "API i MCP", - "certificates": "Certificats", - "tasks": "Tasques", "backup": "Còpia de seguretat" } }, @@ -4409,21 +6190,12 @@ "sourceCode": "Codi font" } }, - "about": "Quant a" + "about": "Quant a", + "assistant": "Assistent" } }, "page": { "home": { - "statistic": { - "board": "Taulers", - "user": "Usuaris", - "invite": "Invitacions", - "integration": "Integracions", - "app": "Aplicacions", - "group": "Grups", - "searchEngine": "Motors de cerca", - "media": "Medis" - }, "statisticLabel": { "boards": "Taulers", "resources": "Recursos", @@ -4461,13 +6233,8 @@ "tooltip": "Aquest tauler es mostrarà com el teu tauler mòbil" } }, - "duplicate": { - "label": "Duplicar tauler" - }, "delete": { - "label": "Elimina permanentment", "confirm": { - "title": "Elimina el tauler", "description": "Esteu segur que voleu eliminar el tauler {name}?" } } @@ -4476,28 +6243,82 @@ "public": "Aquest tauler és públic", "private": "Aquest tauler és privat" }, - "noResults": { - "title": "Encara no hi ha taulers" + "preview": { + "label": "Previsualització de la disposició de {name}, amb {count} elements", + "unknownCreator": "Creador desconegut" }, - "modal": { - "createBoard": { - "field": { - "name": { - "label": "Nom" - } - } - } + "noResults": { + "title": "Encara no hi ha taulers", + "description": "Crea un tauler per organitzar les teves aplicacions i ginys en un sol lloc." } }, "media": { "includeFromAllUsers": "Inclou multimèdia de tots els usuaris" }, "user": { - "back": "Torna als usuaris", "fieldsDisabledExternalProvider": "Alguns camps estan desactivats perquè els gestiona un proveïdor d'autenticació extern.", "setting": { "general": { "title": "General", + "header": { + "title": "Estudi de la capçalera", + "badge": "Personal", + "description": "Arrossega els controls a qualsevol lloc de la fila. Esquerra, Centre i Dreta es mantenen fixes mentre els controls es mouen al seu voltant.", + "device": { + "desktop": "Escriptori", + "mobile": "Mòbil" + }, + "zones": { + "left": "Esquerra", + "center": "Centre", + "right": "Dreta" + }, + "action": { + "hide": "Amaga la capçalera", + "show": "Mostra la capçalera", + "configure": "Mou o configura {item}", + "remove": "Elimina {item}", + "dropIntoZone": "Mou a la secció {zone}" + }, + "preview": { + "board": "Previsualització del tauler de {name}", + "empty": "No hi ha cap disposició de tauler disponible" + }, + "available": { + "title": "Controls disponibles", + "description": "Afegeix un control i arrossega el botó complet fins a la posició desitjada a sobre.", + "requiredAlways": "Aquest control és obligatori, però el pots moure a qualsevol lloc de la capçalera.", + "allAdded": "Tots els controls integrats ja són a la teva capçalera.", + "add": "Afegeix {item}", + "boardShortcut": "Drecera del tauler", + "chooseBoard": "Tria un tauler" + }, + "configuration": { + "description": "Aquest control manté la mateixa mida que té a la capçalera activa.", + "searchDisplay": { + "input": "Barra de cerca", + "icon": "Només la icona" + }, + "logoDisplay": { + "logo": "Només el logotip", + "logoAndText": "Logotip + text" + } + }, + "items": { + "logo": "Logotip", + "search": "Cerca", + "home": "Panell d'inici", + "boardSwitcher": "Taulers", + "assistant": "Assistent", + "docker": "Docker", + "boardEdit": "Edita el tauler", + "boardSettings": "Configuració del tauler", + "settings": "La teva configuració", + "themeToggle": "Canvia el tema", + "user": "Compte", + "boardUnavailable": "Tauler no disponible" + } + }, "item": { "language": "Idioma i regió", "board": { @@ -4531,14 +6352,10 @@ }, "security": { "title": "Seguretat" - }, - "board": { - "title": "Taulers" } }, "list": { - "metaTitle": "Gestiona els usuaris", - "title": "Usuaris" + "metaTitle": "Gestiona els usuaris" }, "edit": { "metaTitle": "Edita l'usuari {username}" @@ -4592,9 +6409,6 @@ } }, "field": { - "id": { - "label": "ID" - }, "creator": { "label": "Creador" }, @@ -4618,10 +6432,7 @@ }, "setting": { "title": "Configuració", - "alert": "La configuració del grup es prioritza per l'ordre dels grups a la llista. La configuració superior sobreescriu la inferior.", - "board": { - "title": "Taulers" - } + "alert": "La configuració del grup es prioritza per l'ordre dels grups a la llista. La configuració superior sobreescriu la inferior." }, "members": { "title": "Membres", @@ -4629,10 +6440,7 @@ "notFound": "No s'ha trobat cap membre" }, "permissions": { - "title": "Permisos", - "form": { - "unsavedChanges": "Teniu canvis no desats!" - } + "title": "Permisos" } } }, @@ -4641,12 +6449,10 @@ "notification": { "success": { "message": "Configuració desada correctament" - }, - "error": { - "message": "No s'ha pogut desar la configuració" } }, "section": { + "analyticsDocumentation": "Consulta exactament quines dades d'anàlisi recopila Homarr", "analytics": { "title": "Analítica", "general": { @@ -4675,7 +6481,6 @@ } }, "board": { - "title": "Taulers", "homeBoard": { "label": "Tauler d'inici global", "mobileLabel": "Tauler mòbil global", @@ -4694,7 +6499,6 @@ } }, "user": { - "title": "Usuaris", "enableGravatar": { "label": "Activa Gravatar", "description": "Utilitza els avatars d'usuari de Libravatar/Gravatar quan no hi ha cap avatar personalitzat i hi ha un correu electrònic configurat" @@ -4710,12 +6514,86 @@ "appearance": { "title": "Aparença", "defaultColorScheme": { - "label": "Esquema de color per defecte", + "label": "Esquema de color per defecte" + } + }, + "branding": { + "title": "Identitat de la instància", + "groups": { + "identity": "Identitat", + "appearance": "Aparença", + "customCss": "CSS personalitzat", + "authentication": "Autenticació" + }, + "identity": { + "description": "El logotip de l'aplicació és la marca gran que s'utilitza dins de l'aplicació, a les pàgines d'inici de sessió i per a les aplicacions instal·lades. La icona del navegador (favicon) és el petit quadrat que s'utilitza a les pestanyes i als marcadors; quan és buida, es fa servir el logotip de l'aplicació." + }, + "appName": { + "label": "Nom de l'aplicació" + }, + "greeting": { + "label": "Salutació personalitzada" + }, + "logo": { + "label": "Logotip de l'aplicació", + "placeholder": "/logo/logo.png" + }, + "favicon": { + "label": "Icona del navegador (favicon)", + "placeholder": "Utilitza el logotip de l'aplicació" + }, + "primaryColor": { + "label": "Color principal" + }, + "secondaryColor": { + "label": "Accent secundari" + }, + "lockPrimaryColor": { + "label": "Mantén aquest color a tots els taulers", + "description": "Evita que els colors del tauler substitueixin l'accent de l'aplicació." + }, + "signInBackground": { + "label": "Fons de l'autenticació", + "placeholder": "https://example.com/background.jpg" + }, + "signInOverlay": { + "label": "Superposició del fons" + }, + "defaultRadius": { + "label": "Estil de les cantonades", "options": { - "auto": "Automàtic", - "light": "Clar", - "dark": "Fosc" + "xs": "Estret", + "sm": "Subtil", + "md": "Equilibrat", + "lg": "Arrodonit", + "xl": "Suau" } + }, + "customCss": { + "label": "CSS personalitzat global", + "description": "S'aplica a totes les pàgines. El CSS personalitzat del tauler el pot substituir." + }, + "authVisibility": { + "description": "Tria què apareix a totes les pàgines d'autenticació.", + "appName": "Nom de l'aplicació", + "logo": "Logotip de l'aplicació", + "greeting": "Salutació" + }, + "summary": { + "title": "Marca actual", + "cornerStyle": "Estil de les cantonades", + "palette": "Paleta", + "backgroundConfigured": "Fons personalitzat · superposició del {overlay}%", + "backgroundDefault": "Fons predeterminat", + "greetingConfigured": "Salutació personalitzada", + "greetingDefault": "Salutació predeterminada", + "boardColorLocked": "Color del tauler bloquejat", + "boardColorFlexible": "Colors del tauler permesos", + "appName": "Nom de la feina", + "logo": "Logotip", + "greeting": "Salutació", + "on": "Activat", + "off": "Desactivat" } }, "culture": { @@ -4723,12 +6601,177 @@ "defaultLocale": { "label": "Idioma per defecte" } + }, + "assistant": { + "loading": "S'està carregant la configuració de l'assistent", + "title": "Assistent", + "description": "Connecta un punt final de model compatible amb OpenAI per a l'assistent de tota la instància.", + "security": { + "description": "Les claus de l'API i els valors de capçalera addicionals estan xifrats a la base de dades d'Homarr. Mai no es retornen als navegadors. Les sol·licituds al model s'envien directament des del servidor d'Homarr al punt final configurat." + }, + "overview": { + "connectionReady": "Connexió preparada", + "unsavedChanges": "Canvis no desats", + "setupRequired": "Configuració necessària", + "disabled": "Desactivat", + "noModel": "No s'ha seleccionat cap model" + }, + "connection": { + "endpointTitle": "Proveïdor i punt final", + "description": "Tria un valor predefinit o connecta qualsevol servei que implementi l'API de completions de xat d'OpenAI.", + "save": "Desa la connexió del proveïdor" + }, + "credentials": { + "title": "Credencials", + "description": "Afegeix els secrets que necessita aquest punt final. Els valors desats romanen xifrats i no es poden tornar a llegir.", + "required": "Clau obligatòria", + "optional": "Clau opcional", + "workshop": "Inici de sessió de GitHub per usuari" + }, + "provider": { + "title": "Proveïdor", + "groups": { + "free": "Gratuït amb Homarr", + "hosted": "Proveïdors allotjats", + "local": "Proveïdors locals", + "custom": "Personalitzat" + }, + "options": { + "homarr": { + "description": "Cada dia hi ha un nombre limitat d'usos de l'Assistent gratuïts, finançats per l'equip de Homarr. Inicia sessió amb el Community Workshop per utilitzar la teva quota." + }, + "openrouter": { + "description": "Encaminament de models allotjats amb un catàleg ampli de models compatibles amb eines." + }, + "openai": { + "description": "Complecions de xat d'OpenAI mitjançant el punt final oficial de l'API." + }, + "anthropic": { + "description": "Claude mitjançant el punt final de compatibilitat amb l'SDK d'OpenAI d'Anthropic." + }, + "google-gemini": { + "description": "Gemini mitjançant el punt final de l'API compatible amb OpenAI de Google." + }, + "xai": { + "description": "Models Grok mitjançant l'API compatible amb OpenAI d'xAI." + }, + "groq": { + "description": "Inferència allotjada ràpida mitjançant l'API compatible amb OpenAI de Groq." + }, + "mistral": { + "description": "Models Mistral mitjançant l'API oficial." + }, + "deepseek": { + "description": "Models DeepSeek mitjançant la seva API compatible amb OpenAI." + }, + "together": { + "description": "Models oberts allotjats mitjançant l'API compatible amb OpenAI de Together." + }, + "ollama": { + "description": "Un servidor Ollama local o de xarxa que utilitza la seva API compatible amb OpenAI." + }, + "lm-studio": { + "description": "Un servidor local de LM Studio amb la compatibilitat amb OpenAI activada." + }, + "llama-cpp": { + "description": "Un servidor local o de xarxa de llama.cpp que utilitza la seva API compatible amb OpenAI." + }, + "custom": { + "label": "Punt final personalitzat", + "description": "Qualsevol altre punt final compatible amb les complecions de xat d'OpenAI." + } + }, + "homarrAuth": { + "title": "Usos diaris gratuïts de l'Assistent inclosos", + "description": "No cal cap clau d'API. L'equip de Homarr cobreix un nombre limitat d'usos de l'Assistent cada dia. Inicia sessió amb el Community Workshop per mantenir la teva quota separada." + } + }, + "baseUrl": { + "title": "URL base de l'API", + "description": "Inclou el prefix de l'API, normalment /v1. En contenidors, localhost fa referència al contenidor de Homarr." + }, + "apiKey": { + "title": "Clau d'API", + "required": "Requerida per aquest proveïdor. El valor està xifrat i només es pot escriure.", + "optional": "Opcional per als punts finals locals. Deixa-ho en blanc quan el servei no requereixi autenticació amb bearer.", + "placeholder": "Introdueix una clau d'API", + "savedTitle": "Clau d'API xifrada desada", + "savedDescription": "Homarr pot utilitzar aquesta clau, però no pot mostrar-ne ni recuperar-ne el valor.", + "remove": "Elimina la clau d'API desada", + "removeFlow": { + "title": "Vols eliminar la clau d'API desada?", + "description": "Aquest proveïdor requereix una clau d'API. Eliminar-la pot aturar la detecció de models i les respostes de l'assistent fins que se'n desi una altra.", + "optionalDescription": "El punt final deixarà de rebre autenticació amb bearer quan s'elimini aquesta clau. Confirma que accepta sol·licituds no autenticades o que utilitza una altra capçalera desada.", + "cancel": "Conserva la clau desada", + "confirm": "Elimina la clau d'API" + } + }, + "headers": { + "title": "Capçaleres de sol·licitud addicionals", + "description": "Capçaleres opcionals d'autenticació o encaminament. Els valors de les capçaleres estan xifrats i només es poden escriure.", + "add": "Afegeix una capçalera", + "name": "Nom de la capçalera", + "value": "Valor de la capçalera", + "valuePlaceholder": "Valor secret o d'encaminament", + "remove": "Elimina la capçalera", + "configured": "Hi ha configurades capçaleres xifrades addicionals. Afegir capçaleres substitueix tot el conjunt desat.", + "empty": "No hi ha capçaleres addicionals desades per a aquest proveïdor.", + "savedBadge": "Capçaleres desades", + "pendingRemoval": "Eliminació pendent", + "clear": "Elimina les capçaleres desades en desar", + "keep": "Conserva les capçaleres desades" + }, + "model": { + "title": "Model", + "description": "Selecciona un model detectat o introdueix l'ID exacte del model del punt final.", + "placeholder": "ID del model", + "refresh": "Actualitza els models", + "chooseModel": "Tria el model que s'utilitzarà per a les converses noves.", + "discoveryPath": "Camí de detecció de models", + "discoveryPathDescription": "S'afegeix a l'URL base de l'API. Deixa-ho en blanc per desactivar la detecció i utilitzar manualment un ID de model.", + "manual": "Introdueix manualment un ID de model o desa la connexió per detectar models.", + "manualFallback": "La detecció no està disponible. Encara pots introduir manualment un ID de model.", + "saveConnectionFirst": "Desa la connexió del proveïdor abans de triar un model.", + "discovering": "S'estan actualitzant els models disponibles d'aquest proveïdor…", + "discovered": "{count, plural, one {S'ha detectat # model. La compatibilitat amb eines depèn del punt final i del model seleccionats.} other {S'han detectat # models. La compatibilitat amb eines depèn del punt final i del model seleccionats.}}", + "discoveryFailed": "La detecció de models no s'ha completat", + "context": "{count} finestra de context", + "toolsConfirmed": "Eines anunciades", + "toolsUnknown": "Verifica la compatibilitat amb eines" + }, + "serverTools": { + "title": "Eines del servidor", + "webSearch": { + "label": "Cerca web", + "description": "Permet que el model cerqui al web en temps real mitjançant OpenRouter quan una sol·licitud necessiti informació actual. L'ús de la cerca es cobra per separat a OpenRouter.", + "proxyDescription": "Envia l'eina de servidor de cerca web d'OpenRouter a aquest punt final. Activa-ho només quan el punt final personalitzat reenviï el format d'eines de servidor d'OpenRouter, com ara un servidor intermediari de Homarr Router.", + "limit": "El model decideix quan cercar, amb un límit de 3 cerques i 5 resultats per cerca per a cada sol·licitud." + } + }, + "enabled": { + "label": "Activa l'Assistent", + "description": "Mostra l'assistent a tots els usuaris que han iniciat sessió. Els permisos existents de Homarr continuen aplicant-se a cada crida d'eina interna." + }, + "save": "Desa l'assistent", + "notification": { + "connectionSaved": { + "title": "Connexió del proveïdor desada", + "message": "El punt final i les credencials xifrades estan preparats per seleccionar un model.", + "credentialsCleared": "El punt final ha canviat, per tant les credencials anteriors s'han esborrat. Afegeix les credencials per a la nova destinació si cal." + }, + "saved": { + "title": "Configuració de l'assistent desada", + "message": "La configuració del model nou i de la disponibilitat està activa." + }, + "error": { + "title": "No s'ha pogut desar la configuració de l'assistent" + } + } } } }, "tool": { "tasks": { - "title": "Tasques", "status": { "idle": "Inactiu", "running": "En execució", @@ -4746,6 +6789,11 @@ "label": "Pings" } }, + "action": { + "run": "Executa {name} ara", + "enable": "Activa {name}", + "disable": "Desactiva {name}" + }, "interval": { "seconds": "", "minutes": "", @@ -4761,13 +6809,7 @@ } } }, - "settings": { - "title": "Configuració de la tasca per a {jobName}" - }, "field": { - "name": { - "label": "Nom" - }, "interval": { "label": "Interval de programació" }, @@ -4781,11 +6823,6 @@ "table": { "search": "Cerca {count} tasques..." }, - "action": { - "refresh": { - "label": "Actualitza" - } - }, "refresh": { "success": { "message": "Les tasques s'han actualitzat correctament" @@ -4819,7 +6856,6 @@ } }, "api": { - "title": "API", "modal": { "createApiToken": { "title": "Token d'API creat", @@ -4845,7 +6881,6 @@ }, "table": { "header": { - "id": "ID", "createdBy": "Creat per", "actions": "Accions" } @@ -4901,43 +6936,12 @@ "availableTools": { "title": "Eines disponibles", "description": "Hi ha {count} eines disponibles. Amplia una categoria per veure les eines individuals i les seves descripcions.", - "columnType": "Tipus", - "columnName": "Eina", - "columnDescription": "Descripció" - }, - "troubleshooting": { - "title": "Resolució de problemes", - "missingHeader": { - "title": "«Falta la capçalera ApiKey»", - "description": "El teu client no envia la capçalera {header}. Verifica que la secció {section} de la configuració MCP sigui correcta. Alguns clients requereixen reiniciar-se després de canviar la configuració." - }, - "invalidFormat": { - "title": "«Format d'ApiKey no vàlid»", - "description": "Assegura't d'haver copiat la clau d'API completa, no només una part." - }, - "invalidKey": { - "title": "«Clau d'API no vàlida»", - "description": "No s'ha trobat l'identificador de la clau o el testimoni és incorrecte. Les claus d'API només es poden veure una vegada en crear-les. Si l'has perdut, elimina la clau antiga i crea'n una de nova." - }, - "connectionRefused": { - "title": "Connexió rebutjada / temps d'espera excedit", - "description": "Assegura't que l'URL sigui accessible des del teu client d'IA. Si Homarr s'executa darrere d'un proxy invers o a Docker, utilitza l'URL extern (no {localhost}). Verifica que el port sigui correcte (predeterminat: 7575 per a Docker)." - }, - "toolsNotAppearing": { - "title": "No es mostren les eines", - "description": "Algunes eines requereixen configurar integracions específiques (p. ex., Docker o Overseerr). La llista d'eines depèn del que estigui disponible a la teva instància d'Homarr." + "filteredDescription": "{count} eines coincidents en categories ampliades.", + "search": "Cerca eines", + "noResults": { + "title": "Cap eina coincideix amb aquesta cerca", + "description": "Cap eina MCP coincideix amb «{search}». Prova amb un espai de noms, un nom d'eina o una descripció." } - }, - "copy": "Copia", - "oneClick": { - "title": "Instal·la amb un clic", - "subtitle": "Utilitza OAuth: autentica't al navegador durant el primer ús", - "vsCode": "Instal·la al VS Code", - "cursor": "Instal·la al Cursor", - "copyUrl": "Copia l'URL MCP", - "copied": "Copiat!", - "copyHint": "Per a ChatGPT, Claude Code o qualsevol client MCP", - "manualConfig": "Configuració manual" } } } @@ -4954,47 +6958,12 @@ "title": "Exportació de dades sensibles", "warningTitle": "Aquesta exportació conté tota la base de dades.", "warningBody": "La còpia de seguretat inclou tots els usuaris, els secrets de les integracions (xifrats), les claus d'API, les configuracions dels taulers i les dades de l'aplicació. Emmagatzema el fitxer exportat de manera segura i no el comparteixis.", - "typePrompt": "Escriu «{phrase}» per continuar", - "submit": "Exporta la base de dades", - "cancel": "Cancel·la" + "submit": "Exporta la base de dades" } }, "import": { "title": "Restaura la base de dades", - "description": "Puja una còpia ZIP exportada anteriorment per restaurar la base de dades. Això substituirà tota la base de dades. Si la còpia es va crear amb una clau de xifratge diferent, els secrets es tornaran a xifrar automàticament.", - "warning": "Restaurar una còpia de seguretat substituirà completament la base de dades actual i reiniciarà l'aplicació. Aquesta acció no es pot desfer.", - "dropzone": { - "title": "Deixa aquí la còpia ZIP o fes clic per explorar", - "description": "Només s'accepten fitxers .zip d'una còpia de seguretat SQLite d'Homarr" - }, - "changeFile": "Canvia el fitxer", - "button": "Restaura la base de dades", - "success": { - "title": "Restauració completada", - "message": "La base de dades s'ha restaurat correctament. L'aplicació s'està reiniciant..." - }, - "error": "La importació ha fallat" - }, - "preview": { - "title": "Contingut de la còpia de seguretat", - "exported": "Exportat el {date}", - "loading": "Analitzant el fitxer de còpia de seguretat...", - "errorTitle": "Error de previsualització", - "entity": "Entitat", - "count": "Nombre", - "boards": "Taulers", - "entities": { - "board": "Taulers", - "user": "Usuaris", - "app": "Aplicacions", - "integration": "Integracions", - "item": "Ginys", - "media": "Multimèdia", - "search_engine": "Motors de cerca" - }, - "analyzeError": "No s'ha pogut analitzar el fitxer de còpia de seguretat", - "invalidMissingMetadata": "Còpia de seguretat no vàlida: falta metadata.json", - "invalidMissingDb": "Còpia de seguretat no vàlida: falta db.sqlite" + "description": "Puja una còpia ZIP exportada anteriorment per restaurar la base de dades. Això substituirà tota la base de dades. Si la còpia es va crear amb una clau de xifratge diferent, els secrets es tornaran a xifrar automàticament." }, "restore": { "dropzone": { @@ -5004,29 +6973,20 @@ "analyzing": "Analitzant la còpia de seguretat...", "changeFile": "Canvia el fitxer", "continueToRestore": "Continua per restaurar", - "tryAgain": "Torna-ho a provar", "analysisError": "Error d'anàlisi", "preview": { "title": "Contingut de la còpia de seguretat", "exported": "Exportat el {date}", "entity": "Entitat", "count": "Nombre", - "boards": "Taulers", "entities": { - "board": "Taulers", - "user": "Usuaris", - "app": "Aplicacions", - "integration": "Integracions", - "item": "Ginys", - "media": "Multimèdia", - "search_engine": "Motors de cerca" + "item": "Ginys" }, "migrationsApplied": "S'ha aplicat {count} migració", "migrationsAppliedPlural": "S'han aplicat {count} migracions", "migrationsOlderVersion": "Aquesta còpia de seguretat prové d'una versió anterior d'Homarr. S'ha aplicat {count} migració de l'esquema per actualitzar-la.", "migrationsOlderVersionPlural": "Aquesta còpia de seguretat prové d'una versió anterior d'Homarr. S'han aplicat {count} migracions de l'esquema per actualitzar-la.", "migrationsUpToDate": "L'esquema de la base de dades està actualitzat ({count} migracions aplicades)", - "upToDate": "Actualitzat", "migrationsPending": "{count} pendents" }, "migration": { @@ -5037,21 +6997,21 @@ "title": "Acció destructiva", "warningTitle": "Això substituirà permanentment tota la base de dades.", "warningBody": "Es perdran tots els taulers, usuaris, aplicacions, integracions, configuracions i sessions actuals. Aquesta acció no es pot desfer. L'aplicació es reiniciarà després de la restauració.", - "typePrompt": "Escriu «{phrase}» per continuar", - "cancel": "Cancel·la", "submit": "Restaura la base de dades" }, "progress": { "title": "Restaurant la base de dades...", - "extracting": "Extraient l'arxiu de còpia de seguretat", - "migrating": "Aplicant les migracions de la base de dades", - "encrypting": "Tornant a xifrar els secrets de les integracions", - "swapping": "Substituint el fitxer de la base de dades", - "restarting": "Reiniciant el servidor" + "restarting": "Reiniciant el servidor", + "relogin": "La restauració de la base de dades ha invalidat la sessió actual. Homarr t'enviarà a iniciar sessió quan el servidor estigui preparat." }, "complete": { "title": "Restauració completada", - "message": "La base de dades s'ha restaurat correctament. El servidor s'està reiniciant; actualitza la pàgina d'aquí a uns segons." + "message": "La base de dades s'ha restaurat correctament. El servidor s'està reiniciant; actualitza la pàgina d'aquí a uns segons.", + "button": "Inicia sessió ara" + }, + "timeout": { + "title": "El servidor no ha tornat a estar disponible", + "message": "La restauració de la base de dades ha finalitzat, però Homarr no ha tornat a estar preparat. Torna a provar la comprovació de connexió o actualitza manualment aquesta pàgina." }, "failed": { "title": "La restauració ha fallat" @@ -5059,6 +7019,9 @@ "invalidMissingMetadata": "Còpia de seguretat no vàlida: falta metadata.json", "invalidMissingDb": "Còpia de seguretat no vàlida: falta db.sqlite", "analyzeError": "No s'ha pogut analitzar la còpia de seguretat" + }, + "confirm": { + "typePrompt": "Escriu «{phrase}» per continuar" } } }, @@ -5093,7 +7056,11 @@ "toggleBoardEdit": "Canvia l'edició del tauler", "toggleColorScheme": "Canvia entre el mode clar i el fosc", "saveNotebook": "Desa la llibreta (només dins del giny de llibreta)", - "openSpotlight": "Obre la cerca" + "openSpotlight": "Obre la cerca", + "openSpotlightApps": "Obre la cerca d'aplicacions", + "openSpotlightAssistant": "Obre el mode Assistent", + "openSpotlightPreferences": "Obre el mode de preferències", + "openAssistant": "Obre l'Assistent" }, "note": "Consell: Mod fa referència tant a la tecla Ctrl com a la tecla ⌘ de macOS" } @@ -5103,6 +7070,63 @@ }, "docker": { "title": "Contenidors", + "reconciliation": { + "title": "Assistent de configuració de Docker", + "suggestions": "{count, plural, =0 {Cap suggeriment} one {# suggeriment} other {# suggeriments}}", + "attention": "{count} requereixen atenció", + "endpointUnavailable": "No s'han pogut comprovar alguns serveis perquè aquests punts finals no estan disponibles: {names}", + "empty": "No s'han trobat serveis de Docker visibles.", + "emptyFilter": "Cap servei coincideix amb aquesta vista.", + "ambiguous": "Més d'un element existent podria coincidir amb aquest servei. Homarr no en triarà cap automàticament.", + "filter": { + "attention": "Requereix atenció", + "represented": "Ja configurat", + "all": "Tots" + }, + "state": { + "newRecognized": "Preparat per connectar", + "newApp": "Servei nou", + "represented": "Ja representat", + "linked": "Enllaçat", + "moved": "Adreça canviada" + }, + "url": { + "manual": "Introdueix una adreça manualment" + }, + "health": { + "layer": { + "docker": "Docker", + "integrationConfiguration": "Integració", + "authentication": "Autenticació", + "apiRequest": "API", + "appRepresentation": "Aplicació", + "widgetConfiguration": "Giny", + "widgetQuery": "Consulta del giny" + }, + "status": { + "available": "Disponible", + "configured": "Configurat", + "linked": "Enllaçat", + "missing": "Falta", + "changed": "Canviat", + "unused": "No utilitzat", + "notApplicable": "No aplicable", + "notObserved": "No observat" + } + }, + "action": { + "review": "Revisa", + "dismiss": "Descarta", + "restoreDismissed": "Restaura els descartats ({count})", + "setupIntegration": "Configura la integració", + "reviewIntegration": "Revisa la integració", + "viewRepresentation": "Mostra la configuració" + }, + "loadError": { + "title": "No s'ha pogut carregar l'assistent de configuració de Docker", + "message": "La informació del servei de Docker no està disponible. Torna-ho a provar sense sortir d'aquesta pàgina." + } + }, "table": { "updated": "Actualitzat {when}", "refresh": { @@ -5115,9 +7139,6 @@ "totalMemory": "Memòria total: {memory}" }, "field": { - "name": { - "label": "Nom" - }, "state": { "label": "Estat", "option": { @@ -5131,9 +7152,6 @@ } }, "stats": { - "cpu": { - "label": "CPU" - }, "memory": { "label": "Memòria" } @@ -5196,8 +7214,11 @@ } }, "remove": { - "label": "Elimina", "confirm": "Feu clic de nou per eliminar permanentment", + "confirmation": { + "title": "{count, plural, one {Vols eliminar # contenidor?} other {Vols eliminar # contenidors?}}", + "message": "{count, plural, one {Això eliminarà permanentment # contenidor: {names}} other {Això eliminarà permanentment # contenidors: {names}}}" + }, "notification": { "success": { "title": "Contenidors eliminats", @@ -5209,8 +7230,13 @@ } } }, + "result": { + "failure": { + "title": "Algunes accions dels contenidors han fallat", + "message": "{total, plural, one {{failed} de # acció ha fallat: {names}} other {{failed} de # accions han fallat: {names}}}" + } + }, "refresh": { - "label": "Actualitza", "notification": { "success": { "title": "Contenidors actualitzats", @@ -5241,18 +7267,33 @@ }, "error": { "internalServerError": "No s'han pogut obtenir els contenidors Docker", + "endpointUnavailable": "{count, plural, one {# punt final de Docker no disponible: {names}} other {# punts finals de Docker no disponibles: {names}}}", "noColumns": "Seleccioneu almenys una columna a la configuració del giny" } }, "kubernetes": { + "context": { + "label": "Context de Kubernetes", + "loadError": { + "title": "No s'han pogut carregar els contextos de Kubernetes", + "message": "La informació del context no està disponible. Torna-ho a provar sense sortir d'aquesta pàgina." + }, + "status": { + "available": "Disponible", + "degraded": "Mètriques no disponibles", + "unavailable": "No disponible" + }, + "unavailable": "No es pot arribar a aquest context de Kubernetes. Selecciona un altre context o verifica les seves credencials i el punt final.", + "metricsUnavailable": "Es pot arribar a aquest context, però Metrics Server no està disponible. L'inventari continua disponible sense l'ús de CPU i memòria en temps real." + }, "cluster": { "title": "Tauler del Clúster", "label": "Clúster", "providers": "Proveïdors", "version": "Versió", - "architecture": "Arquitectura", "capacity": { "title": "Capacitat", + "metricsUnavailable": "Metrics Server no està disponible. L'inventari i la capacitat reservada continuen visibles, però no es pot mostrar l'ús de CPU i memòria en temps real.", "resource": { "reserved": "Reservat", "used": "Utilitzat" @@ -5271,38 +7312,10 @@ } }, "nodes": { - "label": "Nodes", "field": { - "name": { - "label": "Nom" - }, - "state": { - "label": "Estat", - "option": { - "ready": "Preparat", - "NotReady": "No preparat" - } - }, - "cpu": { - "label": "CPU" - }, - "memory": { - "label": "RAM" - }, - "pods": { - "label": "Pods" - }, - "operatingSystem": { - "label": "SO" - }, - "architecture": { - "label": "Arquitectura" - }, + "metricsUnavailable": "No disponible", "kubernetesVersion": { "label": "Versió de Kubernetes" - }, - "creationTimestamp": { - "label": "Creat" } }, "table": { @@ -5310,43 +7323,17 @@ } }, "namespaces": { - "label": "Espais de noms", - "field": { - "name": { - "label": "Nom" - }, - "state": { - "label": "Estat", - "option": { - "active": "Actiu", - "terminating": "Finalitzant" - } - }, - "creationTimestamp": { - "label": "Creat" - } - }, "table": { "search": "Cercar {count} espais de noms" } }, "ingresses": { - "label": "Ingressos", "field": { - "name": { - "label": "Nom" - }, - "namespace": { - "label": "Espai de noms" - }, "className": { "label": "Nom de la classe" }, "rulesAndPaths": { "label": "Regles i rutes" - }, - "creationTimestamp": { - "label": "Creat" } }, "table": { @@ -5354,17 +7341,7 @@ } }, "services": { - "label": "Serveis", "field": { - "name": { - "label": "Nom" - }, - "namespace": { - "label": "Espai de noms" - }, - "type": { - "label": "Tipus" - }, "ports": { "label": "Ports" }, @@ -5373,9 +7350,6 @@ }, "clusterIP": { "label": "IP del clúster" - }, - "creationTimestamp": { - "label": "Creat" } }, "table": { @@ -5383,25 +7357,12 @@ } }, "pods": { - "label": "Pods", "field": { - "name": { - "label": "Nom" - }, - "namespace": { - "label": "Espai de noms" - }, "image": { "label": "Imatge" }, "applicationType": { "label": "Tipus d'aplicació" - }, - "status": { - "label": "Estat" - }, - "creationTimestamp": { - "label": "Creat" } }, "table": { @@ -5409,51 +7370,17 @@ } }, "secrets": { - "label": "Secrets", - "field": { - "name": { - "label": "Nom" - }, - "namespace": { - "label": "espai de noms" - }, - "type": { - "label": "tipus" - }, - "creationTimestamp": { - "label": "Creat" - } - }, "table": { "search": "Cercar {count} secrets" } }, "configmaps": { - "label": "ConfigMaps", - "field": { - "name": { - "label": "Nom" - }, - "namespace": { - "label": "espai de noms" - }, - "creationTimestamp": { - "label": "Creat" - } - }, "table": { "search": "Cercar {count} configMaps" } }, "volumes": { - "label": "Volums", "field": { - "name": { - "label": "Nom" - }, - "namespace": { - "label": "Espai de noms" - }, "accessModes": { "label": "Modes d'accés" }, @@ -5468,12 +7395,6 @@ }, "volumeName": { "label": "Nom del volum" - }, - "status": { - "label": "Estat" - }, - "creationTimestamp": { - "label": "Creat" } }, "table": { @@ -5482,6 +7403,29 @@ }, "error": { "internalServerError": "No s'han pogut obtenir les dades de Kubernetes" + }, + "field": { + "name": { + "label": "Nom de la feina" + }, + "namespace": { + "label": "Espai de noms" + }, + "creationTimestamp": { + "label": "Creat" + }, + "state": { + "label": "Estat de la feina" + }, + "status": { + "label": "Estat" + }, + "type": { + "label": "Tipus de client de descàrregues" + }, + "architecture": { + "label": "Arquitectura" + } } }, "permission": { @@ -5515,71 +7459,27 @@ }, "navigationStructure": { "manage": { - "workshop": { - "label": "Workshop" - }, "label": "Gestiona", - "boards": { - "label": "Taulers" - }, - "integrations": { - "label": "Integracions", + "custom-widgets": { "edit": { - "label": "Edita" + "flow": { + "label": "Flux" + } }, - "new": { - "label": "Nou" - } - }, - "search-engines": { - "label": "Motors de cerca", - "new": { - "label": "Nou" + "workshop": { + "label": "Taller" }, - "edit": { - "label": "Edita" - } - }, - "medias": { - "label": "Multimèdia" - }, - "apps": { - "label": "Aplicacions", - "new": { - "label": "Nou" - }, - "edit": { - "label": "Edita" + "publish": { + "label": "Publica al Workshop" } }, "users": { - "label": "Usuaris", - "create": { - "label": "Crea" - }, "general": "General", - "security": "Seguretat", - "board": "Taulers", - "groups": { - "label": "Grups" - }, - "invites": { - "label": "Invitacions" - } + "security": "Seguretat" }, "tools": { "label": "Eines", - "tasks": { - "label": "Tasques" - }, - "docker": { - "label": "Docker", - "logs": { - "label": "Registres" - } - }, "kubernetes": { - "label": "Kubernetes", "nodes": { "label": "Nodes" }, @@ -5605,11 +7505,7 @@ "label": "Volums" } }, - "logs": { - "label": "Registres" - }, "certificates": { - "label": "Certificats", "hostnames": { "label": "Noms d'amfitrió" } @@ -5620,12 +7516,60 @@ }, "about": { "label": "Quant a" + }, + "assistant": { + "label": "Assistent" } } }, "search": { "placeholder": "Cerca qualsevol cosa", "nothingFound": "No s'ha trobat res", + "modePicker": { + "search": { + "label": "Cerca", + "placeholder": "Cerca aplicacions, taulers, pàgines, ordres i preferències" + }, + "apps": { + "label": "Apps", + "placeholder": "Cerca aplicacions, taulers i integracions" + }, + "command": { + "label": "Ordres", + "placeholder": "Cerca accions i ordres" + }, + "preferences": { + "label": "Preferències", + "placeholder": "Cerca i canvia les preferències" + }, + "assistant": { + "label": "Assistent", + "placeholder": "Pregunta a l'Assistent" + }, + "external": { + "label": "Web", + "placeholder": "Cerca amb un motor de cerca extern" + }, + "media": { + "label": "Mitjans", + "placeholder": "Cerca una pel·lícula o sèrie", + "fallback": "Cerca mitjans per «{query}»" + }, + "userGroup": { + "label": "Persones", + "placeholder": "Cerca usuaris i grups" + }, + "continueWith": "Continua amb", + "dialogAriaLabel": "Menú d'ordres del mode {mode}", + "navigationLabel": "Modes de cerca", + "modeAriaLabel": "Mode {mode}", + "resultsAriaLabel": "Resultats de {mode}", + "footer": { + "navigate": "Navega", + "open": "Obre", + "close": "Tanca" + } + }, "error": { "fetch": "S'ha produït un error en obtenir les dades" }, @@ -5634,7 +7578,6 @@ "help": "Cerca aplicacions, integracions o taulers", "group": { "app": { - "title": "Aplicacions", "children": { "action": { "open": { @@ -5650,7 +7593,6 @@ } }, "board": { - "title": "Taulers", "children": { "action": { "open": { @@ -5670,9 +7612,6 @@ "title": "Seleccioneu una acció per al tauler" } } - }, - "integration": { - "title": "Integracions" } } }, @@ -5701,9 +7640,6 @@ "newBoard": { "label": "Crea un tauler nou" }, - "importBoard": { - "label": "Importa un tauler" - }, "newApp": { "label": "Crea una aplicació nova" }, @@ -5773,7 +7709,6 @@ } }, "defaultSearchEngineId": { - "label": "Motor de cerca principal", "children": { "detail": { "title": "Selecciona el teu motor de cerca principal" @@ -5781,7 +7716,6 @@ } }, "openSearchInNewTab": { - "label": "Obre els resultats de la cerca en una pestanya nova", "children": { "detail": { "title": "Obre els resultats de la cerca en una pestanya nova" @@ -5789,7 +7723,6 @@ } }, "ddgBangs": { - "label": "Activa els bangs de DuckDuckGo", "children": { "detail": { "title": "Activa els bangs de DuckDuckGo" @@ -5804,6 +7737,13 @@ } } }, + "byteUnitSystem": { + "children": { + "detail": { + "title": "Selecciona les unitats de mida de les dades" + } + } + }, "homeBoardId": { "label": "Tauler d'inici", "children": { @@ -5821,7 +7761,6 @@ } }, "pingIconsEnabled": { - "label": "Utilitza icones per als pings", "children": { "detail": { "title": "Utilitza icones per als pings" @@ -5829,7 +7768,6 @@ } }, "enableRightClickOnWidgets": { - "label": "Activa el clic dret als ginys", "children": { "detail": { "title": "Activa el clic dret als ginys" @@ -5857,6 +7795,7 @@ "description": "Comença a escriure per cercar a les integracions de sol·licitud multimèdia", "disabled": { "noIntegration": "Afegeix una integració d'Overseerr, Jellyseerr o Seerr per activar la cerca multimèdia.", + "signInRequired": "Inicia sessió per cercar integracions de sol·licituds de mitjans.", "scoped": "Aquest widget no té cap integració de sol·licitud multimèdia accessible." } } @@ -5873,7 +7812,6 @@ "help": "Utilitza un motor de cerca extern", "group": { "searchEngine": { - "title": "Motors de cerca", "tipDdgBangs": "Consell: aquí també pots utilitzar qualsevol bang de DuckDuckGo, p. ex. !something", "bang": { "searchWithQuery": "Cerca «{query}» amb {label}", @@ -5924,20 +7862,6 @@ "group": { "mode": { "title": "Modes" - }, - "help": { - "title": "Ajuda", - "option": { - "documentation": { - "label": "Documentació" - }, - "submitIssue": { - "label": "Envieu un problema" - }, - "discord": { - "label": "Discord de la comunitat" - } - } } } }, @@ -5949,9 +7873,10 @@ "other": { "label": "Cerca amb un altre motor de cerca" }, - "no-default": { - "label": "Sense motor de cerca predeterminat", - "description": "Estableix un motor de cerca predeterminat a les preferències" + "no-engines": { + "label": "No hi ha motors de cerca configurats", + "descriptionCreate": "Afegeix un motor de cerca per cercar des del menú d'ordres", + "descriptionUnavailable": "Demana a un administrador que configuri un motor de cerca" }, "search": { "label": "Cercar \"{query}\" amb {name}" @@ -6031,7 +7956,6 @@ "help": "Cerca usuaris o grups", "group": { "user": { - "title": "Usuaris", "children": { "action": { "detail": { @@ -6044,7 +7968,6 @@ } }, "group": { - "title": "Grups", "children": { "action": { "detail": { @@ -6068,9 +7991,6 @@ "engine": { "search": "Cerca un motor de cerca", "field": { - "name": { - "label": "Nom" - }, "short": { "label": "Curt" }, @@ -6083,12 +8003,19 @@ }, "page": { "list": { - "title": "Motors de cerca", + "ariaLabel": "Motors de cerca configurats", "noResults": { "title": "Encara no hi ha motors de cerca", - "action": "Creeu el vostre primer motor de cerca" + "description": "Els motors de cerca permeten que Spotlight enviï una consulta a un lloc o servei connectat.", + "action": "Creeu el vostre primer motor de cerca", + "filteredTitle": "Cap motor de cerca coincideix amb la teva cerca", + "filteredDescription": "Cap motor de cerca coincideix amb «{search}». Prova amb un altre nom o URL." }, - "interactive": "Interactiu, utilitza una integració" + "interactive": "Interactiu, utilitza una integració", + "type": { + "generic": "Plantilla d'URL", + "fromIntegration": "Integració" + } }, "create": { "title": "Nou motor de cerca", @@ -6107,11 +8034,9 @@ "title": "Edita el motor de cerca", "notification": { "success": { - "title": "Canvis aplicats correctament", "message": "El motor de cerca s'ha desat correctament" }, "error": { - "title": "No s'han pogut aplicar els canvis", "message": "No s'ha pogut desar el motor de cerca" } }, @@ -6250,6 +8175,10 @@ } }, "log": { + "context": { + "widgetError": "El giny ha informat d'un error en aquest moment", + "expiredWidgetError": "Els registres relacionats amb aquest error del giny ja no es conserven" + }, "level": { "option": { "debug": "Depuració", @@ -6261,7 +8190,6 @@ }, "onboardingTour": { "learnMore": "Llegeix la documentació", - "next": "Següent", "prev": "Enrere", "done": "Fet", "skip": "Omet la visita", @@ -6325,5 +8253,359 @@ "description": "Canvia l'esquema de colors, l'idioma, el tauler d'inici i les preferències. També pots anar a l'àrea de gestió des d'aquí." } } + }, + "metadata": { + "description": "Un tauler autoallotjat per a la pila *arr i tot el teu homelab. S'integra amb més de 50 serveis, ginys en temps real i no necessita fitxers de configuració.", + "dashboardTitle": "Tauler de {appName}" + }, + "assistant": { + "title": "Assistent", + "open": "Obre l'Assistent", + "close": "Tanca l'assistent", + "minimize": "Minimitza l'assistent", + "spotlight": "Pregunta a l'Assistent", + "spotlightDescription": "Escriu i envia una sol·licitud sense sortir del menú d'ordres.", + "spotlightPrompt": { + "title": "Pregunta a l'Assistent", + "description": "Escriu una sol·licitud a sobre. Prem Retorn per enviar-la en segon pla.", + "send": "Envia la sol·licitud", + "empty": "Escriu una sol·licitud a sobre" + }, + "unavailable": { + "checking": "S'està comprovant si l'assistent està disponible…", + "error": "No s'ha pogut comprovar la disponibilitat de l'assistent. Torna-ho a provar.", + "notConfigured": "Primer, un administrador ha de configurar i activar l'assistent.", + "signIn": "Inicia sessió per utilitzar l'Assistent." + }, + "newConversation": "Conversa nova", + "conversations": "Converses", + "conversationActions": "Accions de la conversa", + "searchConversations": "Cerca converses", + "noMatchingConversations": "No hi ha converses coincidents", + "moreActions": "Més accions de resposta", + "renameConversation": { + "action": "Canvia el nom", + "label": "Nom de la conversa", + "save": "Desa el nom", + "failedTitle": "No s'ha pogut canviar el nom de la conversa", + "failedDescription": "Homarr no ha pogut canviar el nom d'aquesta conversa. Torna-ho a provar." + }, + "deleteConversation": { + "title": "Vols suprimir la conversa?", + "description": "«{title}» i els seus missatges se suprimiran permanentment.", + "failedTitle": "No s'ha pogut suprimir la conversa", + "failedDescription": "Homarr no ha pogut suprimir aquesta conversa. Torna-ho a provar." + }, + "closeHistory": "Tanca l'historial de converses", + "openHistory": "Obre l'historial de converses", + "emptyTitle": "En què et puc ajudar?", + "emptyDescription": "Pregunta sobre la teva configuració de Homarr, inspecciona les dades de la instància en temps real o aprova accions quan vulguis que faci un canvi.", + "suggestions": { + "health": { + "label": "Comprova l'estat del servei", + "prompt": "Comprova les meves integracions i resumeix qualsevol cosa que requereixi atenció." + }, + "explore": { + "label": "Explora el meu Homarr", + "prompt": "Mostra'm què puc consultar i gestionar en aquesta instància de Homarr." + }, + "media": { + "label": "Troba mitjans per sol·licitar", + "prompt": "Ajuda'm a trobar una pel·lícula o sèrie per sol·licitar." + }, + "style": { + "label": "Millora un tauler", + "prompt": "Ajuda'm a millorar l'aparença d'un tauler o el seu CSS personalitzat. Mostra'm primer els meus taulers i conserva la configuració actual mentre fem el canvi." + }, + "designWidget": { + "label": "Dissenya un giny", + "prompt": "Crea i instal·la un giny personalitzat per a " + } + }, + "composerPlaceholder": "Pregunta a l'Assistent…", + "runtime": { + "model": "Model", + "searchModels": "Cerca models", + "noModels": "No hi ha models disponibles", + "otherModels": "Altres models", + "imageInput": "Accepta entrada d'imatges", + "thinking": "Mode de raonament", + "reasoning": { + "auto": "Automàtic", + "none": "Desactivat", + "minimal": "Mínim", + "low": "Baix", + "medium": "Mitjà", + "high": "Alt" + } + }, + "providerQuota": { + "title": "Proveïdor de Homarr", + "communityWorkshop": "Taller de la comunitat", + "dailyAllowance": "Quota diària de sol·licituds", + "remainingLabel": "Queden {remaining} de {limit} sol·licituds del proveïdor d'Homarr", + "loading": "S'està carregant la quota del proveïdor de Homarr", + "signInRequired": "Cal iniciar sessió al Workshop per al proveïdor de Homarr", + "signInDescription": "Inicia sessió amb GitHub mitjançant el Community Workshop per rebre la teva quota diària separada.", + "exhaustedDescription": "La teva quota del proveïdor de Homarr s'ha esgotat avui. Es restableix a mitjanit UTC.", + "unavailableDescription": "Inicia sessió al Workshop o espera que es restableixi la quota del proveïdor de Homarr.", + "signIn": "Inicia sessió amb GitHub", + "signInError": "No s'ha pogut iniciar sessió amb GitHub. Torna-ho a provar d'aquí a un moment.", + "loadError": "No s'ha pogut carregar la quota del proveïdor de Homarr.", + "reset": "Es restableix {relative} a les ", + "toolCalls": "Cada sol·licitud de model i cada crida d'eina completada utilitza una sol·licitud.", + "retry": "Torna a carregar la quota", + "level": { + "ok": "D'acord", + "warning": "Avís", + "bad": "Baixa", + "dead": "Utilitzada" + } + }, + "stop": "Atura la resposta", + "send": "Envia el missatge", + "copy": "Copia la resposta", + "copyMessage": "Copia el missatge", + "editMessage": "Edita el missatge", + "updateMessage": "Actualitza el missatge", + "regenerate": "Torna a generar la resposta", + "helpful": "Útil", + "notHelpful": "No és útil", + "readAloud": "Llegeix la resposta en veu alta", + "stopReading": "Atura la lectura de la resposta", + "feedbackError": "No s'ha pogut desar el teu comentari. Torna-ho a provar.", + "exportMarkdown": "Exporta com a Markdown", + "exportConversation": { + "action": "Exporta la conversa com a Markdown", + "failedTitle": "No s'ha pogut exportar la conversa", + "failedDescription": "Homarr no ha pogut carregar aquesta conversa. Torna-ho a provar." + }, + "reasoning": "Raonament", + "previousResponse": "Resposta anterior", + "nextResponse": "Resposta següent", + "removeAttachment": "Elimina el fitxer adjunt", + "downloadFile": "Baixa {name}", + "attachedImage": "Imatge adjunta", + "externalImageBlocked": "Imatge externa bloquejada per privadesa", + "image": { + "loading": "S'està carregant la imatge", + "failed": "No s'ha pogut carregar aquesta imatge.", + "retry": "Torna a provar la imatge" + }, + "quoteSelection": "Cita", + "dismissQuote": "Elimina la cita", + "attachments": { + "add": "Adjunta una imatge o un document", + "errorTitle": "No s'ha pogut afegir el fitxer adjunt", + "imageUnsupported": "El model seleccionat no admet entrades d'imatge." + }, + "mentions": { + "menu": "Afegeix context de Homarr", + "context": "Context", + "app": "Apps", + "integration": "Integracions", + "board": "Taulers", + "widget": "Ginys", + "tools": "Eines disponibles" + }, + "markdown": { + "diagram": "Diagrama", + "renderingDiagram": "S'està renderitzant el diagrama…", + "diagramUnavailable": "No s'ha pogut representar aquest diagrama." + }, + "commands": { + "menu": "Ordres de l'assistent", + "health": "Prepara una comprovació de l'estat del servei", + "explore": "Prepara una visió general d'aquesta instància de Homarr", + "media": "Prepara una cerca de mitjans", + "style": "Prepara un canvi d'aparença del tauler o de CSS personalitzat", + "designWidget": "Prepara la creació d'un giny personalitzat amb una sola sol·licitud" + }, + "usage": { + "tokens": "fitxes", + "contextWindow": "Finestra de context", + "requestDetails": "Detalls de la sol·licitud", + "used": "Darrer pas", + "remaining": "Restant", + "capacity": "Capacitat", + "input": "Entrada", + "output": "Sortida", + "cached": "Entrada desada a la memòria cau", + "cacheWrite": "Escriptura de la memòria cau", + "reasoning": "Raonament", + "inputShort": "entrada", + "outputShort": "sortida", + "cachedShort": "a la memòria cau", + "reasoningShort": "raonament", + "firstOutput": "Primera sortida", + "homarrTiming": "Observat per Homarr", + "endToEnd": "D'extrem a extrem", + "observedThroughput": "Rendiment observat", + "providerTiming": "Informat pel proveïdor", + "loadingProviderDetails": "S'estan carregant els detalls de generació…", + "providerDetailsPending": "OpenRouter encara està processant alguns detalls de generació. Torna a obrir-ho per tornar-ho a provar.", + "providerLatency": "Latència del proveïdor", + "generationTime": "Temps de generació", + "moderationLatency": "Moderació", + "providerThroughput": "Rendiment del proveïdor", + "fallbacks": "Alternatives", + "fallbackLatency": "Latència de les alternatives", + "cacheDiscount": "Descompte de memòria cau", + "normalizedTokens": "Entrada / sortida normalitzada d'OpenRouter", + "byok": "BYOK", + "cost": "Cost", + "reported": "Informat pel proveïdor", + "estimated": "Estimat a partir del preu del model", + "upstreamCost": "Inferència ascendent", + "webSearches": "Cerques web", + "finishReason": "Motiu de finalització", + "notReported": "No informat", + "agentSteps": "Passos de l'agent", + "step": "Pas {number}", + "generation": "Generació" + }, + "toolInput": "Entrada", + "toolOutput": "Sortida", + "toolActivity": { + "iconSearch": "S'estan cercant icones per a «{query}»", + "iconBrowse": "S'estan explorant les icones disponibles" + }, + "toolNavigation": { + "openPreview": "Obre la previsualització", + "openWidget": "Obre el giny" + }, + "webSearch": { + "title": "Cerca web", + "completed": "OpenRouter ha cercat al web en temps real per a aquesta resposta.", + "searches": "{count, plural, one {# cerca} other {# cerques}}", + "sources": "{count, plural, one {# font} other {# fonts}}" + }, + "responseError": { + "title": "L'assistent no ha pogut finalitzar", + "description": "Torna-ho a provar. Si el problema continua, demana a un administrador que verifiqui el punt final del model configurat." + }, + "toolPreparationError": { + "title": "No s'ha pogut preparar aquesta sol·licitud", + "description": "El model s'ha aturat abans de proporcionar tots els detalls. Torna a provar la resposta o descriu de nou la sol·licitud. No s'ha fet cap canvi." + }, + "busy": { + "title": "L'assistent ja està treballant", + "description": "Espera la resposta actual o obre-la per aturar l'execució." + }, + "pendingAction": { + "answerTitle": "Cal una resposta", + "answerFallback": "Tria una resposta per continuar", + "formTitle": "Revisa els detalls de l'aplicació", + "boardFormTitle": "Revisa els canvis del tauler", + "review": "Revisa", + "sendBlocked": "Resol la sol·licitud pendent abans d'enviar-la" + }, + "activity": { + "thinking": "L'assistent està pensant", + "working": "S'està treballant en la teva sol·licitud", + "ready": "Resposta preparada", + "completed": "Obre la resposta", + "approval": "Cal aprovació", + "failed": "L'assistent requereix atenció", + "expand": "Obre la resposta de l'assistent", + "dismiss": "Descarta l'activitat de l'assistent" + }, + "scrollToLatest": "Desplaça't fins a l'últim", + "refresh": { + "action": "Actualitza la vista actual", + "working": "S'està actualitzant la vista actual", + "completeTitle": "Vista actualitzada", + "completeDescription": "Les dades visibles de Homarr s'han tornat a carregar.", + "failedTitle": "No s'ha pogut actualitzar la vista", + "failedDescription": "És possible que el canvi encara s'hagi desat. Torna a provar l'acció d'actualització." + }, + "askUser": { + "preparing": "S'està preparant la pregunta", + "answered": "La teva resposta", + "other": "Altres", + "otherLabel": "La teva resposta", + "otherPlaceholder": "Escriu una altra resposta…", + "submit": "Envia la resposta", + "cancelOther": "Cancel·la l'altra resposta", + "optionKind": { + "affirmative": "Confirma", + "negative": "Rebutja", + "alternative": "Opció", + "custom": "Personalitzat" + } + }, + "configureApp": { + "title": "Revisa els detalls de l'aplicació", + "description": "Tria una icona local i ajusta el que calgui abans que l'assistent demani l'aprovació de la creació.", + "preparing": "S'estan preparant els detalls de l'aplicació", + "continue": "Utilitza aquests detalls", + "ready": "Detalls de l'aplicació preparats", + "automaticContinue": "S'utilitzen automàticament aquests detalls de l'aplicació" + }, + "configureBoardSettings": { + "title": "Revisa els canvis del tauler", + "loading": "S'està carregant la configuració actual del tauler", + "loadErrorTitle": "No s'ha pogut carregar la configuració del tauler", + "loadErrorDescription": "És possible que el tauler ja no existeixi o que no tinguis permís per modificar-lo.", + "proposedCount": "L'assistent ha proposat {count} camps", + "changeCount": "{count} canvis preparats", + "ready": "Canvis del tauler preparats", + "cancelled": "S'ha conservat la configuració actual del tauler", + "noChanges": "No canviarà cap configuració", + "keepCurrent": "Conserva la configuració actual", + "continue": "Continua fins a l'aprovació", + "automaticContinue": "S'accepten automàticament els canvis proposats del tauler", + "resetAll": "Restableix tots els canvis", + "tabs": { + "css": "CSS personalitzat", + "appearance": "Aparença", + "background": "Fons", + "general": "General" + }, + "cssDescription": "Edita el full d'estils complet. Les regles existents es conserven tret que s'eliminin aquí.", + "cssCharacters": "{count} de 16384 caràcters", + "copyCss": "Copia el CSS", + "copied": "Copiat", + "restoreCss": "Restaura el CSS actual", + "remoteCssTitle": "Aquest CSS carrega un recurs remot", + "remoteCssDescription": "Els fulls d'estils importats i els URL remots contacten amb un altre servidor quan es carrega el tauler. Revisa'ls abans de continuar." + }, + "configureWidget": { + "title": "Revisa el giny", + "preparing": "S'està preparant la configuració del giny", + "review": "Revisa el giny i les integracions", + "ready": "Configuració del giny preparada", + "cancelled": "No s'ha afegit el giny", + "automaticContinue": "S'accepta automàticament la configuració proposada del giny", + "definitionLoadErrorTitle": "No s'ha pogut carregar la configuració del giny", + "definitionLoadErrorDescription": "Homarr no ha pogut carregar la configuració d'aquest giny. Torna-ho a provar.", + "loadErrorTitle": "No s'han pogut carregar les integracions", + "loadErrorDescription": "Homarr no ha pogut carregar les integracions disponibles per a aquest giny.", + "noIntegrationTitle": "Cal una integració compatible", + "noIntegrationDescription": "Configura una integració compatible amb aquest giny abans d'afegir-lo al tauler.", + "connectIntegration": "Connecta el servei", + "manageIntegrations": "Gestiona les integracions", + "skip": "No afegeixis", + "errorTitle": "No s'ha pogut preparar la configuració del giny", + "errorDescription": "El model no ha proporcionat una configuració completa del giny. No s'ha afegit cap giny." + }, + "approvalRequired": "Cal aprovació", + "complete": "Completat", + "denied": "Rebutjat", + "failed": "Error", + "working": "En curs", + "approvalDescription": "Revisa aquest canvi abans d'executar-lo.", + "approveAndRun": "Aprova i executa", + "deny": "Rebutja", + "autoApproval": { + "label": "Aprovacions automàtiques", + "composerLabel": "Aprova per mi", + "title": "Aprovacions automàtiques", + "description": "Prepara automàticament formularis i aprova canvis protegits per a aquesta conversa. Les preguntes continuen esperant la teva resposta i els permisos de Homarr continuen aplicant-se. Això es desactiva quan canvies de conversa.", + "enable": "Activa per a aquesta conversa", + "disable": "Desactiva les aprovacions automàtiques", + "enabled": "Les aprovacions automàtiques estan activades", + "approving": "S'està aprovant automàticament" + } } } diff --git a/packages/translation/src/lang/cn.json b/packages/translation/src/lang/cn.json index b627d7688..ee29e65c1 100644 --- a/packages/translation/src/lang/cn.json +++ b/packages/translation/src/lang/cn.json @@ -1,156 +1,246 @@ { "init": { - "step": { - "start": { - "title": "欢迎使用 Homarr", - "subtitle": "让我们开始设置您的 Homarr 实例。", - "description": "首先,请选择您想要如何设置您的 Homarr 实例。", - "action": { - "scratch": "从零开始", - "importOldmarr": "从 1.0 之前的 Homarr 导入", - "restoreSqlite": "从 SQLite 备份恢复", - "restoreSqliteDescription": "上传之前 Homarr 实例的完整 SQLite 数据库备份。这将恢复所有面板、用户、应用、集成和设置。", - "backToOptions": "← 返回设置选项" + "studio": { + "navigationLabel": "在线班级", + "back": "上一步", + "buildBoard": "构建我的棋盘", + "common": { + "unknownError": "出错了。您的选择仍然在这里,请重试。" + }, + "claim": { + "checking": "正在确保此登机会话…", + "checkingTitle": "正在准备安全设置", + "lockedTitle": "安装程序在另一个浏览器中打开", + "lockedDescription": "继续,或等待安全的第一次运行会话过期,然后再尝试一次。", + "signInTitle": "需要管理员登录", + "signInDescription": "管理员已经存在。登录以恢复设置,无需显示凭据或服务访问权限。", + "signIn": "登录并恢复", + "errorTitle": "设置无法安全", + "errorDescription": "重新加载页面以重试安全的第一次运行会话。" + }, + "navigation": { + "essentials": "要点", + "discover": "发现", + "connect": "连接", + "board": "棋盘", + "extend": "扩展", + "review": "预览" + }, + "welcome": { + "title": "欢迎回家。", + "description": "欢迎使用 Homarr v{version}。我们将引导您了解基本功能,帮助您创建第一个面板。", + "start": "开始使用", + "restore": "还原备份", + "restoreTitle": "从备份恢复", + "restoreDescription": "完整的 SQLite 备份恢复板、人员、应用、集成和设置。Homarr 在替换任何东西之前验证它。", + "errorTitle": "安装程序无法启动", + "errorDescription": "您的设置选项仍然在这里。请重试,如果继续,请重新加载页面。" + }, + "account": { + "title": "创建您的管理员", + "description": "指定您的管理员用户的凭证。", + "username": "管理员用户名", + "passwordHint": "仅需要8个字符。其他密码强度检查是建议。", + "create": "创建管理员", + "errorTitle": "无法创建管理员", + "recoveryTitle": "管理员帐户已创建", + "recoveryDescription": "自动登录未完成。使用您刚刚创建的管理员凭据登录以继续设置。", + "recoveryAction": "登录并继续", + "unknownError": "无法创建管理员。" + }, + "externalGroup": { + "title": "连接您的管理员组", + "description": "使用由 LDAP 或 OIDC 发送的确切群组名称。该群组成员可以获得管理员权限。", + "name": "外部管理员组", + "nameDescription": "这是区分大小写的,必须与您的身份提供者匹配。", + "continue": "保存分组并继续", + "errorTitle": "无法保存群组", + "unknownError": "无法保存管理员组。" + }, + "essentials": { + "title": "从熟悉的默认值开始", + "description": "设置语言和外观,然后给Homarr提供您的服务使用的地址模式。", + "language": "默认语言", + "theme": "默认主题", + "themeAuto": "系统", + "themeLight": "日间", + "themeDark": "暗黑", + "serverOriginHelp": "Homarr 使用此地址预置检测到的服务 URL。您仍然可以单独编辑每个服务。", + "serverDescription": "这是一种快捷方式,不是一种限制。每个检测到的服务都是可以编辑的。", + "serverOrigin": "域名、IP或逆向代理路径", + "serverOriginDescription": "示例:home.lan, 192.168.1.10, 或者 https://home.example.com/services。选择每项服务的附件方式。", + "analytics": "分享匿名产品分析", + "analyticsDescription": "帮助Homarr 提高功能可靠性。没有发送服务凭据或仪表板内容。" + }, + "discover": { + "title": "查看此安装能够实际达到的目标", + "description": "Homarr 检查能力已经存在。缺少的 Docker 套接字或 Kubernetes 环境从来不会阻止手动设置。", + "database": "数据库", + "docker": "Docker 和兼容套接字", + "kubernetes": "Kubernetes", + "assistantWorkshop": "助理和讲习班", + "found": "找到 {integrations} 个集成和 {apps} 个其他应用", + "retryKubernetes": "再次检查 Kubernetes", + "retryWorkshop": "再次检查创意讲习班", + "unknownVersion": "未知版本", + "kubernetesAvailable": "已连接到 Kubernetes {version}", + "kubernetesDisabled": "未启用;继续使用 Docker或手动服务", + "kubernetesUnavailable": "Kubernetes 已启用,但无法从这个Homarr进程中连接", + "workshopAvailable": "社区讲习班和托管助理服务是可以获得的", + "workshopUnavailable": "本地和自定义助理提供商仍然可用", + "partialTitle": "无法扫描某些来源", + "partialDescription": "可访问主机的结果被保留。请检查套接字权限或在下一节手动添加服务。", + "status": { + "checking": "检查可用性…", + "available": "可用", + "partial": "部分可用", + "empty": "无匹配的运行服务", + "disabled": "被服务器配置禁用", + "unavailable": "无法从这个Homarr进程" } }, - "import": { - "title": "导入数据", - "subtitle": "您可以从已有的 Homarr 实例导入数据。", - "dropzone": { - "title": "将 zip 文件拖到此处或单击浏览", - "description": "上传的压缩包将被处理,您可以选择要导入的内容" + "connect": { + "title": "连接使棋盘有用的内容", + "description": "一次性选择几项服务。停靠停靠标签优先,图像匹配填补空白,每个URL和凭据都可以保持审核。", + "discoveredIntegrations": "检测到的集成实例({count})", + "detectedIntegrationLabel": "导入 {name},检测为 {kind}", + "detectedAppLabel": "导入检测到的应用 {name}", + "otherIntegrations": "添加另一个集成", + "configureIntegrations": "配置集成", + "discoveredApps": "检测到的应用({count})", + "appAddressRequired": "为 {name} 添加地址,或将其从选择中移除。", + "empty": "未选择集成。Homarr 仍将创建一个有用的带有常规部件的启动板。", + "dockerSource": "Docker", + "manualSource": "手动模式", + "url": "服务 URL", + "noCredentials": "无凭据", + "noCredentialsDescription": "这种整合不需要凭据。", + "credentialMethod": "凭据方法", + "getApiKey": "打开此服务的 API 密钥设置", + "openGuide": "打开Homarr的安装指南", + "testConnection": "测试连接", + "testSuccess": "连接正常工作", + "testSuccessDescription": "Homarr 与当前地址和凭据相关联。", + "testError": "连接失败", + "testErrorDescription": "请检查服务地址和凭据,然后重试。", + "needsConfiguration": "需要配置", + "tested": "连接测试", + "testFailed": "连接测试失败", + "incompleteConfirmation": "未完成的集成将被跳过。是否继续?" + }, + "board": { + "title": "构建前形状棋盘", + "description": "Homarr 创建受保护的移动设备和基础布局,然后从您选择的服务中放置应用和兼容的小部件。", + "target": "配置看板", + "targetDescription": "选择此设置应更新的确切面板。", + "targetPlaceholder": "选择棋盘", + "targetRequired": "在继续之前选择要配置的看板。", + "name": "面板名称", + "nameDescription": "用于棋盘URL;字母、数字、破折号和下划线。", + "nameRequired": "在继续之前输入棋盘名称。", + "primaryColor": "主体色", + "secondaryColor": "辅助色", + "resetColors": "重置颜色", + "radius": "小部件角半径", + "radiusOptions": { + "xs": "极高", + "sm": "淡雅", + "md": "平衡", + "lg": "圆角", + "xl": "软体" }, - "fileInfo": { - "action": { - "change": "更改文件" - } + "columns": "棋盘列", + "columnsDescription": "列定义大小和位置项所用的水平网格。对于大多数人来说,12是很多的。", + "columnCount": "{count, plural, one {# 列} other {# 列}}", + "leftSidebar": "Left sidebar", + "rightSidebar": "右侧边栏", + "previewLabel": "第一张棋盘布局的实时预览" + }, + "extend": { + "title": "高级功能", + "tabsLabel": "Assistant, workshop和 MCP 设置", + "assistant": "助理", + "workshop": "讲习班", + "assistantSetup": { + "loginTitle": "需要管理员登录", + "loginDescription": "提供者密钥和模型访问权限是特权,完成设置,登录,Homarr将直接打开助理配置。", + "loginAction": "登录以配置助理" }, - "importSettings": { - "title": "导入设置", - "description": "配置导入方式" + "workshopSetup": { + "title": "Homarr 讲习班", + "description": "浏览社区自定义小部件、检查他们所要求的能力、安装它们并在不复制服务器之间的代码的情况下发布你自己的工作。", + "available": "可用", + "checking": "正在检查…", + "unavailable": "Unavailable", + "discoverTitle": "发现", + "discoverDescription": "查找为真正的自托管工作流构建的部件。", + "installTitle": "审查并安装", + "installDescription": "添加任何东西前查看元数据和配置。", + "publishTitle": "分享", + "publishDescription": "发布可重复使用的小部件回到社区。", + "browse": "浏览讲习班" }, - "boardSelection": { - "title": "找到 {count} 个面板", - "description": "选择您想要导入的所有面板", - "action": { - "selectAll": "选择全部", - "unselectAll": "取消全选" - } - }, - "summary": { - "title": "导入概况", - "description": "在下面的概况中,您可以看到将要导入的内容", - "action": { - "import": "确认导入并继续" - }, - "entities": { - "apps": "应用", - "boards": "面板", - "integrations": "集成", - "credentialUsers": "用户凭证" - } - }, - "tokenModal": { - "title": "输入导入密钥", - "field": { - "token": { - "label": "秘钥", - "description": "输入您之前的 homarr 实例中显示的导入秘钥" - } - }, - "notification": { - "error": { - "title": "无效秘钥", - "message": "您输入的秘钥无效" - } - } + "mcpSetup": { + "title": "Homarr MCP", + "description": "将 Claude, Codex 或另一个 MCP 客户端连接到 Homarr 的已输入工具 API 密钥保持明确和可撤销。", + "endpoint": "可流的 HTTP 端点", + "keyTitle": "现在复制此密钥", + "keyDescription": "为了安全,Homarr 不能再次显示此 API 密钥。", + "copyKey": "复制 API 密钥", + "createKey": "创建 MCP API 密钥", + "errorTitle": "无法创建 MCP API 密钥", + "loginRequired": "在设置 API 密钥后以管理员身份登录。", + "configuration": "客户端配置", + "copy": "复制配置", + "copied": "已复制", + "advanced": "打开 MCP 工具、权限和设置详情" } }, - "user": { - "title": "管理员用户", - "subtitle": "指定您的管理员用户的凭证。", - "notification": { - "success": { - "title": "创建用户", - "message": "用户已成功创建" - }, - "error": { - "title": "用户创建失败" - } - } - }, - "group": { - "title": "外部用户组", - "subtitle": "指定应该用于外部用户的用户组。", - "form": { - "name": { - "label": "用户组名称", - "description": "名称必须与外部提供商的管理组匹配" - } - } - }, - "settings": { - "title": "设置", - "subtitle": "配置服务器的设置" - }, - "integrations": { - "title": "集成", - "subtitle": "选择您使用的服务。", - "description": "选择您要连接的集成。我们将自动为您设置带有匹配小部件的面板。", - "action": { - "continue": "继续", - "skip": "暂时跳过" - }, - "configure": { - "progress": "{current} / {total}", - "skip": "跳过此集成", - "finishing": "正在设置您的面板……", - "error": { - "title": "设置失败", - "message": "设置面板时出现问题。请重试。" - }, - "helpers": { - "tooltip": "URL 帮助程序", - "description": "这些帮助程序尝试猜测服务的 URL。如果无效,只需手动输入地址。" - } - }, - "urlTemplate": { - "label": "Base URL", - "placeholder": "homelab.local 或 192.168.1.1", - "hint": "输入您的基础域或 IP 以自动填充集成 URL", - "warning": "现在设置基础 URL,将自动填充所有集成的 URL,在配置过程中为您节省时间", - "preview": "例如 {example}", - "mode": { - "subdomain": "子域名", - "hostPort": "主机:端口" - } - }, - "docker": { - "detected": "Docker 检测到 {count} 个服务", - "detectedBreakdown": "{integrations} 个集成 · {apps} 个应用", - "summary": "Homarr 检测到 {apps} 个应用,其中 {integrations} 个具有内置集成", - "appBadge": "应用", - "appSectionLabel": "要添加到面板的应用(已选择 {count} 个)", - "scanning": "正在扫描 Docker……", - "scanningDescription": "正在查找系统上运行的容器" + "review": { + "title": "一个面板,围绕您的服务创建", + "description": "Homarr 测试未保存的连接,导入选中的应用程序,应用外观和布局,然后打开它配置的准确版面。", + "board": "第一个板", + "columns": "棋盘列", + "columnsValue": "{count, plural, one {# 列} other {# 列}}", + "sidebars": "侧边栏", + "sidebarsValue": "{count, plural, =0 {None} one {# sidebar} other {# sidebars}}", + "layouts": "响应式布局", + "layoutsValue": "移动设备+基础", + "integrations": "集成", + "integrationsValue": "{count, plural, =0 {没有选择} one {# 集成} other {# 集成}}", + "apps": "应用瓷块", + "appsValue": "{count, plural, =0 {仅启动程序} one {# 应用瓷块} other {# 应用瓷块}}", + "language": "语言", + "theme": "主题", + "themeAuto": "系统首选项", + "themeLight": "日间", + "themeDark": "暗黑", + "colors": "看板颜色", + "radius": "小部件半径", + "automaticTitle": "Homarr 将创建什么", + "automaticDescription": "兼容的小部件、图标、应用链接、集成关系和响应位置来自共享的 Homarr 目录。您可以稍后编辑每个结果。", + "dockerWarningTitle": "设置过程中更改了一些停靠标签", + "dockerWarningDescription": "{count, plural, one {# 选择的 Docker 结果无法应用,因为它的服务已被更改,针对另一个棋盘,或者它的小部件不兼容} other {# 选择的 Docker 结果无法应用,因为服务被更改,目标是另一个棋盘,或者他们的小部件不兼容}}", + "errorTitle": "无法构建棋盘", + "progress": { + "applying": "测试连接并构建您的棋盘", + "done": "您的棋盘已准备好" } }, "finish": { - "title": "完成设置", - "subtitle": "你已设置完成!", - "description": "您已成功完成设置过程。现在您可以开始使用 Homarr 了。选择下一步操作:", - "action": { - "goToBoard": "转到 {name} 面板", - "createBoard": "创建您的第一个面板", - "inviteUser": "邀请其他用户", - "docs": "阅读文档" - } + "title": "您的第一个棋盘已准备就绪。", + "description": "Homarr 连接了您选择的片段,并保持其余的可编辑性。 现在打开面板;短暂的产品内游览可以显示您编辑模式、小部件、布局和搜索。", + "openBoard": "打开我的棋盘", + "manageTitle": "管理", + "manageDescription": "微调应用、集成、板、用户和服务器设置。", + "workshopTitle": "讲习班", + "workshopDescription": "发现并安装社区自定义小部件。", + "docsTitle": "学习Homarr", + "docsDescription": "阅读看板、部件、集成和工具的重点指南。" } - }, - "backToStart": "返回起点" + } }, "user": { - "title": "用户", "name": "用户", "page": { "login": { @@ -159,12 +249,10 @@ }, "invite": { "title": "加入 Homarr", + "titleWithAppName": "加入 {appName}", "subtitle": "欢迎来到 Homarr!请创建您的账户", + "subtitleWithAppName": "欢迎来到 {appName}!请创建您的账户", "description": "您受到了 {username} 的邀请。" - }, - "init": { - "title": "新建 Homarr 安装", - "subtitle": "请创建初始管理员用户" } }, "field": { @@ -192,12 +280,17 @@ "previousPassword": { "label": "以前的密码" }, - "homeBoard": { - "label": "主面板" - }, "pingIconsEnabled": { "label": "为 ping 使用图标" }, + "byteUnitSystem": { + "label": "数据大小单位", + "description": "选择 Homarr 如何显示字节大小和字节速率。位速率总是使用小数单位。", + "options": { + "binary": "二进制文件", + "decimal": "小数" + } + }, "enableRightClickOnWidgets": { "label": "启用右击小组件", "description": "右键单击小组件时显示 Homarr 的上下文菜单。禁用后可使用浏览器的默认菜单(例如“在新标签页中打开链接”)。" @@ -247,7 +340,6 @@ } } }, - "create": "创建用户", "changePassword": { "label": "修改密码", "notification": { @@ -259,56 +351,6 @@ } } }, - "changeHomeBoard": { - "notification": { - "success": { - "message": "主面板修改成功" - }, - "error": { - "message": "无法修改主面板" - } - } - }, - "changeSearchPreferences": { - "notification": { - "success": { - "message": "搜索首选项更改成功" - }, - "error": { - "message": "无法更改搜索首选项" - } - } - }, - "changeFirstDayOfWeek": { - "notification": { - "success": { - "message": "成功修改一周的第一天" - }, - "error": { - "message": "无法修改一周的第一天" - } - } - }, - "changePingIconsEnabled": { - "notification": { - "success": { - "message": "Ping 图标切换成功" - }, - "error": { - "message": "无法切换 ping 图标" - } - } - }, - "changeDdgBangs": { - "notification": { - "success": { - "message": "DuckDuckGo bangs 切换成功" - }, - "error": { - "message": "无法切换 DuckDuckGo bangs" - } - } - }, "manageAvatar": { "changeImage": { "label": "更改头像", @@ -338,16 +380,6 @@ } } }, - "editProfile": { - "notification": { - "success": { - "message": "资料更新成功" - }, - "error": { - "message": "资料更新失败" - } - } - }, "delete": { "label": "永久删除用户", "description": "删除此用户(包括其偏好设置)。这不会删除任何面板。用户不会收到通知。", @@ -356,18 +388,13 @@ "select": { "label": "选择用户", "notFound": "找不到用户" - }, - "transfer": { - "label": "选择新的所有者" } } }, "group": { - "title": "群组", "name": "组", "search": "查找群组", "field": { - "name": "名称", "members": "成员", "homeBoard": { "label": "首页", @@ -388,6 +415,19 @@ } } }, + "custom-widget": { + "title": "自定义小组件", + "item": { + "manage": { + "label": "管理自定义小部件", + "description": "允许成员创建、编辑和删除自定义小部件定义" + }, + "secret-write": { + "label": "配置自定义小部件密钥", + "description": "允许成员和他们的 API 密钥设置加密自定义小部件凭据" + } + } + }, "app": { "title": "应用", "item": { @@ -493,6 +533,35 @@ "description": "允许成员管理和删除任何搜索引擎" } } + }, + "matrix": { + "none": "无访问", + "impliedHint": "另授予:{permissions}", + "grantedViaAdmin": "管理员已经有这么做了。设置管理员为“没有访问权”来单独配置它。", + "preset": { + "label": "预设值", + "viewer": "查看器", + "viewerDescription": "只读:视图板和媒体,使用已经存在的应用和集成。", + "editor": "编辑器", + "editorDescription": "日常管理:创建和编辑板、应用、集成和搜索引擎。", + "admin": "管理员", + "adminDescription": "不受限制地访问每个功能和设置,包括用户管理。", + "custom": "自定义" + }, + "effective": { + "title": "有效权限", + "description": "该组成员可以执行完整、非重复的操作,包括间接授予的权限。", + "empty": "未选择权限" + }, + "noneDescription": "成员无法进入此区域。", + "level": { + "view": "视图", + "use": "使用", + "interact": "交互功能", + "modify": "修改", + "full": "完整的" + }, + "capabilityIncluded": "已包含在“{level}”中" } }, "memberNotice": { @@ -607,21 +676,24 @@ "search": "查找应用", "page": { "list": { - "title": "应用", + "ariaLabel": "已配置的应用", "noResults": { "title": "尚无应用", - "action": "创建您的第一个应用" + "description": "应用是您想要的服务和工具的链接。", + "action": "创建您的第一个应用", + "filteredTitle": "没有符合您搜索条件的应用", + "filteredDescription": "没有应用匹配“{search}”。请尝试其他名称或 URL。", + "createOnlyTitle": "您只能添加应用", + "createOnlyDescription": "您的权限允许您创建应用,但不允许浏览现有应用。请管理员访问应用管理权限以查看完整列表。" } }, "create": { "title": "新建应用", "notification": { "success": { - "title": "创建成功", "message": "应用已成功创建" }, "error": { - "title": "创建失败", "message": "无法创建应用" } } @@ -630,11 +702,9 @@ "title": "编辑应用", "notification": { "success": { - "title": "成功应用更改", "message": "应用保存成功" }, "error": { - "title": "无法应用更改", "message": "应用无法保存" } } @@ -644,26 +714,18 @@ "message": "确认删除应用 {name} 吗?", "notification": { "success": { - "title": "删除成功", "message": "应用已成功删除" }, "error": { - "title": "删除失败", "message": "无法删除应用" } } } }, "field": { - "name": { - "label": "名称" - }, "description": { "label": "描述" }, - "url": { - "label": "Url" - }, "useDifferentUrlForPing": { "checkbox": { "label": "为ping使用不同的 URL", @@ -678,201 +740,397 @@ "search": "搜索应用", "noResults": "没有结果", "action": "选择 {app}", - "title": "选择一个应用程序添加到此面板" + "title": "选择一个应用程序添加到此面板", + "toggle": "点击以选择", + "selected": "已选择", + "multiple": "添加 {count}", + "selectedCount": "{count, plural, one {# 选择了} other {# 选择了}}", + "appsSelected": "{count, plural, one {# 应用程序选择} other {# 应用程序选择}}", + "selectMultiple": "选择多个选项", + "cancelMultiple": "退出多选", + "customApplication": "自定义应用程序", + "application": "适用范围" }, "create": { "title": "创建应用", "description": "创建应用 ", "action": "打开应用创建" - }, - "add": "添加应用" + } } }, + "tips": { + "dismiss": "清除提示", + "multiSelectApps": "提示:按住 Ctrl / 按键以选择多个应用" + }, "customWidget": { + "secretEntry": { + "title": "配置 API 源", + "description": "确认服务器 URL 并输入凭据。秘密值由 Homarr 加密,不会返回请求代理人。", + "loading": "正在加载安全请求…", + "applying": "正在应用此配置… 保持此页面打开.", + "saved": "API 源已配置。您可以关闭此页面。", + "unavailable": "请求不可用", + "saveError": "无法配置 API 源", + "source": "API 来源:{name}", + "baseUrl": "服务器 URL", + "networkScope": "网络访问权限", + "save": "保存 API 配置", + "expires": "此一次性请求将于 {time} 过期。" + }, "page": { "list": { - "title": "自定义小组件", "noResults": "暂无自定义小组件,创建第一个吧!", - "loading": "加载中……" + "noDescription": "无描述", + "enabled": "已启用", + "disabled": "已禁用", + "disabledDescription": "这个小部件保持配置,但不会加载在任何棋盘上。", + "requestCount": "{count, plural, one {# 请求} other {# 请求}}", + "invalidDefinition": "无效的定义", + "migrationRequired": "需要迁移", + "migrationInstructions": "打开复制或导出原始的 v1 定义的动作。 您也可以用LLM使用迁移提示。现有的版面在迁移后继续工作。", + "missingCredentials": "{count, plural, one {凭据丢失} other {# 凭据丢失}}", + "missingCredentialsDescription": "{count, plural, one {这个小部件仍然需要一个凭据。} other {这个小部件仍然需要 # 凭据。}} 选择这个徽章来配置URL和加密值。" }, "create": { "title": "创建自定义小组件", "subtitle": "定义 API URL、认证方式以及响应数据的显示方式。" }, - "edit": { - "title": "编辑自定义小组件" + "tabs": { + "ariaLabel": "自定义小部件部分", + "installed": "已安装", + "workshop": "讲习班" } }, "action": { - "create": "创建", - "import": "导入", - "save": "保存", + "pasteImportHint": "用 Ctrl+V 或 Command+V 粘贴完整的自定义部件 JSON", "delete": "删除自定义小组件", "deleteConfirm": "确定要删除“{name}”吗?此操作不可撤销。", "export": "导出", - "addMapping": "添加映射", - "addColumn": "添加列", - "edit": "编辑", - "removeMapping": "删除映射", - "removeColumn": "删除列", - "addItem": "添加项", - "removeItem": "删除项", - "addBar": "添加条", "duplicate": "复制", + "aiPrompt": "使用 AI 设计", "copyAiPrompt": "复制 AI 提示词", "enable": "启用", "disable": "禁用", - "menu": "操作" + "menu": "操作", + "downloadSkill": "查看自定义小部件技能", + "publishWorkshop": "发布到讲习班", + "migrate": "迁移自定义部件", + "configureSources": "配置源", + "copyLegacyDefinition": "复制小部件的原始内容", + "exportLegacyDefinition": "导出小部件的原始内容", + "copyMigrationPrompt": "复制 LLM 迁移提示", + "pasteMigration": "粘贴迁移的小部件", + "importMigration": "导入迁移的 JSON 文件" + }, + "sourceSetupDialog": { + "title": "配置小部件源", + "description": "检查这个小部件连接到哪里并添加或替换其加密凭据。", + "credentialsRequired": "请求将失败,直到添加所需的凭据。", + "save": "保存配置" }, "field": { - "name": "名称", - "description": "描述", - "iconUrl": "图标 URL", - "url": "URL", - "authType": "认证类型", - "headerName": "标头/查询参数名称", - "method": "方法", - "requestBody": "请求体", - "displayType": "显示类型", - "jsonPath": "JSON 路径", - "jsonPathHint": "使用 JSONPath 语法提取值,例如 $.data.temperature 或 $.items[0].name", - "label": "标签", - "unit": "单位", - "mappings": "映射", - "tablePath": "数组 JSON 路径", - "tablePathHint": "响应中数组的路径,例如 $.data.items", - "columns": "列", - "header": "标头", - "items": "项", - "gridColumns": "网格列数", - "cardStyle": "卡片样式", - "bars": "条形图", - "valuePath": "数值的 JSON 路径", - "maxPath": "最大值对应的 JSON 路径", - "showPercentage": "显示百分比", - "barSize": "条形图尺寸", - "goodValues": "良好值(逗号分隔)", - "dotSize": "点大小", - "valueSize": "数值大小", - "labelPosition": "标签位置", - "kvLayout": "布局", - "striped": "交替行颜色", - "compact": "紧凑模式", - "maxHeight": "最大高度 (px)", - "color": "颜色", - "buttonLabel": "按钮标签", - "buttonColor": "按钮颜色", - "confirmText": "确认文本", - "confirmTextHint": "如果设置,执行请求前将显示确认对话框", - "successMessage": "成功消息", - "successMessageHint": "成功执行后显示的消息", - "enabled": "启用", - "template": { - "label": "JSX 模板", - "description": "Mantine JSX 模板。通过数据绑定(如 data.name)访问 API 响应字段。仅使用白名单组件。禁止使用:constructor、__proto__、eval、Function、window、document。" + "description": "描述" + }, + "editor": { + "errorBoundary": { + "title": "出了错。" + }, + "action": { + "components": "组件", + "format": "格式", + "insertStarter": "Insert starter", + "redo": "重做", + "copied": "已复制", + "schema": "图案" + }, + "reference": { + "minimal": "最小示例", + "full": "完整示例" + }, + "componentReference": { + "search": "搜索组件", + "empty": "没有匹配的组件", + "count": "{count, number} 组件可用" + }, + "status": { + "errors": "{count, number} 错误", + "warnings": "{count, number} 警告", + "ready": "未发现问题", + "position": "Ln {line, number}, Col {column, number}", + "characters": "{count, number} 字符", + "charactersWithLimit": "{count, number} / {limit, number}" + }, + "diagnostics": { + "title": "模板检测", + "line": "行 {line, number}", + "ast": "{value}", + "bindingTypeConflict": "输入“{value}”被值类型不兼容的控件共享。", + "runtimeBindingTypeConflict": "输入“{value}”同时绑定为 {firstType} 和 {secondType}。", + "dynamicRequestId": "必须填写文字请求ID。动态请求ID不被接受。", + "dynamicInputBinding": "绑定需要一个文字输入名称。", + "inlineRequestProps": "网络组件接受 requestId 和参数;内联 URL、方法、头部和身体属性被屏蔽。", + "invalidRequestManifest": "命名请求必须是有效的请求映射。{value}", + "missingRequestId": "此网络组件需要一个文字请求ID。", + "templateEmpty": "输入JSX模板。", + "templateTooLong": "模板超过50 000个字符的限制。", + "unknownRequest": "不存在 ID 为“{value}”的命名请求。" } }, - "placeholder": { - "exampleLabel": "CPU 温度", - "exampleLabelShort": "CPU 温度", - "exampleHeader": "名称", - "exampleUnit": "°C", - "iconUrl": "https://...", - "url": "https://api.example.com/api/v1/status", - "headerName": "X-API-Key", - "jsonPath": "$.data.value", - "tablePath": "$.data.items", - "columnJsonPath": "$.name", - "valuePath": "$.data.used", - "maxPath": "$.data.total", - "goodValues": "online, true, up", - "color": "blue" - }, - "cardStyleOption": { - "filled": "填充", - "outline": "轮廓", - "subtle": "淡雅" - }, - "layoutOption": { - "list": "列表", - "grid": "网格" - }, - "sizeOption": { - "sm": "小", - "md": "中", - "lg": "大", - "xl": "特大" - }, - "labelPositionOption": { - "above": "上方", - "below": "下方" - }, - "fieldset": { - "general": "常规", - "connection": "API 连接", - "display": "显示配置" - }, - "displayTypeDescription": { - "singleValue": "显示一个带标签和单位的提取值", - "keyValue": "并排显示多个带标签的值", - "table": "以表格格式显示数据行", - "statGrid": "网格中带颜色的统计卡片 — 类似于 Pi-Hole 或 Speedtest 小组件", - "progressBars": "显示使用量或完成进度的进度条 — 用于磁盘、内存、配额", - "statusIndicator": "显示在线/离线或健康状态的彩色状态点", - "countGrid": "紧凑网格中的数字 + 标签计数器", - "raw": "用于调试的格式化 JSON 输出", - "actionButton": "点击时触发请求的按钮", - "customJsx": "使用白名单 Mantine 组件的自定义 JSX 布局,支持完整 API 数据绑定" - }, - "method": { - "GET": "GET", - "POST": "POST", - "PUT": "PUT", - "DELETE": "删除", - "PATCH": "PATCH" - }, - "authType": { - "none": "空", - "bearer": "Bearer 令牌", - "basic": "基本认证", - "apiKeyHeader": "API 密钥(请求头)", - "apiKeyQuery": "API 密钥(查询参数)" - }, - "displayType": { - "singleValue": "单个值", - "keyValue": "键值", - "table": "表格", - "statGrid": "统计网格", - "progressBars": "进度条", - "statusIndicator": "状态指示器", - "countGrid": "计数网格", - "raw": "原始 JSON", - "actionButton": "操作按钮", - "customJsx": "自定义 JSX" - }, - "secret": { - "apiKey": "API 密钥/令牌", - "username": "用户名", - "password": "密码", - "savedPlaceholder": "•••••••(已保存,留空则保持不变)" + "workbench": { + "configure": "配置", + "sectionNavigation": "自定义小部件部分", + "widgetPreview": "小部件预览", + "generalInformation": "通告周知", + "invalidWidget": "无效的小部件", + "section": { + "general": "常规", + "sources": "API 来源", + "requests": "请求", + "options": "选项", + "jsx": "JSX", + "preview": "预览" + }, + "status": { + "unsaved": "未保存更改", + "invalid": "需要关注", + "ready": "就绪" + }, + "saveError": { + "title": "部件未保存", + "description": "修复这些验证错误并再次保存。", + "more": "工作台中还显示了 {count} 个错误。", + "errors": "验证错误", + "copy": "复制错误", + "copied": "复制错误" + }, + "action": { + "preview": "测试和预览", + "previewLoading": "测试请求" + }, + "requests": { + "title": "命名查询和动作", + "label": "请求", + "description": "查询加载数据;操作只在用户交互后运行。任何 HTTP 方法对两种类型都是有效的。" + }, + "options": { + "title": "小部件选项" + }, + "builder": { + "advancedManifest": "高级原始清单", + "advancedJson": "高级清单 JSON", + "manifestFilename": "json", + "request": "请求 {count, number}", + "requestId": "请求ID", + "type": "下载客户端类型", + "method": "方法", + "source": "API 源", + "run": "运行", + "runLoad": "小部件加载时", + "runManual": "从子获取", + "permission": "权限", + "path": "路径", + "pathDescription": "使用“{option:name}”作为小部件选项和“{param:name}”作为调用值。", + "requestDetails": "查询、实体和行为", + "queryValues": "查询值", + "queryKey": "查询密钥", + "queryKeyInvalid": "使用唯一的ID,它以字母开头,只包含字母、数字或_。", + "valueSource": "值源", + "literal": "纯文本", + "widgetOption": "小部件选项", + "invocationParameter": "调用参数", + "option": "选项", + "parameterName": "参数名称", + "value": "值", + "removeQueryValue": "删除查询值", + "addQueryValue": "添加查询值", + "jsonBody": "JSON体", + "jsonBodyDescription": "可选。在任意深度插入 $option 和 $param 引用。", + "insertOptionReference": "插入选项引用", + "insertParameterReference": "插入参数引用", + "confirmation": "确认消息", + "invalidation": "成功后刷新", + "invalidationDescription": "逗号分隔的查询 ID", + "noAuth": "发送时无需源认证", + "moveRequestUp": "向上移动请求", + "moveRequestDown": "向下移动请求", + "removeRequest": "移除请求", + "addRequest": "添加请求", + "optionName": "选项名称", + "label": "标签", + "control": "控制", + "description": "描述", + "default": "默认设置", + "optionDetails": "制约因素和动态选择", + "minimum": "最小值", + "maximum": "最大值", + "step": "步骤", + "choiceLabel": "选择标签", + "choiceValue": "选择值", + "newChoice": "新的选择", + "addChoice": "添加选择", + "removeChoice": "移除选择", + "choicesRequest": "从请求中加载选项", + "itemsPath": "项目路径", + "itemsPathPlaceholder": "项目 (可选)", + "valuePath": "值路径", + "labelPath": "标签路径", + "group": "组", + "advancedOption": "高级选项", + "moveOptionUp": "上移选项", + "moveOptionDown": "下移选项", + "removeOption": "删除选项", + "addOption": "添加选项", + "invalidJson": "无效的 JSON", + "invalidWidget": "无效的小部件" + }, + "jsx": { + "title": "JSX 模板", + "label": "模板" + }, + "sources": { + "title": "API 来源和凭据", + "newName": "API {count, number}", + "duplicateSourceId": "API 源 ID 必须是唯一的。", + "credentialRemoved": "凭据已删除", + "credentialRemovedDescription": "已删除存储的值。", + "primary": "主API", + "id": "源 ID", + "name": "作业名称", + "baseUrl": "Base URL", + "baseUrlError": { + "invalid": "输入完整的 URL。", + "protocol": "使用 HTTP 或 HTTPS URL。", + "credentials": "从此 URL 中删除用户名和密码。请在下方配置凭据。", + "queryOrFragment": "从此基础 URL 中删除查询字符串或片段,将查询值添加到命名请求。" + }, + "networkScope": "网络访问权限", + "authentication": "认证", + "headerName": "标题名称", + "queryParameter": "查询参数", + "configured": "配置 - 输入一个替换", + "clear": "晴朗", + "remove": "删除源及其请求", + "advanced": "高级版", + "add": "添加另一个 API 源", + "sourceType": "集成", + "manualSource": "HTTP API", + "existingIntegration": "现有集成", + "integrationType": "集成类型", + "selectIntegration": "已配置集成", + "noIntegrations": "没有匹配的集成可用", + "integrationUnavailable": "选中的集成不再可用。选择另一个集成。", + "integrationDescription": "使用已保存的集成 URL 和凭据。更改应用自动。运行请求需要完整的集成权限。" + }, + "ai": { + "title": "使用任何AI 创建或修复", + "description": "如果您有一个 API 文档URL,请先添加一个 API 文档URL。若要修复,请尽可能运行预览。 复制提示到 AI; 它可以询问缺失的详细信息。请在此粘贴它的 JSON 定本。", + "request": "这个小部件应该做什么?", + "documentationUrl": "API 文档 URL (可选)", + "paste": "粘贴", + "response": "AI 响应", + "manualCopyDescription": "剪贴板访问不可用。选择下面的提示并手动复制它。", + "manualPasteDescription": "剪贴板访问不可用或复制的响应需要更正。请在此粘贴AI的 JSON 答复。", + "selectAll": "全选", + "loadResponse": "加载响应", + "loaded": "部件加载到编辑器", + "invalidResponse": "剪贴板不包含一个有效的 v2 部件", + "invalidResponseDetail": "AI 响应无效:{message}" + }, + "preview": { + "invalid": "修复验证错误以预览此部件。", + "fixtureError": "预览灯具错误", + "requestData": "请求数据", + "status": { + "idle": "请求尚未测试", + "loading": "测试请求", + "success": "所有加载请求成功", + "error": "一个或多个加载请求失败" + }, + "result": { + "loading": { + "title": "测试 API 请求", + "description": "Homarr 正在创建预览会话并加载小部件数据。" + }, + "success": { + "title": "预览已准备好", + "description": "{succeeded, plural, =0 {这个小部件没有加载请求。} one {# 加载请求成功。} other {# 加载请求成功。}} 打开数据来检查响应。" + }, + "error": { + "title": "预览已完成,请求错误", + "description": "{succeeded, number} 成功 {failed, number} 失败。打开回复和错误详细信息。" + } + }, + "instanceOptions": "实例选项", + "liveActions": "对已配置的 API 运行操作", + "liveActionsDescription": "关闭是安全的模拟。开启此功能会影响到实际服务。", + "noActions": "没有定义动作。", + "containedFailures": "此部件中包含运行时故障。请求日志绝不包含秘密值。", + "validation": { + "title": "验证", + "ready": "小部件定义是有效的。" + }, + "accessibility": { + "title": "无障碍检查", + "ready": "未检测到常见的辅助缺漏。", + "pending": "当小部件定义有效时,将进行辅助功能检查。", + "imageAlt": "将备用文本添加到每个图像,只为装饰性图像使用空常数。", + "actionIconLabel": "在每个动作图标上添加一个条目或标题。", + "inputLabel": "为每个输入添加可见标签或可访问名称。" + }, + "journal": "修改请求日记", + "actionParameters": "动作参数 (JSON)", + "invalidParameters": "使用声明的字符串、数字和布尔参数类型。", + "runDestructive": "运行破坏性操作", + "runAction": "运行操作", + "deleteConfirmation": "此预览操作会通过已配置的 API 更改远程数据。", + "simulated": "模拟动作", + "httpStatus": "HTTP {status, number}", + "tab": { + "widget": "小部件", + "data": "数据", + "options": "选项", + "state": "作业状态", + "actions": "控制", + "diagnostics": "诊断信息" + }, + "size": { + "compact": "紧凑的", + "standard": "标准的", + "wide": "宽度" + }, + "fixture": { + "live": "实时模式", + "loading": "加载中", + "empty": "空", + "error": "错误" + } + } }, "preview": { - "title": "预览", - "test": "测试", - "hint": "点击“测试”可使用当前配置预览 API 响应。", - "rawResponse": "原始 JSON 响应" + "request": { + "permission": { + "view": "视图", + "modify": "修改", + "full": "完整的" + } + } }, "notification": { "created": "小组件“{name}”创建成功。", "updated": "小组件“{name}”更新成功。", "deleted": "小组件“{name}”已删除。", "imported": "小组件导入成功。", - "aiPromptCopied": "AI 提示词已复制到剪贴板", - "aiPromptDescription": "复制一个预置提示词,可粘贴到任何 AI 聊天机器人(ChatGPT、Claude、Gemini...)中。其中包含完整的小组件架构和您的 API 响应数据,AI 可据此为您生成可直接导入的 JSON 配置。", - "aiPromptCopy": "复制到剪贴板", - "aiPromptNoResponse": "提示:先运行测试,将 API 响应包含在提示词中,可获得更好效果。", + "migrated": "旧部件迁移成功。现有的棋盘位置现在使用 v2 定义。", + "migrationError": "无法迁移旧版小部件。确保文件使用homarr-custom-widget-v2 schema。", + "legacyDefinitionCopied": "已复制原始小部件内容。存储凭据值不包括在内。", + "legacyDefinitionCopyError": "复制小部件原始内容失败。", + "migrationPromptCopied": "编辑的迁移提示已被复制。粘贴到LLM中,复制它的单个JSON响应,然后在此选择粘贴迁移的小部件。", + "migrationPromptCopyError": "复制迁移提示失败。", + "sourcesConfigured": "小部件源和凭据已保存。", + "sourceConfigurationError": "配置小部件源失败。", + "aiPromptCopiedWithCount": "AI 提示已复制到剪贴板 ({count, number} 字符)。", "aiPromptCopyError": "复制提示词到剪贴板失败,您的浏览器可能不支持此功能。", - "createError": "创建小组件失败。请检查您的 API 端点是否可访问。", + "aiPromptSent": "提示已发送。当助理在后台工作时,您可以继续编辑。", "updateError": "更新小组件失败,您的更改未能保存。", "importError": "导入小组件失败。请确保文件为有效的自定义小组件 JSON 导出文件。", "exportError": "导出小组件失败。", @@ -880,37 +1138,184 @@ "duplicateError": "复制小组件失败。", "toggleError": "切换小组件状态失败。", "deleteError": "删除小组件失败。", - "previewError": "获取预览失败,请检查 URL 后重试。", - "executed": "操作执行成功。", - "executeError": "操作失败:{error}" + "previewError": "获取预览失败,请检查 URL 后重试。" }, - "table": { - "name": "名称", - "url": "URL", - "display": "显示" + "importReview": { + "title": "审阅自定义小部件导入", + "description": "在导入之前检查这个小部件连接到哪里以及它的控制面板需要什么样的权限。", + "migrationTitle": "审核已迁移的 v2 替换", + "migrationDescription": "查看并确认此生成的 v2 定义。在保持现有的与同一个小部件相关联的棋盘位置的同时以原子形式确认替代保留的 v1 记录。", + "fileLabel": "选择一个自定义部件 JSON 文件", + "name": "作业名称", + "origin": "基本来源", + "authentication": "认证", + "networkScope": "网络范围", + "methods": "HTTP 方法", + "permissions": "所需的棋盘权限", + "sourceSetup": { + "title": "配置 API 源", + "description": "确认此小部件连接哪里并添加凭据。私有和循环URL是针对您的 Homarr 安装的。", + "suggestedUrl": "建议的 URL", + "confirmUrl": "我确认此服务器URL对我的 Homarr 安装是正确的", + "ready": "URL 已就绪", + "needsUrl": "确认 URL", + "credentialsMissing": "证书丢失", + "credentialsOptional": "您可以在没有凭据的情况下安装并稍后配置它们,但请求将失败,直到添加它们。" + }, + "actionWarning": { + "title": "这个小部件可以更改远程数据", + "description": "在导入后查看每个命名行动、继承的凭据和破坏性确认。秘密不包含在文件中。" + }, + "cancel": "取消导入", + "confirm": "导入小部件", + "confirmMigration": "确认 v2 替换" }, - "widget": { - "disabled": "此小组件已禁用" + "secret": { + "apiKey": "API 密钥/令牌", + "username": "用户名", + "password": "密码", + "savedPlaceholder": "•••••••(已保存,留空则保持不变)" + } + }, + "workshop": { + "title": "讲习班", + "browseWorkshop": "浏览讲习班", + "openCommunity": "开放讲习班", + "openOnWorkshop": "在 Workshop 网站上打开 {title}", + "back": "返回创意讲习班", + "search": "搜索小部件", + "searchCss": "搜索 CSS 主题", + "sort": "排序", + "sortTop": "最高评分", + "sortNewest": "最新的", + "listAriaLabel": "创意小部件", + "listAriaLabelCss": "讲习班 CSS 主题", + "empty": "没有匹配此搜索的小部件。", + "emptyDescription": "发布到讲习班的社区小部件显示在这里。", + "emptyFilteredTitle": "没有匹配此搜索的部件", + "emptyFilteredDescription": "没有 Workshop 小组件匹配“{search}”。", + "emptyCss": "没有匹配此搜索的 CSS 主题。", + "unavailableTitle": "Homarr Workshop 似乎不可用", + "unavailable": "社区服务可能暂时关闭。稍后再试。您已安装的部件不受影响。", + "loadError": "无法加载此提交。", + "noDescription": "无描述", + "author": "作者:{name}", + "communityMember": "社区成员", + "outdated": "过期时间", + "outdatedWarning": "提交人将这一呈件标记为过时。在导入前仔细审查。", + "score": "得分: {count, number}", + "upvote": "Upvote", + "downvote": "投反对票", + "voteError": "投票无法保存。", + "signIn": "使用 GitHub 登录", + "signInError": "GitHub 登录失败。请检查Workshop OAuth 提供商是否已配置,是否允许弹出窗口。", + "signOut": "登出", + "signInHint": "登录以投票或报告。安装不需要创意工坊账户。", + "securityNotice": "创意小部件可以调用他们已声明的 API 来源,并使用您本地配置的凭据执行声明的操作。秘密永远不包括在内。", + "securityNoticeCss": "社区CSS 可以更改看板的外观和可用性;在导入前审查;在您保存看板设置之前没有保存任何内容。", + "install": "安装", + "installReviewTitle": "安装前审核", + "installError": "这个小部件无法安装", + "installErrorDescription": "工坊提交不是一个有效的自定义 JSX v2 部件。", + "useCss": "Import CSS", + "importCss": "从创意工坊导入 CSS", + "importCssConfirm": "要将当前自定义 CSS 替换为“{title}”吗?在保存面板设置之前,不会保存任何更改。", + "screenshotAlt": "{title} 截图 {count, number}", + "screenshotViewer": "{title} 截图查看器", + "screenshotsLabel": "{title} 截图", + "zoomScreenshot": "查看完整大小", + "previousScreenshot": "上一次截图", + "nextScreenshot": "下一次截图", + "showScreenshotThumbnails": "显示截图缩略图", + "hideScreenshotThumbnails": "隐藏截图缩略图", + "closeScreenshotViewer": "关闭截图查看器", + "technicalDetails": "技术细节", + "sourceCode": "创意工坊条目", + "export": "导出", + "report": "报告", + "reportTitle": "报告提交", + "reportReason": "原因", + "reportExplanation": "讲习班主持人应当知道什么?", + "reportSend": "发送报告", + "reportSent": "报告已发送", + "reportSentDescription": "研讨会主持人现在可以审查这份报告。", + "reportCount": "{count, plural, one {# 报告} other {# 报告}}", + "reportWarning": "{count, plural, one {这个提交包含# 开放的社区报告} other {这个提交包含# 开放的社区报告。}} 它仍然可以安装,但你应该先审查它的内容。", + "reportVisibility": "报告详细信息仅对提交者和创意工坊管理员可见。", + "reportCategory": { + "outdated": "过期或不再工作", + "malicious": "恶意的", + "spam": "垃圾邮件", + "copyright": "版权所有", + "inappropriate": "不适当的", + "other": "其它" + }, + "publish": { + "title": "发布到讲习班", + "introTitle": "与社区分享这个小部件", + "introDescription": "Homarr 导出当前部件的无凭据副本。添加清晰的列表细节,以便人们在安装前知道它做什么。", + "listingDetails": "工坊清单", + "listingDetailsDescription": "这些详细信息与导出的部件定义一起公开显示。", + "success": "立即发布。社区成员现在可以安装和报告这个部件。", + "successTitle": "您的小部件已经在线", + "manageDescription": "打开提交更新其列表、审查报告、标记过期或删除它。提交管理将直接在讲习班网站上处理。", + "viewSubmission": "查看和管理提交", + "done": "完成", + "signInHint": "登录以发布您的创意工坊身份。", + "titleField": "标题", + "descriptionField": "描述", + "screenshots": "屏幕截图", + "screenshotsDescription": "最多5张PNG,JPEG或WebP图像", + "screenshotsPlaceholder": "选择截图", + "invalidScreenshot": "请使用 PNG、JPEG 或 WebP 图片,每张大小不得超过 {maxSize}。", + "privateSourceWarning": "此小组件包含以下内容的私有源 URL:{sources}。发布前,请将个人主机或 IP 地址替换为安全的服务占位符。", + "reviewSourcesTitle": "查看私有源 URL", + "privateSourceConfirmation": "我审查了这些源URL,不会泄露私人基础设施详细信息", + "action": "现在发布", + "publicationNote": "发布是立即的。您可以在工作台后管理提交。", + "definitionChanged": "小部件在准备发布时已更改。请再次查看其私有源URL,然后重试。", + "error": "发布失败" } }, "integration": { + "completion": { + "modalTitle": "服务已准备好", + "title": "{name} 已连接", + "description": "连接通过了测试。请选择下一步在该板上显示什么。", + "connectionReady": "服务连接已准备好", + "appReady": "应用快捷方式已准备好", + "compatibleWidgets": "{count, plural, =0 {没有兼容的小部件} one {# 兼容的小部件} other {# 兼容的小部件}}", + "chooseWidget": "选择小部件", + "recipes": { + "title": "推荐给此棋盘", + "description": "基于已连接的服务和小部件。", + "newConnectionReason": "现可通过 {integration} 使用", + "existingConnectionReason": "使用您已经连接的服务", + "dismiss": "在此看板中取消关于此服务的建议" + } + }, "page": { "list": { - "title": "集成", + "ariaLabel": "已配置的集成", "search": "搜索集成", + "scopedNote": "只显示您被允许管理的集成。", "noResults": { - "title": "尚无集成" + "title": "尚无集成", + "description": "连接一个服务来使用 Homarr 小部件中的数据和动作。", + "action": "创建您的第一个集成", + "filteredTitle": "没有与您的搜索匹配的集成", + "filteredDescription": "没有集成匹配“{search}”。请尝试其他名称、类型或 URL。", + "createOnlyTitle": "您只能添加集成", + "createOnlyDescription": "您的权限允许您创建集成但不管理现有的集成。请询问管理员访问您需要的集成。" } }, "create": { "title": "新的集成 {name}", "notification": { "success": { - "title": "创建成功", "message": "组件已成功创建" }, "error": { - "title": "创建失败", "message": "无法创建组件" } }, @@ -934,11 +1339,9 @@ "title": "编辑集成 {name}", "notification": { "success": { - "title": "成功应用更改", "message": "集成已成功保存" }, "error": { - "title": "无法应用更改", "message": "无法保存此集成" } }, @@ -955,23 +1358,15 @@ "message": "确认删除集成 {name} 吗?", "notification": { "success": { - "title": "删除成功", "message": "集成已成功删除" }, "error": { - "title": "删除失败", "message": "无法删除集成" } } } }, "field": { - "name": { - "label": "名称" - }, - "url": { - "label": "Url" - }, "attemptSearchEngineCreation": { "label": "创建搜索引擎", "description": "集成“{kind}”可以与搜索引擎一起使用。勾选此项可自动配置搜索引擎。" @@ -983,6 +1378,10 @@ "label": "创建应用", "description": "创建一个具有与集成相同名称和图标的应用程序。 留空下面的输入字段使用集成URL创建应用程序。" }, + "linkApp": { + "label": "链接已存在的应用", + "description": "将此集成连接到您可以使用的应用程序。" + }, "appHref": { "placeholder": "自定义应用URL" }, @@ -996,7 +1395,11 @@ "grid": { "widgetCount": "{count} 个小组件", "noWidgets": "暂无小组件", - "detected": "通过 Docker 检测到" + "detected": "通过 Docker 检测到", + "connected": "{count, plural, one {# 已连接} other {# 已连接}}", + "tiedWidgets": "搭配小部件", + "more": "+{count} 个更多", + "loadError": "无法加载集成。请在创建新连接前重试。" }, "category": { "dnsHole": "DNS", @@ -1028,7 +1431,9 @@ "vpn": "VPN", "mediaLibrary": "媒体库", "uptimeMonitoring": "运行时间监控", - "systemMonitoring": "系统监控" + "beszel": "Beszel", + "systemMonitoring": "系统监控", + "security": "安全" }, "testConnection": { "action": { @@ -1313,6 +1718,22 @@ "slug": { "label": "状态页标识", "newLabel": "新状态页标识" + }, + "wazuhIndexerUrl": { + "label": "索引器 URL", + "newLabel": "新索引器 URL" + }, + "wazuhIndexerUsername": { + "label": "索引器用户名", + "newLabel": "新索引器用户名" + }, + "wazuhIndexerPassword": { + "label": "索引器密码", + "newLabel": "新索引器密码" + }, + "wazuhDashboardUrl": { + "label": "仪表盘URL (可选)", + "newLabel": "新建控制面板网址" } } }, @@ -1321,58 +1742,19 @@ "interact": "与集成进行互动", "full": "完整的组件访问权限" }, - "audiobookshelf": { - "name": "Audiobookshelf", - "description": "自托管有声读物和播客服务器" - }, - "navidrome": { - "name": "Navidrome", - "description": "自托管音乐流媒体服务器,兼容 Subsonic API" - }, - "uptimeKuma": { - "name": "Uptime Kuma", - "description": "自托管运行时间监控,支持公开状态页", - "secret": { - "slug": { - "description": "您公开状态页的标识。如未设置,默认值为“default”。" - }, - "apiKey": { - "description": "用于访问 /metrics 认证接口的可选 API 密钥" - } - } - }, - "traefik": { - "name": "Traefik", - "description": "云原生反向代理和负载均衡器" - }, - "paperlessNgx": { - "name": "Paperless-ngx", - "description": "用于归档和整理扫描文档的文档管理系统" - }, - "patchmon": { - "name": "PatchMon", - "description": "Linux 主机的补丁管理和监控" - }, - "bazarr": { - "name": "Bazarr", - "description": "Sonarr 和 Radarr 的配套应用,用于管理和下载字幕" - }, "llamacpp": { "name": "llama.cpp", "description": "监控本地 llama.cpp llama-server:健康状态、模型与生成指标" - }, - "wud": { - "name": "What's Up Docker", - "description": "监控您哪些 Docker 容器有可用的镜像更新" } }, "media": { "plural": "媒体", "search": "查找媒体", "field": { - "name": "名称", + "preview": "预览", "size": "大小", - "creator": "创建者" + "creator": "创建者", + "actions": "控制" }, "action": { "upload": { @@ -1400,10 +1782,12 @@ } }, "copy": { - "label": "复制 URL" + "label": "复制 URL", + "labelNamed": "复制 {name} 的 URL" }, "open": { - "label": "打开媒体" + "label": "打开媒体", + "labelNamed": "打开 {name}" } }, "noResults": { @@ -1418,7 +1802,6 @@ "add": "添加", "apply": "应用", "backToOverview": "返回概览", - "skip": "跳过", "change": "更改", "create": "创建", "createAnother": "创建并重新开始", @@ -1441,16 +1824,31 @@ "tryAgain": "重试", "loading": "正在加载", "show": "显示", - "hide": "隐藏" + "hide": "隐藏", + "undo": "撤消操作", + "editNamed": "编辑 {name}", + "deleteNamed": "删除 {name}", + "clearSearch": "清除搜索", + "copy": "复制", + "copied": "已复制", + "refresh": "刷新" + }, + "pagination": { + "pageOf": "第 {page} 页,共 {totalPages} 页" }, "here": "这里", + "serviceUrlTemplate": { + "serverTitle": "通常服务器地址", + "urlModeLabel": "服务地址模式", + "hostPort": "同一个主机,不同的端口", + "subdomain": "每个服务一个子域", + "path": "每个服务一个路径" + }, "iconPicker": { "label": "图标 URL", + "description": "搜索库,粘贴图片URL,或上传文件。", "header": "输入名称或对象来筛选图标… Homarr 将为您搜索 {countIcons} 图标", "headerLoading": "按名称搜索图像", - "noResults": "没有与“{search}”匹配的图标。", - "error": "无法加载图标。", - "description": "搜索库,粘贴图片URL,或上传文件。", "clear": "清除图像", "uploadImage": "上传图片", "results": "图像搜索结果", @@ -1459,7 +1857,9 @@ "otherImages": "其他映像", "urlLoading": "正在检查图片…", "urlReady": "图像已准备好使用", - "urlError": "无法加载此图像。请检查URL,然后重试。" + "urlError": "无法加载此图像。请检查URL,然后重试。", + "noResults": "没有与“{search}”匹配的图标。", + "error": "无法加载图标。" }, "colorScheme": { "options": { @@ -1471,7 +1871,6 @@ "information": { "min": "最小", "max": "最大", - "days": "天", "hours": "时", "minutes": "分" }, @@ -1508,16 +1907,16 @@ }, "userAvatar": { "menu": { - "switchToDarkMode": "切换到暗黑模式", - "switchToLightMode": "切换到日间模式", + "open": "打开账户菜单", "management": "管理中心", - "docker": "Docker", "preferences": "偏好设置", "logout": "退出登录", "login": "登录", "homeBoard": "您的首页", - "loggedOut": "已注销", - "updateAvailable": "{countUpdates} 可用更新:{tag}" + "updateAvailable": "{countUpdates} 可用更新:{tag}", + "assistant": "助理", + "assistantThinking": "思维方式", + "modifier": "Mod" } }, "dangerZone": "危险", @@ -1565,13 +1964,66 @@ "kilometersPerHour": "千米/时", "milesPerHour": "英里/时" } + }, + "widgetQuery": { + "loading": "正在加载小部件数据" + }, + "total": "请求总计", + "filesystemUsage": "{count, plural, one {显示#文件系统的使用} other {显示#文件系统的使用}}", + "field": { + "name": "作业名称" + }, + "label": { + "new": "新建" + }, + "entity": { + "apps": "应用", + "boards": "面板", + "certificates": "证书", + "customWidgets": "自定义小组件", + "groups": "群组", + "integrations": "集成", + "invites": "邀请", + "logs": "日志", + "media": "媒体", + "searchEngines": "搜索引擎", + "tasks": "任务", + "users": "用户" } }, "section": { - "dynamic": { + "option": { + "showLabel": { + "label": "显示标签", + "description": "在内容上方显示容器标签。" + }, + "collapsible": { + "label": "允许折叠...", + "description": "让观众扩展并折叠此容器。" + }, + "showOpenAll": { + "label": "显示打开所有动作", + "description": "在新标签中显示打开此容器中每个应用的动作。" + }, + "scrollable": { + "label": "可滚动", + "description": "保持容器的大小并滚动其内装物,而不是成长才适合它们。" + } + }, + "action": { + "openAllInNewTabsFor": "在新标签页中打开 {name} 中的所有应用" + }, + "openAllInNewTabs": { + "title": "在标签中打开全部", + "text": "某些浏览器可能出于安全原因阻止大批打开标签页。 Homarr 无法打开所有窗口,因为您的浏览器屏蔽了此操作。请允许“打开弹出窗口”并重试。" + }, + "container": { + "untitled": "无标题容器", "action": { - "create": "新建动态部分", - "remove": "删除动态部分" + "create": "新容器", + "remove": "删除容器", + "expand": "扩展", + "collapse": "收起" }, "option": { "title": { @@ -1581,59 +2033,16 @@ "label": "自定义 CSS 类" }, "borderColor": { - "label": "边界颜色" + "label": "边框颜色" } }, "remove": { - "title": "删除动态部分", - "message": "你确定你要删除这个动态部分?项目将被移动到父节的相同位置。" - } - }, - "category": { - "field": { - "name": { - "label": "名称" - } - }, - "action": { - "create": "新建分类", - "edit": "重命名分类", - "remove": "删除分类", - "moveUp": "上移", - "moveDown": "下移", - "createAbove": "上方新建分类", - "createBelow": "下方新建分类", - "openAllInNewTabs": "在标签中打开全部" - }, - "create": { - "title": "新建分类", - "submit": "添加分类" - }, - "remove": { - "title": "删除分类", - "message": "您确定要删除分类 {name} 吗?" - }, - "edit": { - "title": "重命名分类", - "submit": "重命名分类" - }, - "menu": { - "label": { - "create": "新建分类", - "changePosition": "换位", - "settings": "设置" - } - }, - "openAllInNewTabs": { - "title": "在标签中打开全部", - "text": "某些浏览器可能出于安全原因阻止大批打开标签页。 Homarr 无法打开所有窗口,因为您的浏览器屏蔽了此操作。请允许“打开弹出窗口”并重试。" + "message": "移除此容器?其内装物将移入周围区域。" } } }, "item": { "action": { - "create": "新建项目", - "import": "导入项目", "edit": "编辑项目", "moveResize": "移动/调整项目大小", "duplicate": "复制项目", @@ -1642,7 +2051,7 @@ "menu": { "label": { "settings": "设置", - "refresh": "刷新", + "settingsFor": "{name} 的设置", "options": "选项", "actions": "操作" }, @@ -1651,21 +2060,96 @@ "error": "错误", "loading": "加载中", "idle": "空闲" + }, + "notification": { + "saveError": { + "title": "无法保存小部件", + "message": "小部件更改已回滚。" + } } }, "create": { "title": "选择要添加的项目", "search": "筛选项目", - "addToBoard": "添加到面板" + "addToBoard": "添加到面板", + "addAtPosition": "在此处添加项目", + "destination": { + "label": "添加到", + "description": "选择小部件应显示的位置。您仍然可以稍后移动它。", + "mainCanvas": "主画布", + "leftRail": "左铁轨", + "rightRail": "右铁轨" + }, + "connectionStatus": { + "ready": "就绪", + "needsSetup": "需要设置", + "noConnectionRequired": "无需连接" + }, + "customWidget": "自定义 API", + "standalone": "独立的", + "missingIntegration": { + "title": "先连接一个服务", + "noPermission": "此部件需要兼容的服务连接。请管理员连接一个,然后重试。" + }, + "notification": { + "success": { + "title": "小部件已添加", + "message": "{name} 已添加到此面板。", + "relocatedMessage": "由于所选目标不可用,{name} 已添加到 {destination}。" + }, + "error": { + "title": "无法添加项目", + "message": "项目不能添加到该棋盘" + } + } + }, + "selection": { + "summary": "{count, plural, one {# 选中项目} other {# 选中项目}}", + "selected": "{count, plural, one {# 选择了} other {# 选择了}}", + "copy": "复制", + "copied": "{count, plural, one {# 项目复制到剪贴板} other {# 项目复制到剪贴板}}", + "copyError": "无法复制选中的项目。您的浏览器可能不允许剪贴板访问。", + "paste": "粘贴", + "pasteShortcut": "粘贴复制的项目到此处(Ctrl / Summary + V)", + "pasted": "{count, plural, one {# 项目粘贴} other {# 项目粘贴}}", + "pasteError": "剪贴板无法读取。您的浏览器可能不允许剪贴板访问。", + "pasteInvalid": "剪贴板不包含有效的 Homarr 板项目。", + "pasteUnavailable": "复制的项目不适合此看板。", + "removed": "{count, plural, one {# 项目已删除} other {# 项目已删除}}", + "move": "移动", + "moveTo": "移动选中项目", + "delete": "删除", + "clear": "清除选择", + "clearShortcut": "清除选择 (scape)", + "saveErrorTitle": "无法更新项目", + "saveErrorMessage": "无法保存更改。板已刷新。", + "moveUnavailableTitle": "无法移动选中的项目", + "moveUnavailableMessage": "目标没有足够的空间用于整个选择。" }, "moveResize": { "title": "移动/调整项目大小", + "entryLabel": "{name},第 {column} 列,第 {row} 行", + "target": { + "numbered": "{name},目标 {index}", + "located": "{name},{location},目标 {index}" + }, + "keyboard": { + "instructions": "按Enter或Space 键开始键盘编辑。使用箭头键移动,Shift加箭头键以调整大小,逃离键停止。", + "started": "键盘编辑已开始。使用箭头键移动,Shift+箭头键以调整大小,逃离键停止。", + "stopped": "键盘编辑已停止。", + "boundary": "这一改动不适合于本节。" + }, "field": { + "section": { + "label": "节或铁轨" + }, "width": { - "label": "宽度" + "label": "宽度", + "shortLabel": "瓦文" }, "height": { - "label": "高度" + "label": "高度", + "shortLabel": "H" }, "xOffset": { "label": "X 偏移" @@ -1679,18 +2163,36 @@ "title": "编辑项目", "tab": { "widget": "编辑小组件", - "app": "编辑应用" + "app": "编辑应用", + "integration": "编辑集成" }, "app": { "propagationNotice": "对此应用的更改将应用于所有面板中使用该应用的位置。" }, + "integration": { + "action": "编辑连接", + "description": "测试或修理选中的连接而不离开此部件。", + "editLabel": "编辑集成 {name}", + "fullAccessRequired": "需要完全访问", + "propagationNotice": "对此集成的更改适用于使用的任何地方。连接在保存之前会经过测试。", + "loading": "正在加载集成", + "loadError": "无法加载此集成。请在更改其连接设置之前再试一次。" + }, + "preview": { + "integrationRequired": "选择一个连接来预览这个部件。", + "size": "文件大小" + }, + "settings": { + "label": "小部件设置" + }, "advancedOptions": { "label": "高级选项", "title": "高级项目选项" }, "field": { "integrations": { - "label": "集成" + "label": "集成", + "removeLabel": "移除 {name} 集成" }, "title": { "label": "标题" @@ -1704,17 +2206,18 @@ } }, "remove": { - "title": "删除项目", "message": "你确定要删除这个项目吗?" + }, + "advancedFocus": { + "open": "打开高级视图", + "close": "关闭高级视图", + "label": "{widget} 高级视图" } }, "widget": { "integrationSelect": { "configureIntegrationFirst": "请先连接一个集成", - "loading": "加载中...", - "placeholder": "选择一个选项", - "noResults": "未找到结果", - "loadError": "加载选项失败" + "placeholder": "选择一个选项" }, "app": { "name": "应用", @@ -1723,9 +2226,6 @@ "appId": { "label": "选择应用" }, - "openInNewTab": { - "label": "在新标签页中打开" - }, "showTitle": { "label": "显示应用名称" }, @@ -1733,11 +2233,8 @@ "label": "启用状态检查" }, "layout": { - "label": "布局", "option": { - "row": "水平", "row-reverse": "水平(反向)", - "column": "垂直", "column-reverse": "垂直(反向)" } }, @@ -1762,23 +2259,60 @@ "name": "书签", "description": "显示多个应用链接", "option": { - "title": { - "label": "标题" + "showTitle": { + "label": "显示小部件标题" + }, + "titleSize": { + "label": "小部件标题大小 (px)" }, "layout": { "label": "显示布局", "option": { - "row": { - "label": "横向" - }, - "column": { - "label": "垂直" - }, - "grid": { - "label": "网格" + "adaptive": { + "label": "自适应模式" }, "gridHorizontal": { "label": "水平网格" + }, + "icons": { + "label": "图标" + } + } + }, + "variant": { + "label": "外观", + "option": { + "soft": { + "label": "软体" + }, + "filled": { + "label": "填充" + }, + "outline": { + "label": "轮廓" + }, + "plain": { + "label": "纯色" + } + } + }, + "spacing": { + "label": "卡片间距", + "option": { + "xs": { + "label": "超小的" + }, + "sm": { + "label": "小" + }, + "md": { + "label": "中" + }, + "lg": { + "label": "大" + }, + "xl": { + "label": "超大" } } }, @@ -1791,17 +2325,28 @@ "hideHostname": { "label": "隐藏主机名" }, - "openNewTab": { - "label": "在新标签页中打开" - }, "withBorder": { "label": "显示边框" }, + "grow": { + "label": "展开卡片填充行" + }, + "customUrls": { + "label": "自定义链接" + }, "items": { "label": "书签", - "add": "添加书签" + "remove": "删除书签", + "apps": { + "label": "添加书签", + "description": "粘贴URL或找到现有应用。拖动下面的书签来重新排序。", + "placeholder": "粘贴URL或搜索应用程序", + "addUrl": "添加此 URL", + "hint": "按下 Enter 添加一个 URL。粘贴逗号分隔或单行URL来添加几个。" + } } - } + }, + "empty": "在小部件设置中添加 URL 或应用程序" }, "archiveTeamWarrior": { "name": "ArchiveTeam Warrior", @@ -1810,33 +2355,61 @@ "showBroadcastMessage": { "label": "显示广播消息" } + }, + "noProjectSelected": "没有选择项目", + "runnerStatus": "运行器:{status}", + "projectId": "项目:{id}", + "sessionReceived": "已接收会话:{value}", + "sessionSent": "已发送会话:{value}", + "sessionId": "会话:{id}", + "startedAt": "开始于 {date}", + "emptyItems": "在这个快照中没有活动或最近任务", + "metric": { + "running": "运行中", + "completed": "完成", + "failed": "失败", + "canceled": "已取消", + "download": "下载", + "upload": "上传" + }, + "status": { + "running": "运行中", + "completed": "已完成", + "failed": "失败", + "canceled": "已取消", + "stopped": "已停止", + "idle": "空闲", + "unknown": "未知" + } + }, + "wud": { + "name": "What's Up Docker", + "description": "显示有多少个已监控的容器有可用更新。", + "title": "What's Up Docker", + "monitored": "已监控", + "updatesAvailable": "{count, plural, one {# 个更新可用} other {# 个更新可用}}", + "updateAvailable": "有可用更新", + "openReleaseNotes": "打开发布说明", + "option": { + "showRing": { + "label": "显示更新进度环" + }, + "showUpdateList": { + "label": "显示容器更新列表", + "description": "列出每个有镜像更新可用的已监控容器" + } } }, "dnsHoleSummary": { "name": "DNS Hole 摘要", "description": "显示 DNS Hole 的摘要", "option": { - "layout": { - "label": "显示布局", - "option": { - "row": { - "label": "横向" - }, - "column": { - "label": "垂直" - }, - "grid": { - "label": "网格" - } - } - }, "usePiHoleColors": { "label": "使用 Pi-Hole 颜色" } }, "error": { - "internalServerError": "获取 DNS Hole 摘要失败", - "integrationsDisconnected": "没有可用的数据,所有集成已断开" + "internalServerError": "获取 DNS Hole 摘要失败" }, "data": { "adsBlockedToday": "今日屏蔽", @@ -1844,32 +2417,24 @@ "dnsQueriesToday": "今日查询", "domainsBeingBlocked": "黑名单上的域" }, - "domainsTooltip": "由于多个集成,Homarr 无法计算被阻止的域的准确数量" + "domainsTooltip": "由于多个集成,Homarr 无法计算被阻止的域的准确数量", + "status": { + "enabled": "启用", + "disabled": "已禁用", + "unknown": "未知" + } }, "dnsHoleControls": { "name": "DNS Hole 控制", "description": "从您的面板控制 PiHole 或 AdGuard", "option": { - "layout": { - "label": "显示布局", - "option": { - "row": { - "label": "横向" - }, - "column": { - "label": "垂直" - }, - "grid": { - "label": "网格" - } - } - }, "showToggleAllButtons": { "label": "显示全部按钮" } }, "error": { - "internalServerError": "无法控制 DNS Hole" + "internalServerError": "无法控制 DNS Hole", + "bulkActionsFailed": "{count, plural, one {# 操作失败} other {# 操作失败}}" }, "controls": { "enableAll": "全部启用", @@ -1880,8 +2445,6 @@ "disabled": "已禁用", "processing": "处理中", "disconnected": "网络连线中断", - "hours": "时", - "minutes": "分", "unlimited": "留空表示无限制" } }, @@ -1893,16 +2456,10 @@ "label": "自定义标题/城市显示", "description": "在时钟上显示自定义的标题或城市/国家的名称。" }, - "customTitle": { - "label": "标题" - }, "is24HourFormat": { "label": "24 小时制", "description": "使用24小时格式代替12小时格式" }, - "showSeconds": { - "label": "显示秒数" - }, "useCustomTimezone": { "label": "使用固定时区" }, @@ -1921,29 +2478,295 @@ "label": "自定义时间格式", "description": "使用 ISO 8601 格式化时间 (这将覆盖其他选项)" }, - "customDateFormat": { - "label": "自定义日期格式", - "description": "使用 ISO 8601 格式化日期(这将覆盖其他选项)" - }, "showWeather": { "label": "显示天气", "description": "在卡片角落显示一个小型动画天气图标和温度" }, - "weatherLocation": { - "label": "天气位置" - }, "isWeatherFormatFahrenheit": { "label": "使用华氏度" + }, + "animateWeatherIcon": { + "label": "动态天气图标", + "description": "动画天气图标。默认禁用,并在请求减少移动时始终禁用。" + }, + "colorWeatherByDayNight": { + "label": "日间/夜间天气颜色", + "description": "使用白天颜色或夜色显示天气图标和温度, 基于是当前的日间还是夜间在选定的位置。" + }, + "dayWeatherColor": { + "label": "日颜色" + }, + "nightWeatherColor": { + "label": "夜间颜色" + }, + "worldClockCities": { + "label": "世界时钟城市", + "description": "添加和订购最多6个城市高级视图。" } + }, + "timezoneList": { + "timezone": "时区", + "cityLabel": "城市标签", + "searchPlaceholder": "搜索时区", + "noResults": "未找到时区", + "unsupportedOption": "不支持:{timeZone}", + "add": "添加城市", + "remove": "移除 {city}", + "reorder": "重新排列 {city}", + "limit": "已配置 {count}/{maximum} 个城市" + }, + "worldClock": { + "primary": "主要时钟", + "local": "本地时间", + "today": "今天", + "tomorrow": "明天", + "yesterday": "昨日", + "noSecondaryCities": "在小部件选项中添加城市来比较它们。", + "unsupportedPrimaryTitle": "主时区不可用", + "unsupportedPrimary": "此浏览器不支持 {timeZone}。将显示 UTC 作为明确标记的备用时区。", + "unsupportedTimeZone": "不支持的时区:{timeZone}", + "accessibleTime": "{city}:{time},{date},{timeZone}", + "advancedLabel": "高级世界时钟", + "cities": "世界时钟", + "cityCount": "{count} timezones", + "timeBarLabel": "{city} 的 24 小时制时间位置", + "dayProgress": "已过去 {percent}% · 剩余 {hours} 小时 {minutes} 分钟", + "phaseLegend": "每日时间说明", + "tick": { + "midnight": "00", + "morning": "06", + "noon": "12", + "evening": "18", + "end": "24" + }, + "phaseRange": { + "night": "00–05 · 21–24", + "dawn": "05–08", + "day": "08–18", + "dusk": "18–21" + }, + "phase": { + "night": "晚间", + "dawn": "黎明省", + "day": "日", + "dusk": "杜斯克" + } + } + }, + "airQuality": { + "name": "空气质量 & UV", + "description": "显示空气质量、紫外线指数、污染物和长花。", + "option": { + "location": { + "label": "空气质量位置" + }, + "aqiStandard": { + "label": "AQI 标准", + "options": { + "auto": "自动为区域设置", + "european": "欧洲AQI", + "us": "美国AQI" + } + }, + "showUv": { + "label": "显示 UV 索引" + }, + "showPollutants": { + "label": "显示污染物的浓度" + }, + "showPollen": { + "label": "显示Pollen浓度值" + } + }, + "category": { + "good": "好", + "fair": "公平的", + "moderate": "中度", + "unhealthySensitive": "敏感群组不健康", + "unhealthy": "不健康", + "poor": "差的", + "veryPoor": "极度贫穷", + "veryUnhealthy": "非常不健康", + "extremelyPoor": "极端贫穷", + "hazardous": "危险", + "unknown": "没有读取 AQI" + }, + "uv": { + "label": "紫外线索引", + "category": { + "low": "低", + "moderate": "中度", + "high": "高", + "veryHigh": "非常高", + "extreme": "极限", + "unknown": "无读" + } + }, + "dominantPollutant": "Dominant pollutant", + "aqiLabel": "AQI", + "strongestPollen": "最高分数", + "unit": { + "concentration": "{value} µg/m³", + "pollen": "{value} 花粉粒/m³" + }, + "pollutant": { + "pm2_5": "PM2.5", + "pm10": "PM10", + "ozone": "Ozone", + "nitrogenDioxide": "二氧化氮(二氧化氮)", + "sulphurDioxide": "Sulphur dioxide", + "carbonMonoxide": "一氧化碳量" + }, + "pollen": { + "alder": "Alder", + "birch": "鸟类", + "grass": "草地", + "mugwort": "Mugwort", + "olive": "橄榄色", + "ragweed": "已断开" + }, + "compact": { + "sixHourTrend": "随后六小时内AQI趋势" + }, + "advanced": { + "observedAt": "更新于 {time}", + "next24Hours": "24小时后", + "pollutants": "污染物的浓度:", + "pollen": "Pollen浓度:", + "sevenDayForecast": "7天最大预测", + "aqiValue": "AQI {value}", + "uvValue": "UV {value}", + "uvShort": "UV {value}", + "noForecast": "没有可用的预报数据" + } + }, + "countdown": { + "name": "倒计时", + "description": "跟踪即将到来的事件和经常发生的周年纪念日。", + "option": { + "events": { + "label": "事件", + "description": "添加和订购最多20次一次性或每年倒计时。日期是在选定的时区中输入的。" + }, + "showProgress": { + "label": "显示进度" + }, + "showSeconds": { + "label": "显示秒数", + "description": "为即将发生的事件保留秒数。" + } + }, + "dateTimeEventList": { + "newEvent": "新建事件", + "add": "添加事件", + "remove": "移除 {event}", + "reorder": "重新排列 {event}", + "eventLabel": "事件标签", + "timezone": "时区", + "unsupportedOption": "不支持:{timeZone}", + "recurrence": "重复", + "recurrenceOption": { + "none": "不重复", + "yearly": "每年" + }, + "target": "活动日期和时间", + "trackProgress": "从开始日期跟踪进度", + "start": "进度开始日期和时间", + "confirmDateTime": "确认日期和时间", + "limit": "已配置 {count}/{maximum} 个事件" + }, + "empty": { + "title": "还没有倒计时", + "description": "在小部件选项中添加一个事件开始计数。" + }, + "completed": "已完成", + "yearly": "每年一次", + "progress": "事件进度", + "upcoming": "即将到来的", + "completedEvents": "已完成的活动", + "invalid": { + "title": "某些事件不能显示", + "description": "{count, plural, one {一个事件的日期无效或不支持的时区。} other {# 事件的日期无效或不支持的时区}}", + "value": "Unavailable" + }, + "alert": { + "notifications": "浏览器通知", + "permissionDenied": "通知在本浏览器中被阻止。", + "reached": "倒计时已达到目标。" + } + }, + "timer": { + "name": "Timer / Pomodoro", + "description": "运行一个简单的计时器或一个可配置的番茄序。", + "option": { + "mode": { + "label": "模式", + "options": { + "timer": "定时器", + "pomodoro": "Pomodoro" + } + }, + "timerMinutes": { + "label": "计时器分钟" + }, + "focusMinutes": { + "label": "聚焦分钟" + }, + "shortBreakMinutes": { + "label": "短休息分钟" + }, + "longBreakMinutes": { + "label": "长休息分钟" + }, + "sessionsBeforeLongBreak": { + "label": "长休息之前的聚焦会话" + }, + "autoStartBreaks": { + "label": "自动开始换行" + }, + "autoStartFocus": { + "label": "自动启动焦点会话" + } + }, + "phase": { + "timer": "定时器", + "focus": "聚焦点", + "shortBreak": "短暂休息时间", + "longBreak": "长课间休息时间" + }, + "action": { + "start": "开始", + "pause": "暂停", + "reset": "Reset" + }, + "attention": { + "timerComplete": "Timer complete", + "phaseReady": "{phase} 已就绪" + }, + "progress": "计时器进度:{progress}%", + "compact": { + "completedFocus": "{count, plural, =0 {没有焦点会话完成} one {# 焦点会话完成} other {# 焦点会话完成}}" + }, + "alert": { + "title": "Timer complete", + "completed": "{phase} 已完成。" + }, + "advanced": { + "sequence": "Pomodoro sequence", + "focusSession": "专注于 {session}", + "settings": "永久设置", + "settingsHint": "使用小部件上下文菜单编辑这些棋盘设置。", + "localAlerts": "本地警报", + "notifications": "浏览器通知", + "sound": "计时器声音", + "localAlertsHint": "默认情况下启用计时器声音。声音和通知仅适用于此浏览器中的这个部件。", + "notificationsDenied": "通知在本浏览器中被阻止。" } }, "minecraftServerStatus": { "name": "Minecraft 服务状态", "description": "显示 Minecraft 服务器状态", "option": { - "title": { - "label": "标题" - }, "domain": { "label": "服务器地址" }, @@ -1963,11 +2786,21 @@ "noStation": "未选择车站", "option": { "baseUrl": { - "label": "Search.ch URL" + "label": "Search.ch URL", + "description": "自定义 URLs 必须解析为一个公共IP地址。私有和本地主机被拒绝。" }, "station": { - "label": "车站" + "label": "车站", + "placeholder": "搜索站" } + }, + "error": { + "customSourceUnavailable": "时间表源不可用。请检查其URL是否已解析为公共IP地址。", + "stationSearch": "无法搜索站点。请检查自定义URL和您的看板访问权限。" + }, + "warning": { + "stale": "无法刷新时刻表。显示上次于 {time} 更新的出发信息。", + "staleCompact": "旧数据" } }, "notebook": { @@ -1999,6 +2832,9 @@ "directionRtl": "设置文字方向为从右到左", "blockquote": "引用", "horizontalLine": "横线", + "details": "切换可折叠部分", + "expandDetails": "展开可折叠部分", + "collapseDetails": "折叠可折叠部分", "bulletList": "符号列表", "orderedList": "顺序列表", "checkList": "检查列表", @@ -2007,16 +2843,20 @@ "link": "链接", "unlink": "删除链接", "image": "嵌入图片", - "addTable": "添加表格", + "insertTable": "插入表", + "insertTableSize": "插入 {columns} × {rows} 表格", "deleteTable": "删除表格", "colorCell": "单元格颜色", - "mergeCell": "切换单元格合并", + "mergeCells": "合并单元格", + "splitCell": "分割单元格", "addColumnLeft": "在前面添加列", "addColumnRight": "在后面添加列", "deleteColumn": "删除整列", "addRowTop": "在前面添加行", "addRowBelow": "在后面添加行", - "deleteRow": "删除整行" + "deleteRow": "删除整行", + "toggleHeaderRow": "切换头部行", + "toggleHeaderColumn": "切换头部列" }, "align": { "left": "左边", @@ -2027,8 +2867,6 @@ "clearColor": "清除颜色", "source": "来源", "widthPlaceholder": "百分比或像素值", - "columns": "列数", - "rows": "行数", "width": "宽度", "height": "高度" }, @@ -2040,7 +2878,9 @@ "discard": "放弃修改", "keepEditing": "继续编辑" } - } + }, + "saveFailed": "无法保存笔记", + "documentStats": "{words, plural, one {# 单词} other {# 单词}} · {characters, plural, one {# 字符} other {# 字符}}" }, "anchorNote": { "name": "锚点笔记", @@ -2049,9 +2889,6 @@ "noteId": { "label": "笔记" }, - "showTitle": { - "label": "显示标题" - }, "showUpdatedAt": { "label": "显示最近更新" } @@ -2061,14 +2898,20 @@ "notFound": "未找到笔记", "noNotes": "未找到笔记", "integrationRequired": "请先选择锚点集成", - "updatedAt": "更新时间:{date}", "untitled": "未命名", - "edit": "编辑", - "save": "保存", - "cancel": "取消", "readOnlyViewer": "您对该笔记只有查看权限,编辑已禁用。", "saveForbidden": "您没有编辑此笔记的权限。", - "saveFailed": "保存此笔记失败,请重试。" + "saveFailed": "保存此笔记失败,请重试。", + "createdAt": "创建于 {date}", + "permission": { + "owner": "所有者", + "editor": "编辑器", + "viewer": "查看器" + }, + "status": { + "pinned": "固定的", + "archived": "已归档" + } }, "iframe": { "name": "iFrame", @@ -2127,6 +2970,25 @@ "clickable": { "label": "可单击" } + }, + "state": { + "on": "开启", + "off": "关闭", + "unavailable": "Unavailable", + "unknown": "未知" + }, + "advanced": { + "entityId": "实体 ID:{id}", + "lastChanged": "更改于 {date}", + "attribute": { + "unit": "单位", + "deviceClass": "设备类", + "icon": "图标" + } + }, + "error": { + "loadFailed": "无法加载实体", + "toggleFailed": "无法更新实体" } }, "smartHome-executeAutomation": { @@ -2142,11 +3004,31 @@ }, "spotlightAction": { "run": "运行 {name}" + }, + "advanced": { + "lastExecuted": "上次运行于 {time}", + "automationId": "自动化 ID:{id}", + "ready": "准备运行", + "noPermission": "没有权限运行此自动化" + }, + "status": { + "running": "自动运行中", + "success": "自动化完成" + }, + "error": { + "executeFailed": "无法运行自动化" } }, "stockPrice": { "name": "股票价格", "description": "显示公司的当前股价", + "advanced": { + "currentPrice": "当前价格", + "previousClose": "上次关闭", + "changePercentage": "更改 (%)", + "minimum": "最小值", + "maximum": "最大值" + }, "option": { "stock": { "label": "股票代码" @@ -2217,6 +3099,10 @@ "label": "1 个月" } } + }, + "showDetails": { + "label": "显示详细信息", + "description": "在紧凑视图中显示名称、更改和时间范围。仅仅为符号和价格关闭。" } } }, @@ -2244,6 +3130,13 @@ "showUnmonitored": { "label": "显示未监视的" } + }, + "advanced": { + "previousMonth": "显示上月", + "nextMonth": "下个月显示", + "eventCount": "{count, plural, one {# 事件} other {# 事件}}", + "loading": "正在加载日历事件...", + "noEvents": "本月无事件" } }, "weather": { @@ -2256,16 +3149,18 @@ "disableTemperatureDecimals": { "label": "禁用温度小数" }, + "animateIcons": { + "label": "动态天气图标" + }, + "showHumidity": { + "label": "显示湿度" + }, "showCurrentWindSpeed": { - "label": "显示当前风速", - "description": "仅在当前天气时" + "label": "显示当前风速" }, "useImperialSpeed": { "label": "风速使用英里/时" }, - "location": { - "label": "天气位置" - }, "showCity": { "label": "显示城市" }, @@ -2275,13 +3170,10 @@ "forecastDayCount": { "label": "预报天数", "description": "当小组件宽度不足时,显示的天数会减少" - }, - "dateFormat": { - "label": "日期格式", - "description": "日期应该是什么样的" } }, "currentWindSpeed": "{currentWindSpeed} {unit}", + "disabled": "由于禁用出站连接,天气数据不可用", "dailyForecast": { "sunrise": "日出", "sunset": "日落", @@ -2304,6 +3196,47 @@ "thunderstorm": "雷暴", "thunderstormWithHail": "雷暴夹冰雹", "unknown": "未知" + }, + "details": "显示天气详细信息", + "detailsFor": "显示 {date} 的天气详情", + "advanced": { + "forecast": "7天预测", + "hourlyForecast": "24小时后", + "day": "日", + "time": "时间", + "conditions": "条件", + "temperature": "温度", + "feelsLike": "体感温度 {temperature}", + "feelsLikeLabel": "感觉像", + "feelsLikeRange": "体感温度:{maximum} / {minimum}", + "highLow": "最高 {maximum} · 最低 {minimum}", + "observedAt": "更新于 {time}", + "humidity": "湿度", + "averageHumidity": "平均湿度:{humidity}%", + "currentHumidity": "当前湿度", + "wind": "风速 / 阵风({unit})", + "currentWind": "当前风力/风量", + "windValue": "{speed} / {gusts} {unit}", + "windDetail": "最大风速 / 阵风:{speed} / {gusts} {unit}", + "nextHourPrecipitation": "下一个小时降水量", + "precipitationChance": "降水几率", + "precipitationValue": "{probability}% · {amount} 毫米", + "precipitationDetail": "降水:{probability}% · {amount} mm", + "todayUv": "今日最大UV指数", + "uvIndex": "最高 UV 指数:{value}", + "daylight": "日照时长:{duration}", + "hourlyTooltip": "体感温度 {feelsLike}{temperatureUnit} · {amount} mm · 湿度 {humidity}% · 风速 {speed} {speedUnit}", + "hourlyTooltipWithoutHumidity": "体感温度 {feelsLike}{temperatureUnit} · {amount} mm · 风速 {speed} {speedUnit}", + "detailLabel": { + "feelsLike": "感觉像", + "precipitation": "降水", + "humidity": "平均湿度", + "wind": "最大风/风暴数", + "uv": "最大紫外线索引", + "daylight": "Daylight" + }, + "sun": "日出/日落数", + "noForecast": "没有可用的预报数据" } }, "indexerManager": { @@ -2316,8 +3249,15 @@ }, "title": "索引器管理", "testAll": "测试全部", + "status": { + "healthy": "健康", + "unhealthy": "不健康", + "disabled": "禁用", + "unknown": "健康不可用" + }, "error": { - "internalServerError": "获取索引器状态失败" + "internalServerError": "获取索引器状态失败", + "testAll": "索引器测试失败。请重试。" } }, "healthMonitoring": { @@ -2346,11 +3286,6 @@ "fileSystem": { "label": "显示文件系统信息" }, - "visibleStorageVolumes": { - "label": "可见存储卷", - "description": "仅当所有选定的集成都是 Synology 时可用。留空以显示所有检测到的存储卷。", - "placeholder": "选择存储卷" - }, "defaultTab": { "label": "默认标签" }, @@ -2373,17 +3308,27 @@ "minutes": "{count} 分钟", "used": "已使用", "available": "可用", - "lastSeen": "最近状态更新:{lastSeen}" + "lastSeen": "最近状态更新:{lastSeen}", + "updatesAvailable": "{count, plural, one {# 个更新可用} other {# 个更新可用}}", + "rebootRequired": "需要重启", + "rebootNotRequired": "无需重启" + }, + "smartStatus": { + "attributesWithinThresholds": "SMART:阈值内的属性", + "attributesFailed": "SMART:{attributes} 失败", + "noCriticalWarning": "SMART:SSD 没有报告任何警告", + "criticalWarning": "SMART:SSD 报告的临界警告" + }, + "gauge": { + "cpuUsage": "CPU 利用率", + "cpuTemperature": "CPU 温度", + "memoryUsage": "内存占用率", + "gpuUsage": "{name} GPU 使用率" }, - "memory": {}, "error": { "internalServerError": "获取健康状态失败" }, "cluster": { - "summary": { - "cpu": "处理器", - "memory": "内存" - }, "resource": { "node": { "name": "节点" @@ -2419,8 +3364,6 @@ "table": { "header": { "name": "名称", - "cpu": "处理器", - "memory": "内存", "node": "节点" } } @@ -2430,33 +3373,29 @@ "name": "Docker 状态", "description": "容器的统计信息(此小组件仅管理员权限可添加)", "option": { - "columns": { - "label": "要显示的列" + "endpointIds": { + "label": "停靠环境", + "description": "留空显示每个停靠环境中的容器", + "placeholder": "所有停靠环境" }, - "enableRowSorting": { - "label": "启用项目排序" + "containerFilter": { + "label": "要过滤的容器" + }, + "filterIsWhitelist": { + "label": "以白名单过滤" }, "defaultSort": { - "label": "默认排序列", "option": { "name": "名称", "state": "状态", "cpuUsage": "CPU 利用率", "memoryUsage": "内存占用率" } - }, - "descendingDefaultSort": { - "label": "倒序" - }, - "columnOrder": { - "label": "列顺序" - }, - "columnWidths": { - "label": "列宽" } }, "error": { "internalServerError": "获取容器统计信息失败", + "endpointsUnavailable": "停靠端点不可用", "layoutSaveTitle": "表格布局未保存", "layoutSaveMessage": "Docker 表格布局无法保存。请再次尝试移动或调整列宽。" }, @@ -2465,7 +3404,6 @@ } }, "coolify": { - "name": "Coolify", "description": "您的 Coolify 实例及其服务器和应用一览", "option": { "showServers": { @@ -2491,17 +3429,49 @@ "internalServerError": "获取 Coolify 数据失败" }, "server": { - "buildServer": "编译" + "buildServer": "编译", + "resourceCounts": "{applications, plural, one {# 应用程序} other {# 应用程序}} / {services, plural, one {# 服务} other {# 服务}}", + "reachability": "可达性", + "usability": "可用性" + }, + "source": { + "url": "来源:{url}", + "unavailable": "{source}: unavailable" }, "instances": { "title": "实例" + }, + "action": { + "openResource": "打开 {name}", + "openLogs": "打开 {name} 日志", + "showIp": "显示 IP 地址", + "hideIp": "隐藏IP地址" + }, + "status": { + "running": "运行中", + "stopped": "已停止", + "exited": "已退出", + "starting": "正在启动", + "restarting": "正在重启", + "unknown": "未知", + "online": "在线", + "offline": "离线", + "reachable": "可访问", + "unreachable": "无法访问", + "usable": "可用的", + "unusable": "不可用" } }, "vpn": { "name": "VPN", "description": "您的 VPN 连接概览", "serviceUnavailable": "VPN 不可用", - "option": {} + "status": { + "running": "运行中", + "notRunning": "未运行", + "unavailable": "Unavailable", + "vpn": "VPN:{status}" + } }, "ups": { "name": "UPS", @@ -2528,14 +3498,19 @@ "runtime": "运行时间", "load": "负载", "input": "输入", - "output": "输出" + "output": "输出", + "batteryVoltage": "电池电压", + "power": "战斗力", + "temperature": "温度", + "manufacturer": "制造商", + "model": "模型", + "serial": "序列号" }, "error": { "internalServerError": "获取 UPS 数据失败" } }, "tracearr": { - "name": "Tracearr", "description": "增强型媒体服务器监控,提供详细的流与转码数据", "option": { "showStreams": { @@ -2623,10 +3598,7 @@ "label": "事件", "description": "显示特定事件的总发生次数", "placeholder": "选择一个事件", - "loading": "正在加载事件……", - "noEvents": "未找到事件", - "none": "无事件", - "configureWebsiteFirst": "请先选择网站以加载事件" + "none": "无事件" }, "chartType": { "label": "图表类型", @@ -2657,26 +3629,21 @@ "eventNames": { "label": "事件", "description": "选择一个或多个要图表化的事件", - "placeholder": "选择事件……", - "loading": "正在加载事件……", - "noEvents": "未找到事件", - "configureWebsiteFirst": "请先选择网站以加载事件" + "placeholder": "选择事件……" }, "topCount": { "label": "显示数量", "description": "要显示的热门项目数量(最大 500)" + }, + "events": { + "loading": "正在加载事件……", + "noEvents": "未找到事件", + "configureWebsiteFirst": "请先选择网站以加载事件" } }, "event": { - "occurrences": "事件", "label": "事件" }, - "topPages": { - "direct": "直接" - }, - "topReferrers": { - "direct": "直接" - }, "events": { "selectPrompt": "选择要图表化的事件" }, @@ -2685,6 +3652,9 @@ "noWebsite": "未配置网站", "noData": "无可用数据", "internalServerError": "获取 Umami 数据失败" + }, + "top": { + "direct": "直接" } }, "common": { @@ -2712,7 +3682,8 @@ }, "integration": { "noData": "没有找到集成", - "description": "点击 创建一个新的集成" + "description": "点击 创建一个新的集成", + "manage": "管理集成" }, "app": { "noData": "未找到应用", @@ -2723,7 +3694,61 @@ "noIntegration": "未选择集成", "noData": "没有可用的集成数据" }, - "option": {} + "integrationDisconnected": "没有可用的数据,所有集成已断开", + "updatedAt": "更新时间:{date}", + "title": { + "label": "标题" + }, + "openInNewTab": { + "label": "在新标签页中打开" + }, + "showTitle": { + "label": "显示标题" + }, + "weatherLocation": { + "label": "天气位置" + }, + "layout": { + "label": "布局", + "option": { + "horizontal": "水平", + "vertical": "垂直", + "grid": "网格" + } + }, + "select": { + "loading": "加载中……", + "loadError": "加载选项失败" + }, + "dateFormat": { + "label": "日期格式", + "description": "日期应该是什么样的" + }, + "visibleStorageVolumes": { + "label": "可见存储卷", + "description": "只有当每个选定的集成都是 OpenMediaVault 或 Synology时才可用。留空则显示所有检测到的存储卷。", + "placeholder": "选择存储卷" + }, + "tableOptions": { + "columns": { + "label": "要显示的列" + }, + "columnOrder": { + "label": "列顺序" + }, + "columnWidths": { + "label": "列宽" + }, + "enableRowSorting": { + "label": "启用项目排序" + }, + "defaultSort": { + "label": "默认排序列" + }, + "invertSorting": { + "label": "倒序" + } + } }, "video": { "name": "视频流", @@ -2782,6 +3807,7 @@ "transcoding": "转码中", "paused": "已暂停", "remaining": "剩余 {minutes} 分钟", + "seasonEpisode": "S{season} E{episode}", "metadata": { "title": "技术统计", "video": { @@ -2799,11 +3825,16 @@ "resolution": "分辨率", "target": "目标编解码器" } - } + }, + "unknownUser": "未知用户" + }, + "summary": { + "sessions": "{count, plural, one {# 会话} other {# 会话}}", + "playing": "{count} 个正在播放", + "transcoding": "{count} 个正在转码" } }, "paperlessNgx": { - "name": "Paperless-ngx", "description": "Paperless-ngx 文档存档概览", "documentsTotal": "文档总数", "documentsInbox": "收件箱", @@ -2848,7 +3879,6 @@ } }, "patchmon": { - "name": "PatchMon", "description": "来自 PatchMon 的主机补丁状态概览", "title": "PatchMon 统计信息", "totalHosts": "主机总数", @@ -2915,36 +3945,30 @@ "description": "将“需要更新”的数量以绝对数值或占主机总数的百分比方式进行比较" }, "hostsNeedingUpdatesWarningAt": { - "label": "需要更新警告阈值", - "description": "当值达到此阈值时显示黄色" + "label": "需要更新警告阈值" }, "hostsNeedingUpdatesCriticalAt": { - "label": "需要更新临界阈值", - "description": "当值达到此阈值时显示红色" + "label": "需要更新临界阈值" }, "securityUpdatesThresholdMode": { "label": "安全更新阈值模式", "description": "将安全更新计数作为绝对值或总主机数的百分比进行比较" }, "securityUpdatesWarningAt": { - "label": "安全更新警告阈值", - "description": "当值达到此阈值时显示黄色" + "label": "安全更新警告阈值" }, "securityUpdatesCriticalAt": { - "label": "安全更新临界阈值", - "description": "当值达到此阈值时显示红色" + "label": "安全更新临界阈值" }, "hostsWithSecurityUpdatesThresholdMode": { "label": "有安全更新的主机阈值模式", "description": "将主机计数作为绝对值或总主机数的百分比进行比较" }, "hostsWithSecurityUpdatesWarningAt": { - "label": "有安全更新的主机警告阈值", - "description": "当值达到此阈值时显示黄色" + "label": "有安全更新的主机警告阈值" }, "hostsWithSecurityUpdatesCriticalAt": { - "label": "有安全更新的主机临界阈值", - "description": "当值达到此阈值时显示红色" + "label": "有安全更新的主机临界阈值" }, "upToDateHostsThresholdMode": { "label": "最新主机阈值模式", @@ -2963,12 +3987,10 @@ "description": "将过期包计数作为绝对值或总主机数的百分比进行比较" }, "totalOutdatedPackagesWarningAt": { - "label": "过期包警告阈值", - "description": "当值达到此阈值时显示黄色" + "label": "过期包警告阈值" }, "totalOutdatedPackagesCriticalAt": { - "label": "过期包临界阈值", - "description": "当值达到此阈值时显示红色" + "label": "过期包临界阈值" }, "showOsDistribution": { "label": "显示操作系统分布", @@ -2999,6 +4021,14 @@ "bars": "水平条形图", "donut": "环形图" } + }, + "threshold": { + "warningAt": { + "description": "当值达到此阈值时显示黄色" + }, + "criticalAt": { + "description": "当值达到此阈值时显示红色" + } } }, "error": { @@ -3006,12 +4036,12 @@ } }, "bazarr": { - "name": "Bazarr", "description": "来自您 Bazarr 实例的缺失字幕和健康状态概览", "episodes": "缺失剧集", "movies": "缺失电影", "providers": "提供商问题", "status": "健康问题", + "announcements": "通知", "option": { "showMissingEpisodes": { "label": "显示缺失剧集", @@ -3058,7 +4088,8 @@ "users": "用户", "photos": "照片", "videos": "视频", - "storage": "已用存储" + "storage": "已用存储", + "albumLimit": "最大的专辑(最多显示 {count} 个)" }, "immich-albumCarousel": { "name": "Immich 相册", @@ -3082,24 +4113,21 @@ } }, "description": "来自 Immich 相册或整个图库的照片幻灯片展示", - "noPhotos": "未找到照片" + "noPhotos": "未找到照片", + "albumPhoto": "相册照片", + "actions": { + "previousPhoto": "上一张照片", + "nextPhoto": "下一张照片", + "pauseSlideshow": "Pause slideshow", + "resumeSlideshow": "恢复幻灯片", + "toggleSlideshow": "暂停或恢复幻灯片", + "photo": "照片 {number}" + } }, "downloads": { "name": "下载客户端", "description": "允许您查看和管理来自Torrent 和 Usenet 客户端的下载。", "option": { - "columns": { - "label": "显示的列" - }, - "enableRowSorting": { - "label": "启用项目排序" - }, - "defaultSort": { - "label": "默认排序列" - }, - "descendingDefaultSort": { - "label": "倒序" - }, "showCompletedUsenet": { "label": "显示标记为已完成的 usenet 条目" }, @@ -3124,12 +4152,6 @@ "limitPerIntegration": { "label": "限制每个集成的项目", "description": "这将限制每个集成显示的项目数量,而不是全局项目" - }, - "columnOrder": { - "label": "列顺序" - }, - "columnWidths": { - "label": "列宽" } }, "errors": { @@ -3160,7 +4182,7 @@ "detailsTitle": "客户端中的当前索引" }, "id": { - "columnTitle": "ID", + "columnTitle": "项目 ID", "detailsTitle": "项目 ID" }, "integration": { @@ -3290,6 +4312,10 @@ "mediaRequests-requestList": { "name": "媒体请求列表", "description": "查看 Overr 或 Jellyseerr 实例中的所有媒体请求列表", + "empty": { + "title": "尚无媒体请求", + "description": "搜索电影或显示开始请求。" + }, "option": { "linksTargetNewTab": { "label": "在新标签页中打开链接" @@ -3323,12 +4349,16 @@ "failed": "失败", "completed": "已完成" }, + "unknown": "未知", "toBeDetermined": "待定" }, "mediaRequests-requestStats": { "name": "媒体请求状态", "description": "您的媒体请求统计", - "option": {}, + "empty": { + "title": "尚无请求活动", + "description": "统计信息将在第一个媒体请求后显示。" + }, "titles": { "stats": { "main": "媒体统计", @@ -3338,8 +4368,7 @@ "declined": "已拒绝", "available": "已可用", "tv": "电视请求", - "movie": "电影请求", - "total": "请求总计" + "movie": "电影请求" }, "users": { "main": "用户排行", @@ -3365,7 +4394,6 @@ }, "currentIndex": "{total} 的 {start}-{end}", "healthCheck": { - "title": "健康检查", "queued": "排队中", "status": { "healthy": "健康", @@ -3374,35 +4402,30 @@ }, "panel": { "statistics": { - "empty": "空", - "transcodes": "转码", - "transcodesCount": "转码", - "healthChecksCount": "健康检查", "filesCount": "文件", "savedSpace": "节省空间", - "healthChecks": "健康检查", "videoCodecs": "编码", "videoContainers": "容器", "videoResolutions": "分辨率" }, "workers": { - "empty": "空", "table": { - "file": "文件", "eta": "剩余时间", - "progress": "进度", - "transcode": "转码", - "healthCheck": "健康检查" + "progress": "进度" } }, "queue": { - "empty": "空", "table": { - "file": "文件", - "size": "大小", - "transcode": "转码", - "healthCheck": "健康检查" + "size": "大小" } + }, + "common": { + "empty": "空", + "file": "文件", + "healthCheck": "健康检查", + "transcode": "转码", + "transcodes": "转码数", + "healthChecks": "健康检查" } } }, @@ -3426,7 +4449,8 @@ }, "type": { "movie": "电影", - "episode": "剧集" + "episode": "剧集", + "book": "书" }, "empty": { "missing": "无缺失项目", @@ -3457,6 +4481,13 @@ "showPosterImage": { "label": "显示封面图" } + }, + "error": { + "allFeedsFailed": "无法加载 RSS 源。请检查feed URL,然后重试。" + }, + "warning": { + "partial": "{count, plural, one {# RSS Feed 无法加载} other {# RSS Feed 无法加载}}", + "stale": "RSS源无法刷新。显示之前加载的条目。" } }, "releases": { @@ -3532,17 +4563,8 @@ "label": "正则表达式" } }, - "edit": { - "label": "编辑" - }, "editForm": { - "title": "编辑仓库", - "cancel": { - "label": "取消" - }, - "confirm": { - "label": "确认" - } + "title": "编辑仓库" }, "importForm": { "title": "从 Docker 导入" @@ -3559,8 +4581,7 @@ "label": "提供商令牌", "token": "令牌", "configured": "令牌已配置", - "notConfigured": "未设置令牌", - "save": "保存" + "notConfigured": "未设置令牌" } } }, @@ -3587,17 +4608,32 @@ "noProviderResponse": "提供者没有响应", "unexpected": "意外的提供商错误" } - } + }, + "expandDetails": "显示 {name} 的详情", + "collapseDetails": "隐藏 {name} 的详情" }, "networkControllerSummary": { - "option": {}, - "card": { - "vpn": { - "countConnected": "{count} 已连接" + "advanced": { + "updated": "已更新", + "metric": { + "latency": "延迟", + "ping": "Ping", + "uptime": "运行时间", + "users": "用户", + "guests": "游客" } }, + "card": { + "vpn": { + "countConnected": "{count, plural, one {# 已连接} other {# 已连接}}", + "label": "VPN" + }, + "wan": "WAN", + "web": "Web", + "wifi": "Wi-Fi", + "lan": "LAN" + }, "error": { - "integrationsDisconnected": "没有可用的数据,所有集成已断开", "unknownContentOption": "网络控制器摘要小组件存在未知的内容选项: " }, "name": "网络控制器概述", @@ -3634,7 +4670,6 @@ } }, "error": { - "integrationsDisconnected": "没有可用的数据,所有集成已断开", "unknownContentOption": "网络状态小组件存在未知的内容选项: " }, "name": "网络状态", @@ -3664,7 +4699,6 @@ "versiontitle": "版本", "cputitle": "CPU 利用率", "memorytitle": "内存占用率", - "cpu": "CPU", "memory": "内存", "interfaces": { "name": "名称", @@ -3672,6 +4706,16 @@ "recv": "已接收", "title": "网络接口" } + }, + "empty": { + "noInterfaces": "尚无网络接口数据" + }, + "versionUnknown": "未知版本", + "metricAccessible": "{metric}:{value}%,{status}", + "status": { + "normal": "普通的", + "warning": "警告", + "critical": "关键的" } }, "notifications": { @@ -3681,8 +4725,21 @@ "option": { "hideLogos": { "label": "隐藏标志" + }, + "messageFormat": { + "label": "消息格式", + "option": { + "auto": "自动的", + "plain": "纯文本", + "markdown": "Markdown", + "html": "HTML" + } } - } + }, + "openService": "打开通知服务", + "deleteNotification": "从 Gotify 删除通知", + "deleteFailed": "无法删除通知", + "deleteFailedMessage": "无法删除通知。请重试。" }, "speedtestTracker": { "name": "网速测试追踪器", @@ -3724,7 +4781,6 @@ } }, "uptimeKuma": { - "name": "Uptime Kuma", "description": "来自 Uptime Kuma 状态页面的运行时间监控统计", "option": { "showAverageUptime": { @@ -3761,10 +4817,14 @@ }, "error": { "internalServerError": "获取运行时间数据失败" + }, + "status": { + "up": "总上传", + "down": "下载速度", + "paused": "已暂停" } }, "traefik": { - "name": "Traefik", "description": "Traefik 路由、服务、中间件和入口点概览", "option": { "showTcp": { @@ -3785,7 +4845,6 @@ }, "resource": { "routers": "路由", - "services": "服务", "middlewares": "中间件" }, "status": { @@ -3795,7 +4854,20 @@ }, "error": { "internalServerError": "获取 Traefik 数据失败" - } + }, + "resourceType": { + "router": "路由器", + "service": "服务", + "middleware": "中间件" + }, + "resourceStatus": { + "enabled": "启用", + "disabled": "禁用", + "warning": "警告", + "error": "错误", + "unknown": "未知" + }, + "failedEndpoint": "失败:{endpoint}" }, "audioStats": { "name": "音频统计信息", @@ -3861,9 +4933,7 @@ "label": "可见图表", "description": "选择您希望显示的图表。", "option": { - "cpu": "CPU", "memory": "内存", - "gpu": "GPU", "network": "网络" } }, @@ -3878,12 +4948,11 @@ } }, "card": { - "cpu": "CPU", "memory": "内存", - "gpu": "GPU", "network": "网络", "up": "上传", - "down": "下载" + "down": "下载", + "memoryTooltip": "{used} / {available}({percent}%)" } }, "systemDisks": { @@ -3909,20 +4978,35 @@ }, "showBackgroundBar": { "label": "显示背景使用栏" - }, - "visibleStorageVolumes": { - "label": "可见存储卷", - "description": "仅当所有选定的集成都是 Synology 时可用。留空以显示所有检测到的存储卷。", - "placeholder": "选择存储卷" } }, "status": { - "unhealthy": "异常" + "unhealthy": "异常", + "smart": "SMART", + "free": "剩余 {percentage}% 可用空间" } }, "customApi": { "name": "自定义 API", "description": "通过自定义配置显示来自任何外部 API 的数据。", + "customJsx": { + "noTemplate": "没有配置 JSX 模板。", + "templateWarnings": "{count} 个模板警告:", + "requestIdRequired": "这个网络控制需要一个命名的请求 Id 。", + "unsavedPreview": "在测试命名请求之前在编辑器中运行初始请求测试。", + "invalidParams": "请求参数无效。", + "loading": "正在加载请求...", + "loadRequest": "加载请求", + "requestFailed": "请求失败。", + "retry": "重试请求", + "actionCompleted": "操作成功完成。", + "actionSimulated": "模拟动作;没有发送请求。", + "actionsDisabledEditMode": "当棋盘处于编辑模式时操作被禁用。", + "widgetItemUnavailable": "此部件项不可用。", + "toggle": "切换键", + "copied": "已复制", + "confirmDelete": "确认此破坏性动作。" + }, "option": { "definitionId": { "label": "定义 ID" @@ -3934,146 +5018,48 @@ }, "noDefinition": "未选择定义", "definitionNotFound": "找不到该小组件,可能已被删除。", - "noDisplayOutput": "无显示输出", - "executeConfirm": "您确定要执行此操作吗?", - "executing": "执行中...", - "executeSuccess": "操作执行成功", - "executeFailed": "操作失败,请检查小组件配置。" + "migrationRequired": "这个旧的自定义小部件被保存,但它必须从管理自定义小部件迁移到自定义 JSX v2 后才能运行。", + "manageMigration": "打开管理自定义部件", + "contactAdmin": "联系管理员。", + "configurationNeedsRepair": "此小部件的选项已更改。编辑小部件以修复其配置。", + "removeFromBoard": "从棋盘中移除", + "editModePending": "保存面板以加载此部件。", + "picker": { + "group": "自定义 JSX 部件", + "empty": "找不到自定义小部件", + "preview": "预览", + "sources": "{count, plural, one {# 源} other {# 源}}", + "requests": "{count, plural, one {# 请求} other {# 请求}}", + "migrationRequired": "需要迁移", + "migrationDescription": "这个放置的v1部件还不能运行。复制它的编辑提示到LLM,然后粘贴单个JSON响应到Homarr。", + "manageMigration": "打开管理自定义部件", + "contactAdmin": "联系管理员。" + }, + "configuration": { + "needsAttention": "配置需要注意:{message}", + "advancedOptions": "高级选项", + "invalidJson": "无效的 JSON" + } }, "beszelSystemTable": { "name": "Beszel 系统(表格)", "description": "所有 Beszel 监控系统的表格视图,包含可排序列和状态指示器", "option": { - "statusFilter": { - "label": "状态筛选" - }, "sortBy": { "label": "排序方式" }, "sortDirection": { "label": "排序方向" - }, - "showCpu": { - "label": "显示 CPU" - }, - "showMemory": { - "label": "显示内存" - }, - "showDisk": { - "label": "显示磁盘" - }, - "showGpu": { - "label": "显示 GPU" - }, - "showLoadAvg": { - "label": "显示平均负载" - }, - "showNet": { - "label": "显示网络" - }, - "showTemp": { - "label": "显示温度" - }, - "showBattery": { - "label": "显示电量" - }, - "showServices": { - "label": "显示服务" - }, - "showUptime": { - "label": "显示运行时间" - }, - "showAgent": { - "label": "显示代理版本" - }, - "columnOrder": { - "label": "列顺序" - }, - "columnWidths": { - "label": "列宽" } }, - "noRecords": "未找到系统", "error": { - "internalServerError": "无法连接到 Beszel。请检查您的集成设置。", "layoutSaveTitle": "无法保存表格布局", "layoutSaveMessage": "您的列顺序或宽度无法保存。请重试。" - }, - "column": { - "system": "系统", - "cpu": "CPU", - "memory": "内存", - "disk": "磁盘", - "gpu": "GPU", - "loadAvg": "平均负载", - "net": "网络", - "temp": "温度", - "battery": "电量", - "services": "服务", - "uptime": "运行时间", - "agent": "代理" } }, "beszelSystemGrid": { "name": "Beszel 系统(网格)", - "description": "所有 Beszel 监控系统的卡片网格视图,包含实时指标", - "option": { - "statusFilter": { - "label": "状态筛选" - }, - "showCpu": { - "label": "显示 CPU" - }, - "showMemory": { - "label": "显示内存" - }, - "showDisk": { - "label": "显示磁盘" - }, - "showGpu": { - "label": "显示 GPU" - }, - "showLoadAvg": { - "label": "显示平均负载" - }, - "showNet": { - "label": "显示网络" - }, - "showTemp": { - "label": "显示温度" - }, - "showBattery": { - "label": "显示电量" - }, - "showServices": { - "label": "显示服务" - }, - "showUptime": { - "label": "显示运行时间" - }, - "showAgent": { - "label": "显示代理版本" - } - }, - "error": { - "internalServerError": "无法连接到 Beszel。请检查您的集成设置。" - }, - "empty": { - "noSystems": "未找到系统" - }, - "metric": { - "cpu": "CPU", - "memory": "内存", - "disk": "磁盘", - "gpu": "GPU", - "loadAvg": "平均负载", - "net": "网络", - "temp": "温度", - "battery": "电量", - "services": "服务", - "uptime": "运行时间", - "agent": "代理" - } + "description": "所有 Beszel 监控系统的卡片网格视图,包含实时指标" }, "beszelAlerts": { "name": "Beszel 告警", @@ -4087,11 +5073,12 @@ } }, "empty": "未配置告警", - "error": { - "internalServerError": "无法连接到 Beszel。请检查您的集成设置。" - }, "history": "历史记录", "resolved": "已解决", + "alertDescription": { + "statusDuration": "已关闭 {minutes} 分钟", + "threshold": "在 {minutes} 分钟内超过 {value}" + }, "status": { "triggered": "已触发", "ok": "正常" @@ -4138,16 +5125,16 @@ "noSystems": "未找到系统" }, "error": { - "internalServerError": "无法连接到 Beszel。请检查您的集成设置。", "liveConnectionFailed": "实时连接失败。您的 Beszel 实例可能不支持实时流。", "switchToHistorical": "切换到历史视图", - "systemNotFound": "未找到所选系统。请选择其他系统。" + "systemNotFound": "未找到所选系统。请选择其他系统。", + "selectionSaveTitle": "无法保存选择", + "selectionSaveMessage": "您的系统或时间段选择无法保存。请重试。" }, "chart": { "cpu": { "title": "CPU 使用率", - "subtitle": "系统整体 CPU 平均使用率", - "series": "CPU" + "subtitle": "系统整体 CPU 平均使用率" }, "memory": { "title": "内存使用率", @@ -4189,6 +5176,95 @@ "title": "Docker 网络 I/O", "subtitle": "Docker 容器的网络流量" } + }, + "period": { + "live": "实时模式", + "oneHour": "1 小时", + "twelveHours": "12小时", + "oneDay": "24 小时", + "oneWeek": "1 周", + "thirtyDays": "30 天" + } + }, + "assistant": { + "name": "助理", + "description": "直接在您的版面上拥有完整的助手对话。", + "unavailable": { + "title": "助理不可用", + "description": "登录并请管理员从管理面板配置助手。" + }, + "compact": { + "title": "助理", + "description": "调整这个小部件的大小以在这里聊天或打开整个对话。", + "open": "打开助手", + "openTitle": "助理在侧面板中打开", + "openDescription": "对话保持在一个活跃的表面。", + "returnToWidget": "返回对话到这个小部件", + "otherWidgetTitle": "在另一个小部件中活动的助手", + "otherWidgetDescription": "每次只有一个对话表面仍然有效。", + "useHere": "在这个部件中使用助手" + } + }, + "beszel": { + "error": { + "internalServerError": "无法连接到 Beszel。请检查您的集成设置。" + }, + "empty": { + "noSystems": "未找到系统" + }, + "options": { + "statusFilter": { + "label": "状态筛选" + }, + "showCpu": { + "label": "显示 CPU" + }, + "showMemory": { + "label": "显示内存" + }, + "showDisk": { + "label": "显示磁盘" + }, + "showGpu": { + "label": "显示 GPU" + }, + "showLoadAvg": { + "label": "显示平均负载" + }, + "showNet": { + "label": "显示网络" + }, + "showTemp": { + "label": "显示温度" + }, + "showBattery": { + "label": "显示电量" + }, + "showServices": { + "label": "显示服务" + }, + "showUptime": { + "label": "显示运行时间" + }, + "showAgent": { + "label": "显示代理版本" + } + }, + "metric": { + "system": "系统", + "source": "集成", + "hostname": "主机名", + "cpuModel": "CPU 模型", + "cores": "核心", + "memoryTotal": "内存总计", + "memory": "内存", + "disk": "磁盘", + "loadAvg": "平均负载", + "net": "网络", + "temp": "温度", + "battery": "电量", + "uptime": "运行时间", + "agent": "代理" } }, "llamacpp": { @@ -4225,7 +5301,7 @@ "speed": "{value} t/s", "parameters": "{value}B", "none": "—", - "speedShort": "t/s" + "speedShort": "/秒" }, "option": { "showTitle": { @@ -4266,37 +5342,384 @@ "specDraftTokens": "投机草稿 Token" } }, - "wud": { - "name": "What's Up Docker", - "description": "显示有多少个已监控的容器有可用更新。", - "title": "What's Up Docker", - "monitored": "已监控", - "updatesAvailable": "{count, plural, one {# 个更新可用} other {# 个更新可用}}", - "updateAvailable": "有可用更新", - "openReleaseNotes": "打开发布说明", + "stats": { + "name": "统计", + "description": "在一个可配置的部件中合并您的集成统计信息。", + "configure": "配置指标", + "refresh": "刷新统计", + "empty": "打开小部件设置,选择集成,然后添加计数。", + "editorHelp": "从为这个部件选择的集成中添加计量。更改将在您的仪表板中保存。", + "source": "集成", + "metric": "公制", + "noMetrics": "没有此集成可用的统计数据", + "add": "添加公制", + "label": "自定义标签", + "hidden": "隐藏", + "compact": "简洁号码", + "moveUp": "上移", + "moveDown": "下移", + "remove": "移除公制", + "loading": "正在加载…", + "unavailable": "Unavailable", + "refreshFailed": "刷新失败 - 显示保存的数据", + "stale": "保存数据 — 刷新以更新", + "table": { + "value": "值", + "status": "状态" + }, "option": { - "showTitle": { - "label": "显示标题" + "table": { + "label": "表格视图" }, - "showRing": { - "label": "显示更新进度环" + "rows": { + "label": "紧凑行" }, - "layout": { - "label": "布局", + "showIcon": { + "label": "显示源图标" + }, + "spacing": { + "label": "间距", "option": { - "horizontal": { - "label": "水平" + "xs": { + "label": "紧凑的" }, - "vertical": { - "label": "垂直" + "sm": { + "label": "舒适的" + }, + "md": { + "label": "Spacious" } } }, - "showUpdateList": { - "label": "显示容器更新列表", - "description": "列出每个有镜像更新可用的已监控容器" + "entries": { + "label": "指标" + }, + "plain": { + "label": "删除卡片背景" } - } + }, + "fetchFailed": "无法获取统计", + "viewOptions": "自定义此视图", + "moreMetrics": "高级视图中还有 {count} 个指标", + "localHelp": "仅适用于此视图的布局、格式化和可见性。共享板设置保持不变。", + "plain": "删除卡片背景", + "resetView": "重置视图", + "allHidden": "在此视图中隐藏所有的计量。使用自定义此视图来还原它们。" + }, + "wazuh": { + "target": { + "api": "Wazuh 服务器 API", + "indexer": "Wazuh 索引器", + "wazuh": "Wazuh" + }, + "severity": { + "low": "低", + "medium": "中", + "high": "高", + "critical": "关键的" + }, + "error": { + "unauthorized": { + "title": "{target} 拒绝了凭据", + "description": "检查在 Wazu 集成中保存的用户名和密码。服务器 API (端口 55000)和索引器 (9200) 使用单独的用户。" + }, + "certificate": { + "title": "{target} 的证书不受信任", + "description": "Wazuh 默认使用自签名证书。在集成中运行“测试连接”并信任证书,或在“设置 -> 证书”下添加您的CA。" + }, + "unreachable": { + "title": "无法连接到 {target}", + "description": "主机拒绝或丢弃了连接。请检查URL、端口和防火墙。索引器只在本地主机默认安装中监听。" + }, + "timeout": { + "title": "{target} 请求超时", + "description": "15秒内没有响应。服务可能过载或地址可能错误。" + }, + "status": { + "title": "{target} 返回了错误", + "description": "请求失败,HTTP 状态为 {status}。" + }, + "invalidResponse": { + "title": "{target} 返回了意外响应", + "description": "请检查URL指向Wazuh服务器 API 或索引器,而不是指向仪表盘。" + }, + "indexerRequired": { + "title": "需要Wazuh 索引器凭据", + "description": "从Wazuh索引器读取警报、脆弱性和文件完整性事件。在集成中添加索引器 URL、用户名和密码。" + }, + "unknown": { + "title": "无法从 {target} 加载数据", + "description": "检查 Homarr 日志的详细信息。" + } + }, + "range": { + "1h": "1 小时", + "24h": "24 小时", + "7d": "7天", + "30d": "30 天" + }, + "levelTooltip": "规则级别 {level}({severity})" + }, + "wazuhAgents": { + "name": "Wazuh 代理", + "description": "具有状态、OS、版本和最后存活状态的 Wazuh 代理人可排序列表", + "option": { + "statusFilter": { + "label": "显示代理" + }, + "sortBy": { + "label": "排序方式" + }, + "showVersion": { + "label": "显示 Wazuh 版本列" + }, + "showGroups": { + "label": "显示组列" + } + }, + "title": "代理", + "total": "{count} 个代理", + "status": { + "active": "活动", + "disconnected": "网络连线中断", + "neverConnected": "从未连接", + "pending": "待处理" + }, + "statusLabel": { + "active": "活动", + "disconnected": "网络连线中断", + "never_connected": "从未连接", + "pending": "待处理", + "unknown": "未知" + }, + "live": "实时模式", + "snapshot": "快照已存在 {age}", + "snapshotHint": "读取于 {time} 获取的 Wazuh 仪表板代理快照(wazuh-monitoring)。添加服务器 API 凭据以获取实时数据。", + "staleSnapshot": "{time} 的代理快照已过时。请检查 Wazuh 仪表板监控任务是否正在运行,或添加服务器 API 凭据。", + "noDisconnected": "所有代理已连接", + "empty": "没有代理匹配此过滤器", + "column": { + "status": "状态", + "name": "作业名称", + "ip": "IP", + "os": "系统", + "version": "版本", + "lastKeepAlive": "保持活动状态", + "groups": "群组" + }, + "outdated": "比最新代理版本({version})更旧" + }, + "wazuhAlerts": { + "name": "Wazuh 警报源", + "description": "最近的 Wazuh 警报级别,MITRE ATT&CK 技术、代理和源 IP", + "option": { + "minLevel": { + "label": "最小规则级别", + "description": "Wazuh 级别:0-6低, 7-11 medium, 12-14高, 15+ 临界值" + }, + "hours": { + "label": "时间窗口(小时)" + }, + "limit": { + "label": "警报数量" + }, + "showMitre": { + "label": "Show MITRE ATT&CK techniques" + }, + "showAgent": { + "label": "显示代理" + }, + "showSourceIp": { + "label": "显示源IP" + }, + "showRuleId": { + "label": "显示规则 ID" + } + }, + "title": "警报 · 级别 {level}+ · {hours} 小时", + "empty": "这个级别没有警报。所有静音。", + "rule": "规则 {id}", + "openInDashboard": "在 Wazuh 仪表盘中打开此提醒" + }, + "wazuhSummary": { + "name": "Wazuh 警报严重程度", + "description": "按前期趋势分列的警报严重程度", + "option": { + "range": { + "label": "时间范围" + }, + "showTrend": { + "label": "显示上一期的趋势" + }, + "showFooter": { + "label": "显示页脚" + } + }, + "title": "警报严重性 · {range}", + "alerts": "提醒", + "none": "没有提醒", + "trend": { + "new": "新建", + "tooltip": "上一时段:{previous}" + }, + "previous": "上一{range}:{count}", + "maxLevel": "最高级别 {level}", + "health": "索引器健康状态:{status}", + "manager": "管理器 {version}" + }, + "wazuhTimeline": { + "name": "Wazuh alerts timeline", + "description": "Wazuh警报的堆叠图表,按严重程度分列", + "option": { + "range": { + "label": "时间范围" + }, + "interval": { + "label": "间隔" + }, + "chartType": { + "label": "图表类型" + }, + "yScale": { + "label": "Y轴缩放", + "description": "平方根保持高和临界警报,几千个低警告旁边可见" + }, + "minLevel": { + "label": "最小规则级别" + }, + "showLegend": { + "label": "显示图例与合计数" + } + }, + "title": "警报时间线 · {range}", + "total": "{count} 个警报", + "interval": "每 {interval}" + }, + "wazuhTopList": { + "name": "Wazuh 顶部列表", + "description": "顶级规则、代理人、源IP或MITRE ATT&CK 战术和技术通过报警计数", + "option": { + "kind": { + "label": "等级" + }, + "range": { + "label": "时间范围" + }, + "limit": { + "label": "条目数" + }, + "minLevel": { + "label": "最小规则级别" + }, + "showBars": { + "label": "显示栏" + } + }, + "title": { + "rules": "热门规则 · {range}", + "agents": "热门代理 · {range}", + "sourceIps": "热门源 IP · {range}", + "mitreTactics": "MITRE 战术 · {range}", + "mitreTechniques": "MITRE techniques · {range}" + }, + "empty": { + "rules": "这段时间里没有提醒", + "agents": "这段时间里没有提醒", + "sourceIps": "在此期间没有带有源 IP 的提醒", + "mitreTactics": "在此期间没有映射到MITRE ATT&CK 的提醒", + "mitreTechniques": "在此期间没有映射到MITRE ATT&CK 的提醒" + }, + "totalTooltip": "{count} 个匹配的警报", + "private": "LAN", + "public": "公开", + "agents": "在 {count} 个代理上发现", + "others": "其他条目中还有 {count} 个警报" + }, + "wazuhVulnerabilities": { + "name": "Wazuh 脆弱性", + "description": "脆弱性计量、最大的CVEs和最易受伤害的代理", + "option": { + "cveOrder": { + "label": "CVES排名由" + }, + "minSeverity": { + "label": "CVE 严重程度" + }, + "cveLimit": { + "label": "CVES 数量" + }, + "agentLimit": { + "label": "代理数量" + }, + "showAgents": { + "label": "显示最易受伤害的代理" + } + }, + "title": "脆弱性", + "topCves": "顶级CVES", + "score": "得分", + "agentsShort": "代理", + "topAgents": "最易受伤害的代理", + "criticalHigh": "箱子/高", + "totalTooltip": "{count} 个发现项,涉及 {agents} 个代理", + "affected": "{count} 个代理", + "empty": "未检测到脆弱性", + "distribution": "严重性分布。未显示没有评分的 {unscored} 个发现项。", + "worst": "最严重:{id}({score}),涉及 {agents} 个代理" + }, + "wazuhFim": { + "name": "Wazuh 文件的完整性", + "description": "最近文件完整性监测 (Syscheck) 事件", + "option": { + "range": { + "label": "时间范围" + }, + "event": { + "label": "事件" + }, + "limit": { + "label": "事件数" + }, + "includeRegistry": { + "label": "包括Windows 注册表事件" + } + }, + "title": "文件完整性 · {range}", + "event": { + "added": "添加日期", + "modified": "已修改", + "deleted": "已删除", + "unknown": "已更改" + }, + "empty": "在此期间没有文件完整性事件", + "user": "由 {user} 执行", + "registry": "书记官处" + }, + "wazuhAuthFailures": { + "name": "Wazuh 身份验证失败", + "description": "登录失败,每个代理使用每小时闪烁的暴力提醒", + "option": { + "hours": { + "label": "时间窗口(小时)" + }, + "limit": { + "label": "代理数量" + }, + "showSourceIps": { + "label": "显示顶部源IP" + } + }, + "title": "身份验证失败 · {hours} 小时", + "seriesTooltip": "过去 {hours} 小时内的所有代理", + "peak": "峰值 {count}/时间段", + "empty": "在此期间没有失败的登录", + "failed": "登录失败", + "failedHint": "单个身份验证失败 (sshd, PAM, Windows logon, invalider users)", + "bruteForce": "坚韧不拔的", + "bruteForceHint": "与此相关的暴力规则(短期内多次失败,MITRE T1110)", + "sourceIps": "源 IP", + "ipTooltip": "{ip}:{count} 次失败", + "bruteForceCount": "{count} 次暴力破解" } }, "widgetPreview": { @@ -4309,7 +5732,76 @@ } }, "board": { + "emptyState": { + "title": "构建您的第一个视图", + "description": "添加一个小部件或应用,或连接一个服务,并使用它在本面板上的数据。", + "addWidget": "添加小部件", + "addApp": "添加应用", + "connectService": "连接服务" + }, + "setupChecklist": { + "title": "让这个看板变得很有帮助", + "description": "选择你离开的地方。按照已经在本板上的内容进行进度。", + "collapse": "折叠设置清单", + "dismiss": "清除设置清单", + "resume": "继续设置({completed}/{total})", + "progress": "棋盘设置进度", + "step": { + "content": { + "label": "添加有用的内容", + "description": "选择一个小部件并在它放置之前进行配置。" + }, + "app": { + "label": "固定一个应用", + "description": "保留一个服务或工具单击此看板。" + }, + "service": { + "label": "连接服务", + "description": "解锁兼容小部件的实时数据和动作。", + "permissionDescription": "管理员可以连接服务解锁实时数据。", + "action": "连接" + } + } + }, "action": { + "addContent": "添加棋盘内容", + "settings": "棋盘设置", + "switch": "切换面板", + "switcher": { + "title": "切换面板", + "search": { + "empty": "没有与“{search}”匹配的看板。" + }, + "results": "可用看板", + "preview": "{name} 的预览,包含 {count} 个项目", + "currentHidden": "当前看板:{name}", + "keyboard": { + "navigate": "Navigate", + "open": "打开", + "instructions": "键入过滤板。使用箭头键移动结果并进入打开看板。" + }, + "empty": { + "title": "没有其他看板", + "description": "没有其他您可以访问的看板。" + }, + "error": "无法加载看板。" + }, + "create": { + "availability": { + "checking": "检查可用性…", + "available": "{name} 可用" + }, + "notification": { + "success": { + "title": "棋盘已创建", + "message": "看板 {name} 已创建" + }, + "error": { + "title": "无法创建面板", + "message": "无法创建看板 {name}" + } + } + }, "duplicate": { "title": "复制面板", "message": "这将复制面板 {name} 及其全部内容。如果小组件引用了您无权使用的集成,这些小组件将被移除。", @@ -4325,14 +5817,19 @@ } }, "edit": { + "enter": "编辑棋盘", + "save": "保存棋盘", + "exit": "退出编辑模式", "notification": { "success": { - "title": "成功应用更改", "message": "面板保存成功" }, "error": { - "title": "无法应用更改", "message": "面板无法保存" + }, + "loadError": { + "title": "无法开始编辑", + "message": "无法加载板编辑器。您的仪表板仍然可以在视图模式下使用。" } }, "confirmLeave": { @@ -4340,62 +5837,6 @@ "message": "您有尚未保存的更改。您确定要离开吗?" } }, - "oldImport": { - "label": "从 1.0.0 之前的 Homarr 导入", - "notification": { - "success": { - "title": "导入成功", - "message": "面板导入成功" - }, - "error": { - "title": "导入失败", - "message": "无法导入面板,请检查日志以获取更多详情" - } - }, - "form": { - "file": { - "label": "选择 JSON 文件", - "invalidError": "无效的配置文件" - }, - "apps": { - "label": "应用", - "avoidDuplicates": { - "label": "避免重复", - "description": "忽略已经存在具有相同链接的应用" - }, - "onlyImportApps": { - "label": "仅导入应用", - "description": "只添加应用,面板需要手动重新创建" - } - }, - "name": { - "label": "面板名称" - }, - "screenSize": { - "label": "屏幕大小", - "description": "在1.0之前的版本中,有三种不同的模式,所以你可以根据屏幕大小选择列的数量。", - "option": { - "sm": "小号", - "md": "中号", - "lg": "大号" - } - }, - "sidebarBehavior": { - "label": "侧边栏行为", - "description": "侧边栏在1.0中被删除了,您可以选择其中的项目应该发生什么。", - "option": { - "lastSection": { - "label": "最后部分", - "description": "侧边栏将显示在最后一部分的下方" - }, - "removeItems": { - "label": "删除项目", - "description": "侧边栏中包含的项目将被删除" - } - } - } - } - }, "quickCreateApp": { "modal": { "title": "在运行时创建应用", @@ -4403,6 +5844,12 @@ } } }, + "landmark": { + "canvas": "仪表盘画面", + "leftRail": "左面板铁轨", + "rightRail": "右侧仪表板铁轨", + "items": "仪表盘项目" + }, "field": { "pageTitle": { "label": "页面标题" @@ -4472,7 +5919,8 @@ } }, "primaryColor": { - "label": "主体色" + "label": "主体色", + "locked": "您的管理员在每个看板上保留实例品牌颜色。" }, "secondaryColor": { "label": "辅助色" @@ -4512,9 +5960,6 @@ "xl": "极大" } }, - "name": { - "label": "名称" - }, "isPublic": { "label": "公开", "description": "每个人都可以访问公共面板,即使没有账户。" @@ -4534,9 +5979,44 @@ "title": "布局", "responsive": { "title": "响应式布局", + "description": "每个布局都保持自己的小部件位置和大小。移动和基地始终可用。在任何额外的断点添加自定义布局。", "action": { "add": "添加布局" } + }, + "role": { + "mobile": "手机", + "base": "基数", + "custom": "自定义" + }, + "custom": { + "defaultName": "自定义布局" + }, + "mobile": { + "breakpointDescription": "移动设备总是从0px到下一个布局断点。" + }, + "preview": { + "columns": "列", + "empty": "此布局为空", + "dynamicSection": "动态部分", + "editorWidthLabel": "{layoutName} · {width}px" + }, + "reset": { + "action": "从基地重置", + "confirm": { + "title": "Reset {layoutName}?", + "message": "这将此布局中保存的每个位置和大小替换为基地生成的新布局。这不能撤消。" + } + }, + "edit": { + "action": "编辑布局", + "saveAndEdit": "保存并编辑", + "save": "保存布局", + "cancel": { + "action": "取消布局编辑", + "title": "放弃布局更改?", + "message": "您未保存的对此布局的更改将被丢弃。" + } } }, "background": { @@ -4573,10 +6053,7 @@ "rename": { "label": "重命名面板", "description": "更改名称将会破坏到此面板的任何链接。", - "button": "更改名字", - "modal": { - "title": "重命名面板" - } + "button": "更改名字" }, "visibility": { "label": "更改面板可见性", @@ -4600,9 +6077,7 @@ } }, "delete": { - "label": "删除面板", "description": "面板一旦删除就无法恢复. 请谨慎操作.", - "button": "删除面板", "confirm": { "title": "删除面板", "description": "您确定要删除此面板吗?这将永久删除面板及其所有内容。" @@ -4647,28 +6122,41 @@ }, "layout": { "field": { - "name": { - "label": "名称" - }, "columnCount": { "label": "列数" }, "breakpoint": { "label": "断点", "description": "布局将在大于此断点的所有屏幕上使用,直到下一个较大的断点。" + }, + "gutters": { + "label": "固定侧边栏", + "description": "两侧保留最多三个面板列。剩余的画布自动调用。", + "left": { + "label": "Left sidebar", + "description": "当控制面板滚动时保持可见区域。", + "thumbLabel": "Left sidebar width" + }, + "right": { + "label": "右侧边栏", + "description": "当控制面板滚动时保持可见区域。", + "thumbLabel": "右侧侧边栏宽度" + }, + "width": { + "label": "列宽度" + }, + "preview": { + "label": "仪表板布局预览" + } } } }, "management": { "metaTitle": "管理中心", - "title": { - "morning": "{username},早上好呀 !", - "afternoon": "{username},下午好呀 !", - "evening": "{username},晚上好呀 !" - }, "notFound": { "title": "未找到", - "text": "找不到请求的资源" + "text": "找不到请求的资源", + "backToHome": "返回管理主页" }, "error": { "title": "此页面无法加载", @@ -4678,18 +6166,9 @@ "navbar": { "items": { "home": "首页", - "boards": "面板", - "apps": "应用", - "integrations": "集成", - "customWidgets": "自定义小组件", - "searchEngies": "搜索", - "medias": "媒体", "users": { - "label": "用户", "items": { - "manage": "管理", - "invites": "邀请", - "groups": "群组" + "manage": "管理" } }, "tools": { @@ -4697,10 +6176,7 @@ "items": { "docker": "Docker", "kubernetes": "Kubernetes", - "logs": "日志", "api": "API 与 MCP", - "certificates": "证书", - "tasks": "任务", "backup": "备份" } }, @@ -4714,21 +6190,12 @@ "sourceCode": "源码仓库" } }, - "about": "关于" + "about": "关于", + "assistant": "助理" } }, "page": { "home": { - "statistic": { - "board": "面板", - "user": "用户", - "invite": "邀请", - "integration": "集成", - "app": "应用", - "group": "群组", - "searchEngine": "搜索引擎", - "media": "媒体" - }, "statisticLabel": { "boards": "面板", "resources": "资源", @@ -4766,13 +6233,8 @@ "tooltip": "此面板将显示为您的手机面板" } }, - "duplicate": { - "label": "复制面板" - }, "delete": { - "label": "永久删除", "confirm": { - "title": "删除面板", "description": "确认删除面板 {name} 吗?" } } @@ -4781,28 +6243,82 @@ "public": "此面板是公开的", "private": "此面板是私有的" }, - "noResults": { - "title": "暂无面板" + "preview": { + "label": "{name} 的布局预览,包含 {count} 个项目", + "unknownCreator": "未知的创建者" }, - "modal": { - "createBoard": { - "field": { - "name": { - "label": "名称" - } - } - } + "noResults": { + "title": "暂无面板", + "description": "创建一个板来在一个地方安排您的应用和小部件。" } }, "media": { "includeFromAllUsers": "包含来自所有用户的媒体" }, "user": { - "back": "返回用户", "fieldsDisabledExternalProvider": "某些字段被禁用,因为它们是由外部认证提供者管理的。", "setting": { "general": { "title": "通用", + "header": { + "title": "页眉工作室", + "badge": "个人资料", + "description": "将控制拖动到行中的任何位置。左边、中心和右边都固定在控制周围。", + "device": { + "desktop": "桌面", + "mobile": "手机" + }, + "zones": { + "left": "左边", + "center": "居中", + "right": "右边" + }, + "action": { + "hide": "隐藏标题", + "show": "显示标题", + "configure": "移动或配置 {item}", + "remove": "删除 {item}", + "dropIntoZone": "移入 {zone} 分区" + }, + "preview": { + "board": "{name} 的仪表板预览", + "empty": "没有可用的仪表板布局" + }, + "available": { + "title": "可用的控制", + "description": "添加一个控制器,然后将其全部按钮拖动到上面的位置。", + "requiredAlways": "这个控制是必需的,但你可以在头部的任何地方移动它。", + "allAdded": "每个内置控制已经在您的头部。", + "add": "添加 {item}", + "boardShortcut": "棋盘快捷方式", + "chooseBoard": "选择看板" + }, + "configuration": { + "description": "此控件保持与在线头的大小相同。", + "searchDisplay": { + "input": "搜索栏", + "icon": "仅图标" + }, + "logoDisplay": { + "logo": "仅徽标", + "logoAndText": "徽标 + 文本" + } + }, + "items": { + "logo": "徽标", + "search": "搜索", + "home": "默认面板", + "boardSwitcher": "面板", + "assistant": "助理", + "docker": "Docker", + "boardEdit": "编辑棋盘", + "boardSettings": "棋盘设置", + "settings": "您的设置", + "themeToggle": "切换主题", + "user": "账户", + "boardUnavailable": "棋盘不可用" + } + }, "item": { "language": "语言与地区", "board": { @@ -4836,14 +6352,10 @@ }, "security": { "title": "安全" - }, - "board": { - "title": "面板" } }, "list": { - "metaTitle": "管理用户", - "title": "用户" + "metaTitle": "管理用户" }, "edit": { "metaTitle": "编辑用户 {username}" @@ -4897,9 +6409,6 @@ } }, "field": { - "id": { - "label": "ID" - }, "creator": { "label": "创建者" }, @@ -4923,10 +6432,7 @@ }, "setting": { "title": "设置", - "alert": "分组设置按列表中组的顺序排列。顶部设置覆盖底部设置。", - "board": { - "title": "面板" - } + "alert": "分组设置按列表中组的顺序排列。顶部设置覆盖底部设置。" }, "members": { "title": "成员", @@ -4934,10 +6440,7 @@ "notFound": "没有找到成员" }, "permissions": { - "title": "权限", - "form": { - "unsavedChanges": "你有未保存的更改 !" - } + "title": "权限" } } }, @@ -4946,12 +6449,10 @@ "notification": { "success": { "message": "设置保存成功" - }, - "error": { - "message": "无法保存设置" } }, "section": { + "analyticsDocumentation": "查看分析数据 Homarr 收集", "analytics": { "title": "分析", "general": { @@ -4980,7 +6481,6 @@ } }, "board": { - "title": "面板", "homeBoard": { "label": "全局主面板", "mobileLabel": "全局手机面板", @@ -4999,7 +6499,6 @@ } }, "user": { - "title": "用户", "enableGravatar": { "label": "启用Gravatar", "description": "未设置自定义头像时,若用户有邮箱,则自动采用其 Libravatar/Gravatar 头像" @@ -5015,12 +6514,86 @@ "appearance": { "title": "外观", "defaultColorScheme": { - "label": "默认配色方案", + "label": "默认配色方案" + } + }, + "branding": { + "title": "实例品牌化", + "groups": { + "identity": "身份", + "appearance": "外观", + "customCss": "Custom CSS", + "authentication": "认证" + }, + "identity": { + "description": "应用程序标志是应用程序内、登录页面和已安装应用中使用的较大标记。 浏览器图标 (favicon) 是在标签和书签中使用的小方形;当为空时,它会返回应用程序标识。" + }, + "appName": { + "label": "应用程序名称" + }, + "greeting": { + "label": "自定义问候中" + }, + "logo": { + "label": "应用程序标志", + "placeholder": "/logo/logo.png" + }, + "favicon": { + "label": "浏览器图标 (favicon)", + "placeholder": "使用应用程序标志" + }, + "primaryColor": { + "label": "主体色" + }, + "secondaryColor": { + "label": "二次音效" + }, + "lockPrimaryColor": { + "label": "将此颜色保持在每个棋盘上", + "description": "阻止板上的颜色替换应用程序的重量。" + }, + "signInBackground": { + "label": "认证背景", + "placeholder": "https://example.com/background.jpg" + }, + "signInOverlay": { + "label": "背景叠加" + }, + "defaultRadius": { + "label": "角样式", "options": { - "auto": "自动", - "light": "日间", - "dark": "暗黑" + "xs": "极高", + "sm": "淡雅", + "md": "平衡", + "lg": "圆角", + "xl": "软体" } + }, + "customCss": { + "label": "全局自定义 CSS", + "description": "应用到每个页面。Board 自定义 CSS 可以覆盖它。" + }, + "authVisibility": { + "description": "选择每个身份验证页面上出现的内容。", + "appName": "应用程序名称", + "logo": "应用程序标志", + "greeting": "问候中" + }, + "summary": { + "title": "当前品牌化", + "cornerStyle": "角样式", + "palette": "Palette", + "backgroundConfigured": "自定义背景 · {overlay}% 叠加层", + "backgroundDefault": "默认背景", + "greetingConfigured": "自定义问候中", + "greetingDefault": "默认问候中", + "boardColorLocked": "棋盘颜色锁定", + "boardColorFlexible": "允许使用棋盘颜色", + "appName": "作业名称", + "logo": "徽标", + "greeting": "问候中", + "on": "开启", + "off": "关闭" } }, "culture": { @@ -5028,12 +6601,177 @@ "defaultLocale": { "label": "默认语言" } + }, + "assistant": { + "loading": "加载助手配置", + "title": "助理", + "description": "连接一个兼容的 OpenAI-compatible 模型端点为全实例助手。", + "security": { + "description": "API 密钥和额外的标题值在 Homarr 数据库中加密。它们永远不会返回到浏览器。 模型请求从Homarr服务器直接发送到配置的端点。" + }, + "overview": { + "connectionReady": "连接已准备好", + "unsavedChanges": "未保存更改", + "setupRequired": "需要设置", + "disabled": "已禁用", + "noModel": "没有选择模型" + }, + "connection": { + "endpointTitle": "提供者和端点", + "description": "选择一个预设或连接实现OpenAI 聊天完成的任何服务。", + "save": "保存提供商连接" + }, + "credentials": { + "title": "全权证书", + "description": "添加此端点所需的密钥。存储值保持加密,不能重新阅读。", + "required": "需要密钥", + "optional": "键可选性", + "workshop": "用户GitHub 登录" + }, + "provider": { + "title": "提供者", + "groups": { + "free": "免费使用 Homarr", + "hosted": "托管提供商", + "local": "本地提供商", + "custom": "自定义" + }, + "options": { + "homarr": { + "description": "助理每天免费使用数量有限,费用由Homarr团队支付。 使用社区车间登录使用您的津贴。" + }, + "openrouter": { + "description": "使用大型可工具的模型目录托管模型路由。" + }, + "openai": { + "description": "通过官方的 API 端点,OpenAI 聊天完成。" + }, + "anthropic": { + "description": "穿过Anthropic的 OpenAI SDK 兼容端口的克劳。" + }, + "google-gemini": { + "description": "Gemini通过谷歌的 OpenAI兼容的 API 端点。" + }, + "xai": { + "description": "通过 xAI的 OpenAI兼容的 API 获取模型。" + }, + "groq": { + "description": "通过 Groq 的 OpenAI兼容的 API 快速托管推荐。" + }, + "mistral": { + "description": "通过官方API传送的传送模型。" + }, + "deepseek": { + "description": "通过其OpenAI兼容的 API深化模型。" + }, + "together": { + "description": "通过 OpenAI兼容的 API 共同托管开放模型。" + }, + "ollama": { + "description": "使用 OpenAI兼容的 API 的本地或网络 Olama 服务器。" + }, + "lm-studio": { + "description": "启用了 OpenAI 兼容的LM Studio 本地服务器。" + }, + "llama-cpp": { + "description": "一个本地或网络 llama.cpp 服务器使用其OpenAI兼容的 API。" + }, + "custom": { + "label": "自定义终点", + "description": "任何与 OpenAI 聊天完成兼容的其他端点。" + } + }, + "homarrAuth": { + "title": "包含免费的每日助手使用", + "description": "不需要 API 密钥。Homarr 团队每天为您提供数量有限的助手使用。 使用社区车间登录以保持您的津贴分开。" + } + }, + "baseUrl": { + "title": "API 基础 URL", + "description": "包含 API 前缀,通常是 /v1 。在容器中,本地主机指到 Homarr 容器。" + }, + "apiKey": { + "title": "API 密钥", + "required": "此提供商需要。该值是加密和只写的。", + "optional": "本地端点可选。当服务不需要无记名身份验证时,留空。", + "placeholder": "输入 API 密钥", + "savedTitle": "已保存 Encryped API 密钥", + "savedDescription": "Homarr 可以使用此密钥,但它不能显示或恢复其值。", + "remove": "移除已保存的 API 密钥", + "removeFlow": { + "title": "移除保存的 API 密钥?", + "description": "此提供商需要 API 密钥。删除它可以停止模型发现和助手响应,直到保存另一个密钥。", + "optionalDescription": "当此密钥被移除后,端点将停止接收无记名身份验证。确认它接受未经验证的请求或使用另一个存储的头部。", + "cancel": "保留保存的密钥", + "confirm": "移除 API 密钥" + } + }, + "headers": { + "title": "附加请求标题", + "description": "可选的身份验证或路由头。头部值是加密和只写。", + "add": "添加标题", + "name": "标题名称", + "value": "页眉值", + "valuePlaceholder": "秘密或路由值", + "remove": "删除标题", + "configured": "已配置更多加密的头。添加头以取代完整的存储集。", + "empty": "没有为此提供商存储更多的信头。", + "savedBadge": "头已保存", + "pendingRemoval": "移除等待中", + "clear": "保存时删除存储的标题", + "keep": "保留存储的标题" + }, + "model": { + "title": "模型", + "description": "选择一个发现的模型或输入一个确切的终点模型ID。", + "placeholder": "模型 ID", + "refresh": "刷新模型", + "chooseModel": "选择用于新对话的模型。", + "discoveryPath": "模型发现路径", + "discoveryPathDescription": "附加到 API 基础 URL。留空以禁用发现并使用手动模型 ID。", + "manual": "手动输入模型ID或保存连接以发现模型。", + "manualFallback": "发现不可用。您仍然可以手动输入模型ID。", + "saveConnectionFirst": "在选择模型之前保存提供商连接。", + "discovering": "正在刷新此提供商提供的可用模型……", + "discovered": "{count, plural, one {发现# 模型。工具支持取决于所选的端点和模型。} other {发现# 模型。工具支持取决于所选的端点和模型。}}", + "discoveryFailed": "模型发现未完成", + "context": "{count} 个上下文窗口", + "toolsConfirmed": "广告工具", + "toolsUnknown": "验证工具支持" + }, + "serverTools": { + "title": "服务器工具", + "webSearch": { + "label": "网络搜索", + "description": "当请求需要当前信息时,允许模型通过 OpenRouter 搜索网络。搜索使用由OpenRouter单独收取费用。", + "proxyDescription": "发送OpenRouter的网页搜索服务器工具到此端点。 只有当自定义端点转发OpenRouter 服务器工具格式,如Homarr Router 代理时,才启用它。", + "limit": "模型决定何时搜索,每次搜索限定3个搜索和5个搜索结果。" + } + }, + "enabled": { + "label": "启用助手", + "description": "显示所有登录用户的助手。现有的 Homarr 权限仍然适用于每个内部工具通话。" + }, + "save": "保存助手", + "notification": { + "connectionSaved": { + "title": "提供者连接已保存", + "message": "端点和加密凭据已准备就绪,可以选择模型。", + "credentialsCleared": "端点已更改,所以先前的凭据已被清理。如果需要,为新的目的地添加凭据。" + }, + "saved": { + "title": "助理设置已保存", + "message": "新模型和可用性设置处于活动状态。" + }, + "error": { + "title": "无法保存助手设置" + } + } } } }, "tool": { "tasks": { - "title": "任务", "status": { "idle": "空闲", "running": "运行中", @@ -5051,6 +6789,11 @@ "label": "Pings" } }, + "action": { + "run": "立即运行 {name}", + "enable": "启用 {name}", + "disable": "禁用 {name}" + }, "interval": { "seconds": "每 {interval, plural, =1 {秒} other {# 秒}}", "minutes": "每 {interval, plural, =1 {分钟} other {# 分钟}}", @@ -5066,13 +6809,7 @@ } } }, - "settings": { - "title": "{jobName} 任务设置" - }, "field": { - "name": { - "label": "名称" - }, "interval": { "label": "计划时间间隔" }, @@ -5086,11 +6823,6 @@ "table": { "search": "在 {count} 个任务中搜索……" }, - "action": { - "refresh": { - "label": "刷新" - } - }, "refresh": { "success": { "message": "任务已成功刷新" @@ -5124,7 +6856,6 @@ } }, "api": { - "title": "API", "modal": { "createApiToken": { "title": "API 令牌已创建", @@ -5150,7 +6881,6 @@ }, "table": { "header": { - "id": "ID", "createdBy": "创建者", "actions": "操作" } @@ -5206,43 +6936,12 @@ "availableTools": { "title": "可用工具", "description": "{count} 个工具可用。展开分类可查看各个工具及其描述。", - "columnType": "类型", - "columnName": "工具", - "columnDescription": "描述" - }, - "troubleshooting": { - "title": "故障排查", - "missingHeader": { - "title": "“缺少 ApiKey 标头”", - "description": "您的客户端未发送 {header} 标头。请检查 MCP 配置中的 {section} 部分是否正确。某些客户端在更改配置后需要重启。" - }, - "invalidFormat": { - "title": "“ApiKey 格式无效”", - "description": "请确保您复制了完整的 API 密钥,而非仅复制了其中一部分。" - }, - "invalidKey": { - "title": "“API 密钥无效”", - "description": "未找到该密钥 ID,或令牌有误。API 密钥仅在创建时可见一次。如已丢失,请删除旧密钥并创建新密钥。" - }, - "connectionRefused": { - "title": "连接被拒绝 / 超时", - "description": "请确保您的 AI 客户端能够访问该 URL。如果 Homarr 运行在反向代理后或 Docker 中,请使用外部 URL(而非 {localhost})。请确认端口是否正确(Docker 默认端口为 7575)。" - }, - "toolsNotAppearing": { - "title": "工具未显示", - "description": "部分工具需要先配置特定的集成(例如 Docker、Overseerr)。工具列表取决于您的 Homarr 实例中可用的功能。" + "filteredDescription": "在已展开的类别中有 {count} 个匹配的工具。", + "search": "搜索工具", + "noResults": { + "title": "没有匹配此搜索的工具", + "description": "没有与“{search}”匹配的 MCP 工具。请尝试输入命名空间、工具名称或描述。" } - }, - "copy": "复制", - "oneClick": { - "title": "一键安装", - "subtitle": "使用 OAuth 认证——首次使用时在浏览器中进行身份验证", - "vsCode": "在 VS Code 中安装", - "cursor": "在 Cursor 中安装", - "copyUrl": "复制 MCP URL", - "copied": "已复制!", - "copyHint": "适用于 ChatGPT、Claude Code 或任何 MCP 客户端", - "manualConfig": "手动配置" } } } @@ -5259,47 +6958,12 @@ "title": "敏感数据导出", "warningTitle": "此导出包含您的完整数据库。", "warningBody": "备份包含所有用户、集成密钥(已加密)、API 密钥、面板配置和应用数据。请妥善保管导出的文件,切勿分享。", - "typePrompt": "输入 \"{phrase}\" 以继续", - "submit": "导出数据库", - "cancel": "取消" + "submit": "导出数据库" } }, "import": { "title": "恢复数据库", - "description": "上传之前导出的备份 ZIP 文件以恢复数据库。此操作将替换整个数据库。如果备份使用的加密密钥不同,密钥将自动重新加密。", - "warning": "恢复备份将完全替换当前数据库并重启应用。此操作不可撤销。", - "dropzone": { - "title": "将备份 ZIP 文件拖放到此处,或点击浏览", - "description": "仅接受来自 Homarr SQLite 备份的 .zip 文件" - }, - "changeFile": "更改文件", - "button": "恢复数据库", - "success": { - "title": "恢复完成", - "message": "数据库已成功恢复。应用正在重启……" - }, - "error": "导入失败" - }, - "preview": { - "title": "备份内容", - "exported": "导出于 {date}", - "loading": "正在分析备份文件……", - "errorTitle": "预览错误", - "entity": "实体", - "count": "数量", - "boards": "面板", - "entities": { - "board": "面板", - "user": "用户", - "app": "应用", - "integration": "集成", - "item": "小组件", - "media": "媒体", - "search_engine": "搜索引擎" - }, - "analyzeError": "分析备份文件失败", - "invalidMissingMetadata": "备份无效:缺少 metadata.json 文件", - "invalidMissingDb": "备份无效:缺少 db.sqlite 文件" + "description": "上传之前导出的备份 ZIP 文件以恢复数据库。此操作将替换整个数据库。如果备份使用的加密密钥不同,密钥将自动重新加密。" }, "restore": { "dropzone": { @@ -5309,29 +6973,20 @@ "analyzing": "正在分析备份……", "changeFile": "更改文件", "continueToRestore": "继续恢复", - "tryAgain": "重试", "analysisError": "分析错误", "preview": { "title": "备份内容", "exported": "导出于 {date}", "entity": "实体", "count": "数量", - "boards": "面板", "entities": { - "board": "面板", - "user": "用户", - "app": "应用", - "integration": "集成", - "item": "小组件", - "media": "媒体", - "search_engine": "搜索引擎" + "item": "小组件" }, "migrationsApplied": "已应用 {count} 项迁移", "migrationsAppliedPlural": "已应用 {count} 项迁移", "migrationsOlderVersion": "此备份来自较旧版本的 Homarr。已应用 {count} 项数据库迁移以将其更新至最新版本。", "migrationsOlderVersionPlural": "此备份来自较旧版本的 Homarr。已应用 {count} 项数据库迁移以将其更新至最新版本。", "migrationsUpToDate": "数据库架构已为最新(已应用 {count} 项迁移)", - "upToDate": "已是最新", "migrationsPending": "{count} 项待处理" }, "migration": { @@ -5342,21 +6997,21 @@ "title": "破坏性操作", "warningTitle": "这将永久替换您的整个数据库。", "warningBody": "所有现有面板、用户、应用、集成、设置和会话都将丢失。此操作不可撤销。恢复完成后应用将重启。", - "typePrompt": "输入 \"{phrase}\" 以继续", - "cancel": "取消", "submit": "恢复数据库" }, "progress": { "title": "正在恢复数据库……", - "extracting": "正在解压备份压缩包", - "migrating": "正在应用数据库迁移", - "encrypting": "正在重新加密集成密钥", - "swapping": "正在替换数据库文件", - "restarting": "正在重启服务器" + "restarting": "正在重启服务器", + "relogin": "恢复您当前会话无效的数据库。Homarr 会在服务器准备就绪时发送您登录。" }, "complete": { "title": "恢复完成", - "message": "数据库已成功恢复。服务器正在重启——请稍后刷新页面。" + "message": "数据库已成功恢复。服务器正在重启——请稍后刷新页面。", + "button": "立即登录" + }, + "timeout": { + "title": "服务器未返回在线", + "message": "数据库还原完成,但Homarr未能重新准备好。重试连接检查或手动刷新此页面。" }, "failed": { "title": "恢复失败" @@ -5364,6 +7019,9 @@ "invalidMissingMetadata": "备份无效:缺少 metadata.json 文件", "invalidMissingDb": "备份无效:缺少 db.sqlite 文件", "analyzeError": "分析备份失败" + }, + "confirm": { + "typePrompt": "输入 \"{phrase}\" 以继续" } } }, @@ -5398,7 +7056,11 @@ "toggleBoardEdit": "切换面板编辑模式", "toggleColorScheme": "切换 亮色/暗色 模式", "saveNotebook": "保存笔记本(仅在笔记本小组件内)", - "openSpotlight": "打开搜索" + "openSpotlight": "打开搜索", + "openSpotlightApps": "打开应用搜索", + "openSpotlightAssistant": "打开助手模式", + "openSpotlightPreferences": "打开首选项模式", + "openAssistant": "打开助手" }, "note": "提示:Mod 键在 macOS 上指 Ctrl 键和 ⌘ 键" } @@ -5408,6 +7070,63 @@ }, "docker": { "title": "容器", + "reconciliation": { + "title": "协助停靠设置", + "suggestions": "{count, plural, =0 {没有建议} one {# 建议} other {# 建议}}", + "attention": "{count} 个需要关注", + "endpointUnavailable": "由于以下端点不可用,无法检查某些服务:{names}", + "empty": "找不到可见的 Docker 服务。", + "emptyFilter": "没有匹配此视图的服务。", + "ambiguous": "多个现有项目可以匹配此服务。Homarr 不会自动选择一个。", + "filter": { + "attention": "需要关注", + "represented": "已经设置", + "all": "全部" + }, + "state": { + "newRecognized": "准备好连接", + "newApp": "新建服务", + "represented": "已代表", + "linked": "已链接", + "moved": "地址已更改" + }, + "url": { + "manual": "手动输入地址" + }, + "health": { + "layer": { + "docker": "Docker", + "integrationConfiguration": "集成", + "authentication": "认证", + "apiRequest": "API", + "appRepresentation": "应用", + "widgetConfiguration": "小部件", + "widgetQuery": "小部件查询" + }, + "status": { + "available": "可用", + "configured": "已配置", + "linked": "已链接", + "missing": "缺失", + "changed": "已更改", + "unused": "未使用", + "notApplicable": "不适用", + "notObserved": "未观察" + } + }, + "action": { + "review": "预览", + "dismiss": "关闭", + "restoreDismissed": "恢复已忽略项({count})", + "setupIntegration": "设置集成", + "reviewIntegration": "审查集成", + "viewRepresentation": "查看设置" + }, + "loadError": { + "title": "无法加载 Docker 设置助手", + "message": "停靠服务信息不可用。请不要离开此页面。" + } + }, "table": { "updated": "已更新 {when}", "refresh": { @@ -5420,9 +7139,6 @@ "totalMemory": "总内存:{memory}" }, "field": { - "name": { - "label": "名称" - }, "state": { "label": "状态", "option": { @@ -5436,9 +7152,6 @@ } }, "stats": { - "cpu": { - "label": "CPU" - }, "memory": { "label": "内存" } @@ -5501,8 +7214,11 @@ } }, "remove": { - "label": "删除", "confirm": "再次点击以永久删除", + "confirmation": { + "title": "{count, plural, one {移除# 容器?} other {移除# 容器?}}", + "message": "{count, plural, one {这将永久删除 # 容器: {names}} other {这将永久删除 # 容器: {names}}}" + }, "notification": { "success": { "title": "容器已删除", @@ -5514,8 +7230,13 @@ } } }, + "result": { + "failure": { + "title": "一些容器动作失败", + "message": "{total, plural, other {{failed} 个操作失败:{names}}}" + } + }, "refresh": { - "label": "刷新", "notification": { "success": { "title": "容器已刷新", @@ -5546,18 +7267,33 @@ }, "error": { "internalServerError": "获取 Docker 容器失败", + "endpointUnavailable": "{count, plural, other {# 个 Docker 端点不可用:{names}}}", "noColumns": "请在小组件设置中至少选择一列" } }, "kubernetes": { + "context": { + "label": "Kubernetes环境", + "loadError": { + "title": "无法加载 Kubernetes 环境", + "message": "上下文信息不可用。请不要离开此页面。" + }, + "status": { + "available": "可用", + "degraded": "Metrics unavailable", + "unavailable": "Unavailable" + }, + "unavailable": "无法达到此Kubernetes上下文。选择另一个上下文或验证其凭据和端点。", + "metricsUnavailable": "此上下文是可访问的,但计量服务器不可用。库存仍然可用,没有实时CPU和内存使用。" + }, "cluster": { "title": "集群面板", "label": "集群", "providers": "提供者", "version": "版本", - "architecture": "架构", "capacity": { "title": "容量", + "metricsUnavailable": "计量服务器不可用。库存和保留容量仍然可见,可在线CPU和内存使用情况无法显示。", "resource": { "reserved": "已预留", "used": "已用" @@ -5576,38 +7312,10 @@ } }, "nodes": { - "label": "节点", "field": { - "name": { - "label": "名称" - }, - "state": { - "label": "状态", - "option": { - "ready": "就绪", - "NotReady": "尚未就绪" - } - }, - "cpu": { - "label": "处理器" - }, - "memory": { - "label": "内存" - }, - "pods": { - "label": "Pods" - }, - "operatingSystem": { - "label": "系统" - }, - "architecture": { - "label": "架构" - }, + "metricsUnavailable": "Unavailable", "kubernetesVersion": { "label": "Kubernetes 版本" - }, - "creationTimestamp": { - "label": "已创建" } }, "table": { @@ -5615,43 +7323,17 @@ } }, "namespaces": { - "label": "命名空间", - "field": { - "name": { - "label": "名称" - }, - "state": { - "label": "状态", - "option": { - "active": "活动", - "terminating": "中止" - } - }, - "creationTimestamp": { - "label": "已创建" - } - }, "table": { "search": "搜索 {count} 命名空间" } }, "ingresses": { - "label": "入口", "field": { - "name": { - "label": "名称" - }, - "namespace": { - "label": "命名空间" - }, "className": { "label": "类名" }, "rulesAndPaths": { "label": "规则和路径" - }, - "creationTimestamp": { - "label": "已创建" } }, "table": { @@ -5659,17 +7341,7 @@ } }, "services": { - "label": "服务", "field": { - "name": { - "label": "名称" - }, - "namespace": { - "label": "命名空间" - }, - "type": { - "label": "类型" - }, "ports": { "label": "端口" }, @@ -5678,9 +7350,6 @@ }, "clusterIP": { "label": "集群IP" - }, - "creationTimestamp": { - "label": "已创建" } }, "table": { @@ -5688,25 +7357,12 @@ } }, "pods": { - "label": "Pods", "field": { - "name": { - "label": "名称" - }, - "namespace": { - "label": "命名空间" - }, "image": { "label": "镜像" }, "applicationType": { "label": "应用类型" - }, - "status": { - "label": "状态" - }, - "creationTimestamp": { - "label": "已创建" } }, "table": { @@ -5714,51 +7370,17 @@ } }, "secrets": { - "label": "秘钥", - "field": { - "name": { - "label": "名称" - }, - "namespace": { - "label": "命名空间" - }, - "type": { - "label": "类型" - }, - "creationTimestamp": { - "label": "已创建" - } - }, "table": { "search": "搜索 {count} 秘钥" } }, "configmaps": { - "label": "配置映射", - "field": { - "name": { - "label": "名称" - }, - "namespace": { - "label": "命名空间" - }, - "creationTimestamp": { - "label": "已创建" - } - }, "table": { "search": "搜索 {count} 配置映射" } }, "volumes": { - "label": "卷", "field": { - "name": { - "label": "名称" - }, - "namespace": { - "label": "命名空间" - }, "accessModes": { "label": "访问模式" }, @@ -5773,12 +7395,6 @@ }, "volumeName": { "label": "卷名称" - }, - "status": { - "label": "状态" - }, - "creationTimestamp": { - "label": "已创建" } }, "table": { @@ -5787,6 +7403,29 @@ }, "error": { "internalServerError": "获取 Kubernetes 数据失败" + }, + "field": { + "name": { + "label": "作业名称" + }, + "namespace": { + "label": "命名空间" + }, + "creationTimestamp": { + "label": "已创建" + }, + "state": { + "label": "作业状态" + }, + "status": { + "label": "状态" + }, + "type": { + "label": "下载客户端类型" + }, + "architecture": { + "label": "架构" + } } }, "permission": { @@ -5821,79 +7460,26 @@ "navigationStructure": { "manage": { "label": "管理中心", - "boards": { - "label": "面板" - }, - "integrations": { - "label": "集成", - "edit": { - "label": "编辑" - }, - "new": { - "label": "新建" - } - }, - "search-engines": { - "label": "搜索引擎", - "new": { - "label": "新建" - }, - "edit": { - "label": "编辑" - } - }, - "medias": { - "label": "媒体" - }, - "apps": { - "label": "应用", - "new": { - "label": "新建" - }, - "edit": { - "label": "编辑" - } - }, "custom-widgets": { - "label": "自定义小组件", - "new": { - "label": "新建" - }, "edit": { - "label": "编辑", "flow": { "label": "流程" } + }, + "workshop": { + "label": "讲习班" + }, + "publish": { + "label": "发布到讲习班" } }, "users": { - "label": "用户", - "create": { - "label": "创建" - }, "general": "通用", - "security": "安全", - "board": "面板", - "groups": { - "label": "群组" - }, - "invites": { - "label": "邀请" - } + "security": "安全" }, "tools": { "label": "工具", - "tasks": { - "label": "任务" - }, - "docker": { - "label": "Docker", - "logs": { - "label": "日志" - } - }, "kubernetes": { - "label": "Kubernetes", "nodes": { "label": "节点" }, @@ -5919,11 +7505,7 @@ "label": "卷" } }, - "logs": { - "label": "日志" - }, "certificates": { - "label": "证书", "hostnames": { "label": "主机名" } @@ -5934,12 +7516,60 @@ }, "about": { "label": "关于" + }, + "assistant": { + "label": "助理" } } }, "search": { "placeholder": "搜索任意内容", "nothingFound": "没有找到", + "modePicker": { + "search": { + "label": "搜索", + "placeholder": "搜索应用、 看板、 页面、 命令和首选项" + }, + "apps": { + "label": "应用", + "placeholder": "搜索应用、看板和集成" + }, + "command": { + "label": "命令", + "placeholder": "搜索动作和命令" + }, + "preferences": { + "label": "偏好设置", + "placeholder": "搜索和更改首选项" + }, + "assistant": { + "label": "助理", + "placeholder": "询问助手" + }, + "external": { + "label": "Web", + "placeholder": "使用外部搜索引擎搜索" + }, + "media": { + "label": "媒体", + "placeholder": "搜索电影或显示", + "fallback": "搜索媒体:“{query}”" + }, + "userGroup": { + "label": "人", + "placeholder": "搜索用户和组" + }, + "continueWith": "继续", + "dialogAriaLabel": "{mode} 命令菜单", + "navigationLabel": "搜索模式", + "modeAriaLabel": "{mode} 模式", + "resultsAriaLabel": "{mode} 结果", + "footer": { + "navigate": "Navigate", + "open": "打开", + "close": "关闭" + } + }, "error": { "fetch": "获取数据时发生错误。" }, @@ -5948,7 +7578,6 @@ "help": "搜索应用、集成或面板", "group": { "app": { - "title": "应用", "children": { "action": { "open": { @@ -5964,7 +7593,6 @@ } }, "board": { - "title": "面板", "children": { "action": { "open": { @@ -5984,9 +7612,6 @@ "title": "为面板选择一个动作" } } - }, - "integration": { - "title": "集成" } } }, @@ -6015,9 +7640,6 @@ "newBoard": { "label": "创建面板" }, - "importBoard": { - "label": "导入面板" - }, "newApp": { "label": "创建应用" }, @@ -6087,7 +7709,6 @@ } }, "defaultSearchEngineId": { - "label": "默认搜索引擎", "children": { "detail": { "title": "选择您的默认搜索引擎" @@ -6095,7 +7716,6 @@ } }, "openSearchInNewTab": { - "label": "在新标签页中打开搜索结果", "children": { "detail": { "title": "在新标签页中打开搜索结果" @@ -6103,7 +7723,6 @@ } }, "ddgBangs": { - "label": "启用 DuckDuckGo Bang 快捷搜索", "children": { "detail": { "title": "启用 DuckDuckGo Bang 快捷搜索" @@ -6118,6 +7737,13 @@ } } }, + "byteUnitSystem": { + "children": { + "detail": { + "title": "选择您的数据大小单位" + } + } + }, "homeBoardId": { "label": "默认面板", "children": { @@ -6135,7 +7761,6 @@ } }, "pingIconsEnabled": { - "label": "使用图标表示 ping 状态", "children": { "detail": { "title": "使用图标表示 ping 状态" @@ -6143,7 +7768,6 @@ } }, "enableRightClickOnWidgets": { - "label": "启用小组件右键菜单", "children": { "detail": { "title": "启用小组件右键功能" @@ -6171,6 +7795,7 @@ "description": "开始输入以搜索您的媒体请求集成", "disabled": { "noIntegration": "添加 Overseerr、Jellyseerr 或 Seerr 集成以启用媒体搜索。", + "signInRequired": "登录以搜索媒体请求集成。", "scoped": "此小组件没有可用的媒体请求集成。" } } @@ -6187,7 +7812,6 @@ "help": "使用外部搜索引擎", "group": { "searchEngine": { - "title": "搜索引擎", "tipDdgBangs": "提示:你也可以在此使用任何 DuckDuckGo Bangs,例如 !something", "bang": { "searchWithQuery": "使用“‘’{query}”搜索“{label}”", @@ -6238,20 +7862,6 @@ "group": { "mode": { "title": "模式" - }, - "help": { - "title": "帮助", - "option": { - "documentation": { - "label": "文档" - }, - "submitIssue": { - "label": "提交问题" - }, - "discord": { - "label": "Discord 社区" - } - } } } }, @@ -6263,9 +7873,10 @@ "other": { "label": "使用另一个搜索引擎搜索" }, - "no-default": { - "label": "没有默认的搜索引擎", - "description": "在首选项中设置默认搜索引擎" + "no-engines": { + "label": "未配置搜索引擎", + "descriptionCreate": "从命令菜单添加搜索引擎", + "descriptionUnavailable": "请管理员配置搜索引擎" }, "search": { "label": "用{name}搜索“{query}”" @@ -6345,7 +7956,6 @@ "help": "搜索用户或用户组", "group": { "user": { - "title": "用户", "children": { "action": { "detail": { @@ -6358,7 +7968,6 @@ } }, "group": { - "title": "群组", "children": { "action": { "detail": { @@ -6382,9 +7991,6 @@ "engine": { "search": "查找搜索引擎", "field": { - "name": { - "label": "名称" - }, "short": { "label": "短的" }, @@ -6397,12 +8003,19 @@ }, "page": { "list": { - "title": "搜索引擎", + "ariaLabel": "已配置的搜索引擎", "noResults": { "title": "还没有搜索引擎", - "action": "创建您的第一个搜索引擎" + "description": "搜索引擎让Spotlight 发送查询到站点或连接的服务。", + "action": "创建您的第一个搜索引擎", + "filteredTitle": "没有符合您搜索条件的搜索引擎", + "filteredDescription": "没有与“{search}”匹配的搜索引擎。请尝试其他名称或 URL。" }, - "interactive": "交互,使用集成" + "interactive": "交互,使用集成", + "type": { + "generic": "URL 模板", + "fromIntegration": "集成" + } }, "create": { "title": "创建搜索引擎", @@ -6421,11 +8034,9 @@ "title": "编辑搜索引擎", "notification": { "success": { - "title": "成功应用更改", "message": "搜索引擎已成功保存" }, "error": { - "title": "无法应用更改", "message": "无法保存搜索引擎" } }, @@ -6564,6 +8175,10 @@ } }, "log": { + "context": { + "widgetError": "小部件在此时报告了一个错误", + "expiredWidgetError": "围绕这个小部件错误的日志不再保留" + }, "level": { "option": { "debug": "调试", @@ -6575,7 +8190,6 @@ }, "onboardingTour": { "learnMore": "阅读文档", - "next": "下一步", "prev": "上一步", "done": "完成", "skip": "跳过导览", @@ -6639,5 +8253,359 @@ "description": "更改您的配色方案、语言、默认面板和偏好设置。您也可以从这里跳转到管理区域。" } } + }, + "metadata": { + "description": "一个自托管的 *arr 堆栈和你整个故土的仪表板。集成了50多个服务,实时小部件,不存在配置文件。", + "dashboardTitle": "{appName} 仪表板" + }, + "assistant": { + "title": "助理", + "open": "打开助手", + "close": "关闭助手", + "minimize": "最小化助手", + "spotlight": "询问助手", + "spotlightDescription": "键入并发送提示信息,而不离开命令菜单。", + "spotlightPrompt": { + "title": "询问助手", + "description": "在上面键入提示符。输入后台发送提示符。", + "send": "发送提示", + "empty": "在上面输入提示" + }, + "unavailable": { + "checking": "检查助手是否可用…", + "error": "无法检查助手的可用性,请重试。", + "notConfigured": "管理员必须先配置并启用助手。", + "signIn": "登录以使用助手。" + }, + "newConversation": "新建对话", + "conversations": "对话", + "conversationActions": "对话动作", + "searchConversations": "搜索对话", + "noMatchingConversations": "没有匹配的对话", + "moreActions": "更多响应操作", + "renameConversation": { + "action": "重命名:", + "label": "对话名称", + "save": "保存名称", + "failedTitle": "无法重命名对话", + "failedDescription": "Homarr 无法重命名此对话。请重试。" + }, + "deleteConversation": { + "title": "删除对话?", + "description": "“{title}”及其消息将被永久删除。", + "failedTitle": "对话无法删除", + "failedDescription": "Homarr 无法删除此对话。请重试。" + }, + "closeHistory": "关闭聊天记录", + "openHistory": "打开聊天记录", + "emptyTitle": "我能帮助什么?", + "emptyDescription": "询问您的 Homarr 设置,检查实时实时数据,或在您想要我做出更改时批准操作。", + "suggestions": { + "health": { + "label": "检查服务健康", + "prompt": "检查我的集成并总结任何需要注意的内容。" + }, + "explore": { + "label": "探索我的Homarr", + "prompt": "在这个Homarr实例中向我展示我可以查看和管理的内容。" + }, + "media": { + "label": "查找要请求的媒体", + "prompt": "帮助我找到要请求的电影或系列片。" + }, + "style": { + "label": "改进仪表板", + "prompt": "帮助我改进面板外观或自定义 CSS 。请先向我展示面板,然后保存当前设置,然后我们做出更改。" + }, + "designWidget": { + "label": "设计一个部件", + "prompt": "创建并安装一个自定义小部件 " + } + }, + "composerPlaceholder": "询问助手……", + "runtime": { + "model": "模型", + "searchModels": "搜索模型", + "noModels": "没有可用的模型", + "otherModels": "其他模式", + "imageInput": "接受图像输入", + "thinking": "思考模式", + "reasoning": { + "auto": "自动", + "none": "关闭", + "minimal": "最小化", + "low": "低", + "medium": "中", + "high": "高" + } + }, + "providerQuota": { + "title": "Homarr 提供商", + "communityWorkshop": "社区讲习班", + "dailyAllowance": "每日申请津贴", + "remainingLabel": "还剩 {remaining}/{limit} 个 Homarr 提供商请求", + "loading": "正在加载 Homarr 提供者权限", + "signInRequired": "Homarr 提供商所需的车间登录", + "signInDescription": "通过社区讲习班登录GitHub 以获得您的单独每日津贴。", + "exhaustedDescription": "您的 Homarr 提供者津贴今天已被使用。它将在 UTC 午夜重置。", + "unavailableDescription": "登录到创意工坊或等待您的 Homarr 提供者设置重置。", + "signIn": "使用 GitHub 登录", + "signInError": "GitHub 登录失败。稍后再试。", + "loadError": "无法加载Homarr提供者津贴。", + "reset": "{relative} 后于 重置", + "toolCalls": "每个模型请求和已完成的工具通话使用一个请求。", + "retry": "重新加载津贴", + "level": { + "ok": "正常", + "warning": "警告", + "bad": "低", + "dead": "已用" + } + }, + "stop": "停止响应", + "send": "发送消息", + "copy": "复制响应", + "copyMessage": "复制消息", + "editMessage": "编辑消息", + "updateMessage": "更新消息", + "regenerate": "重新生成响应", + "helpful": "有帮助", + "notHelpful": "无帮助", + "readAloud": "大声读取响应", + "stopReading": "停止读取响应", + "feedbackError": "您的反馈无法保存。请重试。", + "exportMarkdown": "导出为 Markdown", + "exportConversation": { + "action": "将对话导出为Markdown", + "failedTitle": "无法导出对话", + "failedDescription": "Homarr 无法加载此对话。请重试。" + }, + "reasoning": "思维方式", + "previousResponse": "上一个响应", + "nextResponse": "下一个响应", + "removeAttachment": "移除附件", + "downloadFile": "下载 {name}", + "attachedImage": "附加图像", + "externalImageBlocked": "外部图像因隐私而被阻止", + "image": { + "loading": "正在加载图像", + "failed": "无法加载此图像。", + "retry": "再次尝试图像" + }, + "quoteSelection": "引用", + "dismissQuote": "删除引用", + "attachments": { + "add": "附加图像或文档", + "errorTitle": "无法添加附件", + "imageUnsupported": "所选模型不支持图像输入。" + }, + "mentions": { + "menu": "添加 Homarr 环境", + "context": "上下文", + "app": "应用", + "integration": "集成", + "board": "面板", + "widget": "小组件", + "tools": "可用工具" + }, + "markdown": { + "diagram": "图表", + "renderingDiagram": "渲染图…", + "diagramUnavailable": "此图表无法渲染。" + }, + "commands": { + "menu": "助手命令", + "health": "准备服务健康检查", + "explore": "准备此Homarr实例的概述", + "media": "准备媒体搜索", + "style": "准备版面外观或自定义 CSS 更改", + "designWidget": "准备一个一提示的自定义小部件构建。" + }, + "usage": { + "tokens": "令牌", + "contextWindow": "上下文窗口", + "requestDetails": "请求详情", + "used": "最新步骤", + "remaining": "剩余时间", + "capacity": "容量", + "input": "输入", + "output": "输出", + "cached": "缓存输入", + "cacheWrite": "缓存写入", + "reasoning": "原因", + "inputShort": "在", + "outputShort": "出", + "cachedShort": "已缓存", + "reasoningShort": "理由:", + "firstOutput": "第一个输出", + "homarrTiming": "观察到的 Homarr", + "endToEnd": "结束到结束", + "observedThroughput": "观察通过量", + "providerTiming": "提供商已报告", + "loadingProviderDetails": "正在加载生成详细信息…", + "providerDetailsPending": "OpenRouter 仍在处理一些生成的详细信息。重新打开以重试。", + "providerLatency": "供货商延迟", + "generationTime": "生成时间", + "moderationLatency": "审核", + "providerThroughput": "供货商通过量", + "fallbacks": "备注", + "fallbackLatency": "备份延迟", + "cacheDiscount": "缓存折扣", + "normalizedTokens": "OpenRouter 正常化的输入/输出", + "byok": "黑名单", + "cost": "费用", + "reported": "由提供商报告", + "estimated": "模型定价估计", + "upstreamCost": "上游输入法", + "webSearches": "网络搜索", + "finishReason": "完成原因", + "notReported": "未报告", + "agentSteps": "代理步骤", + "step": "步骤 {number}", + "generation": "生成" + }, + "toolInput": "输入", + "toolOutput": "输出", + "toolActivity": { + "iconSearch": "正在查找“{query}”图标", + "iconBrowse": "浏览可用图标" + }, + "toolNavigation": { + "openPreview": "打开预览", + "openWidget": "打开小部件" + }, + "webSearch": { + "title": "网络搜索", + "completed": "OpenRouter 为此响应搜索了在线网站。", + "searches": "{count, plural, one {# 搜索} other {# 搜索}}", + "sources": "{count, plural, one {# 源} other {# 源}}" + }, + "responseError": { + "title": "该助手无法完成", + "description": "请重试。如果问题仍然存在,请管理员验证已配置的模型端点。" + }, + "toolPreparationError": { + "title": "无法准备此请求", + "description": "模型在提供完整详细信息之前停止。请重试回复或再次描述请求。未做任何更改。" + }, + "busy": { + "title": "此助手已在工作", + "description": "等待当前响应或打开它以停止运行。" + }, + "pendingAction": { + "answerTitle": "需要答案", + "answerFallback": "选择一个答案以继续", + "formTitle": "审阅应用详情", + "boardFormTitle": "审核板更改", + "review": "预览", + "sendBlocked": "发送前解决待处理请求" + }, + "activity": { + "thinking": "助手正在思考中", + "working": "正在处理您的提示", + "ready": "响应已准备好", + "completed": "打开响应", + "approval": "需要批准", + "failed": "助理需要关注", + "expand": "打开助手响应", + "dismiss": "取消助手活动" + }, + "scrollToLatest": "滚动到最新版本", + "refresh": { + "action": "刷新当前视图", + "working": "正在刷新当前视图", + "completeTitle": "查看已刷新", + "completeDescription": "可见的Homarr 数据已重新载入.", + "failedTitle": "无法刷新视图", + "failedDescription": "更改仍可保存。请再次尝试刷新操作。" + }, + "askUser": { + "preparing": "准备问题", + "answered": "您的答案", + "other": "其它", + "otherLabel": "您的答案", + "otherPlaceholder": "输入另一个答案…", + "submit": "发送答案", + "cancelOther": "取消其他答案", + "optionKind": { + "affirmative": "确认", + "negative": "拒绝", + "alternative": "选项", + "custom": "自定义" + } + }, + "configureApp": { + "title": "审阅应用详情", + "description": "在助手请求创建批准之前选择本地图标并进行任何调整。", + "preparing": "准备应用详情", + "continue": "使用这些详细信息", + "ready": "应用程序详细信息已准备好", + "automaticContinue": "自动使用这些应用程序详细信息" + }, + "configureBoardSettings": { + "title": "审核板更改", + "loading": "正在加载当前棋盘设置", + "loadErrorTitle": "无法加载棋盘设置", + "loadErrorDescription": "看板可能不再存在,或者您可能没有权限修改它。", + "proposedCount": "助手提出了 {count} 个字段", + "changeCount": "{count} 项更改已就绪", + "ready": "版面更改已准备好", + "cancelled": "保持当前棋盘设置", + "noChanges": "没有设置将更改", + "keepCurrent": "保持当前设置", + "continue": "继续批准", + "automaticContinue": "自动接受拟议的棋盘更改", + "resetAll": "重置所有更改", + "tabs": { + "css": "Custom CSS", + "appearance": "外观", + "background": "背景", + "general": "常规" + }, + "cssDescription": "编辑完整的样式表。除非删除,否则将保留现有的规则。", + "cssCharacters": "{count}/16384 个字符", + "copyCss": "Copy CSS", + "copied": "已复制", + "restoreCss": "Restore current CSS", + "remoteCssTitle": "此 CSS 加载远程资源", + "remoteCssDescription": "导入样式表和远程 URL 当板负载时联系另一个服务器。在继续之前审查它们。" + }, + "configureWidget": { + "title": "审核小部件", + "preparing": "准备小部件设置", + "review": "审核小部件和集成", + "ready": "小部件配置已准备好", + "cancelled": "小部件未添加", + "automaticContinue": "自动接受拟议的部件配置", + "definitionLoadErrorTitle": "无法加载小部件设置", + "definitionLoadErrorDescription": "Homarr 无法加载此部件的设置。请重试。", + "loadErrorTitle": "无法加载集成", + "loadErrorDescription": "Homarr 无法加载此部件可用的集成。", + "noIntegrationTitle": "需要兼容的集成", + "noIntegrationDescription": "在将其添加到仪表盘之前,配置此部件支持的集成。", + "connectIntegration": "连接服务", + "manageIntegrations": "管理集成", + "skip": "不添加", + "errorTitle": "无法准备小部件设置", + "errorDescription": "模型没有提供完整的小部件配置。没有添加小部件。" + }, + "approvalRequired": "需要批准", + "complete": "Complete", + "denied": "被拒绝", + "failed": "失败", + "working": "工作", + "approvalDescription": "在开始之前审查此更改。", + "approveAndRun": "批准并运行", + "deny": "拒绝", + "autoApproval": { + "label": "自动批准", + "composerLabel": "为我批准", + "title": "自动批准", + "description": "自动准备此对话的表单并批准受保护的更改。 问题仍在等待您的回答,您的 Homarr 权限仍然适用。当您切换对话时,此功能将关闭。", + "enable": "启用此对话", + "disable": "关闭自动批准", + "enabled": "自动批准已开启", + "approving": "自动批准" + } } } diff --git a/packages/translation/src/lang/cr.json b/packages/translation/src/lang/cr.json index 5d6a099e7..1faeaea1e 100644 --- a/packages/translation/src/lang/cr.json +++ b/packages/translation/src/lang/cr.json @@ -1,156 +1,246 @@ { "init": { - "step": { - "start": { - "title": "crwdns2264:0crwdne2264:0", - "subtitle": "crwdns2266:0crwdne2266:0", - "description": "crwdns2268:0crwdne2268:0", - "action": { - "scratch": "crwdns2270:0crwdne2270:0", - "importOldmarr": "crwdns2272:0crwdne2272:0", - "restoreSqlite": "crwdns4601:0crwdne4601:0", - "restoreSqliteDescription": "crwdns4603:0crwdne4603:0", - "backToOptions": "crwdns4605:0crwdne4605:0" + "studio": { + "navigationLabel": "crwdns6249:0crwdne6249:0", + "back": "crwdns6251:0crwdne6251:0", + "buildBoard": "crwdns6253:0crwdne6253:0", + "common": { + "unknownError": "crwdns6255:0crwdne6255:0" + }, + "claim": { + "checking": "crwdns6257:0crwdne6257:0", + "checkingTitle": "crwdns6259:0crwdne6259:0", + "lockedTitle": "crwdns6261:0crwdne6261:0", + "lockedDescription": "crwdns6263:0crwdne6263:0", + "signInTitle": "crwdns6265:0crwdne6265:0", + "signInDescription": "crwdns6267:0crwdne6267:0", + "signIn": "crwdns6269:0crwdne6269:0", + "errorTitle": "crwdns6271:0crwdne6271:0", + "errorDescription": "crwdns6273:0crwdne6273:0" + }, + "navigation": { + "essentials": "crwdns6275:0crwdne6275:0", + "discover": "crwdns6277:0crwdne6277:0", + "connect": "crwdns6279:0crwdne6279:0", + "board": "crwdns6281:0crwdne6281:0", + "extend": "crwdns6283:0crwdne6283:0", + "review": "crwdns6285:0crwdne6285:0" + }, + "welcome": { + "title": "crwdns6287:0crwdne6287:0", + "description": "crwdns6289:0{version}crwdne6289:0", + "start": "crwdns6291:0crwdne6291:0", + "restore": "crwdns6293:0crwdne6293:0", + "restoreTitle": "crwdns6295:0crwdne6295:0", + "restoreDescription": "crwdns6297:0crwdne6297:0", + "errorTitle": "crwdns6299:0crwdne6299:0", + "errorDescription": "crwdns6301:0crwdne6301:0" + }, + "account": { + "title": "crwdns6303:0crwdne6303:0", + "description": "crwdns6305:0crwdne6305:0", + "username": "crwdns6307:0crwdne6307:0", + "passwordHint": "crwdns6309:0crwdne6309:0", + "create": "crwdns6311:0crwdne6311:0", + "errorTitle": "crwdns6313:0crwdne6313:0", + "recoveryTitle": "crwdns6315:0crwdne6315:0", + "recoveryDescription": "crwdns6317:0crwdne6317:0", + "recoveryAction": "crwdns6319:0crwdne6319:0", + "unknownError": "crwdns6321:0crwdne6321:0" + }, + "externalGroup": { + "title": "crwdns6323:0crwdne6323:0", + "description": "crwdns6325:0crwdne6325:0", + "name": "crwdns6327:0crwdne6327:0", + "nameDescription": "crwdns6329:0crwdne6329:0", + "continue": "crwdns6331:0crwdne6331:0", + "errorTitle": "crwdns6333:0crwdne6333:0", + "unknownError": "crwdns6335:0crwdne6335:0" + }, + "essentials": { + "title": "crwdns6337:0crwdne6337:0", + "description": "crwdns6339:0crwdne6339:0", + "language": "crwdns6341:0crwdne6341:0", + "theme": "crwdns6343:0crwdne6343:0", + "themeAuto": "crwdns6345:0crwdne6345:0", + "themeLight": "crwdns6347:0crwdne6347:0", + "themeDark": "crwdns6349:0crwdne6349:0", + "serverOriginHelp": "crwdns6351:0crwdne6351:0", + "serverDescription": "crwdns6353:0crwdne6353:0", + "serverOrigin": "crwdns6355:0crwdne6355:0", + "serverOriginDescription": "crwdns6357:0crwdne6357:0", + "analytics": "crwdns6359:0crwdne6359:0", + "analyticsDescription": "crwdns6361:0crwdne6361:0" + }, + "discover": { + "title": "crwdns6363:0crwdne6363:0", + "description": "crwdns6365:0crwdne6365:0", + "database": "crwdns6367:0crwdne6367:0", + "docker": "crwdns6369:0crwdne6369:0", + "kubernetes": "crwdns6371:0crwdne6371:0", + "assistantWorkshop": "crwdns6373:0crwdne6373:0", + "found": "crwdns6375:0{integrations}crwdnd6375:0{apps}crwdne6375:0", + "retryKubernetes": "crwdns6377:0crwdne6377:0", + "retryWorkshop": "crwdns6379:0crwdne6379:0", + "unknownVersion": "crwdns6381:0crwdne6381:0", + "kubernetesAvailable": "crwdns6383:0{version}crwdne6383:0", + "kubernetesDisabled": "crwdns6385:0crwdne6385:0", + "kubernetesUnavailable": "crwdns6387:0crwdne6387:0", + "workshopAvailable": "crwdns6389:0crwdne6389:0", + "workshopUnavailable": "crwdns6391:0crwdne6391:0", + "partialTitle": "crwdns6393:0crwdne6393:0", + "partialDescription": "crwdns6395:0crwdne6395:0", + "status": { + "checking": "crwdns6397:0crwdne6397:0", + "available": "crwdns6399:0crwdne6399:0", + "partial": "crwdns6401:0crwdne6401:0", + "empty": "crwdns6403:0crwdne6403:0", + "disabled": "crwdns6405:0crwdne6405:0", + "unavailable": "crwdns6407:0crwdne6407:0" } }, - "import": { - "title": "crwdns2274:0crwdne2274:0", - "subtitle": "crwdns2276:0crwdne2276:0", - "dropzone": { - "title": "crwdns2278:0crwdne2278:0", - "description": "crwdns2280:0crwdne2280:0" + "connect": { + "title": "crwdns6409:0crwdne6409:0", + "description": "crwdns6411:0crwdne6411:0", + "discoveredIntegrations": "crwdns6413:0{count}crwdne6413:0", + "detectedIntegrationLabel": "crwdns6415:0{name}crwdnd6415:0{kind}crwdne6415:0", + "detectedAppLabel": "crwdns6417:0{name}crwdne6417:0", + "otherIntegrations": "crwdns6419:0crwdne6419:0", + "configureIntegrations": "crwdns6421:0crwdne6421:0", + "discoveredApps": "crwdns6423:0{count}crwdne6423:0", + "appAddressRequired": "crwdns6425:0{name}crwdne6425:0", + "empty": "crwdns6427:0crwdne6427:0", + "dockerSource": "crwdns6429:0crwdne6429:0", + "manualSource": "crwdns6431:0crwdne6431:0", + "url": "crwdns6433:0crwdne6433:0", + "noCredentials": "crwdns6435:0crwdne6435:0", + "noCredentialsDescription": "crwdns6437:0crwdne6437:0", + "credentialMethod": "crwdns6439:0crwdne6439:0", + "getApiKey": "crwdns6441:0crwdne6441:0", + "openGuide": "crwdns6443:0crwdne6443:0", + "testConnection": "crwdns6445:0crwdne6445:0", + "testSuccess": "crwdns6447:0crwdne6447:0", + "testSuccessDescription": "crwdns6449:0crwdne6449:0", + "testError": "crwdns6451:0crwdne6451:0", + "testErrorDescription": "crwdns6453:0crwdne6453:0", + "needsConfiguration": "crwdns6455:0crwdne6455:0", + "tested": "crwdns6457:0crwdne6457:0", + "testFailed": "crwdns6459:0crwdne6459:0", + "incompleteConfirmation": "crwdns6461:0crwdne6461:0" + }, + "board": { + "title": "crwdns6463:0crwdne6463:0", + "description": "crwdns6465:0crwdne6465:0", + "target": "crwdns6467:0crwdne6467:0", + "targetDescription": "crwdns6469:0crwdne6469:0", + "targetPlaceholder": "crwdns6471:0crwdne6471:0", + "targetRequired": "crwdns6473:0crwdne6473:0", + "name": "crwdns6475:0crwdne6475:0", + "nameDescription": "crwdns6477:0crwdne6477:0", + "nameRequired": "crwdns6479:0crwdne6479:0", + "primaryColor": "crwdns6481:0crwdne6481:0", + "secondaryColor": "crwdns6483:0crwdne6483:0", + "resetColors": "crwdns6485:0crwdne6485:0", + "radius": "crwdns6487:0crwdne6487:0", + "radiusOptions": { + "xs": "crwdns6489:0crwdne6489:0", + "sm": "crwdns6491:0crwdne6491:0", + "md": "crwdns6493:0crwdne6493:0", + "lg": "crwdns6495:0crwdne6495:0", + "xl": "crwdns6497:0crwdne6497:0" }, - "fileInfo": { - "action": { - "change": "crwdns2282:0crwdne2282:0" - } + "columns": "crwdns6499:0crwdne6499:0", + "columnsDescription": "crwdns6501:0crwdne6501:0", + "columnCount": "crwdns6503:0count={count}crwdne6503:0", + "leftSidebar": "crwdns6505:0crwdne6505:0", + "rightSidebar": "crwdns6507:0crwdne6507:0", + "previewLabel": "crwdns6509:0crwdne6509:0" + }, + "extend": { + "title": "crwdns6511:0crwdne6511:0", + "tabsLabel": "crwdns6513:0crwdne6513:0", + "assistant": "crwdns6515:0crwdne6515:0", + "workshop": "crwdns6517:0crwdne6517:0", + "assistantSetup": { + "loginTitle": "crwdns6519:0crwdne6519:0", + "loginDescription": "crwdns6521:0crwdne6521:0", + "loginAction": "crwdns6523:0crwdne6523:0" }, - "importSettings": { - "title": "crwdns2284:0crwdne2284:0", - "description": "crwdns2286:0crwdne2286:0" + "workshopSetup": { + "title": "crwdns6525:0crwdne6525:0", + "description": "crwdns6527:0crwdne6527:0", + "available": "crwdns6529:0crwdne6529:0", + "checking": "crwdns6531:0crwdne6531:0", + "unavailable": "crwdns6533:0crwdne6533:0", + "discoverTitle": "crwdns6535:0crwdne6535:0", + "discoverDescription": "crwdns6537:0crwdne6537:0", + "installTitle": "crwdns6539:0crwdne6539:0", + "installDescription": "crwdns6541:0crwdne6541:0", + "publishTitle": "crwdns6543:0crwdne6543:0", + "publishDescription": "crwdns6545:0crwdne6545:0", + "browse": "crwdns6547:0crwdne6547:0" }, - "boardSelection": { - "title": "crwdns2288:0{count}crwdne2288:0", - "description": "crwdns2692:0crwdne2692:0", - "action": { - "selectAll": "crwdns2292:0crwdne2292:0", - "unselectAll": "crwdns2294:0crwdne2294:0" - } - }, - "summary": { - "title": "crwdns2296:0crwdne2296:0", - "description": "crwdns2298:0crwdne2298:0", - "action": { - "import": "crwdns2300:0crwdne2300:0" - }, - "entities": { - "apps": "crwdns2302:0crwdne2302:0", - "boards": "crwdns2304:0crwdne2304:0", - "integrations": "crwdns2306:0crwdne2306:0", - "credentialUsers": "crwdns2308:0crwdne2308:0" - } - }, - "tokenModal": { - "title": "crwdns2310:0crwdne2310:0", - "field": { - "token": { - "label": "crwdns2312:0crwdne2312:0", - "description": "crwdns2314:0crwdne2314:0" - } - }, - "notification": { - "error": { - "title": "crwdns2316:0crwdne2316:0", - "message": "crwdns2318:0crwdne2318:0" - } - } + "mcpSetup": { + "title": "crwdns6549:0crwdne6549:0", + "description": "crwdns6551:0crwdne6551:0", + "endpoint": "crwdns6553:0crwdne6553:0", + "keyTitle": "crwdns6555:0crwdne6555:0", + "keyDescription": "crwdns6557:0crwdne6557:0", + "copyKey": "crwdns6559:0crwdne6559:0", + "createKey": "crwdns6561:0crwdne6561:0", + "errorTitle": "crwdns6563:0crwdne6563:0", + "loginRequired": "crwdns6565:0crwdne6565:0", + "configuration": "crwdns6567:0crwdne6567:0", + "copy": "crwdns6569:0crwdne6569:0", + "copied": "crwdns6571:0crwdne6571:0", + "advanced": "crwdns6573:0crwdne6573:0" } }, - "user": { - "title": "crwdns2320:0crwdne2320:0", - "subtitle": "crwdns2322:0crwdne2322:0", - "notification": { - "success": { - "title": "crwdns2324:0crwdne2324:0", - "message": "crwdns2326:0crwdne2326:0" - }, - "error": { - "title": "crwdns2328:0crwdne2328:0" - } - } - }, - "group": { - "title": "crwdns2330:0crwdne2330:0", - "subtitle": "crwdns2332:0crwdne2332:0", - "form": { - "name": { - "label": "crwdns2334:0crwdne2334:0", - "description": "crwdns2336:0crwdne2336:0" - } - } - }, - "settings": { - "title": "crwdns2338:0crwdne2338:0", - "subtitle": "crwdns2340:0crwdne2340:0" - }, - "integrations": { - "title": "crwdns4369:0crwdne4369:0", - "subtitle": "crwdns4371:0crwdne4371:0", - "description": "crwdns4373:0crwdne4373:0", - "action": { - "continue": "crwdns4375:0crwdne4375:0", - "skip": "crwdns4377:0crwdne4377:0" - }, - "configure": { - "progress": "crwdns4379:0{current}crwdnd4379:0{total}crwdne4379:0", - "skip": "crwdns4381:0crwdne4381:0", - "finishing": "crwdns4383:0crwdne4383:0", - "error": { - "title": "crwdns4385:0crwdne4385:0", - "message": "crwdns4387:0crwdne4387:0" - }, - "helpers": { - "tooltip": "crwdns4389:0crwdne4389:0", - "description": "crwdns4391:0crwdne4391:0" - } - }, - "urlTemplate": { - "label": "crwdns4393:0crwdne4393:0", - "placeholder": "crwdns4395:0crwdne4395:0", - "hint": "crwdns4397:0crwdne4397:0", - "warning": "crwdns4399:0crwdne4399:0", - "preview": "crwdns4401:0{example}crwdne4401:0", - "mode": { - "subdomain": "crwdns4403:0crwdne4403:0", - "hostPort": "crwdns4405:0crwdne4405:0" - } - }, - "docker": { - "detected": "crwdns4407:0{count}crwdne4407:0", - "detectedBreakdown": "crwdns4409:0{integrations}crwdnd4409:0{apps}crwdne4409:0", - "summary": "crwdns4411:0{apps}crwdnd4411:0{integrations}crwdne4411:0", - "appBadge": "crwdns4413:0crwdne4413:0", - "appSectionLabel": "crwdns4415:0{count}crwdne4415:0", - "scanning": "crwdns4417:0crwdne4417:0", - "scanningDescription": "crwdns4419:0crwdne4419:0" + "review": { + "title": "crwdns6575:0crwdne6575:0", + "description": "crwdns6577:0crwdne6577:0", + "board": "crwdns6579:0crwdne6579:0", + "columns": "crwdns6581:0crwdne6581:0", + "columnsValue": "crwdns6583:0count={count}crwdne6583:0", + "sidebars": "crwdns6585:0crwdne6585:0", + "sidebarsValue": "crwdns6587:0count={count}crwdne6587:0", + "layouts": "crwdns6589:0crwdne6589:0", + "layoutsValue": "crwdns6591:0crwdne6591:0", + "integrations": "crwdns6593:0crwdne6593:0", + "integrationsValue": "crwdns6595:0count={count}crwdne6595:0", + "apps": "crwdns6597:0crwdne6597:0", + "appsValue": "crwdns6599:0count={count}crwdne6599:0", + "language": "crwdns6601:0crwdne6601:0", + "theme": "crwdns6603:0crwdne6603:0", + "themeAuto": "crwdns6605:0crwdne6605:0", + "themeLight": "crwdns6607:0crwdne6607:0", + "themeDark": "crwdns6609:0crwdne6609:0", + "colors": "crwdns6611:0crwdne6611:0", + "radius": "crwdns6613:0crwdne6613:0", + "automaticTitle": "crwdns6615:0crwdne6615:0", + "automaticDescription": "crwdns6617:0crwdne6617:0", + "dockerWarningTitle": "crwdns6619:0crwdne6619:0", + "dockerWarningDescription": "crwdns6621:0count={count}crwdne6621:0", + "errorTitle": "crwdns6623:0crwdne6623:0", + "progress": { + "applying": "crwdns6625:0crwdne6625:0", + "done": "crwdns6627:0crwdne6627:0" } }, "finish": { - "title": "crwdns2342:0crwdne2342:0", - "subtitle": "crwdns2344:0crwdne2344:0", - "description": "crwdns2346:0crwdne2346:0", - "action": { - "goToBoard": "crwdns2348:0{name}crwdne2348:0", - "createBoard": "crwdns2350:0crwdne2350:0", - "inviteUser": "crwdns2352:0crwdne2352:0", - "docs": "crwdns2354:0crwdne2354:0" - } + "title": "crwdns6629:0crwdne6629:0", + "description": "crwdns6631:0crwdne6631:0", + "openBoard": "crwdns6633:0crwdne6633:0", + "manageTitle": "crwdns6635:0crwdne6635:0", + "manageDescription": "crwdns6637:0crwdne6637:0", + "workshopTitle": "crwdns6639:0crwdne6639:0", + "workshopDescription": "crwdns6641:0crwdne6641:0", + "docsTitle": "crwdns6643:0crwdne6643:0", + "docsDescription": "crwdns6645:0crwdne6645:0" } - }, - "backToStart": "crwdns2356:0crwdne2356:0" + } }, "user": { - "title": "crwdns2:0crwdne2:0", "name": "crwdns4:0crwdne4:0", "page": { "login": { @@ -159,12 +249,10 @@ }, "invite": { "title": "crwdns10:0crwdne10:0", + "titleWithAppName": "crwdns6647:0{appName}crwdne6647:0", "subtitle": "crwdns12:0crwdne12:0", + "subtitleWithAppName": "crwdns6649:0{appName}crwdne6649:0", "description": "crwdns14:0{username}crwdne14:0" - }, - "init": { - "title": "crwdns16:0crwdne16:0", - "subtitle": "crwdns18:0crwdne18:0" } }, "field": { @@ -192,12 +280,17 @@ "previousPassword": { "label": "crwdns40:0crwdne40:0" }, - "homeBoard": { - "label": "crwdns42:0crwdne42:0" - }, "pingIconsEnabled": { "label": "crwdns44:0crwdne44:0" }, + "byteUnitSystem": { + "label": "crwdns6651:0crwdne6651:0", + "description": "crwdns6653:0crwdne6653:0", + "options": { + "binary": "crwdns6655:0crwdne6655:0", + "decimal": "crwdns6657:0crwdne6657:0" + } + }, "enableRightClickOnWidgets": { "label": "crwdns6095:0crwdne6095:0", "description": "crwdns6097:0crwdne6097:0" @@ -247,7 +340,6 @@ } } }, - "create": "crwdns74:0crwdne74:0", "changePassword": { "label": "crwdns76:0crwdne76:0", "notification": { @@ -259,56 +351,6 @@ } } }, - "changeHomeBoard": { - "notification": { - "success": { - "message": "crwdns82:0crwdne82:0" - }, - "error": { - "message": "crwdns84:0crwdne84:0" - } - } - }, - "changeSearchPreferences": { - "notification": { - "success": { - "message": "crwdns2698:0crwdne2698:0" - }, - "error": { - "message": "crwdns2700:0crwdne2700:0" - } - } - }, - "changeFirstDayOfWeek": { - "notification": { - "success": { - "message": "crwdns86:0crwdne86:0" - }, - "error": { - "message": "crwdns88:0crwdne88:0" - } - } - }, - "changePingIconsEnabled": { - "notification": { - "success": { - "message": "crwdns90:0crwdne90:0" - }, - "error": { - "message": "crwdns92:0crwdne92:0" - } - } - }, - "changeDdgBangs": { - "notification": { - "success": { - "message": "crwdns4233:0crwdne4233:0" - }, - "error": { - "message": "crwdns4235:0crwdne4235:0" - } - } - }, "manageAvatar": { "changeImage": { "label": "crwdns94:0crwdne94:0", @@ -338,16 +380,6 @@ } } }, - "editProfile": { - "notification": { - "success": { - "message": "crwdns112:0crwdne112:0" - }, - "error": { - "message": "crwdns114:0crwdne114:0" - } - } - }, "delete": { "label": "crwdns116:0crwdne116:0", "description": "crwdns118:0crwdne118:0", @@ -356,18 +388,13 @@ "select": { "label": "crwdns122:0crwdne122:0", "notFound": "crwdns124:0crwdne124:0" - }, - "transfer": { - "label": "crwdns126:0crwdne126:0" } } }, "group": { - "title": "crwdns128:0crwdne128:0", "name": "crwdns130:0crwdne130:0", "search": "crwdns132:0crwdne132:0", "field": { - "name": "crwdns134:0crwdne134:0", "members": "crwdns136:0crwdne136:0", "homeBoard": { "label": "crwdns2760:0crwdne2760:0", @@ -388,6 +415,19 @@ } } }, + "custom-widget": { + "title": "crwdns6659:0crwdne6659:0", + "item": { + "manage": { + "label": "crwdns6661:0crwdne6661:0", + "description": "crwdns6663:0crwdne6663:0" + }, + "secret-write": { + "label": "crwdns6665:0crwdne6665:0", + "description": "crwdns6667:0crwdne6667:0" + } + } + }, "app": { "title": "crwdns144:0crwdne144:0", "item": { @@ -493,6 +533,35 @@ "description": "crwdns230:0crwdne230:0" } } + }, + "matrix": { + "none": "crwdns6669:0crwdne6669:0", + "impliedHint": "crwdns6671:0{permissions}crwdne6671:0", + "grantedViaAdmin": "crwdns6673:0crwdne6673:0", + "preset": { + "label": "crwdns6675:0crwdne6675:0", + "viewer": "crwdns6677:0crwdne6677:0", + "viewerDescription": "crwdns6679:0crwdne6679:0", + "editor": "crwdns6681:0crwdne6681:0", + "editorDescription": "crwdns6683:0crwdne6683:0", + "admin": "crwdns6685:0crwdne6685:0", + "adminDescription": "crwdns6687:0crwdne6687:0", + "custom": "crwdns6689:0crwdne6689:0" + }, + "effective": { + "title": "crwdns6691:0crwdne6691:0", + "description": "crwdns6693:0crwdne6693:0", + "empty": "crwdns6695:0crwdne6695:0" + }, + "noneDescription": "crwdns6697:0crwdne6697:0", + "level": { + "view": "crwdns6699:0crwdne6699:0", + "use": "crwdns6701:0crwdne6701:0", + "interact": "crwdns6703:0crwdne6703:0", + "modify": "crwdns6705:0crwdne6705:0", + "full": "crwdns6707:0crwdne6707:0" + }, + "capabilityIncluded": "crwdns6709:0{level}crwdne6709:0" } }, "memberNotice": { @@ -607,21 +676,24 @@ "search": "crwdns2530:0crwdne2530:0", "page": { "list": { - "title": "crwdns286:0crwdne286:0", + "ariaLabel": "crwdns6711:0crwdne6711:0", "noResults": { "title": "crwdns288:0crwdne288:0", - "action": "crwdns290:0crwdne290:0" + "description": "crwdns6713:0crwdne6713:0", + "action": "crwdns290:0crwdne290:0", + "filteredTitle": "crwdns6715:0crwdne6715:0", + "filteredDescription": "crwdns6717:0{search}crwdne6717:0", + "createOnlyTitle": "crwdns6719:0crwdne6719:0", + "createOnlyDescription": "crwdns6721:0crwdne6721:0" } }, "create": { "title": "crwdns292:0crwdne292:0", "notification": { "success": { - "title": "crwdns294:0crwdne294:0", "message": "crwdns296:0crwdne296:0" }, "error": { - "title": "crwdns298:0crwdne298:0", "message": "crwdns300:0crwdne300:0" } } @@ -630,11 +702,9 @@ "title": "crwdns302:0crwdne302:0", "notification": { "success": { - "title": "crwdns304:0crwdne304:0", "message": "crwdns306:0crwdne306:0" }, "error": { - "title": "crwdns308:0crwdne308:0", "message": "crwdns310:0crwdne310:0" } } @@ -644,26 +714,18 @@ "message": "crwdns314:0{name}crwdne314:0", "notification": { "success": { - "title": "crwdns316:0crwdne316:0", "message": "crwdns318:0crwdne318:0" }, "error": { - "title": "crwdns320:0crwdne320:0", "message": "crwdns322:0crwdne322:0" } } } }, "field": { - "name": { - "label": "crwdns324:0crwdne324:0" - }, "description": { "label": "crwdns326:0crwdne326:0" }, - "url": { - "label": "crwdns328:0crwdne328:0" - }, "useDifferentUrlForPing": { "checkbox": { "label": "crwdns2816:0crwdne2816:0", @@ -678,58 +740,397 @@ "search": "crwdns3156:0crwdne3156:0", "noResults": "crwdns3158:0crwdne3158:0", "action": "crwdns3160:0{app}crwdne3160:0", - "title": "crwdns3162:0crwdne3162:0" + "title": "crwdns3162:0crwdne3162:0", + "toggle": "crwdns6723:0crwdne6723:0", + "selected": "crwdns6725:0crwdne6725:0", + "multiple": "crwdns6727:0{count}crwdne6727:0", + "selectedCount": "crwdns6729:0count={count}crwdne6729:0", + "appsSelected": "crwdns6731:0count={count}crwdne6731:0", + "selectMultiple": "crwdns6733:0crwdne6733:0", + "cancelMultiple": "crwdns6735:0crwdne6735:0", + "customApplication": "crwdns6737:0crwdne6737:0", + "application": "crwdns6739:0crwdne6739:0" }, "create": { "title": "crwdns3164:0crwdne3164:0", "description": "crwdns3166:0crwdne3166:0", "action": "crwdns3168:0crwdne3168:0" - }, - "add": "crwdns3170:0crwdne3170:0" + } } }, + "tips": { + "dismiss": "crwdns6741:0crwdne6741:0", + "multiSelectApps": "crwdns6743:0crwdne6743:0" + }, "customWidget": { + "secretEntry": { + "title": "crwdns6745:0crwdne6745:0", + "description": "crwdns6747:0crwdne6747:0", + "loading": "crwdns6749:0crwdne6749:0", + "applying": "crwdns6751:0crwdne6751:0", + "saved": "crwdns6753:0crwdne6753:0", + "unavailable": "crwdns6755:0crwdne6755:0", + "saveError": "crwdns6757:0crwdne6757:0", + "source": "crwdns6759:0{name}crwdne6759:0", + "baseUrl": "crwdns6761:0crwdne6761:0", + "networkScope": "crwdns6763:0crwdne6763:0", + "save": "crwdns6765:0crwdne6765:0", + "expires": "crwdns6767:0{time}crwdne6767:0" + }, "page": { "list": { - "title": "crwdns5283:0crwdne5283:0", "noResults": "crwdns5285:0crwdne5285:0", - "loading": "crwdns5287:0crwdne5287:0" + "noDescription": "crwdns6769:0crwdne6769:0", + "enabled": "crwdns6771:0crwdne6771:0", + "disabled": "crwdns6773:0crwdne6773:0", + "disabledDescription": "crwdns6775:0crwdne6775:0", + "requestCount": "crwdns6777:0count={count}crwdne6777:0", + "invalidDefinition": "crwdns6779:0crwdne6779:0", + "migrationRequired": "crwdns6781:0crwdne6781:0", + "migrationInstructions": "crwdns6783:0crwdne6783:0", + "missingCredentials": "crwdns6785:0count={count}crwdne6785:0", + "missingCredentialsDescription": "crwdns6787:0count={count}crwdne6787:0" }, "create": { "title": "crwdns5289:0crwdne5289:0", "subtitle": "crwdns5291:0crwdne5291:0" }, - "edit": { - "title": "crwdns5293:0crwdne5293:0" + "tabs": { + "ariaLabel": "crwdns6789:0crwdne6789:0", + "installed": "crwdns6791:0crwdne6791:0", + "workshop": "crwdns6793:0crwdne6793:0" } }, "action": { - "create": "crwdns5295:0crwdne5295:0", - "import": "crwdns5297:0crwdne5297:0", - "save": "crwdns5299:0crwdne5299:0", + "pasteImportHint": "crwdns6795:0crwdne6795:0", "delete": "crwdns5301:0crwdne5301:0", "deleteConfirm": "crwdns5303:0{name}crwdne5303:0", "export": "crwdns5305:0crwdne5305:0", - "edit": "crwdns5311:0crwdne5311:0", "duplicate": "crwdns5323:0crwdne5323:0", + "aiPrompt": "crwdns6797:0crwdne6797:0", "copyAiPrompt": "crwdns5325:0crwdne5325:0", "enable": "crwdns5327:0crwdne5327:0", "disable": "crwdns5329:0crwdne5329:0", - "menu": "crwdns5331:0crwdne5331:0" + "menu": "crwdns5331:0crwdne5331:0", + "downloadSkill": "crwdns6799:0crwdne6799:0", + "publishWorkshop": "crwdns6801:0crwdne6801:0", + "migrate": "crwdns6803:0crwdne6803:0", + "configureSources": "crwdns6805:0crwdne6805:0", + "copyLegacyDefinition": "crwdns6807:0crwdne6807:0", + "exportLegacyDefinition": "crwdns6809:0crwdne6809:0", + "copyMigrationPrompt": "crwdns6811:0crwdne6811:0", + "pasteMigration": "crwdns6813:0crwdne6813:0", + "importMigration": "crwdns6815:0crwdne6815:0" + }, + "sourceSetupDialog": { + "title": "crwdns6817:0crwdne6817:0", + "description": "crwdns6819:0crwdne6819:0", + "credentialsRequired": "crwdns6821:0crwdne6821:0", + "save": "crwdns6823:0crwdne6823:0" }, "field": { - "name": "crwdns5333:0crwdne5333:0", - "description": "crwdns5335:0crwdne5335:0", - "iconUrl": "crwdns5337:0crwdne5337:0" + "description": "crwdns5335:0crwdne5335:0" + }, + "editor": { + "errorBoundary": { + "title": "crwdns6825:0crwdne6825:0" + }, + "action": { + "components": "crwdns6827:0crwdne6827:0", + "format": "crwdns6829:0crwdne6829:0", + "insertStarter": "crwdns6831:0crwdne6831:0", + "redo": "crwdns6833:0crwdne6833:0", + "copied": "crwdns6835:0crwdne6835:0", + "schema": "crwdns6837:0crwdne6837:0" + }, + "reference": { + "minimal": "crwdns6839:0crwdne6839:0", + "full": "crwdns6841:0crwdne6841:0" + }, + "componentReference": { + "search": "crwdns6843:0crwdne6843:0", + "empty": "crwdns6845:0crwdne6845:0", + "count": "crwdns6847:0count={count}crwdne6847:0" + }, + "status": { + "errors": "crwdns6849:0count={count}crwdne6849:0", + "warnings": "crwdns6851:0count={count}crwdne6851:0", + "ready": "crwdns6853:0crwdne6853:0", + "position": "crwdns6855:0line={line}crwdnd6855:0column={column}crwdne6855:0", + "characters": "crwdns6857:0count={count}crwdne6857:0", + "charactersWithLimit": "crwdns6859:0count={count}crwdnd6859:0limit={limit}crwdne6859:0" + }, + "diagnostics": { + "title": "crwdns6861:0crwdne6861:0", + "line": "crwdns6863:0line={line}crwdne6863:0", + "ast": "crwdns6865:0{value}crwdne6865:0", + "bindingTypeConflict": "crwdns6867:0{value}crwdne6867:0", + "runtimeBindingTypeConflict": "crwdns6869:0{value}crwdnd6869:0{firstType}crwdnd6869:0{secondType}crwdne6869:0", + "dynamicRequestId": "crwdns6871:0crwdne6871:0", + "dynamicInputBinding": "crwdns6873:0crwdne6873:0", + "inlineRequestProps": "crwdns6875:0crwdne6875:0", + "invalidRequestManifest": "crwdns6877:0{value}crwdne6877:0", + "missingRequestId": "crwdns6879:0crwdne6879:0", + "templateEmpty": "crwdns6881:0crwdne6881:0", + "templateTooLong": "crwdns6883:0crwdne6883:0", + "unknownRequest": "crwdns6885:0{value}crwdne6885:0" + } + }, + "workbench": { + "configure": "crwdns6887:0crwdne6887:0", + "sectionNavigation": "crwdns6889:0crwdne6889:0", + "widgetPreview": "crwdns6891:0crwdne6891:0", + "generalInformation": "crwdns6893:0crwdne6893:0", + "invalidWidget": "crwdns6895:0crwdne6895:0", + "section": { + "general": "crwdns6897:0crwdne6897:0", + "sources": "crwdns6899:0crwdne6899:0", + "requests": "crwdns6901:0crwdne6901:0", + "options": "crwdns6903:0crwdne6903:0", + "jsx": "crwdns6905:0crwdne6905:0", + "preview": "crwdns6907:0crwdne6907:0" + }, + "status": { + "unsaved": "crwdns6909:0crwdne6909:0", + "invalid": "crwdns6911:0crwdne6911:0", + "ready": "crwdns6913:0crwdne6913:0" + }, + "saveError": { + "title": "crwdns6915:0crwdne6915:0", + "description": "crwdns6917:0crwdne6917:0", + "more": "crwdns6919:0{count}crwdne6919:0", + "errors": "crwdns6921:0crwdne6921:0", + "copy": "crwdns6923:0crwdne6923:0", + "copied": "crwdns6925:0crwdne6925:0" + }, + "action": { + "preview": "crwdns6927:0crwdne6927:0", + "previewLoading": "crwdns6929:0crwdne6929:0" + }, + "requests": { + "title": "crwdns6931:0crwdne6931:0", + "label": "crwdns6933:0crwdne6933:0", + "description": "crwdns6935:0crwdne6935:0" + }, + "options": { + "title": "crwdns6937:0crwdne6937:0" + }, + "builder": { + "advancedManifest": "crwdns6939:0crwdne6939:0", + "advancedJson": "crwdns6941:0crwdne6941:0", + "manifestFilename": "crwdns6943:0crwdne6943:0", + "request": "crwdns6945:0count={count}crwdne6945:0", + "requestId": "crwdns6947:0crwdne6947:0", + "type": "crwdns6949:0crwdne6949:0", + "method": "crwdns6951:0crwdne6951:0", + "source": "crwdns6953:0crwdne6953:0", + "run": "crwdns6955:0crwdne6955:0", + "runLoad": "crwdns6957:0crwdne6957:0", + "runManual": "crwdns6959:0crwdne6959:0", + "permission": "crwdns6961:0crwdne6961:0", + "path": "crwdns6963:0crwdne6963:0", + "pathDescription": "crwdns6965:0crwdne6965:0", + "requestDetails": "crwdns6967:0crwdne6967:0", + "queryValues": "crwdns6969:0crwdne6969:0", + "queryKey": "crwdns6971:0crwdne6971:0", + "queryKeyInvalid": "crwdns6973:0crwdne6973:0", + "valueSource": "crwdns6975:0crwdne6975:0", + "literal": "crwdns6977:0crwdne6977:0", + "widgetOption": "crwdns6979:0crwdne6979:0", + "invocationParameter": "crwdns6981:0crwdne6981:0", + "option": "crwdns6983:0crwdne6983:0", + "parameterName": "crwdns6985:0crwdne6985:0", + "value": "crwdns6987:0crwdne6987:0", + "removeQueryValue": "crwdns6989:0crwdne6989:0", + "addQueryValue": "crwdns6991:0crwdne6991:0", + "jsonBody": "crwdns6993:0crwdne6993:0", + "jsonBodyDescription": "crwdns6995:0$optioncrwdnd6995:0$paramcrwdne6995:0", + "insertOptionReference": "crwdns6997:0crwdne6997:0", + "insertParameterReference": "crwdns6999:0crwdne6999:0", + "confirmation": "crwdns7001:0crwdne7001:0", + "invalidation": "crwdns7003:0crwdne7003:0", + "invalidationDescription": "crwdns7005:0crwdne7005:0", + "noAuth": "crwdns7007:0crwdne7007:0", + "moveRequestUp": "crwdns7009:0crwdne7009:0", + "moveRequestDown": "crwdns7011:0crwdne7011:0", + "removeRequest": "crwdns7013:0crwdne7013:0", + "addRequest": "crwdns7015:0crwdne7015:0", + "optionName": "crwdns7017:0crwdne7017:0", + "label": "crwdns7019:0crwdne7019:0", + "control": "crwdns7021:0crwdne7021:0", + "description": "crwdns7023:0crwdne7023:0", + "default": "crwdns7025:0crwdne7025:0", + "optionDetails": "crwdns7027:0crwdne7027:0", + "minimum": "crwdns7029:0crwdne7029:0", + "maximum": "crwdns7031:0crwdne7031:0", + "step": "crwdns7033:0crwdne7033:0", + "choiceLabel": "crwdns7035:0crwdne7035:0", + "choiceValue": "crwdns7037:0crwdne7037:0", + "newChoice": "crwdns7039:0crwdne7039:0", + "addChoice": "crwdns7041:0crwdne7041:0", + "removeChoice": "crwdns7043:0crwdne7043:0", + "choicesRequest": "crwdns7045:0crwdne7045:0", + "itemsPath": "crwdns7047:0crwdne7047:0", + "itemsPathPlaceholder": "crwdns7049:0crwdne7049:0", + "valuePath": "crwdns7051:0crwdne7051:0", + "labelPath": "crwdns7053:0crwdne7053:0", + "group": "crwdns7055:0crwdne7055:0", + "advancedOption": "crwdns7057:0crwdne7057:0", + "moveOptionUp": "crwdns7059:0crwdne7059:0", + "moveOptionDown": "crwdns7061:0crwdne7061:0", + "removeOption": "crwdns7063:0crwdne7063:0", + "addOption": "crwdns7065:0crwdne7065:0", + "invalidJson": "crwdns7067:0crwdne7067:0", + "invalidWidget": "crwdns7069:0crwdne7069:0" + }, + "jsx": { + "title": "crwdns7071:0crwdne7071:0", + "label": "crwdns7073:0crwdne7073:0" + }, + "sources": { + "title": "crwdns7075:0crwdne7075:0", + "newName": "crwdns7077:0count={count}crwdne7077:0", + "duplicateSourceId": "crwdns7079:0crwdne7079:0", + "credentialRemoved": "crwdns7081:0crwdne7081:0", + "credentialRemovedDescription": "crwdns7083:0crwdne7083:0", + "primary": "crwdns7085:0crwdne7085:0", + "id": "crwdns7087:0crwdne7087:0", + "name": "crwdns7089:0crwdne7089:0", + "baseUrl": "crwdns7091:0crwdne7091:0", + "baseUrlError": { + "invalid": "crwdns7093:0crwdne7093:0", + "protocol": "crwdns7095:0crwdne7095:0", + "credentials": "crwdns7097:0crwdne7097:0", + "queryOrFragment": "crwdns7099:0crwdne7099:0" + }, + "networkScope": "crwdns7101:0crwdne7101:0", + "authentication": "crwdns7103:0crwdne7103:0", + "headerName": "crwdns7105:0crwdne7105:0", + "queryParameter": "crwdns7107:0crwdne7107:0", + "configured": "crwdns7109:0crwdne7109:0", + "clear": "crwdns7111:0crwdne7111:0", + "remove": "crwdns7113:0crwdne7113:0", + "advanced": "crwdns7115:0crwdne7115:0", + "add": "crwdns7117:0crwdne7117:0", + "sourceType": "crwdns7119:0crwdne7119:0", + "manualSource": "crwdns7121:0crwdne7121:0", + "existingIntegration": "crwdns7123:0crwdne7123:0", + "integrationType": "crwdns7125:0crwdne7125:0", + "selectIntegration": "crwdns7127:0crwdne7127:0", + "noIntegrations": "crwdns7129:0crwdne7129:0", + "integrationUnavailable": "crwdns7131:0crwdne7131:0", + "integrationDescription": "crwdns7133:0crwdne7133:0" + }, + "ai": { + "title": "crwdns7135:0crwdne7135:0", + "description": "crwdns7137:0crwdne7137:0", + "request": "crwdns7139:0crwdne7139:0", + "documentationUrl": "crwdns7141:0crwdne7141:0", + "paste": "crwdns7143:0crwdne7143:0", + "response": "crwdns7145:0crwdne7145:0", + "manualCopyDescription": "crwdns7147:0crwdne7147:0", + "manualPasteDescription": "crwdns7149:0crwdne7149:0", + "selectAll": "crwdns7151:0crwdne7151:0", + "loadResponse": "crwdns7153:0crwdne7153:0", + "loaded": "crwdns7155:0crwdne7155:0", + "invalidResponse": "crwdns7157:0crwdne7157:0", + "invalidResponseDetail": "crwdns7159:0{message}crwdne7159:0" + }, + "preview": { + "invalid": "crwdns7161:0crwdne7161:0", + "fixtureError": "crwdns7163:0crwdne7163:0", + "requestData": "crwdns7165:0crwdne7165:0", + "status": { + "idle": "crwdns7167:0crwdne7167:0", + "loading": "crwdns7169:0crwdne7169:0", + "success": "crwdns7171:0crwdne7171:0", + "error": "crwdns7173:0crwdne7173:0" + }, + "result": { + "loading": { + "title": "crwdns7175:0crwdne7175:0", + "description": "crwdns7177:0crwdne7177:0" + }, + "success": { + "title": "crwdns7179:0crwdne7179:0", + "description": "crwdns7181:0succeeded={succeeded}crwdne7181:0" + }, + "error": { + "title": "crwdns7183:0crwdne7183:0", + "description": "crwdns7185:0succeeded={succeeded}crwdnd7185:0failed={failed}crwdne7185:0" + } + }, + "instanceOptions": "crwdns7187:0crwdne7187:0", + "liveActions": "crwdns7189:0crwdne7189:0", + "liveActionsDescription": "crwdns7191:0crwdne7191:0", + "noActions": "crwdns7193:0crwdne7193:0", + "containedFailures": "crwdns7195:0crwdne7195:0", + "validation": { + "title": "crwdns7197:0crwdne7197:0", + "ready": "crwdns7199:0crwdne7199:0" + }, + "accessibility": { + "title": "crwdns7201:0crwdne7201:0", + "ready": "crwdns7203:0crwdne7203:0", + "pending": "crwdns7205:0crwdne7205:0", + "imageAlt": "crwdns7207:0crwdne7207:0", + "actionIconLabel": "crwdns7209:0crwdne7209:0", + "inputLabel": "crwdns7211:0crwdne7211:0" + }, + "journal": "crwdns7213:0crwdne7213:0", + "actionParameters": "crwdns7215:0crwdne7215:0", + "invalidParameters": "crwdns7217:0crwdne7217:0", + "runDestructive": "crwdns7219:0crwdne7219:0", + "runAction": "crwdns7221:0crwdne7221:0", + "deleteConfirmation": "crwdns7223:0crwdne7223:0", + "simulated": "crwdns7225:0crwdne7225:0", + "httpStatus": "crwdns7227:0status={status}crwdne7227:0", + "tab": { + "widget": "crwdns7229:0crwdne7229:0", + "data": "crwdns7231:0crwdne7231:0", + "options": "crwdns7233:0crwdne7233:0", + "state": "crwdns7235:0crwdne7235:0", + "actions": "crwdns7237:0crwdne7237:0", + "diagnostics": "crwdns7239:0crwdne7239:0" + }, + "size": { + "compact": "crwdns7241:0crwdne7241:0", + "standard": "crwdns7243:0crwdne7243:0", + "wide": "crwdns7245:0crwdne7245:0" + }, + "fixture": { + "live": "crwdns7247:0crwdne7247:0", + "loading": "crwdns7249:0crwdne7249:0", + "empty": "crwdns7251:0crwdne7251:0", + "error": "crwdns7253:0crwdne7253:0" + } + } + }, + "preview": { + "request": { + "permission": { + "view": "crwdns7255:0crwdne7255:0", + "modify": "crwdns7257:0crwdne7257:0", + "full": "crwdns7259:0crwdne7259:0" + } + } }, "notification": { "created": "crwdns5553:0{name}crwdne5553:0", "updated": "crwdns5555:0{name}crwdne5555:0", "deleted": "crwdns5557:0{name}crwdne5557:0", "imported": "crwdns6079:0crwdne6079:0", - "aiPromptCopied": "crwdns5561:0crwdne5561:0", + "migrated": "crwdns7261:0crwdne7261:0", + "migrationError": "crwdns7263:0crwdne7263:0", + "legacyDefinitionCopied": "crwdns7265:0crwdne7265:0", + "legacyDefinitionCopyError": "crwdns7267:0crwdne7267:0", + "migrationPromptCopied": "crwdns7269:0crwdne7269:0", + "migrationPromptCopyError": "crwdns7271:0crwdne7271:0", + "sourcesConfigured": "crwdns7273:0crwdne7273:0", + "sourceConfigurationError": "crwdns7275:0crwdne7275:0", + "aiPromptCopiedWithCount": "crwdns7277:0count={count}crwdne7277:0", "aiPromptCopyError": "crwdns5569:0crwdne5569:0", - "createError": "crwdns5571:0crwdne5571:0", + "aiPromptSent": "crwdns7279:0crwdne7279:0", "updateError": "crwdns5573:0crwdne5573:0", "importError": "crwdns5575:0crwdne5575:0", "exportError": "crwdns5577:0crwdne5577:0", @@ -737,29 +1138,184 @@ "duplicateError": "crwdns5581:0crwdne5581:0", "toggleError": "crwdns5583:0crwdne5583:0", "deleteError": "crwdns5585:0crwdne5585:0", - "previewError": "crwdns5587:0crwdne5587:0", - "executed": "crwdns5589:0crwdne5589:0", - "executeError": "crwdns5591:0{error}crwdne5591:0" + "previewError": "crwdns5587:0crwdne5587:0" + }, + "importReview": { + "title": "crwdns7281:0crwdne7281:0", + "description": "crwdns7283:0crwdne7283:0", + "migrationTitle": "crwdns7285:0crwdne7285:0", + "migrationDescription": "crwdns7287:0crwdne7287:0", + "fileLabel": "crwdns7289:0crwdne7289:0", + "name": "crwdns7291:0crwdne7291:0", + "origin": "crwdns7293:0crwdne7293:0", + "authentication": "crwdns7295:0crwdne7295:0", + "networkScope": "crwdns7297:0crwdne7297:0", + "methods": "crwdns7299:0crwdne7299:0", + "permissions": "crwdns7301:0crwdne7301:0", + "sourceSetup": { + "title": "crwdns7303:0crwdne7303:0", + "description": "crwdns7305:0crwdne7305:0", + "suggestedUrl": "crwdns7307:0crwdne7307:0", + "confirmUrl": "crwdns7309:0crwdne7309:0", + "ready": "crwdns7311:0crwdne7311:0", + "needsUrl": "crwdns7313:0crwdne7313:0", + "credentialsMissing": "crwdns7315:0crwdne7315:0", + "credentialsOptional": "crwdns7317:0crwdne7317:0" + }, + "actionWarning": { + "title": "crwdns7319:0crwdne7319:0", + "description": "crwdns7321:0crwdne7321:0" + }, + "cancel": "crwdns7323:0crwdne7323:0", + "confirm": "crwdns7325:0crwdne7325:0", + "confirmMigration": "crwdns7327:0crwdne7327:0" + }, + "secret": { + "apiKey": "crwdns7329:0crwdne7329:0", + "username": "crwdns5539:0crwdne5539:0", + "password": "crwdns5541:0crwdne5541:0", + "savedPlaceholder": "crwdns5543:0crwdne5543:0" + } + }, + "workshop": { + "title": "crwdns7331:0crwdne7331:0", + "browseWorkshop": "crwdns7333:0crwdne7333:0", + "openCommunity": "crwdns7335:0crwdne7335:0", + "openOnWorkshop": "crwdns7337:0{title}crwdne7337:0", + "back": "crwdns7339:0crwdne7339:0", + "search": "crwdns7341:0crwdne7341:0", + "searchCss": "crwdns7343:0crwdne7343:0", + "sort": "crwdns7345:0crwdne7345:0", + "sortTop": "crwdns7347:0crwdne7347:0", + "sortNewest": "crwdns7349:0crwdne7349:0", + "listAriaLabel": "crwdns7351:0crwdne7351:0", + "listAriaLabelCss": "crwdns7353:0crwdne7353:0", + "empty": "crwdns7355:0crwdne7355:0", + "emptyDescription": "crwdns7357:0crwdne7357:0", + "emptyFilteredTitle": "crwdns7359:0crwdne7359:0", + "emptyFilteredDescription": "crwdns7361:0{search}crwdne7361:0", + "emptyCss": "crwdns7363:0crwdne7363:0", + "unavailableTitle": "crwdns7365:0crwdne7365:0", + "unavailable": "crwdns7367:0crwdne7367:0", + "loadError": "crwdns7369:0crwdne7369:0", + "noDescription": "crwdns7371:0crwdne7371:0", + "author": "crwdns7373:0{name}crwdne7373:0", + "communityMember": "crwdns7375:0crwdne7375:0", + "outdated": "crwdns7377:0crwdne7377:0", + "outdatedWarning": "crwdns7379:0crwdne7379:0", + "score": "crwdns7381:0count={count}crwdne7381:0", + "upvote": "crwdns7383:0crwdne7383:0", + "downvote": "crwdns7385:0crwdne7385:0", + "voteError": "crwdns7387:0crwdne7387:0", + "signIn": "crwdns7389:0crwdne7389:0", + "signInError": "crwdns7391:0crwdne7391:0", + "signOut": "crwdns7393:0crwdne7393:0", + "signInHint": "crwdns7395:0crwdne7395:0", + "securityNotice": "crwdns7397:0crwdne7397:0", + "securityNoticeCss": "crwdns7399:0crwdne7399:0", + "install": "crwdns7401:0crwdne7401:0", + "installReviewTitle": "crwdns7403:0crwdne7403:0", + "installError": "crwdns7405:0crwdne7405:0", + "installErrorDescription": "crwdns7407:0crwdne7407:0", + "useCss": "crwdns7409:0crwdne7409:0", + "importCss": "crwdns7411:0crwdne7411:0", + "importCssConfirm": "crwdns7413:0{title}crwdne7413:0", + "screenshotAlt": "crwdns7415:0title={title}crwdnd7415:0count={count}crwdne7415:0", + "screenshotViewer": "crwdns7417:0{title}crwdne7417:0", + "screenshotsLabel": "crwdns7419:0{title}crwdne7419:0", + "zoomScreenshot": "crwdns7421:0crwdne7421:0", + "previousScreenshot": "crwdns7423:0crwdne7423:0", + "nextScreenshot": "crwdns7425:0crwdne7425:0", + "showScreenshotThumbnails": "crwdns7427:0crwdne7427:0", + "hideScreenshotThumbnails": "crwdns7429:0crwdne7429:0", + "closeScreenshotViewer": "crwdns7431:0crwdne7431:0", + "technicalDetails": "crwdns7433:0crwdne7433:0", + "sourceCode": "crwdns7435:0crwdne7435:0", + "export": "crwdns7437:0crwdne7437:0", + "report": "crwdns7439:0crwdne7439:0", + "reportTitle": "crwdns7441:0crwdne7441:0", + "reportReason": "crwdns7443:0crwdne7443:0", + "reportExplanation": "crwdns7445:0crwdne7445:0", + "reportSend": "crwdns7447:0crwdne7447:0", + "reportSent": "crwdns7449:0crwdne7449:0", + "reportSentDescription": "crwdns7451:0crwdne7451:0", + "reportCount": "crwdns7453:0count={count}crwdne7453:0", + "reportWarning": "crwdns7455:0count={count}crwdne7455:0", + "reportVisibility": "crwdns7457:0crwdne7457:0", + "reportCategory": { + "outdated": "crwdns7459:0crwdne7459:0", + "malicious": "crwdns7461:0crwdne7461:0", + "spam": "crwdns7463:0crwdne7463:0", + "copyright": "crwdns7465:0crwdne7465:0", + "inappropriate": "crwdns7467:0crwdne7467:0", + "other": "crwdns7469:0crwdne7469:0" + }, + "publish": { + "title": "crwdns7471:0crwdne7471:0", + "introTitle": "crwdns7473:0crwdne7473:0", + "introDescription": "crwdns7475:0crwdne7475:0", + "listingDetails": "crwdns7477:0crwdne7477:0", + "listingDetailsDescription": "crwdns7479:0crwdne7479:0", + "success": "crwdns7481:0crwdne7481:0", + "successTitle": "crwdns7483:0crwdne7483:0", + "manageDescription": "crwdns7485:0crwdne7485:0", + "viewSubmission": "crwdns7487:0crwdne7487:0", + "done": "crwdns7489:0crwdne7489:0", + "signInHint": "crwdns7491:0crwdne7491:0", + "titleField": "crwdns7493:0crwdne7493:0", + "descriptionField": "crwdns7495:0crwdne7495:0", + "screenshots": "crwdns7497:0crwdne7497:0", + "screenshotsDescription": "crwdns7499:0crwdne7499:0", + "screenshotsPlaceholder": "crwdns7501:0crwdne7501:0", + "invalidScreenshot": "crwdns7503:0{maxSize}crwdne7503:0", + "privateSourceWarning": "crwdns7505:0{sources}crwdne7505:0", + "reviewSourcesTitle": "crwdns7507:0crwdne7507:0", + "privateSourceConfirmation": "crwdns7509:0crwdne7509:0", + "action": "crwdns7511:0crwdne7511:0", + "publicationNote": "crwdns7513:0crwdne7513:0", + "definitionChanged": "crwdns7515:0crwdne7515:0", + "error": "crwdns7517:0crwdne7517:0" } }, "integration": { + "completion": { + "modalTitle": "crwdns7519:0crwdne7519:0", + "title": "crwdns7521:0{name}crwdne7521:0", + "description": "crwdns7523:0crwdne7523:0", + "connectionReady": "crwdns7525:0crwdne7525:0", + "appReady": "crwdns7527:0crwdne7527:0", + "compatibleWidgets": "crwdns7529:0count={count}crwdne7529:0", + "chooseWidget": "crwdns7531:0crwdne7531:0", + "recipes": { + "title": "crwdns7533:0crwdne7533:0", + "description": "crwdns7535:0crwdne7535:0", + "newConnectionReason": "crwdns7537:0{integration}crwdne7537:0", + "existingConnectionReason": "crwdns7539:0crwdne7539:0", + "dismiss": "crwdns7541:0crwdne7541:0" + } + }, "page": { "list": { - "title": "crwdns334:0crwdne334:0", + "ariaLabel": "crwdns7543:0crwdne7543:0", "search": "crwdns336:0crwdne336:0", + "scopedNote": "crwdns7545:0crwdne7545:0", "noResults": { - "title": "crwdns338:0crwdne338:0" + "title": "crwdns338:0crwdne338:0", + "description": "crwdns7547:0crwdne7547:0", + "action": "crwdns7549:0crwdne7549:0", + "filteredTitle": "crwdns7551:0crwdne7551:0", + "filteredDescription": "crwdns7553:0{search}crwdne7553:0", + "createOnlyTitle": "crwdns7555:0crwdne7555:0", + "createOnlyDescription": "crwdns7557:0crwdne7557:0" } }, "create": { "title": "crwdns340:0{name}crwdne340:0", "notification": { "success": { - "title": "crwdns342:0crwdne342:0", "message": "crwdns344:0crwdne344:0" }, "error": { - "title": "crwdns346:0crwdne346:0", "message": "crwdns348:0crwdne348:0" } }, @@ -783,11 +1339,9 @@ "title": "crwdns350:0{name}crwdne350:0", "notification": { "success": { - "title": "crwdns352:0crwdne352:0", "message": "crwdns354:0crwdne354:0" }, "error": { - "title": "crwdns356:0crwdne356:0", "message": "crwdns358:0crwdne358:0" } }, @@ -804,23 +1358,15 @@ "message": "crwdns362:0{name}crwdne362:0", "notification": { "success": { - "title": "crwdns364:0crwdne364:0", "message": "crwdns366:0crwdne366:0" }, "error": { - "title": "crwdns368:0crwdne368:0", "message": "crwdns370:0crwdne370:0" } } } }, "field": { - "name": { - "label": "crwdns372:0crwdne372:0" - }, - "url": { - "label": "crwdns374:0crwdne374:0" - }, "attemptSearchEngineCreation": { "label": "crwdns2512:0crwdne2512:0", "description": "crwdns2514:0{kind}crwdne2514:0" @@ -832,6 +1378,10 @@ "label": "crwdns3050:0crwdne3050:0", "description": "crwdns3052:0crwdne3052:0" }, + "linkApp": { + "label": "crwdns7559:0crwdne7559:0", + "description": "crwdns7561:0crwdne7561:0" + }, "appHref": { "placeholder": "crwdns3054:0crwdne3054:0" }, @@ -845,7 +1395,11 @@ "grid": { "widgetCount": "crwdns4423:0{count}crwdne4423:0", "noWidgets": "crwdns4425:0crwdne4425:0", - "detected": "crwdns4427:0crwdne4427:0" + "detected": "crwdns4427:0crwdne4427:0", + "connected": "crwdns7563:0count={count}crwdne7563:0", + "tiedWidgets": "crwdns7565:0crwdne7565:0", + "more": "crwdns7567:0{count}crwdne7567:0", + "loadError": "crwdns7569:0crwdne7569:0" }, "category": { "dnsHole": "crwdns4429:0crwdne4429:0", @@ -876,7 +1430,10 @@ "analytics": "crwdns4477:0crwdne4477:0", "vpn": "crwdns5687:0crwdne5687:0", "mediaLibrary": "crwdns4979:0crwdne4979:0", - "uptimeMonitoring": "crwdns4981:0crwdne4981:0" + "uptimeMonitoring": "crwdns4981:0crwdne4981:0", + "beszel": "crwdns7571:0crwdne7571:0", + "systemMonitoring": "crwdns7573:0crwdne7573:0", + "security": "crwdns7575:0crwdne7575:0" }, "testConnection": { "action": { @@ -1161,6 +1718,22 @@ "slug": { "label": "crwdns4983:0crwdne4983:0", "newLabel": "crwdns4985:0crwdne4985:0" + }, + "wazuhIndexerUrl": { + "label": "crwdns7577:0crwdne7577:0", + "newLabel": "crwdns7579:0crwdne7579:0" + }, + "wazuhIndexerUsername": { + "label": "crwdns7581:0crwdne7581:0", + "newLabel": "crwdns7583:0crwdne7583:0" + }, + "wazuhIndexerPassword": { + "label": "crwdns7585:0crwdne7585:0", + "newLabel": "crwdns7587:0crwdne7587:0" + }, + "wazuhDashboardUrl": { + "label": "crwdns7589:0crwdne7589:0", + "newLabel": "crwdns7591:0crwdne7591:0" } } }, @@ -1169,54 +1742,19 @@ "interact": "crwdns476:0crwdne476:0", "full": "crwdns478:0crwdne478:0" }, - "audiobookshelf": { - "name": "crwdns4987:0crwdne4987:0", - "description": "crwdns4989:0crwdne4989:0" - }, - "navidrome": { - "name": "crwdns4991:0crwdne4991:0", - "description": "crwdns4993:0crwdne4993:0" - }, - "uptimeKuma": { - "name": "crwdns4995:0crwdne4995:0", - "description": "crwdns4997:0crwdne4997:0", - "secret": { - "slug": { - "description": "crwdns4999:0crwdne4999:0" - }, - "apiKey": { - "description": "crwdns5001:0crwdne5001:0" - } - } - }, - "traefik": { - "name": "crwdns5753:0crwdne5753:0", - "description": "crwdns5755:0crwdne5755:0" - }, - "paperlessNgx": { - "name": "crwdns5003:0crwdne5003:0", - "description": "crwdns5005:0crwdne5005:0" - }, - "patchmon": { - "name": "crwdns5867:0crwdne5867:0", - "description": "crwdns5869:0crwdne5869:0" - }, - "bazarr": { - "name": "crwdns5799:0crwdne5799:0", - "description": "crwdns5801:0crwdne5801:0" - }, - "wud": { - "name": "crwdns6193:0crwdne6193:0", - "description": "crwdns6195:0crwdne6195:0" + "llamacpp": { + "name": "crwdns7593:0crwdne7593:0", + "description": "crwdns7595:0crwdne7595:0" } }, "media": { "plural": "crwdns480:0crwdne480:0", "search": "crwdns482:0crwdne482:0", "field": { - "name": "crwdns484:0crwdne484:0", + "preview": "crwdns7597:0crwdne7597:0", "size": "crwdns486:0crwdne486:0", - "creator": "crwdns488:0crwdne488:0" + "creator": "crwdns488:0crwdne488:0", + "actions": "crwdns7599:0crwdne7599:0" }, "action": { "upload": { @@ -1244,10 +1782,12 @@ } }, "copy": { - "label": "crwdns506:0crwdne506:0" + "label": "crwdns506:0crwdne506:0", + "labelNamed": "crwdns7601:0{name}crwdne7601:0" }, "open": { - "label": "crwdns2680:0crwdne2680:0" + "label": "crwdns2680:0crwdne2680:0", + "labelNamed": "crwdns7603:0{name}crwdne7603:0" } }, "noResults": { @@ -1262,7 +1802,6 @@ "add": "crwdns512:0crwdne512:0", "apply": "crwdns514:0crwdne514:0", "backToOverview": "crwdns516:0crwdne516:0", - "skip": "crwdns4479:0crwdne4479:0", "change": "crwdns3804:0crwdne3804:0", "create": "crwdns518:0crwdne518:0", "createAnother": "crwdns2720:0crwdne2720:0", @@ -1285,16 +1824,31 @@ "tryAgain": "crwdns548:0crwdne548:0", "loading": "crwdns550:0crwdne550:0", "show": "crwdns4255:0crwdne4255:0", - "hide": "crwdns4257:0crwdne4257:0" + "hide": "crwdns4257:0crwdne4257:0", + "undo": "crwdns7605:0crwdne7605:0", + "editNamed": "crwdns7607:0{name}crwdne7607:0", + "deleteNamed": "crwdns7609:0{name}crwdne7609:0", + "clearSearch": "crwdns7611:0crwdne7611:0", + "copy": "crwdns7613:0crwdne7613:0", + "copied": "crwdns7615:0crwdne7615:0", + "refresh": "crwdns7617:0crwdne7617:0" + }, + "pagination": { + "pageOf": "crwdns7619:0{page}crwdnd7619:0{totalPages}crwdne7619:0" }, "here": "crwdns552:0crwdne552:0", + "serviceUrlTemplate": { + "serverTitle": "crwdns7621:0crwdne7621:0", + "urlModeLabel": "crwdns7623:0crwdne7623:0", + "hostPort": "crwdns7625:0crwdne7625:0", + "subdomain": "crwdns7627:0crwdne7627:0", + "path": "crwdns7629:0crwdne7629:0" + }, "iconPicker": { "label": "crwdns554:0crwdne554:0", + "description": "crwdns6225:0crwdne6225:0", "header": "crwdns6227:0{countIcons}crwdne6227:0", "headerLoading": "crwdns6229:0crwdne6229:0", - "noResults": "crwdns5683:0{search}crwdne5683:0", - "error": "crwdns5685:0crwdne5685:0", - "description": "crwdns6225:0crwdne6225:0", "clear": "crwdns6231:0crwdne6231:0", "uploadImage": "crwdns6233:0crwdne6233:0", "results": "crwdns6235:0crwdne6235:0", @@ -1303,7 +1857,9 @@ "otherImages": "crwdns6241:0crwdne6241:0", "urlLoading": "crwdns6243:0crwdne6243:0", "urlReady": "crwdns6245:0crwdne6245:0", - "urlError": "crwdns6247:0crwdne6247:0" + "urlError": "crwdns6247:0crwdne6247:0", + "noResults": "crwdns5683:0{search}crwdne5683:0", + "error": "crwdns5685:0crwdne5685:0" }, "colorScheme": { "options": { @@ -1315,7 +1871,6 @@ "information": { "min": "crwdns558:0crwdne558:0", "max": "crwdns560:0crwdne560:0", - "days": "crwdns562:0crwdne562:0", "hours": "crwdns564:0crwdne564:0", "minutes": "crwdns566:0crwdne566:0" }, @@ -1352,16 +1907,16 @@ }, "userAvatar": { "menu": { - "switchToDarkMode": "crwdns594:0crwdne594:0", - "switchToLightMode": "crwdns596:0crwdne596:0", + "open": "crwdns7631:0crwdne7631:0", "management": "crwdns598:0crwdne598:0", - "docker": "crwdns5703:0crwdne5703:0", "preferences": "crwdns600:0crwdne600:0", "logout": "crwdns602:0crwdne602:0", "login": "crwdns604:0crwdne604:0", "homeBoard": "crwdns606:0crwdne606:0", - "loggedOut": "crwdns608:0crwdne608:0", - "updateAvailable": "crwdns2256:0{countUpdates}crwdnd2256:0{tag}crwdne2256:0" + "updateAvailable": "crwdns2256:0{countUpdates}crwdnd2256:0{tag}crwdne2256:0", + "assistant": "crwdns7633:0crwdne7633:0", + "assistantThinking": "crwdns7635:0crwdne7635:0", + "modifier": "crwdns7637:0crwdne7637:0" } }, "dangerZone": "crwdns610:0crwdne610:0", @@ -1409,75 +1964,85 @@ "kilometersPerHour": "crwdns3764:0crwdne3764:0", "milesPerHour": "crwdns3766:0crwdne3766:0" } + }, + "widgetQuery": { + "loading": "crwdns7639:0crwdne7639:0" + }, + "total": "crwdns7641:0crwdne7641:0", + "filesystemUsage": "crwdns7643:0count={count}crwdne7643:0", + "field": { + "name": "crwdns7645:0crwdne7645:0" + }, + "label": { + "new": "crwdns7647:0crwdne7647:0" + }, + "entity": { + "apps": "crwdns7649:0crwdne7649:0", + "boards": "crwdns7651:0crwdne7651:0", + "certificates": "crwdns7653:0crwdne7653:0", + "customWidgets": "crwdns7655:0crwdne7655:0", + "groups": "crwdns7657:0crwdne7657:0", + "integrations": "crwdns7659:0crwdne7659:0", + "invites": "crwdns7661:0crwdne7661:0", + "logs": "crwdns7663:0crwdne7663:0", + "media": "crwdns7665:0crwdne7665:0", + "searchEngines": "crwdns7667:0crwdne7667:0", + "tasks": "crwdns7669:0crwdne7669:0", + "users": "crwdns7671:0crwdne7671:0" } }, "section": { - "dynamic": { + "option": { + "showLabel": { + "label": "crwdns7673:0crwdne7673:0", + "description": "crwdns7675:0crwdne7675:0" + }, + "collapsible": { + "label": "crwdns7677:0crwdne7677:0", + "description": "crwdns7679:0crwdne7679:0" + }, + "showOpenAll": { + "label": "crwdns7681:0crwdne7681:0", + "description": "crwdns7683:0crwdne7683:0" + }, + "scrollable": { + "label": "crwdns7685:0crwdne7685:0", + "description": "crwdns7687:0crwdne7687:0" + } + }, + "action": { + "openAllInNewTabsFor": "crwdns7689:0{name}crwdne7689:0" + }, + "openAllInNewTabs": { + "title": "crwdns7691:0crwdne7691:0", + "text": "crwdns7693:0crwdne7693:0" + }, + "container": { + "untitled": "crwdns7695:0crwdne7695:0", "action": { - "create": "crwdns650:0crwdne650:0", - "remove": "crwdns652:0crwdne652:0" + "create": "crwdns7697:0crwdne7697:0", + "remove": "crwdns7699:0crwdne7699:0", + "expand": "crwdns7701:0crwdne7701:0", + "collapse": "crwdns7703:0crwdne7703:0" }, "option": { "title": { - "label": "crwdns3103:0crwdne3103:0" + "label": "crwdns7705:0crwdne7705:0" }, "customCssClasses": { - "label": "crwdns3776:0crwdne3776:0" + "label": "crwdns7707:0crwdne7707:0" }, "borderColor": { - "label": "crwdns2839:0crwdne2839:0" + "label": "crwdns7709:0crwdne7709:0" } }, "remove": { - "title": "crwdns654:0crwdne654:0", - "message": "crwdns656:0crwdne656:0" - } - }, - "category": { - "field": { - "name": { - "label": "crwdns658:0crwdne658:0" - } - }, - "action": { - "create": "crwdns660:0crwdne660:0", - "edit": "crwdns662:0crwdne662:0", - "remove": "crwdns664:0crwdne664:0", - "moveUp": "crwdns666:0crwdne666:0", - "moveDown": "crwdns668:0crwdne668:0", - "createAbove": "crwdns670:0crwdne670:0", - "createBelow": "crwdns672:0crwdne672:0", - "openAllInNewTabs": "crwdns2730:0crwdne2730:0" - }, - "create": { - "title": "crwdns674:0crwdne674:0", - "submit": "crwdns676:0crwdne676:0" - }, - "remove": { - "title": "crwdns678:0crwdne678:0", - "message": "crwdns680:0{name}crwdne680:0" - }, - "edit": { - "title": "crwdns682:0crwdne682:0", - "submit": "crwdns684:0crwdne684:0" - }, - "menu": { - "label": { - "create": "crwdns686:0crwdne686:0", - "changePosition": "crwdns688:0crwdne688:0", - "settings": "crwdns4259:0crwdne4259:0" - } - }, - "openAllInNewTabs": { - "title": "crwdns2732:0crwdne2732:0", - "text": "crwdns2734:0crwdne2734:0" + "message": "crwdns7711:0crwdne7711:0" } } }, "item": { "action": { - "create": "crwdns690:0crwdne690:0", - "import": "crwdns692:0crwdne692:0", "edit": "crwdns694:0crwdne694:0", "moveResize": "crwdns696:0crwdne696:0", "duplicate": "crwdns698:0crwdne698:0", @@ -1486,7 +2051,7 @@ "menu": { "label": { "settings": "crwdns702:0crwdne702:0", - "refresh": "crwdns5739:0crwdne5739:0", + "settingsFor": "crwdns7713:0{name}crwdne7713:0", "options": "crwdns5709:0crwdne5709:0", "actions": "crwdns5711:0crwdne5711:0" }, @@ -1495,21 +2060,96 @@ "error": "crwdns6051:0crwdne6051:0", "loading": "crwdns6053:0crwdne6053:0", "idle": "crwdns6055:0crwdne6055:0" + }, + "notification": { + "saveError": { + "title": "crwdns7715:0crwdne7715:0", + "message": "crwdns7717:0crwdne7717:0" + } } }, "create": { "title": "crwdns704:0crwdne704:0", "search": "crwdns2574:0crwdne2574:0", - "addToBoard": "crwdns706:0crwdne706:0" + "addToBoard": "crwdns706:0crwdne706:0", + "addAtPosition": "crwdns7719:0crwdne7719:0", + "destination": { + "label": "crwdns7721:0crwdne7721:0", + "description": "crwdns7723:0crwdne7723:0", + "mainCanvas": "crwdns7725:0crwdne7725:0", + "leftRail": "crwdns7727:0crwdne7727:0", + "rightRail": "crwdns7729:0crwdne7729:0" + }, + "connectionStatus": { + "ready": "crwdns7731:0crwdne7731:0", + "needsSetup": "crwdns7733:0crwdne7733:0", + "noConnectionRequired": "crwdns7735:0crwdne7735:0" + }, + "customWidget": "crwdns7737:0crwdne7737:0", + "standalone": "crwdns7739:0crwdne7739:0", + "missingIntegration": { + "title": "crwdns7741:0crwdne7741:0", + "noPermission": "crwdns7743:0crwdne7743:0" + }, + "notification": { + "success": { + "title": "crwdns7745:0crwdne7745:0", + "message": "crwdns7747:0{name}crwdne7747:0", + "relocatedMessage": "crwdns7749:0{name}crwdnd7749:0{destination}crwdne7749:0" + }, + "error": { + "title": "crwdns7751:0crwdne7751:0", + "message": "crwdns7753:0crwdne7753:0" + } + } + }, + "selection": { + "summary": "crwdns7755:0count={count}crwdne7755:0", + "selected": "crwdns7757:0count={count}crwdne7757:0", + "copy": "crwdns7759:0crwdne7759:0", + "copied": "crwdns7761:0count={count}crwdne7761:0", + "copyError": "crwdns7763:0crwdne7763:0", + "paste": "crwdns7765:0crwdne7765:0", + "pasteShortcut": "crwdns7767:0crwdne7767:0", + "pasted": "crwdns7769:0count={count}crwdne7769:0", + "pasteError": "crwdns7771:0crwdne7771:0", + "pasteInvalid": "crwdns7773:0crwdne7773:0", + "pasteUnavailable": "crwdns7775:0crwdne7775:0", + "removed": "crwdns7777:0count={count}crwdne7777:0", + "move": "crwdns7779:0crwdne7779:0", + "moveTo": "crwdns7781:0crwdne7781:0", + "delete": "crwdns7783:0crwdne7783:0", + "clear": "crwdns7785:0crwdne7785:0", + "clearShortcut": "crwdns7787:0crwdne7787:0", + "saveErrorTitle": "crwdns7789:0crwdne7789:0", + "saveErrorMessage": "crwdns7791:0crwdne7791:0", + "moveUnavailableTitle": "crwdns7793:0crwdne7793:0", + "moveUnavailableMessage": "crwdns7795:0crwdne7795:0" }, "moveResize": { "title": "crwdns708:0crwdne708:0", + "entryLabel": "crwdns7797:0{name}crwdnd7797:0{column}crwdnd7797:0{row}crwdne7797:0", + "target": { + "numbered": "crwdns7799:0{name}crwdnd7799:0{index}crwdne7799:0", + "located": "crwdns7801:0{name}crwdnd7801:0{location}crwdnd7801:0{index}crwdne7801:0" + }, + "keyboard": { + "instructions": "crwdns7803:0crwdne7803:0", + "started": "crwdns7805:0crwdne7805:0", + "stopped": "crwdns7807:0crwdne7807:0", + "boundary": "crwdns7809:0crwdne7809:0" + }, "field": { + "section": { + "label": "crwdns7811:0crwdne7811:0" + }, "width": { - "label": "crwdns710:0crwdne710:0" + "label": "crwdns710:0crwdne710:0", + "shortLabel": "crwdns7813:0crwdne7813:0" }, "height": { - "label": "crwdns712:0crwdne712:0" + "label": "crwdns712:0crwdne712:0", + "shortLabel": "crwdns7815:0crwdne7815:0" }, "xOffset": { "label": "crwdns714:0crwdne714:0" @@ -1523,18 +2163,36 @@ "title": "crwdns718:0crwdne718:0", "tab": { "widget": "crwdns4275:0crwdne4275:0", - "app": "crwdns4277:0crwdne4277:0" + "app": "crwdns4277:0crwdne4277:0", + "integration": "crwdns7817:0crwdne7817:0" }, "app": { "propagationNotice": "crwdns4279:0crwdne4279:0" }, + "integration": { + "action": "crwdns7819:0crwdne7819:0", + "description": "crwdns7821:0crwdne7821:0", + "editLabel": "crwdns7823:0{name}crwdne7823:0", + "fullAccessRequired": "crwdns7825:0crwdne7825:0", + "propagationNotice": "crwdns7827:0crwdne7827:0", + "loading": "crwdns7829:0crwdne7829:0", + "loadError": "crwdns7831:0crwdne7831:0" + }, + "preview": { + "integrationRequired": "crwdns7833:0crwdne7833:0", + "size": "crwdns7835:0crwdne7835:0" + }, + "settings": { + "label": "crwdns7837:0crwdne7837:0" + }, "advancedOptions": { "label": "crwdns720:0crwdne720:0", "title": "crwdns722:0crwdne722:0" }, "field": { "integrations": { - "label": "crwdns724:0crwdne724:0" + "label": "crwdns724:0crwdne724:0", + "removeLabel": "crwdns7839:0{name}crwdne7839:0" }, "title": { "label": "crwdns3180:0crwdne3180:0" @@ -1548,17 +2206,18 @@ } }, "remove": { - "title": "crwdns728:0crwdne728:0", - "message": "crwdns730:0crwdne730:0" + "message": "crwdns7841:0crwdne7841:0" + }, + "advancedFocus": { + "open": "crwdns7843:0crwdne7843:0", + "close": "crwdns7845:0crwdne7845:0", + "label": "crwdns7847:0{widget}crwdne7847:0" } }, "widget": { "integrationSelect": { "configureIntegrationFirst": "crwdns5641:0crwdne5641:0", - "loading": "crwdns5643:0crwdne5643:0", - "placeholder": "crwdns5645:0crwdne5645:0", - "noResults": "crwdns5647:0crwdne5647:0", - "loadError": "crwdns5649:0crwdne5649:0" + "placeholder": "crwdns5645:0crwdne5645:0" }, "app": { "name": "crwdns732:0crwdne732:0", @@ -1567,9 +2226,6 @@ "appId": { "label": "crwdns736:0crwdne736:0" }, - "openInNewTab": { - "label": "crwdns738:0crwdne738:0" - }, "showTitle": { "label": "crwdns740:0crwdne740:0" }, @@ -1577,11 +2233,8 @@ "label": "crwdns2742:0crwdne2742:0" }, "layout": { - "label": "crwdns3654:0crwdne3654:0", "option": { - "row": "crwdns3656:0crwdne3656:0", "row-reverse": "crwdns3658:0crwdne3658:0", - "column": "crwdns3660:0crwdne3660:0", "column-reverse": "crwdns3662:0crwdne3662:0" } }, @@ -1606,28 +2259,65 @@ "name": "crwdns750:0crwdne750:0", "description": "crwdns752:0crwdne752:0", "option": { - "title": { - "label": "crwdns754:0crwdne754:0" + "showTitle": { + "label": "crwdns7849:0crwdne7849:0" + }, + "titleSize": { + "label": "crwdns7851:0crwdne7851:0" }, "layout": { "label": "crwdns756:0crwdne756:0", "option": { - "row": { - "label": "crwdns758:0crwdne758:0" - }, - "column": { - "label": "crwdns760:0crwdne760:0" - }, - "grid": { - "label": "crwdns762:0crwdne762:0" + "adaptive": { + "label": "crwdns7853:0crwdne7853:0" }, "gridHorizontal": { - "label": "crwdns2843:0crwdne2843:0" + "label": "crwdns7855:0crwdne7855:0" + }, + "icons": { + "label": "crwdns7857:0crwdne7857:0" + } + } + }, + "variant": { + "label": "crwdns7859:0crwdne7859:0", + "option": { + "soft": { + "label": "crwdns7861:0crwdne7861:0" + }, + "filled": { + "label": "crwdns7863:0crwdne7863:0" + }, + "outline": { + "label": "crwdns7865:0crwdne7865:0" + }, + "plain": { + "label": "crwdns7867:0crwdne7867:0" + } + } + }, + "spacing": { + "label": "crwdns7869:0crwdne7869:0", + "option": { + "xs": { + "label": "crwdns7871:0crwdne7871:0" + }, + "sm": { + "label": "crwdns7873:0crwdne7873:0" + }, + "md": { + "label": "crwdns7875:0crwdne7875:0" + }, + "lg": { + "label": "crwdns7877:0crwdne7877:0" + }, + "xl": { + "label": "crwdns7879:0crwdne7879:0" } } }, "hideTitle": { - "label": "crwdns2845:0crwdne2845:0" + "label": "crwdns7881:0crwdne7881:0" }, "hideIcon": { "label": "crwdns2682:0crwdne2682:0" @@ -1635,17 +2325,28 @@ "hideHostname": { "label": "crwdns2684:0crwdne2684:0" }, - "openNewTab": { - "label": "crwdns2686:0crwdne2686:0" - }, "withBorder": { "label": "crwdns4273:0crwdne4273:0" }, + "grow": { + "label": "crwdns7883:0crwdne7883:0" + }, + "customUrls": { + "label": "crwdns7885:0crwdne7885:0" + }, "items": { "label": "crwdns764:0crwdne764:0", - "add": "crwdns766:0crwdne766:0" + "remove": "crwdns7887:0crwdne7887:0", + "apps": { + "label": "crwdns7889:0crwdne7889:0", + "description": "crwdns7891:0crwdne7891:0", + "placeholder": "crwdns7893:0crwdne7893:0", + "addUrl": "crwdns7895:0crwdne7895:0", + "hint": "crwdns7897:0crwdne7897:0" + } } - } + }, + "empty": "crwdns7899:0crwdne7899:0" }, "archiveTeamWarrior": { "name": "crwdns5635:0crwdne5635:0", @@ -1654,33 +2355,61 @@ "showBroadcastMessage": { "label": "crwdns5639:0crwdne5639:0" } + }, + "noProjectSelected": "crwdns7901:0crwdne7901:0", + "runnerStatus": "crwdns7903:0{status}crwdne7903:0", + "projectId": "crwdns7905:0{id}crwdne7905:0", + "sessionReceived": "crwdns7907:0{value}crwdne7907:0", + "sessionSent": "crwdns7909:0{value}crwdne7909:0", + "sessionId": "crwdns7911:0{id}crwdne7911:0", + "startedAt": "crwdns7913:0{date}crwdne7913:0", + "emptyItems": "crwdns7915:0crwdne7915:0", + "metric": { + "running": "crwdns7917:0crwdne7917:0", + "completed": "crwdns7919:0crwdne7919:0", + "failed": "crwdns7921:0crwdne7921:0", + "canceled": "crwdns7923:0crwdne7923:0", + "download": "crwdns7925:0crwdne7925:0", + "upload": "crwdns7927:0crwdne7927:0" + }, + "status": { + "running": "crwdns7929:0crwdne7929:0", + "completed": "crwdns7931:0crwdne7931:0", + "failed": "crwdns7933:0crwdne7933:0", + "canceled": "crwdns7935:0crwdne7935:0", + "stopped": "crwdns7937:0crwdne7937:0", + "idle": "crwdns7939:0crwdne7939:0", + "unknown": "crwdns7941:0crwdne7941:0" + } + }, + "wud": { + "name": "crwdns6197:0crwdne6197:0", + "description": "crwdns6199:0crwdne6199:0", + "title": "crwdns6201:0crwdne6201:0", + "monitored": "crwdns6203:0crwdne6203:0", + "updatesAvailable": "crwdns6205:0count={count}crwdne6205:0", + "updateAvailable": "crwdns6207:0crwdne6207:0", + "openReleaseNotes": "crwdns6209:0crwdne6209:0", + "option": { + "showRing": { + "label": "crwdns6213:0crwdne6213:0" + }, + "showUpdateList": { + "label": "crwdns6221:0crwdne6221:0", + "description": "crwdns6223:0crwdne6223:0" + } } }, "dnsHoleSummary": { "name": "crwdns768:0crwdne768:0", "description": "crwdns770:0crwdne770:0", "option": { - "layout": { - "label": "crwdns772:0crwdne772:0", - "option": { - "row": { - "label": "crwdns774:0crwdne774:0" - }, - "column": { - "label": "crwdns776:0crwdne776:0" - }, - "grid": { - "label": "crwdns778:0crwdne778:0" - } - } - }, "usePiHoleColors": { "label": "crwdns780:0crwdne780:0" } }, "error": { - "internalServerError": "crwdns782:0crwdne782:0", - "integrationsDisconnected": "crwdns784:0crwdne784:0" + "internalServerError": "crwdns782:0crwdne782:0" }, "data": { "adsBlockedToday": "crwdns786:0crwdne786:0", @@ -1688,32 +2417,24 @@ "dnsQueriesToday": "crwdns790:0crwdne790:0", "domainsBeingBlocked": "crwdns792:0crwdne792:0" }, - "domainsTooltip": "crwdns2572:0crwdne2572:0" + "domainsTooltip": "crwdns2572:0crwdne2572:0", + "status": { + "enabled": "crwdns7943:0crwdne7943:0", + "disabled": "crwdns7945:0crwdne7945:0", + "unknown": "crwdns7947:0crwdne7947:0" + } }, "dnsHoleControls": { "name": "crwdns794:0crwdne794:0", "description": "crwdns796:0crwdne796:0", "option": { - "layout": { - "label": "crwdns798:0crwdne798:0", - "option": { - "row": { - "label": "crwdns800:0crwdne800:0" - }, - "column": { - "label": "crwdns802:0crwdne802:0" - }, - "grid": { - "label": "crwdns804:0crwdne804:0" - } - } - }, "showToggleAllButtons": { "label": "crwdns806:0crwdne806:0" } }, "error": { - "internalServerError": "crwdns808:0crwdne808:0" + "internalServerError": "crwdns808:0crwdne808:0", + "bulkActionsFailed": "crwdns7949:0count={count}crwdne7949:0" }, "controls": { "enableAll": "crwdns810:0crwdne810:0", @@ -1724,8 +2445,6 @@ "disabled": "crwdns820:0crwdne820:0", "processing": "crwdns822:0crwdne822:0", "disconnected": "crwdns824:0crwdne824:0", - "hours": "crwdns826:0crwdne826:0", - "minutes": "crwdns828:0crwdne828:0", "unlimited": "crwdns830:0crwdne830:0" } }, @@ -1737,16 +2456,10 @@ "label": "crwdns836:0crwdne836:0", "description": "crwdns838:0crwdne838:0" }, - "customTitle": { - "label": "crwdns840:0crwdne840:0" - }, "is24HourFormat": { "label": "crwdns842:0crwdne842:0", "description": "crwdns844:0crwdne844:0" }, - "showSeconds": { - "label": "crwdns846:0crwdne846:0" - }, "useCustomTimezone": { "label": "crwdns848:0crwdne848:0" }, @@ -1758,36 +2471,302 @@ "label": "crwdns854:0crwdne854:0" }, "dateFormat": { - "label": "crwdns856:0crwdne856:0", - "description": "crwdns858:0crwdne858:0" + "label": "crwdns7951:0crwdne7951:0", + "description": "crwdns7953:0crwdne7953:0" }, "customTimeFormat": { - "label": "crwdns2722:0crwdne2722:0", - "description": "crwdns2724:0crwdne2724:0" - }, - "customDateFormat": { - "label": "crwdns2726:0crwdne2726:0", - "description": "crwdns2728:0crwdne2728:0" + "label": "crwdns7955:0crwdne7955:0", + "description": "crwdns7957:0crwdne7957:0" }, "showWeather": { "label": "crwdns6113:0crwdne6113:0", "description": "crwdns6115:0crwdne6115:0" }, - "weatherLocation": { - "label": "crwdns6117:0crwdne6117:0" - }, "isWeatherFormatFahrenheit": { "label": "crwdns6119:0crwdne6119:0" + }, + "animateWeatherIcon": { + "label": "crwdns7959:0crwdne7959:0", + "description": "crwdns7961:0crwdne7961:0" + }, + "colorWeatherByDayNight": { + "label": "crwdns7963:0crwdne7963:0", + "description": "crwdns7965:0crwdne7965:0" + }, + "dayWeatherColor": { + "label": "crwdns7967:0crwdne7967:0" + }, + "nightWeatherColor": { + "label": "crwdns7969:0crwdne7969:0" + }, + "worldClockCities": { + "label": "crwdns7971:0crwdne7971:0", + "description": "crwdns7973:0crwdne7973:0" } + }, + "timezoneList": { + "timezone": "crwdns7975:0crwdne7975:0", + "cityLabel": "crwdns7977:0crwdne7977:0", + "searchPlaceholder": "crwdns7979:0crwdne7979:0", + "noResults": "crwdns7981:0crwdne7981:0", + "unsupportedOption": "crwdns7983:0{timeZone}crwdne7983:0", + "add": "crwdns7985:0crwdne7985:0", + "remove": "crwdns7987:0{city}crwdne7987:0", + "reorder": "crwdns7989:0{city}crwdne7989:0", + "limit": "crwdns7991:0{count}crwdnd7991:0{maximum}crwdne7991:0" + }, + "worldClock": { + "primary": "crwdns7993:0crwdne7993:0", + "local": "crwdns7995:0crwdne7995:0", + "today": "crwdns7997:0crwdne7997:0", + "tomorrow": "crwdns7999:0crwdne7999:0", + "yesterday": "crwdns8001:0crwdne8001:0", + "noSecondaryCities": "crwdns8003:0crwdne8003:0", + "unsupportedPrimaryTitle": "crwdns8005:0crwdne8005:0", + "unsupportedPrimary": "crwdns8007:0{timeZone}crwdne8007:0", + "unsupportedTimeZone": "crwdns8009:0{timeZone}crwdne8009:0", + "accessibleTime": "crwdns8011:0{city}crwdnd8011:0{time}crwdnd8011:0{date}crwdnd8011:0{timeZone}crwdne8011:0", + "advancedLabel": "crwdns8013:0crwdne8013:0", + "cities": "crwdns8015:0crwdne8015:0", + "cityCount": "crwdns8017:0{count}crwdne8017:0", + "timeBarLabel": "crwdns8019:0{city}crwdne8019:0", + "dayProgress": "crwdns8021:0{percent}crwdnd8021:0{hours}crwdnd8021:0{minutes}crwdne8021:0", + "phaseLegend": "crwdns8023:0crwdne8023:0", + "tick": { + "midnight": "crwdns8025:0crwdne8025:0", + "morning": "crwdns8027:0crwdne8027:0", + "noon": "crwdns8029:0crwdne8029:0", + "evening": "crwdns8031:0crwdne8031:0", + "end": "crwdns8033:0crwdne8033:0" + }, + "phaseRange": { + "night": "crwdns8035:0crwdne8035:0", + "dawn": "crwdns8037:0crwdne8037:0", + "day": "crwdns8039:0crwdne8039:0", + "dusk": "crwdns8041:0crwdne8041:0" + }, + "phase": { + "night": "crwdns8043:0crwdne8043:0", + "dawn": "crwdns8045:0crwdne8045:0", + "day": "crwdns8047:0crwdne8047:0", + "dusk": "crwdns8049:0crwdne8049:0" + } + } + }, + "airQuality": { + "name": "crwdns8051:0crwdne8051:0", + "description": "crwdns8053:0crwdne8053:0", + "option": { + "location": { + "label": "crwdns8055:0crwdne8055:0" + }, + "aqiStandard": { + "label": "crwdns8057:0crwdne8057:0", + "options": { + "auto": "crwdns8059:0crwdne8059:0", + "european": "crwdns8061:0crwdne8061:0", + "us": "crwdns8063:0crwdne8063:0" + } + }, + "showUv": { + "label": "crwdns8065:0crwdne8065:0" + }, + "showPollutants": { + "label": "crwdns8067:0crwdne8067:0" + }, + "showPollen": { + "label": "crwdns8069:0crwdne8069:0" + } + }, + "category": { + "good": "crwdns8071:0crwdne8071:0", + "fair": "crwdns8073:0crwdne8073:0", + "moderate": "crwdns8075:0crwdne8075:0", + "unhealthySensitive": "crwdns8077:0crwdne8077:0", + "unhealthy": "crwdns8079:0crwdne8079:0", + "poor": "crwdns8081:0crwdne8081:0", + "veryPoor": "crwdns8083:0crwdne8083:0", + "veryUnhealthy": "crwdns8085:0crwdne8085:0", + "extremelyPoor": "crwdns8087:0crwdne8087:0", + "hazardous": "crwdns8089:0crwdne8089:0", + "unknown": "crwdns8091:0crwdne8091:0" + }, + "uv": { + "label": "crwdns8093:0crwdne8093:0", + "category": { + "low": "crwdns8095:0crwdne8095:0", + "moderate": "crwdns8097:0crwdne8097:0", + "high": "crwdns8099:0crwdne8099:0", + "veryHigh": "crwdns8101:0crwdne8101:0", + "extreme": "crwdns8103:0crwdne8103:0", + "unknown": "crwdns8105:0crwdne8105:0" + } + }, + "dominantPollutant": "crwdns8107:0crwdne8107:0", + "aqiLabel": "crwdns8109:0crwdne8109:0", + "strongestPollen": "crwdns8111:0crwdne8111:0", + "unit": { + "concentration": "crwdns8113:0{value}crwdne8113:0", + "pollen": "crwdns8115:0{value}crwdne8115:0" + }, + "pollutant": { + "pm2_5": "crwdns8117:0crwdne8117:0", + "pm10": "crwdns8119:0crwdne8119:0", + "ozone": "crwdns8121:0crwdne8121:0", + "nitrogenDioxide": "crwdns8123:0crwdne8123:0", + "sulphurDioxide": "crwdns8125:0crwdne8125:0", + "carbonMonoxide": "crwdns8127:0crwdne8127:0" + }, + "pollen": { + "alder": "crwdns8129:0crwdne8129:0", + "birch": "crwdns8131:0crwdne8131:0", + "grass": "crwdns8133:0crwdne8133:0", + "mugwort": "crwdns8135:0crwdne8135:0", + "olive": "crwdns8137:0crwdne8137:0", + "ragweed": "crwdns8139:0crwdne8139:0" + }, + "compact": { + "sixHourTrend": "crwdns8141:0crwdne8141:0" + }, + "advanced": { + "observedAt": "crwdns8143:0{time}crwdne8143:0", + "next24Hours": "crwdns8145:0crwdne8145:0", + "pollutants": "crwdns8147:0crwdne8147:0", + "pollen": "crwdns8149:0crwdne8149:0", + "sevenDayForecast": "crwdns8151:0crwdne8151:0", + "aqiValue": "crwdns8153:0{value}crwdne8153:0", + "uvValue": "crwdns8155:0{value}crwdne8155:0", + "uvShort": "crwdns8157:0{value}crwdne8157:0", + "noForecast": "crwdns8159:0crwdne8159:0" + } + }, + "countdown": { + "name": "crwdns8161:0crwdne8161:0", + "description": "crwdns8163:0crwdne8163:0", + "option": { + "events": { + "label": "crwdns8165:0crwdne8165:0", + "description": "crwdns8167:0crwdne8167:0" + }, + "showProgress": { + "label": "crwdns8169:0crwdne8169:0" + }, + "showSeconds": { + "label": "crwdns8171:0crwdne8171:0", + "description": "crwdns8173:0crwdne8173:0" + } + }, + "dateTimeEventList": { + "newEvent": "crwdns8175:0crwdne8175:0", + "add": "crwdns8177:0crwdne8177:0", + "remove": "crwdns8179:0{event}crwdne8179:0", + "reorder": "crwdns8181:0{event}crwdne8181:0", + "eventLabel": "crwdns8183:0crwdne8183:0", + "timezone": "crwdns8185:0crwdne8185:0", + "unsupportedOption": "crwdns8187:0{timeZone}crwdne8187:0", + "recurrence": "crwdns8189:0crwdne8189:0", + "recurrenceOption": { + "none": "crwdns8191:0crwdne8191:0", + "yearly": "crwdns8193:0crwdne8193:0" + }, + "target": "crwdns8195:0crwdne8195:0", + "trackProgress": "crwdns8197:0crwdne8197:0", + "start": "crwdns8199:0crwdne8199:0", + "confirmDateTime": "crwdns8201:0crwdne8201:0", + "limit": "crwdns8203:0{count}crwdnd8203:0{maximum}crwdne8203:0" + }, + "empty": { + "title": "crwdns8205:0crwdne8205:0", + "description": "crwdns8207:0crwdne8207:0" + }, + "completed": "crwdns8209:0crwdne8209:0", + "yearly": "crwdns8211:0crwdne8211:0", + "progress": "crwdns8213:0crwdne8213:0", + "upcoming": "crwdns8215:0crwdne8215:0", + "completedEvents": "crwdns8217:0crwdne8217:0", + "invalid": { + "title": "crwdns8219:0crwdne8219:0", + "description": "crwdns8221:0count={count}crwdne8221:0", + "value": "crwdns8223:0crwdne8223:0" + }, + "alert": { + "notifications": "crwdns8225:0crwdne8225:0", + "permissionDenied": "crwdns8227:0crwdne8227:0", + "reached": "crwdns8229:0crwdne8229:0" + } + }, + "timer": { + "name": "crwdns8231:0crwdne8231:0", + "description": "crwdns8233:0crwdne8233:0", + "option": { + "mode": { + "label": "crwdns8235:0crwdne8235:0", + "options": { + "timer": "crwdns8237:0crwdne8237:0", + "pomodoro": "crwdns8239:0crwdne8239:0" + } + }, + "timerMinutes": { + "label": "crwdns8241:0crwdne8241:0" + }, + "focusMinutes": { + "label": "crwdns8243:0crwdne8243:0" + }, + "shortBreakMinutes": { + "label": "crwdns8245:0crwdne8245:0" + }, + "longBreakMinutes": { + "label": "crwdns8247:0crwdne8247:0" + }, + "sessionsBeforeLongBreak": { + "label": "crwdns8249:0crwdne8249:0" + }, + "autoStartBreaks": { + "label": "crwdns8251:0crwdne8251:0" + }, + "autoStartFocus": { + "label": "crwdns8253:0crwdne8253:0" + } + }, + "phase": { + "timer": "crwdns8255:0crwdne8255:0", + "focus": "crwdns8257:0crwdne8257:0", + "shortBreak": "crwdns8259:0crwdne8259:0", + "longBreak": "crwdns8261:0crwdne8261:0" + }, + "action": { + "start": "crwdns8263:0crwdne8263:0", + "pause": "crwdns8265:0crwdne8265:0", + "reset": "crwdns8267:0crwdne8267:0" + }, + "attention": { + "timerComplete": "crwdns8269:0crwdne8269:0", + "phaseReady": "crwdns8271:0{phase}crwdne8271:0" + }, + "progress": "crwdns8273:0{progress}crwdne8273:0", + "compact": { + "completedFocus": "crwdns8275:0count={count}crwdne8275:0" + }, + "alert": { + "title": "crwdns8277:0crwdne8277:0", + "completed": "crwdns8279:0{phase}crwdne8279:0" + }, + "advanced": { + "sequence": "crwdns8281:0crwdne8281:0", + "focusSession": "crwdns8283:0{session}crwdne8283:0", + "settings": "crwdns8285:0crwdne8285:0", + "settingsHint": "crwdns8287:0crwdne8287:0", + "localAlerts": "crwdns8289:0crwdne8289:0", + "notifications": "crwdns8291:0crwdne8291:0", + "sound": "crwdns8293:0crwdne8293:0", + "localAlertsHint": "crwdns8295:0crwdne8295:0", + "notificationsDenied": "crwdns8297:0crwdne8297:0" } }, "minecraftServerStatus": { "name": "crwdns2482:0crwdne2482:0", "description": "crwdns2484:0crwdne2484:0", "option": { - "title": { - "label": "crwdns2486:0crwdne2486:0" - }, "domain": { "label": "crwdns2488:0crwdne2488:0" }, @@ -1807,11 +2786,21 @@ "noStation": "crwdns4006:0crwdne4006:0", "option": { "baseUrl": { - "label": "crwdns5713:0crwdne5713:0" + "label": "crwdns5713:0crwdne5713:0", + "description": "crwdns8299:0crwdne8299:0" }, "station": { - "label": "crwdns4008:0crwdne4008:0" + "label": "crwdns4008:0crwdne4008:0", + "placeholder": "crwdns8301:0crwdne8301:0" } + }, + "error": { + "customSourceUnavailable": "crwdns8303:0crwdne8303:0", + "stationSearch": "crwdns8305:0crwdne8305:0" + }, + "warning": { + "stale": "crwdns8307:0{time}crwdne8307:0", + "staleCompact": "crwdns8309:0crwdne8309:0" } }, "notebook": { @@ -1843,6 +2832,9 @@ "directionRtl": "crwdns6045:0crwdne6045:0", "blockquote": "crwdns890:0crwdne890:0", "horizontalLine": "crwdns892:0crwdne892:0", + "details": "crwdns8311:0crwdne8311:0", + "expandDetails": "crwdns8313:0crwdne8313:0", + "collapseDetails": "crwdns8315:0crwdne8315:0", "bulletList": "crwdns894:0crwdne894:0", "orderedList": "crwdns896:0crwdne896:0", "checkList": "crwdns898:0crwdne898:0", @@ -1851,16 +2843,20 @@ "link": "crwdns904:0crwdne904:0", "unlink": "crwdns906:0crwdne906:0", "image": "crwdns908:0crwdne908:0", - "addTable": "crwdns910:0crwdne910:0", - "deleteTable": "crwdns912:0crwdne912:0", + "insertTable": "crwdns8317:0crwdne8317:0", + "insertTableSize": "crwdns8319:0{columns}crwdnd8319:0{rows}crwdne8319:0", + "deleteTable": "crwdns8321:0crwdne8321:0", "colorCell": "crwdns914:0crwdne914:0", - "mergeCell": "crwdns916:0crwdne916:0", + "mergeCells": "crwdns8323:0crwdne8323:0", + "splitCell": "crwdns8325:0crwdne8325:0", "addColumnLeft": "crwdns918:0crwdne918:0", "addColumnRight": "crwdns920:0crwdne920:0", "deleteColumn": "crwdns922:0crwdne922:0", "addRowTop": "crwdns924:0crwdne924:0", "addRowBelow": "crwdns926:0crwdne926:0", - "deleteRow": "crwdns928:0crwdne928:0" + "deleteRow": "crwdns928:0crwdne928:0", + "toggleHeaderRow": "crwdns8327:0crwdne8327:0", + "toggleHeaderColumn": "crwdns8329:0crwdne8329:0" }, "align": { "left": "crwdns930:0crwdne930:0", @@ -1871,8 +2867,6 @@ "clearColor": "crwdns936:0crwdne936:0", "source": "crwdns938:0crwdne938:0", "widthPlaceholder": "crwdns940:0crwdne940:0", - "columns": "crwdns942:0crwdne942:0", - "rows": "crwdns944:0crwdne944:0", "width": "crwdns946:0crwdne946:0", "height": "crwdns948:0crwdne948:0" }, @@ -1884,7 +2878,9 @@ "discard": "crwdns3692:0crwdne3692:0", "keepEditing": "crwdns3694:0crwdne3694:0" } - } + }, + "saveFailed": "crwdns8331:0crwdne8331:0", + "documentStats": "crwdns8333:0words={words}crwdnd8333:0characters={characters}crwdne8333:0" }, "anchorNote": { "name": "crwdns4064:0crwdne4064:0", @@ -1893,9 +2889,6 @@ "noteId": { "label": "crwdns4068:0crwdne4068:0" }, - "showTitle": { - "label": "crwdns4070:0crwdne4070:0" - }, "showUpdatedAt": { "label": "crwdns4072:0crwdne4072:0" } @@ -1905,14 +2898,20 @@ "notFound": "crwdns4078:0crwdne4078:0", "noNotes": "crwdns4080:0crwdne4080:0", "integrationRequired": "crwdns4082:0crwdne4082:0", - "updatedAt": "crwdns4084:0{date}crwdne4084:0", "untitled": "crwdns4086:0crwdne4086:0", - "edit": "crwdns4088:0crwdne4088:0", - "save": "crwdns4090:0crwdne4090:0", - "cancel": "crwdns4092:0crwdne4092:0", "readOnlyViewer": "crwdns4094:0crwdne4094:0", "saveForbidden": "crwdns4096:0crwdne4096:0", - "saveFailed": "crwdns4098:0crwdne4098:0" + "saveFailed": "crwdns4098:0crwdne4098:0", + "createdAt": "crwdns8335:0{date}crwdne8335:0", + "permission": { + "owner": "crwdns8337:0crwdne8337:0", + "editor": "crwdns8339:0crwdne8339:0", + "viewer": "crwdns8341:0crwdne8341:0" + }, + "status": { + "pinned": "crwdns8343:0crwdne8343:0", + "archived": "crwdns8345:0crwdne8345:0" + } }, "iframe": { "name": "crwdns950:0crwdne950:0", @@ -1971,6 +2970,25 @@ "clickable": { "label": "crwdns986:0crwdne986:0" } + }, + "state": { + "on": "crwdns8347:0crwdne8347:0", + "off": "crwdns8349:0crwdne8349:0", + "unavailable": "crwdns8351:0crwdne8351:0", + "unknown": "crwdns8353:0crwdne8353:0" + }, + "advanced": { + "entityId": "crwdns8355:0{id}crwdne8355:0", + "lastChanged": "crwdns8357:0{date}crwdne8357:0", + "attribute": { + "unit": "crwdns8359:0crwdne8359:0", + "deviceClass": "crwdns8361:0crwdne8361:0", + "icon": "crwdns8363:0crwdne8363:0" + } + }, + "error": { + "loadFailed": "crwdns8365:0crwdne8365:0", + "toggleFailed": "crwdns8367:0crwdne8367:0" } }, "smartHome-executeAutomation": { @@ -1986,11 +3004,31 @@ }, "spotlightAction": { "run": "crwdns2250:0{name}crwdne2250:0" + }, + "advanced": { + "lastExecuted": "crwdns8369:0{time}crwdne8369:0", + "automationId": "crwdns8371:0{id}crwdne8371:0", + "ready": "crwdns8373:0crwdne8373:0", + "noPermission": "crwdns8375:0crwdne8375:0" + }, + "status": { + "running": "crwdns8377:0crwdne8377:0", + "success": "crwdns8379:0crwdne8379:0" + }, + "error": { + "executeFailed": "crwdns8381:0crwdne8381:0" } }, "stockPrice": { "name": "crwdns3056:0crwdne3056:0", "description": "crwdns3058:0crwdne3058:0", + "advanced": { + "currentPrice": "crwdns8383:0crwdne8383:0", + "previousClose": "crwdns8385:0crwdne8385:0", + "changePercentage": "crwdns8387:0crwdne8387:0", + "minimum": "crwdns8389:0crwdne8389:0", + "maximum": "crwdns8391:0crwdne8391:0" + }, "option": { "stock": { "label": "crwdns3060:0crwdne3060:0" @@ -2061,6 +3099,10 @@ "label": "crwdns3102:0crwdne3102:0" } } + }, + "showDetails": { + "label": "crwdns8393:0crwdne8393:0", + "description": "crwdns8395:0crwdne8395:0" } } }, @@ -2072,7 +3114,7 @@ }, "option": { "releaseType": { - "label": "crwdns1000:0crwdne1000:0", + "label": "crwdns8397:0crwdne8397:0", "options": { "inCinemas": "crwdns1002:0crwdne1002:0", "digitalRelease": "crwdns1004:0crwdne1004:0", @@ -2088,6 +3130,13 @@ "showUnmonitored": { "label": "crwdns2857:0crwdne2857:0" } + }, + "advanced": { + "previousMonth": "crwdns8399:0crwdne8399:0", + "nextMonth": "crwdns8401:0crwdne8401:0", + "eventCount": "crwdns8403:0count={count}crwdne8403:0", + "loading": "crwdns8405:0crwdne8405:0", + "noEvents": "crwdns8407:0crwdne8407:0" } }, "weather": { @@ -2100,16 +3149,18 @@ "disableTemperatureDecimals": { "label": "crwdns2704:0crwdne2704:0" }, + "animateIcons": { + "label": "crwdns8409:0crwdne8409:0" + }, + "showHumidity": { + "label": "crwdns8411:0crwdne8411:0" + }, "showCurrentWindSpeed": { - "label": "crwdns2706:0crwdne2706:0", - "description": "crwdns2708:0crwdne2708:0" + "label": "crwdns2706:0crwdne2706:0" }, "useImperialSpeed": { "label": "crwdns3768:0crwdne3768:0" }, - "location": { - "label": "crwdns1018:0crwdne1018:0" - }, "showCity": { "label": "crwdns1020:0crwdne1020:0" }, @@ -2119,13 +3170,10 @@ "forecastDayCount": { "label": "crwdns1024:0crwdne1024:0", "description": "crwdns1026:0crwdne1026:0" - }, - "dateFormat": { - "label": "crwdns1028:0crwdne1028:0", - "description": "crwdns1030:0crwdne1030:0" } }, "currentWindSpeed": "crwdns3770:0{currentWindSpeed}crwdnd3770:0{unit}crwdne3770:0", + "disabled": "crwdns8413:0crwdne8413:0", "dailyForecast": { "sunrise": "crwdns2712:0crwdne2712:0", "sunset": "crwdns2714:0crwdne2714:0", @@ -2148,6 +3196,47 @@ "thunderstorm": "crwdns1054:0crwdne1054:0", "thunderstormWithHail": "crwdns1056:0crwdne1056:0", "unknown": "crwdns1058:0crwdne1058:0" + }, + "details": "crwdns8415:0crwdne8415:0", + "detailsFor": "crwdns8417:0{date}crwdne8417:0", + "advanced": { + "forecast": "crwdns8419:0crwdne8419:0", + "hourlyForecast": "crwdns8421:0crwdne8421:0", + "day": "crwdns8423:0crwdne8423:0", + "time": "crwdns8425:0crwdne8425:0", + "conditions": "crwdns8427:0crwdne8427:0", + "temperature": "crwdns8429:0crwdne8429:0", + "feelsLike": "crwdns8431:0{temperature}crwdne8431:0", + "feelsLikeLabel": "crwdns8433:0crwdne8433:0", + "feelsLikeRange": "crwdns8435:0{maximum}crwdnd8435:0{minimum}crwdne8435:0", + "highLow": "crwdns8437:0{maximum}crwdnd8437:0{minimum}crwdne8437:0", + "observedAt": "crwdns8439:0{time}crwdne8439:0", + "humidity": "crwdns8441:0crwdne8441:0", + "averageHumidity": "crwdns8443:0{humidity}crwdne8443:0", + "currentHumidity": "crwdns8445:0crwdne8445:0", + "wind": "crwdns8447:0{unit}crwdne8447:0", + "currentWind": "crwdns8449:0crwdne8449:0", + "windValue": "crwdns8451:0{speed}crwdnd8451:0{gusts}crwdnd8451:0{unit}crwdne8451:0", + "windDetail": "crwdns8453:0{speed}crwdnd8453:0{gusts}crwdnd8453:0{unit}crwdne8453:0", + "nextHourPrecipitation": "crwdns8455:0crwdne8455:0", + "precipitationChance": "crwdns8457:0crwdne8457:0", + "precipitationValue": "crwdns8459:0{probability}crwdnd8459:0{amount}crwdne8459:0", + "precipitationDetail": "crwdns8461:0{probability}crwdnd8461:0{amount}crwdne8461:0", + "todayUv": "crwdns8463:0crwdne8463:0", + "uvIndex": "crwdns8465:0{value}crwdne8465:0", + "daylight": "crwdns8467:0{duration}crwdne8467:0", + "hourlyTooltip": "crwdns8469:0{feelsLike}crwdnd8469:0{temperatureUnit}crwdnd8469:0{amount}crwdnd8469:0{humidity}crwdnd8469:0{speed}crwdnd8469:0{speedUnit}crwdne8469:0", + "hourlyTooltipWithoutHumidity": "crwdns8471:0{feelsLike}crwdnd8471:0{temperatureUnit}crwdnd8471:0{amount}crwdnd8471:0{speed}crwdnd8471:0{speedUnit}crwdne8471:0", + "detailLabel": { + "feelsLike": "crwdns8473:0crwdne8473:0", + "precipitation": "crwdns8475:0crwdne8475:0", + "humidity": "crwdns8477:0crwdne8477:0", + "wind": "crwdns8479:0crwdne8479:0", + "uv": "crwdns8481:0crwdne8481:0", + "daylight": "crwdns8483:0crwdne8483:0" + }, + "sun": "crwdns8485:0crwdne8485:0", + "noForecast": "crwdns8487:0crwdne8487:0" } }, "indexerManager": { @@ -2160,8 +3249,15 @@ }, "title": "crwdns1066:0crwdne1066:0", "testAll": "crwdns1068:0crwdne1068:0", + "status": { + "healthy": "crwdns8489:0crwdne8489:0", + "unhealthy": "crwdns8491:0crwdne8491:0", + "disabled": "crwdns8493:0crwdne8493:0", + "unknown": "crwdns8495:0crwdne8495:0" + }, "error": { - "internalServerError": "crwdns1070:0crwdne1070:0" + "internalServerError": "crwdns1070:0crwdne1070:0", + "testAll": "crwdns8497:0crwdne8497:0" } }, "healthMonitoring": { @@ -2190,11 +3286,6 @@ "fileSystem": { "label": "crwdns1082:0crwdne1082:0" }, - "visibleStorageVolumes": { - "label": "crwdns5741:0crwdne5741:0", - "description": "crwdns5743:0crwdne5743:0", - "placeholder": "crwdns5745:0crwdne5745:0" - }, "defaultTab": { "label": "crwdns2636:0crwdne2636:0" }, @@ -2208,8 +3299,8 @@ "popover": { "information": "crwdns1084:0crwdne1084:0", "processor": "crwdns1086:0{cpuModelName}crwdne1086:0", - "memory": "crwdns1088:0{memory}crwdne1088:0", - "memoryAvailable": "crwdns1090:0{memoryAvailable}crwdnd1090:0{percent}crwdne1090:0", + "memory": "crwdns8499:0{memory}crwdne8499:0", + "memoryAvailable": "crwdns8501:0{memoryAvailable}crwdnd8501:0{percent}crwdne8501:0", "version": "crwdns1092:0{version}crwdne1092:0", "uptime": "crwdns2474:0{months}crwdnd2474:0{days}crwdnd2474:0{hours}crwdnd2474:0{minutes}crwdne2474:0", "loadAverage": "crwdns1096:0crwdne1096:0", @@ -2217,17 +3308,27 @@ "minutes": "crwdns1100:0{count}crwdne1100:0", "used": "crwdns1102:0crwdne1102:0", "available": "crwdns1104:0crwdne1104:0", - "lastSeen": "crwdns1106:0{lastSeen}crwdne1106:0" + "lastSeen": "crwdns1106:0{lastSeen}crwdne1106:0", + "updatesAvailable": "crwdns8503:0count={count}crwdne8503:0", + "rebootRequired": "crwdns8505:0crwdne8505:0", + "rebootNotRequired": "crwdns8507:0crwdne8507:0" + }, + "smartStatus": { + "attributesWithinThresholds": "crwdns8509:0crwdne8509:0", + "attributesFailed": "crwdns8511:0{attributes}crwdne8511:0", + "noCriticalWarning": "crwdns8513:0crwdne8513:0", + "criticalWarning": "crwdns8515:0crwdne8515:0" + }, + "gauge": { + "cpuUsage": "crwdns8517:0crwdne8517:0", + "cpuTemperature": "crwdns8519:0crwdne8519:0", + "memoryUsage": "crwdns8521:0crwdne8521:0", + "gpuUsage": "crwdns8523:0{name}crwdne8523:0" }, - "memory": {}, "error": { "internalServerError": "crwdns1108:0crwdne1108:0" }, "cluster": { - "summary": { - "cpu": "crwdns2640:0crwdne2640:0", - "memory": "crwdns2642:0crwdne2642:0" - }, "resource": { "node": { "name": "crwdns2644:0crwdne2644:0" @@ -2263,8 +3364,6 @@ "table": { "header": { "name": "crwdns2672:0crwdne2672:0", - "cpu": "crwdns2674:0crwdne2674:0", - "memory": "crwdns2676:0crwdne2676:0", "node": "crwdns2678:0crwdne2678:0" } } @@ -2274,33 +3373,29 @@ "name": "crwdns3424:0crwdne3424:0", "description": "crwdns3426:0crwdne3426:0", "option": { - "columns": { - "label": "crwdns5705:0crwdne5705:0" + "endpointIds": { + "label": "crwdns8525:0crwdne8525:0", + "description": "crwdns8527:0crwdne8527:0", + "placeholder": "crwdns8529:0crwdne8529:0" }, - "enableRowSorting": { - "label": "crwdns3808:0crwdne3808:0" + "containerFilter": { + "label": "crwdns8531:0crwdne8531:0" + }, + "filterIsWhitelist": { + "label": "crwdns8533:0crwdne8533:0" }, "defaultSort": { - "label": "crwdns3810:0crwdne3810:0", "option": { "name": "crwdns3812:0crwdne3812:0", "state": "crwdns3814:0crwdne3814:0", "cpuUsage": "crwdns3816:0crwdne3816:0", "memoryUsage": "crwdns3818:0crwdne3818:0" } - }, - "descendingDefaultSort": { - "label": "crwdns3820:0crwdne3820:0" - }, - "columnOrder": { - "label": "crwdns6155:0crwdne6155:0" - }, - "columnWidths": { - "label": "crwdns6157:0crwdne6157:0" } }, "error": { "internalServerError": "crwdns3428:0crwdne3428:0", + "endpointsUnavailable": "crwdns8535:0crwdne8535:0", "layoutSaveTitle": "crwdns6159:0crwdne6159:0", "layoutSaveMessage": "crwdns6161:0crwdne6161:0" }, @@ -2309,7 +3404,6 @@ } }, "coolify": { - "name": "crwdns3852:0crwdne3852:0", "description": "crwdns3854:0crwdne3854:0", "option": { "showServers": { @@ -2335,17 +3429,49 @@ "internalServerError": "crwdns3872:0crwdne3872:0" }, "server": { - "buildServer": "crwdns3874:0crwdne3874:0" + "buildServer": "crwdns3874:0crwdne3874:0", + "resourceCounts": "crwdns8537:0applications={applications}crwdnd8537:0services={services}crwdne8537:0", + "reachability": "crwdns8539:0crwdne8539:0", + "usability": "crwdns8541:0crwdne8541:0" + }, + "source": { + "url": "crwdns8543:0{url}crwdne8543:0", + "unavailable": "crwdns8545:0{source}crwdne8545:0" }, "instances": { "title": "crwdns3876:0crwdne3876:0" + }, + "action": { + "openResource": "crwdns8547:0{name}crwdne8547:0", + "openLogs": "crwdns8549:0{name}crwdne8549:0", + "showIp": "crwdns8551:0crwdne8551:0", + "hideIp": "crwdns8553:0crwdne8553:0" + }, + "status": { + "running": "crwdns8555:0crwdne8555:0", + "stopped": "crwdns8557:0crwdne8557:0", + "exited": "crwdns8559:0crwdne8559:0", + "starting": "crwdns8561:0crwdne8561:0", + "restarting": "crwdns8563:0crwdne8563:0", + "unknown": "crwdns8565:0crwdne8565:0", + "online": "crwdns8567:0crwdne8567:0", + "offline": "crwdns8569:0crwdne8569:0", + "reachable": "crwdns8571:0crwdne8571:0", + "unreachable": "crwdns8573:0crwdne8573:0", + "usable": "crwdns8575:0crwdne8575:0", + "unusable": "crwdns8577:0crwdne8577:0" } }, "vpn": { "name": "crwdns5689:0crwdne5689:0", "description": "crwdns5691:0crwdne5691:0", "serviceUnavailable": "crwdns5693:0crwdne5693:0", - "option": {} + "status": { + "running": "crwdns8579:0crwdne8579:0", + "notRunning": "crwdns8581:0crwdne8581:0", + "unavailable": "crwdns8583:0crwdne8583:0", + "vpn": "crwdns8585:0{status}crwdne8585:0" + } }, "ups": { "name": "crwdns4481:0crwdne4481:0", @@ -2372,14 +3498,19 @@ "runtime": "crwdns4501:0crwdne4501:0", "load": "crwdns4503:0crwdne4503:0", "input": "crwdns4505:0crwdne4505:0", - "output": "crwdns4507:0crwdne4507:0" + "output": "crwdns4507:0crwdne4507:0", + "batteryVoltage": "crwdns8587:0crwdne8587:0", + "power": "crwdns8589:0crwdne8589:0", + "temperature": "crwdns8591:0crwdne8591:0", + "manufacturer": "crwdns8593:0crwdne8593:0", + "model": "crwdns8595:0crwdne8595:0", + "serial": "crwdns8597:0crwdne8597:0" }, "error": { "internalServerError": "crwdns4509:0crwdne4509:0" } }, "tracearr": { - "name": "crwdns3928:0crwdne3928:0", "description": "crwdns3930:0crwdne3930:0", "option": { "showStreams": { @@ -2467,10 +3598,7 @@ "label": "crwdns4147:0crwdne4147:0", "description": "crwdns4149:0crwdne4149:0", "placeholder": "crwdns4151:0crwdne4151:0", - "loading": "crwdns4153:0crwdne4153:0", - "noEvents": "crwdns4155:0crwdne4155:0", - "none": "crwdns4157:0crwdne4157:0", - "configureWebsiteFirst": "crwdns4159:0crwdne4159:0" + "none": "crwdns4157:0crwdne4157:0" }, "chartType": { "label": "crwdns4161:0crwdne4161:0", @@ -2501,26 +3629,21 @@ "eventNames": { "label": "crwdns4189:0crwdne4189:0", "description": "crwdns4191:0crwdne4191:0", - "placeholder": "crwdns4193:0crwdne4193:0", - "loading": "crwdns4195:0crwdne4195:0", - "noEvents": "crwdns4197:0crwdne4197:0", - "configureWebsiteFirst": "crwdns4199:0crwdne4199:0" + "placeholder": "crwdns4193:0crwdne4193:0" }, "topCount": { "label": "crwdns4201:0crwdne4201:0", "description": "crwdns4203:0crwdne4203:0" + }, + "events": { + "loading": "crwdns8599:0crwdne8599:0", + "noEvents": "crwdns8601:0crwdne8601:0", + "configureWebsiteFirst": "crwdns8603:0crwdne8603:0" } }, "event": { - "occurrences": "crwdns4205:0crwdne4205:0", "label": "crwdns4207:0crwdne4207:0" }, - "topPages": { - "direct": "crwdns4209:0crwdne4209:0" - }, - "topReferrers": { - "direct": "crwdns4211:0crwdne4211:0" - }, "events": { "selectPrompt": "crwdns4213:0crwdne4213:0" }, @@ -2529,6 +3652,9 @@ "noWebsite": "crwdns4217:0crwdne4217:0", "noData": "crwdns4219:0crwdne4219:0", "internalServerError": "crwdns4221:0crwdne4221:0" + }, + "top": { + "direct": "crwdns8605:0crwdne8605:0" } }, "common": { @@ -2556,7 +3682,8 @@ }, "integration": { "noData": "crwdns1134:0crwdne1134:0", - "description": "crwdns1136:0crwdne1136:0" + "description": "crwdns1136:0crwdne1136:0", + "manage": "crwdns8607:0crwdne8607:0" }, "app": { "noData": "crwdns1138:0crwdne1138:0", @@ -2567,7 +3694,61 @@ "noIntegration": "crwdns1144:0crwdne1144:0", "noData": "crwdns1146:0crwdne1146:0" }, - "option": {} + "integrationDisconnected": "crwdns8609:0crwdne8609:0", + "updatedAt": "crwdns8611:0{date}crwdne8611:0", + "title": { + "label": "crwdns8613:0crwdne8613:0" + }, + "openInNewTab": { + "label": "crwdns8615:0crwdne8615:0" + }, + "showTitle": { + "label": "crwdns8617:0crwdne8617:0" + }, + "weatherLocation": { + "label": "crwdns8619:0crwdne8619:0" + }, + "layout": { + "label": "crwdns8621:0crwdne8621:0", + "option": { + "horizontal": "crwdns8623:0crwdne8623:0", + "vertical": "crwdns8625:0crwdne8625:0", + "grid": "crwdns8627:0crwdne8627:0" + } + }, + "select": { + "loading": "crwdns8629:0crwdne8629:0", + "loadError": "crwdns8631:0crwdne8631:0" + }, + "dateFormat": { + "label": "crwdns8633:0crwdne8633:0", + "description": "crwdns8635:0crwdne8635:0" + }, + "visibleStorageVolumes": { + "label": "crwdns8637:0crwdne8637:0", + "description": "crwdns8639:0crwdne8639:0", + "placeholder": "crwdns8641:0crwdne8641:0" + }, + "tableOptions": { + "columns": { + "label": "crwdns8643:0crwdne8643:0" + }, + "columnOrder": { + "label": "crwdns8645:0crwdne8645:0" + }, + "columnWidths": { + "label": "crwdns8647:0crwdne8647:0" + }, + "enableRowSorting": { + "label": "crwdns8649:0crwdne8649:0" + }, + "defaultSort": { + "label": "crwdns8651:0crwdne8651:0" + }, + "invertSorting": { + "label": "crwdns8653:0crwdne8653:0" + } + } }, "video": { "name": "crwdns1148:0crwdne1148:0", @@ -2598,7 +3779,7 @@ "option": { "showOnlyPlaying": { "label": "crwdns3176:0crwdne3176:0", - "description": "crwdns3178:0crwdne3178:0" + "description": "crwdns8655:0crwdne8655:0" }, "showBitrate": { "label": "crwdns6175:0crwdne6175:0", @@ -2626,6 +3807,7 @@ "transcoding": "crwdns6089:0crwdne6089:0", "paused": "crwdns6091:0crwdne6091:0", "remaining": "crwdns6093:0{minutes}crwdne6093:0", + "seasonEpisode": "crwdns8657:0{season}crwdnd8657:0{episode}crwdne8657:0", "metadata": { "title": "crwdns3744:0crwdne3744:0", "video": { @@ -2643,11 +3825,16 @@ "resolution": "crwdns3760:0crwdne3760:0", "target": "crwdns3762:0crwdne3762:0" } - } + }, + "unknownUser": "crwdns8659:0crwdne8659:0" + }, + "summary": { + "sessions": "crwdns8661:0count={count}crwdne8661:0", + "playing": "crwdns8663:0{count}crwdne8663:0", + "transcoding": "crwdns8665:0{count}crwdne8665:0" } }, "paperlessNgx": { - "name": "crwdns5007:0crwdne5007:0", "description": "crwdns5009:0crwdne5009:0", "documentsTotal": "crwdns5011:0crwdne5011:0", "documentsInbox": "crwdns5013:0crwdne5013:0", @@ -2692,7 +3879,6 @@ } }, "patchmon": { - "name": "crwdns5871:0crwdne5871:0", "description": "crwdns5873:0crwdne5873:0", "title": "crwdns5875:0crwdne5875:0", "totalHosts": "crwdns5877:0crwdne5877:0", @@ -2759,36 +3945,30 @@ "description": "crwdns5947:0crwdne5947:0" }, "hostsNeedingUpdatesWarningAt": { - "label": "crwdns5949:0crwdne5949:0", - "description": "crwdns5951:0crwdne5951:0" + "label": "crwdns5949:0crwdne5949:0" }, "hostsNeedingUpdatesCriticalAt": { - "label": "crwdns5953:0crwdne5953:0", - "description": "crwdns5955:0crwdne5955:0" + "label": "crwdns5953:0crwdne5953:0" }, "securityUpdatesThresholdMode": { "label": "crwdns5957:0crwdne5957:0", "description": "crwdns5959:0crwdne5959:0" }, "securityUpdatesWarningAt": { - "label": "crwdns5961:0crwdne5961:0", - "description": "crwdns5963:0crwdne5963:0" + "label": "crwdns5961:0crwdne5961:0" }, "securityUpdatesCriticalAt": { - "label": "crwdns5965:0crwdne5965:0", - "description": "crwdns5967:0crwdne5967:0" + "label": "crwdns5965:0crwdne5965:0" }, "hostsWithSecurityUpdatesThresholdMode": { "label": "crwdns5969:0crwdne5969:0", "description": "crwdns5971:0crwdne5971:0" }, "hostsWithSecurityUpdatesWarningAt": { - "label": "crwdns5973:0crwdne5973:0", - "description": "crwdns5975:0crwdne5975:0" + "label": "crwdns5973:0crwdne5973:0" }, "hostsWithSecurityUpdatesCriticalAt": { - "label": "crwdns5977:0crwdne5977:0", - "description": "crwdns5979:0crwdne5979:0" + "label": "crwdns5977:0crwdne5977:0" }, "upToDateHostsThresholdMode": { "label": "crwdns5981:0crwdne5981:0", @@ -2807,12 +3987,10 @@ "description": "crwdns5995:0crwdne5995:0" }, "totalOutdatedPackagesWarningAt": { - "label": "crwdns5997:0crwdne5997:0", - "description": "crwdns5999:0crwdne5999:0" + "label": "crwdns5997:0crwdne5997:0" }, "totalOutdatedPackagesCriticalAt": { - "label": "crwdns6001:0crwdne6001:0", - "description": "crwdns6003:0crwdne6003:0" + "label": "crwdns6001:0crwdne6001:0" }, "showOsDistribution": { "label": "crwdns6005:0crwdne6005:0", @@ -2843,6 +4021,14 @@ "bars": "crwdns6033:0crwdne6033:0", "donut": "crwdns6035:0crwdne6035:0" } + }, + "threshold": { + "warningAt": { + "description": "crwdns8667:0crwdne8667:0" + }, + "criticalAt": { + "description": "crwdns8669:0crwdne8669:0" + } } }, "error": { @@ -2850,12 +4036,12 @@ } }, "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", + "announcements": "crwdns8671:0crwdne8671:0", "option": { "showMissingEpisodes": { "label": "crwdns5815:0crwdne5815:0", @@ -2902,7 +4088,8 @@ "users": "crwdns3900:0crwdne3900:0", "photos": "crwdns3902:0crwdne3902:0", "videos": "crwdns3904:0crwdne3904:0", - "storage": "crwdns3906:0crwdne3906:0" + "storage": "crwdns3906:0crwdne3906:0", + "albumLimit": "crwdns8673:0{count}crwdne8673:0" }, "immich-albumCarousel": { "name": "crwdns3908:0crwdne3908:0", @@ -2926,24 +4113,21 @@ } }, "description": "crwdns6107:0crwdne6107:0", - "noPhotos": "crwdns6109:0crwdne6109:0" + "noPhotos": "crwdns6109:0crwdne6109:0", + "albumPhoto": "crwdns8675:0crwdne8675:0", + "actions": { + "previousPhoto": "crwdns8677:0crwdne8677:0", + "nextPhoto": "crwdns8679:0crwdne8679:0", + "pauseSlideshow": "crwdns8681:0crwdne8681:0", + "resumeSlideshow": "crwdns8683:0crwdne8683:0", + "toggleSlideshow": "crwdns8685:0crwdne8685:0", + "photo": "crwdns8687:0{number}crwdne8687:0" + } }, "downloads": { "name": "crwdns1170:0crwdne1170:0", "description": "crwdns1172:0crwdne1172:0", "option": { - "columns": { - "label": "crwdns1174:0crwdne1174:0" - }, - "enableRowSorting": { - "label": "crwdns1176:0crwdne1176:0" - }, - "defaultSort": { - "label": "crwdns1178:0crwdne1178:0" - }, - "descendingDefaultSort": { - "label": "crwdns1180:0crwdne1180:0" - }, "showCompletedUsenet": { "label": "crwdns1182:0crwdne1182:0" }, @@ -2954,7 +4138,7 @@ "label": "crwdns3154:0crwdne3154:0" }, "activeTorrentThreshold": { - "label": "crwdns1186:0crwdne1186:0" + "label": "crwdns8689:0crwdne8689:0" }, "categoryFilter": { "label": "crwdns1188:0crwdne1188:0" @@ -2968,12 +4152,6 @@ "limitPerIntegration": { "label": "crwdns3442:0crwdne3442:0", "description": "crwdns3444:0crwdne3444:0" - }, - "columnOrder": { - "label": "crwdns6121:0crwdne6121:0" - }, - "columnWidths": { - "label": "crwdns6123:0crwdne6123:0" } }, "errors": { @@ -2985,70 +4163,70 @@ }, "items": { "actions": { - "columnTitle": "crwdns1198:0crwdne1198:0" + "columnTitle": "crwdns8691:0crwdne8691:0" }, "added": { "columnTitle": "crwdns1200:0crwdne1200:0", - "detailsTitle": "crwdns1202:0crwdne1202:0" + "detailsTitle": "crwdns8693:0crwdne8693:0" }, "category": { - "columnTitle": "crwdns1204:0crwdne1204:0", - "detailsTitle": "crwdns1206:0crwdne1206:0" + "columnTitle": "crwdns8695:0crwdne8695:0", + "detailsTitle": "crwdns8697:0crwdne8697:0" }, "downSpeed": { "columnTitle": "crwdns1208:0crwdne1208:0", - "detailsTitle": "crwdns1210:0crwdne1210:0" + "detailsTitle": "crwdns8699:0crwdne8699:0" }, "index": { "columnTitle": "crwdns1212:0crwdne1212:0", - "detailsTitle": "crwdns1214:0crwdne1214:0" + "detailsTitle": "crwdns8701:0crwdne8701:0" }, "id": { - "columnTitle": "crwdns1216:0crwdne1216:0", - "detailsTitle": "crwdns6131:0crwdne6131:0" + "columnTitle": "crwdns8703:0crwdne8703:0", + "detailsTitle": "crwdns8705:0crwdne8705:0" }, "integration": { - "columnTitle": "crwdns1218:0crwdne1218:0" + "columnTitle": "crwdns8707:0crwdne8707:0" }, "name": { - "columnTitle": "crwdns1220:0crwdne1220:0" + "columnTitle": "crwdns8709:0crwdne8709:0" }, "progress": { "columnTitle": "crwdns1222:0crwdne1222:0", - "detailsTitle": "crwdns1224:0crwdne1224:0" + "detailsTitle": "crwdns8711:0crwdne8711:0" }, "ratio": { "columnTitle": "crwdns1226:0crwdne1226:0", - "detailsTitle": "crwdns1228:0crwdne1228:0" + "detailsTitle": "crwdns8713:0crwdne8713:0" }, "received": { - "columnTitle": "crwdns1230:0crwdne1230:0", - "detailsTitle": "crwdns1232:0crwdne1232:0" + "columnTitle": "crwdns8715:0crwdne8715:0", + "detailsTitle": "crwdns8717:0crwdne8717:0" }, "sent": { - "columnTitle": "crwdns1234:0crwdne1234:0", - "detailsTitle": "crwdns1236:0crwdne1236:0" + "columnTitle": "crwdns8719:0crwdne8719:0", + "detailsTitle": "crwdns8721:0crwdne8721:0" }, "size": { - "columnTitle": "crwdns1238:0crwdne1238:0", - "detailsTitle": "crwdns1240:0crwdne1240:0" + "columnTitle": "crwdns8723:0crwdne8723:0", + "detailsTitle": "crwdns8725:0crwdne8725:0" }, "state": { "columnTitle": "crwdns1242:0crwdne1242:0", - "detailsTitle": "crwdns1244:0crwdne1244:0" + "detailsTitle": "crwdns8727:0crwdne8727:0" }, "time": { - "columnTitle": "crwdns1246:0crwdne1246:0", - "detailsTitle": "crwdns1248:0crwdne1248:0", + "columnTitle": "crwdns8729:0crwdne8729:0", + "detailsTitle": "crwdns8731:0crwdne8731:0", "eta": "crwdns6133:0crwdne6133:0" }, "type": { "columnTitle": "crwdns1250:0crwdne1250:0", - "detailsTitle": "crwdns1252:0crwdne1252:0" + "detailsTitle": "crwdns8733:0crwdne8733:0" }, "upSpeed": { "columnTitle": "crwdns1254:0crwdne1254:0", - "detailsTitle": "crwdns1256:0crwdne1256:0" + "detailsTitle": "crwdns8735:0crwdne8735:0" } }, "states": { @@ -3133,7 +4311,11 @@ }, "mediaRequests-requestList": { "name": "crwdns1302:0crwdne1302:0", - "description": "crwdns1304:0crwdne1304:0", + "description": "crwdns8737:0crwdne8737:0", + "empty": { + "title": "crwdns8739:0crwdne8739:0", + "description": "crwdns8741:0crwdne8741:0" + }, "option": { "linksTargetNewTab": { "label": "crwdns1306:0crwdne1306:0" @@ -3167,12 +4349,16 @@ "failed": "crwdns2837:0crwdne2837:0", "completed": "crwdns3256:0crwdne3256:0" }, + "unknown": "crwdns8743:0crwdne8743:0", "toBeDetermined": "crwdns1324:0crwdne1324:0" }, "mediaRequests-requestStats": { "name": "crwdns1326:0crwdne1326:0", "description": "crwdns1328:0crwdne1328:0", - "option": {}, + "empty": { + "title": "crwdns8745:0crwdne8745:0", + "description": "crwdns8747:0crwdne8747:0" + }, "titles": { "stats": { "main": "crwdns1330:0crwdne1330:0", @@ -3182,8 +4368,7 @@ "declined": "crwdns1338:0crwdne1338:0", "available": "crwdns1340:0crwdne1340:0", "tv": "crwdns1342:0crwdne1342:0", - "movie": "crwdns1344:0crwdne1344:0", - "total": "crwdns1346:0crwdne1346:0" + "movie": "crwdns1344:0crwdne1344:0" }, "users": { "main": "crwdns1348:0crwdne1348:0", @@ -3209,7 +4394,6 @@ }, "currentIndex": "crwdns2384:0{start}crwdnd2384:0{end}crwdnd2384:0{total}crwdne2384:0", "healthCheck": { - "title": "crwdns2386:0crwdne2386:0", "queued": "crwdns2388:0crwdne2388:0", "status": { "healthy": "crwdns2390:0crwdne2390:0", @@ -3218,41 +4402,36 @@ }, "panel": { "statistics": { - "empty": "crwdns2394:0crwdne2394:0", - "transcodes": "crwdns2396:0crwdne2396:0", - "transcodesCount": "crwdns2849:0crwdne2849:0", - "healthChecksCount": "crwdns2851:0crwdne2851:0", "filesCount": "crwdns2853:0crwdne2853:0", "savedSpace": "crwdns2855:0crwdne2855:0", - "healthChecks": "crwdns2406:0crwdne2406:0", "videoCodecs": "crwdns2408:0crwdne2408:0", "videoContainers": "crwdns2410:0crwdne2410:0", "videoResolutions": "crwdns2412:0crwdne2412:0" }, "workers": { - "empty": "crwdns2414:0crwdne2414:0", "table": { - "file": "crwdns2416:0crwdne2416:0", "eta": "crwdns2418:0crwdne2418:0", - "progress": "crwdns2420:0crwdne2420:0", - "transcode": "crwdns2422:0crwdne2422:0", - "healthCheck": "crwdns2424:0crwdne2424:0" + "progress": "crwdns2420:0crwdne2420:0" } }, "queue": { - "empty": "crwdns2426:0crwdne2426:0", "table": { - "file": "crwdns2428:0crwdne2428:0", - "size": "crwdns2430:0crwdne2430:0", - "transcode": "crwdns2432:0crwdne2432:0", - "healthCheck": "crwdns2434:0crwdne2434:0" + "size": "crwdns2430:0crwdne2430:0" } + }, + "common": { + "empty": "crwdns8749:0crwdne8749:0", + "file": "crwdns8751:0crwdne8751:0", + "healthCheck": "crwdns8753:0crwdne8753:0", + "transcode": "crwdns8755:0crwdne8755:0", + "transcodes": "crwdns8757:0crwdne8757:0", + "healthChecks": "crwdns8759:0crwdne8759:0" } } }, "mediaMissing": { "name": "crwdns5833:0crwdne5833:0", - "description": "crwdns5835:0crwdne5835:0", + "description": "crwdns8761:0{radarr}crwdnd8761:0{sonarr}crwdnd8761:0{bindery}crwdne8761:0", "option": { "showMissing": { "label": "crwdns5837:0crwdne5837:0" @@ -3270,7 +4449,8 @@ }, "type": { "movie": "crwdns5847:0crwdne5847:0", - "episode": "crwdns5849:0crwdne5849:0" + "episode": "crwdns5849:0crwdne5849:0", + "book": "crwdns8763:0crwdne8763:0" }, "empty": { "missing": "crwdns5851:0crwdne5851:0", @@ -3301,6 +4481,13 @@ "showPosterImage": { "label": "crwdns4012:0crwdne4012:0" } + }, + "error": { + "allFeedsFailed": "crwdns8765:0crwdne8765:0" + }, + "warning": { + "partial": "crwdns8767:0count={count}crwdne8767:0", + "stale": "crwdns8769:0crwdne8769:0" } }, "releases": { @@ -3376,17 +4563,8 @@ "label": "crwdns3220:0crwdne3220:0" } }, - "edit": { - "label": "crwdns3222:0crwdne3222:0" - }, "editForm": { - "title": "crwdns3224:0crwdne3224:0", - "cancel": { - "label": "crwdns3226:0crwdne3226:0" - }, - "confirm": { - "label": "crwdns3228:0crwdne3228:0" - } + "title": "crwdns3224:0crwdne3224:0" }, "importForm": { "title": "crwdns3466:0crwdne3466:0" @@ -3403,8 +4581,7 @@ "label": "crwdns5725:0crwdne5725:0", "token": "crwdns5727:0crwdne5727:0", "configured": "crwdns5729:0crwdne5729:0", - "notConfigured": "crwdns5731:0crwdne5731:0", - "save": "crwdns5733:0crwdne5733:0" + "notConfigured": "crwdns5731:0crwdne5731:0" } } }, @@ -3431,17 +4608,32 @@ "noProviderResponse": "crwdns3520:0crwdne3520:0", "unexpected": "crwdns5737:0crwdne5737:0" } - } + }, + "expandDetails": "crwdns8771:0{name}crwdne8771:0", + "collapseDetails": "crwdns8773:0{name}crwdne8773:0" }, "networkControllerSummary": { - "option": {}, - "card": { - "vpn": { - "countConnected": "crwdns3119:0{count}crwdne3119:0" + "advanced": { + "updated": "crwdns8775:0crwdne8775:0", + "metric": { + "latency": "crwdns8777:0crwdne8777:0", + "ping": "crwdns8779:0crwdne8779:0", + "uptime": "crwdns8781:0crwdne8781:0", + "users": "crwdns8783:0crwdne8783:0", + "guests": "crwdns8785:0crwdne8785:0" } }, + "card": { + "vpn": { + "countConnected": "crwdns8787:0count={count}crwdne8787:0", + "label": "crwdns8789:0crwdne8789:0" + }, + "wan": "crwdns8791:0crwdne8791:0", + "web": "crwdns8793:0crwdne8793:0", + "wifi": "crwdns8795:0crwdne8795:0", + "lan": "crwdns8797:0crwdne8797:0" + }, "error": { - "integrationsDisconnected": "crwdns3121:0crwdne3121:0", "unknownContentOption": "crwdns3123:0crwdne3123:0" }, "name": "crwdns3125:0crwdne3125:0", @@ -3478,7 +4670,6 @@ } }, "error": { - "integrationsDisconnected": "crwdns3143:0crwdne3143:0", "unknownContentOption": "crwdns3145:0crwdne3145:0" }, "name": "crwdns3147:0crwdne3147:0", @@ -3508,7 +4699,6 @@ "versiontitle": "crwdns3574:0crwdne3574:0", "cputitle": "crwdns3576:0crwdne3576:0", "memorytitle": "crwdns3578:0crwdne3578:0", - "cpu": "crwdns3580:0crwdne3580:0", "memory": "crwdns3582:0crwdne3582:0", "interfaces": { "name": "crwdns3584:0crwdne3584:0", @@ -3516,6 +4706,16 @@ "recv": "crwdns3588:0crwdne3588:0", "title": "crwdns3590:0crwdne3590:0" } + }, + "empty": { + "noInterfaces": "crwdns8799:0crwdne8799:0" + }, + "versionUnknown": "crwdns8801:0crwdne8801:0", + "metricAccessible": "crwdns8803:0{metric}crwdnd8803:0{value}crwdnd8803:0{status}crwdne8803:0", + "status": { + "normal": "crwdns8805:0crwdne8805:0", + "warning": "crwdns8807:0crwdne8807:0", + "critical": "crwdns8809:0crwdne8809:0" } }, "notifications": { @@ -3525,8 +4725,21 @@ "option": { "hideLogos": { "label": "crwdns5757:0crwdne5757:0" + }, + "messageFormat": { + "label": "crwdns8811:0crwdne8811:0", + "option": { + "auto": "crwdns8813:0crwdne8813:0", + "plain": "crwdns8815:0crwdne8815:0", + "markdown": "crwdns8817:0crwdne8817:0", + "html": "crwdns8819:0crwdne8819:0" + } } - } + }, + "openService": "crwdns8821:0crwdne8821:0", + "deleteNotification": "crwdns8823:0crwdne8823:0", + "deleteFailed": "crwdns8825:0crwdne8825:0", + "deleteFailedMessage": "crwdns8827:0crwdne8827:0" }, "speedtestTracker": { "name": "crwdns4014:0crwdne4014:0", @@ -3568,7 +4781,6 @@ } }, "uptimeKuma": { - "name": "crwdns5057:0crwdne5057:0", "description": "crwdns5059:0crwdne5059:0", "option": { "showAverageUptime": { @@ -3605,10 +4817,14 @@ }, "error": { "internalServerError": "crwdns5095:0crwdne5095:0" + }, + "status": { + "up": "crwdns8829:0crwdne8829:0", + "down": "crwdns8831:0crwdne8831:0", + "paused": "crwdns8833:0crwdne8833:0" } }, "traefik": { - "name": "crwdns5759:0crwdne5759:0", "description": "crwdns5761:0crwdne5761:0", "option": { "showTcp": { @@ -3629,7 +4845,6 @@ }, "resource": { "routers": "crwdns5777:0crwdne5777:0", - "services": "crwdns5779:0crwdne5779:0", "middlewares": "crwdns5781:0crwdne5781:0" }, "status": { @@ -3639,7 +4854,20 @@ }, "error": { "internalServerError": "crwdns5789:0crwdne5789:0" - } + }, + "resourceType": { + "router": "crwdns8835:0crwdne8835:0", + "service": "crwdns8837:0crwdne8837:0", + "middleware": "crwdns8839:0crwdne8839:0" + }, + "resourceStatus": { + "enabled": "crwdns8841:0crwdne8841:0", + "disabled": "crwdns8843:0crwdne8843:0", + "warning": "crwdns8845:0crwdne8845:0", + "error": "crwdns8847:0crwdne8847:0", + "unknown": "crwdns8849:0crwdne8849:0" + }, + "failedEndpoint": "crwdns8851:0{endpoint}crwdne8851:0" }, "audioStats": { "name": "crwdns5097:0crwdne5097:0", @@ -3705,9 +4933,7 @@ "label": "crwdns3696:0crwdne3696:0", "description": "crwdns3698:0crwdne3698:0", "option": { - "cpu": "crwdns3700:0crwdne3700:0", "memory": "crwdns3702:0crwdne3702:0", - "gpu": "crwdns3996:0crwdne3996:0", "network": "crwdns3704:0crwdne3704:0" } }, @@ -3722,12 +4948,11 @@ } }, "card": { - "cpu": "crwdns3604:0crwdne3604:0", "memory": "crwdns3606:0crwdne3606:0", - "gpu": "crwdns3998:0crwdne3998:0", "network": "crwdns3608:0crwdne3608:0", "up": "crwdns3610:0crwdne3610:0", - "down": "crwdns3612:0crwdne3612:0" + "down": "crwdns3612:0crwdne3612:0", + "memoryTooltip": "crwdns8853:0{used}crwdnd8853:0{available}crwdnd8853:0{percent}crwdne8853:0" } }, "systemDisks": { @@ -3744,7 +4969,7 @@ "label": "crwdns3836:0crwdne3836:0" }, "absolute": { - "label": "crwdns3838:0crwdne3838:0" + "label": "crwdns8855:0crwdne8855:0" }, "free": { "label": "crwdns3840:0crwdne3840:0" @@ -3753,23 +4978,38 @@ }, "showBackgroundBar": { "label": "crwdns3842:0crwdne3842:0" - }, - "visibleStorageVolumes": { - "label": "crwdns5747:0crwdne5747:0", - "description": "crwdns5749:0crwdne5749:0", - "placeholder": "crwdns5751:0crwdne5751:0" } }, "status": { - "unhealthy": "crwdns3844:0crwdne3844:0" + "unhealthy": "crwdns3844:0crwdne3844:0", + "smart": "crwdns8857:0crwdne8857:0", + "free": "crwdns8859:0{percentage}crwdne8859:0" } }, "customApi": { - "name": "crwdns5601:0crwdne5601:0", - "description": "crwdns5603:0crwdne5603:0", + "name": "crwdns8861:0crwdne8861:0", + "description": "crwdns8863:0crwdne8863:0", + "customJsx": { + "noTemplate": "crwdns8865:0crwdne8865:0", + "templateWarnings": "crwdns8867:0{count}crwdne8867:0", + "requestIdRequired": "crwdns8869:0crwdne8869:0", + "unsavedPreview": "crwdns8871:0crwdne8871:0", + "invalidParams": "crwdns8873:0crwdne8873:0", + "loading": "crwdns8875:0crwdne8875:0", + "loadRequest": "crwdns8877:0crwdne8877:0", + "requestFailed": "crwdns8879:0crwdne8879:0", + "retry": "crwdns8881:0crwdne8881:0", + "actionCompleted": "crwdns8883:0crwdne8883:0", + "actionSimulated": "crwdns8885:0crwdne8885:0", + "actionsDisabledEditMode": "crwdns8887:0crwdne8887:0", + "widgetItemUnavailable": "crwdns8889:0crwdne8889:0", + "toggle": "crwdns8891:0crwdne8891:0", + "copied": "crwdns8893:0crwdne8893:0", + "confirmDelete": "crwdns8895:0crwdne8895:0" + }, "option": { "definitionId": { - "label": "crwdns5605:0crwdne5605:0" + "label": "crwdns8897:0crwdne8897:0" }, "refreshInterval": { "label": "crwdns5607:0crwdne5607:0", @@ -3777,142 +5017,49 @@ } }, "noDefinition": "crwdns5611:0crwdne5611:0", - "definitionNotFound": "crwdns5613:0crwdne5613:0" + "definitionNotFound": "crwdns8899:0crwdne8899:0", + "migrationRequired": "crwdns8901:0crwdne8901:0", + "manageMigration": "crwdns8903:0crwdne8903:0", + "contactAdmin": "crwdns8905:0crwdne8905:0", + "configurationNeedsRepair": "crwdns8907:0crwdne8907:0", + "removeFromBoard": "crwdns8909:0crwdne8909:0", + "editModePending": "crwdns8911:0crwdne8911:0", + "picker": { + "group": "crwdns8913:0crwdne8913:0", + "empty": "crwdns8915:0crwdne8915:0", + "preview": "crwdns8917:0crwdne8917:0", + "sources": "crwdns8919:0count={count}crwdne8919:0", + "requests": "crwdns8921:0count={count}crwdne8921:0", + "migrationRequired": "crwdns8923:0crwdne8923:0", + "migrationDescription": "crwdns8925:0crwdne8925:0", + "manageMigration": "crwdns8927:0crwdne8927:0", + "contactAdmin": "crwdns8929:0crwdne8929:0" + }, + "configuration": { + "needsAttention": "crwdns8931:0{message}crwdne8931:0", + "advancedOptions": "crwdns8933:0crwdne8933:0", + "invalidJson": "crwdns8935:0crwdne8935:0" + } }, "beszelSystemTable": { "name": "crwdns4779:0crwdne4779:0", "description": "crwdns4781:0crwdne4781:0", "option": { - "statusFilter": { - "label": "crwdns4783:0crwdne4783:0" - }, "sortBy": { "label": "crwdns4785:0crwdne4785:0" }, "sortDirection": { "label": "crwdns4787:0crwdne4787:0" - }, - "showCpu": { - "label": "crwdns4789:0crwdne4789:0" - }, - "showMemory": { - "label": "crwdns4791:0crwdne4791:0" - }, - "showDisk": { - "label": "crwdns4793:0crwdne4793:0" - }, - "showGpu": { - "label": "crwdns4795:0crwdne4795:0" - }, - "showLoadAvg": { - "label": "crwdns4797:0crwdne4797:0" - }, - "showNet": { - "label": "crwdns4799:0crwdne4799:0" - }, - "showTemp": { - "label": "crwdns4801:0crwdne4801:0" - }, - "showBattery": { - "label": "crwdns4803:0crwdne4803:0" - }, - "showServices": { - "label": "crwdns4805:0crwdne4805:0" - }, - "showUptime": { - "label": "crwdns4807:0crwdne4807:0" - }, - "showAgent": { - "label": "crwdns4809:0crwdne4809:0" - }, - "columnOrder": { - "label": "crwdns6165:0crwdne6165:0" - }, - "columnWidths": { - "label": "crwdns6167:0crwdne6167:0" } }, - "noRecords": "crwdns4811:0crwdne4811:0", "error": { - "internalServerError": "crwdns5651:0crwdne5651:0", "layoutSaveTitle": "crwdns6169:0crwdne6169:0", "layoutSaveMessage": "crwdns6171:0crwdne6171:0" - }, - "column": { - "system": "crwdns4813:0crwdne4813:0", - "cpu": "crwdns4815:0crwdne4815:0", - "memory": "crwdns4817:0crwdne4817:0", - "disk": "crwdns4819:0crwdne4819:0", - "gpu": "crwdns4821:0crwdne4821:0", - "loadAvg": "crwdns4823:0crwdne4823:0", - "net": "crwdns4825:0crwdne4825:0", - "temp": "crwdns4827:0crwdne4827:0", - "battery": "crwdns4829:0crwdne4829:0", - "services": "crwdns4831:0crwdne4831:0", - "uptime": "crwdns4833:0crwdne4833:0", - "agent": "crwdns4835:0crwdne4835:0" } }, "beszelSystemGrid": { "name": "crwdns4837:0crwdne4837:0", - "description": "crwdns4839:0crwdne4839:0", - "option": { - "statusFilter": { - "label": "crwdns4841:0crwdne4841:0" - }, - "showCpu": { - "label": "crwdns4843:0crwdne4843:0" - }, - "showMemory": { - "label": "crwdns4845:0crwdne4845:0" - }, - "showDisk": { - "label": "crwdns4847:0crwdne4847:0" - }, - "showGpu": { - "label": "crwdns4849:0crwdne4849:0" - }, - "showLoadAvg": { - "label": "crwdns4851:0crwdne4851:0" - }, - "showNet": { - "label": "crwdns4853:0crwdne4853:0" - }, - "showTemp": { - "label": "crwdns4855:0crwdne4855:0" - }, - "showBattery": { - "label": "crwdns4857:0crwdne4857:0" - }, - "showServices": { - "label": "crwdns4859:0crwdne4859:0" - }, - "showUptime": { - "label": "crwdns4861:0crwdne4861:0" - }, - "showAgent": { - "label": "crwdns4863:0crwdne4863:0" - } - }, - "error": { - "internalServerError": "crwdns5653:0crwdne5653:0" - }, - "empty": { - "noSystems": "crwdns5677:0crwdne5677:0" - }, - "metric": { - "cpu": "crwdns4865:0crwdne4865:0", - "memory": "crwdns4867:0crwdne4867:0", - "disk": "crwdns4869:0crwdne4869:0", - "gpu": "crwdns4871:0crwdne4871:0", - "loadAvg": "crwdns4873:0crwdne4873:0", - "net": "crwdns4875:0crwdne4875:0", - "temp": "crwdns4877:0crwdne4877:0", - "battery": "crwdns4879:0crwdne4879:0", - "services": "crwdns4881:0crwdne4881:0", - "uptime": "crwdns4883:0crwdne4883:0", - "agent": "crwdns4885:0crwdne4885:0" - } + "description": "crwdns4839:0crwdne4839:0" }, "beszelAlerts": { "name": "crwdns4887:0crwdne4887:0", @@ -3926,11 +5073,12 @@ } }, "empty": "crwdns4895:0crwdne4895:0", - "error": { - "internalServerError": "crwdns5655:0crwdne5655:0" - }, "history": "crwdns4897:0crwdne4897:0", "resolved": "crwdns4899:0crwdne4899:0", + "alertDescription": { + "statusDuration": "crwdns8937:0{minutes}crwdne8937:0", + "threshold": "crwdns8939:0{value}crwdnd8939:0{minutes}crwdne8939:0" + }, "status": { "triggered": "crwdns4901:0crwdne4901:0", "ok": "crwdns4903:0crwdne4903:0" @@ -3977,16 +5125,16 @@ "noSystems": "crwdns5679:0crwdne5679:0" }, "error": { - "internalServerError": "crwdns5661:0crwdne5661:0", "liveConnectionFailed": "crwdns5663:0crwdne5663:0", "switchToHistorical": "crwdns5665:0crwdne5665:0", - "systemNotFound": "crwdns5667:0crwdne5667:0" + "systemNotFound": "crwdns5667:0crwdne5667:0", + "selectionSaveTitle": "crwdns8941:0crwdne8941:0", + "selectionSaveMessage": "crwdns8943:0crwdne8943:0" }, "chart": { "cpu": { "title": "crwdns4929:0crwdne4929:0", - "subtitle": "crwdns4931:0crwdne4931:0", - "series": "crwdns4933:0crwdne4933:0" + "subtitle": "crwdns4931:0crwdne4931:0" }, "memory": { "title": "crwdns4935:0crwdne4935:0", @@ -4001,7 +5149,7 @@ }, "diskIO": { "title": "crwdns4949:0crwdne4949:0", - "subtitle": "crwdns4951:0crwdne4951:0", + "subtitle": "crwdns8945:0crwdne8945:0", "read": "crwdns4953:0crwdne4953:0", "write": "crwdns4955:0crwdne4955:0" }, @@ -4028,39 +5176,550 @@ "title": "crwdns4973:0crwdne4973:0", "subtitle": "crwdns4975:0crwdne4975:0" } + }, + "period": { + "live": "crwdns8947:0crwdne8947:0", + "oneHour": "crwdns8949:0crwdne8949:0", + "twelveHours": "crwdns8951:0crwdne8951:0", + "oneDay": "crwdns8953:0crwdne8953:0", + "oneWeek": "crwdns8955:0crwdne8955:0", + "thirtyDays": "crwdns8957:0crwdne8957:0" } }, - "wud": { - "name": "crwdns6197:0crwdne6197:0", - "description": "crwdns6199:0crwdne6199:0", - "title": "crwdns6201:0crwdne6201:0", - "monitored": "crwdns6203:0crwdne6203:0", - "updatesAvailable": "crwdns6205:0count={count}crwdne6205:0", - "updateAvailable": "crwdns6207:0crwdne6207:0", - "openReleaseNotes": "crwdns6209:0crwdne6209:0", + "assistant": { + "name": "crwdns8959:0crwdne8959:0", + "description": "crwdns8961:0crwdne8961:0", + "unavailable": { + "title": "crwdns8963:0crwdne8963:0", + "description": "crwdns8965:0crwdne8965:0" + }, + "compact": { + "title": "crwdns8967:0crwdne8967:0", + "description": "crwdns8969:0crwdne8969:0", + "open": "crwdns8971:0crwdne8971:0", + "openTitle": "crwdns8973:0crwdne8973:0", + "openDescription": "crwdns8975:0crwdne8975:0", + "returnToWidget": "crwdns8977:0crwdne8977:0", + "otherWidgetTitle": "crwdns8979:0crwdne8979:0", + "otherWidgetDescription": "crwdns8981:0crwdne8981:0", + "useHere": "crwdns8983:0crwdne8983:0" + } + }, + "beszel": { + "error": { + "internalServerError": "crwdns8985:0crwdne8985:0" + }, + "empty": { + "noSystems": "crwdns8987:0crwdne8987:0" + }, + "options": { + "statusFilter": { + "label": "crwdns8989:0crwdne8989:0" + }, + "showCpu": { + "label": "crwdns8991:0crwdne8991:0" + }, + "showMemory": { + "label": "crwdns8993:0crwdne8993:0" + }, + "showDisk": { + "label": "crwdns8995:0crwdne8995:0" + }, + "showGpu": { + "label": "crwdns8997:0crwdne8997:0" + }, + "showLoadAvg": { + "label": "crwdns8999:0crwdne8999:0" + }, + "showNet": { + "label": "crwdns9001:0crwdne9001:0" + }, + "showTemp": { + "label": "crwdns9003:0crwdne9003:0" + }, + "showBattery": { + "label": "crwdns9005:0crwdne9005:0" + }, + "showServices": { + "label": "crwdns9007:0crwdne9007:0" + }, + "showUptime": { + "label": "crwdns9009:0crwdne9009:0" + }, + "showAgent": { + "label": "crwdns9011:0crwdne9011:0" + } + }, + "metric": { + "system": "crwdns9013:0crwdne9013:0", + "source": "crwdns9015:0crwdne9015:0", + "hostname": "crwdns9017:0crwdne9017:0", + "cpuModel": "crwdns9019:0crwdne9019:0", + "cores": "crwdns9021:0crwdne9021:0", + "memoryTotal": "crwdns9023:0crwdne9023:0", + "memory": "crwdns9025:0crwdne9025:0", + "disk": "crwdns9027:0crwdne9027:0", + "loadAvg": "crwdns9029:0crwdne9029:0", + "net": "crwdns9031:0crwdne9031:0", + "temp": "crwdns9033:0crwdne9033:0", + "battery": "crwdns9035:0crwdne9035:0", + "uptime": "crwdns9037:0crwdne9037:0", + "agent": "crwdns9039:0crwdne9039:0" + } + }, + "llamacpp": { + "name": "crwdns9041:0crwdne9041:0", + "description": "crwdns9043:0crwdne9043:0", + "title": "crwdns9045:0crwdne9045:0", + "status": { + "unhealthy": "crwdns9047:0{status}crwdne9047:0" + }, + "idle": "crwdns9049:0crwdne9049:0", + "speedTooltip": { + "current": "crwdns9051:0crwdne9051:0", + "average": "crwdns9053:0crwdne9053:0", + "request": "crwdns9055:0crwdne9055:0" + }, + "busy": "crwdns9057:0count={count}crwdne9057:0", + "modelInfo": { + "context": "crwdns9059:0crwdne9059:0", + "size": "crwdns9061:0crwdne9061:0", + "parameters": "crwdns9063:0crwdne9063:0", + "model": "crwdns9065:0crwdne9065:0", + "quantization": "crwdns9067:0crwdne9067:0" + }, + "stats": { + "tokensProcessed": "crwdns9069:0crwdne9069:0", + "contextUsage": "crwdns9071:0crwdne9071:0", + "cacheHitRate": "crwdns9073:0crwdne9073:0", + "tokensGenerated": "crwdns9075:0crwdne9075:0" + }, + "error": { + "unreachable": "crwdns9077:0crwdne9077:0" + }, + "unit": { + "speed": "crwdns9079:0{value}crwdne9079:0", + "parameters": "crwdns9081:0{value}crwdne9081:0", + "none": "crwdns9083:0crwdne9083:0", + "speedShort": "crwdns9085:0crwdne9085:0" + }, "option": { "showTitle": { - "label": "crwdns6211:0crwdne6211:0" + "label": "crwdns9087:0crwdne9087:0" }, - "showRing": { - "label": "crwdns6213:0crwdne6213:0" + "showModelInfo": { + "label": "crwdns9089:0crwdne9089:0" }, - "layout": { - "label": "crwdns6215:0crwdne6215:0", + "showContextUsage": { + "label": "crwdns9091:0crwdne9091:0" + }, + "showCacheHitRate": { + "label": "crwdns9093:0crwdne9093:0" + }, + "showSpeedStats": { + "label": "crwdns9095:0crwdne9095:0" + }, + "showRequests": { + "label": "crwdns9097:0crwdne9097:0" + }, + "showTokenStats": { + "label": "crwdns9099:0crwdne9099:0" + }, + "showSpeculative": { + "label": "crwdns9101:0crwdne9101:0" + } + }, + "advanced": { + "promptSpeed": "crwdns9103:0crwdne9103:0", + "avgSpeed": "crwdns9105:0crwdne9105:0", + "requests": "crwdns9107:0crwdne9107:0", + "deferred": "crwdns9109:0crwdne9109:0", + "slots": "crwdns9111:0{processing}crwdnd9111:0{total}crwdne9111:0", + "speculative": "crwdns9113:0crwdne9113:0", + "avgPrompt": "crwdns9115:0crwdne9115:0", + "specDrafts": "crwdns9117:0crwdne9117:0", + "specAccepted": "crwdns9119:0crwdne9119:0", + "specDraftTokens": "crwdns9121:0crwdne9121:0" + } + }, + "stats": { + "name": "crwdns9123:0crwdne9123:0", + "description": "crwdns9125:0crwdne9125:0", + "configure": "crwdns9127:0crwdne9127:0", + "refresh": "crwdns9129:0crwdne9129:0", + "empty": "crwdns9131:0crwdne9131:0", + "editorHelp": "crwdns9133:0crwdne9133:0", + "source": "crwdns9135:0crwdne9135:0", + "metric": "crwdns9137:0crwdne9137:0", + "noMetrics": "crwdns9139:0crwdne9139:0", + "add": "crwdns9141:0crwdne9141:0", + "label": "crwdns9143:0crwdne9143:0", + "hidden": "crwdns9145:0crwdne9145:0", + "compact": "crwdns9147:0crwdne9147:0", + "moveUp": "crwdns9149:0crwdne9149:0", + "moveDown": "crwdns9151:0crwdne9151:0", + "remove": "crwdns9153:0crwdne9153:0", + "loading": "crwdns9155:0crwdne9155:0", + "unavailable": "crwdns9157:0crwdne9157:0", + "refreshFailed": "crwdns9159:0crwdne9159:0", + "stale": "crwdns9161:0crwdne9161:0", + "table": { + "value": "crwdns9163:0crwdne9163:0", + "status": "crwdns9165:0crwdne9165:0" + }, + "option": { + "table": { + "label": "crwdns9167:0crwdne9167:0" + }, + "rows": { + "label": "crwdns9169:0crwdne9169:0" + }, + "showIcon": { + "label": "crwdns9171:0crwdne9171:0" + }, + "spacing": { + "label": "crwdns9173:0crwdne9173:0", "option": { - "horizontal": { - "label": "crwdns6217:0crwdne6217:0" + "xs": { + "label": "crwdns9175:0crwdne9175:0" }, - "vertical": { - "label": "crwdns6219:0crwdne6219:0" + "sm": { + "label": "crwdns9177:0crwdne9177:0" + }, + "md": { + "label": "crwdns9179:0crwdne9179:0" } } }, - "showUpdateList": { - "label": "crwdns6221:0crwdne6221:0", - "description": "crwdns6223:0crwdne6223:0" + "entries": { + "label": "crwdns9181:0crwdne9181:0" + }, + "plain": { + "label": "crwdns9183:0crwdne9183:0" } - } + }, + "fetchFailed": "crwdns9185:0crwdne9185:0", + "viewOptions": "crwdns9187:0crwdne9187:0", + "moreMetrics": "crwdns9189:0{count}crwdne9189:0", + "localHelp": "crwdns9191:0crwdne9191:0", + "plain": "crwdns9193:0crwdne9193:0", + "resetView": "crwdns9195:0crwdne9195:0", + "allHidden": "crwdns9197:0crwdne9197:0" + }, + "wazuh": { + "target": { + "api": "crwdns9199:0crwdne9199:0", + "indexer": "crwdns9201:0crwdne9201:0", + "wazuh": "crwdns9203:0crwdne9203:0" + }, + "severity": { + "low": "crwdns9205:0crwdne9205:0", + "medium": "crwdns9207:0crwdne9207:0", + "high": "crwdns9209:0crwdne9209:0", + "critical": "crwdns9211:0crwdne9211:0" + }, + "error": { + "unauthorized": { + "title": "crwdns9213:0{target}crwdne9213:0", + "description": "crwdns9215:0crwdne9215:0" + }, + "certificate": { + "title": "crwdns9217:0{target}crwdne9217:0", + "description": "crwdns9219:0crwdne9219:0" + }, + "unreachable": { + "title": "crwdns9221:0{target}crwdne9221:0", + "description": "crwdns9223:0crwdne9223:0" + }, + "timeout": { + "title": "crwdns9225:0{target}crwdne9225:0", + "description": "crwdns9227:0crwdne9227:0" + }, + "status": { + "title": "crwdns9229:0{target}crwdne9229:0", + "description": "crwdns9231:0{status}crwdne9231:0" + }, + "invalidResponse": { + "title": "crwdns9233:0{target}crwdne9233:0", + "description": "crwdns9235:0crwdne9235:0" + }, + "indexerRequired": { + "title": "crwdns9237:0crwdne9237:0", + "description": "crwdns9239:0crwdne9239:0" + }, + "unknown": { + "title": "crwdns9241:0{target}crwdne9241:0", + "description": "crwdns9243:0crwdne9243:0" + } + }, + "range": { + "1h": "crwdns9245:0crwdne9245:0", + "24h": "crwdns9247:0crwdne9247:0", + "7d": "crwdns9249:0crwdne9249:0", + "30d": "crwdns9251:0crwdne9251:0" + }, + "levelTooltip": "crwdns9253:0{level}crwdnd9253:0{severity}crwdne9253:0" + }, + "wazuhAgents": { + "name": "crwdns9255:0crwdne9255:0", + "description": "crwdns9257:0crwdne9257:0", + "option": { + "statusFilter": { + "label": "crwdns9259:0crwdne9259:0" + }, + "sortBy": { + "label": "crwdns9261:0crwdne9261:0" + }, + "showVersion": { + "label": "crwdns9263:0crwdne9263:0" + }, + "showGroups": { + "label": "crwdns9265:0crwdne9265:0" + } + }, + "title": "crwdns9267:0crwdne9267:0", + "total": "crwdns9269:0{count}crwdne9269:0", + "status": { + "active": "crwdns9271:0crwdne9271:0", + "disconnected": "crwdns9273:0crwdne9273:0", + "neverConnected": "crwdns9275:0crwdne9275:0", + "pending": "crwdns9277:0crwdne9277:0" + }, + "statusLabel": { + "active": "crwdns9279:0crwdne9279:0", + "disconnected": "crwdns9281:0crwdne9281:0", + "never_connected": "crwdns9283:0crwdne9283:0", + "pending": "crwdns9285:0crwdne9285:0", + "unknown": "crwdns9287:0crwdne9287:0" + }, + "live": "crwdns9289:0crwdne9289:0", + "snapshot": "crwdns9291:0{age}crwdne9291:0", + "snapshotHint": "crwdns9293:0{time}crwdne9293:0", + "staleSnapshot": "crwdns9295:0{time}crwdne9295:0", + "noDisconnected": "crwdns9297:0crwdne9297:0", + "empty": "crwdns9299:0crwdne9299:0", + "column": { + "status": "crwdns9301:0crwdne9301:0", + "name": "crwdns9303:0crwdne9303:0", + "ip": "crwdns9305:0crwdne9305:0", + "os": "crwdns9307:0crwdne9307:0", + "version": "crwdns9309:0crwdne9309:0", + "lastKeepAlive": "crwdns9311:0crwdne9311:0", + "groups": "crwdns9313:0crwdne9313:0" + }, + "outdated": "crwdns9315:0{version}crwdne9315:0" + }, + "wazuhAlerts": { + "name": "crwdns9317:0crwdne9317:0", + "description": "crwdns9319:0crwdne9319:0", + "option": { + "minLevel": { + "label": "crwdns9321:0crwdne9321:0", + "description": "crwdns9323:0crwdne9323:0" + }, + "hours": { + "label": "crwdns9325:0crwdne9325:0" + }, + "limit": { + "label": "crwdns9327:0crwdne9327:0" + }, + "showMitre": { + "label": "crwdns9329:0crwdne9329:0" + }, + "showAgent": { + "label": "crwdns9331:0crwdne9331:0" + }, + "showSourceIp": { + "label": "crwdns9333:0crwdne9333:0" + }, + "showRuleId": { + "label": "crwdns9335:0crwdne9335:0" + } + }, + "title": "crwdns9337:0{level}crwdnd9337:0{hours}crwdne9337:0", + "empty": "crwdns9339:0crwdne9339:0", + "rule": "crwdns9341:0{id}crwdne9341:0", + "openInDashboard": "crwdns9343:0crwdne9343:0" + }, + "wazuhSummary": { + "name": "crwdns9345:0crwdne9345:0", + "description": "crwdns9347:0crwdne9347:0", + "option": { + "range": { + "label": "crwdns9349:0crwdne9349:0" + }, + "showTrend": { + "label": "crwdns9351:0crwdne9351:0" + }, + "showFooter": { + "label": "crwdns9353:0crwdne9353:0" + } + }, + "title": "crwdns9355:0{range}crwdne9355:0", + "alerts": "crwdns9357:0crwdne9357:0", + "none": "crwdns9359:0crwdne9359:0", + "trend": { + "new": "crwdns9361:0crwdne9361:0", + "tooltip": "crwdns9363:0{previous}crwdne9363:0" + }, + "previous": "crwdns9365:0{range}crwdnd9365:0{count}crwdne9365:0", + "maxLevel": "crwdns9367:0{level}crwdne9367:0", + "health": "crwdns9369:0{status}crwdne9369:0", + "manager": "crwdns9371:0{version}crwdne9371:0" + }, + "wazuhTimeline": { + "name": "crwdns9373:0crwdne9373:0", + "description": "crwdns9375:0crwdne9375:0", + "option": { + "range": { + "label": "crwdns9377:0crwdne9377:0" + }, + "interval": { + "label": "crwdns9379:0crwdne9379:0" + }, + "chartType": { + "label": "crwdns9381:0crwdne9381:0" + }, + "yScale": { + "label": "crwdns9383:0crwdne9383:0", + "description": "crwdns9385:0crwdne9385:0" + }, + "minLevel": { + "label": "crwdns9387:0crwdne9387:0" + }, + "showLegend": { + "label": "crwdns9389:0crwdne9389:0" + } + }, + "title": "crwdns9391:0{range}crwdne9391:0", + "total": "crwdns9393:0{count}crwdne9393:0", + "interval": "crwdns9395:0{interval}crwdne9395:0" + }, + "wazuhTopList": { + "name": "crwdns9397:0crwdne9397:0", + "description": "crwdns9399:0crwdne9399:0", + "option": { + "kind": { + "label": "crwdns9401:0crwdne9401:0" + }, + "range": { + "label": "crwdns9403:0crwdne9403:0" + }, + "limit": { + "label": "crwdns9405:0crwdne9405:0" + }, + "minLevel": { + "label": "crwdns9407:0crwdne9407:0" + }, + "showBars": { + "label": "crwdns9409:0crwdne9409:0" + } + }, + "title": { + "rules": "crwdns9411:0{range}crwdne9411:0", + "agents": "crwdns9413:0{range}crwdne9413:0", + "sourceIps": "crwdns9415:0{range}crwdne9415:0", + "mitreTactics": "crwdns9417:0{range}crwdne9417:0", + "mitreTechniques": "crwdns9419:0{range}crwdne9419:0" + }, + "empty": { + "rules": "crwdns9421:0crwdne9421:0", + "agents": "crwdns9423:0crwdne9423:0", + "sourceIps": "crwdns9425:0crwdne9425:0", + "mitreTactics": "crwdns9427:0crwdne9427:0", + "mitreTechniques": "crwdns9429:0crwdne9429:0" + }, + "totalTooltip": "crwdns9431:0{count}crwdne9431:0", + "private": "crwdns9433:0crwdne9433:0", + "public": "crwdns9435:0crwdne9435:0", + "agents": "crwdns9437:0{count}crwdne9437:0", + "others": "crwdns9439:0{count}crwdne9439:0" + }, + "wazuhVulnerabilities": { + "name": "crwdns9441:0crwdne9441:0", + "description": "crwdns9443:0crwdne9443:0", + "option": { + "cveOrder": { + "label": "crwdns9445:0crwdne9445:0" + }, + "minSeverity": { + "label": "crwdns9447:0crwdne9447:0" + }, + "cveLimit": { + "label": "crwdns9449:0crwdne9449:0" + }, + "agentLimit": { + "label": "crwdns9451:0crwdne9451:0" + }, + "showAgents": { + "label": "crwdns9453:0crwdne9453:0" + } + }, + "title": "crwdns9455:0crwdne9455:0", + "topCves": "crwdns9457:0crwdne9457:0", + "score": "crwdns9459:0crwdne9459:0", + "agentsShort": "crwdns9461:0crwdne9461:0", + "topAgents": "crwdns9463:0crwdne9463:0", + "criticalHigh": "crwdns9465:0crwdne9465:0", + "totalTooltip": "crwdns9467:0{count}crwdnd9467:0{agents}crwdne9467:0", + "affected": "crwdns9469:0{count}crwdne9469:0", + "empty": "crwdns9471:0crwdne9471:0", + "distribution": "crwdns9473:0{unscored}crwdne9473:0", + "worst": "crwdns9475:0{id}crwdnd9475:0{score}crwdnd9475:0{agents}crwdne9475:0" + }, + "wazuhFim": { + "name": "crwdns9477:0crwdne9477:0", + "description": "crwdns9479:0crwdne9479:0", + "option": { + "range": { + "label": "crwdns9481:0crwdne9481:0" + }, + "event": { + "label": "crwdns9483:0crwdne9483:0" + }, + "limit": { + "label": "crwdns9485:0crwdne9485:0" + }, + "includeRegistry": { + "label": "crwdns9487:0crwdne9487:0" + } + }, + "title": "crwdns9489:0{range}crwdne9489:0", + "event": { + "added": "crwdns9491:0crwdne9491:0", + "modified": "crwdns9493:0crwdne9493:0", + "deleted": "crwdns9495:0crwdne9495:0", + "unknown": "crwdns9497:0crwdne9497:0" + }, + "empty": "crwdns9499:0crwdne9499:0", + "user": "crwdns9501:0{user}crwdne9501:0", + "registry": "crwdns9503:0crwdne9503:0" + }, + "wazuhAuthFailures": { + "name": "crwdns9505:0crwdne9505:0", + "description": "crwdns9507:0crwdne9507:0", + "option": { + "hours": { + "label": "crwdns9509:0crwdne9509:0" + }, + "limit": { + "label": "crwdns9511:0crwdne9511:0" + }, + "showSourceIps": { + "label": "crwdns9513:0crwdne9513:0" + } + }, + "title": "crwdns9515:0{hours}crwdne9515:0", + "seriesTooltip": "crwdns9517:0{hours}crwdne9517:0", + "peak": "crwdns9519:0{count}crwdne9519:0", + "empty": "crwdns9521:0crwdne9521:0", + "failed": "crwdns9523:0crwdne9523:0", + "failedHint": "crwdns9525:0crwdne9525:0", + "bruteForce": "crwdns9527:0crwdne9527:0", + "bruteForceHint": "crwdns9529:0crwdne9529:0", + "sourceIps": "crwdns9531:0crwdne9531:0", + "ipTooltip": "crwdns9533:0{ip}crwdnd9533:0{count}crwdne9533:0", + "bruteForceCount": "crwdns9535:0{count}crwdne9535:0" } }, "widgetPreview": { @@ -4073,7 +5732,76 @@ } }, "board": { + "emptyState": { + "title": "crwdns9537:0crwdne9537:0", + "description": "crwdns9539:0crwdne9539:0", + "addWidget": "crwdns9541:0crwdne9541:0", + "addApp": "crwdns9543:0crwdne9543:0", + "connectService": "crwdns9545:0crwdne9545:0" + }, + "setupChecklist": { + "title": "crwdns9547:0crwdne9547:0", + "description": "crwdns9549:0crwdne9549:0", + "collapse": "crwdns9551:0crwdne9551:0", + "dismiss": "crwdns10859:0crwdne10859:0", + "resume": "crwdns9553:0{completed}crwdnd9553:0{total}crwdne9553:0", + "progress": "crwdns9555:0crwdne9555:0", + "step": { + "content": { + "label": "crwdns9557:0crwdne9557:0", + "description": "crwdns9559:0crwdne9559:0" + }, + "app": { + "label": "crwdns9561:0crwdne9561:0", + "description": "crwdns9563:0crwdne9563:0" + }, + "service": { + "label": "crwdns9565:0crwdne9565:0", + "description": "crwdns9567:0crwdne9567:0", + "permissionDescription": "crwdns9569:0crwdne9569:0", + "action": "crwdns9571:0crwdne9571:0" + } + } + }, "action": { + "addContent": "crwdns9573:0crwdne9573:0", + "settings": "crwdns9575:0crwdne9575:0", + "switch": "crwdns9577:0crwdne9577:0", + "switcher": { + "title": "crwdns9579:0crwdne9579:0", + "search": { + "empty": "crwdns9581:0{search}crwdne9581:0" + }, + "results": "crwdns9583:0crwdne9583:0", + "preview": "crwdns9585:0{name}crwdnd9585:0{count}crwdne9585:0", + "currentHidden": "crwdns9587:0{name}crwdne9587:0", + "keyboard": { + "navigate": "crwdns9589:0crwdne9589:0", + "open": "crwdns9591:0crwdne9591:0", + "instructions": "crwdns9593:0crwdne9593:0" + }, + "empty": { + "title": "crwdns9595:0crwdne9595:0", + "description": "crwdns9597:0crwdne9597:0" + }, + "error": "crwdns9599:0crwdne9599:0" + }, + "create": { + "availability": { + "checking": "crwdns9601:0crwdne9601:0", + "available": "crwdns9603:0{name}crwdne9603:0" + }, + "notification": { + "success": { + "title": "crwdns9605:0crwdne9605:0", + "message": "crwdns9607:0{name}crwdne9607:0" + }, + "error": { + "title": "crwdns9609:0crwdne9609:0", + "message": "crwdns9611:0{name}crwdne9611:0" + } + } + }, "duplicate": { "title": "crwdns2516:0crwdne2516:0", "message": "crwdns2518:0{name}crwdne2518:0", @@ -4089,14 +5817,19 @@ } }, "edit": { + "enter": "crwdns9613:0crwdne9613:0", + "save": "crwdns9615:0crwdne9615:0", + "exit": "crwdns9617:0crwdne9617:0", "notification": { "success": { - "title": "crwdns1370:0crwdne1370:0", "message": "crwdns1372:0crwdne1372:0" }, "error": { - "title": "crwdns1374:0crwdne1374:0", "message": "crwdns1376:0crwdne1376:0" + }, + "loadError": { + "title": "crwdns9619:0crwdne9619:0", + "message": "crwdns9621:0crwdne9621:0" } }, "confirmLeave": { @@ -4104,62 +5837,6 @@ "message": "crwdns1380:0crwdne1380:0" } }, - "oldImport": { - "label": "crwdns1382:0crwdne1382:0", - "notification": { - "success": { - "title": "crwdns1384:0crwdne1384:0", - "message": "crwdns1386:0crwdne1386:0" - }, - "error": { - "title": "crwdns1388:0crwdne1388:0", - "message": "crwdns1390:0crwdne1390:0" - } - }, - "form": { - "file": { - "label": "crwdns1392:0crwdne1392:0", - "invalidError": "crwdns1394:0crwdne1394:0" - }, - "apps": { - "label": "crwdns1396:0crwdne1396:0", - "avoidDuplicates": { - "label": "crwdns1398:0crwdne1398:0", - "description": "crwdns1400:0crwdne1400:0" - }, - "onlyImportApps": { - "label": "crwdns1402:0crwdne1402:0", - "description": "crwdns1404:0crwdne1404:0" - } - }, - "name": { - "label": "crwdns1406:0crwdne1406:0" - }, - "screenSize": { - "label": "crwdns1408:0crwdne1408:0", - "description": "crwdns2368:0crwdne2368:0", - "option": { - "sm": "crwdns1410:0crwdne1410:0", - "md": "crwdns1412:0crwdne1412:0", - "lg": "crwdns1414:0crwdne1414:0" - } - }, - "sidebarBehavior": { - "label": "crwdns1416:0crwdne1416:0", - "description": "crwdns1418:0crwdne1418:0", - "option": { - "lastSection": { - "label": "crwdns1420:0crwdne1420:0", - "description": "crwdns1422:0crwdne1422:0" - }, - "removeItems": { - "label": "crwdns1424:0crwdne1424:0", - "description": "crwdns1426:0crwdne1426:0" - } - } - } - } - }, "quickCreateApp": { "modal": { "title": "crwdns2810:0crwdne2810:0", @@ -4167,6 +5844,12 @@ } } }, + "landmark": { + "canvas": "crwdns9623:0crwdne9623:0", + "leftRail": "crwdns9625:0crwdne9625:0", + "rightRail": "crwdns9627:0crwdne9627:0", + "items": "crwdns9629:0crwdne9629:0" + }, "field": { "pageTitle": { "label": "crwdns1428:0crwdne1428:0" @@ -4236,7 +5919,8 @@ } }, "primaryColor": { - "label": "crwdns1476:0crwdne1476:0" + "label": "crwdns1476:0crwdne1476:0", + "locked": "crwdns9631:0crwdne9631:0" }, "secondaryColor": { "label": "crwdns1478:0crwdne1478:0" @@ -4276,9 +5960,6 @@ "xl": "crwdns2804:0crwdne2804:0" } }, - "name": { - "label": "crwdns1492:0crwdne1492:0" - }, "isPublic": { "label": "crwdns1494:0crwdne1494:0", "description": "crwdns1496:0crwdne1496:0" @@ -4298,9 +5979,44 @@ "title": "crwdns1506:0crwdne1506:0", "responsive": { "title": "crwdns2819:0crwdne2819:0", + "description": "crwdns9633:0crwdne9633:0", "action": { "add": "crwdns2821:0crwdne2821:0" } + }, + "role": { + "mobile": "crwdns9635:0crwdne9635:0", + "base": "crwdns9637:0crwdne9637:0", + "custom": "crwdns9639:0crwdne9639:0" + }, + "custom": { + "defaultName": "crwdns9641:0crwdne9641:0" + }, + "mobile": { + "breakpointDescription": "crwdns9643:0crwdne9643:0" + }, + "preview": { + "columns": "crwdns9645:0crwdne9645:0", + "empty": "crwdns9647:0crwdne9647:0", + "dynamicSection": "crwdns9649:0crwdne9649:0", + "editorWidthLabel": "crwdns9651:0{layoutName}crwdnd9651:0{width}crwdne9651:0" + }, + "reset": { + "action": "crwdns9653:0crwdne9653:0", + "confirm": { + "title": "crwdns9655:0{layoutName}crwdne9655:0", + "message": "crwdns9657:0crwdne9657:0" + } + }, + "edit": { + "action": "crwdns9659:0crwdne9659:0", + "saveAndEdit": "crwdns9661:0crwdne9661:0", + "save": "crwdns9663:0crwdne9663:0", + "cancel": { + "action": "crwdns9665:0crwdne9665:0", + "title": "crwdns9667:0crwdne9667:0", + "message": "crwdns9669:0crwdne9669:0" + } } }, "background": { @@ -4337,10 +6053,7 @@ "rename": { "label": "crwdns1524:0crwdne1524:0", "description": "crwdns1526:0crwdne1526:0", - "button": "crwdns1528:0crwdne1528:0", - "modal": { - "title": "crwdns1530:0crwdne1530:0" - } + "button": "crwdns1528:0crwdne1528:0" }, "visibility": { "label": "crwdns1532:0crwdne1532:0", @@ -4364,9 +6077,7 @@ } }, "delete": { - "label": "crwdns1550:0crwdne1550:0", "description": "crwdns1552:0crwdne1552:0", - "button": "crwdns1554:0crwdne1554:0", "confirm": { "title": "crwdns1556:0crwdne1556:0", "description": "crwdns1558:0crwdne1558:0" @@ -4411,28 +6122,41 @@ }, "layout": { "field": { - "name": { - "label": "crwdns2823:0crwdne2823:0" - }, "columnCount": { "label": "crwdns2825:0crwdne2825:0" }, "breakpoint": { "label": "crwdns2827:0crwdne2827:0", "description": "crwdns2829:0crwdne2829:0" + }, + "gutters": { + "label": "crwdns9671:0crwdne9671:0", + "description": "crwdns9673:0crwdne9673:0", + "left": { + "label": "crwdns9675:0crwdne9675:0", + "description": "crwdns9677:0crwdne9677:0", + "thumbLabel": "crwdns9679:0crwdne9679:0" + }, + "right": { + "label": "crwdns9681:0crwdne9681:0", + "description": "crwdns9683:0crwdne9683:0", + "thumbLabel": "crwdns9685:0crwdne9685:0" + }, + "width": { + "label": "crwdns9687:0crwdne9687:0" + }, + "preview": { + "label": "crwdns9689:0crwdne9689:0" + } } } }, "management": { "metaTitle": "crwdns1560:0crwdne1560:0", - "title": { - "morning": "crwdns1562:0{username}crwdne1562:0", - "afternoon": "crwdns1564:0{username}crwdne1564:0", - "evening": "crwdns1566:0{username}crwdne1566:0" - }, "notFound": { "title": "crwdns1568:0crwdne1568:0", - "text": "crwdns1570:0crwdne1570:0" + "text": "crwdns1570:0crwdne1570:0", + "backToHome": "crwdns9691:0crwdne9691:0" }, "error": { "title": "crwdns5697:0crwdne5697:0", @@ -4441,20 +6165,10 @@ }, "navbar": { "items": { - "workshop": "Workshop", "home": "crwdns1572:0crwdne1572:0", - "boards": "crwdns1574:0crwdne1574:0", - "apps": "crwdns1576:0crwdne1576:0", - "integrations": "crwdns1578:0crwdne1578:0", - "customWidgets": "crwdns5625:0crwdne5625:0", - "searchEngies": "crwdns1580:0crwdne1580:0", - "medias": "crwdns1582:0crwdne1582:0", "users": { - "label": "crwdns1584:0crwdne1584:0", "items": { - "manage": "crwdns1586:0crwdne1586:0", - "invites": "crwdns1588:0crwdne1588:0", - "groups": "crwdns1590:0crwdne1590:0" + "manage": "crwdns1586:0crwdne1586:0" } }, "tools": { @@ -4462,10 +6176,7 @@ "items": { "docker": "crwdns1594:0crwdne1594:0", "kubernetes": "crwdns2859:0crwdne2859:0", - "logs": "crwdns1596:0crwdne1596:0", "api": "crwdns5171:0crwdne5171:0", - "certificates": "crwdns2594:0crwdne2594:0", - "tasks": "crwdns1600:0crwdne1600:0", "backup": "crwdns4607:0crwdne4607:0" } }, @@ -4479,21 +6190,12 @@ "sourceCode": "crwdns1612:0crwdne1612:0" } }, - "about": "crwdns1614:0crwdne1614:0" + "about": "crwdns1614:0crwdne1614:0", + "assistant": "crwdns9693:0crwdne9693:0" } }, "page": { "home": { - "statistic": { - "board": "crwdns1616:0crwdne1616:0", - "user": "crwdns1618:0crwdne1618:0", - "invite": "crwdns1620:0crwdne1620:0", - "integration": "crwdns1622:0crwdne1622:0", - "app": "crwdns1624:0crwdne1624:0", - "group": "crwdns1626:0crwdne1626:0", - "searchEngine": "crwdns3778:0crwdne3778:0", - "media": "crwdns3780:0crwdne3780:0" - }, "statisticLabel": { "boards": "crwdns1628:0crwdne1628:0", "resources": "crwdns1630:0crwdne1630:0", @@ -4531,13 +6233,8 @@ "tooltip": "crwdns2580:0crwdne2580:0" } }, - "duplicate": { - "label": "crwdns2528:0crwdne2528:0" - }, "delete": { - "label": "crwdns1650:0crwdne1650:0", "confirm": { - "title": "crwdns1652:0crwdne1652:0", "description": "crwdns1654:0{name}crwdne1654:0" } } @@ -4546,28 +6243,82 @@ "public": "crwdns1656:0crwdne1656:0", "private": "crwdns1658:0crwdne1658:0" }, - "noResults": { - "title": "crwdns4253:0crwdne4253:0" + "preview": { + "label": "crwdns9695:0{name}crwdnd9695:0{count}crwdne9695:0", + "unknownCreator": "crwdns9697:0crwdne9697:0" }, - "modal": { - "createBoard": { - "field": { - "name": { - "label": "crwdns1660:0crwdne1660:0" - } - } - } + "noResults": { + "title": "crwdns4253:0crwdne4253:0", + "description": "crwdns9699:0crwdne9699:0" } }, "media": { "includeFromAllUsers": "crwdns1662:0crwdne1662:0" }, "user": { - "back": "crwdns1664:0crwdne1664:0", "fieldsDisabledExternalProvider": "crwdns1666:0crwdne1666:0", "setting": { "general": { "title": "crwdns1668:0crwdne1668:0", + "header": { + "title": "crwdns9701:0crwdne9701:0", + "badge": "crwdns9703:0crwdne9703:0", + "description": "crwdns9705:0crwdne9705:0", + "device": { + "desktop": "crwdns9707:0crwdne9707:0", + "mobile": "crwdns9709:0crwdne9709:0" + }, + "zones": { + "left": "crwdns9711:0crwdne9711:0", + "center": "crwdns9713:0crwdne9713:0", + "right": "crwdns9715:0crwdne9715:0" + }, + "action": { + "hide": "crwdns9717:0crwdne9717:0", + "show": "crwdns9719:0crwdne9719:0", + "configure": "crwdns9721:0{item}crwdne9721:0", + "remove": "crwdns9723:0{item}crwdne9723:0", + "dropIntoZone": "crwdns9725:0{zone}crwdne9725:0" + }, + "preview": { + "board": "crwdns9727:0{name}crwdne9727:0", + "empty": "crwdns9729:0crwdne9729:0" + }, + "available": { + "title": "crwdns9731:0crwdne9731:0", + "description": "crwdns9733:0crwdne9733:0", + "requiredAlways": "crwdns9735:0crwdne9735:0", + "allAdded": "crwdns9737:0crwdne9737:0", + "add": "crwdns9739:0{item}crwdne9739:0", + "boardShortcut": "crwdns9741:0crwdne9741:0", + "chooseBoard": "crwdns9743:0crwdne9743:0" + }, + "configuration": { + "description": "crwdns9745:0crwdne9745:0", + "searchDisplay": { + "input": "crwdns9747:0crwdne9747:0", + "icon": "crwdns9749:0crwdne9749:0" + }, + "logoDisplay": { + "logo": "crwdns9751:0crwdne9751:0", + "logoAndText": "crwdns9753:0crwdne9753:0" + } + }, + "items": { + "logo": "crwdns9755:0crwdne9755:0", + "search": "crwdns9757:0crwdne9757:0", + "home": "crwdns9759:0crwdne9759:0", + "boardSwitcher": "crwdns9761:0crwdne9761:0", + "assistant": "crwdns9763:0crwdne9763:0", + "docker": "crwdns9765:0crwdne9765:0", + "boardEdit": "crwdns9767:0crwdne9767:0", + "boardSettings": "crwdns9769:0crwdne9769:0", + "settings": "crwdns9771:0crwdne9771:0", + "themeToggle": "crwdns9773:0crwdne9773:0", + "user": "crwdns9775:0crwdne9775:0", + "boardUnavailable": "crwdns9777:0crwdne9777:0" + } + }, "item": { "language": "crwdns1670:0crwdne1670:0", "board": { @@ -4601,14 +6352,10 @@ }, "security": { "title": "crwdns1678:0crwdne1678:0" - }, - "board": { - "title": "crwdns1680:0crwdne1680:0" } }, "list": { - "metaTitle": "crwdns1682:0crwdne1682:0", - "title": "crwdns1684:0crwdne1684:0" + "metaTitle": "crwdns1682:0crwdne1682:0" }, "edit": { "metaTitle": "crwdns1686:0{username}crwdne1686:0" @@ -4662,9 +6409,6 @@ } }, "field": { - "id": { - "label": "crwdns1730:0crwdne1730:0" - }, "creator": { "label": "crwdns1732:0crwdne1732:0" }, @@ -4688,10 +6432,7 @@ }, "setting": { "title": "crwdns2786:0crwdne2786:0", - "alert": "crwdns2788:0crwdne2788:0", - "board": { - "title": "crwdns2790:0crwdne2790:0" - } + "alert": "crwdns2788:0crwdne2788:0" }, "members": { "title": "crwdns1748:0crwdne1748:0", @@ -4699,10 +6440,7 @@ "notFound": "crwdns1752:0crwdne1752:0" }, "permissions": { - "title": "crwdns1754:0crwdne1754:0", - "form": { - "unsavedChanges": "crwdns1756:0crwdne1756:0" - } + "title": "crwdns1754:0crwdne1754:0" } } }, @@ -4711,12 +6449,10 @@ "notification": { "success": { "message": "crwdns1760:0crwdne1760:0" - }, - "error": { - "message": "crwdns1762:0crwdne1762:0" } }, "section": { + "analyticsDocumentation": "crwdns9779:0crwdne9779:0", "analytics": { "title": "crwdns1764:0crwdne1764:0", "general": { @@ -4745,7 +6481,6 @@ } }, "board": { - "title": "crwdns1802:0crwdne1802:0", "homeBoard": { "label": "crwdns1804:0crwdne1804:0", "mobileLabel": "crwdns2588:0crwdne2588:0", @@ -4764,7 +6499,6 @@ } }, "user": { - "title": "crwdns3822:0crwdne3822:0", "enableGravatar": { "label": "crwdns3824:0crwdne3824:0", "description": "crwdns3826:0crwdne3826:0" @@ -4780,12 +6514,86 @@ "appearance": { "title": "crwdns1808:0crwdne1808:0", "defaultColorScheme": { - "label": "crwdns1810:0crwdne1810:0", + "label": "crwdns1810:0crwdne1810:0" + } + }, + "branding": { + "title": "crwdns9781:0crwdne9781:0", + "groups": { + "identity": "crwdns9783:0crwdne9783:0", + "appearance": "crwdns9785:0crwdne9785:0", + "customCss": "crwdns9787:0crwdne9787:0", + "authentication": "crwdns9789:0crwdne9789:0" + }, + "identity": { + "description": "crwdns9791:0crwdne9791:0" + }, + "appName": { + "label": "crwdns9793:0crwdne9793:0" + }, + "greeting": { + "label": "crwdns9795:0crwdne9795:0" + }, + "logo": { + "label": "crwdns9797:0crwdne9797:0", + "placeholder": "crwdns9799:0crwdne9799:0" + }, + "favicon": { + "label": "crwdns9801:0crwdne9801:0", + "placeholder": "crwdns9803:0crwdne9803:0" + }, + "primaryColor": { + "label": "crwdns9805:0crwdne9805:0" + }, + "secondaryColor": { + "label": "crwdns9807:0crwdne9807:0" + }, + "lockPrimaryColor": { + "label": "crwdns9809:0crwdne9809:0", + "description": "crwdns9811:0crwdne9811:0" + }, + "signInBackground": { + "label": "crwdns9813:0crwdne9813:0", + "placeholder": "crwdns9815:0crwdne9815:0" + }, + "signInOverlay": { + "label": "crwdns9817:0crwdne9817:0" + }, + "defaultRadius": { + "label": "crwdns9819:0crwdne9819:0", "options": { - "auto": "crwdns4227:0crwdne4227:0", - "light": "crwdns1812:0crwdne1812:0", - "dark": "crwdns1814:0crwdne1814:0" + "xs": "crwdns9821:0crwdne9821:0", + "sm": "crwdns9823:0crwdne9823:0", + "md": "crwdns9825:0crwdne9825:0", + "lg": "crwdns9827:0crwdne9827:0", + "xl": "crwdns9829:0crwdne9829:0" } + }, + "customCss": { + "label": "crwdns9831:0crwdne9831:0", + "description": "crwdns9833:0crwdne9833:0" + }, + "authVisibility": { + "description": "crwdns9835:0crwdne9835:0", + "appName": "crwdns9837:0crwdne9837:0", + "logo": "crwdns9839:0crwdne9839:0", + "greeting": "crwdns9841:0crwdne9841:0" + }, + "summary": { + "title": "crwdns9843:0crwdne9843:0", + "cornerStyle": "crwdns9845:0crwdne9845:0", + "palette": "crwdns9847:0crwdne9847:0", + "backgroundConfigured": "crwdns9849:0{overlay}crwdne9849:0", + "backgroundDefault": "crwdns9851:0crwdne9851:0", + "greetingConfigured": "crwdns9853:0crwdne9853:0", + "greetingDefault": "crwdns9855:0crwdne9855:0", + "boardColorLocked": "crwdns9857:0crwdne9857:0", + "boardColorFlexible": "crwdns9859:0crwdne9859:0", + "appName": "crwdns9861:0crwdne9861:0", + "logo": "crwdns9863:0crwdne9863:0", + "greeting": "crwdns9865:0crwdne9865:0", + "on": "crwdns9867:0crwdne9867:0", + "off": "crwdns9869:0crwdne9869:0" } }, "culture": { @@ -4793,12 +6601,177 @@ "defaultLocale": { "label": "crwdns1818:0crwdne1818:0" } + }, + "assistant": { + "loading": "crwdns9871:0crwdne9871:0", + "title": "crwdns9873:0crwdne9873:0", + "description": "crwdns9875:0crwdne9875:0", + "security": { + "description": "crwdns9877:0crwdne9877:0" + }, + "overview": { + "connectionReady": "crwdns9879:0crwdne9879:0", + "unsavedChanges": "crwdns9881:0crwdne9881:0", + "setupRequired": "crwdns9883:0crwdne9883:0", + "disabled": "crwdns9885:0crwdne9885:0", + "noModel": "crwdns9887:0crwdne9887:0" + }, + "connection": { + "endpointTitle": "crwdns9889:0crwdne9889:0", + "description": "crwdns9891:0crwdne9891:0", + "save": "crwdns9893:0crwdne9893:0" + }, + "credentials": { + "title": "crwdns9895:0crwdne9895:0", + "description": "crwdns9897:0crwdne9897:0", + "required": "crwdns9899:0crwdne9899:0", + "optional": "crwdns9901:0crwdne9901:0", + "workshop": "crwdns9903:0crwdne9903:0" + }, + "provider": { + "title": "crwdns9905:0crwdne9905:0", + "groups": { + "free": "crwdns9907:0crwdne9907:0", + "hosted": "crwdns9909:0crwdne9909:0", + "local": "crwdns9911:0crwdne9911:0", + "custom": "crwdns9913:0crwdne9913:0" + }, + "options": { + "homarr": { + "description": "crwdns9915:0crwdne9915:0" + }, + "openrouter": { + "description": "crwdns9917:0crwdne9917:0" + }, + "openai": { + "description": "crwdns9919:0crwdne9919:0" + }, + "anthropic": { + "description": "crwdns9921:0crwdne9921:0" + }, + "google-gemini": { + "description": "crwdns9923:0crwdne9923:0" + }, + "xai": { + "description": "crwdns9925:0crwdne9925:0" + }, + "groq": { + "description": "crwdns9927:0crwdne9927:0" + }, + "mistral": { + "description": "crwdns9929:0crwdne9929:0" + }, + "deepseek": { + "description": "crwdns9931:0crwdne9931:0" + }, + "together": { + "description": "crwdns9933:0crwdne9933:0" + }, + "ollama": { + "description": "crwdns9935:0crwdne9935:0" + }, + "lm-studio": { + "description": "crwdns9937:0crwdne9937:0" + }, + "llama-cpp": { + "description": "crwdns9939:0crwdne9939:0" + }, + "custom": { + "label": "crwdns9941:0crwdne9941:0", + "description": "crwdns9943:0crwdne9943:0" + } + }, + "homarrAuth": { + "title": "crwdns9945:0crwdne9945:0", + "description": "crwdns9947:0crwdne9947:0" + } + }, + "baseUrl": { + "title": "crwdns9949:0crwdne9949:0", + "description": "crwdns9951:0crwdne9951:0" + }, + "apiKey": { + "title": "crwdns9953:0crwdne9953:0", + "required": "crwdns9955:0crwdne9955:0", + "optional": "crwdns9957:0crwdne9957:0", + "placeholder": "crwdns9959:0crwdne9959:0", + "savedTitle": "crwdns9961:0crwdne9961:0", + "savedDescription": "crwdns9963:0crwdne9963:0", + "remove": "crwdns9965:0crwdne9965:0", + "removeFlow": { + "title": "crwdns9967:0crwdne9967:0", + "description": "crwdns9969:0crwdne9969:0", + "optionalDescription": "crwdns9971:0crwdne9971:0", + "cancel": "crwdns9973:0crwdne9973:0", + "confirm": "crwdns9975:0crwdne9975:0" + } + }, + "headers": { + "title": "crwdns9977:0crwdne9977:0", + "description": "crwdns9979:0crwdne9979:0", + "add": "crwdns9981:0crwdne9981:0", + "name": "crwdns9983:0crwdne9983:0", + "value": "crwdns9985:0crwdne9985:0", + "valuePlaceholder": "crwdns9987:0crwdne9987:0", + "remove": "crwdns9989:0crwdne9989:0", + "configured": "crwdns9991:0crwdne9991:0", + "empty": "crwdns9993:0crwdne9993:0", + "savedBadge": "crwdns9995:0crwdne9995:0", + "pendingRemoval": "crwdns9997:0crwdne9997:0", + "clear": "crwdns9999:0crwdne9999:0", + "keep": "crwdns10001:0crwdne10001:0" + }, + "model": { + "title": "crwdns10003:0crwdne10003:0", + "description": "crwdns10005:0crwdne10005:0", + "placeholder": "crwdns10007:0crwdne10007:0", + "refresh": "crwdns10009:0crwdne10009:0", + "chooseModel": "crwdns10011:0crwdne10011:0", + "discoveryPath": "crwdns10013:0crwdne10013:0", + "discoveryPathDescription": "crwdns10015:0crwdne10015:0", + "manual": "crwdns10017:0crwdne10017:0", + "manualFallback": "crwdns10019:0crwdne10019:0", + "saveConnectionFirst": "crwdns10021:0crwdne10021:0", + "discovering": "crwdns10023:0crwdne10023:0", + "discovered": "crwdns10025:0count={count}crwdne10025:0", + "discoveryFailed": "crwdns10027:0crwdne10027:0", + "context": "crwdns10029:0{count}crwdne10029:0", + "toolsConfirmed": "crwdns10031:0crwdne10031:0", + "toolsUnknown": "crwdns10033:0crwdne10033:0" + }, + "serverTools": { + "title": "crwdns10035:0crwdne10035:0", + "webSearch": { + "label": "crwdns10037:0crwdne10037:0", + "description": "crwdns10039:0crwdne10039:0", + "proxyDescription": "crwdns10041:0crwdne10041:0", + "limit": "crwdns10043:0crwdne10043:0" + } + }, + "enabled": { + "label": "crwdns10045:0crwdne10045:0", + "description": "crwdns10047:0crwdne10047:0" + }, + "save": "crwdns10049:0crwdne10049:0", + "notification": { + "connectionSaved": { + "title": "crwdns10051:0crwdne10051:0", + "message": "crwdns10053:0crwdne10053:0", + "credentialsCleared": "crwdns10055:0crwdne10055:0" + }, + "saved": { + "title": "crwdns10057:0crwdne10057:0", + "message": "crwdns10059:0crwdne10059:0" + }, + "error": { + "title": "crwdns10061:0crwdne10061:0" + } + } } } }, "tool": { "tasks": { - "title": "crwdns1820:0crwdne1820:0", "status": { "idle": "crwdns1822:0crwdne1822:0", "running": "crwdns1824:0crwdne1824:0", @@ -4816,6 +6789,11 @@ "label": "crwdns1834:0crwdne1834:0" } }, + "action": { + "run": "crwdns10063:0{name}crwdne10063:0", + "enable": "crwdns10065:0{name}crwdne10065:0", + "disable": "crwdns10067:0{name}crwdne10067:0" + }, "interval": { "seconds": "crwdns3486:0interval={interval}crwdne3486:0", "minutes": "crwdns3488:0interval={interval}crwdne3488:0", @@ -4831,13 +6809,7 @@ } } }, - "settings": { - "title": "crwdns3496:0{jobName}crwdne3496:0" - }, "field": { - "name": { - "label": "crwdns3628:0crwdne3628:0" - }, "interval": { "label": "crwdns3498:0crwdne3498:0" }, @@ -4851,11 +6823,6 @@ "table": { "search": "crwdns3634:0{count}crwdne3634:0" }, - "action": { - "refresh": { - "label": "crwdns3636:0crwdne3636:0" - } - }, "refresh": { "success": { "message": "crwdns3638:0crwdne3638:0" @@ -4889,7 +6856,6 @@ } }, "api": { - "title": "crwdns1856:0crwdne1856:0", "modal": { "createApiToken": { "title": "crwdns1858:0crwdne1858:0", @@ -4915,7 +6881,6 @@ }, "table": { "header": { - "id": "crwdns1872:0crwdne1872:0", "createdBy": "crwdns1874:0crwdne1874:0", "actions": "crwdns2740:0crwdne2740:0" } @@ -4971,43 +6936,12 @@ "availableTools": { "title": "crwdns5233:0crwdne5233:0", "description": "crwdns5235:0{count}crwdne5235:0", - "columnType": "crwdns5237:0crwdne5237:0", - "columnName": "crwdns5239:0crwdne5239:0", - "columnDescription": "crwdns5241:0crwdne5241:0" - }, - "troubleshooting": { - "title": "crwdns5243:0crwdne5243:0", - "missingHeader": { - "title": "crwdns5245:0crwdne5245:0", - "description": "crwdns5247:0{header}crwdnd5247:0{section}crwdne5247:0" - }, - "invalidFormat": { - "title": "crwdns5249:0crwdne5249:0", - "description": "crwdns5251:0crwdne5251:0" - }, - "invalidKey": { - "title": "crwdns5253:0crwdne5253:0", - "description": "crwdns5255:0crwdne5255:0" - }, - "connectionRefused": { - "title": "crwdns5257:0crwdne5257:0", - "description": "crwdns5259:0{localhost}crwdne5259:0" - }, - "toolsNotAppearing": { - "title": "crwdns5261:0crwdne5261:0", - "description": "crwdns5263:0crwdne5263:0" + "filteredDescription": "crwdns10069:0{count}crwdne10069:0", + "search": "crwdns10071:0crwdne10071:0", + "noResults": { + "title": "crwdns10073:0crwdne10073:0", + "description": "crwdns10075:0{search}crwdne10075:0" } - }, - "copy": "crwdns5265:0crwdne5265:0", - "oneClick": { - "title": "crwdns5267:0crwdne5267:0", - "subtitle": "crwdns5269:0crwdne5269:0", - "vsCode": "crwdns5271:0crwdne5271:0", - "cursor": "crwdns5273:0crwdne5273:0", - "copyUrl": "crwdns5275:0crwdne5275:0", - "copied": "crwdns5277:0crwdne5277:0", - "copyHint": "crwdns5279:0crwdne5279:0", - "manualConfig": "crwdns5281:0crwdne5281:0" } } } @@ -5024,79 +6958,35 @@ "title": "crwdns4621:0crwdne4621:0", "warningTitle": "crwdns4623:0crwdne4623:0", "warningBody": "crwdns4625:0crwdne4625:0", - "typePrompt": "crwdns4627:0{phrase}crwdne4627:0", - "submit": "crwdns4629:0crwdne4629:0", - "cancel": "crwdns4631:0crwdne4631:0" + "submit": "crwdns4629:0crwdne4629:0" } }, "import": { "title": "crwdns4633:0crwdne4633:0", - "description": "crwdns4635:0crwdne4635:0", - "warning": "crwdns4637:0crwdne4637:0", - "dropzone": { - "title": "crwdns4639:0crwdne4639:0", - "description": "crwdns4641:0crwdne4641:0" - }, - "changeFile": "crwdns4643:0crwdne4643:0", - "button": "crwdns4645:0crwdne4645:0", - "success": { - "title": "crwdns4647:0crwdne4647:0", - "message": "crwdns4649:0crwdne4649:0" - }, - "error": "crwdns4651:0crwdne4651:0" - }, - "preview": { - "title": "crwdns4653:0crwdne4653:0", - "exported": "crwdns4655:0{date}crwdne4655:0", - "loading": "crwdns4657:0crwdne4657:0", - "errorTitle": "crwdns4659:0crwdne4659:0", - "entity": "crwdns4661:0crwdne4661:0", - "count": "crwdns4663:0crwdne4663:0", - "boards": "crwdns4665:0crwdne4665:0", - "entities": { - "board": "crwdns4667:0crwdne4667:0", - "user": "crwdns4669:0crwdne4669:0", - "app": "crwdns4671:0crwdne4671:0", - "integration": "crwdns4673:0crwdne4673:0", - "item": "crwdns4675:0crwdne4675:0", - "media": "crwdns4677:0crwdne4677:0", - "search_engine": "crwdns4679:0crwdne4679:0" - }, - "analyzeError": "crwdns4681:0crwdne4681:0", - "invalidMissingMetadata": "crwdns4683:0crwdne4683:0", - "invalidMissingDb": "crwdns4685:0crwdne4685:0" + "description": "crwdns4635:0crwdne4635:0" }, "restore": { "dropzone": { "title": "crwdns4687:0crwdne4687:0", - "description": "crwdns4689:0crwdne4689:0" + "description": "crwdns10077:0{maxSize}crwdne10077:0" }, "analyzing": "crwdns4691:0crwdne4691:0", "changeFile": "crwdns4693:0crwdne4693:0", "continueToRestore": "crwdns4695:0crwdne4695:0", - "tryAgain": "crwdns4697:0crwdne4697:0", "analysisError": "crwdns4699:0crwdne4699:0", "preview": { "title": "crwdns4701:0crwdne4701:0", "exported": "crwdns4703:0{date}crwdne4703:0", "entity": "crwdns4705:0crwdne4705:0", "count": "crwdns4707:0crwdne4707:0", - "boards": "crwdns4709:0crwdne4709:0", "entities": { - "board": "crwdns4711:0crwdne4711:0", - "user": "crwdns4713:0crwdne4713:0", - "app": "crwdns4715:0crwdne4715:0", - "integration": "crwdns4717:0crwdne4717:0", - "item": "crwdns4719:0crwdne4719:0", - "media": "crwdns4721:0crwdne4721:0", - "search_engine": "crwdns4723:0crwdne4723:0" + "item": "crwdns4719:0crwdne4719:0" }, "migrationsApplied": "crwdns4725:0{count}crwdne4725:0", "migrationsAppliedPlural": "crwdns4727:0{count}crwdne4727:0", "migrationsOlderVersion": "crwdns4729:0{count}crwdne4729:0", "migrationsOlderVersionPlural": "crwdns4731:0{count}crwdne4731:0", "migrationsUpToDate": "crwdns4733:0{count}crwdne4733:0", - "upToDate": "crwdns4735:0crwdne4735:0", "migrationsPending": "crwdns4737:0{count}crwdne4737:0" }, "migration": { @@ -5107,21 +6997,21 @@ "title": "crwdns4743:0crwdne4743:0", "warningTitle": "crwdns4745:0crwdne4745:0", "warningBody": "crwdns4747:0crwdne4747:0", - "typePrompt": "crwdns4749:0{phrase}crwdne4749:0", - "cancel": "crwdns4751:0crwdne4751:0", "submit": "crwdns4753:0crwdne4753:0" }, "progress": { "title": "crwdns4755:0crwdne4755:0", - "extracting": "crwdns4757:0crwdne4757:0", - "migrating": "crwdns4759:0crwdne4759:0", - "encrypting": "crwdns4761:0crwdne4761:0", - "swapping": "crwdns4763:0crwdne4763:0", - "restarting": "crwdns4765:0crwdne4765:0" + "restarting": "crwdns4765:0crwdne4765:0", + "relogin": "crwdns10079:0crwdne10079:0" }, "complete": { - "title": "crwdns4767:0crwdne4767:0", - "message": "crwdns4769:0crwdne4769:0" + "title": "crwdns10081:0crwdne10081:0", + "message": "crwdns10083:0crwdne10083:0", + "button": "crwdns10085:0crwdne10085:0" + }, + "timeout": { + "title": "crwdns10087:0crwdne10087:0", + "message": "crwdns10089:0crwdne10089:0" }, "failed": { "title": "crwdns4771:0crwdne4771:0" @@ -5129,6 +7019,9 @@ "invalidMissingMetadata": "crwdns4773:0crwdne4773:0", "invalidMissingDb": "crwdns4775:0crwdne4775:0", "analyzeError": "crwdns4777:0crwdne4777:0" + }, + "confirm": { + "typePrompt": "crwdns10091:0{phrase}crwdne10091:0" } } }, @@ -5163,7 +7056,11 @@ "toggleBoardEdit": "crwdns3734:0crwdne3734:0", "toggleColorScheme": "crwdns3736:0crwdne3736:0", "saveNotebook": "crwdns3738:0crwdne3738:0", - "openSpotlight": "crwdns3740:0crwdne3740:0" + "openSpotlight": "crwdns3740:0crwdne3740:0", + "openSpotlightApps": "crwdns10093:0crwdne10093:0", + "openSpotlightAssistant": "crwdns10095:0crwdne10095:0", + "openSpotlightPreferences": "crwdns10097:0crwdne10097:0", + "openAssistant": "crwdns10099:0crwdne10099:0" }, "note": "crwdns3742:0crwdne3742:0" } @@ -5173,6 +7070,63 @@ }, "docker": { "title": "crwdns1892:0crwdne1892:0", + "reconciliation": { + "title": "crwdns10101:0crwdne10101:0", + "suggestions": "crwdns10103:0count={count}crwdne10103:0", + "attention": "crwdns10105:0{count}crwdne10105:0", + "endpointUnavailable": "crwdns10107:0{names}crwdne10107:0", + "empty": "crwdns10109:0crwdne10109:0", + "emptyFilter": "crwdns10111:0crwdne10111:0", + "ambiguous": "crwdns10113:0crwdne10113:0", + "filter": { + "attention": "crwdns10115:0crwdne10115:0", + "represented": "crwdns10117:0crwdne10117:0", + "all": "crwdns10119:0crwdne10119:0" + }, + "state": { + "newRecognized": "crwdns10121:0crwdne10121:0", + "newApp": "crwdns10123:0crwdne10123:0", + "represented": "crwdns10125:0crwdne10125:0", + "linked": "crwdns10127:0crwdne10127:0", + "moved": "crwdns10129:0crwdne10129:0" + }, + "url": { + "manual": "crwdns10131:0crwdne10131:0" + }, + "health": { + "layer": { + "docker": "crwdns10133:0crwdne10133:0", + "integrationConfiguration": "crwdns10135:0crwdne10135:0", + "authentication": "crwdns10137:0crwdne10137:0", + "apiRequest": "crwdns10139:0crwdne10139:0", + "appRepresentation": "crwdns10141:0crwdne10141:0", + "widgetConfiguration": "crwdns10143:0crwdne10143:0", + "widgetQuery": "crwdns10145:0crwdne10145:0" + }, + "status": { + "available": "crwdns10147:0crwdne10147:0", + "configured": "crwdns10149:0crwdne10149:0", + "linked": "crwdns10151:0crwdne10151:0", + "missing": "crwdns10153:0crwdne10153:0", + "changed": "crwdns10155:0crwdne10155:0", + "unused": "crwdns10157:0crwdne10157:0", + "notApplicable": "crwdns10159:0crwdne10159:0", + "notObserved": "crwdns10161:0crwdne10161:0" + } + }, + "action": { + "review": "crwdns10163:0crwdne10163:0", + "dismiss": "crwdns10165:0crwdne10165:0", + "restoreDismissed": "crwdns10167:0{count}crwdne10167:0", + "setupIntegration": "crwdns10169:0crwdne10169:0", + "reviewIntegration": "crwdns10171:0crwdne10171:0", + "viewRepresentation": "crwdns10173:0crwdne10173:0" + }, + "loadError": { + "title": "crwdns10175:0crwdne10175:0", + "message": "crwdns10177:0crwdne10177:0" + } + }, "table": { "updated": "crwdns1894:0{when}crwdne1894:0", "refresh": { @@ -5185,9 +7139,6 @@ "totalMemory": "crwdns5671:0{memory}crwdne5671:0" }, "field": { - "name": { - "label": "crwdns1900:0crwdne1900:0" - }, "state": { "label": "crwdns1902:0crwdne1902:0", "option": { @@ -5201,9 +7152,6 @@ } }, "stats": { - "cpu": { - "label": "crwdns3436:0crwdne3436:0" - }, "memory": { "label": "crwdns3438:0crwdne3438:0" } @@ -5266,8 +7214,11 @@ } }, "remove": { - "label": "crwdns1952:0crwdne1952:0", "confirm": "crwdns6173:0crwdne6173:0", + "confirmation": { + "title": "crwdns10179:0count={count}crwdne10179:0", + "message": "crwdns10181:0count={count}crwdnd10181:0names={names}crwdnd10181:0names={names}crwdne10181:0" + }, "notification": { "success": { "title": "crwdns1954:0crwdne1954:0", @@ -5279,8 +7230,13 @@ } } }, + "result": { + "failure": { + "title": "crwdns10183:0crwdne10183:0", + "message": "crwdns10185:0total={total}crwdnd10185:0failed={failed}crwdnd10185:0names={names}crwdnd10185:0failed={failed}crwdnd10185:0names={names}crwdne10185:0" + } + }, "refresh": { - "label": "crwdns1962:0crwdne1962:0", "notification": { "success": { "title": "crwdns1964:0crwdne1964:0", @@ -5311,18 +7267,33 @@ }, "error": { "internalServerError": "crwdns2262:0crwdne2262:0", + "endpointUnavailable": "crwdns10187:0count={count}crwdnd10187:0names={names}crwdnd10187:0names={names}crwdne10187:0", "noColumns": "crwdns5707:0crwdne5707:0" } }, "kubernetes": { + "context": { + "label": "crwdns10189:0crwdne10189:0", + "loadError": { + "title": "crwdns10191:0crwdne10191:0", + "message": "crwdns10193:0crwdne10193:0" + }, + "status": { + "available": "crwdns10195:0crwdne10195:0", + "degraded": "crwdns10197:0crwdne10197:0", + "unavailable": "crwdns10199:0crwdne10199:0" + }, + "unavailable": "crwdns10201:0crwdne10201:0", + "metricsUnavailable": "crwdns10203:0crwdne10203:0" + }, "cluster": { "title": "crwdns2863:0crwdne2863:0", "label": "crwdns2865:0crwdne2865:0", "providers": "crwdns2867:0crwdne2867:0", "version": "crwdns2869:0crwdne2869:0", - "architecture": "crwdns2871:0crwdne2871:0", "capacity": { "title": "crwdns2873:0crwdne2873:0", + "metricsUnavailable": "crwdns10205:0crwdne10205:0", "resource": { "reserved": "crwdns2875:0crwdne2875:0", "used": "crwdns2877:0crwdne2877:0" @@ -5341,38 +7312,10 @@ } }, "nodes": { - "label": "crwdns2897:0crwdne2897:0", "field": { - "name": { - "label": "crwdns2899:0crwdne2899:0" - }, - "state": { - "label": "crwdns2901:0crwdne2901:0", - "option": { - "ready": "crwdns2903:0crwdne2903:0", - "NotReady": "crwdns2905:0crwdne2905:0" - } - }, - "cpu": { - "label": "crwdns2907:0crwdne2907:0" - }, - "memory": { - "label": "crwdns2909:0crwdne2909:0" - }, - "pods": { - "label": "crwdns2911:0crwdne2911:0" - }, - "operatingSystem": { - "label": "crwdns2913:0crwdne2913:0" - }, - "architecture": { - "label": "crwdns2915:0crwdne2915:0" - }, + "metricsUnavailable": "crwdns10207:0crwdne10207:0", "kubernetesVersion": { "label": "crwdns2917:0crwdne2917:0" - }, - "creationTimestamp": { - "label": "crwdns2919:0crwdne2919:0" } }, "table": { @@ -5380,43 +7323,17 @@ } }, "namespaces": { - "label": "crwdns2923:0crwdne2923:0", - "field": { - "name": { - "label": "crwdns2925:0crwdne2925:0" - }, - "state": { - "label": "crwdns2927:0crwdne2927:0", - "option": { - "active": "crwdns2929:0crwdne2929:0", - "terminating": "crwdns2931:0crwdne2931:0" - } - }, - "creationTimestamp": { - "label": "crwdns2933:0crwdne2933:0" - } - }, "table": { "search": "crwdns2935:0{count}crwdne2935:0" } }, "ingresses": { - "label": "crwdns2937:0crwdne2937:0", "field": { - "name": { - "label": "crwdns2939:0crwdne2939:0" - }, - "namespace": { - "label": "crwdns2941:0crwdne2941:0" - }, "className": { "label": "crwdns2943:0crwdne2943:0" }, "rulesAndPaths": { "label": "crwdns2945:0crwdne2945:0" - }, - "creationTimestamp": { - "label": "crwdns2947:0crwdne2947:0" } }, "table": { @@ -5424,17 +7341,7 @@ } }, "services": { - "label": "crwdns2951:0crwdne2951:0", "field": { - "name": { - "label": "crwdns2953:0crwdne2953:0" - }, - "namespace": { - "label": "crwdns2955:0crwdne2955:0" - }, - "type": { - "label": "crwdns2957:0crwdne2957:0" - }, "ports": { "label": "crwdns2959:0crwdne2959:0" }, @@ -5443,9 +7350,6 @@ }, "clusterIP": { "label": "crwdns2963:0crwdne2963:0" - }, - "creationTimestamp": { - "label": "crwdns2965:0crwdne2965:0" } }, "table": { @@ -5453,25 +7357,12 @@ } }, "pods": { - "label": "crwdns2969:0crwdne2969:0", "field": { - "name": { - "label": "crwdns2971:0crwdne2971:0" - }, - "namespace": { - "label": "crwdns2973:0crwdne2973:0" - }, "image": { "label": "crwdns2975:0crwdne2975:0" }, "applicationType": { "label": "crwdns2977:0crwdne2977:0" - }, - "status": { - "label": "crwdns2979:0crwdne2979:0" - }, - "creationTimestamp": { - "label": "crwdns2981:0crwdne2981:0" } }, "table": { @@ -5479,51 +7370,17 @@ } }, "secrets": { - "label": "crwdns2985:0crwdne2985:0", - "field": { - "name": { - "label": "crwdns2987:0crwdne2987:0" - }, - "namespace": { - "label": "crwdns2989:0crwdne2989:0" - }, - "type": { - "label": "crwdns2991:0crwdne2991:0" - }, - "creationTimestamp": { - "label": "crwdns2993:0crwdne2993:0" - } - }, "table": { "search": "crwdns2995:0{count}crwdne2995:0" } }, "configmaps": { - "label": "crwdns2997:0crwdne2997:0", - "field": { - "name": { - "label": "crwdns2999:0crwdne2999:0" - }, - "namespace": { - "label": "crwdns3001:0crwdne3001:0" - }, - "creationTimestamp": { - "label": "crwdns3003:0crwdne3003:0" - } - }, "table": { "search": "crwdns3005:0{count}crwdne3005:0" } }, "volumes": { - "label": "crwdns3007:0crwdne3007:0", "field": { - "name": { - "label": "crwdns3009:0crwdne3009:0" - }, - "namespace": { - "label": "crwdns3011:0crwdne3011:0" - }, "accessModes": { "label": "crwdns3013:0crwdne3013:0" }, @@ -5538,12 +7395,6 @@ }, "volumeName": { "label": "crwdns3021:0crwdne3021:0" - }, - "status": { - "label": "crwdns3023:0crwdne3023:0" - }, - "creationTimestamp": { - "label": "crwdns3025:0crwdne3025:0" } }, "table": { @@ -5552,6 +7403,29 @@ }, "error": { "internalServerError": "crwdns3029:0crwdne3029:0" + }, + "field": { + "name": { + "label": "crwdns10209:0crwdne10209:0" + }, + "namespace": { + "label": "crwdns10211:0crwdne10211:0" + }, + "creationTimestamp": { + "label": "crwdns10213:0crwdne10213:0" + }, + "state": { + "label": "crwdns10215:0crwdne10215:0" + }, + "status": { + "label": "crwdns10217:0crwdne10217:0" + }, + "type": { + "label": "crwdns10219:0crwdne10219:0" + }, + "architecture": { + "label": "crwdns10221:0crwdne10221:0" + } } }, "permission": { @@ -5585,83 +7459,27 @@ }, "navigationStructure": { "manage": { - "workshop": { - "label": "Workshop" - }, "label": "crwdns1994:0crwdne1994:0", - "boards": { - "label": "crwdns1996:0crwdne1996:0" - }, - "integrations": { - "label": "crwdns1998:0crwdne1998:0", - "edit": { - "label": "crwdns2000:0crwdne2000:0" - }, - "new": { - "label": "crwdns2002:0crwdne2002:0" - } - }, - "search-engines": { - "label": "crwdns2004:0crwdne2004:0", - "new": { - "label": "crwdns2006:0crwdne2006:0" - }, - "edit": { - "label": "crwdns2008:0crwdne2008:0" - } - }, - "medias": { - "label": "crwdns2010:0crwdne2010:0" - }, - "apps": { - "label": "crwdns2012:0crwdne2012:0", - "new": { - "label": "crwdns2014:0crwdne2014:0" - }, - "edit": { - "label": "crwdns2016:0crwdne2016:0" - } - }, "custom-widgets": { - "label": "crwdns5627:0crwdne5627:0", - "new": { - "label": "crwdns5629:0crwdne5629:0" - }, "edit": { - "label": "crwdns5631:0crwdne5631:0", "flow": { "label": "crwdns5633:0crwdne5633:0" } + }, + "workshop": { + "label": "crwdns10223:0crwdne10223:0" + }, + "publish": { + "label": "crwdns10225:0crwdne10225:0" } }, "users": { - "label": "crwdns2018:0crwdne2018:0", - "create": { - "label": "crwdns2020:0crwdne2020:0" - }, "general": "crwdns2022:0crwdne2022:0", - "security": "crwdns2024:0crwdne2024:0", - "board": "crwdns2026:0crwdne2026:0", - "groups": { - "label": "crwdns2028:0crwdne2028:0" - }, - "invites": { - "label": "crwdns2030:0crwdne2030:0" - } + "security": "crwdns2024:0crwdne2024:0" }, "tools": { "label": "crwdns2032:0crwdne2032:0", - "tasks": { - "label": "crwdns3652:0crwdne3652:0" - }, - "docker": { - "label": "crwdns2034:0crwdne2034:0", - "logs": { - "label": "crwdns4599:0crwdne4599:0" - } - }, "kubernetes": { - "label": "crwdns3031:0crwdne3031:0", "nodes": { "label": "crwdns3033:0crwdne3033:0" }, @@ -5687,11 +7505,7 @@ "label": "crwdns3047:0crwdne3047:0" } }, - "logs": { - "label": "crwdns2036:0crwdne2036:0" - }, "certificates": { - "label": "crwdns2596:0crwdne2596:0", "hostnames": { "label": "crwdns3386:0crwdne3386:0" } @@ -5702,12 +7516,60 @@ }, "about": { "label": "crwdns2040:0crwdne2040:0" + }, + "assistant": { + "label": "crwdns10227:0crwdne10227:0" } } }, "search": { "placeholder": "crwdns2042:0crwdne2042:0", "nothingFound": "crwdns2044:0crwdne2044:0", + "modePicker": { + "search": { + "label": "crwdns10229:0crwdne10229:0", + "placeholder": "crwdns10231:0crwdne10231:0" + }, + "apps": { + "label": "crwdns10233:0crwdne10233:0", + "placeholder": "crwdns10235:0crwdne10235:0" + }, + "command": { + "label": "crwdns10237:0crwdne10237:0", + "placeholder": "crwdns10239:0crwdne10239:0" + }, + "preferences": { + "label": "crwdns10241:0crwdne10241:0", + "placeholder": "crwdns10243:0crwdne10243:0" + }, + "assistant": { + "label": "crwdns10245:0crwdne10245:0", + "placeholder": "crwdns10247:0crwdne10247:0" + }, + "external": { + "label": "crwdns10249:0crwdne10249:0", + "placeholder": "crwdns10251:0crwdne10251:0" + }, + "media": { + "label": "crwdns10253:0crwdne10253:0", + "placeholder": "crwdns10255:0crwdne10255:0", + "fallback": "crwdns10257:0{query}crwdne10257:0" + }, + "userGroup": { + "label": "crwdns10259:0crwdne10259:0", + "placeholder": "crwdns10261:0crwdne10261:0" + }, + "continueWith": "crwdns10263:0crwdne10263:0", + "dialogAriaLabel": "crwdns10265:0{mode}crwdne10265:0", + "navigationLabel": "crwdns10267:0crwdne10267:0", + "modeAriaLabel": "crwdns10269:0{mode}crwdne10269:0", + "resultsAriaLabel": "crwdns10271:0{mode}crwdne10271:0", + "footer": { + "navigate": "crwdns10273:0crwdne10273:0", + "open": "crwdns10275:0crwdne10275:0", + "close": "crwdns10277:0crwdne10277:0" + } + }, "error": { "fetch": "crwdns2046:0crwdne2046:0" }, @@ -5716,7 +7578,6 @@ "help": "crwdns2048:0crwdne2048:0", "group": { "app": { - "title": "crwdns2050:0crwdne2050:0", "children": { "action": { "open": { @@ -5732,7 +7593,6 @@ } }, "board": { - "title": "crwdns2058:0crwdne2058:0", "children": { "action": { "open": { @@ -5752,9 +7612,6 @@ "title": "crwdns2066:0crwdne2066:0" } } - }, - "integration": { - "title": "crwdns2068:0crwdne2068:0" } } }, @@ -5783,9 +7640,6 @@ "newBoard": { "label": "crwdns2082:0crwdne2082:0" }, - "importBoard": { - "label": "crwdns2084:0crwdne2084:0" - }, "newApp": { "label": "crwdns2086:0crwdne2086:0" }, @@ -5855,7 +7709,6 @@ } }, "defaultSearchEngineId": { - "label": "crwdns4339:0crwdne4339:0", "children": { "detail": { "title": "crwdns4341:0crwdne4341:0" @@ -5863,7 +7716,6 @@ } }, "openSearchInNewTab": { - "label": "crwdns4343:0crwdne4343:0", "children": { "detail": { "title": "crwdns4345:0crwdne4345:0" @@ -5871,7 +7723,6 @@ } }, "ddgBangs": { - "label": "crwdns4347:0crwdne4347:0", "children": { "detail": { "title": "crwdns4349:0crwdne4349:0" @@ -5886,6 +7737,13 @@ } } }, + "byteUnitSystem": { + "children": { + "detail": { + "title": "crwdns10279:0crwdne10279:0" + } + } + }, "homeBoardId": { "label": "crwdns4355:0crwdne4355:0", "children": { @@ -5903,7 +7761,6 @@ } }, "pingIconsEnabled": { - "label": "crwdns4363:0crwdne4363:0", "children": { "detail": { "title": "crwdns4365:0crwdne4365:0" @@ -5911,7 +7768,6 @@ } }, "enableRightClickOnWidgets": { - "label": "crwdns6099:0crwdne6099:0", "children": { "detail": { "title": "crwdns6101:0crwdne6101:0" @@ -5939,6 +7795,7 @@ "description": "crwdns4287:0crwdne4287:0", "disabled": { "noIntegration": "crwdns4289:0crwdne4289:0", + "signInRequired": "crwdns10281:0crwdne10281:0", "scoped": "crwdns4291:0crwdne4291:0" } } @@ -5955,7 +7812,6 @@ "help": "crwdns2098:0crwdne2098:0", "group": { "searchEngine": { - "title": "crwdns2100:0crwdne2100:0", "tipDdgBangs": "crwdns4237:0crwdne4237:0", "bang": { "searchWithQuery": "crwdns4239:0{query}crwdnd4239:0{label}crwdne4239:0", @@ -6006,20 +7862,6 @@ "group": { "mode": { "title": "crwdns2128:0crwdne2128:0" - }, - "help": { - "title": "crwdns2130:0crwdne2130:0", - "option": { - "documentation": { - "label": "crwdns2132:0crwdne2132:0" - }, - "submitIssue": { - "label": "crwdns2134:0crwdne2134:0" - }, - "discord": { - "label": "crwdns2136:0crwdne2136:0" - } - } } } }, @@ -6031,9 +7873,10 @@ "other": { "label": "crwdns2558:0crwdne2558:0" }, - "no-default": { - "label": "crwdns2560:0crwdne2560:0", - "description": "crwdns2562:0crwdne2562:0" + "no-engines": { + "label": "crwdns10283:0crwdne10283:0", + "descriptionCreate": "crwdns10285:0crwdne10285:0", + "descriptionUnavailable": "crwdns10287:0crwdne10287:0" }, "search": { "label": "crwdns2568:0{query}crwdnd2568:0{name}crwdne2568:0" @@ -6113,7 +7956,6 @@ "help": "crwdns2176:0crwdne2176:0", "group": { "user": { - "title": "crwdns2178:0crwdne2178:0", "children": { "action": { "detail": { @@ -6126,7 +7968,6 @@ } }, "group": { - "title": "crwdns2184:0crwdne2184:0", "children": { "action": { "detail": { @@ -6150,9 +7991,6 @@ "engine": { "search": "crwdns2194:0crwdne2194:0", "field": { - "name": { - "label": "crwdns2196:0crwdne2196:0" - }, "short": { "label": "crwdns2198:0crwdne2198:0" }, @@ -6165,12 +8003,19 @@ }, "page": { "list": { - "title": "crwdns2204:0crwdne2204:0", + "ariaLabel": "crwdns10289:0crwdne10289:0", "noResults": { "title": "crwdns2206:0crwdne2206:0", - "action": "crwdns2208:0crwdne2208:0" + "description": "crwdns10291:0crwdne10291:0", + "action": "crwdns2208:0crwdne2208:0", + "filteredTitle": "crwdns10293:0crwdne10293:0", + "filteredDescription": "crwdns10295:0{search}crwdne10295:0" }, - "interactive": "crwdns2210:0crwdne2210:0" + "interactive": "crwdns2210:0crwdne2210:0", + "type": { + "generic": "crwdns10297:0crwdne10297:0", + "fromIntegration": "crwdns10299:0crwdne10299:0" + } }, "create": { "title": "crwdns2212:0crwdne2212:0", @@ -6189,11 +8034,9 @@ "title": "crwdns2222:0crwdne2222:0", "notification": { "success": { - "title": "crwdns2224:0crwdne2224:0", "message": "crwdns2226:0crwdne2226:0" }, "error": { - "title": "crwdns2228:0crwdne2228:0", "message": "crwdns2230:0crwdne2230:0" } }, @@ -6332,6 +8175,10 @@ } }, "log": { + "context": { + "widgetError": "crwdns10301:0crwdne10301:0", + "expiredWidgetError": "crwdns10303:0crwdne10303:0" + }, "level": { "option": { "debug": "crwdns3524:0crwdne3524:0", @@ -6343,7 +8190,6 @@ }, "onboardingTour": { "learnMore": "crwdns4529:0crwdne4529:0", - "next": "crwdns4531:0crwdne4531:0", "prev": "crwdns4533:0crwdne4533:0", "done": "crwdns4535:0crwdne4535:0", "skip": "crwdns4537:0crwdne4537:0", @@ -6370,7 +8216,7 @@ }, "integrationsList": { "title": "crwdns4559:0crwdne4559:0", - "description": "crwdns4561:0crwdne4561:0" + "description": "crwdns10305:0crwdne10305:0" }, "integrationsCreate": { "title": "crwdns4563:0crwdne4563:0", @@ -6407,5 +8253,359 @@ "description": "crwdns4593:0crwdne4593:0" } } + }, + "metadata": { + "description": "crwdns10307:0crwdne10307:0", + "dashboardTitle": "crwdns10309:0{appName}crwdne10309:0" + }, + "assistant": { + "title": "crwdns10311:0crwdne10311:0", + "open": "crwdns10313:0crwdne10313:0", + "close": "crwdns10315:0crwdne10315:0", + "minimize": "crwdns10317:0crwdne10317:0", + "spotlight": "crwdns10319:0crwdne10319:0", + "spotlightDescription": "crwdns10321:0crwdne10321:0", + "spotlightPrompt": { + "title": "crwdns10323:0crwdne10323:0", + "description": "crwdns10325:0crwdne10325:0", + "send": "crwdns10327:0crwdne10327:0", + "empty": "crwdns10329:0crwdne10329:0" + }, + "unavailable": { + "checking": "crwdns10331:0crwdne10331:0", + "error": "crwdns10333:0crwdne10333:0", + "notConfigured": "crwdns10335:0crwdne10335:0", + "signIn": "crwdns10337:0crwdne10337:0" + }, + "newConversation": "crwdns10339:0crwdne10339:0", + "conversations": "crwdns10341:0crwdne10341:0", + "conversationActions": "crwdns10343:0crwdne10343:0", + "searchConversations": "crwdns10345:0crwdne10345:0", + "noMatchingConversations": "crwdns10347:0crwdne10347:0", + "moreActions": "crwdns10349:0crwdne10349:0", + "renameConversation": { + "action": "crwdns10351:0crwdne10351:0", + "label": "crwdns10353:0crwdne10353:0", + "save": "crwdns10355:0crwdne10355:0", + "failedTitle": "crwdns10357:0crwdne10357:0", + "failedDescription": "crwdns10359:0crwdne10359:0" + }, + "deleteConversation": { + "title": "crwdns10361:0crwdne10361:0", + "description": "crwdns10363:0{title}crwdne10363:0", + "failedTitle": "crwdns10365:0crwdne10365:0", + "failedDescription": "crwdns10367:0crwdne10367:0" + }, + "closeHistory": "crwdns10369:0crwdne10369:0", + "openHistory": "crwdns10371:0crwdne10371:0", + "emptyTitle": "crwdns10373:0crwdne10373:0", + "emptyDescription": "crwdns10375:0crwdne10375:0", + "suggestions": { + "health": { + "label": "crwdns10377:0crwdne10377:0", + "prompt": "crwdns10379:0crwdne10379:0" + }, + "explore": { + "label": "crwdns10381:0crwdne10381:0", + "prompt": "crwdns10383:0crwdne10383:0" + }, + "media": { + "label": "crwdns10385:0crwdne10385:0", + "prompt": "crwdns10387:0crwdne10387:0" + }, + "style": { + "label": "crwdns10389:0crwdne10389:0", + "prompt": "crwdns10391:0crwdne10391:0" + }, + "designWidget": { + "label": "crwdns10393:0crwdne10393:0", + "prompt": "crwdns10395:0crwdne10395:0" + } + }, + "composerPlaceholder": "crwdns10397:0crwdne10397:0", + "runtime": { + "model": "crwdns10399:0crwdne10399:0", + "searchModels": "crwdns10401:0crwdne10401:0", + "noModels": "crwdns10403:0crwdne10403:0", + "otherModels": "crwdns10405:0crwdne10405:0", + "imageInput": "crwdns10407:0crwdne10407:0", + "thinking": "crwdns10409:0crwdne10409:0", + "reasoning": { + "auto": "crwdns10411:0crwdne10411:0", + "none": "crwdns10413:0crwdne10413:0", + "minimal": "crwdns10415:0crwdne10415:0", + "low": "crwdns10417:0crwdne10417:0", + "medium": "crwdns10419:0crwdne10419:0", + "high": "crwdns10421:0crwdne10421:0" + } + }, + "providerQuota": { + "title": "crwdns10423:0crwdne10423:0", + "communityWorkshop": "crwdns10425:0crwdne10425:0", + "dailyAllowance": "crwdns10427:0crwdne10427:0", + "remainingLabel": "crwdns10429:0{remaining}crwdnd10429:0{limit}crwdne10429:0", + "loading": "crwdns10431:0crwdne10431:0", + "signInRequired": "crwdns10433:0crwdne10433:0", + "signInDescription": "crwdns10435:0crwdne10435:0", + "exhaustedDescription": "crwdns10437:0crwdne10437:0", + "unavailableDescription": "crwdns10439:0crwdne10439:0", + "signIn": "crwdns10441:0crwdne10441:0", + "signInError": "crwdns10443:0crwdne10443:0", + "loadError": "crwdns10445:0crwdne10445:0", + "reset": "crwdns10447:0{relative}crwdne10447:0", + "toolCalls": "crwdns10449:0crwdne10449:0", + "retry": "crwdns10451:0crwdne10451:0", + "level": { + "ok": "crwdns10453:0crwdne10453:0", + "warning": "crwdns10455:0crwdne10455:0", + "bad": "crwdns10457:0crwdne10457:0", + "dead": "crwdns10459:0crwdne10459:0" + } + }, + "stop": "crwdns10461:0crwdne10461:0", + "send": "crwdns10463:0crwdne10463:0", + "copy": "crwdns10465:0crwdne10465:0", + "copyMessage": "crwdns10467:0crwdne10467:0", + "editMessage": "crwdns10469:0crwdne10469:0", + "updateMessage": "crwdns10471:0crwdne10471:0", + "regenerate": "crwdns10473:0crwdne10473:0", + "helpful": "crwdns10475:0crwdne10475:0", + "notHelpful": "crwdns10477:0crwdne10477:0", + "readAloud": "crwdns10479:0crwdne10479:0", + "stopReading": "crwdns10481:0crwdne10481:0", + "feedbackError": "crwdns10483:0crwdne10483:0", + "exportMarkdown": "crwdns10485:0crwdne10485:0", + "exportConversation": { + "action": "crwdns10487:0crwdne10487:0", + "failedTitle": "crwdns10489:0crwdne10489:0", + "failedDescription": "crwdns10491:0crwdne10491:0" + }, + "reasoning": "crwdns10493:0crwdne10493:0", + "previousResponse": "crwdns10495:0crwdne10495:0", + "nextResponse": "crwdns10497:0crwdne10497:0", + "removeAttachment": "crwdns10499:0crwdne10499:0", + "downloadFile": "crwdns10501:0{name}crwdne10501:0", + "attachedImage": "crwdns10503:0crwdne10503:0", + "externalImageBlocked": "crwdns10505:0crwdne10505:0", + "image": { + "loading": "crwdns10507:0crwdne10507:0", + "failed": "crwdns10509:0crwdne10509:0", + "retry": "crwdns10511:0crwdne10511:0" + }, + "quoteSelection": "crwdns10513:0crwdne10513:0", + "dismissQuote": "crwdns10515:0crwdne10515:0", + "attachments": { + "add": "crwdns10517:0crwdne10517:0", + "errorTitle": "crwdns10519:0crwdne10519:0", + "imageUnsupported": "crwdns10521:0crwdne10521:0" + }, + "mentions": { + "menu": "crwdns10523:0crwdne10523:0", + "context": "crwdns10525:0crwdne10525:0", + "app": "crwdns10527:0crwdne10527:0", + "integration": "crwdns10529:0crwdne10529:0", + "board": "crwdns10531:0crwdne10531:0", + "widget": "crwdns10533:0crwdne10533:0", + "tools": "crwdns10535:0crwdne10535:0" + }, + "markdown": { + "diagram": "crwdns10537:0crwdne10537:0", + "renderingDiagram": "crwdns10539:0crwdne10539:0", + "diagramUnavailable": "crwdns10541:0crwdne10541:0" + }, + "commands": { + "menu": "crwdns10543:0crwdne10543:0", + "health": "crwdns10545:0crwdne10545:0", + "explore": "crwdns10547:0crwdne10547:0", + "media": "crwdns10549:0crwdne10549:0", + "style": "crwdns10551:0crwdne10551:0", + "designWidget": "crwdns10553:0crwdne10553:0" + }, + "usage": { + "tokens": "crwdns10555:0crwdne10555:0", + "contextWindow": "crwdns10557:0crwdne10557:0", + "requestDetails": "crwdns10559:0crwdne10559:0", + "used": "crwdns10561:0crwdne10561:0", + "remaining": "crwdns10563:0crwdne10563:0", + "capacity": "crwdns10565:0crwdne10565:0", + "input": "crwdns10567:0crwdne10567:0", + "output": "crwdns10569:0crwdne10569:0", + "cached": "crwdns10571:0crwdne10571:0", + "cacheWrite": "crwdns10573:0crwdne10573:0", + "reasoning": "crwdns10575:0crwdne10575:0", + "inputShort": "crwdns10577:0crwdne10577:0", + "outputShort": "crwdns10579:0crwdne10579:0", + "cachedShort": "crwdns10581:0crwdne10581:0", + "reasoningShort": "crwdns10583:0crwdne10583:0", + "firstOutput": "crwdns10585:0crwdne10585:0", + "homarrTiming": "crwdns10587:0crwdne10587:0", + "endToEnd": "crwdns10589:0crwdne10589:0", + "observedThroughput": "crwdns10591:0crwdne10591:0", + "providerTiming": "crwdns10593:0crwdne10593:0", + "loadingProviderDetails": "crwdns10595:0crwdne10595:0", + "providerDetailsPending": "crwdns10597:0crwdne10597:0", + "providerLatency": "crwdns10599:0crwdne10599:0", + "generationTime": "crwdns10601:0crwdne10601:0", + "moderationLatency": "crwdns10603:0crwdne10603:0", + "providerThroughput": "crwdns10605:0crwdne10605:0", + "fallbacks": "crwdns10607:0crwdne10607:0", + "fallbackLatency": "crwdns10609:0crwdne10609:0", + "cacheDiscount": "crwdns10611:0crwdne10611:0", + "normalizedTokens": "crwdns10613:0crwdne10613:0", + "byok": "crwdns10615:0crwdne10615:0", + "cost": "crwdns10617:0crwdne10617:0", + "reported": "crwdns10619:0crwdne10619:0", + "estimated": "crwdns10621:0crwdne10621:0", + "upstreamCost": "crwdns10623:0crwdne10623:0", + "webSearches": "crwdns10625:0crwdne10625:0", + "finishReason": "crwdns10627:0crwdne10627:0", + "notReported": "crwdns10629:0crwdne10629:0", + "agentSteps": "crwdns10631:0crwdne10631:0", + "step": "crwdns10633:0{number}crwdne10633:0", + "generation": "crwdns10635:0crwdne10635:0" + }, + "toolInput": "crwdns10637:0crwdne10637:0", + "toolOutput": "crwdns10639:0crwdne10639:0", + "toolActivity": { + "iconSearch": "crwdns10641:0{query}crwdne10641:0", + "iconBrowse": "crwdns10643:0crwdne10643:0" + }, + "toolNavigation": { + "openPreview": "crwdns10645:0crwdne10645:0", + "openWidget": "crwdns10647:0crwdne10647:0" + }, + "webSearch": { + "title": "crwdns10649:0crwdne10649:0", + "completed": "crwdns10651:0crwdne10651:0", + "searches": "crwdns10653:0count={count}crwdne10653:0", + "sources": "crwdns10655:0count={count}crwdne10655:0" + }, + "responseError": { + "title": "crwdns10657:0crwdne10657:0", + "description": "crwdns10659:0crwdne10659:0" + }, + "toolPreparationError": { + "title": "crwdns10661:0crwdne10661:0", + "description": "crwdns10663:0crwdne10663:0" + }, + "busy": { + "title": "crwdns10665:0crwdne10665:0", + "description": "crwdns10667:0crwdne10667:0" + }, + "pendingAction": { + "answerTitle": "crwdns10669:0crwdne10669:0", + "answerFallback": "crwdns10671:0crwdne10671:0", + "formTitle": "crwdns10673:0crwdne10673:0", + "boardFormTitle": "crwdns10675:0crwdne10675:0", + "review": "crwdns10677:0crwdne10677:0", + "sendBlocked": "crwdns10679:0crwdne10679:0" + }, + "activity": { + "thinking": "crwdns10681:0crwdne10681:0", + "working": "crwdns10683:0crwdne10683:0", + "ready": "crwdns10685:0crwdne10685:0", + "completed": "crwdns10687:0crwdne10687:0", + "approval": "crwdns10689:0crwdne10689:0", + "failed": "crwdns10691:0crwdne10691:0", + "expand": "crwdns10693:0crwdne10693:0", + "dismiss": "crwdns10695:0crwdne10695:0" + }, + "scrollToLatest": "crwdns10697:0crwdne10697:0", + "refresh": { + "action": "crwdns10699:0crwdne10699:0", + "working": "crwdns10701:0crwdne10701:0", + "completeTitle": "crwdns10703:0crwdne10703:0", + "completeDescription": "crwdns10705:0crwdne10705:0", + "failedTitle": "crwdns10707:0crwdne10707:0", + "failedDescription": "crwdns10709:0crwdne10709:0" + }, + "askUser": { + "preparing": "crwdns10711:0crwdne10711:0", + "answered": "crwdns10713:0crwdne10713:0", + "other": "crwdns10715:0crwdne10715:0", + "otherLabel": "crwdns10717:0crwdne10717:0", + "otherPlaceholder": "crwdns10719:0crwdne10719:0", + "submit": "crwdns10721:0crwdne10721:0", + "cancelOther": "crwdns10723:0crwdne10723:0", + "optionKind": { + "affirmative": "crwdns10725:0crwdne10725:0", + "negative": "crwdns10727:0crwdne10727:0", + "alternative": "crwdns10729:0crwdne10729:0", + "custom": "crwdns10731:0crwdne10731:0" + } + }, + "configureApp": { + "title": "crwdns10733:0crwdne10733:0", + "description": "crwdns10735:0crwdne10735:0", + "preparing": "crwdns10737:0crwdne10737:0", + "continue": "crwdns10739:0crwdne10739:0", + "ready": "crwdns10741:0crwdne10741:0", + "automaticContinue": "crwdns10743:0crwdne10743:0" + }, + "configureBoardSettings": { + "title": "crwdns10745:0crwdne10745:0", + "loading": "crwdns10747:0crwdne10747:0", + "loadErrorTitle": "crwdns10749:0crwdne10749:0", + "loadErrorDescription": "crwdns10751:0crwdne10751:0", + "proposedCount": "crwdns10753:0{count}crwdne10753:0", + "changeCount": "crwdns10755:0{count}crwdne10755:0", + "ready": "crwdns10757:0crwdne10757:0", + "cancelled": "crwdns10759:0crwdne10759:0", + "noChanges": "crwdns10761:0crwdne10761:0", + "keepCurrent": "crwdns10763:0crwdne10763:0", + "continue": "crwdns10765:0crwdne10765:0", + "automaticContinue": "crwdns10767:0crwdne10767:0", + "resetAll": "crwdns10769:0crwdne10769:0", + "tabs": { + "css": "crwdns10771:0crwdne10771:0", + "appearance": "crwdns10773:0crwdne10773:0", + "background": "crwdns10775:0crwdne10775:0", + "general": "crwdns10777:0crwdne10777:0" + }, + "cssDescription": "crwdns10779:0crwdne10779:0", + "cssCharacters": "crwdns10781:0{count}crwdne10781:0", + "copyCss": "crwdns10783:0crwdne10783:0", + "copied": "crwdns10785:0crwdne10785:0", + "restoreCss": "crwdns10787:0crwdne10787:0", + "remoteCssTitle": "crwdns10789:0crwdne10789:0", + "remoteCssDescription": "crwdns10791:0crwdne10791:0" + }, + "configureWidget": { + "title": "crwdns10793:0crwdne10793:0", + "preparing": "crwdns10795:0crwdne10795:0", + "review": "crwdns10797:0crwdne10797:0", + "ready": "crwdns10799:0crwdne10799:0", + "cancelled": "crwdns10801:0crwdne10801:0", + "automaticContinue": "crwdns10803:0crwdne10803:0", + "definitionLoadErrorTitle": "crwdns10805:0crwdne10805:0", + "definitionLoadErrorDescription": "crwdns10807:0crwdne10807:0", + "loadErrorTitle": "crwdns10809:0crwdne10809:0", + "loadErrorDescription": "crwdns10811:0crwdne10811:0", + "noIntegrationTitle": "crwdns10813:0crwdne10813:0", + "noIntegrationDescription": "crwdns10815:0crwdne10815:0", + "connectIntegration": "crwdns10817:0crwdne10817:0", + "manageIntegrations": "crwdns10819:0crwdne10819:0", + "skip": "crwdns10821:0crwdne10821:0", + "errorTitle": "crwdns10823:0crwdne10823:0", + "errorDescription": "crwdns10825:0crwdne10825:0" + }, + "approvalRequired": "crwdns10827:0crwdne10827:0", + "complete": "crwdns10829:0crwdne10829:0", + "denied": "crwdns10831:0crwdne10831:0", + "failed": "crwdns10833:0crwdne10833:0", + "working": "crwdns10835:0crwdne10835:0", + "approvalDescription": "crwdns10837:0crwdne10837:0", + "approveAndRun": "crwdns10839:0crwdne10839:0", + "deny": "crwdns10841:0crwdne10841:0", + "autoApproval": { + "label": "crwdns10843:0crwdne10843:0", + "composerLabel": "crwdns10845:0crwdne10845:0", + "title": "crwdns10847:0crwdne10847:0", + "description": "crwdns10849:0crwdne10849:0", + "enable": "crwdns10851:0crwdne10851:0", + "disable": "crwdns10853:0crwdne10853:0", + "enabled": "crwdns10855:0crwdne10855:0", + "approving": "crwdns10857:0crwdne10857:0" + } } } diff --git a/packages/translation/src/lang/cs.json b/packages/translation/src/lang/cs.json index 21b0eb4a0..eef8a5feb 100644 --- a/packages/translation/src/lang/cs.json +++ b/packages/translation/src/lang/cs.json @@ -1,156 +1,246 @@ { "init": { - "step": { - "start": { - "title": "Vítejte v Homarru", - "subtitle": "Pojďme začít nastavením instance Homarru.", - "description": "Chcete-li začít, zvolte, jak chcete nastavit instanci Homarru.", - "action": { - "scratch": "Začít od začátku", - "importOldmarr": "Import z Homarru před verzí 1.0", - "restoreSqlite": "Obnovit ze zálohy SQLite", - "restoreSqliteDescription": "Nahrajte kompletní zálohu SQLite databáze z předchozí instance Homarru. Tím se obnoví všechny plochy, uživatelé, aplikace, integrace a nastavení.", - "backToOptions": "← Zpět na možnosti nastavení" + "studio": { + "navigationLabel": "Sekce zapojení", + "back": "Zpět", + "buildBoard": "Postav moji desku", + "common": { + "unknownError": "Něco se pokazilo. Vaše rozhodnutí jsou stále tady; zkuste to znovu." + }, + "claim": { + "checking": "Zabezpečení této relace zapojení…", + "checkingTitle": "Příprava zabezpečeného nastavení", + "lockedTitle": "Nastavení je otevřeno v jiném prohlížeči", + "lockedDescription": "Pokračujte tam, nebo počkejte, až bezpečná první relace vyprší, než se pokusíte znovu.", + "signInTitle": "Vyžadováno přihlášení administrátorem", + "signInDescription": "Administrátor již existuje. Přihlaste se pro obnovení nastavení bez odhalování přihlašovacích údajů nebo přístupu ke službám.", + "signIn": "Přihlaste se a pokračujte", + "errorTitle": "Nastavení nelze zabezpečit", + "errorDescription": "Načtěte stránku znovu a zkuste bezpečnou relaci při prvním spuštění." + }, + "navigation": { + "essentials": "Základy", + "discover": "Objevte", + "connect": "Připojit", + "board": "Šachovnice", + "extend": "Rozšířit", + "review": "Přezkum" + }, + "welcome": { + "title": "Vítejte domů.", + "description": "Vítejte v Homarr v{version}. Provedeme Vás základními prvky a pomůžeme vám vybudovat vaši první desku.", + "start": "Začněte", + "restore": "Obnovit zálohu", + "restoreTitle": "Obnovit ze zálohy", + "restoreDescription": "Úplná záloha SQLite obnoví desky, lidi, aplikace, integrace a nastavení. Homarr ji ověří před nahrazením čehokoliv.", + "errorTitle": "Nastavení nelze spustit", + "errorDescription": "Volby nastavení jsou stále tady. Zkuste to znovu nebo obnovte stránku, pokud to bude pokračovat." + }, + "account": { + "title": "Vytvořte svého správce", + "description": "Zadejte přihlašovací údaje pro administrátora.", + "username": "Uživatelské jméno správce", + "passwordHint": "Vyžaduje se pouze 8 znaků. Ostatní kontroly intenzity hesla.", + "create": "Vytvořit administrátora", + "errorTitle": "Administrátor nemohl být vytvořen", + "recoveryTitle": "Účet administrátora byl vytvořen", + "recoveryDescription": "Automatické přihlášení nebylo dokončeno. Pro pokračování v nastavení se přihlaste pomocí přihlašovacích údajů správce, které jste právě vytvořili.", + "recoveryAction": "Přihlaste se a pokračujte", + "unknownError": "Správce nemohl být vytvořen." + }, + "externalGroup": { + "title": "Připojte vaši skupinu administrátorů", + "description": "Použijte přesný název skupiny odeslaný LDAP nebo OIDC. Členové této skupiny přijímají přístup správce.", + "name": "Skupina externích správců", + "nameDescription": "Toto je případ od případu a musí odpovídat poskytovateli vaší identity.", + "continue": "Uložit skupinu a pokračovat", + "errorTitle": "Skupinu nelze uložit", + "unknownError": "Skupinu administrátora nelze uložit." + }, + "essentials": { + "title": "Začněte se známými výchozími hodnotami", + "description": "Nastavte jazyk a vzhled každého vidí jako první, a poté Homarr zadejte adresní vzorec používaný vašimi službami.", + "language": "Výchozí jazyk", + "theme": "Výchozí motiv", + "themeAuto": "Systém", + "themeLight": "Světlý", + "themeDark": "Tmavý", + "serverOriginHelp": "Homarr používá tuto adresu k předvyplnění identifikovaných servisních URL. Stále můžete upravovat každou službu jednotlivě.", + "serverDescription": "Toto je zkratka, ne omezení. Každá detekovaná služba zůstává upravitelná.", + "serverOrigin": "Doména, IP nebo cesta obráceného proxy", + "serverOriginDescription": "Příklady: home.lan, 192.168.1.10, nebo https://home.example.com/services. Vyberte si, jak je každá služba připojena níže.", + "analytics": "Sdílet anonymní analýzu produktů", + "analyticsDescription": "Pomáhá Homarru zlepšit spolehlivost funkcí. Žádné přihlašovací údaje ke službě nebo obsah řídicího panelu nejsou odesílány." + }, + "discover": { + "title": "Podívejte se, k čemu může toto zařízení skutečně dojít.", + "description": "Homarr kontroluje možnosti na místě. Chybějící Docker socket nebo Kubernetes kontext nikdy neblokuje ruční nastavení.", + "database": "Databáze", + "docker": "Docker a kompatibilní zásuvky", + "kubernetes": "Kubernetes", + "assistantWorkshop": "Asistent a seminář", + "found": "Nalezeno {integrations} integrace a {apps} další aplikace", + "retryKubernetes": "Znovu zkontrolovat Kubernetes", + "retryWorkshop": "Znovu zkontrolovat Workshop", + "unknownVersion": "neznámá verze", + "kubernetesAvailable": "Připojeno k Kubernetes {version}", + "kubernetesDisabled": "Není povoleno; pokračujte v Dockeru nebo manuálních službách", + "kubernetesUnavailable": "Kubernetes je povolen, ale nelze jej dosáhnout z tohoto Homarrova procesu", + "workshopAvailable": "Komunitní semináře a hostované asistenční služby jsou dosažitelné", + "workshopUnavailable": "Místní a vlastní asistentští poskytovatelé zůstávají k dispozici", + "partialTitle": "Některé zdroje nelze naskenovat", + "partialDescription": "Výsledky z dosažitelných hostitelů jsou zachovány. Zkontrolujte oprávnění socketu nebo přidejte služby ručně v další sekci.", + "status": { + "checking": "Kontrola dostupnosti…", + "available": "K dispozici", + "partial": "Částečně dostupné", + "empty": "Dosažitelné, žádné spárovací služby", + "disabled": "Zakázáno v konfiguraci serveru", + "unavailable": "Nedostupné z tohoto Homarr procesu" } }, - "import": { - "title": "Import dat", - "subtitle": "Můžete importovat data z existující instance Homarru.", - "dropzone": { - "title": "Přetáhněte zip soubor sem nebo klikněte pro procházení souborů", - "description": "Nahraný zip soubor bude zpracován a budete si moci vybrat, co chcete importovat" + "connect": { + "title": "Připojte, co dělá desku užitečnou", + "description": "Vyberte několik služeb najednou. Štítky Dockeru mají prioritu, zaplňují mezery obrázků a každá URL a důvěryhodnost zůstává recenzovatelná.", + "discoveredIntegrations": "Detekovány integrace ({count})", + "detectedIntegrationLabel": "Import {name}detekován jako {kind}", + "detectedAppLabel": "Importovat zjištěnou aplikaci {name}", + "otherIntegrations": "Přidat další integraci", + "configureIntegrations": "Konfigurace integrace", + "discoveredApps": "Detekovány aplikace ({count})", + "appAddressRequired": "Přidat adresu pro {name}nebo ji odstranit z výběru.", + "empty": "Nebyly vybrány žádné integrace. Homarr stále vytvoří užitečný začátečník s obecnými widgety.", + "dockerSource": "Dokovací modul", + "manualSource": "Ruční", + "url": "URL služby", + "noCredentials": "Žádné přihlašovací údaje", + "noCredentialsDescription": "Tato integrace nevyžaduje přihlašovací údaje.", + "credentialMethod": "Metoda pověření", + "getApiKey": "Otevřete nastavení API klíče pro tuto službu", + "openGuide": "Otevřete průvodce nastavením Homarru pro tuto službu", + "testConnection": "Testovat připojení", + "testSuccess": "Práce spojené s připojením", + "testSuccessDescription": "Homarr je propojen s aktuální adresou a přihlašovacími údaji.", + "testError": "Spojení selhalo", + "testErrorDescription": "Zkontrolujte adresu služby a přihlašovací údaje, zkuste to znovu.", + "needsConfiguration": "Vyžaduje konfiguraci", + "tested": "Připojení testováno", + "testFailed": "Test připojení se nezdařil", + "incompleteConfirmation": "Nedokončené integrace budou přeskočeny. Pokračovat bez nich?" + }, + "board": { + "title": "Nakreslete desku před jejím postavením", + "description": "Homarr vytváří chráněné mobilní a základové rozvržení, pak umístí aplikace a kompatibilní widgety ze služeb, které jste vybrali.", + "target": "Konfigurace šachovnice", + "targetDescription": "Vyberte přesnou tabuli, kterou by toto nastavení mělo aktualizovat.", + "targetPlaceholder": "Vybrat desku", + "targetRequired": "Před pokračováním vyberte desku pro konfiguraci.", + "name": "Název desky", + "nameDescription": "Používá se pouze v URL, písmena, číslice, pomlčky a podtržítka.", + "nameRequired": "Zadejte název tabule před pokračováním.", + "primaryColor": "Primární barva", + "secondaryColor": "Doplňková barva", + "resetColors": "Obnovit barvy", + "radius": "Poloměr rohu widgetu", + "radiusOptions": { + "xs": "Mírný", + "sm": "Jemný", + "md": "Vyvážená", + "lg": "Zaobleno", + "xl": "Měkké" }, - "fileInfo": { - "action": { - "change": "Změnit soubor" - } + "columns": "Sloupce náhledu", + "columnsDescription": "Sloupce definují vodorovnou mřížku pro velikost a položky. 12 je pro většinu lidí mnoho.", + "columnCount": "{count, plural, one {# sloupec} other {# sloupců}}", + "leftSidebar": "Left sidebar", + "rightSidebar": "Pravý postranní panel", + "previewLabel": "Živý náhled prvního tabule" + }, + "extend": { + "title": "Pokročilé funkce", + "tabsLabel": "Asistent, Workshop a MCP nastavení", + "assistant": "Asistent", + "workshop": "Workshop", + "assistantSetup": { + "loginTitle": "Vyžadováno přihlášení administrátorem", + "loginDescription": "Klíče poskytovatele a přístup k modelům jsou oprávněné. Dokončete nastavení, přihlášení a Homarr přímo otevře nastavení Assistant.", + "loginAction": "Pro nastavení asistenta se přihlaste" }, - "importSettings": { - "title": "Importovat nastavení", - "description": "Konfigurovat chování importu" + "workshopSetup": { + "title": "Homarr Workshop", + "description": "Procházejte komunitní vlastní widgety, prohlédněte si jejich požadované schopnosti, nainstalujte je a publikujte svou vlastní práci bez kopírování kódu mezi servery.", + "available": "K dispozici", + "checking": "Kontrola…", + "unavailable": "Unavailable", + "discoverTitle": "Objevte", + "discoverDescription": "Najděte widgety vytvořené pro skutečně hostované pracovní postupy.", + "installTitle": "Zkontrolovat a nainstalovat", + "installDescription": "Před přidáním cokoliv si přečtěte metadata a konfiguraci.", + "publishTitle": "Sdílet", + "publishDescription": "Publikovat widgety pro opakované použití zpět do komunity.", + "browse": "Procházet Workshop" }, - "boardSelection": { - "title": "Nalezeno {count} ploch", - "description": "Vyberte všechny plochy s velikostmi, které chcete importovat", - "action": { - "selectAll": "Vybrat vše", - "unselectAll": "Zrušit vybraní všeho" - } - }, - "summary": { - "title": "Přehled importu", - "description": "V následujícím přehledu můžete vidět, co bude importováno", - "action": { - "import": "Potvrdit import a pokračovat" - }, - "entities": { - "apps": "Aplikace", - "boards": "Plochy", - "integrations": "Integrace", - "credentialUsers": "Uživatelské oprávnění" - } - }, - "tokenModal": { - "title": "Zadejte token pro import", - "field": { - "token": { - "label": "Token", - "description": "Zadejte zobrazený importní token z předchozí instance homarr" - } - }, - "notification": { - "error": { - "title": "Neplatný token", - "message": "Token, který jste zadali je neplatný" - } - } + "mcpSetup": { + "title": "Homarr MCP", + "description": "Připojte Claude, Codex, nebo jiného MCP klienta k nástrojům s Homarrem. API klíče mají přístup k explicitnímu a odvolatelnému přístupu.", + "endpoint": "Streamovatelný koncový bod HTTP", + "keyTitle": "Kopírovat tento klíč", + "keyDescription": "Z důvodu bezpečnosti Homarr nemůže znovu zobrazit tento API klíč.", + "copyKey": "Kopírovat klíč API", + "createKey": "Vytvořit MCP API klíč", + "errorTitle": "Nelze vytvořit MCP API klíč", + "loginRequired": "Přihlaste se jako správce po nastavení pro vytvoření API klíče.", + "configuration": "Konfigurace klienta", + "copy": "Kopírovat konfiguraci", + "copied": "Zkopírováno", + "advanced": "Otevřít MCP nástroje, oprávnění a detaily nastavení" } }, - "user": { - "title": "Správce", - "subtitle": "Zadejte přihlašovací údaje pro administrátora.", - "notification": { - "success": { - "title": "Uživatel byl vytvořen", - "message": "Uživatel byl úspěšně vytvořen" - }, - "error": { - "title": "Vytvoření uživatele se nezdařilo" - } - } - }, - "group": { - "title": "Externí skupina", - "subtitle": "Zadejte skupinu, která by měla být použita pro externí uživatele.", - "form": { - "name": { - "label": "Název skupiny", - "description": "Název musí odpovídat skupině admin externího poskytovatele" - } - } - }, - "settings": { - "title": "Nastavení", - "subtitle": "Konfigurace nastavení serveru." - }, - "integrations": { - "title": "Integrace", - "subtitle": "Vyberte služby, které používáte.", - "description": "Vyberte integrace, které chcete připojit. Automaticky nastavíme váš dashboard s odpovídajícími widgety.", - "action": { - "continue": "Pokračovat", - "skip": "Prozatím přeskočit" - }, - "configure": { - "progress": "{current} z {total}", - "skip": "Přeskočit tuto integraci", - "finishing": "Nastavování vaší plochy...", - "error": { - "title": "Nastavení se nezdařilo", - "message": "Během nastavování vaší plochy se něco pokazilo. Zkuste to prosím znovu." - }, - "helpers": { - "tooltip": "Pomocníci s URL", - "description": "Tito pomocníci se pokusí uhodnout URL vašich služeb. Pokud to nefunguje, zadejte adresu ručně." - } - }, - "urlTemplate": { - "label": "Základní URL", - "placeholder": "homelab.local nebo 192.168.1.1", - "hint": "Zadejte svou základní doménu nebo IP pro automatické vyplnění integračních URL", - "warning": "Nastavením základní URL nyní se automaticky vyplní všechna integrační URL, což vám ušetří čas během nastavování", - "preview": "např. {example}", - "mode": { - "subdomain": "Subdoména", - "hostPort": "Hostitel:Port" - } - }, - "docker": { - "detected": "Docker detekoval {count} služeb", - "detectedBreakdown": "{integrations} integrací · {apps} aplikací", - "summary": "Homarr detekoval {apps} aplikací, {integrations} z nich má vestavěné integrace", - "appBadge": "Aplikace", - "appSectionLabel": "Aplikace k přidání na plochu ({count} vybráno)", - "scanning": "Skenování Dockeru...", - "scanningDescription": "Hledání běžících kontejnerů ve vašem systému" + "review": { + "title": "Jedna deska, postavená kolem vašich služeb", + "description": "Homarr testy neuložené připojení, importuje vybrané aplikace, aplikuje vzhled a rozvržení, poté otevře přesnou desku, kterou nastaví.", + "board": "První deska", + "columns": "Sloupce náhledu", + "columnsValue": "{count, plural, one {# sloupec} other {# sloupců}}", + "sidebars": "Boční panely", + "sidebarsValue": "{count, plural, =0 {None} one {# sidebar} other {# sidebars}}", + "layouts": "Responzivní rozložení", + "layoutsValue": "Mobilní + základna", + "integrations": "Integrace", + "integrationsValue": "{count, plural, =0 {Nikdo nebyl vybrán} one {# integrace} other {# integrace}}", + "apps": "Aplikační dlaždice", + "appsValue": "{count, plural, =0 {Startovací aplikace pouze} one {# dlaždice aplikace} other {# dlaždic aplikací}}", + "language": "Jazyk", + "theme": "Téma", + "themeAuto": "Předvolby systému", + "themeLight": "Světlý", + "themeDark": "Tmavý", + "colors": "Barvy desky", + "radius": "Poloměr widgetu", + "automaticTitle": "Co Homarr vytvoří", + "automaticDescription": "Kompatibilní widgety, ikony, odkazy aplikací, integrační vztahy a umisťování přicházejí ze sdíleného katalogu Homarru. Každý výsledek můžete upravit později.", + "dockerWarningTitle": "Některé popisky Dockeru byly během nastavení změněny", + "dockerWarningDescription": "{count, plural, one {# vybraný výsledek Dockeru nemohl být použit, protože jeho služba změnila, zaměřila se na jinou desku nebo její widget nebyl kompatibilní} other {# vybrané výsledky Dockeru nemohly být použity, protože služby změnily, zaměřily se na jinou desku nebo jejich widgety nebyly kompatibilní}}", + "errorTitle": "Tabule nemohla být postavena", + "progress": { + "applying": "Testování spojení a stavění desky", + "done": "Vaše deska je připravena" } }, "finish": { - "title": "Dokončit nastavení", - "subtitle": "Jste připraveni začít!", - "description": "Úspěšně jste dokončili proces nastavení. Nyní můžete začít používat Homarr. Vyberte další akci:", - "action": { - "goToBoard": "Přejít na plochu {name}", - "createBoard": "Vytvořte svou první plochu", - "inviteUser": "Pozvat ostatní uživatele", - "docs": "Přečtěte si dokumentaci" - } + "title": "Vaše první deska je připravena.", + "description": "Homarr připojil vybrané díly a zbytek zůstal upravitelný. Otevřete desku nyní; krátká prohlídka v produktu zobrazuje režim úpravy, widgety, rozvržení a vyhledávání.", + "openBoard": "Otevřít moji tabuli", + "manageTitle": "Spravovat", + "manageDescription": "Aplikace jemného doladění, integrace, desky, uživatelé a nastavení serveru.", + "workshopTitle": "Workshop", + "workshopDescription": "Objevte a instalujte vlastní widgety.", + "docsTitle": "Naučit se Homarr", + "docsDescription": "Přečtěte si cílené návody pro desky, widgety, integrace a nástroje." } - }, - "backToStart": "Zpět na začátek" + } }, "user": { - "title": "Uživatelé", "name": "Uživatel", "page": { "login": { @@ -159,12 +249,10 @@ }, "invite": { "title": "Připojit se k Homarrovi", + "titleWithAppName": "Připojte se k {appName}", "subtitle": "Vítejte v Homarru! Vytvořte si prosím svůj účet", + "subtitleWithAppName": "Vítejte v {appName}! Vytvořte si prosím svůj účet", "description": "Byli jste pozváni {username}" - }, - "init": { - "title": "Nová instalace Homarru", - "subtitle": "Vytvořte prosím původního administrátora" } }, "field": { @@ -192,12 +280,17 @@ "previousPassword": { "label": "Původní heslo" }, - "homeBoard": { - "label": "Domovská plocha" - }, "pingIconsEnabled": { "label": "Používat ikony pro pingy" }, + "byteUnitSystem": { + "label": "Jednotky velikosti dat", + "description": "Vyberte si, jak Homarr zobrazuje velikost bajtů a rychlosti bajtů. Sazby bitu vždy používají desetinná místa.", + "options": { + "binary": "Binární", + "decimal": "Desetinný" + } + }, "enableRightClickOnWidgets": { "label": "Povolit kliknutí pravým tlačítkem na widgety", "description": "Zobrazit kontextovou nabídku Homarru po kliknutí pravým tlačítkem na widget. Vypnutím použijete výchozí nabídku prohlížeče (např. „Otevřít odkaz na nové kartě“)." @@ -247,7 +340,6 @@ } } }, - "create": "Vytvořit uživatele", "changePassword": { "label": "Změnit heslo", "notification": { @@ -259,56 +351,6 @@ } } }, - "changeHomeBoard": { - "notification": { - "success": { - "message": "Domovská plocha byla úspěšně změněna" - }, - "error": { - "message": "Nepodařilo se změnit domovskou plochu" - } - } - }, - "changeSearchPreferences": { - "notification": { - "success": { - "message": "Hledané předvolby úspěšně změněny" - }, - "error": { - "message": "Nelze změnit předvolby vyhledávání" - } - } - }, - "changeFirstDayOfWeek": { - "notification": { - "success": { - "message": "První den v týdnu byl úspěšně změněn" - }, - "error": { - "message": "Nelze změnit první den v týdnu" - } - } - }, - "changePingIconsEnabled": { - "notification": { - "success": { - "message": "Ikony pingu byly úspěšně přepnuty" - }, - "error": { - "message": "Nelze přepnout ikony pingu" - } - } - }, - "changeDdgBangs": { - "notification": { - "success": { - "message": "DuckDuckGo bangs úspěšně přepnuty" - }, - "error": { - "message": "Nelze přepnout DuckDuckGo bangs" - } - } - }, "manageAvatar": { "changeImage": { "label": "Změnit obrázek", @@ -338,16 +380,6 @@ } } }, - "editProfile": { - "notification": { - "success": { - "message": "Profil byl úspěšně aktualizován" - }, - "error": { - "message": "Profil nelze aktualizovat" - } - } - }, "delete": { "label": "Trvale smazat uživatele", "description": "Smaže tohoto uživatele včetně jeho nastavení. Neodstraní žádné plochy. Uživatel nebude upozorněn.", @@ -356,18 +388,13 @@ "select": { "label": "Vybrat uživatele", "notFound": "Nebyl nalezen žádný uživatel" - }, - "transfer": { - "label": "Vyberte nového vlastníka" } } }, "group": { - "title": "Skupiny", "name": "Skupina", "search": "Najít skupinu", "field": { - "name": "Název", "members": "Členové", "homeBoard": { "label": "Domovský panel", @@ -388,6 +415,19 @@ } } }, + "custom-widget": { + "title": "Vlastní widgety", + "item": { + "manage": { + "label": "Spravovat vlastní widgety", + "description": "Povolit členům vytvářet, upravovat a mazat vlastní definice widgetů" + }, + "secret-write": { + "label": "Nastavit vlastní tajemství widgetu", + "description": "Povolit členům a jejich API klíčům nastavit šifrované vlastní přihlašovací údaje pro widget" + } + } + }, "app": { "title": "Aplikace", "item": { @@ -493,6 +533,35 @@ "description": "Umožňuje členům spravovat a mazat jakýkoliv vyhledávač" } } + }, + "matrix": { + "none": "Bez přístupu", + "impliedHint": "Také dotace: {permissions}", + "grantedViaAdmin": "Správci toto již mají. Nastavte administrátora na \"Bez přístupu\" pro nastavení odděleně.", + "preset": { + "label": "Předvolby", + "viewer": "Prohlížeč", + "viewerDescription": "Pouze pro čtení: zobrazení tabulek a médií, použití aplikací a integrací, které již existují.", + "editor": "Editor", + "editorDescription": "Denní řízení: vytváření a úprava tabulek, aplikací, integrací a vyhledávačů.", + "admin": "Administrátor", + "adminDescription": "Neomezený přístup ke všem funkcím a nastavením, včetně správy uživatelů.", + "custom": "Vlastní" + }, + "effective": { + "title": "Efektivní oprávnění", + "description": "Úplná, deduplikovaná sada akcí členů této skupiny může provádět, včetně oprávnění udělených nepřímo.", + "empty": "Nebyla vybrána žádná oprávnění" + }, + "noneDescription": "Poslanci nemají přístup k této oblasti.", + "level": { + "view": "Zobrazit", + "use": "Použití", + "interact": "Interakce", + "modify": "Upravit", + "full": "Plné" + }, + "capabilityIncluded": "Již je zahrnuto v „{level}“" } }, "memberNotice": { @@ -607,21 +676,24 @@ "search": "Najít aplikaci", "page": { "list": { - "title": "Aplikace", + "ariaLabel": "Nastavené aplikace", "noResults": { "title": "Zatím nejsou žádné aplikace", - "action": "Vytvořte svou první aplikaci" + "description": "Aplikace jsou odkazy na služby a nástroje, které chcete na vašich palubách.", + "action": "Vytvořte svou první aplikaci", + "filteredTitle": "Žádné aplikace neodpovídají vašemu hledání", + "filteredDescription": "Žádné aplikace neodpovídají \"{search}\". Zkuste jiné jméno nebo URL.", + "createOnlyTitle": "Můžete přidat pouze aplikace", + "createOnlyDescription": "Vaše oprávnění umožňují vytvářet aplikace, ale neprocházet stávající. Požádejte správce o přístup k řízení aplikací pro zobrazení úplného seznamu." } }, "create": { "title": "Nová aplikace", "notification": { "success": { - "title": "Vytvoření bylo úspěšné", "message": "Aplikace byla úspěšně vytvořena" }, "error": { - "title": "Vytvoření selhalo", "message": "Aplikaci nelze vytvořit" } } @@ -630,11 +702,9 @@ "title": "Upravit aplikaci", "notification": { "success": { - "title": "Změny úspěšně aplikovány", "message": "Aplikace byla úspěšně uložena" }, "error": { - "title": "Nepodařilo se uložit změny", "message": "Aplikaci se nepodařilo uložit" } } @@ -644,26 +714,18 @@ "message": "Jste si jisti, že chcete vymazat aplikaci {name}?", "notification": { "success": { - "title": "Úspěšně odstraněno", "message": "Aplikace byla úspěšně odstraněna" }, "error": { - "title": "Smazání se nezdařilo", "message": "Nelze odstranit aplikaci" } } } }, "field": { - "name": { - "label": "Název" - }, "description": { "label": "Popis" }, - "url": { - "label": "Url" - }, "useDifferentUrlForPing": { "checkbox": { "label": "Použít jinou URL pro ping", @@ -678,34 +740,582 @@ "search": "Vyhledat aplikaci", "noResults": "Žádné výsledky", "action": "Vybrat {app}", - "title": "Vyberte aplikaci, kterou chcete přidat do tohoto panelu" + "title": "Vyberte aplikaci, kterou chcete přidat do tohoto panelu", + "toggle": "Klikněte pro výběr", + "selected": "Vybrané", + "multiple": "Přidat {count}", + "selectedCount": "{count, plural, one {# vybráno} other {# vybráno}}", + "appsSelected": "{count, plural, one {Byla vybrána # aplikací} other {# aplikací}}", + "selectMultiple": "Vybrat více", + "cancelMultiple": "Opustit vícenásobný výběr", + "customApplication": "Vlastní aplikace", + "application": "Žádost" }, "create": { "title": "Vytvořit novou aplikaci", "description": "Vytvořit novou aplikaci ", "action": "Otevřít vytvoření aplikace" + } + } + }, + "tips": { + "dismiss": "Odmítnout tip", + "multiSelectApps": "Tip: Podržte Ctrl / pro vybrání více aplikací najednou" + }, + "customWidget": { + "secretEntry": { + "title": "Konfigurace zdroje API", + "description": "Potvrďte URL serveru a zadejte přihlašovací údaje. Tajné hodnoty jsou šifrovány Homarr a nikdy nevráceny žádajícímu agentovi.", + "loading": "Načítání bezpečného požadavku…", + "applying": "Použití této konfigurace… Ponechte tuto stránku otevřenou.", + "saved": "Zdroj API nakonfigurován. Tuto stránku můžete zavřít.", + "unavailable": "Požadavek není k dispozici", + "saveError": "Nelze nakonfigurovat zdroj API", + "source": "Zdroj APL: {name}", + "baseUrl": "URL serveru", + "networkScope": "Přístup k síti", + "save": "Uložit konfiguraci API", + "expires": "Tato jednorázová žádost vyprší v {time}." + }, + "page": { + "list": { + "noResults": "Zatím nemáte žádné vlastní widgety. Vytvořte svůj první!", + "noDescription": "Bez popisu", + "enabled": "Zapnuto", + "disabled": "Vypnuto", + "disabledDescription": "Tento widget zůstává nakonfigurován, ale nebude načítán na žádné desce.", + "requestCount": "{count, plural, one {# request} other {# request}}", + "invalidDefinition": "Neplatná definice", + "migrationRequired": "Vyžadována migrace", + "migrationInstructions": "Otevře akce ke zkopírování nebo exportování původní definice v1 pro manuální rekreaci. Můžete také použít výzvu k migraci s LLM. Existující desky fungují i po migraci.", + "missingCredentials": "{count, plural, one {Chybí pověření} other {Chybí # pověření}}", + "missingCredentialsDescription": "{count, plural, one {Tento widget stále potřebuje jedno pověření.} other {Tento widget stále potřebuje # pověření.}} Vyberte tento odznak pro nastavení URL a šifrované hodnoty." }, - "add": "Přidat aplikaci" + "create": { + "title": "Vytvořit vlastní widget", + "subtitle": "Definujte URL API, ověřování a způsob zobrazení dat odpovědi." + }, + "tabs": { + "ariaLabel": "Vlastní sekce widgetů", + "installed": "Nainstalováno", + "workshop": "Workshop" + } + }, + "action": { + "pasteImportHint": "Vložte celý vlastní widget JSON s Ctrl+V nebo Command+V", + "delete": "Odstranit vlastní widget", + "deleteConfirm": "Opravdu chcete odstranit „{name}“? Tuto akci nelze vrátit zpět.", + "export": "Export", + "duplicate": "Duplikovat", + "aiPrompt": "Návrh s AI", + "copyAiPrompt": "Kopírovat výzvu AI", + "enable": "Povolit", + "disable": "Zakázat", + "menu": "Akce", + "downloadSkill": "Zobrazit vlastní dovednosti widgetu", + "publishWorkshop": "Publikovat do Workshopu", + "migrate": "Migrovat vlastní widget", + "configureSources": "Konfigurace zdrojů", + "copyLegacyDefinition": "Kopírovat původní obsah widgetu", + "exportLegacyDefinition": "Exportovat původní obsah widgetu", + "copyMigrationPrompt": "Kopírovat rychlou migraci LLM", + "pasteMigration": "Vložit migrovaný widget", + "importMigration": "Importovat soubor JSON" + }, + "sourceSetupDialog": { + "title": "Konfigurace zdrojů widgetu", + "description": "Zkontrolujte kde se tento widget připojuje a přidává nebo nahrazuje jeho šifrované údaje.", + "credentialsRequired": "Žádosti nebudou úspěšné, dokud nebudou přidány požadované přihlašovací údaje.", + "save": "Uložit konfiguraci" + }, + "field": { + "description": "Popis" + }, + "editor": { + "errorBoundary": { + "title": "Něco se pokazilo" + }, + "action": { + "components": "Součásti", + "format": "Formát", + "insertStarter": "Insert starter", + "redo": "Znovu", + "copied": "Zkopírováno", + "schema": "Schéma" + }, + "reference": { + "minimal": "Minimální příklad", + "full": "Úplný příklad" + }, + "componentReference": { + "search": "Hledat komponenty", + "empty": "Žádné odpovídající komponenty", + "count": "{count, number} dostupné komponenty" + }, + "status": { + "errors": "{count, number} chyby", + "warnings": "{count, number} varování", + "ready": "Nebyly nalezeny žádné úkoly", + "position": "Ln {line, number}, Col {column, number}", + "characters": "{count, number} znaky", + "charactersWithLimit": "{count, number} / {limit, number}" + }, + "diagnostics": { + "title": "Šablona diagnostiky", + "line": "Řádek {line, number}", + "ast": "{value}", + "bindingTypeConflict": "Vstup \"{value}\" je sdílen ovládacími prvky s nekompatibilními typy hodnot.", + "runtimeBindingTypeConflict": "Vstup \"{value}\" je spojen jak s {firstType} , tak s {secondType}.", + "dynamicRequestId": "Je vyžadováno doslovné ID požadavku. Dynamická ID požadavku nejsou přijaty.", + "dynamicInputBinding": "Pro vazbu je vyžadován doslovný vstupní název.", + "inlineRequestProps": "Síťové komponenty přijímají ID a parametry; inline URL, metoda, záhlaví a tělesné výplně jsou blokovány.", + "invalidRequestManifest": "Pojmenované požadavky musí být platná mapa požadavku. {value}", + "missingRequestId": "Tato síťová komponenta vyžaduje doslovný požadavek.", + "templateEmpty": "Zadejte JSX šablonu.", + "templateTooLong": "Šablona překračuje limit 50 000 znaků.", + "unknownRequest": "Žádný jmenovaný požadavek s ID \"{value}\" neexistuje." + } + }, + "workbench": { + "configure": "Konfigurace", + "sectionNavigation": "Vlastní sekce widgetů", + "widgetPreview": "Náhled widgetu", + "generalInformation": "Obecné informace", + "invalidWidget": "Neplatný widget", + "section": { + "general": "Obecné", + "sources": "Zdroje API", + "requests": "Žádosti", + "options": "Možnosti", + "jsx": "JSX", + "preview": "Náhled" + }, + "status": { + "unsaved": "Neuložené změny", + "invalid": "Potřebuje pozornost", + "ready": "Připraveno" + }, + "saveError": { + "title": "Widget nebyl uložen", + "description": "Opravte tyto chyby ověření a znovu uložte.", + "more": "+{count} další chyby jsou zobrazeny na pracovním stole.", + "errors": "Chyby ověření", + "copy": "Kopírovat chyby", + "copied": "Chyby zkopírovány" + }, + "action": { + "preview": "Test a náhled", + "previewLoading": "Testování požadavků" + }, + "requests": { + "title": "Pojmenované dotazy a akce", + "label": "Žádosti", + "description": "Dotazy načítají data; akce běží pouze po zásahu uživatele. Každá metoda HTTP je platná pro oba druhy." + }, + "options": { + "title": "Možnosti widgetu" + }, + "builder": { + "advancedManifest": "Pokročilé syrové manifest", + "advancedJson": "Vylepšený manifest JSON", + "manifestFilename": "widget.json", + "request": "Požádat o {count, number}", + "requestId": "ID požadavku", + "type": "Typ", + "method": "Metoda", + "source": "Zdroj API", + "run": "Spustit", + "runLoad": "Při načítání widgetu", + "runManual": "Z SubFetch", + "permission": "Oprávnění", + "path": "Cesta", + "pathDescription": "Použijte '{option:name}' pro možnosti widgetu a '{param:name}' pro vyvolání hodnot.", + "requestDetails": "Dotaz, tělo a chování", + "queryValues": "Dotaz na hodnoty", + "queryKey": "Klíč dotazu", + "queryKeyInvalid": "Použijte jedinečné ID, které začíná písmenem a obsahuje pouze písmena, čísla, - nebo _.", + "valueSource": "Zdroj hodnot", + "literal": "Litální", + "widgetOption": "Možnosti widgetu", + "invocationParameter": "Parametr pozvání", + "option": "Možnost", + "parameterName": "Název parametru", + "value": "Hodnota", + "removeQueryValue": "Odstranit hodnotu dotazu", + "addQueryValue": "Přidat hodnotu dotazu", + "jsonBody": "JSON tělo", + "jsonBodyDescription": "Nepovinné. Vložte $option a $param reference v libovolné hloubce.", + "insertOptionReference": "Vložit odkaz na možnost", + "insertParameterReference": "Vložit odkaz na parametr", + "confirmation": "Potvrzovací zpráva", + "invalidation": "Aktualizovat po úspěšném", + "invalidationDescription": "ID dotazu oddělených čárkami", + "noAuth": "Odeslat bez ověření zdroje", + "moveRequestUp": "Přesunout požadavek nahoru", + "moveRequestDown": "Přesunout požadavek dolů", + "removeRequest": "Odstranit požadavek", + "addRequest": "Přidat požadavek", + "optionName": "Název možnosti", + "label": "Popisek", + "control": "Ovládání", + "description": "Popis", + "default": "Výchozí", + "optionDetails": "Omezení a dynamická volba", + "minimum": "Minimální", + "maximum": "Maximální množství", + "step": "Krok", + "choiceLabel": "Název volby", + "choiceValue": "Hodnota volby", + "newChoice": "Nová volba", + "addChoice": "Přidat volbu", + "removeChoice": "Odstranit volbu", + "choicesRequest": "Načíst volby z požadavku", + "itemsPath": "Cesta k položkám", + "itemsPathPlaceholder": "položky (volitelné)", + "valuePath": "Cesta k hodnotě", + "labelPath": "Cesta popisku", + "group": "Skupina", + "advancedOption": "Pokročilá možnost", + "moveOptionUp": "Přesunout možnost nahoru", + "moveOptionDown": "Přesunout volbu dolů", + "removeOption": "Odebrat možnost", + "addOption": "Přidat možnost", + "invalidJson": "Neplatný JSON", + "invalidWidget": "Neplatný widget" + }, + "jsx": { + "title": "JSX šablona", + "label": "Šablona" + }, + "sources": { + "title": "Zdroje API a přihlašovací údaje", + "newName": "API {count, number}", + "duplicateSourceId": "API zdrojová ID musí být unikátní.", + "credentialRemoved": "Pověření odebráno", + "credentialRemovedDescription": "Uložená hodnota byla odstraněna.", + "primary": "Primární API", + "id": "ID zdroje", + "name": "Jméno", + "baseUrl": "Základní URL", + "baseUrlError": { + "invalid": "Zadejte úplnou adresu URL.", + "protocol": "Použít HTTP nebo HTTPS URL.", + "credentials": "Odebrat uživatelské jméno a heslo z této URL. Namísto toho nastavte níže uvedené přihlašovací údaje.", + "queryOrFragment": "Odstraňte řetězec dotazu nebo fragmenty z této základní URL. Přidejte hodnoty dotazu k pojmenovanému požadavku." + }, + "networkScope": "Přístup k síti", + "authentication": "Ověření", + "headerName": "Název záhlaví", + "queryParameter": "Parametr dotazu", + "configured": "Konfigurováno – uveďte náhradu", + "clear": "Jasno", + "remove": "Odstranit zdroj a jeho požadavky", + "advanced": "Rozšířené", + "add": "Přidat další zdroj API", + "sourceType": "Integrace", + "manualSource": "HTTP API", + "existingIntegration": "Stávající integrace", + "integrationType": "Typ integrace", + "selectIntegration": "Konfigurovaná integrace", + "noIntegrations": "Žádné odpovídající integrace nejsou k dispozici", + "integrationUnavailable": "Vybraná integrace již není k dispozici. Vyberte jinou integraci.", + "integrationDescription": "Používá uloženou integrační URL a přihlašovací údaje. Změny se aplikují automaticky. Pro spouštění požadavků je vyžadován úplný integrační přístup." + }, + "ai": { + "title": "Vytvořit nebo opravit s jakýmkoliv AI", + "description": "Nejdříve přidejte API dokumentaci URL, pokud ji máte. Pro opravy spusťte náhled, pokud je to možné. Zkopírujte výzvu do jakéhokoli A; může požádat o chybějící podrobnosti. Sem vložte svůj finální JSON.", + "request": "Co by měl tento widget dělat?", + "documentationUrl": "URL API dokumentace (volitelné)", + "paste": "Vložit", + "response": "Odpověď AI", + "manualCopyDescription": "Přístup ke schránce je nedostupný. Vyberte výzvu níže a zkopírujte ji ručně.", + "manualPasteDescription": "Přístup do schránky není k dispozici nebo kopírovaná odpověď vyžaduje korekci. Sem vložte JSON odpověď.", + "selectAll": "Vybrat vše", + "loadResponse": "Odezva na načtení", + "loaded": "Widget načten do editoru", + "invalidResponse": "Schránka neobsahuje platný v2 widget", + "invalidResponseDetail": "Odpověď AI je neplatná: {message}" + }, + "preview": { + "invalid": "Opravit chyby ověření pro zobrazení náhledu tohoto widgetu.", + "fixtureError": "Chyba náhledu", + "requestData": "Žádost o data", + "status": { + "idle": "Žádosti nebyly vyzkoušeny", + "loading": "Testování požadavků", + "success": "Všechny požadavky na zatížení byly úspěšné", + "error": "Jeden nebo více požadavků na zatížení se nezdařilo" + }, + "result": { + "loading": { + "title": "Testování API požadavků", + "description": "Homarr vytváří náhled relace a načítá data widgetu." + }, + "success": { + "title": "Náhled připraven", + "description": "{succeeded, plural, =0 {Tento widget nemá žádné požadavky na načítání.} one {Požadavek na načítání byl úspěšný.} other {Požadavky na načítání byly úspěšné.}} Otevřete Data pro kontrolu odpovědi." + }, + "error": { + "title": "Náhled dokončen s chybami požadavku", + "description": "{succeeded, number} uspěl a {failed, number} Selhalo. Otevřete data pro odpověď a podrobnosti o chybě." + } + }, + "instanceOptions": "Možnosti instance", + "liveActions": "Spustit akce proti nakonfigurovanému API", + "liveActionsDescription": "Vypnutí je bezpečná simulace. Zapnutí ovlivňuje skutečnou službu.", + "noActions": "Nejsou definovány žádné akce.", + "containedFailures": "Selhání běhu jsou obsažena v tomto widgetu. Požadované deníky nikdy neobsahují tajné hodnoty.", + "validation": { + "title": "Ověření", + "ready": "Definice widgetu je platná." + }, + "accessibility": { + "title": "Kontroly dostupnosti", + "ready": "Nebyla zjištěna žádná společná opomenutí přístupnosti.", + "pending": "Kontrola dostupnosti se spustí, když je definice widgetu platná.", + "imageAlt": "Přidejte alt text ke každému obrázku, pouze pro dekorativní obrázky.", + "actionIconLabel": "Přidat aria-label nebo název do každé Akční ikony.", + "inputLabel": "Přidat viditelný štítek nebo přístupné jméno ke každému vstupu." + }, + "journal": "Časopis žádosti o opravu", + "actionParameters": "Parametry akce (JSON)", + "invalidParameters": "Použijte uvedené typy řetězce, čísla a logických parametrů.", + "runDestructive": "Spustit destruktivní akci", + "runAction": "Spustit akci", + "deleteConfirmation": "Tato náhled změní vzdálená data prostřednictvím nakonfigurovaného API.", + "simulated": "simulovaná akce", + "httpStatus": "HTTP {status, number}", + "tab": { + "widget": "Widget", + "data": "Údaje", + "options": "Možnosti", + "state": "Stav úlohy", + "actions": "Ovládací prvky", + "diagnostics": "Diagnostika" + }, + "size": { + "compact": "Kompaktní", + "standard": "Standardní", + "wide": "Široký" + }, + "fixture": { + "live": "Živé", + "loading": "Načítání", + "empty": "Prázdné", + "error": "Chyba" + } + } + }, + "preview": { + "request": { + "permission": { + "view": "Zobrazit", + "modify": "Upravit", + "full": "Plné" + } + } + }, + "notification": { + "created": "Widget „{name}“ byl úspěšně vytvořen.", + "updated": "Widget „{name}“ byl úspěšně aktualizován.", + "deleted": "Widget „{name}“ byl odstraněn.", + "imported": "Widget byl úspěšně importován.", + "migrated": "Starší widget byl úspěšně migrován. Stávající umístění tabule nyní používá definici v2.", + "migrationError": "Nepodařilo se migrovat starší widget. Ujistěte se, že soubor používá schéma homarr-custom-widget-v2.", + "legacyDefinitionCopied": "Původní obsah widgetu byl zkopírován. Uložené hodnoty pověření nejsou zahrnuty.", + "legacyDefinitionCopyError": "Nepodařilo se zkopírovat původní obsah widgetu.", + "migrationPromptCopied": "Byla zkopírována výzva k opětovnému přechodu. Vložte ji do metody LLM, zkopírujte její jedinou odpověď JSON a zvolte zde vložit migrovaný widget.", + "migrationPromptCopyError": "Nepodařilo se zkopírovat výzvu k migraci.", + "sourcesConfigured": "Zdroje a přihlašovací údaje byly uloženy.", + "sourceConfigurationError": "Nepodařilo se nakonfigurovat zdroje widgetu.", + "aiPromptCopiedWithCount": "AI výzva zkopírována do schránky ({count, number} znaků).", + "aiPromptCopyError": "Výzvu se nepodařilo zkopírovat do schránky. Váš prohlížeč tuto funkci možná nepodporuje.", + "aiPromptSent": "Výzva odeslána. Můžete pokračovat v úpravách, zatímco asistent pracuje na pozadí.", + "updateError": "Widget se nepodařilo aktualizovat. Vaše změny nebyly uloženy.", + "importError": "Widget se nepodařilo importovat. Ujistěte se, že soubor je platný export vlastního widgetu JSON.", + "exportError": "Widget se nepodařilo exportovat.", + "duplicated": "Widget „{name}“ byl duplikován.", + "duplicateError": "Widget se nepodařilo duplikovat.", + "toggleError": "Stav widgetu se nepodařilo přepnout.", + "deleteError": "Widget se nepodařilo odstranit.", + "previewError": "Náhled se nepodařilo načíst. Zkontrolujte URL a zkuste to znovu." + }, + "importReview": { + "title": "Zkontrolovat vlastní import widgetu", + "description": "Zkontrolujte, kde se tento widget připojuje a ke které desce je vyžadováno jeho ovládání před jeho importem.", + "migrationTitle": "Recenze migrována náhrada v2", + "migrationDescription": "Zkontrolovat a potvrdit tuto vygenerovanou definici v2. Potvrzení atomicky nahrazuje zachovaný záznam v1 a zároveň uchovává umístění existujících desek propojených se stejným ID widgetu.", + "fileLabel": "Vyberte vlastní JSON soubor widgetu", + "name": "Název úlohy", + "origin": "Základní původ", + "authentication": "Ověření", + "networkScope": "Oblast působnosti sítě", + "methods": "HTTP metody", + "permissions": "Požadovaná oprávnění na desce", + "sourceSetup": { + "title": "Konfigurace zdrojů API", + "description": "Potvrďte, kde se tento widget spojuje a přidává přihlašovací údaje. Soukromé a opakované URL adresy jsou specifické pro vaši instalaci Homarru.", + "suggestedUrl": "Navrhovaná URL", + "confirmUrl": "Potvrzuji, že tato URL adresa serveru je správná pro mou instalaci Homarr", + "ready": "Adresa URL je připravena", + "needsUrl": "Potvrdit URL", + "credentialsMissing": "Chybí pověření", + "credentialsOptional": "Bez pověření můžete nainstalovat a nakonfigurovat později, ale požadavky nebudou úspěšné, dokud nebudou přidány." + }, + "actionWarning": { + "title": "Tento widget může změnit vzdálená data", + "description": "Zkontrolovat každou pojmenovanou akci, zděděné přihlašovací údaje a destruktivní potvrzení po importu. Tajná tajemství nejsou součástí souboru." + }, + "cancel": "Zrušit import", + "confirm": "Importovat widget", + "confirmMigration": "Potvrdit výměnu v2" + }, + "secret": { + "apiKey": "API klíč nebo token", + "username": "Uživatelské jméno", + "password": "Heslo", + "savedPlaceholder": "••••••• (uloženo, ponechte prázdné pro zachování)" + } + }, + "workshop": { + "title": "Workshop", + "browseWorkshop": "Procházet Workshop", + "openCommunity": "Otevřít dílnu", + "openOnWorkshop": "Otevřít {title} na webu Workshopu", + "back": "Zpět na Workshop", + "search": "Hledat widgety", + "searchCss": "Hledat CSS motivy", + "sort": "Seřadit", + "sortTop": "Nejlépe hodnocené", + "sortNewest": "Nejnovější", + "listAriaLabel": "Widgety Workshopu", + "listAriaLabelCss": "CSS témata Workshopu", + "empty": "Tomuto hledání neodpovídají žádné widgety.", + "emptyDescription": "Zde se zobrazí widgety komunity publikované na Workshopu.", + "emptyFilteredTitle": "Žádné widgety neodpovídají tomuto hledání", + "emptyFilteredDescription": "Žádný widget dílny neodpovídá \"{search}\".", + "emptyCss": "Hledání neodpovídají žádné CSS šablony.", + "unavailableTitle": "Zdá se, že Homarr Workshop není k dispozici", + "unavailable": "Služba komunity může být dočasně vypnuta. Zkuste to znovu za chvíli. Nainstalované widgety nejsou dotčeny.", + "loadError": "Tento příspěvek nelze načíst.", + "noDescription": "Bez popisu", + "author": "od {name}", + "communityMember": "Člen komunity", + "outdated": "Zastaralé", + "outdatedWarning": "Autor označil tento příspěvek jako zastaralý. Před importem jej pečlivě zkontrolujte.", + "score": "Bod: {count, number}", + "upvote": "Upvote", + "downvote": "Hlasovat proti", + "voteError": "Hlasování nelze uložit.", + "signIn": "Přihlásit se pomocí GitHub", + "signInError": "Přihlášení k GitHubu se nezdařilo. Zkontrolujte, zda je nastaven OAuth poskytovatel a zda jsou povolena vyskakovací okna.", + "signOut": "Odhlásit se", + "signInHint": "Pro hlasování se přihlaste k hlasování. Instalace nevyžaduje účet Workshopu.", + "securityNotice": "Widgety Workshop mohou zavolat k jejich deklarovaným zdrojům API a provádět vyhlášené akce s osobními údaji, které nastavíte lokálně. Tajná zařízení nejsou nikdy zahrnuta.", + "securityNoticeCss": "CSS komunity může změnit vzhled a použitelnost desky. Před importem jej zkontrolujete; nic se neuloží, dokud neuložíte nastavení desky.", + "install": "Instalovat", + "installReviewTitle": "Zkontrolovat před instalací", + "installError": "Tento widget nelze nainstalovat", + "installErrorDescription": "Odeslání dílny není platný vlastní JSX v2.", + "useCss": "Import CSS", + "importCss": "Importovat CSS z Workshopu", + "importCssConfirm": "Nahradit aktuální vlastní CSS \"{title}\"? Nic není uloženo, dokud neuložíte nastavení tabule.", + "screenshotAlt": "Snímek obrazovky {title} {count, number}", + "screenshotViewer": "{title} prohlížeč snímků obrazovky", + "screenshotsLabel": "{title} snímky obrazovky", + "zoomScreenshot": "Zobrazit celou velikost", + "previousScreenshot": "Předchozí snímek obrazovky", + "nextScreenshot": "Další snímek obrazovky", + "showScreenshotThumbnails": "Zobrazit náhledy snímku obrazovky", + "hideScreenshotThumbnails": "Skrýt miniatury snímku obrazovky", + "closeScreenshotViewer": "Zavřít prohlížeč snímků obrazovky", + "technicalDetails": "Technické podrobnosti", + "sourceCode": "Vstup do dílny", + "export": "Export", + "report": "Nahlásit", + "reportTitle": "Odeslání zprávy", + "reportReason": "Důvod", + "reportExplanation": "Co by měli moderátoři dílny vědět?", + "reportSend": "Odeslat zprávu", + "reportSent": "Zpráva odeslána", + "reportSentDescription": "Moderátoři workshopu mohou nyní zkontrolovat tento příspěvek.", + "reportCount": "{count, plural, one {# nahlaste} other {# nahlásí}}", + "reportWarning": "{count, plural, one {Tato šablona obsahuje # zpráv pro komunitu.} other {Tato šablona obsahuje # zpráv pro komunitu.}} Zůstává instalovatelný, ale nejprve byste měli zkontrolovat jeho obsah.", + "reportVisibility": "Podrobnosti reportu jsou viditelné pouze pro tohoto autora a administrátora Workshopu.", + "reportCategory": { + "outdated": "Zastaralé nebo již nefungující", + "malicious": "Škodlivý", + "spam": "Nevyžádaná pošta", + "copyright": "Autorská práva", + "inappropriate": "Nevhodné", + "other": "Ostatní" + }, + "publish": { + "title": "Publikovat do Workshopu", + "introTitle": "Sdílet tento widget s komunitou", + "introDescription": "Homarr vyexportuje bezplatné kopii aktuálního widgetu. Přidejte jasné podrobnosti seznamu, aby lidé věděli, co dělají, před instalací.", + "listingDetails": "Výpis dílny", + "listingDetailsDescription": "Tyto detaily se zobrazují veřejně vedle definice exportovaného widgetu.", + "success": "Okamžitě zveřejněno. Členové komunity mohou nyní nainstalovat a nahlásit tento widget.", + "successTitle": "Váš widget je živý", + "manageDescription": "Otevřete nahrávku a aktualizujte její seznam, recenzované zprávy, označte ji zastaralou nebo ji odstraníte. Správa submitů je zpracována přímo na webu Workshopu.", + "viewSubmission": "Zobrazit a spravovat příspěvky", + "done": "Hotovo", + "signInHint": "Přihlaste se pro publikování pod vaší identitou Workshopu.", + "titleField": "Název", + "descriptionField": "Popis", + "screenshots": "Snímek obrazovky", + "screenshotsDescription": "Až pět PNG, JPEG nebo WebP obrázků", + "screenshotsPlaceholder": "Vybrat snímky obrazovky", + "invalidScreenshot": "Používejte PNG, JPEG nebo WebP obrázky ne větší než {maxSize}.", + "privateSourceWarning": "Tento widget obsahuje soukromé zdrojové URL pro: {sources}. Před zveřejněním nahradte osobní hostitele nebo IP adresy bezpečnými servisními zástupci.", + "reviewSourcesTitle": "Zkontrolovat URL privátního zdroje", + "privateSourceConfirmation": "Přečetl jsem si tyto URL adresy a nezobrazují podrobnosti o soukromé infrastruktuře", + "action": "Publikovat nyní", + "publicationNote": "Publikování je okamžité. Odeslání můžete spravovat později na Workshopu.", + "definitionChanged": "Při přípravě publikace se widget změnil. Zkontrolujte znovu své privátní URL adresy a zkuste to znovu.", + "error": "Zveřejnění se nezdařilo" } }, "integration": { + "completion": { + "modalTitle": "Služba je připravena", + "title": "{name} je připojen", + "description": "Připojení prošlo testem. Vyberte, co se má zobrazit na této desce dále.", + "connectionReady": "Připojení k službě je připraveno", + "appReady": "Zástupce aplikace je připraven", + "compatibleWidgets": "{count, plural, =0 {Žádné kompatibilní widgety} one {# kompatibilní widget} other {# kompatibilní widgety}} k dispozici", + "chooseWidget": "Vybrat widget", + "recipes": { + "title": "Doporučeno pro tuto desku", + "description": "Na základě připojených služeb a widgetů již v této tabuli.", + "newConnectionReason": "Nyní k dispozici prostřednictvím {integration}", + "existingConnectionReason": "Pracuje se službou, kterou jste již připojili", + "dismiss": "Odmítnout doporučení pro tuto službu na tomto fóru" + } + }, "page": { "list": { - "title": "Integrace", + "ariaLabel": "Nastavené integrace", "search": "Prohledat integrace", + "scopedNote": "Zobrazení pouze integrace, které můžete spravovat.", "noResults": { - "title": "Zatím nejsou žádné integrace" + "title": "Zatím nejsou žádné integrace", + "description": "Připojte službu pro použití dat a akcí ve widgetech Homarru.", + "action": "Vytvořte svou první integraci", + "filteredTitle": "Žádné integrace neodpovídají vašemu hledání", + "filteredDescription": "Žádné integrace neodpovídají \"{search}\". Zkuste jiný název, typ, nebo URL.", + "createOnlyTitle": "Můžete přidat pouze integrace", + "createOnlyDescription": "Vaše oprávnění umožňují vytvářet integrace, ale neupravovat existující integrace. Požádejte správce o přístup k těm, které potřebujete." } }, "create": { "title": "Nová integrace {name}", "notification": { "success": { - "title": "Vytvoření bylo úspěšné", "message": "Integrace byla úspěšně vytvořena" }, "error": { - "title": "Vytvoření se nezdařilo", "message": "Integraci se nepodařilo vytvořit" } }, @@ -729,11 +1339,9 @@ "title": "Upravit integraci {name}", "notification": { "success": { - "title": "Změny byly úspěšně aplikovány", "message": "Integrace byla úspěšně uložena" }, "error": { - "title": "Nepodařilo se uložit změny", "message": "Integraci se nepodařilo uložit" } }, @@ -750,23 +1358,15 @@ "message": "Jste si jisti, že chcete vymazat integraci {name}?", "notification": { "success": { - "title": "Odstránění bylo úspěšné", "message": "Integrace byla úspěšně smazána" }, "error": { - "title": "Smazání se nezdařilo", "message": "Nepodařilo se odstranit integraci" } } } }, "field": { - "name": { - "label": "Název" - }, - "url": { - "label": "Url" - }, "attemptSearchEngineCreation": { "label": "Vytvořit vyhledávač", "description": "Integraci „{kind}“ lze použít s vyhledávači. Zaškrtnutím této možnosti vyhledávač automaticky nakonfigurujete." @@ -778,6 +1378,10 @@ "label": "Vytvořit aplikaci", "description": "Vytvoří aplikaci se stejným názvem a ikonou jako integrace. Pokud chcete aplikaci vytvořit s adresou URL integrace, ponechte níže uvedené pole prázdné." }, + "linkApp": { + "label": "Propojit existující aplikaci", + "description": "Připojte tuto integraci k aplikaci, kterou již můžete použít." + }, "appHref": { "placeholder": "Vlastní URL aplikace" }, @@ -791,7 +1395,11 @@ "grid": { "widgetCount": "{count} widgetů", "noWidgets": "Žádné widgety", - "detected": "Detekováno přes Docker" + "detected": "Detekováno přes Docker", + "connected": "{count, plural, one {# připojeno k} other {# připojeno k}}", + "tiedWidgets": "Vázané widgety", + "more": "+{count} další", + "loadError": "Integrace nelze načíst. Zkuste to znovu před vytvořením nového připojení." }, "category": { "dnsHole": "DNS", @@ -822,7 +1430,10 @@ "analytics": "Analytika", "vpn": "VPN", "mediaLibrary": "Knihovna médií", - "uptimeMonitoring": "Monitorování dostupnosti" + "uptimeMonitoring": "Monitorování dostupnosti", + "beszel": "Beszel", + "systemMonitoring": "Monitorování systému", + "security": "Bezpečnost" }, "testConnection": { "action": { @@ -1107,6 +1718,22 @@ "slug": { "label": "Identifikátor stránky se stavem", "newLabel": "Nový identifikátor stránky se stavem" + }, + "wazuhIndexerUrl": { + "label": "URL indexu", + "newLabel": "URL nového indexování" + }, + "wazuhIndexerUsername": { + "label": "Uživatelské jméno pro indexování", + "newLabel": "Nové uživatelské jméno indexátoru" + }, + "wazuhIndexerPassword": { + "label": "Indexové heslo", + "newLabel": "Nové heslo pro indexování" + }, + "wazuhDashboardUrl": { + "label": "Adresa URL hlavního panelu (volitelné)", + "newLabel": "Nová URL adresa hlavního panelu" } } }, @@ -1115,54 +1742,19 @@ "interact": "Interakce s integracemi", "full": "Plný přístup k integracím" }, - "audiobookshelf": { - "name": "Audiobookshelf", - "description": "Samoobslužný server audioknih a podcastů" - }, - "navidrome": { - "name": "Navidrome", - "description": "Samoobslužný server pro streamování hudby s kompatibilitou s rozhraním Subsonic API" - }, - "uptimeKuma": { - "name": "Uptime Kuma", - "description": "Samoobslužné monitorování dostupnosti s veřejnými stránkami se stavem", - "secret": { - "slug": { - "description": "Identifikátor vaší veřejné stránky se stavem. Pokud není nastaven, použije se „default“." - }, - "apiKey": { - "description": "Volitelný klíč API pro ověřený přístup k /metrics" - } - } - }, - "traefik": { - "name": "Traefik", - "description": "Cloudový reverzní proxy server a nástroj pro vyvažování zátěže" - }, - "paperlessNgx": { - "name": "Paperless-ngx", - "description": "Systém pro správu dokumentů k archivaci a organizaci naskenovaných dokumentů" - }, - "patchmon": { - "name": "PatchMon", - "description": "Správa oprav a monitorování hostitelů Linuxu" - }, - "bazarr": { - "name": "Bazarr", - "description": "Doplňková aplikace k Sonarru a Radarru, která spravuje a stahuje titulky" - }, - "wud": { - "name": "Co je Docker nahoru", - "description": "Sledujte, které z vašich kontejnerů v Dockeru mají k dispozici aktualizace obrázků" + "llamacpp": { + "name": "llama.cpp", + "description": "Monitorovat lokální llama.cpp llama-server: zdraví, model a generační metrika" } }, "media": { "plural": "Média", "search": "Najít mediální soubor", "field": { - "name": "Název", + "preview": "Náhled", "size": "Velikost", - "creator": "Vytvořil/a" + "creator": "Vytvořil/a", + "actions": "Ovládací prvky" }, "action": { "upload": { @@ -1190,10 +1782,12 @@ } }, "copy": { - "label": "Zkopírovat URL" + "label": "Zkopírovat URL", + "labelNamed": "Kopírovat URL pro {name}" }, "open": { - "label": "Otevřít média" + "label": "Otevřít média", + "labelNamed": "Otevřít {name}" } }, "noResults": { @@ -1208,7 +1802,6 @@ "add": "Přidat", "apply": "Použít", "backToOverview": "Zpět na přehled", - "skip": "Přeskočit", "change": "Změnit", "create": "Vytvořit", "createAnother": "Vytvořit a začít znovu", @@ -1231,16 +1824,31 @@ "tryAgain": "Zkusit znovu", "loading": "Načítání", "show": "Zobrazit", - "hide": "Skrýt" + "hide": "Skrýt", + "undo": "Zpět", + "editNamed": "Upravit {name}", + "deleteNamed": "Odstranit {name}", + "clearSearch": "Vymazat hledání", + "copy": "Kopírovat", + "copied": "Zkopírováno", + "refresh": "Aktualizovat" + }, + "pagination": { + "pageOf": "Strana {page} z {totalPages}" }, "here": "zde", + "serviceUrlTemplate": { + "serverTitle": "Obvyklá adresa serveru", + "urlModeLabel": "Schéma adresy služby", + "hostPort": "Stejný hostitel, různé porty", + "subdomain": "Jedna subdoména na službu", + "path": "Jedna cesta na službu" + }, "iconPicker": { "label": "URL ikony", + "description": "Vyhledejte knihovnu, vložte URL obrázku, nebo nahrajte soubor.", "header": "Hledat {countIcons} obrázky podle jména", "headerLoading": "Hledat obrázky podle jména", - "noResults": "Žádné ikony neodpovídají „{search}“.", - "error": "Ikony se nepodařilo načíst.", - "description": "Vyhledejte knihovnu, vložte URL obrázku, nebo nahrajte soubor.", "clear": "Vymazat obrázek", "uploadImage": "Nahrát obrázek", "results": "Výsledky vyhledávání obrázků", @@ -1249,7 +1857,9 @@ "otherImages": "Ostatní obrázky", "urlLoading": "Kontrola obrázku…", "urlReady": "Obrázek je připraven k použití", - "urlError": "Tento obrázek nelze načíst. Zkontrolujte URL a zkuste to znovu." + "urlError": "Tento obrázek nelze načíst. Zkontrolujte URL a zkuste to znovu.", + "noResults": "Žádné ikony neodpovídají „{search}“.", + "error": "Ikony se nepodařilo načíst." }, "colorScheme": { "options": { @@ -1261,7 +1871,6 @@ "information": { "min": "Min", "max": "Max", - "days": "Dnů", "hours": "Hodin", "minutes": "Minut" }, @@ -1298,16 +1907,16 @@ }, "userAvatar": { "menu": { - "switchToDarkMode": "Přepnout do tmavého režimu", - "switchToLightMode": "Přepnout do světlého režimu", + "open": "Otevřít nabídku účtu", "management": "Správa", - "docker": "Docker", "preferences": "Vaše předvolby", "logout": "Odhlásit se", "login": "Přihlásit se", "homeBoard": "Vaše domácí plocha", - "loggedOut": "Odhlášeno", - "updateAvailable": "K dispozici je {countUpdates} aktualizací: {tag}" + "updateAvailable": "K dispozici je {countUpdates} aktualizací: {tag}", + "assistant": "Asistent", + "assistantThinking": "Myšlenka", + "modifier": "Mod" } }, "dangerZone": "Nebezpečná zóna", @@ -1355,13 +1964,66 @@ "kilometersPerHour": "km/h", "milesPerHour": "mph" } + }, + "widgetQuery": { + "loading": "Načítání dat widgetu" + }, + "total": "Celkem", + "filesystemUsage": "{count, plural, one {Zobrazit použití pro # souborový systém} other {Zobrazit použití pro # souborových systémů}}", + "field": { + "name": "Název úlohy" + }, + "label": { + "new": "Nové" + }, + "entity": { + "apps": "Aplikace", + "boards": "Plochy", + "certificates": "Certifikáty", + "customWidgets": "Vlastní widgety", + "groups": "Skupiny", + "integrations": "Integrace", + "invites": "Pozvánky", + "logs": "Logy", + "media": "Média", + "searchEngines": "Vyhledávače", + "tasks": "Úkoly", + "users": "Uživatelé" } }, "section": { - "dynamic": { + "option": { + "showLabel": { + "label": "Zobrazit štítek", + "description": "Zobrazit štítek kontejneru nad jeho obsahem." + }, + "collapsible": { + "label": "Povolit sbalení", + "description": "Nechat diváky rozšiřovat a zhroutit tento kontejner." + }, + "showOpenAll": { + "label": "Zobrazit akci otevřeného vše", + "description": "Zobrazit akci, která otevírá každou aplikaci v tomto kontejneru v nových panelech." + }, + "scrollable": { + "label": "Posunout", + "description": "Uchovávejte tento kontejner na nastavené velikosti a posouvejte jeho obsah místo pěstování, aby se jej přizpůsobil." + } + }, + "action": { + "openAllInNewTabsFor": "Otevřít všechny aplikace v {name} v záložkách" + }, + "openAllInNewTabs": { + "title": "Otevřít vše v záložkách", + "text": "Některé prohlížeče mohou z bezpečnostních důvodů blokovat hromadné otevírání panelů. Homarr nemohl otevřít všechna okna, protože váš prohlížeč tuto akci zablokoval. Povolte prosím možnost \"Otevřít vyskakovací okna\" a zkuste to znovu." + }, + "container": { + "untitled": "Kontejner bez názvu", "action": { - "create": "Nová dynamická sekce", - "remove": "Odstranit dynamickou sekci" + "create": "Nový kontejner", + "remove": "Odstranit kontejner", + "expand": "Rozbalit", + "collapse": "Sbalit" }, "option": { "title": { @@ -1371,59 +2033,16 @@ "label": "Vlastní CSS třídy" }, "borderColor": { - "label": "Barva okraje" + "label": "Barva ohraničení" } }, "remove": { - "title": "Odstranit dynamickou sekci", - "message": "Jste si jisti, že chcete odstranit tuto dynamickou sekci? Položky budou přesunuty na stejné místo v nadřazené sekci." - } - }, - "category": { - "field": { - "name": { - "label": "Název" - } - }, - "action": { - "create": "Nová kategorie", - "edit": "Přejmenovat kategorii", - "remove": "Odstranit kategorii", - "moveUp": "Posunout nahoru", - "moveDown": "Posunout dolů", - "createAbove": "Nová kategorie nad", - "createBelow": "Nová kategorie pod", - "openAllInNewTabs": "Otevřít vše na kartách" - }, - "create": { - "title": "Nová kategorie", - "submit": "Přidat kategorii" - }, - "remove": { - "title": "Odstranit kategorii", - "message": "Jste si jisti, že chcete odstranit kategorii {name}?" - }, - "edit": { - "title": "Přejmenovat kategorii", - "submit": "Přejmenovat kategorii" - }, - "menu": { - "label": { - "create": "Nová kategorie", - "changePosition": "Změnit pozici", - "settings": "Nastavení" - } - }, - "openAllInNewTabs": { - "title": "Otevřít vše na kartách", - "text": "Některé prohlížeče mohou z bezpečnostních důvodů blokovat hromadné otevírání karet. Homarr nemohl otevřít všechna okna, protože prohlížeč tuto akci zablokoval. Povolte možnost „Otevírat vyskakovací okna“ a zkuste to znovu." + "message": "Odstranit tento kontejner? Jeho obsah se přesune do okolí." } } }, "item": { "action": { - "create": "Nová položka", - "import": "Importovat položku", "edit": "Upravit položku", "moveResize": "Přesunout / změnit velikost položky", "duplicate": "Duplikovat položku", @@ -1432,7 +2051,7 @@ "menu": { "label": { "settings": "Nastavení", - "refresh": "Obnovit", + "settingsFor": "Nastavení pro {name}", "options": "Možnosti", "actions": "Akce" }, @@ -1441,21 +2060,96 @@ "error": "Chyba", "loading": "Načítání", "idle": "Nečinný" + }, + "notification": { + "saveError": { + "title": "Widget nelze uložit", + "message": "Změny widgetu byly vráceny" + } } }, "create": { "title": "Vyberte položku k přidání", "search": "Filtrovat položky", - "addToBoard": "Přidat na plochu" + "addToBoard": "Přidat na plochu", + "addAtPosition": "Přidat položku zde", + "destination": { + "label": "Přidat do", + "description": "Vyberte, kde se má zobrazit widget. Stále ji můžete přesunout později.", + "mainCanvas": "Hlavní plátno", + "leftRail": "Levá kolejnice", + "rightRail": "Pravá kolejnice" + }, + "connectionStatus": { + "ready": "Připraveno", + "needsSetup": "Vyžaduje nastavení", + "noConnectionRequired": "Není vyžadováno žádné připojení" + }, + "customWidget": "Vlastní widget", + "standalone": "Samostatné", + "missingIntegration": { + "title": "Nejdříve připojte službu", + "noPermission": "Tento widget vyžaduje kompatibilní připojení k službě. Požádejte správce o připojení a zkuste to znovu." + }, + "notification": { + "success": { + "title": "Widget přidán", + "message": "{name} byl přidán do této desky.", + "relocatedMessage": "{name} byl přidán do {destination} , protože vybraná destinace nebyla k dispozici." + }, + "error": { + "title": "Položku nelze přidat", + "message": "Položka nemohla být přidána do tohoto fóra" + } + } + }, + "selection": { + "summary": "{count, plural, one {# vybraných položek} other {# vybraných položek}}", + "selected": "{count, plural, one {# vybráno} other {# vybráno}}", + "copy": "Kopírovat", + "copied": "{count, plural, one {# položka zkopírována do schránky} other {# položek zkopírováno do schránky}}", + "copyError": "Vybrané položky nelze zkopírovat. Váš prohlížeč nemusí povolit přístup do schránky.", + "paste": "Vložit", + "pasteShortcut": "Zde vložte zkopírované položky (Ctrl / + V)", + "pasted": "{count, plural, one {# položka vložena} other {# položek vložilo}}", + "pasteError": "Schránka nemohla být přečtena. Váš prohlížeč nemusí povolit přístup do schránky.", + "pasteInvalid": "Schránka neobsahuje platné položky Homarr desky.", + "pasteUnavailable": "Kopírované položky se nevešou do této tabulky.", + "removed": "{count, plural, one {# položka odstraněna} other {# položek odebráno}}", + "move": "Přesunout", + "moveTo": "Přesunout vybrané položky", + "delete": "Odstranit", + "clear": "Vymazat výběr", + "clearShortcut": "Vymazat výběr (Escape)", + "saveErrorTitle": "Položky nelze aktualizovat", + "saveErrorMessage": "Změny nelze uložit. Tabule byla obnovena.", + "moveUnavailableTitle": "Nelze přesunout vybrané položky", + "moveUnavailableMessage": "Cíl nemá dostatek místa pro celý výběr." }, "moveResize": { "title": "Přesunout / změnit velikost", + "entryLabel": "{name}, sloupec {column}, řádek {row}", + "target": { + "numbered": "{name}, cíl {index}", + "located": "{name}, {location}, cíl {index}" + }, + "keyboard": { + "instructions": "Stisknutím klávesy Enter nebo mezery zahájíte editaci klávesnice. Pro přesunutí použijte klávesy se šipkami, klávesy Shift plus pro změnu velikosti a úniku zastavíte.", + "started": "Úprava klávesnice byla spuštěna. Pro přesunutí použijte klávesy se šipkami, Shift plus šipky změníte velikost a únik zastavíte.", + "stopped": "Editace klávesnice byla zastavena.", + "boundary": "Tato změna neodpovídá této sekci." + }, "field": { + "section": { + "label": "Sekce nebo železnice" + }, "width": { - "label": "Šířka" + "label": "Šířka", + "shortLabel": "ZA" }, "height": { - "label": "Výška" + "label": "Výška", + "shortLabel": "H" }, "xOffset": { "label": "Posun X" @@ -1469,18 +2163,36 @@ "title": "Upravit položku", "tab": { "widget": "Upravit widget", - "app": "Upravit aplikaci" + "app": "Upravit aplikaci", + "integration": "Upravit integraci" }, "app": { "propagationNotice": "Změny této aplikace se projeví všude, kde je použita na všech plochách." }, + "integration": { + "action": "Upravit připojení", + "description": "Otestujte nebo opravte vybrané připojení bez opuštění tohoto widgetu.", + "editLabel": "Upravit integraci {name}", + "fullAccessRequired": "Je vyžadován úplný přístup", + "propagationNotice": "Změny v této integraci platí všude, kde se používá. Připojení je otestováno před uložením.", + "loading": "Načítání integrace", + "loadError": "Tuto integraci nelze načíst. Zkuste to znovu před změnou nastavení připojení." + }, + "preview": { + "integrationRequired": "Vyberte připojení k náhledu tohoto widgetu.", + "size": "Velikost souboru" + }, + "settings": { + "label": "Nastavení widgetu" + }, "advancedOptions": { "label": "Pokročilé možnosti", "title": "Pokročilé možnosti položky" }, "field": { "integrations": { - "label": "Integrace" + "label": "Integrace", + "removeLabel": "Odstranit integraci {name}" }, "title": { "label": "Název" @@ -1494,17 +2206,18 @@ } }, "remove": { - "title": "Odebrat položku", "message": "Jste si jisti, že chcete tuto položku odstranit?" + }, + "advancedFocus": { + "open": "Otevřít rozšířené zobrazení", + "close": "Zavřít rozšířené zobrazení", + "label": "{widget} pokročilý pohled" } }, "widget": { "integrationSelect": { "configureIntegrationFirst": "Nejprve připojte integraci", - "loading": "Načítání...", - "placeholder": "Vyberte možnost", - "noResults": "Nebyly nalezeny žádné výsledky", - "loadError": "Možnosti se nepodařilo načíst" + "placeholder": "Vyberte možnost" }, "app": { "name": "App", @@ -1513,9 +2226,6 @@ "appId": { "label": "Vyberte aplikaci" }, - "openInNewTab": { - "label": "Otevřít na nové kartě" - }, "showTitle": { "label": "Zobrazit název aplikace" }, @@ -1523,11 +2233,8 @@ "label": "Povolit kontrolu stavu" }, "layout": { - "label": "Rozložení", "option": { - "row": "Vodorovně", "row-reverse": "Vodorovně (obráceně)", - "column": "Svisle", "column-reverse": "Svisle (obráceně)" } }, @@ -1552,23 +2259,60 @@ "name": "Záložky", "description": "Zobrazuje odkazy na více aplikací", "option": { - "title": { - "label": "Název" + "showTitle": { + "label": "Zobrazit název widgetu" + }, + "titleSize": { + "label": "Velikost názvu widgetu (px)" }, "layout": { "label": "Rozložení", "option": { - "row": { - "label": "Horizontální" - }, - "column": { - "label": "Vertikální" - }, - "grid": { - "label": "Mřížka" + "adaptive": { + "label": "Adaptivní" }, "gridHorizontal": { "label": "Vodorovná mřížka" + }, + "icons": { + "label": "Ikony" + } + } + }, + "variant": { + "label": "Vzhled", + "option": { + "soft": { + "label": "Měkké" + }, + "filled": { + "label": "Vyplněné" + }, + "outline": { + "label": "Obrys" + }, + "plain": { + "label": "Jednoduchý" + } + } + }, + "spacing": { + "label": "Mezery mezi kartami", + "option": { + "xs": { + "label": "Mimořádně malé" + }, + "sm": { + "label": "Malé" + }, + "md": { + "label": "Střední" + }, + "lg": { + "label": "Velké" + }, + "xl": { + "label": "Extra velké" } } }, @@ -1581,17 +2325,28 @@ "hideHostname": { "label": "Skrýt názvy hostitelů" }, - "openNewTab": { - "label": "Otevřít na nové kartě" - }, "withBorder": { "label": "Zobrazit okraj" }, + "grow": { + "label": "Rozbalit karty na řádek" + }, + "customUrls": { + "label": "Vlastní odkazy" + }, "items": { "label": "Záložky", - "add": "Přidat záložku" + "remove": "Odstranit záložku", + "apps": { + "label": "Přidat záložky", + "description": "Vložte URL nebo najděte existující aplikace. Přetažením záložek níže je změníte.", + "placeholder": "Vložit URL nebo vyhledávací aplikace", + "addUrl": "Přidat tuto adresu URL", + "hint": "Stisknutím klávesy Enter přidáte URL. Vložte URL oddělené čárkami nebo jednou za řádek pro přidání řady." + } } - } + }, + "empty": "Přidat URL nebo aplikaci v nastavení widgetu" }, "archiveTeamWarrior": { "name": "ArchiveTeam Warrior", @@ -1600,33 +2355,61 @@ "showBroadcastMessage": { "label": "Zobrazit vysílané zprávy" } + }, + "noProjectSelected": "Nebyl vybrán žádný projekt", + "runnerStatus": "Runner: {status}", + "projectId": "Projekt: {id}", + "sessionReceived": "Přijata relace: {value}", + "sessionSent": "Relace odeslána: {value}", + "sessionId": "Relace: {id}", + "startedAt": "Zahájeno {date}", + "emptyItems": "Žádné aktivní nebo poslední úlohy v tomto snímku", + "metric": { + "running": "Běží", + "completed": "Hotovo", + "failed": "Selhalo", + "canceled": "Zrušeno", + "download": "Stáhnout", + "upload": "Nahrát" + }, + "status": { + "running": "Běží", + "completed": "Hotovo", + "failed": "Selhalo", + "canceled": "Zrušeno", + "stopped": "Zastaveno", + "idle": "Nečinný", + "unknown": "Neznámý" + } + }, + "wud": { + "name": "Co je Docker nahoru", + "description": "Zobrazit, kolik sledovaných kontejnerů je k dispozici aktualizace.", + "title": "Co je Docker nahoru", + "monitored": "Monitorováno", + "updatesAvailable": "{count, plural, one {K dispozici je # aktualizace} other {# dostupných aktualizací}}", + "updateAvailable": "K dispozici je aktualizace", + "openReleaseNotes": "Otevřít poznámky k vydání", + "option": { + "showRing": { + "label": "Zobrazit vyzvánění aktualizace" + }, + "showUpdateList": { + "label": "Zobrazit seznam aktualizací kontejneru", + "description": "Zobrazí seznam každého monitorovaného kontejneru, který má k dispozici aktualizaci obrázku" + } } }, "dnsHoleSummary": { "name": "Souhrn DNS Hole", "description": "Zobrazí shrnutí vaší DNS Hole", "option": { - "layout": { - "label": "Rozložení", - "option": { - "row": { - "label": "Horizontální" - }, - "column": { - "label": "Vertikální" - }, - "grid": { - "label": "Mřížka" - } - } - }, "usePiHoleColors": { "label": "Používat barvy Pi-Hole" } }, "error": { - "internalServerError": "Nepodařilo se načíst souhrn DNS Hole", - "integrationsDisconnected": "Data nejsou k dispozici, všechny integrace jsou odpojené" + "internalServerError": "Nepodařilo se načíst souhrn DNS Hole" }, "data": { "adsBlockedToday": "Zablokováno dnes", @@ -1634,32 +2417,24 @@ "dnsQueriesToday": "Dotazů dnes", "domainsBeingBlocked": "Domény na seznamu blokovaných" }, - "domainsTooltip": "Kvůli více integracím nemůže Homarr vypočítat přesný počet blokovaných domén" + "domainsTooltip": "Kvůli více integracím nemůže Homarr vypočítat přesný počet blokovaných domén", + "status": { + "enabled": "Zapnuto", + "disabled": "Vypnuto", + "unknown": "Neznámý" + } }, "dnsHoleControls": { "name": "Ovládací prvky DNS Hole", "description": "Ovládejte PiHole nebo AdGuard z plochy", "option": { - "layout": { - "label": "Rozložení", - "option": { - "row": { - "label": "Horizontální" - }, - "column": { - "label": "Vertikální" - }, - "grid": { - "label": "Mřížka" - } - } - }, "showToggleAllButtons": { "label": "Zobrazit všechna přepínací tlačítka" } }, "error": { - "internalServerError": "DNS Hole se nepodařilo ovládat" + "internalServerError": "DNS Hole se nepodařilo ovládat", + "bulkActionsFailed": "{count, plural, one {# akce selhala} other {# akce selhala}}" }, "controls": { "enableAll": "Povolit vše", @@ -1670,8 +2445,6 @@ "disabled": "Vypnuto", "processing": "Zpracovávání", "disconnected": "Odpojeno", - "hours": "Hodin", - "minutes": "Minut", "unlimited": "Ponechte prázdné pro neomezené" } }, @@ -1683,16 +2456,10 @@ "label": "Vlastní zobrazení názvu/města", "description": "Zobrazí vlastní název nebo název města/země v horní části hodin." }, - "customTitle": { - "label": "Název" - }, "is24HourFormat": { "label": "24hodinový formát", "description": "Použít 24hodinový formát místo 12hodinového formátu" }, - "showSeconds": { - "label": "Zobrazit vteřiny" - }, "useCustomTimezone": { "label": "Použít pevné časové pásmo" }, @@ -1711,29 +2478,295 @@ "label": "Vlastní formát času", "description": "K formátování času použít ISO 8601 (přepíše ostatní možnosti)" }, - "customDateFormat": { - "label": "Vlastní formát data", - "description": "K formátování data použít ISO 8601 (přepíše ostatní možnosti)" - }, "showWeather": { "label": "Zobrazit počasí", "description": "Zobrazit v rohu karty malou animovanou ikonu počasí a teplotu" }, - "weatherLocation": { - "label": "Lokalita pro počasí" - }, "isWeatherFormatFahrenheit": { "label": "Používat Fahrenheit" + }, + "animateWeatherIcon": { + "label": "Animovat ikonu počasí", + "description": "Animovat ikonu počasí. Ve výchozím nastavení je zakázáno a vždy zakázáno, pokud je požadováno snížení pohybu." + }, + "colorWeatherByDayNight": { + "label": "Barevné počasí podle dne/noc", + "description": "Odstín ikony počasí a teploty s barvou dne nebo barvou noci, na základě toho, zda je v současné době ve vybraném místě den nebo noc." + }, + "dayWeatherColor": { + "label": "Barva dne" + }, + "nightWeatherColor": { + "label": "Barva noci" + }, + "worldClockCities": { + "label": "Světová města hodin", + "description": "Přidat a objednat až šest měst pro pokročilé zobrazení." } + }, + "timezoneList": { + "timezone": "Časové pásmo", + "cityLabel": "Štítek města", + "searchPlaceholder": "Vyhledat časová pásma", + "noResults": "Nebyla nalezena žádná časová pásma", + "unsupportedOption": "Nepodporované: {timeZone}", + "add": "Přidat město", + "remove": "Odstranit {city}", + "reorder": "Změnit pořadí {city}", + "limit": "{count} z {maximum} měst nakonfigurováno" + }, + "worldClock": { + "primary": "Primární hodiny", + "local": "Místní čas", + "today": "Dnes", + "tomorrow": "Zítra", + "yesterday": "Včera", + "noSecondaryCities": "Přidejte města v nastavení widgetu pro jejich porovnání.", + "unsupportedPrimaryTitle": "Primární časové pásmo není k dispozici", + "unsupportedPrimary": "{timeZone} není v tomto prohlížeči podporováno. Zobrazuje UTC jako jasně označený záložní program.", + "unsupportedTimeZone": "Nepodporované časové pásmo: {timeZone}", + "accessibleTime": "{city}: {time}, {date}, {timeZone}", + "advancedLabel": "Pokročilé světové hodiny", + "cities": "Světelné hodiny", + "cityCount": "{count} timezones", + "timeBarLabel": "Pozice doby 24 hodin denně pro {city}", + "dayProgress": "{percent}% uplynula · {hours}h {minutes}m zbývá", + "phaseLegend": "Legenda denního období", + "tick": { + "midnight": "00", + "morning": "06", + "noon": "12", + "evening": "18", + "end": "24" + }, + "phaseRange": { + "night": "00–05 · 21–24", + "dawn": "05–08", + "day": "08–18", + "dusk": "18–21" + }, + "phase": { + "night": "Noc", + "dawn": "Úsvit", + "day": "Den", + "dusk": "Dusek" + } + } + }, + "airQuality": { + "name": "Kvalita vzduchu a UV", + "description": "Zobrazuje kvalitu ovzduší, ultrafialový index, znečišťující látky a pyl pro lokalitu.", + "option": { + "location": { + "label": "Umístění kvality ovzduší" + }, + "aqiStandard": { + "label": "AQI standard", + "options": { + "auto": "Automaticky pro lokalizaci", + "european": "Evropská AQI", + "us": "AQI USA" + } + }, + "showUv": { + "label": "Zobrazit UV index" + }, + "showPollutants": { + "label": "Zobrazit koncentrace znečišťujících látek" + }, + "showPollen": { + "label": "Zobrazit koncentrace pylu" + } + }, + "category": { + "good": "Dobrý", + "fair": "Spravedlivé", + "moderate": "Mírný", + "unhealthySensitive": "Nezdravé pro citlivé skupiny", + "unhealthy": "Nastal problém", + "poor": "Špatné", + "veryPoor": "Velmi špatná", + "veryUnhealthy": "Velmi nezdravé", + "extremelyPoor": "Extrémně chudí", + "hazardous": "Nebezpečný", + "unknown": "Žádné čtení AQI" + }, + "uv": { + "label": "UV index", + "category": { + "low": "Nízká", + "moderate": "Mírný", + "high": "Vysoká", + "veryHigh": "Velmi vysoká", + "extreme": "Extrémní", + "unknown": "Žádné čtení" + } + }, + "dominantPollutant": "Dominant pollutant", + "aqiLabel": "AQI", + "strongestPollen": "Nejvyšší pyl", + "unit": { + "concentration": "{value} μg/m3", + "pollen": "Zrna {value} / m3" + }, + "pollutant": { + "pm2_5": "PM2.5", + "pm10": "PM10", + "ozone": "Ozon", + "nitrogenDioxide": "Oxid dusný", + "sulphurDioxide": "Sulphur dioxide", + "carbonMonoxide": "Oxid uhelnatý" + }, + "pollen": { + "alder": "Alder", + "birch": "Bříza", + "grass": "Tráva", + "mugwort": "Mugwort", + "olive": "Olivy", + "ragweed": "Chřest" + }, + "compact": { + "sixHourTrend": "Trend AQI v následujících šesti hodinách" + }, + "advanced": { + "observedAt": "Aktualizováno v {time}", + "next24Hours": "Příštích 24 hodin", + "pollutants": "Koncentrace znečišťujících látek", + "pollen": "Koncentrace pylu", + "sevenDayForecast": "7denní maximální předpověď", + "aqiValue": "AQI {value}", + "uvValue": "UV {value}", + "uvShort": "UV {value}", + "noForecast": "Nejsou k dispozici žádná předpověď" + } + }, + "countdown": { + "name": "Odpočítávání", + "description": "Sleduje nadcházející události a opakující se výročí.", + "option": { + "events": { + "label": "Události", + "description": "Přidejte a objednejte až 20 jednorázových nebo ročních odpočítávání. Data jsou zadána ve zvoleném časovém pásmu." + }, + "showProgress": { + "label": "Zobrazit průběh" + }, + "showSeconds": { + "label": "Zobrazit sekundy", + "description": "Ponechat sekundy viditelné pro každou nadcházející událost." + } + }, + "dateTimeEventList": { + "newEvent": "Nová událost", + "add": "Přidat událost", + "remove": "Odstranit {event}", + "reorder": "Změnit pořadí {event}", + "eventLabel": "Popisek události", + "timezone": "Časové pásmo", + "unsupportedOption": "Nepodporované: {timeZone}", + "recurrence": "Opakuje se", + "recurrenceOption": { + "none": "Neopakuje se", + "yearly": "Každý rok" + }, + "target": "Datum a čas události", + "trackProgress": "Sledovat průběh od počátečního data", + "start": "Datum a čas zahájení postupu", + "confirmDateTime": "Potvrdit datum a čas", + "limit": "{count} z {maximum} událostí nakonfigurováno" + }, + "empty": { + "title": "Zatím žádné odpočítávání", + "description": "Přidejte událost v nastavení widgetu, abyste mohli začít počítat." + }, + "completed": "Hotovo", + "yearly": "Roční", + "progress": "Průběh události", + "upcoming": "Nadcházející", + "completedEvents": "Dokončené události", + "invalid": { + "title": "Některé události nelze zobrazit", + "description": "{count, plural, one {Jedna událost má neplatné datum nebo nepodporované časové pásmo.} other {# události mají neplatné datum nebo nepodporované časové pásmo.}}", + "value": "Unavailable" + }, + "alert": { + "notifications": "Oznámení prohlížeče", + "permissionDenied": "Oznámení jsou blokována v tomto prohlížeči.", + "reached": "Odpočet dosáhl svého cíle." + } + }, + "timer": { + "name": "Timer / Pomodoro", + "description": "Spustí jednoduchý časovač nebo konfigurovatelnou Pomodoro posloupnost.", + "option": { + "mode": { + "label": "Režim", + "options": { + "timer": "Časovač", + "pomodoro": "Pomodoro" + } + }, + "timerMinutes": { + "label": "Minuty časovače" + }, + "focusMinutes": { + "label": "Zaměřit minuty" + }, + "shortBreakMinutes": { + "label": "Krátké minuty přestávek" + }, + "longBreakMinutes": { + "label": "minuty dlouhé přestávky" + }, + "sessionsBeforeLongBreak": { + "label": "Zaměřit relace před dlouhou přestávkou" + }, + "autoStartBreaks": { + "label": "Automaticky spustit přestávky" + }, + "autoStartFocus": { + "label": "Automaticky spustit relace zaostření" + } + }, + "phase": { + "timer": "Časovač", + "focus": "Zaměřit", + "shortBreak": "Krátká přestávka", + "longBreak": "Dlouhá přestávka" + }, + "action": { + "start": "Spustit", + "pause": "Pozastavit", + "reset": "Reset" + }, + "attention": { + "timerComplete": "Timer complete", + "phaseReady": "{phase} připraveno" + }, + "progress": "Průběh časovače: {progress}%", + "compact": { + "completedFocus": "{count, plural, =0 {Žádné relace zaostření dokončeny} one {# Zaměření bylo dokončeno} other {# relace zaostření dokončeno}}" + }, + "alert": { + "title": "Timer complete", + "completed": "{phase} dokončen." + }, + "advanced": { + "sequence": "Pomodoro sequence", + "focusSession": "Soustředění {session}", + "settings": "Trvalé nastavení", + "settingsHint": "Použijte kontextovou nabídku widgetu pro úpravu nastavení panelu.", + "localAlerts": "Místní výstrahy", + "notifications": "Oznámení prohlížeče", + "sound": "Zvuky časovače", + "localAlertsHint": "Zvuky časovače jsou ve výchozím nastavení povoleny. Zvuky a oznámení se vztahují pouze na tento widget v tomto prohlížeči.", + "notificationsDenied": "Oznámení jsou blokována v tomto prohlížeči." } }, "minecraftServerStatus": { "name": "Stav serveru Minecraft", "description": "Zobrazuje stav serveru Minecraft", "option": { - "title": { - "label": "Název" - }, "domain": { "label": "Adresa serveru" }, @@ -1753,11 +2786,21 @@ "noStation": "Není vybrána žádná stanice", "option": { "baseUrl": { - "label": "URL Search.ch" + "label": "URL Search.ch", + "description": "Vlastní URL adresy musí být vyřešeny na veřejnou IP adresu. Soukromí a místní hostitelé jsou odmítnuti." }, "station": { - "label": "Stanice" + "label": "Stanice", + "placeholder": "Hledat stanici" } + }, + "error": { + "customSourceUnavailable": "Zdroj harmonogramu není k dispozici. Zkontrolujte, zda jeho URL řeší veřejnou IP adresu.", + "stationSearch": "Nelze vyhledat stanice. Zkontrolujte vlastní URL adresu a přístup k vaší desce." + }, + "warning": { + "stale": "Časový rozvrh nemohl být obnoven. Zobrazení odjezdů naposledy aktualizováno na {time}.", + "staleCompact": "Zastaralá data" } }, "notebook": { @@ -1789,6 +2832,9 @@ "directionRtl": "Nastavit směr textu zprava doleva", "blockquote": "Citace", "horizontalLine": "Vodorovná čára", + "details": "Přepnout sbalitelný oddíl", + "expandDetails": "Rozbalit sbalitelný oddíl", + "collapseDetails": "Sbalit sbalitelný oddíl", "bulletList": "Odrážkový seznam", "orderedList": "Číslovaný seznam", "checkList": "Zaškrtávací seznam", @@ -1797,16 +2843,20 @@ "link": "Vložit odkaz", "unlink": "Odstranit odkaz", "image": "Vložit obrázek", - "addTable": "Přidat tabulku", + "insertTable": "Vložit tabulku", + "insertTableSize": "Vložit {columns} × {rows} tabulku", "deleteTable": "Odstranit tabulku", "colorCell": "Barva výplně", - "mergeCell": "Sloučit buňky", + "mergeCells": "Sloučit buňky", + "splitCell": "Rozdělit buňku", "addColumnLeft": "Přidat sloupec před", "addColumnRight": "Přidat sloupec za", "deleteColumn": "Odstranit sloupec", "addRowTop": "Přidat řádek nad", "addRowBelow": "Přidat řádek pod", - "deleteRow": "Odstranit řádek" + "deleteRow": "Odstranit řádek", + "toggleHeaderRow": "Přepnout řádek záhlaví", + "toggleHeaderColumn": "Přepnout sloupec záhlaví" }, "align": { "left": "Vlevo", @@ -1817,8 +2867,6 @@ "clearColor": "Odstranit barvu", "source": "Zdroj", "widthPlaceholder": "Hodnota v % nebo pixelech", - "columns": "Sloupce", - "rows": "Řádky", "width": "Šířka", "height": "Výška" }, @@ -1830,7 +2878,9 @@ "discard": "Zahodit změny", "keepEditing": "Pokračovat v úpravách" } - } + }, + "saveFailed": "Nelze uložit poznámku", + "documentStats": "{words, plural, one {# Slovo} other {# words}} · {characters, plural, one {# znak} other {# znaků}}" }, "anchorNote": { "name": "Poznámka Anchor", @@ -1839,9 +2889,6 @@ "noteId": { "label": "Poznámka" }, - "showTitle": { - "label": "Zobrazit název" - }, "showUpdatedAt": { "label": "Zobrazit poslední aktualizaci" } @@ -1851,14 +2898,20 @@ "notFound": "Poznámka nebyla nalezena", "noNotes": "Nebyly nalezeny žádné poznámky", "integrationRequired": "Nejprve vyberte integraci Anchor", - "updatedAt": "Aktualizováno {date}", "untitled": "Bez názvu", - "edit": "Upravit", - "save": "Uložit", - "cancel": "Zrušit", "readOnlyViewer": "K této poznámce máte přístup pouze pro prohlížení. Úpravy jsou zakázány.", "saveForbidden": "Nemáte oprávnění tuto poznámku upravovat.", - "saveFailed": "Poznámku se nepodařilo uložit. Zkuste to znovu." + "saveFailed": "Poznámku se nepodařilo uložit. Zkuste to znovu.", + "createdAt": "Vytvořeno {date}", + "permission": { + "owner": "Vlastník", + "editor": "Editor", + "viewer": "Prohlížeč" + }, + "status": { + "pinned": "Připnuté", + "archived": "Archivováno" + } }, "iframe": { "name": "iFrame", @@ -1917,6 +2970,25 @@ "clickable": { "label": "Klikatelné" } + }, + "state": { + "on": "Zapnuto", + "off": "Vypnuto", + "unavailable": "Unavailable", + "unknown": "Neznámý" + }, + "advanced": { + "entityId": "ID entity: {id}", + "lastChanged": "Změněno {date}", + "attribute": { + "unit": "Jednotka", + "deviceClass": "Třída zařízení", + "icon": "Ikona" + } + }, + "error": { + "loadFailed": "Nelze načíst entitu", + "toggleFailed": "Nelze aktualizovat entitu" } }, "smartHome-executeAutomation": { @@ -1932,11 +3004,31 @@ }, "spotlightAction": { "run": "Spustit {name}" + }, + "advanced": { + "lastExecuted": "Poslední spuštění v {time}", + "automationId": "Automatizační ID: {id}", + "ready": "Připraveno ke spuštění", + "noPermission": "Nemáte oprávnění ke spuštění této automatizace" + }, + "status": { + "running": "Spuštěná automatizace", + "success": "Automatizace dokončena" + }, + "error": { + "executeFailed": "Automatizaci nelze spustit" } }, "stockPrice": { "name": "Cena akcie", "description": "Zobrazuje aktuální cenu akcie společnosti", + "advanced": { + "currentPrice": "Aktuální cena", + "previousClose": "Předchozí zavření", + "changePercentage": "Vlastní zdroj z DPH při jednotné sazbě", + "minimum": "Minimální", + "maximum": "Maximální množství" + }, "option": { "stock": { "label": "Burzovní symbol" @@ -2007,6 +3099,10 @@ "label": "1 měsíc" } } + }, + "showDetails": { + "label": "Zobrazit podrobnosti", + "description": "Zobrazit název, změnu a časový rozsah v kompaktním zobrazení. Vypněte pouze symbol a cenu." } } }, @@ -2034,6 +3130,13 @@ "showUnmonitored": { "label": "Zobrazit nesledované" } + }, + "advanced": { + "previousMonth": "Zobrazit předchozí měsíc", + "nextMonth": "Zobrazit příští měsíc", + "eventCount": "{count, plural, one {# událost} other {# události}}", + "loading": "Načítání událostí v kalendáři...", + "noEvents": "Žádné události v tomto měsíci" } }, "weather": { @@ -2046,16 +3149,18 @@ "disableTemperatureDecimals": { "label": "Zakázat desetinná místa teploty" }, + "animateIcons": { + "label": "Animovat ikony počasí" + }, + "showHumidity": { + "label": "Zobrazit vlhkost" + }, "showCurrentWindSpeed": { - "label": "Zobrazit aktuální rychlost větru", - "description": "Pouze pro aktuální počasí" + "label": "Zobrazit aktuální rychlost větru" }, "useImperialSpeed": { "label": "Použít mph pro rychlost větru" }, - "location": { - "label": "Lokalita pro počasí" - }, "showCity": { "label": "Zobrazit město" }, @@ -2065,13 +3170,10 @@ "forecastDayCount": { "label": "Počet dní předpovědi", "description": "Když widget není dostatečně široký, zobrazí se méně dní" - }, - "dateFormat": { - "label": "Formát data", - "description": "Jak by datum mělo vypadat" } }, "currentWindSpeed": "{currentWindSpeed} {unit}", + "disabled": "Data počasí jsou nedostupná, protože odchozí připojení jsou zakázána", "dailyForecast": { "sunrise": "Východ", "sunset": "Západ", @@ -2094,6 +3196,47 @@ "thunderstorm": "Bouřka", "thunderstormWithHail": "Bouřka s krupobitím", "unknown": "Neznámý" + }, + "details": "Zobrazit podrobnosti o počasí", + "detailsFor": "Zobrazit podrobnosti o počasí pro {date}", + "advanced": { + "forecast": "7denní předpověď", + "hourlyForecast": "Příštích 24 hodin", + "day": "Den", + "time": "Čas", + "conditions": "Podmínka", + "temperature": "Teplota", + "feelsLike": "Vypadá to jako {temperature}", + "feelsLikeLabel": "Cítí se jako", + "feelsLikeRange": "Zdá se: {maximum} / {minimum}", + "highLow": "Vysoký {maximum} · nízký {minimum}", + "observedAt": "Aktualizováno v {time}", + "humidity": "Vlhkost", + "averageHumidity": "Průměrná vlhkost: {humidity}%", + "currentHumidity": "Současná vlhkost", + "wind": "Vítr / gusty ({unit})", + "currentWind": "Aktuální vítr / záchvaty", + "windValue": "{speed} / {gusts} {unit}", + "windDetail": "Maximální vítr / údery: {speed} / {gusts} {unit}", + "nextHourPrecipitation": "Srážky příští hodinu", + "precipitationChance": "Šance na srážky", + "precipitationValue": "{probability}% · {amount} mm", + "precipitationDetail": "Srážka: {probability}% × {amount} mm", + "todayUv": "Dnešní maximální index UV", + "uvIndex": "Maximální UV index: {value}", + "daylight": "Denní světlo: {duration}", + "hourlyTooltip": "Cítí se jako {feelsLike}{temperatureUnit} · {amount} mm · {humidity}% vlhkost · {speed} {speedUnit}", + "hourlyTooltipWithoutHumidity": "Cítí se jako {feelsLike}{temperatureUnit} · {amount} mm · {speed} {speedUnit} vítr", + "detailLabel": { + "feelsLike": "Cítí se jako", + "precipitation": "Srážky", + "humidity": "Průměrná vlhkost", + "wind": "Max. vítr / rány", + "uv": "Max. UV index", + "daylight": "Daylight" + }, + "sun": "Východ slunce / západu slunce", + "noForecast": "Nejsou k dispozici žádná předpověď" } }, "indexerManager": { @@ -2106,8 +3249,15 @@ }, "title": "Správce indexeru", "testAll": "Otestovat vše", + "status": { + "healthy": "V pořádku", + "unhealthy": "Nastal problém", + "disabled": "Vypnuto", + "unknown": "Zdraví není k dispozici" + }, "error": { - "internalServerError": "Nepodařilo se načíst stav indexerů" + "internalServerError": "Nepodařilo se načíst stav indexerů", + "testAll": "Test indexování se nezdařil. Zkuste to znovu." } }, "healthMonitoring": { @@ -2136,11 +3286,6 @@ "fileSystem": { "label": "Zobrazit informace o souborovém systému" }, - "visibleStorageVolumes": { - "label": "Viditelné úložné svazky", - "description": "Dostupné pouze tehdy, když jsou všechny vybrané integrace Synology. Ponechte prázdné pro zobrazení všech zjištěných úložných svazků.", - "placeholder": "Vyberte úložné svazky" - }, "defaultTab": { "label": "Výchozí karta" }, @@ -2163,17 +3308,27 @@ "minutes": "{count} minut", "used": "Využito", "available": "K dispozici", - "lastSeen": "Poslední aktualizace stavu: {lastSeen}" + "lastSeen": "Poslední aktualizace stavu: {lastSeen}", + "updatesAvailable": "{count, plural, one {K dispozici je # aktualizace} other {# dostupných aktualizací}}", + "rebootRequired": "Vyžadován restart", + "rebootNotRequired": "Není vyžadován restart" + }, + "smartStatus": { + "attributesWithinThresholds": "SMART: atributy v rámci prahových hodnot", + "attributesFailed": "SMART: {attributes} selhal", + "noCriticalWarning": "SMART: žádné varování nehlášené SSD", + "criticalWarning": "SMART: kritické varování hlášené SSD" + }, + "gauge": { + "cpuUsage": "Využití CPU", + "cpuTemperature": "Teplota CPU", + "memoryUsage": "Využití paměti", + "gpuUsage": "{name} využití GPU" }, - "memory": {}, "error": { "internalServerError": "Nepodařilo se načíst stav systému" }, "cluster": { - "summary": { - "cpu": "CPU", - "memory": "RAM" - }, "resource": { "node": { "name": "Uzly" @@ -2209,8 +3364,6 @@ "table": { "header": { "name": "Název", - "cpu": "CPU", - "memory": "RAM", "node": "Uzel" } } @@ -2220,33 +3373,29 @@ "name": "Statistiky Dockeru", "description": "Statistiky vašich kontejnerů (tento widget lze přidat pouze s oprávněními správce)", "option": { - "columns": { - "label": "Zobrazované sloupce" + "endpointIds": { + "label": "Prostředí Dockeru", + "description": "Ponechte prázdné pro zobrazení kontejnerů z každého prostředí Dockeru", + "placeholder": "Všechna prostředí Dockeru" }, - "enableRowSorting": { - "label": "Povolit řazení položek" + "containerFilter": { + "label": "Kontejnery k filtrování" + }, + "filterIsWhitelist": { + "label": "Filtrovat jako seznam povolených" }, "defaultSort": { - "label": "Sloupec použitý pro výchozí řazení", "option": { "name": "Název", "state": "Stav", "cpuUsage": "Využití CPU", "memoryUsage": "Využití paměti" } - }, - "descendingDefaultSort": { - "label": "Obrátit řazení" - }, - "columnOrder": { - "label": "Pořadí sloupců" - }, - "columnWidths": { - "label": "Šířky sloupců" } }, "error": { "internalServerError": "Nepodařilo se načíst statistiky kontejnerů", + "endpointsUnavailable": "Koncové body Dockeru nejsou k dispozici", "layoutSaveTitle": "Rozložení tabulky nebylo uloženo", "layoutSaveMessage": "Rozložení tabulky Dockeru se nepodařilo uložit. Zkuste sloupec znovu přesunout nebo změnit jeho velikost." }, @@ -2255,7 +3404,6 @@ } }, "coolify": { - "name": "Coolify", "description": "Přehled vaší instance Coolify se servery a aplikacemi", "option": { "showServers": { @@ -2281,17 +3429,49 @@ "internalServerError": "Nepodařilo se načíst data Coolify" }, "server": { - "buildServer": "Sestavit" + "buildServer": "Sestavit", + "resourceCounts": "{applications, plural, one {# aplikace} other {# aplikace}} / {services, plural, one {# služba} other {# služeb}}", + "reachability": "Dosažitelnost", + "usability": "Použitelnost" + }, + "source": { + "url": "Zdroj: {url}", + "unavailable": "{source}: unavailable" }, "instances": { "title": "Instance" + }, + "action": { + "openResource": "Otevřít {name}", + "openLogs": "Otevřít {name} logy", + "showIp": "Zobrazit IP adresu", + "hideIp": "Skrýt IP adresu" + }, + "status": { + "running": "Běží", + "stopped": "Zastaveno", + "exited": "Ukončeno", + "starting": "Začíná", + "restarting": "Restartování", + "unknown": "Neznámý", + "online": "Online", + "offline": "Offline", + "reachable": "Dosažitelné", + "unreachable": "Nedostupné", + "usable": "Použitelné", + "unusable": "Nepoužitelné" } }, "vpn": { "name": "VPN", "description": "Přehled vašich připojení VPN", "serviceUnavailable": "VPN není k dispozici", - "option": {} + "status": { + "running": "Běží", + "notRunning": "Neběží", + "unavailable": "Unavailable", + "vpn": "VPN: {status}" + } }, "ups": { "name": "UPS", @@ -2318,14 +3498,19 @@ "runtime": "Výdrž", "load": "Zátěž", "input": "Vstup", - "output": "Výstup" + "output": "Výstup", + "batteryVoltage": "Napětí baterie", + "power": "Energie", + "temperature": "Teplota", + "manufacturer": "Výrobce", + "model": "Vzor", + "serial": "Pořadové číslo" }, "error": { "internalServerError": "Nepodařilo se načíst data UPS" } }, "tracearr": { - "name": "Tracearr", "description": "Rozšířené monitorování mediálního serveru s podrobnými údaji o streamování a překódování", "option": { "showStreams": { @@ -2413,10 +3598,7 @@ "label": "Událost", "description": "Zobrazit celkový počet výskytů konkrétní události", "placeholder": "Vyberte událost", - "loading": "Načítání událostí...", - "noEvents": "Nebyly nalezeny žádné události", - "none": "Žádná událost", - "configureWebsiteFirst": "Nejprve vyberte web, aby se načetly události" + "none": "Žádná událost" }, "chartType": { "label": "Typ grafu", @@ -2447,26 +3629,21 @@ "eventNames": { "label": "Události", "description": "Vyberte jednu nebo více událostí pro graf", - "placeholder": "Vybrat události...", - "loading": "Načítání událostí...", - "noEvents": "Nebyly nalezeny žádné události", - "configureWebsiteFirst": "Nejprve vyberte web, aby se načetly události" + "placeholder": "Vybrat události..." }, "topCount": { "label": "Počet zobrazených položek", "description": "Počet nejlepších položek k zobrazení (max. 500)" + }, + "events": { + "loading": "Načítání událostí...", + "noEvents": "Nebyly nalezeny žádné události", + "configureWebsiteFirst": "Nejprve vyberte webovou stránku pro načtení událostí" } }, "event": { - "occurrences": "události", "label": "události" }, - "topPages": { - "direct": "Přímé" - }, - "topReferrers": { - "direct": "Přímé" - }, "events": { "selectPrompt": "Vyberte události pro graf" }, @@ -2475,6 +3652,9 @@ "noWebsite": "Není nakonfigurován žádný web", "noData": "Nejsou k dispozici žádná data", "internalServerError": "Nepodařilo se načíst data Umami" + }, + "top": { + "direct": "Přímé" } }, "common": { @@ -2502,7 +3682,8 @@ }, "integration": { "noData": "Nebyla nalezena žádná integrace", - "description": "Klikněte na pro vytvoření nové integrace" + "description": "Klikněte na pro vytvoření nové integrace", + "manage": "Spravovat integrace" }, "app": { "noData": "Žádná aplikace", @@ -2513,7 +3694,61 @@ "noIntegration": "Nebyla vybrána žádná integrace", "noData": "Nejsou k dispozici žádná data o integraci" }, - "option": {} + "integrationDisconnected": "Žádná data nejsou k dispozici, všechny integrace jsou odpojeny", + "updatedAt": "Aktualizováno {date}", + "title": { + "label": "Název" + }, + "openInNewTab": { + "label": "Otevřít na nové kartě" + }, + "showTitle": { + "label": "Zobrazit název" + }, + "weatherLocation": { + "label": "Lokalita pro počasí" + }, + "layout": { + "label": "Rozložení", + "option": { + "horizontal": "Horizontální", + "vertical": "Vertikální", + "grid": "Mřížka" + } + }, + "select": { + "loading": "Načítání...", + "loadError": "Nepodařilo se načíst možnosti" + }, + "dateFormat": { + "label": "Formát data", + "description": "Jak by datum mělo vypadat" + }, + "visibleStorageVolumes": { + "label": "Viditelné skladovací objemy", + "description": "Dostupné pouze pokud je každá vybraná integrace OpenMediaVault nebo Synology. Nechte prázdné pro zobrazení všech detekovaných objemů úložiště.", + "placeholder": "Vybrat hlasitost úložiště" + }, + "tableOptions": { + "columns": { + "label": "Sloupce k zobrazení" + }, + "columnOrder": { + "label": "Pořadí sloupců" + }, + "columnWidths": { + "label": "Šířky sloupců" + }, + "enableRowSorting": { + "label": "Povolit třídění položek" + }, + "defaultSort": { + "label": "Sloupec použitý pro výchozí řazení" + }, + "invertSorting": { + "label": "Invertovat třídění" + } + } }, "video": { "name": "Streamování videa", @@ -2572,6 +3807,7 @@ "transcoding": "Překódování", "paused": "Pozastaveno", "remaining": "Zbývá {minutes} min", + "seasonEpisode": "S{season} E{episode}", "metadata": { "title": "Statistiky pro nadšence", "video": { @@ -2589,11 +3825,16 @@ "resolution": "Rozlišení", "target": "Cílový kodek" } - } + }, + "unknownUser": "Neznámý uživatel" + }, + "summary": { + "sessions": "{count, plural, one {# relace} other {# relací}}", + "playing": "{count} hraje", + "transcoding": "{count} překódování" } }, "paperlessNgx": { - "name": "Paperless-ngx", "description": "Přehled archivu dokumentů Paperless-ngx", "documentsTotal": "Celkem dokumentů", "documentsInbox": "Doručená pošta", @@ -2637,6 +3878,192 @@ "internalServerError": "Data Paperless-ngx se nepodařilo načíst" } }, + "patchmon": { + "description": "Přehled stavu oprav hostitelů z PatchMonu", + "title": "Statistiky PatchMonu", + "totalHosts": "Celkem hostitelů", + "hostsNeedingUpdates": "Vyžaduje aktualizace", + "securityUpdates": "Bezpečnostní aktualizace", + "upToDateHosts": "Aktuální hostitelé", + "hostsWithSecurityUpdates": "Hostitelé s bezpečnostními aktualizacemi", + "recentUpdates24h": "Aktualizace (24 h)", + "totalOutdatedPackages": "Zastaralé balíčky", + "totalRepos": "Repozitáře", + "osDistribution": "Distribuce OS", + "compliance": "Soulad oprav", + "complianceRatio": "{upToDate} / {total}", + "lastUpdated": "Aktualizováno {time}", + "option": { + "showTotalHosts": { + "label": "Zobrazit celkový počet hostitelů", + "description": "Zobrazit celkový počet monitorovaných hostitelů" + }, + "showHostsNeedingUpdates": { + "label": "Zobrazit hostitele vyžadující aktualizace", + "description": "Zobrazit hostitele s alespoň jedním zastaralým balíčkem" + }, + "showSecurityUpdates": { + "label": "Zobrazit bezpečnostní aktualizace", + "description": "Zobrazit celkový počet dostupných bezpečnostních aktualizací" + }, + "showUpToDateHosts": { + "label": "Zobrazit aktuální hostitele", + "description": "Zobrazit hostitele s nulovým počtem zastaralých balíčků" + }, + "showHostsWithSecurityUpdates": { + "label": "Zobrazit hostitele s bezpečnostními aktualizacemi", + "description": "Zobrazit hostitele vyžadující bezpečnostní opravy" + }, + "showRecentUpdates24h": { + "label": "Zobrazit poslední aktualizace (24 h)", + "description": "Zobrazit počet aktualizací použitých za posledních 24 hodin" + }, + "showTotalOutdatedPackages": { + "label": "Zobrazit zastaralé balíčky", + "description": "Zobrazit celkový počet zastaralých balíčků na všech hostitelích" + }, + "showTotalRepos": { + "label": "Zobrazit repozitáře", + "description": "Zobrazit počet aktivních monitorovaných repozitářů" + }, + "enableThresholdColors": { + "label": "Povolit barvy podle prahových hodnot", + "description": "Obarvit statistické hodnoty zeleně, žlutě nebo červeně podle předvoleb závažnosti" + }, + "useCustomThresholds": { + "label": "Pokročilé prahové hodnoty", + "description": "Přizpůsobit varovné a kritické prahové hodnoty pro jednotlivé statistiky pomocí absolutních počtů nebo procent celkového počtu hostitelů" + }, + "thresholdMode": { + "option": { + "absolute": "Absolutní počet", + "percent": "Procento celkového počtu hostitelů" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "Režim prahové hodnoty pro aktualizace", + "description": "Porovnat počet aktualizací jako absolutní hodnotu nebo procento celkového počtu hostitelů" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "Varovná prahová hodnota aktualizací" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "Kritická prahová hodnota aktualizací" + }, + "securityUpdatesThresholdMode": { + "label": "Režim prahové hodnoty bezpečnostních aktualizací", + "description": "Porovnat počet bezpečnostních aktualizací jako absolutní hodnotu nebo procento celkového počtu hostitelů" + }, + "securityUpdatesWarningAt": { + "label": "Varovná prahová hodnota bezpečnostních aktualizací" + }, + "securityUpdatesCriticalAt": { + "label": "Kritická prahová hodnota bezpečnostních aktualizací" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "Režim prahové hodnoty hostitelů s bezpečnostními aktualizacemi", + "description": "Porovnat počet hostitelů jako absolutní hodnotu nebo procento celkového počtu hostitelů" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "Varovná prahová hodnota hostitelů s bezpečnostními aktualizacemi" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "Kritická prahová hodnota hostitelů s bezpečnostními aktualizacemi" + }, + "upToDateHostsThresholdMode": { + "label": "Režim prahové hodnoty aktuálních hostitelů", + "description": "Porovnat počet aktuálních hostitelů jako absolutní hodnotu nebo procento celkového počtu hostitelů" + }, + "upToDateHostsWarningAt": { + "label": "Varovná prahová hodnota aktuálních hostitelů", + "description": "Při dosažení této prahové hodnoty nebo jejím překročení, ale před úplným pokrytím, zadat žlutou barvu" + }, + "upToDateHostsCriticalAt": { + "label": "Kritická prahová hodnota aktuálních hostitelů", + "description": "Při poklesu hodnoty pod tuto prahovou hodnotu zadat červenou barvu" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "Režim prahové hodnoty zastaralých balíčků", + "description": "Porovnat počet zastaralých balíčků jako absolutní hodnotu nebo procento celkového počtu hostitelů" + }, + "totalOutdatedPackagesWarningAt": { + "label": "Varovná prahová hodnota zastaralých balíčků" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "Kritická prahová hodnota zastaralých balíčků" + }, + "showOsDistribution": { + "label": "Zobrazit distribuci OS", + "description": "Zobrazit rozdělení monitorovaných hostitelů podle operačního systému" + }, + "osDistributionLimit": { + "label": "Limit distribuce OS", + "description": "Maximální počet operačních systémů k zobrazení", + "option": { + "3": "Nejlepší 3", + "5": "Nejlepších 5", + "10": "Nejlepších 10", + "all": "Vše" + } + }, + "showOsVersion": { + "label": "Zobrazit verzi OS", + "description": "Pokud je k dispozici, připojit verzi OS ke každému popisku distribuce" + }, + "showComplianceHero": { + "label": "Zobrazit hlavní ukazatel souladu", + "description": "Zobrazit kruhový ukazatel souladu s procentem aktuálních hostitelů" + }, + "osDisplayMode": { + "label": "Režim zobrazení OS", + "description": "Zvolte způsob zobrazení distribuce operačních systémů", + "option": { + "bars": "Vodorovné pruhy", + "donut": "Prstencový graf" + } + }, + "threshold": { + "warningAt": { + "description": "Zadejte žlutou barvu, když hodnota dosáhne této prahové hodnoty" + }, + "criticalAt": { + "description": "Zadejte červenou pokud hodnota dosáhne této prahové hodnoty" + } + } + }, + "error": { + "internalServerError": "Data PatchMonu se nepodařilo načíst" + } + }, + "bazarr": { + "description": "Přehled chybějících titulků a stavu kondice z vaší instance Bazarru", + "episodes": "Chybějící epizody", + "movies": "Chybějící filmy", + "providers": "Problémy poskytovatelů", + "status": "Problémy se stavem", + "announcements": "Oznámení", + "option": { + "showMissingEpisodes": { + "label": "Zobrazit chybějící epizody", + "description": "Zobrazit počet epizod s chybějícími titulky" + }, + "showMissingMovies": { + "label": "Zobrazit chybějící filmy", + "description": "Zobrazit počet filmů s chybějícími titulky" + }, + "showProviderIssues": { + "label": "Zobrazit problémy poskytovatelů", + "description": "Zobrazit počet poskytovatelů titulků s problémy" + }, + "showHealthIssues": { + "label": "Zobrazit problémy se stavem", + "description": "Zobrazit počet problémů se stavem Bazarru" + } + }, + "error": { + "internalServerError": "Data Bazarru se nepodařilo načíst" + } + }, "immich-serverStats": { "name": "Statistiky serveru Immich", "description": "Informace o vaší instanci Immich", @@ -2661,7 +4088,8 @@ "users": "Uživatelé", "photos": "Fotografie", "videos": "Videa", - "storage": "Využité úložiště" + "storage": "Využité úložiště", + "albumLimit": "Největší alba (až {count} zobrazena)" }, "immich-albumCarousel": { "name": "Album Immich", @@ -2685,24 +4113,21 @@ } }, "description": "Prezentace obrázků z alba Immich nebo celé vaší knihovny", - "noPhotos": "Nebyly nalezeny žádné fotografie" + "noPhotos": "Nebyly nalezeny žádné fotografie", + "albumPhoto": "Fotka alba", + "actions": { + "previousPhoto": "Předchozí fotka", + "nextPhoto": "Další fotka", + "pauseSlideshow": "Pause slideshow", + "resumeSlideshow": "Pokračovat v prezentaci", + "toggleSlideshow": "Pozastavit nebo obnovit prezentaci", + "photo": "Fotka {number}" + } }, "downloads": { "name": "Klient stahování", "description": "Umožňuje zobrazovat a spravovat stahování z klientů Torrent i Usenet.", "option": { - "columns": { - "label": "Zobrazované sloupce" - }, - "enableRowSorting": { - "label": "Povolit řazení položek" - }, - "defaultSort": { - "label": "Sloupec použitý pro výchozí řazení" - }, - "descendingDefaultSort": { - "label": "Obrátit řazení" - }, "showCompletedUsenet": { "label": "Zobrazit dokončené položky Usenetu" }, @@ -2727,12 +4152,6 @@ "limitPerIntegration": { "label": "Omezit počet položek na integraci", "description": "Omezí počet zobrazených položek pro každou integraci, nikoli globálně" - }, - "columnOrder": { - "label": "Pořadí sloupců" - }, - "columnWidths": { - "label": "Šířky sloupců" } }, "errors": { @@ -2893,6 +4312,10 @@ "mediaRequests-requestList": { "name": "Seznam požadavků na média", "description": "Podívejte se na seznam všech požadavků na média z vaší instance Overseerr nebo Jellyseerr", + "empty": { + "title": "Zatím žádné žádosti o média", + "description": "Vyhledejte film nebo zobrazit pro zahájení požadavku." + }, "option": { "linksTargetNewTab": { "label": "Otevírat odkazy v nové kartě" @@ -2926,12 +4349,16 @@ "failed": "Selhalo", "completed": "Dokončeno" }, + "unknown": "Neznámý", "toBeDetermined": "" }, "mediaRequests-requestStats": { "name": "Statistiky požadavků na média", "description": "Statistiky vašich požadavků na média", - "option": {}, + "empty": { + "title": "Zatím žádná aktivita požadavku", + "description": "Statistiky se objeví po první žádosti o média." + }, "titles": { "stats": { "main": "Statistiky médií", @@ -2941,8 +4368,7 @@ "declined": "Již zamítnuto", "available": "Již dostupné", "tv": "Požadavky seriálů", - "movie": "Požadavky filmů", - "total": "Celkem" + "movie": "Požadavky filmů" }, "users": { "main": "Top uživatelé", @@ -2968,7 +4394,6 @@ }, "currentIndex": "{start}–{end} z {total}", "healthCheck": { - "title": "Kontrola stavu", "queued": "Ve frontě", "status": { "healthy": "V pořádku", @@ -2977,38 +4402,63 @@ }, "panel": { "statistics": { - "empty": "Prázdné", - "transcodes": "Překódování", - "transcodesCount": "Překódování", - "healthChecksCount": "Kontroly stavu", "filesCount": "Soubory", "savedSpace": "Ušetřené místo", - "healthChecks": "Kontroly stavu", "videoCodecs": "Kodeky", "videoContainers": "Kontejnery", "videoResolutions": "Rozlišení" }, "workers": { - "empty": "Prázdné", "table": { - "file": "Soubor", "eta": "Odhadovaný čas", - "progress": "Postup", - "transcode": "Překódovat", - "healthCheck": "Kontrola stavu" + "progress": "Postup" } }, "queue": { - "empty": "Prázdné", "table": { - "file": "Soubor", - "size": "Velikost", - "transcode": "Překódovat", - "healthCheck": "Kontrola stavu" + "size": "Velikost" } + }, + "common": { + "empty": "Prázdné", + "file": "Soubor", + "healthCheck": "Kontrola stavu", + "transcode": "Překódovat", + "transcodes": "Překódování", + "healthChecks": "Veterinární kontroly" } } }, + "mediaMissing": { + "name": "Chybějící a zařazená média", + "description": "Zobrazuje chybějící a zařazené filmy a epizody ze Sonarru a Radarru", + "option": { + "showMissing": { + "label": "Zobrazit chybějící položky" + }, + "showQueued": { + "label": "Zobrazit zařazené položky" + }, + "pageSize": { + "label": "Položek na stránku" + } + }, + "tab": { + "missing": "Chybějící", + "queued": "Ve frontě" + }, + "type": { + "movie": "Film", + "episode": "Epizoda", + "book": "Kniha" + }, + "empty": { + "missing": "Žádné chybějící položky", + "queued": "Žádné položky ve frontě", + "noTabsEnabled": "V nastavení widgetu povolte alespoň jednu kartu" + }, + "timeLeft": "Zbývající čas" + }, "rssFeed": { "name": "RSS kanály", "description": "Sleduje a zobrazuje jeden nebo více obecných kanálů RSS, ATOM nebo JSON", @@ -3031,6 +4481,13 @@ "showPosterImage": { "label": "Zobrazit obrázek plakátu" } + }, + "error": { + "allFeedsFailed": "Nelze načíst RSS kanály. Zkontrolujte URL kanálu a zkuste to znovu." + }, + "warning": { + "partial": "{count, plural, one {# RSS kanál nemohl být načten} other {# RSS kanály nemohly být načteny}}", + "stale": "RSS kanály nelze obnovit. Zobrazuji dříve načtené položky." } }, "releases": { @@ -3106,17 +4563,8 @@ "label": "Regulární výraz" } }, - "edit": { - "label": "Upravit" - }, "editForm": { - "title": "Upravit repozitář", - "cancel": { - "label": "Zrušit" - }, - "confirm": { - "label": "Potvrdit" - } + "title": "Upravit repozitář" }, "importForm": { "title": "Importovat z Dockeru" @@ -3133,8 +4581,7 @@ "label": "Tokeny poskytovatele", "token": "Token", "configured": "Token je nakonfigurován", - "notConfigured": "Není nastaven žádný token", - "save": "Uložit" + "notConfigured": "Není nastaven žádný token" } } }, @@ -3161,17 +4608,32 @@ "noProviderResponse": "Poskytovatel neodpověděl", "unexpected": "Neočekávaná chyba poskytovatele" } - } + }, + "expandDetails": "Zobrazit podrobnosti pro {name}", + "collapseDetails": "Skrýt podrobnosti pro {name}" }, "networkControllerSummary": { - "option": {}, - "card": { - "vpn": { - "countConnected": "Připojeno: {count}" + "advanced": { + "updated": "Aktualizováno", + "metric": { + "latency": "Latence", + "ping": "Ping", + "uptime": "Doba provozu", + "users": "Uživatelé", + "guests": "Hosté" } }, + "card": { + "vpn": { + "countConnected": "{count, plural, one {# připojeno k} other {# připojeno k}}", + "label": "VPN" + }, + "wan": "WAN", + "web": "Webová", + "wifi": "Wi-Fi", + "lan": "LAN" + }, "error": { - "integrationsDisconnected": "Data nejsou k dispozici, všechny integrace jsou odpojené", "unknownContentOption": "Neznámá volba obsahu pro widget souhrnu síťového řadiče: " }, "name": "Souhrn síťového řadiče", @@ -3208,7 +4670,6 @@ } }, "error": { - "integrationsDisconnected": "Data nejsou k dispozici, všechny integrace jsou odpojené", "unknownContentOption": "Neznámá volba obsahu pro widget stavu sítě: " }, "name": "Stav sítě", @@ -3238,7 +4699,6 @@ "versiontitle": "Verze", "cputitle": "Využití CPU", "memorytitle": "Využití paměti", - "cpu": "CPU", "memory": "Paměť", "interfaces": { "name": "název", @@ -3246,6 +4706,16 @@ "recv": "Přijato", "title": "Síťová rozhraní" } + }, + "empty": { + "noInterfaces": "Zatím žádná data síťového rozhraní" + }, + "versionUnknown": "Neznámá verze", + "metricAccessible": "{metric}: {value}%, {status}", + "status": { + "normal": "Normální", + "warning": "Varování", + "critical": "Kritický" } }, "notifications": { @@ -3255,8 +4725,21 @@ "option": { "hideLogos": { "label": "Skrýt loga" + }, + "messageFormat": { + "label": "Formát zprávy", + "option": { + "auto": "Automaticky", + "plain": "Prostý text", + "markdown": "Markdown", + "html": "HTML" + } } - } + }, + "openService": "Otevřít službu oznámení", + "deleteNotification": "Odstranit oznámení z Gotify", + "deleteFailed": "Nelze odstranit oznámení", + "deleteFailedMessage": "Oznámení nelze odstranit. Zkuste to prosím znovu." }, "speedtestTracker": { "name": "Speedtest Tracker", @@ -3298,7 +4781,6 @@ } }, "uptimeKuma": { - "name": "Uptime Kuma", "description": "Sledujte statistiky dostupnosti ze své stránky se stavem Uptime Kuma", "option": { "showAverageUptime": { @@ -3335,8 +4817,58 @@ }, "error": { "internalServerError": "Data dostupnosti se nepodařilo načíst" + }, + "status": { + "up": "Celkem nahráno", + "down": "Rychlost stahování", + "paused": "Pozastaveno" } }, + "traefik": { + "description": "Přehled směrovačů, služeb, middlewaru a vstupních bodů Traefiku", + "option": { + "showTcp": { + "label": "Zobrazit TCP" + }, + "showUdp": { + "label": "Zobrazit UDP" + }, + "showEntryPoints": { + "label": "Zobrazit vstupní body" + } + }, + "instances": "Instance Traefiku", + "versionUnknown": "Verze neznámá", + "summary": { + "routers": "Směrovače", + "entryPoints": "Vstupní body" + }, + "resource": { + "routers": "Směrovače", + "middlewares": "Middleware" + }, + "status": { + "healthy": "V pořádku", + "errors": "{count} chyb", + "warnings": "{count} varování" + }, + "error": { + "internalServerError": "Data Traefiku se nepodařilo načíst" + }, + "resourceType": { + "router": "Router", + "service": "Servis", + "middleware": "Middleware" + }, + "resourceStatus": { + "enabled": "Zapnuto", + "disabled": "Vypnuto", + "warning": "Varování", + "error": "Chyba", + "unknown": "Neznámý" + }, + "failedEndpoint": "Chyba: {endpoint}" + }, "audioStats": { "name": "Statistiky zvuku", "description": "Statistiky knihovny a přehrávání z Navidrome nebo Audiobookshelf", @@ -3401,9 +4933,7 @@ "label": "Viditelné grafy", "description": "Vyberte grafy, které chcete zobrazit.", "option": { - "cpu": "CPU", "memory": "Paměť", - "gpu": "GPU", "network": "Síť" } }, @@ -3418,12 +4948,11 @@ } }, "card": { - "cpu": "CPU", "memory": "RAM", - "gpu": "GPU", "network": "SÍŤ", "up": "", - "down": "DOLŮ" + "down": "DOLŮ", + "memoryTooltip": "{used} / {available} ({percent}%)" } }, "systemDisks": { @@ -3449,151 +4978,88 @@ }, "showBackgroundBar": { "label": "Zobrazit pruh využití na pozadí" - }, - "visibleStorageVolumes": { - "label": "Viditelné úložné svazky", - "description": "Dostupné pouze tehdy, když jsou všechny vybrané integrace Synology. Ponechte prázdné pro zobrazení všech zjištěných úložných svazků.", - "placeholder": "Vyberte úložné svazky" } }, "status": { - "unhealthy": "Nezdravý stav" + "unhealthy": "Nezdravý stav", + "smart": "SMART", + "free": "{percentage}% volných" + } + }, + "customApi": { + "name": "Vlastní widget", + "description": "Vykreslí nastavenou vlastní JSX definici.", + "customJsx": { + "noTemplate": "Není nakonfigurována žádná JSX šablona.", + "templateWarnings": "Upozornění šablony {count}:", + "requestIdRequired": "Toto ovládání sítě vyžaduje jmenovaný požadovaný Id.", + "unsavedPreview": "Spusťte počáteční požadavek v editoru před testováním jmenovaných požadavků.", + "invalidParams": "Parametry požadavku jsou neplatné.", + "loading": "Načítání požadavku...", + "loadRequest": "Požadavek na načtení", + "requestFailed": "Požadavek se nezdařil.", + "retry": "Opakovat požadavek", + "actionCompleted": "Akce byla úspěšně dokončena.", + "actionSimulated": "Simulovaná akce; nebyla odeslána žádná žádost.", + "actionsDisabledEditMode": "Akce jsou zakázány, když je panel v režimu úprav.", + "widgetItemUnavailable": "Tato položka widgetu není k dispozici.", + "toggle": "Přepínač", + "copied": "Zkopírováno", + "confirmDelete": "Potvrďte tuto destruktivní akci." + }, + "option": { + "definitionId": { + "label": "Vlastní widget" + }, + "refreshInterval": { + "label": "Interval obnovení", + "description": "Jak často znovu načítat data z API (v sekundách)" + } + }, + "noDefinition": "Není vybrána žádná definice", + "definitionNotFound": "Vlastní widget není k dispozici", + "migrationRequired": "Tento starší widget je zachován, ale před spuštěním musí být přesunut na vlastní JSX v2 z vlastních widgetů.", + "manageMigration": "Otevřít vlastní widgety", + "contactAdmin": "Kontaktujte správce.", + "configurationNeedsRepair": "Možnosti widgetu se změnily. Upravte widget pro opravu jeho konfigurace.", + "removeFromBoard": "Odstranit z desky", + "editModePending": "Uložte desku pro načtení tohoto widgetu.", + "picker": { + "group": "Vlastní JSX widgety", + "empty": "Nenalezeny žádné vlastní widgety", + "preview": "Náhled", + "sources": "{count, plural, one {# zdroj} other {# zdrojů}}", + "requests": "{count, plural, one {# request} other {# request}}", + "migrationRequired": "Vyžadována migrace", + "migrationDescription": "Tento vložený v1 widget ještě nemůže běžet. Zkopírujte jeho opravenou výzvu na LLM a vložte jedinou odpověď JSON do Homarru.", + "manageMigration": "Otevřít vlastní widgety", + "contactAdmin": "Kontaktujte správce." + }, + "configuration": { + "needsAttention": "Konfigurace vyžaduje pozornost: {message}", + "advancedOptions": "Pokročilé možnosti", + "invalidJson": "Neplatný JSON" } }, "beszelSystemTable": { "name": "Systémy Beszel (tabulka)", "description": "Tabulkový přehled všech monitorovaných systémů Beszel s řaditelnými sloupci a indikátory stavu", "option": { - "statusFilter": { - "label": "Filtr stavu" - }, "sortBy": { "label": "Řadit podle" }, "sortDirection": { "label": "Směr řazení" - }, - "showCpu": { - "label": "Zobrazit CPU" - }, - "showMemory": { - "label": "Zobrazit paměť" - }, - "showDisk": { - "label": "Zobrazit disk" - }, - "showGpu": { - "label": "Zobrazit GPU" - }, - "showLoadAvg": { - "label": "Zobrazit průměrné zatížení" - }, - "showNet": { - "label": "Zobrazit síť" - }, - "showTemp": { - "label": "Zobrazit teplotu" - }, - "showBattery": { - "label": "Zobrazit baterii" - }, - "showServices": { - "label": "Zobrazit služby" - }, - "showUptime": { - "label": "Zobrazit dobu běhu" - }, - "showAgent": { - "label": "Zobrazit verzi agenta" - }, - "columnOrder": { - "label": "Pořadí sloupců" - }, - "columnWidths": { - "label": "Šířky sloupců" } }, - "noRecords": "Nenalezeny žádné systémy", "error": { - "internalServerError": "K serveru Beszel se nelze připojit. Zkontrolujte nastavení integrace.", "layoutSaveTitle": "Rozložení tabulky nelze uložit", "layoutSaveMessage": "Pořadí nebo šířky sloupců se nepodařilo uložit. Zkuste to znovu." - }, - "column": { - "system": "Systém", - "cpu": "CPU", - "memory": "Paměť", - "disk": "Disk", - "gpu": "GPU", - "loadAvg": "Prům. zátěž", - "net": "Síť", - "temp": "Teplota", - "battery": "Baterie", - "services": "Služby", - "uptime": "Doba běhu", - "agent": "Agent" } }, "beszelSystemGrid": { "name": "Systémy Beszel (mřížka)", - "description": "Kartový mřížkový přehled všech monitorovaných systémů Beszel s metrikami v reálném čase", - "option": { - "statusFilter": { - "label": "Filtr stavu" - }, - "showCpu": { - "label": "Zobrazit CPU" - }, - "showMemory": { - "label": "Zobrazit paměť" - }, - "showDisk": { - "label": "Zobrazit disk" - }, - "showGpu": { - "label": "Zobrazit GPU" - }, - "showLoadAvg": { - "label": "Zobrazit průměrné zatížení" - }, - "showNet": { - "label": "Zobrazit síť" - }, - "showTemp": { - "label": "Zobrazit teplotu" - }, - "showBattery": { - "label": "Zobrazit baterii" - }, - "showServices": { - "label": "Zobrazit služby" - }, - "showUptime": { - "label": "Zobrazit dobu běhu" - }, - "showAgent": { - "label": "Zobrazit verzi agenta" - } - }, - "error": { - "internalServerError": "K serveru Beszel se nelze připojit. Zkontrolujte nastavení integrace." - }, - "empty": { - "noSystems": "Nebyly nalezeny žádné systémy" - }, - "metric": { - "cpu": "CPU", - "memory": "Paměť", - "disk": "Disk", - "gpu": "GPU", - "loadAvg": "Prům. zátěž", - "net": "Síť", - "temp": "Teplota", - "battery": "Baterie", - "services": "Služby", - "uptime": "Doba běhu", - "agent": "Agent" - } + "description": "Kartový mřížkový přehled všech monitorovaných systémů Beszel s metrikami v reálném čase" }, "beszelAlerts": { "name": "Beszel výstrahy", @@ -3607,11 +5073,12 @@ } }, "empty": "Žádné nakonfigurované výstrahy", - "error": { - "internalServerError": "K serveru Beszel se nelze připojit. Zkontrolujte nastavení integrace." - }, "history": "Historie", "resolved": "Vyřešeno", + "alertDescription": { + "statusDuration": "Nedostupný po dobu {minutes} min", + "threshold": "Překročí {value} přes {minutes} min" + }, "status": { "triggered": "Spuštěno", "ok": "OK" @@ -3658,16 +5125,16 @@ "noSystems": "Nebyly nalezeny žádné systémy" }, "error": { - "internalServerError": "K serveru Beszel se nelze připojit. Zkontrolujte nastavení integrace.", "liveConnectionFailed": "Živé připojení selhalo. Vaše instance Beszel možná nepodporuje streamování v reálném čase.", "switchToHistorical": "Přepnout na historické zobrazení", - "systemNotFound": "Vybraný systém nebyl nalezen. Vyberte jiný systém." + "systemNotFound": "Vybraný systém nebyl nalezen. Vyberte jiný systém.", + "selectionSaveTitle": "Výběr nelze uložit", + "selectionSaveMessage": "Výběr systému nebo časového období nelze uložit. Zkuste to prosím znovu." }, "chart": { "cpu": { "title": "Využití CPU", - "subtitle": "Průměrné využití CPU v celém systému", - "series": "CPU" + "subtitle": "Průměrné využití CPU v celém systému" }, "memory": { "title": "Využití paměti", @@ -3709,289 +5176,550 @@ "title": "Vstup/výstup sítě Dockeru", "subtitle": "Síťový provoz kontejnerů Dockeru" } + }, + "period": { + "live": "Živé", + "oneHour": "1 h", + "twelveHours": "12 h", + "oneDay": "24h", + "oneWeek": "1 w", + "thirtyDays": "30d" } }, - "patchmon": { - "name": "PatchMon", - "description": "Přehled stavu oprav hostitelů z PatchMonu", - "title": "Statistiky PatchMonu", - "totalHosts": "Celkem hostitelů", - "hostsNeedingUpdates": "Vyžaduje aktualizace", - "securityUpdates": "Bezpečnostní aktualizace", - "upToDateHosts": "Aktuální hostitelé", - "hostsWithSecurityUpdates": "Hostitelé s bezpečnostními aktualizacemi", - "recentUpdates24h": "Aktualizace (24 h)", - "totalOutdatedPackages": "Zastaralé balíčky", - "totalRepos": "Repozitáře", - "osDistribution": "Distribuce OS", - "compliance": "Soulad oprav", - "complianceRatio": "{upToDate} / {total}", - "lastUpdated": "Aktualizováno {time}", - "option": { - "showTotalHosts": { - "label": "Zobrazit celkový počet hostitelů", - "description": "Zobrazit celkový počet monitorovaných hostitelů" - }, - "showHostsNeedingUpdates": { - "label": "Zobrazit hostitele vyžadující aktualizace", - "description": "Zobrazit hostitele s alespoň jedním zastaralým balíčkem" - }, - "showSecurityUpdates": { - "label": "Zobrazit bezpečnostní aktualizace", - "description": "Zobrazit celkový počet dostupných bezpečnostních aktualizací" - }, - "showUpToDateHosts": { - "label": "Zobrazit aktuální hostitele", - "description": "Zobrazit hostitele s nulovým počtem zastaralých balíčků" - }, - "showHostsWithSecurityUpdates": { - "label": "Zobrazit hostitele s bezpečnostními aktualizacemi", - "description": "Zobrazit hostitele vyžadující bezpečnostní opravy" - }, - "showRecentUpdates24h": { - "label": "Zobrazit poslední aktualizace (24 h)", - "description": "Zobrazit počet aktualizací použitých za posledních 24 hodin" - }, - "showTotalOutdatedPackages": { - "label": "Zobrazit zastaralé balíčky", - "description": "Zobrazit celkový počet zastaralých balíčků na všech hostitelích" - }, - "showTotalRepos": { - "label": "Zobrazit repozitáře", - "description": "Zobrazit počet aktivních monitorovaných repozitářů" - }, - "enableThresholdColors": { - "label": "Povolit barvy podle prahových hodnot", - "description": "Obarvit statistické hodnoty zeleně, žlutě nebo červeně podle předvoleb závažnosti" - }, - "useCustomThresholds": { - "label": "Pokročilé prahové hodnoty", - "description": "Přizpůsobit varovné a kritické prahové hodnoty pro jednotlivé statistiky pomocí absolutních počtů nebo procent celkového počtu hostitelů" - }, - "thresholdMode": { - "option": { - "absolute": "Absolutní počet", - "percent": "Procento celkového počtu hostitelů" - } - }, - "hostsNeedingUpdatesThresholdMode": { - "label": "Režim prahové hodnoty pro aktualizace", - "description": "Porovnat počet aktualizací jako absolutní hodnotu nebo procento celkového počtu hostitelů" - }, - "hostsNeedingUpdatesWarningAt": { - "label": "Varovná prahová hodnota aktualizací", - "description": "Při dosažení této prahové hodnoty zadat žlutou barvu" - }, - "hostsNeedingUpdatesCriticalAt": { - "label": "Kritická prahová hodnota aktualizací", - "description": "Při dosažení této prahové hodnoty zadat červenou barvu" - }, - "securityUpdatesThresholdMode": { - "label": "Režim prahové hodnoty bezpečnostních aktualizací", - "description": "Porovnat počet bezpečnostních aktualizací jako absolutní hodnotu nebo procento celkového počtu hostitelů" - }, - "securityUpdatesWarningAt": { - "label": "Varovná prahová hodnota bezpečnostních aktualizací", - "description": "Při dosažení této prahové hodnoty zadat žlutou barvu" - }, - "securityUpdatesCriticalAt": { - "label": "Kritická prahová hodnota bezpečnostních aktualizací", - "description": "Při dosažení této prahové hodnoty zadat červenou barvu" - }, - "hostsWithSecurityUpdatesThresholdMode": { - "label": "Režim prahové hodnoty hostitelů s bezpečnostními aktualizacemi", - "description": "Porovnat počet hostitelů jako absolutní hodnotu nebo procento celkového počtu hostitelů" - }, - "hostsWithSecurityUpdatesWarningAt": { - "label": "Varovná prahová hodnota hostitelů s bezpečnostními aktualizacemi", - "description": "Při dosažení této prahové hodnoty zadat žlutou barvu" - }, - "hostsWithSecurityUpdatesCriticalAt": { - "label": "Kritická prahová hodnota hostitelů s bezpečnostními aktualizacemi", - "description": "Při dosažení této prahové hodnoty zadat červenou barvu" - }, - "upToDateHostsThresholdMode": { - "label": "Režim prahové hodnoty aktuálních hostitelů", - "description": "Porovnat počet aktuálních hostitelů jako absolutní hodnotu nebo procento celkového počtu hostitelů" - }, - "upToDateHostsWarningAt": { - "label": "Varovná prahová hodnota aktuálních hostitelů", - "description": "Při dosažení této prahové hodnoty nebo jejím překročení, ale před úplným pokrytím, zadat žlutou barvu" - }, - "upToDateHostsCriticalAt": { - "label": "Kritická prahová hodnota aktuálních hostitelů", - "description": "Při poklesu hodnoty pod tuto prahovou hodnotu zadat červenou barvu" - }, - "totalOutdatedPackagesThresholdMode": { - "label": "Režim prahové hodnoty zastaralých balíčků", - "description": "Porovnat počet zastaralých balíčků jako absolutní hodnotu nebo procento celkového počtu hostitelů" - }, - "totalOutdatedPackagesWarningAt": { - "label": "Varovná prahová hodnota zastaralých balíčků", - "description": "Při dosažení této prahové hodnoty zadat žlutou barvu" - }, - "totalOutdatedPackagesCriticalAt": { - "label": "Kritická prahová hodnota zastaralých balíčků", - "description": "Při dosažení této prahové hodnoty zadat červenou barvu" - }, - "showOsDistribution": { - "label": "Zobrazit distribuci OS", - "description": "Zobrazit rozdělení monitorovaných hostitelů podle operačního systému" - }, - "osDistributionLimit": { - "label": "Limit distribuce OS", - "description": "Maximální počet operačních systémů k zobrazení", - "option": { - "3": "Nejlepší 3", - "5": "Nejlepších 5", - "10": "Nejlepších 10", - "all": "Vše" - } - }, - "showOsVersion": { - "label": "Zobrazit verzi OS", - "description": "Pokud je k dispozici, připojit verzi OS ke každému popisku distribuce" - }, - "showComplianceHero": { - "label": "Zobrazit hlavní ukazatel souladu", - "description": "Zobrazit kruhový ukazatel souladu s procentem aktuálních hostitelů" - }, - "osDisplayMode": { - "label": "Režim zobrazení OS", - "description": "Zvolte způsob zobrazení distribuce operačních systémů", - "option": { - "bars": "Vodorovné pruhy", - "donut": "Prstencový graf" - } - } + "assistant": { + "name": "Asistent", + "description": "Mějte kompletní asistenční konverzaci přímo na vaší tabuli.", + "unavailable": { + "title": "Asistent není k dispozici", + "description": "Přihlaste se a požádejte administrátora o nastavení asistenta z řídícího panelu." }, + "compact": { + "title": "Asistent", + "description": "Změňte velikost tohoto widgetu pro chat nebo otevřete plnou konverzaci.", + "open": "Otevřít asistenta", + "openTitle": "Zástupce otevřený v postranním panelu", + "openDescription": "Konverzace zůstává na jednom aktivním povrchu.", + "returnToWidget": "Vrátit konverzaci do tohoto widgetu", + "otherWidgetTitle": "Asistent aktivní v jiném widgetu", + "otherWidgetDescription": "Pouze jedna plocha konverzace zůstává aktivní najednou.", + "useHere": "Použít asistent v tomto widgetu" + } + }, + "beszel": { "error": { - "internalServerError": "Data PatchMonu se nepodařilo načíst" - } - }, - "bazarr": { - "name": "Bazarr", - "description": "Přehled chybějících titulků a stavu kondice z vaší instance Bazarru", - "episodes": "Chybějící epizody", - "movies": "Chybějící filmy", - "providers": "Problémy poskytovatelů", - "status": "Problémy se stavem", - "option": { - "showMissingEpisodes": { - "label": "Zobrazit chybějící epizody", - "description": "Zobrazit počet epizod s chybějícími titulky" - }, - "showMissingMovies": { - "label": "Zobrazit chybějící filmy", - "description": "Zobrazit počet filmů s chybějícími titulky" - }, - "showProviderIssues": { - "label": "Zobrazit problémy poskytovatelů", - "description": "Zobrazit počet poskytovatelů titulků s problémy" - }, - "showHealthIssues": { - "label": "Zobrazit problémy se stavem", - "description": "Zobrazit počet problémů se stavem Bazarru" - } - }, - "error": { - "internalServerError": "Data Bazarru se nepodařilo načíst" - } - }, - "mediaMissing": { - "name": "Chybějící a zařazená média", - "description": "Zobrazuje chybějící a zařazené filmy a epizody ze Sonarru a Radarru", - "option": { - "showMissing": { - "label": "Zobrazit chybějící položky" - }, - "showQueued": { - "label": "Zobrazit zařazené položky" - }, - "pageSize": { - "label": "Položek na stránku" - } - }, - "tab": { - "missing": "Chybějící", - "queued": "Ve frontě" - }, - "type": { - "movie": "Film", - "episode": "Epizoda" + "internalServerError": "Nelze se připojit k Beszel. Zkontrolujte nastavení integrace." }, "empty": { - "missing": "Žádné chybějící položky", - "queued": "Žádné položky ve frontě", - "noTabsEnabled": "V nastavení widgetu povolte alespoň jednu kartu" + "noSystems": "Nebyly nalezeny žádné systémy" }, - "timeLeft": "Zbývající čas" - }, - "traefik": { - "name": "Traefik", - "description": "Přehled směrovačů, služeb, middlewaru a vstupních bodů Traefiku", - "option": { - "showTcp": { - "label": "Zobrazit TCP" + "options": { + "statusFilter": { + "label": "Stavový filtr" }, - "showUdp": { - "label": "Zobrazit UDP" + "showCpu": { + "label": "Zobrazit CPU" }, - "showEntryPoints": { - "label": "Zobrazit vstupní body" + "showMemory": { + "label": "Zobrazit paměť" + }, + "showDisk": { + "label": "Zobrazit disk" + }, + "showGpu": { + "label": "Zobrazit GPU" + }, + "showLoadAvg": { + "label": "Zobrazit průměr zatížení" + }, + "showNet": { + "label": "Zobrazit síť" + }, + "showTemp": { + "label": "Zobrazit teplotu" + }, + "showBattery": { + "label": "Zobrazit baterii" + }, + "showServices": { + "label": "Zobrazit služby" + }, + "showUptime": { + "label": "Zobrazit čas vzletu" + }, + "showAgent": { + "label": "Zobrazit verzi agenta" } }, - "instances": "Instance Traefiku", - "versionUnknown": "Verze neznámá", - "summary": { - "routers": "Směrovače", - "entryPoints": "Vstupní body" - }, - "resource": { - "routers": "Směrovače", - "services": "Služby", - "middlewares": "Middleware" - }, - "status": { - "healthy": "V pořádku", - "errors": "{count} chyb", - "warnings": "{count} varování" - }, - "error": { - "internalServerError": "Data Traefiku se nepodařilo načíst" + "metric": { + "system": "Systém", + "source": "Integrace", + "hostname": "Hostname", + "cpuModel": "Model CPU", + "cores": "Cores", + "memoryTotal": "Celková paměť", + "memory": "Paměť", + "disk": "Disk", + "loadAvg": "Zatížení Prg", + "net": "Čistá hodnota", + "temp": "Teplota", + "battery": "Netopýr", + "uptime": "Doba provozu", + "agent": "Agent" } }, - "wud": { - "name": "Co je Docker nahoru", - "description": "Zobrazit, kolik sledovaných kontejnerů je k dispozici aktualizace.", - "title": "Co je Docker nahoru", - "monitored": "Monitorováno", - "updatesAvailable": "{count, plural, one {K dispozici je # aktualizace} other {# dostupných aktualizací}}", - "updateAvailable": "K dispozici je aktualizace", - "openReleaseNotes": "Otevřít poznámky k vydání", + "llamacpp": { + "name": "llama.cpp", + "description": "Zobrazit zdraví, načtený model a rychlost generování lokálního llama.cpp serveru.", + "title": "llama.cpp", + "status": { + "unhealthy": "Nezdravé ({status})" + }, + "idle": "Nečinný", + "speedTooltip": { + "current": "Rychlost současné generace", + "average": "Průměrná rychlost výroby od spuštění", + "request": "Průměrná rychlost od začátku požadavku" + }, + "busy": "{count, plural, one {# žádost běží} other {# požadavků běží}}", + "modelInfo": { + "context": "Kontext", + "size": "Velikost souboru", + "parameters": "Parametry", + "model": "Vzor", + "quantization": "Kvantifikace" + }, + "stats": { + "tokensProcessed": "Tokeny zpracovány", + "contextUsage": "Využití kontextu/KV", + "cacheHitRate": "Rychlost dosažení mezipaměti", + "tokensGenerated": "Vygenerované Tokeny" + }, + "error": { + "unreachable": "llama-server není dostupný" + }, + "unit": { + "speed": "{value} t/s", + "parameters": "{value}B", + "none": "—", + "speedShort": "t/s" + }, "option": { "showTitle": { "label": "Zobrazit název" }, - "showRing": { - "label": "Zobrazit vyzvánění aktualizace" + "showModelInfo": { + "label": "Zobrazit informace o modelu" }, - "layout": { - "label": "Rozložení", + "showContextUsage": { + "label": "Zobrazit kontextové využití" + }, + "showCacheHitRate": { + "label": "Zobrazit rychlost dosažení mezipaměti" + }, + "showSpeedStats": { + "label": "Zobrazit statistiky rychlosti" + }, + "showRequests": { + "label": "Zobrazit načtení požadavku" + }, + "showTokenStats": { + "label": "Zobrazit souhrn tokenu" + }, + "showSpeculative": { + "label": "Zobrazit spekulativní dekódování" + } + }, + "advanced": { + "promptSpeed": "Rychlost na vyžádání", + "avgSpeed": "Průměrné generování", + "requests": "Žádosti", + "deferred": "Odloženo", + "slots": "{processing}/{total} sloty obsazeny", + "speculative": "Spekulativní dekódování", + "avgPrompt": "Prům. výzva", + "specDrafts": "Spec. koncepty", + "specAccepted": "Spec. přijaté tokeny", + "specDraftTokens": "Spec. koncept tokenů" + } + }, + "stats": { + "name": "Statistiky", + "description": "Kombinujte statistiky z integrace do jednoho konfigurovatelného widgetu.", + "configure": "Konfigurace metriky", + "refresh": "Aktualizovat statistiky", + "empty": "Otevřete nastavení widgetu, vyberte integrace, poté přidejte metriky.", + "editorHelp": "Přidejte metriku z integrací vybraných pro tento widget. Změny jsou uloženy ve vaší nástěnce.", + "source": "Integrace", + "metric": "Metrické", + "noMetrics": "Pro tuto integraci nejsou dostupné žádné statistiky", + "add": "Přidat metriku", + "label": "Vlastní štítek", + "hidden": "Hidden", + "compact": "Kompaktní čísla", + "moveUp": "Posunout nahoru", + "moveDown": "Posunout dolů", + "remove": "Odstranit metriku", + "loading": "Načítání…", + "unavailable": "Unavailable", + "refreshFailed": "Obnovení se nezdařilo – zobrazuji uložená data", + "stale": "Uložená data — aktualizovat pro aktualizaci", + "table": { + "value": "Hodnota", + "status": "Stav" + }, + "option": { + "table": { + "label": "Zobrazení tabulky" + }, + "rows": { + "label": "Kompaktní řádky" + }, + "showIcon": { + "label": "Zobrazit ikonu zdroje" + }, + "spacing": { + "label": "Mezera", "option": { - "horizontal": { - "label": "Horizontální" + "xs": { + "label": "Kompaktní" }, - "vertical": { - "label": "Vertikální" + "sm": { + "label": "Komfortní" + }, + "md": { + "label": "Prostor" } } }, - "showUpdateList": { - "label": "Zobrazit seznam aktualizací kontejneru", - "description": "Zobrazí seznam každého monitorovaného kontejneru, který má k dispozici aktualizaci obrázku" + "entries": { + "label": "Metrika" + }, + "plain": { + "label": "Odstranit pozadí karty" } - } + }, + "fetchFailed": "Nelze načíst statistiky", + "viewOptions": "Přizpůsobit toto zobrazení", + "moreMetrics": "{count} více v pokročilém zobrazení", + "localHelp": "Rozvržení, formátování a viditelnost platí pouze pro toto zobrazení. Sdílená nastavení desky zůstanou stejná.", + "plain": "Odstranit pozadí karty", + "resetView": "Obnovit zobrazení", + "allHidden": "Všechny metriky jsou skryty v tomto zobrazení. Použijte toto zobrazení pro jejich obnovení." + }, + "wazuh": { + "target": { + "api": "API serveru Wazuh", + "indexer": "Index Wazuh", + "wazuh": "Wazuh" + }, + "severity": { + "low": "Nízká", + "medium": "Střední", + "high": "Vysoká", + "critical": "Kritický" + }, + "error": { + "unauthorized": { + "title": "{target} odmítl pověření", + "description": "Zkontrolujte uživatelské jméno a heslo uložené integrací Wazuh. API serveru (port 55000) a indexer (port 9200) používají samostatné uživatele." + }, + "certificate": { + "title": "Certifikát {target} není důvěryhodný", + "description": "Wazuh ve výchozím nastavení používá certifikát podepsaný sama. Spusťte \"Testovací připojení\" při integraci a důvěřujte certifikátu, nebo přidejte CA do Nastavení → Certifikáty." + }, + "unreachable": { + "title": "Nelze dosáhnout {target}", + "description": "Hostitel odmítl nebo upustil připojení. Zkontrolujte URL, port a firewall. Indexování pouze poslouchá localhost ve výchozím nastavení vše v jednom." + }, + "timeout": { + "title": "{target} vypršel časový limit", + "description": "Žádná odpověď do 15 sekund. Služba může být přetížena, nebo adresa může být špatná." + }, + "status": { + "title": "{target} vrátil chybu", + "description": "Požadavek selhal s HTTP stavem {status}." + }, + "invalidResponse": { + "title": "Neočekávaná odpověď od {target}", + "description": "Zkontrolujte, zda URL odkazuje na Wazuh server API nebo index, a ne na dashboard." + }, + "indexerRequired": { + "title": "Vyžadována pověření pro indexování Wazuh", + "description": "Upozornění, zranitelnost a události s integritou souboru jsou čteny z Wazuh indexu. Přidejte URL indexu, uživatelské jméno a heslo k integraci." + }, + "unknown": { + "title": "Nelze načíst data z {target}", + "description": "Detaily naleznete v protokolu Homarr." + } + }, + "range": { + "1h": "1 h", + "24h": "24h", + "7d": "7d", + "30d": "30d" + }, + "levelTooltip": "Úroveň pravidla {level} ({severity})" + }, + "wazuhAgents": { + "name": "Wazuh agenti", + "description": "Seřadit seznam Wazuh agentů se stavem, OS, verzí a posledním udržovacím systémem", + "option": { + "statusFilter": { + "label": "Zobrazit agenty" + }, + "sortBy": { + "label": "Seřadit podle" + }, + "showVersion": { + "label": "Zobrazit sloupec Wazuh" + }, + "showGroups": { + "label": "Zobrazit sloupec skupin" + } + }, + "title": "Agenti", + "total": "{count} agenti", + "status": { + "active": "Aktivní", + "disconnected": "Odpojeno", + "neverConnected": "Nikdy nepřipojeno", + "pending": "Nevyřízeno" + }, + "statusLabel": { + "active": "Aktivní", + "disconnected": "Odpojeno", + "never_connected": "Nikdy nepřipojeno", + "pending": "Nevyřízeno", + "unknown": "Neznámý" + }, + "live": "Živé", + "snapshot": "Snímek {age} starý", + "snapshotHint": "Přečtěte si z Wazuh dashboardu agenta (sledování wazuh-monitoringu) na {time}. Přidejte API přihlašovací údaje pro živá data.", + "staleSnapshot": "Agent snapshot z {time} je zastaralý. Zkontrolujte, zda běží funkce monitorování Wazuh, nebo přidejte API přihlašovací údaje.", + "noDisconnected": "Všichni agenti jsou připojeni", + "empty": "Tomuto filtru neodpovídají žádní agenti", + "column": { + "status": "Stav", + "name": "Název úlohy", + "ip": "IP adresa", + "os": "OS", + "version": "Verze", + "lastKeepAlive": "Uchovávejte", + "groups": "Skupiny" + }, + "outdated": "Starší než nejnovější verze agenta ({version})" + }, + "wazuhAlerts": { + "name": "Wazuh feed upozornění", + "description": "Nedávné výstrahy Wazuh s úrovní, technikami MITRE ATT&CK a zdrojovou IP", + "option": { + "minLevel": { + "label": "Minimální úroveň pravidla", + "description": "Wazuh úrovně: 0–6 nízký, 7–11 střední, 12–14 vysoký, 15+ kritický" + }, + "hours": { + "label": "Časové okno (v hodinách)" + }, + "limit": { + "label": "Počet záznamů" + }, + "showMitre": { + "label": "Show MITRE ATT&CK techniques" + }, + "showAgent": { + "label": "Zobrazit agenta" + }, + "showSourceIp": { + "label": "Zobrazit zdrojovou IP" + }, + "showRuleId": { + "label": "Zobrazit ID pravidla" + } + }, + "title": "Upozornění · úroveň {level}+ · {hours}h", + "empty": "Na této úrovni nejsou žádná upozornění. Všechny tichy.", + "rule": "Pravidlo {id}", + "openInDashboard": "Otevřít toto upozornění na Wazuh dashboardu" + }, + "wazuhSummary": { + "name": "Upozornění na závažnost Wazuh", + "description": "Členění podle důležitosti výstrahy s trendem oproti předchozímu období", + "option": { + "range": { + "label": "Časový rozsah" + }, + "showTrend": { + "label": "Zobrazit trend oproti předchozímu období" + }, + "showFooter": { + "label": "Zobrazit zápatí" + } + }, + "title": "Upozornění na závažnost · {range}", + "alerts": "Výstrahy", + "none": "Žádná upozornění", + "trend": { + "new": "nový", + "tooltip": "Předchozí období: {previous}" + }, + "previous": "Předchozí {range}: {count}", + "maxLevel": "Maximální úroveň {level}", + "health": "Indexovat zdraví: {status}", + "manager": "Správce {version}" + }, + "wazuhTimeline": { + "name": "Wazuh alerts timeline", + "description": "Skrytá mapa upozornění Wazuh v průběhu času podle závažnosti", + "option": { + "range": { + "label": "Časový rozsah" + }, + "interval": { + "label": "Interval" + }, + "chartType": { + "label": "Typ grafu" + }, + "yScale": { + "label": "Měřítko osy Y", + "description": "Čtvereční root udržuje vysoká a kritická upozornění viditelná vedle tisíců nízkých" + }, + "minLevel": { + "label": "Minimální úroveň pravidla" + }, + "showLegend": { + "label": "Zobrazit legendu s celkovými údaji" + } + }, + "title": "Časová osa upozornění · {range}", + "total": "{count} upozornění", + "interval": "za {interval}" + }, + "wazuhTopList": { + "name": "Seznam nejlepších Wazuh", + "description": "Nejlepší pravidla, agenti, zdrojové IP nebo MITRE ATT&CK taktika a techniky podle počtu výstrah", + "option": { + "kind": { + "label": "Hodnost" + }, + "range": { + "label": "Časový rozsah" + }, + "limit": { + "label": "Počet vstupů" + }, + "minLevel": { + "label": "Minimální úroveň pravidla" + }, + "showBars": { + "label": "Zobrazit pruhy" + } + }, + "title": { + "rules": "Nejlepší pravidla · {range}", + "agents": "Nejlepší agenti · {range}", + "sourceIps": "Nejvíce zdrojové IP · {range}", + "mitreTactics": "MITRE taktika · {range}", + "mitreTechniques": "MITRE techniques · {range}" + }, + "empty": { + "rules": "Žádná upozornění v tomto období", + "agents": "Žádná upozornění v tomto období", + "sourceIps": "Žádná upozornění se zdrojovou IP v tomto období", + "mitreTactics": "Žádná upozornění mapovaná na MITRE ATT&CK v tomto období", + "mitreTechniques": "Žádná upozornění mapovaná na MITRE ATT&CK v tomto období" + }, + "totalTooltip": "{count} odpovídající upozornění", + "private": "LAN", + "public": "Veřejné", + "agents": "Viděno na {count} agentech", + "others": "{count} další upozornění v ostatních záznamech" + }, + "wazuhVulnerabilities": { + "name": "Wazuh zranitelnost", + "description": "Počet zranitelnosti, špičkové CVEs a nejzranitelnější činitelé", + "option": { + "cveOrder": { + "label": "Hodnocení CVEs od" + }, + "minSeverity": { + "label": "Závažnost CVE" + }, + "cveLimit": { + "label": "Počet CVEs" + }, + "agentLimit": { + "label": "Počet agentů" + }, + "showAgents": { + "label": "Zobrazit nejzranitelnější agenty" + } + }, + "title": "Zranitelné", + "topCves": "Nejlepší CVEs", + "score": "Skóre", + "agentsShort": "Agenti", + "topAgents": "Nejzranitelnější agenti", + "criticalHigh": "Království / vysoké", + "totalTooltip": "{count} nálezy na {agents} agentech", + "affected": "{count} agenti", + "empty": "Nenalezeny žádné chyby zabezpečení", + "distribution": "Rozložení závažnosti. {unscored} nálezy bez skóre nejsou zobrazeny.", + "worst": "Nejhorší: {id} ({score}) na {agents} agentech" + }, + "wazuhFim": { + "name": "Integrita souboru Wazuh", + "description": "Nedávné události monitorování integrity souboru (syscheck)", + "option": { + "range": { + "label": "Časový rozsah" + }, + "event": { + "label": "Události" + }, + "limit": { + "label": "Počet událostí" + }, + "includeRegistry": { + "label": "Zahrnout události registru Windows" + } + }, + "title": "Integrita souboru · {range}", + "event": { + "added": "Datum přidání", + "modified": "Upraveno", + "deleted": "Odstraněno", + "unknown": "Změněno" + }, + "empty": "Žádné události s integritou souboru v tomto období", + "user": "od {user}", + "registry": "Soudní kancelář" + }, + "wazuhAuthFailures": { + "name": "Selhání ověřování Wazuh", + "description": "Nezdařilo se přihlásit a vynucená upozornění na agenta s hodinovou špinavou", + "option": { + "hours": { + "label": "Časové okno (v hodinách)" + }, + "limit": { + "label": "Počet agentů" + }, + "showSourceIps": { + "label": "Zobrazit nejlepší zdrojové IP adresy" + } + }, + "title": "Selhání ověření · {hours}h", + "seriesTooltip": "Všichni agenti za poslední {hours}h", + "peak": "Špička {count}/bucket", + "empty": "Žádná neúspěšná přihlášení v tomto období", + "failed": "Neúspěšná přihlášení", + "failedHint": "Selhání jediné autentizace (sshd, PAM, Windows logon, neplatné uživatele)", + "bruteForce": "Brzdná síla", + "bruteForceHint": "Související pravidla pro vyvažování kartografických sil (několik selhání v krátkém čase, MITRE T1110)", + "sourceIps": "Zdrojové IP", + "ipTooltip": "{ip}: {count} selhání", + "bruteForceCount": "{count} hrubá síla" } }, "widgetPreview": { @@ -4004,7 +5732,76 @@ } }, "board": { + "emptyState": { + "title": "Vytvořte svůj první pohled", + "description": "Přidejte widget nebo aplikaci nebo připojte službu a použijte její data v této tabuli.", + "addWidget": "Přidat widget", + "addApp": "Přidat aplikaci", + "connectService": "Připojit službu" + }, + "setupChecklist": { + "title": "Udělejte tuto desku užitečnou", + "description": "Zvedněte tam, kde jste skončili. Pokrok sleduje obsah, který je již v této tabuli.", + "collapse": "Sbalit kontrolní seznam nastavení", + "dismiss": "Zrušit kontrolní seznam nastavení", + "resume": "Pokračovat v nastavení ({completed}/{total})", + "progress": "Průběh instalace", + "step": { + "content": { + "label": "Přidat užitečný obsah", + "description": "Vyberte widget a nakonfigurujte ho před jeho umístěním." + }, + "app": { + "label": "Připnout aplikaci", + "description": "Udržujte službu nebo nástroj jedním kliknutím pryč od této desky." + }, + "service": { + "label": "Připojit službu", + "description": "Odemknout živá data a akce pro kompatibilní widgety.", + "permissionDescription": "Správce může připojit službu pro odemknutí živých dat.", + "action": "Připojit" + } + } + }, "action": { + "addContent": "Přidat obsah tabule", + "settings": "Nastavení desky", + "switch": "Přepnout desku", + "switcher": { + "title": "Přepnout desku", + "search": { + "empty": "Žádné tabule neodpovídají \"{search}\"." + }, + "results": "Dostupné tabule", + "preview": "Náhled {name} s {count} položkami", + "currentHidden": "Aktuální panel: {name}", + "keyboard": { + "navigate": "Navigate", + "open": "Otevřít", + "instructions": "Zadejte pro filtrování tabulek. Pomocí kláves se šipkami přesunou výsledky a Enter otevřete tabuli." + }, + "empty": { + "title": "Žádné další tabule", + "description": "Nejsou žádné další tabule, ke kterým můžete přistupovat." + }, + "error": "Tabule nelze načíst." + }, + "create": { + "availability": { + "checking": "Kontrola dostupnosti…", + "available": "{name} je k dispozici" + }, + "notification": { + "success": { + "title": "Tabule vytvořena", + "message": "Board {name} byl vytvořen" + }, + "error": { + "title": "Nelze vytvořit desku", + "message": "Tabule {name} nelze vytvořit" + } + } + }, "duplicate": { "title": "Duplikovat plochu", "message": "Tím se duplikuje plocha {name} včetně veškerého obsahu. Pokud widgety odkazují na integrace, které nemáte povoleno používat, budou odstraněny.", @@ -4020,14 +5817,19 @@ } }, "edit": { + "enter": "Upravit desku", + "save": "Uložit desku", + "exit": "Ukončit režim úprav", "notification": { "success": { - "title": "Změny byly úspěšně aplikovány", "message": "Plocha byla úspěšně uložena" }, "error": { - "title": "Nelze uložit změny", "message": "Plochu se nepodařilo uložit" + }, + "loadError": { + "title": "Nelze začít editovat", + "message": "Editor panelu nelze načíst. Váš dashboard je stále k dispozici v režimu zobrazení." } }, "confirmLeave": { @@ -4035,62 +5837,6 @@ "message": "Máte neuložené změny, jste si jistí, že chcete odejít?" } }, - "oldImport": { - "label": "Import z Homarru před verzí 1.0.0", - "notification": { - "success": { - "title": "Import byl úspěšný", - "message": "Plocha byla úspěšně importována" - }, - "error": { - "title": "Import selhal", - "message": "Plochu se nepodařilo importovat, zkontrolujte logy pro více informací" - } - }, - "form": { - "file": { - "label": "Vybrat soubor JSON", - "invalidError": "Neplatný konfigurační soubor" - }, - "apps": { - "label": "Aplikace", - "avoidDuplicates": { - "label": "Předejít duplicitám", - "description": "Ignoruje aplikace, pokud již existuje aplikace se stejným odkazem" - }, - "onlyImportApps": { - "label": "Importovat pouze aplikace", - "description": "Přidá pouze aplikace; plochu je nutné vytvořit ručně" - } - }, - "name": { - "label": "Název plochy" - }, - "screenSize": { - "label": "Velikost obrazovky", - "description": "Ve verzích před 1.0 existovaly tři různé režimy, takže jste mohli zvolit počet sloupců pro každou velikost obrazovky.", - "option": { - "sm": "Malé", - "md": "Střední", - "lg": "Velké" - } - }, - "sidebarBehavior": { - "label": "Chování postranního panelu", - "description": "Postranní panely byly ve verzi 1.0 odstraněny. Můžete vybrat, co se má stát s položkami uvnitř nich.", - "option": { - "lastSection": { - "label": "Poslední sekce", - "description": "Postranní panel se zobrazí pod poslední sekcí" - }, - "removeItems": { - "label": "Odebrat položky", - "description": "Položky obsažené v postranním panelu budou odebrány" - } - } - } - } - }, "quickCreateApp": { "modal": { "title": "Vytvořit aplikaci za běhu", @@ -4098,6 +5844,12 @@ } } }, + "landmark": { + "canvas": "plátno hlavního panelu", + "leftRail": "Kolejnice levého hlavního panelu", + "rightRail": "Kolejnice pravého panelu", + "items": "Položky hlavního panelu" + }, "field": { "pageTitle": { "label": "Nadpis strany" @@ -4167,7 +5919,8 @@ } }, "primaryColor": { - "label": "Primární barva" + "label": "Primární barva", + "locked": "Administrátor udržuje značku instance na každé desce." }, "secondaryColor": { "label": "Doplňková barva" @@ -4207,9 +5960,6 @@ "xl": "Velmi velké" } }, - "name": { - "label": "Název" - }, "isPublic": { "label": "Veřejné", "description": "Veřejné plochy jsou přístupné všem, i bez účtu." @@ -4229,9 +5979,44 @@ "title": "Rozložení", "responsive": { "title": "Responzivní rozvržení", + "description": "Každé rozvržení udržuje své vlastní pozice a velikosti widgetů. Mobilní a základna jsou vždy k dispozici; přidejte vlastní rozložení na jakékoli další zarážce.", "action": { "add": "Přidat rozvržení" } + }, + "role": { + "mobile": "Mobil", + "base": "Základ", + "custom": "Vlastní" + }, + "custom": { + "defaultName": "Vlastní rozložení" + }, + "mobile": { + "breakpointDescription": "Mobil se vždy používá od 0px až do další zarážky rozložení." + }, + "preview": { + "columns": "sloupce", + "empty": "Toto rozložení je prázdné", + "dynamicSection": "Dynamický úsek", + "editorWidthLabel": "{layoutName} · {width}px" + }, + "reset": { + "action": "Obnovit ze základny", + "confirm": { + "title": "Reset {layoutName}?", + "message": "Toto nahrazuje každou uloženou pozici a velikost v tomto rozložení novým rozložením generovaným ze základny. Tuto akci nelze vrátit zpět." + } + }, + "edit": { + "action": "Upravit rozvržení", + "saveAndEdit": "Uložit a upravit", + "save": "Uložit rozvržení", + "cancel": { + "action": "Zrušit úpravy rozvržení", + "title": "Zahodit změny rozložení?", + "message": "Vaše neuložené změny v tomto rozvržení budou zahozeny." + } } }, "background": { @@ -4268,10 +6053,7 @@ "rename": { "label": "Přejmenovat plochu", "description": "Změna názvu přeruší všechny odkazy na tuto plochu.", - "button": "Změnit název", - "modal": { - "title": "Přejmenovat plochu" - } + "button": "Změnit název" }, "visibility": { "label": "Změnit viditelnost plochy", @@ -4295,9 +6077,7 @@ } }, "delete": { - "label": "Smazat tuto plochu", "description": "Jakmile plochu smažete, není cesty zpět. Ujistěte se, že to opravdu chcete.", - "button": "Smazat tuto plochu", "confirm": { "title": "Odstranit plochu", "description": "Jste si jisti, že chcete odstranit tuto plochu? Toto trvale odstraní plochu a veškerý její obsah." @@ -4342,28 +6122,41 @@ }, "layout": { "field": { - "name": { - "label": "Název" - }, "columnCount": { "label": "Počet sloupců" }, "breakpoint": { "label": "Bod přerušení", "description": "Rozvržení se použije na všech obrazovkách větších než tento bod přerušení až do dalšího většího bodu přerušení." + }, + "gutters": { + "label": "Opravené postranní panely", + "description": "Rezervovat až tři sloupce hlavního panelu na každé straně. Zbývající plátno automaticky znovu zapne.", + "left": { + "label": "Left sidebar", + "description": "Ponechat tuto oblast viditelnou při posunu hlavního panelu.", + "thumbLabel": "Left sidebar width" + }, + "right": { + "label": "Pravý postranní panel", + "description": "Ponechat tuto oblast viditelnou při posunu hlavního panelu.", + "thumbLabel": "Šířka pravého postranního panelu" + }, + "width": { + "label": "Šířka ve sloupcích" + }, + "preview": { + "label": "Náhled rozložení hlavního panelu" + } } } }, "management": { "metaTitle": "Správa", - "title": { - "morning": "Dobré ráno, {username}", - "afternoon": "Dobré odpoledne, {username}", - "evening": "Dobrý večer, {username}" - }, "notFound": { "title": "Nenalezeno", - "text": "Nepodařilo se nalézt požadovaný zdroj" + "text": "Nepodařilo se nalézt požadovaný zdroj", + "backToHome": "Zpět na správu domů" }, "error": { "title": "Tuto stránku se nepodařilo načíst", @@ -4372,19 +6165,10 @@ }, "navbar": { "items": { - "workshop": "Workshop", "home": "Domovská stránka", - "boards": "Plochy", - "apps": "Aplikace", - "integrations": "Integrace", - "searchEngies": "Vyhledávače", - "medias": "Média", "users": { - "label": "Uživatelé", "items": { - "manage": "Spravovat", - "invites": "Pozvánky", - "groups": "Skupiny" + "manage": "Spravovat" } }, "tools": { @@ -4392,10 +6176,7 @@ "items": { "docker": "Docker", "kubernetes": "Kubernetes", - "logs": "Logy", "api": "API a MCP", - "certificates": "Certifikáty", - "tasks": "Úlohy", "backup": "Záloha" } }, @@ -4409,21 +6190,12 @@ "sourceCode": "Zdrojový kód" } }, - "about": "O aplikaci" + "about": "O aplikaci", + "assistant": "Asistent" } }, "page": { "home": { - "statistic": { - "board": "Plochy", - "user": "Uživatelé", - "invite": "Pozvánky", - "integration": "Integrace", - "app": "Aplikace", - "group": "Skupiny", - "searchEngine": "Vyhledávače", - "media": "Média" - }, "statisticLabel": { "boards": "Plochy", "resources": "Zdroje", @@ -4461,13 +6233,8 @@ "tooltip": "Tato plocha se zobrazí jako vaše mobilní plocha" } }, - "duplicate": { - "label": "Duplikovat plochu" - }, "delete": { - "label": "Trvale smazat", "confirm": { - "title": "Odstranit plochu", "description": "Jste si jisti, že chcete vymazat plochu {name}?" } } @@ -4476,28 +6243,82 @@ "public": "Tato plocha je veřejná", "private": "Tato plocha je soukromá" }, - "noResults": { - "title": "Zatím žádné plochy" + "preview": { + "label": "Náhled rozložení pro {name}s položkami {count}", + "unknownCreator": "Neznámý tvůrce" }, - "modal": { - "createBoard": { - "field": { - "name": { - "label": "Název" - } - } - } + "noResults": { + "title": "Zatím žádné plochy", + "description": "Vytvořte desku pro uspořádání aplikací a widgetů na jednom místě." } }, "media": { "includeFromAllUsers": "Zahrnout média všech uživatelů" }, "user": { - "back": "Zpět na uživatele", "fieldsDisabledExternalProvider": "Některá pole jsou vypnuta, protože jsou spravována externím poskytovatelem ověřování.", "setting": { "general": { "title": "Obecné", + "header": { + "title": "Studio záhlaví", + "badge": "Osobní", + "description": "Ovládání tahů kdekoli na řadě. Levá, středová a pravá strana zůstanou fixní, zatímco ovládají posun kolem sebe.", + "device": { + "desktop": "Stolní počítače", + "mobile": "Mobil" + }, + "zones": { + "left": "Vlevo", + "center": "Střed", + "right": "Vpravo" + }, + "action": { + "hide": "Skrýt záhlaví", + "show": "Zobrazit záhlaví", + "configure": "Přesunout nebo konfigurovat {item}", + "remove": "Odstranit {item}", + "dropIntoZone": "Přesunout do sekce {zone}" + }, + "preview": { + "board": "Náhled hlavního panelu pro {name}", + "empty": "Není dostupné rozvržení hlavního panelu" + }, + "available": { + "title": "Dostupné ovládací prvky", + "description": "Přidejte ovladač a pak přetáhněte jeho plné tlačítko do pozice výše.", + "requiredAlways": "Tento ovladač je vyžadován, ale můžete jej přesunout kdekoli v záhlaví.", + "allAdded": "Každé vestavěné ovládání je již v záhlaví.", + "add": "Přidat {item}", + "boardShortcut": "Zástupce desky", + "chooseBoard": "Vybrat desku" + }, + "configuration": { + "description": "Tento ovládací prvek zůstává ve stejné velikosti jako v živém záhlaví.", + "searchDisplay": { + "input": "Vyhledávací lišta", + "icon": "Pouze ikona" + }, + "logoDisplay": { + "logo": "Pouze logo", + "logoAndText": "Logo + text" + } + }, + "items": { + "logo": "Logo", + "search": "Vyhledat", + "home": "Domovský panel", + "boardSwitcher": "Plochy", + "assistant": "Asistent", + "docker": "Dokovací modul", + "boardEdit": "Upravit desku", + "boardSettings": "Nastavení desky", + "settings": "Vaše nastavení", + "themeToggle": "Přepnout motiv", + "user": "Účet", + "boardUnavailable": "Board není k dispozici" + } + }, "item": { "language": "Jazyk & oblast", "board": { @@ -4531,14 +6352,10 @@ }, "security": { "title": "Bezpečnost" - }, - "board": { - "title": "Plochy" } }, "list": { - "metaTitle": "Správa uživatelů", - "title": "Uživatelé" + "metaTitle": "Správa uživatelů" }, "edit": { "metaTitle": "Upravit uživatele {username}" @@ -4592,9 +6409,6 @@ } }, "field": { - "id": { - "label": "ID" - }, "creator": { "label": "Vytvořil/a" }, @@ -4618,10 +6432,7 @@ }, "setting": { "title": "Nastavení", - "alert": "Nastavení skupin mají prioritu podle pořadí skupin v seznamu. Nastavení nahoře přepisují nastavení dole.", - "board": { - "title": "Plochy" - } + "alert": "Nastavení skupin mají prioritu podle pořadí skupin v seznamu. Nastavení nahoře přepisují nastavení dole." }, "members": { "title": "Členové", @@ -4629,10 +6440,7 @@ "notFound": "Žádný člen nebyl nenalezen" }, "permissions": { - "title": "Oprávnění", - "form": { - "unsavedChanges": "Máte neuložené změny!" - } + "title": "Oprávnění" } } }, @@ -4641,12 +6449,10 @@ "notification": { "success": { "message": "Nastavení byla úspěšně uložena" - }, - "error": { - "message": "Uložení nastavení selhalo" } }, "section": { + "analyticsDocumentation": "Podívejte se, co přesně shromažďuje analytická data Homarr", "analytics": { "title": "Analytika", "general": { @@ -4675,7 +6481,6 @@ } }, "board": { - "title": "Plochy", "homeBoard": { "label": "Globální domovská plocha", "mobileLabel": "Globální mobilní plocha", @@ -4694,7 +6499,6 @@ } }, "user": { - "title": "Uživatelé", "enableGravatar": { "label": "Povolit Gravatar", "description": "Pokud není nastaven vlastní avatar a je nakonfigurován e-mail, použijí se avatary uživatelů z Libravataru/Gravataru" @@ -4710,12 +6514,86 @@ "appearance": { "title": "Vzhled", "defaultColorScheme": { - "label": "Výchozí barevné schéma", + "label": "Výchozí barevné schéma" + } + }, + "branding": { + "title": "Značka instance", + "groups": { + "identity": "Identita", + "appearance": "Vzhled", + "customCss": "Custom CSS", + "authentication": "Ověření" + }, + "identity": { + "description": "Logo aplikace je větší známka používaná uvnitř aplikace, na přihlašovacích stránkách a na nainstalovaných aplikacích. Ikona prohlížeče (favicon) je malý čtverec používaný v kartách a záložkách; pokud je prázdný, vrátí se k logu aplikace." + }, + "appName": { + "label": "Název aplikace" + }, + "greeting": { + "label": "Vlastní pozdravení" + }, + "logo": { + "label": "Logo aplikace", + "placeholder": "/logo/logo.png" + }, + "favicon": { + "label": "Ikona prohlížeče (favikona)", + "placeholder": "Používá logo aplikace" + }, + "primaryColor": { + "label": "Primární barva" + }, + "secondaryColor": { + "label": "Sekundární zvýraznění" + }, + "lockPrimaryColor": { + "label": "Ponechat tuto barvu na každé desce", + "description": "Zabraňuje výměně odstínu aplikace." + }, + "signInBackground": { + "label": "Pozadí ověření", + "placeholder": "https://example.com/background.jpg" + }, + "signInOverlay": { + "label": "Překrytí pozadí" + }, + "defaultRadius": { + "label": "Styl rohů", "options": { - "auto": "Automaticky", - "light": "Světlé", - "dark": "Tmavé" + "xs": "Mírný", + "sm": "Jemný", + "md": "Vyvážená", + "lg": "Zaobleno", + "xl": "Měkké" } + }, + "customCss": { + "label": "Globální vlastní CSS", + "description": "Aplikováno na každou stránku. Vlastní CSS může přepsat." + }, + "authVisibility": { + "description": "Zvolte co se objeví na každé ověřovací stránce.", + "appName": "Název aplikace", + "logo": "Logo aplikace", + "greeting": "Zdravím" + }, + "summary": { + "title": "Aktuální značka", + "cornerStyle": "Styl rohů", + "palette": "Palette", + "backgroundConfigured": "Vlastní pozadí · {overlay}% překrytí", + "backgroundDefault": "Výchozí pozadí", + "greetingConfigured": "Vlastní pozdravení", + "greetingDefault": "Výchozí pozdrav", + "boardColorLocked": "Barva tabule uzamčena", + "boardColorFlexible": "Barvy desky jsou povoleny", + "appName": "Název úlohy", + "logo": "Logo", + "greeting": "Zdravím", + "on": "Zapnuto", + "off": "Vypnuto" } }, "culture": { @@ -4723,12 +6601,177 @@ "defaultLocale": { "label": "Výchozí jazyk" } + }, + "assistant": { + "loading": "Načítání konfigurace asistenta", + "title": "Asistent", + "description": "Připojte model kompatibilní s OpenAI pro instantní asistenta.", + "security": { + "description": "Klíče API a další hodnoty záhlaví jsou v databázi Homarr šifrovány. Nikdy nejsou vráceny do prohlížečů. Požadavky na model jsou odesílány z Homarr serveru přímo na konfigurovaný koncový bod." + }, + "overview": { + "connectionReady": "Připojení je připraveno", + "unsavedChanges": "Neuložené změny", + "setupRequired": "Vyžadováno nastavení", + "disabled": "Vypnuto", + "noModel": "Nebyl vybrán žádný model" + }, + "connection": { + "endpointTitle": "Poskytovatel a koncový bod", + "description": "Vyberte si předvolbu nebo připojte jakoukoli službu, která implementuje OpenAI Chat Completions API.", + "save": "Uložit připojení poskytovatele" + }, + "credentials": { + "title": "Pověření", + "description": "Přidejte tajemství, která potřebují. Uložené hodnoty zůstávají šifrované a nelze je přečíst zpět.", + "required": "Je vyžadován klíč", + "optional": "Klíč volitelný", + "workshop": "Přihlášení k GitHubu pro uživatele" + }, + "provider": { + "title": "Poskytovatel", + "groups": { + "free": "Zdarma s Homarrem", + "hosted": "Hostitelští poskytovatelé", + "local": "Místní poskytovatelé", + "custom": "Vlastní" + }, + "options": { + "homarr": { + "description": "Omezený počet použití asistenta je zdarma každý den, placený týmem Homarru. Přihlaste se pomocí Komunitní Workshopu pro použití vašeho příspěvku." + }, + "openrouter": { + "description": "Hostovaný model směrování s velkým nástrojově schopným katalogem." + }, + "openai": { + "description": "OpenAI Chat Kompletuje přes oficiální API koncový bod." + }, + "anthropic": { + "description": "Uplatnit koncový bod kompatibility s OpenAI SDK Anthropic." + }, + "google-gemini": { + "description": "Gemini prostřednictvím Google kompatibilního API endpointu." + }, + "xai": { + "description": "Grok modely prostřednictvím aplikace API kompatibilní s OpenAI." + }, + "groq": { + "description": "Rychlý přístup přes Groq's OpenAI-kompatibilní API." + }, + "mistral": { + "description": "Modely Mistral prostřednictvím oficiálního API." + }, + "deepseek": { + "description": "DeepSeek modely prostřednictvím svého API kompatibilního s OpenAI." + }, + "together": { + "description": "Otevřené modely jsou umístěny přes rozhraní API kompatibilní s Togetherem." + }, + "ollama": { + "description": "Místní nebo síťový server Ollama používající OpenAI-kompatibilní API." + }, + "lm-studio": { + "description": "LM Studio místní server s OpenAI kompatibilitou povolen." + }, + "llama-cpp": { + "description": "Místní nebo síťový llama.cpp server používající API kompatibilní s OpenAI." + }, + "custom": { + "label": "Vlastní koncový bod", + "description": "Jakýkoliv jiný koncový bod kompatibilní s OpenAI Chat Completions." + } + }, + "homarrAuth": { + "title": "Zahrnuta bezplatná denní použití", + "description": "Není potřeba žádný klíč API. Tým Homarr pokrývá omezený počet asistentů pro vás každý den. Přihlaste se pomocí Komunitní Workshopu a udržte váš příspěvek odděleně." + } + }, + "baseUrl": { + "title": "Základní URL API", + "description": "Zahrnout API prefix, obvykle /v1. V kontejnerech se localhost vztahuje na Homarr kontejner." + }, + "apiKey": { + "title": "Klíč API", + "required": "Vyžadováno tímto poskytovatelem. Hodnota je šifrovaná a pouze pro zápis.", + "optional": "Volitelné pro místní koncové body. Ponechte prázdné, pokud služba nevyžaduje ověření doručitele.", + "placeholder": "Zadejte klíč API", + "savedTitle": "Šifrovaný API klíč uložen", + "savedDescription": "Homarr může použít tento klíč, ale nemůže zobrazit nebo obnovit jeho hodnotu.", + "remove": "Odstranit uložený klíč API", + "removeFlow": { + "title": "Odstranit uložený API klíč?", + "description": "Tento poskytovatel vyžaduje API klíč. Odstranění může zastavit rozpoznávání modelu a asistenční odpovědi, dokud nebude uložen jiný klíč.", + "optionalDescription": "Koncový bod přestane přijímat ověření na doručitele po odstranění tohoto klíče. Potvrďte, že přijímá neověřené požadavky nebo používá jiný uložený záhlaví.", + "cancel": "Ponechat uložený klíč", + "confirm": "Odstranit klíč API" + } + }, + "headers": { + "title": "Další záhlaví požadavku", + "description": "Volitelné ověření nebo směrování hlaviček. Hodnoty záhlaví jsou šifrované a pouze pro zápis.", + "add": "Přidat záhlaví", + "name": "Název záhlaví", + "value": "Hodnota záhlaví", + "valuePlaceholder": "Tajná nebo směrovací hodnota", + "remove": "Odstranit záhlaví", + "configured": "Další šifrované záhlaví jsou nakonfigurovány. Přidání záhlaví nahrazuje kompletní uloženou sadu.", + "empty": "Pro tohoto poskytovatele nejsou uloženy žádné další hlavičky.", + "savedBadge": "Hlavičky uloženy", + "pendingRemoval": "Čeká na odstranění", + "clear": "Odstranit uložené záhlaví při uložení", + "keep": "Ponechat uložené záhlaví" + }, + "model": { + "title": "Vzor", + "description": "Vyberte objevený model nebo zadejte přesné ID koncového modelu.", + "placeholder": "ID modelu", + "refresh": "Aktualizovat modely", + "chooseModel": "Vyberte model použitý pro nové konverzace.", + "discoveryPath": "Cesta k hledání modelu", + "discoveryPathDescription": "Připojeno k základní API URL. Ponechte prázdné pro vypnutí objevování a použití manuálního ID modelu.", + "manual": "Zadejte ID modelu ručně, nebo uložte spojení pro objevování modelů.", + "manualFallback": "Objev není dostupný. Stále můžete zadat ID modelu ručně.", + "saveConnectionFirst": "Před výběrem modelu uložte připojení poskytovatele.", + "discovering": "Aktualizuji modely dostupné od tohoto poskytovatele…", + "discovered": "{count, plural, one {Objevil se # model. Podpora nástrojů závisí na vybraném koncovém bodu a modelu.} other {Objevil se # modelů. Podpora nástrojů závisí na vybraném koncovém bodu a modelu.}}", + "discoveryFailed": "Objev modelu nebyl dokončen", + "context": "Okno kontextu {count}", + "toolsConfirmed": "Inzerované nástroje", + "toolsUnknown": "Ověřit podporu nástroje" + }, + "serverTools": { + "title": "Nástroje serveru", + "webSearch": { + "label": "Hledat na webu", + "description": "Umožnit modelu, aby prohledal živý web přes OpenRouter v případě, že požadavek vyžaduje aktuální informace. Použití vyhledávání je účtováno samostatně OpenRouter.", + "proxyDescription": "Pošlete OpenRouterův vyhledávací nástroj na tento koncový bod. Povolte pouze v případě, že vlastní koncový bod přesměruje formát nástrojů OpenRouter serveru, například Homarr Router proxy.", + "limit": "Model rozhoduje, kdy hledat, s limitem 3 vyhledávání a 5 výsledků pro každý požadavek." + } + }, + "enabled": { + "label": "Povolit asistenta", + "description": "Zobrazí asistent pro všechny podepisující uživatele. Existující oprávnění Homarr stále platí pro každý interní volání nástrojů." + }, + "save": "Uložit asistenta", + "notification": { + "connectionSaved": { + "title": "Připojení poskytovatele bylo uloženo", + "message": "Koncový bod a šifrované přihlašovací údaje jsou připraveny pro výběr modelu.", + "credentialsCleared": "Koncový bod byl změněn, takže předchozí přihlašovací údaje byly vymazány. Přidejte přihlašovací údaje pro novou destinaci, pokud to bude nutné." + }, + "saved": { + "title": "Nastavení asistenta uloženo", + "message": "Nový model a nastavení dostupnosti jsou aktivní." + }, + "error": { + "title": "Nastavení asistenta nelze uložit" + } + } } } }, "tool": { "tasks": { - "title": "Úlohy", "status": { "idle": "Nečinné", "running": "Běží", @@ -4746,6 +6789,11 @@ "label": "Připojení" } }, + "action": { + "run": "Spustit {name} nyní", + "enable": "Povolit {name}", + "disable": "Zakázat {name}" + }, "interval": { "seconds": "Každou {interval, plural, =1 {sekundu} few {# sekundy} many {# sekund} other {# sekundy}}", "minutes": "Každou {interval, plural, =1 {minutu} few {# minuty} many {# minut} other {# minuty}}", @@ -4761,13 +6809,7 @@ } } }, - "settings": { - "title": "Nastavení úlohy {jobName}" - }, "field": { - "name": { - "label": "Název" - }, "interval": { "label": "Interval plánování" }, @@ -4781,11 +6823,6 @@ "table": { "search": "Hledat {count} úloh..." }, - "action": { - "refresh": { - "label": "Obnovit" - } - }, "refresh": { "success": { "message": "Úlohy byly úspěšně obnoveny" @@ -4819,7 +6856,6 @@ } }, "api": { - "title": "API", "modal": { "createApiToken": { "title": "Token API vytvořen", @@ -4845,7 +6881,6 @@ }, "table": { "header": { - "id": "ID", "createdBy": "Vytvořil/a", "actions": "Akce" } @@ -4901,43 +6936,12 @@ "availableTools": { "title": "Dostupné nástroje", "description": "K dispozici je {count} nástrojů. Rozbalením kategorie zobrazíte jednotlivé nástroje a jejich popisy.", - "columnType": "Typ", - "columnName": "Nástroj", - "columnDescription": "Popis" - }, - "troubleshooting": { - "title": "Řešení problémů", - "missingHeader": { - "title": "„Chybí hlavička ApiKey“", - "description": "Váš klient neodesílá hlavičku {header}. Ověřte správnost části {section} v konfiguraci MCP. Některé klienty vyžadují po změnách konfigurace restart." - }, - "invalidFormat": { - "title": "„Neplatný formát ApiKey“", - "description": "Ujistěte se, že jste zkopírovali celý klíč API, nejen jeho část." - }, - "invalidKey": { - "title": "„Neplatný klíč API“", - "description": "ID klíče nebylo nalezeno nebo je token nesprávný. Klíče API lze zobrazit pouze jednou při vytvoření. Pokud jste ho ztratili, odstraňte starý klíč a vytvořte nový." - }, - "connectionRefused": { - "title": "Připojení odmítnuto / vypršel časový limit", - "description": "Ujistěte se, že je URL dostupná z vašeho klienta AI. Pokud Homarr běží za reverzní proxy nebo v Dockeru, použijte externí URL (nikoli {localhost}). Ověřte správnost portu (výchozí: 7575 pro Docker)." - }, - "toolsNotAppearing": { - "title": "Nástroje se nezobrazují", - "description": "Některé nástroje vyžadují nakonfigurované konkrétní integrace (např. Docker nebo Overseerr). Seznam nástrojů závisí na tom, co je ve vaší instanci Homarru dostupné." + "filteredDescription": "Nástroje pro přiřazování {count} napříč rozšířenými kategoriemi.", + "search": "Vyhledávací nástroje", + "noResults": { + "title": "Tomuto hledání neodpovídají žádné nástroje", + "description": "Žádný nástroj MCP neodpovídá \"{search}\". Zkuste jmenný prostor, název nástroje nebo popis." } - }, - "copy": "Kopírovat", - "oneClick": { - "title": "Instalace jedním kliknutím", - "subtitle": "Používá OAuth — při prvním použití se ověřte v prohlížeči", - "vsCode": "Instalovat ve VS Code", - "cursor": "Instalovat v Cursoru", - "copyUrl": "Kopírovat URL MCP", - "copied": "Zkopírováno!", - "copyHint": "Pro ChatGPT, Claude Code nebo libovolného klienta MCP", - "manualConfig": "Ruční konfigurace" } } } @@ -4954,47 +6958,12 @@ "title": "Export citlivých dat", "warningTitle": "Tento export obsahuje celou vaši databázi.", "warningBody": "Záloha zahrnuje všechny uživatele, integrační tajemství (šifrovaná), API klíče, konfigurace ploch a data aplikací. Exportovaný soubor uchovávejte bezpečně a nesdílejte jej.", - "typePrompt": "Napište \"{phrase}\" pro pokračování", - "submit": "Exportovat databázi", - "cancel": "Zrušit" + "submit": "Exportovat databázi" } }, "import": { "title": "Obnovit databázi", - "description": "Nahrajte dříve exportovanou zálohu ZIP pro obnovení vaší databáze. Tím se nahradí celá vaše databáze. Pokud byla záloha vytvořena s jiným šifrovacím klíčem, tajemství budou automaticky znovu zašifrována.", - "warning": "Obnovením zálohy se zcela nahradí vaše současná databáze a restartuje se aplikace. Tuto akci nelze vrátit zpět.", - "dropzone": { - "title": "Sem přetáhněte soubor ZIP se zálohou nebo klikněte pro procházení", - "description": "Přijímají se pouze soubory .zip ze zálohy Homarr SQLite" - }, - "changeFile": "Změnit soubor", - "button": "Obnovit databázi", - "success": { - "title": "Obnovení dokončeno", - "message": "Databáze byla úspěšně obnovena. Aplikace se restartuje..." - }, - "error": "Import se nezdařil" - }, - "preview": { - "title": "Obsah zálohy", - "exported": "Exportováno {date}", - "loading": "Analýza záložního souboru...", - "errorTitle": "Chyba náhledu", - "entity": "Entita", - "count": "Počet", - "boards": "Plochy", - "entities": { - "board": "Plochy", - "user": "Uživatelé", - "app": "Aplikace", - "integration": "Integrace", - "item": "Widgety", - "media": "Média", - "search_engine": "Vyhledávače" - }, - "analyzeError": "Nepodařilo se analyzovat záložní soubor", - "invalidMissingMetadata": "Neplatná záloha: chybí metadata.json", - "invalidMissingDb": "Neplatná záloha: chybí db.sqlite" + "description": "Nahrajte dříve exportovanou zálohu ZIP pro obnovení vaší databáze. Tím se nahradí celá vaše databáze. Pokud byla záloha vytvořena s jiným šifrovacím klíčem, tajemství budou automaticky znovu zašifrována." }, "restore": { "dropzone": { @@ -5004,29 +6973,20 @@ "analyzing": "Analýza zálohy...", "changeFile": "Změnit soubor", "continueToRestore": "Pokračovat k obnovení", - "tryAgain": "Zkusit znovu", "analysisError": "Chyba analýzy", "preview": { "title": "Obsah zálohy", "exported": "Exportováno {date}", "entity": "Entita", "count": "Počet", - "boards": "Plochy", "entities": { - "board": "Plochy", - "user": "Uživatelé", - "app": "Aplikace", - "integration": "Integrace", - "item": "Widgety", - "media": "Média", - "search_engine": "Vyhledávače" + "item": "Widgety" }, "migrationsApplied": "{count} migrace použita", "migrationsAppliedPlural": "{count} migrací použito", "migrationsOlderVersion": "Tato záloha byla ze starší verze Homarr. {count} migrace schématu byla použita k aktualizaci.", "migrationsOlderVersionPlural": "Tato záloha byla ze starší verze Homarr. {count} migrací schématu bylo použito k aktualizaci.", "migrationsUpToDate": "Databázové schéma je aktuální ({count} migrací použito)", - "upToDate": "Aktuální", "migrationsPending": "{count} čekajících" }, "migration": { @@ -5037,21 +6997,21 @@ "title": "Destruktivní akce", "warningTitle": "Tímto se trvale nahradí celá vaše databáze.", "warningBody": "Všechny současné plochy, uživatelé, aplikace, integrace, nastavení a relace budou ztraceny. Tuto akci nelze vrátit zpět. Aplikace se po obnovení restartuje.", - "typePrompt": "Napište \"{phrase}\" pro pokračování", - "cancel": "Zrušit", "submit": "Obnovit databázi" }, "progress": { "title": "Obnovování databáze...", - "extracting": "Rozbalování archivu zálohy", - "migrating": "Aplikace databázových migrací", - "encrypting": "Přešifrovávání integračních tajemství", - "swapping": "Nahrazování databázového souboru", - "restarting": "Restartování serveru" + "restarting": "Restartování serveru", + "relogin": "Obnovení databáze zneplatnilo vaši aktuální relaci. Homarr vám pošle přihlášení, až bude server připraven." }, "complete": { "title": "Obnovení dokončeno", - "message": "Databáze byla úspěšně obnovena. Server se restartuje — obnovte stránku za několik sekund." + "message": "Databáze byla úspěšně obnovena. Server se restartuje — obnovte stránku za několik sekund.", + "button": "Přihlásit se nyní" + }, + "timeout": { + "title": "Server se nevrátil online", + "message": "Obnova databáze byla dokončena, ale Homarr se znovu nepřipravil. Opakujte kontrolu připojení nebo aktualizujte tuto stránku ručně." }, "failed": { "title": "Obnovení selhalo" @@ -5059,6 +7019,9 @@ "invalidMissingMetadata": "Neplatná záloha: chybí metadata.json", "invalidMissingDb": "Neplatná záloha: chybí db.sqlite", "analyzeError": "Nepodařilo se analyzovat zálohu" + }, + "confirm": { + "typePrompt": "Pro pokračování napište \"{phrase}" } } }, @@ -5093,7 +7056,11 @@ "toggleBoardEdit": "Přepnout režim úprav plochy", "toggleColorScheme": "Přepnout světlý/tmavý režim", "saveNotebook": "Uložit poznámkový blok (pouze uvnitř widgetu poznámkového bloku)", - "openSpotlight": "Otevřít vyhledávání" + "openSpotlight": "Otevřít vyhledávání", + "openSpotlightApps": "Otevřít vyhledávání aplikací", + "openSpotlightAssistant": "Otevřený režim asistenta", + "openSpotlightPreferences": "Otevřít režim předvoleb", + "openAssistant": "Otevřít asistenta" }, "note": "Tip: Mod označuje klávesu Ctrl i klávesu ⌘ v systému macOS" } @@ -5103,6 +7070,63 @@ }, "docker": { "title": "Kontejnery", + "reconciliation": { + "title": "Asistovaná nastavení Dockeru", + "suggestions": "{count, plural, =0 {Žádné návrhy} one {# návrh} other {# návrhů}}", + "attention": "{count} potřebuje pozornost", + "endpointUnavailable": "Některé služby nelze zkontrolovat, protože tyto koncové body nejsou k dispozici: {names}", + "empty": "Nebyly nalezeny žádné viditelné služby Dockeru.", + "emptyFilter": "Žádné služby neodpovídají tomuto zobrazení.", + "ambiguous": "Tato služba se může shodovat s více než jednou existující položkou. Homarr si ji nebude vybírat automaticky.", + "filter": { + "attention": "Potřebuje pozornost", + "represented": "Již nastaveno", + "all": "Vše" + }, + "state": { + "newRecognized": "Připraveno k připojení", + "newApp": "Nová služba", + "represented": "Již zastoupeno", + "linked": "Propojeno", + "moved": "Adresa změněna" + }, + "url": { + "manual": "Zadejte adresu ručně" + }, + "health": { + "layer": { + "docker": "Dokovací modul", + "integrationConfiguration": "Integrace", + "authentication": "Ověření", + "apiRequest": "API", + "appRepresentation": "Aplikace", + "widgetConfiguration": "Widget", + "widgetQuery": "Dotaz na widget" + }, + "status": { + "available": "K dispozici", + "configured": "Konfigurováno", + "linked": "Propojeno", + "missing": "Chybějící", + "changed": "Změněno", + "unused": "nepoužívá se", + "notApplicable": "Nepoužije se", + "notObserved": "Není pozorováno" + } + }, + "action": { + "review": "Přezkum", + "dismiss": "Odmítnout", + "restoreDismissed": "Obnovení zamítnuto ({count})", + "setupIntegration": "Nastavit integraci", + "reviewIntegration": "Recenze integrace", + "viewRepresentation": "Zobrazit nastavení" + }, + "loadError": { + "title": "Nepodařilo se načíst pomocníka pro nastavení Dockeru", + "message": "Informace o službě Docker nejsou k dispozici. Zkuste to znovu bez opuštění této stránky." + } + }, "table": { "updated": "Aktualizováno {when}", "refresh": { @@ -5115,9 +7139,6 @@ "totalMemory": "Celkem paměti: {memory}" }, "field": { - "name": { - "label": "Název" - }, "state": { "label": "Status", "option": { @@ -5131,9 +7152,6 @@ } }, "stats": { - "cpu": { - "label": "CPU" - }, "memory": { "label": "Paměť" } @@ -5196,8 +7214,11 @@ } }, "remove": { - "label": "Odstranit", "confirm": "Kliknutím znovu trvale odstraníte", + "confirmation": { + "title": "{count, plural, one {Odstranit zásobník?} other {Odstranit # zásobníků?}}", + "message": "{count, plural, one {To trvale odebere # kontejner: {names}} other {To trvale odebere # kontejnerů: {names}}}" + }, "notification": { "success": { "title": "Kontejnery odstraněny", @@ -5209,8 +7230,13 @@ } } }, + "result": { + "failure": { + "title": "Některé akce kontejneru se nezdařily", + "message": "{total, plural, one {{failed} z # akce selhalo: {names}} other {{failed} z # akcí selhalo: {names}}}" + } + }, "refresh": { - "label": "Obnovit", "notification": { "success": { "title": "Kontejnery obnoveny", @@ -5241,18 +7267,33 @@ }, "error": { "internalServerError": "Nepodařilo se načíst kontejnery Dockeru", + "endpointUnavailable": "{count, plural, one {# Docker koncový bod není k dispozici: {names}} other {# Docker koncových bodů není k dispozici: {names}}}", "noColumns": "V nastavení widgetu vyberte alespoň jeden sloupec" } }, "kubernetes": { + "context": { + "label": "Kontext Kubernetes", + "loadError": { + "title": "Kubernetes kontexty nelze načíst", + "message": "Kontextové informace nejsou k dispozici. Zkuste to znovu bez opuštění této stránky." + }, + "status": { + "available": "K dispozici", + "degraded": "Metrics unavailable", + "unavailable": "Unavailable" + }, + "unavailable": "Tento kontext Kubernetes nelze dosáhnout. Vyberte jiný kontext nebo ověřte jeho pověření a koncový bod.", + "metricsUnavailable": "Tento kontext je dosažitelný, ale Metrics Server je nedostupný. Inventář zůstává k dispozici bez živého CPU a využití paměti." + }, "cluster": { "title": "Panel clusteru", "label": "Cluster", "providers": "Poskytovatelé", "version": "Verze", - "architecture": "Architektura", "capacity": { "title": "Kapacita", + "metricsUnavailable": "Metrický server je nedostupný. Inventář a rezervovaná kapacita zůstávají viditelná, ale nelze zobrazit živé využití procesoru a paměti.", "resource": { "reserved": "Vyhrazeno", "used": "Využito" @@ -5271,38 +7312,10 @@ } }, "nodes": { - "label": "Uzly", "field": { - "name": { - "label": "Název" - }, - "state": { - "label": "Stav", - "option": { - "ready": "Připraven", - "NotReady": "Nepřipraveno" - } - }, - "cpu": { - "label": "CPU" - }, - "memory": { - "label": "RAM" - }, - "pods": { - "label": "Pody" - }, - "operatingSystem": { - "label": "OS" - }, - "architecture": { - "label": "Architektura" - }, + "metricsUnavailable": "Unavailable", "kubernetesVersion": { "label": "Verze Kubernetes" - }, - "creationTimestamp": { - "label": "Vytvořeno" } }, "table": { @@ -5310,43 +7323,17 @@ } }, "namespaces": { - "label": "Obory názvů", - "field": { - "name": { - "label": "Název" - }, - "state": { - "label": "Stav", - "option": { - "active": "Aktivní", - "terminating": "Ukončování" - } - }, - "creationTimestamp": { - "label": "Vytvořeno" - } - }, "table": { "search": "Hledat {count} oborů názvů" } }, "ingresses": { - "label": "Ingressy", "field": { - "name": { - "label": "Název" - }, - "namespace": { - "label": "Obor názvů" - }, "className": { "label": "Název třídy" }, "rulesAndPaths": { "label": "Pravidla a cesty" - }, - "creationTimestamp": { - "label": "Vytvořeno" } }, "table": { @@ -5354,17 +7341,7 @@ } }, "services": { - "label": "Služby", "field": { - "name": { - "label": "Název" - }, - "namespace": { - "label": "Obor názvů" - }, - "type": { - "label": "Typ" - }, "ports": { "label": "Porty" }, @@ -5373,9 +7350,6 @@ }, "clusterIP": { "label": "IP clusteru" - }, - "creationTimestamp": { - "label": "Vytvořeno" } }, "table": { @@ -5383,25 +7357,12 @@ } }, "pods": { - "label": "Pody", "field": { - "name": { - "label": "Název" - }, - "namespace": { - "label": "Obor názvů" - }, "image": { "label": "Obraz" }, "applicationType": { "label": "Typ aplikace" - }, - "status": { - "label": "Stav" - }, - "creationTimestamp": { - "label": "Vytvořeno" } }, "table": { @@ -5409,51 +7370,17 @@ } }, "secrets": { - "label": "Tajné klíče", - "field": { - "name": { - "label": "Název" - }, - "namespace": { - "label": "obor názvů" - }, - "type": { - "label": "typ" - }, - "creationTimestamp": { - "label": "Vytvořeno" - } - }, "table": { "search": "Hledat {count} tajných klíčů" } }, "configmaps": { - "label": "ConfigMapy", - "field": { - "name": { - "label": "Název" - }, - "namespace": { - "label": "obor názvů" - }, - "creationTimestamp": { - "label": "Vytvořeno" - } - }, "table": { "search": "Hledat {count} ConfigMap" } }, "volumes": { - "label": "Svazky", "field": { - "name": { - "label": "Název" - }, - "namespace": { - "label": "Obor názvů" - }, "accessModes": { "label": "Režimy přístupu" }, @@ -5468,12 +7395,6 @@ }, "volumeName": { "label": "Název svazku" - }, - "status": { - "label": "Stav" - }, - "creationTimestamp": { - "label": "Vytvořeno" } }, "table": { @@ -5482,6 +7403,29 @@ }, "error": { "internalServerError": "Nepodařilo se načíst data Kubernetes" + }, + "field": { + "name": { + "label": "Název úlohy" + }, + "namespace": { + "label": "Jmenný prostor" + }, + "creationTimestamp": { + "label": "Vytvořený" + }, + "state": { + "label": "Stav úlohy" + }, + "status": { + "label": "Stav" + }, + "type": { + "label": "Typ klienta stahování" + }, + "architecture": { + "label": "Architektura" + } } }, "permission": { @@ -5515,71 +7459,27 @@ }, "navigationStructure": { "manage": { - "workshop": { - "label": "Workshop" - }, "label": "Spravovat", - "boards": { - "label": "Plochy" - }, - "integrations": { - "label": "Integrace", + "custom-widgets": { "edit": { - "label": "Upravit" + "flow": { + "label": "Tok" + } }, - "new": { - "label": "Nové" - } - }, - "search-engines": { - "label": "Vyhledávače", - "new": { - "label": "Nové" + "workshop": { + "label": "Workshop" }, - "edit": { - "label": "Upravit" - } - }, - "medias": { - "label": "Média" - }, - "apps": { - "label": "Aplikace", - "new": { - "label": "Nové" - }, - "edit": { - "label": "Upravit" + "publish": { + "label": "Publikovat do Workshopu" } }, "users": { - "label": "Uživatelé", - "create": { - "label": "Vytvořit" - }, "general": "Obecné", - "security": "Bezpečnost", - "board": "Plochy", - "groups": { - "label": "Skupiny" - }, - "invites": { - "label": "Pozvánky" - } + "security": "Bezpečnost" }, "tools": { "label": "Nástroje", - "tasks": { - "label": "Úlohy" - }, - "docker": { - "label": "Docker", - "logs": { - "label": "Logy" - } - }, "kubernetes": { - "label": "Kubernetes", "nodes": { "label": "Uzly" }, @@ -5605,11 +7505,7 @@ "label": "Svazky" } }, - "logs": { - "label": "Logy" - }, "certificates": { - "label": "Certifikáty", "hostnames": { "label": "Názvy hostitelů" } @@ -5620,12 +7516,60 @@ }, "about": { "label": "O aplikaci" + }, + "assistant": { + "label": "Asistent" } } }, "search": { "placeholder": "Hledat cokoli", "nothingFound": "Nic nenalezeno", + "modePicker": { + "search": { + "label": "Vyhledat", + "placeholder": "Vyhledávání aplikací, tabulek, stránek, příkazů a nastavení" + }, + "apps": { + "label": "Aplikace", + "placeholder": "Hledat aplikace, tabule a integrace" + }, + "command": { + "label": "Příkazy", + "placeholder": "Hledat akce a příkazy" + }, + "preferences": { + "label": "Předvolby", + "placeholder": "Hledat a změnit předvolby" + }, + "assistant": { + "label": "Asistent", + "placeholder": "Zeptejte se asistenta" + }, + "external": { + "label": "Webová", + "placeholder": "Vyhledávání pomocí externího vyhledávače" + }, + "media": { + "label": "Média", + "placeholder": "Vyhledat film nebo seriál", + "fallback": "Hledat média pro \"{query}\"" + }, + "userGroup": { + "label": "Lidi", + "placeholder": "Hledat uživatele a skupiny" + }, + "continueWith": "Pokračovat s", + "dialogAriaLabel": "{mode} menu příkazu", + "navigationLabel": "Režimy vyhledávání", + "modeAriaLabel": "Režim {mode}", + "resultsAriaLabel": "Výsledky {mode}", + "footer": { + "navigate": "Navigate", + "open": "Otevřít", + "close": "Zavřít" + } + }, "error": { "fetch": "Při načítání dat došlo k chybě" }, @@ -5634,7 +7578,6 @@ "help": "Hledat aplikace, integrace nebo plochy", "group": { "app": { - "title": "Aplikace", "children": { "action": { "open": { @@ -5650,7 +7593,6 @@ } }, "board": { - "title": "Plochy", "children": { "action": { "open": { @@ -5670,9 +7612,6 @@ "title": "Vyberte akci pro plochu" } } - }, - "integration": { - "title": "Integrace" } } }, @@ -5701,9 +7640,6 @@ "newBoard": { "label": "Vytvořit novou plochu" }, - "importBoard": { - "label": "Importovat plochu" - }, "newApp": { "label": "Vytvořit novou aplikaci" }, @@ -5773,7 +7709,6 @@ } }, "defaultSearchEngineId": { - "label": "Výchozí vyhledávač", "children": { "detail": { "title": "Vyberte si výchozí vyhledávač" @@ -5781,7 +7716,6 @@ } }, "openSearchInNewTab": { - "label": "Otevírat výsledky vyhledávání v nové kartě", "children": { "detail": { "title": "Otevírat výsledky vyhledávání v nové kartě" @@ -5789,7 +7723,6 @@ } }, "ddgBangs": { - "label": "Povolit DuckDuckGo bangs", "children": { "detail": { "title": "Povolit DuckDuckGo bangs" @@ -5804,6 +7737,13 @@ } } }, + "byteUnitSystem": { + "children": { + "detail": { + "title": "Vyberte jednotky velikosti dat" + } + } + }, "homeBoardId": { "label": "Domovská plocha", "children": { @@ -5821,7 +7761,6 @@ } }, "pingIconsEnabled": { - "label": "Používat ikony pro pingy", "children": { "detail": { "title": "Používat ikony pro pingy" @@ -5829,7 +7768,6 @@ } }, "enableRightClickOnWidgets": { - "label": "Povolit kliknutí pravým tlačítkem na widgety", "children": { "detail": { "title": "Povolit kliknutí pravým tlačítkem na widgety" @@ -5857,6 +7795,7 @@ "description": "Začněte psát pro vyhledávání ve vašich integracích pro vyžádání médií", "disabled": { "noIntegration": "Přidejte integraci Overseerr, Jellyseerr nebo Seerr, abyste povolili vyhledávání médií.", + "signInRequired": "Přihlaste se pro vyhledání integrace požadavků na média.", "scoped": "Tento widget nemá přístupnou integraci pro vyžádání médií." } } @@ -5873,7 +7812,6 @@ "help": "Použít externí vyhledávač", "group": { "searchEngine": { - "title": "Vyhledávače", "tipDdgBangs": "Tip: Zde můžete také používat DuckDuckGo bangs, např. !něco", "bang": { "searchWithQuery": "Vyhledat \"{query}\" pomocí {label}", @@ -5924,20 +7862,6 @@ "group": { "mode": { "title": "Režimy" - }, - "help": { - "title": "Nápověda", - "option": { - "documentation": { - "label": "Dokumentace" - }, - "submitIssue": { - "label": "Nahlásit problém" - }, - "discord": { - "label": "Komunitní Discord" - } - } } } }, @@ -5949,9 +7873,10 @@ "other": { "label": "Hledat pomocí jiného vyhledávače" }, - "no-default": { - "label": "Žádný výchozí vyhledávač", - "description": "Nastavte výchozí vyhledávač v předvolbách" + "no-engines": { + "label": "Žádné vyhledávače nenastaveny", + "descriptionCreate": "Přidat vyhledávač k hledání z menu příkazů", + "descriptionUnavailable": "Požádejte správce o nastavení vyhledávače" }, "search": { "label": "Hledat „{query}“ pomocí {name}" @@ -6031,7 +7956,6 @@ "help": "Hledat uživatele nebo skupiny", "group": { "user": { - "title": "Uživatelé", "children": { "action": { "detail": { @@ -6044,7 +7968,6 @@ } }, "group": { - "title": "Skupiny", "children": { "action": { "detail": { @@ -6068,9 +7991,6 @@ "engine": { "search": "Najít vyhledávač", "field": { - "name": { - "label": "Název" - }, "short": { "label": "Krátký" }, @@ -6083,12 +8003,19 @@ }, "page": { "list": { - "title": "Vyhledávače", + "ariaLabel": "Konfigurovaný vyhledávač", "noResults": { "title": "Zatím nejsou žádné vyhledávače", - "action": "Vytvořit první vyhledávač" + "description": "Vyhledávače let Spotlight odeslat dotaz na web nebo připojenou službu.", + "action": "Vytvořit první vyhledávač", + "filteredTitle": "Žádné vyhledávače neodpovídají vašemu hledání", + "filteredDescription": "Žádné vyhledávače neodpovídají \"{search}\". Zkuste jiné jméno nebo URL." }, - "interactive": "Interaktivní, používá integraci" + "interactive": "Interaktivní, používá integraci", + "type": { + "generic": "Šablona URL", + "fromIntegration": "Integrace" + } }, "create": { "title": "Nový vyhledávač", @@ -6107,11 +8034,9 @@ "title": "Upravit vyhledávač", "notification": { "success": { - "title": "Změny byly úspěšně aplikovány", "message": "Vyhledávač byl úspěšně uložen" }, "error": { - "title": "Nelze uložit změny", "message": "Nepodařilo se uložit vyhledávač" } }, @@ -6250,6 +8175,10 @@ } }, "log": { + "context": { + "widgetError": "Widget nahlásil chybu kolem tohoto času", + "expiredWidgetError": "Protokoly kolem tohoto widgetu již nejsou zachovány" + }, "level": { "option": { "debug": "Ladění", @@ -6261,7 +8190,6 @@ }, "onboardingTour": { "learnMore": "Přečtěte si dokumentaci", - "next": "Další", "prev": "Zpět", "done": "Hotovo", "skip": "Přeskočit prohlídku", @@ -6325,5 +8253,359 @@ "description": "Změňte barevné schéma, jazyk, domovskou plochu a předvolby. Můžete také odtud přejít do správy." } } + }, + "metadata": { + "description": "Samostatně hostovaná nástěnka pro *arr stack a celou vaši domovskou elab. Integruje se s 50 + službami, widgety, bez konfiguračních souborů.", + "dashboardTitle": "{appName} Nástěnka" + }, + "assistant": { + "title": "Asistent", + "open": "Otevřít asistenta", + "close": "Zavřít asistent", + "minimize": "Minimalizovat asistent", + "spotlight": "Zeptejte se asistenta", + "spotlightDescription": "Napište a pošlete výzvu, aniž byste opustili menu příkazu.", + "spotlightPrompt": { + "title": "Zeptejte se asistenta", + "description": "Zadejte dotaz výše. Zadejte jej na pozadí.", + "send": "Odeslat výzvu", + "empty": "Napište výzvu výše" + }, + "unavailable": { + "checking": "Kontroluje, zda je asistent k dispozici…", + "error": "Dostupnost asistenta nemohla být zkontrolována. Zkuste to znovu.", + "notConfigured": "Administrátor musí nejdříve nastavit a povolit asistenta.", + "signIn": "Přihlaste se pro použití asistenta." + }, + "newConversation": "Nová konverzace", + "conversations": "Konverzace", + "conversationActions": "Akce konverzace", + "searchConversations": "Hledat konverzace", + "noMatchingConversations": "Žádné odpovídající konverzace", + "moreActions": "Další akce odezvy", + "renameConversation": { + "action": "Přejmenovat", + "label": "Název konverzace", + "save": "Uložit název", + "failedTitle": "Konverzaci nelze přejmenovat", + "failedDescription": "Homarr nemohl přejmenovat tuto konverzaci. Zkuste to znovu." + }, + "deleteConversation": { + "title": "Smazat konverzaci?", + "description": "„{title}“ a jeho zprávy budou trvale odstraněny.", + "failedTitle": "Konverzaci nelze odstranit", + "failedDescription": "Homarr nemohl odstranit tuto konverzaci. Zkuste to znovu." + }, + "closeHistory": "Zavřít historii konverzace", + "openHistory": "Otevřít historii konverzace", + "emptyTitle": "S čím mohu pomoci?", + "emptyDescription": "Zeptejte se na nastavení Homarru, zkontrolujte data živých instancí nebo schvalte akce, když chceš provést změnu.", + "suggestions": { + "health": { + "label": "Zkontrolovat zdraví služby", + "prompt": "Podívejte se na mé integrace a shrnout vše, co vyžaduje pozornost." + }, + "explore": { + "label": "Prozkoumejte můj Homarr", + "prompt": "Ukaž mi, co mohu vidět a spravovat v této instanci Homarru." + }, + "media": { + "label": "Najít média pro vyžádání", + "prompt": "Pomozte mi najít film nebo sérii k vyžádání." + }, + "style": { + "label": "Zlepšit nástěnku", + "prompt": "Pomozte mi vylepšit vzhled tabule nebo vlastní CSS. Nejprve mi ukažte své panely a poté si zachovejte moje aktuální nastavení, zatímco provedeme změnu." + }, + "designWidget": { + "label": "Navrhnout widget", + "prompt": "Vytvořit a nainstalovat vlastní widget pro " + } + }, + "composerPlaceholder": "Zeptejte se asistenta…", + "runtime": { + "model": "Vzor", + "searchModels": "Vyhledat modely", + "noModels": "Žádné dostupné modely", + "otherModels": "Ostatní modely", + "imageInput": "Přijmout vstup obrázku", + "thinking": "Režim myšlení", + "reasoning": { + "auto": "Automaticky", + "none": "Vypnuto", + "minimal": "Minimální", + "low": "Nízká", + "medium": "Střední", + "high": "Vysoká" + } + }, + "providerQuota": { + "title": "Poskytovatel Homarr", + "communityWorkshop": "Komunitní seminář", + "dailyAllowance": "Denní příspěvek na žádost", + "remainingLabel": "{remaining} z {limit} požadavků Homarr poskytovatele zbývá", + "loading": "Načítání povolenky poskytovatele Homarr", + "signInRequired": "Přihlášení dílny je vyžadováno pro poskytovatele Homarr", + "signInDescription": "Přihlaste se pomocí GitHub prostřednictvím Komunitní Workshopu a získejte svůj samostatný denní příspěvek.", + "exhaustedDescription": "Příplatek poskytovatele Homarr je využíván dnes. Obnovuje se o půlnoci v UTC.", + "unavailableDescription": "Přihlaste se do Workshopu nebo počkejte, až bude aktivita poskytovatele Homarr obnovena.", + "signIn": "Přihlásit se pomocí GitHub", + "signInError": "Přihlášení k GitHub se nezdařilo. Zkuste to znovu za chvíli.", + "loadError": "Nelze načíst povolenku poskytovatele Homarru.", + "reset": "Resetuje {relative} na ", + "toolCalls": "Každý modelový požadavek a dokončený nástroj používá jeden požadavek.", + "retry": "Znovu načíst příspěvek", + "level": { + "ok": "OK", + "warning": "Varování", + "bad": "Nízká", + "dead": "Použité" + } + }, + "stop": "Zastavit odpověď", + "send": "Odeslat zprávu", + "copy": "Kopírovat odpověď", + "copyMessage": "Kopírovat zprávu", + "editMessage": "Upravit zprávu", + "updateMessage": "Aktualizovat zprávu", + "regenerate": "Vygenerovat odpověď", + "helpful": "Nápověda", + "notHelpful": "Není užitečné", + "readAloud": "Naposledy číst odpověď", + "stopReading": "Zastavit čtení odpovědi", + "feedbackError": "Vaši zpětnou vazbu nelze uložit. Zkuste to znovu.", + "exportMarkdown": "Exportovat jako Markdown", + "exportConversation": { + "action": "Exportovat konverzaci jako Markdown", + "failedTitle": "Konverzaci nelze exportovat", + "failedDescription": "Homarr nemohl načíst tuto konverzaci. Zkuste to znovu." + }, + "reasoning": "Myšlenka", + "previousResponse": "Předchozí odpověď", + "nextResponse": "Další odpověď", + "removeAttachment": "Odstranit přílohu", + "downloadFile": "Stáhnout {name}", + "attachedImage": "Připojený obrázek", + "externalImageBlocked": "Externí obrázek zablokován kvůli soukromí", + "image": { + "loading": "Načítání obrázku", + "failed": "Tento obrázek nelze načíst.", + "retry": "Zkuste obrázek znovu" + }, + "quoteSelection": "Cenová nabídka", + "dismissQuote": "Odstranit cenovou nabídku", + "attachments": { + "add": "Připojit obrázek nebo dokument", + "errorTitle": "Příloha nemohla být přidána", + "imageUnsupported": "Vybraný model nepodporuje vstup obrázku." + }, + "mentions": { + "menu": "Přidat Domovský kontext", + "context": "Kontext", + "app": "Aplikace", + "integration": "Integrace", + "board": "Plochy", + "widget": "Widgety", + "tools": "Dostupné nástroje" + }, + "markdown": { + "diagram": "Schéma", + "renderingDiagram": "Vykreslování diagramu…", + "diagramUnavailable": "Tento diagram nelze vykreslit." + }, + "commands": { + "menu": "Příkazy asistenta", + "health": "Připravte si kontrolu stavu služeb", + "explore": "Připravte přehled této instance Homarr", + "media": "Připravit vyhledávání médií", + "style": "Připravte vzhled desky nebo změnu CSS", + "designWidget": "Připravte jednorázové sestavení vlastních widgetů" + }, + "usage": { + "tokens": "žetony", + "contextWindow": "Okno kontextu", + "requestDetails": "Podrobnosti požadavku", + "used": "Nejnovější krok", + "remaining": "Zbývající", + "capacity": "Kapacita", + "input": "Input", + "output": "Výstup", + "cached": "Zadání v mezipaměti", + "cacheWrite": "Zápis do mezipaměti", + "reasoning": "Odůvodnění", + "inputShort": "v", + "outputShort": "ven", + "cachedShort": "v mezipaměti", + "reasoningShort": "uvažování", + "firstOutput": "První výstup", + "homarrTiming": "Homarr pozorován", + "endToEnd": "Konec", + "observedThroughput": "Zjištěný objem", + "providerTiming": "Poskytovatel nahlášen", + "loadingProviderDetails": "Načítání detailů generací…", + "providerDetailsPending": "OpenRouter stále zpracovává některé generační podrobnosti. Znovu otevřete a zkuste to znovu.", + "providerLatency": "Zpoždění poskytovatele", + "generationTime": "Generování času", + "moderationLatency": "Moderace", + "providerThroughput": "Poskytovatel propustnosti", + "fallbacks": "Vrátit zpět", + "fallbackLatency": "Zpětná odezva", + "cacheDiscount": "Cache sleva", + "normalizedTokens": "OpenRouter normalizovaný vstup / výstup", + "byok": "BYOK", + "cost": "Náklady", + "reported": "Nahlášeno poskytovatelem", + "estimated": "Odhadované z ceny modelu", + "upstreamCost": "Počáteční bod", + "webSearches": "Hledání na webu", + "finishReason": "Důvod dokončení", + "notReported": "Nehlášeno", + "agentSteps": "Kroky agenta", + "step": "Krok {number}", + "generation": "Generování" + }, + "toolInput": "Input", + "toolOutput": "Výstup", + "toolActivity": { + "iconSearch": "Hledám ikony „{query}“", + "iconBrowse": "Prohlížení dostupných ikon" + }, + "toolNavigation": { + "openPreview": "Otevřít náhled", + "openWidget": "Otevřít widget" + }, + "webSearch": { + "title": "Hledat na webu", + "completed": "OpenRouter prohledal live web pro tuto odpověď.", + "searches": "{count, plural, one {# hledání} other {# vyhledává}}", + "sources": "{count, plural, one {# zdroj} other {# zdrojů}}" + }, + "responseError": { + "title": "Asistent nemohl dokončit", + "description": "Zkuste to znovu. Pokud problém přetrvává, požádejte administrátora o ověření nakonfigurovaného koncového bodu modelu." + }, + "toolPreparationError": { + "title": "Tento požadavek nemohl být připraven", + "description": "Model byl zastaven před dodáním úplných podrobností. Zkuste odpověď nebo znovu popište požadavek. Žádná změna nebyla provedena." + }, + "busy": { + "title": "Asistent již pracuje", + "description": "Počkejte na aktuální odpověď nebo ji otevřete pro zastavení běhu." + }, + "pendingAction": { + "answerTitle": "Potřebná odpověď", + "answerFallback": "Vyberte odpověď pro pokračování", + "formTitle": "Zkontrolovat detaily aplikace", + "boardFormTitle": "Změny revizní komise", + "review": "Přezkum", + "sendBlocked": "Vyřešit čekající požadavek před odesláním" + }, + "activity": { + "thinking": "Zástupce přemýšlí", + "working": "Pracujte na výzvě", + "ready": "Reakce připravena", + "completed": "Otevřít odpověď", + "approval": "Vyžaduje schválení", + "failed": "Asistent potřebuje pozornost", + "expand": "Otevřít odpověď asistenta", + "dismiss": "Zrušit asistenční činnost" + }, + "scrollToLatest": "Přejít na nejnovější", + "refresh": { + "action": "Aktualizovat aktuální zobrazení", + "working": "Aktualizuji aktuální zobrazení", + "completeTitle": "Zobrazit obnovené", + "completeDescription": "Viditelná data Homarru byla znovu načtena.", + "failedTitle": "Zobrazení nelze aktualizovat", + "failedDescription": "Změna může být stále uložena. Zkuste obnovit akci znovu." + }, + "askUser": { + "preparing": "Příprava otázky", + "answered": "Vaše odpověď", + "other": "Ostatní", + "otherLabel": "Vaše odpověď", + "otherPlaceholder": "Napište jinou odpověď…", + "submit": "Odeslat odpověď", + "cancelOther": "Zrušit další odpověď", + "optionKind": { + "affirmative": "Potvrdit", + "negative": "Odmítnout", + "alternative": "Možnost", + "custom": "Vlastní" + } + }, + "configureApp": { + "title": "Zkontrolovat detaily aplikace", + "description": "Vyberte si místní ikonu a upravte cokoliv, než asistent požádá o schválení vytvoření.", + "preparing": "Příprava detailů aplikace", + "continue": "Použít tyto detaily", + "ready": "Podrobnosti aplikace jsou připraveny", + "automaticContinue": "Automaticky používat tyto detaily aplikace" + }, + "configureBoardSettings": { + "title": "Změny revizní komise", + "loading": "Načítání aktuálního nastavení panelu", + "loadErrorTitle": "Nelze načíst nastavení panelu", + "loadErrorDescription": "Tabule již nemusí existovat, nebo nemáte oprávnění k její změně.", + "proposedCount": "Asistent navrhl {count} polí", + "changeCount": "{count} změny jsou připraveny", + "ready": "Bojovník připraven", + "cancelled": "Aktuální nastavení desky bylo uloženo", + "noChanges": "Žádné nastavení se nezmění", + "keepCurrent": "Zachovat aktuální nastavení", + "continue": "Pokračovat ve schválení", + "automaticContinue": "Automaticky přijímat navrhované změny v radě", + "resetAll": "Obnovit všechny změny", + "tabs": { + "css": "Custom CSS", + "appearance": "Vzhled", + "background": "Pozadí", + "general": "Obecné" + }, + "cssDescription": "Upravte kompletní seznam stylů. Existující pravidla jsou zachována, pokud nejsou odstraněna.", + "cssCharacters": "{count} s 16384 znaky", + "copyCss": "Copy CSS", + "copied": "Zkopírováno", + "restoreCss": "Restore current CSS", + "remoteCssTitle": "Tento CSS načte vzdálený zdroj", + "remoteCssDescription": "Importované styly a vzdálené URL adresy kontaktují jiný server při načítání desky. Před pokračováním je zkontrolujte." + }, + "configureWidget": { + "title": "Hodnotit widget", + "preparing": "Příprava nastavení widgetu", + "review": "Přehled widgetů a integrace", + "ready": "Nastavení widgetu je připraveno", + "cancelled": "Widget nebyl přidán", + "automaticContinue": "Automaticky přijímat navrhovanou konfiguraci widgetu", + "definitionLoadErrorTitle": "Nastavení widgetu nelze načíst", + "definitionLoadErrorDescription": "Homarr nemohl načíst nastavení tohoto widgetu. Zkuste to znovu.", + "loadErrorTitle": "Integrace nelze načíst", + "loadErrorDescription": "Homarr nemohl načíst integrace, které jsou pro tento widget dostupné.", + "noIntegrationTitle": "Je vyžadována kompatibilní integrace", + "noIntegrationDescription": "Konfigurace integrace podporovaná tímto widgetem před přidáním na nástěnku.", + "connectIntegration": "Připojit službu", + "manageIntegrations": "Spravovat integrace", + "skip": "Nepřidávat", + "errorTitle": "Nastavení widgetu nelze připravit", + "errorDescription": "Model neposkytl kompletní konfiguraci widgetu. Nebyl přidán žádný widget." + }, + "approvalRequired": "Vyžadováno schválení", + "complete": "Complete", + "denied": "Zamítnuto", + "failed": "Selhalo", + "working": "Práce", + "approvalDescription": "Zkontrolovat tuto změnu před jejím spuštěním.", + "approveAndRun": "Schválit a spustit", + "deny": "Zamítnout", + "autoApproval": { + "label": "Automatická schválení", + "composerLabel": "Schválit pro mě", + "title": "Automatická schválení", + "description": "Automaticky připravovat formuláře a schvalovat chráněné změny pro tuto konverzaci. Otázky stále čekají na vaši odpověď a vaše oprávnění Homarru stále platí. To se vypne, když přepínáte konverzace.", + "enable": "Povolit pro tuto konverzaci", + "disable": "Vypnout automatická schválení", + "enabled": "Automatická schválení jsou zapnuta", + "approving": "Automatické schvalování" + } } } diff --git a/packages/translation/src/lang/da.json b/packages/translation/src/lang/da.json index 4c6af19d4..dfe68f7bb 100644 --- a/packages/translation/src/lang/da.json +++ b/packages/translation/src/lang/da.json @@ -1,156 +1,246 @@ { "init": { - "step": { - "start": { - "title": "Velkommen til Homarr", - "subtitle": "Lad os komme i gang med at konfigurere din Homarr instans.", - "description": "For at komme i gang, skal du vælge, hvordan du vil konfigurere din Homarr instans.", - "action": { - "scratch": "Start fra bunden", - "importOldmarr": "Importer fra Homarr før 1.0", - "restoreSqlite": "Gendan fra SQLite backup", - "restoreSqliteDescription": "Upload en fuld SQLite database backup fra en tidligere Homarr instans. Dette vil gendanne alle tavler, brugere, apps, integrationer og indstillinger.", - "backToOptions": "← Tilbage til opsætningsmuligheder" + "studio": { + "navigationLabel": "Onboarding sektioner", + "back": "Tilbage", + "buildBoard": "Byg min tavle", + "common": { + "unknownError": "Noget gik galt. Dine valg er stadig her; prøv igen." + }, + "claim": { + "checking": "Sikring af denne onboarding session…", + "checkingTitle": "Forbereder sikker opsætning", + "lockedTitle": "Opsætning er åben i en anden browser", + "lockedDescription": "Fortsæt der, eller vent til dens sikre første kørsel session til at udløbe, før du forsøger igen.", + "signInTitle": "Administrator log-in påkrævet", + "signInDescription": "Der findes allerede en administrator. Log ind for at genoptage opsætningen uden at afsløre legitimationsoplysninger eller adgang til tjenesten.", + "signIn": "Log ind og genoptag", + "errorTitle": "Opsætning kunne ikke sikres", + "errorDescription": "Genindlæs siden for at prøve den sikre første kørselssession." + }, + "navigation": { + "essentials": "Essentialer", + "discover": "Opdag", + "connect": "Forbind", + "board": "Bræt", + "extend": "Udvid", + "review": "Gennemgå" + }, + "welcome": { + "title": "Velkommen hjem.", + "description": "Velkommen til Homarr v{version}. Vi vil guide dig gennem det væsentlige og hjælpe dig med at opbygge din første tavle.", + "start": "Kom i gang", + "restore": "Gendan sikkerhedskopi", + "restoreTitle": "Gendan fra sikkerhedskopi", + "restoreDescription": "En fuld SQLite backup gendanner boards, mennesker, apps, integrationer og indstillinger. Homarr validerer det, før du erstatter noget.", + "errorTitle": "Opsætning kunne ikke starte", + "errorDescription": "Dine indstillingsvalg er stadig her. Prøv igen, eller genindlæs siden, hvis dette fortsætter." + }, + "account": { + "title": "Opret din administrator", + "description": "Angiv legitimationsoplysninger for din administrator bruger.", + "username": "Administrator brugernavn", + "passwordHint": "Kun det 8-tegns minimum er påkrævet. De andre adgangskodestyrkekontroller er forslag.", + "create": "Opret administrator", + "errorTitle": "Administrator kunne ikke oprettes", + "recoveryTitle": "Administrator konto oprettet", + "recoveryDescription": "Automatisk login er ikke fuldført. Log ind med de administratoroplysninger, du lige har oprettet for at fortsætte opsætningen.", + "recoveryAction": "Log ind og fortsæt", + "unknownError": "Administratoren kunne ikke oprettes." + }, + "externalGroup": { + "title": "Tilslut din administratorgruppe", + "description": "Brug det nøjagtige gruppenavn sendt af LDAP eller OIDC. Medlemmer af denne gruppe modtager administrator adgang.", + "name": "Ekstern administratorgruppe", + "nameDescription": "Dette er versalfølsom og skal matche din identitetsudbyder.", + "continue": "Gem gruppe og fortsæt", + "errorTitle": "Gruppen kunne ikke gemmes", + "unknownError": "Administratorgruppen kunne ikke gemmes." + }, + "essentials": { + "title": "Start med velkendte standarder", + "description": "Indstil det sprog og udseende, som alle ser først, og giv derefter Homarr det adressemønster, der bruges af dine tjenester.", + "language": "Standardsprog", + "theme": "Standard tema", + "themeAuto": "System", + "themeLight": "Lys", + "themeDark": "Mørk", + "serverOriginHelp": "Homarr bruger denne adresse til at forudfylde fundne tjeneste-URL'er. Du kan stadig redigere hver tjeneste individuelt.", + "serverDescription": "Dette er en genvej, ikke en begrænsning. Hver registreret tjeneste forbliver redigerbare.", + "serverOrigin": "Domæn, IP eller reverse-proxy sti", + "serverOriginDescription": "Eksempler: home.lan, 192.168.1.10 eller https://home.example.com/services. Vælg hvordan hver tjeneste er tilføjet nedenfor.", + "analytics": "Del anonym produktanalyse", + "analyticsDescription": "Hjælper Homarr med at forbedre funktionen pålidelighed. Ingen service legitimationsoplysninger eller dashboard indhold sendes." + }, + "discover": { + "title": "Se hvad denne installation rent faktisk kan nå", + "description": "Homarr kontrollerer kapaciteter på plads. En manglende Docker socket eller Kubernetes kontekst aldrig blokerer en manuel opsætning.", + "database": "Database", + "docker": "Docker og kompatible stikdåser", + "kubernetes": "Kubernetes", + "assistantWorkshop": "Assistent og værksted", + "found": "Fandt {integrations} integrationer og {apps} yderligere apps", + "retryKubernetes": "Tjek Kubernetes igen", + "retryWorkshop": "Tjek værksted igen", + "unknownVersion": "ukendt version", + "kubernetesAvailable": "Forbundet til Kubernetes {version}", + "kubernetesDisabled": "Ikke aktiveret; fortsæt med Docker eller manuelle tjenester", + "kubernetesUnavailable": "Kubernetes er aktiveret, men kan ikke nås fra denne Homarr proces", + "workshopAvailable": "Community Workshop og hosted Assistant tjenester kan nås", + "workshopUnavailable": "Lokale og brugerdefinerede assistentudbydere er stadig tilgængelige", + "partialTitle": "Nogle kilder kunne ikke scannes", + "partialDescription": "Resultater fra tilgængelige værter bibeholdes. Tjek sokkeltilladelser eller tilføj tjenester manuelt i næste afsnit.", + "status": { + "checking": "Kontrollerer tilgængelighed…", + "available": "Tilgængelig", + "partial": "Delvist tilgængelig", + "empty": "Reachable, ingen matchende kørende tjenester", + "disabled": "Deaktiveret af serverkonfiguration", + "unavailable": "Utilgængelig fra denne Homarr proces" } }, - "import": { - "title": "Importer data", - "subtitle": "Du kan importere data fra en eksisterende Homarr instans.", - "dropzone": { - "title": "Træk zip-filen her eller klik for at gennemse", - "description": "Den uploadede zip vil blive behandlet, og du vil kunne vælge, hvad du vil importere" + "connect": { + "title": "Tilslut hvad der gør tavlen nyttig", + "description": "Vælg flere tjenester på én gang. Docker-etiketter prioriteres, billedmatchende fylder huller, og hver URL og legitimationsoplysninger forbliver vurderbar.", + "discoveredIntegrations": "Detekterede integrationsinstanser ({count})", + "detectedIntegrationLabel": "Importer {name}, detekteret som {kind}", + "detectedAppLabel": "Importer detekteret app {name}", + "otherIntegrations": "Tilføj en anden integration", + "configureIntegrations": "Indstil integrationer", + "discoveredApps": "Registrerede apps ({count})", + "appAddressRequired": "Tilføj en adresse til {name}, eller fjern den fra markeringen.", + "empty": "Ingen integrationer valgt. Homarr vil stadig oprette en nyttig starttavle med generelle widgets.", + "dockerSource": "Docker", + "manualSource": "Manuelt", + "url": "Service URL", + "noCredentials": "Ingen legitimationsoplysninger", + "noCredentialsDescription": "Denne integration behøver ikke legitimationsoplysninger.", + "credentialMethod": "Metode med legitimationsoplysninger", + "getApiKey": "Åbn API-nøgleindstillingerne for denne tjeneste", + "openGuide": "Åbn Homarres opsætningsguide for denne tjeneste", + "testConnection": "Test forbindelse", + "testSuccess": "Forbindelse fungerer", + "testSuccessDescription": "Homarr forbundet med den aktuelle adresse og legitimationsoplysninger.", + "testError": "Forbindelsen mislykkedes", + "testErrorDescription": "Tjek tjenestens adresse og legitimationsoplysninger, og prøv derefter igen.", + "needsConfiguration": "Behøver konfiguration", + "tested": "Forbindelse testet", + "testFailed": "Forbindelsestest mislykkedes", + "incompleteConfirmation": "Ufærdige integrationer vil blive sprunget over. Fortsæt uden dem?" + }, + "board": { + "title": "Form brættet, før det er bygget", + "description": "Homarr opretter beskyttede Mobile og Base layouts, placerer derefter apps og kompatible widgets fra de tjenester, du har valgt.", + "target": "Tavle der skal konfigureres", + "targetDescription": "Vælg den nøjagtige eksisterende tavle som denne opsætning skal opdatere.", + "targetPlaceholder": "Vælg en tavle", + "targetRequired": "Vælg tavlen der skal konfigureres, før du fortsætter.", + "name": "Navn på tavle", + "nameDescription": "Bruges kun i tavlens URL; - bogstaver, tal, bindestreger og understregninger.", + "nameRequired": "Indtast et tavlenavn, før du fortsætter.", + "primaryColor": "Primær farve", + "secondaryColor": "Sekundær farve", + "resetColors": "Nulstil farver", + "radius": "Widget hjørne radius", + "radiusOptions": { + "xs": "Tæt", + "sm": "Subtile", + "md": "Balanceret", + "lg": "Aundet", + "xl": "Blød" }, - "fileInfo": { - "action": { - "change": "Ændre fil" - } + "columns": "Bræt kolonner", + "columnsDescription": "Kolonner definerer det vandrette gitter, der bruges til at størrelsen og positionere elementer. 12 er masser for de fleste mennesker.", + "columnCount": "{count, plural, one {# kolonne} other {# kolonner}}", + "leftSidebar": "Left sidebar", + "rightSidebar": "Højre sidepanel", + "previewLabel": "Live forhåndsvisning af det første brætlayout" + }, + "extend": { + "title": "Avancerede funktioner", + "tabsLabel": "Assistant, Workshop og MCP opsætning", + "assistant": "Assistent", + "workshop": "Værksted", + "assistantSetup": { + "loginTitle": "Administrator log-in påkrævet", + "loginDescription": "Udbydernøgler og modeladgang er privilegerede. Afslut opsætning, log på, og Homarr vil åbne assistentkonfigurationen direkte.", + "loginAction": "Log ind for at konfigurere assistent" }, - "importSettings": { - "title": "Importer indstillinger", - "description": "Konfigurer importadfærden" + "workshopSetup": { + "title": "Homarr Værksted", + "description": "Gennemse community Custom Widgets, inspicere deres ønskede kapaciteter, installere dem, og udgive dit eget arbejde uden at kopiere kode mellem servere.", + "available": "Tilgængelig", + "checking": "Kontrollerer…", + "unavailable": "Unavailable", + "discoverTitle": "Opdag", + "discoverDescription": "Find widgets bygget til ægte selvhostede arbejdsgange.", + "installTitle": "Gennemgå og installer", + "installDescription": "Se metadata og konfiguration før du tilføjer noget.", + "publishTitle": "Del", + "publishDescription": "Udgiv genbrugbare widgets tilbage til fællesskabet.", + "browse": "Gennemse Værksted" }, - "boardSelection": { - "title": "Fundet {count} tavler", - "description": "Vælg alle tavler med den størrelse, du vil importere", - "action": { - "selectAll": "Vælg alle", - "unselectAll": "Fravælg alle" - } - }, - "summary": { - "title": "Importér sammendrag", - "description": "I nedenstående oversigt kan du se hvad der vil blive importeret", - "action": { - "import": "Bekræft import og fortsæt" - }, - "entities": { - "apps": "Apps", - "boards": "Tavler", - "integrations": "Integrationer", - "credentialUsers": "Brugere, der er legitimerede" - } - }, - "tokenModal": { - "title": "Angiv import token", - "field": { - "token": { - "label": "Token", - "description": "Indtast den viste import token fra din tidligere homarr instans" - } - }, - "notification": { - "error": { - "title": "Ugyldig token", - "message": "Den indtastede token er ugyldig" - } - } + "mcpSetup": { + "title": "Homarr MCP", + "description": "Tilslut Claude, Codex eller en anden MCP-klient til Homarr's indtastede værktøjer. API-nøgler holde adgang eksplicit og genkaldelig.", + "endpoint": "Strømbart HTTP endepunkt", + "keyTitle": "Kopier denne nøgle nu", + "keyDescription": "Af sikkerhedshensyn kan Homarr ikke vise denne API-nøgle igen.", + "copyKey": "Kopier API-nøgle", + "createKey": "Opret en MCP API-nøgle", + "errorTitle": "MCP API-nøgle kunne ikke oprettes", + "loginRequired": "Log ind som administrator efter opsætning for at oprette en API-nøgle.", + "configuration": "Klient konfiguration", + "copy": "Kopier konfiguration", + "copied": "Kopieret", + "advanced": "Åbn MCP-værktøjer, tilladelser og opsætningsdetaljer" } }, - "user": { - "title": "Admin bruger", - "subtitle": "Angiv legitimationsoplysninger for din administrator bruger.", - "notification": { - "success": { - "title": "Bruger oprettet", - "message": "Brugeren blev oprettet" - }, - "error": { - "title": "Brugeroprettelse mislykkedes" - } - } - }, - "group": { - "title": "Ekstern gruppe", - "subtitle": "Angiv den gruppe, der skal bruges til eksterne brugere.", - "form": { - "name": { - "label": "Gruppenavn", - "description": "Navn skal matche admin gruppe fra ekstern udbyder" - } - } - }, - "settings": { - "title": "Indstillinger", - "subtitle": "Konfigurer serverindstillinger." - }, - "integrations": { - "title": "Integrationer", - "subtitle": "Vælg de tjenester, du bruger.", - "description": "Vælg de integrationer, du gerne vil forbinde. Vi konfigurerer dit dashboard med matchende widgets automatisk.", - "action": { - "continue": "Forsæt", - "skip": "Spring over for nu" - }, - "configure": { - "progress": "{current} af {total}", - "skip": "Spring over denne integration", - "finishing": "Sætter dit dashboard op...", - "error": { - "title": "Opsætning mislykkedes", - "message": "Der opstod en fejl under opsætningen af dit dashboard. Prøv igen." - }, - "helpers": { - "tooltip": "URL-hjælpere", - "description": "Disse hjælpere forsøger at gætte URL'en til dine tjenester. Hvis det ikke virker, skal du blot indtaste adressen manuelt." - } - }, - "urlTemplate": { - "label": "Basis-URL", - "placeholder": "homelab.local eller 192.168.1.1", - "hint": "Indtast dit basisdomæne eller IP for automatisk at udfylde integrations-URL'er", - "warning": "Hvis du indstiller din basis-URL nu, udfyldes alle integrations-URL'er automatisk, hvilket sparer dig tid under opsætningen", - "preview": "f.eks. {example}", - "mode": { - "subdomain": "Subdomæne", - "hostPort": "Vært:Port" - } - }, - "docker": { - "detected": "Docker opdagede {count} tjenester", - "detectedBreakdown": "{integrations} integrationer · {apps} apps", - "summary": "Homarr opdagede {apps} apps, {integrations} heraf har indbyggede integrationer", - "appBadge": "App", - "appSectionLabel": "Apps der skal tilføjes til dashboard ({count} valgt)", - "scanning": "Scanner Docker...", - "scanningDescription": "Leder efter kørende containere på dit system" + "review": { + "title": "Én tavle, bygget op omkring dine tjenester", + "description": "Homarr test ikke-gemte forbindelser, importerer de valgte apps, anvender udseende og layouts, og åbner derefter den nøjagtige tavle den konfigureret.", + "board": "Første tavle", + "columns": "Bræt kolonner", + "columnsValue": "{count, plural, one {# kolonne} other {# kolonner}}", + "sidebars": "Sidebjælker", + "sidebarsValue": "{count, plural, =0 {None} one {# sidebar} other {# sidebars}}", + "layouts": "Responsive layouts", + "layoutsValue": "Mobil + Base", + "integrations": "Integrationer", + "integrationsValue": "{count, plural, =0 {Ingen valgt} one {# integration} other {# integrationer}}", + "apps": "App fliser", + "appsValue": "{count, plural, =0 {Kun starterapps} one {# app-flise} other {# app-fliser}}", + "language": "Sprog", + "theme": "Tema", + "themeAuto": "System præference", + "themeLight": "Lys", + "themeDark": "Mørk", + "colors": "Bræt farver", + "radius": "Widget radius", + "automaticTitle": "Hvad Homarr vil skabe", + "automaticDescription": "Kompatible widgets, ikoner, app-links, integrationsrelationer og lydhør placering kommer fra det delte Homarr katalog. Du kan redigere hvert resultat senere.", + "dockerWarningTitle": "Nogle Docker-etiketter ændret under opsætning", + "dockerWarningDescription": "{count, plural, one {# valgt Docker resultat kunne ikke anvendes fordi tjenesten ændres, målrettet en anden tavle, eller dens widget var inkompatibel} other {# valgte Docker resultater kunne ikke anvendes fordi tjenester ændret, målrettet en anden tavle, eller deres widgets var inkompatible}}.", + "errorTitle": "Board kunne ikke bygges", + "progress": { + "applying": "Test forbindelser og bygge dit bord", + "done": "Din tavle er klar" } }, "finish": { - "title": "Afslut opsætningen", - "subtitle": "Du er klar!", - "description": "Du har fuldført opsætningsprocessen. Du kan nu begynde at bruge Homarr. Vælg din næste handling:", - "action": { - "goToBoard": "Gå til {name} tavle", - "createBoard": "Opret din første tavle", - "inviteUser": "Inviter andre brugere", - "docs": "Læs dokumentationen" - } + "title": "Din første tavle er klar.", + "description": "Homarr tilsluttet de stykker, du valgte, og holdt resten redigerbare. Åbn tavlen nu; den korte i-produkt tur kan vise dig redigeringstilstand, widgets, layouts, og søgning.", + "openBoard": "Åbn min tavle", + "manageTitle": "Administrer", + "manageDescription": "Finjusterer apps, integrationer, tavler, brugere og serverindstillinger.", + "workshopTitle": "Værksted", + "workshopDescription": "Opdag og installer community brugerdefinerede widgets.", + "docsTitle": "Lær Homarr", + "docsDescription": "Læs de fokuserede guider til tavler, widgets, integrationer og værktøjer." } - }, - "backToStart": "Tilbage til start" + } }, "user": { - "title": "Brugere", "name": "Bruger", "page": { "login": { @@ -159,12 +249,10 @@ }, "invite": { "title": "Tilmeld Homarr", + "titleWithAppName": "Tilmeld Dig {appName}", "subtitle": "Velkommen til Homarr! Opret venligst din konto", + "subtitleWithAppName": "Velkommen til {appName}! Opret venligst din konto", "description": "Du blev inviteret af {username}" - }, - "init": { - "title": "Ny Homarr installation", - "subtitle": "Opret venligst den første administrator bruger" } }, "field": { @@ -192,12 +280,17 @@ "previousPassword": { "label": "Tidligere adgangskode" }, - "homeBoard": { - "label": "Hjemme tavle" - }, "pingIconsEnabled": { "label": "Brug ikoner til pings" }, + "byteUnitSystem": { + "label": "Data størrelse enheder", + "description": "Vælg, hvordan Homarr viser byte størrelser og byte satser. Bit satser bruger altid decimale enheder.", + "options": { + "binary": "Binær", + "decimal": "Decimal" + } + }, "enableRightClickOnWidgets": { "label": "", "description": "" @@ -247,7 +340,6 @@ } } }, - "create": "Opret bruger", "changePassword": { "label": "Skift adgangskode", "notification": { @@ -259,56 +351,6 @@ } } }, - "changeHomeBoard": { - "notification": { - "success": { - "message": "Hjemmetavle blev ændret" - }, - "error": { - "message": "Kan ikke ændre hjemmetavle" - } - } - }, - "changeSearchPreferences": { - "notification": { - "success": { - "message": "Søgeindstillingerne blev ændret" - }, - "error": { - "message": "Kan ikke ændre søgeindstillinger" - } - } - }, - "changeFirstDayOfWeek": { - "notification": { - "success": { - "message": "Første ugedag ændret med succes" - }, - "error": { - "message": "Kan ikke ændre den første ugedag" - } - } - }, - "changePingIconsEnabled": { - "notification": { - "success": { - "message": "Ping ikoner skiftet" - }, - "error": { - "message": "Kan ikke skifte ping-ikoner" - } - } - }, - "changeDdgBangs": { - "notification": { - "success": { - "message": "DuckDuckGo-bangs blev slået til/fra" - }, - "error": { - "message": "Kan ikke slå DuckDuckGo-bangs til/fra" - } - } - }, "manageAvatar": { "changeImage": { "label": "Skift billede", @@ -338,16 +380,6 @@ } } }, - "editProfile": { - "notification": { - "success": { - "message": "Profilen blev opdateret" - }, - "error": { - "message": "Ikke i stand til at opdatere profil" - } - } - }, "delete": { "label": "Slet brugeren permanent", "description": "Sletter denne bruger inklusive deres indstillinger. Vil ikke slette nogen tavler. Brugeren vil ikke blive underrettet.", @@ -356,18 +388,13 @@ "select": { "label": "Vælg bruger", "notFound": "Ingen bruger fundet" - }, - "transfer": { - "label": "Vælg ny ejer" } } }, "group": { - "title": "Grupper", "name": "Gruppe", "search": "Find en gruppe", "field": { - "name": "Navn", "members": "Medlemmer", "homeBoard": { "label": "Hjemme tavle", @@ -388,6 +415,19 @@ } } }, + "custom-widget": { + "title": "Brugerdefinerede widgets", + "item": { + "manage": { + "label": "Håndtér brugerdefinerede widgets", + "description": "Tillad medlemmer at oprette, redigere og slette brugerdefinerede widget definitioner" + }, + "secret-write": { + "label": "Konfigurer brugerdefinerede widget hemmeligheder", + "description": "Tillad medlemmer og deres API-nøgler at indstille krypterede brugerdefinerede widget legitimationsoplysninger" + } + } + }, "app": { "title": "Apps", "item": { @@ -493,6 +533,35 @@ "description": "Tillad medlemmer at administrere og slette enhver søgemaskine" } } + }, + "matrix": { + "none": "Ingen adgang", + "impliedHint": "Tildeler også: {permissions}", + "grantedViaAdmin": "Administratorer har allerede dette. Sæt Admin til “Ingen adgang” for at konfigurere den separat.", + "preset": { + "label": "Forudindstillinger", + "viewer": "Fremviser", + "viewerDescription": "Læs: Se tavler og medier, brug apps og integrationer, der allerede findes.", + "editor": "Editor", + "editorDescription": "Dag-til-dag ledelse: oprette og redigere tavler, apps, integrationer og søgemaskiner.", + "admin": "Admin", + "adminDescription": "Ubegrænset adgang til alle funktioner og indstillinger, herunder brugerhåndtering.", + "custom": "Tilpasset" + }, + "effective": { + "title": "Effektive tilladelser", + "description": "Det fulde, de-duplikerede sæt af handlinger medlemmer af denne gruppe kan udføre, herunder tilladelser gives indirekte.", + "empty": "Ingen tilladelser valgt" + }, + "noneDescription": "Medlemmer får ikke adgang til dette område.", + "level": { + "view": "Vis", + "use": "Brug", + "interact": "Interaktion", + "modify": "Ændre", + "full": "Fuld" + }, + "capabilityIncluded": "Allerede inkluderet i “{level}”" } }, "memberNotice": { @@ -607,21 +676,24 @@ "search": "Find en app", "page": { "list": { - "title": "Apps", + "ariaLabel": "Konfigurerede apps", "noResults": { "title": "Der er ingen apps endnu", - "action": "Opret din første app" + "description": "Apps er links til de tjenester og værktøjer, du vil have på dine tavler.", + "action": "Opret din første app", + "filteredTitle": "Ingen apps matcher din søgning", + "filteredDescription": "Ingen apps matcher \"{search}\". Prøv et andet navn eller URL.", + "createOnlyTitle": "Du kan kun tilføje apps", + "createOnlyDescription": "Dine tilladelser giver dig mulighed for at oprette apps, men ikke gennemse eksisterende. Bed en administrator om adgang til apphåndtering for at se den fulde liste." } }, "create": { "title": "Ny app", "notification": { "success": { - "title": "Vellykket oprettelse", "message": "Appen er blevet oprettet" }, "error": { - "title": "Oprettelsen mislykkedes", "message": "Appen kunne ikke oprettes" } } @@ -630,11 +702,9 @@ "title": "Rediger app", "notification": { "success": { - "title": "Ændringer blev anvendt", "message": "Appen blev gemt" }, "error": { - "title": "Kan ikke anvende ændringer", "message": "Appen kunne ikke gemmes" } } @@ -644,26 +714,18 @@ "message": "Er du sikker på, at du vil slette app'en {name}?", "notification": { "success": { - "title": "Slettet", "message": "App'en blev slettet" }, "error": { - "title": "Sletning mislykkedes", "message": "Kan ikke slette appen" } } } }, "field": { - "name": { - "label": "Navn" - }, "description": { "label": "Beskriveslse" }, - "url": { - "label": "Url" - }, "useDifferentUrlForPing": { "checkbox": { "label": "Brug anden URL til ping", @@ -678,34 +740,582 @@ "search": "Søg efter en app", "noResults": "Ingen resultater", "action": "Vælg {app}", - "title": "Vælg en app, der skal tilføjes til denne tavle" + "title": "Vælg en app, der skal tilføjes til denne tavle", + "toggle": "Klik for at vælge", + "selected": "Valgt", + "multiple": "Tilføj {count}", + "selectedCount": "{count, plural, one {# valgt} other {# valgt}}", + "appsSelected": "{count, plural, one {# app valgt} other {# apps valgt}}", + "selectMultiple": "Vælg flere", + "cancelMultiple": "Afslut multi-valg", + "customApplication": "Brugerdefineret applikation", + "application": "Anvendelse" }, "create": { "title": "Opret ny app", "description": "Opret en ny app ", "action": "Åbn app-oprettelse" + } + } + }, + "tips": { + "dismiss": "Afvis tip", + "multiSelectApps": "Tip: Hold Ctrl / ¤ for at vælge flere apps på én gang" + }, + "customWidget": { + "secretEntry": { + "title": "Konfigurer API-kilde", + "description": "Bekræft serverens URL og angiv legitimationsoplysninger. Hemmelige værdier krypteres af Homarr og returneres aldrig til den anmodende agent.", + "loading": "Indlæser sikker anmodning…", + "applying": "Anvender denne konfiguration… Hold denne side åben.", + "saved": "API kilde konfigureret. Du kan lukke denne side.", + "unavailable": "Anmodning utilgængelig", + "saveError": "Kan ikke konfigurere API-kilde", + "source": "API-kilde: {name}", + "baseUrl": "Server URL", + "networkScope": "Adgang til netværk", + "save": "Gem API-konfiguration", + "expires": "Denne engangsanmodning udløber hos {time}." + }, + "page": { + "list": { + "noResults": "", + "noDescription": "Ingen beskrivelse", + "enabled": "Aktiveret", + "disabled": "Deaktiveret", + "disabledDescription": "Denne widget forbliver konfigureret, men vil ikke indlæse på nogen tavle.", + "requestCount": "{count, plural, one {# anmodning} other {# anmodninger}}", + "invalidDefinition": "Ugyldig definition", + "migrationRequired": "Migration påkrævet", + "migrationInstructions": "Åbn Handlinger for at kopiere eller eksportere den oprindelige v1 definition til manuel rekreation. Du kan også bruge migreringsprompten med en LLM. Eksisterende board placeringer bliver ved med at arbejde efter migration.", + "missingCredentials": "{count, plural, one {legitimationsoplysninger mangler} other {# legitimationsoplysninger mangler}}", + "missingCredentialsDescription": "{count, plural, one {Denne widget behøver stadig et legitimationsoplysninger.} other {Denne widget behøver stadig # legitimationsoplysninger.}} Vælg dette badge for at konfigurere URL og krypterede værdier." }, - "add": "Tilføj en app" + "create": { + "title": "", + "subtitle": "" + }, + "tabs": { + "ariaLabel": "Brugerdefinerede widget sektioner", + "installed": "Installeret", + "workshop": "Værksted" + } + }, + "action": { + "pasteImportHint": "Indsæt en fuld brugerdefineret widget JSON med Ctrl+V eller Kommando+V", + "delete": "", + "deleteConfirm": "", + "export": "", + "duplicate": "", + "aiPrompt": "Design med AI", + "copyAiPrompt": "", + "enable": "", + "disable": "", + "menu": "", + "downloadSkill": "Vis Brugerdefineret Widget Færdighed", + "publishWorkshop": "Udgiv til værksted", + "migrate": "Migrér Brugerdefineret Widget", + "configureSources": "Konfigurér kilder", + "copyLegacyDefinition": "Kopier originalt widget-indhold", + "exportLegacyDefinition": "Eksporter oprindeligt widget-indhold", + "copyMigrationPrompt": "Kopier LLM migrerings prompt", + "pasteMigration": "Indsæt migreret widget", + "importMigration": "Importér migreret JSON- fil" + }, + "sourceSetupDialog": { + "title": "Konfigurér widget-kilder", + "description": "Gennemgå hvor denne widget forbinder og tilføje eller erstatte sine krypterede legitimationsoplysninger.", + "credentialsRequired": "Anmodninger vil mislykkes, indtil de krævede legitimationsoplysninger er tilføjet.", + "save": "Gem konfiguration" + }, + "field": { + "description": "" + }, + "editor": { + "errorBoundary": { + "title": "Noget gik galt" + }, + "action": { + "components": "Komponenter", + "format": "Formatér", + "insertStarter": "Insert starter", + "redo": "Gendan", + "copied": "Kopieret", + "schema": "Skema" + }, + "reference": { + "minimal": "Minimal eksempel", + "full": "Fuldt eksempel" + }, + "componentReference": { + "search": "Søg i komponenter", + "empty": "Ingen matchende komponenter", + "count": "{count, number} tilgængelige komponenter" + }, + "status": { + "errors": "{count, number} fejl", + "warnings": "{count, number} advarsler", + "ready": "Ingen problemer fundet", + "position": "Ln {line, number}, Col {column, number}", + "characters": "{count, number} tegn", + "charactersWithLimit": "{count, number} / {limit, number}" + }, + "diagnostics": { + "title": "Skabelon diagnose", + "line": "Linje {line, number}", + "ast": "{value}", + "bindingTypeConflict": "Input \"{value}\" deles af kontrolelementer med inkompatible værdityper.", + "runtimeBindingTypeConflict": "Input \"{value}\" er bundet som både {firstType} og {secondType}.", + "dynamicRequestId": "En bogstavelig anmodningId er påkrævet. Dynamiske forespørgsels-ID'er accepteres ikke.", + "dynamicInputBinding": "Et bogstaveligt inputnavn er påkrævet for binding.", + "inlineRequestProps": "Netværkskomponenter accepterer requestId og params; inline URL, metode, header, og bodyprops blokeres.", + "invalidRequestManifest": "Navngivne anmodninger skal være et gyldigt anmodningskort. {value}", + "missingRequestId": "Denne netværkskomponent kræver en bogstavelig anmodning.", + "templateEmpty": "Indtast en JSX skabelon.", + "templateTooLong": "Skabelonen overskrider grænsen på 50.000 tegn.", + "unknownRequest": "Der findes ingen navngiven anmodning med ID \"{value}\"." + } + }, + "workbench": { + "configure": "Konfigurer", + "sectionNavigation": "Brugerdefinerede widget sektioner", + "widgetPreview": "Uddrag af widget", + "generalInformation": "Generelle oplysninger", + "invalidWidget": "Ugyldig widget", + "section": { + "general": "Generelt", + "sources": "API kilder", + "requests": "Forespørgsler", + "options": "Indstillinger", + "jsx": "JSX", + "preview": "Eksempelvisning" + }, + "status": { + "unsaved": "Ikke-gemte ændringer", + "invalid": "Behøver opmærksomhed", + "ready": "Klar" + }, + "saveError": { + "title": "Widget blev ikke gemt", + "description": "Løs disse valideringsfejl og gem igen.", + "more": "+{count} flere fejl vises i arbejdsbænken.", + "errors": "Valideringsfejl", + "copy": "Kopiér fejl", + "copied": "Fejl kopieret" + }, + "action": { + "preview": "Test og forhåndsvisning", + "previewLoading": "Test af anmodninger" + }, + "requests": { + "title": "Navngivne forespørgsler og handlinger", + "label": "Forespørgsler", + "description": "Forespørgsler indlæsningsdata; handlinger køres kun efter brugerinteraktion. Enhver HTTP metode er gyldig for begge slags." + }, + "options": { + "title": "Widget indstillinger" + }, + "builder": { + "advancedManifest": "Avanceret rå manifest", + "advancedJson": "Avanceret manifest JSON", + "manifestFilename": "widget.json", + "request": "Anmod Om {count, number}", + "requestId": "Anmod Om ID", + "type": "Type", + "method": "Metode", + "source": "API kilde", + "run": "Kør", + "runLoad": "Når widget belastninger", + "runManual": "Fra UnderHent", + "permission": "Tilladelse", + "path": "Sti", + "pathDescription": "Brug '{option:name}' til widget indstillinger og '{param:name}' til invocation værdier.", + "requestDetails": "Forespørgsel, krop og opførsel", + "queryValues": "Forespørgselsværdier", + "queryKey": "Forespørgsels nøgle", + "queryKeyInvalid": "Brug et unikt ID der starter med et bogstav og indeholder kun bogstaver, tal, - eller _.", + "valueSource": "Værdi kilde", + "literal": "Litteratur", + "widgetOption": "Widget mulighed", + "invocationParameter": "Invocation parameter", + "option": "Valgmulighed", + "parameterName": "Parameter navn", + "value": "Værdi", + "removeQueryValue": "Fjern forespørgselsværdi", + "addQueryValue": "Tilføj forespørgselsværdi", + "jsonBody": "JSON krop", + "jsonBodyDescription": "Valgfri. Indsæt $option og $param referencer til enhver dybde.", + "insertOptionReference": "Indsæt indstillingsreference", + "insertParameterReference": "Indsæt parameter reference", + "confirmation": "Bekræftelse besked", + "invalidation": "Opdatering efter succes", + "invalidationDescription": "Komma- separerede forespørgsel- ID' er", + "noAuth": "Send uden kildegodkendelse", + "moveRequestUp": "Flyt anmodning op", + "moveRequestDown": "Flyt anmodning ned", + "removeRequest": "Fjern anmodning", + "addRequest": "Tilføj anmodning", + "optionName": "Valgmulighed navn", + "label": "Etiket", + "control": "Kontrol", + "description": "Beskriveslse", + "default": "Standard", + "optionDetails": "Begrænsninger og dynamiske valg", + "minimum": "Mindste", + "maximum": "Maksimum", + "step": "Trin", + "choiceLabel": "Valg etiket", + "choiceValue": "Valg værdi", + "newChoice": "Nyt valg", + "addChoice": "Tilføj valg", + "removeChoice": "Fjern valg", + "choicesRequest": "Indlæs valg fra anmodning", + "itemsPath": "Elementer sti", + "itemsPathPlaceholder": "varer (valgfrit)", + "valuePath": "Værdi sti", + "labelPath": "Etiket sti", + "group": "Gruppe", + "advancedOption": "Avanceret indstilling", + "moveOptionUp": "Flyt tilvalget op", + "moveOptionDown": "Flyt tilvalget ned", + "removeOption": "Fjern indstilling", + "addOption": "Tilføj mulighed", + "invalidJson": "Ugyldig JSON", + "invalidWidget": "Ugyldig widget" + }, + "jsx": { + "title": "JSX skabelon", + "label": "Skabelon" + }, + "sources": { + "title": "API-kilder og legitimationsoplysninger", + "newName": "API {count, number}", + "duplicateSourceId": "API-kilde-id'er skal være unikke.", + "credentialRemoved": "legitimationsoplysninger fjernet", + "credentialRemovedDescription": "Den gemte værdi blev slettet.", + "primary": "Primær API", + "id": "Kilde ID", + "name": "Navn", + "baseUrl": "Base URL", + "baseUrlError": { + "invalid": "Angiv en komplet URL.", + "protocol": "Brug en HTTP eller HTTPS URL.", + "credentials": "Fjern brugernavn og adgangskode fra denne URL. Konfigurér legitimationsoplysninger nedenfor i stedet.", + "queryOrFragment": "Fjern forespørgselsstrengen eller fragment fra denne base URL. Tilføj forespørgselsværdier til en navngiven anmodning." + }, + "networkScope": "Adgang til netværk", + "authentication": "Autorisering", + "headerName": "Header navn", + "queryParameter": "Forespørgselsparameter", + "configured": "Konfigureret — angiv en erstatning", + "clear": "Skyfrit", + "remove": "Fjern kilde og dets anmodninger", + "advanced": "Avanceret", + "add": "Tilføj en anden API-kilde", + "sourceType": "Integration", + "manualSource": "HTTP API", + "existingIntegration": "Eksisterende integration", + "integrationType": "Integration type", + "selectIntegration": "Konfigureret integration", + "noIntegrations": "Ingen matchende integrationer tilgængelige", + "integrationUnavailable": "Den valgte integration er ikke længere tilgængelig. Vælg en anden integration.", + "integrationDescription": "Bruger den gemte integrations URL og legitimationsoplysninger. Ændringer gælder automatisk. Fuld integrationsadgang er nødvendig for at køre anmodninger." + }, + "ai": { + "title": "Opret eller rettelse med enhver AI", + "description": "Tilføj en API docs URL først, hvis du har en. For rettelser, kør Forhåndsvisning om muligt. Kopiér prompten til enhver AI; den kan bede om manglende detaljer. Indsæt dens endelige JSON her.", + "request": "Hvad skal denne widget gøre?", + "documentationUrl": "API dokumentation URL (valgfri)", + "paste": "Indsæt", + "response": "AI svar", + "manualCopyDescription": "Udklipsholder adgang er ikke tilgængelig. Vælg prompten nedenfor og kopier den manuelt.", + "manualPasteDescription": "Adgang til udklipsholder er utilgængelig, eller det kopierede svar skal korrigeres. Indsæt AI's JSON svar her.", + "selectAll": "Vælg alle", + "loadResponse": "Indlæs svar", + "loaded": "Widget indlæst i editoren", + "invalidResponse": "Udklipsholder indeholder ikke en gyldig v2 widget", + "invalidResponseDetail": "AI-svaret er ugyldigt: {message}" + }, + "preview": { + "invalid": "Fix valideringsfejl for at forhåndsvise denne widget.", + "fixtureError": "Eksempelvisning af fixture fejl", + "requestData": "Anmod om data", + "status": { + "idle": "Anmodninger er ikke blevet afprøvet", + "loading": "Test af anmodninger", + "success": "Alle belastningsanmodninger lykkedes", + "error": "En eller flere indlæsningsanmodninger mislykkedes" + }, + "result": { + "loading": { + "title": "Test API-anmodninger", + "description": "Homarr opretter en forhåndsvisning session og indlæser widget data." + }, + "success": { + "title": "Forhåndsvisning klar", + "description": "{succeeded, plural, =0 {Denne widget har ingen indlæsningsanmodninger.} one {# indlæsningsanmodning lykkedes.} other {# indlæsningsanmodninger lykkedes.}} Åbn data for at inspicere svaret." + }, + "error": { + "title": "Forhåndsvisning fuldført med forespørgselsfejl", + "description": "{succeeded, number} lykkedes og {failed, number} mislykkedes. Åbne data for svar og fejldetaljer." + } + }, + "instanceOptions": "Indstillinger for Instans", + "liveActions": "Kør handlinger mod den konfigurerede API", + "liveActionsDescription": "Slukket er sikker simulering. At tænde dette påvirker den reelle tjeneste.", + "noActions": "Ingen handlinger er defineret.", + "containedFailures": "Runtime fejl er indeholdt i denne widget. Anmodning tidsskrifter inkluderer aldrig hemmelige værdier.", + "validation": { + "title": "Validering", + "ready": "Widget-definitionen er gyldig." + }, + "accessibility": { + "title": "Kontrol af tilgængelighed", + "ready": "Ingen almindelige fejl i tilgængeligheden.", + "pending": "Tilgængelighedstjek vil køre, når widget-definitionen er gyldig.", + "imageAlt": "Tilføj alt tekst til hvert billede, ved brug af en tom alt kun for dekorative billeder.", + "actionIconLabel": "Tilføj en aria-etiket eller titel til hver ActionIcon.", + "inputLabel": "Tilføj en synlig etiket eller tilgængeligt navn til hvert input." + }, + "journal": "Annulleret anmodning journal", + "actionParameters": "Handlingsparametre (JSON)", + "invalidParameters": "Brug den angivne streng, antal og boolske parametertyper.", + "runDestructive": "Kør destruktiv handling", + "runAction": "Kør handling", + "deleteConfirmation": "Denne forhåndsvisning handling ændrer fjerndata via den konfigurerede API.", + "simulated": "Simuleret handling", + "httpStatus": "Http {status, number}", + "tab": { + "widget": "Widget", + "data": "Data", + "options": "Indstillinger", + "state": "Job Status", + "actions": "Styring", + "diagnostics": "Diagnostik" + }, + "size": { + "compact": "Kompakt", + "standard": "Standard", + "wide": "Bred" + }, + "fixture": { + "live": "Levende", + "loading": "Indlæser", + "empty": "Tom", + "error": "Fejl" + } + } + }, + "preview": { + "request": { + "permission": { + "view": "Vis", + "modify": "Ændre", + "full": "Fuld" + } + } + }, + "notification": { + "created": "", + "updated": "", + "deleted": "", + "imported": "", + "migrated": "Ældre widget migreret med succes. Eksisterende board placeringer bruger nu v2 definitionen.", + "migrationError": "Mislykkedes at migrere den ældre widget. Sørg for, at filen bruger homarr-custom-widget-v2 skema.", + "legacyDefinitionCopied": "Det oprindelige widget indhold blev kopieret. Gemte legitimationsoplysninger værdier er ikke inkluderet.", + "legacyDefinitionCopyError": "Kopiering af originalt kontrolindhold mislykkedes.", + "migrationPromptCopied": "En redigeret migrationsprompt blev kopieret. Indsæt den i en LLM, kopiér dens enkelt JSON svar, og vælg derefter Indsæt migreret widget her.", + "migrationPromptCopyError": "Mislykkedes at kopiere migrationsprompten.", + "sourcesConfigured": "Widget kilder og legitimationsoplysninger gemt.", + "sourceConfigurationError": "Kunne ikke konfigurere widget-kilder.", + "aiPromptCopiedWithCount": "AI prompt kopieret til udklipsholder ({count, number} tegn).", + "aiPromptCopyError": "", + "aiPromptSent": "Spørg sendt. Du kan fortsætte med at redigere mens assistenten arbejder i baggrunden.", + "updateError": "", + "importError": "", + "exportError": "", + "duplicated": "", + "duplicateError": "", + "toggleError": "", + "deleteError": "", + "previewError": "" + }, + "importReview": { + "title": "Gennemgå import af brugerdefinerede widget", + "description": "Vælg hvor denne widget forbinder og hvilken tavle adgang dens kontrolelementer kræver, før du importerer den.", + "migrationTitle": "Gennemgå migreret v2 udskiftning", + "migrationDescription": "Gennemgå og bekræfte denne genererede v2 definition. Bekræftelse atomisk erstatter den bevarede v1 post og samtidig holde eksisterende board placeringer knyttet til den samme widget ID.", + "fileLabel": "Vælg en brugerdefineret widget JSON fil", + "name": "Jobnavn", + "origin": "Basis oprindelse", + "authentication": "Autorisering", + "networkScope": "Netværk anvendelsesområde", + "methods": "HTTP metoder", + "permissions": "Krævede tavle-tilladelser", + "sourceSetup": { + "title": "Konfigurer API-kilder", + "description": "Bekræft hvor denne widget forbinder og tilføjer legitimationsoplysninger. Private og loopback URL'er er specifikke for din Homarr installation.", + "suggestedUrl": "Foreslået URL", + "confirmUrl": "Jeg bekræfter, at denne server URL er korrekt for min Homarr installation", + "ready": "URL klar", + "needsUrl": "Bekræft URL", + "credentialsMissing": "Legitimationsoplysninger mangler", + "credentialsOptional": "Du kan installere uden legitimationsoplysninger og konfigurere dem senere, men anmodninger vil mislykkes, indtil de er tilføjet." + }, + "actionWarning": { + "title": "Denne widget kan ændre fjerndata", + "description": "Gennemgå alle navngivne handlinger, nedarvede legitimationsoplysninger og destruktiv bekræftelse efter import. Hemmeligheder er ikke inkluderet i filen." + }, + "cancel": "Annuller import", + "confirm": "Importér widget", + "confirmMigration": "Bekræft udskiftning af v2" + }, + "secret": { + "apiKey": "API-nøgle eller token", + "username": "", + "password": "", + "savedPlaceholder": "" + } + }, + "workshop": { + "title": "Værksted", + "browseWorkshop": "Gennemse Værksted", + "openCommunity": "Åbn Værksted", + "openOnWorkshop": "Åbn {title} på værkstedens hjemmeside", + "back": "Tilbage til værksted", + "search": "Søg i widgets", + "searchCss": "Søg efter CSS temaer", + "sort": "Sortér", + "sortTop": "Bedst bedømte", + "sortNewest": "Nyeste", + "listAriaLabel": "Workshop widgets", + "listAriaLabelCss": "Workshop CSS temaer", + "empty": "Ingen widgets matcher denne søgning.", + "emptyDescription": "Fællesskabs widgets publiceret til Workshop-dukken op her.", + "emptyFilteredTitle": "Ingen widgets matcher denne søgning", + "emptyFilteredDescription": "Ingen Workshop widget matcher \"{search}\".", + "emptyCss": "Ingen CSS-temaer matcher denne søgning.", + "unavailableTitle": "Homarr Workshop synes at være utilgængeligt", + "unavailable": "Fællesskabstjenesten kan være midlertidigt nede. Prøv igen om et øjeblik. Dine installerede widgets er upåvirket.", + "loadError": "Denne indsendelse kunne ikke indlæses.", + "noDescription": "Ingen beskrivelse", + "author": "af {name}", + "communityMember": "Medlemmer af Fællesskabet", + "outdated": "Forældet", + "outdatedWarning": "Forfatteren markerede denne indsendelse som forældet. Gennemgå den omhyggeligt, før du importerer.", + "score": "Score: {count, number}", + "upvote": "Upvote", + "downvote": "Downvote", + "voteError": "Afstemningen kunne ikke gemmes.", + "signIn": "Log ind med GitHub", + "signInError": "GitHub log-in mislykkedes. Kontroller, at Workshop OAuth udbyder er konfigureret og at popups er tilladt.", + "signOut": "Log ud", + "signInHint": "Log ind for at stemme eller rapport. Installation kræver ikke en værkstedskonto.", + "securityNotice": "Workshop widgets kan kalde deres erklærede API-kilder og udføre erklærede handlinger med legitimationsoplysninger, du konfigurerer lokalt. Hemmeligheder er aldrig inkluderet.", + "securityNoticeCss": "Community CSS kan ændre udseendet og anvendeligheden af en tavle. Gennemgå den før importering; intet gemmes før du gemmer indstillinger for tavlen.", + "install": "Installér", + "installReviewTitle": "Gennemgå før installation", + "installError": "Denne widget kan ikke installeres", + "installErrorDescription": "Workshop indsendelse er ikke en gyldig Custom JSX v2 widget.", + "useCss": "Import CSS", + "importCss": "Importer CSS fra Workshop", + "importCssConfirm": "Erstat den aktuelle brugerdefinerede CSS med \"{title}\"? Intet gemmes før du gemmer tavlens indstillinger.", + "screenshotAlt": "{title} skærmbillede {count, number}", + "screenshotViewer": "{title} screenshot fremviser", + "screenshotsLabel": "{title} skærmbilleder", + "zoomScreenshot": "Se fuld størrelse", + "previousScreenshot": "Forrige skærmbillede", + "nextScreenshot": "Næste skærmbillede", + "showScreenshotThumbnails": "Vis skærmbillede miniaturer", + "hideScreenshotThumbnails": "Skjul skærmbillede miniaturer", + "closeScreenshotViewer": "Luk screenshot fremviser", + "technicalDetails": "Tekniske detaljer", + "sourceCode": "Værkstedspost", + "export": "Eksporter", + "report": "Rapport", + "reportTitle": "Indsendelse af rapport", + "reportReason": "Årsag", + "reportExplanation": "Hvad skal værkstedsmoderatorerne vide?", + "reportSend": "Send rapport", + "reportSent": "Rapport sendt", + "reportSentDescription": "Værkstedsmoderatorer kan nu gennemgå dette indlæg.", + "reportCount": "{count, plural, one {# rapport} other {# rapporter}}", + "reportWarning": "{count, plural, one {Denne indsendelse har # åben fællesskabsrapport.} other {Denne indsendelse har # åbne fællesskabsrapporter.}} Den er installerbar, men du bør først gennemgå dens indhold.", + "reportVisibility": "Rapport detaljer er kun synlige for denne indsendelse forfatter og Workshop admins.", + "reportCategory": { + "outdated": "Forældet eller ikke længere virket", + "malicious": "Ondsindede", + "spam": "Spam", + "copyright": "Ophavsret", + "inappropriate": "Upassende", + "other": "Andet" + }, + "publish": { + "title": "Udgiv til værksted", + "introTitle": "Del denne widget med fællesskabet", + "introDescription": "Homarr eksporterer en legitimations-fri kopi af den aktuelle widget. Tilføj klare liste detaljer, så folk ved, hvad det gør, før du installerer det.", + "listingDetails": "Workshop liste", + "listingDetailsDescription": "Disse detaljer vises offentligt sammen med den eksporterede widget definition.", + "success": "Offentliggjort straks. Fællesskabsmedlemmer kan nu installere og rapportere denne widget.", + "successTitle": "Din widget er live", + "manageDescription": "Åbn indsendelsen for at opdatere dens opførsel, revisionsrapporter, markere den forældet, eller slette den. Indsendelsesadministration håndteres direkte på værkstedswebstedet.", + "viewSubmission": "Se og administrer indsendelse", + "done": "Udført", + "signInHint": "Log ind for at publicere under din værkstedsidentitet.", + "titleField": "Titel", + "descriptionField": "Beskriveslse", + "screenshots": "Skærmbilleder", + "screenshotsDescription": "Op til fem PNG, JPEG, eller WebP billeder", + "screenshotsPlaceholder": "Vælg skærmfotos", + "invalidScreenshot": "Brug PNG, JPEG, eller WebP billeder ikke større end {maxSize} hver.", + "privateSourceWarning": "Denne widget indeholder private kildeadresser for: {sources}. Erstat personlige værter eller IP-adresser med sikre servicepladsholdere før publicering.", + "reviewSourcesTitle": "Gennemse private kildeadresser", + "privateSourceConfirmation": "Jeg gennemgik disse kilde URL'er, og de ikke udsætte private infrastruktur detaljer", + "action": "Udgiv nu", + "publicationNote": "Publicering er øjeblikkelig. Du kan administrere indsendelsen bagefter på Workshop.", + "definitionChanged": "Kontrollen blev ændret mens publikationen blev forberedt. Gennemgå dens private kilde URL'er igen, og prøv derefter.", + "error": "Offentliggørelse mislykkedes" } }, "integration": { + "completion": { + "modalTitle": "Tjenesten er klar", + "title": "{name} er forbundet", + "description": "Forbindelsen bestået sin test. Vælg hvad der skal vises på denne tavle næste.", + "connectionReady": "Tjenesteforbindelse er klar", + "appReady": "Genvej til app er klar", + "compatibleWidgets": "{count, plural, =0 {Ingen kompatible widgets} one {# kompatibel widget} other {# kompatible widgets}} tilgængelig", + "chooseWidget": "Vælg widget", + "recipes": { + "title": "Anbefales til denne tavle", + "description": "Baseret på forbundne tjenester og widgets allerede på denne tavle.", + "newConnectionReason": "Nu tilgængelig via {integration}", + "existingConnectionReason": "Virker med en tjeneste, du allerede har tilsluttet", + "dismiss": "Afvis anbefalinger for denne tjeneste på denne tavle" + } + }, "page": { "list": { - "title": "Integrationer", + "ariaLabel": "Konfigurerede integrationer", "search": "Søg i integrationer", + "scopedNote": "Viser kun de integrationer, du har lov til at administrere.", "noResults": { - "title": "Der er ingen integrationer endnu" + "title": "Der er ingen integrationer endnu", + "description": "Tilslut en tjeneste for at bruge sine data og handlinger i Homarr widgets.", + "action": "Opret din første integration", + "filteredTitle": "Ingen integrationer matcher din søgning", + "filteredDescription": "Ingen integrationer matcher \"{search}\". Prøv et andet navn, type eller URL.", + "createOnlyTitle": "Du kan kun tilføje integrationer", + "createOnlyDescription": "Dine tilladelser giver dig mulighed for at oprette integrationer, men ikke håndtere eksisterende. Spørg en administrator om adgang til dem, du har brug for." } }, "create": { "title": "Ny {name} integration", "notification": { "success": { - "title": "Oprettelse vellykket", "message": "Integrationen blev oprettet korrekt" }, "error": { - "title": "Oprettelse mislykkedes", "message": "Integration kunne ikke oprettes" } }, @@ -729,11 +1339,9 @@ "title": "Rediger {name} integration", "notification": { "success": { - "title": "Ændringer blev anvendt", "message": "Integrationen blev gemt" }, "error": { - "title": "Kan ikke anvende ændringer", "message": "Integration kunne ikke gemmes" } }, @@ -750,23 +1358,15 @@ "message": "Er du sikker på, at du vil slette integrationen {name}?", "notification": { "success": { - "title": "Slettet", "message": "Integrationen blev slettet korrekt" }, "error": { - "title": "Sletning mislykkedes", "message": "Kan ikke slette integrationen" } } } }, "field": { - "name": { - "label": "Navn" - }, - "url": { - "label": "Url" - }, "attemptSearchEngineCreation": { "label": "Opret Søgemaskine", "description": "Integration \"{kind}\" kan bruges med søgemaskinerne. Markér dette for automatisk at konfigurere søgemaskinen." @@ -778,6 +1378,10 @@ "label": "Opret app", "description": "Opret en app med samme navn og ikon som integrationen. Lad input-feltet være tomt for at oprette app'en med integrations-URL'en." }, + "linkApp": { + "label": "Link en eksisterende app", + "description": "Tilslut denne integration til en app, du allerede kan bruge." + }, "appHref": { "placeholder": "Brugerdefineret app URL" }, @@ -791,7 +1395,11 @@ "grid": { "widgetCount": "{count} widgets", "noWidgets": "Ingen widgets", - "detected": "Opdaget via Docker" + "detected": "Opdaget via Docker", + "connected": "{count, plural, one {# forbundet} other {# forbundet}}", + "tiedWidgets": "Tilknyttede widgets", + "more": "+{count} mere", + "loadError": "Integrationer kunne ikke indlæses. Prøv igen, før du opretter en ny forbindelse." }, "category": { "dnsHole": "DNS", @@ -822,7 +1430,10 @@ "analytics": "Analyse", "vpn": "", "mediaLibrary": "Mediebibliotek", - "uptimeMonitoring": "Oppetidsovervågning" + "uptimeMonitoring": "Oppetidsovervågning", + "beszel": "Beszel", + "systemMonitoring": "System Overvågning", + "security": "Sikkerhed" }, "testConnection": { "action": { @@ -1107,6 +1718,22 @@ "slug": { "label": "Status side slug", "newLabel": "Ny status side slug" + }, + "wazuhIndexerUrl": { + "label": "Indekser URL", + "newLabel": "Ny indekserings-URL" + }, + "wazuhIndexerUsername": { + "label": "Indekserings brugernavn", + "newLabel": "Nyt indekseringsbrugernavn" + }, + "wazuhIndexerPassword": { + "label": "Indekser adgangskode", + "newLabel": "Ny indekseringsadgangskode" + }, + "wazuhDashboardUrl": { + "label": "Kontrolpanel URL (valgfri)", + "newLabel": "Nyt dashboard URL" } } }, @@ -1115,54 +1742,19 @@ "interact": "Interagere med integrationer", "full": "Fuld integrationsadgang" }, - "audiobookshelf": { - "name": "Audiobookshelf", - "description": "Selvhostet lydbogs- og podcastserver" - }, - "navidrome": { - "name": "Navidrome", - "description": "Selvhostet musikstreamingserver med Subsonic API-kompatibilitet" - }, - "uptimeKuma": { - "name": "Uptime Kuma", - "description": "Selvhostet oppetidsovervågning med offentlige statussider", - "secret": { - "slug": { - "description": "Slug'en for din offentlige statusside. Standard til \"default\", hvis ikke angivet." - }, - "apiKey": { - "description": "Valgfri API-nøgle til autentificeret /metrics-adgang" - } - } - }, - "traefik": { - "name": "", - "description": "" - }, - "paperlessNgx": { - "name": "Paperless-ngx", - "description": "Dokumenthåndteringssystem til arkivering og organisering af scannede dokumenter" - }, - "patchmon": { - "name": "", - "description": "" - }, - "bazarr": { - "name": "", - "description": "" - }, - "wud": { - "name": "Hvad Er Opad Docker", - "description": "Overvåg hvilke af dine Docker-containere der er tilgængelige billedopdateringer" + "llamacpp": { + "name": "llama.cpp", + "description": "Overvåg en lokal llama.cpp llama-server: sundhed, model og generation målinger" } }, "media": { "plural": "Medier", "search": "Find medie", "field": { - "name": "Navn", + "preview": "Eksempelvisning", "size": "Størrelse", - "creator": "Skaber" + "creator": "Skaber", + "actions": "Styring" }, "action": { "upload": { @@ -1190,10 +1782,12 @@ } }, "copy": { - "label": "Kopiér URL" + "label": "Kopiér URL", + "labelNamed": "Kopier URL til {name}" }, "open": { - "label": "Åben medie" + "label": "Åben medie", + "labelNamed": "Åbn {name}" } }, "noResults": { @@ -1208,7 +1802,6 @@ "add": "Tilføj", "apply": "Anvend", "backToOverview": "Tilbage til oversigt", - "skip": "Spring over", "change": "Skift", "create": "Opret", "createAnother": "Opret og start forfra", @@ -1231,16 +1824,31 @@ "tryAgain": "Prøv igen", "loading": "Indlæser", "show": "Vis", - "hide": "Skjul" + "hide": "Skjul", + "undo": "Fortryd", + "editNamed": "Rediger {name}", + "deleteNamed": "Slet {name}", + "clearSearch": "Ryd søgning", + "copy": "Kopiér", + "copied": "Kopieret", + "refresh": "Opdater" + }, + "pagination": { + "pageOf": "Side {page} af {totalPages}" }, "here": "her", + "serviceUrlTemplate": { + "serverTitle": "Sædvanlig serveradresse", + "urlModeLabel": "Mønster for tjenestens adresse", + "hostPort": "Samme vært, forskellige porte", + "subdomain": "Et underdomæne pr. tjeneste", + "path": "En sti pr. tjeneste" + }, "iconPicker": { "label": "Ikon-URL", + "description": "Søg i biblioteket, indsæt en billed-URL, eller upload en fil.", "header": "Søg efter {countIcons} billeder efter navn", "headerLoading": "Søg billeder efter navn", - "noResults": "", - "error": "", - "description": "Søg i biblioteket, indsæt en billed-URL, eller upload en fil.", "clear": "Ryd billede", "uploadImage": "Upload billede", "results": "Billede søgeresultater", @@ -1249,7 +1857,9 @@ "otherImages": "Andre billeder", "urlLoading": "Kontrollerer billede…", "urlReady": "Billedet er klar til brug", - "urlError": "Dette billede kunne ikke indlæses. Tjek URL'en og prøv igen." + "urlError": "Dette billede kunne ikke indlæses. Tjek URL'en og prøv igen.", + "noResults": "", + "error": "" }, "colorScheme": { "options": { @@ -1261,7 +1871,6 @@ "information": { "min": "Min", "max": "Maks", - "days": "Dage", "hours": "Timer", "minutes": "Minutter" }, @@ -1298,16 +1907,16 @@ }, "userAvatar": { "menu": { - "switchToDarkMode": "Skift til mørk tilstand", - "switchToLightMode": "Skift til lys tilstand", + "open": "Åbn konto menu", "management": "Håndtering", - "docker": "", "preferences": "Dine indstillinger", "logout": "Log ud", "login": "Log ind", "homeBoard": "Din hjemmetavle", - "loggedOut": "Logget ud", - "updateAvailable": "{countUpdates} opdateringer tilgængelige: {tag}" + "updateAvailable": "{countUpdates} opdateringer tilgængelige: {tag}", + "assistant": "Assistent", + "assistantThinking": "Tænker", + "modifier": "Mod" } }, "dangerZone": "Farezone", @@ -1355,13 +1964,66 @@ "kilometersPerHour": "km/t", "milesPerHour": "mi/t" } + }, + "widgetQuery": { + "loading": "Indlæser widget data" + }, + "total": "Total", + "filesystemUsage": "{count, plural, one {Vis brug for # filsystem} other {Vis brug for # filsystemer}}", + "field": { + "name": "Jobnavn" + }, + "label": { + "new": "Ny" + }, + "entity": { + "apps": "Apps", + "boards": "Tavler", + "certificates": "Certifikater", + "customWidgets": "Brugerdefinerede widgets", + "groups": "Grupper", + "integrations": "Integrationer", + "invites": "Invitationer", + "logs": "Logs", + "media": "Medie", + "searchEngines": "Søgemaskiner", + "tasks": "Opgaver", + "users": "Brugere" } }, "section": { - "dynamic": { + "option": { + "showLabel": { + "label": "Vis etiket", + "description": "Vis beholderens etiket over dens indhold." + }, + "collapsible": { + "label": "Tillad kollaps", + "description": "Lad seerne udvide og kollapse denne container." + }, + "showOpenAll": { + "label": "Vis åben alle handlinger", + "description": "Vis en handling, der åbner hver app i denne beholder i nye faner." + }, + "scrollable": { + "label": "Scrollable", + "description": "Hold denne beholder på sin indstillede størrelse og rul dens indhold i stedet for at vokse til at passe dem." + } + }, + "action": { + "openAllInNewTabsFor": "Åbn alle apps i {name} i faner" + }, + "openAllInNewTabs": { + "title": "Åbn alt i faneblade", + "text": "Nogle browsere kan blokere bulk-åbning af faner af sikkerhedsmæssige årsager. Homarr kunne ikke åbne alle vinduer, fordi din browser blokerede denne handling. Tillad venligst \"Åbn pop op-vinduer\" og prøv igen." + }, + "container": { + "untitled": "Unavngivet beholder", "action": { - "create": "Ny dynamisk sektion", - "remove": "Fjern dynamisk sektion" + "create": "Ny beholder", + "remove": "Fjern beholder", + "expand": "Udvid", + "collapse": "Sammenfold" }, "option": { "title": { @@ -1375,55 +2037,12 @@ } }, "remove": { - "title": "Fjern dynamisk sektion", - "message": "Er du sikker på at du vil fjerne dette dynamiske afsnit? Elementer vil blive flyttet på samme sted i det overordnede afsnit." - } - }, - "category": { - "field": { - "name": { - "label": "Navn" - } - }, - "action": { - "create": "Ny kategori", - "edit": "Omdøb kategori", - "remove": "Fjern kategori", - "moveUp": "Flyt op", - "moveDown": "Flyt ned", - "createAbove": "Ny kategori ovenover", - "createBelow": "Ny kategori nedenunder", - "openAllInNewTabs": "Åbn alt i faneblade" - }, - "create": { - "title": "Ny kategori", - "submit": "Tilføj kategori" - }, - "remove": { - "title": "Fjern kategori", - "message": "Er du sikker på, at du vil fjerne kategorien {name}?" - }, - "edit": { - "title": "Omdøb kategori", - "submit": "Omdøb kategori" - }, - "menu": { - "label": { - "create": "Ny kategori", - "changePosition": "Ændre placering", - "settings": "Indstillinger" - } - }, - "openAllInNewTabs": { - "title": "Åbn alt i faneblade", - "text": "Nogle browsere kan blokere bulk-åbning af faner af sikkerhedsmæssige årsager. Homarr kunne ikke åbne alle vinduer, fordi din browser blokerede denne handling. Tillad venligst \"Åbn pop op-vinduer\" og prøv igen." + "message": "Fjern denne beholder? Indholdet vil bevæge sig ind i det omkringliggende område." } } }, "item": { "action": { - "create": "Nyt element", - "import": "Importer element", "edit": "Rediger element", "moveResize": "Flyt / ændre størrelse af element", "duplicate": "Dupliker element", @@ -1432,7 +2051,7 @@ "menu": { "label": { "settings": "Indstillinger", - "refresh": "", + "settingsFor": "Indstillinger for {name}", "options": "", "actions": "" }, @@ -1441,21 +2060,96 @@ "error": "", "loading": "", "idle": "" + }, + "notification": { + "saveError": { + "title": "Kan ikke gemme widget", + "message": "Widget ændringer blev rullet tilbage" + } } }, "create": { "title": "Vælg element der skal tilføjes", "search": "Filtrer elementer", - "addToBoard": "Tilføj til tavle" + "addToBoard": "Tilføj til tavle", + "addAtPosition": "Tilføj element her", + "destination": { + "label": "Føj til", + "description": "Vælg hvor kontrollen skal vises. Du kan stadig flytte den senere.", + "mainCanvas": "Hoved lærred", + "leftRail": "Venstre jernbane", + "rightRail": "Højre jernbane" + }, + "connectionStatus": { + "ready": "Klar", + "needsSetup": "Behøver opsætning", + "noConnectionRequired": "Ingen forbindelse påkrævet" + }, + "customWidget": "Tilpasset widget", + "standalone": "Standalone", + "missingIntegration": { + "title": "Tilslut en tjeneste først", + "noPermission": "Denne widget behøver en kompatibel serviceforbindelse. Bed en administrator om at forbinde en, og prøv igen." + }, + "notification": { + "success": { + "title": "Widget tilføjet", + "message": "{name} blev tilføjet til denne tavle.", + "relocatedMessage": "{name} blev føjet til {destination} fordi den valgte destination ikke var tilgængelig." + }, + "error": { + "title": "Kan ikke tilføje element", + "message": "Elementet kunne ikke tilføjes til denne tavle" + } + } + }, + "selection": { + "summary": "{count, plural, one {# valgt element} other {# valgte emner}}", + "selected": "{count, plural, one {# valgt} other {# valgt}}", + "copy": "Kopiér", + "copied": "{count, plural, one {# element kopieret til udklipsholderen} other {# elementer kopieret til udklipsholderen}}", + "copyError": "De valgte elementer kunne ikke kopieres. Din browser tillader muligvis ikke adgang til udklipsholderen.", + "paste": "Indsæt", + "pasteShortcut": "Indsæt kopierede emner her (Ctrl / ¤ + V)", + "pasted": "{count, plural, one {# element indsat} other {# elementer indsat}}", + "pasteError": "Udklipsholderen kunne ikke læses. Din browser tillader muligvis ikke adgang til udklipsholderen.", + "pasteInvalid": "Udklipsholderen indeholder ikke gyldige Homarr board elementer.", + "pasteUnavailable": "De kopierede elementer passer ikke på denne tavle.", + "removed": "{count, plural, one {# element fjernet} other {# elementer fjernet}}", + "move": "Flyt", + "moveTo": "Flyt markerede elementer", + "delete": "Slet", + "clear": "Ryd valg", + "clearShortcut": "Ryd valg (Escape)", + "saveErrorTitle": "Kan ikke opdatere elementer", + "saveErrorMessage": "Ændringerne kunne ikke gemmes. Bestyrelsen blev genopfrisket.", + "moveUnavailableTitle": "Kan ikke flytte valgte elementer", + "moveUnavailableMessage": "Destinationen har ikke nok plads til hele udvælgelsen." }, "moveResize": { "title": "Flyt / ændre størrelse af element", + "entryLabel": "{name}, kolonne {column}, række {row}", + "target": { + "numbered": "{name}, destination {index}", + "located": "{name}, {location}, destination {index}" + }, + "keyboard": { + "instructions": "Tryk på Enter eller Mellemrum for at starte tastaturredigering. Brug piletasterne til at flytte, Skift plus piletasterne til at ændre størrelse, og Escape til at stoppe.", + "started": "Tastaturredigering startet. Brug piletasterne til at flytte, Skift plus piletasterne til at ændre størrelse, og Escape til at stoppe.", + "stopped": "Tastaturredigering stoppet.", + "boundary": "Denne ændring passer ikke ind i dette afsnit." + }, "field": { + "section": { + "label": "Afdeling eller jernbane" + }, "width": { - "label": "Bredde" + "label": "Bredde", + "shortLabel": "W" }, "height": { - "label": "Højde" + "label": "Højde", + "shortLabel": "H" }, "xOffset": { "label": "X forskydning" @@ -1469,18 +2163,36 @@ "title": "Rediger element", "tab": { "widget": "Rediger widget", - "app": "Rediger app" + "app": "Rediger app", + "integration": "Rediger integration" }, "app": { "propagationNotice": "Ændringer til denne app vil blive anvendt overalt, hvor den bruges på tværs af alle dashboards." }, + "integration": { + "action": "Rediger forbindelse", + "description": "Test eller reparér en valgt forbindelse uden at forlade denne widget.", + "editLabel": "Rediger {name} integration", + "fullAccessRequired": "Fuld adgang påkrævet", + "propagationNotice": "Ændringer af denne integration gælder overalt den bruges. Forbindelsen testes før den gemmes.", + "loading": "Indlæser integration", + "loadError": "Denne integration kunne ikke indlæses. Prøv igen, før du ændrer dets forbindelsesindstillinger." + }, + "preview": { + "integrationRequired": "Vælg en forbindelse til forhåndsvisning af denne widget.", + "size": "Filstørrelse" + }, + "settings": { + "label": "Widget indstillinger" + }, "advancedOptions": { "label": "Avancerede indstillinger", "title": "Avancerede elementindstillinger" }, "field": { "integrations": { - "label": "Integrationer" + "label": "Integrationer", + "removeLabel": "Fjern {name} integration" }, "title": { "label": "Titel" @@ -1494,17 +2206,18 @@ } }, "remove": { - "title": "Fjern element", "message": "Sikker på, at du vil fjerne dette element?" + }, + "advancedFocus": { + "open": "Åbn avanceret visning", + "close": "Luk avanceret visning", + "label": "{widget} avanceret visning" } }, "widget": { "integrationSelect": { "configureIntegrationFirst": "", - "loading": "", - "placeholder": "", - "noResults": "", - "loadError": "" + "placeholder": "" }, "app": { "name": "App", @@ -1513,9 +2226,6 @@ "appId": { "label": "Vælg app" }, - "openInNewTab": { - "label": "Åbn i nyt faneblad" - }, "showTitle": { "label": "Vis app-navn" }, @@ -1523,11 +2233,8 @@ "label": "Aktiver statustjek" }, "layout": { - "label": "Layout", "option": { - "row": "Horisontal", "row-reverse": "Horisontal (omvendt)", - "column": "Vertikal", "column-reverse": "Vertikal (omvendt)" } }, @@ -1552,23 +2259,60 @@ "name": "Bogmærker", "description": "Viser flere app-links", "option": { - "title": { - "label": "Titel" + "showTitle": { + "label": "Vis widget titel" + }, + "titleSize": { + "label": "Widget titelstørrelse (px)" }, "layout": { "label": "Layout", "option": { - "row": { - "label": "Horisontal" - }, - "column": { - "label": "Vertikal" - }, - "grid": { - "label": "Gitter" + "adaptive": { + "label": "Adaptiv" }, "gridHorizontal": { "label": "Vandret gitter" + }, + "icons": { + "label": "Ikoner" + } + } + }, + "variant": { + "label": "Udseende", + "option": { + "soft": { + "label": "Blød" + }, + "filled": { + "label": "Udfyldt" + }, + "outline": { + "label": "Kontur" + }, + "plain": { + "label": "Enkelt" + } + } + }, + "spacing": { + "label": "Kort afstand", + "option": { + "xs": { + "label": "Ekstra lille" + }, + "sm": { + "label": "Lille" + }, + "md": { + "label": "Medium" + }, + "lg": { + "label": "Stor" + }, + "xl": { + "label": "Ekstra stor" } } }, @@ -1581,17 +2325,28 @@ "hideHostname": { "label": "Skjul værtsnavne" }, - "openNewTab": { - "label": "Åbn i nyt faneblad" - }, "withBorder": { "label": "Vis kant" }, + "grow": { + "label": "Udvid kort til at udfylde rækken" + }, + "customUrls": { + "label": "Brugerdefinerede links" + }, "items": { "label": "Bogmærker", - "add": "Tilføj bogmærke" + "remove": "Fjern bogmærke", + "apps": { + "label": "Tilføj bogmærker", + "description": "Indsæt URL'er eller find eksisterende Apps. Træk bogmærkerne nedenfor for at omarrangere dem.", + "placeholder": "Indsæt URL'er eller søg i Apps", + "addUrl": "Tilføj denne URL", + "hint": "Tryk på Enter for at tilføje en URL. Indsæt komma-separerede eller en-per-line URL'er for at tilføje flere." + } } - } + }, + "empty": "Tilføj en URL eller app i widget-indstillingerne" }, "archiveTeamWarrior": { "name": "", @@ -1600,33 +2355,61 @@ "showBroadcastMessage": { "label": "" } + }, + "noProjectSelected": "Intet projekt valgt", + "runnerStatus": "Runner: {status}", + "projectId": "Projekt: {id}", + "sessionReceived": "Modtaget: {value}", + "sessionSent": "Session sendt: {value}", + "sessionId": "Session: {id}", + "startedAt": "Startet {date}", + "emptyItems": "Ingen aktive eller seneste jobs i dette øjebliksbillede", + "metric": { + "running": "Kører", + "completed": "Udført", + "failed": "Mislykket", + "canceled": "Annulleret", + "download": "Download", + "upload": "Upload" + }, + "status": { + "running": "Kører", + "completed": "Fuldført", + "failed": "Mislykket", + "canceled": "Annulleret", + "stopped": "Stoppet", + "idle": "Inaktiv", + "unknown": "Ukendt" + } + }, + "wud": { + "name": "Hvad Er Opad Docker", + "description": "Vis hvor mange overvågede containere der er tilgængelige opdateringer.", + "title": "Hvad Er Opad Docker", + "monitored": "Overvåget", + "updatesAvailable": "{count, plural, one {# opdatering tilgængelig} other {# opdateringer tilgængelige}}", + "updateAvailable": "Opdatering tilgængelig", + "openReleaseNotes": "Åbn udgivelsesnoter", + "option": { + "showRing": { + "label": "Vis opdateringsring" + }, + "showUpdateList": { + "label": "Vis liste over container-opdatering", + "description": "Lister hver overvåget beholder, der har en billedopdatering tilgængelig" + } } }, "dnsHoleSummary": { "name": "DNS Hole Oversigt", "description": "Viser oversigten over dit DNS-hul", "option": { - "layout": { - "label": "Layout", - "option": { - "row": { - "label": "Horisontal" - }, - "column": { - "label": "Vertikal" - }, - "grid": { - "label": "Gitter" - } - } - }, "usePiHoleColors": { "label": "Brug Pi-Hole farver" } }, "error": { - "internalServerError": "Kunne ikke hente DNS Hole oversigt", - "integrationsDisconnected": "Ingen tilgængelige data, alle integrationer afbrudt" + "internalServerError": "Kunne ikke hente DNS Hole oversigt" }, "data": { "adsBlockedToday": "Blokeret i dag", @@ -1634,32 +2417,24 @@ "dnsQueriesToday": "Forespørgsler i dag", "domainsBeingBlocked": "Domæner på bloklisten" }, - "domainsTooltip": "På grund af flere integrationer kan Homarr ikke beregne det nøjagtige antal domæner, der bliver blokeret" + "domainsTooltip": "På grund af flere integrationer kan Homarr ikke beregne det nøjagtige antal domæner, der bliver blokeret", + "status": { + "enabled": "Aktiveret", + "disabled": "Deaktiveret", + "unknown": "Ukendt" + } }, "dnsHoleControls": { "name": "DNS Hole kontrol", "description": "Kontroller PiHole eller AdGuard fra dit dashboard", "option": { - "layout": { - "label": "Layout", - "option": { - "row": { - "label": "Horisontal" - }, - "column": { - "label": "Vertikal" - }, - "grid": { - "label": "Gitter" - } - } - }, "showToggleAllButtons": { "label": "Vis Alle Knapper Til/Fra" } }, "error": { - "internalServerError": "Kunne ikke styre DNS Hole" + "internalServerError": "Kunne ikke styre DNS Hole", + "bulkActionsFailed": "{count, plural, one {# handling mislykkedes} other {# handlinger mislykkedes}}" }, "controls": { "enableAll": "Aktiver alt", @@ -1670,8 +2445,6 @@ "disabled": "Deaktiveret", "processing": "Behandler", "disconnected": "Afbrudt", - "hours": "Timer", - "minutes": "Minutter", "unlimited": "Lad feltet stå tomt for ubegrænset" } }, @@ -1683,16 +2456,10 @@ "label": "Brugerdefineret titel/by-visning", "description": "Vis en brugerdefineret titel eller navnet på byen/landet øverst på uret." }, - "customTitle": { - "label": "Titel" - }, "is24HourFormat": { "label": "24-timers format", "description": "Brug 24-timers format i stedet for 12-timers format" }, - "showSeconds": { - "label": "Vis sekunder" - }, "useCustomTimezone": { "label": "Brug en fast tidszone" }, @@ -1711,29 +2478,295 @@ "label": "Brugerdefineret tidsformat", "description": "Brug ISO 8601 til at formatere tid (dette vil tilsidesætte andre valgmuligheder)" }, - "customDateFormat": { - "label": "Brugerdefineret datoformat", - "description": "Brug ISO 8601 til at formatere dato (dette vil tilsidesætte andre valg)" - }, "showWeather": { "label": "", "description": "" }, - "weatherLocation": { - "label": "" - }, "isWeatherFormatFahrenheit": { "label": "" + }, + "animateWeatherIcon": { + "label": "Animér vejr-ikon", + "description": "Animér vejr-ikonet. Deaktiveret som standard og altid deaktiveret, når der anmodes om reduceret bevægelse." + }, + "colorWeatherByDayNight": { + "label": "Farve vejr efter dag/nat", + "description": "Tint vejret ikon og temperatur med en dag farve eller en nat farve, baseret på, om det er i øjeblikket dag eller nat på det valgte sted." + }, + "dayWeatherColor": { + "label": "Dag farve" + }, + "nightWeatherColor": { + "label": "Nat farve" + }, + "worldClockCities": { + "label": "Verdensur byer", + "description": "Tilføj og bestil op til seks byer for avanceret visning." } + }, + "timezoneList": { + "timezone": "Tidszone", + "cityLabel": "By etiket", + "searchPlaceholder": "Søg i tidszoner", + "noResults": "Ingen tidszoner fundet", + "unsupportedOption": "Uunderstøttet: {timeZone}", + "add": "Tilføj by", + "remove": "Fjern {city}", + "reorder": "Genbestil {city}", + "limit": "{count} af {maximum} byer konfigureret" + }, + "worldClock": { + "primary": "Primært ur", + "local": "Lokal tid", + "today": "Idag", + "tomorrow": "I Morgen", + "yesterday": "Igår", + "noSecondaryCities": "Tilføj byer i widget muligheder for at sammenligne dem her.", + "unsupportedPrimaryTitle": "Primær tidszone er ikke tilgængelig", + "unsupportedPrimary": "{timeZone} er ikke understøttet i denne browser. Viser UTC som en klart markeret fallback.", + "unsupportedTimeZone": "Ikke understøttet tidszone: {timeZone}", + "accessibleTime": "{city}: {time}, {date}, {timeZone}", + "advancedLabel": "Avanceret verdensur", + "cities": "Ure i verden", + "cityCount": "{count} timezones", + "timeBarLabel": "24-timers tids-til-dag position for {city}", + "dayProgress": "{percent}% forløbet · {hours}h {minutes}m tilbage", + "phaseLegend": "Tidspunkt for dagens forklaring", + "tick": { + "midnight": "00", + "morning": "06", + "noon": "12", + "evening": "18", + "end": "24" + }, + "phaseRange": { + "night": "00–05 · 21–24", + "dawn": "05–08", + "day": "08–18", + "dusk": "18–21" + }, + "phase": { + "night": "Nat", + "dawn": "Daggry", + "day": "Dag", + "dusk": "Dusk" + } + } + }, + "airQuality": { + "name": "Luftkvalitet & UV", + "description": "Viser luftkvalitet, ultraviolet indeks, forurenende stoffer og pollen for en placering.", + "option": { + "location": { + "label": "Placering af luftkvalitet" + }, + "aqiStandard": { + "label": "AQI standard", + "options": { + "auto": "Automatisk til landestandard", + "european": "Europæisk AQI", + "us": "US AQI" + } + }, + "showUv": { + "label": "Vis UV-indeks" + }, + "showPollutants": { + "label": "Vis koncentrationer af forurenende stoffer" + }, + "showPollen": { + "label": "Vis pollenkoncentrationer" + } + }, + "category": { + "good": "God", + "fair": "Fint", + "moderate": "Moderat", + "unhealthySensitive": "Usund for følsomme grupper", + "unhealthy": "Usund", + "poor": "Dårlig", + "veryPoor": "Meget dårlig", + "veryUnhealthy": "Meget usunde", + "extremelyPoor": "Ekstremt dårlig", + "hazardous": "Farlig", + "unknown": "Ingen AQI læsning" + }, + "uv": { + "label": "UV indeks", + "category": { + "low": "Lav", + "moderate": "Moderat", + "high": "Høj", + "veryHigh": "Meget høj", + "extreme": "Ekstrem", + "unknown": "Ingen læsning" + } + }, + "dominantPollutant": "Dominant pollutant", + "aqiLabel": "AQI", + "strongestPollen": "Højeste pollen", + "unit": { + "concentration": "{value} μg/m3", + "pollen": "{value} korn/m3" + }, + "pollutant": { + "pm2_5": "PM2.5", + "pm10": "PM10", + "ozone": "Ozon", + "nitrogenDioxide": "Nitrogendioxid", + "sulphurDioxide": "Sulphur dioxide", + "carbonMonoxide": "Carbonmonoxid" + }, + "pollen": { + "alder": "Alder", + "birch": "Birke", + "grass": "Græs", + "mugwort": "Mugwort", + "olive": "Oliven", + "ragweed": "Ragukrudt" + }, + "compact": { + "sixHourTrend": "AQI trend for de næste seks timer" + }, + "advanced": { + "observedAt": "Opdateret hos {time}", + "next24Hours": "Næste 24 timer", + "pollutants": "Koncentrationer af forurenende stoffer", + "pollen": "Koncentrationer af pollen", + "sevenDayForecast": "Maksimal 7-dages prognose", + "aqiValue": "AQI {value}", + "uvValue": "UV {value}", + "uvShort": "UV {value}", + "noForecast": "Ingen prognose tilgængelige data" + } + }, + "countdown": { + "name": "Nedtællinger", + "description": "Spor kommende begivenheder og tilbagevendende jubilæer.", + "option": { + "events": { + "label": "Begivenheder", + "description": "Tilføj og bestil op til 20 engangs- eller årlige nedtællinger. Datoer indtastes i den valgte tidszone." + }, + "showProgress": { + "label": "Vis fremskridt" + }, + "showSeconds": { + "label": "Vis sekunder", + "description": "Hold sekunder synlige for hver kommende begivenhed." + } + }, + "dateTimeEventList": { + "newEvent": "Ny begivenhed", + "add": "Tilføj begivenhed", + "remove": "Fjern {event}", + "reorder": "Genbestil {event}", + "eventLabel": "Begivenhed etiket", + "timezone": "Tidszone", + "unsupportedOption": "Uunderstøttet: {timeZone}", + "recurrence": "Gentagelser", + "recurrenceOption": { + "none": "Gentages ikke", + "yearly": "Hvert år" + }, + "target": "Dato og klokkeslæt", + "trackProgress": "Spor fremskridt fra en startdato", + "start": "Startdato og -tidspunkt for fremskridt", + "confirmDateTime": "Bekræft dato og tid", + "limit": "{count} af {maximum} begivenheder konfigureret" + }, + "empty": { + "title": "Ingen nedtællinger endnu", + "description": "Tilføj en begivenhed i widget muligheder for at begynde at tælle ned." + }, + "completed": "Fuldført", + "yearly": "Årligt", + "progress": "Begivenhed fremskridt", + "upcoming": "Kommende", + "completedEvents": "Afsluttede begivenheder", + "invalid": { + "title": "Nogle begivenheder kan ikke vises", + "description": "{count, plural, one {En begivenhed har en ugyldig dato eller uunderstøttet tidszone.} other {# begivenheder har en ugyldig dato eller uunderstøttet tidszone.}}", + "value": "Unavailable" + }, + "alert": { + "notifications": "Browser notifikationer", + "permissionDenied": "Notifikationer er blokeret i denne browser.", + "reached": "Nedtællingen har nået sit mål." + } + }, + "timer": { + "name": "Timer / Pomodoro", + "description": "Kører en simpel timer eller en konfigurerbar Pomodoro sekvens.", + "option": { + "mode": { + "label": "Tilstand", + "options": { + "timer": "Timer", + "pomodoro": "Pomodoro" + } + }, + "timerMinutes": { + "label": "Timer minutter" + }, + "focusMinutes": { + "label": "Fokusér minutter" + }, + "shortBreakMinutes": { + "label": "Kort pause minutter" + }, + "longBreakMinutes": { + "label": "Lang pause minutter" + }, + "sessionsBeforeLongBreak": { + "label": "Fokussessioner før en lang pause" + }, + "autoStartBreaks": { + "label": "Start pauser automatisk" + }, + "autoStartFocus": { + "label": "Start fokussessioner automatisk" + } + }, + "phase": { + "timer": "Timer", + "focus": "Fokus", + "shortBreak": "Kort pause", + "longBreak": "Lang pause" + }, + "action": { + "start": "Start", + "pause": "Pause", + "reset": "Reset" + }, + "attention": { + "timerComplete": "Timer complete", + "phaseReady": "{phase} klar" + }, + "progress": "Timer progress: {progress}%", + "compact": { + "completedFocus": "{count, plural, =0 {Ingen fokussessioner fuldført} one {# fokussession fuldført} other {# fokussessioner fuldført}}" + }, + "alert": { + "title": "Timer complete", + "completed": "{phase} fuldført." + }, + "advanced": { + "sequence": "Pomodoro sequence", + "focusSession": "Fokus {session}", + "settings": "Permanente indstillinger", + "settingsHint": "Brug widget-kontekstmenuen til at redigere disse indstillinger for tavlen.", + "localAlerts": "Lokale advarsler", + "notifications": "Browser notifikationer", + "sound": "Timer lyde", + "localAlertsHint": "Timerlyde er som standard aktiveret. Lyde og meddelelser gælder kun for denne widget i denne browser.", + "notificationsDenied": "Notifikationer er blokeret i denne browser." } }, "minecraftServerStatus": { "name": "Minecraft Serverstatus", "description": "Viser status for en Minecraft server", "option": { - "title": { - "label": "Titel" - }, "domain": { "label": "Serveradresse" }, @@ -1753,11 +2786,21 @@ "noStation": "Ingen station valgt", "option": { "baseUrl": { - "label": "" + "label": "", + "description": "Brugerdefinerede URL'er skal løses til en offentlig IP-adresse. Private og lokale værter afvises." }, "station": { - "label": "Station" + "label": "Station", + "placeholder": "Søg efter en station" } + }, + "error": { + "customSourceUnavailable": "Tidstavlen kilde er ikke tilgængelig. Tjek at dens URL løser til en offentlig IP-adresse.", + "stationSearch": "Kan ikke søge stationer. Tjek den brugerdefinerede URL og din board adgang." + }, + "warning": { + "stale": "Tidsplanen kunne ikke opdateres. Viser afgange sidst opdateret på {time}.", + "staleCompact": "Gamle data" } }, "notebook": { @@ -1789,6 +2832,9 @@ "directionRtl": "", "blockquote": "Citatblok", "horizontalLine": "Horisontal linje", + "details": "Slå sammenklappelig sektion til/fra", + "expandDetails": "Udvid sammenklappelig sektion", + "collapseDetails": "Fold sammenklappelig sektion", "bulletList": "Punktopstillet liste", "orderedList": "Sorteret liste", "checkList": "Tjekliste", @@ -1797,16 +2843,20 @@ "link": "Link", "unlink": "Fjern link", "image": "Integrer billede", - "addTable": "Tilføj tabel", + "insertTable": "Indsæt tabel", + "insertTableSize": "Indsæt {columns} × {rows} tabel", "deleteTable": "Slet tabel", "colorCell": "Farve Celle", - "mergeCell": "Slå cellefletning til/fra", + "mergeCells": "Flet celler", + "splitCell": "Opdel celle", "addColumnLeft": "Tilføj kolonne før", "addColumnRight": "Tilføj kolonne efter", "deleteColumn": "Slet kolonne", "addRowTop": "Tilføj række før", "addRowBelow": "Tilføj række efter", - "deleteRow": "Slet række" + "deleteRow": "Slet række", + "toggleHeaderRow": "Slå overskrift til og fra", + "toggleHeaderColumn": "Slå overskriftskolonne til/fra" }, "align": { "left": "Venstre", @@ -1817,8 +2867,6 @@ "clearColor": "Ryd farve", "source": "Kilde", "widthPlaceholder": "Værdi i % eller pixels", - "columns": "Kolonner", - "rows": "Rækker", "width": "Bredde", "height": "Højde" }, @@ -1830,7 +2878,9 @@ "discard": "Fortryd ændringer", "keepEditing": "Fortsæt redigering" } - } + }, + "saveFailed": "Kan ikke gemme note", + "documentStats": "{words, plural, one {# ord} other {# ord}} · {characters, plural, one {# tegn} other {# tegn}}" }, "anchorNote": { "name": "Anchor note", @@ -1839,9 +2889,6 @@ "noteId": { "label": "Note" }, - "showTitle": { - "label": "Vis titel" - }, "showUpdatedAt": { "label": "Vis senest opdateret" } @@ -1851,14 +2898,20 @@ "notFound": "Note ikke fundet", "noNotes": "Ingen noter fundet", "integrationRequired": "Vælg først en Anchorintegration", - "updatedAt": "Opdateret {date}", "untitled": "Unavngivet", - "edit": "Rediger", - "save": "Gem", - "cancel": "Annullér", "readOnlyViewer": "Du har læseadgang til denne note. Redigering er deaktiveret.", "saveForbidden": "Du har ikke adgang til at redigere denne note.", - "saveFailed": "Kunne ikke gemme denne note. Prøv igen." + "saveFailed": "Kunne ikke gemme denne note. Prøv igen.", + "createdAt": "Oprettet {date}", + "permission": { + "owner": "Ejer", + "editor": "Editor", + "viewer": "Fremviser" + }, + "status": { + "pinned": "Fastgjort", + "archived": "Arkiveret" + } }, "iframe": { "name": "indlejret dokument (iframe)", @@ -1917,6 +2970,25 @@ "clickable": { "label": "Klikbart" } + }, + "state": { + "on": "Til", + "off": "Fra", + "unavailable": "Unavailable", + "unknown": "Ukendt" + }, + "advanced": { + "entityId": "Enheds ID: {id}", + "lastChanged": "Ændret {date}", + "attribute": { + "unit": "Enhed", + "deviceClass": "Enhedsklasse", + "icon": "Ikon" + } + }, + "error": { + "loadFailed": "Enhed kan ikke indlæses", + "toggleFailed": "Kunne ikke opdatere enhed" } }, "smartHome-executeAutomation": { @@ -1932,11 +3004,31 @@ }, "spotlightAction": { "run": "Kør {name}" + }, + "advanced": { + "lastExecuted": "Sidst kørt på {time}", + "automationId": "Automatiserings-ID: {id}", + "ready": "Klar til at køre", + "noPermission": "Ingen tilladelse til at køre denne automatisering" + }, + "status": { + "running": "Kørende automatisering", + "success": "Automatisering fuldført" + }, + "error": { + "executeFailed": "Kan ikke køre automatisering" } }, "stockPrice": { "name": "Aktiepris", "description": "Viser den aktuelle aktiepris for en virksomhed", + "advanced": { + "currentPrice": "Nuværende pris", + "previousClose": "Foregående lukning", + "changePercentage": "Ændring (%)", + "minimum": "Mindste", + "maximum": "Maksimum" + }, "option": { "stock": { "label": "Aktiesymbol" @@ -2007,6 +3099,10 @@ "label": "1 Måned" } } + }, + "showDetails": { + "label": "Vis detaljer", + "description": "Vis navn, ændring og tidsinterval i den kompakte visning. Slå fra for kun symbolet og prisen." } } }, @@ -2034,6 +3130,13 @@ "showUnmonitored": { "label": "Vis uovervåget" } + }, + "advanced": { + "previousMonth": "Vis forrige måned", + "nextMonth": "Vis næste måned", + "eventCount": "{count, plural, one {# begivenhed} other {# begivenheder}}", + "loading": "Indlæser kalenderbegivenheder...", + "noEvents": "Ingen begivenheder i denne måned" } }, "weather": { @@ -2046,16 +3149,18 @@ "disableTemperatureDecimals": { "label": "Deaktiver temperaturdecimaler" }, + "animateIcons": { + "label": "Animér vejr-ikoner" + }, + "showHumidity": { + "label": "Vis fugtighed" + }, "showCurrentWindSpeed": { - "label": "Vis aktuel vindhastighed", - "description": "Kun på nuværende vejr" + "label": "Vis aktuel vindhastighed" }, "useImperialSpeed": { "label": "Brug mi/t til vindhastighed" }, - "location": { - "label": "Vejr lokation" - }, "showCity": { "label": "Vis by" }, @@ -2065,13 +3170,10 @@ "forecastDayCount": { "label": "Antal prognose dage", "description": "Når widget'en ikke er bred nok, vises færre dage" - }, - "dateFormat": { - "label": "Datoformat", - "description": "Hvordan datoen skal se ud" } }, "currentWindSpeed": "{currentWindSpeed} {unit}", + "disabled": "Vejrdata er utilgængelige, fordi udgående forbindelser er deaktiveret", "dailyForecast": { "sunrise": "Solopgang", "sunset": "Solnedgang", @@ -2094,6 +3196,47 @@ "thunderstorm": "Tordenvejr", "thunderstormWithHail": "Tordenvejr med hagl", "unknown": "Ukendt" + }, + "details": "Vis vejrdetaljer", + "detailsFor": "Vis vejroplysninger for {date}", + "advanced": { + "forecast": "7-dages prognose", + "hourlyForecast": "Næste 24 timer", + "day": "Dag", + "time": "Tid", + "conditions": "Betingelser", + "temperature": "Temperatur", + "feelsLike": "Føler sig som {temperature}", + "feelsLikeLabel": "Føler dig som", + "feelsLikeRange": "Føler sig som: {maximum} / {minimum}", + "highLow": "Høj {maximum} · lav {minimum}", + "observedAt": "Opdateret hos {time}", + "humidity": "Luftfugtighed", + "averageHumidity": "Gennemsnitlig luftfugtighed: {humidity}%", + "currentHumidity": "Aktuel fugtighed", + "wind": "Vind / vindstød ({unit})", + "currentWind": "Nuværende vind / vindstød", + "windValue": "{speed} / {gusts} {unit}", + "windDetail": "Maks. vind / vindstød: {speed} / {gusts} {unit}", + "nextHourPrecipitation": "Nedbør næste time", + "precipitationChance": "Nedbør chance", + "precipitationValue": "{probability}% · {amount} mm", + "precipitationDetail": "Nedbør: {probability}% · {amount} mm", + "todayUv": "Dagens maks. UV-indeks", + "uvIndex": "Maks. UV-indeks: {value}", + "daylight": "Dagslys: {duration}", + "hourlyTooltip": "Føler dig som {feelsLike}{temperatureUnit} · {amount} mm · {humidity}% luftfugtighed · {speed} {speedUnit} vind", + "hourlyTooltipWithoutHumidity": "Føler dig som {feelsLike}{temperatureUnit} · {amount} mm · {speed} {speedUnit} vind", + "detailLabel": { + "feelsLike": "Føler dig som", + "precipitation": "Nedbør", + "humidity": "Gennemsnitlig fugtighed", + "wind": "Maks. vind / vindstød", + "uv": "Maks. UV-indeks", + "daylight": "Daylight" + }, + "sun": "Solopgang / solnedgang", + "noForecast": "Ingen prognose tilgængelige data" } }, "indexerManager": { @@ -2106,8 +3249,15 @@ }, "title": "Indexer-manager", "testAll": "Test alle", + "status": { + "healthy": "Sund", + "unhealthy": "Usund", + "disabled": "Deaktiveret", + "unknown": "Sundhed utilgængelig" + }, "error": { - "internalServerError": "Kunne ikke hente indekserens status" + "internalServerError": "Kunne ikke hente indekserens status", + "testAll": "Indekseringstesten mislykkedes. Prøv igen." } }, "healthMonitoring": { @@ -2136,11 +3286,6 @@ "fileSystem": { "label": "Vis information om filsystemet" }, - "visibleStorageVolumes": { - "label": "", - "description": "", - "placeholder": "" - }, "defaultTab": { "label": "Standard fane" }, @@ -2154,7 +3299,7 @@ "popover": { "information": "Information", "processor": "Processor: {cpuModelName}", - "memory": "Memory: {memory}", + "memory": "Hukommelse: {memory}", "memoryAvailable": "Tilgængelig: {memoryAvailable} ({percent}%)", "version": "Version: {version}", "uptime": "Oppetid: {months} Måneder, {days} Dage, {hours} Timer, {minutes} Minutter", @@ -2163,17 +3308,27 @@ "minutes": "{count} minutter", "used": "Brugt", "available": "Tilgængelig", - "lastSeen": "Seneste statusopdatering: {lastSeen}" + "lastSeen": "Seneste statusopdatering: {lastSeen}", + "updatesAvailable": "{count, plural, one {# opdatering tilgængelig} other {# opdateringer tilgængelige}}", + "rebootRequired": "Genstart påkrævet", + "rebootNotRequired": "Ingen genstart påkrævet" + }, + "smartStatus": { + "attributesWithinThresholds": "SMART: attributter inden for tærskler", + "attributesFailed": "SMART: {attributes} mislykkedes", + "noCriticalWarning": "SMART: ingen advarsel rapporteret af SSD", + "criticalWarning": "SMART: kritisk advarsel rapporteret af SSD" + }, + "gauge": { + "cpuUsage": "CPU-forbrug", + "cpuTemperature": "CPU temperatur", + "memoryUsage": "Hukommelsesforbrug", + "gpuUsage": "{name} brug af GPU" }, - "memory": {}, "error": { "internalServerError": "Kunne ikke hente helbredsstatus" }, "cluster": { - "summary": { - "cpu": "CPU", - "memory": "RAM" - }, "resource": { "node": { "name": "Noder" @@ -2209,8 +3364,6 @@ "table": { "header": { "name": "Navn", - "cpu": "CPU", - "memory": "RAM", "node": "Node" } } @@ -2220,33 +3373,29 @@ "name": "Docker statistik", "description": "Statistik for dine containere (Denne widget kan kun tilføjes med administratorrettigheder)", "option": { - "columns": { - "label": "" + "endpointIds": { + "label": "Docker miljøer", + "description": "Lad være tom for at vise containere fra hvert Docker miljø", + "placeholder": "Alle Docker miljøer" }, - "enableRowSorting": { - "label": "Aktiver sortering" + "containerFilter": { + "label": "Containere til filtrering" + }, + "filterIsWhitelist": { + "label": "Filtrer som en hvidliste" }, "defaultSort": { - "label": "Kolonne brugt til sortering som standard", "option": { "name": "Navn", "state": "Tilstand", "cpuUsage": "CPU-forbrug", "memoryUsage": "Hukommelsesforbrug" } - }, - "descendingDefaultSort": { - "label": "Inverter sortering" - }, - "columnOrder": { - "label": "" - }, - "columnWidths": { - "label": "" } }, "error": { "internalServerError": "Kunne ikke hente containerstatistik", + "endpointsUnavailable": "Docker-endepunkter er utilgængelige", "layoutSaveTitle": "", "layoutSaveMessage": "" }, @@ -2255,7 +3404,6 @@ } }, "coolify": { - "name": "Coolify", "description": "Oversigt over din Coolify instans med servere og applikationer", "option": { "showServers": { @@ -2281,17 +3429,49 @@ "internalServerError": "Kunne ikke hente Coolify data" }, "server": { - "buildServer": "Byg" + "buildServer": "Byg", + "resourceCounts": "{applications, plural, one {# app} other {# apps}} / {services, plural, one {# service} other {# tjenester}}", + "reachability": "Reachability", + "usability": "Brugbarhed" + }, + "source": { + "url": "Kilde: {url}", + "unavailable": "{source}: unavailable" }, "instances": { "title": "Instanser" + }, + "action": { + "openResource": "Åbn {name}", + "openLogs": "Åbn {name} logs", + "showIp": "Vis IP-adresse", + "hideIp": "Skjul IP-adresse" + }, + "status": { + "running": "Kører", + "stopped": "Stoppet", + "exited": "Afsluttet", + "starting": "Starter", + "restarting": "Genstarter", + "unknown": "Ukendt", + "online": "Online", + "offline": "Offline", + "reachable": "Nødvendigt", + "unreachable": "Utilgængelig", + "usable": "Brugbare", + "unusable": "Ubrugelig" } }, "vpn": { "name": "", "description": "", "serviceUnavailable": "", - "option": {} + "status": { + "running": "Kører", + "notRunning": "Kører ikke", + "unavailable": "Unavailable", + "vpn": "VPN: {status}" + } }, "ups": { "name": "UPS", @@ -2318,14 +3498,19 @@ "runtime": "Driftstid", "load": "Belastning", "input": "Input", - "output": "Output" + "output": "Output", + "batteryVoltage": "Batteri spænding", + "power": "Effekt", + "temperature": "Temperatur", + "manufacturer": "Producent", + "model": "Model", + "serial": "Seriel" }, "error": { "internalServerError": "Kunne ikke hente UPS-data" } }, "tracearr": { - "name": "Tracearr", "description": "Forbedret overvågning af medieserver med detaljerede stream og omkodningsdata", "option": { "showStreams": { @@ -2413,10 +3598,7 @@ "label": "Begivenhed", "description": "Vis samlede forekomster af en specifik begivenhed", "placeholder": "Vælg en begivenhed", - "loading": "Indlæser begivenheder...", - "noEvents": "Ingen begivenheder fundet", - "none": "Ingen begivenhed", - "configureWebsiteFirst": "Vælg først et websted for at indlæse begivenheder" + "none": "Ingen begivenhed" }, "chartType": { "label": "Diagramtype", @@ -2447,26 +3629,21 @@ "eventNames": { "label": "Begivenheder", "description": "Vælg en eller flere begivenheder til diagrammet", - "placeholder": "Vælg begivenheder...", - "loading": "Indlæser begivenheder...", - "noEvents": "Ingen begivenheder fundet", - "configureWebsiteFirst": "Vælg først et websted for at indlæse begivenheder" + "placeholder": "Vælg begivenheder..." }, "topCount": { "label": "Elementer der skal vises", "description": "Antal topelementer der skal vises (maks 500)" + }, + "events": { + "loading": "Indlæser begivenheder...", + "noEvents": "Ingen begivenheder fundet", + "configureWebsiteFirst": "Vælg en hjemmeside først for at indlæse begivenheder" } }, "event": { - "occurrences": "begivenheder", "label": "begivenheder" }, - "topPages": { - "direct": "Direkte" - }, - "topReferrers": { - "direct": "Direkte" - }, "events": { "selectPrompt": "Vælg begivenheder til diagram" }, @@ -2475,6 +3652,9 @@ "noWebsite": "Intet websted konfigureret", "noData": "Ingen data tilgængelig", "internalServerError": "Kunne ikke hente Umami-data" + }, + "top": { + "direct": "Direkte" } }, "common": { @@ -2502,7 +3682,8 @@ }, "integration": { "noData": "Ingen integration fundet", - "description": "Klik på for at oprette en ny integration" + "description": "Klik på for at oprette en ny integration", + "manage": "Administrer integrationer" }, "app": { "noData": "Ingen app fundet", @@ -2513,7 +3694,61 @@ "noIntegration": "Ingen integration valgt", "noData": "Ingen tilgængelige integrationsdata" }, - "option": {} + "integrationDisconnected": "Ingen tilgængelige data, alle integrationer afbrudt", + "updatedAt": "Opdateret {date}", + "title": { + "label": "Titel" + }, + "openInNewTab": { + "label": "Åbn i nyt faneblad" + }, + "showTitle": { + "label": "Vis titel" + }, + "weatherLocation": { + "label": "Vejr lokation" + }, + "layout": { + "label": "Layout", + "option": { + "horizontal": "Horisontal", + "vertical": "Vertikal", + "grid": "Gitter" + } + }, + "select": { + "loading": "Indlæser...", + "loadError": "Kunne ikke indlæse indstillinger" + }, + "dateFormat": { + "label": "Datoformat", + "description": "Hvordan datoen skal se ud" + }, + "visibleStorageVolumes": { + "label": "Synlige lagermængder", + "description": "Kun tilgængelig, når hver valgt integration er OpenMediaVault eller Synology. Efterlad blank for at vise alle registrerede lagermængder.", + "placeholder": "Vælg lagermængder" + }, + "tableOptions": { + "columns": { + "label": "Kolonner der skal vises" + }, + "columnOrder": { + "label": "Kolonne rækkefølge" + }, + "columnWidths": { + "label": "Kolonne bredder" + }, + "enableRowSorting": { + "label": "Aktiver sortering" + }, + "defaultSort": { + "label": "Kolonne brugt til sortering som standard" + }, + "invertSorting": { + "label": "Inverter sortering" + } + } }, "video": { "name": "Video Stream", @@ -2572,6 +3807,7 @@ "transcoding": "", "paused": "", "remaining": "", + "seasonEpisode": "S{season} E{episode}", "metadata": { "title": "Statistik for nørder", "video": { @@ -2589,11 +3825,16 @@ "resolution": "Opløsning", "target": "Mål codec" } - } + }, + "unknownUser": "Ukendt bruger" + }, + "summary": { + "sessions": "{count, plural, one {# session} other {# sessioner}}", + "playing": "{count} spiller", + "transcoding": "{count} omkodning" } }, "paperlessNgx": { - "name": "Paperless-ngx", "description": "Oversigt over dit Paperless-ngx dokumentarkiv", "documentsTotal": "Samlede dokumenter", "documentsInbox": "Indbakke", @@ -2638,7 +3879,6 @@ } }, "patchmon": { - "name": "", "description": "", "title": "", "totalHosts": "", @@ -2705,36 +3945,30 @@ "description": "" }, "hostsNeedingUpdatesWarningAt": { - "label": "", - "description": "" + "label": "" }, "hostsNeedingUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "" }, "securityUpdatesThresholdMode": { "label": "", "description": "" }, "securityUpdatesWarningAt": { - "label": "", - "description": "" + "label": "" }, "securityUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "" }, "hostsWithSecurityUpdatesThresholdMode": { "label": "", "description": "" }, "hostsWithSecurityUpdatesWarningAt": { - "label": "", - "description": "" + "label": "" }, "hostsWithSecurityUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "" }, "upToDateHostsThresholdMode": { "label": "", @@ -2753,12 +3987,10 @@ "description": "" }, "totalOutdatedPackagesWarningAt": { - "label": "", - "description": "" + "label": "" }, "totalOutdatedPackagesCriticalAt": { - "label": "", - "description": "" + "label": "" }, "showOsDistribution": { "label": "", @@ -2789,6 +4021,14 @@ "bars": "", "donut": "" } + }, + "threshold": { + "warningAt": { + "description": "Indtast gul når værdien når denne tærskel" + }, + "criticalAt": { + "description": "Indtast rød når værdien når denne tærskel" + } } }, "error": { @@ -2796,12 +4036,12 @@ } }, "bazarr": { - "name": "", "description": "", "episodes": "", "movies": "", "providers": "", "status": "", + "announcements": "Meddelelser", "option": { "showMissingEpisodes": { "label": "", @@ -2848,7 +4088,8 @@ "users": "Brugere", "photos": "Billeder", "videos": "Videoer", - "storage": "Brugt lagerplads" + "storage": "Brugt lagerplads", + "albumLimit": "Største albummer (op til {count} vist)" }, "immich-albumCarousel": { "name": "Immich album", @@ -2872,24 +4113,21 @@ } }, "description": "Diasshow af billeder i dit Immich album", - "noPhotos": "Ingen fotos i dette album" + "noPhotos": "Ingen fotos i dette album", + "albumPhoto": "Albumfoto", + "actions": { + "previousPhoto": "Forrige billede", + "nextPhoto": "Næste billede", + "pauseSlideshow": "Pause slideshow", + "resumeSlideshow": "Genoptag diasshow", + "toggleSlideshow": "Pause eller genoptag diasshow", + "photo": "Foto {number}" + } }, "downloads": { "name": "Download Klient", "description": "Giver dig mulighed for at se og administrere dine downloads fra både Torrent og Usenet klienter.", "option": { - "columns": { - "label": "Kolonner der skal vises" - }, - "enableRowSorting": { - "label": "Aktiver elementsortering" - }, - "defaultSort": { - "label": "Kolonne brugt til sortering som standard" - }, - "descendingDefaultSort": { - "label": "Invertér sortering" - }, "showCompletedUsenet": { "label": "Vis usenet poster markeret som færdige" }, @@ -2914,12 +4152,6 @@ "limitPerIntegration": { "label": "Begræns elementer pr. integration", "description": "Dette vil begrænse antallet af elementer vist pr. integration, ikke globalt" - }, - "columnOrder": { - "label": "" - }, - "columnWidths": { - "label": "" } }, "errors": { @@ -2951,7 +4183,7 @@ }, "id": { "columnTitle": "Id", - "detailsTitle": "" + "detailsTitle": "Id" }, "integration": { "columnTitle": "Integration" @@ -3080,6 +4312,10 @@ "mediaRequests-requestList": { "name": "Medie Forespørgsler Liste", "description": "Se en liste over alle medieforespørgsler fra din Overseerr eller Jellyseerr instans", + "empty": { + "title": "Ingen medieforespørgsler endnu", + "description": "Søg efter en film eller vis for at starte en anmodning." + }, "option": { "linksTargetNewTab": { "label": "Åbn links i ny fane" @@ -3113,12 +4349,16 @@ "failed": "Mislykket", "completed": "Fuldført" }, + "unknown": "Ukendt", "toBeDetermined": "TBD" }, "mediaRequests-requestStats": { "name": "Statistik Over Medieforespørgsler", "description": "Statistik over dine medieanmodninger", - "option": {}, + "empty": { + "title": "Ingen forespørgselsaktivitet endnu", + "description": "Statistik vises efter den første medieforespørgsel." + }, "titles": { "stats": { "main": "Mediestatistik", @@ -3128,8 +4368,7 @@ "declined": "Allerede afvist", "available": "Allerede Tilgængelig", "tv": "TV-anmodninger", - "movie": "Film anmodninger", - "total": "Total" + "movie": "Film anmodninger" }, "users": { "main": "Topbrugere", @@ -3155,7 +4394,6 @@ }, "currentIndex": "{start}-{end} af {total}", "healthCheck": { - "title": "Sundhedstjek", "queued": "I kø", "status": { "healthy": "Sund", @@ -3164,41 +4402,36 @@ }, "panel": { "statistics": { - "empty": "Tom", - "transcodes": "Transkoder", - "transcodesCount": "Transkodninger", - "healthChecksCount": "Sundhedstjek", "filesCount": "Filer", "savedSpace": "Gemt plads", - "healthChecks": "Sundhedstjek", "videoCodecs": "Kodeks", "videoContainers": "Containere", "videoResolutions": "Opløsninger" }, "workers": { - "empty": "Tom", "table": { - "file": "Fil", "eta": "ETA", - "progress": "Fremskridt", - "transcode": "Transkod", - "healthCheck": "Sundhedstjek" + "progress": "Fremskridt" } }, "queue": { - "empty": "Tom", "table": { - "file": "Fil", - "size": "Størrelse", - "transcode": "Transkod", - "healthCheck": "Sundhedstjek" + "size": "Størrelse" } + }, + "common": { + "empty": "Tom", + "file": "Fil", + "healthCheck": "Sundhedstjek", + "transcode": "Transkod", + "transcodes": "Transkodninger", + "healthChecks": "Sundhedstjek" } } }, "mediaMissing": { "name": "", - "description": "", + "description": "Viser manglende og kø film, episoder og bøger fra {radarr}, {sonarr} og {bindery}", "option": { "showMissing": { "label": "" @@ -3216,7 +4449,8 @@ }, "type": { "movie": "", - "episode": "" + "episode": "", + "book": "Bog" }, "empty": { "missing": "", @@ -3247,6 +4481,13 @@ "showPosterImage": { "label": "Vis poster billede" } + }, + "error": { + "allFeedsFailed": "Kan ikke indlæse RSS-feeds. Tjek feeds og prøv igen." + }, + "warning": { + "partial": "{count, plural, one {# RSS-feed kunne ikke indlæses} other {# RSS-feeds kunne ikke indlæses}}", + "stale": "RSS-feeds kunne ikke opdateres. Viser tidligere indlæste poster." } }, "releases": { @@ -3322,17 +4563,8 @@ "label": "Regulært Udtryk" } }, - "edit": { - "label": "Rediger" - }, "editForm": { - "title": "Rediger Repository", - "cancel": { - "label": "Annuller" - }, - "confirm": { - "label": "Bekræft" - } + "title": "Rediger Repository" }, "importForm": { "title": "Importer fra Docker" @@ -3349,8 +4581,7 @@ "label": "", "token": "", "configured": "", - "notConfigured": "", - "save": "" + "notConfigured": "" } } }, @@ -3377,17 +4608,32 @@ "noProviderResponse": "Intet svar fra udbyder", "unexpected": "" } - } + }, + "expandDetails": "Vis detaljer for {name}", + "collapseDetails": "Skjul detaljer for {name}" }, "networkControllerSummary": { - "option": {}, - "card": { - "vpn": { - "countConnected": "{count} tilsluttet" + "advanced": { + "updated": "Opdateret", + "metric": { + "latency": "Latens", + "ping": "Ping", + "uptime": "Oppetid", + "users": "Brugere", + "guests": "Gæster" } }, + "card": { + "vpn": { + "countConnected": "{count, plural, one {# forbundet} other {# forbundet}}", + "label": "VPN" + }, + "wan": "WAN", + "web": "Web", + "wifi": "WiFi", + "lan": "LAN" + }, "error": { - "integrationsDisconnected": "Ingen tilgængelige data, alle integrationer afbrudt", "unknownContentOption": "Ukendt indhold indstilling for netværkscontroller resumé widget: " }, "name": "Netværkskontroller Oversigt", @@ -3424,7 +4670,6 @@ } }, "error": { - "integrationsDisconnected": "Ingen tilgængelige data, alle integrationer afbrudt", "unknownContentOption": "Ukendt indhold indstilling for netværksstatuswidget: " }, "name": "Status for netværk", @@ -3454,7 +4699,6 @@ "versiontitle": "Versioner", "cputitle": "CPU-forbrug", "memorytitle": "Hukommelsesforbrug", - "cpu": "CPU", "memory": "Hukommelse", "interfaces": { "name": "navn", @@ -3462,6 +4706,16 @@ "recv": "Modtaget", "title": "Netværksgrænseflader" } + }, + "empty": { + "noInterfaces": "Ingen netværksgrænsefladedata endnu" + }, + "versionUnknown": "Ukendt version", + "metricAccessible": "{metric}: {value}%, {status}", + "status": { + "normal": "Normal", + "warning": "Advarsel", + "critical": "Kritisk" } }, "notifications": { @@ -3471,8 +4725,21 @@ "option": { "hideLogos": { "label": "" + }, + "messageFormat": { + "label": "Besked format", + "option": { + "auto": "Automatisk", + "plain": "Almindelig tekst", + "markdown": "Markdown", + "html": "HTML" + } } - } + }, + "openService": "Åbn notifikationstjeneste", + "deleteNotification": "Slet notifikation fra Gotify", + "deleteFailed": "Kunne ikke slette notifikation", + "deleteFailedMessage": "Meddelelsen kunne ikke slettes. Prøv venligst igen." }, "speedtestTracker": { "name": "Speedtest Tracker", @@ -3514,7 +4781,6 @@ } }, "uptimeKuma": { - "name": "Uptime Kuma", "description": "Overvåg oppetidsstatistik fra din Uptime Kuma-statusside", "option": { "showAverageUptime": { @@ -3551,10 +4817,14 @@ }, "error": { "internalServerError": "" + }, + "status": { + "up": "Total op", + "down": "Download hastighed", + "paused": "På pause" } }, "traefik": { - "name": "", "description": "", "option": { "showTcp": { @@ -3575,7 +4845,6 @@ }, "resource": { "routers": "", - "services": "", "middlewares": "" }, "status": { @@ -3585,7 +4854,20 @@ }, "error": { "internalServerError": "" - } + }, + "resourceType": { + "router": "Router", + "service": "Tjeneste", + "middleware": "Middleware" + }, + "resourceStatus": { + "enabled": "Aktiveret", + "disabled": "Deaktiveret", + "warning": "Advarsel", + "error": "Fejl", + "unknown": "Ukendt" + }, + "failedEndpoint": "Mislykkedes: {endpoint}" }, "audioStats": { "name": "", @@ -3651,9 +4933,7 @@ "label": "Synlige diagrammer", "description": "Vælg de diagrammer, du ønsker at være synlige.", "option": { - "cpu": "CPU", "memory": "Hukommelse", - "gpu": "GPU", "network": "Netværk" } }, @@ -3668,12 +4948,11 @@ } }, "card": { - "cpu": "CPU", "memory": "MEM", - "gpu": "GPU", "network": "NET", "up": "OP", - "down": "NED" + "down": "NED", + "memoryTooltip": "{used} / {available} ({percent}%)" } }, "systemDisks": { @@ -3699,151 +4978,88 @@ }, "showBackgroundBar": { "label": "Vis forbrugslinje i baggrunden" - }, - "visibleStorageVolumes": { - "label": "", - "description": "", - "placeholder": "" } }, "status": { - "unhealthy": "Usund" + "unhealthy": "Usund", + "smart": "SMART", + "free": "{percentage}% fri" + } + }, + "customApi": { + "name": "Tilpasset widget", + "description": "Render en konfigureret brugerdefineret JSX definition.", + "customJsx": { + "noTemplate": "Ingen JSX skabelon er konfigureret.", + "templateWarnings": "{count} skabelon advarsler:", + "requestIdRequired": "Denne netværkskontrol kræver en navngiven requestId.", + "unsavedPreview": "Kør den indledende anmodning test i editoren før test navngivne anmodninger.", + "invalidParams": "Forespørgselsparametrene er ugyldige.", + "loading": "Indlæser anmodning...", + "loadRequest": "Indlæs anmodning", + "requestFailed": "Anmodningen mislykkedes.", + "retry": "Forsøg igen", + "actionCompleted": "Handling fuldført.", + "actionSimulated": "Handling simuleret; ingen anmodning blev sendt.", + "actionsDisabledEditMode": "Handlinger er deaktiveret mens tavlen er i redigeringstilstand.", + "widgetItemUnavailable": "Denne widget element er ikke tilgængelig.", + "toggle": "Skift", + "copied": "Kopieret", + "confirmDelete": "Bekræft denne destruktive handling." + }, + "option": { + "definitionId": { + "label": "Tilpasset widget" + }, + "refreshInterval": { + "label": "", + "description": "" + } + }, + "noDefinition": "", + "definitionNotFound": "Brugerdefineret widget utilgængelig", + "migrationRequired": "Denne gamle brugerdefinerede widget er bevaret, men det skal migreres til Custom JSX v2 fra Administrer brugerdefinerede widgets, før det kan køre.", + "manageMigration": "Åbn Administrer brugerdefinerede widgets", + "contactAdmin": "Kontakt en administrator.", + "configurationNeedsRepair": "Denne widget's indstillinger er ændret. Rediger widget for at reparere dens konfiguration.", + "removeFromBoard": "Fjern fra tavlen", + "editModePending": "Gem tavlen for at indlæse denne widget.", + "picker": { + "group": "Brugerdefinerede JSX widgets", + "empty": "Ingen brugerdefinerede widgets fundet", + "preview": "Eksempelvisning", + "sources": "{count, plural, one {# kilde} other {# kilder}}", + "requests": "{count, plural, one {# anmodning} other {# anmodninger}}", + "migrationRequired": "Migration påkrævet", + "migrationDescription": "Denne placerede v1 widget kan ikke køre endnu. Kopiér dens redigerede prompt til en LLM, og indsæt derefter enkelt JSON respons i Homarr.", + "manageMigration": "Åbn Administrer brugerdefinerede widgets", + "contactAdmin": "Kontakt en administrator." + }, + "configuration": { + "needsAttention": "Konfiguration kræver opmærksomhed: {message}", + "advancedOptions": "Avancerede indstillinger", + "invalidJson": "Ugyldig JSON" } }, "beszelSystemTable": { "name": "Beszel-systemer (tabel)", "description": "Tabelvisning af alle Beszel-overvågede systemer med sorterbare kolonner og statusindikatorer", "option": { - "statusFilter": { - "label": "Statusfilter" - }, "sortBy": { "label": "Sorter efter" }, "sortDirection": { "label": "Sorteringsretning" - }, - "showCpu": { - "label": "Vis CPU" - }, - "showMemory": { - "label": "Vis hukommelse" - }, - "showDisk": { - "label": "Vis disk" - }, - "showGpu": { - "label": "Vis GPU" - }, - "showLoadAvg": { - "label": "Vis belastningsgennemsnit" - }, - "showNet": { - "label": "Vis netværk" - }, - "showTemp": { - "label": "Vis temperatur" - }, - "showBattery": { - "label": "Vis batteri" - }, - "showServices": { - "label": "Vis tjenester" - }, - "showUptime": { - "label": "Vis oppetid" - }, - "showAgent": { - "label": "Vis agentversion" - }, - "columnOrder": { - "label": "" - }, - "columnWidths": { - "label": "" } }, - "noRecords": "Ingen systemer fundet", "error": { - "internalServerError": "", "layoutSaveTitle": "", "layoutSaveMessage": "" - }, - "column": { - "system": "System", - "cpu": "CPU", - "memory": "Hukommelse", - "disk": "Disk", - "gpu": "GPU", - "loadAvg": "Belastningsgennemsnit", - "net": "Net", - "temp": "Temp", - "battery": "Bat", - "services": "Tjenester", - "uptime": "Oppetid", - "agent": "Agent" } }, "beszelSystemGrid": { "name": "Beszel-systemer (gitter)", - "description": "Kortgittervisning af alle Beszel-overvågede systemer med realtidsmålinger", - "option": { - "statusFilter": { - "label": "Statusfilter" - }, - "showCpu": { - "label": "Vis CPU" - }, - "showMemory": { - "label": "Vis hukommelse" - }, - "showDisk": { - "label": "Vis disk" - }, - "showGpu": { - "label": "Vis GPU" - }, - "showLoadAvg": { - "label": "Vis belastningsgennemsnit" - }, - "showNet": { - "label": "Vis netværk" - }, - "showTemp": { - "label": "Vis temperatur" - }, - "showBattery": { - "label": "Vis batteri" - }, - "showServices": { - "label": "Vis tjenester" - }, - "showUptime": { - "label": "Vis oppetid" - }, - "showAgent": { - "label": "Vis agentversion" - } - }, - "error": { - "internalServerError": "" - }, - "empty": { - "noSystems": "" - }, - "metric": { - "cpu": "CPU", - "memory": "Hukommelse", - "disk": "Disk", - "gpu": "GPU", - "loadAvg": "Belastningsgennemsnit", - "net": "Net", - "temp": "Temp", - "battery": "Bat", - "services": "Tjenester", - "uptime": "Oppetid", - "agent": "Agent" - } + "description": "Kortgittervisning af alle Beszel-overvågede systemer med realtidsmålinger" }, "beszelAlerts": { "name": "Beszel-advarsler", @@ -3857,11 +5073,12 @@ } }, "empty": "Ingen advarsler konfigureret", - "error": { - "internalServerError": "" - }, "history": "Historik", "resolved": "Løst", + "alertDescription": { + "statusDuration": "Ned til {minutes} min", + "threshold": "Overskrider {value} over {minutes} min" + }, "status": { "triggered": "Udløst", "ok": "OK" @@ -3908,16 +5125,16 @@ "noSystems": "" }, "error": { - "internalServerError": "", "liveConnectionFailed": "", "switchToHistorical": "", - "systemNotFound": "" + "systemNotFound": "", + "selectionSaveTitle": "Valg af valg kan ikke gemmes", + "selectionSaveMessage": "Dit system eller tidsperiode valg kunne ikke gemmes. Prøv venligst igen." }, "chart": { "cpu": { "title": "CPU-forbrug", - "subtitle": "Gennemsnitlig systemdækkende CPU-udnyttelse", - "series": "CPU" + "subtitle": "Gennemsnitlig systemdækkende CPU-udnyttelse" }, "memory": { "title": "Hukommelsesforbrug", @@ -3959,39 +5176,550 @@ "title": "Docker netværks-I/O", "subtitle": "Netværkstrafik af Docker-containere" } + }, + "period": { + "live": "Levende", + "oneHour": "1t", + "twelveHours": "12t", + "oneDay": "24t", + "oneWeek": "1w", + "thirtyDays": "30d" } }, - "wud": { - "name": "Hvad Er Opad Docker", - "description": "Vis hvor mange overvågede containere der er tilgængelige opdateringer.", - "title": "Hvad Er Opad Docker", - "monitored": "Overvåget", - "updatesAvailable": "{count, plural, one {# opdatering tilgængelig} other {# opdateringer tilgængelige}}", - "updateAvailable": "Opdatering tilgængelig", - "openReleaseNotes": "Åbn udgivelsesnoter", + "assistant": { + "name": "Assistent", + "description": "Har en komplet assistent samtale direkte på dit bord.", + "unavailable": { + "title": "Assistent utilgængelig", + "description": "Log ind og bed en administrator om at konfigurere assistenten fra ledelsespanelet." + }, + "compact": { + "title": "Assistent", + "description": "Ændr størrelsen på denne widget for at chatte her, eller åbn den fulde samtale.", + "open": "Åbn assistent", + "openTitle": "Assistent åben i sidepanel", + "openDescription": "Samtalen forbliver på en aktiv overflade.", + "returnToWidget": "Returner samtalen til denne widget", + "otherWidgetTitle": "Assistent aktiv i en anden widget", + "otherWidgetDescription": "Kun én samtaleoverflade forbliver aktiv ad gangen.", + "useHere": "Brug assistenten i denne kontrol" + } + }, + "beszel": { + "error": { + "internalServerError": "Kan ikke oprette forbindelse til Beszel. Tjek dine integrationsindstillinger." + }, + "empty": { + "noSystems": "Ingen systemer fundet" + }, + "options": { + "statusFilter": { + "label": "Status filter" + }, + "showCpu": { + "label": "Vis CPU" + }, + "showMemory": { + "label": "Vis hukommelse" + }, + "showDisk": { + "label": "Vis disk" + }, + "showGpu": { + "label": "Vis GPU" + }, + "showLoadAvg": { + "label": "Vis indlæsningsgennemsnit" + }, + "showNet": { + "label": "Vis netværk" + }, + "showTemp": { + "label": "Vis temperatur" + }, + "showBattery": { + "label": "Vis batteri" + }, + "showServices": { + "label": "Vis services" + }, + "showUptime": { + "label": "Vis oppetid" + }, + "showAgent": { + "label": "Vis agent version" + } + }, + "metric": { + "system": "System", + "source": "Integration", + "hostname": "Værtsnavn", + "cpuModel": "CPU model", + "cores": "Kerner", + "memoryTotal": "Hukommelse total", + "memory": "Hukommelse", + "disk": "Disk", + "loadAvg": "Indlæs Gns.", + "net": "Netto", + "temp": "Temp", + "battery": "Flagermus", + "uptime": "Oppetid", + "agent": "Agent" + } + }, + "llamacpp": { + "name": "llama.cpp", + "description": "Vis sundhed, indlæst model og generationshastighed på din lokale llama.cpp server.", + "title": "llama.cpp", + "status": { + "unhealthy": "Usund ({status})" + }, + "idle": "Inaktiv", + "speedTooltip": { + "current": "Nuværende generationshastighed", + "average": "Gennemsnitlig generationshastighed siden opstart", + "request": "Gennemsnitlig hastighed siden denne anmodning er startet" + }, + "busy": "{count, plural, one {# anmodning kører} other {# anmodninger kører}}", + "modelInfo": { + "context": "Kontekst", + "size": "Fil størrelse", + "parameters": "Parametre", + "model": "Model", + "quantization": "Kvantisering" + }, + "stats": { + "tokensProcessed": "Tokens behandlet", + "contextUsage": "Brug af kontekst / KV", + "cacheHitRate": "Spørg cache hit rate", + "tokensGenerated": "Tokens genereret" + }, + "error": { + "unreachable": "llama-server er ikke tilgængelig" + }, + "unit": { + "speed": "{value} t/s", + "parameters": "{value}B", + "none": "—", + "speedShort": "t/s" + }, "option": { "showTitle": { "label": "Vis titel" }, - "showRing": { - "label": "Vis opdateringsring" + "showModelInfo": { + "label": "Vis modelinfo" }, - "layout": { - "label": "Layout", + "showContextUsage": { + "label": "Vis kontekstbrug" + }, + "showCacheHitRate": { + "label": "Vis cache hit rate" + }, + "showSpeedStats": { + "label": "Vis hastighedsstatistik" + }, + "showRequests": { + "label": "Vis forespørgselsindlæsning" + }, + "showTokenStats": { + "label": "Vis token token token" + }, + "showSpeculative": { + "label": "Vis spekulativ afkodning" + } + }, + "advanced": { + "promptSpeed": "Spørg hastighed", + "avgSpeed": "Gns. generation", + "requests": "Forespørgsler", + "deferred": "Udskudt", + "slots": "{processing}/{total} slots optaget", + "speculative": "Spekulativ afkodning", + "avgPrompt": "Gns. prompt", + "specDrafts": "Spec. kladder", + "specAccepted": "Spec. accepterede tokens", + "specDraftTokens": "Spec. udkast til tokens" + } + }, + "stats": { + "name": "Statistikker", + "description": "Kombiner statistikker fra dine integrationer i en konfigurerbar widget.", + "configure": "Konfigurér målinger", + "refresh": "Opdater statistik", + "empty": "Åbn widget-indstillinger, vælg integrationer, og tilføj derefter målinger.", + "editorHelp": "Tilføj målinger fra de valgte integrationer til denne widget. Ændringer gemmes med dit betjeningspanel.", + "source": "Integration", + "metric": "Metrisk", + "noMetrics": "Ingen statistik tilgængelig for denne integration", + "add": "Tilføj metrisk", + "label": "Tilpasset etiket", + "hidden": "Skjult", + "compact": "Kompakte numre", + "moveUp": "Flyt op", + "moveDown": "Flyt ned", + "remove": "Fjern metrisk", + "loading": "Indlæser…", + "unavailable": "Unavailable", + "refreshFailed": "Opdatering mislykkedes — viser gemte data", + "stale": "Gemte data — opdater for at opdatere", + "table": { + "value": "Værdi", + "status": "Status" + }, + "option": { + "table": { + "label": "Tabel visning" + }, + "rows": { + "label": "Kompakte rækker" + }, + "showIcon": { + "label": "Vis kildeikon" + }, + "spacing": { + "label": "Afstand", "option": { - "horizontal": { - "label": "Horisontal" + "xs": { + "label": "Kompakt" }, - "vertical": { - "label": "Vertikal" + "sm": { + "label": "Behageligt" + }, + "md": { + "label": "Rummelig" } } }, - "showUpdateList": { - "label": "Vis liste over container-opdatering", - "description": "Lister hver overvåget beholder, der har en billedopdatering tilgængelig" + "entries": { + "label": "Metrik" + }, + "plain": { + "label": "Fjern kort baggrunde" } - } + }, + "fetchFailed": "Kan ikke hente statistik", + "viewOptions": "Tilpas denne visning", + "moreMetrics": "{count} mere i avanceret visning", + "localHelp": "Layout, formatering og synlighed gælder kun for denne visning. Delte tavleindstillinger forbliver de samme.", + "plain": "Fjern kort baggrunde", + "resetView": "Nulstil visning", + "allHidden": "Alle målinger er skjult i denne visning. Brug Tilpas denne visning for at gendanne dem." + }, + "wazuh": { + "target": { + "api": "Wazuh server API", + "indexer": "Wazuh indeksering", + "wazuh": "Wazuh" + }, + "severity": { + "low": "Lav", + "medium": "Medium", + "high": "Høj", + "critical": "Kritisk" + }, + "error": { + "unauthorized": { + "title": "{target} afviste legitimationsoplysningerne", + "description": "Kontroller brugernavn og adgangskode gemt på integrationen af Wazuh. Serveren API (port 55000) og indekseringen (port 9200) bruger separate brugere." + }, + "certificate": { + "title": "{target} certifikat er ikke betroet", + "description": "Wazuh bruger som standard et selvsigneret certifikat. Kør \"Test connection\" på integrationen og stol på certifikatet, eller tilføj din CA under Indstillinger → Certifikater." + }, + "unreachable": { + "title": "Kan ikke nå {target}", + "description": "Værten nægtede eller droppede forbindelsen. Tjek URL, port og firewall. Indekseringen lytter kun på localhost i en standard alt-i-en installation." + }, + "timeout": { + "title": "{target} timeout", + "description": "Intet svar inden for 15 sekunder. Tjenesten kan være overbelastet eller adressen kan være forkert." + }, + "status": { + "title": "{target} returnerede en fejl", + "description": "Anmodningen mislykkedes med HTTP-status {status}." + }, + "invalidResponse": { + "title": "Uventet svar fra {target}", + "description": "Kontroller, at URL peger på Wazuh server API eller indeksering og ikke på instrumentbrættet." + }, + "indexerRequired": { + "title": "Wazuh indekseringsoplysninger påkrævet", + "description": "Advarsler, sårbarheder og filintegritet begivenheder læses fra Wazuh indexer. Tilføj en indexer URL, brugernavn og adgangskode til integrationen." + }, + "unknown": { + "title": "Kunne ikke indlæse data fra {target}", + "description": "Tjek Homarr logfilerne for detaljer." + } + }, + "range": { + "1h": "1t", + "24h": "24t", + "7d": "7d", + "30d": "30d" + }, + "levelTooltip": "Regel niveau {level} ({severity})" + }, + "wazuhAgents": { + "name": "Wazuh agenser", + "description": "Sorterbar liste over Wazuh agenter med status, OS, version og last keepalive", + "option": { + "statusFilter": { + "label": "Vis agenter" + }, + "sortBy": { + "label": "Sorter efter" + }, + "showVersion": { + "label": "Vis Wazuh versionskolonne" + }, + "showGroups": { + "label": "Vis gruppe kolonne" + } + }, + "title": "Agenter", + "total": "{count} agenser", + "status": { + "active": "Aktiv", + "disconnected": "Afbrudt", + "neverConnected": "Aldrig tilsluttet", + "pending": "Afventende" + }, + "statusLabel": { + "active": "Aktiv", + "disconnected": "Afbrudt", + "never_connected": "Aldrig tilsluttet", + "pending": "Afventende", + "unknown": "Ukendt" + }, + "live": "Levende", + "snapshot": "Snapshot {age} gammel", + "snapshotHint": "Læs fra Wazuh dashboard agent snapshot (wazuh-monitoring) taget på {time}. Tilføj server API legitimationsoplysninger for live data.", + "staleSnapshot": "Agent snapshot fra {time} er forældet. Tjek at Wazuh dashboard overvågning job kører, eller tilføj server API legitimationsoplysninger.", + "noDisconnected": "Alle agenter er forbundet", + "empty": "Ingen agenter matcher dette filter", + "column": { + "status": "Status", + "name": "Jobnavn", + "ip": "IP", + "os": "OS", + "version": "Version", + "lastKeepAlive": "Holde", + "groups": "Grupper" + }, + "outdated": "Ældre end den nyeste agent version ({version})" + }, + "wazuhAlerts": { + "name": "Wazuh advarer feed", + "description": "Seneste Wazuh advarsler med niveau, MITRE ATT & CK teknikker, agent og kilde IP", + "option": { + "minLevel": { + "label": "Mindste regelniveau", + "description": "Wazuh niveauer: 0-6 lav, 7-11 medium, 12-14 høj, 15+ kritisk" + }, + "hours": { + "label": "Tidsvindue (timer)" + }, + "limit": { + "label": "Antal indberetninger" + }, + "showMitre": { + "label": "Show MITRE ATT&CK techniques" + }, + "showAgent": { + "label": "Vis agent" + }, + "showSourceIp": { + "label": "Vis kilde- IP" + }, + "showRuleId": { + "label": "Vis regel ID" + } + }, + "title": "Advarsler · niveau {level}+ · {hours}h", + "empty": "Ingen advarsler på dette niveau. Alt roligt.", + "rule": "Regel {id}", + "openInDashboard": "Åbn denne advarsel i Wazuh dashboard" + }, + "wazuhSummary": { + "name": "Wazuh advarselssværhedsgrad", + "description": "Advarsel sværhedsgrad opdeling med en tendens mod den foregående periode", + "option": { + "range": { + "label": "Tidsinterval" + }, + "showTrend": { + "label": "Vis trend mod forrige periode" + }, + "showFooter": { + "label": "Vis sidefod" + } + }, + "title": "Advarsel sværhedsgrad · {range}", + "alerts": "advarsler", + "none": "Ingen advarsler", + "trend": { + "new": "ny", + "tooltip": "Forrige periode: {previous}" + }, + "previous": "Forrige {range}: {count}", + "maxLevel": "Maks niveau {level}", + "health": "Indekserings sundhed: {status}", + "manager": "Direktør {version}" + }, + "wazuhTimeline": { + "name": "Wazuh alerts timeline", + "description": "Stablet diagram over Wazuh advarsler over tid af sværhedsgrad", + "option": { + "range": { + "label": "Tidsinterval" + }, + "interval": { + "label": "Interval" + }, + "chartType": { + "label": "Diagram type" + }, + "yScale": { + "label": "Y- akseskala", + "description": "Kvadratrod holder høje og kritiske alarmer synlige ved siden af tusindvis af lave alarmer" + }, + "minLevel": { + "label": "Mindste regelniveau" + }, + "showLegend": { + "label": "Vis forklaring med totaler" + } + }, + "title": "Advarsler tidslinje · {range}", + "total": "{count} advarsler", + "interval": "pr. {interval}" + }, + "wazuhTopList": { + "name": "Topliste over Wazuh", + "description": "Top regler, agenter, kilde-IP'er eller MITRE ATT&CK taktik og teknikker ved tælling af alarm", + "option": { + "kind": { + "label": "Rang" + }, + "range": { + "label": "Tidsinterval" + }, + "limit": { + "label": "Antal poster" + }, + "minLevel": { + "label": "Mindste regelniveau" + }, + "showBars": { + "label": "Vis bjælker" + } + }, + "title": { + "rules": "Øverste regler · {range}", + "agents": "Top agenter · {range}", + "sourceIps": "Top kilde-IP'er · {range}", + "mitreTactics": "MITRE taktik · {range}", + "mitreTechniques": "MITRE techniques · {range}" + }, + "empty": { + "rules": "Ingen advarsler i denne periode", + "agents": "Ingen advarsler i denne periode", + "sourceIps": "Ingen indberetninger med kilde- IP i denne periode", + "mitreTactics": "Ingen indberetninger kortlagt til MITRE ATT&CK i denne periode", + "mitreTechniques": "Ingen indberetninger kortlagt til MITRE ATT&CK i denne periode" + }, + "totalTooltip": "{count} matchende advarsler", + "private": "LAN", + "public": "Offentlig", + "agents": "Set på {count} agenser", + "others": "{count} flere advarsler i andre poster" + }, + "wazuhVulnerabilities": { + "name": "Wazuh sårbarheder", + "description": "Sårbarhed tæller, top CVE'er og de mest sårbare agenter", + "option": { + "cveOrder": { + "label": "Rang CVE'er af" + }, + "minSeverity": { + "label": "CVE sværhedsgrad" + }, + "cveLimit": { + "label": "Antal CVE'er" + }, + "agentLimit": { + "label": "Antal agenter" + }, + "showAgents": { + "label": "Vis mest sårbare agenter" + } + }, + "title": "Sårbarheder", + "topCves": "Top CVE'er", + "score": "Score", + "agentsShort": "Agenter", + "topAgents": "Mest sårbare agenser", + "criticalHigh": "Crit / Høj", + "totalTooltip": "{count} fund på {agents} midler", + "affected": "{count} agenser", + "empty": "Ingen sårbarheder fundet", + "distribution": "Fordeling af sværhedsgrad. {unscored} resultater uden en score vises ikke.", + "worst": "Værst: {id} ({score}) på {agents} agenter" + }, + "wazuhFim": { + "name": "Wazuh fil integritet", + "description": "Nylige fil integritet overvågning (syscheck) begivenheder", + "option": { + "range": { + "label": "Tidsinterval" + }, + "event": { + "label": "Begivenheder" + }, + "limit": { + "label": "Antal hændelser" + }, + "includeRegistry": { + "label": "Inkluder Windows registreringsdatabasen begivenheder" + } + }, + "title": "Filintegritet · {range}", + "event": { + "added": "Dato tilføjet", + "modified": "Ændret", + "deleted": "Slettet", + "unknown": "Ændret" + }, + "empty": "Ingen fil integritet begivenheder i denne periode", + "user": "af {user}", + "registry": "Registreringsdatabase" + }, + "wazuhAuthFailures": { + "name": "Fejl i Wazuh autentificering", + "description": "Mislykkede logins og brute-force advarsler pr. agent med timesparkliner", + "option": { + "hours": { + "label": "Tidsvindue (timer)" + }, + "limit": { + "label": "Antal agenter" + }, + "showSourceIps": { + "label": "Vis top kilde-IP'er" + } + }, + "title": "Auth fejl · {hours}h", + "seriesTooltip": "Alle agenter over den sidste {hours}h", + "peak": "Peak {count}/spand", + "empty": "Ingen mislykkede logins i denne periode", + "failed": "Mislykkede logins", + "failedHint": "Enkelt godkendelsesfejl (sshd, PAM, Windows-logon, ugyldige brugere)", + "bruteForce": "Brute kraft", + "bruteForceHint": "Korrelerede brute-force regler (flere fejl i en kort periode, MITRE T1110)", + "sourceIps": "Kilde Ip'er", + "ipTooltip": "{ip}: {count} fejl", + "bruteForceCount": "{count} brute force" } }, "widgetPreview": { @@ -4004,7 +5732,76 @@ } }, "board": { + "emptyState": { + "title": "Byg din første visning", + "description": "Tilføj en widget eller en app eller tilslut en tjeneste og brug dens data på denne tavle.", + "addWidget": "Tilføj widget", + "addApp": "Tilføj app", + "connectService": "Tilslut tjeneste" + }, + "setupChecklist": { + "title": "Gør denne tavle nyttig", + "description": "Afhentning hvor du slap. Fremskridt følger indholdet allerede på denne tavle.", + "collapse": "Skjul opsætningscheckliste", + "dismiss": "Afvis opsætningscheckliste", + "resume": "Fortsæt opsætning ({completed}/{total})", + "progress": "Opsætning af tavle", + "step": { + "content": { + "label": "Tilføj nyttigt indhold", + "description": "Vælg en widget og konfigurere den før den er placeret." + }, + "app": { + "label": "Fastgør en app", + "description": "Hold en tjeneste eller værktøj et klik væk fra denne tavle." + }, + "service": { + "label": "Forbind en tjeneste", + "description": "Lås live data og handlinger op for kompatible widgets.", + "permissionDescription": "En administrator kan forbinde en tjeneste for at låse op for live data.", + "action": "Forbind" + } + } + }, "action": { + "addContent": "Tilføj tavle indhold", + "settings": "Indstilling af tavle", + "switch": "Skift tavle", + "switcher": { + "title": "Skift tavle", + "search": { + "empty": "Ingen tavler matcher \"{search}\"." + }, + "results": "Tilgængelige tavler", + "preview": "Forhåndsvisning af {name} med {count} elementer", + "currentHidden": "Nuværende tavle: {name}", + "keyboard": { + "navigate": "Navigate", + "open": "Åbn", + "instructions": "Skriv for at filtrere tavler. Brug piletasterne til at flytte gennem resultater og Enter for at åbne en tavle." + }, + "empty": { + "title": "Ingen andre tavler", + "description": "Der er ingen andre tavler, du kan få adgang til." + }, + "error": "Tavler kunne ikke indlæses." + }, + "create": { + "availability": { + "checking": "Kontrollerer tilgængelighed…", + "available": "{name} er tilgængelig" + }, + "notification": { + "success": { + "title": "Tavle oprettet", + "message": "Board {name} er blevet oprettet" + }, + "error": { + "title": "Kan ikke oprette tavle", + "message": "Board {name} kunne ikke oprettes" + } + } + }, "duplicate": { "title": "Kopier tavle", "message": "Dette vil duplikere tavlen {name} med alt dens indhold. Hvis widgets referer til integrationer, som du ikke har lov til at bruge, vil de blive fjernet.", @@ -4020,14 +5817,19 @@ } }, "edit": { + "enter": "Rediger tavle", + "save": "Gem tavle", + "exit": "Afslut redigeringstilstand", "notification": { "success": { - "title": "Ændringer blev anvendt", "message": "Tavlen blev gemt" }, "error": { - "title": "Kan ikke anvende ændringer", "message": "Tavlen kunne ikke gemmes" + }, + "loadError": { + "title": "Kan ikke starte redigering", + "message": "Tavleeditoren kunne ikke indlæses. Dit dashboard er stadig tilgængeligt i visningstilstand." } }, "confirmLeave": { @@ -4035,62 +5837,6 @@ "message": "Du har ændringer, der ikke er gemt. Er du sikker på, at du vil forlade siden?" } }, - "oldImport": { - "label": "Importer fra homarr før 1.0.0", - "notification": { - "success": { - "title": "Import udført", - "message": "Tavlen blev importeret" - }, - "error": { - "title": "Import mislykkedes", - "message": "Tavlen kunne ikke importeres, tjek logfilerne for yderligere detaljer" - } - }, - "form": { - "file": { - "label": "Vælg JSON fil", - "invalidError": "Ugyldig konfigurationsfil" - }, - "apps": { - "label": "Apps", - "avoidDuplicates": { - "label": "Undgå dubletter", - "description": "Ignorerer apps, hvor en app med samme href allerede findes" - }, - "onlyImportApps": { - "label": "Importér kun apps", - "description": "Kun tilføjer apps, tavlen skal genskabes manuelt" - } - }, - "name": { - "label": "Navn på tavle" - }, - "screenSize": { - "label": "Skærmstørrelse", - "description": "I versioner før 1.0 tre forskellige tilstande eksisterede, så du var i stand til at vælge mængden af kolonner for hver skærmstørrelse.", - "option": { - "sm": "Lille", - "md": "Mellem", - "lg": "Stor" - } - }, - "sidebarBehavior": { - "label": "Sidebar opførsel", - "description": "Sidebars blev fjernet i 1.0, kan du vælge, hvad der skal ske med elementerne fra dem.", - "option": { - "lastSection": { - "label": "Sidste afsnit", - "description": "Sidebjælken vil blive vist under sidste sektion" - }, - "removeItems": { - "label": "Fjern elementer", - "description": "Elementer i sidepanelet vil blive fjernet" - } - } - } - } - }, "quickCreateApp": { "modal": { "title": "Opret app i farten", @@ -4098,6 +5844,12 @@ } } }, + "landmark": { + "canvas": "Dashboard lærred", + "leftRail": "Venstre dashboard jernbane", + "rightRail": "Højre dashboard jernbane", + "items": "Instrumentbræt elementer" + }, "field": { "pageTitle": { "label": "Sidetitel" @@ -4167,7 +5919,8 @@ } }, "primaryColor": { - "label": "Primær farve" + "label": "Primær farve", + "locked": "Din administrator holder instansens mærkefarve på hver tavle." }, "secondaryColor": { "label": "Sekundær farve" @@ -4207,9 +5960,6 @@ "xl": "Meget stor" } }, - "name": { - "label": "Navn" - }, "isPublic": { "label": "Offentlig", "description": "Offentlige tavler er tilgængelige for alle, selv uden en konto." @@ -4229,9 +5979,44 @@ "title": "Layout", "responsive": { "title": "Responsive layouts", + "description": "Hvert layout holder sine egne widget-positioner og størrelser. Mobile og Base er altid tilgængelige. Tilføj brugerdefinerede layouts ved ethvert yderligere breakpoint.", "action": { "add": "Tilføj Layout" } + }, + "role": { + "mobile": "Mobil", + "base": "Basis", + "custom": "Tilpasset" + }, + "custom": { + "defaultName": "Tilpasset layout" + }, + "mobile": { + "breakpointDescription": "Mobil bruges altid fra 0px til næste layout breakpoint." + }, + "preview": { + "columns": "kolonner", + "empty": "Dette layout er tomt", + "dynamicSection": "Dynamisk sektion", + "editorWidthLabel": "{layoutName} · {width}px" + }, + "reset": { + "action": "Nulstil fra Base", + "confirm": { + "title": "Reset {layoutName}?", + "message": "Dette erstatter hver gemte position og størrelse i dette layout med et nyt layout genereret fra Base. Dette kan ikke fortrydes." + } + }, + "edit": { + "action": "Rediger layout", + "saveAndEdit": "Gem og rediger", + "save": "Gem layout", + "cancel": { + "action": "Annullér redigering af layout", + "title": "Vil du kassere layoutændringer?", + "message": "Dine ikke-gemte ændringer i dette layout vil blive kasseret." + } } }, "background": { @@ -4268,10 +6053,7 @@ "rename": { "label": "Omdøb tavle", "description": "Ændring af navnet vil ødelægge ethvert link til denne tavle.", - "button": "Skift Navn", - "modal": { - "title": "Omdøb tavle" - } + "button": "Skift Navn" }, "visibility": { "label": "Ændre tavlens synlighed", @@ -4295,9 +6077,7 @@ } }, "delete": { - "label": "Slet denne tavle", "description": "Når du sletter en tavle, er der ingen vej tilbage. Vær venligst sikker.", - "button": "Slet denne tavle", "confirm": { "title": "Slet tavle", "description": "Er du sikker på, at du vil slette denne tavle? Dette vil permanent slette tavlen og alt dens indhold." @@ -4342,28 +6122,41 @@ }, "layout": { "field": { - "name": { - "label": "Navn" - }, "columnCount": { "label": "Kolonne antal" }, "breakpoint": { "label": "Brydningspunkt", "description": "Layout vil blive brugt på alle skærme, der er større end dette breakpoint indtil det næste større breakpoint." + }, + "gutters": { + "label": "Faste sidebjælker", + "description": "Reserver op til tre dashboard kolonner på hver side. De resterende lærred reflows automatisk.", + "left": { + "label": "Left sidebar", + "description": "Hold dette område synligt mens instrumentbrættet ruller.", + "thumbLabel": "Left sidebar width" + }, + "right": { + "label": "Højre sidepanel", + "description": "Hold dette område synligt mens instrumentbrættet ruller.", + "thumbLabel": "Højre sidebjælke bredde" + }, + "width": { + "label": "Bredde i kolonner" + }, + "preview": { + "label": "Forhåndsvisning af betjeningspanel" + } } } }, "management": { "metaTitle": "Administration", - "title": { - "morning": "Godmorgen, {username}", - "afternoon": "God eftermiddag, {username}", - "evening": "God aften, {username}" - }, "notFound": { "title": "Ikke Fundet", - "text": "Kunne ikke finde den anmodede ressource" + "text": "Kunne ikke finde den anmodede ressource", + "backToHome": "Tilbage til ledelsens hjem" }, "error": { "title": "", @@ -4372,19 +6165,10 @@ }, "navbar": { "items": { - "workshop": "Workshop", "home": "Hjem", - "boards": "Tavler", - "apps": "Apps", - "integrations": "Integrationer", - "searchEngies": "Søgemaskiner", - "medias": "Medier", "users": { - "label": "Brugere", "items": { - "manage": "Administrer", - "invites": "Invitationer", - "groups": "Grupper" + "manage": "Administrer" } }, "tools": { @@ -4392,10 +6176,7 @@ "items": { "docker": "Docker", "kubernetes": "Kubernetes", - "logs": "Logfiler", "api": "API", - "certificates": "Certifikater", - "tasks": "Opgaver", "backup": "Backup" } }, @@ -4409,21 +6190,12 @@ "sourceCode": "Kildekode" } }, - "about": "Om" + "about": "Om", + "assistant": "Assistent" } }, "page": { "home": { - "statistic": { - "board": "Tavler", - "user": "Brugere", - "invite": "Invitationer", - "integration": "Integrationer", - "app": "Apps", - "group": "Grupper", - "searchEngine": "Søgemaskiner", - "media": "Medier" - }, "statisticLabel": { "boards": "Tavler", "resources": "Ressourcer", @@ -4461,13 +6233,8 @@ "tooltip": "Denne tavle vises som din mobil tavle" } }, - "duplicate": { - "label": "Dupliker tavlen" - }, "delete": { - "label": "Slet permanent", "confirm": { - "title": "Slet tavle", "description": "Er du sikker på, at du vil slette {name} tavlen?" } } @@ -4476,28 +6243,82 @@ "public": "Denne tavle er offentlig", "private": "Denne tavle er privat" }, - "noResults": { - "title": "Ingen tavler endnu" + "preview": { + "label": "Layout forhåndsvisning for {name}, med {count} elementer", + "unknownCreator": "Ukendt skaber" }, - "modal": { - "createBoard": { - "field": { - "name": { - "label": "Navn" - } - } - } + "noResults": { + "title": "Ingen tavler endnu", + "description": "Opret en tavle for at arrangere dine apps og widgets på ét sted." } }, "media": { "includeFromAllUsers": "Inkluder medier fra alle brugere" }, "user": { - "back": "Tilbage til brugere", "fieldsDisabledExternalProvider": "Visse felter er deaktiveret, fordi de forvaltes af en ekstern godkendelsesudbyder.", "setting": { "general": { "title": "Generelt", + "header": { + "title": "Header studie", + "badge": "Personlig", + "description": "Træk kontrol hvor som helst i rækken. Venstre, Center og Højre ophold fast, mens kontrollerne skifter rundt om dem.", + "device": { + "desktop": "Skrivebord", + "mobile": "Mobil" + }, + "zones": { + "left": "Venstre", + "center": "Centrer", + "right": "Højre" + }, + "action": { + "hide": "Skjul overskriften", + "show": "Vis overskriften", + "configure": "Flyt eller konfigurer {item}", + "remove": "Fjern {item}", + "dropIntoZone": "Flyt ind i {zone} sektionen" + }, + "preview": { + "board": "Kontrolpanel forhåndsvisning for {name}", + "empty": "Intet dashboard layout er tilgængeligt" + }, + "available": { + "title": "Tilgængelige kontroller", + "description": "Tilføj en kontrol, og træk derefter dens fulde knap i position ovenfor.", + "requiredAlways": "Denne kontrol er påkrævet, men du kan flytte den hvor som helst i overskriften.", + "allAdded": "Hver indbygget kontrol er allerede i din header.", + "add": "Tilføj {item}", + "boardShortcut": "Genvej til tavlen", + "chooseBoard": "Vælg en tavle" + }, + "configuration": { + "description": "Denne kontrol forbliver den samme størrelse som den gør i den levende header.", + "searchDisplay": { + "input": "Søg i bjælke", + "icon": "Kun ikon" + }, + "logoDisplay": { + "logo": "Kun logo", + "logoAndText": "Logo + tekst" + } + }, + "items": { + "logo": "Logo", + "search": "Søg", + "home": "Hjemme tavle", + "boardSwitcher": "Tavler", + "assistant": "Assistent", + "docker": "Docker", + "boardEdit": "Rediger tavle", + "boardSettings": "Indstilling af tavle", + "settings": "Dine indstillinger", + "themeToggle": "Skift tema", + "user": "Konto", + "boardUnavailable": "Tavle utilgængelig" + } + }, "item": { "language": "Sprog og region", "board": { @@ -4531,14 +6352,10 @@ }, "security": { "title": "Sikkerhed" - }, - "board": { - "title": "Tavler" } }, "list": { - "metaTitle": "Administrér brugere", - "title": "Brugere" + "metaTitle": "Administrér brugere" }, "edit": { "metaTitle": "Rediger bruger {username}" @@ -4592,9 +6409,6 @@ } }, "field": { - "id": { - "label": "ID" - }, "creator": { "label": "Skaber" }, @@ -4618,10 +6432,7 @@ }, "setting": { "title": "Indstillinger", - "alert": "Gruppeindstillinger prioriteres efter rækkefølgen af grupper i listen. De øverste indstillinger overskriver de nederste indstillinger.", - "board": { - "title": "Tavler" - } + "alert": "Gruppeindstillinger prioriteres efter rækkefølgen af grupper i listen. De øverste indstillinger overskriver de nederste indstillinger." }, "members": { "title": "Medlemmer", @@ -4629,10 +6440,7 @@ "notFound": "Ingen medlemmer fundet" }, "permissions": { - "title": "Tilladelser", - "form": { - "unsavedChanges": "Du har ugemte ændringer!" - } + "title": "Tilladelser" } } }, @@ -4641,12 +6449,10 @@ "notification": { "success": { "message": "Indstillinger gemt succesfuldt" - }, - "error": { - "message": "Kunne ikke gemme indstillinger" } }, "section": { + "analyticsDocumentation": "Se præcis, hvad analytics data Homarr indsamler", "analytics": { "title": "Analytics", "general": { @@ -4675,7 +6481,6 @@ } }, "board": { - "title": "Tavler", "homeBoard": { "label": "Global hjemmetavle", "mobileLabel": "Global mobiltavle", @@ -4694,7 +6499,6 @@ } }, "user": { - "title": "Brugere", "enableGravatar": { "label": "Aktiver Gravatar", "description": "Falder tilbage til brugernes avatarer fra Libravatar/Gravatar, når ingen brugerdefineret avatar er valgt og en e-mail er konfigureret" @@ -4710,12 +6514,86 @@ "appearance": { "title": "Udseende", "defaultColorScheme": { - "label": "Standard farvetema", + "label": "Standard farvetema" + } + }, + "branding": { + "title": "Mærkning af Instans", + "groups": { + "identity": "Identitet", + "appearance": "Udseende", + "customCss": "Custom CSS", + "authentication": "Autorisering" + }, + "identity": { + "description": "Applikationslogoet er det større mærke, der anvendes inde i appen, på login-sider, og for installerede apps. Browser-ikonet (favicon) er den lille firkant, der bruges i faner og bogmærker; når den er tom, falder den tilbage til applikationslogoet." + }, + "appName": { + "label": "Applikations navn" + }, + "greeting": { + "label": "Tilpasset hilsen" + }, + "logo": { + "label": "Applikations logo", + "placeholder": "/logo/logo.png" + }, + "favicon": { + "label": "Browser-ikon (favicon)", + "placeholder": "Bruger applikations logo" + }, + "primaryColor": { + "label": "Primær farve" + }, + "secondaryColor": { + "label": "Sekundær accent" + }, + "lockPrimaryColor": { + "label": "Behold denne farve på hver tavle", + "description": "Forhindrer brætfarver i at erstatte ansøgningen accent." + }, + "signInBackground": { + "label": "Baggrund for godkendelse", + "placeholder": "https://example.com/background.jpg" + }, + "signInOverlay": { + "label": "Overlejring af baggrunden" + }, + "defaultRadius": { + "label": "Hjørne stil", "options": { - "auto": "Auto", - "light": "Lys", - "dark": "Mørk" + "xs": "Tæt", + "sm": "Subtile", + "md": "Balanceret", + "lg": "Aundet", + "xl": "Blød" } + }, + "customCss": { + "label": "Global brugerdefineret CSS", + "description": "Anvendes på hver side. Board brugerdefinerede CSS kan tilsidesætte det." + }, + "authVisibility": { + "description": "Vælg hvad der vises på hver godkendelsesside.", + "appName": "Applikations navn", + "logo": "Applikations logo", + "greeting": "Hilsen" + }, + "summary": { + "title": "Nuværende branding", + "cornerStyle": "Hjørne stil", + "palette": "Palette", + "backgroundConfigured": "Brugerdefineret baggrund · {overlay}% overlay", + "backgroundDefault": "Standard baggrund", + "greetingConfigured": "Tilpasset hilsen", + "greetingDefault": "Standard hilsen", + "boardColorLocked": "Brætfarve låst", + "boardColorFlexible": "Brætfarver tilladt", + "appName": "Jobnavn", + "logo": "Logo", + "greeting": "Hilsen", + "on": "Til", + "off": "Fra" } }, "culture": { @@ -4723,12 +6601,177 @@ "defaultLocale": { "label": "Standardsprog" } + }, + "assistant": { + "loading": "Indlæser assistentkonfiguration", + "title": "Assistent", + "description": "Tilslut et OpenAI-kompatibelt model-endepunkt for assistenten i hele instansen.", + "security": { + "description": "API-nøgler og yderligere header værdier krypteres i Homarr databasen. De returneres aldrig til browsere. Model anmodninger sendes fra Homarr serveren direkte til det konfigurerede slutpunkt." + }, + "overview": { + "connectionReady": "Forbindelse klar", + "unsavedChanges": "Ikke-gemte ændringer", + "setupRequired": "Opsætning påkrævet", + "disabled": "Deaktiveret", + "noModel": "Ingen model valgt" + }, + "connection": { + "endpointTitle": "Udbyder og slutpunkt", + "description": "Vælg en forudindstillet eller tilslut enhver tjeneste, der implementerer OpenAI Chat Completions API.", + "save": "Gem udbyder forbindelse" + }, + "credentials": { + "title": "Legitimation", + "description": "Tilføj hemmelighederne dette endpoint behov. Gemte værdier forbliver krypteret og kan ikke læses tilbage.", + "required": "Nøgle påkrævet", + "optional": "Valgfri nøgle", + "workshop": "Per-user GitHub log ind" + }, + "provider": { + "title": "Udbyder", + "groups": { + "free": "Gratis med Homarr", + "hosted": "Hostede udbydere", + "local": "Lokale udbydere", + "custom": "Tilpasset" + }, + "options": { + "homarr": { + "description": "Et begrænset antal Assistant anvendelser er gratis hver dag, betalt af Homarr holdet. Log ind med Community Workshop for at bruge din tilladelse." + }, + "openrouter": { + "description": "Hosted model routing med et stort værktøjskompatibel modelkatalog." + }, + "openai": { + "description": "OpenAI Chat Completions gennem det officielle API-endepunkt." + }, + "anthropic": { + "description": "Claude gennem Anthropic's OpenAI SDK kompatibilitet endepunkt." + }, + "google-gemini": { + "description": "Gemini gennem Googles OpenAI-kompatible API-endepunkt." + }, + "xai": { + "description": "Grok modeller gennem xAI's OpenAI-kompatible API." + }, + "groq": { + "description": "Hurtig hosted inferens gennem Groq's OpenAI-kompatible API." + }, + "mistral": { + "description": "Mistrale modeller gennem den officielle API." + }, + "deepseek": { + "description": "DeepSeek modeller gennem sin OpenAI-kompatible API." + }, + "together": { + "description": "Hosted åbne modeller gennem Together's OpenAI-kompatible API." + }, + "ollama": { + "description": "En lokal eller netværks-Ollama-server med sin OpenAI-kompatible API." + }, + "lm-studio": { + "description": "En lokal LM Studio-server med OpenAI kompatibilitet aktiveret." + }, + "llama-cpp": { + "description": "En lokal eller netværks-server llama.cpp med sin OpenAI-kompatible API." + }, + "custom": { + "label": "Tilpasset slutpunkt", + "description": "Ethvert andet endepunkt, der er kompatibelt med OpenAI Chat Completions." + } + }, + "homarrAuth": { + "title": "Gratis daglig Assistent bruger inkluderet", + "description": "Ingen API-nøgle er nødvendig. Homarr-teamet dækker et begrænset antal Assistant anvendelser for dig hver dag. Log ind med Fællesskabets værksted for at holde dit fradrag adskilt." + } + }, + "baseUrl": { + "title": "API base URL", + "description": "Medtag API-præfiksen, normalt /v1. I containere, localhost henviser til Homarr container." + }, + "apiKey": { + "title": "API nøgle", + "required": "Krævet af denne udbyder. Værdien er krypteret og skrivebeskyttet.", + "optional": "Valgfri for lokale endpoints. Lad det være tomt, når tjenesten ikke kræver ihændehavergodkendelse.", + "placeholder": "Indtast en API-nøgle", + "savedTitle": "Krypteret API-nøgle gemt", + "savedDescription": "Homarr kan bruge denne nøgle, men den kan ikke vise eller gendanne sin værdi.", + "remove": "Fjern gemt API-nøgle", + "removeFlow": { + "title": "Fjern den gemte API-nøgle?", + "description": "Denne udbyder kræver en API-nøgle. Fjernelse af den kan stoppe modelopdagelse og assistentsvar, indtil en anden nøgle er gemt.", + "optionalDescription": "Slutpunktet vil stoppe med at modtage ihændehavergodkendelse efter denne nøgle er fjernet. Bekræft, at den accepterer uautoriserede anmodninger eller bruger en anden gemt header.", + "cancel": "Behold gemt nøgle", + "confirm": "Fjern API-nøgle" + } + }, + "headers": { + "title": "Yderligere forespørgsels overskrifter", + "description": "Valgfri godkendelse eller routing headers. Header værdier er krypteret og skrivebeskyttet.", + "add": "Tilføj overskrift", + "name": "Header navn", + "value": "Header værdi", + "valuePlaceholder": "Hemmelig eller routing værdi", + "remove": "Fjern overskrift", + "configured": "Yderligere krypterede overskrifter er konfigureret. Tilføjelse af overskrifter erstatter det komplette gemte sæt.", + "empty": "Ingen yderligere overskrifter gemmes for denne udbyder.", + "savedBadge": "Headers gemt", + "pendingRemoval": "Fjernelse afventer", + "clear": "Fjern gemte overskrifter ved lagring", + "keep": "Behold gemte overskrifter" + }, + "model": { + "title": "Model", + "description": "Vælg en opdaget model eller indtast et eksakt endpoint, model ID.", + "placeholder": "Model ID", + "refresh": "Opdater modeller", + "chooseModel": "Vælg den model, der bruges til nye samtaler.", + "discoveryPath": "Model opdagelse sti", + "discoveryPathDescription": "Vedlagt API-basen URL. Lad feltet stå tomt for at deaktivere opdagelse og bruge et manuelt model-ID.", + "manual": "Indtast et model-ID manuelt eller gem forbindelsen for at opdage modeller.", + "manualFallback": "Opdagelsen er ikke tilgængelig. Du kan stadig indtaste et model-ID manuelt.", + "saveConnectionFirst": "Gem leverandørforbindelsen, før du vælger en model.", + "discovering": "Opdaterer de tilgængelige modeller fra denne udbyder…", + "discovered": "{count, plural, one {Opdaget # model. Værktøjsunderstøttelse afhænger af det valgte endepunkt og den valgte model.} other {Opdagede # modeller. Værktøjsunderstøttelse afhænger af det valgte endepunkt og model.}}", + "discoveryFailed": "Opdagelsen af modellerne er ikke afsluttet", + "context": "{count} kontekstvindue", + "toolsConfirmed": "Værktøjer annonceret", + "toolsUnknown": "Verificér værktøjsunderstøttelse" + }, + "serverTools": { + "title": "Server værktøjer", + "webSearch": { + "label": "Web- søgning", + "description": "Tillad modellen at søge på live web gennem OpenRouter når en anmodning kræver aktuelle oplysninger. Søgebrug oplades separat af OpenRouter.", + "proxyDescription": "Send OpenRouters web-søgeserver værktøj til dette slutpunkt. Aktiver kun dette når det brugerdefinerede endpoint videresender OpenRouter serverværktøjs-formatet, såsom en Homarr Router proxy.", + "limit": "Modellen beslutter, hvornår der skal søges, med en grænse på 3 søgninger og 5 resultater pr. søgning for hver anmodning." + } + }, + "enabled": { + "label": "Aktiver Assistent", + "description": "Viser assistenten for alle underskrevne brugere. Eksisterende Homarr tilladelser gælder stadig for hvert internt værktøjskald." + }, + "save": "Gem assistent", + "notification": { + "connectionSaved": { + "title": "Leverandørforbindelse gemt", + "message": "Endepunktet og krypterede legitimationsoplysninger er klar til modelvalg.", + "credentialsCleared": "Endepunktet ændret, så tidligere legitimationsoplysninger blev ryddet. Tilføj legitimationsoplysninger til den nye destination hvis det kræves." + }, + "saved": { + "title": "Assistente indstillinger gemt", + "message": "Den nye model og tilgængelighedsindstillinger er aktive." + }, + "error": { + "title": "Assistent indstillinger kunne ikke gemmes" + } + } } } }, "tool": { "tasks": { - "title": "Opgaver", "status": { "idle": "Inaktiv", "running": "Kører", @@ -4746,6 +6789,11 @@ "label": "Pings" } }, + "action": { + "run": "Kør {name} nu", + "enable": "Aktiver {name}", + "disable": "Deaktivér {name}" + }, "interval": { "seconds": "Hvert {interval, plural, one {}=1 {sekund} other {# sekunder}}", "minutes": "Hvert {interval, plural, one {}=1 {minut} other {# minutter}}", @@ -4761,13 +6809,7 @@ } } }, - "settings": { - "title": "Opgave indstillinger for {jobName}" - }, "field": { - "name": { - "label": "Navn" - }, "interval": { "label": "Planlæg interval" }, @@ -4781,11 +6823,6 @@ "table": { "search": "Søg efter {count} opgaver..." }, - "action": { - "refresh": { - "label": "Opdater" - } - }, "refresh": { "success": { "message": "Opgaver opdateret" @@ -4819,7 +6856,6 @@ } }, "api": { - "title": "API", "modal": { "createApiToken": { "title": "API token oprettet", @@ -4845,7 +6881,6 @@ }, "table": { "header": { - "id": "ID", "createdBy": "Oprettet af", "actions": "Handlinger" } @@ -4901,43 +6936,12 @@ "availableTools": { "title": "", "description": "", - "columnType": "", - "columnName": "", - "columnDescription": "" - }, - "troubleshooting": { - "title": "", - "missingHeader": { - "title": "", - "description": "" - }, - "invalidFormat": { - "title": "", - "description": "" - }, - "invalidKey": { - "title": "", - "description": "" - }, - "connectionRefused": { - "title": "", - "description": "" - }, - "toolsNotAppearing": { - "title": "", - "description": "" + "filteredDescription": "{count} matchende værktøjer på tværs af udvidede kategorier.", + "search": "Søg efter værktøjer", + "noResults": { + "title": "Ingen værktøjer matcher denne søgning", + "description": "Intet MCP-værktøj matcher \"{search}\". Prøv et navneområde, et værktøjsnavn eller en beskrivelse." } - }, - "copy": "", - "oneClick": { - "title": "", - "subtitle": "", - "vsCode": "", - "cursor": "", - "copyUrl": "", - "copied": "", - "copyHint": "", - "manualConfig": "" } } } @@ -4954,47 +6958,12 @@ "title": "Eksport af følsomme data", "warningTitle": "Denne eksport indeholder hele din database.", "warningBody": "Backup'en omfatter alle brugere, integrationshemmeligheder (krypterede), API-nøgler, tavlekonfigurationer og app-data. Opbevar den eksporterede fil sikkert, og del den ikke.", - "typePrompt": "Indtast \"{phrase}\" for at fortsætte", - "submit": "Eksporter database", - "cancel": "Annullér" + "submit": "Eksporter database" } }, "import": { "title": "Gendan database", - "description": "Upload en tidligere eksporteret backup-ZIP for at gendanne din database. Dette erstatter hele din database. Hvis backup'en blev oprettet med en anden krypteringsnøgle, bliver hemmeligheder automatisk genkrypteret.", - "warning": "Gendannelse af en backup vil fuldstændigt erstatte din nuværende database og genstarte applikationen. Denne handling kan ikke fortrydes.", - "dropzone": { - "title": "Slip din backup-ZIP her, eller klik for at gennemse", - "description": "Kun .zip-filer fra en Homarr SQLite-backup accepteres" - }, - "changeFile": "Skift fil", - "button": "Gendan database", - "success": { - "title": "Gendannelse fuldført", - "message": "Databasen er blevet gendannet. Applikationen genstarter..." - }, - "error": "Import mislykkedes" - }, - "preview": { - "title": "Backup-indhold", - "exported": "Eksporteret {date}", - "loading": "Analyserer backup-fil...", - "errorTitle": "Forhåndsvisningsfejl", - "entity": "Entitet", - "count": "Antal", - "boards": "Tavler", - "entities": { - "board": "Tavler", - "user": "Brugere", - "app": "Apps", - "integration": "Integrationer", - "item": "Widgets", - "media": "Medie", - "search_engine": "Søgemaskiner" - }, - "analyzeError": "Kunne ikke analysere backup-fil", - "invalidMissingMetadata": "Ugyldig backup: mangler metadata.json", - "invalidMissingDb": "Ugyldig backup: mangler db.sqlite" + "description": "Upload en tidligere eksporteret backup-ZIP for at gendanne din database. Dette erstatter hele din database. Hvis backup'en blev oprettet med en anden krypteringsnøgle, bliver hemmeligheder automatisk genkrypteret." }, "restore": { "dropzone": { @@ -5004,29 +6973,20 @@ "analyzing": "Analyserer backup...", "changeFile": "Skift fil", "continueToRestore": "Fortsæt til gendannelse", - "tryAgain": "Prøv igen", "analysisError": "Analysefejl", "preview": { "title": "Backup-indhold", "exported": "Eksporteret {date}", "entity": "Entitet", "count": "Antal", - "boards": "Tavler", "entities": { - "board": "Tavler", - "user": "Brugere", - "app": "Apps", - "integration": "Integrationer", - "item": "Widgets", - "media": "Medie", - "search_engine": "Søgemaskiner" + "item": "Widgets" }, "migrationsApplied": "{count} migration anvendt", "migrationsAppliedPlural": "{count} migrationer anvendt", "migrationsOlderVersion": "Denne backup var fra en ældre Homarr-version. {count} skemamigration blev anvendt for at bringe den op til dato.", "migrationsOlderVersionPlural": "Denne backup var fra en ældre Homarr-version. {count} skemamigrationer blev anvendt for at bringe den op til dato.", "migrationsUpToDate": "Databaseskema er opdateret ({count} migrationer anvendt)", - "upToDate": "Opdateret", "migrationsPending": "{count} ventende" }, "migration": { @@ -5037,21 +6997,21 @@ "title": "Destruktiv handling", "warningTitle": "Dette vil permanent erstatte hele din database.", "warningBody": "Alle nuværende tavler, brugere, apps, integrationer, indstillinger og sessioner vil gå tabt. Denne handling kan ikke fortrydes. Applikationen genstarter efter gendannelsen.", - "typePrompt": "Indtast \"{phrase}\" for at fortsætte", - "cancel": "Annullér", "submit": "Gendan database" }, "progress": { "title": "Gendanner database...", - "extracting": "Udpakker backup-arkiv", - "migrating": "Anvender databasemigrationer", - "encrypting": "Genkrypterer integrationshemmeligheder", - "swapping": "Udskifter databasefil", - "restarting": "Genstarter server" + "restarting": "Genstarter server", + "relogin": "Gendannelse af databasen ugyldiggjort din nuværende session. Homarr vil sende dig til at logge på, når serveren er klar." }, "complete": { "title": "Gendannelse fuldført", - "message": "Databasen blev gendannet. Serveren genstarter — opdater venligst siden om et par sekunder." + "message": "Databasen blev gendannet. Serveren genstarter — opdater venligst siden om et par sekunder.", + "button": "Log ind nu" + }, + "timeout": { + "title": "Serveren kom ikke tilbage online", + "message": "Databasegendannelsen er færdig, men Homarr er ikke blevet klar igen. Prøv forbindelsestjek igen eller opdater denne side manuelt." }, "failed": { "title": "Gendannelse mislykkedes" @@ -5059,6 +7019,9 @@ "invalidMissingMetadata": "Ugyldig backup: mangler metadata.json", "invalidMissingDb": "Ugyldig backup: mangler db.sqlite", "analyzeError": "Kunne ikke analysere backup" + }, + "confirm": { + "typePrompt": "Skriv \"{phrase}\" for at fortsætte" } } }, @@ -5093,7 +7056,11 @@ "toggleBoardEdit": "Skift tavleredigeringstilstand", "toggleColorScheme": "Slå lys/mørk tilstand til/fra", "saveNotebook": "Gem notesbog (kun inde i notesbog widget)", - "openSpotlight": "Åbn søgefunktionen" + "openSpotlight": "Åbn søgefunktionen", + "openSpotlightApps": "Åbn app-søgning", + "openSpotlightAssistant": "Åbn assistenttilstand", + "openSpotlightPreferences": "Åbn præference-tilstand", + "openAssistant": "Åbn Assistent" }, "note": "Tip: Mod refererer til både Ctrl-tasten og -tasten på macOS" } @@ -5103,6 +7070,63 @@ }, "docker": { "title": "Containere", + "reconciliation": { + "title": "Assisterede Docker opsætning", + "suggestions": "{count, plural, =0 {Ingen forslag} one {# forslag} other {# forslag}}", + "attention": "{count} kræver opmærksomhed", + "endpointUnavailable": "Nogle tjenester kunne ikke kontrolleres, fordi disse endpoints ikke er tilgængelige: {names}", + "empty": "Ingen synlige Docker-tjenester blev fundet.", + "emptyFilter": "Ingen tjenester matcher denne visning.", + "ambiguous": "Mere end et eksisterende element kan matche denne tjeneste. Homarr vil ikke vælge et automatisk.", + "filter": { + "attention": "Behøver opmærksomhed", + "represented": "Allerede konfigureret", + "all": "Alle" + }, + "state": { + "newRecognized": "Klar til at forbinde", + "newApp": "Ny tjeneste", + "represented": "Allerede repræsenteret", + "linked": "Linket", + "moved": "Adresse ændret" + }, + "url": { + "manual": "Indtast en adresse manuelt" + }, + "health": { + "layer": { + "docker": "Docker", + "integrationConfiguration": "Integration", + "authentication": "Autorisering", + "apiRequest": "API", + "appRepresentation": "App", + "widgetConfiguration": "Widget", + "widgetQuery": "Widget forespørgsel" + }, + "status": { + "available": "Tilgængelig", + "configured": "Konfigureret", + "linked": "Linket", + "missing": "Mangler", + "changed": "Ændret", + "unused": "Ikke brugt", + "notApplicable": "Ikke relevant", + "notObserved": "Ikke observeret" + } + }, + "action": { + "review": "Gennemgå", + "dismiss": "Afvis", + "restoreDismissed": "Gendan afvist ({count})", + "setupIntegration": "Opsæt integration", + "reviewIntegration": "Revision af integration", + "viewRepresentation": "Se opsætning" + }, + "loadError": { + "title": "Docker opsætningsassistent kunne ikke indlæses", + "message": "Docker service information er ikke tilgængelig. Prøv igen uden at forlade denne side." + } + }, "table": { "updated": "Opdateret {when}", "refresh": { @@ -5115,9 +7139,6 @@ "totalMemory": "" }, "field": { - "name": { - "label": "Navn" - }, "state": { "label": "Tilstand", "option": { @@ -5131,9 +7152,6 @@ } }, "stats": { - "cpu": { - "label": "CPU" - }, "memory": { "label": "Hukommelse" } @@ -5196,8 +7214,11 @@ } }, "remove": { - "label": "Fjern", "confirm": "", + "confirmation": { + "title": "{count, plural, one {Fjern # container?} other {Fjern # containere?}}", + "message": "{count, plural, one {Dette fjerner permanent # container: {names}} other {Dette fjerner permanent # containere: {names}}}" + }, "notification": { "success": { "title": "Containere fjernet", @@ -5209,8 +7230,13 @@ } } }, + "result": { + "failure": { + "title": "Nogle containerhandlinger mislykkedes", + "message": "{total, plural, one {{failed} af # handling mislykkedes: {names}} other {{failed} af # handlinger mislykkedes: {names}}}" + } + }, "refresh": { - "label": "Genindlæs", "notification": { "success": { "title": "Containere genindlæst", @@ -5241,18 +7267,33 @@ }, "error": { "internalServerError": "Kunne ikke hente Docker-containere", + "endpointUnavailable": "{count, plural, one {# Docker endpoint utilgængelige: {names}} other {# Docker endpoints utilgængelige: {names}}}", "noColumns": "" } }, "kubernetes": { + "context": { + "label": "Kubernetes kontekst", + "loadError": { + "title": "Kubernetes-konteksterne kunne ikke indlæses", + "message": "Kontekstinformation er ikke tilgængelig. Prøv igen uden at forlade denne side." + }, + "status": { + "available": "Tilgængelig", + "degraded": "Metrics unavailable", + "unavailable": "Unavailable" + }, + "unavailable": "Denne Kubernetes-kontekst kan ikke nås. Vælg en anden kontekst eller bekræft dens legitimationsoplysninger og slutpunkt.", + "metricsUnavailable": "Denne kontekst er tilgængelig, men Metrics Server er ikke tilgængelig. Inventar forbliver tilgængelig uden live CPU og hukommelsesforbrug." + }, "cluster": { "title": "Cluster Kontrolpanel", "label": "Cluster", "providers": "Udbydere", "version": "Version", - "architecture": "Arkitektur", "capacity": { "title": "Kapacitet", + "metricsUnavailable": "Metrics Server er ikke tilgængelig. Inventory og reserveret kapacitet forbliver synlig, men live CPU og hukommelse forbrug kan ikke vises.", "resource": { "reserved": "Reserveret", "used": "Brugt" @@ -5271,38 +7312,10 @@ } }, "nodes": { - "label": "Noder", "field": { - "name": { - "label": "Navn" - }, - "state": { - "label": "Tilstand", - "option": { - "ready": "Klar", - "NotReady": "Ikke Klar" - } - }, - "cpu": { - "label": "CPU" - }, - "memory": { - "label": "RAM" - }, - "pods": { - "label": "Pods" - }, - "operatingSystem": { - "label": "OS" - }, - "architecture": { - "label": "Arkitektur" - }, + "metricsUnavailable": "Unavailable", "kubernetesVersion": { "label": "Kubernetes version" - }, - "creationTimestamp": { - "label": "Oprettet" } }, "table": { @@ -5310,43 +7323,17 @@ } }, "namespaces": { - "label": "Navnerum", - "field": { - "name": { - "label": "Navn" - }, - "state": { - "label": "Tilstand", - "option": { - "active": "Aktiv", - "terminating": "Afslutter" - } - }, - "creationTimestamp": { - "label": "Oprettet" - } - }, "table": { "search": "Søg i {count} navneområder" } }, "ingresses": { - "label": "Ingresses", "field": { - "name": { - "label": "Navn" - }, - "namespace": { - "label": "Navnerum" - }, "className": { "label": "Klassens navn" }, "rulesAndPaths": { "label": "Regler & stier" - }, - "creationTimestamp": { - "label": "Oprettet" } }, "table": { @@ -5354,17 +7341,7 @@ } }, "services": { - "label": "Tjenester", "field": { - "name": { - "label": "Navn" - }, - "namespace": { - "label": "Navnerum" - }, - "type": { - "label": "Type" - }, "ports": { "label": "Porte" }, @@ -5373,9 +7350,6 @@ }, "clusterIP": { "label": "Cluster IP" - }, - "creationTimestamp": { - "label": "Oprettet" } }, "table": { @@ -5383,25 +7357,12 @@ } }, "pods": { - "label": "Pods", "field": { - "name": { - "label": "Navn" - }, - "namespace": { - "label": "Navnerum" - }, "image": { "label": "Billede" }, "applicationType": { "label": "Applikationstype" - }, - "status": { - "label": "Status" - }, - "creationTimestamp": { - "label": "Oprettet" } }, "table": { @@ -5409,51 +7370,17 @@ } }, "secrets": { - "label": "Hemmeligheder", - "field": { - "name": { - "label": "Navn" - }, - "namespace": { - "label": "navnerum" - }, - "type": { - "label": "type" - }, - "creationTimestamp": { - "label": "Oprettet" - } - }, "table": { "search": "Søg i {count} hemmeligheder" } }, "configmaps": { - "label": "ConfigMaps", - "field": { - "name": { - "label": "Navn" - }, - "namespace": { - "label": "navnerum" - }, - "creationTimestamp": { - "label": "Oprettet" - } - }, "table": { "search": "Søg i {count} configMaps" } }, "volumes": { - "label": "Volumer", "field": { - "name": { - "label": "Navn" - }, - "namespace": { - "label": "Navnerum" - }, "accessModes": { "label": "Adgangstilstande" }, @@ -5468,12 +7395,6 @@ }, "volumeName": { "label": "Volumens Navn" - }, - "status": { - "label": "Status" - }, - "creationTimestamp": { - "label": "Oprettet" } }, "table": { @@ -5482,6 +7403,29 @@ }, "error": { "internalServerError": "Kunne ikke hente Kubernetes-data" + }, + "field": { + "name": { + "label": "Jobnavn" + }, + "namespace": { + "label": "Navnerum" + }, + "creationTimestamp": { + "label": "Oprettet" + }, + "state": { + "label": "Job Status" + }, + "status": { + "label": "Status" + }, + "type": { + "label": "Download klienttype" + }, + "architecture": { + "label": "Arkitektur" + } } }, "permission": { @@ -5515,71 +7459,27 @@ }, "navigationStructure": { "manage": { - "workshop": { - "label": "Workshop" - }, "label": "Administrer", - "boards": { - "label": "Tavler" - }, - "integrations": { - "label": "Integrationer", + "custom-widgets": { "edit": { - "label": "Rediger" + "flow": { + "label": "" + } }, - "new": { - "label": "Ny" - } - }, - "search-engines": { - "label": "Søgemaskiner", - "new": { - "label": "Ny" + "workshop": { + "label": "Værksted" }, - "edit": { - "label": "Rediger" - } - }, - "medias": { - "label": "Medier" - }, - "apps": { - "label": "Apps", - "new": { - "label": "Ny" - }, - "edit": { - "label": "Rediger" + "publish": { + "label": "Udgiv til værksted" } }, "users": { - "label": "Brugere", - "create": { - "label": "Opret" - }, "general": "Generelt", - "security": "Sikkerhed", - "board": "Tavler", - "groups": { - "label": "Grupper" - }, - "invites": { - "label": "Invitationer" - } + "security": "Sikkerhed" }, "tools": { "label": "Værktøjer", - "tasks": { - "label": "Opgaver" - }, - "docker": { - "label": "Docker", - "logs": { - "label": "Logfiler" - } - }, "kubernetes": { - "label": "Kubernetes", "nodes": { "label": "Noder" }, @@ -5605,11 +7505,7 @@ "label": "Volumer" } }, - "logs": { - "label": "Logs" - }, "certificates": { - "label": "Certifikater", "hostnames": { "label": "Værtsnavne" } @@ -5620,12 +7516,60 @@ }, "about": { "label": "Om" + }, + "assistant": { + "label": "Assistent" } } }, "search": { "placeholder": "Søg efter hvad som helst", "nothingFound": "Intet fundet", + "modePicker": { + "search": { + "label": "Søg", + "placeholder": "Søg i apps, tavler, sider, kommandoer og præferencer" + }, + "apps": { + "label": "Apps", + "placeholder": "Søg i apps, tavler og integrationer" + }, + "command": { + "label": "Kommandoer", + "placeholder": "Søg i handlinger og kommandoer" + }, + "preferences": { + "label": "Præferencer", + "placeholder": "Søg og skift præferencer" + }, + "assistant": { + "label": "Assistent", + "placeholder": "Spørg Assistent" + }, + "external": { + "label": "Web", + "placeholder": "Søg med en ekstern søgemaskine" + }, + "media": { + "label": "Medie", + "placeholder": "Søg efter en film eller vis", + "fallback": "Søg medie for \"{query}\"" + }, + "userGroup": { + "label": "Personer", + "placeholder": "Søg efter brugere og grupper" + }, + "continueWith": "Fortsæt med", + "dialogAriaLabel": "{mode} kommando menu", + "navigationLabel": "Søg i tilstande", + "modeAriaLabel": "{mode} tilstand", + "resultsAriaLabel": "{mode} resultater", + "footer": { + "navigate": "Navigate", + "open": "Åbn", + "close": "Luk" + } + }, "error": { "fetch": "Der opstod en fejl under hentning af data" }, @@ -5634,7 +7578,6 @@ "help": "Søg efter apps, integrationer eller tavler", "group": { "app": { - "title": "Apps", "children": { "action": { "open": { @@ -5650,7 +7593,6 @@ } }, "board": { - "title": "Tavler", "children": { "action": { "open": { @@ -5670,9 +7612,6 @@ "title": "Vælg en handling for tavlen" } } - }, - "integration": { - "title": "Integrationer" } } }, @@ -5701,9 +7640,6 @@ "newBoard": { "label": "Opret en ny tavle" }, - "importBoard": { - "label": "Importer en tavle" - }, "newApp": { "label": "Oprette en ny app" }, @@ -5773,7 +7709,6 @@ } }, "defaultSearchEngineId": { - "label": "Standardsøgemaskine", "children": { "detail": { "title": "Vælg din standardsøgemaskine" @@ -5781,7 +7716,6 @@ } }, "openSearchInNewTab": { - "label": "Åbn søgeresultater i ny fane", "children": { "detail": { "title": "Åbn søgeresultater i ny fane" @@ -5789,7 +7723,6 @@ } }, "ddgBangs": { - "label": "Aktivér DuckDuckGo-bangs", "children": { "detail": { "title": "Aktivér DuckDuckGo-bangs" @@ -5804,6 +7737,13 @@ } } }, + "byteUnitSystem": { + "children": { + "detail": { + "title": "Vælg dine datastørrelsesenheder" + } + } + }, "homeBoardId": { "label": "Hjemmetavle", "children": { @@ -5821,7 +7761,6 @@ } }, "pingIconsEnabled": { - "label": "Brug ikoner til pings", "children": { "detail": { "title": "Brug ikoner til pings" @@ -5829,7 +7768,6 @@ } }, "enableRightClickOnWidgets": { - "label": "", "children": { "detail": { "title": "" @@ -5857,6 +7795,7 @@ "description": "Begynd at skrive for at søge i dine medieanmodningsintegrationer", "disabled": { "noIntegration": "Tilføj en Overseerr-, Jellyseerr- eller Seerr-integration for at aktivere mediesøgning.", + "signInRequired": "Log ind for at søge efter integrationer af medieforespørgsler.", "scoped": "Denne widget har ikke en tilgængelig medieanmodningsintegration." } } @@ -5873,7 +7812,6 @@ "help": "Brug en ekstern søgemaskine", "group": { "searchEngine": { - "title": "Søgemaskiner", "tipDdgBangs": "Tip: Du kan også bruge DuckDuckGo-bangs her, f.eks. !noget", "bang": { "searchWithQuery": "Søg efter \"{query}\" med {label}", @@ -5924,20 +7862,6 @@ "group": { "mode": { "title": "Tilstande" - }, - "help": { - "title": "Hjælp", - "option": { - "documentation": { - "label": "Dokumentation" - }, - "submitIssue": { - "label": "Indsend et problem" - }, - "discord": { - "label": "Discordfællesskab" - } - } } } }, @@ -5949,9 +7873,10 @@ "other": { "label": "Søg med en anden søgemaskine" }, - "no-default": { - "label": "Ingen standardsøgemaskine", - "description": "Angiv en standardsøgemaskine i indstillinger" + "no-engines": { + "label": "Ingen søgemaskiner konfigureret", + "descriptionCreate": "Tilføj en søgemaskine for at søge i kommandomenuen", + "descriptionUnavailable": "Bed en administrator om at konfigurere en søgemaskine" }, "search": { "label": "Søg efter \"{query}\" med {name}" @@ -6031,7 +7956,6 @@ "help": "Søg efter brugere eller grupper", "group": { "user": { - "title": "Brugere", "children": { "action": { "detail": { @@ -6044,7 +7968,6 @@ } }, "group": { - "title": "Grupper", "children": { "action": { "detail": { @@ -6068,9 +7991,6 @@ "engine": { "search": "Find en søgemaskine", "field": { - "name": { - "label": "Navn" - }, "short": { "label": "Kort" }, @@ -6083,12 +8003,19 @@ }, "page": { "list": { - "title": "Søgemaskiner", + "ariaLabel": "Konfigurerede søgemaskiner", "noResults": { "title": "Der er endnu ingen søgemaskiner", - "action": "Opret din første søgemaskine" + "description": "Søgemaskiner lader Spotlight sende en forespørgsel til et websted eller tilsluttet service.", + "action": "Opret din første søgemaskine", + "filteredTitle": "Ingen søgemaskiner matcher din søgning", + "filteredDescription": "Ingen søgemaskiner matcher \"{search}\". Prøv et andet navn eller URL." }, - "interactive": "Interaktiv, bruger en integration" + "interactive": "Interaktiv, bruger en integration", + "type": { + "generic": "URL skabelon", + "fromIntegration": "Integration" + } }, "create": { "title": "Ny søgemaskine", @@ -6107,11 +8034,9 @@ "title": "Rediger søgemaskine", "notification": { "success": { - "title": "Ændringer blev anvendt", "message": "Søgemaskinen blev gemt" }, "error": { - "title": "Kan ikke anvende ændringer", "message": "Søgemaskinen kunne ikke gemmes" } }, @@ -6250,6 +8175,10 @@ } }, "log": { + "context": { + "widgetError": "Widget rapporterede en fejl omkring dette tidspunkt", + "expiredWidgetError": "Logs omkring denne widget fejl er ikke længere bevaret" + }, "level": { "option": { "debug": "Fejlsøg", @@ -6261,7 +8190,6 @@ }, "onboardingTour": { "learnMore": "Læs dokumentationen", - "next": "Næste", "prev": "Tilbage", "done": "Færdig", "skip": "Spring over tur", @@ -6325,5 +8253,359 @@ "description": "Skift dit farveskema, sprog, hjemmetavle og præferencer. Du kan også gå til administrationsområdet herfra." } } + }, + "metadata": { + "description": "Et selv-hosted dashboard til * arr stakken og hele dit hjemland. Integrerer med 50 + tjenester, real-time widgets, ingen config filer.", + "dashboardTitle": "{appName} Kontrolpanel" + }, + "assistant": { + "title": "Assistent", + "open": "Åbn Assistent", + "close": "Luk assistent", + "minimize": "Minimér assistent", + "spotlight": "Spørg Assistent", + "spotlightDescription": "Skriv og send en prompt uden at forlade kommandomenuen.", + "spotlightPrompt": { + "title": "Spørg Assistent", + "description": "Skriv en prompt ovenfor. Indtast sender den i baggrunden.", + "send": "Send prompt", + "empty": "Skriv en prompt ovenfor" + }, + "unavailable": { + "checking": "Kontrollerer om assistenten er tilgængelig…", + "error": "Adgangen til assistenten kunne ikke kontrolleres. Prøv igen.", + "notConfigured": "En administrator skal først konfigurere og aktivere assistenten.", + "signIn": "Log ind for at bruge Assistant." + }, + "newConversation": "Ny samtale", + "conversations": "Samtaler", + "conversationActions": "Samtale handlinger", + "searchConversations": "Søg i samtaler", + "noMatchingConversations": "Ingen matchende samtaler", + "moreActions": "Flere svar handlinger", + "renameConversation": { + "action": "Omdøb", + "label": "Samtale navn", + "save": "Gem navn", + "failedTitle": "Samtale kunne ikke omdøbes", + "failedDescription": "Homarr kunne ikke omdøbe denne samtale. Prøv igen." + }, + "deleteConversation": { + "title": "Slet samtale?", + "description": "“{title}” og dens meddelelser vil blive slettet permanent.", + "failedTitle": "Samtalen kunne ikke slettes", + "failedDescription": "Homarr kunne ikke slette denne samtale. Prøv igen." + }, + "closeHistory": "Luk samtalehistorik", + "openHistory": "Åbn samtalehistorik", + "emptyTitle": "Hvad kan jeg hjælpe med?", + "emptyDescription": "Spørg om din Homarr opsætning, inspicer live instans data, eller godkend handlinger, når du vil have mig til at foretage en ændring.", + "suggestions": { + "health": { + "label": "Tjek service sundhed", + "prompt": "Tjek mine integrationer og opsummerer alt, der kræver opmærksomhed." + }, + "explore": { + "label": "Udforsk min Homarr", + "prompt": "Vis mig, hvad jeg kan se og administrere i denne Homarr instans." + }, + "media": { + "label": "Find medier at anmode om", + "prompt": "Hjælp mig med at finde en film eller serier til at anmode om." + }, + "style": { + "label": "Forbedre et betjeningspanel", + "prompt": "Hjælp mig med at forbedre en tavles udseende eller brugerdefinerede CSS. Vis mig mine tavler først, og bevar derefter mine aktuelle indstillinger, mens vi foretager ændringen." + }, + "designWidget": { + "label": "Design en widget", + "prompt": "Opret og installer en brugerdefineret widget for " + } + }, + "composerPlaceholder": "Spørg Assistent…", + "runtime": { + "model": "Model", + "searchModels": "Søg efter modeller", + "noModels": "Ingen tilgængelige modeller", + "otherModels": "Andre modeller", + "imageInput": "Accepterer billede input", + "thinking": "Tænker tilstand", + "reasoning": { + "auto": "Automatisk", + "none": "Fra", + "minimal": "Minimal", + "low": "Lav", + "medium": "Medium", + "high": "Høj" + } + }, + "providerQuota": { + "title": "Homarr udbyder", + "communityWorkshop": "Community Workshop", + "dailyAllowance": "Daglig anmodning godtgørelse", + "remainingLabel": "{remaining} af {limit} Anmodninger om udbyder", + "loading": "Indlæser Homarr provider allowance", + "signInRequired": "Værkstedslogon kræves for Homarr leverandøren", + "signInDescription": "Log ind med GitHub gennem Community Workshop for at modtage din separate dagpenge.", + "exhaustedDescription": "Din Homarr udbyder kvote bruges til i dag. Det nulstiller ved midnat UTC.", + "unavailableDescription": "Log ind på værkstedet eller vent på, at din Homarr udbyder nulstilles.", + "signIn": "Log ind med GitHub", + "signInError": "GitHub log ind mislykkedes. Prøv igen om et øjeblik.", + "loadError": "Homarr udbyder kvoten kunne ikke indlæses.", + "reset": "Nulstiller {relative} på ", + "toolCalls": "Hver model anmodning og færdige værktøj opkald bruger en anmodning.", + "retry": "Genindlæs kvote", + "level": { + "ok": "OK", + "warning": "Advarsel", + "bad": "Lav", + "dead": "Brugt" + } + }, + "stop": "Stop svar", + "send": "Send besked", + "copy": "Kopiér svar", + "copyMessage": "Kopiér besked", + "editMessage": "Rediger besked", + "updateMessage": "Opdater besked", + "regenerate": "Regenerer svar", + "helpful": "Nyttigt", + "notHelpful": "Ikke hjælpsom", + "readAloud": "Læs svar højt", + "stopReading": "Stop læsning af svar", + "feedbackError": "Din feedback kunne ikke gemmes. Prøv igen.", + "exportMarkdown": "Eksporter som Markdown", + "exportConversation": { + "action": "Eksporter samtale som Markdown", + "failedTitle": "Samtale kunne ikke eksporteres", + "failedDescription": "Homarr kunne ikke indlæse denne samtale. Prøv igen." + }, + "reasoning": "Tænker", + "previousResponse": "Tidligere svar", + "nextResponse": "Næste svar", + "removeAttachment": "Fjern vedhæftet fil", + "downloadFile": "Download {name}", + "attachedImage": "Vedhæftet billede", + "externalImageBlocked": "Eksternt billede blokeret for privatlivets fred", + "image": { + "loading": "Indlæser billede", + "failed": "Dette billede kunne ikke indlæses.", + "retry": "Prøv billede igen" + }, + "quoteSelection": "Tilbud", + "dismissQuote": "Fjern tilbud", + "attachments": { + "add": "Vedhæft et billede eller dokument", + "errorTitle": "Vedhæftning kunne ikke tilføjes", + "imageUnsupported": "Den valgte model understøtter ikke billedinput." + }, + "mentions": { + "menu": "Tilføj Homarr kontekst", + "context": "Kontekst", + "app": "Apps", + "integration": "Integrationer", + "board": "Tavler", + "widget": "Widgets", + "tools": "Tilgængelige værktøjer" + }, + "markdown": { + "diagram": "Diagram", + "renderingDiagram": "Gengiver diagram…", + "diagramUnavailable": "Dette diagram kunne ikke gengives." + }, + "commands": { + "menu": "Assistente kommandoer", + "health": "Forbered en service sundhedstjek", + "explore": "Forbered en oversigt over denne Homarr instans", + "media": "Forbered en mediesøgning", + "style": "Forbered en tavle udseende eller brugerdefinerede CSS ændring", + "designWidget": "Forbered en one-prompt brugerdefineret widget build" + }, + "usage": { + "tokens": "tokens", + "contextWindow": "Sammenhængs vindue", + "requestDetails": "Anmod om detaljer", + "used": "Seneste trin", + "remaining": "Resterende", + "capacity": "Kapacitet", + "input": "Input", + "output": "Output", + "cached": "Cachelagret input", + "cacheWrite": "Cache skriv", + "reasoning": "Begrundelse", + "inputShort": "er", + "outputShort": "ud", + "cachedShort": "cachet", + "reasoningShort": "ræsonnement", + "firstOutput": "Første output", + "homarrTiming": "Homarr observeret", + "endToEnd": "Slut til slut", + "observedThroughput": "Observeret gennemløb", + "providerTiming": "Udbyder rapporteret", + "loadingProviderDetails": "Indlæser generationsdetaljer…", + "providerDetailsPending": "OpenRouter behandler stadig nogle generationsdetaljer. Genåbn for at prøve igen.", + "providerLatency": "Udbyder ventetid", + "generationTime": "Generation tid", + "moderationLatency": "Moderation", + "providerThroughput": "Udbyder gennemløb", + "fallbacks": "Fallbacks", + "fallbackLatency": "Tilbagefald latenstid", + "cacheDiscount": "Cache rabat", + "normalizedTokens": "OpenRouter normaliseret input / output", + "byok": "BYOK", + "cost": "Omkostning", + "reported": "Rapporteret af udbyder", + "estimated": "Anslået fra modelpriser", + "upstreamCost": "Upstream inferens", + "webSearches": "Websøgninger", + "finishReason": "Årsag til afslutning", + "notReported": "Ikke rapporteret", + "agentSteps": "Agentens trin", + "step": "Trin {number}", + "generation": "Generation" + }, + "toolInput": "Input", + "toolOutput": "Output", + "toolActivity": { + "iconSearch": "Leder du efter “{query}” ikoner", + "iconBrowse": "Tilgængelige ikoner" + }, + "toolNavigation": { + "openPreview": "Åbn forhåndsvisning", + "openWidget": "Åbn widget" + }, + "webSearch": { + "title": "Web- søgning", + "completed": "OpenRouter søgte live web for dette svar.", + "searches": "{count, plural, one {# søgning} other {# søgninger}}", + "sources": "{count, plural, one {# kilde} other {# kilder}}" + }, + "responseError": { + "title": "Assistenten kunne ikke fuldføre", + "description": "Prøv igen. Hvis problemet fortsætter, så bed en administrator om at verificere det konfigurerede modelslutpunkt." + }, + "toolPreparationError": { + "title": "Denne anmodning kunne ikke forberedes", + "description": "Modellen stoppede før den leverede fuldstændige detaljer. Prøv igen eller beskriv anmodningen igen. Der blev ikke foretaget nogen ændring." + }, + "busy": { + "title": "Assistenten arbejder allerede", + "description": "Vent på det aktuelle svar eller åbn det for at stoppe kørslen." + }, + "pendingAction": { + "answerTitle": "Svar nødvendig", + "answerFallback": "Vælg et svar for at fortsætte", + "formTitle": "Gennemgå app-detaljer", + "boardFormTitle": "Gennemgå ændringer i tavlen", + "review": "Gennemgå", + "sendBlocked": "Løs afventende anmodning før afsendelse" + }, + "activity": { + "thinking": "Assistent tænker", + "working": "Arbejd på din prompt", + "ready": "Svar klar", + "completed": "Åbn svaret", + "approval": "Nødvendig godkendelse", + "failed": "Assistent behøver opmærksomhed", + "expand": "Åbn assistentens svar", + "dismiss": "Afvis assistentaktivitet" + }, + "scrollToLatest": "Rul til seneste", + "refresh": { + "action": "Opdater nuværende visning", + "working": "Opdaterer nuværende visning", + "completeTitle": "Vis opdateret", + "completeDescription": "Synlige Homarr data er blevet genindlæst.", + "failedTitle": "Visningen kunne ikke opdateres", + "failedDescription": "Ændringen kan stadig gemmes. Prøv at opdatere handlingen igen." + }, + "askUser": { + "preparing": "Forbereder spørgsmål", + "answered": "Dit svar", + "other": "Andet", + "otherLabel": "Dit svar", + "otherPlaceholder": "Indtast et andet svar…", + "submit": "Send svar", + "cancelOther": "Annuller andet svar", + "optionKind": { + "affirmative": "Bekræft", + "negative": "Afvis", + "alternative": "Valgmulighed", + "custom": "Tilpasset" + } + }, + "configureApp": { + "title": "Gennemgå app-detaljer", + "description": "Vælg et lokalt ikon og juster alt før assistenten anmoder om oprettelsesgodkendelse.", + "preparing": "Forbereder app-detaljer", + "continue": "Brug disse detaljer", + "ready": "App detaljer klar", + "automaticContinue": "Brug af disse app-oplysninger automatisk" + }, + "configureBoardSettings": { + "title": "Gennemgå ændringer i tavlen", + "loading": "Indlæser aktuelle tavleindstillinger", + "loadErrorTitle": "Board indstillinger kunne ikke indlæses", + "loadErrorDescription": "Bestyrelsen eksisterer muligvis ikke længere, eller du har muligvis ikke tilladelse til at ændre den.", + "proposedCount": "Assistent foreslåede {count} felter", + "changeCount": "{count} ændringer klar", + "ready": "Brætændringer klar", + "cancelled": "Aktuelle tavleindstillinger bevaret", + "noChanges": "Ingen indstillinger vil ændre", + "keepCurrent": "Behold aktuelle indstillinger", + "continue": "Fortsæt til godkendelse", + "automaticContinue": "Accept af de foreslåede bestyrelsesændringer automatisk", + "resetAll": "Nulstil alle ændringer", + "tabs": { + "css": "Custom CSS", + "appearance": "Udseende", + "background": "Baggrund", + "general": "Generelt" + }, + "cssDescription": "Redigér hele stilarket. Eksisterende regler beholdes med mindre de fjernes her.", + "cssCharacters": "{count} af 16384 tegn", + "copyCss": "Copy CSS", + "copied": "Kopieret", + "restoreCss": "Restore current CSS", + "remoteCssTitle": "Denne CSS indlæser en ekstern ressource", + "remoteCssDescription": "Importerede stylesheets og eksterne URL'er kontakte en anden server, når tavlen indlæses. Gennemgå dem, før du fortsætter." + }, + "configureWidget": { + "title": "Gennemgå widget", + "preparing": "Forbereder widget-indstillinger", + "review": "Gennemgå widget og integrationer", + "ready": "Widget konfiguration klar", + "cancelled": "Widget blev ikke tilføjet", + "automaticContinue": "Accepterer den foreslåede widget-konfiguration automatisk", + "definitionLoadErrorTitle": "Widget-indstillinger kunne ikke indlæses", + "definitionLoadErrorDescription": "Homarr kunne ikke indlæse denne widget's indstillinger. Prøv igen.", + "loadErrorTitle": "Integrationer kunne ikke indlæses", + "loadErrorDescription": "Homarr kunne ikke indlæse integrationer som er tilgængelige for denne widget.", + "noIntegrationTitle": "En kompatibel integration er påkrævet", + "noIntegrationDescription": "Konfigurere en integration understøttet af denne widget før du tilføjer den til instrumentbrættet.", + "connectIntegration": "Tilslut tjeneste", + "manageIntegrations": "Administrer integrationer", + "skip": "Tilføj ikke", + "errorTitle": "Widget-indstillinger kunne ikke forberedes", + "errorDescription": "Modellen gav ikke en komplet widget konfiguration. Ingen widget blev tilføjet." + }, + "approvalRequired": "Godkendelse kræves", + "complete": "Complete", + "denied": "Afvist", + "failed": "Mislykket", + "working": "Arbejder", + "approvalDescription": "Gennemgå denne ændring før den kører.", + "approveAndRun": "Godkend og køre", + "deny": "Afvis", + "autoApproval": { + "label": "Automatiske godkendelser", + "composerLabel": "Godkend for mig", + "title": "Automatiske godkendelser", + "description": "Forbered formularerne automatisk og godkend beskyttede ændringer til denne samtale. Spørgsmål venter stadig på dit svar, og dine Homarr tilladelser gælder. Dette slukker når du skifter samtaler.", + "enable": "Aktiver for denne samtale", + "disable": "Slå automatiske godkendelser fra", + "enabled": "Automatiske godkendelser er slået til", + "approving": "Godkender automatisk" + } } } diff --git a/packages/translation/src/lang/de-CH.json b/packages/translation/src/lang/de-CH.json index e81cff73f..a0348c241 100644 --- a/packages/translation/src/lang/de-CH.json +++ b/packages/translation/src/lang/de-CH.json @@ -1,156 +1,246 @@ { "init": { - "step": { - "start": { - "title": "Willkomme zu Homarr", - "subtitle": "Lass uns mit der Einrichtung deiner Homarr-Instanz beginnen.", - "description": "Um loszulegen, wähle bitte wie du deine Homarr Instanz einrichten möchtest.", - "action": { - "scratch": "Vo vorne starte", - "importOldmarr": "Importiärä us Homarr vor 1.0", - "restoreSqlite": "Aus SQLite-Backup wiederherstellen", - "restoreSqliteDescription": "Laden Sie eine vollständige SQLite-Datenbanksicherung von einer früheren Homarr-Instanz hoch. Dadurch werden alle Boards, Benutzer, Apps, Integrationen und Einstellungen wiederhergestellt.", - "backToOptions": "← Zurück zu den Einrichtungsoptionen" + "studio": { + "navigationLabel": "Onboarding-Abschnitte", + "back": "Zurück", + "buildBoard": "Mein Board erstellen", + "common": { + "unknownError": "Etwas ist schiefgelaufen. Deine Auswahl ist noch vorhanden. Versuche es erneut." + }, + "claim": { + "checking": "Diese Onboarding-Sitzung wird gesichert …", + "checkingTitle": "Sichere Einrichtung wird vorbereitet", + "lockedTitle": "Die Einrichtung ist in einem anderen Browser geöffnet", + "lockedDescription": "Setze sie dort fort oder warte, bis die sichere Sitzung für die Ersteinrichtung abgelaufen ist, bevor du es erneut versuchst.", + "signInTitle": "Anmeldung als Administrator erforderlich", + "signInDescription": "Ein Administrator ist bereits vorhanden. Melde dich an, um die Einrichtung fortzusetzen, ohne Anmeldedaten oder den Zugriff auf Dienste offenzulegen.", + "signIn": "Anmelden und fortsetzen", + "errorTitle": "Die Einrichtung konnte nicht gesichert werden", + "errorDescription": "Lade die Seite neu, um die sichere Sitzung für die Ersteinrichtung erneut zu starten." + }, + "navigation": { + "essentials": "Grundlagen", + "discover": "Entdecken", + "connect": "Verbinden", + "board": "Übersicht", + "extend": "Erweitern", + "review": "Überprüfen" + }, + "welcome": { + "title": "Willkommen zu Hause.", + "description": "Willkommen bei Homarr v{version}. Wir führen dich durch die Grundlagen und helfen dir, dein erstes Board zu erstellen.", + "start": "Erste Schritte", + "restore": "Backup wiederherstellen", + "restoreTitle": "Aus Backup wiederherstellen", + "restoreDescription": "Ein vollständiges SQLite-Backup stellt Boards, Personen, Apps, Integrationen und Einstellungen wieder her. Homarr überprüft es, bevor etwas ersetzt wird.", + "errorTitle": "Die Einrichtung konnte nicht gestartet werden", + "errorDescription": "Deine Auswahl für die Einrichtung ist noch vorhanden. Versuche es erneut oder lade die Seite neu, wenn das Problem weiterhin besteht." + }, + "account": { + "title": "Administrator erstellen", + "description": "Gib z Zugangsdate für di Administrator benutzer ah.", + "username": "Benutzername des Administrators", + "passwordHint": "Erforderlich sind nur mindestens 8 Zeichen. Die übrigen Prüfungen der Passwortstärke sind Empfehlungen.", + "create": "Administrator erstellen", + "errorTitle": "Der Administrator konnte nicht erstellt werden", + "recoveryTitle": "Administratorkonto erstellt", + "recoveryDescription": "Die automatische Anmeldung wurde nicht abgeschlossen. Melde dich mit den soeben erstellten Administrator-Anmeldedaten an, um die Einrichtung fortzusetzen.", + "recoveryAction": "Anmelden und fortsetzen", + "unknownError": "Der Administrator konnte nicht erstellt werden." + }, + "externalGroup": { + "title": "Administratorgruppe verbinden", + "description": "Verwende den exakten Gruppennamen, der von LDAP oder OIDC übermittelt wird. Mitglieder dieser Gruppe erhalten Administratorzugriff.", + "name": "Externe Administratorgruppe", + "nameDescription": "Dabei wird zwischen Gross- und Kleinschreibung unterschieden. Der Name muss mit deinem Identitätsanbieter übereinstimmen.", + "continue": "Gruppe speichern und fortsetzen", + "errorTitle": "Die Gruppe konnte nicht gespeichert werden", + "unknownError": "Die Administratorgruppe konnte nicht gespeichert werden." + }, + "essentials": { + "title": "Mit vertrauten Standardeinstellungen beginnen", + "description": "Lege zuerst Sprache und Erscheinungsbild fest, die alle sehen, und teile Homarr anschliessend das von deinen Diensten verwendete Adressmuster mit.", + "language": "Standardsprache", + "theme": "Standarddesign", + "themeAuto": "Systemeinstellungen", + "themeLight": "Hell", + "themeDark": "Dunkel", + "serverOriginHelp": "Homarr verwendet diese Adresse, um erkannte Dienst-URLs vorauszufüllen. Du kannst jeden Dienst weiterhin einzeln bearbeiten.", + "serverDescription": "Dies ist eine Abkürzung, keine Einschränkung. Jeder erkannte Dienst kann weiterhin bearbeitet werden.", + "serverOrigin": "Domain, IP-Adresse oder Reverse-Proxy-Pfad", + "serverOriginDescription": "Beispiele: home.lan, 192.168.1.10 oder https://home.example.com/services. Wähle unten aus, wie jeder Dienst angehängt wird.", + "analytics": "Anonyme Produktanalysen teilen", + "analyticsDescription": "Hilft Homarr, die Zuverlässigkeit von Funktionen zu verbessern. Es werden keine Dienst-Anmeldedaten oder Dashboard-Inhalte gesendet." + }, + "discover": { + "title": "Sieh, worauf diese Installation tatsächlich zugreifen kann", + "description": "Homarr prüft die verfügbaren Funktionen direkt. Ein fehlender Docker-Socket oder Kubernetes-Kontext verhindert niemals eine manuelle Einrichtung.", + "database": "Datenbank", + "docker": "Docker- und kompatible Sockets", + "kubernetes": "Kubernetes", + "assistantWorkshop": "Assistant und Workshop", + "found": "{integrations} Integrationen und {apps} zusätzliche Apps gefunden", + "retryKubernetes": "Kubernetes erneut prüfen", + "retryWorkshop": "Workshop erneut prüfen", + "unknownVersion": "unbekannte Version", + "kubernetesAvailable": "Mit Kubernetes {version} verbunden", + "kubernetesDisabled": "Nicht aktiviert; mit Docker oder manuellen Diensten fortfahren", + "kubernetesUnavailable": "Kubernetes ist aktiviert, kann aber von diesem Homarr-Prozess aus nicht erreicht werden", + "workshopAvailable": "Die Community-Workshop- und gehosteten Assistant-Dienste sind erreichbar", + "workshopUnavailable": "Lokale und benutzerdefinierte Assistant-Anbieter bleiben verfügbar", + "partialTitle": "Einige Quellen konnten nicht gescannt werden", + "partialDescription": "Ergebnisse von erreichbaren Hosts bleiben erhalten. Überprüfe die Socket-Berechtigungen oder füge im nächsten Abschnitt Dienste manuell hinzu.", + "status": { + "checking": "Verfügbarkeit wird geprüft …", + "available": "Verfügbar", + "partial": "Teilweise verfügbar", + "empty": "Erreichbar, keine passenden laufenden Dienste", + "disabled": "Durch die Serverkonfiguration deaktiviert", + "unavailable": "Von diesem Homarr-Prozess aus nicht verfügbar" } }, - "import": { - "title": "Date importiärä", - "subtitle": "Du casch date us ere existierende Homarr Instanz importiere.", - "dropzone": { - "title": "Zieh e ZIP-Datei hiä ane oder klick druf um z durchsueche", - "description": "Die uechegladeni ZIP Datei wird verarbeitet und du wirsch chönnä uswähle, was importiere wotsch" + "connect": { + "title": "Verbinde, was das Board nützlich macht", + "description": "Wähle mehrere Dienste gleichzeitig aus. Docker-Labels haben Priorität, die Zuordnung anhand von Images schliesst Lücken, und jede URL sowie jedes Zugangsdaten bleibt überprüfbar.", + "discoveredIntegrations": "Erkannte Integrationsinstanzen ({count})", + "detectedIntegrationLabel": "{name} importieren, erkannt als {kind}", + "detectedAppLabel": "Erkannte App {name} importieren", + "otherIntegrations": "Weitere Integration hinzufügen", + "configureIntegrations": "Integrationen konfigurieren", + "discoveredApps": "Erkannte Apps ({count})", + "appAddressRequired": "Füge eine Adresse für {name} hinzu oder entferne die App aus der Auswahl.", + "empty": "Keine Integrationen ausgewählt. Homarr erstellt trotzdem ein nützliches Startboard mit allgemeinen Widgets.", + "dockerSource": "Docker", + "manualSource": "Manuell", + "url": "Dienst-URL", + "noCredentials": "Keine Zugangsdaten", + "noCredentialsDescription": "Diese Integration benötigt keine Zugangsdaten.", + "credentialMethod": "Methode für Zugangsdaten", + "getApiKey": "API-Key-Einstellungen für diesen Dienst öffnen", + "openGuide": "Homarr-Einrichtungsanleitung für diesen Dienst öffnen", + "testConnection": "Verbindung testen", + "testSuccess": "Verbindung funktioniert", + "testSuccessDescription": "Homarr wurde mit der aktuellen Adresse und den Zugangsdaten verbunden.", + "testError": "Verbindungsaufbau fehlgeschlagen", + "testErrorDescription": "Überprüfe die Dienstadresse und die Zugangsdaten und versuche es erneut.", + "needsConfiguration": "Konfiguration erforderlich", + "tested": "Verbindung getestet", + "testFailed": "Verbindungstest fehlgeschlagen", + "incompleteConfirmation": "Nicht abgeschlossene Integrationen werden übersprungen. Ohne sie fortfahren?" + }, + "board": { + "title": "Gestalte das Board, bevor es erstellt wird", + "description": "Homarr erstellt geschützte Mobile- und Basislayouts und platziert anschliessend Apps sowie kompatible Widgets der von dir ausgewählten Dienste.", + "target": "Zu konfigurierendes Board", + "targetDescription": "Wähle das bestehende Board aus, das durch diese Einrichtung aktualisiert werden soll.", + "targetPlaceholder": "Board auswählen", + "targetRequired": "Wähle das zu konfigurierende Board aus, bevor du fortfährst.", + "name": "Board Name", + "nameDescription": "Wird in der Board-URL verwendet; nur Buchstaben, Zahlen, Bindestriche und Unterstriche.", + "nameRequired": "Gib einen Board-Namen ein, bevor du fortfährst.", + "primaryColor": "Primärfarbe", + "secondaryColor": "Sekundärfarbe", + "resetColors": "Farben zurücksetzen", + "radius": "Eckenradius der Widgets", + "radiusOptions": { + "xs": "Eng", + "sm": "Dezent", + "md": "Ausgewogen", + "lg": "Abgerundet", + "xl": "Sanft" }, - "fileInfo": { - "action": { - "change": "Datei ändere" - } + "columns": "Board-Spalten", + "columnsDescription": "Spalten definieren das horizontale Raster, das zur Grössenbestimmung und Positionierung von Elementen verwendet wird. 12 sind für die meisten ausreichend.", + "columnCount": "{count, plural, one {# Spalte} other {# Spalten}}", + "leftSidebar": "Linke Seitenleiste", + "rightSidebar": "Rechte Seitenleiste", + "previewLabel": "Live-Vorschau des ersten Board-Layouts" + }, + "extend": { + "title": "Erweiterte Funktionen", + "tabsLabel": "Assistant-, Workshop- und MCP-Einrichtung", + "assistant": "Assistent", + "workshop": "Werkstatt", + "assistantSetup": { + "loginTitle": "Anmeldung als Administrator erforderlich", + "loginDescription": "Anbieter-Schlüssel und der Zugriff auf Modelle sind privilegiert. Schliesse die Einrichtung ab und melde dich an. Homarr öffnet direkt die Assistant-Konfiguration.", + "loginAction": "Anmelden, um den Assistant zu konfigurieren" }, - "importSettings": { - "title": "Istellige importiere", - "description": "Import verhalte konfiguriere" + "workshopSetup": { + "title": "Homarr-Werkstatt", + "description": "Durchsuche Community-Custom-Widgets, prüfe deren angeforderte Berechtigungen, installiere sie und veröffentliche deine eigenen Arbeiten, ohne Code zwischen Servern zu kopieren.", + "available": "Verfügbar", + "checking": "Wird geprüft …", + "unavailable": "Nicht verfügbar", + "discoverTitle": "Entdecken", + "discoverDescription": "Finde Widgets, die für echte selbst gehostete Workflows entwickelt wurden.", + "installTitle": "Überprüfen und installieren", + "installDescription": "Sieh dir Metadaten und Konfiguration an, bevor du etwas hinzufügst.", + "publishTitle": "Teilen", + "publishDescription": "Veröffentliche wiederverwendbare Widgets für die Community.", + "browse": "Workshop durchsuchen" }, - "boardSelection": { - "title": "{count} boards gfunge", - "description": "Wähl alli boards, mit dr grössi wo de wotsch importiere, us", - "action": { - "selectAll": "Alli uswähle", - "unselectAll": "Gesamte Auswahl aufheben" - } - }, - "summary": { - "title": "Import zämäfassig", - "description": "Ir zämäfassig unge gsehsch, was importier wird", - "action": { - "import": "Bestätige und witer" - }, - "entities": { - "apps": "Apps", - "boards": "Boads", - "integrations": "Integratione", - "credentialUsers": "Benutzer mit Zugangsdaten" - } - }, - "tokenModal": { - "title": "Import token igäh", - "field": { - "token": { - "label": "Token", - "description": "Gib z import token vo dire vorherige Homarr Instanz ah" - } - }, - "notification": { - "error": { - "title": "Invalids token", - "message": "Z token wo de hesch agäh isch invalid" - } - } + "mcpSetup": { + "title": "Homarr MCP", + "description": "Verbinde Claude, Codex oder einen anderen MCP-Client mit den typisierten Tools von Homarr. API-Schlüssel sorgen dafür, dass der Zugriff explizit und widerrufbar bleibt.", + "endpoint": "Streambares HTTP-Ende", + "keyTitle": "Kopiere diesen Schlüssel jetzt", + "keyDescription": "Aus Sicherheitsgründen kann Homarr diesen API-Schlüssel nicht noch einmal anzeigen.", + "copyKey": "API-Schlüssel kopieren", + "createKey": "MCP-API-Schlüssel erstellen", + "errorTitle": "MCP-API-Schlüssel konnte nicht erstellt werden", + "loginRequired": "Melde dich nach der Einrichtung als Administrator an, um einen API-Schlüssel zu erstellen.", + "configuration": "Client-Konfiguration", + "copy": "Konfiguration kopieren", + "copied": "Kopiert", + "advanced": "MCP-Tools, Berechtigungen und Einrichtungsdetails öffnen" } }, - "user": { - "title": "Administrator benutzer", - "subtitle": "Gib z Zugangsdate für di Administrator benutzer ah.", - "notification": { - "success": { - "title": "Benutzer ersteut", - "message": "Dr Benutzer isch erfougrich ersteut worde" - }, - "error": { - "title": "Benutzerersteuig isch fehlgschlagge" - } - } - }, - "group": { - "title": "Externi Gruppe", - "subtitle": "Gib d gruppe ah wo für externi Benutzer verwendet werde söu", - "form": { - "name": { - "label": "Guppename", - "description": "Name muss mit der Admin-Gruppe des externen Anbieters übereinstimmen" - } - } - }, - "settings": { - "title": "Istellige", - "subtitle": "Serveristellige apasse." - }, - "integrations": { - "title": "Integrationen", - "subtitle": "Wählen Sie die von Ihnen verwendeten Dienste aus.", - "description": "Wählen Sie die Integrationen aus, die Sie verbinden möchten. Ihr Dashboard wird automatisch mit passenden Widgets eingerichtet.", - "action": { - "continue": "Fortfahren", - "skip": "Vorerst überspringen" - }, - "configure": { - "progress": "{current} von {total}", - "skip": "Diese Integration überspringen", - "finishing": "Dashboard wird eingerichtet ...", - "error": { - "title": "Einrichtung fehlgeschlagen", - "message": "Beim Einrichten Ihres Dashboards ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut." - }, - "helpers": { - "tooltip": "URL-Helfer", - "description": "Diese Helfer versuchen, die URL Ihrer Dienste zu erraten. Wenn dies nicht funktioniert, geben Sie die Adresse einfach manuell ein." - } - }, - "urlTemplate": { - "label": "Basis-URL", - "placeholder": "homelab.local oder 192.168.1.1", - "hint": "Geben Sie Ihre Basisdomain oder IP-Adresse ein, um Integrations-URLs automatisch auszufüllen", - "warning": "Wenn Sie jetzt Ihre Basis-URL festlegen, werden alle Integrations-URLs automatisch ausgefüllt, wodurch Sie bei der Einrichtung Zeit sparen", - "preview": "z. B. {example}", - "mode": { - "subdomain": "Subdomain", - "hostPort": "Host:Port" - } - }, - "docker": { - "detected": "Docker hat {count} Dienste erkannt", - "detectedBreakdown": "{integrations} Integrationen · {apps} Apps", - "summary": "Homarr hat {apps} Apps erkannt, von denen {integrations} über integrierte Integrationen verfügen", - "appBadge": "Anwendung", - "appSectionLabel": "Apps, die dem Dashboard hinzugefügt werden sollen ({count} ausgewählt)", - "scanning": "Docker wird durchsucht ...", - "scanningDescription": "Suche nach laufenden Containern auf Ihrem System" + "review": { + "title": "Ein Board, rund um deine Dienste", + "description": "Homarr testet nicht gespeicherte Verbindungen, importiert die ausgewählten Apps, wendet Erscheinungsbild und Layouts an und öffnet anschliessend genau das konfigurierte Board.", + "board": "Erstes Board", + "columns": "Board-Spalten", + "columnsValue": "{count, plural, one {# Spalte} other {# Spalten}}", + "sidebars": "Seitenleisten", + "sidebarsValue": "{count, plural, =0 {Keine} one {# Seitenleiste} other {# Seitenleisten}}", + "layouts": "Reaktive Layouts", + "layoutsValue": "Mobil + Basis", + "integrations": "Integratione", + "integrationsValue": "{count, plural, =0 {Keine ausgewählt} one {# Integration} other {# Integrationen}}", + "apps": "App-Kacheln", + "appsValue": "{count, plural, =0 {Nur Starter-Apps} one {# App-Kachel} other {# App-Kacheln}}", + "language": "Sprache", + "theme": "Design", + "themeAuto": "Systemeinstellung", + "themeLight": "Hell", + "themeDark": "Dunkel", + "colors": "Board-Farben", + "radius": "Widget-Radius", + "automaticTitle": "Was Homarr erstellt", + "automaticDescription": "Kompatible Widgets, Symbole, App-Links, Integrationsbeziehungen und responsive Platzierung stammen aus dem gemeinsamen Homarr-Katalog. Du kannst jedes Ergebnis später bearbeiten.", + "dockerWarningTitle": "Einige Docker-Labels wurden während der Einrichtung geändert", + "dockerWarningDescription": "{count, plural, one {# ausgewähltes Docker-Ergebnis konnte nicht angewendet werden, weil sich der Dienst geändert hat, ein anderes Board als Ziel hatte oder das Widget inkompatibel war} other {# ausgewählte Docker-Ergebnisse konnten nicht angewendet werden, weil sich Dienste geändert haben, ein anderes Board als Ziel hatten oder ihre Widgets inkompatibel waren}}.", + "errorTitle": "Board konnte nicht erstellt werden", + "progress": { + "applying": "Verbindungen werden getestet und dein Board wird erstellt", + "done": "Dein Board ist bereit" } }, "finish": { - "title": "Irichtig abschliesse", - "subtitle": "Du bisch startklar!", - "description": "Du hast die Einrichtung erfolgreich abgeschlossen. Du kannst jetzt mit der Nutzung von Homarr beginnen. Wähle deine nächste Aktion:", - "action": { - "goToBoard": "Gehe zu {name} Board", - "createBoard": "Erstelle dein erstes Board", - "inviteUser": "Andere Benutzer einladen", - "docs": "Lese die Dokumentation" - } + "title": "Dein erstes Board ist bereit.", + "description": "Homarr hat die von dir ausgewählten Elemente verbunden und den Rest bearbeitbar gelassen. Öffne jetzt das Board. Die kurze Tour im Produkt zeigt dir den Bearbeitungsmodus, Widgets, Layouts und die Suche.", + "openBoard": "Mein Board öffnen", + "manageTitle": "Verwalten", + "manageDescription": "Optimiere Apps, Integrationen, Boards, Benutzer und Servereinstellungen.", + "workshopTitle": "Werkstatt", + "workshopDescription": "Entdecke und installiere Custom-Widgets aus der Community.", + "docsTitle": "Homarr kennenlernen", + "docsDescription": "Lies die fokussierten Anleitungen zu Boards, Widgets, Integrationen und Tools." } - }, - "backToStart": "Zurück zum Anfang" + } }, "user": { - "title": "Benutzer", "name": "Benutzer", "page": { "login": { @@ -159,12 +249,10 @@ }, "invite": { "title": "Homarr beitreten", + "titleWithAppName": "{appName} beitreten", "subtitle": "Willkommen bei Homarr! Bitte erstelle dein Konto", + "subtitleWithAppName": "Willkommen bei {appName}! Bitte erstelle dein Konto", "description": "Du wurdest von {username} eingeladen" - }, - "init": { - "title": "Neue Homarr Installation", - "subtitle": "Bitte erstelle den initialen Administrator" } }, "field": { @@ -192,12 +280,17 @@ "previousPassword": { "label": "Vorheriges Passwort" }, - "homeBoard": { - "label": "Home Board" - }, "pingIconsEnabled": { "label": "Symbole für Pings verwenden" }, + "byteUnitSystem": { + "label": "Einheiten für Datengrössen", + "description": "Wähle aus, wie Homarr Byte-Grössen und Byte-Raten anzeigt. Bit-Raten verwenden immer Dezimaleinheiten.", + "options": { + "binary": "Binär", + "decimal": "Dezimal" + } + }, "enableRightClickOnWidgets": { "label": "Rechtsklick auf Widgets aktivieren", "description": "Das Kontextmenü von Homarr beim Rechtsklick auf ein Widget anzeigen. Deaktivieren, um das Standardmenü des Browsers zu verwenden (z. B. \"Link in neuem Tab öffnen\")." @@ -247,7 +340,6 @@ } } }, - "create": "Benutzer erstellen", "changePassword": { "label": "Passwort ändern", "notification": { @@ -259,56 +351,6 @@ } } }, - "changeHomeBoard": { - "notification": { - "success": { - "message": "Hauptboard erfougrich gwächselt" - }, - "error": { - "message": "Homeboard het nid chönne gwächselt werde" - } - } - }, - "changeSearchPreferences": { - "notification": { - "success": { - "message": "Suechistellige erfolgrich gwechselt" - }, - "error": { - "message": "D Suechistellige hei nid chönne gwechselt werde" - } - } - }, - "changeFirstDayOfWeek": { - "notification": { - "success": { - "message": "Erst Tag vor Wuche erfougrich gändert" - }, - "error": { - "message": "Konnte den ersten Wochentag nicht ändern" - } - } - }, - "changePingIconsEnabled": { - "notification": { - "success": { - "message": "Ping Icons erfolgreich umgeschaltet" - }, - "error": { - "message": "Konnte Ping-Icons nicht umschalten" - } - } - }, - "changeDdgBangs": { - "notification": { - "success": { - "message": "DuckDuckGo-Bangs erfolgreich umgeschaltet" - }, - "error": { - "message": "DuckDuckGo-Bangs konnten nicht umgeschaltet werden" - } - } - }, "manageAvatar": { "changeImage": { "label": "Biud wächsle", @@ -338,16 +380,6 @@ } } }, - "editProfile": { - "notification": { - "success": { - "message": "Profiu erfougrich aktualisiert" - }, - "error": { - "message": "Profiu het nid chönne aktualisiert werde" - } - } - }, "delete": { "label": "Benutzer dauerhaft löschen", "description": "Löscht diesen Benutzer einschließlich seiner Einstellungen. Wird keine Boards löschen. Benutzer wird nicht benachrichtigt.", @@ -356,18 +388,13 @@ "select": { "label": "Benutzer uswähle", "notFound": "Ke Benutzer gfunge" - }, - "transfer": { - "label": "Nöie Bsitzer uswähle" } } }, "group": { - "title": "Gruppe", "name": "Gruppe", "search": "Gruppe sueche", "field": { - "name": "Name", "members": "Mitglider", "homeBoard": { "label": "Hauptboard", @@ -388,6 +415,19 @@ } } }, + "custom-widget": { + "title": "Benutzerdefinierte Widgets", + "item": { + "manage": { + "label": "Benutzerdefinierte Widgets verwalten", + "description": "Mitglieder dürfen Definitionen benutzerdefinierter Widgets erstellen, bearbeiten und löschen" + }, + "secret-write": { + "label": "Geheimnisse benutzerdefinierter Widgets konfigurieren", + "description": "Mitglieder und ihre API-Schlüssel dürfen verschlüsselte Anmeldedaten für benutzerdefinierte Widgets festlegen" + } + } + }, "app": { "title": "Apps", "item": { @@ -493,6 +533,35 @@ "description": "Mitgliedern das Verwalten und Löschen von Suchmaschinen erlauben" } } + }, + "matrix": { + "none": "Kein Zugriff", + "impliedHint": "Gewährt auch: {permissions}", + "grantedViaAdmin": "Administratoren haben diese Berechtigung bereits. Setze «Administrator» auf «Kein Zugriff», um sie separat zu konfigurieren.", + "preset": { + "label": "Voreinstellungen", + "viewer": "Betrachter", + "viewerDescription": "Schreibgeschützt: Boards und Medien anzeigen sowie vorhandene Apps und Integrationen verwenden.", + "editor": "Bearbeiter", + "editorDescription": "Tägliche Verwaltung: Boards, Apps, Integrationen und Suchmaschinen erstellen und bearbeiten.", + "admin": "Administrator", + "adminDescription": "Uneingeschränkter Zugriff auf alle Funktionen und Einstellungen, einschliesslich der Benutzerverwaltung.", + "custom": "Benutzerdefiniert" + }, + "effective": { + "title": "Effektive Berechtigungen", + "description": "Die vollständige, deduplizierte Menge an Aktionen, die Mitglieder dieser Gruppe ausführen können, einschliesslich indirekt gewährter Berechtigungen.", + "empty": "Keine Berechtigungen ausgewählt" + }, + "noneDescription": "Mitglieder haben keinen Zugriff auf diesen Bereich.", + "level": { + "view": "Anzeigen", + "use": "Verwenden", + "interact": "Interagieren", + "modify": "Ändern", + "full": "Vollständig" + }, + "capabilityIncluded": "Bereits in «{level}» enthalten" } }, "memberNotice": { @@ -607,21 +676,24 @@ "search": "App suchen", "page": { "list": { - "title": "Apps", + "ariaLabel": "Konfigurierte Apps", "noResults": { "title": "Noch keine Apps vorhanden", - "action": "Erstelle deine erste App" + "description": "Apps sind Links zu den Diensten und Tools, die du auf deinen Boards verwenden möchtest.", + "action": "Erstelle deine erste App", + "filteredTitle": "Keine Apps entsprechen deiner Suche", + "filteredDescription": "Keine Apps entsprechen «{search}». Versuche es mit einem anderen Namen oder einer anderen URL.", + "createOnlyTitle": "Du kannst nur Apps hinzufügen", + "createOnlyDescription": "Deine Berechtigungen erlauben dir, Apps zu erstellen, aber nicht, vorhandene zu durchsuchen. Bitte einen Administrator um Zugriff auf die App-Verwaltung, um die vollständige Liste zu sehen." } }, "create": { "title": "Neue App", "notification": { "success": { - "title": "Erstellung erfolgreich", "message": "Die App wurde erfolgreich erstellt" }, "error": { - "title": "Erstellung fehlgeschlagen", "message": "Die App konnte nicht angelegt werden" } } @@ -630,11 +702,9 @@ "title": "App bearbeiten", "notification": { "success": { - "title": "Änderungen erfolgreich angewendet", "message": "Die App wurde erfolgreich gespeichert" }, "error": { - "title": "Änderungen konnten nicht angewendet werden", "message": "Die App konnte nicht gespeichert werden" } } @@ -644,26 +714,18 @@ "message": "Sind Sie sicher, dass Sie die App {name} löschen möchten?", "notification": { "success": { - "title": "Löschen erfolgreich", "message": "Die App wurde erfolgreich gelöscht" }, "error": { - "title": "Löschen fehlgeschlagen", "message": "App konnte nicht gelöscht werden" } } } }, "field": { - "name": { - "label": "Name" - }, "description": { "label": "Beschreibung" }, - "url": { - "label": "URL" - }, "useDifferentUrlForPing": { "checkbox": { "label": "Verwend de anders URL für Ping", @@ -678,34 +740,582 @@ "search": "Nach einer App suchen", "noResults": "Keine Ergebnisse", "action": "{app} auswählen", - "title": "Wählen Sie eine App zum Hinzufügen zu diesem Board aus" + "title": "Wählen Sie eine App zum Hinzufügen zu diesem Board aus", + "toggle": "Zum Auswählen klicken", + "selected": "Ausgewählt", + "multiple": "{count} hinzufügen", + "selectedCount": "{count, plural, one {# ausgewählt} other {# ausgewählt}}", + "appsSelected": "{count, plural, one {# App ausgewählt} other {# Apps ausgewählt}}", + "selectMultiple": "Mehrere auswählen", + "cancelMultiple": "Mehrfachauswahl beenden", + "customApplication": "Benutzerdefinierte Anwendung", + "application": "Anwendung" }, "create": { "title": "Neue App erstellen", "description": "Eine neue App erstellen ", "action": "App-Erstellung öffnen" + } + } + }, + "tips": { + "dismiss": "Tipp schliessen", + "multiSelectApps": "Tipp: Halte Ctrl / ⌘ gedrückt, um mehrere Apps gleichzeitig auszuwählen" + }, + "customWidget": { + "secretEntry": { + "title": "API-Quelle konfigurieren", + "description": "Bestätige die Server-URL und gib die Zugangsdaten ein. Geheimniswerte werden von Homarr verschlüsselt und niemals an den anfragenden Agenten zurückgegeben.", + "loading": "Sichere Anfrage wird geladen…", + "applying": "Diese Konfiguration wird angewendet… Lass diese Seite geöffnet.", + "saved": "API-Quelle konfiguriert. Du kannst diese Seite schliessen.", + "unavailable": "Anfrage nicht verfügbar", + "saveError": "API-Quelle konnte nicht konfiguriert werden", + "source": "API-Quelle: {name}", + "baseUrl": "Server-URL", + "networkScope": "Netzwerkzugriff", + "save": "API-Konfiguration speichern", + "expires": "Diese einmalige Anfrage läuft um {time} ab." + }, + "page": { + "list": { + "noResults": "Noch keine benutzerdefinierten Widgets. Erstellen Sie Ihr erstes!", + "noDescription": "Keine Beschreibung", + "enabled": "Aktiviert", + "disabled": "Deaktiviert", + "disabledDescription": "Dieses Widget bleibt konfiguriert, wird aber auf keinem Dashboard geladen.", + "requestCount": "{count, plural, one {# Anfrage} other {# Anfragen}}", + "invalidDefinition": "Ungültige Definition", + "migrationRequired": "Migration erforderlich", + "migrationInstructions": "Öffne «Aktionen», um die ursprüngliche v1-Definition zu kopieren oder zu exportieren und manuell neu zu erstellen. Du kannst auch die Migrationsaufforderung mit einem LLM verwenden. Bestehende Dashboard-Platzierungen funktionieren nach der Migration weiterhin.", + "missingCredentials": "{count, plural, one {Zugangsdaten fehlen} other {# Zugangsdaten fehlen}}", + "missingCredentialsDescription": "{count, plural, one {Für dieses Widget werden noch Zugangsdaten benötigt.} other {Für dieses Widget werden noch # Zugangsdaten benötigt.}} Wähle dieses Abzeichen aus, um die URL und die verschlüsselten Werte zu konfigurieren." }, - "add": "App hinzufügen" + "create": { + "title": "Benutzerdefiniertes Widget erstellen", + "subtitle": "Definieren Sie eine API-URL, die Authentifizierung und die Darstellung der Antwortdaten." + }, + "tabs": { + "ariaLabel": "Bereiche für benutzerdefinierte Widgets", + "installed": "Installiert", + "workshop": "Werkstatt" + } + }, + "action": { + "pasteImportHint": "Füge mit Ctrl+V oder Command+V das vollständige JSON eines benutzerdefinierten Widgets ein", + "delete": "Benutzerdefiniertes Widget löschen", + "deleteConfirm": "Möchtest du „{name}“ wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.", + "export": "Exportieren", + "duplicate": "Duplizieren", + "aiPrompt": "Mit KI entwerfen", + "copyAiPrompt": "KI-Prompt kopieren", + "enable": "Aktivieren", + "disable": "Deaktivieren", + "menu": "Aktionen", + "downloadSkill": "Skill für benutzerdefinierte Widgets anzeigen", + "publishWorkshop": "Im Workshop veröffentlichen", + "migrate": "Benutzerdefiniertes Widget migrieren", + "configureSources": "Quellen konfigurieren", + "copyLegacyDefinition": "Originalinhalt des Widgets kopieren", + "exportLegacyDefinition": "Originalinhalt des Widgets exportieren", + "copyMigrationPrompt": "LLM-Migrationsaufforderung kopieren", + "pasteMigration": "Migriertes Widget einfügen", + "importMigration": "Migrierte JSON-Datei importieren" + }, + "sourceSetupDialog": { + "title": "Widget-Quellen konfigurieren", + "description": "Prüfe, wohin dieses Widget Verbindungen herstellt, und füge verschlüsselte Zugangsdaten hinzu oder ersetze sie.", + "credentialsRequired": "Anfragen schlagen fehl, bis die erforderlichen Zugangsdaten hinzugefügt wurden.", + "save": "Konfiguration speichern" + }, + "field": { + "description": "Beschreibung" + }, + "editor": { + "errorBoundary": { + "title": "Etwas ist schiefgelaufen" + }, + "action": { + "components": "Komponenten", + "format": "Formatieren", + "insertStarter": "Startvorlage einfügen", + "redo": "Wiederholen", + "copied": "Kopiert", + "schema": "Schema" + }, + "reference": { + "minimal": "Minimalbeispiel", + "full": "Vollständiges Beispiel" + }, + "componentReference": { + "search": "Komponenten durchsuchen", + "empty": "Keine passenden Komponenten", + "count": "{count, number} Komponenten verfügbar" + }, + "status": { + "errors": "{count, number} Fehler", + "warnings": "{count, number} Warnungen", + "ready": "Keine Probleme gefunden", + "position": "Z {line, number}, Sp {column, number}", + "characters": "{count, number} Zeichen", + "charactersWithLimit": "{count, number} / {limit, number}" + }, + "diagnostics": { + "title": "Diagnose der Vorlage", + "line": "Zeile {line, number}", + "ast": "{value}", + "bindingTypeConflict": "Die Eingabe «{value}» wird von Steuerelementen mit inkompatiblen Werttypen gemeinsam verwendet.", + "runtimeBindingTypeConflict": "Die Eingabe «{value}» ist sowohl als {firstType} als auch als {secondType} gebunden.", + "dynamicRequestId": "Eine wörtliche requestId ist erforderlich. Dynamische requestIds werden nicht akzeptiert.", + "dynamicInputBinding": "Für bind ist ein wörtlicher Eingabename erforderlich.", + "inlineRequestProps": "Netzwerkkomponenten akzeptieren requestId und params; Inline-Props für URL, Methode, Header und Body sind gesperrt.", + "invalidRequestManifest": "Benannte Anfragen müssen eine gültige Anfragezuordnung sein. {value}", + "missingRequestId": "Diese Netzwerkkomponente erfordert eine wörtliche requestId.", + "templateEmpty": "Gib eine JSX-Vorlage ein.", + "templateTooLong": "Die Vorlage überschreitet das Limit von 50'000 Zeichen.", + "unknownRequest": "Es gibt keine benannte Anfrage mit der ID «{value}»." + } + }, + "workbench": { + "configure": "Konfigurieren", + "sectionNavigation": "Bereiche für benutzerdefinierte Widgets", + "widgetPreview": "Widget-Vorschau", + "generalInformation": "Allgemeine Informationen", + "invalidWidget": "Ungültiges Widget", + "section": { + "general": "Allgemein", + "sources": "API-Quellen", + "requests": "Anfragen", + "options": "Optionen", + "jsx": "JSX-Code", + "preview": "Vorschau" + }, + "status": { + "unsaved": "Nicht gespeicherte Änderungen", + "invalid": "Erfordert Aufmerksamkeit", + "ready": "Bereit" + }, + "saveError": { + "title": "Widget wurde nicht gespeichert", + "description": "Behebe diese Validierungsfehler und speichere erneut.", + "more": "+{count} weitere Fehler werden im Arbeitsbereich angezeigt.", + "errors": "Validierungsfehler", + "copy": "Fehler kopieren", + "copied": "Fehler kopiert" + }, + "action": { + "preview": "Testen und Vorschau anzeigen", + "previewLoading": "Anfragen werden getestet" + }, + "requests": { + "title": "Benannte Abfragen und Aktionen", + "label": "Anfragen", + "description": "Abfragen laden Daten; Aktionen werden erst nach einer Benutzerinteraktion ausgeführt. Für beide Arten ist jede HTTP-Methode gültig." + }, + "options": { + "title": "Widget-Optionen" + }, + "builder": { + "advancedManifest": "Erweitertes Rohmanifest", + "advancedJson": "Erweitertes Manifest-JSON", + "manifestFilename": "widget.json", + "request": "Anfrage {count, number}", + "requestId": "Anfrage-ID", + "type": "Download Client", + "method": "Methode", + "source": "API-Quelle", + "run": "Ausführen", + "runLoad": "Beim Laden des Widgets", + "runManual": "Von SubFetch", + "permission": "Berechtigung", + "path": "Pfad", + "pathDescription": "Verwenden Sie «{option:name}» für Widget-Optionen und «{param:name}» für Aufrufwerte.", + "requestDetails": "Abfrage, Body und Verhalten", + "queryValues": "Abfragewerte", + "queryKey": "Abfrageschlüssel", + "queryKeyInvalid": "Verwenden Sie eine eindeutige ID, die mit einem Buchstaben beginnt und nur Buchstaben, Zahlen, - oder _ enthält.", + "valueSource": "Wertquelle", + "literal": "Literal", + "widgetOption": "Widget-Option", + "invocationParameter": "Aufrufparameter", + "option": "Option", + "parameterName": "Parametername", + "value": "Wert", + "removeQueryValue": "Abfragewert entfernen", + "addQueryValue": "Abfragewert hinzufügen", + "jsonBody": "JSON-Body", + "jsonBodyDescription": "Optional. Fügen Sie auf jeder Verschachtelungsebene Verweise auf $option und $param ein.", + "insertOptionReference": "Optionsverweis einfügen", + "insertParameterReference": "Parameterverweis einfügen", + "confirmation": "Bestätigungstext", + "invalidation": "Nach Erfolg aktualisieren", + "invalidationDescription": "Kommagetrennte Abfrage-IDs", + "noAuth": "Ohne Authentifizierung der Quelle senden", + "moveRequestUp": "Anfrage nach oben verschieben", + "moveRequestDown": "Anfrage nach unten verschieben", + "removeRequest": "Anfrage entfernen", + "addRequest": "Anfrage hinzufügen", + "optionName": "Optionsname", + "label": "Kategorie", + "control": "Steuerung", + "description": "Beschreibung", + "default": "Standard", + "optionDetails": "Einschränkungen und dynamische Auswahlmöglichkeiten", + "minimum": "Minimum", + "maximum": "Maximum", + "step": "Schritt", + "choiceLabel": "Bezeichnung der Auswahlmöglichkeit", + "choiceValue": "Wert der Auswahlmöglichkeit", + "newChoice": "Neue Auswahlmöglichkeit", + "addChoice": "Auswahlmöglichkeit hinzufügen", + "removeChoice": "Auswahlmöglichkeit entfernen", + "choicesRequest": "Auswahlmöglichkeiten aus Anfrage laden", + "itemsPath": "Elementpfad", + "itemsPathPlaceholder": "Elemente (optional)", + "valuePath": "Wertepfad", + "labelPath": "Bezeichnungspfad", + "group": "Gruppe", + "advancedOption": "Erweiterte Option", + "moveOptionUp": "Option nach oben verschieben", + "moveOptionDown": "Option nach unten verschieben", + "removeOption": "Option entfernen", + "addOption": "Option hinzufügen", + "invalidJson": "Ungültiges JSON", + "invalidWidget": "Ungültiges Widget" + }, + "jsx": { + "title": "JSX-Vorlage", + "label": "Vorlage" + }, + "sources": { + "title": "API-Quellen und Zugangsdaten", + "newName": "API {count, number}", + "duplicateSourceId": "Die IDs der API-Quellen müssen eindeutig sein.", + "credentialRemoved": "Zugangsdaten entfernt", + "credentialRemovedDescription": "Der gespeicherte Wert wurde gelöscht.", + "primary": "Primäre API", + "id": "Quellen-ID", + "name": "Job Name", + "baseUrl": "Basis-URL", + "baseUrlError": { + "invalid": "Geben Sie eine vollständige URL ein.", + "protocol": "Verwenden Sie eine HTTP- oder HTTPS-URL.", + "credentials": "Entfernen Sie den Benutzernamen und das Passwort aus dieser URL. Konfigurieren Sie stattdessen unten die Zugangsdaten.", + "queryOrFragment": "Entfernen Sie die Abfragezeichenfolge oder das Fragment aus dieser Basis-URL. Fügen Sie Abfragewerte zu einer benannten Anfrage hinzu." + }, + "networkScope": "Netzwerkzugriff", + "authentication": "Authentifizierung", + "headerName": "Headername", + "queryParameter": "Abfrageparameter", + "configured": "Konfiguriert — geben Sie einen Ersatz ein", + "clear": "Klar", + "remove": "Quelle und ihre Anfragen entfernen", + "advanced": "Erweitert", + "add": "Weitere API-Quelle hinzufügen", + "sourceType": "Integration", + "manualSource": "HTTP-API", + "existingIntegration": "Bestehende Integration", + "integrationType": "Integrationstyp", + "selectIntegration": "Konfigurierte Integration", + "noIntegrations": "Keine passenden Integrationen verfügbar", + "integrationUnavailable": "Die ausgewählte Integration ist nicht mehr verfügbar. Wählen Sie eine andere Integration aus.", + "integrationDescription": "Verwendet die gespeicherte Integrations-URL und die Zugangsdaten. Änderungen werden automatisch angewendet. Für die Ausführung von Anfragen ist vollständiger Integrationszugriff erforderlich." + }, + "ai": { + "title": "Mit beliebiger KI erstellen oder reparieren", + "description": "Fügen Sie zuerst eine URL zur API-Dokumentation hinzu, falls vorhanden. Führen Sie bei Reparaturen nach Möglichkeit die Vorschau aus. Kopieren Sie die Eingabeaufforderung in eine beliebige KI; diese kann nach fehlenden Details fragen. Fügen Sie die abschliessende JSON-Datei hier ein.", + "request": "Was soll dieses Widget tun?", + "documentationUrl": "URL der API-Dokumentation (optional)", + "paste": "Einfügen", + "response": "KI-Antwort", + "manualCopyDescription": "Der Zugriff auf die Zwischenablage ist nicht verfügbar. Wählen Sie die Eingabeaufforderung unten aus und kopieren Sie sie manuell.", + "manualPasteDescription": "Der Zugriff auf die Zwischenablage ist nicht verfügbar oder die kopierte Antwort muss korrigiert werden. Fügen Sie die JSON-Antwort der KI hier ein.", + "selectAll": "Alli uswähle", + "loadResponse": "Antwort laden", + "loaded": "Widget in den Editor geladen", + "invalidResponse": "Die Zwischenablage enthält kein gültiges v2-Widget", + "invalidResponseDetail": "Die KI-Antwort ist ungültig: {message}" + }, + "preview": { + "invalid": "Beheben Sie die Validierungsfehler, um eine Vorschau dieses Widgets anzuzeigen.", + "fixtureError": "Fehler bei der Vorschau-Fixture", + "requestData": "Anfragedaten", + "status": { + "idle": "Anfragen wurden noch nicht getestet", + "loading": "Anfragen werden getestet", + "success": "Alle Ladeanfragen waren erfolgreich", + "error": "Eine oder mehrere Ladeanfragen sind fehlgeschlagen" + }, + "result": { + "loading": { + "title": "API-Anfragen werden getestet", + "description": "Homarr erstellt eine Vorschau-Sitzung und lädt die Widget-Daten." + }, + "success": { + "title": "Vorschau bereit", + "description": "{succeeded, plural, =0 {Dieses Widget hat keine Ladeanfragen.} one {# Ladeanfrage war erfolgreich.} other {# Ladeanfragen waren erfolgreich.}} Öffnen Sie «Daten», um die Antwort zu prüfen." + }, + "error": { + "title": "Vorschau mit Anfragefehlern abgeschlossen", + "description": "{succeeded, number} erfolgreich und {failed, number} fehlgeschlagen. Öffnen Sie «Daten», um die Antwort und die Fehlerdetails anzuzeigen." + } + }, + "instanceOptions": "Instanzoptionen", + "liveActions": "Aktionen für die konfigurierte API ausführen", + "liveActionsDescription": "Aus ist eine sichere Simulation. Wenn Sie dies aktivieren, wirkt es sich auf den echten Dienst aus.", + "noActions": "Es sind keine Aktionen definiert.", + "containedFailures": "Laufzeitfehler bleiben auf dieses Widget beschränkt. Anfrageprotokolle enthalten niemals geheime Werte.", + "validation": { + "title": "Validierung", + "ready": "Die Widget-Definition ist gültig." + }, + "accessibility": { + "title": "Barrierefreiheitsprüfungen", + "ready": "Es wurden keine häufigen Lücken bei der Barrierefreiheit festgestellt.", + "pending": "Die Barrierefreiheitsprüfungen werden ausgeführt, sobald die Widget-Definition gültig ist.", + "imageAlt": "Fügen Sie jedem Bild einen Alternativtext hinzu. Verwenden Sie einen leeren Alternativtext nur für dekorative Bilder.", + "actionIconLabel": "Fügen Sie jedem ActionIcon ein aria-label oder einen Titel hinzu.", + "inputLabel": "Fügen Sie jedem Eingabefeld eine sichtbare Beschriftung oder einen barrierefreien Namen hinzu." + }, + "journal": "Bereinigtes Anfrageprotokoll", + "actionParameters": "Aktionsparameter (JSON)", + "invalidParameters": "Verwende die deklarierten Parameter-Typen für Zeichenfolgen, Zahlen und boolesche Werte.", + "runDestructive": "Destruktive Aktion ausführen", + "runAction": "Aktion ausführen", + "deleteConfirmation": "Diese Vorschauaktion ändert entfernte Daten über die konfigurierte API.", + "simulated": "Aktion simuliert", + "httpStatus": "HTTP {status, number}", + "tab": { + "widget": "Widget", + "data": "Daten", + "options": "Optionen", + "state": "Jobstatus", + "actions": "Steuerung", + "diagnostics": "Diagnose" + }, + "size": { + "compact": "Kompakt", + "standard": "Standard", + "wide": "Breit" + }, + "fixture": { + "live": "Live", + "loading": "Wird geladen", + "empty": "Leer", + "error": "Fehler" + } + } + }, + "preview": { + "request": { + "permission": { + "view": "Ansicht", + "modify": "Ändern", + "full": "Vollständig" + } + } + }, + "notification": { + "created": "Widget „{name}“ erfolgreich erstellt.", + "updated": "Widget „{name}“ erfolgreich aktualisiert.", + "deleted": "Widget „{name}“ gelöscht.", + "imported": "Widget erfolgreich importiert.", + "migrated": "Das alte Widget wurde erfolgreich migriert. Vorhandene Board-Platzierungen verwenden nun die v2-Definition.", + "migrationError": "Das alte Widget konnte nicht migriert werden. Stelle sicher, dass die Datei das Schema «homarr-custom-widget-v2» verwendet.", + "legacyDefinitionCopied": "Der ursprüngliche Widget-Inhalt wurde kopiert. Gespeicherte Zugangsdaten sind nicht enthalten.", + "legacyDefinitionCopyError": "Der ursprüngliche Widget-Inhalt konnte nicht kopiert werden.", + "migrationPromptCopied": "Eine bereinigte Migrationsaufforderung wurde kopiert. Füge sie in ein LLM ein, kopiere dessen einzelne JSON-Antwort und wähle dann «Migriertes Widget hier einfügen».", + "migrationPromptCopyError": "Die Migrationsaufforderung konnte nicht kopiert werden.", + "sourcesConfigured": "Widget-Quellen und Zugangsdaten gespeichert.", + "sourceConfigurationError": "Die Widget-Quellen konnten nicht konfiguriert werden.", + "aiPromptCopiedWithCount": "KI-Aufforderung in die Zwischenablage kopiert ({count, number} Zeichen).", + "aiPromptCopyError": "Der Prompt konnte nicht in die Zwischenablage kopiert werden. Ihr Browser unterstützt diese Funktion möglicherweise nicht.", + "aiPromptSent": "Aufforderung gesendet. Du kannst weiterarbeiten, während der Assistent im Hintergrund arbeitet.", + "updateError": "Widget konnte nicht aktualisiert werden. Ihre Änderungen wurden nicht gespeichert.", + "importError": "Widget konnte nicht importiert werden. Stellen Sie sicher, dass die Datei ein gültiger JSON-Export eines benutzerdefinierten Widgets ist.", + "exportError": "Widget konnte nicht exportiert werden.", + "duplicated": "Widget „{name}“ dupliziert.", + "duplicateError": "Widget konnte nicht dupliziert werden.", + "toggleError": "Fehler beim Umschalten des Widget-Status.", + "deleteError": "Fehler beim Löschen des Widgets.", + "previewError": "Fehler beim Abrufen der Vorschau. Überprüfen Sie die URL und versuchen Sie es erneut." + }, + "importReview": { + "title": "Import eines benutzerdefinierten Widgets prüfen", + "description": "Prüfe vor dem Import, wohin dieses Widget eine Verbindung herstellt und welche Board-Berechtigungen seine Steuerelemente benötigen.", + "migrationTitle": "Migrierten v2-Ersatz prüfen", + "migrationDescription": "Prüfe und bestätige diese generierte v2-Definition. Durch die Bestätigung wird der gespeicherte v1-Datensatz atomar ersetzt, während bestehende Board-Platzierungen mit derselben Widget-ID verknüpft bleiben.", + "fileLabel": "Wähle eine JSON-Datei für ein benutzerdefiniertes Widget aus", + "name": "Job Name", + "origin": "Basisherkunft", + "authentication": "Authentifizierung", + "networkScope": "Netzwerkbereich", + "methods": "HTTP-Methoden", + "permissions": "Erforderliche Board-Berechtigungen", + "sourceSetup": { + "title": "API-Quellen konfigurieren", + "description": "Bestätige, wohin dieses Widget eine Verbindung herstellt, und füge Zugangsdaten hinzu. Private URLs und Loopback-URLs sind spezifisch für deine Homarr-Installation.", + "suggestedUrl": "Vorgeschlagene URL", + "confirmUrl": "Ich bestätige, dass diese Server-URL für meine Homarr-Installation korrekt ist", + "ready": "URL bereit", + "needsUrl": "URL bestätigen", + "credentialsMissing": "Zugangsdaten fehlen", + "credentialsOptional": "Du kannst ohne Zugangsdaten installieren und sie später konfigurieren. Anfragen schlagen jedoch fehl, bis sie hinzugefügt wurden." + }, + "actionWarning": { + "title": "Dieses Widget kann entfernte Daten ändern", + "description": "Prüfe nach dem Import jede benannte Aktion, übernommene Zugangsdaten und jede Bestätigung für destruktive Aktionen. Geheimnisse sind nicht in der Datei enthalten." + }, + "cancel": "Import abbrechen", + "confirm": "Widget importieren", + "confirmMigration": "v2-Ersatz bestätigen" + }, + "secret": { + "apiKey": "API-Schlüssel oder Token", + "username": "Benutzername", + "password": "Passwort", + "savedPlaceholder": "••••••• (gespeichert, zum Beibehalten leer lassen)" + } + }, + "workshop": { + "title": "Werkstatt", + "browseWorkshop": "Workshop durchsuchen", + "openCommunity": "Workshop öffnen", + "openOnWorkshop": "{title} auf der Workshop-Website öffnen", + "back": "Zurück zum Workshop", + "search": "Widgets durchsuchen", + "searchCss": "CSS-Themen durchsuchen", + "sort": "Sortieren", + "sortTop": "Am besten bewertet", + "sortNewest": "Neueste", + "listAriaLabel": "Workshop-Widgets", + "listAriaLabelCss": "Workshop-CSS-Themen", + "empty": "Keine Widgets entsprechen dieser Suche.", + "emptyDescription": "Hier werden von der Community veröffentlichte Widgets aus dem Workshop angezeigt.", + "emptyFilteredTitle": "Keine Widgets entsprechen dieser Suche", + "emptyFilteredDescription": "Kein Workshop-Widget entspricht «{search}».", + "emptyCss": "Keine CSS-Themen entsprechen dieser Suche.", + "unavailableTitle": "Der Homarr-Workshop scheint nicht verfügbar zu sein", + "unavailable": "Der Community-Dienst ist möglicherweise vorübergehend nicht verfügbar. Versuche es in einem Moment erneut. Deine installierten Widgets sind davon nicht betroffen.", + "loadError": "Dieser Beitrag konnte nicht geladen werden.", + "noDescription": "Keine Beschreibung", + "author": "von {name}", + "communityMember": "Community-Mitglied", + "outdated": "Veraltet", + "outdatedWarning": "Der Autor hat diesen Beitrag als veraltet markiert. Prüfe ihn sorgfältig, bevor du ihn importierst.", + "score": "Bewertung: {count, number}", + "upvote": "Positiv bewerten", + "downvote": "Negativ bewerten", + "voteError": "Die Bewertung konnte nicht gespeichert werden.", + "signIn": "Mit GitHub anmelden", + "signInError": "Die GitHub-Anmeldung ist fehlgeschlagen. Prüfe, ob der Workshop-OAuth-Anbieter konfiguriert ist und Pop-ups erlaubt sind.", + "signOut": "Abmelden", + "signInHint": "Melde dich an, um abzustimmen oder einen Beitrag zu melden. Für die Installation ist kein Workshop-Konto erforderlich.", + "securityNotice": "Workshop-Widgets können ihre deklarierten API-Quellen aufrufen und deklarierte Aktionen mit den von dir lokal konfigurierten Zugangsdaten ausführen. Geheimnisse werden niemals eingeschlossen.", + "securityNoticeCss": "Community-CSS kann das Erscheinungsbild und die Benutzerfreundlichkeit eines Boards verändern. Prüfe es vor dem Import; nichts wird gespeichert, bis du die Board-Einstellungen speicherst.", + "install": "Installieren", + "installReviewTitle": "Vor der Installation prüfen", + "installError": "Dieses Widget kann nicht installiert werden", + "installErrorDescription": "Der Workshop-Beitrag ist kein gültiges Custom-JSX-v2-Widget.", + "useCss": "CSS importieren", + "importCss": "CSS aus dem Workshop importieren", + "importCssConfirm": "Aktuelles benutzerdefiniertes CSS durch «{title}» ersetzen? Nichts wird gespeichert, bis du die Board-Einstellungen speicherst.", + "screenshotAlt": "Screenshot von {title} {count, number}", + "screenshotViewer": "Screenshot-Viewer für {title}", + "screenshotsLabel": "Screenshots von {title}", + "zoomScreenshot": "Volle Grösse anzeigen", + "previousScreenshot": "Vorheriger Screenshot", + "nextScreenshot": "Nächster Screenshot", + "showScreenshotThumbnails": "Screenshot-Miniaturansichten anzeigen", + "hideScreenshotThumbnails": "Screenshot-Miniaturansichten ausblenden", + "closeScreenshotViewer": "Screenshot-Viewer schliessen", + "technicalDetails": "Technische Details", + "sourceCode": "Workshop-Eintrag", + "export": "Exportieren", + "report": "Melden", + "reportTitle": "Beitrag melden", + "reportReason": "Grund", + "reportExplanation": "Was sollten die Workshop-Moderatoren wissen?", + "reportSend": "Meldung senden", + "reportSent": "Meldung gesendet", + "reportSentDescription": "Die Workshop-Moderatoren können diesen Beitrag nun prüfen.", + "reportCount": "{count, plural, one {# Meldung} other {# Meldungen}}", + "reportWarning": "{count, plural, one {Für diesen Beitrag liegt # offene Meldung aus der Community vor.} other {Für diesen Beitrag liegen # offene Meldungen aus der Community vor.}} Er kann weiterhin installiert werden, du solltest jedoch zuerst seinen Inhalt prüfen.", + "reportVisibility": "Details zur Meldung sind nur für den Autor dieses Beitrags und die Workshop-Administratoren sichtbar.", + "reportCategory": { + "outdated": "Veraltet oder funktioniert nicht mehr", + "malicious": "Bösartig", + "spam": "Spam", + "copyright": "Urheberrechtsverletzung", + "inappropriate": "Unangemessen", + "other": "Andere" + }, + "publish": { + "title": "Im Workshop veröffentlichen", + "introTitle": "Dieses Widget mit der Community teilen", + "introDescription": "Homarr exportiert eine Kopie des aktuellen Widgets ohne Anmeldedaten. Füge klare Angaben hinzu, damit andere vor der Installation wissen, was es tut.", + "listingDetails": "Workshop-Eintrag", + "listingDetailsDescription": "Diese Angaben werden zusammen mit der exportierten Widget-Definition öffentlich angezeigt.", + "success": "Sofort veröffentlicht. Community-Mitglieder können dieses Widget jetzt installieren und melden.", + "successTitle": "Dein Widget ist live", + "manageDescription": "Öffne die Einreichung, um den Eintrag zu aktualisieren, Meldungen zu prüfen, ihn als veraltet zu markieren oder zu löschen. Die Verwaltung der Einreichung erfolgt direkt auf der Workshop-Website.", + "viewSubmission": "Einreichung anzeigen und verwalten", + "done": "Fertig", + "signInHint": "Melde dich an, um unter deiner Workshop-Identität zu veröffentlichen.", + "titleField": "Titel", + "descriptionField": "Beschreibung", + "screenshots": "Bildschirmaufnahmen", + "screenshotsDescription": "Bis zu fünf PNG-, JPEG- oder WebP-Bilder", + "screenshotsPlaceholder": "Screenshots auswählen", + "invalidScreenshot": "Verwende PNG-, JPEG- oder WebP-Bilder mit einer Grösse von höchstens {maxSize} pro Bild.", + "privateSourceWarning": "Dieses Widget enthält private Quell-URLs für: {sources}. Ersetze persönliche Hosts oder IP-Adressen vor der Veröffentlichung durch sichere Dienst-Platzhalter.", + "reviewSourcesTitle": "Private Quell-URLs prüfen", + "privateSourceConfirmation": "Ich habe diese Quell-URLs geprüft und sie geben keine Details zur privaten Infrastruktur preis", + "action": "Jetzt veröffentlichen", + "publicationNote": "Die Veröffentlichung erfolgt sofort. Du kannst die Einreichung anschliessend im Workshop verwalten.", + "definitionChanged": "Das Widget wurde während der Vorbereitung der Veröffentlichung geändert. Prüfe die privaten Quell-URLs erneut und versuche es dann noch einmal.", + "error": "Veröffentlichung fehlgeschlagen" } }, "integration": { + "completion": { + "modalTitle": "Dienst bereit", + "title": "{name} ist verbunden", + "description": "Die Verbindung hat den Test bestanden. Wähle als Nächstes aus, was auf diesem Board angezeigt werden soll.", + "connectionReady": "Dienstverbindung ist bereit", + "appReady": "App-Verknüpfung ist bereit", + "compatibleWidgets": "{count, plural, =0 {Keine kompatiblen Widgets} one {# kompatibles Widget} other {# kompatible Widgets}} verfügbar", + "chooseWidget": "Widget auswählen", + "recipes": { + "title": "Für dieses Board empfohlen", + "description": "Basierend auf den verbundenen Diensten und Widgets, die sich bereits auf diesem Board befinden.", + "newConnectionReason": "Jetzt über {integration} verfügbar", + "existingConnectionReason": "Funktioniert mit einem Dienst, den du bereits verbunden hast", + "dismiss": "Empfehlungen für diesen Dienst auf diesem Board ausblenden" + } + }, "page": { "list": { - "title": "Integratione", + "ariaLabel": "Konfigurierte Integrationen", "search": "Integratione sueche", + "scopedNote": "Es werden nur die Integrationen angezeigt, die du verwalten darfst.", "noResults": { - "title": "Es git no keni Integratione" + "title": "Es git no keni Integratione", + "description": "Verbinde einen Dienst, um seine Daten und Aktionen in Homarr-Widgets zu verwenden.", + "action": "Erste Integration erstellen", + "filteredTitle": "Keine Integrationen entsprechen deiner Suche", + "filteredDescription": "Keine Integrationen entsprechen «{search}». Versuche es mit einem anderen Namen, Typ oder einer anderen URL.", + "createOnlyTitle": "Du kannst nur Integrationen hinzufügen", + "createOnlyDescription": "Deine Berechtigungen erlauben dir, Integrationen zu erstellen, aber keine bestehenden zu verwalten. Bitte einen Administrator um Zugriff auf die benötigten Integrationen." } }, "create": { "title": "Nöi integration {name}", "notification": { "success": { - "title": "Ersteuig erfougrich", "message": "D integration isch erfougrich erstellt worde" }, "error": { - "title": "Erstellig isch fählgschlage", "message": "D Integration het nid chönne erstäut werde" } }, @@ -729,11 +1339,9 @@ "title": "Integration {name} bearbeite", "notification": { "success": { - "title": "Änderige erfougrich agwendet", "message": "D Integration isch erfougrich gspichert worde" }, "error": { - "title": "Änderige chöi nöd aawendet werde", "message": "D Integration het nöd chönne gspichert werde" } }, @@ -750,23 +1358,15 @@ "message": "Bisch sicher, dass d Integration {name} wotsch lösche?", "notification": { "success": { - "title": "Löschig erfougrich", "message": "D Integration isch erfougrich glöscht worde" }, "error": { - "title": "Löschig isch fehlgschlage", "message": "Integration het nid chönnä glöscht wärde" } } } }, "field": { - "name": { - "label": "Name" - }, - "url": { - "label": "Url" - }, "attemptSearchEngineCreation": { "label": "Suechmaschine erstelle", "description": "Integration '{kind}' cha als Suechmaschine verwendet werde. Wähl das us, um se outomatisch als Suechmaschine z konfiguriere." @@ -778,6 +1378,10 @@ "label": "App ersteue", "description": "Mach en App mit de gleiche Name und dem gleiche Icon wie d'Integration. Lass d'Eingabefeld unger im Fall leer, um d'App mit em Integrations-URL z'schaffe." }, + "linkApp": { + "label": "Bestehende App verknüpfen", + "description": "Verbinde diese Integration mit einer App, die du bereits verwenden kannst." + }, "appHref": { "placeholder": "Benutzerdefinierti App URL" }, @@ -791,7 +1395,11 @@ "grid": { "widgetCount": "{count} Widgets", "noWidgets": "Keine Widgets", - "detected": "Über Docker erkannt" + "detected": "Über Docker erkannt", + "connected": "{count, plural, one {# verbunden} other {# verbunden}}", + "tiedWidgets": "Verknüpfte Widgets", + "more": "+{count} weitere", + "loadError": "Integrationen konnten nicht geladen werden. Versuche es erneut, bevor du eine neue Verbindung erstellst." }, "category": { "dnsHole": "DNS", @@ -822,7 +1430,10 @@ "analytics": "Analysen", "vpn": "VPN", "mediaLibrary": "Medienbibliothek", - "uptimeMonitoring": "Betriebszeitüberwachung" + "uptimeMonitoring": "Betriebszeitüberwachung", + "beszel": "Beszel", + "systemMonitoring": "Systemüberwachung", + "security": "Sicherheit" }, "testConnection": { "action": { @@ -1107,6 +1718,22 @@ "slug": { "label": "Slug der Statusseite", "newLabel": "Neuer Slug der Statusseite" + }, + "wazuhIndexerUrl": { + "label": "Indexer-URL", + "newLabel": "Neue Indexer-URL" + }, + "wazuhIndexerUsername": { + "label": "Indexer-Benutzername", + "newLabel": "Neuer Indexer-Benutzername" + }, + "wazuhIndexerPassword": { + "label": "Indexer-Passwort", + "newLabel": "Neues Indexer-Passwort" + }, + "wazuhDashboardUrl": { + "label": "Dashboard-URL (optional)", + "newLabel": "Neue Dashboard-URL" } } }, @@ -1115,54 +1742,19 @@ "interact": "Mit Integrationen interagieren", "full": "Voller Zugriff auf Integrationen" }, - "audiobookshelf": { - "name": "Hörbuchregal", - "description": "Selbst gehosteter Hörbuch- und Podcast-Server" - }, - "navidrome": { - "name": "Navidrome", - "description": "Selbst gehosteter Musik-Streaming-Server mit Subsonic-API-Kompatibilität" - }, - "uptimeKuma": { - "name": "Uptime Kuma", - "description": "Selbst gehostete Betriebszeitüberwachung mit öffentlichen Statusseiten", - "secret": { - "slug": { - "description": "Der Slug Ihrer öffentlichen Statusseite. Wenn nicht festgelegt, lautet der Standardwert „default“." - }, - "apiKey": { - "description": "Optionaler API-Schlüssel für authentifizierten Zugriff auf /metrics" - } - } - }, - "traefik": { - "name": "Traefik", - "description": "Cloud-native Reverse-Proxy- und Load-Balancer-Lösung" - }, - "paperlessNgx": { - "name": "Paperless-ngx", - "description": "Dokumentenverwaltungssystem zum Archivieren und Organisieren gescannter Dokumente" - }, - "patchmon": { - "name": "PatchMon", - "description": "Patch-Verwaltung und Überwachung von Linux-Hosts" - }, - "bazarr": { - "name": "Bazarr", - "description": "Begleitanwendung für Sonarr und Radarr zur Verwaltung und zum Herunterladen von Untertiteln" - }, - "wud": { - "name": "What's Up Docker", - "description": "Überwachen Sie, für welche Ihrer Docker-Container Image-Updates verfügbar sind." + "llamacpp": { + "name": "llama.cpp", + "description": "Überwache einen lokalen llama.cpp llama-server: Zustands-, Modell- und Generierungsmetriken" } }, "media": { "plural": "Medien", "search": "Medien suchen", "field": { - "name": "Name", + "preview": "Vorschau", "size": "Größe", - "creator": "Ersteller" + "creator": "Ersteller", + "actions": "Steuerung" }, "action": { "upload": { @@ -1190,10 +1782,12 @@ } }, "copy": { - "label": "URL in Zwischenablage kopieren" + "label": "URL in Zwischenablage kopieren", + "labelNamed": "URL für {name} kopieren" }, "open": { - "label": "Medium öffnen" + "label": "Medium öffnen", + "labelNamed": "{name} öffnen" } }, "noResults": { @@ -1208,7 +1802,6 @@ "add": "Hinzufügen", "apply": "Übernehmen", "backToOverview": "Zurück zur Übersicht", - "skip": "Überspringen", "change": "Ändern", "create": "Erstellen", "createAnother": "Erstellen und neu starten", @@ -1231,16 +1824,31 @@ "tryAgain": "Erneut versuchen", "loading": "Wird geladen", "show": "Anzeigen", - "hide": "Ausblenden" + "hide": "Ausblenden", + "undo": "Rückgängig", + "editNamed": "{name} bearbeiten", + "deleteNamed": "{name} löschen", + "clearSearch": "Suche löschen", + "copy": "Kopieren", + "copied": "Kopiert", + "refresh": "Aktualisieren" + }, + "pagination": { + "pageOf": "Seite {page} von {totalPages}" }, "here": "Hier", + "serviceUrlTemplate": { + "serverTitle": "Übliche Serveradresse", + "urlModeLabel": "Muster der Dienstadresse", + "hostPort": "Gleicher Host, andere Ports", + "subdomain": "Eine Subdomain pro Dienst", + "path": "Ein Pfad pro Dienst" + }, "iconPicker": { "label": "Icon-URL", + "description": "Durchsuchen Sie die Bibliothek, fügen Sie eine Bild-URL ein oder laden Sie eine Datei hoch.", "header": "Geben Sie Namen oder Objekte ein, um nach Symbolen zu filtern... Homarr sucht nach {countIcons} Icons für Sie", "headerLoading": "Bilder nach Namen suchen", - "noResults": "Keine Symbole stimmen mit \"{search}\" überein.", - "error": "Symbole konnten nicht geladen werden.", - "description": "Durchsuchen Sie die Bibliothek, fügen Sie eine Bild-URL ein oder laden Sie eine Datei hoch.", "clear": "Bild entfernen", "uploadImage": "Bild hochladen", "results": "Bild-Suchergebnisse", @@ -1249,7 +1857,9 @@ "otherImages": "Andere Bilder", "urlLoading": "Bild wird überprüft…", "urlReady": "Bild ist einsatzbereit", - "urlError": "Dieses Bild konnte nicht geladen werden. Überprüfen Sie die URL und versuchen Sie es erneut." + "urlError": "Dieses Bild konnte nicht geladen werden. Überprüfen Sie die URL und versuchen Sie es erneut.", + "noResults": "Keine Symbole stimmen mit \"{search}\" überein.", + "error": "Symbole konnten nicht geladen werden." }, "colorScheme": { "options": { @@ -1261,7 +1871,6 @@ "information": { "min": "Min", "max": "Max", - "days": "Tage", "hours": "Stunden", "minutes": "Minuten" }, @@ -1298,16 +1907,16 @@ }, "userAvatar": { "menu": { - "switchToDarkMode": "Zum dunklen Design wechseln", - "switchToLightMode": "Zum hellen Design wechseln", + "open": "Kontomenü öffnen", "management": "Verwaltung", - "docker": "Docker", "preferences": "Ihre Einstellungen", "logout": "Abmelden", "login": "Anmelden", "homeBoard": "Ihr Home Board", - "loggedOut": "Abgemeldet", - "updateAvailable": "{countUpdates} Updates verfügbar: {tag}" + "updateAvailable": "{countUpdates} Updates verfügbar: {tag}", + "assistant": "Assistent", + "assistantThinking": "Denken", + "modifier": "Moderator" } }, "dangerZone": "Gefahrenbereich", @@ -1355,75 +1964,85 @@ "kilometersPerHour": "km/h", "milesPerHour": "mph" } + }, + "widgetQuery": { + "loading": "Widget-Daten werden geladen" + }, + "total": "Gesamt", + "filesystemUsage": "{count, plural, one {Nutzung für # Dateisystem anzeigen} other {Nutzung für # Dateisysteme anzeigen}}", + "field": { + "name": "Job Name" + }, + "label": { + "new": "Neu" + }, + "entity": { + "apps": "Apps", + "boards": "Boads", + "certificates": "Zertifikate", + "customWidgets": "Benutzerdefinierte Widgets", + "groups": "Gruppen", + "integrations": "Integratione", + "invites": "Einladungen", + "logs": "Protokolle", + "media": "Medien", + "searchEngines": "Suchmaschinen", + "tasks": "Aufgaben", + "users": "Benutzer" } }, "section": { - "dynamic": { + "option": { + "showLabel": { + "label": "Bezeichnung anzeigen", + "description": "Die Bezeichnung des Containers über seinem Inhalt anzeigen." + }, + "collapsible": { + "label": "Einklappen erlauben", + "description": "Erlaube Betrachtern, diesen Container ein- und auszuklappen." + }, + "showOpenAll": { + "label": "Aktion «Alle öffnen» anzeigen", + "description": "Eine Aktion anzeigen, die jede App in diesem Container in neuen Tabs öffnet." + }, + "scrollable": { + "label": "Bildlauf", + "description": "Diesen Container auf seiner festgelegten Grösse halten und stattdessen einen Bildlauf für seinen Inhalt anzeigen, anstatt ihn an den Inhalt anzupassen." + } + }, + "action": { + "openAllInNewTabsFor": "Alle Apps in {name} in Tabs öffnen" + }, + "openAllInNewTabs": { + "title": "Alle in tabs öffnen", + "text": "Einige Browser können aus Sicherheitsgründen das Öffnen von mehreren Tabs aufeinmal blockieren. Homarr konnte nicht alle Fenster öffnen, weil Ihr Browser diese Aktion blockiert hat. Bitte erlauben Sie \"Pop-up Fenster öffnen\" und versuchen Sie es erneut." + }, + "container": { + "untitled": "Unbenannter Container", "action": { - "create": "Neuer dynamischer Abschnitt", - "remove": "Dynamischen Abschnitt entfernen" + "create": "Neuen Container erstellen", + "remove": "Container entfernen", + "expand": "Aufklappen", + "collapse": "Einklappen" }, "option": { "title": { "label": "Titel" }, "customCssClasses": { - "label": "Benutzerdefinierte CSS-Klassen" + "label": "Benutzerdefinierte CSS Klassen" }, "borderColor": { "label": "Rahmenfarbe" } }, "remove": { - "title": "Dynamischen Abschnitt entfernen", - "message": "Möchten Sie diesen dynamischen Abschnitt wirklich entfernen? Die Elemente werden an die gleiche Position im übergeordneten Abschnitt verschoben." - } - }, - "category": { - "field": { - "name": { - "label": "Name" - } - }, - "action": { - "create": "Neue Kategorie", - "edit": "Kategorie umbenennen", - "remove": "Kategorie entfernen", - "moveUp": "Nach oben bewegen", - "moveDown": "Nach unten bewegen", - "createAbove": "Neue Kategorie oben", - "createBelow": "Neue Kategorie unten", - "openAllInNewTabs": "Alle in Tabs öffnen" - }, - "create": { - "title": "Neue Kategorie", - "submit": "Kategorie hinzufügen" - }, - "remove": { - "title": "Kategorie entfernen", - "message": "Möchten Sie die Kategorie {name} wirklich entfernen?" - }, - "edit": { - "title": "Kategorie umbenennen", - "submit": "Kategorie umbenennen" - }, - "menu": { - "label": { - "create": "Neue Kategorie", - "changePosition": "Position wechseln", - "settings": "Einstellungen" - } - }, - "openAllInNewTabs": { - "title": "Alle in tabs öffnen", - "text": "Einige Browser können aus Sicherheitsgründen das Öffnen von mehreren Tabs aufeinmal blockieren. Homarr konnte nicht alle Fenster öffnen, weil Ihr Browser diese Aktion blockiert hat. Bitte erlauben Sie \"Pop-up Fenster öffnen\" und versuchen Sie es erneut." + "message": "Diesen Container entfernen? Sein Inhalt wird in den umgebenden Bereich verschoben." } } }, "item": { "action": { - "create": "Neues Element", - "import": "Element importieren", "edit": "Element bearbeiten", "moveResize": "Element verschieben/Größe ändern", "duplicate": "Element duplizieren", @@ -1432,7 +2051,7 @@ "menu": { "label": { "settings": "Einstellungen", - "refresh": "Aktualisieren", + "settingsFor": "Einstellungen für {name}", "options": "Optionen", "actions": "Aktionen" }, @@ -1441,21 +2060,96 @@ "error": "Fehler", "loading": "Wird geladen", "idle": "Inaktiv" + }, + "notification": { + "saveError": { + "title": "Widget konnte nicht gespeichert werden", + "message": "Die Änderungen am Widget wurden zurückgesetzt" + } } }, "create": { "title": "Wählen Sie das hinzuzufügende Element aus", "search": "Gegenstände filtern", - "addToBoard": "Zum Board hinzufügen" + "addToBoard": "Zum Board hinzufügen", + "addAtPosition": "Element hier hinzufügen", + "destination": { + "label": "Hinzufügen zu", + "description": "Wähle aus, wo das Widget erscheinen soll. Du kannst es später weiterhin verschieben.", + "mainCanvas": "Hauptbereich", + "leftRail": "Linke Leiste", + "rightRail": "Rechte Leiste" + }, + "connectionStatus": { + "ready": "Bereit", + "needsSetup": "Einrichtung erforderlich", + "noConnectionRequired": "Keine Verbindung erforderlich" + }, + "customWidget": "Benutzerdefiniertes Widget", + "standalone": "Eigenständig", + "missingIntegration": { + "title": "Verbinde zuerst einen Dienst.", + "noPermission": "Dieses Widget benötigt eine kompatible Dienstverbindung. Bitte einen Administrator, eine solche Verbindung herzustellen, und versuche es dann erneut." + }, + "notification": { + "success": { + "title": "Widget hinzugefügt", + "message": "{name} wurde zu diesem Dashboard hinzugefügt.", + "relocatedMessage": "{name} wurde zu {destination} hinzugefügt, da das ausgewählte Ziel nicht verfügbar war." + }, + "error": { + "title": "Element konnte nicht hinzugefügt werden", + "message": "Das Element konnte diesem Dashboard nicht hinzugefügt werden" + } + } + }, + "selection": { + "summary": "{count, plural, one {# ausgewähltes Element} other {# ausgewählte Elemente}}", + "selected": "{count, plural, one {# ausgewählt} other {# ausgewählt}}", + "copy": "Kopieren", + "copied": "{count, plural, one {# Element in die Zwischenablage kopiert} other {# Elemente in die Zwischenablage kopiert}}", + "copyError": "Die ausgewählten Elemente konnten nicht kopiert werden. Dein Browser erlaubt möglicherweise keinen Zugriff auf die Zwischenablage.", + "paste": "Einfügen", + "pasteShortcut": "Kopierte Elemente hier einfügen (Strg / ⌘ + V)", + "pasted": "{count, plural, one {# Element eingefügt} other {# Elemente eingefügt}}", + "pasteError": "Die Zwischenablage konnte nicht gelesen werden. Dein Browser erlaubt möglicherweise keinen Zugriff auf die Zwischenablage.", + "pasteInvalid": "Die Zwischenablage enthält keine gültigen Homarr-Dashboard-Elemente.", + "pasteUnavailable": "Die kopierten Elemente haben auf diesem Dashboard nicht genügend Platz.", + "removed": "{count, plural, one {# Element entfernt} other {# Elemente entfernt}}", + "move": "Verschieben", + "moveTo": "Ausgewählte Elemente verschieben", + "delete": "Löschen", + "clear": "Auswahl aufheben", + "clearShortcut": "Auswahl aufheben (Escape)", + "saveErrorTitle": "Elemente konnten nicht aktualisiert werden", + "saveErrorMessage": "Die Änderungen konnten nicht gespeichert werden. Das Dashboard wurde aktualisiert.", + "moveUnavailableTitle": "Ausgewählte Elemente konnten nicht verschoben werden", + "moveUnavailableMessage": "Das Ziel bietet nicht genügend Platz für die gesamte Auswahl." }, "moveResize": { "title": "Element verschieben/Größe ändern", + "entryLabel": "{name}, Spalte {column}, Zeile {row}", + "target": { + "numbered": "{name}, Ziel {index}", + "located": "{name}, {location}, Ziel {index}" + }, + "keyboard": { + "instructions": "Drücke die Eingabetaste oder die Leertaste, um die Bearbeitung mit der Tastatur zu starten. Verwende die Pfeiltasten zum Verschieben, Umschalt plus Pfeiltasten zum Ändern der Grösse und Escape zum Beenden.", + "started": "Bearbeitung mit der Tastatur gestartet. Verwende die Pfeiltasten zum Verschieben, Umschalt plus Pfeiltasten zum Ändern der Grösse und Escape zum Beenden.", + "stopped": "Bearbeitung mit der Tastatur beendet.", + "boundary": "Diese Änderung passt nicht in diesen Abschnitt." + }, "field": { + "section": { + "label": "Abschnitt oder Leiste" + }, "width": { - "label": "Breite" + "label": "Breite", + "shortLabel": "B" }, "height": { - "label": "Höhe" + "label": "Höhe", + "shortLabel": "H" }, "xOffset": { "label": "X Versatz" @@ -1469,18 +2163,36 @@ "title": "Element bearbeiten", "tab": { "widget": "Widget bearbeiten", - "app": "App bearbeiten" + "app": "App bearbeiten", + "integration": "Integration bearbeiten" }, "app": { "propagationNotice": "Änderungen an dieser App werden überall übernommen, wo sie in allen Dashboards verwendet wird." }, + "integration": { + "action": "Verbindung bearbeiten", + "description": "Teste oder repariere eine ausgewählte Verbindung, ohne dieses Widget zu verlassen.", + "editLabel": "Integration {name} bearbeite", + "fullAccessRequired": "Vollzugriff erforderlich", + "propagationNotice": "Änderungen an dieser Integration gelten überall dort, wo sie verwendet wird. Die Verbindung wird vor dem Speichern getestet.", + "loading": "Integration wird geladen", + "loadError": "Diese Integration konnte nicht geladen werden. Versuche es erneut, bevor du die Verbindungseinstellungen änderst." + }, + "preview": { + "integrationRequired": "Wähle eine Verbindung aus, um eine Vorschau dieses Widgets anzuzeigen.", + "size": "Dateigröße" + }, + "settings": { + "label": "Widget-Einstellungen" + }, "advancedOptions": { "label": "Erweiterte Einstellungen", "title": "Erweiterte Einstellungen Optionen" }, "field": { "integrations": { - "label": "Integrationen" + "label": "Integrationen", + "removeLabel": "Integration {name} entfernen" }, "title": { "label": "Titel" @@ -1494,17 +2206,18 @@ } }, "remove": { - "title": "Element entfernen", "message": "Soll dieses Element wirklich entfernt werden?" + }, + "advancedFocus": { + "open": "Erweiterte Ansicht öffnen", + "close": "Erweiterte Ansicht schliessen", + "label": "Erweiterte Ansicht von {widget}" } }, "widget": { "integrationSelect": { "configureIntegrationFirst": "Zuerst eine Integration verbinden", - "loading": "Wird geladen ...", - "placeholder": "Eine Option auswählen", - "noResults": "Keine Ergebnisse gefunden", - "loadError": "Fehler beim Laden der Optionen" + "placeholder": "Eine Option auswählen" }, "app": { "name": "App", @@ -1513,9 +2226,6 @@ "appId": { "label": "App auswählen" }, - "openInNewTab": { - "label": "In neuem Tab öffnen" - }, "showTitle": { "label": "App Namen anzeigen" }, @@ -1523,11 +2233,8 @@ "label": "Statusüberprüfung aktivieren" }, "layout": { - "label": "Ansicht", "option": { - "row": "Horizontal", "row-reverse": "Horizontal (umgekehrt)", - "column": "Vertikal", "column-reverse": "Vertikal (umgekehrt)" } }, @@ -1552,23 +2259,60 @@ "name": "Lesezeichen", "description": "Mehrere App Links anzeigen", "option": { - "title": { - "label": "Titel" + "showTitle": { + "label": "Widget-Titel anzeigen" + }, + "titleSize": { + "label": "Grösse des Widget-Titels (px)" }, "layout": { "label": "Ansicht", "option": { - "row": { - "label": "Horizontal" - }, - "column": { - "label": "Vertikal" - }, - "grid": { - "label": "Raster" + "adaptive": { + "label": "Adaptiv" }, "gridHorizontal": { "label": "Gitter horizontal" + }, + "icons": { + "label": "Symbole" + } + } + }, + "variant": { + "label": "Aussehen", + "option": { + "soft": { + "label": "Dezent" + }, + "filled": { + "label": "Gefüllt" + }, + "outline": { + "label": "Umrandung" + }, + "plain": { + "label": "Einfach" + } + } + }, + "spacing": { + "label": "Abstand zwischen Karten", + "option": { + "xs": { + "label": "Extra klein" + }, + "sm": { + "label": "Klein" + }, + "md": { + "label": "Mittel" + }, + "lg": { + "label": "Groß" + }, + "xl": { + "label": "Extra gross" } } }, @@ -1581,17 +2325,28 @@ "hideHostname": { "label": "Hostnamen ausblenden" }, - "openNewTab": { - "label": "In neuem Tab öffnen" - }, "withBorder": { "label": "Rahmen anzeigen" }, + "grow": { + "label": "Karten vergrössern, um die Zeile auszufüllen" + }, + "customUrls": { + "label": "Benutzerdefinierte Links" + }, "items": { "label": "Lesezeichen", - "add": "Lesezeichen hinzufügen" + "remove": "Lesezeichen entfernen", + "apps": { + "label": "Lesezeichen hinzufügen", + "description": "Füge URLs ein oder suche nach vorhandenen Apps. Ziehe die untenstehenden Lesezeichen, um sie neu anzuordnen.", + "placeholder": "URLs einfügen oder Apps suchen", + "addUrl": "Diese URL hinzufügen", + "hint": "Drücke die Eingabetaste, um eine URL hinzuzufügen. Füge durch Kommas getrennte oder pro Zeile eine URL ein, um mehrere hinzuzufügen." + } } - } + }, + "empty": "Füge eine URL oder App in den Widget-Einstellungen hinzu" }, "archiveTeamWarrior": { "name": "ArchiveTeam Warrior", @@ -1600,33 +2355,61 @@ "showBroadcastMessage": { "label": "Broadcast-Nachrichten anzeigen" } + }, + "noProjectSelected": "Kein Projekt ausgewählt", + "runnerStatus": "Runner: {status}", + "projectId": "Projekt: {id}", + "sessionReceived": "Sitzung empfangen: {value}", + "sessionSent": "Sitzung gesendet: {value}", + "sessionId": "Sitzung: {id}", + "startedAt": "Gestartet {date}", + "emptyItems": "Keine aktiven oder kürzlich ausgeführten Aufträge in dieser Momentaufnahme", + "metric": { + "running": "Wird ausgeführt", + "completed": "Fertig", + "failed": "Fehlgeschlagen", + "canceled": "Abgebrochen", + "download": "Herunterladen", + "upload": "Hochladen" + }, + "status": { + "running": "Wird ausgeführt", + "completed": "Abgeschlossen", + "failed": "Fehlgeschlagen", + "canceled": "Abgebrochen", + "stopped": "Angehalten", + "idle": "Inaktiv", + "unknown": "Unbekannt" + } + }, + "wud": { + "name": "What's Up Docker", + "description": "Zeigt an, wie viele überwachte Container Updates verfügbar haben.", + "title": "What's Up Docker", + "monitored": "Überwacht", + "updatesAvailable": "{count, plural, one {# Update verfügbar} other {# Updates verfügbar}}", + "updateAvailable": "Update verfügbar", + "openReleaseNotes": "Release Notes öffnen", + "option": { + "showRing": { + "label": "Update-Ring anzeigen" + }, + "showUpdateList": { + "label": "Container-Update-Liste anzeigen", + "description": "Listet jeden überwachten Container auf, für den ein Image-Update verfügbar ist." + } } }, "dnsHoleSummary": { "name": "DNS Hole Zusammenfassung", "description": "Zeigt die Zusammenfassung deines DNS Holes an", "option": { - "layout": { - "label": "Ansicht", - "option": { - "row": { - "label": "Horizontal" - }, - "column": { - "label": "Vertikal" - }, - "grid": { - "label": "Raster" - } - } - }, "usePiHoleColors": { "label": "Pi Hole Farben verwenden" } }, "error": { - "internalServerError": "Fehler beim Abrufen der DNS Hole Zusammenfassung", - "integrationsDisconnected": "Keine Daten verfügbar, alle Integrationen getrennt" + "internalServerError": "Fehler beim Abrufen der DNS Hole Zusammenfassung" }, "data": { "adsBlockedToday": "Heute blockiert", @@ -1634,32 +2417,24 @@ "dnsQueriesToday": "Abfragen heute", "domainsBeingBlocked": "Domänen auf der Sperrliste" }, - "domainsTooltip": "Aufgrund mehrerer Integrationen kann Homarr die genaue Anzahl der blockierten Domains nicht berechnen" + "domainsTooltip": "Aufgrund mehrerer Integrationen kann Homarr die genaue Anzahl der blockierten Domains nicht berechnen", + "status": { + "enabled": "Aktiviert", + "disabled": "Deaktiviert", + "unknown": "Unbekannt" + } }, "dnsHoleControls": { "name": "DNS Hole Steuerung", "description": "Steuern Sie PiHole oder AdGuard von Ihrem Dashboard aus", "option": { - "layout": { - "label": "Ansicht", - "option": { - "row": { - "label": "Horizontal" - }, - "column": { - "label": "Vertikal" - }, - "grid": { - "label": "Raster" - } - } - }, "showToggleAllButtons": { "label": "Alle Schaltflächen anzeigen" } }, "error": { - "internalServerError": "Fehler bei der Kontrolle des DNS Holes" + "internalServerError": "Fehler bei der Kontrolle des DNS Holes", + "bulkActionsFailed": "{count, plural, one {# Aktion fehlgeschlagen} other {# Aktionen fehlgeschlagen}}" }, "controls": { "enableAll": "Alle aktivieren", @@ -1670,8 +2445,6 @@ "disabled": "Deaktiviert", "processing": "Wird verarbeitet", "disconnected": "Verbindung getrennt", - "hours": "Stunden", - "minutes": "Minuten", "unlimited": "Freilassen für unbegrenzt" } }, @@ -1683,16 +2456,10 @@ "label": "Eigene Titel/Stadt Anzeige", "description": "Zeige einen benutzerdefinierten Titel oder den Namen der Stadt oder des Landes oben auf der Uhr." }, - "customTitle": { - "label": "Titel" - }, "is24HourFormat": { "label": "24-Stunden Format", "description": "24-Stunden Format anstelle von 12-Stunden Format verwenden" }, - "showSeconds": { - "label": "Sekunden anzeigen" - }, "useCustomTimezone": { "label": "Eine feste Zeitzone verwenden" }, @@ -1711,29 +2478,295 @@ "label": "Benutzerdefiniertes Zeitformat", "description": "ISO 8601 Standard benutzen um die Zeit zu formatieren (dies wird andere Optionen überschreiben)" }, - "customDateFormat": { - "label": "Benutzerdefiniertes Datumsformat", - "description": "ISO 8601 Standard benutzen um das Datum zu formatieren (dies wird andere Optionen überschreiben)" - }, "showWeather": { "label": "Wetter anzeigen", "description": "Ein kleines animiertes Wettersymbol und die Temperatur in der Ecke der Karte anzeigen" }, - "weatherLocation": { - "label": "Wetterstandort" - }, "isWeatherFormatFahrenheit": { "label": "Fahrenheit verwenden" + }, + "animateWeatherIcon": { + "label": "Wettersymbol animieren", + "description": "Das Wettersymbol animieren. Standardmässig deaktiviert und bei aktivierter Option für reduzierte Bewegungen immer deaktiviert." + }, + "colorWeatherByDayNight": { + "label": "Wetter nach Tag/Nacht einfärben", + "description": "Das Wettersymbol und die Temperatur abhängig davon, ob am ausgewählten Ort gerade Tag oder Nacht ist, mit einer Tages- oder Nachtfarbe einfärben." + }, + "dayWeatherColor": { + "label": "Tagesfarbe" + }, + "nightWeatherColor": { + "label": "Nachtfarbe" + }, + "worldClockCities": { + "label": "Städte der Weltzeituhr", + "description": "Füge bis zu sechs Städte hinzu und ordne sie für die erweiterte Ansicht an." } + }, + "timezoneList": { + "timezone": "Zeitzone", + "cityLabel": "Stadtbezeichnung", + "searchPlaceholder": "Zeitzonen durchsuchen", + "noResults": "Keine Zeitzonen gefunden", + "unsupportedOption": "Nicht unterstützt: {timeZone}", + "add": "Stadt hinzufügen", + "remove": "{city} entfernen", + "reorder": "{city} neu anordnen", + "limit": "{count} von {maximum} Städten konfiguriert" + }, + "worldClock": { + "primary": "Primäre Uhr", + "local": "Ortszeit", + "today": "Heute", + "tomorrow": "Morgen", + "yesterday": "Gestern", + "noSecondaryCities": "Füge Städte in den Widget-Optionen hinzu, um sie hier zu vergleichen.", + "unsupportedPrimaryTitle": "Primäre Zeitzone nicht verfügbar", + "unsupportedPrimary": "{timeZone} wird von diesem Browser nicht unterstützt. UTC wird als deutlich gekennzeichnete Ausweichoption angezeigt.", + "unsupportedTimeZone": "Nicht unterstützte Zeitzone: {timeZone}", + "accessibleTime": "{city}: {time}, {date}, {timeZone}", + "advancedLabel": "Erweiterte Weltzeituhr", + "cities": "Weltuhren", + "cityCount": "{count} Zeitzonen", + "timeBarLabel": "Tageszeit im 24-Stunden-Format für {city}", + "dayProgress": "{percent}% vergangen · {hours} Std. {minutes} Min. verbleibend", + "phaseLegend": "Legende der Tageszeiten", + "tick": { + "midnight": "00", + "morning": "06", + "noon": "12", + "evening": "18", + "end": "24" + }, + "phaseRange": { + "night": "00–05 · 21–24", + "dawn": "05–08", + "day": "08–18", + "dusk": "18–21" + }, + "phase": { + "night": "Nacht", + "dawn": "Morgendämmerung", + "day": "Tag", + "dusk": "Abenddämmerung" + } + } + }, + "airQuality": { + "name": "Luftqualität und UV", + "description": "Zeigt Luftqualität, UV-Index, Schadstoffe und Pollen für einen Standort an.", + "option": { + "location": { + "label": "Standort der Luftqualität" + }, + "aqiStandard": { + "label": "AQI-Standard", + "options": { + "auto": "Automatisch gemäss Gebietsschema", + "european": "Europäischer AQI", + "us": "US-AQI" + } + }, + "showUv": { + "label": "UV-Index anzeigen" + }, + "showPollutants": { + "label": "Schadstoffkonzentrationen anzeigen" + }, + "showPollen": { + "label": "Pollenkonzentrationen anzeigen" + } + }, + "category": { + "good": "Gut", + "fair": "Ausreichend", + "moderate": "Mässig", + "unhealthySensitive": "Ungesund für empfindliche Personengruppen", + "unhealthy": "Fehlerhaft", + "poor": "Schlecht", + "veryPoor": "Sehr schlecht", + "veryUnhealthy": "Sehr ungesund", + "extremelyPoor": "Extrem schlecht", + "hazardous": "Gefährlich", + "unknown": "Keine AQI-Messung" + }, + "uv": { + "label": "UV-Index", + "category": { + "low": "Niedrig", + "moderate": "Mässig", + "high": "Hoch", + "veryHigh": "Sehr hoch", + "extreme": "Extrem", + "unknown": "Keine Messung" + } + }, + "dominantPollutant": "Vorherrschender Schadstoff", + "aqiLabel": "AQI", + "strongestPollen": "Höchste Pollenkonzentration", + "unit": { + "concentration": "{value} µg/m³", + "pollen": "{value} Körner/m³" + }, + "pollutant": { + "pm2_5": "PM2.5", + "pm10": "PM10", + "ozone": "Ozon", + "nitrogenDioxide": "Stickstoffdioxid", + "sulphurDioxide": "Schwefeldioxid", + "carbonMonoxide": "Kohlenmonoxid" + }, + "pollen": { + "alder": "Erle", + "birch": "Birke", + "grass": "Gräser", + "mugwort": "Beifuss", + "olive": "Olive", + "ragweed": "Ambrosia" + }, + "compact": { + "sixHourTrend": "AQI-Trend für die nächsten sechs Stunden" + }, + "advanced": { + "observedAt": "Aktualisiert um {time}", + "next24Hours": "Nächste 24 Stunden", + "pollutants": "Schadstoffkonzentrationen", + "pollen": "Pollenkonzentrationen", + "sevenDayForecast": "Maximale Prognose für 7 Tage", + "aqiValue": "AQI {value}", + "uvValue": "UV {value}", + "uvShort": "UV {value}", + "noForecast": "Keine Prognosedaten verfügbar" + } + }, + "countdown": { + "name": "Countdowns", + "description": "Verfolgt bevorstehende Ereignisse und wiederkehrende Jahrestage.", + "option": { + "events": { + "label": "Ereignisse", + "description": "Füge bis zu 20 einmalige oder jährliche Countdowns hinzu und ordne sie an. Die Daten werden in der ausgewählten Zeitzone eingegeben." + }, + "showProgress": { + "label": "Fortschritt anzeigen" + }, + "showSeconds": { + "label": "Sekunden anzeigen", + "description": "Sekunden für jedes bevorstehende Ereignis sichtbar lassen." + } + }, + "dateTimeEventList": { + "newEvent": "Neues Ereignis", + "add": "Ereignis hinzufügen", + "remove": "{event} entfernen", + "reorder": "{event} neu anordnen", + "eventLabel": "Ereignisbezeichnung", + "timezone": "Zeitzone", + "unsupportedOption": "Nicht unterstützt: {timeZone}", + "recurrence": "Wiederholungen", + "recurrenceOption": { + "none": "Wird nicht wiederholt", + "yearly": "Jährlich" + }, + "target": "Datum und Uhrzeit des Ereignisses", + "trackProgress": "Fortschritt ab einem Startdatum verfolgen", + "start": "Startdatum und -zeit des Fortschritts", + "confirmDateTime": "Datum und Uhrzeit bestätigen", + "limit": "{count} von {maximum} Ereignissen konfiguriert" + }, + "empty": { + "title": "Noch keine Countdowns", + "description": "Füge in den Widget-Optionen ein Ereignis hinzu, um den Countdown zu starten." + }, + "completed": "Abgeschlossen", + "yearly": "Jährlich", + "progress": "Ereignisfortschritt", + "upcoming": "Bevorstehend", + "completedEvents": "Abgeschlossene Ereignisse", + "invalid": { + "title": "Einige Ereignisse können nicht angezeigt werden", + "description": "{count, plural, one {Ein Ereignis hat ein ungültiges Datum oder eine nicht unterstützte Zeitzone.} other {# Ereignisse haben ein ungültiges Datum oder eine nicht unterstützte Zeitzone.}}", + "value": "Nicht verfügbar" + }, + "alert": { + "notifications": "Browserbenachrichtigungen", + "permissionDenied": "Benachrichtigungen sind in diesem Browser blockiert.", + "reached": "Der Countdown hat sein Ziel erreicht." + } + }, + "timer": { + "name": "Timer / Pomodoro", + "description": "Führt einen einfachen Timer oder eine konfigurierbare Pomodoro-Sequenz aus.", + "option": { + "mode": { + "label": "Modus", + "options": { + "timer": "Timer", + "pomodoro": "Pomodoro" + } + }, + "timerMinutes": { + "label": "Timer-Minuten" + }, + "focusMinutes": { + "label": "Fokusminuten" + }, + "shortBreakMinutes": { + "label": "Minuten für kurze Pause" + }, + "longBreakMinutes": { + "label": "Minuten für lange Pause" + }, + "sessionsBeforeLongBreak": { + "label": "Fokussitzungen vor einer langen Pause" + }, + "autoStartBreaks": { + "label": "Pausen automatisch starten" + }, + "autoStartFocus": { + "label": "Fokussitzungen automatisch starten" + } + }, + "phase": { + "timer": "Timer", + "focus": "Fokus", + "shortBreak": "Kurze Pause", + "longBreak": "Lange Pause" + }, + "action": { + "start": "Starten", + "pause": "Pausieren", + "reset": "Zurücksetzen" + }, + "attention": { + "timerComplete": "Timer abgeschlossen", + "phaseReady": "{phase} bereit" + }, + "progress": "Timer-Fortschritt: {progress}%", + "compact": { + "completedFocus": "" + }, + "alert": { + "title": "Timer abgeschlossen", + "completed": "{phase} abgeschlossen." + }, + "advanced": { + "sequence": "Pomodoro-Sequenz", + "focusSession": "Fokus {session}", + "settings": "Dauerhafte Einstellungen", + "settingsHint": "Verwenden Sie das Kontextmenü des Widgets, um diese Board-Einstellungen zu bearbeiten.", + "localAlerts": "Lokale Benachrichtigungen", + "notifications": "Browser-Benachrichtigungen", + "sound": "Timer-Töne", + "localAlertsHint": "Timer-Töne sind standardmässig aktiviert. Töne und Benachrichtigungen gelten nur für dieses Widget in diesem Browser.", + "notificationsDenied": "Benachrichtigungen sind in diesem Browser blockiert." } }, "minecraftServerStatus": { "name": "Status des Minecraft Servers", "description": "Status des Minecraft Servers anzeigen", "option": { - "title": { - "label": "Titel" - }, "domain": { "label": "Server Adresse" }, @@ -1753,11 +2786,21 @@ "noStation": "Keine Station ausgewählt", "option": { "baseUrl": { - "label": "Search.ch-URL" + "label": "Search.ch-URL", + "description": "Benutzerdefinierte URLs müssen zu einer öffentlichen IP-Adresse aufgelöst werden. Private und lokale Hosts werden abgelehnt." }, "station": { - "label": "Bahnhof" + "label": "Bahnhof", + "placeholder": "Nach einer Station suchen" } + }, + "error": { + "customSourceUnavailable": "Die Fahrplanquelle ist nicht verfügbar. Stellen Sie sicher, dass ihre URL zu einer öffentlichen IP-Adresse aufgelöst wird.", + "stationSearch": "Stationen konnten nicht gesucht werden. Überprüfen Sie die benutzerdefinierte URL und Ihren Board-Zugriff." + }, + "warning": { + "stale": "Der Fahrplan konnte nicht aktualisiert werden. Abfahrten mit letzter Aktualisierung um {time} werden angezeigt.", + "staleCompact": "Veraltete Daten" } }, "notebook": { @@ -1789,6 +2832,9 @@ "directionRtl": "Textrichtung von rechts nach links festlegen", "blockquote": "Blockzitat", "horizontalLine": "Horizontale Linie", + "details": "Auf- und zuklappbaren Abschnitt umschalten", + "expandDetails": "Aufklappbaren Abschnitt erweitern", + "collapseDetails": "Aufklappbaren Abschnitt reduzieren", "bulletList": "Aufzählung", "orderedList": "Geordnete Liste", "checkList": "Checkliste", @@ -1797,16 +2843,20 @@ "link": "Verknüpfung", "unlink": "Link entfernen", "image": "Bild einbetten", - "addTable": "Tabelle hinzufügen", + "insertTable": "Tabelle einfügen", + "insertTableSize": "{columns} × {rows}-Tabelle einfügen", "deleteTable": "Tabelle entfernen", "colorCell": "Farbe der Tabellen Zelle", - "mergeCell": "Zellen-Zusammenführung umschalten", + "mergeCells": "Zellen verbinden", + "splitCell": "Zelle teilen", "addColumnLeft": "Spalte davor hinzufügen", "addColumnRight": "Spalte danach hinzufügen", "deleteColumn": "Spalte löschen", "addRowTop": "Zeile davor hinzufügen", "addRowBelow": "Zeile danach hinzufügen", - "deleteRow": "Zeile löschen" + "deleteRow": "Zeile löschen", + "toggleHeaderRow": "Kopfzeile umschalten", + "toggleHeaderColumn": "Kopfspalte umschalten" }, "align": { "left": "Links", @@ -1817,8 +2867,6 @@ "clearColor": "Farbe entfernen", "source": "Quelle", "widthPlaceholder": "Wert in % oder Pixel", - "columns": "Spalten", - "rows": "Zeilen", "width": "Breite", "height": "Höhe" }, @@ -1830,7 +2878,9 @@ "discard": "Änderungen verwerfen", "keepEditing": "Weiterbearbeiten" } - } + }, + "saveFailed": "Notiz konnte nicht gespeichert werden", + "documentStats": "{words, plural, one {# Wort} other {# Wörter}} · {characters, plural, one {# Zeichen} other {# Zeichen}}" }, "anchorNote": { "name": "Anchor-Notiz", @@ -1839,9 +2889,6 @@ "noteId": { "label": "Notiz" }, - "showTitle": { - "label": "Titel anzeigen" - }, "showUpdatedAt": { "label": "Letzte Aktualisierung anzeigen" } @@ -1851,14 +2898,20 @@ "notFound": "Notiz nicht gefunden", "noNotes": "Keine Notizen gefunden", "integrationRequired": "Wählen Sie zuerst eine Anchor-Integration aus", - "updatedAt": "Aktualisiert {date}", "untitled": "Unbenannt", - "edit": "Bearbeiten", - "save": "Speichern", - "cancel": "Abbrechen", "readOnlyViewer": "Sie haben Lesezugriff auf diese Notiz. Die Bearbeitung ist deaktiviert.", "saveForbidden": "Sie haben keine Berechtigung, diese Notiz zu bearbeiten.", - "saveFailed": "Fehler beim Speichern dieser Notiz. Bitte versuchen Sie es erneut." + "saveFailed": "Fehler beim Speichern dieser Notiz. Bitte versuchen Sie es erneut.", + "createdAt": "Erstellt am {date}", + "permission": { + "owner": "Eigentümer", + "editor": "Bearbeiter", + "viewer": "Betrachter" + }, + "status": { + "pinned": "Angeheftet", + "archived": "Archiviert" + } }, "iframe": { "name": "iFrame", @@ -1917,6 +2970,25 @@ "clickable": { "label": "Anklickbar" } + }, + "state": { + "on": "Ein", + "off": "Aus", + "unavailable": "Nicht verfügbar", + "unknown": "Unbekannt" + }, + "advanced": { + "entityId": "Entitäts-ID: {id}", + "lastChanged": "Geändert am {date}", + "attribute": { + "unit": "Einheit", + "deviceClass": "Geräteklasse", + "icon": "Symbol" + } + }, + "error": { + "loadFailed": "Entität konnte nicht geladen werden", + "toggleFailed": "Entität konnte nicht aktualisiert werden" } }, "smartHome-executeAutomation": { @@ -1932,11 +3004,31 @@ }, "spotlightAction": { "run": "{name} ausführen" + }, + "advanced": { + "lastExecuted": "Letzte Ausführung um {time}", + "automationId": "Automatisierungs-ID: {id}", + "ready": "Bereit zur Ausführung", + "noPermission": "Keine Berechtigung zum Ausführen dieser Automatisierung" + }, + "status": { + "running": "Automatisierung wird ausgeführt", + "success": "Automatisierung abgeschlossen" + }, + "error": { + "executeFailed": "Automatisierung konnte nicht ausgeführt werden" } }, "stockPrice": { "name": "Aktienkurs", "description": "Zeigt den aktuellen Aktienkurs eines Unternehmens an", + "advanced": { + "currentPrice": "Aktueller Preis", + "previousClose": "Vorheriger Schlusskurs", + "changePercentage": "Änderung (%)", + "minimum": "Mindestwert", + "maximum": "Höchstwert" + }, "option": { "stock": { "label": "Aktiensymbol" @@ -2007,6 +3099,10 @@ "label": "1 Monat" } } + }, + "showDetails": { + "label": "Details anzeigen", + "description": "Zeigt in der kompakten Ansicht den Namen, die Änderung und den Zeitraum an. Deaktivieren Sie die Option, um nur Symbol und Preis anzuzeigen." } } }, @@ -2034,6 +3130,13 @@ "showUnmonitored": { "label": "Nicht überwachte anzeigen" } + }, + "advanced": { + "previousMonth": "Vorherigen Monat anzeigen", + "nextMonth": "Nächsten Monat anzeigen", + "eventCount": "{count, plural, one {# Ereignis} other {# Ereignisse}}", + "loading": "Kalenderereignisse werden geladen...", + "noEvents": "Keine Ereignisse in diesem Monat" } }, "weather": { @@ -2046,16 +3149,18 @@ "disableTemperatureDecimals": { "label": "Deaktivieren der Temperatur Dezimalstellen" }, + "animateIcons": { + "label": "Wettersymbole animieren" + }, + "showHumidity": { + "label": "Luftfeuchtigkeit anzeigen" + }, "showCurrentWindSpeed": { - "label": "Aktuelle Windgeschwindigkeit anzeigen", - "description": "Nur bei aktuellem Wetter" + "label": "Aktuelle Windgeschwindigkeit anzeigen" }, "useImperialSpeed": { "label": "" }, - "location": { - "label": "Wetterstandort" - }, "showCity": { "label": "Stadt anzeigen" }, @@ -2065,13 +3170,10 @@ "forecastDayCount": { "label": "Anzahl der Prognose Tage", "description": "Wenn das Widget nicht breit genug ist, werden weniger Tage angezeigt" - }, - "dateFormat": { - "label": "Datumsformat", - "description": "Wie das Datum aussehen sollte" } }, "currentWindSpeed": "{currentWindSpeed} {unit}", + "disabled": "Wetterdaten sind nicht verfügbar, da ausgehende Verbindungen deaktiviert sind", "dailyForecast": { "sunrise": "Sonnenaufgang", "sunset": "Sonnenuntergang", @@ -2094,6 +3196,47 @@ "thunderstorm": "Gewitter", "thunderstormWithHail": "Gewitter mit Hagel", "unknown": "Unbekannt" + }, + "details": "Wetterdetails anzeigen", + "detailsFor": "Wetterdetails für {date} anzeigen", + "advanced": { + "forecast": "7-Tage-Prognose", + "hourlyForecast": "Nächste 24 Stunden", + "day": "Tag", + "time": "Zeit", + "conditions": "Bedingungen", + "temperature": "Temperatur", + "feelsLike": "Gefühlt {temperature}", + "feelsLikeLabel": "Gefühlt", + "feelsLikeRange": "Gefühlt: {maximum} / {minimum}", + "highLow": "Höchstwert {maximum} · Tiefstwert {minimum}", + "observedAt": "Aktualisiert um {time}", + "humidity": "Luftfeuchtigkeit", + "averageHumidity": "Durchschnittliche Luftfeuchtigkeit: {humidity}%", + "currentHumidity": "Aktuelle Luftfeuchtigkeit", + "wind": "Wind / Böen ({unit})", + "currentWind": "Aktueller Wind / Böen", + "windValue": "{speed} / {gusts} {unit}", + "windDetail": "Max. Wind / Böen: {speed} / {gusts} {unit}", + "nextHourPrecipitation": "Niederschlag in der nächsten Stunde", + "precipitationChance": "Niederschlagswahrscheinlichkeit", + "precipitationValue": "{probability}% · {amount} mm", + "precipitationDetail": "Niederschlag: {probability}% · {amount} mm", + "todayUv": "Heutiger maximaler UV-Index", + "uvIndex": "Max. UV-Index: {value}", + "daylight": "Tageslicht: {duration}", + "hourlyTooltip": "Gefühlt {feelsLike}{temperatureUnit} · {amount} mm · {humidity}% Luftfeuchtigkeit · {speed} {speedUnit} Wind", + "hourlyTooltipWithoutHumidity": "Gefühlt {feelsLike}{temperatureUnit} · {amount} mm · {speed} {speedUnit} Wind", + "detailLabel": { + "feelsLike": "Gefühlt", + "precipitation": "Niederschlag", + "humidity": "Durchschnittliche Luftfeuchtigkeit", + "wind": "Max. Wind / Böen", + "uv": "Max. UV-Index", + "daylight": "Tageslicht" + }, + "sun": "Sonnenaufgang / Sonnenuntergang", + "noForecast": "Keine Vorhersagedaten verfügbar" } }, "indexerManager": { @@ -2106,8 +3249,15 @@ }, "title": "Index Manager", "testAll": "Alle testen", + "status": { + "healthy": "Gesund", + "unhealthy": "Fehlerhaft", + "disabled": "Deaktiviert", + "unknown": "Gesundheitsstatus nicht verfügbar" + }, "error": { - "internalServerError": "Fehler beim Abrufen des Indexer Status" + "internalServerError": "Fehler beim Abrufen des Indexer Status", + "testAll": "Der Indexer-Test ist fehlgeschlagen. Versuchen Sie es erneut." } }, "healthMonitoring": { @@ -2136,11 +3286,6 @@ "fileSystem": { "label": "Dateisystem Info anzeigen" }, - "visibleStorageVolumes": { - "label": "Sichtbare Speichervolumes", - "description": "Nur verfügbar, wenn alle ausgewählten Integrationen Synology betreffen. Leer lassen, um alle erkannten Speichervolumes anzuzeigen.", - "placeholder": "Speichervolumes auswählen" - }, "defaultTab": { "label": "Standard Tab" }, @@ -2163,17 +3308,27 @@ "minutes": "{count} Minuten", "used": "Belegt", "available": "Verfügbar", - "lastSeen": "Letzte Statusaktualisierung: {lastSeen}" + "lastSeen": "Letzte Statusaktualisierung: {lastSeen}", + "updatesAvailable": "{count, plural, one {# Update verfügbar} other {# Updates verfügbar}}", + "rebootRequired": "Neustart erforderlich", + "rebootNotRequired": "Kein Neustart erforderlich" + }, + "smartStatus": { + "attributesWithinThresholds": "SMART: Attribute innerhalb der Grenzwerte", + "attributesFailed": "SMART: {attributes} fehlgeschlagen", + "noCriticalWarning": "SMART: Keine Warnung von der SSD gemeldet", + "criticalWarning": "SMART: Kritische Warnung von der SSD gemeldet" + }, + "gauge": { + "cpuUsage": "CPU-Auslastung", + "cpuTemperature": "CPU-Temperatur", + "memoryUsage": "Speichernutzung", + "gpuUsage": "{name}-GPU-Auslastung" }, - "memory": {}, "error": { "internalServerError": "Fehler beim Abrufen des Gesundheitsstatus" }, "cluster": { - "summary": { - "cpu": "CPU", - "memory": "RAM" - }, "resource": { "node": { "name": "Knoten" @@ -2209,8 +3364,6 @@ "table": { "header": { "name": "Name", - "cpu": "CPU", - "memory": "RAM", "node": "Knoten" } } @@ -2220,33 +3373,29 @@ "name": "Docker-Statistiken", "description": "Statistiken Ihrer Container (Dieses Widget kann nur mit Administratorrechten hinzugefügt werden)", "option": { - "columns": { - "label": "Anzuzeigende Spalten" + "endpointIds": { + "label": "Docker-Umgebungen", + "description": "Leer lassen, um Container aus jeder Docker-Umgebung anzuzeigen", + "placeholder": "Alle Docker-Umgebungen" }, - "enableRowSorting": { - "label": "Sortierung der Elemente aktivieren" + "containerFilter": { + "label": "Zu filternde Container" + }, + "filterIsWhitelist": { + "label": "Als Whitelist filtern" }, "defaultSort": { - "label": "Standardmässig verwendete Spalte zur Sortierung", "option": { "name": "Name", "state": "Zustand", "cpuUsage": "CPU-Auslastung", "memoryUsage": "Speichernutzung" } - }, - "descendingDefaultSort": { - "label": "Sortierung umkehren" - }, - "columnOrder": { - "label": "Spaltenreihenfolge" - }, - "columnWidths": { - "label": "Spaltenbreiten" } }, "error": { "internalServerError": "Fehler beim Abrufen der Containerstatistiken", + "endpointsUnavailable": "Docker-Endpunkte sind nicht verfügbar", "layoutSaveTitle": "Tabellenlayout nicht gespeichert", "layoutSaveMessage": "Das Docker-Tabellenlayout konnte nicht gespeichert werden. Versuchen Sie, die Spalte erneut zu verschieben oder ihre Grösse zu ändern." }, @@ -2255,7 +3404,6 @@ } }, "coolify": { - "name": "Coolify", "description": "Übersicht Ihrer Coolify-Instanz mit Servern und Anwendungen", "option": { "showServers": { @@ -2281,17 +3429,49 @@ "internalServerError": "Fehler beim Abrufen der Coolify-Daten" }, "server": { - "buildServer": "Erstellen" + "buildServer": "Erstellen", + "resourceCounts": "{applications, plural, one {# Anwendung} other {# Anwendungen}} / {services, plural, one {# Dienst} other {# Dienste}}", + "reachability": "Erreichbarkeit", + "usability": "Nutzbarkeit" + }, + "source": { + "url": "Quelle: {url}", + "unavailable": "{source}: nicht verfügbar" }, "instances": { "title": "Instanzen" + }, + "action": { + "openResource": "{name} öffnen", + "openLogs": "Protokolle von {name} öffnen", + "showIp": "IP-Adresse anzeigen", + "hideIp": "IP-Adresse ausblenden" + }, + "status": { + "running": "Wird ausgeführt", + "stopped": "Gestoppt", + "exited": "Beendet", + "starting": "Wird gestartet", + "restarting": "Startet neu", + "unknown": "Unbekannt", + "online": "Verfügbar", + "offline": "Nicht verfügbar", + "reachable": "Erreichbar", + "unreachable": "Nicht erreichbar", + "usable": "Nutzbar", + "unusable": "Nicht nutzbar" } }, "vpn": { "name": "VPN", "description": "Übersicht über Ihre VPN-Verbindungen", "serviceUnavailable": "VPN nicht verfügbar", - "option": {} + "status": { + "running": "Wird ausgeführt", + "notRunning": "Wird nicht ausgeführt", + "unavailable": "Nicht verfügbar", + "vpn": "VPN: {status}" + } }, "ups": { "name": "USV", @@ -2318,14 +3498,19 @@ "runtime": "Laufzeit", "load": "Last", "input": "Eingang", - "output": "Ausgang" + "output": "Ausgang", + "batteryVoltage": "Batteriespannung", + "power": "Leistung", + "temperature": "Temperatur", + "manufacturer": "Hersteller", + "model": "Modell", + "serial": "Seriennummer" }, "error": { "internalServerError": "Fehler beim Abrufen der USV-Daten" } }, "tracearr": { - "name": "Tracearr", "description": "Erweiterte Medienserverüberwachung mit detaillierten Stream- und Transkodierungsdaten", "option": { "showStreams": { @@ -2413,10 +3598,7 @@ "label": "Ereignis", "description": "Gesamte Vorkommnisse eines bestimmten Ereignisses anzeigen", "placeholder": "Wählen Sie ein Ereignis aus", - "loading": "Ereignisse werden geladen ...", - "noEvents": "Keine Ereignisse gefunden", - "none": "Kein Ereignis", - "configureWebsiteFirst": "Wählen Sie zuerst eine Website aus, um Ereignisse zu laden" + "none": "Kein Ereignis" }, "chartType": { "label": "Diagrammtyp", @@ -2447,26 +3629,21 @@ "eventNames": { "label": "Ereignisse", "description": "Wählen Sie mindestens ein Ereignis für das Diagramm aus", - "placeholder": "Ereignisse auswählen ...", - "loading": "Ereignisse werden geladen ...", - "noEvents": "Keine Ereignisse gefunden", - "configureWebsiteFirst": "Wählen Sie zuerst eine Website aus, um Ereignisse zu laden" + "placeholder": "Ereignisse auswählen ..." }, "topCount": { "label": "Anzuzeigende Elemente", "description": "Anzahl der anzuzeigenden Top-Elemente (max. 500)" + }, + "events": { + "loading": "Ereignisse werden geladen...", + "noEvents": "Keine Ereignisse gefunden", + "configureWebsiteFirst": "Wählen Sie zuerst eine Website aus, um Ereignisse zu laden" } }, "event": { - "occurrences": "Ereignisse", "label": "Ereignisse" }, - "topPages": { - "direct": "Direkt" - }, - "topReferrers": { - "direct": "Direkt" - }, "events": { "selectPrompt": "Ereignisse für das Diagramm auswählen" }, @@ -2475,6 +3652,9 @@ "noWebsite": "Keine Website konfiguriert", "noData": "Keine Daten verfügbar", "internalServerError": "Fehler beim Abrufen der Umami-Daten" + }, + "top": { + "direct": "Direkt" } }, "common": { @@ -2502,7 +3682,8 @@ }, "integration": { "noData": "Keine Integration gefunden", - "description": "Klicken Sie um eine neue Integration zu erstellen" + "description": "Klicken Sie um eine neue Integration zu erstellen", + "manage": "Integrationen verwalten" }, "app": { "noData": "Keine App gefunden", @@ -2513,7 +3694,61 @@ "noIntegration": "Keine Integration ausgewählt", "noData": "Keine Integrationsdaten verfügbar" }, - "option": {} + "integrationDisconnected": "Keine Daten verfügbar, alle Integrationen getrennt", + "updatedAt": "Aktualisiert {date}", + "title": { + "label": "Titel" + }, + "openInNewTab": { + "label": "In neuem Tab öffnen" + }, + "showTitle": { + "label": "Titel anzeigen" + }, + "weatherLocation": { + "label": "Wetterstandort" + }, + "layout": { + "label": "Ansicht", + "option": { + "horizontal": "Waagrecht", + "vertical": "Vertikal", + "grid": "Raster" + } + }, + "select": { + "loading": "Wird geladen...", + "loadError": "Fehler beim Laden der Optionen" + }, + "dateFormat": { + "label": "Datumsformat", + "description": "Wie das Datum aussehen sollte" + }, + "visibleStorageVolumes": { + "label": "Sichtbare Speichervolumes", + "description": "Nur verfügbar, wenn jede ausgewählte Integration OpenMediaVault oder Synology ist. Leer lassen, um alle erkannten Speichervolumes anzuzeigen.", + "placeholder": "Speichervolumes auswählen" + }, + "tableOptions": { + "columns": { + "label": "Anzuzeigende Spalten" + }, + "columnOrder": { + "label": "Spaltenreihenfolge" + }, + "columnWidths": { + "label": "Spaltenbreiten" + }, + "enableRowSorting": { + "label": "Sortierung von Elementen aktivieren" + }, + "defaultSort": { + "label": "Standardmäßig verwendete Spalte zur Sortierung" + }, + "invertSorting": { + "label": "Sortierung umkehren" + } + } }, "video": { "name": "Videostream", @@ -2572,6 +3807,7 @@ "transcoding": "Transkodierung", "paused": "Pausiert", "remaining": "{minutes} Min. verbleibend", + "seasonEpisode": "S{season} E{episode}", "metadata": { "title": "Statistiken für Nerds", "video": { @@ -2589,11 +3825,16 @@ "resolution": "Auflösung", "target": "Zielcodec" } - } + }, + "unknownUser": "Unbekannter Benutzer" + }, + "summary": { + "sessions": "{count, plural, one {# Sitzung} other {# Sitzungen}}", + "playing": "{count} Wiedergabe", + "transcoding": "{count} Transkodierung" } }, "paperlessNgx": { - "name": "Paperless-ngx", "description": "Übersicht Ihres Paperless-ngx-Dokumentenarchivs", "documentsTotal": "Dokumente insgesamt", "documentsInbox": "Posteingang", @@ -2638,7 +3879,6 @@ } }, "patchmon": { - "name": "PatchMon", "description": "Übersicht über den Patch-Status der Hosts von PatchMon", "title": "PatchMon-Statistiken", "totalHosts": "Hosts gesamt", @@ -2705,36 +3945,30 @@ "description": "Die Anzahl der Hosts mit erforderlichen Updates als absoluten Wert oder Prozentsatz der Gesamtzahl der Hosts vergleichen" }, "hostsNeedingUpdatesWarningAt": { - "label": "Warnschwellwert für erforderliche Updates", - "description": "Gelb anzeigen, wenn der Wert diesen Schwellwert erreicht" + "label": "Warnschwellwert für erforderliche Updates" }, "hostsNeedingUpdatesCriticalAt": { - "label": "Kritischer Schwellwert für erforderliche Updates", - "description": "Rot anzeigen, wenn der Wert diesen Schwellwert erreicht" + "label": "Kritischer Schwellwert für erforderliche Updates" }, "securityUpdatesThresholdMode": { "label": "Schwellwertmodus für Sicherheitsupdates", "description": "Die Anzahl der Sicherheitsupdates als absoluten Wert oder Prozentsatz der Gesamtzahl der Hosts vergleichen" }, "securityUpdatesWarningAt": { - "label": "Warnschwellwert für Sicherheitsupdates", - "description": "Gelb anzeigen, wenn der Wert diesen Schwellwert erreicht" + "label": "Warnschwellwert für Sicherheitsupdates" }, "securityUpdatesCriticalAt": { - "label": "Kritischer Schwellwert für Sicherheitsupdates", - "description": "Rot anzeigen, wenn der Wert diesen Schwellwert erreicht" + "label": "Kritischer Schwellwert für Sicherheitsupdates" }, "hostsWithSecurityUpdatesThresholdMode": { "label": "Schwellwertmodus für Hosts mit Sicherheitsupdates", "description": "Die Anzahl der Hosts als absoluten Wert oder Prozentsatz der Gesamtzahl der Hosts vergleichen" }, "hostsWithSecurityUpdatesWarningAt": { - "label": "Warnschwellwert für Hosts mit Sicherheitsupdates", - "description": "Gelb anzeigen, wenn der Wert diesen Schwellwert erreicht" + "label": "Warnschwellwert für Hosts mit Sicherheitsupdates" }, "hostsWithSecurityUpdatesCriticalAt": { - "label": "Kritischer Schwellwert für Hosts mit Sicherheitsupdates", - "description": "Rot anzeigen, wenn der Wert diesen Schwellwert erreicht" + "label": "Kritischer Schwellwert für Hosts mit Sicherheitsupdates" }, "upToDateHostsThresholdMode": { "label": "Schwellwertmodus für aktuelle Hosts", @@ -2753,12 +3987,10 @@ "description": "Die Anzahl der veralteten Pakete als absoluten Wert oder Prozentsatz der Gesamtzahl der Hosts vergleichen" }, "totalOutdatedPackagesWarningAt": { - "label": "Warnschwellwert für veraltete Pakete", - "description": "Gelb anzeigen, wenn der Wert diesen Schwellwert erreicht" + "label": "Warnschwellwert für veraltete Pakete" }, "totalOutdatedPackagesCriticalAt": { - "label": "Kritischer Schwellwert für veraltete Pakete", - "description": "Rot anzeigen, wenn der Wert diesen Schwellwert erreicht" + "label": "Kritischer Schwellwert für veraltete Pakete" }, "showOsDistribution": { "label": "Betriebssystem-Distribution anzeigen", @@ -2789,6 +4021,14 @@ "bars": "Horizontale Balken", "donut": "Ringdiagramm" } + }, + "threshold": { + "warningAt": { + "description": "Gelb eingeben, wenn der Wert diesen Grenzwert erreicht" + }, + "criticalAt": { + "description": "Rot eingeben, wenn der Wert diesen Grenzwert erreicht" + } } }, "error": { @@ -2796,12 +4036,12 @@ } }, "bazarr": { - "name": "Bazarr", "description": "Übersicht über fehlende Untertitel und den Gesundheitsstatus Ihrer Bazarr-Instanz", "episodes": "Fehlende Episoden", "movies": "Fehlende Filme", "providers": "Anbieterprobleme", "status": "Gesundheitsprobleme", + "announcements": "Ankündigungen", "option": { "showMissingEpisodes": { "label": "Fehlende Episoden anzeigen", @@ -2848,7 +4088,8 @@ "users": "Benutzer", "photos": "Fotos", "videos": "Videos", - "storage": "Verwendeter Speicher" + "storage": "Verwendeter Speicher", + "albumLimit": "Grösste Alben (bis zu {count} angezeigt)" }, "immich-albumCarousel": { "name": "Immich-Album", @@ -2872,24 +4113,21 @@ } }, "description": "Diashow von Bildern aus einem Immich-Album oder Ihrer gesamten Bibliothek", - "noPhotos": "Keine Fotos gefunden" + "noPhotos": "Keine Fotos gefunden", + "albumPhoto": "Albumfoto", + "actions": { + "previousPhoto": "Vorheriges Foto", + "nextPhoto": "Nächstes Foto", + "pauseSlideshow": "Diashow pausieren", + "resumeSlideshow": "Diashow fortsetzen", + "toggleSlideshow": "Diashow pausieren oder fortsetzen", + "photo": "Foto {number}" + } }, "downloads": { "name": "Download-Client", "description": "Ermöglicht es Ihnen, Ihre Downloads sowohl von Torrent- als auch von Usenet-Clients anzusehen und zu verwalten.", "option": { - "columns": { - "label": "Anzuzeigende Spalten" - }, - "enableRowSorting": { - "label": "Sortierung von Elementen aktivieren" - }, - "defaultSort": { - "label": "Standardmäßig verwendete Spalte zur Sortierung" - }, - "descendingDefaultSort": { - "label": "Sortierung umkehren" - }, "showCompletedUsenet": { "label": "Usenet Einträge anzeigen die abgeschlossen wurden" }, @@ -2914,12 +4152,6 @@ "limitPerIntegration": { "label": "Elemente pro Integration begrenzen", "description": "Dies begrenzt die Anzahl der Elemente pro Integration, jedoch nicht global" - }, - "columnOrder": { - "label": "Spaltenreihenfolge" - }, - "columnWidths": { - "label": "Spaltenbreiten" } }, "errors": { @@ -2950,7 +4182,7 @@ "detailsTitle": "Aktueller Index im Client" }, "id": { - "columnTitle": "ID", + "columnTitle": "Element-ID", "detailsTitle": "Element-ID" }, "integration": { @@ -3080,6 +4312,10 @@ "mediaRequests-requestList": { "name": "Liste der Medienanfragen", "description": "Sehen Sie eine Liste aller Medienanfragen von Ihrer Overseerr- oder Jellyseerr-Instanz", + "empty": { + "title": "Noch keine Medienanfragen", + "description": "Suchen Sie nach einem Film oder einer Serie, um eine Anfrage zu starten." + }, "option": { "linksTargetNewTab": { "label": "Links in neuem Tab öffnen" @@ -3113,12 +4349,16 @@ "failed": "Fehlgeschlagen", "completed": "Abgeschlossen" }, + "unknown": "Unbekannt", "toBeDetermined": "Noch Festzulegen" }, "mediaRequests-requestStats": { "name": "Statistik der Medienanfragen", "description": "Statistiken über Ihre Medienanfragen", - "option": {}, + "empty": { + "title": "Noch keine Aktivitäten zu Anfragen", + "description": "Die Statistiken werden nach der ersten Medienanfrage angezeigt." + }, "titles": { "stats": { "main": "Medien Statistiken", @@ -3128,8 +4368,7 @@ "declined": "Bereits abgelehnt", "available": "Bereits verfügbar", "tv": "TV Anfragen", - "movie": "Film Anfragen", - "total": "Gesamt" + "movie": "Film Anfragen" }, "users": { "main": "Top Nutzer", @@ -3155,7 +4394,6 @@ }, "currentIndex": "{start}-{end} von {total}", "healthCheck": { - "title": "Gesundheitscheck", "queued": "In der Warteschlange", "status": { "healthy": "Gesund", @@ -3164,35 +4402,30 @@ }, "panel": { "statistics": { - "empty": "Leer", - "transcodes": "Transkodieren", - "transcodesCount": "Transkodierungen", - "healthChecksCount": "Health Check", "filesCount": "Dateien", "savedSpace": "Belegter Speicherplatz", - "healthChecks": "Gesundheitscheck", "videoCodecs": "Codecs", "videoContainers": "Container", "videoResolutions": "Auflösungen" }, "workers": { - "empty": "Leer", "table": { - "file": "Datei", "eta": "Voraussichtlicher Abschluss", - "progress": "Fortschritt", - "transcode": "Transkodieren", - "healthCheck": "Gesundheitscheck" + "progress": "Fortschritt" } }, "queue": { - "empty": "Leer", "table": { - "file": "Datei", - "size": "Größe", - "transcode": "Transkodieren", - "healthCheck": "Gesundheitscheck" + "size": "Größe" } + }, + "common": { + "empty": "Leer", + "file": "Datei", + "healthCheck": "Gesundheitscheck", + "transcode": "Transkodieren", + "transcodes": "Transkodieren", + "healthChecks": "Gesundheitscheck" } } }, @@ -3216,7 +4449,8 @@ }, "type": { "movie": "Film", - "episode": "Episode" + "episode": "Episode", + "book": "Buch" }, "empty": { "missing": "Keine fehlenden Elemente", @@ -3247,6 +4481,13 @@ "showPosterImage": { "label": "Posterbild anzeigen" } + }, + "error": { + "allFeedsFailed": "RSS-Feeds konnten nicht geladen werden. Überprüfen Sie die Feed-URLs und versuchen Sie es erneut." + }, + "warning": { + "partial": "{count, plural, one {# RSS-Feed konnte nicht geladen werden} other {# RSS-Feeds konnten nicht geladen werden}}", + "stale": "RSS-Feeds konnten nicht aktualisiert werden. Zuvor geladene Einträge werden angezeigt." } }, "releases": { @@ -3322,17 +4563,8 @@ "label": "Regulärer Ausdruck" } }, - "edit": { - "label": "Ändern" - }, "editForm": { - "title": "Repository bearbeiten", - "cancel": { - "label": "Abbrechen" - }, - "confirm": { - "label": "Bestätigen" - } + "title": "Repository bearbeiten" }, "importForm": { "title": "Von Docker importieren" @@ -3349,8 +4581,7 @@ "label": "Anbieter-Tokens", "token": "Token", "configured": "Token konfiguriert", - "notConfigured": "Kein Token festgelegt", - "save": "Speichern" + "notConfigured": "Kein Token festgelegt" } } }, @@ -3377,17 +4608,32 @@ "noProviderResponse": "Keine Antwort vom Anbieter", "unexpected": "Unerwarteter Anbieterfehler" } - } + }, + "expandDetails": "Details für {name} anzeigen", + "collapseDetails": "Details für {name} ausblenden" }, "networkControllerSummary": { - "option": {}, - "card": { - "vpn": { - "countConnected": "{count} verbunden" + "advanced": { + "updated": "Aktualisiert", + "metric": { + "latency": "Latenz", + "ping": "Ping", + "uptime": "Laufzeit", + "users": "Benutzer", + "guests": "Gäste" } }, + "card": { + "vpn": { + "countConnected": "{count, plural, one {# verbunden} other {# verbunden}}", + "label": "VPN" + }, + "wan": "WAN", + "web": "Web", + "wifi": "WLAN", + "lan": "LAN" + }, "error": { - "integrationsDisconnected": "Keine Daten verfügbar, alle Integrationen getrennt", "unknownContentOption": "Unbekannte Inhaltsoption für das Netzwerk-Controller-Zusammenfassungs-Widget: " }, "name": "Zusammenfassung des Netzwerk-Controllers", @@ -3424,7 +4670,6 @@ } }, "error": { - "integrationsDisconnected": "Keine Daten verfügbar, alle Integrationen getrennt", "unknownContentOption": "Unbekannte Inhaltsoption für das Netzwerkstatus-Widget: " }, "name": "Netzwerkstatus", @@ -3454,7 +4699,6 @@ "versiontitle": "Versionen", "cputitle": "CPU-Auslastung", "memorytitle": "Speichernutzung", - "cpu": "CPU", "memory": "RAM", "interfaces": { "name": "Name", @@ -3462,6 +4706,16 @@ "recv": "Empfangen", "title": "Netzwerkschnittstellen" } + }, + "empty": { + "noInterfaces": "Noch keine Daten zu Netzwerkschnittstellen" + }, + "versionUnknown": "Unbekannte Version", + "metricAccessible": "{metric}: {value} %, {status}", + "status": { + "normal": "Normal", + "warning": "Warnung", + "critical": "Kritisch" } }, "notifications": { @@ -3471,8 +4725,21 @@ "option": { "hideLogos": { "label": "Logos ausblenden" + }, + "messageFormat": { + "label": "Nachrichtenformat", + "option": { + "auto": "Automatisch", + "plain": "Nur Text", + "markdown": "Markdown", + "html": "HTML" + } } - } + }, + "openService": "Benachrichtigungsdienst öffnen", + "deleteNotification": "Benachrichtigung aus Gotify löschen", + "deleteFailed": "Benachrichtigung konnte nicht gelöscht werden", + "deleteFailedMessage": "Die Benachrichtigung konnte nicht gelöscht werden. Bitte versuche es erneut." }, "speedtestTracker": { "name": "Speedtest Tracker", @@ -3514,7 +4781,6 @@ } }, "uptimeKuma": { - "name": "Uptime Kuma", "description": "Betriebszeitstatistiken Ihrer Uptime-Kuma-Statusseite überwachen", "option": { "showAverageUptime": { @@ -3551,10 +4817,14 @@ }, "error": { "internalServerError": "Fehler beim Abrufen der Betriebszeitdaten" + }, + "status": { + "up": "Upload gesamt", + "down": "Download Geschwindigkeit", + "paused": "Pausiert" } }, "traefik": { - "name": "Traefik", "description": "Übersicht über Traefik-Router, -Dienste, -Middlewares und Entry-Points", "option": { "showTcp": { @@ -3575,7 +4845,6 @@ }, "resource": { "routers": "Router", - "services": "Dienste", "middlewares": "Middlewares" }, "status": { @@ -3585,7 +4854,20 @@ }, "error": { "internalServerError": "Fehler beim Abrufen der Traefik-Daten" - } + }, + "resourceType": { + "router": "Router", + "service": "Dienst", + "middleware": "Middleware" + }, + "resourceStatus": { + "enabled": "Aktiviert", + "disabled": "Deaktiviert", + "warning": "Warnung", + "error": "Fehler", + "unknown": "Unbekannt" + }, + "failedEndpoint": "Fehlgeschlagen: {endpoint}" }, "audioStats": { "name": "Audiostatistiken", @@ -3651,9 +4933,7 @@ "label": "Sichtbare Diagramme", "description": "Wählen Sie die Diagramme aus, die angezeigt werden sollen.", "option": { - "cpu": "CPU", "memory": "RAM", - "gpu": "GPU", "network": "Netzwerk" } }, @@ -3668,12 +4948,11 @@ } }, "card": { - "cpu": "CPU", "memory": "MEM", - "gpu": "GPU", "network": "NET", "up": "AUF", - "down": "AB" + "down": "AB", + "memoryTooltip": "{used} / {available} ({percent}%)" } }, "systemDisks": { @@ -3699,151 +4978,88 @@ }, "showBackgroundBar": { "label": "Hintergrundnutzungsleiste anzeigen" - }, - "visibleStorageVolumes": { - "label": "Sichtbare Speichervolumes", - "description": "Nur verfügbar, wenn alle ausgewählten Integrationen Synology betreffen. Leer lassen, um alle erkannten Speichervolumes anzuzeigen.", - "placeholder": "Speichervolumes auswählen" } }, "status": { - "unhealthy": "Fehlerhaft" + "unhealthy": "Fehlerhaft", + "smart": "SMART", + "free": "{percentage}% frei" + } + }, + "customApi": { + "name": "Benutzerdefiniertes Widget", + "description": "Eine konfigurierte benutzerdefinierte JSX-Definition rendern.", + "customJsx": { + "noTemplate": "Keine JSX-Vorlage konfiguriert.", + "templateWarnings": "{count} Vorlagenwarnungen:", + "requestIdRequired": "Diese Netzwerksteuerung erfordert eine benannte requestId.", + "unsavedPreview": "Führe den ersten Anfragetest im Editor aus, bevor du benannte Anfragen testest.", + "invalidParams": "Die Anfrageparameter sind ungültig.", + "loading": "Anfrage wird geladen...", + "loadRequest": "Anfrage laden", + "requestFailed": "Die Anfrage ist fehlgeschlagen.", + "retry": "Anfrage erneut versuchen", + "actionCompleted": "Aktion erfolgreich abgeschlossen.", + "actionSimulated": "Aktion simuliert; es wurde keine Anfrage gesendet.", + "actionsDisabledEditMode": "Aktionen sind deaktiviert, während sich das Dashboard im Bearbeitungsmodus befindet.", + "widgetItemUnavailable": "Dieses Widget-Element ist nicht verfügbar.", + "toggle": "Umschalten", + "copied": "Kopiert", + "confirmDelete": "Diese destruktive Aktion bestätigen." + }, + "option": { + "definitionId": { + "label": "Benutzerdefiniertes Widget" + }, + "refreshInterval": { + "label": "Aktualisierungsintervall", + "description": "Wie oft Daten von der API neu geladen werden sollen (in Sekunden)" + } + }, + "noDefinition": "Keine Definition ausgewählt", + "definitionNotFound": "Benutzerdefiniertes Widget nicht verfügbar", + "migrationRequired": "Dieses alte benutzerdefinierte Widget bleibt erhalten, muss jedoch über «Benutzerdefinierte Widgets verwalten» zu Custom JSX v2 migriert werden, bevor es ausgeführt werden kann.", + "manageMigration": "Benutzerdefinierte Widgets verwalten öffnen", + "contactAdmin": "Kontaktiere eine Administratorin oder einen Administrator.", + "configurationNeedsRepair": "Die Optionen dieses Widgets wurden geändert. Bearbeite das Widget, um seine Konfiguration zu reparieren.", + "removeFromBoard": "Vom Dashboard entfernen", + "editModePending": "Speichere das Dashboard, um dieses Widget zu laden.", + "picker": { + "group": "Benutzerdefinierte JSX-Widgets", + "empty": "Keine benutzerdefinierten Widgets gefunden", + "preview": "Vorschau", + "sources": "{count, plural, one {# Quelle} other {# Quellen}}", + "requests": "{count, plural, one {# Anfrage} other {# Anfragen}}", + "migrationRequired": "Migration erforderlich", + "migrationDescription": "Dieses platzierte v1-Widget kann noch nicht ausgeführt werden. Kopiere die redigierte Eingabeaufforderung in ein LLM und füge anschliessend die einzelne JSON-Antwort in Homarr ein.", + "manageMigration": "Benutzerdefinierte Widgets verwalten öffnen", + "contactAdmin": "Kontaktiere eine Administratorin oder einen Administrator." + }, + "configuration": { + "needsAttention": "Konfiguration erfordert Aufmerksamkeit: {message}", + "advancedOptions": "Erweiterte Einstellungen", + "invalidJson": "Ungültiges JSON" } }, "beszelSystemTable": { "name": "Beszel-Systeme (Tabelle)", "description": "Tabellenansicht aller von Beszel überwachten Systeme mit sortierbaren Spalten und Statusindikatoren", "option": { - "statusFilter": { - "label": "Statusfilter" - }, "sortBy": { "label": "Sortieren nach" }, "sortDirection": { "label": "Sortierrichtung" - }, - "showCpu": { - "label": "CPU anzeigen" - }, - "showMemory": { - "label": "Arbeitsspeicher anzeigen" - }, - "showDisk": { - "label": "Datenträger anzeigen" - }, - "showGpu": { - "label": "GPU anzeigen" - }, - "showLoadAvg": { - "label": "Systemlast anzeigen" - }, - "showNet": { - "label": "Netzwerk anzeigen" - }, - "showTemp": { - "label": "Temperatur anzeigen" - }, - "showBattery": { - "label": "Akkustand anzeigen" - }, - "showServices": { - "label": "Dienste anzeigen" - }, - "showUptime": { - "label": "Laufzeit anzeigen" - }, - "showAgent": { - "label": "Agentenversion anzeigen" - }, - "columnOrder": { - "label": "Spaltenreihenfolge" - }, - "columnWidths": { - "label": "Spaltenbreiten" } }, - "noRecords": "Keine Systeme gefunden", "error": { - "internalServerError": "Keine Verbindung zu Beszel möglich. Überprüfen Sie Ihre Integrationseinstellungen.", "layoutSaveTitle": "Tabellenlayout konnte nicht gespeichert werden", "layoutSaveMessage": "Ihre Spaltenreihenfolge oder Spaltenbreiten konnten nicht gespeichert werden. Bitte versuchen Sie es erneut." - }, - "column": { - "system": "System", - "cpu": "CPU", - "memory": "Arbeitsspeicher", - "disk": "Datenträger", - "gpu": "GPU", - "loadAvg": "Systemlast", - "net": "Netzwerk", - "temp": "Temperatur", - "battery": "Akku", - "services": "Dienste", - "uptime": "Laufzeit", - "agent": "Agent" } }, "beszelSystemGrid": { "name": "Beszel-Systeme (Raster)", - "description": "Kartenrasteransicht aller von Beszel überwachten Systeme mit Echtzeitmetriken", - "option": { - "statusFilter": { - "label": "Statusfilter" - }, - "showCpu": { - "label": "CPU anzeigen" - }, - "showMemory": { - "label": "Arbeitsspeicher anzeigen" - }, - "showDisk": { - "label": "Datenträger anzeigen" - }, - "showGpu": { - "label": "GPU anzeigen" - }, - "showLoadAvg": { - "label": "Systemlast anzeigen" - }, - "showNet": { - "label": "Netzwerk anzeigen" - }, - "showTemp": { - "label": "Temperatur anzeigen" - }, - "showBattery": { - "label": "Akkustand anzeigen" - }, - "showServices": { - "label": "Dienste anzeigen" - }, - "showUptime": { - "label": "Laufzeit anzeigen" - }, - "showAgent": { - "label": "Agentenversion anzeigen" - } - }, - "error": { - "internalServerError": "Keine Verbindung zu Beszel möglich. Überprüfen Sie Ihre Integrationseinstellungen." - }, - "empty": { - "noSystems": "Keine Systeme gefunden" - }, - "metric": { - "cpu": "CPU", - "memory": "Arbeitsspeicher", - "disk": "Datenträger", - "gpu": "GPU", - "loadAvg": "Systemlast", - "net": "Netzwerk", - "temp": "Temperatur", - "battery": "Akku", - "services": "Dienste", - "uptime": "Laufzeit", - "agent": "Agent" - } + "description": "Kartenrasteransicht aller von Beszel überwachten Systeme mit Echtzeitmetriken" }, "beszelAlerts": { "name": "Beszel-Meldungen", @@ -3857,11 +5073,12 @@ } }, "empty": "Keine Meldungen konfiguriert", - "error": { - "internalServerError": "Keine Verbindung zu Beszel möglich. Überprüfen Sie Ihre Integrationseinstellungen." - }, "history": "Verlauf", "resolved": "Behoben", + "alertDescription": { + "statusDuration": "Seit {minutes} Min. offline", + "threshold": "Überschreitet {value} über {minutes} Min" + }, "status": { "triggered": "Ausgelöst", "ok": "OK" @@ -3908,16 +5125,16 @@ "noSystems": "Keine Systeme gefunden" }, "error": { - "internalServerError": "Keine Verbindung zu Beszel möglich. Überprüfen Sie Ihre Integrationseinstellungen.", "liveConnectionFailed": "Live-Verbindung fehlgeschlagen. Ihre Beszel-Instanz unterstützt möglicherweise kein Echtzeit-Streaming.", "switchToHistorical": "Zur historischen Ansicht wechseln", - "systemNotFound": "Das ausgewählte System wurde nicht gefunden. Wählen Sie ein anderes System aus." + "systemNotFound": "Das ausgewählte System wurde nicht gefunden. Wählen Sie ein anderes System aus.", + "selectionSaveTitle": "Auswahl konnte nicht gespeichert werden", + "selectionSaveMessage": "Deine Auswahl des Systems oder Zeitraums konnte nicht gespeichert werden. Bitte versuche es erneut." }, "chart": { "cpu": { "title": "CPU-Auslastung", - "subtitle": "Durchschnittliche systemweite CPU-Auslastung", - "series": "CPU" + "subtitle": "Durchschnittliche systemweite CPU-Auslastung" }, "memory": { "title": "Arbeitsspeichernutzung", @@ -3959,39 +5176,550 @@ "title": "Docker-Netzwerk-E/A", "subtitle": "Netzwerkverkehr der Docker-Container" } + }, + "period": { + "live": "Live", + "oneHour": "1 Std", + "twelveHours": "12 Std", + "oneDay": "24 Std", + "oneWeek": "1 Wo", + "thirtyDays": "30 T" } }, - "wud": { - "name": "What's Up Docker", - "description": "Zeigt an, wie viele überwachte Container Updates verfügbar haben.", - "title": "What's Up Docker", - "monitored": "Überwacht", - "updatesAvailable": "{count, plural, one {# Update verfügbar} other {# Updates verfügbar}}", - "updateAvailable": "Update verfügbar", - "openReleaseNotes": "Release Notes öffnen", + "assistant": { + "name": "Assistent", + "description": "Führe direkt auf deinem Dashboard eine vollständige Unterhaltung mit dem Assistenten.", + "unavailable": { + "title": "Assistent nicht verfügbar", + "description": "Melde dich an und bitte eine Administratorin oder einen Administrator, den Assistenten im Verwaltungsbereich zu konfigurieren." + }, + "compact": { + "title": "Assistent", + "description": "Vergrössere dieses Widget, um hier zu chatten, oder öffne die vollständige Unterhaltung.", + "open": "Assistenten öffnen", + "openTitle": "Assistent im Seitenbereich geöffnet", + "openDescription": "Die Unterhaltung bleibt in einer aktiven Oberfläche.", + "returnToWidget": "Unterhaltung in dieses Widget zurückbringen", + "otherWidgetTitle": "Assistent in einem anderen Widget aktiv", + "otherWidgetDescription": "Es bleibt jeweils nur eine Unterhaltungsoberfläche aktiv.", + "useHere": "Assistenten in diesem Widget verwenden" + } + }, + "beszel": { + "error": { + "internalServerError": "Keine Verbindung zu Beszel möglich. Überprüfe deine Integrations-Einstellungen." + }, + "empty": { + "noSystems": "Keine Systeme gefunden" + }, + "options": { + "statusFilter": { + "label": "Statusfilter" + }, + "showCpu": { + "label": "CPU anzeigen" + }, + "showMemory": { + "label": "Arbeitsspeicher anzeigen" + }, + "showDisk": { + "label": "Datenträger anzeigen" + }, + "showGpu": { + "label": "GPU anzeigen" + }, + "showLoadAvg": { + "label": "Belastungsdurchschnitt anzeigen" + }, + "showNet": { + "label": "Netzwerk anzeigen" + }, + "showTemp": { + "label": "Temperatur anzeigen" + }, + "showBattery": { + "label": "Akkustand anzeigen" + }, + "showServices": { + "label": "Dienste anzeigen" + }, + "showUptime": { + "label": "Laufzeit anzeigen" + }, + "showAgent": { + "label": "Agent-Version anzeigen" + } + }, + "metric": { + "system": "System", + "source": "Integration", + "hostname": "Hostname", + "cpuModel": "CPU-Modell", + "cores": "Kerne", + "memoryTotal": "Gesamter Arbeitsspeicher", + "memory": "Speicher", + "disk": "Datenträger", + "loadAvg": "Systemlast", + "net": "Netzwerk", + "temp": "Temperatur", + "battery": "Akku", + "uptime": "Laufzeit", + "agent": "Agent" + } + }, + "llamacpp": { + "name": "llama.cpp", + "description": "Zeige den Gesundheitszustand, das geladene Modell und die Generierungsgeschwindigkeit deines lokalen llama.cpp-Servers an.", + "title": "llama.cpp", + "status": { + "unhealthy": "Nicht gesund ({status})" + }, + "idle": "Inaktiv", + "speedTooltip": { + "current": "Aktuelle Generierungsgeschwindigkeit", + "average": "Durchschnittliche Generierungsgeschwindigkeit seit dem Start", + "request": "Durchschnittliche Geschwindigkeit seit Beginn dieser Anfrage" + }, + "busy": "{count, plural, one {# Anfrage läuft} other {# Anfragen laufen}}", + "modelInfo": { + "context": "Kontext", + "size": "Dateigrösse", + "parameters": "Parameter", + "model": "Modell", + "quantization": "Quantisierung" + }, + "stats": { + "tokensProcessed": "Verarbeitete Tokens", + "contextUsage": "Kontext-/KV-Nutzung", + "cacheHitRate": "Trefferquote des Prompt-Caches", + "tokensGenerated": "Generierte Tokens" + }, + "error": { + "unreachable": "llama-server ist nicht erreichbar" + }, + "unit": { + "speed": "{value} T/s", + "parameters": "{value}B", + "none": "—", + "speedShort": "T/s" + }, "option": { "showTitle": { "label": "Titel anzeigen" }, - "showRing": { - "label": "Update-Ring anzeigen" + "showModelInfo": { + "label": "Modellinformationen anzeigen" }, - "layout": { - "label": "Ansicht", + "showContextUsage": { + "label": "Kontextnutzung anzeigen" + }, + "showCacheHitRate": { + "label": "Cache-Trefferrate anzeigen" + }, + "showSpeedStats": { + "label": "Geschwindigkeitsstatistiken anzeigen" + }, + "showRequests": { + "label": "Auslastung der Anfragen anzeigen" + }, + "showTokenStats": { + "label": "Token-Gesamtwerte anzeigen" + }, + "showSpeculative": { + "label": "Spekulatives Decoding anzeigen" + } + }, + "advanced": { + "promptSpeed": "Prompt-Geschwindigkeit", + "avgSpeed": "Durchschnittliche Generierung", + "requests": "Anfragen", + "deferred": "Zurückgestellt", + "slots": "{processing}/{total} Slots belegt", + "speculative": "Spekulatives Decoding", + "avgPrompt": "Durchschnittlicher Prompt", + "specDrafts": "Spek. Entwürfe", + "specAccepted": "Spek. akzeptierte Tokens", + "specDraftTokens": "Spek. Entwurfstokens" + } + }, + "stats": { + "name": "Statistiken", + "description": "Kombinieren Sie Messwerte aus Ihren Integrationen in einem konfigurierbaren Widget.", + "configure": "Messwerte konfigurieren", + "refresh": "Statistiken aktualisieren", + "empty": "Öffnen Sie die Widget-Einstellungen, wählen Sie Integrationen aus und fügen Sie dann Messwerte hinzu.", + "editorHelp": "Fügen Sie Messwerte aus den für dieses Widget ausgewählten Integrationen hinzu. Änderungen werden mit Ihrem Dashboard gespeichert.", + "source": "Integration", + "metric": "Messwert", + "noMetrics": "Für diese Integration sind keine Statistiken verfügbar", + "add": "Messwert hinzufügen", + "label": "Benutzerdefinierte Bezeichnung", + "hidden": "Versteckt", + "compact": "Kompakte Zahlen", + "moveUp": "Nach oben bewegen", + "moveDown": "Nach unten bewegen", + "remove": "Messwert entfernen", + "loading": "Wird geladen …", + "unavailable": "Nicht verfügbar", + "refreshFailed": "Aktualisierung fehlgeschlagen – gespeicherte Daten werden angezeigt", + "stale": "Gespeicherte Daten – zum Aktualisieren neu laden", + "table": { + "value": "Wert", + "status": "Status" + }, + "option": { + "table": { + "label": "Tabellenansicht" + }, + "rows": { + "label": "Kompakte Zeilen" + }, + "showIcon": { + "label": "Quellsymbol anzeigen" + }, + "spacing": { + "label": "Abstand", "option": { - "horizontal": { - "label": "Horizontal" + "xs": { + "label": "Kompakt" }, - "vertical": { - "label": "Vertikal" + "sm": { + "label": "Bequem" + }, + "md": { + "label": "Geräumig" } } }, - "showUpdateList": { - "label": "Container-Update-Liste anzeigen", - "description": "Listet jeden überwachten Container auf, für den ein Image-Update verfügbar ist." + "entries": { + "label": "Messwerte" + }, + "plain": { + "label": "Kartenhintergründe entfernen" } - } + }, + "fetchFailed": "Statistiken konnten nicht abgerufen werden", + "viewOptions": "Diese Ansicht anpassen", + "moreMetrics": "{count} weitere in der erweiterten Ansicht", + "localHelp": "Layout, Formatierung und Sichtbarkeit gelten nur für diese Ansicht. Die Einstellungen des gemeinsamen Boards bleiben unverändert.", + "plain": "Kartenhintergründe entfernen", + "resetView": "Ansicht zurücksetzen", + "allHidden": "Alle Messwerte sind in dieser Ansicht ausgeblendet. Verwenden Sie «Diese Ansicht anpassen», um sie wiederherzustellen." + }, + "wazuh": { + "target": { + "api": "Wazuh-Server-API", + "indexer": "Wazuh-Indexer", + "wazuh": "Wazuh" + }, + "severity": { + "low": "Niedrig", + "medium": "Mittel", + "high": "Hoch", + "critical": "Kritisch" + }, + "error": { + "unauthorized": { + "title": "{target} hat die Anmeldedaten abgelehnt", + "description": "Überprüfen Sie den im Wazuh-Integrationseintrag gespeicherten Benutzernamen und das Passwort. Die Server-API (Port 55000) und der Indexer (Port 9200) verwenden separate Benutzer." + }, + "certificate": { + "title": "Dem Zertifikat von {target} wird nicht vertraut", + "description": "Wazuh verwendet standardmässig ein selbst signiertes Zertifikat. Führen Sie in der Integration «Verbindung testen» aus und vertrauen Sie dem Zertifikat, oder fügen Sie Ihre Zertifizierungsstelle unter «Einstellungen → Zertifikate» hinzu." + }, + "unreachable": { + "title": "{target} ist nicht erreichbar", + "description": "Der Host hat die Verbindung abgelehnt oder getrennt. Überprüfen Sie URL, Port und Firewall. Der Indexer lauscht bei einer standardmässigen All-in-One-Installation nur auf localhost." + }, + "timeout": { + "title": "Zeitüberschreitung bei {target}", + "description": "Innerhalb von 15 Sekunden erfolgte keine Antwort. Der Dienst ist möglicherweise überlastet oder die Adresse ist möglicherweise falsch." + }, + "status": { + "title": "{target} hat einen Fehler zurückgegeben", + "description": "Die Anfrage ist mit dem HTTP-Status {status} fehlgeschlagen." + }, + "invalidResponse": { + "title": "Unerwartete Antwort von {target}", + "description": "Überprüfen Sie, dass die URL auf die Wazuh-Server-API oder den Indexer und nicht auf das Dashboard verweist." + }, + "indexerRequired": { + "title": "Anmeldedaten für den Wazuh-Indexer erforderlich", + "description": "Warnungen, Schwachstellen und Ereignisse zur Dateiintegrität werden aus dem Wazuh-Indexer gelesen. Fügen Sie der Integration eine Indexer-URL, einen Benutzernamen und ein Passwort hinzu." + }, + "unknown": { + "title": "Daten von {target} konnten nicht geladen werden", + "description": "Weitere Informationen finden Sie in den Homarr-Logs." + } + }, + "range": { + "1h": "1 h", + "24h": "24 h", + "7d": "7 Tage", + "30d": "30 Tage" + }, + "levelTooltip": "Regelstufe {level} ({severity})" + }, + "wazuhAgents": { + "name": "Wazuh-Agents", + "description": "Sortierbare Liste der Wazuh-Agents mit Status, Betriebssystem, Version und letzter Keepalive-Zeit", + "option": { + "statusFilter": { + "label": "Agents anzeigen" + }, + "sortBy": { + "label": "Sortieren nach" + }, + "showVersion": { + "label": "Wazuh-Versionsspalte anzeigen" + }, + "showGroups": { + "label": "Gruppenspalte anzeigen" + } + }, + "title": "Agenten", + "total": "{count} Agents", + "status": { + "active": "Aktiv", + "disconnected": "Verbindung getrennt", + "neverConnected": "Nie verbunden", + "pending": "Ausstehend" + }, + "statusLabel": { + "active": "Aktiv", + "disconnected": "Verbindung getrennt", + "never_connected": "Nie verbunden", + "pending": "Ausstehend", + "unknown": "Unbekannt" + }, + "live": "Live", + "snapshot": "Snapshot {age} alt", + "snapshotHint": "Gelesen aus dem um {time} erstellten Agent-Snapshot des Wazuh-Dashboards (wazuh-monitoring). Fügen Sie Anmeldedaten für die Server-API hinzu, um Live-Daten zu verwenden.", + "staleSnapshot": "Der Agent-Snapshot von {time} ist veraltet. Überprüfen Sie, ob der Überwachungsjob des Wazuh-Dashboards ausgeführt wird, oder fügen Sie Anmeldedaten für die Server-API hinzu.", + "noDisconnected": "Alle Agents sind verbunden", + "empty": "Keine Agents entsprechen diesem Filter", + "column": { + "status": "Status", + "name": "Job Name", + "ip": "IP", + "os": "OS", + "version": "Version", + "lastKeepAlive": "Keepalive", + "groups": "Gruppen" + }, + "outdated": "Älter als die neueste Agent-Version ({version})" + }, + "wazuhAlerts": { + "name": "Wazuh-Warnungen-Feed", + "description": "Aktuelle Wazuh-Warnungen mit Stufe, MITRE-ATT&CK-Techniken, Agent und Quell-IP", + "option": { + "minLevel": { + "label": "Minimale Regelstufe", + "description": "Wazuh-Stufen: 0–6 niedrig, 7–11 mittel, 12–14 hoch, ab 15 kritisch" + }, + "hours": { + "label": "Zeitfenster (Stunden)" + }, + "limit": { + "label": "Anzahl der Warnungen" + }, + "showMitre": { + "label": "MITRE-ATT&CK-Techniken anzeigen" + }, + "showAgent": { + "label": "Agent anzeigen" + }, + "showSourceIp": { + "label": "Quell-IP anzeigen" + }, + "showRuleId": { + "label": "Regel-ID anzeigen" + } + }, + "title": "Warnungen · Stufe {level}+ · {hours} Std.", + "empty": "Keine Warnungen auf dieser Stufe. Alles ruhig.", + "rule": "Regel {id}", + "openInDashboard": "Diese Warnung im Wazuh-Dashboard öffnen" + }, + "wazuhSummary": { + "name": "Schweregrad der Wazuh-Warnungen", + "description": "Aufschlüsselung des Warnungsschweregrads mit Trend im Vergleich zum vorherigen Zeitraum", + "option": { + "range": { + "label": "Zeitraum" + }, + "showTrend": { + "label": "Trend im Vergleich zum vorherigen Zeitraum anzeigen" + }, + "showFooter": { + "label": "Fusszeile anzeigen" + } + }, + "title": "Warnungsschweregrad · {range}", + "alerts": "Warnungen", + "none": "Keine Warnungen", + "trend": { + "new": "neu", + "tooltip": "Vorheriger Zeitraum: {previous}" + }, + "previous": "Vorherige {range}: {count}", + "maxLevel": "Maximales Level {level}", + "health": "Indexer-Zustand: {status}", + "manager": "Manager, Version {version}" + }, + "wazuhTimeline": { + "name": "Zeitachse der Wazuh-Warnungen", + "description": "Gestapeltes Diagramm der Wazuh-Warnungen im Zeitverlauf nach Schweregrad", + "option": { + "range": { + "label": "Zeitraum" + }, + "interval": { + "label": "Intervall" + }, + "chartType": { + "label": "Diagrammtyp" + }, + "yScale": { + "label": "Skalierung der Y-Achse", + "description": "Die Quadratwurzel-Skalierung hält Warnungen mit hohem und kritischem Schweregrad neben Tausenden von Warnungen mit niedrigem Schweregrad sichtbar" + }, + "minLevel": { + "label": "Minimales Regel-Level" + }, + "showLegend": { + "label": "Legende mit Summen anzeigen" + } + }, + "title": "Zeitachse der Warnungen · {range}", + "total": "{count} Warnungen", + "interval": "pro {interval}" + }, + "wazuhTopList": { + "name": "Wazuh-Rangliste", + "description": "Top-Regeln, -Agenten, Quell-IPs oder MITRE-ATT&CK-Taktiken und -Techniken nach Anzahl der Warnungen", + "option": { + "kind": { + "label": "Rangfolge" + }, + "range": { + "label": "Zeitraum" + }, + "limit": { + "label": "Anzahl der Einträge" + }, + "minLevel": { + "label": "Minimales Regel-Level" + }, + "showBars": { + "label": "Balken anzeigen" + } + }, + "title": { + "rules": "Top-Regeln · {range}", + "agents": "Top-Agenten · {range}", + "sourceIps": "Top-Quell-IPs · {range}", + "mitreTactics": "MITRE-Taktiken · {range}", + "mitreTechniques": "MITRE-Techniken · {range}" + }, + "empty": { + "rules": "Keine Warnungen in diesem Zeitraum", + "agents": "Keine Warnungen in diesem Zeitraum", + "sourceIps": "Keine Warnungen mit einer Quell-IP in diesem Zeitraum", + "mitreTactics": "Keine MITRE-ATT&CK zugeordneten Warnungen in diesem Zeitraum", + "mitreTechniques": "Keine MITRE-ATT&CK zugeordneten Warnungen in diesem Zeitraum" + }, + "totalTooltip": "{count} passende Warnungen", + "private": "Lokales Netzwerk", + "public": "Öffentlich", + "agents": "Auf {count} Agenten gesehen", + "others": "{count} weitere Warnungen in anderen Einträgen" + }, + "wazuhVulnerabilities": { + "name": "Wazuh-Schwachstellen", + "description": "Anzahl der Schwachstellen, Top-CVEs und die verwundbarsten Agenten", + "option": { + "cveOrder": { + "label": "CVEs sortieren nach" + }, + "minSeverity": { + "label": "CVE-Schweregrad" + }, + "cveLimit": { + "label": "Anzahl der CVEs" + }, + "agentLimit": { + "label": "Anzahl der Agenten" + }, + "showAgents": { + "label": "Verwundbarste Agenten anzeigen" + } + }, + "title": "Schwachstellen", + "topCves": "Top-CVEs", + "score": "Punktzahl", + "agentsShort": "Agenten", + "topAgents": "Verwundbarste Agenten", + "criticalHigh": "Kritisch / Hoch", + "totalTooltip": "{count} Befunde auf {agents} Agenten", + "affected": "{count} Agenten", + "empty": "Keine Schwachstellen erkannt", + "distribution": "Verteilung nach Schweregrad. {unscored} Befunde ohne Punktzahl werden nicht angezeigt.", + "worst": "Am schlimmsten: {id} ({score}) auf {agents} Agenten" + }, + "wazuhFim": { + "name": "Wazuh-Dateiintegrität", + "description": "Kürzlich erfasste Ereignisse der Dateiintegritätsüberwachung (Syscheck)", + "option": { + "range": { + "label": "Zeitraum" + }, + "event": { + "label": "Ereignisse" + }, + "limit": { + "label": "Anzahl der Ereignisse" + }, + "includeRegistry": { + "label": "Windows-Registrierungsereignisse einschliessen" + } + }, + "title": "Dateiintegrität · {range}", + "event": { + "added": "Hinzugefügt am", + "modified": "Geändert", + "deleted": "Gelöscht", + "unknown": "Verändert" + }, + "empty": "Keine Dateiintegritätsereignisse in diesem Zeitraum", + "user": "von {user}", + "registry": "Registrierung" + }, + "wazuhAuthFailures": { + "name": "Fehlgeschlagene Wazuh-Authentifizierungen", + "description": "Fehlgeschlagene Anmeldungen und Brute-Force-Warnungen pro Agent mit stündlichen Sparklines", + "option": { + "hours": { + "label": "Zeitfenster (Stunden)" + }, + "limit": { + "label": "Anzahl der Agenten" + }, + "showSourceIps": { + "label": "Top-Quell-IPs anzeigen" + } + }, + "title": "Fehlgeschlagene Authentifizierungen · {hours} Std.", + "seriesTooltip": "Alle Agenten der letzten {hours} Std.", + "peak": "Höchstwert {count}/Intervall", + "empty": "Keine fehlgeschlagenen Anmeldungen in diesem Zeitraum", + "failed": "Fehlgeschlagene Anmeldungen", + "failedHint": "Einzelne fehlgeschlagene Authentifizierungen (sshd, PAM, Windows-Anmeldung, ungültige Benutzer)", + "bruteForce": "Brute-Force", + "bruteForceHint": "Korrrelierte Brute-Force-Regeln (mehrere Fehler in kurzer Zeit, MITRE T1110)", + "sourceIps": "Quell-IPs", + "ipTooltip": "{ip}: {count} Fehler", + "bruteForceCount": "{count} Brute-Force-Angriffe" } }, "widgetPreview": { @@ -4004,7 +5732,76 @@ } }, "board": { + "emptyState": { + "title": "Erste Ansicht erstellen", + "description": "Füge ein Widget oder eine App hinzu oder verbinde einen Dienst, um dessen Daten auf diesem Board zu verwenden.", + "addWidget": "Widget hinzufügen", + "addApp": "App hinzufügen", + "connectService": "Dienst verbinden" + }, + "setupChecklist": { + "title": "Dieses Board nützlich machen", + "description": "Fahre dort fort, wo du aufgehört hast. Der Fortschritt richtet sich nach den Inhalten, die sich bereits auf diesem Board befinden.", + "collapse": "Einrichtungscheckliste einklappen", + "dismiss": "", + "resume": "Einrichtung fortsetzen ({completed}/{total})", + "progress": "Einrichtungsfortschritt des Boards", + "step": { + "content": { + "label": "Nützliche Inhalte hinzufügen", + "description": "Wähle ein Widget aus und konfiguriere es, bevor es platziert wird." + }, + "app": { + "label": "App anheften", + "description": "Halte einen Dienst oder ein Tool mit einem Klick von diesem Board aus erreichbar." + }, + "service": { + "label": "Dienst verbinden", + "description": "Live-Daten und Aktionen für kompatible Widgets freischalten.", + "permissionDescription": "Eine Administratorin oder ein Administrator kann einen Dienst verbinden, um Live-Daten freizuschalten.", + "action": "Verbinden" + } + } + }, "action": { + "addContent": "Board-Inhalt hinzufügen", + "settings": "Board-Einstellungen", + "switch": "Board wechseln", + "switcher": { + "title": "Board wechseln", + "search": { + "empty": "Keine Boards stimmen mit \"{search}\" überein." + }, + "results": "Verfügbare Boards", + "preview": "Vorschau von {name} mit {count} Elementen", + "currentHidden": "Aktuelles Board: {name}", + "keyboard": { + "navigate": "Navigieren", + "open": "Öffnen", + "instructions": "Geben Sie Text ein, um Boards zu filtern. Verwenden Sie die Pfeiltasten, um durch die Ergebnisse zu navigieren, und die Eingabetaste, um ein Board zu öffnen." + }, + "empty": { + "title": "Keine anderen Boards", + "description": "Sie haben Zugriff auf keine anderen Boards." + }, + "error": "Boards konnten nicht geladen werden." + }, + "create": { + "availability": { + "checking": "Verfügbarkeit wird geprüft …", + "available": "{name} ist verfügbar" + }, + "notification": { + "success": { + "title": "Board erstellt", + "message": "Board {name} wurde erstellt" + }, + "error": { + "title": "Board konnte nicht erstellt werden", + "message": "Board {name} konnte nicht erstellt werden" + } + } + }, "duplicate": { "title": "Board duplizieren", "message": "Dies wird das Board {name} mit all seinen Inhalten duplizieren. Wenn Widgets Integrationen, hinterlegt sind die Sie nicht verwenden dürfen, werden diese entfernt.", @@ -4020,14 +5817,19 @@ } }, "edit": { + "enter": "Board bearbeiten", + "save": "Board speichern", + "exit": "Bearbeitungsmodus verlassen", "notification": { "success": { - "title": "Änderungen erfolgreich angewendet", "message": "Das Board wurde erfolgreich dupliziert" }, "error": { - "title": "Änderungen konnten nicht angewendet werden", "message": "Das Board konnte nicht gespeichert werden" + }, + "loadError": { + "title": "Bearbeitung konnte nicht gestartet werden", + "message": "Der Board-Editor konnte nicht geladen werden. Ihr Dashboard ist weiterhin im Ansichtsmodus verfügbar." } }, "confirmLeave": { @@ -4035,62 +5837,6 @@ "message": "Sie haben ungespeicherte Änderungen, sind sie sicher dass sie abbrechen möchten?" } }, - "oldImport": { - "label": "Import von Homarr vor Version 1.0.0", - "notification": { - "success": { - "title": "Import erfolgreich", - "message": "Das Board wurde erfolgreich importiert" - }, - "error": { - "title": "Import fehlgeschlagen", - "message": "Das Board konnte nicht importiert werden, überprüfen Sie die Protokolle für weitere Details" - } - }, - "form": { - "file": { - "label": "Wähle eine JSON-Datei", - "invalidError": "Ungültige Konfigurationsdatei" - }, - "apps": { - "label": "Apps", - "avoidDuplicates": { - "label": "Duplikate vermeiden", - "description": "Ignoriert Apps, bei denen eine App mit dem gleichen href bereits existiert" - }, - "onlyImportApps": { - "label": "Nur Apps importieren", - "description": "Fügt nur die Apps hinzu, das Board muss manuell neu erstellt werden" - } - }, - "name": { - "label": "Board Name" - }, - "screenSize": { - "label": "Bildschirmgröße", - "description": "In Versionen vor 1.0 gab es drei verschiedene Modi, so dass Sie die Anzahl der Spalten für jede Bildschirmgröße festlegen konnten.", - "option": { - "sm": "Klein", - "md": "Mittel", - "lg": "Groß" - } - }, - "sidebarBehavior": { - "label": "Verhalten der Seitenleiste", - "description": "Seitenleisten wurden in 1.0 entfernt, Sie können wählen, was mit den Elementen in ihnen passieren soll.", - "option": { - "lastSection": { - "label": "Letzter Abschnitt", - "description": "Seitenleiste wird unterhalb des letzten Abschnitts angezeigt" - }, - "removeItems": { - "label": "Elemente entfernen", - "description": "Elemente in der Seitenleiste werden entfernt" - } - } - } - } - }, "quickCreateApp": { "modal": { "title": "Jetzt eine App erstellen", @@ -4098,6 +5844,12 @@ } } }, + "landmark": { + "canvas": "Dashboard-Arbeitsfläche", + "leftRail": "Linke Dashboard-Leiste", + "rightRail": "Rechte Dashboard-Leiste", + "items": "Dashboard-Elemente" + }, "field": { "pageTitle": { "label": "Seitentitel" @@ -4167,7 +5919,8 @@ } }, "primaryColor": { - "label": "Primärfarbe" + "label": "Primärfarbe", + "locked": "Ihre Administratorin oder Ihr Administrator verwendet die Markenfarbe der Instanz auf jedem Board." }, "secondaryColor": { "label": "Sekundärfarbe" @@ -4207,9 +5960,6 @@ "xl": "Sehr groß" } }, - "name": { - "label": "Name" - }, "isPublic": { "label": "Öffentlich", "description": "Öffentliche Boards sind für jedermann zugänglich, auch ohne Benutzerkonto." @@ -4229,9 +5979,44 @@ "title": "Ansicht", "responsive": { "title": "Reaktive Layouts", + "description": "Jedes Layout behält seine eigenen Widget-Positionen und -Grössen. Mobile und Basis sind immer verfügbar; fügen Sie bei jedem zusätzlichen Breakpoint benutzerdefinierte Layouts hinzu.", "action": { "add": "Layout hinzufügen" } + }, + "role": { + "mobile": "Mobil", + "base": "Basis", + "custom": "Benutzerdefiniert" + }, + "custom": { + "defaultName": "Benutzerdefiniertes Layout" + }, + "mobile": { + "breakpointDescription": "Mobile wird immer von 0 px bis zum nächsten Layout-Breakpoint verwendet." + }, + "preview": { + "columns": "spalten", + "empty": "Dieses Layout ist leer", + "dynamicSection": "Dynamischer Abschnitt", + "editorWidthLabel": "{layoutName} · {width} px" + }, + "reset": { + "action": "Aus Basis zurücksetzen", + "confirm": { + "title": "{layoutName} zurücksetzen?", + "message": "Dadurch werden alle gespeicherten Positionen und Grössen in diesem Layout durch ein neu aus der Basis generiertes Layout ersetzt. Dies kann nicht rückgängig gemacht werden." + } + }, + "edit": { + "action": "Layout bearbeiten", + "saveAndEdit": "Speichern und bearbeiten", + "save": "Layout speichern", + "cancel": { + "action": "Layout-Bearbeitung abbrechen", + "title": "Layoutänderungen verwerfen?", + "message": "Ihre ungespeicherten Änderungen an diesem Layout werden verworfen." + } } }, "background": { @@ -4268,10 +6053,7 @@ "rename": { "label": "Board umbenennen", "description": "Das Ändern des Namens wird alle Links zu diesem Board aufheben.", - "button": "Namen ändern", - "modal": { - "title": "Board umbenennen" - } + "button": "Namen ändern" }, "visibility": { "label": "Sichtbarkeit des Boards ändern", @@ -4295,9 +6077,7 @@ } }, "delete": { - "label": "Board löschen", "description": "Sobald Sie ein Board löschen, gibt es kein zurück mehr. Bitte seien sie sich dessen bewusst.", - "button": "Board löschen", "confirm": { "title": "Board löschen", "description": "Sind Sie sicher, dass Sie dieses Board löschen möchten? Dies wird das Board und seinen gesamten Inhalt permanent löschen." @@ -4342,28 +6122,41 @@ }, "layout": { "field": { - "name": { - "label": "Name" - }, "columnCount": { "label": "Anzahl der Spalten" }, "breakpoint": { "label": "Breakpoint", "description": "Das Layout wird auf allen Bildschirmen, die größer als dieser breakpoint sind, bis zum nächsten größeren breakpoint verwendet." + }, + "gutters": { + "label": "Fixierte Seitenleisten", + "description": "Reservieren Sie auf jeder Seite bis zu drei Dashboard-Spalten. Die verbleibende Arbeitsfläche wird automatisch neu angeordnet.", + "left": { + "label": "Linke Seitenleiste", + "description": "Diesen Bereich sichtbar halten, während das Dashboard gescrollt wird.", + "thumbLabel": "Breite der linken Seitenleiste" + }, + "right": { + "label": "Rechte Seitenleiste", + "description": "Diesen Bereich sichtbar halten, während das Dashboard gescrollt wird.", + "thumbLabel": "Breite der rechten Seitenleiste" + }, + "width": { + "label": "Breite in Spalten" + }, + "preview": { + "label": "Vorschau des Dashboard-Layouts" + } } } }, "management": { "metaTitle": "Verwaltung", - "title": { - "morning": "Guten Morgen, {username}", - "afternoon": "Guten Nachmittag, {username}", - "evening": "Guten Abend, {username}" - }, "notFound": { "title": "Nicht gefunden", - "text": "Konnte die angeforderte Ressource nicht finden" + "text": "Konnte die angeforderte Ressource nicht finden", + "backToHome": "Zurück zur Verwaltungsstartseite" }, "error": { "title": "Diese Seite konnte nicht geladen werden", @@ -4372,19 +6165,10 @@ }, "navbar": { "items": { - "workshop": "Workshop", "home": "Startseite", - "boards": "Boards", - "apps": "Apps", - "integrations": "Integrationen", - "searchEngies": "Suchmaschinen", - "medias": "Medien", "users": { - "label": "Benutzer", "items": { - "manage": "Verwalten", - "invites": "Einladungen", - "groups": "Gruppen" + "manage": "Verwalten" } }, "tools": { @@ -4392,10 +6176,7 @@ "items": { "docker": "Docker", "kubernetes": "Kubernetes", - "logs": "Logs", "api": "API und MCP", - "certificates": "Zertifikate", - "tasks": "Aufgaben", "backup": "Sicherung" } }, @@ -4409,21 +6190,12 @@ "sourceCode": "Quellcode" } }, - "about": "Über" + "about": "Über", + "assistant": "Assistent" } }, "page": { "home": { - "statistic": { - "board": "Boards", - "user": "Benutzer", - "invite": "Einladungen", - "integration": "Integrationen", - "app": "Apps", - "group": "Gruppen", - "searchEngine": "Suchmaschinen", - "media": "Medien" - }, "statisticLabel": { "boards": "Boards", "resources": "Ressourcen", @@ -4461,13 +6233,8 @@ "tooltip": "Dieses Board wird als Ihr mobiles Board angezeigt" } }, - "duplicate": { - "label": "Board duplizieren" - }, "delete": { - "label": "Dauerhaft löschen", "confirm": { - "title": "Board löschen", "description": "Sind Sie sicher, dass Sie das Board {name} löschen möchten?" } } @@ -4476,28 +6243,82 @@ "public": "Dieses Board ist öffentlich", "private": "Dieses Board ist privat" }, - "noResults": { - "title": "Noch keine Boards" + "preview": { + "label": "Layout-Vorschau für {name} mit {count} Elementen", + "unknownCreator": "Unbekannte erstellende Person" }, - "modal": { - "createBoard": { - "field": { - "name": { - "label": "Name" - } - } - } + "noResults": { + "title": "Noch keine Boards", + "description": "Erstellen Sie ein Board, um Ihre Apps und Widgets an einem Ort anzuordnen." } }, "media": { "includeFromAllUsers": "Medien von allen Benutzern einbeziehen" }, "user": { - "back": "Zurück zu den Benutzern", "fieldsDisabledExternalProvider": "Bestimmte Felder sind deaktiviert, da sie von einem externen Authentifizierungsanbieter verwaltet werden.", "setting": { "general": { "title": "Allgemein", + "header": { + "title": "Header-Editor", + "badge": "Persönlich", + "description": "Ziehen Sie Steuerelemente an eine beliebige Stelle in der Zeile. Links, Mitte und Rechts bleiben fixiert, während die Steuerelemente dazwischen verschoben werden.", + "device": { + "desktop": "Desktop-PC", + "mobile": "Mobil" + }, + "zones": { + "left": "Links", + "center": "Mittig", + "right": "Rechts" + }, + "action": { + "hide": "Header ausblenden", + "show": "Header anzeigen", + "configure": "{item} verschieben oder konfigurieren", + "remove": "{item} entfernen", + "dropIntoZone": "In den Abschnitt {zone} verschieben" + }, + "preview": { + "board": "Dashboard-Vorschau für {name}", + "empty": "Kein Dashboard-Layout verfügbar" + }, + "available": { + "title": "Verfügbare Steuerelemente", + "description": "Fügen Sie ein Steuerelement hinzu und ziehen Sie anschliessend die gesamte Schaltfläche oben an die gewünschte Position.", + "requiredAlways": "Dieses Steuerelement ist erforderlich, kann aber an eine beliebige Stelle im Header verschoben werden.", + "allAdded": "Jedes integrierte Steuerelement befindet sich bereits in Ihrem Header.", + "add": "{item} hinzufügen", + "boardShortcut": "Board-Verknüpfung", + "chooseBoard": "Board auswählen" + }, + "configuration": { + "description": "Dieses Steuerelement behält dieselbe Grösse wie im aktiven Header.", + "searchDisplay": { + "input": "Suchleiste", + "icon": "Nur Symbol" + }, + "logoDisplay": { + "logo": "Nur Logo", + "logoAndText": "Logo + Text" + } + }, + "items": { + "logo": "Markenzeichen", + "search": "Suchen", + "home": "Hauptboard", + "boardSwitcher": "Boads", + "assistant": "Assistent", + "docker": "Docker", + "boardEdit": "Board bearbeiten", + "boardSettings": "Board-Einstellungen", + "settings": "Ihre Einstellungen", + "themeToggle": "Theme wechseln", + "user": "Konto", + "boardUnavailable": "Board nicht verfügbar" + } + }, "item": { "language": "Sprache und Region", "board": { @@ -4531,14 +6352,10 @@ }, "security": { "title": "Sicherheit" - }, - "board": { - "title": "Boards" } }, "list": { - "metaTitle": "Verwaltung von Benutzern", - "title": "Benutzer" + "metaTitle": "Verwaltung von Benutzern" }, "edit": { "metaTitle": "Benutzer bearbeiten: {username}" @@ -4592,9 +6409,6 @@ } }, "field": { - "id": { - "label": "ID" - }, "creator": { "label": "Ersteller" }, @@ -4618,10 +6432,7 @@ }, "setting": { "title": "Einstellungen", - "alert": "Gruppeneinstellungen werden nach der Reihenfolge der Gruppen in der Liste priorisiert. Die oberen Einstellungen überschreiben die unteren Einstellungen.", - "board": { - "title": "Boards" - } + "alert": "Gruppeneinstellungen werden nach der Reihenfolge der Gruppen in der Liste priorisiert. Die oberen Einstellungen überschreiben die unteren Einstellungen." }, "members": { "title": "Mitglieder", @@ -4629,10 +6440,7 @@ "notFound": "Keine Mitglieder gefunden" }, "permissions": { - "title": "Berechtigungen", - "form": { - "unsavedChanges": "Du hast noch ungespeicherte Änderungen!" - } + "title": "Berechtigungen" } } }, @@ -4641,12 +6449,10 @@ "notification": { "success": { "message": "Einstellungen gespeichert" - }, - "error": { - "message": "Einstellungen konnten nicht gespeichert werden" } }, "section": { + "analyticsDocumentation": "Erfahren Sie genau, welche Analysedaten Homarr erfasst", "analytics": { "title": "Nutzungsdaten", "general": { @@ -4675,7 +6481,6 @@ } }, "board": { - "title": "Boards", "homeBoard": { "label": "Globales Home Board", "mobileLabel": "Globales Mobil Board", @@ -4694,7 +6499,6 @@ } }, "user": { - "title": "Benutzer", "enableGravatar": { "label": "Gravatar aktivieren", "description": "Verwendet Benutzeravatare von Libravatar/Gravatar, wenn kein benutzerdefinierter Avatar festgelegt und eine E-Mail konfiguriert ist" @@ -4710,12 +6514,86 @@ "appearance": { "title": "Aussehen", "defaultColorScheme": { - "label": "Standard Farbschema", + "label": "Standard Farbschema" + } + }, + "branding": { + "title": "Branding der Instanz", + "groups": { + "identity": "Identität", + "appearance": "Aussehen", + "customCss": "Benutzerdefiniertes CSS", + "authentication": "Authentifizierung" + }, + "identity": { + "description": "Das Anwendungslogo ist das grössere Zeichen, das innerhalb der App, auf Anmeldeseiten und für installierte Apps verwendet wird. Das Browsersymbol (Favicon) ist das kleine Quadrat, das in Tabs und Lesezeichen verwendet wird. Wenn es leer ist, wird stattdessen das Anwendungslogo verwendet." + }, + "appName": { + "label": "Name der Anwendung" + }, + "greeting": { + "label": "Benutzerdefinierte Begrüssung" + }, + "logo": { + "label": "Anwendungslogo", + "placeholder": "/logo/logo.png" + }, + "favicon": { + "label": "Browsersymbol (Favicon)", + "placeholder": "Verwendet das Anwendungslogo" + }, + "primaryColor": { + "label": "Primärfarbe" + }, + "secondaryColor": { + "label": "Sekundärer Akzent" + }, + "lockPrimaryColor": { + "label": "Diese Farbe auf jedem Board beibehalten", + "description": "Verhindert, dass Board-Farben den Akzent der Anwendung ersetzen." + }, + "signInBackground": { + "label": "Hintergrund der Anmeldung", + "placeholder": "https://example.com/background.jpg" + }, + "signInOverlay": { + "label": "Hintergrundüberlagerung" + }, + "defaultRadius": { + "label": "Eckenstil", "options": { - "auto": "Automatisch", - "light": "Hell", - "dark": "Dunkel" + "xs": "Eng", + "sm": "Dezent", + "md": "Ausgewogen", + "lg": "Abgerundet", + "xl": "Sanft" } + }, + "customCss": { + "label": "Globales benutzerdefiniertes CSS", + "description": "Wird auf jede Seite angewendet. Benutzerdefiniertes CSS des Boards kann dies überschreiben." + }, + "authVisibility": { + "description": "Wählen Sie aus, was auf jeder Authentifizierungsseite angezeigt wird.", + "appName": "Anwendungsname", + "logo": "Anwendungslogo", + "greeting": "Begrüssung" + }, + "summary": { + "title": "Aktuelles Branding", + "cornerStyle": "Eckenstil", + "palette": "Farbpalette", + "backgroundConfigured": "Benutzerdefinierter Hintergrund · {overlay}% Überlagerung", + "backgroundDefault": "Standardhintergrund", + "greetingConfigured": "Benutzerdefinierte Begrüssung", + "greetingDefault": "Standardbegrüssung", + "boardColorLocked": "Board-Farbe gesperrt", + "boardColorFlexible": "Board-Farben erlaubt", + "appName": "Job Name", + "logo": "Logo", + "greeting": "Begrüssung", + "on": "Ein", + "off": "Aus" } }, "culture": { @@ -4723,12 +6601,177 @@ "defaultLocale": { "label": "Standardsprache" } + }, + "assistant": { + "loading": "Assistentenkonfiguration wird geladen", + "title": "Assistent", + "description": "Verbinden Sie einen OpenAI-kompatiblen Modell-Endpunkt für den instanzweiten Assistenten.", + "security": { + "description": "API-Schlüssel und zusätzliche Header-Werte werden in der Homarr-Datenbank verschlüsselt. Sie werden niemals an Browser zurückgegeben. Modellanfragen werden direkt vom Homarr-Server an den konfigurierten Endpunkt gesendet." + }, + "overview": { + "connectionReady": "Verbindung bereit", + "unsavedChanges": "Nicht gespeicherte Änderungen", + "setupRequired": "Einrichtung erforderlich", + "disabled": "Deaktiviert", + "noModel": "Kein Modell ausgewählt" + }, + "connection": { + "endpointTitle": "Anbieter und Endpunkt", + "description": "Wählen Sie eine Voreinstellung oder verbinden Sie einen beliebigen Dienst, der die OpenAI Chat Completions API implementiert.", + "save": "Anbieter-Verbindung speichern" + }, + "credentials": { + "title": "Zugangsdaten", + "description": "Fügen Sie die für diesen Endpunkt erforderlichen Geheimnisse hinzu. Gespeicherte Werte bleiben verschlüsselt und können nicht ausgelesen werden.", + "required": "Schlüssel erforderlich", + "optional": "Schlüssel optional", + "workshop": "GitHub-Anmeldung pro Benutzer" + }, + "provider": { + "title": "Anbieter", + "groups": { + "free": "Kostenlos mit Homarr", + "hosted": "Gehostete Anbieter", + "local": "Lokale Anbieter", + "custom": "Benutzerdefiniert" + }, + "options": { + "homarr": { + "description": "Eine begrenzte Anzahl von Assistentennutzungen ist täglich kostenlos und wird vom Homarr-Team finanziert. Melden Sie sich mit dem Community Workshop an, um Ihr Kontingent zu nutzen." + }, + "openrouter": { + "description": "Gehostetes Modell-Routing mit einem grossen Katalog toolfähiger Modelle." + }, + "openai": { + "description": "OpenAI Chat Completions über den offiziellen API-Endpunkt." + }, + "anthropic": { + "description": "Claude über den OpenAI-SDK-kompatiblen Endpunkt von Anthropic." + }, + "google-gemini": { + "description": "Gemini über die OpenAI-kompatible API von Google." + }, + "xai": { + "description": "Grok-Modelle über die OpenAI-kompatible API von xAI." + }, + "groq": { + "description": "Schnelle gehostete Inferenz über die OpenAI-kompatible API von Groq." + }, + "mistral": { + "description": "Mistral-Modelle über die offizielle API." + }, + "deepseek": { + "description": "DeepSeek-Modelle über die OpenAI-kompatible API." + }, + "together": { + "description": "Gehostete offene Modelle über die OpenAI-kompatible API von Together." + }, + "ollama": { + "description": "Ein lokaler oder über das Netzwerk erreichbarer Ollama-Server mit seiner OpenAI-kompatiblen API." + }, + "lm-studio": { + "description": "Ein lokaler LM-Studio-Server mit aktivierter OpenAI-Kompatibilität." + }, + "llama-cpp": { + "description": "Ein lokaler oder über das Netzwerk erreichbarer llama.cpp-Server mit seiner OpenAI-kompatiblen API." + }, + "custom": { + "label": "Benutzerdefinierter Endpunkt", + "description": "Jeder andere mit OpenAI Chat Completions kompatible Endpunkt." + } + }, + "homarrAuth": { + "title": "Kostenlose tägliche Assistentennutzungen enthalten", + "description": "Es ist kein API-Schlüssel erforderlich. Das Homarr-Team übernimmt täglich eine begrenzte Anzahl von Assistentennutzungen für Sie. Melden Sie sich mit dem Community Workshop an, um Ihr Kontingent getrennt zu halten." + } + }, + "baseUrl": { + "title": "API-Basis-URL", + "description": "Fügen Sie das API-Präfix ein, normalerweise /v1. In Containern verweist localhost auf den Homarr-Container." + }, + "apiKey": { + "title": "API-Schlüssel", + "required": "Von diesem Anbieter erforderlich. Der Wert ist verschlüsselt und kann nur geschrieben werden.", + "optional": "Optional für lokale Endpunkte. Lassen Sie das Feld leer, wenn der Dienst keine Bearer-Authentifizierung erfordert.", + "placeholder": "API-Schlüssel eingeben", + "savedTitle": "Verschlüsselter API-Schlüssel gespeichert", + "savedDescription": "Homarr kann diesen Schlüssel verwenden, aber seinen Wert weder anzeigen noch wiederherstellen.", + "remove": "Gespeicherten API-Schlüssel entfernen", + "removeFlow": { + "title": "Gespeicherten API-Schlüssel entfernen?", + "description": "Dieser Anbieter benötigt einen API-Schlüssel. Wenn Sie ihn entfernen, können die Modellerkennung und die Antworten des Assistenten ausbleiben, bis ein anderer Schlüssel gespeichert wird.", + "optionalDescription": "Der Endpunkt erhält nach dem Entfernen dieses Schlüssels keine Bearer-Authentifizierung mehr. Vergewissern Sie sich, dass er nicht authentifizierte Anfragen akzeptiert oder einen anderen gespeicherten Header verwendet.", + "cancel": "Gespeicherten Schlüssel behalten", + "confirm": "API-Schlüssel entfernen" + } + }, + "headers": { + "title": "Zusätzliche Anfrage-Header", + "description": "Optionale Authentifizierungs- oder Routing-Header. Header-Werte werden verschlüsselt und können nur geschrieben werden.", + "add": "Header hinzufügen", + "name": "Headername", + "value": "Headerwert", + "valuePlaceholder": "Geheimer oder Routing-Wert", + "remove": "Header entfernen", + "configured": "Zusätzliche verschlüsselte Header sind konfiguriert. Beim Hinzufügen von Headern wird der gesamte gespeicherte Satz ersetzt.", + "empty": "Für diesen Anbieter sind keine zusätzlichen Header gespeichert.", + "savedBadge": "Header gespeichert", + "pendingRemoval": "Entfernung ausstehend", + "clear": "Gespeicherte Header beim Speichern entfernen", + "keep": "Gespeicherte Header behalten" + }, + "model": { + "title": "Modell", + "description": "Wählen Sie ein erkanntes Modell aus oder geben Sie eine exakte Modell-ID des Endpunkts ein.", + "placeholder": "Modell-ID", + "refresh": "Modelle aktualisieren", + "chooseModel": "Wählen Sie das für neue Unterhaltungen verwendete Modell aus.", + "discoveryPath": "Pfad zur Modellerkennung", + "discoveryPathDescription": "Wird an die API-Basis-URL angehängt. Leer lassen, um die Erkennung zu deaktivieren und eine manuelle Modell-ID zu verwenden.", + "manual": "Geben Sie manuell eine Modell-ID ein oder speichern Sie die Verbindung, um Modelle zu erkennen.", + "manualFallback": "Die Erkennung ist nicht verfügbar. Sie können weiterhin manuell eine Modell-ID eingeben.", + "saveConnectionFirst": "Speichern Sie die Anbieter-Verbindung, bevor Sie ein Modell auswählen.", + "discovering": "Die bei diesem Anbieter verfügbaren Modelle werden aktualisiert…", + "discovered": "{count, plural, one {# Modell erkannt. Die Tool-Unterstützung hängt vom ausgewählten Endpunkt und Modell ab.} other {# Modelle erkannt. Die Tool-Unterstützung hängt vom ausgewählten Endpunkt und Modell ab.}}", + "discoveryFailed": "Die Modellerkennung wurde nicht abgeschlossen", + "context": "{count} Kontextfenster", + "toolsConfirmed": "Tools angekündigt", + "toolsUnknown": "Tool-Unterstützung überprüfen" + }, + "serverTools": { + "title": "Server-Tools", + "webSearch": { + "label": "Websuche", + "description": "Erlauben Sie dem Modell, bei Bedarf über OpenRouter im aktuellen Web zu suchen. Die Nutzung der Suche wird von OpenRouter separat verrechnet.", + "proxyDescription": "Senden Sie das Websuch-Servertool von OpenRouter an diesen Endpunkt. Aktivieren Sie dies nur, wenn der benutzerdefinierte Endpunkt das OpenRouter-Servertools-Format weiterleitet, beispielsweise ein Homarr-Router-Proxy.", + "limit": "Das Modell entscheidet, wann gesucht wird, mit einem Limit von 3 Suchvorgängen und 5 Ergebnissen pro Suche für jede Anfrage." + } + }, + "enabled": { + "label": "Assistent aktivieren", + "description": "Zeigt den Assistenten allen angemeldeten Benutzern. Die bestehenden Homarr-Berechtigungen gelten weiterhin für jeden internen Tool-Aufruf." + }, + "save": "Assistent speichern", + "notification": { + "connectionSaved": { + "title": "Anbieter-Verbindung gespeichert", + "message": "Der Endpunkt und die verschlüsselten Zugangsdaten sind für die Modellauswahl bereit.", + "credentialsCleared": "Der Endpunkt wurde geändert, daher wurden die bisherigen Zugangsdaten gelöscht. Fügen Sie bei Bedarf Zugangsdaten für das neue Ziel hinzu." + }, + "saved": { + "title": "Assistenteneinstellungen gespeichert", + "message": "Das neue Modell und die Verfügbarkeitseinstellungen sind aktiv." + }, + "error": { + "title": "Assistenteneinstellungen konnten nicht gespeichert werden" + } + } } } }, "tool": { "tasks": { - "title": "Aufgaben", "status": { "idle": "Inaktiv", "running": "Wird ausgeführt", @@ -4746,6 +6789,11 @@ "label": "Pings" } }, + "action": { + "run": "{name} jetzt ausführen", + "enable": "{name} aktivieren", + "disable": "{name} deaktivieren" + }, "interval": { "seconds": "", "minutes": "", @@ -4761,13 +6809,7 @@ } } }, - "settings": { - "title": "Aufgabeneinstellungen für {jobName}" - }, "field": { - "name": { - "label": "Name" - }, "interval": { "label": "Zeitplanintervall" }, @@ -4781,11 +6823,6 @@ "table": { "search": "{count} Aufgaben suchen..." }, - "action": { - "refresh": { - "label": "" - } - }, "refresh": { "success": { "message": "Aufgaben erfolgreich aktualisiert" @@ -4819,7 +6856,6 @@ } }, "api": { - "title": "API", "modal": { "createApiToken": { "title": "API Token erstellt", @@ -4845,7 +6881,6 @@ }, "table": { "header": { - "id": "ID", "createdBy": "Erstellt von", "actions": "Aktionen" } @@ -4901,43 +6936,12 @@ "availableTools": { "title": "Verfügbare Tools", "description": "{count} Tools verfügbar. Erweitern Sie eine Kategorie, um einzelne Tools und ihre Beschreibungen anzuzeigen.", - "columnType": "Typ", - "columnName": "Tool", - "columnDescription": "Beschreibung" - }, - "troubleshooting": { - "title": "Fehlerbehebung", - "missingHeader": { - "title": "«ApiKey-Header fehlt»", - "description": "Ihr Client sendet den {header}-Header nicht. Überprüfen Sie, ob der Abschnitt {section} in Ihrer MCP-Konfiguration korrekt ist. Bei einigen Clients ist nach Konfigurationsänderungen ein Neustart erforderlich." - }, - "invalidFormat": { - "title": "«Ungültiges ApiKey-Format»", - "description": "Vergewissern Sie sich, dass Sie den vollständigen API-Schlüssel und nicht nur einen Teil davon kopiert haben." - }, - "invalidKey": { - "title": "«Ungültiger API-Schlüssel»", - "description": "Die Schlüssel-ID wurde nicht gefunden oder das Token ist falsch. API-Schlüssel können nur einmal bei der Erstellung angezeigt werden. Wenn Sie ihn verloren haben, löschen Sie den alten Schlüssel und erstellen Sie einen neuen." - }, - "connectionRefused": { - "title": "Verbindung verweigert / Zeitüberschreitung", - "description": "Stellen Sie sicher, dass die URL von Ihrem KI-Client aus erreichbar ist. Wenn Homarr hinter einem Reverse-Proxy oder in Docker läuft, verwenden Sie die externe URL (nicht {localhost}). Überprüfen Sie, ob der Port korrekt ist (Standard: 7575 für Docker)." - }, - "toolsNotAppearing": { - "title": "Tools werden nicht angezeigt", - "description": "Einige Tools erfordern die Konfiguration bestimmter Integrationen (z. B. Docker, Overseerr). Die Tool-Liste hängt davon ab, was in Ihrer Homarr-Instanz verfügbar ist." + "filteredDescription": "{count} passende Tools in erweiterten Kategorien.", + "search": "Tools durchsuchen", + "noResults": { + "title": "Keine Tools entsprechen dieser Suche", + "description": "Kein MCP-Tool entspricht «{search}». Versuchen Sie es mit einem Namespace, einem Toolnamen oder einer Beschreibung." } - }, - "copy": "Kopieren", - "oneClick": { - "title": "Mit einem Klick installieren", - "subtitle": "Verwendet OAuth – authentifizieren Sie sich bei der ersten Nutzung im Browser", - "vsCode": "In VS Code installieren", - "cursor": "In Cursor installieren", - "copyUrl": "MCP-URL kopieren", - "copied": "Kopiert!", - "copyHint": "Für ChatGPT, Claude Code oder jeden MCP-Client", - "manualConfig": "Manuelle Konfiguration" } } } @@ -4954,47 +6958,12 @@ "title": "Export sensibler Daten", "warningTitle": "Dieser Export enthält Ihre gesamte Datenbank.", "warningBody": "Die Sicherung enthält alle Benutzer, Integrationsgeheimnisse (verschlüsselt), API-Schlüssel, Board-Konfigurationen und App-Daten. Bewahren Sie die exportierte Datei sicher auf und geben Sie sie nicht weiter.", - "typePrompt": "Geben Sie „{phrase}“ ein, um fortzufahren", - "submit": "Datenbank exportieren", - "cancel": "Abbrechen" + "submit": "Datenbank exportieren" } }, "import": { "title": "Datenbank wiederherstellen", - "description": "Laden Sie eine zuvor exportierte Backup-ZIP-Datei hoch, um Ihre Datenbank wiederherzustellen. Dadurch wird Ihre gesamte Datenbank ersetzt. Wenn die Sicherung mit einem anderen Verschlüsselungsschlüssel erstellt wurde, werden die Geheimnisse automatisch neu verschlüsselt.", - "warning": "Durch das Wiederherstellen einer Sicherung wird Ihre aktuelle Datenbank vollständig ersetzt und die Anwendung neu gestartet. Diese Aktion kann nicht rückgängig gemacht werden.", - "dropzone": { - "title": "Ziehen Sie Ihre Backup-ZIP-Datei hierher oder klicken Sie zum Durchsuchen", - "description": "Es werden nur .zip-Dateien aus einer Homarr-SQLite-Sicherung akzeptiert" - }, - "changeFile": "Datei ändern", - "button": "Datenbank wiederherstellen", - "success": { - "title": "Wiederherstellung abgeschlossen", - "message": "Die Datenbank wurde erfolgreich wiederhergestellt. Die Anwendung wird neu gestartet ..." - }, - "error": "Import fehlgeschlagen" - }, - "preview": { - "title": "Inhalt der Sicherung", - "exported": "Exportiert am {date}", - "loading": "Sicherungsdatei wird analysiert ...", - "errorTitle": "Vorschaufehler", - "entity": "Entität", - "count": "Anzahl", - "boards": "Boards", - "entities": { - "board": "Boards", - "user": "Benutzer", - "app": "Apps", - "integration": "Integrationen", - "item": "Widgets", - "media": "Medien", - "search_engine": "Suchmaschinen" - }, - "analyzeError": "Sicherungsdatei konnte nicht analysiert werden", - "invalidMissingMetadata": "Ungültige Sicherung: metadata.json fehlt", - "invalidMissingDb": "Ungültige Sicherung: db.sqlite fehlt" + "description": "Laden Sie eine zuvor exportierte Backup-ZIP-Datei hoch, um Ihre Datenbank wiederherzustellen. Dadurch wird Ihre gesamte Datenbank ersetzt. Wenn die Sicherung mit einem anderen Verschlüsselungsschlüssel erstellt wurde, werden die Geheimnisse automatisch neu verschlüsselt." }, "restore": { "dropzone": { @@ -5004,29 +6973,20 @@ "analyzing": "Sicherung wird analysiert ...", "changeFile": "Datei ändern", "continueToRestore": "Mit der Wiederherstellung fortfahren", - "tryAgain": "Erneut versuchen", "analysisError": "Analysefehler", "preview": { "title": "Inhalt der Sicherung", "exported": "Exportiert am {date}", "entity": "Entität", "count": "Anzahl", - "boards": "Boards", "entities": { - "board": "Boards", - "user": "Benutzer", - "app": "Apps", - "integration": "Integrationen", - "item": "Widgets", - "media": "Medien", - "search_engine": "Suchmaschinen" + "item": "Widgets" }, "migrationsApplied": "{count} Migration angewendet", "migrationsAppliedPlural": "{count} Migrationen angewendet", "migrationsOlderVersion": "Diese Sicherung stammt aus einer älteren Homarr-Version. Es wurde {count} Schema-Migration angewendet, um sie auf den aktuellen Stand zu bringen.", "migrationsOlderVersionPlural": "Diese Sicherung stammt aus einer älteren Homarr-Version. Es wurden {count} Schema-Migrationen angewendet, um sie auf den aktuellen Stand zu bringen.", "migrationsUpToDate": "Datenbankschema ist aktuell ({count} Migrationen angewendet)", - "upToDate": "Aktuell", "migrationsPending": "{count} ausstehend" }, "migration": { @@ -5037,21 +6997,21 @@ "title": "Destruktive Aktion", "warningTitle": "Dadurch wird Ihre gesamte Datenbank dauerhaft ersetzt.", "warningBody": "Alle aktuellen Boards, Benutzer, Apps, Integrationen, Einstellungen und Sitzungen gehen verloren. Diese Aktion kann nicht rückgängig gemacht werden. Die Anwendung wird nach der Wiederherstellung neu gestartet.", - "typePrompt": "Geben Sie „{phrase}“ ein, um fortzufahren", - "cancel": "Abbrechen", "submit": "Datenbank wiederherstellen" }, "progress": { "title": "Datenbank wird wiederhergestellt ...", - "extracting": "Sicherungsarchiv wird entpackt", - "migrating": "Datenbankmigrationen werden angewendet", - "encrypting": "Integrationsgeheimnisse werden neu verschlüsselt", - "swapping": "Datenbankdatei wird ersetzt", - "restarting": "Server wird neu gestartet" + "restarting": "Server wird neu gestartet", + "relogin": "Durch das Wiederherstellen der Datenbank wurde Ihre aktuelle Sitzung ungültig. Homarr führt Sie zur Anmeldung, sobald der Server bereit ist." }, "complete": { "title": "Wiederherstellung abgeschlossen", - "message": "Die Datenbank wurde erfolgreich wiederhergestellt. Der Server wird neu gestartet – bitte aktualisieren Sie die Seite in einigen Sekunden." + "message": "Die Datenbank wurde erfolgreich wiederhergestellt. Der Server wird neu gestartet – bitte aktualisieren Sie die Seite in einigen Sekunden.", + "button": "Jetzt anmelden" + }, + "timeout": { + "title": "Server ist nicht wieder online", + "message": "Die Wiederherstellung der Datenbank ist abgeschlossen, aber Homarr ist noch nicht wieder bereit. Wiederholen Sie die Verbindungsprüfung oder aktualisieren Sie diese Seite manuell." }, "failed": { "title": "Wiederherstellung fehlgeschlagen" @@ -5059,6 +7019,9 @@ "invalidMissingMetadata": "Ungültige Sicherung: metadata.json fehlt", "invalidMissingDb": "Ungültige Sicherung: db.sqlite fehlt", "analyzeError": "Sicherung konnte nicht analysiert werden" + }, + "confirm": { + "typePrompt": "Geben Sie «{phrase}» ein, um fortzufahren" } } }, @@ -5093,7 +7056,11 @@ "toggleBoardEdit": "", "toggleColorScheme": "Hell-/Dunkelmodus umschalten", "saveNotebook": "Notizbuch speichern (nur innerhalb des Notizbuch-Widgets)", - "openSpotlight": "Suche öffnen" + "openSpotlight": "Suche öffnen", + "openSpotlightApps": "App-Suche öffnen", + "openSpotlightAssistant": "Assistant-Modus öffnen", + "openSpotlightPreferences": "Einstellungsmodus öffnen", + "openAssistant": "Assistant öffnen" }, "note": "Tipp: Mod bezieht sich sowohl auf die Strg-Taste als auch auf die ⌘-Taste unter macOS" } @@ -5103,6 +7070,63 @@ }, "docker": { "title": "Container", + "reconciliation": { + "title": "Docker-Einrichtungsassistent", + "suggestions": "{count, plural, =0 {Keine Vorschläge} one {# Vorschlag} other {# Vorschläge}}", + "attention": "{count} erfordern Aufmerksamkeit", + "endpointUnavailable": "Einige Dienste konnten nicht überprüft werden, weil diese Endpunkte nicht verfügbar sind: {names}", + "empty": "Es wurden keine sichtbaren Docker-Dienste gefunden.", + "emptyFilter": "Keine Dienste entsprechen dieser Ansicht.", + "ambiguous": "Mehr als ein vorhandenes Element könnte diesem Dienst entsprechen. Homarr wählt nicht automatisch eines aus.", + "filter": { + "attention": "Erfordert Aufmerksamkeit", + "represented": "Bereits eingerichtet", + "all": "Alle" + }, + "state": { + "newRecognized": "Bereit zum Verbinden", + "newApp": "Neuer Dienst", + "represented": "Bereits abgebildet", + "linked": "Verknüpft", + "moved": "Adresse geändert" + }, + "url": { + "manual": "Adresse manuell eingeben" + }, + "health": { + "layer": { + "docker": "Docker", + "integrationConfiguration": "Integration", + "authentication": "Authentifizierung", + "apiRequest": "API", + "appRepresentation": "Anwendung", + "widgetConfiguration": "Widget", + "widgetQuery": "Widget-Abfrage" + }, + "status": { + "available": "Verfügbar", + "configured": "Konfiguriert", + "linked": "Verknüpft", + "missing": "Fehlt", + "changed": "Geändert", + "unused": "Nicht verwendet", + "notApplicable": "Nicht zutreffend", + "notObserved": "Nicht beobachtet" + } + }, + "action": { + "review": "Überprüfen", + "dismiss": "Verwerfen", + "restoreDismissed": "Verworfenes wiederherstellen ({count})", + "setupIntegration": "Integration einrichten", + "reviewIntegration": "Integration überprüfen", + "viewRepresentation": "Einrichtung anzeigen" + }, + "loadError": { + "title": "Der Docker-Einrichtungsassistent konnte nicht geladen werden", + "message": "Docker-Dienstinformationen sind nicht verfügbar. Versuchen Sie es erneut, ohne diese Seite zu verlassen." + } + }, "table": { "updated": "Aktualisiert {when}", "refresh": { @@ -5115,9 +7139,6 @@ "totalMemory": "Gesamtspeicher: {memory}" }, "field": { - "name": { - "label": "Name" - }, "state": { "label": "Staat", "option": { @@ -5131,9 +7152,6 @@ } }, "stats": { - "cpu": { - "label": "CPU" - }, "memory": { "label": "RAM" } @@ -5196,8 +7214,11 @@ } }, "remove": { - "label": "Entfernen", "confirm": "Erneut klicken, um dauerhaft zu entfernen", + "confirmation": { + "title": "{count, plural, one {# Container entfernen?} other {# Container entfernen?}}", + "message": "{count, plural, one {Dadurch wird # Container dauerhaft entfernt: {names}} other {Dadurch werden # Container dauerhaft entfernt: {names}}}" + }, "notification": { "success": { "title": "Container entfernt", @@ -5209,8 +7230,13 @@ } } }, + "result": { + "failure": { + "title": "Einige Containeraktionen sind fehlgeschlagen", + "message": "{total, plural, one {{failed} von # Aktion ist fehlgeschlagen: {names}} other {{failed} von # Aktionen sind fehlgeschlagen: {names}}}" + } + }, "refresh": { - "label": "Aktualisieren", "notification": { "success": { "title": "Container aktualisiert", @@ -5241,18 +7267,33 @@ }, "error": { "internalServerError": "Fehler beim Abrufen der Docker Container", + "endpointUnavailable": "{count, plural, one {# Docker-Endpunkt ist nicht verfügbar: {names}} other {# Docker-Endpunkte sind nicht verfügbar: {names}}}", "noColumns": "Wählen Sie in den Widget-Einstellungen mindestens eine Spalte aus" } }, "kubernetes": { + "context": { + "label": "Kubernetes-Kontext", + "loadError": { + "title": "Kubernetes-Kontexte konnten nicht geladen werden", + "message": "Kontextinformationen sind nicht verfügbar. Versuchen Sie es erneut, ohne diese Seite zu verlassen." + }, + "status": { + "available": "Verfügbar", + "degraded": "Metriken nicht verfügbar", + "unavailable": "Nicht verfügbar" + }, + "unavailable": "Dieser Kubernetes-Kontext ist nicht erreichbar. Wählen Sie einen anderen Kontext aus oder überprüfen Sie dessen Anmeldedaten und Endpunkt.", + "metricsUnavailable": "Dieser Kontext ist erreichbar, aber der Metrics Server ist nicht verfügbar. Das Inventar bleibt ohne Live-CPU- und Speichernutzung verfügbar." + }, "cluster": { "title": "Cluster-Dashboard", "label": "Cluster", "providers": "Anbieter", "version": "Version", - "architecture": "Architektur", "capacity": { "title": "Kapazität", + "metricsUnavailable": "Der Metrics Server ist nicht verfügbar. Inventar und reservierte Kapazität bleiben sichtbar, aber die Live-CPU- und Speichernutzung kann nicht angezeigt werden.", "resource": { "reserved": "Reserviert", "used": "Benutzt" @@ -5271,38 +7312,10 @@ } }, "nodes": { - "label": "Knoten", "field": { - "name": { - "label": "Name" - }, - "state": { - "label": "Zustand", - "option": { - "ready": "Bereit", - "NotReady": "Nicht Bereit" - } - }, - "cpu": { - "label": "CPU" - }, - "memory": { - "label": "RAM" - }, - "pods": { - "label": "Pods" - }, - "operatingSystem": { - "label": "OS" - }, - "architecture": { - "label": "Architektur" - }, + "metricsUnavailable": "Nicht verfügbar", "kubernetesVersion": { "label": "Kubernetes Version" - }, - "creationTimestamp": { - "label": "Erstellt" } }, "table": { @@ -5310,43 +7323,17 @@ } }, "namespaces": { - "label": "Namensräume", - "field": { - "name": { - "label": "Name" - }, - "state": { - "label": "Zustand", - "option": { - "active": "Aktiv", - "terminating": "Beendet" - } - }, - "creationTimestamp": { - "label": "Erstellt" - } - }, "table": { "search": "{count} Namensräume durchsuchen" } }, "ingresses": { - "label": "Ingresse", "field": { - "name": { - "label": "Name" - }, - "namespace": { - "label": "Namensraum" - }, "className": { "label": "Klassenname" }, "rulesAndPaths": { "label": "Regeln & Pfade" - }, - "creationTimestamp": { - "label": "Erstellt" } }, "table": { @@ -5354,17 +7341,7 @@ } }, "services": { - "label": "Dienste", "field": { - "name": { - "label": "Name" - }, - "namespace": { - "label": "Namensraum" - }, - "type": { - "label": "Typ" - }, "ports": { "label": "Ports" }, @@ -5373,9 +7350,6 @@ }, "clusterIP": { "label": "Cluster-IP" - }, - "creationTimestamp": { - "label": "Erstellt" } }, "table": { @@ -5383,25 +7357,12 @@ } }, "pods": { - "label": "Pods", "field": { - "name": { - "label": "Name" - }, - "namespace": { - "label": "Namensraum" - }, "image": { "label": "Image" }, "applicationType": { "label": "Typ der Anwendung" - }, - "status": { - "label": "Status" - }, - "creationTimestamp": { - "label": "Erstellt" } }, "table": { @@ -5409,51 +7370,17 @@ } }, "secrets": { - "label": "Geheimnisse", - "field": { - "name": { - "label": "Name" - }, - "namespace": { - "label": "namensraum" - }, - "type": { - "label": "typ" - }, - "creationTimestamp": { - "label": "Erstellt" - } - }, "table": { "search": "{count} Secrets durchsuchen" } }, "configmaps": { - "label": "ConfigMaps", - "field": { - "name": { - "label": "Name" - }, - "namespace": { - "label": "namensraum" - }, - "creationTimestamp": { - "label": "Erstellt" - } - }, "table": { "search": "{count} configMaps durchsuchen" } }, "volumes": { - "label": "Laufwerke", "field": { - "name": { - "label": "Name" - }, - "namespace": { - "label": "Namensraum" - }, "accessModes": { "label": "Zugriffsmodi" }, @@ -5468,12 +7395,6 @@ }, "volumeName": { "label": "Laufwerkname" - }, - "status": { - "label": "Status" - }, - "creationTimestamp": { - "label": "Erstellt" } }, "table": { @@ -5482,6 +7403,29 @@ }, "error": { "internalServerError": "Fehler beim Abrufen der Kubernetes Daten" + }, + "field": { + "name": { + "label": "Job Name" + }, + "namespace": { + "label": "Namensraum" + }, + "creationTimestamp": { + "label": "Erstellt" + }, + "state": { + "label": "Jobstatus" + }, + "status": { + "label": "Status" + }, + "type": { + "label": "Download Client" + }, + "architecture": { + "label": "Architektur" + } } }, "permission": { @@ -5515,71 +7459,27 @@ }, "navigationStructure": { "manage": { - "workshop": { - "label": "Workshop" - }, "label": "Verwalten", - "boards": { - "label": "Boards" - }, - "integrations": { - "label": "Integrationen", + "custom-widgets": { "edit": { - "label": "Bearbeiten" + "flow": { + "label": "Ablauf" + } }, - "new": { - "label": "Neu" - } - }, - "search-engines": { - "label": "Suchmaschinen", - "new": { - "label": "Neu" + "workshop": { + "label": "Werkstatt" }, - "edit": { - "label": "Bearbeiten" - } - }, - "medias": { - "label": "Medien" - }, - "apps": { - "label": "Apps", - "new": { - "label": "Neu" - }, - "edit": { - "label": "Bearbeiten" + "publish": { + "label": "Im Workshop veröffentlichen" } }, "users": { - "label": "Benutzer", - "create": { - "label": "Erstellen" - }, "general": "Allgemein", - "security": "Sicherheit", - "board": "Boards", - "groups": { - "label": "Gruppen" - }, - "invites": { - "label": "Einladungen" - } + "security": "Sicherheit" }, "tools": { "label": "Werkzeuge", - "tasks": { - "label": "Aufgaben" - }, - "docker": { - "label": "Docker", - "logs": { - "label": "Protokolle" - } - }, "kubernetes": { - "label": "Kubernetes", "nodes": { "label": "Knoten" }, @@ -5605,11 +7505,7 @@ "label": "Laufwerke" } }, - "logs": { - "label": "Logs" - }, "certificates": { - "label": "Zertifikate", "hostnames": { "label": "Hostnamen" } @@ -5620,12 +7516,60 @@ }, "about": { "label": "Über" + }, + "assistant": { + "label": "Assistent" } } }, "search": { "placeholder": "Nach allem suchen", "nothingFound": "Keine Treffer", + "modePicker": { + "search": { + "label": "Suchen", + "placeholder": "Apps, Boards, Seiten, Befehle und Einstellungen durchsuchen" + }, + "apps": { + "label": "Apps", + "placeholder": "Apps, Boards und Integrationen durchsuchen" + }, + "command": { + "label": "Befehle", + "placeholder": "Aktionen und Befehle durchsuchen" + }, + "preferences": { + "label": "Einstellungen", + "placeholder": "Einstellungen durchsuchen und ändern" + }, + "assistant": { + "label": "Assistent", + "placeholder": "Assistant fragen" + }, + "external": { + "label": "Internet", + "placeholder": "Mit einer externen Suchmaschine suchen" + }, + "media": { + "label": "Medien", + "placeholder": "Nach einem Film oder einer Serie suchen", + "fallback": "Medien nach «{query}» durchsuchen" + }, + "userGroup": { + "label": "Personen", + "placeholder": "Benutzer und Gruppen durchsuchen" + }, + "continueWith": "Fortfahren mit", + "dialogAriaLabel": "{mode}-Befehlsmenü", + "navigationLabel": "Suchmodi", + "modeAriaLabel": "{mode}-Modus", + "resultsAriaLabel": "{mode}-Ergebnisse", + "footer": { + "navigate": "Navigieren", + "open": "Öffnen", + "close": "Schliessen" + } + }, "error": { "fetch": "Beim Abrufen der Daten ist ein Fehler aufgetreten" }, @@ -5634,7 +7578,6 @@ "help": "Nach Apps, Integrationen oder Boards suchen", "group": { "app": { - "title": "Apps", "children": { "action": { "open": { @@ -5650,7 +7593,6 @@ } }, "board": { - "title": "Boards", "children": { "action": { "open": { @@ -5670,9 +7612,6 @@ "title": "Wählen Sie eine Aktion für die App" } } - }, - "integration": { - "title": "Integrationen" } } }, @@ -5701,9 +7640,6 @@ "newBoard": { "label": "Erstellen Sie ein neues Board" }, - "importBoard": { - "label": "Ein Board importieren" - }, "newApp": { "label": "Neue App erstellen" }, @@ -5773,7 +7709,6 @@ } }, "defaultSearchEngineId": { - "label": "Standardsuchmaschine", "children": { "detail": { "title": "Wählen Sie Ihre Standardsuchmaschine aus" @@ -5781,7 +7716,6 @@ } }, "openSearchInNewTab": { - "label": "Suchergebnisse in einem neuen Tab öffnen", "children": { "detail": { "title": "Suchergebnisse in einem neuen Tab öffnen" @@ -5789,7 +7723,6 @@ } }, "ddgBangs": { - "label": "DuckDuckGo-Bangs aktivieren", "children": { "detail": { "title": "DuckDuckGo-Bangs aktivieren" @@ -5804,6 +7737,13 @@ } } }, + "byteUnitSystem": { + "children": { + "detail": { + "title": "Einheiten für Ihre Datengrösse auswählen" + } + } + }, "homeBoardId": { "label": "Startboard", "children": { @@ -5821,7 +7761,6 @@ } }, "pingIconsEnabled": { - "label": "Symbole für Pings verwenden", "children": { "detail": { "title": "Symbole für Pings verwenden" @@ -5829,7 +7768,6 @@ } }, "enableRightClickOnWidgets": { - "label": "Rechtsklick auf Widgets aktivieren", "children": { "detail": { "title": "Rechtsklick auf Widgets aktivieren" @@ -5857,6 +7795,7 @@ "description": "Beginnen Sie mit der Eingabe, um in Ihren Medienanfrage-Integrationen zu suchen", "disabled": { "noIntegration": "Fügen Sie eine Overseerr-, Jellyseerr- oder Seerr-Integration hinzu, um die Mediensuche zu aktivieren.", + "signInRequired": "Melden Sie sich an, um Medienanforderungsintegrationen zu durchsuchen.", "scoped": "Dieses Widget verfügt über keine zugängliche Medienanfrage-Integration." } } @@ -5873,7 +7812,6 @@ "help": "Externe Suchmaschine verwenden", "group": { "searchEngine": { - "title": "Suchmaschinen", "tipDdgBangs": "Tipp: Sie können hier ebenfalls beliebige DuckDuckGo-Bangs verwenden, z. B. !something", "bang": { "searchWithQuery": "Mit {label} nach „{query}“ suchen", @@ -5924,20 +7862,6 @@ "group": { "mode": { "title": "Modi" - }, - "help": { - "title": "Hilfe", - "option": { - "documentation": { - "label": "Dokumentation" - }, - "submitIssue": { - "label": "Ein Problem melden" - }, - "discord": { - "label": "Community-Discord" - } - } } } }, @@ -5949,9 +7873,10 @@ "other": { "label": "Mit einer anderen Suchmaschine suchen" }, - "no-default": { - "label": "Keine Standard Suchmaschine festgelegt", - "description": "Eine Standard Suchmaschine in den Einstellungen festlegen" + "no-engines": { + "label": "Keine Suchmaschinen konfiguriert", + "descriptionCreate": "Fügen Sie eine Suchmaschine hinzu, um über das Befehlsmenü zu suchen", + "descriptionUnavailable": "Bitten Sie einen Administrator, eine Suchmaschine zu konfigurieren" }, "search": { "label": "Suche nach \"{query}\" mit {name}" @@ -6031,7 +7956,6 @@ "help": "Nach Benutzer oder Gruppe suchen", "group": { "user": { - "title": "Benutzer", "children": { "action": { "detail": { @@ -6044,7 +7968,6 @@ } }, "group": { - "title": "Gruppen", "children": { "action": { "detail": { @@ -6068,9 +7991,6 @@ "engine": { "search": "Nach einer Suchmaschine suchen", "field": { - "name": { - "label": "Name" - }, "short": { "label": "Kurz" }, @@ -6083,12 +8003,19 @@ }, "page": { "list": { - "title": "Suchmaschinen", + "ariaLabel": "Konfigurierte Suchmaschinen", "noResults": { "title": "Noch keine Suchmaschinen vorhanden", - "action": "Erstelle deine erste Suchmaschine" + "description": "Suchmaschinen ermöglichen es Spotlight, eine Anfrage an eine Website oder einen verbundenen Dienst zu senden.", + "action": "Erstelle deine erste Suchmaschine", + "filteredTitle": "Keine Suchmaschinen entsprechen Ihrer Suche", + "filteredDescription": "Keine Suchmaschinen entsprechen «{search}». Versuchen Sie es mit einem anderen Namen oder einer anderen URL." }, - "interactive": "Interaktiv, verwendet eine Integration" + "interactive": "Interaktiv, verwendet eine Integration", + "type": { + "generic": "URL-Vorlage", + "fromIntegration": "Integration" + } }, "create": { "title": "Neue Suchmaschine", @@ -6107,11 +8034,9 @@ "title": "Suchmaschine bearbeiten", "notification": { "success": { - "title": "Änderungen erfolgreich angewendet", "message": "Suchmaschine wurde erfolgreich gespeichert" }, "error": { - "title": "Änderungen konnten nicht angewendet werden", "message": "Die Suchmaschine konnte nicht gespeichert werden" } }, @@ -6250,6 +8175,10 @@ } }, "log": { + "context": { + "widgetError": "Das Widget hat ungefähr zu diesem Zeitpunkt einen Fehler gemeldet", + "expiredWidgetError": "Protokolle rund um diesen Widget-Fehler werden nicht mehr aufbewahrt" + }, "level": { "option": { "debug": "Debug", @@ -6261,7 +8190,6 @@ }, "onboardingTour": { "learnMore": "Dokumentation lesen", - "next": "Weiter", "prev": "Zurück", "done": "Fertig", "skip": "Tour überspringen", @@ -6325,5 +8253,359 @@ "description": "Ändern Sie Ihr Farbschema, Ihre Sprache, Ihr Startboard und Ihre Einstellungen. Von hier aus können Sie auch zum Verwaltungsbereich wechseln." } } + }, + "metadata": { + "description": "Ein selbst gehostetes Dashboard für den *arr-Stack und Ihr gesamtes Homelab. Integriert mehr als 50 Dienste, Echtzeit-Widgets und keine Konfigurationsdateien.", + "dashboardTitle": "{appName}-Dashboard" + }, + "assistant": { + "title": "Assistent", + "open": "Assistant öffnen", + "close": "Assistant schliessen", + "minimize": "Assistant minimieren", + "spotlight": "Assistant fragen", + "spotlightDescription": "Geben Sie eine Eingabe ein und senden Sie sie, ohne das Befehlsmenü zu verlassen.", + "spotlightPrompt": { + "title": "Assistant fragen", + "description": "Geben Sie oben eine Eingabe ein. Mit der Eingabetaste wird sie im Hintergrund gesendet.", + "send": "Eingabe senden", + "empty": "Geben Sie oben eine Eingabe ein" + }, + "unavailable": { + "checking": "Es wird geprüft, ob der Assistent verfügbar ist …", + "error": "Die Verfügbarkeit des Assistenten konnte nicht geprüft werden. Versuchen Sie es erneut.", + "notConfigured": "Ein Administrator muss den Assistenten zuerst konfigurieren und aktivieren.", + "signIn": "Melden Sie sich an, um den Assistenten zu verwenden." + }, + "newConversation": "Neue Unterhaltung", + "conversations": "Unterhaltungen", + "conversationActions": "Unterhaltungsaktionen", + "searchConversations": "Unterhaltungen durchsuchen", + "noMatchingConversations": "Keine passenden Unterhaltungen", + "moreActions": "Weitere Antwortaktionen", + "renameConversation": { + "action": "Umbenennen", + "label": "Name der Unterhaltung", + "save": "Namen speichern", + "failedTitle": "Die Unterhaltung konnte nicht umbenannt werden", + "failedDescription": "Homarr konnte diese Unterhaltung nicht umbenennen. Versuchen Sie es erneut." + }, + "deleteConversation": { + "title": "Unterhaltung löschen?", + "description": "«{title}» und ihre Nachrichten werden dauerhaft gelöscht.", + "failedTitle": "Die Unterhaltung konnte nicht gelöscht werden", + "failedDescription": "Homarr konnte diese Unterhaltung nicht löschen. Versuchen Sie es erneut." + }, + "closeHistory": "Unterhaltungsverlauf schliessen", + "openHistory": "Unterhaltungsverlauf öffnen", + "emptyTitle": "Wobei kann ich helfen?", + "emptyDescription": "Fragen Sie nach Ihrer Homarr-Einrichtung, überprüfen Sie Live-Instanzdaten oder genehmigen Sie Aktionen, wenn ich eine Änderung vornehmen soll.", + "suggestions": { + "health": { + "label": "Dienststatus prüfen", + "prompt": "Überprüfen Sie meine Integrationen und fassen Sie alles zusammen, was Aufmerksamkeit erfordert." + }, + "explore": { + "label": "Mein Homarr erkunden", + "prompt": "Zeigen Sie mir, was ich in dieser Homarr-Instanz anzeigen und verwalten kann." + }, + "media": { + "label": "Medien zum Anfordern finden", + "prompt": "Helfen Sie mir, einen Film oder eine Serie zum Anfordern zu finden." + }, + "style": { + "label": "Dashboard verbessern", + "prompt": "Helfen Sie mir, das Erscheinungsbild eines Boards oder das benutzerdefinierte CSS zu verbessern. Zeigen Sie mir zuerst meine Boards und behalten Sie dann meine aktuellen Einstellungen bei, während wir die Änderung vornehmen." + }, + "designWidget": { + "label": "Widget entwerfen", + "prompt": "Erstellen und installieren Sie ein benutzerdefiniertes Widget für " + } + }, + "composerPlaceholder": "Assistenten fragen …", + "runtime": { + "model": "Modell", + "searchModels": "Modelle durchsuchen", + "noModels": "Keine Modelle verfügbar", + "otherModels": "Andere Modelle", + "imageInput": "Akzeptiert Bildeingaben", + "thinking": "Denkmodus", + "reasoning": { + "auto": "Automatisch", + "none": "Aus", + "minimal": "Schlicht", + "low": "Niedrig", + "medium": "Mittel", + "high": "Hoch" + } + }, + "providerQuota": { + "title": "Homarr-Anbieter", + "communityWorkshop": "Community-Workshop", + "dailyAllowance": "Tägliches Anfragekontingent", + "remainingLabel": "Noch {remaining} von {limit} Anfragen an den Homarr-Anbieter verfügbar", + "loading": "Kontingent des Homarr-Anbieters wird geladen", + "signInRequired": "Anmeldung beim Workshop für den Homarr-Anbieter erforderlich", + "signInDescription": "Melden Sie sich über den Community Workshop mit GitHub an, um Ihr separates tägliches Kontingent zu erhalten.", + "exhaustedDescription": "Ihr Kontingent beim Homarr-Anbieter ist für heute aufgebraucht. Es wird um Mitternacht UTC zurückgesetzt.", + "unavailableDescription": "Melden Sie sich beim Workshop an oder warten Sie, bis Ihr Kontingent beim Homarr-Anbieter zurückgesetzt wird.", + "signIn": "Mit GitHub anmelden", + "signInError": "Die GitHub-Anmeldung ist fehlgeschlagen. Versuchen Sie es gleich noch einmal.", + "loadError": "Das Kontingent des Homarr-Anbieters konnte nicht geladen werden.", + "reset": "Wird um {relative} um zurückgesetzt", + "toolCalls": "Jede Modellanfrage und jeder abgeschlossene Tool-Aufruf verbraucht eine Anfrage.", + "retry": "Kontingent neu laden", + "level": { + "ok": "Okay", + "warning": "Warnung", + "bad": "Niedrig", + "dead": "Benutzt" + } + }, + "stop": "Antwort stoppen", + "send": "Nachricht senden", + "copy": "Antwort kopieren", + "copyMessage": "Nachricht kopieren", + "editMessage": "Nachricht bearbeiten", + "updateMessage": "Nachricht aktualisieren", + "regenerate": "Antwort neu generieren", + "helpful": "Hilfreich", + "notHelpful": "Nicht hilfreich", + "readAloud": "Antwort vorlesen", + "stopReading": "Vorlesen der Antwort stoppen", + "feedbackError": "Ihr Feedback konnte nicht gespeichert werden. Versuchen Sie es erneut.", + "exportMarkdown": "Als Markdown exportieren", + "exportConversation": { + "action": "Unterhaltung als Markdown exportieren", + "failedTitle": "Die Unterhaltung konnte nicht exportiert werden", + "failedDescription": "Homarr konnte diese Unterhaltung nicht laden. Versuchen Sie es erneut." + }, + "reasoning": "Denken", + "previousResponse": "Vorherige Antwort", + "nextResponse": "Nächste Antwort", + "removeAttachment": "Anhang entfernen", + "downloadFile": "{name} herunterladen", + "attachedImage": "Angehängtes Bild", + "externalImageBlocked": "Externes Bild aus Datenschutzgründen blockiert", + "image": { + "loading": "Bild wird geladen", + "failed": "Dieses Bild konnte nicht geladen werden.", + "retry": "Bild erneut versuchen" + }, + "quoteSelection": "Zitat", + "dismissQuote": "Zitat entfernen", + "attachments": { + "add": "Bild oder Dokument anhängen", + "errorTitle": "Der Anhang konnte nicht hinzugefügt werden", + "imageUnsupported": "Das ausgewählte Modell unterstützt keine Bildeingaben." + }, + "mentions": { + "menu": "Homarr-Kontext hinzufügen", + "context": "Kontext", + "app": "Apps", + "integration": "Integratione", + "board": "Boads", + "widget": "Kacheln", + "tools": "Verfügbare Tools" + }, + "markdown": { + "diagram": "Diagramm", + "renderingDiagram": "Diagramm wird gerendert …", + "diagramUnavailable": "Dieses Diagramm konnte nicht gerendert werden." + }, + "commands": { + "menu": "Assistentenbefehle", + "health": "Dienststatusprüfung vorbereiten", + "explore": "Übersicht dieser Homarr-Instanz vorbereiten", + "media": "Mediensuche vorbereiten", + "style": "Änderung am Erscheinungsbild des Boards oder am benutzerdefinierten CSS vorbereiten", + "designWidget": "Erstellung eines benutzerdefinierten Widgets mit einer einzigen Eingabe vorbereiten" + }, + "usage": { + "tokens": "Token", + "contextWindow": "Kontextfenster", + "requestDetails": "Anfragedetails", + "used": "Letzter Schritt", + "remaining": "Verbleibend", + "capacity": "Kapazität", + "input": "Eingabe", + "output": "Ausgabe", + "cached": "Zwischengespeicherte Eingabe", + "cacheWrite": "Cache-Schreibvorgang", + "reasoning": "Schlussfolgerung", + "inputShort": "Eingabe", + "outputShort": "Ausgabe", + "cachedShort": "zwischengespeichert", + "reasoningShort": "Schlussfolgerung", + "firstOutput": "Erste Ausgabe", + "homarrTiming": "Von Homarr erfasst", + "endToEnd": "Ende zu Ende", + "observedThroughput": "Erfasster Durchsatz", + "providerTiming": "Vom Anbieter gemeldet", + "loadingProviderDetails": "Generierungsdetails werden geladen …", + "providerDetailsPending": "OpenRouter verarbeitet noch einige Generierungsdetails. Öffnen Sie die Ansicht erneut, um es nochmals zu versuchen.", + "providerLatency": "Latenz des Anbieters", + "generationTime": "Generierungszeit", + "moderationLatency": "Inhaltsmoderation", + "providerThroughput": "Durchsatz des Anbieters", + "fallbacks": "Ausweichlösungen", + "fallbackLatency": "Latenz der Ausweichlösung", + "cacheDiscount": "Cache-Rabatt", + "normalizedTokens": "Normalisierte Eingabe / Ausgabe von OpenRouter", + "byok": "Eigenen API-Schlüssel verwenden", + "cost": "Kosten", + "reported": "Vom Anbieter gemeldet", + "estimated": "Anhand der Modellpreise geschätzt", + "upstreamCost": "Upstream-Inferenz", + "webSearches": "Websuchen", + "finishReason": "Beendigungsgrund", + "notReported": "Nicht gemeldet", + "agentSteps": "Agentenschritte", + "step": "Schritt {number}", + "generation": "Generierung" + }, + "toolInput": "Eingabe", + "toolOutput": "Ausgabe", + "toolActivity": { + "iconSearch": "Nach Symbolen für «{query}» suchen", + "iconBrowse": "Verfügbare Symbole werden durchsucht" + }, + "toolNavigation": { + "openPreview": "Vorschau öffnen", + "openWidget": "Widget öffnen" + }, + "webSearch": { + "title": "Websuche", + "completed": "OpenRouter hat für diese Antwort das Live-Web durchsucht.", + "searches": "{count, plural, one {# Suche} other {# Suchen}}", + "sources": "{count, plural, one {# Quelle} other {# Quellen}}" + }, + "responseError": { + "title": "Der Assistent konnte die Aufgabe nicht abschliessen", + "description": "Versuchen Sie es erneut. Wenn das Problem weiterhin besteht, bitten Sie eine Administratorin oder einen Administrator, den konfigurierten Modellendpunkt zu überprüfen." + }, + "toolPreparationError": { + "title": "Diese Anfrage konnte nicht vorbereitet werden", + "description": "Das Modell wurde beendet, bevor es vollständige Details bereitstellen konnte. Versuchen Sie die Antwort erneut oder beschreiben Sie die Anfrage nochmals. Es wurde keine Änderung vorgenommen." + }, + "busy": { + "title": "Der Assistent arbeitet bereits", + "description": "Warten Sie auf die aktuelle Antwort oder öffnen Sie sie, um den Vorgang zu stoppen." + }, + "pendingAction": { + "answerTitle": "Antwort erforderlich", + "answerFallback": "Wählen Sie eine Antwort, um fortzufahren", + "formTitle": "App-Details überprüfen", + "boardFormTitle": "Änderungen im Board überprüfen", + "review": "Überprüfen", + "sendBlocked": "Bearbeiten Sie die ausstehende Anfrage, bevor Sie sie senden" + }, + "activity": { + "thinking": "Der Assistent denkt nach", + "working": "Ihre Anfrage wird bearbeitet", + "ready": "Antwort bereit", + "completed": "Antwort öffnen", + "approval": "Genehmigung erforderlich", + "failed": "Der Assistent benötigt Ihre Aufmerksamkeit", + "expand": "Antwort des Assistenten öffnen", + "dismiss": "Aktivität des Assistenten schliessen" + }, + "scrollToLatest": "Zum neuesten Eintrag scrollen", + "refresh": { + "action": "Aktuelle Ansicht aktualisieren", + "working": "Aktuelle Ansicht wird aktualisiert", + "completeTitle": "Ansicht aktualisiert", + "completeDescription": "Die sichtbaren Homarr-Daten wurden neu geladen.", + "failedTitle": "Ansicht konnte nicht aktualisiert werden", + "failedDescription": "Die Änderung wurde möglicherweise trotzdem gespeichert. Versuchen Sie erneut, die Ansicht zu aktualisieren." + }, + "askUser": { + "preparing": "Frage wird vorbereitet", + "answered": "Ihre Antwort", + "other": "Andere", + "otherLabel": "Ihre Antwort", + "otherPlaceholder": "Geben Sie eine andere Antwort ein …", + "submit": "Antwort senden", + "cancelOther": "Andere Antwort abbrechen", + "optionKind": { + "affirmative": "Bestätigen", + "negative": "Ablehnen", + "alternative": "Alternative", + "custom": "Benutzerdefiniert" + } + }, + "configureApp": { + "title": "App-Details überprüfen", + "description": "Wählen Sie ein lokales Symbol und passen Sie alles an, bevor der Assistent die Genehmigung zur Erstellung anfordert.", + "preparing": "App-Details werden vorbereitet", + "continue": "Diese Details verwenden", + "ready": "App-Details bereit", + "automaticContinue": "Diese App-Details werden automatisch verwendet" + }, + "configureBoardSettings": { + "title": "Board-Änderungen überprüfen", + "loading": "Aktuelle Board-Einstellungen werden geladen", + "loadErrorTitle": "Board-Einstellungen konnten nicht geladen werden", + "loadErrorDescription": "Das Board existiert möglicherweise nicht mehr, oder Sie haben keine Berechtigung, es zu ändern.", + "proposedCount": "Der Assistent hat {count} Felder vorgeschlagen", + "changeCount": "{count} Änderungen bereit", + "ready": "Board-Änderungen bereit", + "cancelled": "Aktuelle Board-Einstellungen beibehalten", + "noChanges": "Keine Einstellungen werden geändert", + "keepCurrent": "Aktuelle Einstellungen beibehalten", + "continue": "Zur Genehmigung fortfahren", + "automaticContinue": "Die vorgeschlagenen Board-Änderungen werden automatisch akzeptiert", + "resetAll": "Alle Änderungen zurücksetzen", + "tabs": { + "css": "Benutzerdefiniertes CSS", + "appearance": "Aussehen", + "background": "Hintergrund", + "general": "Allgemein" + }, + "cssDescription": "Bearbeiten Sie das vollständige Stylesheet. Bestehende Regeln bleiben erhalten, sofern sie hier nicht entfernt werden.", + "cssCharacters": "{count} von 16384 Zeichen", + "copyCss": "CSS kopieren", + "copied": "Kopiert", + "restoreCss": "Aktuelles CSS wiederherstellen", + "remoteCssTitle": "Dieses CSS lädt eine entfernte Ressource", + "remoteCssDescription": "Importierte Stylesheets und entfernte URLs kontaktieren beim Laden des Boards einen anderen Server. Überprüfen Sie sie, bevor Sie fortfahren." + }, + "configureWidget": { + "title": "Widget überprüfen", + "preparing": "Widget-Einstellungen werden vorbereitet", + "review": "Widget und Integrationen überprüfen", + "ready": "Widget-Konfiguration bereit", + "cancelled": "Widget wurde nicht hinzugefügt", + "automaticContinue": "Die vorgeschlagene Widget-Konfiguration wird automatisch akzeptiert", + "definitionLoadErrorTitle": "Widget-Einstellungen konnten nicht geladen werden", + "definitionLoadErrorDescription": "Homarr konnte die Einstellungen dieses Widgets nicht laden. Versuchen Sie es erneut.", + "loadErrorTitle": "Integrationen konnten nicht geladen werden", + "loadErrorDescription": "Homarr konnte die für dieses Widget verfügbaren Integrationen nicht laden.", + "noIntegrationTitle": "Eine kompatible Integration ist erforderlich", + "noIntegrationDescription": "Konfigurieren Sie eine von diesem Widget unterstützte Integration, bevor Sie es zum Dashboard hinzufügen.", + "connectIntegration": "Dienst verbinden", + "manageIntegrations": "Integrationen verwalten", + "skip": "Nicht hinzufügen", + "errorTitle": "Widget-Einstellungen konnten nicht vorbereitet werden", + "errorDescription": "Das Modell hat keine vollständige Widget-Konfiguration bereitgestellt. Es wurde kein Widget hinzugefügt." + }, + "approvalRequired": "Genehmigung erforderlich", + "complete": "Abgeschlossen", + "denied": "Abgelehnt", + "failed": "Fehlgeschlagen", + "working": "Wird ausgeführt", + "approvalDescription": "Überprüfen Sie diese Änderung, bevor sie ausgeführt wird.", + "approveAndRun": "Genehmigen und ausführen", + "deny": "Ablehnen", + "autoApproval": { + "label": "Automatische Genehmigungen", + "composerLabel": "Für mich genehmigen", + "title": "Automatische Genehmigungen", + "description": "Formulare automatisch vorbereiten und geschützte Änderungen für diese Unterhaltung genehmigen. Fragen warten weiterhin auf Ihre Antwort, und Ihre Homarr-Berechtigungen gelten weiterhin. Diese Funktion wird deaktiviert, wenn Sie die Unterhaltung wechseln.", + "enable": "Für diese Unterhaltung aktivieren", + "disable": "Automatische Genehmigungen deaktivieren", + "enabled": "Automatische Genehmigungen sind aktiviert", + "approving": "Automatische Genehmigung läuft" + } } } diff --git a/packages/translation/src/lang/de.json b/packages/translation/src/lang/de.json index 2ec54857e..e3df43d6b 100644 --- a/packages/translation/src/lang/de.json +++ b/packages/translation/src/lang/de.json @@ -1,156 +1,246 @@ { "init": { - "step": { - "start": { - "title": "Willkommen bei Homarr", - "subtitle": "Lass uns mit der Einrichtung deiner Homarr-Instanz beginnen.", - "description": "Um loszulegen, wähle bitte wie du deine Homarr Instanz einrichten möchtest.", - "action": { - "scratch": "Von vorne beginnen", - "importOldmarr": "Import von Homarr vor 1.0", - "restoreSqlite": "Aus SQLite-Backup wiederherstellen", - "restoreSqliteDescription": "Laden Sie eine vollständige SQLite-Datenbanksicherung von einer vorherigen Homarr-Instanz hoch. Dies wird alle Boards, Benutzer, Apps, Integrationen und Einstellungen wiederherstellen.", - "backToOptions": "← Zurück zu Setup Optionen" + "studio": { + "navigationLabel": "Onboarding-Abschnitte", + "back": "Zurück", + "buildBoard": "Brett bauen", + "common": { + "unknownError": "Etwas ist schief gelaufen. Deine Wahl ist noch hier; versuche es erneut." + }, + "claim": { + "checking": "Sicherstellen dieser Onboarding-Sitzung…", + "checkingTitle": "Sichere Einrichtung vorbereiten", + "lockedTitle": "Setup ist in einem anderen Browser geöffnet", + "lockedDescription": "Fahren Sie dort fort oder warten Sie, bis die sichere erste Sitzung abläuft, bevor Sie es erneut versuchen.", + "signInTitle": "Administratoranmeldung erforderlich", + "signInDescription": "Ein Administrator existiert bereits. Melden Sie sich an, um das Setup fortzusetzen, ohne Zugangsdaten oder Zugang zum Service freizugeben.", + "signIn": "Anmelden und fortsetzen", + "errorTitle": "Setup konnte nicht gesichert werden", + "errorDescription": "Seite neu laden, um die sichere Erstauswertung zu wiederholen." + }, + "navigation": { + "essentials": "Grundlegende", + "discover": "Entdecken", + "connect": "Verbinden", + "board": "Brett", + "extend": "Erweitern", + "review": "Überprüfen" + }, + "welcome": { + "title": "Willkommen zu Hause.", + "description": "Willkommen bei Homarr v{version}. Wir führen Sie durch das Wesentliche und helfen Ihnen beim Bau Ihres ersten Boards.", + "start": "Los geht's", + "restore": "Backup wiederherstellen", + "restoreTitle": "Aus Backup wiederherstellen", + "restoreDescription": "Ein vollständiges SQLite-Backup stellt Boards, Leute, Apps, Integrationen und Einstellungen wieder her. Homarr prüft es, bevor er irgendetwas ersetzt.", + "errorTitle": "Setup konnte nicht gestartet werden", + "errorDescription": "Ihre Setup-Einstellungen sind immer noch vorhanden. Versuchen Sie es noch einmal, oder laden Sie die Seite neu, wenn dies fortfährt." + }, + "account": { + "title": "Erstelle deinen Administrator", + "description": "Geben Sie die Zugangsdaten für Ihren Administrator-Benutzer an.", + "username": "Administrator-Benutzername", + "passwordHint": "Nur das Minimum von 8 Zeichen ist erforderlich. Die andere Überprüfung der Passwortstärke sind Vorschläge.", + "create": "Administrator erstellen", + "errorTitle": "Administrator konnte nicht erstellt werden", + "recoveryTitle": "Administratorkonto erstellt", + "recoveryDescription": "Die automatische Anmeldung konnte nicht abgeschlossen werden. Melden Sie sich mit den Administrator-Anmeldeinformationen an, die Sie gerade erstellt haben, um die Einrichtung fortzusetzen.", + "recoveryAction": "Anmelden und fortfahren", + "unknownError": "Der Administrator konnte nicht erstellt werden." + }, + "externalGroup": { + "title": "Verbinden Sie Ihre Administratorgruppe", + "description": "Verwenden Sie den exakten Gruppennamen, der von LDAP oder OIDC gesendet wird. Mitglieder dieser Gruppe erhalten Administratorzugriff.", + "name": "Externe Administratorgruppe", + "nameDescription": "Dies ist die Groß-/Kleinschreibung und muss zu Ihrem Identitätsanbieter passen.", + "continue": "Gruppe speichern und fortfahren", + "errorTitle": "Gruppe konnte nicht gespeichert werden", + "unknownError": "Die Administratorgruppe konnte nicht gespeichert werden." + }, + "essentials": { + "title": "Beginnen Sie mit bekannten Standardeinstellungen", + "description": "Setze die Sprache und das Erscheinungsbild, das jeder zuerst sieht, dann gib Homarr das Adressmuster, das von deinen Diensten verwendet wird.", + "language": "Standardsprache", + "theme": "Standard-Template", + "themeAuto": "System", + "themeLight": "Hell", + "themeDark": "Dunkel", + "serverOriginHelp": "Homarr verwendet diese Adresse, um erkannte Service-URLs vorauszufüllen. Sie können immer noch jeden Dienst einzeln bearbeiten.", + "serverDescription": "Dies ist eine Verknüpfung und keine Einschränkung. Jeder erkannte Dienst bleibt editierbar.", + "serverOrigin": "Domänen, IP oder umgekehrter Proxy-Pfad", + "serverOriginDescription": "Beispiele: home.lan, 192.168.1.10 oder https://home.example.com/services. Wählen Sie, wie jeder Dienst unten angehängt wird.", + "analytics": "Anonyme Produktanalytik teilen", + "analyticsDescription": "Helft Homarr die Zuverlässigkeit der Funktion. Es werden keine Service-Anmeldeinformationen oder Dashboard-Inhalte gesendet." + }, + "discover": { + "title": "Sehen Sie, was diese Installation tatsächlich erreichen kann", + "description": "Homarr prüft die Fähigkeiten an der Stelle. Ein fehlender Docker Socket oder Kubernetes Kontext blockiert niemals eine manuelle Einrichtung.", + "database": "Datenbank", + "docker": "Docker und kompatible Sockets", + "kubernetes": "Kubernetes", + "assistantWorkshop": "Assistent und Workshop", + "found": "{integrations} Integrationen und {apps} zusätzliche Apps gefunden", + "retryKubernetes": "Kubernetes erneut prüfen", + "retryWorkshop": "Workshop erneut prüfen", + "unknownVersion": "unbekannte Version", + "kubernetesAvailable": "Verbunden mit Kubernetes {version}", + "kubernetesDisabled": "Nicht aktiviert; mit Docker oder manuellen Diensten fortfahren", + "kubernetesUnavailable": "Kubernetes ist aktiviert, kann aber nicht von diesem Homarr-Prozess erreicht werden", + "workshopAvailable": "Community-Workshop und gehostete Assistentendienste sind erreichbar", + "workshopUnavailable": "Lokale und benutzerdefinierte Assistentenanbieter bleiben verfügbar", + "partialTitle": "Einige Quellen konnten nicht gescannt werden", + "partialDescription": "Ergebnisse von erreichbaren Hosts werden beibehalten. Überprüfen Sie die Socket-Berechtigungen oder fügen Sie Dienste manuell im nächsten Abschnitt hinzu.", + "status": { + "checking": "Verfügbarkeit wird überprüft…", + "available": "Verfügbar", + "partial": "Teilweise verfügbar", + "empty": "Erreichbar, keine passenden laufenden Dienste", + "disabled": "Deaktiviert durch Serverkonfiguration", + "unavailable": "Nicht verfügbar bei diesem Homarr-Prozess" } }, - "import": { - "title": "Daten importieren", - "subtitle": "Sie können Daten aus einer bestehenden Homarr-Instanz importieren.", - "dropzone": { - "title": "Ziehen Sie die Zip-Datei hierher oder klicken Sie zum Durchsuchen", - "description": "Die hochgeladene Zip-Datei wird bearbeitet und Sie können wählen, was Sie importieren möchten" + "connect": { + "title": "Verbinden, was das Board nützlich macht", + "description": "Wählen Sie mehrere Dienste auf einmal. Docker Labels haben Priorität, Bild-Matching füllt Lücken und jede URL und Anmeldeinformationen bleibt überprüfbar.", + "discoveredIntegrations": "Erkannte Integrationsinstanzen ({count})", + "detectedIntegrationLabel": "Importiere {name}, wurde als {kind} erkannt", + "detectedAppLabel": "Importiere App {name}", + "otherIntegrations": "Weitere Integration hinzufügen", + "configureIntegrations": "Integrationen konfigurieren", + "discoveredApps": "Erkannte Apps ({count})", + "appAddressRequired": "Füge eine Adresse für {name}hinzu oder entferne sie aus der Auswahl.", + "empty": "Keine Integrationen ausgewählt. Homarr wird weiterhin ein nützliches Starterboard mit allgemeinen Widgets erstellen.", + "dockerSource": "Docker", + "manualSource": "Manuell", + "url": "Service-URL", + "noCredentials": "Keine Anmeldedaten", + "noCredentialsDescription": "Diese Integration braucht keine Anmeldeinformationen.", + "credentialMethod": "Anmeldeinformationsmethode", + "getApiKey": "API-Schlüsseleinstellungen für diesen Dienst öffnen", + "openGuide": "Homarr's Setup-Guide für diesen Dienst öffnen", + "testConnection": "Verbindung testen", + "testSuccess": "Verbindung funktioniert", + "testSuccessDescription": "Homarr ist mit der aktuellen Adresse und den Zugangsdaten verbunden.", + "testError": "Verbindungsaufbau fehlgeschlagen", + "testErrorDescription": "Überprüfen Sie die Service-Adresse und Anmeldeinformationen, dann versuchen Sie es erneut.", + "needsConfiguration": "Benötigt Konfiguration", + "tested": "Verbindung getestet", + "testFailed": "Verbindungstest fehlgeschlagen", + "incompleteConfirmation": "Unfertige Integrationen werden übersprungen. Ohne sie fortfahren?" + }, + "board": { + "title": "Forme das Brett bevor es gebaut wird", + "description": "Homarr erstellt geschützte Mobile und Base-Layouts, platziert dann Apps und kompatible Widgets aus den von Ihnen ausgewählten Diensten.", + "target": "Board zum Konfigurieren", + "targetDescription": "Wählen Sie das exakte Forum, das dieses Setup aktualisieren soll.", + "targetPlaceholder": "Board auswählen", + "targetRequired": "Wählen Sie das Board aus, das konfiguriert werden soll, bevor Sie fortfahren.", + "name": "Board Name", + "nameDescription": "Wird nur in der Board-URL verwendet; Buchstaben, Zahlen, Bindestriche und Unterstriche.", + "nameRequired": "Geben Sie einen Boardnamen ein, bevor Sie fortfahren.", + "primaryColor": "Primärfarbe", + "secondaryColor": "Sekundärfarbe", + "resetColors": "Farben zurücksetzen", + "radius": "Widget-Eckradius", + "radiusOptions": { + "xs": "Klein", + "sm": "Dezent", + "md": "Ausgewogen", + "lg": "Abgerundet", + "xl": "Weich" }, - "fileInfo": { - "action": { - "change": "Datei ändern" - } + "columns": "Brettspalten", + "columnsDescription": "Spalten definieren das horizontale Raster für die Größe und Positionierung von Elementen. 12 ist für die meisten Leute reichlich.", + "columnCount": "{count, plural, one {# Spalte} other {# Spalten}}", + "leftSidebar": "Left sidebar", + "rightSidebar": "Sidebar rechts", + "previewLabel": "Live-Vorschau des ersten Board-Layouts" + }, + "extend": { + "title": "Erweiterte Funktionen", + "tabsLabel": "Assistent, Workshop und MCP-Einrichtung", + "assistant": "Assistent", + "workshop": "Werkstatt", + "assistantSetup": { + "loginTitle": "Administratoranmeldung erforderlich", + "loginDescription": "Anbieterschlüssel und Modellzugriff sind berechtigt. Beenden Sie die Einrichtung, melden Sie sich an und Homarr wird die Assistentenkonfiguration direkt öffnen.", + "loginAction": "Anmelden, um Assistent zu konfigurieren" }, - "importSettings": { - "title": "Einstellungen Importieren", - "description": "Importverhalten konfigurieren" + "workshopSetup": { + "title": "Homarr Workshop", + "description": "Durchsuchen Sie Community-benutzerdefinierte Widgets, prüfen Sie die gewünschten Fähigkeiten, installieren Sie sie und veröffentlichen Sie Ihre eigene Arbeit, ohne Code zwischen den Servern zu kopieren.", + "available": "Verfügbar", + "checking": "Überprüfe…", + "unavailable": "Unavailable", + "discoverTitle": "Entdecken", + "discoverDescription": "Finden Sie Widgets für echte selbstgehostete Workflows.", + "installTitle": "Überprüfen und installieren", + "installDescription": "Siehe Metadaten und Konfiguration vor dem Hinzufügen.", + "publishTitle": "Teilen", + "publishDescription": "Veröffentlichen Sie wiederverwendbare Widgets in die Gemeinschaft.", + "browse": "Workshop durchsuchen" }, - "boardSelection": { - "title": "{count} Boards gefunden", - "description": "Wählen Sie alle Boards mit der Größe aus, die Sie importieren möchten", - "action": { - "selectAll": "Alles auswählen", - "unselectAll": "Gesamte Auswahl aufheben" - } - }, - "summary": { - "title": "Zusammenfassung des Imports", - "description": "In der folgenden Zusammenfassung sehen Sie, was importiert wird", - "action": { - "import": "Import bestätigen und fortfahren" - }, - "entities": { - "apps": "Applikationen", - "boards": "Boards", - "integrations": "Integrationen", - "credentialUsers": "Benutzer mit Zugangsdaten" - } - }, - "tokenModal": { - "title": "Importschlüssel eingeben", - "field": { - "token": { - "label": "Schlüssel", - "description": "Gib den angezeigten Importschlüssel von der vorherigen Homarr-Instanz ein" - } - }, - "notification": { - "error": { - "title": "Ungültiger Schlüssel", - "message": "Der eingegebene Schlüssel ist ungültig" - } - } + "mcpSetup": { + "title": "Homarr MCP", + "description": "Verbinden Sie Claude, Codex oder einen anderen MCP-Client mit Homarr's typisierten Tools. API-Schlüssel behalten den Zugriff explizit und widerrufbar.", + "endpoint": "Streambarer HTTP-Endpunkt", + "keyTitle": "Diesen Schlüssel jetzt kopieren", + "keyDescription": "Aus Sicherheitsgründen kann Homarr diesen API-Schlüssel nicht mehr anzeigen.", + "copyKey": "API-Schlüssel kopieren", + "createKey": "MCP API-Schlüssel erstellen", + "errorTitle": "MCP-API-Schlüssel konnte nicht erstellt werden", + "loginRequired": "Melden Sie sich nach dem Einrichten als Administrator an, um einen API-Schlüssel zu erstellen.", + "configuration": "Client-Konfiguration", + "copy": "Konfiguration kopieren", + "copied": "Kopiert", + "advanced": "MCP-Werkzeuge, Berechtigungen und Einrichtungsdetails öffnen" } }, - "user": { - "title": "Administrator", - "subtitle": "Geben Sie die Zugangsdaten für Ihren Administrator-Benutzer an.", - "notification": { - "success": { - "title": "Benutzer erstellt", - "message": "Der Benutzer wurde erfolgreich erstellt" - }, - "error": { - "title": "Erstellung des Benutzers fehlgeschlagen" - } - } - }, - "group": { - "title": "Externe Gruppe", - "subtitle": "Gebe die Gruppe an, welche für externe Benutzer verwendet werden soll.", - "form": { - "name": { - "label": "Gruppenname", - "description": "Name muss mit der Admin-Gruppe des externen Anbieters übereinstimmen" - } - } - }, - "settings": { - "title": "Einstellungen", - "subtitle": "Server-Einstellungen konfigurieren." - }, - "integrations": { - "title": "Integrationen", - "subtitle": "Wählen Sie die von Ihnen verwendeten Dienste aus.", - "description": "Wählen Sie die Integrationen, die Sie verbinden möchten. Ihr Dashboard wird automatisch mit passenden Widgets eingerichtet.", - "action": { - "continue": "Weiter", - "skip": "Vorerst überspringen" - }, - "configure": { - "progress": "{current} von {total}", - "skip": "Diese Integration überspringen", - "finishing": "Dashboard wird eingerichtet...", - "error": { - "title": "Einrichtung fehlgeschlagen", - "message": "Beim Einrichten des Dashboards ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut." - }, - "helpers": { - "tooltip": "URL Helfer", - "description": "Diese Helfer versuchen die URL für deine Dienste zu erraten. Wenn dies nicht funktioniert, gib einfach die Adresse manuell ein." - } - }, - "urlTemplate": { - "label": "Basis URL", - "placeholder": "homelab.local oder 192.168.1.1", - "hint": "Geben Sie Ihre Basis-Domain oder IP ein, um die Integrations-URLs automatisch auszufüllen", - "warning": "Wenn Sie jetzt Ihre Basis-URL einstellen, werden alle Integration-URLs automatisch ausgefüllt, was Ihnen Zeit während des Setups spart", - "preview": "z.B. {example}", - "mode": { - "subdomain": "Sub-Domain", - "hostPort": "Host:Port" - } - }, - "docker": { - "detected": "Docker erkannte {count} Dienste", - "detectedBreakdown": "{integrations} Integrationen · {apps} Anwendungen", - "summary": "Homarr erkannte {apps} Anwendungen, {integrations} von denen Integrationen integriert sind", - "appBadge": "Anwendung", - "appSectionLabel": "Zum Dashboard hinzuzufügende Apps ({count} gewählt)", - "scanning": "Durchsuche Docker...", - "scanningDescription": "Suche nach laufenden Containern auf Ihrem System" + "review": { + "title": "Ein Board, aufgebaut um Ihre Dienste", + "description": "Homarr testet ungespeicherte Verbindungen, importiert die ausgewählten Apps, wendet Aussehen und Layout an und öffnet dann das exakte Board, das es konfiguriert hat.", + "board": "Erstes Board", + "columns": "Brettspalten", + "columnsValue": "{count, plural, one {# Spalte} other {# Spalten}}", + "sidebars": "Seitenleisten", + "sidebarsValue": "{count, plural, =0 {None} one {# sidebar} other {# sidebars}}", + "layouts": "Reaktive Layouts", + "layoutsValue": "Mobile + Basis", + "integrations": "Integrationen", + "integrationsValue": "{count, plural, =0 {Keine ausgewählt} one {# Integration} other {# Integrationen}}", + "apps": "App-Kacheln", + "appsValue": "{count, plural, =0 {Starter-Apps nur} one {# App Kachel} other {# App Kacheln}}", + "language": "Sprache", + "theme": "Thema", + "themeAuto": "Systemeinstellung", + "themeLight": "Hell", + "themeDark": "Dunkel", + "colors": "Boardfarben", + "radius": "Widget-Radius", + "automaticTitle": "Was Homarr erstellen wird", + "automaticDescription": "Kompatible Widgets, Symbole, App-Links, Integrationsbeziehungen und Responsive Platzierung stammen aus dem gemeinsam genutzten Homarr-Katalog. Sie können jedes Ergebnis später bearbeiten.", + "dockerWarningTitle": "Einige Docker Labels während des Setups geändert", + "dockerWarningDescription": "{count, plural, one {# ausgewählter Docker Ergebnis konnte nicht angewendet werden, weil sein Dienst geändert, angefochten ein anderes Board oder sein Widget inkompatibel war} other {# ausgewählte Docker-Ergebnisse konnten nicht angewendet werden, da Dienste geändert, auf ein anderes Board ausgerichtet oder ihre Widgets inkompatibel waren}}", + "errorTitle": "Board konnte nicht gebaut werden", + "progress": { + "applying": "Testen von Verbindungen und Aufbau Ihres Boards", + "done": "Ihr Board ist bereit" } }, "finish": { - "title": "Einrichtung abschließen", - "subtitle": "Es kann losgehen!", - "description": "Du hast die Einrichtung erfolgreich abgeschlossen. Du kannst jetzt mit der Nutzung von Homarr beginnen. Wähle deine nächste Aktion:", - "action": { - "goToBoard": "Gehe zu {name} Board", - "createBoard": "Erstelle dein erstes Board", - "inviteUser": "Andere Benutzer einladen", - "docs": "Lese die Dokumentation" - } + "title": "Ihr erstes Board ist bereit.", + "description": "Homarr hat die ausgewählten Stücke verbunden und den Rest editierbar. Öffnen Sie das Board jetzt; die kurze Produkttour kann Ihnen Bearbeitungsmodus, Widgets, Layouts und Suche anzeigen.", + "openBoard": "Mein Board öffnen", + "manageTitle": "Verwalten", + "manageDescription": "Apps, Integrationen, Boards, Benutzer und Servereinstellungen einstellen.", + "workshopTitle": "Werkstatt", + "workshopDescription": "Entdecken und installieren Sie benutzerdefinierte Widgets.", + "docsTitle": "Homarr lernen", + "docsDescription": "Lesen Sie die fokussierten Anleitungen für Boards, Widgets, Integrationen und Werkzeuge." } - }, - "backToStart": "Zurück zum Anfang" + } }, "user": { - "title": "Benutzer", "name": "Benutzer", "page": { "login": { @@ -159,12 +249,10 @@ }, "invite": { "title": "Homarr beitreten", + "titleWithAppName": "{appName} beitreten", "subtitle": "Willkommen bei Homarr! Bitte erstelle dein Konto", + "subtitleWithAppName": "Willkommen bei {appName}! Bitte erstellen Sie Ihr Konto", "description": "Du wurdest von {username} eingeladen" - }, - "init": { - "title": "Neue Homarr Installation", - "subtitle": "Bitte erstelle den initialen Administrator" } }, "field": { @@ -192,12 +280,17 @@ "previousPassword": { "label": "Vorheriges Passwort" }, - "homeBoard": { - "label": "Home Board" - }, "pingIconsEnabled": { "label": "Symbole für Pings verwenden" }, + "byteUnitSystem": { + "label": "Datengrößen", + "description": "Wählen Sie, wie Homarr Bytegrößen und Byteraten anzeigt. Bitraten verwenden immer dezimale Einheiten.", + "options": { + "binary": "Binär", + "decimal": "Dezimalzahl" + } + }, "enableRightClickOnWidgets": { "label": "Aktiviere Rechtsklick auf Widgets", "description": "Zeigt Homarrs Kontextmenü, wenn mit der rechten Maustaste auf ein Widget geklickt wird. Deaktivieren, um das Standardmenü des Browsers zu verwenden (z.B. \"Link in neuem Tab öffnen\")." @@ -247,7 +340,6 @@ } } }, - "create": "Benutzer erstellen", "changePassword": { "label": "Passwort ändern", "notification": { @@ -259,56 +351,6 @@ } } }, - "changeHomeBoard": { - "notification": { - "success": { - "message": "Home Board erfolgreich geändert" - }, - "error": { - "message": "Home Board konnte nicht geändert werden" - } - } - }, - "changeSearchPreferences": { - "notification": { - "success": { - "message": "Sucheinstellungen erfolgreich geändert" - }, - "error": { - "message": "Sucheinstellungen konnten nicht geändert werden" - } - } - }, - "changeFirstDayOfWeek": { - "notification": { - "success": { - "message": "Erster Wochentag erfolgreich geändert" - }, - "error": { - "message": "Konnte den ersten Wochentag nicht ändern" - } - } - }, - "changePingIconsEnabled": { - "notification": { - "success": { - "message": "Ping Icons erfolgreich umgeschaltet" - }, - "error": { - "message": "Konnte Ping-Icons nicht umschalten" - } - } - }, - "changeDdgBangs": { - "notification": { - "success": { - "message": "DuckDuckGo Bangs erfolgreich umgeschaltet" - }, - "error": { - "message": "DuckDuckGo Bangs können nicht umgeschaltet werden" - } - } - }, "manageAvatar": { "changeImage": { "label": "Bild ändern", @@ -338,16 +380,6 @@ } } }, - "editProfile": { - "notification": { - "success": { - "message": "Profil wurde aktualisiert" - }, - "error": { - "message": "Aktualisierung des Profils fehlgeschlagen" - } - } - }, "delete": { "label": "Benutzer dauerhaft löschen", "description": "Löscht diesen Benutzer einschließlich seiner Einstellungen. Wird keine Boards löschen. Benutzer wird nicht benachrichtigt.", @@ -356,18 +388,13 @@ "select": { "label": "Benutzer auswählen", "notFound": "Kein Benutzer gefunden" - }, - "transfer": { - "label": "Neuen Eigentümer auswählen" } } }, "group": { - "title": "Benutzergruppen", "name": "Benutzergruppe", "search": "Gruppe suchen", "field": { - "name": "Name", "members": "Mitglieder", "homeBoard": { "label": "Home Board", @@ -388,6 +415,19 @@ } } }, + "custom-widget": { + "title": "Benutzerdefinierte Widgets", + "item": { + "manage": { + "label": "Benutzerdefinierte Widgets verwalten", + "description": "Mitgliedern erlauben, benutzerdefinierte Widget-Definitionen zu erstellen, zu bearbeiten und zu löschen" + }, + "secret-write": { + "label": "Benutzerdefinierte Widget-Geheimnisse konfigurieren", + "description": "Mitgliedern und ihren API-Schlüsseln erlauben, verschlüsselte benutzerdefinierte Widget-Zugangsdaten zu setzen" + } + } + }, "app": { "title": "Apps", "item": { @@ -493,6 +533,35 @@ "description": "Mitgliedern das Verwalten und Löschen von Suchmaschinen erlauben" } } + }, + "matrix": { + "none": "Kein Zugriff", + "impliedHint": "Auch Grants: {permissions}", + "grantedViaAdmin": "Administratoren haben dies bereits. Setzen Sie den Admin auf \"Kein Zugriff\", um ihn separat zu konfigurieren.", + "preset": { + "label": "Vorlagen", + "viewer": "Betrachter", + "viewerDescription": "Nur lesen: Zeige Foren und Medien, verwende Apps und Integrationen, die bereits existieren.", + "editor": "Redakteur", + "editorDescription": "Tagesmanagement: Erstellen und Bearbeiten von Boards, Apps, Integrationen und Suchmaschinen.", + "admin": "Admin", + "adminDescription": "Unbeschränkter Zugriff auf alle Funktionen und Einstellungen, einschließlich der Benutzerverwaltung.", + "custom": "Eigene" + }, + "effective": { + "title": "Effektive Berechtigungen", + "description": "Der vollständige, deduplizierte Satz von Aktionen, die Mitglieder dieser Gruppe ausführen können, einschließlich der indirekten Berechtigungen.", + "empty": "Keine Berechtigungen ausgewählt" + }, + "noneDescription": "Mitglieder haben keinen Zugang zu diesem Bereich.", + "level": { + "view": "Ansicht", + "use": "Benutzen", + "interact": "Interagieren", + "modify": "Ändern", + "full": "Voll" + }, + "capabilityIncluded": "Bereits in “{level} ” enthalten" } }, "memberNotice": { @@ -607,21 +676,24 @@ "search": "App suchen", "page": { "list": { - "title": "Apps", + "ariaLabel": "Konfigurierte Apps", "noResults": { "title": "Noch keine Apps vorhanden", - "action": "Erstelle deine erste App" + "description": "Apps sind Links zu den Diensten und Tools, die Sie auf Ihren Boards wünschen.", + "action": "Erstelle deine erste App", + "filteredTitle": "Keine Apps entsprechen Ihrer Suche", + "filteredDescription": "Keine Apps entsprechen \"{search}\". Versuchen Sie einen anderen Namen oder eine URL.", + "createOnlyTitle": "Sie können nur Apps hinzufügen", + "createOnlyDescription": "Mit Ihren Berechtigungen können Sie Apps erstellen, aber nicht bestehende durchsuchen. Bitten Sie einen Administrator um Zugriff auf die Verwaltung der App, um die vollständige Liste zu sehen." } }, "create": { "title": "Neue App", "notification": { "success": { - "title": "Erstellung erfolgreich", "message": "Die App wurde erfolgreich erstellt" }, "error": { - "title": "Erstellung fehlgeschlagen", "message": "Die App konnte nicht angelegt werden" } } @@ -630,11 +702,9 @@ "title": "App bearbeiten", "notification": { "success": { - "title": "Änderungen erfolgreich angewendet", "message": "Die App wurde erfolgreich gespeichert" }, "error": { - "title": "Änderungen konnten nicht angewendet werden", "message": "Die App konnte nicht gespeichert werden" } } @@ -644,26 +714,18 @@ "message": "Sind Sie sicher, dass Sie die App {name} löschen möchten?", "notification": { "success": { - "title": "Löschen erfolgreich", "message": "Die App wurde erfolgreich gelöscht" }, "error": { - "title": "Löschen fehlgeschlagen", "message": "App konnte nicht gelöscht werden" } } } }, "field": { - "name": { - "label": "Name" - }, "description": { "label": "Beschreibung" }, - "url": { - "label": "URL" - }, "useDifferentUrlForPing": { "checkbox": { "label": "Eine andere URL für Ping verwenden", @@ -678,58 +740,397 @@ "search": "Nach einer App suchen", "noResults": "Keine Ergebnisse", "action": "{app} auswählen", - "title": "Wählen Sie eine App, die diesem Board hinzugefügt werden soll" + "title": "Wählen Sie eine App, die diesem Board hinzugefügt werden soll", + "toggle": "Zum Auswählen klicken", + "selected": "Ausgewählt", + "multiple": "{count} hinzufügen", + "selectedCount": "{count, plural, one {# ausgewählt} other {# ausgewählt}}", + "appsSelected": "{count, plural, one {# App ausgewählt} other {# Apps ausgewählt}}", + "selectMultiple": "Wählen Sie mehrere", + "cancelMultiple": "Mehrfachauswahl beenden", + "customApplication": "Benutzerdefinierte Anwendung", + "application": "Anwendung" }, "create": { "title": "Neue App erstellen", "description": "Eine neue App erstellen", "action": "App-Erstellung öffnen" - }, - "add": "App hinzufügen" + } } }, + "tips": { + "dismiss": "Tipp verwerfen", + "multiSelectApps": "Tipp: Strg / halten um mehrere Apps gleichzeitig auszuwählen" + }, "customWidget": { + "secretEntry": { + "title": "API-Quelle konfigurieren", + "description": "Bestätigen Sie die Server-URL und geben Sie Zugangsdaten ein. Geheime Werte werden von Homarr verschlüsselt und nie an den anfragenden Agent zurückgegeben.", + "loading": "Sichere Anfrage wird geladen…", + "applying": "Anwenden dieser Konfiguration… Diese Seite offen halten.", + "saved": "API-Quelle konfiguriert. Sie können diese Seite schließen.", + "unavailable": "Anfrage nicht verfügbar", + "saveError": "API-Quelle kann nicht konfiguriert werden", + "source": "API-Quelle: {name}", + "baseUrl": "Server-URL", + "networkScope": "Netzwerkzugriff", + "save": "API-Konfiguration speichern", + "expires": "Diese einmalige Anfrage läuft unter {time} ab." + }, "page": { "list": { - "title": "Benutzerdefinierte Widgets", "noResults": "Noch keine benutzerdefinierten Widgets gefunden. Erstellen Sie Ihr erstes Widget!", - "loading": "Wird geladen..." + "noDescription": "Keine Beschreibung", + "enabled": "Aktiviert", + "disabled": "Deaktiviert", + "disabledDescription": "Dieses Widget bleibt konfiguriert, wird aber auf keinem Board geladen.", + "requestCount": "{count, plural, one {# Anfrage} other {# Anfragen}}", + "invalidDefinition": "Ungültige Definition", + "migrationRequired": "Migration erforderlich", + "migrationInstructions": "Öffnen Sie Aktionen zum Kopieren oder Exportieren der originalen v1-Definition zur manuellen Wiederherstellung. Sie können auch die Migrationsanzeige mit einer LLM verwenden, die existierende Platinenplatzierungen nach der Migration weiter funktionieren.", + "missingCredentials": "{count, plural, one {Anmeldeinformationen fehlen} other {# Anmeldeinformationen fehlen}}", + "missingCredentialsDescription": "{count, plural, one {Dieses Widget benötigt noch eine Anmeldeinformation!} other {Dieses Widget benötigt noch # Anmeldeinformationen.}} Wählen Sie dieses Abzeichen, um die URL und verschlüsselte Werte zu konfigurieren." }, "create": { "title": "Benutzerdefiniertes Widget erstellen", "subtitle": "Definieren sie die API URL, Authentifizierung und wie die Daten angezeigt werden sollen." }, - "edit": { - "title": "Benutzerdefiniertes Widget bearbeiten" + "tabs": { + "ariaLabel": "Eigene Widget-Bereiche", + "installed": "Installiert", + "workshop": "Werkstatt" } }, "action": { - "create": "Erstellen", - "import": "Importieren", - "save": "Speichern", + "pasteImportHint": "Füge ein komplettes benutzerdefiniertes Widget JSON mit Strg+V oder Command+V ein", "delete": "Benutzerdefiniertes Widget löschen", "deleteConfirm": "Möchtest du „{name}“ wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.", "export": "Exportieren", - "edit": "Bearbeiten", "duplicate": "Duplizieren", + "aiPrompt": "Design mit KI", "copyAiPrompt": "KI Prompt kopieren", "enable": "Aktivieren", "disable": "Deaktivieren", - "menu": "Aktionen" + "menu": "Aktionen", + "downloadSkill": "Eigene Widget-Fähigkeit anzeigen", + "publishWorkshop": "Im Workshop veröffentlichen", + "migrate": "Benutzerdefiniertes Widget migrieren", + "configureSources": "Quellen konfigurieren", + "copyLegacyDefinition": "Original-Widget-Inhalt kopieren", + "exportLegacyDefinition": "Original-Widget-Inhalt exportieren", + "copyMigrationPrompt": "LLM Migrationsanzeige kopieren", + "pasteMigration": "Migriertes Widget einfügen", + "importMigration": "Migrierte JSON-Datei importieren" + }, + "sourceSetupDialog": { + "title": "Widget-Quellen konfigurieren", + "description": "Überprüfen Sie, wo sich dieses Widget verbindet, und fügen oder ersetzen Sie seine verschlüsselten Anmeldeinformationen.", + "credentialsRequired": "Anfragen werden fehlschlagen, bis die erforderlichen Anmeldedaten hinzugefügt wurden.", + "save": "Konfiguration speichern" }, "field": { - "name": "Name", - "description": "Beschreibung", - "iconUrl": "Icon URL" + "description": "Beschreibung" + }, + "editor": { + "errorBoundary": { + "title": "Etwas ist schief gelaufen" + }, + "action": { + "components": "Komponenten", + "format": "Format", + "insertStarter": "Insert starter", + "redo": "Wiederholen", + "copied": "Kopiert", + "schema": "Schema" + }, + "reference": { + "minimal": "Minimales Beispiel", + "full": "Volles Beispiel" + }, + "componentReference": { + "search": "Komponenten suchen", + "empty": "Keine passenden Komponenten", + "count": "{count, number} Verfügbare Komponenten" + }, + "status": { + "errors": "{count, number} Fehler", + "warnings": "{count, number} Warnungen", + "ready": "Keine Tickets gefunden", + "position": "Ln {line, number}, Col {column, number}", + "characters": "{count, number} Zeichen", + "charactersWithLimit": "{count, number} / {limit, number}" + }, + "diagnostics": { + "title": "Vorlagendiagnostik", + "line": "Linie {line, number}", + "ast": "{value}", + "bindingTypeConflict": "Die Eingabe \"{value}\" wird von Steuerelementen mit inkompatiblen Werttypen geteilt.", + "runtimeBindingTypeConflict": "Die Eingabe \"{value}\" ist als {firstType} und {secondType} gebunden.", + "dynamicRequestId": "Eine wörtliche RequestId ist erforderlich. Dynamische Request-IDs werden nicht akzeptiert.", + "dynamicInputBinding": "Für die Bindung wird ein literaler Eingabename benötigt.", + "inlineRequestProps": "Netzwerkkomponenten akzeptieren requestId und Parameter; Inline-URL, Methode, Header und Body-Requisiten werden blockiert.", + "invalidRequestManifest": "Benannte Anfragen müssen eine gültige Anfragekarte sein. {value}", + "missingRequestId": "Diese Netzwerkkomponente benötigt eine wörtliche RequestId.", + "templateEmpty": "Geben Sie eine JSX-Vorlage ein.", + "templateTooLong": "Die Vorlage überschreitet das Limit von 50.000 Zeichen.", + "unknownRequest": "Es existiert keine benannte Anfrage mit der ID \"{value}\" ." + } + }, + "workbench": { + "configure": "Konfigurieren", + "sectionNavigation": "Eigene Widget-Bereiche", + "widgetPreview": "Widget-Vorschau", + "generalInformation": "Allgemeine Informationen", + "invalidWidget": "Ungültiges Widget", + "section": { + "general": "Allgemein", + "sources": "API-Quellen", + "requests": "Anfragen", + "options": "Optionen", + "jsx": "JSX", + "preview": "Vorschau" + }, + "status": { + "unsaved": "Nicht gespeicherte Änderungen", + "invalid": "Benötigt Aufmerksamkeit", + "ready": "Bereit" + }, + "saveError": { + "title": "Widget wurde nicht gespeichert", + "description": "Beheben Sie diese Validierungsfehler und speichern Sie erneut.", + "more": "+{count} weitere Fehler werden in der Werkbank angezeigt.", + "errors": "Validierungsfehler", + "copy": "Fehler kopieren", + "copied": "Fehler kopiert" + }, + "action": { + "preview": "Test und Vorschau", + "previewLoading": "Test-Anfragen" + }, + "requests": { + "title": "Benannte Abfragen und Aktionen", + "label": "Anfragen", + "description": "Abfragen laden von Daten; Aktionen werden nur nach Benutzerinteraktion ausgeführt. Jede HTTP-Methode ist für jede Art gültig." + }, + "options": { + "title": "Widget-Optionen" + }, + "builder": { + "advancedManifest": "Erweitertes rohes Manifest", + "advancedJson": "Erweitertes Manifest JSON", + "manifestFilename": "widget.json", + "request": "Anfrage {count, number}", + "requestId": "Anfrage-ID", + "type": "Download Client", + "method": "Methode", + "source": "API-Quelle", + "run": "Ausführen", + "runLoad": "Wenn das Widget geladen wird", + "runManual": "Von SubFetch", + "permission": "Berechtigung", + "path": "Pfad", + "pathDescription": "Verwende '{option:name}' für Widget-Optionen und '{param:name}' für Anrufwerte.", + "requestDetails": "Abfrage, Körper und Verhalten", + "queryValues": "Abfragewerte", + "queryKey": "Abfrageschlüssel", + "queryKeyInvalid": "Verwenden Sie eine eindeutige ID, die mit einem Buchstaben beginnt und nur Buchstaben, Zahlen - oder _ enthält.", + "valueSource": "Wertequelle", + "literal": "Literal", + "widgetOption": "Widget Option", + "invocationParameter": "Aufruf-Parameter", + "option": "Option", + "parameterName": "Parametername", + "value": "Wert", + "removeQueryValue": "Abfragewert entfernen", + "addQueryValue": "Abfragewert hinzufügen", + "jsonBody": "JSON-Körper", + "jsonBodyDescription": "Optional. Füge $option und $param Referenzen in jede Tiefe ein.", + "insertOptionReference": "Optionsreferenz einfügen", + "insertParameterReference": "Parameterreferenz einfügen", + "confirmation": "Bestätigungsnachricht", + "invalidation": "Nach Erfolg aktualisieren", + "invalidationDescription": "Kommaseparierte Abfrage-IDs", + "noAuth": "Ohne Quell-Authentifizierung senden", + "moveRequestUp": "Anfrage nach oben verschieben", + "moveRequestDown": "Anfrage nach unten verschieben", + "removeRequest": "Anfrage entfernen", + "addRequest": "Anfrage hinzufügen", + "optionName": "Optionsname", + "label": "Kategorie", + "control": "Steuerung", + "description": "Beschreibung", + "default": "Standard", + "optionDetails": "Beschränkungen und dynamische Optionen", + "minimum": "Minimal", + "maximum": "Maximal", + "step": "Schritt", + "choiceLabel": "Auswahl-Label", + "choiceValue": "Auswahlwert", + "newChoice": "Neue Wahl", + "addChoice": "Auswahl hinzufügen", + "removeChoice": "Auswahl entfernen", + "choicesRequest": "Auswahl aus Anfrage laden", + "itemsPath": "Artikelpfad", + "itemsPathPlaceholder": "Artikel (optional)", + "valuePath": "Wertspfad", + "labelPath": "Labelpfad", + "group": "Gruppe", + "advancedOption": "Erweiterte Option", + "moveOptionUp": "Option nach oben verschieben", + "moveOptionDown": "Option nach unten verschieben", + "removeOption": "Option entfernen", + "addOption": "Option hinzufügen", + "invalidJson": "Ungültiges JSON", + "invalidWidget": "Ungültiges Widget" + }, + "jsx": { + "title": "JSX-Vorlage", + "label": "Vorlage" + }, + "sources": { + "title": "API-Quellen und Zugangsdaten", + "newName": "API {count, number}", + "duplicateSourceId": "API-Quell-IDs müssen eindeutig sein.", + "credentialRemoved": "Anmeldeinformationen entfernt", + "credentialRemovedDescription": "Der gespeicherte Wert wurde gelöscht.", + "primary": "Primäre API", + "id": "Quell-ID", + "name": "Job Name", + "baseUrl": "Basis URL", + "baseUrlError": { + "invalid": "Geben Sie eine vollständige URL ein.", + "protocol": "Verwenden Sie eine HTTP- oder HTTPS-URL.", + "credentials": "Entfernen Sie den Benutzernamen und das Passwort von dieser URL. Konfigurieren Sie stattdessen die Zugangsdaten unten.", + "queryOrFragment": "Entfernen Sie den Query-String oder Fragment von dieser Basis-URL. Fügen Sie Abfragewerte zu einer benannten Anfrage hinzu." + }, + "networkScope": "Netzwerkzugriff", + "authentication": "Authentifizierung", + "headerName": "Header-Name", + "queryParameter": "Abfrageparameter", + "configured": "Konfiguriert — Geben Sie einen Ersatz ein", + "clear": "Klar", + "remove": "Quelle und ihre Anfragen entfernen", + "advanced": "Erweitert", + "add": "Weitere API-Quelle hinzufügen", + "sourceType": "Integration", + "manualSource": "HTTP API", + "existingIntegration": "Vorhandene Integration", + "integrationType": "Integrationstyp", + "selectIntegration": "Konfigurierte Integration", + "noIntegrations": "Keine passenden Integrationen verfügbar", + "integrationUnavailable": "Die ausgewählte Integration ist nicht mehr verfügbar. Wählen Sie eine andere Integration.", + "integrationDescription": "Verwendet die gespeicherte URL und Anmeldeinformationen. Änderungen werden automatisch übernommen. Für die Ausführung von Anfragen ist ein vollständiger Integrationszugriff erforderlich." + }, + "ai": { + "title": "Erstelle oder repariere mit jeder KI", + "description": "Fügen Sie zuerst eine API-Dokumentations-URL hinzu, wenn Sie eine haben. Für Korrekturen führen Sie Vorschau, wenn möglich, aus. Kopieren Sie die Eingabeaufforderung in jede AI; sie kann nach fehlenden Details fragen. Fügen Sie hier ihre endgültige JSON ein.", + "request": "Was soll dieses Widget tun?", + "documentationUrl": "API Dokumentations-URL (optional)", + "paste": "Einfügen", + "response": "KI-Antwort", + "manualCopyDescription": "Der Zugriff auf Zwischenablage ist nicht möglich. Wählen Sie die nachstehende Eingabeaufforderung aus und kopieren Sie sie manuell.", + "manualPasteDescription": "Zwischenablage ist nicht verfügbar oder die kopierte Antwort muss korrigiert werden. Fügen Sie hier die JSON-Antwort der AI ein.", + "selectAll": "Alles auswählen", + "loadResponse": "Antwort laden", + "loaded": "Widget in den Editor geladen", + "invalidResponse": "Zwischenablage enthält kein gültiges v2-Widget", + "invalidResponseDetail": "Die KI-Antwort ist ungültig: {message}" + }, + "preview": { + "invalid": "Beheben Sie Fehler bei der Validierung dieses Widgets.", + "fixtureError": "Fehler bei der Lichtquelle", + "requestData": "Daten anfordern", + "status": { + "idle": "Anfragen wurden nicht getestet", + "loading": "Test-Anfragen", + "success": "Alle Last-Requests erfolgreich", + "error": "Ein oder mehrere Last-Requests fehlgeschlagen" + }, + "result": { + "loading": { + "title": "Testen von API-Anfragen", + "description": "Homarr erstellt eine Vorschausitzung und lädt die Widget-Daten." + }, + "success": { + "title": "Vorschau bereit", + "description": "{succeeded, plural, =0 {Dieses Widget hat keine Ladeanfragen.} one {# Ladeanfrage war erfolgreich!} other {# Ladeanfragen erfolgreich!}} Öffnen Sie Daten, um die Antwort zu überprüfen." + }, + "error": { + "title": "Vorschau abgeschlossen mit Anfrage-Fehlern", + "description": "{succeeded, number} erfolgreich und {failed, number} fehlgeschlagen. Öffnen Sie die Daten für die Antwort und Fehlerdetails." + } + }, + "instanceOptions": "Instanzoptionen", + "liveActions": "Aktionen gegen die konfigurierte API ausführen", + "liveActionsDescription": "Das Abschalten ist sichere Simulation und das Einschalten wirkt sich auf den tatsächlichen Service aus.", + "noActions": "Keine Aktionen definiert.", + "containedFailures": "Laufzeitfehler sind in diesem Widget enthalten. Request-Journale enthalten niemals geheime Werte.", + "validation": { + "title": "Validierung", + "ready": "Die Widget-Definition ist gültig." + }, + "accessibility": { + "title": "Barrierefreiheitsprüfungen", + "ready": "Keine häufigen Auslassungen der Barrierefreiheit erkannt.", + "pending": "Barrierefreiheitsprüfungen werden durchgeführt, wenn die Widget-Definition gültig ist.", + "imageAlt": "Fügen Sie Alt-Text zu jedem Bild hinzu, indem Sie eine leere Alt nur für dekorative Bilder verwenden.", + "actionIconLabel": "Fügen Sie jedem ActionIcon ein Aria-Label oder einen Titel hinzu.", + "inputLabel": "Fügen Sie jedem Eingabewert ein sichtbares Label oder einen zugänglichen Namen hinzu." + }, + "journal": "Redagierte Anfragejournal", + "actionParameters": "Aktionsparameter (JSON)", + "invalidParameters": "Verwenden Sie die deklarierten Zeichen-, Nummer- und booleschen Parametertypen.", + "runDestructive": "Zerstörende Aktion ausführen", + "runAction": "Aktion ausführen", + "deleteConfirmation": "Diese Vorschau-Aktion ändert entfernte Daten über die konfigurierte API.", + "simulated": "Aktion simuliert", + "httpStatus": "HTTP {status, number}", + "tab": { + "widget": "Widget", + "data": "Daten", + "options": "Optionen", + "state": "Jobstatus", + "actions": "Steuerung", + "diagnostics": "Diagnose" + }, + "size": { + "compact": "Kompakt", + "standard": "Standard", + "wide": "Breit" + }, + "fixture": { + "live": "Live", + "loading": "Wird geladen", + "empty": "Leer", + "error": "Fehler" + } + } + }, + "preview": { + "request": { + "permission": { + "view": "Ansicht", + "modify": "Ändern", + "full": "Voll" + } + } }, "notification": { "created": "Widget \"{name}\" erfolgreich erstellt.", "updated": "Widget \"{name}\" erfolgreich aktualisiert.", "deleted": "Widget \"{name}\" gelöscht.", "imported": "Widget erfolgreich importiert.", - "aiPromptCopied": "KI-Prompt in Zwischenablage kopiert", + "migrated": "Legacy-Widget wurde erfolgreich migriert. Vorhandene Platzierungen verwenden nun die v2-Definition.", + "migrationError": "Fehler beim migrieren des alten Widgets. Vergewissern Sie sich, dass die Datei das homarr-custom-widget-v2-Schema verwendet.", + "legacyDefinitionCopied": "Der ursprüngliche Widget-Inhalt wurde kopiert. Gespeicherte Zugangsdaten sind nicht enthalten.", + "legacyDefinitionCopyError": "Fehler beim Kopieren des ursprünglichen Widget-Inhalts.", + "migrationPromptCopied": "Eine gerettete Migrationsaufforderung wurde kopiert. Fügen Sie sie in eine LLM ein, kopieren Sie die einzelne JSON-Antwort, dann wählen Sie migriertes Widget hier einfügen.", + "migrationPromptCopyError": "Fehler beim Kopieren der Migrationsanfrage.", + "sourcesConfigured": "Widget-Quellen und Anmeldeinformationen gespeichert.", + "sourceConfigurationError": "Widget-Quellen konnten nicht konfiguriert werden.", + "aiPromptCopiedWithCount": "KI Eingabeaufforderung in die Zwischenablage kopiert ({count, number} Zeichen).", "aiPromptCopyError": "Fehler beim Kopieren der Eingabeaufforderung. Möglicherweise unterstützt Ihr Browser diese Funktion nicht.", - "createError": "Fehler beim Erstellen des Widgets. Überprüfen Sie, ob Ihr API Endpunkt erreichbar ist.", + "aiPromptSent": "Prompt gesendet. Sie können weiter bearbeiten, während der Assistent im Hintergrund arbeitet.", "updateError": "Fehler beim Aktualisieren des Widgets. Ihre Änderungen wurden nicht gespeichert.", "importError": "Fehler beim Importieren des Widgets. Stellen Sie sicher, dass die Datei ein gültiger JSON Export ist.", "exportError": "Fehler beim Exportieren des Widgets.", @@ -737,29 +1138,184 @@ "duplicateError": "Fehler beim Duplizieren des Widgets.", "toggleError": "Fehler beim Umschalten des Widgets Status.", "deleteError": "Fehler beim Löschen des Widgets.", - "previewError": "Fehler beim Abrufen der Vorschau. Überprüfen Sie die URL und versuchen Sie es erneut.", - "executed": "Aktion erfolgreich ausgeführt.", - "executeError": "Aktion fehlgeschlagen: {error}" + "previewError": "Fehler beim Abrufen der Vorschau. Überprüfen Sie die URL und versuchen Sie es erneut." + }, + "importReview": { + "title": "Eigenen Widget-Import überprüfen", + "description": "Überprüfen Sie, wo dieses Widget sich verbindet und welche Board-Zugriffe auf dessen Steuerung erforderlich sind, bevor Sie es importieren.", + "migrationTitle": "Migrierte v2 ersetzen überprüfen", + "migrationDescription": "Überprüfen und bestätigen Sie diese generierte v2-Definition. Die Bestätigung der atomaren Ersetzung des erhaltenen v1-Datensatzes, während bestehende Platzierungen mit der gleichen Widget-ID verknüpft bleiben.", + "fileLabel": "Wähle eine benutzerdefinierte Widget-JSON-Datei", + "name": "Job Name", + "origin": "Basis-Ursprung", + "authentication": "Authentifizierung", + "networkScope": "Netzwerkbereich", + "methods": "HTTP-Methoden", + "permissions": "Benötigte Board-Berechtigungen", + "sourceSetup": { + "title": "API-Quellen konfigurieren", + "description": "Bestätigen Sie, wo sich dieses Widget verbindet und Zugangsdaten hinzufügt. Private und Loopback-URLs sind spezifisch für Ihre Homarr-Installation.", + "suggestedUrl": "Empfohlene URL", + "confirmUrl": "Ich bestätige, dass diese Server-URL für meine Homarr-Installation korrekt ist", + "ready": "URL bereit", + "needsUrl": "URL bestätigen", + "credentialsMissing": "Anmeldedaten fehlen", + "credentialsOptional": "Sie können ohne Anmeldeinformationen installieren und diese später konfigurieren, aber Anfragen werden fehlschlagen, bis sie hinzugefügt werden." + }, + "actionWarning": { + "title": "Dieses Widget kann entfernte Daten ändern", + "description": "Überprüfen Sie jede benannte Aktion, vererbte Referenzen und zerstörerische Bestätigung nach dem Import. Geheimnisse sind nicht in der Datei enthalten." + }, + "cancel": "Import abbrechen", + "confirm": "Widget importieren", + "confirmMigration": "v2 Ersatz bestätigen" + }, + "secret": { + "apiKey": "API-Schlüssel oder Token", + "username": "Benutzername", + "password": "Passwort", + "savedPlaceholder": "••••••• (gespeichert, leer lassen zum Behalten)" + } + }, + "workshop": { + "title": "Werkstatt", + "browseWorkshop": "Workshop durchsuchen", + "openCommunity": "Workshop öffnen", + "openOnWorkshop": "Öffne {title} auf der Workshop-Website", + "back": "Zurück zum Workshop", + "search": "Widgets suchen", + "searchCss": "CSS-Themes durchsuchen", + "sort": "Sortieren", + "sortTop": "Top Bewertung", + "sortNewest": "Neueste", + "listAriaLabel": "Workshop-Widgets", + "listAriaLabelCss": "Workshop-CSS-Themes", + "empty": "Keine Widgets stimmen dieser Suche zu.", + "emptyDescription": "Hier erscheinen Community-Widgets, die im Workshop veröffentlicht werden.", + "emptyFilteredTitle": "Keine Widgets mit dieser Suche gefunden", + "emptyFilteredDescription": "Kein Workshop-Widget stimmt mit \"{search}\".", + "emptyCss": "Keine CSS-Themes stimmen dieser Suche zu.", + "unavailableTitle": "Homarr Workshop scheint nicht verfügbar zu sein", + "unavailable": "Der Community-Dienst ist möglicherweise vorübergehend deaktiviert. Versuchen Sie es in Kürze erneut. Ihre installierten Widgets sind davon nicht betroffen.", + "loadError": "Dieser Beitrag konnte nicht geladen werden.", + "noDescription": "Keine Beschreibung", + "author": "von {name}", + "communityMember": "Community-Mitglied", + "outdated": "Veraltet", + "outdatedWarning": "Der Autor markierte diese Einreichung als veraltet. Überprüfen Sie sie sorgfältig vor dem Importieren.", + "score": "Punkte: {count, number}", + "upvote": "Upvote", + "downvote": "Abstimmen", + "voteError": "Die Abstimmung konnte nicht gespeichert werden.", + "signIn": "Mit GitHub anmelden", + "signInError": "GitHub Anmeldung fehlgeschlagen. Überprüfen Sie, ob der OAuth-Anbieter konfiguriert ist und Popups erlaubt sind.", + "signOut": "Abmelden", + "signInHint": "Melden Sie sich zur Abstimmung oder zum Bericht an. Die Installation erfordert kein Workshop-Konto.", + "securityNotice": "Workshop-Widgets können ihre deklarierten API-Quellen aufrufen und deklarierte Aktionen mit den lokal konfigurierten Anmeldedaten durchführen. Geheimnisse sind nie enthalten.", + "securityNoticeCss": "Community-CSS kann das Aussehen und die Benutzerfreundlichkeit eines Boards ändern. Überprüfen Sie es vor dem Importieren; nichts wird gespeichert, bis Sie die Board-Einstellungen speichern.", + "install": "Installieren", + "installReviewTitle": "Vor der Installation überprüfen", + "installError": "Dieses Widget kann nicht installiert werden", + "installErrorDescription": "Die Einreichung des Workshops ist kein gültiges benutzerdefiniertes JSX v2 Widget.", + "useCss": "Import CSS", + "importCss": "CSS aus Workshop importieren", + "importCssConfirm": "Ersetzen Sie das aktuelle CSS durch \"{title}\"? Nichts wird gespeichert, bis Sie die Board-Einstellungen speichern.", + "screenshotAlt": "{title} Screenshot {count, number}", + "screenshotViewer": "{title} Screenshot-Viewer", + "screenshotsLabel": "{title} Screenshots", + "zoomScreenshot": "Volle Größe anzeigen", + "previousScreenshot": "Vorheriger Screenshot", + "nextScreenshot": "Nächster Screenshot", + "showScreenshotThumbnails": "Screenshot-Vorschaubilder anzeigen", + "hideScreenshotThumbnails": "Screenshot-Vorschaubilder ausblenden", + "closeScreenshotViewer": "Screenshot-Betrachter schließen", + "technicalDetails": "Technische Details", + "sourceCode": "Workshop-Eintrag", + "export": "Exportieren", + "report": "Bericht", + "reportTitle": "Berichtsvorlage", + "reportReason": "Grund", + "reportExplanation": "Was sollen die Moderatoren des Workshops wissen?", + "reportSend": "Bericht senden", + "reportSent": "Bericht gesendet", + "reportSentDescription": "Workshop-Moderatoren können diese Einreichung nun überprüfen.", + "reportCount": "{count, plural, one {# Bericht} other {# Berichte}}", + "reportWarning": "{count, plural, one {Diese Einreichung hat # offenen Community-Bericht.} other {Diese Einreichung hat # offene Community-Berichte.}} Es bleibt installierbar, aber du solltest den Inhalt zuerst überprüfen.", + "reportVisibility": "Die Berichtsdetails sind nur für Autoren und Workshop-Administratoren dieser Einreichung sichtbar.", + "reportCategory": { + "outdated": "Veraltet oder funktioniert nicht mehr", + "malicious": "Bösartig", + "spam": "Spam", + "copyright": "Copyright", + "inappropriate": "Unangemessen", + "other": "Andere" + }, + "publish": { + "title": "Im Workshop veröffentlichen", + "introTitle": "Teilen Sie dieses Widget mit der Community", + "introDescription": "Homarr exportiert eine lizenzfreie Kopie des aktuellen Widgets. Fügen Sie eindeutige Listendetails hinzu, damit die Leute wissen, was es tut, bevor Sie es installieren.", + "listingDetails": "Workshop-Liste", + "listingDetailsDescription": "Diese Details erscheinen öffentlich neben der exportierten Widget-Definition.", + "success": "Veröffentlicht sofort. Community-Mitglieder können nun dieses Widget installieren und melden.", + "successTitle": "Ihr Widget ist live", + "manageDescription": "Öffnen Sie die Einreichung, um die Liste zu aktualisieren, Berichte zu überprüfen, veraltet zu markieren oder zu löschen. Die Einreichungsverwaltung wird direkt auf der Workshop-Website behandelt.", + "viewSubmission": "Einreichung ansehen und verwalten", + "done": "Fertig", + "signInHint": "Melden Sie sich an, um unter Ihrer Workshop-Identität zu veröffentlichen.", + "titleField": "Titel", + "descriptionField": "Beschreibung", + "screenshots": "Screenshots", + "screenshotsDescription": "Bis zu fünf PNG-, JPEG- oder WebP-Bilder", + "screenshotsPlaceholder": "Screenshots auswählen", + "invalidScreenshot": "Benutzen Sie PNG, JPEG oder WebP-Bilder, die nicht größer als {maxSize} sind.", + "privateSourceWarning": "Dieses Widget enthält private Quellen-URLs für: {sources}. Ersetzen Sie persönliche Hosts oder IP-Adressen durch sichere Service-Platzhalter vor dem Veröffentlichen.", + "reviewSourcesTitle": "Private Quellen-URLs überprüfen", + "privateSourceConfirmation": "Ich habe diese Quell-URLs überprüft und sie enthalten keine privaten Infrastruktur-Details", + "action": "Jetzt veröffentlichen", + "publicationNote": "Die Veröffentlichung erfolgt sofort. Sie können die Einreichung anschließend im Workshop verwalten.", + "definitionChanged": "Das Widget wurde geändert, während die Veröffentlichung vorbereitet wurde. Überprüfen Sie die privaten URLs noch einmal, versuchen Sie es erneut.", + "error": "Veröffentlichung fehlgeschlagen" } }, "integration": { + "completion": { + "modalTitle": "Dienst bereit", + "title": "{name} ist verbunden", + "description": "Die Verbindung hat ihren Test bestanden. Wählen Sie aus, was auf diesem Board als nächstes angezeigt werden soll.", + "connectionReady": "Service-Verbindung ist bereit", + "appReady": "App-Verknüpfung ist bereit", + "compatibleWidgets": "{count, plural, =0 {Keine kompatiblen Widgets} one {# kompatibles Widget} other {# kompatible Widgets}}", + "chooseWidget": "Widget auswählen", + "recipes": { + "title": "Empfohlen für dieses Board", + "description": "Basierend auf angeschlossenen Diensten und Widgets auf diesem Board.", + "newConnectionReason": "Jetzt über {integration} verfügbar", + "existingConnectionReason": "Funktioniert mit einem Dienst, den Sie bereits verbunden haben", + "dismiss": "Empfehlungen für diesen Service in diesem Board ablehnen" + } + }, "page": { "list": { - "title": "Integrationen", + "ariaLabel": "Konfigurierte Integrationen", "search": "Integrationen durchsuchen", + "scopedNote": "Es werden nur die Integrationen angezeigt, die Sie verwalten dürfen.", "noResults": { - "title": "Es gibt noch keine Integrationen" + "title": "Es gibt noch keine Integrationen", + "description": "Verbinden Sie einen Dienst, um seine Daten und Aktionen in Homarr Widgets zu verwenden.", + "action": "Erstelle deine erste Integration", + "filteredTitle": "Keine Integrationen entsprechen Ihrer Suche", + "filteredDescription": "Keine Integrationen stimmen mit \"{search}\" überein. Versuchen Sie einen anderen Namen, Typ oder URL.", + "createOnlyTitle": "Sie können nur Integrationen hinzufügen", + "createOnlyDescription": "Mit Ihren Berechtigungen können Sie Integrationen erstellen, aber nicht bestehende verwalten. Fragen Sie einen Administrator, um Zugriff auf die benötigten zu erhalten." } }, "create": { "title": "Neue {name} Integration", "notification": { "success": { - "title": "Erstellung erfolgreich", "message": "Die Integration wurde erfolgreich erstellt" }, "error": { - "title": "Erstellung fehlgeschlagen", "message": "Die Integration konnte nicht erstellt werden" } }, @@ -783,11 +1339,9 @@ "title": "{name} Integration bearbeiten", "notification": { "success": { - "title": "Änderungen erfolgreich angewendet", "message": "Die Integration wurde erfolgreich gespeichert" }, "error": { - "title": "Änderungen konnten nicht angewendet werden", "message": "Die Integration konnte nicht gespeichert werden" } }, @@ -804,23 +1358,15 @@ "message": "Sind Sie sicher, dass Sie die Integration {name} löschen möchten?", "notification": { "success": { - "title": "Löschen erfolgreich", "message": "Die Integration wurde erfolgreich erstellt" }, "error": { - "title": "Löschen fehlgeschlagen", "message": "Integration konnte nicht gelöscht werden" } } } }, "field": { - "name": { - "label": "Name" - }, - "url": { - "label": "URL" - }, "attemptSearchEngineCreation": { "label": "Suchmaschinen anlegen", "description": "Integration \"{kind}\" kann mit den Suchmaschinen verwendet werden. Wählen Sie dies, um die Suchmaschine automatisch zu konfigurieren." @@ -832,6 +1378,10 @@ "label": "App erstellen", "description": "Eine App mit dem gleichen Namen und Symbol wie die Integration erstellen. Lassen Sie das Eingabefeld unter leer, um die App mit der Integrations URL zu erstellen." }, + "linkApp": { + "label": "Eine existierende App verknüpfen", + "description": "Verbinden Sie diese Integration mit einer App, die Sie bereits verwenden können." + }, "appHref": { "placeholder": "Benutzerdefinierte App URL" }, @@ -845,7 +1395,11 @@ "grid": { "widgetCount": "{count} Widgets", "noWidgets": "Keine Widgets", - "detected": "Über Docker erkannt" + "detected": "Über Docker erkannt", + "connected": "{count, plural, one {# verbunden} other {# verbunden}}", + "tiedWidgets": "Tied Widgets", + "more": "+{count} mehr", + "loadError": "Integrationen konnten nicht geladen werden. Versuchen Sie es noch einmal, bevor Sie eine neue Verbindung erstellen." }, "category": { "dnsHole": "DNS", @@ -876,7 +1430,10 @@ "analytics": "Nutzungsdaten", "vpn": "VPN", "mediaLibrary": "Medienbibliothek", - "uptimeMonitoring": "Überwachung der Betriebszeit" + "uptimeMonitoring": "Überwachung der Betriebszeit", + "beszel": "Beszel", + "systemMonitoring": "Systemüberwachung", + "security": "Sicherheit" }, "testConnection": { "action": { @@ -1161,6 +1718,22 @@ "slug": { "label": "Status Page Slug", "newLabel": "Neuer Status Page Slug" + }, + "wazuhIndexerUrl": { + "label": "Indexer-URL", + "newLabel": "Neue Indexer-URL" + }, + "wazuhIndexerUsername": { + "label": "Indexer-Benutzername", + "newLabel": "Neuer Indexer-Benutzername" + }, + "wazuhIndexerPassword": { + "label": "Indexer-Passwort", + "newLabel": "Neues Indexer-Passwort" + }, + "wazuhDashboardUrl": { + "label": "Dashboard-URL (optional)", + "newLabel": "Neue Dashboard-URL" } } }, @@ -1169,54 +1742,19 @@ "interact": "Mit Integrationen interagieren", "full": "Voller Zugriff auf Integrationen" }, - "audiobookshelf": { - "name": "Hörbuchregal", - "description": "Selbstgehosteter Audio- und Podcast-Server" - }, - "navidrome": { - "name": "Navidrome", - "description": "Selbstgehosteter Musik-Streaming-Server mit Subsonic API Kompatibilität" - }, - "uptimeKuma": { - "name": "Uptime Kuma", - "description": "Selbstgehostete Uptime Überwachung mit öffentlichen Statusseiten", - "secret": { - "slug": { - "description": "Der Slug der öffentlichen Statusseite. Standardwert ist \"Standard\", wenn nicht anderswertig gesetzt." - }, - "apiKey": { - "description": "Optionaler API Schlüssel für Authentifizeriungs /Metriken Zugriff" - } - } - }, - "traefik": { - "name": "Traefik", - "description": "Cloud-nativer Reverse-Proxy und Lastverteiler" - }, - "paperlessNgx": { - "name": "Paperless-ngx", - "description": "Dokumentenverwaltungssystem zum Archivieren und Organisieren gescannter Dokumente" - }, - "patchmon": { - "name": "PatchMon", - "description": "Patch-Verwaltung und Systemüberwachung für Linux-Hosts" - }, - "bazarr": { - "name": "Bazarr", - "description": "Schwesteranwendung zu Sonarr und Radarr, welche Untertitel und Downloads verwaltet" - }, - "wud": { - "name": "Was ist Docker hoch", - "description": "Überwachen Sie, welche Docker-Container Bildupdates verfügbar sind" + "llamacpp": { + "name": "llama.cpp", + "description": "Überwachung eines lokalen llama.cpp Lama-Servers: Gesundheit, Modell- und Generationsmetriken" } }, "media": { "plural": "Medien", "search": "Medien suchen", "field": { - "name": "Name", + "preview": "Vorschau", "size": "Größe", - "creator": "Ersteller" + "creator": "Ersteller", + "actions": "Steuerung" }, "action": { "upload": { @@ -1244,10 +1782,12 @@ } }, "copy": { - "label": "URL in Zwischenablage kopieren" + "label": "URL in Zwischenablage kopieren", + "labelNamed": "URL für {name} kopieren" }, "open": { - "label": "Medium öffnen" + "label": "Medium öffnen", + "labelNamed": "{name} öffnen" } }, "noResults": { @@ -1262,7 +1802,6 @@ "add": "Hinzufügen", "apply": "Übernehmen", "backToOverview": "Zurück zur Übersicht", - "skip": "Überspringen", "change": "Verändern", "create": "Erstellen", "createAnother": "Erstellen und neu starten", @@ -1285,16 +1824,31 @@ "tryAgain": "Erneut versuchen", "loading": "Wird geladen", "show": "Anzeigen", - "hide": "Ausblenden" + "hide": "Ausblenden", + "undo": "Rückgängig", + "editNamed": "{name} bearbeiten", + "deleteNamed": "{name} löschen", + "clearSearch": "Suche löschen", + "copy": "Kopieren", + "copied": "Kopiert", + "refresh": "Neu laden" + }, + "pagination": { + "pageOf": "Seite {page} von {totalPages}" }, "here": "Hier", + "serviceUrlTemplate": { + "serverTitle": "Übliche Server-Adresse", + "urlModeLabel": "Service-Adressenmuster", + "hostPort": "Gleicher Host, andere Ports", + "subdomain": "Eine Subdomain pro Dienst", + "path": "Ein Pfad pro Dienst" + }, "iconPicker": { "label": "Icon URL", + "description": "Suchen Sie die Bibliothek, fügen Sie eine Bild-URL ein oder laden Sie eine Datei hoch.", "header": "Suche {countIcons} Bilder nach Namen", "headerLoading": "Bilder nach Namen suchen", - "noResults": "Keine Symbole stimmen mit \"{search}\" überein.", - "error": "Konnte Symbole nicht laden.", - "description": "Suchen Sie die Bibliothek, fügen Sie eine Bild-URL ein oder laden Sie eine Datei hoch.", "clear": "Bild löschen", "uploadImage": "Bild hochladen", "results": "Bildsuchergebnisse", @@ -1303,7 +1857,9 @@ "otherImages": "Andere Bilder", "urlLoading": "Bild wird überprüft…", "urlReady": "Bild ist bereit zur Verwendung", - "urlError": "Dieses Bild konnte nicht geladen werden. Überprüfen Sie die URL und versuchen Sie es erneut." + "urlError": "Dieses Bild konnte nicht geladen werden. Überprüfen Sie die URL und versuchen Sie es erneut.", + "noResults": "Keine Symbole stimmen mit \"{search}\" überein.", + "error": "Konnte Symbole nicht laden." }, "colorScheme": { "options": { @@ -1315,7 +1871,6 @@ "information": { "min": "Min", "max": "Max", - "days": "Tage", "hours": "Stunden", "minutes": "Minuten" }, @@ -1352,16 +1907,16 @@ }, "userAvatar": { "menu": { - "switchToDarkMode": "Zum dunklen Design wechseln", - "switchToLightMode": "Zum hellen Design wechseln", + "open": "Konto-Menü öffnen", "management": "Verwaltung", - "docker": "Docker", "preferences": "Ihre Einstellungen", "logout": "Abmelden", "login": "Anmelden", "homeBoard": "Ihr Home Board", - "loggedOut": "Abgemeldet", - "updateAvailable": "{countUpdates} Updates verfügbar: {tag}" + "updateAvailable": "{countUpdates} Updates verfügbar: {tag}", + "assistant": "Assistent", + "assistantThinking": "Denken", + "modifier": "Mod" } }, "dangerZone": "Gefahrenbereich", @@ -1409,13 +1964,66 @@ "kilometersPerHour": "km/h", "milesPerHour": "mph" } + }, + "widgetQuery": { + "loading": "Widget-Daten werden geladen" + }, + "total": "Gesamt", + "filesystemUsage": "{count, plural, one {Zeige Nutzung für # Dateisystem} other {Zeige Nutzung für # Dateisysteme}}", + "field": { + "name": "Job Name" + }, + "label": { + "new": "Neu" + }, + "entity": { + "apps": "Apps", + "boards": "Boards", + "certificates": "Zertifikate", + "customWidgets": "Benutzerdefinierte Widgets", + "groups": "Gruppen", + "integrations": "Integrationen", + "invites": "Einladungen", + "logs": "Logs", + "media": "Medien", + "searchEngines": "Suchmaschinen", + "tasks": "Aufgaben", + "users": "Benutzer" } }, "section": { - "dynamic": { + "option": { + "showLabel": { + "label": "Label anzeigen", + "description": "Die Containerbezeichnung über dem Inhalt anzeigen." + }, + "collapsible": { + "label": "Einklappen erlauben", + "description": "Lassen Sie die Zuschauer expandieren und diesen Container einklappen." + }, + "showOpenAll": { + "label": "Zeige offene Aktion", + "description": "Aktion anzeigen, die jede App in diesem Container in neuen Tabs öffnet." + }, + "scrollable": { + "label": "Scrollbar", + "description": "Behalten Sie diesen Container in seiner Größe und scrollen Sie seinen Inhalt anstatt zu wachsen, um ihn passen." + } + }, + "action": { + "openAllInNewTabsFor": "Alle Apps in {name} in Tabs öffnen" + }, + "openAllInNewTabs": { + "title": "Alle in tabs öffnen", + "text": "Einige Browser können aus Sicherheitsgründen das gleichzeitige Öffnen von mehreren Tabs blockieren. Homarr konnte nicht alle Fenster öffnen, weil Ihr Browser diese Aktion blockiert hat. Bitte erlauben Sie \"Pop-up Fenster öffnen\" und versuchen Sie es erneut." + }, + "container": { + "untitled": "Unbenannter Container", "action": { - "create": "Neuer dynamischer Abschnitt", - "remove": "Dynamischen Abschnitt entfernen" + "create": "Neuer Container", + "remove": "Container entfernen", + "expand": "Erweitern", + "collapse": "Einklappen" }, "option": { "title": { @@ -1429,55 +2037,12 @@ } }, "remove": { - "title": "Dynamischen Abschnitt entfernen", - "message": "Möchten Sie diesen dynamischen Abschnitt wirklich entfernen? Die Elemente werden an die gleiche Position im übergeordneten Abschnitt verschoben." - } - }, - "category": { - "field": { - "name": { - "label": "Name" - } - }, - "action": { - "create": "Neue Kategorie", - "edit": "Kategorie umbenennen", - "remove": "Kategorie entfernen", - "moveUp": "Nach oben bewegen", - "moveDown": "Nach unten bewegen", - "createAbove": "Neue Kategorie oben", - "createBelow": "Neue Kategorie unten", - "openAllInNewTabs": "Alle in Tabs öffnen" - }, - "create": { - "title": "Neue Kategorie", - "submit": "Kategorie hinzufügen" - }, - "remove": { - "title": "Kategorie entfernen", - "message": "Möchten Sie die Kategorie {name} wirklich entfernen?" - }, - "edit": { - "title": "Kategorie umbenennen", - "submit": "Kategorie umbenennen" - }, - "menu": { - "label": { - "create": "Neue Kategorie", - "changePosition": "Position wechseln", - "settings": "Einstellungen" - } - }, - "openAllInNewTabs": { - "title": "Alle in tabs öffnen", - "text": "Einige Browser können aus Sicherheitsgründen das gleichzeitige Öffnen von mehreren Tabs blockieren. Homarr konnte nicht alle Fenster öffnen, weil Ihr Browser diese Aktion blockiert hat. Bitte erlauben Sie \"Pop-up Fenster öffnen\" und versuchen Sie es erneut." + "message": "Diesen Container entfernen? Sein Inhalt wird in die Umgebung verschoben." } } }, "item": { "action": { - "create": "Neues Element", - "import": "Element importieren", "edit": "Element bearbeiten", "moveResize": "Element verschieben/Größe ändern", "duplicate": "Element duplizieren", @@ -1486,7 +2051,7 @@ "menu": { "label": { "settings": "Einstellungen", - "refresh": "Aktualisieren", + "settingsFor": "Einstellungen für {name}", "options": "Optionen", "actions": "Aktionen" }, @@ -1495,21 +2060,96 @@ "error": "Fehler", "loading": "Wird geladen", "idle": "Leerlauf" + }, + "notification": { + "saveError": { + "title": "Widget kann nicht gespeichert werden", + "message": "Die Widget-Änderungen wurden rückgängig gemacht" + } } }, "create": { "title": "Wählen Sie das hinzuzufügende Element aus", "search": "Gegenstände filtern", - "addToBoard": "Zum Board hinzufügen" + "addToBoard": "Zum Board hinzufügen", + "addAtPosition": "Element hier hinzufügen", + "destination": { + "label": "Hinzufügen zu", + "description": "Wählen Sie aus, wo das Widget erscheinen soll. Sie können es auch später verschieben.", + "mainCanvas": "Haupt-Leinwand", + "leftRail": "Linke Schiene", + "rightRail": "Rechte Schiene" + }, + "connectionStatus": { + "ready": "Bereit", + "needsSetup": "Benötigt Einrichtung", + "noConnectionRequired": "Keine Verbindung erforderlich" + }, + "customWidget": "Definitions ID", + "standalone": "Eigenständig", + "missingIntegration": { + "title": "Zuerst einen Dienst verbinden", + "noPermission": "Dieses Widget benötigt eine kompatible Service-Verbindung. Bitten Sie einen Administrator, einen zu verbinden, dann versuchen Sie es erneut." + }, + "notification": { + "success": { + "title": "Widget hinzugefügt", + "message": "{name} wurde diesem Board hinzugefügt.", + "relocatedMessage": "{name} wurde zu {destination} hinzugefügt, da das ausgewählte Ziel nicht verfügbar war." + }, + "error": { + "title": "Kann Element nicht hinzufügen", + "message": "Der Artikel konnte diesem Board nicht hinzugefügt werden" + } + } + }, + "selection": { + "summary": "{count, plural, one {# ausgewählten Eintrag} other {# ausgewählte Elemente}}", + "selected": "{count, plural, one {# ausgewählt} other {# ausgewählt}}", + "copy": "Kopieren", + "copied": "{count, plural, one {# Element in die Zwischenablage kopiert!} other {# Elemente in die Zwischenablage kopiert}}", + "copyError": "Die ausgewählten Elemente konnten nicht kopiert werden. Ihr Browser erlaubt möglicherweise keinen Zugriff auf die Zwischenablage.", + "paste": "Einfügen", + "pasteShortcut": "Kopierte Elemente hier einfügen (Strg / + V)", + "pasted": "{count, plural, one {# Eintrag eingefügt} other {# Einträge eingefügt}}", + "pasteError": "Die Zwischenablage konnte nicht gelesen werden. Ihr Browser erlaubt möglicherweise keinen Zugriff auf die Zwischenablage.", + "pasteInvalid": "Die Zwischenablage enthält keine gültigen Homarr-Board-Elemente.", + "pasteUnavailable": "Die kopierten Elemente passen nicht auf dieses Board.", + "removed": "{count, plural, one {# Element entfernt} other {# Elemente entfernt!}}", + "move": "Bewegen", + "moveTo": "Ausgewählte Elemente verschieben", + "delete": "Löschen", + "clear": "Auswahl löschen", + "clearShortcut": "Auswahl löschen (Escape)", + "saveErrorTitle": "Artikel konnten nicht aktualisiert werden", + "saveErrorMessage": "Die Änderungen konnten nicht gespeichert werden. Das Board wurde aktualisiert.", + "moveUnavailableTitle": "Ausgewählte Elemente können nicht verschoben werden", + "moveUnavailableMessage": "Das Ziel hat nicht genug Platz für die gesamte Auswahl." }, "moveResize": { "title": "Element verschieben/Größe ändern", + "entryLabel": "{name}, Spalte {column}, Zeile {row}", + "target": { + "numbered": "{name}, Ziel {index}", + "located": "{name}, {location}, Ziel {index}" + }, + "keyboard": { + "instructions": "Drücken Sie Enter oder Leertaste um die Tastaturbearbeitung zu starten. Verwenden Sie Pfeiltasten zum Verschieben, Verschieben plus Pfeiltasten zum Verkleinern und Escape-Ausblenden zum Beenden.", + "started": "Tastaturbearbeitung gestartet. Mit Pfeiltasten verschieben, Shift plus Pfeiltasten skalieren und Escape stoppen.", + "stopped": "Tastaturbearbeitung beendet.", + "boundary": "Diese Änderung passt nicht in diesen Abschnitt." + }, "field": { + "section": { + "label": "Abschnitt oder Schiene" + }, "width": { - "label": "Breite" + "label": "Breite", + "shortLabel": "W" }, "height": { - "label": "Höhe" + "label": "Höhe", + "shortLabel": "H" }, "xOffset": { "label": "X Versatz" @@ -1523,18 +2163,36 @@ "title": "Element bearbeiten", "tab": { "widget": "Widget bearbeiten", - "app": "App bearbeiten" + "app": "App bearbeiten", + "integration": "Integration bearbeiten" }, "app": { "propagationNotice": "Änderungen an dieser App werden überall dort übernommen, wo sie über alle Dashboards hinweg verwendet wird." }, + "integration": { + "action": "Verbindung bearbeiten", + "description": "Teste oder repariere eine ausgewählte Verbindung, ohne dieses Widget zu verlassen.", + "editLabel": "{name} Integration bearbeiten", + "fullAccessRequired": "Voller Zugriff erforderlich", + "propagationNotice": "Änderungen an dieser Integration gelten überall dort, wo sie verwendet wird. Die Verbindung wird getestet, bevor sie gespeichert wird.", + "loading": "Lade Integration", + "loadError": "Diese Integration konnte nicht geladen werden. Versuchen Sie es noch einmal, bevor Sie die Verbindungseinstellungen ändern." + }, + "preview": { + "integrationRequired": "Wählen Sie eine Verbindung zur Vorschau dieses Widgets.", + "size": "Dateigröße" + }, + "settings": { + "label": "Widget Einstellungen" + }, "advancedOptions": { "label": "Erweiterte Einstellungen", "title": "Erweiterte Einstellungen Optionen" }, "field": { "integrations": { - "label": "Integrationen" + "label": "Integrationen", + "removeLabel": "{name} Integration entfernen" }, "title": { "label": "Titel" @@ -1548,17 +2206,18 @@ } }, "remove": { - "title": "Element entfernen", "message": "Soll dieses Element wirklich entfernt werden?" + }, + "advancedFocus": { + "open": "Erweiterte Ansicht öffnen", + "close": "Erweiterte Ansicht schließen", + "label": "{widget} erweiterte Ansicht" } }, "widget": { "integrationSelect": { "configureIntegrationFirst": "Verbinde zuerst eine Integration", - "loading": "Wird geladen...", - "placeholder": "Wählen Sie eine Option", - "noResults": "Keine Ergebnisse gefunden", - "loadError": "Fehler beim Laden der Optionen" + "placeholder": "Wählen Sie eine Option" }, "app": { "name": "App", @@ -1567,9 +2226,6 @@ "appId": { "label": "App auswählen" }, - "openInNewTab": { - "label": "In neuem Tab öffnen" - }, "showTitle": { "label": "App Namen anzeigen" }, @@ -1577,11 +2233,8 @@ "label": "Statusüberprüfung aktivieren" }, "layout": { - "label": "Ansicht", "option": { - "row": "Horizontal", "row-reverse": "Horizontal (invertiert)", - "column": "Vertikal", "column-reverse": "Vertikal (invertiert)" } }, @@ -1606,23 +2259,60 @@ "name": "Lesezeichen", "description": "Mehrere App Links anzeigen", "option": { - "title": { - "label": "Titel" + "showTitle": { + "label": "Widget-Titel anzeigen" + }, + "titleSize": { + "label": "Widget-Größe (px)" }, "layout": { "label": "Ansicht", "option": { - "row": { - "label": "Horizontal" - }, - "column": { - "label": "Vertikal" - }, - "grid": { - "label": "Raster" + "adaptive": { + "label": "Adaptiv" }, "gridHorizontal": { "label": "Gitter horizontal" + }, + "icons": { + "label": "Icons" + } + } + }, + "variant": { + "label": "Aussehen", + "option": { + "soft": { + "label": "Weich" + }, + "filled": { + "label": "Gefüllt" + }, + "outline": { + "label": "Umrandung" + }, + "plain": { + "label": "Einfache" + } + } + }, + "spacing": { + "label": "Kartenabstand", + "option": { + "xs": { + "label": "Sehr klein" + }, + "sm": { + "label": "Klein" + }, + "md": { + "label": "Mittel" + }, + "lg": { + "label": "Groß" + }, + "xl": { + "label": "Extra groß" } } }, @@ -1635,17 +2325,28 @@ "hideHostname": { "label": "Hostnamen ausblenden" }, - "openNewTab": { - "label": "In neuem Tab öffnen" - }, "withBorder": { "label": "Rahmen anzeigen" }, + "grow": { + "label": "Karten erweitern, um Zeile zu füllen" + }, + "customUrls": { + "label": "Eigene Links" + }, "items": { "label": "Lesezeichen", - "add": "Lesezeichen hinzufügen" + "remove": "Lesezeichen entfernen", + "apps": { + "label": "Lesezeichen hinzufügen", + "description": "Füge URLs ein oder finde vorhandene Apps. Ziehe die Lesezeichen unten, um sie neu zu ordnen.", + "placeholder": "URLs einfügen oder Apps suchen", + "addUrl": "URL hinzufügen", + "hint": "Drücken Sie die Eingabetaste, um eine URL hinzuzufügen. Fügen Sie kommaseparierte oder einzeilenweise URLs ein, um mehrere hinzuzufügen." + } } - } + }, + "empty": "URL oder App in den Widget-Einstellungen hinzufügen" }, "archiveTeamWarrior": { "name": "ArchiveTeam Warrior", @@ -1654,33 +2355,61 @@ "showBroadcastMessage": { "label": "Broadcast Nachrichten anzeigen" } + }, + "noProjectSelected": "Kein Projekt ausgewählt", + "runnerStatus": "Läufer: {status}", + "projectId": "Projekt: {id}", + "sessionReceived": "Sitzung erhalten: {value}", + "sessionSent": "Sitzung gesendet: {value}", + "sessionId": "Sitzung: {id}", + "startedAt": "{date} gestartet", + "emptyItems": "Keine aktiven oder letzten Jobs in dieser Momentaufnahme", + "metric": { + "running": "Wird ausgeführt", + "completed": "Fertig", + "failed": "Fehlgeschlagen", + "canceled": "Abgebrochen", + "download": "Download", + "upload": "Upload" + }, + "status": { + "running": "Wird ausgeführt", + "completed": "Abgeschlossen", + "failed": "Fehlgeschlagen", + "canceled": "Abgebrochen", + "stopped": "Stoppt", + "idle": "Leerlauf", + "unknown": "Unbekannt" + } + }, + "wud": { + "name": "Was ist Docker hoch", + "description": "Zeigt an, wie viele überwachte Container über Updates verfügen.", + "title": "Was ist Docker hoch", + "monitored": "Überwacht", + "updatesAvailable": "{count, plural, one {# Update verfügbar} other {# Updates verfügbar}}", + "updateAvailable": "Update verfügbar", + "openReleaseNotes": "Versionshinweise öffnen", + "option": { + "showRing": { + "label": "Update-Ring anzeigen" + }, + "showUpdateList": { + "label": "Container-Update-Liste anzeigen", + "description": "Listet jeden überwachten Container auf, der eine Bildaktualisierung zur Verfügung hat" + } } }, "dnsHoleSummary": { "name": "DNS Hole Zusammenfassung", "description": "Zeigt die Zusammenfassung deines DNS Holes an", "option": { - "layout": { - "label": "Ansicht", - "option": { - "row": { - "label": "Horizontal" - }, - "column": { - "label": "Vertikal" - }, - "grid": { - "label": "Raster" - } - } - }, "usePiHoleColors": { "label": "Pi Hole Farben verwenden" } }, "error": { - "internalServerError": "Fehler beim Abrufen der DNS Hole Zusammenfassung", - "integrationsDisconnected": "Keine Daten verfügbar, alle Integrationen getrennt" + "internalServerError": "Fehler beim Abrufen der DNS Hole Zusammenfassung" }, "data": { "adsBlockedToday": "Heute blockiert", @@ -1688,32 +2417,24 @@ "dnsQueriesToday": "Abfragen heute", "domainsBeingBlocked": "Domänen auf der Sperrliste" }, - "domainsTooltip": "Aufgrund mehrerer Integrationen kann Homarr die genaue Anzahl der blockierten Domains nicht berechnen" + "domainsTooltip": "Aufgrund mehrerer Integrationen kann Homarr die genaue Anzahl der blockierten Domains nicht berechnen", + "status": { + "enabled": "Aktiviert", + "disabled": "Deaktiviert", + "unknown": "Unbekannt" + } }, "dnsHoleControls": { "name": "DNS Hole Steuerung", "description": "Steuern Sie PiHole oder AdGuard von Ihrem Dashboard aus", "option": { - "layout": { - "label": "Ansicht", - "option": { - "row": { - "label": "Horizontal" - }, - "column": { - "label": "Vertikal" - }, - "grid": { - "label": "Raster" - } - } - }, "showToggleAllButtons": { "label": "Alle Schaltflächen anzeigen" } }, "error": { - "internalServerError": "Fehler bei der Kontrolle des DNS Holes" + "internalServerError": "Fehler bei der Kontrolle des DNS Holes", + "bulkActionsFailed": "{count, plural, one {# Aktion fehlgeschlagen} other {# Aktionen fehlgeschlagen}}" }, "controls": { "enableAll": "Alle aktivieren", @@ -1724,8 +2445,6 @@ "disabled": "Deaktiviert", "processing": "Wird verarbeitet", "disconnected": "Verbindung getrennt", - "hours": "Stunden", - "minutes": "Minuten", "unlimited": "Freilassen für unbegrenzt" } }, @@ -1737,16 +2456,10 @@ "label": "Eigene Titel/Stadt Anzeige", "description": "Zeige einen benutzerdefinierten Titel oder den Namen der Stadt oder des Landes oben auf der Uhr." }, - "customTitle": { - "label": "Titel" - }, "is24HourFormat": { "label": "24-Stunden Format", "description": "24-Stunden Format anstelle von 12-Stunden Format verwenden" }, - "showSeconds": { - "label": "Sekunden anzeigen" - }, "useCustomTimezone": { "label": "Eine feste Zeitzone verwenden" }, @@ -1765,29 +2478,295 @@ "label": "Benutzerdefiniertes Zeitformat", "description": "ISO 8601 Standard benutzen um die Zeit zu formatieren (dies wird andere Optionen überschreiben)" }, - "customDateFormat": { - "label": "Benutzerdefiniertes Datumsformat", - "description": "ISO 8601 Standard benutzen um das Datum zu formatieren (dies wird andere Optionen überschreiben)" - }, "showWeather": { "label": "Wetter anzeigen", "description": "Zeigt ein kleines animiertes Wettersymbol und die Temperatur in der Ecke der Karte an" }, - "weatherLocation": { - "label": "Ort für Wetterbericht" - }, "isWeatherFormatFahrenheit": { "label": "Fahrenheit verwenden" + }, + "animateWeatherIcon": { + "label": "Wettersymbol animieren", + "description": "Animiere das Wettersymbol. Standardmäßig deaktiviert und immer deaktiviert, wenn reduzierte Bewegungen angefordert werden." + }, + "colorWeatherByDayNight": { + "label": "Wetter bei Tag/Nacht einfärben", + "description": "Wetter-Symbol und Temperatur mit einer Tagesfarbe oder einer Nacht-Farbe einfügen je nachdem, ob es derzeit Tag oder Nacht am gewählten Ort ist." + }, + "dayWeatherColor": { + "label": "Tagesfarbe" + }, + "nightWeatherColor": { + "label": "Nachtfarbe" + }, + "worldClockCities": { + "label": "Weltuhrstädte", + "description": "Fügen Sie bis zu sechs Städte für eine erweiterte Ansicht hinzu und bestellen Sie sie." } + }, + "timezoneList": { + "timezone": "Zeitzone", + "cityLabel": "Stadtbezeichnung", + "searchPlaceholder": "Zeitzonen suchen", + "noResults": "Keine Zeitzonen gefunden", + "unsupportedOption": "Nicht unterstützt: {timeZone}", + "add": "Stadt hinzufügen", + "remove": "{city} entfernen", + "reorder": "{city} umsortieren", + "limit": "{count} von {maximum} Städten konfiguriert" + }, + "worldClock": { + "primary": "Primäre Uhr", + "local": "Lokale Zeit", + "today": "Heute", + "tomorrow": "Morgen", + "yesterday": "Gestern", + "noSecondaryCities": "Fügen Sie Städte in Widget-Optionen hinzu, um sie hier zu vergleichen.", + "unsupportedPrimaryTitle": "Primäre Zeitzone ist nicht verfügbar", + "unsupportedPrimary": "{timeZone} wird in diesem Browser nicht unterstützt. UTC wird als klar markierter Fallback angezeigt.", + "unsupportedTimeZone": "Nicht unterstützte Zeitzone: {timeZone}", + "accessibleTime": "{city}: {time}, {date}, {timeZone}", + "advancedLabel": "Erweiterte Weltuhr", + "cities": "Weltuhren", + "cityCount": "{count} timezones", + "timeBarLabel": "24-Stunden-Tageszeit für {city}", + "dayProgress": "{percent}% abgelaufen · {hours}h {minutes}m verbleibend", + "phaseLegend": "Tageslegende", + "tick": { + "midnight": "00", + "morning": "06", + "noon": "12", + "evening": "18", + "end": "24" + }, + "phaseRange": { + "night": "00–05 · 21–24", + "dawn": "05–08", + "day": "08–18", + "dusk": "18–21" + }, + "phase": { + "night": "Nacht", + "dawn": "Morn", + "day": "Tag", + "dusk": "Dämmerung" + } + } + }, + "airQuality": { + "name": "Luftqualität & UV", + "description": "Zeigt Luftqualität, Ultraviolett-Index, Schadstoffe und Pollen für einen Standort an.", + "option": { + "location": { + "label": "Standort der Luftqualität" + }, + "aqiStandard": { + "label": "AQI Standard", + "options": { + "auto": "Automatisch für Gebietsschema", + "european": "Europäischer AQI", + "us": "US AQI" + } + }, + "showUv": { + "label": "UV-Index anzeigen" + }, + "showPollutants": { + "label": "Schadstoffkonzentrationen anzeigen" + }, + "showPollen": { + "label": "Pollenkonzentrationen anzeigen" + } + }, + "category": { + "good": "Gut", + "fair": "Faire", + "moderate": "Mäßig", + "unhealthySensitive": "Ungesund für sensible Gruppen", + "unhealthy": "Fehlerhaft", + "poor": "Arm", + "veryPoor": "Sehr arm", + "veryUnhealthy": "Sehr ungesund", + "extremelyPoor": "Extrem arm", + "hazardous": "Gefährlich", + "unknown": "Kein AQI lesen" + }, + "uv": { + "label": "UV-Index", + "category": { + "low": "Niedrig", + "moderate": "Mäßig", + "high": "Hoch", + "veryHigh": "Sehr hoch", + "extreme": "Extrem", + "unknown": "Kein Lesen" + } + }, + "dominantPollutant": "Dominant pollutant", + "aqiLabel": "AQI", + "strongestPollen": "Höchste Pollen", + "unit": { + "concentration": "{value} μg/m3", + "pollen": "{value} Körner/m3" + }, + "pollutant": { + "pm2_5": "PM2,5", + "pm10": "PM10", + "ozone": "Ozon", + "nitrogenDioxide": "Stickstoffdioxid", + "sulphurDioxide": "Sulphur dioxide", + "carbonMonoxide": "Kohlenmonoxid" + }, + "pollen": { + "alder": "Alder", + "birch": "Birke", + "grass": "Gras", + "mugwort": "Muscheln", + "olive": "Olivenöl", + "ragweed": "Ragweed" + }, + "compact": { + "sixHourTrend": "AQI Trend für die nächsten sechs Stunden" + }, + "advanced": { + "observedAt": "Aktualisiert um {time}", + "next24Hours": "Nächste 24 Stunden", + "pollutants": "Schadstoffkonzentrationen", + "pollen": "Pollenkonzentrationen", + "sevenDayForecast": "Maximale 7-Tage Vorhersage", + "aqiValue": "AQI {value}", + "uvValue": "UV- {value}", + "uvShort": "UV- {value}", + "noForecast": "Keine Prognosedaten verfügbar" + } + }, + "countdown": { + "name": "Countdowns", + "description": "Trackt anstehende Events und wiederkehrende Jubiläen.", + "option": { + "events": { + "label": "Ereignisse", + "description": "Hinzufügen und bestellen bis zu 20 einmalige oder jährliche Countdowns. Termine werden in der gewählten Zeitzone eingegeben." + }, + "showProgress": { + "label": "Fortschritt anzeigen" + }, + "showSeconds": { + "label": "Sekunden anzeigen", + "description": "Halten Sie Sekunden für jedes kommende Ereignis sichtbar." + } + }, + "dateTimeEventList": { + "newEvent": "Neues Ereignis", + "add": "Neuer Termin", + "remove": "{event} entfernen", + "reorder": "{event} umsortieren", + "eventLabel": "Ereignisbezeichnung", + "timezone": "Zeitzone", + "unsupportedOption": "Nicht unterstützt: {timeZone}", + "recurrence": "Wiederholungen", + "recurrenceOption": { + "none": "Nicht wiederholen", + "yearly": "Jedes Jahr" + }, + "target": "Event-Datum und -Zeit", + "trackProgress": "Fortschritt vom Startdatum", + "start": "Fortschritt Startdatum und -zeit", + "confirmDateTime": "Datum und Uhrzeit bestätigen", + "limit": "{count} von {maximum} Events konfiguriert" + }, + "empty": { + "title": "Noch keine Countdowns", + "description": "Fügen Sie ein Ereignis in Widget-Optionen hinzu, um mit dem Zählen zu beginnen." + }, + "completed": "Abgeschlossen", + "yearly": "Jährlich", + "progress": "Ereignisfortschritt", + "upcoming": "Bevorstehende", + "completedEvents": "Abgeschlossene Ereignisse", + "invalid": { + "title": "Einige Ereignisse können nicht angezeigt werden", + "description": "{count, plural, one {Ein Ereignis hat ein ungültiges Datum oder nicht unterstützte Zeitzone.} other {# Ereignisse haben ein ungültiges Datum oder eine nicht unterstützte Zeitzone.}}", + "value": "Unavailable" + }, + "alert": { + "notifications": "Browser-Benachrichtigungen", + "permissionDenied": "Benachrichtigungen sind in diesem Browser blockiert.", + "reached": "Der Countdown hat sein Ziel erreicht." + } + }, + "timer": { + "name": "Timer / Pomodoro", + "description": "Führt einen einfachen Timer oder eine konfigurierbare Pomodoro-Sequenz aus.", + "option": { + "mode": { + "label": "Modus", + "options": { + "timer": "Timer", + "pomodoro": "Pomodoro" + } + }, + "timerMinutes": { + "label": "Timer Minuten" + }, + "focusMinutes": { + "label": "Fokus-Minuten" + }, + "shortBreakMinutes": { + "label": "Kurze Pause Minuten" + }, + "longBreakMinutes": { + "label": "Lange Pause Minuten" + }, + "sessionsBeforeLongBreak": { + "label": "Sitzungen vor einer langen Pause fokussieren" + }, + "autoStartBreaks": { + "label": "Pausen automatisch starten" + }, + "autoStartFocus": { + "label": "Fokussitzungen automatisch starten" + } + }, + "phase": { + "timer": "Timer", + "focus": "Fokus", + "shortBreak": "Kurze Pause", + "longBreak": "Lange Pause" + }, + "action": { + "start": "Starten", + "pause": "Pause", + "reset": "Reset" + }, + "attention": { + "timerComplete": "Timer complete", + "phaseReady": "{phase} bereit" + }, + "progress": "Timer-Fortschritt: {progress}%", + "compact": { + "completedFocus": "{count, plural, =0 {Keine Fokussitzungen abgeschlossen} one {# Fokussitzung abgeschlossen} other {# Fokussitzungen abgeschlossen}}" + }, + "alert": { + "title": "Timer complete", + "completed": "{phase} abgeschlossen." + }, + "advanced": { + "sequence": "Pomodoro sequence", + "focusSession": "{session} fokussieren", + "settings": "Permanente Einstellungen", + "settingsHint": "Verwenden Sie das Kontextmenü des Widgets, um diese Board-Einstellungen zu bearbeiten.", + "localAlerts": "Lokale Warnungen", + "notifications": "Browser-Benachrichtigungen", + "sound": "Timer-Töne", + "localAlertsHint": "Timer-Sounds sind standardmäßig aktiviert. Töne und Benachrichtigungen gelten nur für dieses Widget in diesem Browser.", + "notificationsDenied": "Benachrichtigungen sind in diesem Browser blockiert." } }, "minecraftServerStatus": { "name": "Status des Minecraft Servers", "description": "Status des Minecraft Servers anzeigen", "option": { - "title": { - "label": "Titel" - }, "domain": { "label": "Server Adresse" }, @@ -1807,11 +2786,21 @@ "noStation": "Keine Station ausgewählt", "option": { "baseUrl": { - "label": "Search.ch URL" + "label": "Search.ch URL", + "description": "Benutzerdefinierte URLs müssen zu einer öffentlichen IP-Adresse aufgelöst werden. Private und lokale Hosts werden abgelehnt." }, "station": { - "label": "Station" + "label": "Station", + "placeholder": "Nach einer Station suchen" } + }, + "error": { + "customSourceUnavailable": "Die Zeitplan-Quelle ist nicht verfügbar. Überprüfen Sie, ob die URL mit einer öffentlichen IP-Adresse aufgelöst wird.", + "stationSearch": "Stationen konnten nicht durchsucht werden. Überprüfen Sie die benutzerdefinierte URL und den Zugriff auf das Board." + }, + "warning": { + "stale": "Der Zeitplan konnte nicht aktualisiert werden. Zeige Abfahrten zuletzt aktualisiert unter {time}.", + "staleCompact": "Veraltete Daten" } }, "notebook": { @@ -1843,6 +2832,9 @@ "directionRtl": "Setze Textausrichtung von rechts nach links", "blockquote": "Blockzitat", "horizontalLine": "Horizontale Linie", + "details": "Einklappbarer Abschnitt umschalten", + "expandDetails": "Einklappbarer Abschnitt erweitern", + "collapseDetails": "Einklappbarer Abschnitt einklappen", "bulletList": "Aufzählung", "orderedList": "Geordnete Liste", "checkList": "Checkliste", @@ -1851,16 +2843,20 @@ "link": "Verknüpfung", "unlink": "Link entfernen", "image": "Bild einbetten", - "addTable": "Tabelle hinzufügen", + "insertTable": "Tabelle einfügen", + "insertTableSize": "{columns} × {rows} Tabelle einfügen", "deleteTable": "Tabelle entfernen", "colorCell": "Farbe der Tabellen Zelle", - "mergeCell": "Zellen-Zusammenführung umschalten", + "mergeCells": "Zellen zusammenführen", + "splitCell": "Zelle teilen", "addColumnLeft": "Spalte davor hinzufügen", "addColumnRight": "Spalte danach hinzufügen", "deleteColumn": "Spalte löschen", "addRowTop": "Zeile davor hinzufügen", "addRowBelow": "Zeile danach hinzufügen", - "deleteRow": "Zeile löschen" + "deleteRow": "Zeile löschen", + "toggleHeaderRow": "Headerzeile umschalten", + "toggleHeaderColumn": "Header-Spalte umschalten" }, "align": { "left": "Links", @@ -1871,8 +2867,6 @@ "clearColor": "Farbe entfernen", "source": "Quelle", "widthPlaceholder": "Wert in % oder Pixel", - "columns": "Spalten", - "rows": "Zeilen", "width": "Breite", "height": "Höhe" }, @@ -1884,7 +2878,9 @@ "discard": "Änderungen verwerfen", "keepEditing": "Bearbeitung fortsetzen" } - } + }, + "saveFailed": "Notiz konnte nicht gespeichert werden", + "documentStats": "{words, plural, one {# Wort} other {# Worte}} · {characters, plural, one {# Zeichen} other {# Zeichen}}" }, "anchorNote": { "name": "Anchor Notiz", @@ -1893,9 +2889,6 @@ "noteId": { "label": "Notiz" }, - "showTitle": { - "label": "Titel anzeigen" - }, "showUpdatedAt": { "label": "Letzte Aktualisierungen anzeigen" } @@ -1905,14 +2898,20 @@ "notFound": "Notiz wurde nicht gefunden", "noNotes": "Keine Notizen gefunden", "integrationRequired": "Wählen Sie zuerst eine Anchor Integration aus", - "updatedAt": "Aktualisiert {date}", "untitled": "Unbenannt", - "edit": "Bearbeiten", - "save": "Speichern", - "cancel": "Abbrechen", "readOnlyViewer": "Sie haben Leserechte auf diese Notiz. Die Bearbeitung ist deaktiviert.", "saveForbidden": "Du hast keine Berechtigung diese Notiz zu bearbeiten.", - "saveFailed": "Fehler beim Speichern dieser Notiz. Bitte versuchen Sie es erneut." + "saveFailed": "Fehler beim Speichern dieser Notiz. Bitte versuchen Sie es erneut.", + "createdAt": "{date} erstellt", + "permission": { + "owner": "Eigentümer", + "editor": "Redakteur", + "viewer": "Betrachter" + }, + "status": { + "pinned": "Angeheftet", + "archived": "Archiviert" + } }, "iframe": { "name": "iFrame", @@ -1971,6 +2970,25 @@ "clickable": { "label": "Anklickbar" } + }, + "state": { + "on": "An", + "off": "Aus", + "unavailable": "Unavailable", + "unknown": "Unbekannt" + }, + "advanced": { + "entityId": "Entitäts-ID: {id}", + "lastChanged": "{date} geändert", + "attribute": { + "unit": "Einheit", + "deviceClass": "Geräteklasse", + "icon": "Symbol" + } + }, + "error": { + "loadFailed": "Konnte Entität nicht laden", + "toggleFailed": "Unfähig die Entität zu aktualisieren" } }, "smartHome-executeAutomation": { @@ -1986,11 +3004,31 @@ }, "spotlightAction": { "run": "{name} ausführen" + }, + "advanced": { + "lastExecuted": "Zuletzt ausgeführt bei {time}", + "automationId": "Automatisierungs-ID: {id}", + "ready": "Bereit zum Starten", + "noPermission": "Keine Berechtigung zum Ausführen dieser Automatisierung" + }, + "status": { + "running": "Laufende Automatisierung", + "success": "Automatisierung abgeschlossen" + }, + "error": { + "executeFailed": "Automatisierung kann nicht ausgeführt werden" } }, "stockPrice": { "name": "Aktienpreis", "description": "Zeigt den aktuellen Aktienkurs einer Firma an", + "advanced": { + "currentPrice": "Aktueller Preis", + "previousClose": "Vorheriges Schließen", + "changePercentage": "Änderung (%)", + "minimum": "Minimal", + "maximum": "Maximal" + }, "option": { "stock": { "label": "Aktiensymbol" @@ -2061,6 +3099,10 @@ "label": "1 Monat" } } + }, + "showDetails": { + "label": "Details anzeigen", + "description": "Name, Änderung und Zeitbereich in der kompakten Ansicht anzeigen. Schalten Sie nur für Symbol und Preis aus." } } }, @@ -2088,6 +3130,13 @@ "showUnmonitored": { "label": "Nicht überwachte anzeigen" } + }, + "advanced": { + "previousMonth": "Vormonat anzeigen", + "nextMonth": "Nächsten Monat anzeigen", + "eventCount": "{count, plural, one {# Ereignis} other {# Ereignisse}}", + "loading": "Kalenderereignisse werden geladen...", + "noEvents": "Keine Termine in diesem Monat" } }, "weather": { @@ -2100,16 +3149,18 @@ "disableTemperatureDecimals": { "label": "Deaktivieren der Temperatur Dezimalstellen" }, + "animateIcons": { + "label": "Wettersymbole animieren" + }, + "showHumidity": { + "label": "Feuchtigkeit anzeigen" + }, "showCurrentWindSpeed": { - "label": "Aktuelle Windgeschwindigkeit anzeigen", - "description": "Nur bei aktuellem Wetter" + "label": "Aktuelle Windgeschwindigkeit anzeigen" }, "useImperialSpeed": { "label": "Verwende miles per hour für die Windgeschwindigkeit" }, - "location": { - "label": "Wetterstandort" - }, "showCity": { "label": "Stadt anzeigen" }, @@ -2119,13 +3170,10 @@ "forecastDayCount": { "label": "Anzahl der Prognose Tage", "description": "Wenn das Widget nicht breit genug ist, werden weniger Tage angezeigt" - }, - "dateFormat": { - "label": "Datumsformat", - "description": "Wie das Datum aussehen sollte" } }, "currentWindSpeed": "{currentWindSpeed} {unit}", + "disabled": "Wetterdaten sind nicht verfügbar, da ausgehende Verbindungen deaktiviert sind", "dailyForecast": { "sunrise": "Sonnenaufgang", "sunset": "Sonnenuntergang", @@ -2148,6 +3196,47 @@ "thunderstorm": "Gewitter", "thunderstormWithHail": "Gewitter mit Hagel", "unknown": "Unbekannt" + }, + "details": "Wetterdetails anzeigen", + "detailsFor": "Wetterdetails für {date} anzeigen", + "advanced": { + "forecast": "7-Tage Vorhersage", + "hourlyForecast": "Nächste 24 Stunden", + "day": "Tag", + "time": "Zeit", + "conditions": "Bedingungen", + "temperature": "Temperatur", + "feelsLike": "Fühlt sich wie {temperature} an", + "feelsLikeLabel": "Fühlt sich wie", + "feelsLikeRange": "Gefällt mir: {maximum} / {minimum}", + "highLow": "Hohe {maximum} · niedrige {minimum}", + "observedAt": "Aktualisiert um {time}", + "humidity": "Feuchtigkeit", + "averageHumidity": "Durchschnittliche Luftfeuchtigkeit: {humidity}%", + "currentHumidity": "Aktuelle Luftfeuchtigkeit", + "wind": "Wind / Bögen ({unit})", + "currentWind": "Aktueller Wind / Bögen", + "windValue": "{speed} / {gusts} {unit}", + "windDetail": "Max Wind / Gusts: {speed} / {gusts} {unit}", + "nextHourPrecipitation": "Niederschlag nächste Stunde", + "precipitationChance": "Niederschlag Chance", + "precipitationValue": "{probability}% · {amount} mm", + "precipitationDetail": "Niederschlag: {probability}% · {amount} mm", + "todayUv": "Heutiger maximaler UV-Index", + "uvIndex": "Maximaler UV-Index: {value}", + "daylight": "Tageslicht: {duration}", + "hourlyTooltip": "Fühlt sich wie {feelsLike}{temperatureUnit} · {amount} mm · {humidity}% Feuchtigkeit · {speed} {speedUnit} Winded@@5", + "hourlyTooltipWithoutHumidity": "Fühlt sich wie {feelsLike}{temperatureUnit} · {amount} mm · {speed} {speedUnit}", + "detailLabel": { + "feelsLike": "Fühlt sich wie", + "precipitation": "Niederschlag", + "humidity": "Durchschnittliche Luftfeuchtigkeit", + "wind": "Max Wind / Bögen", + "uv": "Max UV-Index", + "daylight": "Daylight" + }, + "sun": "Sonnenaufgang / Sonnenuntergang", + "noForecast": "Keine Prognosedaten verfügbar" } }, "indexerManager": { @@ -2160,8 +3249,15 @@ }, "title": "Index Manager", "testAll": "Alle testen", + "status": { + "healthy": "Gesund", + "unhealthy": "Fehlerhaft", + "disabled": "Deaktiviert", + "unknown": "Gesundheit nicht verfügbar" + }, "error": { - "internalServerError": "Fehler beim Abrufen des Indexer Status" + "internalServerError": "Fehler beim Abrufen des Indexer Status", + "testAll": "Der Indexer Test ist fehlgeschlagen. Versuchen Sie es erneut." } }, "healthMonitoring": { @@ -2190,11 +3286,6 @@ "fileSystem": { "label": "Dateisystem Info anzeigen" }, - "visibleStorageVolumes": { - "label": "Sichtbare Speichervolumes", - "description": "Nur verfügbar, wenn alle ausgewählten Integrationen Synology betreffen. Nicht ausfüllen, um alle erkannten Speichervolumes anzuzeigen.", - "placeholder": "Speichervolumen auswählen" - }, "defaultTab": { "label": "Standard Tab" }, @@ -2217,17 +3308,27 @@ "minutes": "{count} Minuten", "used": "Belegt", "available": "Verfügbar", - "lastSeen": "Letzte Statusaktualisierung: {lastSeen}" + "lastSeen": "Letzte Statusaktualisierung: {lastSeen}", + "updatesAvailable": "{count, plural, one {# Update verfügbar} other {# Updates verfügbar}}", + "rebootRequired": "Neustart erforderlich", + "rebootNotRequired": "Kein Neustart erforderlich" + }, + "smartStatus": { + "attributesWithinThresholds": "SMART: Attribute innerhalb von Schwellenwerten", + "attributesFailed": "SMART: {attributes} fehlgeschlagen", + "noCriticalWarning": "SMART: Keine Warnung von SSD gemeldet", + "criticalWarning": "SMART: von SSD gemeldete kritische Warnung" + }, + "gauge": { + "cpuUsage": "CPU-Auslastung", + "cpuTemperature": "CPU-Temperatur", + "memoryUsage": "Speichernutzung", + "gpuUsage": "{name} GPU-Nutzung" }, - "memory": {}, "error": { "internalServerError": "Fehler beim Abrufen des Gesundheitsstatus" }, "cluster": { - "summary": { - "cpu": "CPU", - "memory": "RAM" - }, "resource": { "node": { "name": "Nodes" @@ -2263,8 +3364,6 @@ "table": { "header": { "name": "Name", - "cpu": "CPU", - "memory": "RAM", "node": "Node" } } @@ -2274,33 +3373,29 @@ "name": "Docker Statistiken", "description": "Statistiken Ihrer Container (Dieses Widget kann nur mit Administratorrechten hinzugefügt werden)", "option": { - "columns": { - "label": "Anzuzeigende Spalten" + "endpointIds": { + "label": "Docker-Umgebungen", + "description": "Leer lassen um Container aus jeder Docker-Umgebung anzuzeigen", + "placeholder": "Alle Docker Umgebungen" }, - "enableRowSorting": { - "label": "Sortierung von Elementen aktivieren" + "containerFilter": { + "label": "Zu filternde Container" + }, + "filterIsWhitelist": { + "label": "Als Whitelist filtern" }, "defaultSort": { - "label": "Standardmäßig verwendete Spalte zur Sortierung", "option": { "name": "Name", "state": "Status", "cpuUsage": "CPU-Auslastung", "memoryUsage": "Speichernutzung" } - }, - "descendingDefaultSort": { - "label": "Sortierung umkehren" - }, - "columnOrder": { - "label": "Spaltenordnung" - }, - "columnWidths": { - "label": "Spaltenbreite" } }, "error": { "internalServerError": "Fehler beim Abrufen der Container Statistiken", + "endpointsUnavailable": "Docker Endpunkte sind nicht verfügbar", "layoutSaveTitle": "Tabellenlayout nicht gespeichert", "layoutSaveMessage": "Das Docker-Tabellenlayout konnte nicht gespeichert werden. Versuche die Spalte zu verschieben oder eine andere Spaltengröße zu verwenden." }, @@ -2309,7 +3404,6 @@ } }, "coolify": { - "name": "Coolify", "description": "Übersicht Ihrer Coolify-Instanz mit Servern und Anwendungen", "option": { "showServers": { @@ -2335,17 +3429,49 @@ "internalServerError": "Fehler beim Abrufen der Coolify-Daten" }, "server": { - "buildServer": "Version" + "buildServer": "Version", + "resourceCounts": "{applications, plural, one {# App} other {# Apps}} / {services, plural, one {# Service} other {# Dienste}}", + "reachability": "Erreichbarkeit", + "usability": "Benutzbarkeit" + }, + "source": { + "url": "Quelle: {url}", + "unavailable": "{source}: unavailable" }, "instances": { "title": "Instanzen" + }, + "action": { + "openResource": "{name} öffnen", + "openLogs": "Öffne {name} Logs", + "showIp": "IP-Adresse anzeigen", + "hideIp": "IP-Adresse ausblenden" + }, + "status": { + "running": "Wird ausgeführt", + "stopped": "Stoppt", + "exited": "Beendet", + "starting": "Start", + "restarting": "Startet neu", + "unknown": "Unbekannt", + "online": "Online", + "offline": "Offline", + "reachable": "Erreichbar", + "unreachable": "Nicht erreichbar", + "usable": "Verwendbar", + "unusable": "Nicht verwendbar" } }, "vpn": { "name": "VPN", "description": "Übersicht deiner VPN-Verbindungen", "serviceUnavailable": "VPN nicht verfügbar", - "option": {} + "status": { + "running": "Wird ausgeführt", + "notRunning": "Nicht ausgeführt", + "unavailable": "Unavailable", + "vpn": "VPN: {status}" + } }, "ups": { "name": "UPS", @@ -2372,14 +3498,19 @@ "runtime": "Laufzeit", "load": "Laden", "input": "Eingabe", - "output": "Ausgabe" + "output": "Ausgabe", + "batteryVoltage": "Akkuspannung", + "power": "Macht", + "temperature": "Temperatur", + "manufacturer": "Hersteller", + "model": "Modell", + "serial": "Serial" }, "error": { "internalServerError": "Fehler beim Abrufen der UPS Daten" } }, "tracearr": { - "name": "Tracearr", "description": "Verbesserte Überwachung von Medienservern mit detaillierten Stream- und Transcodierungsdaten", "option": { "showStreams": { @@ -2467,10 +3598,7 @@ "label": "Veranstaltung", "description": "Gesamte Vorkommnisse eines bestimmten Ereignisses anzeigen", "placeholder": "Wählen Sie ein Ereignis aus", - "loading": "Ereignisse werden geladen...", - "noEvents": "Keine Ereignisse gefunden", - "none": "Kein Ereignis", - "configureWebsiteFirst": "Wählen Sie zuerst eine Webseite aus, um Ereignisse zu laden" + "none": "Kein Ereignis" }, "chartType": { "label": "Diagrammtyp", @@ -2501,26 +3629,21 @@ "eventNames": { "label": "Ereignisse", "description": "Wählen Sie eine oder mehrere Ereignisse zum Diagramm", - "placeholder": "Ereignisse auswählen...", - "loading": "Ereignisse werden geladen...", - "noEvents": "Keine Ereignisse gefunden", - "configureWebsiteFirst": "Wählen Sie zuerst eine Webseite aus, um Ereignisse zu laden" + "placeholder": "Ereignisse auswählen..." }, "topCount": { "label": "Elemente anzeigen", "description": "Anzahl der anzuzeigenden Top Elemente (max. 500)" + }, + "events": { + "loading": "Ereignisse werden geladen...", + "noEvents": "Keine Ereignisse gefunden", + "configureWebsiteFirst": "Wählen Sie zuerst eine Webseite aus, um Ereignisse zu laden" } }, "event": { - "occurrences": "Ereignisse", "label": "Ereignisse" }, - "topPages": { - "direct": "Direkt" - }, - "topReferrers": { - "direct": "Direkt" - }, "events": { "selectPrompt": "Wählen Sie Ereignisse zum Diagramm" }, @@ -2529,6 +3652,9 @@ "noWebsite": "Keine Webseite konfiguriert", "noData": "Keine Daten verfügbar", "internalServerError": "Fehler beim Abrufen der Umami-Daten" + }, + "top": { + "direct": "Direkt" } }, "common": { @@ -2556,7 +3682,8 @@ }, "integration": { "noData": "Keine Integration gefunden", - "description": "Klicken Sie um eine neue Integration zu erstellen" + "description": "Klicken Sie um eine neue Integration zu erstellen", + "manage": "Integrationen verwalten" }, "app": { "noData": "Keine App gefunden", @@ -2567,7 +3694,61 @@ "noIntegration": "Keine Integration ausgewählt", "noData": "Keine Integrationsdaten verfügbar" }, - "option": {} + "integrationDisconnected": "Keine Daten verfügbar, alle Integrationen getrennt", + "updatedAt": "Aktualisiert {date}", + "title": { + "label": "Titel" + }, + "openInNewTab": { + "label": "In neuem Tab öffnen" + }, + "showTitle": { + "label": "Titel anzeigen" + }, + "weatherLocation": { + "label": "Ort für Wetterbericht" + }, + "layout": { + "label": "Darstellung", + "option": { + "horizontal": "Horizontal", + "vertical": "Vertikal", + "grid": "Raster" + } + }, + "select": { + "loading": "Wird geladen...", + "loadError": "Fehler beim Laden der Optionen" + }, + "dateFormat": { + "label": "Datumsformat", + "description": "Wie das Datum aussehen sollte" + }, + "visibleStorageVolumes": { + "label": "Sichtbare Speichervolumes", + "description": "Nur verfügbar, wenn jede ausgewählte Integration OpenMediaVault oder Synology ist. Lassen Sie leer, um alle erkannten Speichervolumina anzuzeigen.", + "placeholder": "Speichervolumen auswählen" + }, + "tableOptions": { + "columns": { + "label": "Anzuzeigende Spalten" + }, + "columnOrder": { + "label": "Spaltenordnung" + }, + "columnWidths": { + "label": "Spaltenbreite" + }, + "enableRowSorting": { + "label": "Sortierung von Elementen aktivieren" + }, + "defaultSort": { + "label": "Standardmäßig verwendete Spalte zur Sortierung" + }, + "invertSorting": { + "label": "Sortierung umkehren" + } + } }, "video": { "name": "Videostream", @@ -2626,6 +3807,7 @@ "transcoding": "Transkodierung", "paused": "Pausiert", "remaining": "{minutes} Min. verbleibend", + "seasonEpisode": "S{season} E{episode}", "metadata": { "title": "Statistiken für Nerds", "video": { @@ -2643,11 +3825,16 @@ "resolution": "Auflösung", "target": "Ziel Codec" } - } + }, + "unknownUser": "Unbekannter Benutzer" + }, + "summary": { + "sessions": "{count, plural, one {# Sitzung} other {# Sitzungen}}", + "playing": "{count} spielen", + "transcoding": "{count} Umkodierung" } }, "paperlessNgx": { - "name": "Paperless-ngx", "description": "Übersicht des Paperless-ngx Dokumentenarchivs", "documentsTotal": "Dokumente insgesamt", "documentsInbox": "Posteingang", @@ -2692,7 +3879,6 @@ } }, "patchmon": { - "name": "PatchMon", "description": "", "title": "PatchMon-Statistiken", "totalHosts": "Hosts gesamt", @@ -2759,36 +3945,30 @@ "description": "" }, "hostsNeedingUpdatesWarningAt": { - "label": "", - "description": "" + "label": "" }, "hostsNeedingUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "" }, "securityUpdatesThresholdMode": { "label": "", "description": "" }, "securityUpdatesWarningAt": { - "label": "", - "description": "" + "label": "" }, "securityUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "" }, "hostsWithSecurityUpdatesThresholdMode": { "label": "", "description": "" }, "hostsWithSecurityUpdatesWarningAt": { - "label": "", - "description": "" + "label": "" }, "hostsWithSecurityUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "" }, "upToDateHostsThresholdMode": { "label": "", @@ -2807,12 +3987,10 @@ "description": "" }, "totalOutdatedPackagesWarningAt": { - "label": "", - "description": "" + "label": "" }, "totalOutdatedPackagesCriticalAt": { - "label": "", - "description": "" + "label": "" }, "showOsDistribution": { "label": "", @@ -2843,6 +4021,14 @@ "bars": "", "donut": "" } + }, + "threshold": { + "warningAt": { + "description": "Gelb angeben, wenn der Wert diesen Schwellenwert erreicht" + }, + "criticalAt": { + "description": "Rot eingeben, wenn der Wert diesen Schwellenwert erreicht" + } } }, "error": { @@ -2850,12 +4036,12 @@ } }, "bazarr": { - "name": "", "description": "", "episodes": "", "movies": "", "providers": "", "status": "", + "announcements": "Ankündigungen", "option": { "showMissingEpisodes": { "label": "", @@ -2902,7 +4088,8 @@ "users": "Benutzer", "photos": "Fotos", "videos": "Videos", - "storage": "Verwendeter Speicher" + "storage": "Verwendeter Speicher", + "albumLimit": "Größte Alben (bis zu {count} angezeigt)" }, "immich-albumCarousel": { "name": "Immich Album", @@ -2926,24 +4113,21 @@ } }, "description": "Diashow der Bilder in Ihrem Immich Album", - "noPhotos": "Keine Fotos in diesem Album" + "noPhotos": "Keine Fotos in diesem Album", + "albumPhoto": "Album Foto", + "actions": { + "previousPhoto": "Vorheriges Foto", + "nextPhoto": "Nächstes Foto", + "pauseSlideshow": "Pause slideshow", + "resumeSlideshow": "Diashow fortsetzen", + "toggleSlideshow": "Diashow pausieren oder fortsetzen", + "photo": "Foto- {number}" + } }, "downloads": { "name": "Download Client", "description": "Ermöglicht es Ihnen, Ihre Downloads sowohl von Torrent- als auch von Usenet-Clients anzusehen und zu verwalten.", "option": { - "columns": { - "label": "Anzuzeigende Spalten" - }, - "enableRowSorting": { - "label": "Sortierung von Elementen aktivieren" - }, - "defaultSort": { - "label": "Standardmäßig verwendete Spalte zur Sortierung" - }, - "descendingDefaultSort": { - "label": "Sortierung umkehren" - }, "showCompletedUsenet": { "label": "Usenet Einträge anzeigen die abgeschlossen wurden" }, @@ -2968,12 +4152,6 @@ "limitPerIntegration": { "label": "Elemente pro Integration begrenzen", "description": "Dies begrenzt die Anzahl der Elemente pro Integration, jedoch nicht global" - }, - "columnOrder": { - "label": "" - }, - "columnWidths": { - "label": "" } }, "errors": { @@ -3005,7 +4183,7 @@ }, "id": { "columnTitle": "ID", - "detailsTitle": "" + "detailsTitle": "ID" }, "integration": { "columnTitle": "Integration" @@ -3134,6 +4312,10 @@ "mediaRequests-requestList": { "name": "Liste der Medienanfragen", "description": "Sehen Sie eine Liste aller Medienanfragen von Ihrer Overseerr- oder Jellyseerr-Instanz", + "empty": { + "title": "Noch keine Medienanfragen", + "description": "Suche nach einem Film oder einer Show, um eine Anfrage zu starten." + }, "option": { "linksTargetNewTab": { "label": "Links in neuem Tab öffnen" @@ -3167,12 +4349,16 @@ "failed": "Fehlgeschlagen", "completed": "Abgeschlossen" }, + "unknown": "Unbekannt", "toBeDetermined": "Noch Festzulegen" }, "mediaRequests-requestStats": { "name": "Statistik der Medienanfragen", "description": "Statistiken über Ihre Medienanfragen", - "option": {}, + "empty": { + "title": "Noch keine Anfrage-Aktivität", + "description": "Statistiken werden nach der ersten Medienanfrage angezeigt." + }, "titles": { "stats": { "main": "Medien Statistiken", @@ -3182,8 +4368,7 @@ "declined": "Bereits abgelehnt", "available": "Bereits verfügbar", "tv": "TV Anfragen", - "movie": "Film Anfragen", - "total": "Gesamt" + "movie": "Film Anfragen" }, "users": { "main": "Top Nutzer", @@ -3209,7 +4394,6 @@ }, "currentIndex": "{start}-{end} von {total}", "healthCheck": { - "title": "Gesundheitscheck", "queued": "In der Warteschlange", "status": { "healthy": "Gesund", @@ -3218,41 +4402,36 @@ }, "panel": { "statistics": { - "empty": "Leer", - "transcodes": "Transkodieren", - "transcodesCount": "Transkodierungen", - "healthChecksCount": "Health Check", "filesCount": "Dateien", "savedSpace": "Belegter Speicherplatz", - "healthChecks": "Gesundheitscheck", "videoCodecs": "Codecs", "videoContainers": "Container", "videoResolutions": "Auflösungen" }, "workers": { - "empty": "Leer", "table": { - "file": "Datei", "eta": "Voraussichtlicher Abschluss", - "progress": "Fortschritt", - "transcode": "Transkodieren", - "healthCheck": "Gesundheitscheck" + "progress": "Fortschritt" } }, "queue": { - "empty": "Leer", "table": { - "file": "Datei", - "size": "Größe", - "transcode": "Transkodieren", - "healthCheck": "Gesundheitscheck" + "size": "Größe" } + }, + "common": { + "empty": "Leer", + "file": "Datei", + "healthCheck": "Gesundheitscheck", + "transcode": "Transkodieren", + "transcodes": "Transkodierungen", + "healthChecks": "Health Check" } } }, "mediaMissing": { "name": "", - "description": "", + "description": "Zeigt fehlende und in der Warteschlange befindliche Filme, Episoden und Bücher von {radarr}, {sonarr} und {bindery}", "option": { "showMissing": { "label": "" @@ -3270,7 +4449,8 @@ }, "type": { "movie": "Film", - "episode": "" + "episode": "", + "book": "Buch" }, "empty": { "missing": "", @@ -3301,6 +4481,13 @@ "showPosterImage": { "label": "Poster Bild anzeigen" } + }, + "error": { + "allFeedsFailed": "RSS-Feeds konnten nicht geladen werden. Überprüfen Sie die Feed-URLs und versuchen Sie es erneut." + }, + "warning": { + "partial": "{count, plural, one {# RSS-Feed konnte nicht geladen werden} other {# RSS-Feeds konnten nicht geladen werden!}}", + "stale": "RSS-Feeds konnten nicht aktualisiert werden. Zeige zuvor geladene Einträge." } }, "releases": { @@ -3376,17 +4563,8 @@ "label": "Regulärer Ausdruck" } }, - "edit": { - "label": "Bearbeiten" - }, "editForm": { - "title": "Repository bearbeiten", - "cancel": { - "label": "Abbrechen" - }, - "confirm": { - "label": "Bestätigen" - } + "title": "Repository bearbeiten" }, "importForm": { "title": "Von Docker importieren" @@ -3403,8 +4581,7 @@ "label": "", "token": "", "configured": "", - "notConfigured": "", - "save": "" + "notConfigured": "" } } }, @@ -3431,17 +4608,32 @@ "noProviderResponse": "Keine Antwort vom Anbieter", "unexpected": "" } - } + }, + "expandDetails": "Details für {name} anzeigen", + "collapseDetails": "Details für {name} ausblenden" }, "networkControllerSummary": { - "option": {}, - "card": { - "vpn": { - "countConnected": "{count} verbunden" + "advanced": { + "updated": "Aktualisiert", + "metric": { + "latency": "Latenz", + "ping": "Ping", + "uptime": "Verfügbarkeit", + "users": "Benutzer", + "guests": "Gäste" } }, + "card": { + "vpn": { + "countConnected": "{count, plural, one {# verbunden} other {# verbunden}}", + "label": "VPN" + }, + "wan": "WAN", + "web": "Web", + "wifi": "WLAN", + "lan": "LAN" + }, "error": { - "integrationsDisconnected": "Keine Daten verfügbar, alle Integrationen getrennt", "unknownContentOption": "Unbekannte Inhaltsoption für das Widget der Netzwerk Controller Zusammenfassung: " }, "name": "Netzwerk Controller Zusammenfassung", @@ -3478,7 +4670,6 @@ } }, "error": { - "integrationsDisconnected": "Keine Daten verfügbar, alle Integrationen getrennt", "unknownContentOption": "Unbekannte Inhaltsoption für das Netzwerkstatus Widget: " }, "name": "Netzwerkstatus", @@ -3508,7 +4699,6 @@ "versiontitle": "Versionen", "cputitle": "CPU-Nutzung", "memorytitle": "Speichernutzung", - "cpu": "CPU", "memory": "Speicher", "interfaces": { "name": "Name", @@ -3516,6 +4706,16 @@ "recv": "Empfangen", "title": "Netzwerkschnittstellen" } + }, + "empty": { + "noInterfaces": "Noch keine Netzwerkschnittstellendaten" + }, + "versionUnknown": "Unbekannte Version", + "metricAccessible": "{metric}: {value}%, {status}", + "status": { + "normal": "Normal", + "warning": "Warnung", + "critical": "Kritisch" } }, "notifications": { @@ -3525,8 +4725,21 @@ "option": { "hideLogos": { "label": "" + }, + "messageFormat": { + "label": "Nachrichtenformat", + "option": { + "auto": "Automatisch", + "plain": "Einfacher Text", + "markdown": "Markdown", + "html": "HTML" + } } - } + }, + "openService": "Benachrichtigungsdienst öffnen", + "deleteNotification": "Benachrichtigung von Gotify löschen", + "deleteFailed": "Benachrichtigung konnte nicht gelöscht werden", + "deleteFailedMessage": "Die Benachrichtigung konnte nicht gelöscht werden. Bitte versuchen Sie es erneut." }, "speedtestTracker": { "name": "Speedtest Tracker", @@ -3568,7 +4781,6 @@ } }, "uptimeKuma": { - "name": "Uptime Kuma", "description": "Laufzeit Statistiken von der Uptime Kuma Statusseite überwachen", "option": { "showAverageUptime": { @@ -3605,10 +4817,14 @@ }, "error": { "internalServerError": "Fehler beim Abrufen der Laufzeit Daten" + }, + "status": { + "up": "Upload gesamt", + "down": "Download Geschwindigkeit", + "paused": "Pausiert" } }, "traefik": { - "name": "", "description": "", "option": { "showTcp": { @@ -3629,7 +4845,6 @@ }, "resource": { "routers": "", - "services": "Dienste", "middlewares": "" }, "status": { @@ -3639,7 +4854,20 @@ }, "error": { "internalServerError": "" - } + }, + "resourceType": { + "router": "Router", + "service": "Service", + "middleware": "Middleware" + }, + "resourceStatus": { + "enabled": "Aktiviert", + "disabled": "Deaktiviert", + "warning": "Warnung", + "error": "Fehler", + "unknown": "Unbekannt" + }, + "failedEndpoint": "Fehler: {endpoint}" }, "audioStats": { "name": "Audiostatistiken", @@ -3705,9 +4933,7 @@ "label": "Sichtbare Diagramme", "description": "Wählen Sie die Diagramme aus, die angezeigt werden sollen.", "option": { - "cpu": "CPU", "memory": "Speicher", - "gpu": "GPU", "network": "Netzwerk" } }, @@ -3722,12 +4948,11 @@ } }, "card": { - "cpu": "CPU", "memory": "Arbeitsspeicher", - "gpu": "GPU", "network": "Netzwerk", "up": "OBEN", - "down": "UNTEN" + "down": "UNTEN", + "memoryTooltip": "{used} / {available} ({percent}%)" } }, "systemDisks": { @@ -3753,20 +4978,35 @@ }, "showBackgroundBar": { "label": "Zeige Hintergrundnutzungsleiste" - }, - "visibleStorageVolumes": { - "label": "", - "description": "", - "placeholder": "" } }, "status": { - "unhealthy": "Fehlerhaft" + "unhealthy": "Fehlerhaft", + "smart": "SMART", + "free": "{percentage}% kostenlos" } }, "customApi": { "name": "Benutzerdefinierte API", "description": "Zeigt Daten von jeder externen API mit benutzerdefinierter Konfiguration an.", + "customJsx": { + "noTemplate": "Keine JSX-Vorlage konfiguriert.", + "templateWarnings": "{count} Vorlage Warnungen:", + "requestIdRequired": "Diese Netzwerksteuerung erfordert eine benannte RequestId.", + "unsavedPreview": "Führen Sie den ersten Request-Test im Editor aus, bevor Sie benannte Anfragen testen.", + "invalidParams": "Die Anforderungsparameter sind ungültig.", + "loading": "Anfrage wird geladen...", + "loadRequest": "Ladeanfrage", + "requestFailed": "Die Anfrage ist fehlgeschlagen.", + "retry": "Anfrage wiederholen", + "actionCompleted": "Aktion erfolgreich abgeschlossen.", + "actionSimulated": "Aktion simuliert; keine Anfrage wurde gesendet.", + "actionsDisabledEditMode": "Aktionen sind deaktiviert, während das Board im Bearbeitungsmodus ist.", + "widgetItemUnavailable": "Dieses Widget-Element ist nicht verfügbar.", + "toggle": "Umschalten", + "copied": "Kopiert", + "confirmDelete": "Bestätigen Sie diese zerstörerische Aktion." + }, "option": { "definitionId": { "label": "Definitions ID" @@ -3777,142 +5017,49 @@ } }, "noDefinition": "Keine Definition ausgewählt", - "definitionNotFound": "Widget-Definition nicht gefunden. Möglicherweise wurde sie gelöscht." + "definitionNotFound": "Widget-Definition nicht gefunden. Möglicherweise wurde sie gelöscht.", + "migrationRequired": "Dieses alte, benutzerdefinierte Widget wird beibehalten, muss aber von benutzerdefinierten Widgets auf benutzerdefinierte JSX v2 migriert werden, bevor es ausgeführt werden kann.", + "manageMigration": "Eigene Widgets verwalten", + "contactAdmin": "Einen Administrator kontaktieren.", + "configurationNeedsRepair": "Einstellungen dieses Widgets geändert. Bearbeiten Sie das Widget, um seine Konfiguration zu reparieren.", + "removeFromBoard": "Vom Board entfernen", + "editModePending": "Speichern Sie das Board, um dieses Widget zu laden.", + "picker": { + "group": "Eigene JSX-Widgets", + "empty": "Keine benutzerdefinierten Widgets gefunden", + "preview": "Vorschau", + "sources": "{count, plural, one {# Quelle} other {# Quellen}}", + "requests": "{count, plural, one {# Anfrage} other {# Anfragen}}", + "migrationRequired": "Migration erforderlich", + "migrationDescription": "Dieses platzierte v1-Widget kann noch nicht ausgeführt werden. Kopieren Sie seine gerettete Eingabeaufforderung zu einer LLM, dann fügen Sie die einzelne JSON-Antwort in Homarr ein.", + "manageMigration": "Eigene Widgets verwalten", + "contactAdmin": "Einen Administrator kontaktieren." + }, + "configuration": { + "needsAttention": "Konfiguration muss beachtet werden: {message}", + "advancedOptions": "Erweiterte Einstellungen", + "invalidJson": "Ungültiges JSON" + } }, "beszelSystemTable": { "name": "Beszel Systeme (Tabelle)", "description": "Tabellenansicht aller Beszel-überwachten Systeme mit sortierbaren Spalten und Statusindikatoren", "option": { - "statusFilter": { - "label": "Status Filter" - }, "sortBy": { "label": "Sortieren nach" }, "sortDirection": { "label": "Sortierreihenfolge" - }, - "showCpu": { - "label": "CPU anzeigen" - }, - "showMemory": { - "label": "Arbeitsspeicher anzeigen" - }, - "showDisk": { - "label": "Datenträger anzeigen" - }, - "showGpu": { - "label": "GPU anzeigen" - }, - "showLoadAvg": { - "label": "Zeige Belastungsdurchschnitt" - }, - "showNet": { - "label": "Netzwerk anzeigen" - }, - "showTemp": { - "label": "Temperatur anzeigen" - }, - "showBattery": { - "label": "Akkustand anzeigen" - }, - "showServices": { - "label": "Dienste anzeigen" - }, - "showUptime": { - "label": "Laufzeit anzeigen" - }, - "showAgent": { - "label": "Agent-Version anzeigen" - }, - "columnOrder": { - "label": "" - }, - "columnWidths": { - "label": "" } }, - "noRecords": "Keine Systeme gefunden", "error": { - "internalServerError": "Keine Verbindung zu Beszel. Überprüfen Sie Ihre Integrationseinstellungen.", "layoutSaveTitle": "", "layoutSaveMessage": "" - }, - "column": { - "system": "System", - "cpu": "CPU", - "memory": "Arbeitsspeicher", - "disk": "Datenträger", - "gpu": "GPU", - "loadAvg": "Systemlast", - "net": "Netz", - "temp": "Temperatur", - "battery": "Batterie", - "services": "Dienste", - "uptime": "Betriebszeit", - "agent": "Agent" } }, "beszelSystemGrid": { "name": "Beszel Systems (Grid)", - "description": "", - "option": { - "statusFilter": { - "label": "" - }, - "showCpu": { - "label": "" - }, - "showMemory": { - "label": "Arbeitsspeicher anzeigen" - }, - "showDisk": { - "label": "" - }, - "showGpu": { - "label": "GPU anzeigen" - }, - "showLoadAvg": { - "label": "" - }, - "showNet": { - "label": "" - }, - "showTemp": { - "label": "Temperatur anzeigen" - }, - "showBattery": { - "label": "" - }, - "showServices": { - "label": "Dienste anzeigen" - }, - "showUptime": { - "label": "" - }, - "showAgent": { - "label": "" - } - }, - "error": { - "internalServerError": "" - }, - "empty": { - "noSystems": "" - }, - "metric": { - "cpu": "CPU", - "memory": "Arbeitsspeicher", - "disk": "", - "gpu": "GPU", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "Dienste", - "uptime": "Verfügbarkeit", - "agent": "Agent" - } + "description": "" }, "beszelAlerts": { "name": "Beszel-Meldungen", @@ -3926,11 +5073,12 @@ } }, "empty": "", - "error": { - "internalServerError": "" - }, "history": "Verlauf", "resolved": "Gelöst", + "alertDescription": { + "statusDuration": "Runter für {minutes} min", + "threshold": "Überschreitet {value} über {minutes} Min." + }, "status": { "triggered": "Ausgelöst", "ok": "Ok" @@ -3977,16 +5125,16 @@ "noSystems": "Keine Systeme gefunden" }, "error": { - "internalServerError": "Keine Verbindung zu Beszel möglich. Überprüfe deine Integrations-Einstellungen.", "liveConnectionFailed": "", "switchToHistorical": "", - "systemNotFound": "" + "systemNotFound": "", + "selectionSaveTitle": "Auswahl konnte nicht gespeichert werden", + "selectionSaveMessage": "Ihr System oder die Zeitspanne konnte nicht gespeichert werden. Bitte versuchen Sie es erneut." }, "chart": { "cpu": { "title": "CPU Auslastung", - "subtitle": "Durchschnittliche Systemweite CPU-Auslastung", - "series": "CPU" + "subtitle": "Durchschnittliche Systemweite CPU-Auslastung" }, "memory": { "title": "Speicherverbrauch", @@ -4028,39 +5176,550 @@ "title": "Docker-Netzwerk-E/A", "subtitle": "Netzwerkverkehr der Docker-Container" } + }, + "period": { + "live": "Live", + "oneHour": "1h", + "twelveHours": "12h", + "oneDay": "24h", + "oneWeek": "1W", + "thirtyDays": "30T" } }, - "wud": { - "name": "Was ist Docker hoch", - "description": "Zeigt an, wie viele überwachte Container über Updates verfügen.", - "title": "Was ist Docker hoch", - "monitored": "Überwacht", - "updatesAvailable": "{count, plural, one {# Update verfügbar} other {# Updates verfügbar}}", - "updateAvailable": "Update verfügbar", - "openReleaseNotes": "Versionshinweise öffnen", + "assistant": { + "name": "Assistent", + "description": "Haben Sie ein vollständiges Assistentengespräch direkt auf Ihrem Board.", + "unavailable": { + "title": "Assistent nicht verfügbar", + "description": "Melden Sie sich an und bitten Sie einen Administrator, den Assistenten aus dem Verwaltungsbereich zu konfigurieren." + }, + "compact": { + "title": "Assistent", + "description": "Ändern Sie dieses Widget, um hier zu chatten, oder öffnen Sie die ganze Unterhaltung.", + "open": "Offener Assistent", + "openTitle": "Assistent in Seitenleiste öffnen", + "openDescription": "Das Gespräch bleibt auf einer aktiven Oberfläche.", + "returnToWidget": "Die Unterhaltung auf dieses Widget zurückgeben", + "otherWidgetTitle": "Assistent aktiv in einem anderen Widget", + "otherWidgetDescription": "Nur eine Konversationsfläche bleibt gleichzeitig aktiv.", + "useHere": "Den Assistenten dieses Widgets verwenden" + } + }, + "beszel": { + "error": { + "internalServerError": "Keine Verbindung zu Beszel möglich. Überprüfe deine Integrations-Einstellungen." + }, + "empty": { + "noSystems": "Keine Systeme gefunden" + }, + "options": { + "statusFilter": { + "label": "Status Filter" + }, + "showCpu": { + "label": "CPU anzeigen" + }, + "showMemory": { + "label": "Arbeitsspeicher anzeigen" + }, + "showDisk": { + "label": "Datenträger anzeigen" + }, + "showGpu": { + "label": "GPU anzeigen" + }, + "showLoadAvg": { + "label": "Zeige Belastungsdurchschnitt" + }, + "showNet": { + "label": "Netzwerk anzeigen" + }, + "showTemp": { + "label": "Temperatur anzeigen" + }, + "showBattery": { + "label": "Akkustand anzeigen" + }, + "showServices": { + "label": "Dienste anzeigen" + }, + "showUptime": { + "label": "Laufzeit anzeigen" + }, + "showAgent": { + "label": "Agent-Version anzeigen" + } + }, + "metric": { + "system": "System", + "source": "Integration", + "hostname": "Hostname", + "cpuModel": "CPU-Modell", + "cores": "Kerne", + "memoryTotal": "Speichersumme", + "memory": "Arbeitsspeicher", + "disk": "Datenträger", + "loadAvg": "Systemlast", + "net": "Netz", + "temp": "Temperatur", + "battery": "Batterie", + "uptime": "Verfügbarkeit", + "agent": "Agent" + } + }, + "llamacpp": { + "name": "llama.cpp", + "description": "Zeigen Sie die gesunde, geladene Modell- und Generationsgeschwindigkeit Ihres lokalen Lama.cpp Servers an.", + "title": "llama.cpp", + "status": { + "unhealthy": "Ungesund ({status})" + }, + "idle": "Leerlauf", + "speedTooltip": { + "current": "Aktuelle Generierungsgeschwindigkeit", + "average": "Durchschnittliche Generierungsgeschwindigkeit seit dem Start", + "request": "Durchschnittliche Geschwindigkeit seit Beginn dieser Anfrage" + }, + "busy": "{count, plural, one {# Anfrage läuft} other {# Anfragen die ausgeführt werden}}", + "modelInfo": { + "context": "Kontext", + "size": "Größe der Datei", + "parameters": "Parameter", + "model": "Modell", + "quantization": "Quantifizierung" + }, + "stats": { + "tokensProcessed": "Verarbeitete Token", + "contextUsage": "Kontext/KV-Nutzung", + "cacheHitRate": "Trefferrate im Zwischenspeicher", + "tokensGenerated": "Token generiert" + }, + "error": { + "unreachable": "llama-Server ist nicht erreichbar" + }, + "unit": { + "speed": "{value} t/s", + "parameters": "{value}B", + "none": "—", + "speedShort": "t/s" + }, "option": { "showTitle": { "label": "Titel anzeigen" }, - "showRing": { - "label": "Update-Ring anzeigen" + "showModelInfo": { + "label": "Model-Info anzeigen" }, - "layout": { - "label": "Ansicht", + "showContextUsage": { + "label": "Kontextnutzung anzeigen" + }, + "showCacheHitRate": { + "label": "Trefferrate anzeigen" + }, + "showSpeedStats": { + "label": "Geschwindigkeitsstatistik anzeigen" + }, + "showRequests": { + "label": "Anfrage-Laden anzeigen" + }, + "showTokenStats": { + "label": "Token insgesamt anzeigen" + }, + "showSpeculative": { + "label": "spekulative Dekodierung anzeigen" + } + }, + "advanced": { + "promptSpeed": "Schnelligkeit", + "avgSpeed": "Durchschnittliche Erzeugung", + "requests": "Anfragen", + "deferred": "Aufgeschoben", + "slots": "{processing}/{total} Plätze belegt", + "speculative": "Spekulative Dekodierung", + "avgPrompt": "Avg-Prompt", + "specDrafts": "Spec. Entwürfe", + "specAccepted": "Spec. Akzeptierte Token", + "specDraftTokens": "Spec. Zeichenentwürfe" + } + }, + "stats": { + "name": "Statistiken", + "description": "Kombinieren Sie Statistiken aus Ihren Integrationen in einem konfigurierbaren Widget.", + "configure": "Metriken konfigurieren", + "refresh": "Statistiken aktualisieren", + "empty": "Widget-Einstellungen öffnen, Integrationen auswählen und Metriken hinzufügen.", + "editorHelp": "Metriken aus den für dieses Widget ausgewählten Integrationen hinzufügen. Änderungen werden in Ihrem Dashboard gespeichert.", + "source": "Integration", + "metric": "Metrisch", + "noMetrics": "Keine Statistiken für diese Integration verfügbar", + "add": "Metrik hinzufügen", + "label": "Eigene Bezeichnung", + "hidden": "Versteckt", + "compact": "Kompakte Zahlen", + "moveUp": "Nach oben bewegen", + "moveDown": "Nach unten bewegen", + "remove": "Metrik entfernen", + "loading": "Lade…", + "unavailable": "Unavailable", + "refreshFailed": "Aktualisierung fehlgeschlagen — Anzeige der gespeicherten Daten", + "stale": "Gespeicherte Daten — Aktualisieren zum Aktualisieren", + "table": { + "value": "Wert", + "status": "Status" + }, + "option": { + "table": { + "label": "Tabellenansicht" + }, + "rows": { + "label": "Kompakte Zeilen" + }, + "showIcon": { + "label": "Quell-Symbol anzeigen" + }, + "spacing": { + "label": "Abstand", "option": { - "horizontal": { - "label": "Horizontal" + "xs": { + "label": "Kompakt" }, - "vertical": { - "label": "Vertikal" + "sm": { + "label": "Bequemer" + }, + "md": { + "label": "Geräumig" } } }, - "showUpdateList": { - "label": "Container-Update-Liste anzeigen", - "description": "Listet jeden überwachten Container auf, der eine Bildaktualisierung zur Verfügung hat" + "entries": { + "label": "Metriken" + }, + "plain": { + "label": "Kartenhintergründe entfernen" } - } + }, + "fetchFailed": "Statistiken können nicht abgerufen werden", + "viewOptions": "Diese Ansicht anpassen", + "moreMetrics": "{count} mehr in der erweiterten Ansicht", + "localHelp": "Layout, Formatierung und Sichtbarkeit gelten nur für diese Ansicht. Shared Board-Einstellungen bleiben unverändert.", + "plain": "Kartenhintergründe entfernen", + "resetView": "Ansicht zurücksetzen", + "allHidden": "Alle Metriken sind in dieser Ansicht ausgeblendet. Benutzen Sie diese Ansicht anpassen, um sie wiederherzustellen." + }, + "wazuh": { + "target": { + "api": "Wazuh Server API", + "indexer": "Wazuh Indexer", + "wazuh": "Wazuh" + }, + "severity": { + "low": "Niedrig", + "medium": "Mittel", + "high": "Hoch", + "critical": "Kritisch" + }, + "error": { + "unauthorized": { + "title": "{target} hat die Anmeldedaten abgelehnt", + "description": "Überprüfen Sie den Benutzernamen und das Passwort, das auf der Wazuh Integration gespeichert wurde. Die Server API (Port 55000) und der Indexer (Port 9200) verwenden separate Benutzer." + }, + "certificate": { + "title": "{target} Zertifikat ist nicht vertrauenswürdig", + "description": "Wazuh verwendet standardmäßig ein selbstsigniertes Zertifikat. Führen Sie \"Testverbindung\" aus und vertrauen Sie dem Zertifikat oder fügen Sie Ihre CA unter Einstellungen → Zertifikate hinzu." + }, + "unreachable": { + "title": "Kann {target} nicht erreichen", + "description": "Der Host hat die Verbindung abgelehnt oder fallen gelassen. Überprüfen Sie URL, Port und Firewall. Der Indexer lauscht nur auf localhost in einer all-in-one Installation." + }, + "timeout": { + "title": "{target} Timeout", + "description": "Keine Antwort innerhalb von 15 Sekunden. Der Dienst kann überlastet sein oder die Adresse ist falsch." + }, + "status": { + "title": "{target} hat einen Fehler zurückgegeben", + "description": "Die Anfrage ist mit dem HTTP-Status {status} fehlgeschlagen." + }, + "invalidResponse": { + "title": "Unerwartete Antwort von {target}", + "description": "Überprüfen Sie, ob die URL auf die Wazuh Server API oder den Indexer verweist und nicht auf das Dashboard." + }, + "indexerRequired": { + "title": "Zugangsdaten des Wazuh Indexers erforderlich", + "description": "Warnungen, Verwundbarkeiten und Datei-Integritäts-Ereignisse werden vom Wazuh-Indexer gelesen. Fügen Sie der Integration eine Indexer-URL, Benutzername und Passwort hinzu." + }, + "unknown": { + "title": "Konnte Daten von {target} nicht laden", + "description": "Überprüfen Sie die Homarr-Protokolle für Details." + } + }, + "range": { + "1h": "1h", + "24h": "24h", + "7d": "7T", + "30d": "30T" + }, + "levelTooltip": "Regellevel {level} ({severity})" + }, + "wazuhAgents": { + "name": "Wazuh Agenten", + "description": "Sortierbare Liste von Wazuh Agenten mit Status, Betriebssystem, Version und letzter Bewahrung", + "option": { + "statusFilter": { + "label": "Agenten anzeigen" + }, + "sortBy": { + "label": "Sortieren nach" + }, + "showVersion": { + "label": "Zeige Wazuh Version Spalte" + }, + "showGroups": { + "label": "Gruppen-Spalte anzeigen" + } + }, + "title": "Agenten", + "total": "{count} Agenten", + "status": { + "active": "Aktiv", + "disconnected": "Verbindung getrennt", + "neverConnected": "Nie verbunden", + "pending": "Ausstehend" + }, + "statusLabel": { + "active": "Aktiv", + "disconnected": "Verbindung getrennt", + "never_connected": "Nie verbunden", + "pending": "Ausstehend", + "unknown": "Unbekannt" + }, + "live": "Live", + "snapshot": "Snapshot {age} alt", + "snapshotHint": "Lesen Sie vom Wazuh Agent Snapshot (wazuh-monitoring), der bei {time}aufgenommen wurde. Fügen Sie Server-API-Zugangsdaten für Live-Daten hinzu.", + "staleSnapshot": "Der Agenten-Snapshot von {time} ist veraltet. Überprüfen Sie, ob der Wazuh Dashboard-Überwachungsauftrag ausgeführt wird, oder fügen Sie Server-API-Anmeldeinformationen hinzu.", + "noDisconnected": "Alle Agenten sind verbunden", + "empty": "Keine Agenten entsprechen diesem Filter", + "column": { + "status": "Status", + "name": "Job Name", + "ip": "IP", + "os": "OS", + "version": "Version", + "lastKeepAlive": "Keepalive", + "groups": "Gruppen" + }, + "outdated": "Ältere als die neueste Agent Version ({version})" + }, + "wazuhAlerts": { + "name": "Wazuh Alarme Feed", + "description": "Aktuelle Wazuh Warnungen mit Level, MITRE ATT&CK Techniken, Agent und Quell-IP", + "option": { + "minLevel": { + "label": "Minimale Regelstufe", + "description": "Wazuh Level: 0-6 niedrig, 7-11 Medium, 12-14 hoch, 15+ kritisch" + }, + "hours": { + "label": "Zeitfenster (Stunden)" + }, + "limit": { + "label": "Anzahl der Warnungen" + }, + "showMitre": { + "label": "Show MITRE ATT&CK techniques" + }, + "showAgent": { + "label": "Agenten anzeigen" + }, + "showSourceIp": { + "label": "Quell-IP anzeigen" + }, + "showRuleId": { + "label": "Regel-ID anzeigen" + } + }, + "title": "Alarme · Level {level}+ · {hours}h", + "empty": "Keine Warnungen auf diesem Level. Alle ruhig.", + "rule": "Regel- {id}", + "openInDashboard": "Warnung im Wazuh Dashboard öffnen" + }, + "wazuhSummary": { + "name": "Wazuh Alarm-Schwere", + "description": "Warnungs-Schweregrafik mit einem Trend zum vorherigen Zeitraum", + "option": { + "range": { + "label": "Zeitbereich" + }, + "showTrend": { + "label": "Trend gegenüber dem vorherigen Zeitraum anzeigen" + }, + "showFooter": { + "label": "Footer anzeigen" + } + }, + "title": "Alarm-Schwere · {range}", + "alerts": "warnungen", + "none": "Keine Warnungen", + "trend": { + "new": "neu", + "tooltip": "Vorheriger Zeitraum: {previous}" + }, + "previous": "Vorheriger {range}: {count}", + "maxLevel": "Max. Level {level}", + "health": "Index Gesundheit: {status}", + "manager": "Manager- {version}" + }, + "wazuhTimeline": { + "name": "Wazuh alerts timeline", + "description": "Gestapelte Diagramm der Wazuh Warnungen mit der Zeit nach Schwere", + "option": { + "range": { + "label": "Zeitbereich" + }, + "interval": { + "label": "Intervall" + }, + "chartType": { + "label": "Diagrammtyp" + }, + "yScale": { + "label": "Y-Achsen-Skala", + "description": "Quadratwurzel hält hohe und kritische Warnungen neben Tausenden von niedrigen sichtbar" + }, + "minLevel": { + "label": "Minimale Regelstufe" + }, + "showLegend": { + "label": "Legende mit Gesamtsummen anzeigen" + } + }, + "title": "Alarme Zeitleiste · {range}", + "total": "{count} Warnungen", + "interval": "pro {interval}" + }, + "wazuhTopList": { + "name": "Wazuh Top-Liste", + "description": "Top-Regeln, Agenten, Quell-IPs oder MITRE ATT&CK Taktik und Techniken nach Alarmzählung", + "option": { + "kind": { + "label": "Rang" + }, + "range": { + "label": "Zeitbereich" + }, + "limit": { + "label": "Anzahl der Einträge" + }, + "minLevel": { + "label": "Minimale Regelstufe" + }, + "showBars": { + "label": "Balken anzeigen" + } + }, + "title": { + "rules": "Top-Regeln · {range}", + "agents": "Top Agenten · {range}", + "sourceIps": "Top-Quell-IPs · {range}", + "mitreTactics": "MITRE-Taktik · {range}", + "mitreTechniques": "MITRE techniques · {range}" + }, + "empty": { + "rules": "Keine Warnungen in diesem Zeitraum", + "agents": "Keine Warnungen in diesem Zeitraum", + "sourceIps": "Keine Warnungen mit Quell-IP in diesem Zeitraum", + "mitreTactics": "Keine Warnungen für MITRE ATT&CK in diesem Zeitraum", + "mitreTechniques": "Keine Warnungen für MITRE ATT&CK in diesem Zeitraum" + }, + "totalTooltip": "{count} passende Warnungen", + "private": "LAN", + "public": "Öffentlich", + "agents": "Gesehen auf {count} Agenten", + "others": "{count} weitere Warnungen in anderen Einträgen" + }, + "wazuhVulnerabilities": { + "name": "Wazuh Schwachstellen", + "description": "Verwundbarkeit zählt, Top-CVEs und die verwundbarsten Agenten", + "option": { + "cveOrder": { + "label": "Rang Lebensläufe nach" + }, + "minSeverity": { + "label": "CVE Schwere" + }, + "cveLimit": { + "label": "Anzahl der Lebensläufe" + }, + "agentLimit": { + "label": "Anzahl der Agenten" + }, + "showAgents": { + "label": "Zeige die verwundbarsten Agenten" + } + }, + "title": "Schwachstellen", + "topCves": "Top CVes", + "score": "Punktzahl", + "agentsShort": "Agenten", + "topAgents": "Schwächste Agenten", + "criticalHigh": "Krit / Hoch", + "totalTooltip": "{count} Ergebnisse auf {agents} Agenten", + "affected": "{count} Agenten", + "empty": "Keine Schwachstellen gefunden", + "distribution": "Schweregrad Verteilung. {unscored} Ergebnisse ohne Punktzahl werden nicht angezeigt.", + "worst": "Schlimm: {id} ({score}) auf {agents} Agenten" + }, + "wazuhFim": { + "name": "Wazuh Dateiintegrität", + "description": "Aktuelle Dateiintegritätsüberwachung (Syscheck) Ereignisse", + "option": { + "range": { + "label": "Zeitbereich" + }, + "event": { + "label": "Ereignisse" + }, + "limit": { + "label": "Anzahl der Ereignisse" + }, + "includeRegistry": { + "label": "Windows Registry-Ereignisse einbeziehen" + } + }, + "title": "Dateiintegrität · {range}", + "event": { + "added": "Hinzugefügt am", + "modified": "Geändert", + "deleted": "Gelöscht", + "unknown": "Geändert" + }, + "empty": "Keine Integritäts-Ereignisse in diesem Zeitraum", + "user": "von {user}", + "registry": "Registry" + }, + "wazuhAuthFailures": { + "name": "Wazuh Authentifizierungsfehler", + "description": "Fehlgeschlagene Logins und Brute-Force-Alarme pro Agent mit stündlichen Sparklines", + "option": { + "hours": { + "label": "Zeitfenster (Stunden)" + }, + "limit": { + "label": "Anzahl der Agenten" + }, + "showSourceIps": { + "label": "Top-Quell-IPs anzeigen" + } + }, + "title": "Auth Fehler · {hours}h", + "seriesTooltip": "Alle Agenten über die letzte {hours}h", + "peak": "Maximaler {count}/bucket", + "empty": "Keine fehlgeschlagenen Anmeldungen in diesem Zeitraum", + "failed": "Fehlerhafte Anmeldungen", + "failedHint": "Einzelne Authentifizierungsfehler (sshd, PAM, Windows-Anmeldung, ungültige Benutzer)", + "bruteForce": "Brute-Kraft", + "bruteForceHint": "Korrelierte Brute-Force-Regeln (mehrere Fehler in einem kurzen Zeitraum, MITRE T1110)", + "sourceIps": "Quell-IPs", + "ipTooltip": "{ip}: {count} Fehler", + "bruteForceCount": "{count} brutale Kraft" } }, "widgetPreview": { @@ -4073,7 +5732,76 @@ } }, "board": { + "emptyState": { + "title": "Erstelle deine erste Ansicht", + "description": "Fügen Sie ein Widget oder eine App hinzu, oder verbinden Sie einen Dienst und verwenden Sie seine Daten auf diesem Board.", + "addWidget": "Widget hinzufügen", + "addApp": "App hinzufügen", + "connectService": "Verbinde Dienst" + }, + "setupChecklist": { + "title": "Dieses Board nützlich machen", + "description": "Abholen, wo du aufgehört hast. Der Fortschritt folgt dem Inhalt auf diesem Board.", + "collapse": "Setup-Checkliste einklappen", + "dismiss": "Setup-Checkliste schließen", + "resume": "Setup fortsetzen ({completed}/{total})", + "progress": "Forum-Setup-Fortschritt", + "step": { + "content": { + "label": "Nützlichen Inhalt hinzufügen", + "description": "Wählen Sie ein Widget aus und konfigurieren Sie es bevor es platziert wird." + }, + "app": { + "label": "App anheften", + "description": "Halten Sie einen Service oder ein Werkzeug mit einem Klick von diesem Board entfernt." + }, + "service": { + "label": "Verbinde einen Dienst", + "description": "Live-Daten und Aktionen für kompatible Widgets freischalten.", + "permissionDescription": "Ein Administrator kann einen Dienst anschließen, um Live-Daten zu entsperren.", + "action": "Verbinden" + } + } + }, "action": { + "addContent": "Foreninhalt hinzufügen", + "settings": "Boardeinstellungen", + "switch": "Board wechseln", + "switcher": { + "title": "Board wechseln", + "search": { + "empty": "Keine Boards stimmen überein \"{search}\"." + }, + "results": "Verfügbare Boards", + "preview": "Vorschau von {name} mit {count} Elementen", + "currentHidden": "Aktuelles Board: {name}", + "keyboard": { + "navigate": "Navigate", + "open": "Öffnen", + "instructions": "Geben Sie ein, um die Boards zu filtern. Benutzen Sie die Pfeiltasten um die Ergebnisse zu bewegen und Enter um ein Board zu öffnen." + }, + "empty": { + "title": "Keine anderen Boards", + "description": "Es gibt keine anderen Boards, auf die Sie zugreifen können." + }, + "error": "Foren konnten nicht geladen werden." + }, + "create": { + "availability": { + "checking": "Verfügbarkeit wird überprüft…", + "available": "{name} ist verfügbar" + }, + "notification": { + "success": { + "title": "Board erstellt", + "message": "Board {name} wurde erstellt" + }, + "error": { + "title": "Brett kann nicht erstellt werden", + "message": "Board {name} konnte nicht erstellt werden" + } + } + }, "duplicate": { "title": "Board duplizieren", "message": "Dies wird das Board {name} mit all seinen Inhalten duplizieren. Wenn Widgets Integrationen, hinterlegt sind die Sie nicht verwenden dürfen, werden diese entfernt.", @@ -4089,14 +5817,19 @@ } }, "edit": { + "enter": "Board bearbeiten", + "save": "Brett speichern", + "exit": "Bearbeitungsmodus beenden", "notification": { "success": { - "title": "Änderungen erfolgreich angewendet", "message": "Das Board wurde erfolgreich gespeichert" }, "error": { - "title": "Änderungen konnten nicht angewendet werden", "message": "Das Board konnte nicht gespeichert werden" + }, + "loadError": { + "title": "Bearbeitung kann nicht gestartet werden", + "message": "Der Board-Editor konnte nicht geladen werden. Ihr Dashboard ist noch im Ansichtsmodus verfügbar." } }, "confirmLeave": { @@ -4104,62 +5837,6 @@ "message": "Sie haben ungespeicherte Änderungen, sind sie sicher dass sie abbrechen möchten?" } }, - "oldImport": { - "label": "Import von Homarr vor Version 1.0.0", - "notification": { - "success": { - "title": "Import erfolgreich", - "message": "Das Board wurde erfolgreich importiert" - }, - "error": { - "title": "Import fehlgeschlagen", - "message": "Das Board konnte nicht importiert werden, überprüfen Sie die Protokolle für weitere Details" - } - }, - "form": { - "file": { - "label": "Wähle eine JSON-Datei", - "invalidError": "Ungültige Konfigurationsdatei" - }, - "apps": { - "label": "Apps", - "avoidDuplicates": { - "label": "Duplikate vermeiden", - "description": "Ignoriert Apps, bei denen eine App mit dem gleichen href bereits existiert" - }, - "onlyImportApps": { - "label": "Nur Apps importieren", - "description": "Fügt nur die Apps hinzu. Das Board selbst muss manuell neu erstellt werden" - } - }, - "name": { - "label": "Board Name" - }, - "screenSize": { - "label": "Bildschirmgröße", - "description": "In Versionen vor 1.0 gab es drei verschiedene Modi, so dass Sie die Anzahl der Spalten für jede Bildschirmgröße festlegen konnten.", - "option": { - "sm": "Klein", - "md": "Mittel", - "lg": "Groß" - } - }, - "sidebarBehavior": { - "label": "Verhalten der Seitenleiste", - "description": "Seitenleisten wurden in 1.0 entfernt, Sie können wählen, was mit den Elementen in ihnen passieren soll.", - "option": { - "lastSection": { - "label": "Letzter Abschnitt", - "description": "Seitenleiste wird unterhalb des letzten Abschnitts angezeigt" - }, - "removeItems": { - "label": "Elemente entfernen", - "description": "Elemente in der Seitenleiste werden entfernt" - } - } - } - } - }, "quickCreateApp": { "modal": { "title": "Jetzt eine App erstellen", @@ -4167,6 +5844,12 @@ } } }, + "landmark": { + "canvas": "Dashboard Leinwand", + "leftRail": "Linke Dashboard-Schiene", + "rightRail": "Rechter Dashboard-Schiene", + "items": "Dashboard-Elemente" + }, "field": { "pageTitle": { "label": "Seitentitel" @@ -4236,7 +5919,8 @@ } }, "primaryColor": { - "label": "Primärfarbe" + "label": "Primärfarbe", + "locked": "Ihr Administrator behält die Farbe der Instanzmarke auf jedem Board." }, "secondaryColor": { "label": "Sekundärfarbe" @@ -4276,9 +5960,6 @@ "xl": "Sehr groß" } }, - "name": { - "label": "Name" - }, "isPublic": { "label": "Öffentlich", "description": "Öffentliche Boards sind für jedermann zugänglich, auch ohne Benutzerkonto." @@ -4298,9 +5979,44 @@ "title": "Ansicht", "responsive": { "title": "Reaktive Layouts", + "description": "Jedes Layout behält seine eigenen Widget-Positionen und -Größen. Mobile und Base sind immer verfügbar; fügen Sie benutzerdefinierte Layouts an jedem zusätzlichen Haltepunkt hinzu.", "action": { "add": "Layout hinzufügen" } + }, + "role": { + "mobile": "Mobil", + "base": "Basis", + "custom": "Eigene" + }, + "custom": { + "defaultName": "Benutzerdefiniertes Layout" + }, + "mobile": { + "breakpointDescription": "Mobile wird immer von 0px bis zum nächsten Layout-Haltepunkt verwendet." + }, + "preview": { + "columns": "spalten", + "empty": "Dieses Layout ist leer", + "dynamicSection": "Dynamischer Abschnitt", + "editorWidthLabel": "{layoutName} · {width}px" + }, + "reset": { + "action": "Von Basis zurücksetzen", + "confirm": { + "title": "Reset {layoutName}?", + "message": "Dadurch wird jede gespeicherte Position und Größe in diesem Layout durch ein neues Layout aus Basis ersetzt. Dies kann nicht rückgängig gemacht werden." + } + }, + "edit": { + "action": "Layout bearbeiten", + "saveAndEdit": "Speichern und bearbeiten", + "save": "Layout speichern", + "cancel": { + "action": "Layout-Bearbeitung abbrechen", + "title": "Änderungen des Layouts verwerfen?", + "message": "Ihre ungespeicherten Änderungen an diesem Layout werden verworfen." + } } }, "background": { @@ -4337,10 +6053,7 @@ "rename": { "label": "Board umbenennen", "description": "Das Ändern des Namens wird alle Links zu diesem Board aufheben.", - "button": "Namen ändern", - "modal": { - "title": "Board umbenennen" - } + "button": "Namen ändern" }, "visibility": { "label": "Sichtbarkeit des Boards ändern", @@ -4364,9 +6077,7 @@ } }, "delete": { - "label": "Board löschen", "description": "Sobald Sie ein Board löschen, gibt es kein zurück mehr. Bitte seien sie sich dessen bewusst.", - "button": "Board löschen", "confirm": { "title": "Board löschen", "description": "Sind Sie sicher, dass Sie dieses Board löschen möchten? Dies wird das Board und seinen gesamten Inhalt permanent löschen." @@ -4411,28 +6122,41 @@ }, "layout": { "field": { - "name": { - "label": "Name" - }, "columnCount": { "label": "Anzahl der Spalten" }, "breakpoint": { "label": "Breakpoint", "description": "Das Layout wird auf allen Bildschirmen, die größer als dieser breakpoint sind, bis zum nächsten größeren breakpoint verwendet." + }, + "gutters": { + "label": "Feste Seitenleisten", + "description": "Reservieren Sie auf beiden Seiten bis zu drei Armaturensäulen.", + "left": { + "label": "Left sidebar", + "description": "Diesen Bereich während der Dashboard-Scrollen sichtbar halten.", + "thumbLabel": "Left sidebar width" + }, + "right": { + "label": "Sidebar rechts", + "description": "Diesen Bereich während der Dashboard-Scrollen sichtbar halten.", + "thumbLabel": "Breite der rechten Seitenleiste" + }, + "width": { + "label": "Breite in Spalten" + }, + "preview": { + "label": "Vorschau des Dashboard-Layouts" + } } } }, "management": { "metaTitle": "Verwaltung", - "title": { - "morning": "Guten Morgen, {username}", - "afternoon": "Guten Nachmittag, {username}", - "evening": "Guten Abend, {username}" - }, "notFound": { "title": "Nicht gefunden", - "text": "Konnte die angeforderte Ressource nicht finden" + "text": "Konnte die angeforderte Ressource nicht finden", + "backToHome": "Zurück zum Management-Haus" }, "error": { "title": "Diese Seite konnte nicht geladen werden", @@ -4441,19 +6165,10 @@ }, "navbar": { "items": { - "workshop": "Workshop", "home": "Startseite", - "boards": "Boards", - "apps": "Apps", - "integrations": "Integrationen", - "searchEngies": "Suchmaschinen", - "medias": "Medien", "users": { - "label": "Benutzer", "items": { - "manage": "Verwalten", - "invites": "Einladungen", - "groups": "Gruppen" + "manage": "Verwalten" } }, "tools": { @@ -4461,10 +6176,7 @@ "items": { "docker": "Docker", "kubernetes": "Kubernetes", - "logs": "Logs", "api": "API & MCP", - "certificates": "Zertifikate", - "tasks": "Aufgaben", "backup": "" } }, @@ -4478,21 +6190,12 @@ "sourceCode": "Quellcode" } }, - "about": "Über" + "about": "Über", + "assistant": "Assistent" } }, "page": { "home": { - "statistic": { - "board": "Boards", - "user": "Benutzer", - "invite": "Einladungen", - "integration": "Integrationen", - "app": "Apps", - "group": "Gruppen", - "searchEngine": "Suchmaschinen", - "media": "Medien" - }, "statisticLabel": { "boards": "Boards", "resources": "Ressourcen", @@ -4530,13 +6233,8 @@ "tooltip": "Dieses Board wird als Ihr mobiles Board angezeigt" } }, - "duplicate": { - "label": "Board duplizieren" - }, "delete": { - "label": "Dauerhaft löschen", "confirm": { - "title": "Board löschen", "description": "Sind Sie sicher, dass Sie das Board {name} löschen möchten?" } } @@ -4545,28 +6243,82 @@ "public": "Dieses Board ist öffentlich", "private": "Dieses Board ist privat" }, - "noResults": { - "title": "" + "preview": { + "label": "Layout Vorschau für {name}, mit {count} Elementen", + "unknownCreator": "Unbekannter Ersteller" }, - "modal": { - "createBoard": { - "field": { - "name": { - "label": "Name" - } - } - } + "noResults": { + "title": "", + "description": "Erstellen Sie ein Board, um Ihre Apps und Widgets an einem Ort anzuordnen." } }, "media": { "includeFromAllUsers": "Medien von allen Benutzern einbeziehen" }, "user": { - "back": "Zurück zu den Benutzern", "fieldsDisabledExternalProvider": "Bestimmte Felder sind deaktiviert, da sie von einem externen Authentifizierungsanbieter verwaltet werden.", "setting": { "general": { "title": "Allgemein", + "header": { + "title": "Header-Studio", + "badge": "Persönlich", + "description": "Ziehen Sie die Steuerelemente irgendwo in der Reihe. Linke, Mitte und Rechts bleiben fixiert, während die Steuerung um sie herum umschaltet.", + "device": { + "desktop": "Desktop", + "mobile": "Mobil" + }, + "zones": { + "left": "Links", + "center": "Mittig", + "right": "Rechts" + }, + "action": { + "hide": "Header ausblenden", + "show": "Header anzeigen", + "configure": "Verschiebe oder konfiguriere {item}", + "remove": "{item} entfernen", + "dropIntoZone": "In den Abschnitt {zone} verschieben" + }, + "preview": { + "board": "Dashboard-Vorschau für {name}", + "empty": "Kein Dashboard-Layout verfügbar" + }, + "available": { + "title": "Verfügbare Steuerelemente", + "description": "Fügen Sie ein Steuerelement hinzu und ziehen Sie dann den vollen Knopf oben in die Position.", + "requiredAlways": "Diese Steuerung ist erforderlich, aber Sie können sie überall in der Kopfzeile verschieben.", + "allAdded": "Jede eingebaute Steuerung ist bereits in Ihrem Header.", + "add": "{item} hinzufügen", + "boardShortcut": "Board-Verknüpfung", + "chooseBoard": "Board auswählen" + }, + "configuration": { + "description": "Diese Steuerung bleibt die gleiche Größe wie im Live-Header.", + "searchDisplay": { + "input": "Suchleiste", + "icon": "Nur Symbol" + }, + "logoDisplay": { + "logo": "Nur Logo", + "logoAndText": "Logo + Text" + } + }, + "items": { + "logo": "Logo", + "search": "Suchen", + "home": "Home Board", + "boardSwitcher": "Boards", + "assistant": "Assistent", + "docker": "Docker", + "boardEdit": "Board bearbeiten", + "boardSettings": "Boardeinstellungen", + "settings": "Ihre Einstellungen", + "themeToggle": "Theme umschalten", + "user": "Konto", + "boardUnavailable": "Board nicht verfügbar" + } + }, "item": { "language": "Sprache und Region", "board": { @@ -4600,14 +6352,10 @@ }, "security": { "title": "Sicherheit" - }, - "board": { - "title": "Boards" } }, "list": { - "metaTitle": "Verwaltung von Benutzern", - "title": "Benutzer" + "metaTitle": "Verwaltung von Benutzern" }, "edit": { "metaTitle": "Benutzer bearbeiten: {username}" @@ -4661,9 +6409,6 @@ } }, "field": { - "id": { - "label": "ID" - }, "creator": { "label": "Ersteller" }, @@ -4687,10 +6432,7 @@ }, "setting": { "title": "Einstellungen", - "alert": "Gruppeneinstellungen werden nach der Reihenfolge der Gruppen in der Liste priorisiert. Die oberen Einstellungen überschreiben die unteren Einstellungen.", - "board": { - "title": "Boards" - } + "alert": "Gruppeneinstellungen werden nach der Reihenfolge der Gruppen in der Liste priorisiert. Die oberen Einstellungen überschreiben die unteren Einstellungen." }, "members": { "title": "Mitglieder", @@ -4698,10 +6440,7 @@ "notFound": "Keine Mitglieder gefunden" }, "permissions": { - "title": "Berechtigungen", - "form": { - "unsavedChanges": "Du hast noch ungespeicherte Änderungen!" - } + "title": "Berechtigungen" } } }, @@ -4710,17 +6449,15 @@ "notification": { "success": { "message": "Einstellungen gespeichert" - }, - "error": { - "message": "Einstellungen konnten nicht gespeichert werden" } }, "section": { + "analyticsDocumentation": "Sehen Sie, welche Analysedaten Homarr sammelt", "analytics": { "title": "Nutzungsdaten", "general": { "title": "Anonymisierte Nutzungsdaten senden", - "text": "Homarr sendet anonymisierte Analysen mit der Open-Source-Software Umami. Wenn aktiviert, sammeln wir die Homarr-Version, den Datenbanktyp (PostgreSQL/SQLite), den Docker/Kubernetes Status, die Authentifizierungsmethoden und die Anzahl der einzelnen Features. Alle Daten sind anonym und aggregiert - es werden keine persönlichen Informationen, URLs, Namen oder identifizierbare Daten gesammelt. Dies hilft unserem Open-Source-Team, Nutzungsmuster zu verstehen und der Entwicklung Priorität einzuräumen." + "text": "Homarr sendet anonymisierte Analysen mit der Open-Source-Software Umami. Wenn aktiviert, sammeln wir die Homarr-Version, den Datenbanktyp (MySQL/PostgreSQL/SQLite), den Docker/Kubernetes Status, die Authentifizierungsmethoden und die Anzahl der einzelnen Features. Alle Daten sind anonym und aggregiert - es werden keine persönlichen Informationen, URLs, Namen oder identifizierbare Daten gesammelt. Dies hilft unserem Open-Source-Team, Nutzungsmuster zu verstehen und der Entwicklung Priorität einzuräumen." } }, "crawlingAndIndexing": { @@ -4744,7 +6481,6 @@ } }, "board": { - "title": "Boards", "homeBoard": { "label": "Globales Home Board", "mobileLabel": "Globales Mobil Board", @@ -4763,7 +6499,6 @@ } }, "user": { - "title": "Benutzer", "enableGravatar": { "label": "Gravatar aktivieren", "description": "Falls kein benutzerdefinierter Avatar gesetzt ist und eine E-Mail konfiguriert wurde, ist ein nutzen der Avatare von Libravatar/Gravatar möglich" @@ -4779,12 +6514,86 @@ "appearance": { "title": "Aussehen", "defaultColorScheme": { - "label": "Standard Farbschema", + "label": "Standard Farbschema" + } + }, + "branding": { + "title": "Instanz-Branding", + "groups": { + "identity": "Identität", + "appearance": "Aussehen", + "customCss": "Custom CSS", + "authentication": "Authentifizierung" + }, + "identity": { + "description": "Das Anwendungslogo ist die größere Markierung innerhalb der App, auf Anmeldeseiten und für installierte Apps. Das Browsersymbol (favicon) ist das kleine Quadrat, das in Tabs und Lesezeichen verwendet wird; wenn es leer ist, fällt es zurück auf das Anwendungslogo." + }, + "appName": { + "label": "Anwendungsname" + }, + "greeting": { + "label": "Eigener Gruß" + }, + "logo": { + "label": "Anwendungslogo", + "placeholder": "/logo/logo.png" + }, + "favicon": { + "label": "Browser-Symbol (favicon)", + "placeholder": "Verwendet Anwendungslogo" + }, + "primaryColor": { + "label": "Primärfarbe" + }, + "secondaryColor": { + "label": "Sekundärer Akzent" + }, + "lockPrimaryColor": { + "label": "Diese Farbe auf allen Brettern behalten", + "description": "Verhindert das Ersetzen des Akzents für die Anwendung." + }, + "signInBackground": { + "label": "Authentifizierungs-Hintergrund", + "placeholder": "https://example.com/background.jpg" + }, + "signInOverlay": { + "label": "Hintergrund-Overlay" + }, + "defaultRadius": { + "label": "Eckenstil", "options": { - "auto": "", - "light": "Hell", - "dark": "Dunkel" + "xs": "Klein", + "sm": "Dezent", + "md": "Ausgewogen", + "lg": "Abgerundet", + "xl": "Weich" } + }, + "customCss": { + "label": "Global benutzerdefiniertes CSS", + "description": "Auf jede Seite angewendet. Board Custom CSS kann es überschreiben." + }, + "authVisibility": { + "description": "Wählen Sie aus, was auf jeder Authentifizierungsseite angezeigt wird.", + "appName": "Anwendungsname", + "logo": "Anwendungslogo", + "greeting": "Gruß" + }, + "summary": { + "title": "Aktuelles Branding", + "cornerStyle": "Eckenstil", + "palette": "Palette", + "backgroundConfigured": "Eigener Hintergrund · {overlay}% Overlay", + "backgroundDefault": "Standard-Hintergrund", + "greetingConfigured": "Eigener Gruß", + "greetingDefault": "Standardgrüße", + "boardColorLocked": "Brettfarbe gesperrt", + "boardColorFlexible": "Boardfarben erlaubt", + "appName": "Job Name", + "logo": "Logo", + "greeting": "Gruß", + "on": "An", + "off": "Aus" } }, "culture": { @@ -4792,12 +6601,177 @@ "defaultLocale": { "label": "Standardsprache" } + }, + "assistant": { + "loading": "Assistentenkonfiguration wird geladen", + "title": "Assistent", + "description": "Verbinden Sie einen OpenAI-kompatiblen Modellendpunkt für den instanzweiten Assistenten.", + "security": { + "description": "API-Schlüssel und zusätzliche Header-Werte werden in der Homarr-Datenbank verschlüsselt. Sie werden niemals an Browser zurückgegeben. Modellanfragen werden vom Homarr Server direkt an den konfigurierten Endpunkt gesendet." + }, + "overview": { + "connectionReady": "Verbindung bereit", + "unsavedChanges": "Nicht gespeicherte Änderungen", + "setupRequired": "Einrichtung erforderlich", + "disabled": "Deaktiviert", + "noModel": "Kein Modell ausgewählt" + }, + "connection": { + "endpointTitle": "Provider und Endpunkt", + "description": "Wählen Sie eine Voreinstellung oder verbinden Sie alle Dienste, die OpenAI Chat Completions API implementieren.", + "save": "Provider-Verbindung speichern" + }, + "credentials": { + "title": "Anmeldedaten", + "description": "Fügen Sie die Geheimnisse hinzu, die dieser Endpunkt benötigt. Gespeicherte Werte bleiben verschlüsselt und können nicht zurückgelesen werden.", + "required": "Schlüssel erforderlich", + "optional": "Schlüssel optional", + "workshop": "Benutzerdefinierte GitHub Anmeldung" + }, + "provider": { + "title": "Anbieter", + "groups": { + "free": "Kostenlos mit Homarr", + "hosted": "Gehostete Anbieter", + "local": "Lokale Anbieter", + "custom": "Eigene" + }, + "options": { + "homarr": { + "description": "Eine begrenzte Anzahl von Assistenten ist jeden Tag kostenlos, für die das Homarr Team bezahlt. Melden Sie sich im Community Workshop an, um Ihre Zulage zu nutzen." + }, + "openrouter": { + "description": "Gehostete Modellrouting mit einem großen, werkzeugfähigen Modellkatalog." + }, + "openai": { + "description": "OpenAI Chat-Vervollständigungen über den offiziellen API-Endpunkt." + }, + "anthropic": { + "description": "Claude durch Anthropics OpenAI SDK Endpunkt." + }, + "google-gemini": { + "description": "Gemini über den OpenAI-kompatiblen API-Endpunkt." + }, + "xai": { + "description": "Grok Modelle durch xAI's OpenAI-kompatible API." + }, + "groq": { + "description": "Schnell gehostete Inferenz durch Groqs OpenAI-kompatible API." + }, + "mistral": { + "description": "Mistral Modelle über die offizielle API." + }, + "deepseek": { + "description": "DeepSeek Modelle durch seine OpenAI-kompatible API." + }, + "together": { + "description": "Gehostet offene Modelle durch Together's OpenAI-kompatible API." + }, + "ollama": { + "description": "Ein lokaler oder Netzwerk-Ollama-Server mit einer OpenAI-kompatiblen API." + }, + "lm-studio": { + "description": "Ein LM Studio Lokaler Server mit OpenAI-Kompatibilität aktiviert." + }, + "llama-cpp": { + "description": "Ein lokaler oder Netzwerk llama.cpp Server mit einer OpenAI-kompatiblen API." + }, + "custom": { + "label": "Eigener Endpunkt", + "description": "Alle anderen Endpunkte, die mit OpenAI Chat-Vervollständigungen kompatibel sind." + } + }, + "homarrAuth": { + "title": "Kostenlose tägliche Assistenten-Verwendungen enthalten", + "description": "Es wird kein API-Schlüssel benötigt. Das Homarr-Team deckt eine begrenzte Anzahl von Assistenten pro Tag für Sie ab. Melden Sie sich im Community Workshop an, um Ihre Zulage getrennt zu halten." + } + }, + "baseUrl": { + "title": "API Basis-URL", + "description": "Fügen Sie das API-Präfix in der Regel /v1 ein. In Containern verweist localhost auf den Homarr-Container." + }, + "apiKey": { + "title": "API-Schlüssel", + "required": "Wird von diesem Anbieter benötigt. Der Wert ist verschlüsselt und schreibgeschützt.", + "optional": "Optional für lokale Endpunkte. Leer lassen, wenn der Dienst keine Inhaber-Authentifizierung benötigt.", + "placeholder": "API-Schlüssel eingeben", + "savedTitle": "Verschlüsselter API-Schlüssel gespeichert", + "savedDescription": "Homarr kann diesen Schlüssel verwenden, aber er kann seinen Wert nicht anzeigen oder wiederherstellen.", + "remove": "Gespeicherten API-Schlüssel entfernen", + "removeFlow": { + "title": "Den gespeicherten API-Schlüssel entfernen?", + "description": "Dieser Provider benötigt einen API-Schlüssel. Das Entfernen kann die Modellerkennung und Hilfsantworten stoppen, bis ein anderer Schlüssel gespeichert ist.", + "optionalDescription": "Der Endpunkt wird nach dem Entfernen dieses Schlüssels keine Inhaber-Authentifizierung mehr erhalten. Bestätigen, dass er nicht authentifizierte Anfragen akzeptiert oder einen anderen gespeicherten Header verwendet.", + "cancel": "Gespeicherte Taste behalten", + "confirm": "API-Schlüssel entfernen" + } + }, + "headers": { + "title": "Zusätzliche Anfrage-Header", + "description": "Optionale Authentifizierung oder Routing-Header. Header-Werte werden verschlüsselt und schreibgeschützt.", + "add": "Header hinzufügen", + "name": "Header-Name", + "value": "Header-Wert", + "valuePlaceholder": "Geheim- oder Routing-Wert", + "remove": "Header entfernen", + "configured": "Zusätzliche verschlüsselte Kopfzeilen sind konfiguriert. Das Hinzufügen von Kopfzeilen ersetzt den kompletten gespeicherten Sport.", + "empty": "Für diesen Anbieter werden keine zusätzlichen Header gespeichert.", + "savedBadge": "Kopfzeilen gespeichert", + "pendingRemoval": "Entfernen ausstehend", + "clear": "Gespeicherte Header beim Speichern entfernen", + "keep": "Speichere Kopfzeilen behalten" + }, + "model": { + "title": "Modell", + "description": "Wählen Sie ein entdecktes Modell aus oder geben Sie eine exakte Endpunkt-Modell-ID ein.", + "placeholder": "Modell-ID", + "refresh": "Modelle aktualisieren", + "chooseModel": "Wählen Sie das Modell, das für neue Gespräche verwendet wird.", + "discoveryPath": "Modellentdeckungspfad", + "discoveryPathDescription": "An die API Base-URL angehängt. Leer lassen, um die Entdeckung zu deaktivieren und eine manuelle Modell-ID zu verwenden.", + "manual": "Geben Sie eine Modell-ID manuell ein oder speichern Sie die Verbindung, um Modelle zu entdecken.", + "manualFallback": "Entdeckung ist nicht verfügbar. Du kannst eine Model-ID manuell eingeben.", + "saveConnectionFirst": "Speichern Sie die Verbindung vor der Auswahl eines Modells.", + "discovering": "Aktualisiere die verfügbaren Modelle von diesem Anbieter…", + "discovered": "{count, plural, one {Entdeckte # Model. Unterstützung hängt vom ausgewählten Endpunkt und Modell ab.} other {Entdeckte # Modelle. Unterstützung hängt vom ausgewählten Endpunkt und Modell ab!}}", + "discoveryFailed": "Modelerkennung nicht abgeschlossen", + "context": "{count} Kontextfenster", + "toolsConfirmed": "Tools beworben", + "toolsUnknown": "Tool-Support überprüfen" + }, + "serverTools": { + "title": "Serverwerkzeuge", + "webSearch": { + "label": "Websuche", + "description": "Erlauben Sie dem Modell, das Live-Web durch OpenRouter zu durchsuchen, wenn eine Anfrage aktuelle Informationen benötigt. Die Suchnutzung wird separat von OpenRouter berechnet.", + "proxyDescription": "Senden Sie OpenRouters Web-Suchserver-Tool an diesen Endpunkt. Aktivieren Sie dies nur, wenn der benutzerdefinierte Endpunkt das OpenRouter Server-Tools-Format weiterleitet, wie zum Beispiel ein Homarr Router Proxy.", + "limit": "Das Modell entscheidet über die Suche mit maximal 3 Suchergebnissen und 5 Suchergebnissen pro Anfrage." + } + }, + "enabled": { + "label": "Assistent aktivieren", + "description": "Zeigt den Assistenten für alle angemeldeten Benutzer. Bestehende Homarr-Berechtigungen gelten immer noch für jeden internen Werkzeugaufruf." + }, + "save": "Assistent speichern", + "notification": { + "connectionSaved": { + "title": "Provider-Verbindung gespeichert", + "message": "Der Endpunkt und die verschlüsselten Anmeldedaten sind bereit für die Modellauswahl.", + "credentialsCleared": "Der Endpunkt wurde geändert, so dass die vorherigen Anmeldedaten gelöscht wurden. Fügen Sie bei Bedarf Anmeldeinformationen für das neue Ziel hinzu." + }, + "saved": { + "title": "Assistenteneinstellungen gespeichert", + "message": "Die neuen Modell- und Verfügbarkeitseinstellungen sind aktiv." + }, + "error": { + "title": "Assistenteneinstellungen konnten nicht gespeichert werden" + } + } } } }, "tool": { "tasks": { - "title": "Aufgaben", "status": { "idle": "Inaktiv", "running": "Wird ausgeführt", @@ -4815,6 +6789,11 @@ "label": "Pings" } }, + "action": { + "run": "{name} jetzt ausführen", + "enable": "{name} aktivieren", + "disable": "{name} deaktivieren" + }, "interval": { "seconds": "Jeweils {interval, plural, =1 {Sekunde} other {# Sekunden}}", "minutes": "Jeweils {interval, plural, =1 {Minute} other {# Minuten}}", @@ -4830,13 +6809,7 @@ } } }, - "settings": { - "title": "Einstellungen der Aufgabe für {jobName}" - }, "field": { - "name": { - "label": "Name" - }, "interval": { "label": "Intervall des Zeitplans" }, @@ -4850,11 +6823,6 @@ "table": { "search": "{count} Aufgaben suchen..." }, - "action": { - "refresh": { - "label": "Neu laden" - } - }, "refresh": { "success": { "message": "Aufgaben erfolgreich aktualisiert" @@ -4888,7 +6856,6 @@ } }, "api": { - "title": "API", "modal": { "createApiToken": { "title": "API Token erstellt", @@ -4914,7 +6881,6 @@ }, "table": { "header": { - "id": "ID", "createdBy": "Erstellt von", "actions": "Aktionen" } @@ -4970,43 +6936,12 @@ "availableTools": { "title": "Verfügbare Tools", "description": "", - "columnType": "Typ", - "columnName": "Tool", - "columnDescription": "Beschreibung" - }, - "troubleshooting": { - "title": "", - "missingHeader": { - "title": "", - "description": "" - }, - "invalidFormat": { - "title": "", - "description": "" - }, - "invalidKey": { - "title": "", - "description": "" - }, - "connectionRefused": { - "title": "", - "description": "" - }, - "toolsNotAppearing": { - "title": "", - "description": "" + "filteredDescription": "{count} übereinstimmende Tools in erweiterten Kategorien.", + "search": "Suchwerkzeuge", + "noResults": { + "title": "Keine Suchwerkzeuge gefunden", + "description": "Kein MCP-Tool stimmt mit \"{search}\" überein. Versuchen Sie einen Namensraum, einen Werkzeugnamen oder eine Beschreibung." } - }, - "copy": "", - "oneClick": { - "title": "", - "subtitle": "OAuth wird verwendet. Authentifiziere dich bei der ersten Nutzung im Browser", - "vsCode": "In VS Code installieren", - "cursor": "In Cursor installieren", - "copyUrl": "MCP URL kopieren", - "copied": "Kopiert!", - "copyHint": "Für ChatGPT, Claude Code oder weitere MCP-Client", - "manualConfig": "Manuelle Konfiguration" } } } @@ -5023,47 +6958,12 @@ "title": "Export sensibler Daten", "warningTitle": "Dieser Export enthält Ihre gesamte Datenbank.", "warningBody": "Das Backup umfasst alle Benutzer, Integrationsgeheimnisse (verschlüsselt), API-Keys, Board-Konfigurationen und App-Daten. Speichern Sie die exportierte Datei sicher ab und teilen Sie diese nicht.", - "typePrompt": "Geben Sie \"{phrase}\" ein, um fortzufahren", - "submit": "Datenbank exportieren", - "cancel": "Abbrechen" + "submit": "Datenbank exportieren" } }, "import": { "title": "Datenbank wiederherstellen", - "description": "Lade ein zuvor exportiertes Backup-ZIP‑File hoch, um deine Datenbank wiederherzustellen. Damit ersetzt du deine gesamte jetzige Datenbank. Falls das Backup mit einem anderen Verschlüsselungs-Key erstellt wurde, werden vertrauliche Daten (Secrets) automatisch neu verschlüsselt.", - "warning": "Ein Backup wiederherzustellen, wird deine jetzige Datenbank komplett ersetzen und das Programm neu starten. Diese Aktion kann nicht rückgängig gemacht werden.", - "dropzone": { - "title": "Ziehen Sie Ihre Backup-ZIP hierher oder klicken Sie zum Durchsuchen", - "description": "Nur .zip Dateien aus einer Homarr SQLite-Sicherung werden akzeptiert" - }, - "changeFile": "Datei ändern", - "button": "Datenbank wiederherstellen", - "success": { - "title": "Wiederherstellung abgeschlossen", - "message": "Datenbank wurde erfolgreich wiederhergestellt. Die Anwendung wird neu gestartet..." - }, - "error": "Importieren fehlgeschlagen" - }, - "preview": { - "title": "", - "exported": "", - "loading": "Analysiere Backup-Datei...", - "errorTitle": "", - "entity": "", - "count": "", - "boards": "Boards", - "entities": { - "board": "Boards", - "user": "Benutzer", - "app": "Apps", - "integration": "Integrationen", - "item": "Widgets", - "media": "Medien", - "search_engine": "Suchmaschinen" - }, - "analyzeError": "", - "invalidMissingMetadata": "", - "invalidMissingDb": "" + "description": "Lade ein zuvor exportiertes Backup-ZIP‑File hoch, um deine Datenbank wiederherzustellen. Damit ersetzt du deine gesamte jetzige Datenbank. Falls das Backup mit einem anderen Verschlüsselungs-Key erstellt wurde, werden vertrauliche Daten (Secrets) automatisch neu verschlüsselt." }, "restore": { "dropzone": { @@ -5073,29 +6973,20 @@ "analyzing": "Analysiere Backup-Datei...", "changeFile": "Datei ändern", "continueToRestore": "", - "tryAgain": "", "analysisError": "", "preview": { "title": "", "exported": "", "entity": "", "count": "", - "boards": "", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "item": "" }, "migrationsApplied": "", "migrationsAppliedPlural": "", "migrationsOlderVersion": "", "migrationsOlderVersionPlural": "", "migrationsUpToDate": "", - "upToDate": "", "migrationsPending": "" }, "migration": { @@ -5106,21 +6997,21 @@ "title": "", "warningTitle": "", "warningBody": "", - "typePrompt": "", - "cancel": "", "submit": "" }, "progress": { "title": "", - "extracting": "", - "migrating": "", - "encrypting": "", - "swapping": "", - "restarting": "" + "restarting": "", + "relogin": "Die Wiederherstellung der Datenbank hat deine aktuelle Sitzung ungültig gemacht. Homarr schickt dich zur Anmeldung, wenn der Server bereit ist." }, "complete": { - "title": "", - "message": "" + "title": "Restore complete", + "message": "Die Datenbank wurde wiederhergestellt. Ihre vorherige Sitzung war ungültig, melden Sie sich daher erneut an, um Ihr wiederhergestelltes Board zu sehen.", + "button": "Jetzt anmelden" + }, + "timeout": { + "title": "Server ist nicht wieder online", + "message": "Wiederherstellung der Datenbank beendet, aber Homarr ist nicht wieder fertig. Erneut die Verbindungsüberprüfung wiederholen oder diese Seite manuell aktualisieren." }, "failed": { "title": "Wiederherstellung fehlgeschlagen" @@ -5128,6 +7019,9 @@ "invalidMissingMetadata": "", "invalidMissingDb": "", "analyzeError": "" + }, + "confirm": { + "typePrompt": "Geben Sie \"{phrase}\" ein, um fortzufahren" } } }, @@ -5162,7 +7056,11 @@ "toggleBoardEdit": "Bearbeitungsmodus des Boardes umschalten", "toggleColorScheme": "Hell/Dunkelmodus umschalten", "saveNotebook": "Notizbuch speichern (nur innerhalb des Notizbuch Widgets)", - "openSpotlight": "Suche öffnen" + "openSpotlight": "Suche öffnen", + "openSpotlightApps": "App-Suche öffnen", + "openSpotlightAssistant": "Assistentenmodus öffnen", + "openSpotlightPreferences": "Einstellungen öffnen", + "openAssistant": "Offener Assistent" }, "note": "Tipp: Mod bezieht sich sowohl auf die Strg-Taste als auch auf die ⌘ Taste auf macOS" } @@ -5172,6 +7070,63 @@ }, "docker": { "title": "Container", + "reconciliation": { + "title": "Assisted Docker Setup", + "suggestions": "{count, plural, =0 {Keine Vorschläge} one {# Vorschlag} other {# Vorschläge}}", + "attention": "{count} benötigt Aufmerksamkeit", + "endpointUnavailable": "Einige Dienste konnten nicht überprüft werden, da diese Endpunkte nicht verfügbar sind: {names}", + "empty": "Es wurden keine sichtbaren Docker-Dienste gefunden.", + "emptyFilter": "Keine Dienste stimmen dieser Ansicht zu.", + "ambiguous": "Mehr als ein vorhandener Artikel könnte mit diesem Dienst übereinstimmen. Homarr wird keinen automatisch auswählen.", + "filter": { + "attention": "Benötigt Aufmerksamkeit", + "represented": "Bereits eingerichtet", + "all": "Alle" + }, + "state": { + "newRecognized": "Bereit zum Verbinden", + "newApp": "Neuer Dienst", + "represented": "Bereits dargestellt", + "linked": "Verknüpft", + "moved": "Adresse geändert" + }, + "url": { + "manual": "Adresse manuell eingeben" + }, + "health": { + "layer": { + "docker": "Docker", + "integrationConfiguration": "Integration", + "authentication": "Authentifizierung", + "apiRequest": "API", + "appRepresentation": "Anwendung", + "widgetConfiguration": "Widget", + "widgetQuery": "Widget Abfrage" + }, + "status": { + "available": "Verfügbar", + "configured": "Konfiguriert", + "linked": "Verknüpft", + "missing": "Fehlend", + "changed": "Geändert", + "unused": "Nicht verwendet", + "notApplicable": "Nicht anwendbar", + "notObserved": "Nicht beobachtet" + } + }, + "action": { + "review": "Überprüfen", + "dismiss": "Verwerfen", + "restoreDismissed": "Wiederherstellen verworfen ({count})", + "setupIntegration": "Integration einrichten", + "reviewIntegration": "Integration überprüfen", + "viewRepresentation": "Setup anzeigen" + }, + "loadError": { + "title": "Docker Setup-Assistent konnte nicht geladen werden", + "message": "Docker Service Informationen sind nicht verfügbar. Versuchen Sie es erneut, ohne diese Seite zu verlassen." + } + }, "table": { "updated": "Aktualisiert {when}", "refresh": { @@ -5184,9 +7139,6 @@ "totalMemory": "" }, "field": { - "name": { - "label": "Name" - }, "state": { "label": "Status", "option": { @@ -5200,9 +7152,6 @@ } }, "stats": { - "cpu": { - "label": "CPU" - }, "memory": { "label": "Speicher" } @@ -5265,8 +7214,11 @@ } }, "remove": { - "label": "Entfernen", "confirm": "", + "confirmation": { + "title": "{count, plural, one {# Container entfernen?} other {# Container entfernen?}}", + "message": "{count, plural, one {Dies entfernt # Container: {names}} other {Dies entfernt dauerhaft # Container: {names}}}" + }, "notification": { "success": { "title": "Container entfernt", @@ -5278,8 +7230,13 @@ } } }, + "result": { + "failure": { + "title": "Einige Container-Aktionen sind fehlgeschlagen", + "message": "{total, plural, one {{failed} von # Aktion fehlgeschlagen: {names}} other {{failed} von # Aktionen fehlgeschlagen: {names}}}" + } + }, "refresh": { - "label": "Aktualisieren", "notification": { "success": { "title": "Container aktualisiert", @@ -5310,18 +7267,33 @@ }, "error": { "internalServerError": "Fehler beim Abrufen der Docker Container", + "endpointUnavailable": "{count, plural, one {# Docker Endpunkt nicht verfügbar: {names}} other {# Docker Endpunkte nicht verfügbar: {names}}}", "noColumns": "" } }, "kubernetes": { + "context": { + "label": "Kubernetes Kontext", + "loadError": { + "title": "Kubernetes Kontexte konnten nicht geladen werden", + "message": "Kontext-Informationen sind nicht verfügbar. Versuchen Sie es erneut, ohne diese Seite zu verlassen." + }, + "status": { + "available": "Verfügbar", + "degraded": "Metrics unavailable", + "unavailable": "Unavailable" + }, + "unavailable": "Dieser Kubernetes Kontext kann nicht erreicht werden. Wählen Sie einen anderen Kontext oder überprüfen Sie seine Anmeldedaten und Endpunkte.", + "metricsUnavailable": "Dieser Kontext ist erreichbar, aber Metrics Server ist nicht verfügbar. Inventar bleibt verfügbar ohne Live-CPU und Speicherauslastung." + }, "cluster": { "title": "Cluster Dashboard", "label": "Cluster", "providers": "Anbieter", "version": "Version", - "architecture": "Architektur", "capacity": { "title": "Kapazität", + "metricsUnavailable": "Metrics Server ist nicht verfügbar. Inventar und reservierte Kapazität bleiben sichtbar, aber Live-CPU und Speicherauslastung können nicht angezeigt werden.", "resource": { "reserved": "Reserviert", "used": "Benutzt" @@ -5340,38 +7312,10 @@ } }, "nodes": { - "label": "Nodes", "field": { - "name": { - "label": "Name" - }, - "state": { - "label": "Zustand", - "option": { - "ready": "Bereit", - "NotReady": "Nicht Bereit" - } - }, - "cpu": { - "label": "CPU" - }, - "memory": { - "label": "RAM" - }, - "pods": { - "label": "Pods" - }, - "operatingSystem": { - "label": "OS" - }, - "architecture": { - "label": "Architektur" - }, + "metricsUnavailable": "Unavailable", "kubernetesVersion": { "label": "Kubernetes Version" - }, - "creationTimestamp": { - "label": "Erstellt" } }, "table": { @@ -5379,43 +7323,17 @@ } }, "namespaces": { - "label": "Namensräume", - "field": { - "name": { - "label": "Name" - }, - "state": { - "label": "Zustand", - "option": { - "active": "Aktiv", - "terminating": "Beendet" - } - }, - "creationTimestamp": { - "label": "Erstellt" - } - }, "table": { "search": "{count} Namensräume durchsuchen" } }, "ingresses": { - "label": "Ingresse", "field": { - "name": { - "label": "Name" - }, - "namespace": { - "label": "Namensraum" - }, "className": { "label": "Klassenname" }, "rulesAndPaths": { "label": "Regeln & Pfade" - }, - "creationTimestamp": { - "label": "Erstellt" } }, "table": { @@ -5423,17 +7341,7 @@ } }, "services": { - "label": "Dienste", "field": { - "name": { - "label": "Name" - }, - "namespace": { - "label": "Namensraum" - }, - "type": { - "label": "Typ" - }, "ports": { "label": "Ports" }, @@ -5442,9 +7350,6 @@ }, "clusterIP": { "label": "Cluster IP" - }, - "creationTimestamp": { - "label": "Erstellt" } }, "table": { @@ -5452,25 +7357,12 @@ } }, "pods": { - "label": "Pods", "field": { - "name": { - "label": "Name" - }, - "namespace": { - "label": "Namensraum" - }, "image": { "label": "Image" }, "applicationType": { "label": "Typ der Anwendung" - }, - "status": { - "label": "Status" - }, - "creationTimestamp": { - "label": "Erstellt" } }, "table": { @@ -5478,51 +7370,17 @@ } }, "secrets": { - "label": "Secrets", - "field": { - "name": { - "label": "Name" - }, - "namespace": { - "label": "namensraum" - }, - "type": { - "label": "typ" - }, - "creationTimestamp": { - "label": "Erstellt" - } - }, "table": { "search": "{count} Secrets durchsuchen" } }, "configmaps": { - "label": "ConfigMaps", - "field": { - "name": { - "label": "Name" - }, - "namespace": { - "label": "namensraum" - }, - "creationTimestamp": { - "label": "Erstellt" - } - }, "table": { "search": "{count} configMaps durchsuchen" } }, "volumes": { - "label": "Laufwerke", "field": { - "name": { - "label": "Name" - }, - "namespace": { - "label": "Namensraum" - }, "accessModes": { "label": "Zugriffsmodi" }, @@ -5537,12 +7395,6 @@ }, "volumeName": { "label": "Laufwerkname" - }, - "status": { - "label": "Status" - }, - "creationTimestamp": { - "label": "Erstellt" } }, "table": { @@ -5551,6 +7403,29 @@ }, "error": { "internalServerError": "Fehler beim Abrufen der Kubernetes Daten" + }, + "field": { + "name": { + "label": "Job Name" + }, + "namespace": { + "label": "Namensraum" + }, + "creationTimestamp": { + "label": "Erstellt" + }, + "state": { + "label": "Jobstatus" + }, + "status": { + "label": "Status" + }, + "type": { + "label": "Download Client" + }, + "architecture": { + "label": "Architektur" + } } }, "permission": { @@ -5584,80 +7459,27 @@ }, "navigationStructure": { "manage": { - "workshop": { - "label": "Workshop" - }, "label": "Verwalten", - "boards": { - "label": "Boards" - }, - "integrations": { - "label": "Integrationen", - "edit": { - "label": "Bearbeiten" - }, - "new": { - "label": "Neu" - } - }, - "search-engines": { - "label": "Suchmaschinen", - "new": { - "label": "Neu" - }, - "edit": { - "label": "Bearbeiten" - } - }, - "medias": { - "label": "Medien" - }, - "apps": { - "label": "Apps", - "new": { - "label": "Neu" - }, - "edit": { - "label": "Bearbeiten" - } - }, "custom-widgets": { - "label": "Benutzerdefinierte Widgets", - "new": { - "label": "Neu" - }, "edit": { - "label": "Bearbeiten" + "flow": { + "label": "" + } + }, + "workshop": { + "label": "Werkstatt" + }, + "publish": { + "label": "Im Workshop veröffentlichen" } }, "users": { - "label": "Benutzer", - "create": { - "label": "Erstellen" - }, "general": "Allgemein", - "security": "Sicherheit", - "board": "Boards", - "groups": { - "label": "Gruppen" - }, - "invites": { - "label": "Einladungen" - } + "security": "Sicherheit" }, "tools": { "label": "Werkzeuge", - "tasks": { - "label": "Aufgaben" - }, - "docker": { - "label": "Docker", - "logs": { - "label": "Logs" - } - }, "kubernetes": { - "label": "Kubernetes", "nodes": { "label": "Nodes" }, @@ -5683,11 +7505,7 @@ "label": "Laufwerke" } }, - "logs": { - "label": "Logs" - }, "certificates": { - "label": "Zertifikate", "hostnames": { "label": "Hostnamen" } @@ -5698,12 +7516,60 @@ }, "about": { "label": "Über" + }, + "assistant": { + "label": "Assistent" } } }, "search": { "placeholder": "Nach allem suchen", "nothingFound": "Keine Treffer", + "modePicker": { + "search": { + "label": "Suche", + "placeholder": "Apps, Boards, Seiten, Befehle und Einstellungen durchsuchen" + }, + "apps": { + "label": "Apps", + "placeholder": "Apps, Boards und Integrationen durchsuchen" + }, + "command": { + "label": "Befehle", + "placeholder": "Aktionen und Befehle durchsuchen" + }, + "preferences": { + "label": "Einstellungen", + "placeholder": "Einstellungen suchen und ändern" + }, + "assistant": { + "label": "Assistent", + "placeholder": "Assistent fragen" + }, + "external": { + "label": "Web", + "placeholder": "Mit einer externen Suchmaschine suchen" + }, + "media": { + "label": "Medien", + "placeholder": "Nach einem Film oder einer Serie suchen", + "fallback": "Medien nach \"{query} \" suchen" + }, + "userGroup": { + "label": "Personen", + "placeholder": "Suche Benutzer und Gruppen" + }, + "continueWith": "Weiter mit", + "dialogAriaLabel": "{mode} Befehlsmenü", + "navigationLabel": "Suchmodi", + "modeAriaLabel": "{mode} Modus", + "resultsAriaLabel": "{mode} Ergebnisse", + "footer": { + "navigate": "Navigate", + "open": "Öffnen", + "close": "Schließen" + } + }, "error": { "fetch": "Beim Abrufen der Daten ist ein Fehler aufgetreten" }, @@ -5712,7 +7578,6 @@ "help": "Nach Apps, Integrationen oder Boards suchen", "group": { "app": { - "title": "Apps", "children": { "action": { "open": { @@ -5728,7 +7593,6 @@ } }, "board": { - "title": "Boards", "children": { "action": { "open": { @@ -5748,9 +7612,6 @@ "title": "Wählen Sie eine Aktion für die App" } } - }, - "integration": { - "title": "Integrationen" } } }, @@ -5779,9 +7640,6 @@ "newBoard": { "label": "Erstellen Sie ein neues Board" }, - "importBoard": { - "label": "Ein Board importieren" - }, "newApp": { "label": "Neue App erstellen" }, @@ -5851,7 +7709,6 @@ } }, "defaultSearchEngineId": { - "label": "Standard Suchmaschine", "children": { "detail": { "title": "Standard Suchmaschine auswählen" @@ -5859,7 +7716,6 @@ } }, "openSearchInNewTab": { - "label": "Suchergebnisse in neuem Tab öffnen", "children": { "detail": { "title": "Suchergebnisse in neuem Tab öffnen" @@ -5867,7 +7723,6 @@ } }, "ddgBangs": { - "label": "", "children": { "detail": { "title": "" @@ -5882,6 +7737,13 @@ } } }, + "byteUnitSystem": { + "children": { + "detail": { + "title": "Wählen Sie Ihre Datengrößen" + } + } + }, "homeBoardId": { "label": "", "children": { @@ -5899,7 +7761,6 @@ } }, "pingIconsEnabled": { - "label": "", "children": { "detail": { "title": "" @@ -5907,7 +7768,6 @@ } }, "enableRightClickOnWidgets": { - "label": "", "children": { "detail": { "title": "" @@ -5935,6 +7795,7 @@ "description": "", "disabled": { "noIntegration": "", + "signInRequired": "Melden Sie sich an um Medien-Request-Integrationen zu suchen.", "scoped": "" } } @@ -5951,7 +7812,6 @@ "help": "Externe Suchmaschine verwenden", "group": { "searchEngine": { - "title": "Suchmaschinen", "tipDdgBangs": "", "bang": { "searchWithQuery": "", @@ -6002,20 +7862,6 @@ "group": { "mode": { "title": "Modi" - }, - "help": { - "title": "Hilfe", - "option": { - "documentation": { - "label": "Dokumentation" - }, - "submitIssue": { - "label": "Ein Problem melden" - }, - "discord": { - "label": "Community Discord" - } - } } } }, @@ -6027,9 +7873,10 @@ "other": { "label": "Mit einer anderen Suchmaschine suchen" }, - "no-default": { - "label": "Keine Standard Suchmaschine festgelegt", - "description": "Eine Standard Suchmaschine in den Einstellungen festlegen" + "no-engines": { + "label": "Keine Suchmaschinen konfiguriert", + "descriptionCreate": "Suchmaschine hinzufügen, um aus dem Befehlsmenü zu suchen", + "descriptionUnavailable": "Einen Administrator bitten, eine Suchmaschine zu konfigurieren" }, "search": { "label": "Suche nach \"{query}\" mit {name}" @@ -6109,7 +7956,6 @@ "help": "Nach Benutzer oder Gruppe suchen", "group": { "user": { - "title": "Benutzer", "children": { "action": { "detail": { @@ -6122,7 +7968,6 @@ } }, "group": { - "title": "Gruppen", "children": { "action": { "detail": { @@ -6146,9 +7991,6 @@ "engine": { "search": "Nach einer Suchmaschine suchen", "field": { - "name": { - "label": "Name" - }, "short": { "label": "Kurz" }, @@ -6161,12 +8003,19 @@ }, "page": { "list": { - "title": "Suchmaschinen", + "ariaLabel": "Konfigurierte Suchmaschinen", "noResults": { "title": "Noch keine Suchmaschinen vorhanden", - "action": "Erstelle deine erste Suchmaschine" + "description": "Suchmaschinen lassen Spotlight eine Abfrage an eine Site oder einen angeschlossenen Dienst senden.", + "action": "Erstelle deine erste Suchmaschine", + "filteredTitle": "Keine Suchmaschinen entsprechen Ihrer Suche", + "filteredDescription": "Keine Suchmaschinen gefunden \"{search}\". Versuchen Sie einen anderen Namen oder eine URL." }, - "interactive": "Interaktiv, verwendet eine Integration" + "interactive": "Interaktiv, verwendet eine Integration", + "type": { + "generic": "URL-Vorlage", + "fromIntegration": "Integration" + } }, "create": { "title": "Neue Suchmaschine", @@ -6185,11 +8034,9 @@ "title": "Suchmaschine bearbeiten", "notification": { "success": { - "title": "Änderungen erfolgreich angewendet", "message": "Suchmaschine wurde erfolgreich gespeichert" }, "error": { - "title": "Änderungen konnten nicht angewendet werden", "message": "Die Suchmaschine konnte nicht gespeichert werden" } }, @@ -6328,6 +8175,10 @@ } }, "log": { + "context": { + "widgetError": "Widget hat einen Fehler um diese Zeit gemeldet", + "expiredWidgetError": "Protokolle um diesen Widget-Fehler werden nicht mehr beibehalten" + }, "level": { "option": { "debug": "Debug", @@ -6339,7 +8190,6 @@ }, "onboardingTour": { "learnMore": "Lese die Dokumentation", - "next": "Weiter", "prev": "Zurück", "done": "Fertig", "skip": "Überspringe die Einführung", @@ -6366,7 +8216,7 @@ }, "integrationsList": { "title": "Ihre Integrationen", - "description": "" + "description": "Dies sind die Dienste, die mit Homarr verbunden sind. Alle Anmeldeinformationen werden ausgeruht verschlüsselt." }, "integrationsCreate": { "title": "Integration hinzufügen", @@ -6403,5 +8253,359 @@ "description": "" } } + }, + "metadata": { + "description": "Ein selbst gehostetes Dashboard für den *arr-Stack und dein gesamtes Homelab. Integriert mit 50+ Diensten, Echtzeit-Widgets, keine Konfigurationsdateien.", + "dashboardTitle": "{appName} Dashboard" + }, + "assistant": { + "title": "Assistent", + "open": "Offener Assistent", + "close": "Assistent schließen", + "minimize": "Assistent minimieren", + "spotlight": "Assistent fragen", + "spotlightDescription": "Geben Sie eine Eingabeaufforderung ein, ohne das Kommandomenü zu verlassen.", + "spotlightPrompt": { + "title": "Assistent fragen", + "description": "Geben Sie eine Eingabeaufforderung oben ein. Geben Sie sie im Hintergrund ab.", + "send": "Sendeaufforderung", + "empty": "Geben Sie eine Aufforderung oben ein" + }, + "unavailable": { + "checking": "Prüft, ob der Assistent verfügbar ist…", + "error": "Die Verfügbarkeit des Assistenten konnte nicht überprüft werden. Versuchen Sie es erneut.", + "notConfigured": "Ein Administrator muss zuerst den Assistenten konfigurieren und aktivieren.", + "signIn": "Melden Sie sich an, um Assistent zu verwenden." + }, + "newConversation": "Neue Unterhaltung", + "conversations": "Unterhaltungen", + "conversationActions": "Konversationsaktionen", + "searchConversations": "Unterhaltungen durchsuchen", + "noMatchingConversations": "Keine passenden Unterhaltungen", + "moreActions": "Weitere Antwort-Aktionen", + "renameConversation": { + "action": "Umbenennen", + "label": "Konversationsname", + "save": "Name speichern", + "failedTitle": "Unterhaltung konnte nicht umbenannt werden", + "failedDescription": "Homarr konnte diese Unterhaltung nicht umbenennen. Versuchen Sie es erneut." + }, + "deleteConversation": { + "title": "Unterhaltung löschen?", + "description": "“{title}” und seine Nachrichten werden dauerhaft gelöscht.", + "failedTitle": "Unterhaltung konnte nicht gelöscht werden", + "failedDescription": "Homarr konnte diese Unterhaltung nicht löschen. Versuchen Sie es erneut." + }, + "closeHistory": "Unterhaltungshistorie schließen", + "openHistory": "Verlauf der Unterhaltung öffnen", + "emptyTitle": "Wozu kann ich helfen?", + "emptyDescription": "Fragen Sie nach Ihrer Homarr-Setup, prüfen Sie Live-Instanz-Daten oder genehmigen Sie Aktionen, wenn ich eine Änderung vornehmen soll.", + "suggestions": { + "health": { + "label": "Service-Gesundheit überprüfen", + "prompt": "Überprüfen Sie meine Integrationen und fassen Sie alles zusammen, was Aufmerksamkeit erfordert." + }, + "explore": { + "label": "Erkunde meinen Homarr", + "prompt": "Zeige mir was ich in dieser Homarr-Instanz sehen und verwalten kann." + }, + "media": { + "label": "Medien zum Abfragen finden", + "prompt": "Hilf mir, einen Film oder eine Serie zu finden, um sie anzufordern." + }, + "style": { + "label": "Dashboard verbessern", + "prompt": "Helfen Sie mir, das Aussehen eines Boards oder benutzerdefinierter CSS zu verbessern. Zeigen Sie mir zuerst meine Boards und bewahren Sie dann meine aktuellen Einstellungen während wir die Änderungen vornehmen." + }, + "designWidget": { + "label": "Widget entwerfen", + "prompt": "Erstellen und installieren Sie ein eigenes Widget für " + } + }, + "composerPlaceholder": "Assistent… fragen", + "runtime": { + "model": "Modell", + "searchModels": "Modelle suchen", + "noModels": "Keine Modelle verfügbar", + "otherModels": "Andere Modelle", + "imageInput": "Bildeingabe akzeptieren", + "thinking": "Denkmodus", + "reasoning": { + "auto": "Auto", + "none": "Aus", + "minimal": "Minimal", + "low": "Niedrig", + "medium": "Mittel", + "high": "Hoch" + } + }, + "providerQuota": { + "title": "Homarr Anbieter", + "communityWorkshop": "Community-Workshop", + "dailyAllowance": "Tageszulage für Anfrage", + "remainingLabel": "{remaining} der {limit} Homarr Provider Anfragen verbleibend", + "loading": "Homarr Providerzulage wird geladen", + "signInRequired": "Workshop-Anmeldung für den Homarr-Anbieter erforderlich", + "signInDescription": "Melden Sie sich über den Community Workshop bei GitHub an, um Ihre separate Tageszulage zu erhalten.", + "exhaustedDescription": "Ihr Homarr-Provider-Zuschuss wird für heute verwendet. Es wird um Mitternacht UTC zurückgesetzt.", + "unavailableDescription": "Melden Sie sich im Workshop an oder warten Sie, bis Ihr Homarr Provider-Zuschuss zurückgesetzt wird.", + "signIn": "Mit GitHub anmelden", + "signInError": "GitHub Anmeldung fehlgeschlagen. Versuchen Sie es in einem Moment erneut.", + "loadError": "Das Homarr Provider-Zuschuss konnte nicht geladen werden.", + "reset": "Setzt {relative} um zurück", + "toolCalls": "Jede Modellanfrage und ein abgeschlossener Werkzeugaufruf verwendet eine Anfrage.", + "retry": "Zulage neu laden", + "level": { + "ok": "Ok", + "warning": "Warnung", + "bad": "Niedrig", + "dead": "Benutzt" + } + }, + "stop": "Antwort stoppen", + "send": "Nachricht senden", + "copy": "Antwort kopieren", + "copyMessage": "Nachricht kopieren", + "editMessage": "Nachricht bearbeiten", + "updateMessage": "Nachricht aktualisieren", + "regenerate": "Antwort neu generieren", + "helpful": "Hilfreich", + "notHelpful": "Nicht hilfreich", + "readAloud": "Antwort vorlesen", + "stopReading": "Antwort nicht lesen", + "feedbackError": "Ihr Feedback konnte nicht gespeichert werden. Versuchen Sie es erneut.", + "exportMarkdown": "Als Markdown exportieren", + "exportConversation": { + "action": "Gespräch als Markdown exportieren", + "failedTitle": "Unterhaltung konnte nicht exportiert werden", + "failedDescription": "Homarr konnte diese Unterhaltung nicht laden. Versuchen Sie es erneut." + }, + "reasoning": "Denken", + "previousResponse": "Vorherige Antwort", + "nextResponse": "Nächste Antwort", + "removeAttachment": "Anhang entfernen", + "downloadFile": "Download {name}", + "attachedImage": "Angehängtes Bild", + "externalImageBlocked": "Externes Bild für Privatsphäre gesperrt", + "image": { + "loading": "Bild wird geladen", + "failed": "Dieses Bild konnte nicht geladen werden.", + "retry": "Bild erneut versuchen" + }, + "quoteSelection": "Zitat", + "dismissQuote": "Zitat entfernen", + "attachments": { + "add": "Bild oder Dokument anhängen", + "errorTitle": "Anhang konnte nicht hinzugefügt werden", + "imageUnsupported": "Das ausgewählte Modell unterstützt keine Bildeingabe." + }, + "mentions": { + "menu": "Homarr Kontext hinzufügen", + "context": "Kontext", + "app": "Apps", + "integration": "Integrationen", + "board": "Boards", + "widget": "Widgets", + "tools": "Verfügbare Werkzeuge" + }, + "markdown": { + "diagram": "Diagramm", + "renderingDiagram": "Rendering-Diagramm…", + "diagramUnavailable": "Dieses Diagramm konnte nicht dargestellt werden." + }, + "commands": { + "menu": "Assistentenbefehle", + "health": "Bereiten Sie einen Service-Gesundheitscheck vor", + "explore": "Bereite eine Übersicht dieser Homarr-Instanz vor", + "media": "Mediensuche vorbereiten", + "style": "Bereiten Sie ein Board-Aussehen oder benutzerdefinierte CSS-Änderung vor", + "designWidget": "Benutzerdefiniertes Widget erstellen" + }, + "usage": { + "tokens": "token", + "contextWindow": "Kontextfenster", + "requestDetails": "Details anfordern", + "used": "Letzter Schritt", + "remaining": "Verbleibend", + "capacity": "Kapazität", + "input": "Eingabe", + "output": "Ausgabe", + "cached": "Cache-Eingabe", + "cacheWrite": "Cache-Schreiben", + "reasoning": "Begründung", + "inputShort": "in", + "outputShort": "aus", + "cachedShort": "zwischengespeichert", + "reasoningShort": "argumentierung", + "firstOutput": "Erste Ausgabe", + "homarrTiming": "Homarr beobachtet", + "endToEnd": "Ende bis Ende", + "observedThroughput": "Durchsatz beobachtet", + "providerTiming": "Anbieter gemeldet", + "loadingProviderDetails": "Generierungsdetails werden geladen…", + "providerDetailsPending": "OpenRouter verarbeitet noch einige Generationsdetails. Erneut öffnen, um es erneut zu versuchen.", + "providerLatency": "Anbieter-Latenz", + "generationTime": "Erstellungszeit", + "moderationLatency": "Moderation", + "providerThroughput": "Provider-Durchsatz", + "fallbacks": "Fallback", + "fallbackLatency": "Fallback-Latenz", + "cacheDiscount": "Cache-Rabatt", + "normalizedTokens": "OpenRouter normalisierte Eingabe / Ausgabe", + "byok": "BYOK", + "cost": "Kosten", + "reported": "Vom Anbieter gemeldet", + "estimated": "Geschätzt von Modellpreisen", + "upstreamCost": "Upstream-Inferenzen", + "webSearches": "Websuche", + "finishReason": "Endgrund", + "notReported": "Nicht gemeldet", + "agentSteps": "Agentenschritte", + "step": "Schritt- {number}", + "generation": "Generierung" + }, + "toolInput": "Eingabe", + "toolOutput": "Ausgabe", + "toolActivity": { + "iconSearch": "Suche nach “{query}” Icons", + "iconBrowse": "Verfügbare Icons durchsuchen" + }, + "toolNavigation": { + "openPreview": "Vorschau öffnen", + "openWidget": "Widget öffnen" + }, + "webSearch": { + "title": "Websuche", + "completed": "OpenRouter durchsuchte das Live-Web nach dieser Antwort.", + "searches": "{count, plural, one {# Suche} other {# Suche}}", + "sources": "{count, plural, one {# Quelle} other {# Quellen}}" + }, + "responseError": { + "title": "Der Assistent konnte nicht fertig werden", + "description": "Versuchen Sie es erneut. Wenn das Problem fortsetzt, fragen Sie einen Administrator, ob er den konfigurierten Model-Endpunkt verifiziert." + }, + "toolPreparationError": { + "title": "Diese Anfrage konnte nicht vorbereitet werden", + "description": "Das Modell stoppte bevor es vollständige Details lieferte. Bitte die Antwort wiederholen oder die Anfrage erneut beschreiben. Es wurde keine Änderung vorgenommen." + }, + "busy": { + "title": "Der Assistent arbeitet bereits", + "description": "Warte auf die aktuelle Antwort oder öffne sie, um den Run zu stoppen." + }, + "pendingAction": { + "answerTitle": "Antwort benötigt", + "answerFallback": "Wähle eine Antwort um fortzufahren", + "formTitle": "App-Details überprüfen", + "boardFormTitle": "Änderungen des Boards überprüfen", + "review": "Überprüfen", + "sendBlocked": "Beheben Sie die ausstehende Anfrage vor dem Senden" + }, + "activity": { + "thinking": "Assistent denkt", + "working": "Arbeiten an Ihrer Eingabeaufforderung", + "ready": "Antwort bereit", + "completed": "Antwort öffnen", + "approval": "Genehmigung benötigt", + "failed": "Assistent benötigt Aufmerksamkeit", + "expand": "Assistenten-Antwort öffnen", + "dismiss": "Assistenten-Aktivität verwerfen" + }, + "scrollToLatest": "Zum neuesten scrollen", + "refresh": { + "action": "Aktuelle Ansicht aktualisieren", + "working": "Aktualisiere aktuelle Ansicht", + "completeTitle": "Ansicht aktualisiert", + "completeDescription": "Sichtbare Homarr-Daten wurden neu geladen.", + "failedTitle": "Ansicht konnte nicht aktualisiert werden", + "failedDescription": "Die Änderung kann noch gespeichert werden. Versuchen Sie es erneut." + }, + "askUser": { + "preparing": "Frage wird vorbereitet", + "answered": "Ihre Antwort", + "other": "Andere", + "otherLabel": "Ihre Antwort", + "otherPlaceholder": "Geben Sie eine andere Antwort ein…", + "submit": "Antwort senden", + "cancelOther": "Andere Antwort abbrechen", + "optionKind": { + "affirmative": "Bestätigen", + "negative": "Ablehnen", + "alternative": "Option", + "custom": "Eigene" + } + }, + "configureApp": { + "title": "App-Details überprüfen", + "description": "Wählen Sie ein lokales Symbol und passen Sie etwas an, bevor die Assistentenanfragen die Genehmigung erstellen.", + "preparing": "App-Details werden vorbereitet", + "continue": "Diese Details verwenden", + "ready": "App-Details bereit", + "automaticContinue": "Diese App-Details automatisch verwenden" + }, + "configureBoardSettings": { + "title": "Änderungen des Boards überprüfen", + "loading": "Aktuelle Board-Einstellungen werden geladen", + "loadErrorTitle": "Board-Einstellungen konnten nicht geladen werden", + "loadErrorDescription": "Das Forum existiert möglicherweise nicht mehr, oder Sie haben nicht die Berechtigung, es zu ändern.", + "proposedCount": "Assistent schlug {count} Felder vor", + "changeCount": "{count} Änderungen bereit", + "ready": "Boardwechsel bereit", + "cancelled": "Aktuelle Board-Einstellungen beibehalten", + "noChanges": "Keine Einstellungen ändern", + "keepCurrent": "Aktuelle Einstellungen beibehalten", + "continue": "Weiter zur Freigabe", + "automaticContinue": "Die vorgeschlagenen Änderungen des Boards automatisch akzeptieren", + "resetAll": "Alle Änderungen zurücksetzen", + "tabs": { + "css": "Custom CSS", + "appearance": "Aussehen", + "background": "Hintergrund", + "general": "Allgemein" + }, + "cssDescription": "Bearbeite das komplette Stylesheet. Bestehende Regeln werden beibehalten, es sei denn, sie werden hier entfernt.", + "cssCharacters": "{count} von 16384 Zeichen", + "copyCss": "Copy CSS", + "copied": "Kopiert", + "restoreCss": "Restore current CSS", + "remoteCssTitle": "Dieses CSS lädt eine entfernte Ressource", + "remoteCssDescription": "Importierte Stylesheets und Remote-URLs kontaktieren einen anderen Server, wenn das Board geladen wird. Überprüfen Sie diese, bevor Sie fortfahren." + }, + "configureWidget": { + "title": "Widget überprüfen", + "preparing": "Widget-Einstellungen vorbereiten", + "review": "Widget und Integrationen überprüfen", + "ready": "Widget-Konfiguration bereit", + "cancelled": "Widget wurde nicht hinzugefügt", + "automaticContinue": "Die vorgeschlagene Widget-Konfiguration wird automatisch akzeptiert", + "definitionLoadErrorTitle": "Widget-Einstellungen konnten nicht geladen werden", + "definitionLoadErrorDescription": "Homarr konnte die Einstellungen dieses Widgets nicht laden. Versuchen Sie es erneut.", + "loadErrorTitle": "Integrationen konnten nicht geladen werden", + "loadErrorDescription": "Homarr konnte die für dieses Widget verfügbaren Integrationen nicht laden.", + "noIntegrationTitle": "Eine kompatible Integration ist erforderlich", + "noIntegrationDescription": "Konfigurieren Sie eine Integration, die von diesem Widget unterstützt wird, bevor Sie es zum Dashboard hinzufügen.", + "connectIntegration": "Verbinde Dienst", + "manageIntegrations": "Integrationen verwalten", + "skip": "Nicht hinzufügen", + "errorTitle": "Widget-Einstellungen konnten nicht vorbereitet werden", + "errorDescription": "Das Modell hat keine komplette Widget-Konfiguration bereitgestellt. Es wurde kein Widget hinzugefügt." + }, + "approvalRequired": "Genehmigung erforderlich", + "complete": "Complete", + "denied": "Verweigert", + "failed": "Fehlgeschlagen", + "working": "Arbeiten", + "approvalDescription": "Überprüfen Sie diese Änderung, bevor sie ausgeführt wird.", + "approveAndRun": "Bestätigen und ausführen", + "deny": "Leugnen", + "autoApproval": { + "label": "Automatische Genehmigungen", + "composerLabel": "Für mich freigeben", + "title": "Automatische Genehmigungen", + "description": "Formulare automatisch vorbereiten und geschützte Änderungen für diese Unterhaltung genehmigen. Fragen warten immer noch auf deine Antwort und deine Homarr-Berechtigungen gelten noch. Dies schaltet sich ab, wenn du die Unterhaltung wechselst.", + "enable": "Für diese Unterhaltung aktivieren", + "disable": "Automatische Freigaben ausschalten", + "enabled": "Automatische Genehmigungen sind an", + "approving": "Automatisch freigeben" + } } } diff --git a/packages/translation/src/lang/el.json b/packages/translation/src/lang/el.json index aa8c2a05c..14d1f010a 100644 --- a/packages/translation/src/lang/el.json +++ b/packages/translation/src/lang/el.json @@ -1,156 +1,246 @@ { "init": { - "step": { - "start": { - "title": "Καλώς ήρθατε στο Homarr", - "subtitle": "Ας ξεκινήσουμε με τη ρύθμιση της παρουσίας Homarr.", - "description": "Για να ξεκινήσετε, επιλέξτε πώς θέλετε να ρυθμίσετε την παρουσία Homarr.", - "action": { - "scratch": "Έναρξη από την αρχή", - "importOldmarr": "Εισαγωγή από το Homarr πριν από την έκδοση 1.0", - "restoreSqlite": "Επαναφορά από αντίγραφο ασφαλείας SQLite", - "restoreSqliteDescription": "Μεταφορτώστε ένα πλήρες αντίγραφο ασφαλείας βάσης δεδομένων SQLite από προηγούμενη εγκατάσταση Homarr. Αυτό θα επαναφέρει όλους τους πίνακες, χρήστες, εφαρμογές, ενσωματώσεις και ρυθμίσεις.", - "backToOptions": "← Επιστροφή στις επιλογές ρύθμισης" + "studio": { + "navigationLabel": "Ενσωματωμένα τμήματα", + "back": "Πίσω", + "buildBoard": "Φτιάξτε το ταμπλό μου", + "common": { + "unknownError": "Κάτι πήγε στραβά. Οι επιλογές σας είναι ακόμα εδώ· προσπαθήστε ξανά." + }, + "claim": { + "checking": "Εξασφάλιση αυτής της συνεδρίας επιβίβασης…", + "checkingTitle": "Προετοιμασία ασφαλούς εγκατάστασης", + "lockedTitle": "Η ρύθμιση είναι ανοιχτή σε άλλο πρόγραμμα περιήγησης", + "lockedDescription": "Συνεχίστε εκεί, ή περιμένετε να λήξει η ασφαλής πρώτη συνεδρία πριν προσπαθήσετε ξανά.", + "signInTitle": "Απαιτείται σύνδεση διαχειριστή", + "signInDescription": "Ένας διαχειριστής υπάρχει ήδη. Συνδεθείτε για να συνεχίσετε τις ρυθμίσεις χωρίς να εκθέσετε τα διαπιστευτήρια ή την πρόσβαση στην υπηρεσία.", + "signIn": "Συνδεθείτε και συνεχίστε", + "errorTitle": "Η εγκατάσταση δεν ήταν δυνατόν να ασφαλιστεί", + "errorDescription": "Ανανέωση της σελίδας για επανάληψη της ασφαλούς πρώτης περιόδου λειτουργίας." + }, + "navigation": { + "essentials": "Ουσιαστικά", + "discover": "Ανακαλύψτε", + "connect": "Σύνδεση", + "board": "Σκακιέρα", + "extend": "Επέκταση", + "review": "Επανεξέταση" + }, + "welcome": { + "title": "Καλώς ήρθατε στο σπίτι.", + "description": "Καλώς ήρθατε στο Homarr v{version}. Θα σας καθοδηγήσουμε στα απαραίτητα και θα σας βοηθήσουμε να χτίσετε το πρώτο σας διοικητικό συμβούλιο.", + "start": "Ας αρχίσουμε", + "restore": "Επαναφορά αντιγράφου ασφαλείας", + "restoreTitle": "Επαναφορά από αντίγραφο ασφαλείας", + "restoreDescription": "Ένα πλήρες αντίγραφο ασφαλείας SQLite επαναφέρει πίνακες, άτομα, εφαρμογές, ενσωματώσεις και ρυθμίσεις. Το Homarr το επικυρώνει πριν αντικαταστήσει οτιδήποτε.", + "errorTitle": "Η ρύθμιση δεν μπόρεσε να ξεκινήσει", + "errorDescription": "Οι επιλογές ρυθμίσεων είναι ακόμα εδώ. Δοκιμάστε ξανά ή ανανεώστε τη σελίδα αν αυτή συνεχιστεί." + }, + "account": { + "title": "Δημιουργήστε το διαχειριστή σας", + "description": "Καθορίστε τα διαπιστευτήρια για το χρήστη του διαχειριστή σας.", + "username": "Όνομα χρήστη διαχειριστή", + "passwordHint": "Απαιτείται μόνο το ελάχιστο όριο 8 χαρακτήρων. Οι άλλοι έλεγχοι αντοχής κωδικού πρόσβασης είναι προτάσεις.", + "create": "Δημιουργία διαχειριστή", + "errorTitle": "Δεν ήταν δυνατή η δημιουργία διαχειριστή", + "recoveryTitle": "Ο λογαριασμός διαχειριστή δημιουργήθηκε", + "recoveryDescription": "Η αυτόματη σύνδεση δεν ολοκληρώθηκε. Συνδεθείτε με τα διαπιστευτήρια διαχειριστή που μόλις δημιουργήσατε για να συνεχίσετε την εγκατάσταση.", + "recoveryAction": "Συνδεθείτε και συνεχίστε", + "unknownError": "Δεν ήταν δυνατή η δημιουργία του διαχειριστή." + }, + "externalGroup": { + "title": "Συνδέστε την ομάδα διαχειριστή σας", + "description": "Χρησιμοποιήστε το ακριβές όνομα ομάδας που αποστέλλεται από LDAP ή OIDC. Τα μέλη αυτής της ομάδας λαμβάνουν πρόσβαση διαχειριστή.", + "name": "Εξωτερική ομάδα διαχειριστή", + "nameDescription": "Αυτό είναι ευαίσθητο στην περίπτωση και πρέπει να ταιριάζει με τον πάροχο ταυτότητάς σας.", + "continue": "Αποθήκευση ομάδας και συνέχεια", + "errorTitle": "Δεν ήταν δυνατή η αποθήκευση της ομάδας", + "unknownError": "Δεν ήταν δυνατή η αποθήκευση της ομάδας διαχειριστή." + }, + "essentials": { + "title": "Εκκίνηση με γνωστές προεπιλογές", + "description": "Ρυθμίστε τη γλώσσα και την εμφάνιση όλοι βλέπουν πρώτα, και στη συνέχεια να δώσει Homarr το μοτίβο διευθύνσεων που χρησιμοποιούνται από τις υπηρεσίες σας.", + "language": "Προεπιλεγμένη γλώσσα", + "theme": "Προεπιλεγμένο θέμα", + "themeAuto": "Σύστημα", + "themeLight": "Φωτεινό", + "themeDark": "Σκοτεινό", + "serverOriginHelp": "Το Homarr χρησιμοποιεί αυτήν τη διεύθυνση για την προπλήρωση των εντοπισμένων διευθύνσεων URL υπηρεσίας. Μπορείτε ακόμα να επεξεργαστείτε κάθε υπηρεσία ξεχωριστά.", + "serverDescription": "Αυτή είναι μια συντόμευση, όχι περιορισμός. Κάθε υπηρεσία που εντοπίστηκε παραμένει επεξεργάσιμη.", + "serverOrigin": "Διαδρομή τομέα, IP, ή αντιστροφή-proxy", + "serverOriginDescription": "Παραδείγματα: home.lan, 192.168.1.10, ή https://home.example.com/services. Επιλέξτε πώς κάθε υπηρεσία προσαρτάται παρακάτω.", + "analytics": "Κοινή χρήση ανώνυμων αναλύσεων προϊόντων", + "analyticsDescription": "Βοηθά το Homarr να βελτιώσει την αξιοπιστία του χαρακτηριστικού. Δεν αποστέλλονται διαπιστευτήρια υπηρεσίας ή περιεχόμενο του ταμπλό." + }, + "discover": { + "title": "Δείτε τι μπορεί να φτάσει αυτή η εγκατάσταση", + "description": "Το Homarr ελέγχει τις δυνατότητες στη θέση του. Μια υποδοχή Docker που λείπει ή Kubernetes πλαίσιο ποτέ δεν αποκλείει μια χειροκίνητη ρύθμιση.", + "database": "Βάση Δεδομένων", + "docker": "Docker και συμβατές πρίζες", + "kubernetes": "Kubernetes", + "assistantWorkshop": "Βοηθός και Εργαστήρι", + "found": "Βρέθηκαν {integrations} ενσωματώσεις και {apps} πρόσθετες εφαρμογές", + "retryKubernetes": "Ελέγξτε ξανά Kubernetes", + "retryWorkshop": "Ελέγξτε το Εργαστήρι ξανά", + "unknownVersion": "άγνωστη έκδοση", + "kubernetesAvailable": "Συνδέθηκε στο Kubernetes {version}", + "kubernetesDisabled": "Δεν είναι ενεργοποιημένο· συνεχίστε με το Docker ή τις χειροκίνητες υπηρεσίες", + "kubernetesUnavailable": "Το Kubernetes είναι ενεργοποιημένο, αλλά δεν μπορεί να επιτευχθεί από αυτή τη διαδικασία του Homarr", + "workshopAvailable": "Το Κοινοτικό Εργαστήρι και οι φιλοξενούμενες Βοηθητικές Υπηρεσίες είναι προσβάσιμες", + "workshopUnavailable": "Οι τοπικοί και προσαρμοσμένοι βοηθοί πάροχοι παραμένουν διαθέσιμοι", + "partialTitle": "Δεν ήταν δυνατή η σάρωση ορισμένων πηγών", + "partialDescription": "Τα αποτελέσματα από προσβάσιμους υπολογιστές διατηρούνται. Ελέγξτε τα δικαιώματα υποδοχής ή προσθέστε τις υπηρεσίες χειροκίνητα στην επόμενη ενότητα.", + "status": { + "checking": "Έλεγχος διαθεσιμότητας…", + "available": "Διαθέσιμο", + "partial": "Μερικώς διαθέσιμο", + "empty": "Reachable, no matching running services", + "disabled": "Απενεργοποιήθηκε από τη διαμόρφωση του διακομιστή", + "unavailable": "Μη διαθέσιμο από αυτή τη διαδικασία Homarr" } }, - "import": { - "title": "Εισαγωγή δεδομένων", - "subtitle": "Μπορείτε να εισαγάγετε δεδομένα από μια υπάρχουσα παρουσία Homarr.", - "dropzone": { - "title": "Σύρετε εδώ το αρχείο zip ή κάντε κλικ για περιήγηση", - "description": "Το μεταφορτωμένο zip θα υποβληθεί σε επεξεργασία και θα μπορείτε να επιλέξετε τι θέλετε να εισαγάγετε" + "connect": { + "title": "Συνδέστε αυτό που κάνει το διοικητικό συμβούλιο χρήσιμο", + "description": "Επιλέξτε αρκετές υπηρεσίες ταυτόχρονα. Οι ετικέτες Docker λαμβάνουν προτεραιότητα, η αντιστοίχιση εικόνας γεμίζει κενά και κάθε URL και διαπιστευτήρια παραμένει αξιολογήσιμη.", + "discoveredIntegrations": "Εντοπίστηκαν κρούσματα ενσωμάτωσης ({count})", + "detectedIntegrationLabel": "Εισαγωγή {name}, ανιχνεύτηκε ως {kind}", + "detectedAppLabel": "Εισαγωγή ανιχνεύθηκε εφαρμογή {name}", + "otherIntegrations": "Προσθήκη άλλης ενσωμάτωσης", + "configureIntegrations": "Ρύθμιση ενσωματώσεων", + "discoveredApps": "Εντοπίστηκαν εφαρμογές ({count})", + "appAddressRequired": "Προσθέστε μια διεύθυνση για το {name}ή αφαιρέστε την από την επιλογή.", + "empty": "Δεν επιλέχθηκαν ενσωματώσεις. Το Homarr θα δημιουργήσει ένα χρήσιμο πίνακα εκκίνησης με γενικά widgets.", + "dockerSource": "Προσάρτηση", + "manualSource": "Χειροκίνητα", + "url": "Url Υπηρεσίας", + "noCredentials": "Χωρίς διαπιστευτήρια", + "noCredentialsDescription": "Αυτή η ενσωμάτωση δεν χρειάζεται διαπιστευτήρια.", + "credentialMethod": "Μέθοδος διαπιστευτηρίων", + "getApiKey": "Άνοιγμα των ρυθμίσεων κλειδιού API για αυτήν την υπηρεσία", + "openGuide": "Ανοίξτε τον οδηγό εγκατάστασης του Homarr's για αυτήν την υπηρεσία", + "testConnection": "Δοκιμή σύνδεσης", + "testSuccess": "Η σύνδεση λειτουργεί", + "testSuccessDescription": "Το Homarr συνδέεται με την τρέχουσα διεύθυνση και τα διαπιστευτήρια.", + "testError": "Αποτυχία σύνδεσης", + "testErrorDescription": "Ελέγξτε τη διεύθυνση υπηρεσίας και τα διαπιστευτήρια, και προσπαθήστε ξανά.", + "needsConfiguration": "Χρειάζεται ρύθμιση παραμέτρων", + "tested": "Η σύνδεση δοκιμάστηκε", + "testFailed": "Δοκιμή σύνδεσης απέτυχε", + "incompleteConfirmation": "Οι ημιτελείς ενσωματώσεις θα παραληφθούν. Συνεχίστε χωρίς αυτές?" + }, + "board": { + "title": "Σχηματίστε τη σκακιέρα πριν κατασκευαστεί", + "description": "Το Homarr δημιουργεί προστατευμένες διατάξεις για Κινητά και Βάση και, στη συνέχεια, τοποθετεί εφαρμογές και συμβατά widget από τις υπηρεσίες που επιλέξατε.", + "target": "Πίνακας για ρύθμιση", + "targetDescription": "Επιλέξτε τον ακριβή πίνακα που θα ενημερωθεί αυτή η ρύθμιση.", + "targetPlaceholder": "Επιλογή σκακιέρας", + "targetRequired": "Επιλέξτε τον πίνακα που θα ρυθμιστεί πριν συνεχίσετε.", + "name": "Όνομα σκακιέρας", + "nameDescription": "Χρησιμοποιείται στο URL του πίνακα, γράμματα, αριθμούς, παύλες και κάτω παύλες μόνο.", + "nameRequired": "Εισάγετε ένα όνομα πίνακα πριν συνεχίσετε.", + "primaryColor": "Βασικό χρώμα", + "secondaryColor": "Δευτερεύον χρώμα", + "resetColors": "Επαναφορά χρωμάτων", + "radius": "Ακτίνα γωνίας widget", + "radiusOptions": { + "xs": "Σφιχτό", + "sm": "Λεπτό", + "md": "Ισορροπημένο", + "lg": "Στρογγυλεμένο", + "xl": "Απαλό" }, - "fileInfo": { - "action": { - "change": "Αλλαγή αρχείου" - } + "columns": "Στήλες σκαλιών", + "columnsDescription": "Οι στήλες καθορίζουν το οριζόντιο πλέγμα που χρησιμοποιείται για το μέγεθος και τη θέση αντικειμένων. 12 είναι αφθονία για τους περισσότερους ανθρώπους.", + "columnCount": "{count, plural, one {# στήλη} other {# στήλες}}", + "leftSidebar": "Left sidebar", + "rightSidebar": "Δεξιά πλευρική μπάρα", + "previewLabel": "Ζωντανή προεπισκόπηση της πρώτης διάταξης του πίνακα" + }, + "extend": { + "title": "Προηγμένα χαρακτηριστικά", + "tabsLabel": "Βοηθός, εργαστήριο και εγκατάσταση MCP", + "assistant": "Βοηθός", + "workshop": "Εργαστήριο", + "assistantSetup": { + "loginTitle": "Απαιτείται σύνδεση διαχειριστή", + "loginDescription": "Τα κλειδιά του παρόχου και η πρόσβαση στο μοντέλο είναι προνομιούχα. Ολοκληρώστε τη ρύθμιση, συνδεθείτε και το Homarr θα ανοίξει απευθείας τη ρύθμιση παραμέτρων του βοηθού.", + "loginAction": "Συνδεθείτε για να ρυθμίσετε τον Βοηθό" }, - "importSettings": { - "title": "Εισαγωγή ρυθμίσεων", - "description": "Διαμόρφωση της συμπεριφοράς εισαγωγής" + "workshopSetup": { + "title": "Εργαστήρι Homarr", + "description": "Περιηγηθείτε στα Προσαρμοσμένα Widgets, επιθεωρήστε τις απαιτούμενες δυνατότητές τους, εγκαταστήστε τα και δημοσιεύστε τη δική σας εργασία χωρίς να αντιγράψετε κώδικα μεταξύ διακομιστών.", + "available": "Διαθέσιμο", + "checking": "Γίνεται έλεγχος…", + "unavailable": "Unavailable", + "discoverTitle": "Ανακαλύψτε", + "discoverDescription": "Βρείτε widgets που χτίστηκαν για πραγματικές αυτο-φιλοξενούμενες ροές εργασίας.", + "installTitle": "Επανεξέταση και εγκατάσταση", + "installDescription": "Δείτε τα μεταδεδομένα και τη διαμόρφωση πριν προσθέσετε οτιδήποτε.", + "publishTitle": "Κοινοποίηση", + "publishDescription": "Δημοσίευση επαναχρησιμοποιήσιμων widgets πίσω στην κοινότητα.", + "browse": "Περιήγηση Στο Εργαστήριο" }, - "boardSelection": { - "title": "Βρέθηκαν {count} πίνακες", - "description": "Επιλέξτε όλους τους πίνακες με το μέγεθος που θέλετε να εισαγάγετε", - "action": { - "selectAll": "Επιλογή όλων", - "unselectAll": "Αποεπιλογή όλων" - } - }, - "summary": { - "title": "Σύνοψη εισαγωγής", - "description": "Στην παρακάτω σύνοψη μπορείτε να δείτε τι θα εισαχθεί", - "action": { - "import": "Επιβεβαίωση εισαγωγής και συνέχεια" - }, - "entities": { - "apps": "Εφαρμογές", - "boards": "Πίνακες", - "integrations": "Ενσωματώσεις", - "credentialUsers": "Χρήστες διαπιστευτηρίων" - } - }, - "tokenModal": { - "title": "Εισαγωγή token", - "field": { - "token": { - "label": "Token", - "description": "Εισαγάγετε το εμφανιζόμενο διακριτικό εισαγωγής από την προηγούμενη παρουσία του Homarr" - } - }, - "notification": { - "error": { - "title": "Μη έγκυρο διακριτικό", - "message": "Το διακριτικό που εισαγάγατε δεν είναι έγκυρο" - } - } + "mcpSetup": { + "title": "Homarr MCP", + "description": "Συνδέστε Claude, Codex, ή άλλο πελάτη MCP με τα πληκτρολογημένα εργαλεία του Homarar. Τα κλειδιά API διατηρούν την πρόσβαση ρητή και ανακλητή.", + "endpoint": "Streamable τελικό σημείο HTTP", + "keyTitle": "Αντιγραφή αυτού του κλειδιού τώρα", + "keyDescription": "Για λόγους ασφαλείας, ο Homarr δεν μπορεί να εμφανίσει ξανά αυτό το κλειδί API.", + "copyKey": "Αντιγραφή κλειδιού API", + "createKey": "Δημιουργία ενός κλειδιού MCP API", + "errorTitle": "Το κλειδί MCP API δεν μπόρεσε να δημιουργηθεί", + "loginRequired": "Συνδεθείτε ως διαχειριστής μετά την εγκατάσταση για να δημιουργήσετε ένα κλειδί API.", + "configuration": "Διαμόρφωση πελάτη", + "copy": "Αντιγραφή ρύθμισης παραμέτρων", + "copied": "Αντιγράφηκε", + "advanced": "Άνοιγμα εργαλείων MCP, δικαιωμάτων και λεπτομερειών εγκατάστασης" } }, - "user": { - "title": "Διαχειριστής", - "subtitle": "Καθορίστε τα διαπιστευτήρια του χρήστη διαχειριστή σας.", - "notification": { - "success": { - "title": "Ο Χρήστης δημιουργήθηκε", - "message": "Ο χρήστης δημιουργήθηκε επιτυχώς" - }, - "error": { - "title": "Αποτυχία δημιουργίας χρήστη" - } - } - }, - "group": { - "title": "Εξωτερική ομάδα", - "subtitle": "Καθορίστε την ομάδα που θα χρησιμοποιείται για εξωτερικούς χρήστες.", - "form": { - "name": { - "label": "Όνομα ομάδας", - "description": "Το όνομα πρέπει να αντιστοιχεί στην ομάδα διαχειριστών του εξωτερικού παρόχου" - } - } - }, - "settings": { - "title": "Ρυθμίσεις", - "subtitle": "Διαμόρφωση ρυθμίσεων διακομιστή." - }, - "integrations": { - "title": "Ενσωματώσεις", - "subtitle": "Επιλέξτε τις υπηρεσίες που χρησιμοποιείτε.", - "description": "Επιλέξτε τις ενσωματώσεις που θέλετε να συνδέσετε. Θα ρυθμίσουμε τον πίνακα σας με αντίστοιχα widgets αυτόματα.", - "action": { - "continue": "Συνέχεια", - "skip": "Παράλειψη για τώρα" - }, - "configure": { - "progress": "{current} από {total}", - "skip": "Παράλειψη αυτής της ενσωμάτωσης", - "finishing": "Ρύθμιση του πίνακα σας...", - "error": { - "title": "Αποτυχία ρύθμισης", - "message": "Κάτι πήγε στραβά κατά τη ρύθμιση του πίνακα σας. Παρακαλώ προσπαθήστε ξανά." - }, - "helpers": { - "tooltip": "Βοηθοί URL", - "description": "Αυτοί οι βοηθοί προσπαθούν να μαντέψουν το URL για τις υπηρεσίες σας. Αν δεν λειτουργήσει, απλά πληκτρολογήστε τη διεύθυνση χειροκίνητα." - } - }, - "urlTemplate": { - "label": "Βασικό URL", - "placeholder": "homelab.local ή 192.168.1.1", - "hint": "Εισαγάγετε το βασικό domain ή IP σας για αυτόματη συμπλήρωση των URL ενσωμάτωσης", - "warning": "Η ρύθμιση του βασικού URL τώρα θα συμπληρώσει αυτόματα όλα τα URL ενσωμάτωσης, εξοικονομώντας χρόνο κατά τη ρύθμιση", - "preview": "π.χ. {example}", - "mode": { - "subdomain": "Υποτομέας", - "hostPort": "Διακομιστής:Θύρα" - } - }, - "docker": { - "detected": "Ο Docker εντόπισε {count} υπηρεσίες", - "detectedBreakdown": "{integrations} ενσωματώσεις · {apps} εφαρμογές", - "summary": "Το Homarr εντόπισε {apps} εφαρμογές, {integrations} από τις οποίες έχουν ενσωματωμένες ενσωματώσεις", - "appBadge": "Εφαρμογή", - "appSectionLabel": "Εφαρμογές προς προσθήκη στον πίνακα ({count} επιλεγμένες)", - "scanning": "Σάρωση Docker...", - "scanningDescription": "Αναζήτηση εκτελούμενων containers στο σύστημά σας" + "review": { + "title": "Ένα διοικητικό συμβούλιο, χτισμένο γύρω από τις υπηρεσίες σας", + "description": "Δοκιμές Homarr μη αποθηκευμένες συνδέσεις, εισάγει τις επιλεγμένες εφαρμογές, εφαρμόζει εμφάνιση και διατάξεις, στη συνέχεια ανοίγει τον ακριβή πίνακα που ρυθμίστηκε.", + "board": "Πρώτος πίνακας", + "columns": "Στήλες σκαλιών", + "columnsValue": "{count, plural, one {# στήλη} other {# στήλες}}", + "sidebars": "Πλαϊνές Μπάρες", + "sidebarsValue": "{count, plural, =0 {None} one {# sidebar} other {# sidebars}}", + "layouts": "Ανταποκρινόμενες διατάξεις", + "layoutsValue": "Κινητό + Βάση", + "integrations": "Ενσωματώσεις", + "integrationsValue": "{count, plural, =0 {Κανένα επιλεγμένο} one {# ενσωμάτωση} other {# ενσωματώσεις}}", + "apps": "Πλακίδια εφαρμογών", + "appsValue": "{count, plural, =0 {Starter apps μόνο} one {# app tile} other {# app tiles}}", + "language": "Γλώσσα", + "theme": "Θέμα", + "themeAuto": "Προτίμηση συστήματος", + "themeLight": "Φωτεινό", + "themeDark": "Σκοτεινό", + "colors": "Χρώμα σκακιέρας", + "radius": "Ακτίνα widget", + "automaticTitle": "Τι θα δημιουργήσει το Homarr", + "automaticDescription": "Συμβατά widgets, εικονίδια, συνδέσμους εφαρμογών, σχέσεις ενσωμάτωσης και τοποθέτηση απόκρισης προέρχονται από τον κοινόχρηστο κατάλογο Homarr. Μπορείτε να επεξεργαστείτε κάθε αποτέλεσμα αργότερα.", + "dockerWarningTitle": "Κάποιες ετικέτες Docker άλλαξαν κατά την εγκατάσταση", + "dockerWarningDescription": "{count, plural, one {# το επιλεγμένο αποτέλεσμα Docker δεν μπορεί να εφαρμοστεί επειδή η υπηρεσία του άλλαξε, στοχοθετήθηκε ένας άλλος πίνακας ή το widget του ήταν ασύμβατο} other {# τα επιλεγμένα αποτελέσματα Docker δεν μπορούν να εφαρμοστούν επειδή οι υπηρεσίες άλλαξαν, στοχοθετούσαν έναν άλλο πίνακα ή τα widget τους δεν ήταν συμβατά με}}.", + "errorTitle": "Δεν ήταν δυνατή η κατασκευή σκακιέρας", + "progress": { + "applying": "Δοκιμή συνδέσεων και την κατασκευή του σκάφους σας", + "done": "Ο πίνακας σας είναι έτοιμος" } }, "finish": { - "title": "Ολοκλήρωση ρύθμισης", - "subtitle": "Είστε έτοιμοι να ξεκινήσετε!", - "description": "Ολοκληρώσατε επιτυχώς τη διαδικασία ρύθμισης. Μπορείτε πλέον να ξεκινήσετε να χρησιμοποιείτε το Homarr. Επιλέξτε την επόμενη ενέργειά σας:", - "action": { - "goToBoard": "Μετάβαση στον πίνακα {name}", - "createBoard": "Δημιουργία του πρώτου σας πίνακα", - "inviteUser": "Πρόσκληση άλλων χρηστών", - "docs": "Διαβάστε την τεκμηρίωση" - } + "title": "Ο πρώτος πίνακας είναι έτοιμος.", + "description": "Το Homarr συνδέει τα κομμάτια που επιλέξατε και κράτησε το υπόλοιπο επεξεργάσιμο. Ανοίξτε τον πίνακα τώρα η σύντομη περιήγηση σε προϊόν μπορεί να σας δείξει τη λειτουργία επεξεργασίας, τα widgets, τις διατάξεις και την αναζήτηση.", + "openBoard": "Άνοιγμα της πλακέτας μου", + "manageTitle": "Διαχείριση", + "manageDescription": "Πρόστιμο εφαρμογές, ενσωματώσεις, πίνακες, χρήστες και ρυθμίσεις διακομιστή.", + "workshopTitle": "Εργαστήριο", + "workshopDescription": "Ανακαλύψτε και εγκαταστήστε κοινότητα Προσαρμοσμένα Widgets.", + "docsTitle": "Μάθετε Το Homarr", + "docsDescription": "Διαβάστε τους εστιασμένους οδηγούς για πίνακες, widgets, ενσωματώσεις και εργαλεία." } - }, - "backToStart": "Επιστροφή στην αρχή" + } }, "user": { - "title": "Χρήστες", "name": "Χρήστης", "page": { "login": { @@ -159,12 +249,10 @@ }, "invite": { "title": "Εγγραφή στο Homarr", + "titleWithAppName": "Γίνετε Μέλος {appName}", "subtitle": "Καλώς ήρθατε στο Homarr! Δημιουργήστε τον λογαριασμό σας", + "subtitleWithAppName": "Καλώς ήρθατε στο {appName}! Παρακαλώ δημιουργήστε το λογαριασμό σας", "description": "Σας προσκάλεσε ο/η {username}" - }, - "init": { - "title": "Νέα εγκατάσταση Homarr", - "subtitle": "Δημιουργήστε τον αρχικό λογαριασμό διαχειριστή" } }, "field": { @@ -192,12 +280,17 @@ "previousPassword": { "label": "Προηγούμενος κωδικός" }, - "homeBoard": { - "label": "Αρχικός πίνακας" - }, "pingIconsEnabled": { "label": "Χρήση εικονιδίων για pings" }, + "byteUnitSystem": { + "label": "Μονάδες μεγέθους δεδομένων", + "description": "Επιλέξτε πώς το Homarr εμφανίζει τα μεγέθη byte και τα ποσοστά byte. Τα ποσοστά bit χρησιμοποιούν πάντα δεκαδικές μονάδες.", + "options": { + "binary": "Δυαδικό", + "decimal": "Δεκαδικός" + } + }, "enableRightClickOnWidgets": { "label": "Ενεργοποίηση δεξιού κλικ στα widget", "description": "Εμφάνιση του μενού περιβάλλοντος του Homarr με δεξί κλικ σε ένα widget. Απενεργοποιήστε το για να χρησιμοποιήσετε το προεπιλεγμένο μενού του προγράμματος περιήγησης (π.χ. «Άνοιγμα συνδέσμου σε νέα καρτέλα»)." @@ -247,7 +340,6 @@ } } }, - "create": "Δημιουργία χρήστη", "changePassword": { "label": "Αλλαγή κωδικού πρόσβασης", "notification": { @@ -259,56 +351,6 @@ } } }, - "changeHomeBoard": { - "notification": { - "success": { - "message": "Ο αρχικός πίνακας άλλαξε επιτυχώς" - }, - "error": { - "message": "Δεν ήταν δυνατή η αλλαγή του αρχικού πίνακα" - } - } - }, - "changeSearchPreferences": { - "notification": { - "success": { - "message": "Οι προτιμήσεις αναζήτησης άλλαξαν επιτυχώς" - }, - "error": { - "message": "Αδυναμία αλλαγής προτιμήσεων αναζήτησης" - } - } - }, - "changeFirstDayOfWeek": { - "notification": { - "success": { - "message": "Η πρώτη ημέρα της εβδομάδας άλλαξε επιτυχώς" - }, - "error": { - "message": "Δεν ήταν δυνατή η αλλαγή της πρώτης ημέρας της εβδομάδας" - } - } - }, - "changePingIconsEnabled": { - "notification": { - "success": { - "message": "Τα εικονίδια ping εναλλάχθηκαν επιτυχώς" - }, - "error": { - "message": "Δεν ήταν δυνατή η εναλλαγή των εικονιδίων ping" - } - } - }, - "changeDdgBangs": { - "notification": { - "success": { - "message": "Εναλλαγή bangs DuckDuckGo επιτυχής" - }, - "error": { - "message": "Αδυναμία εναλλαγής bangs DuckDuckGo" - } - } - }, "manageAvatar": { "changeImage": { "label": "Αλλαγή εικόνας", @@ -338,16 +380,6 @@ } } }, - "editProfile": { - "notification": { - "success": { - "message": "Το προφίλ ενημερώθηκε επιτυχώς" - }, - "error": { - "message": "Δεν ήταν δυνατή η ενημέρωση του προφίλ" - } - } - }, "delete": { "label": "Οριστική διαγραφή χρήστη", "description": "Διαγράφει αυτόν τον χρήστη μαζί με τις προτιμήσεις του. Δεν θα διαγραφεί κανένας πίνακας. Ο χρήστης δεν θα ειδοποιηθεί.", @@ -356,18 +388,13 @@ "select": { "label": "Επιλέξτε χρήστη", "notFound": "Δεν βρέθηκε χρήστης" - }, - "transfer": { - "label": "Επιλέξτε νέο ιδιοκτήτη" } } }, "group": { - "title": "Ομάδες", "name": "Ομάδα", "search": "Εύρεση ομάδας", "field": { - "name": "Όνομα", "members": "Μέλη", "homeBoard": { "label": "Αρχικός πίνακας", @@ -388,6 +415,19 @@ } } }, + "custom-widget": { + "title": "Προσαρμοσμένα γραφικά στοιχεία", + "item": { + "manage": { + "label": "Διαχείριση προσαρμοσμένων γραφικών συστατικών", + "description": "Επιτρέψτε στα μέλη να δημιουργήσουν, να επεξεργάζονται και να διαγράφουν προσαρμοσμένους ορισμούς widget" + }, + "secret-write": { + "label": "Ρύθμιση προσαρμοσμένων μυστικών widget", + "description": "Επιτρέψτε στα μέλη και τα κλειδιά API τους να ορίσουν τα κρυπτογραφημένα προσαρμοσμένα διαπιστευτήρια widget" + } + } + }, "app": { "title": "Εφαρμογές", "item": { @@ -493,6 +533,35 @@ "description": "Να επιτρέπεται στα μέλη η διαχείριση και διαγραφή οποιασδήποτε μηχανής αναζήτησης" } } + }, + "matrix": { + "none": "Καμία πρόσβαση", + "impliedHint": "Παραχωρεί επίσης: {permissions}", + "grantedViaAdmin": "Οι διαχειριστές έχουν ήδη αυτό. Ορίστε τον Διαχειριστή σε \"Χωρίς πρόσβαση\" για να τον ρυθμίσετε ξεχωριστά.", + "preset": { + "label": "Προεπιλογές", + "viewer": "Προβολέας", + "viewerDescription": "Μόνο ανάγνωση: δείτε πίνακες και μέσα ενημέρωσης, χρησιμοποιήστε εφαρμογές και ενσωματώσεις που ήδη υπάρχουν.", + "editor": "Επεξεργαστής", + "editorDescription": "Καθημερινή διαχείριση: δημιουργία και επεξεργασία πινάκων, εφαρμογών, ενσωματώσεων και μηχανών αναζήτησης.", + "admin": "Διαχειριστής", + "adminDescription": "Απεριόριστη πρόσβαση σε κάθε λειτουργία και ρύθμιση, συμπεριλαμβανομένης της διαχείρισης χρηστών.", + "custom": "Προσαρμοσμένο" + }, + "effective": { + "title": "Αποτελεσματικά δικαιώματα", + "description": "Το πλήρες, αποδιπλασιασμένο σύνολο ενεργειών που μπορούν να εκτελέσουν τα μέλη αυτής της ομάδας, συμπεριλαμβανομένων των δικαιωμάτων που χορηγούνται έμμεσα.", + "empty": "Δεν επιλέχθηκαν δικαιώματα" + }, + "noneDescription": "Τα μέλη δεν έχουν πρόσβαση σε αυτή την περιοχή.", + "level": { + "view": "Προβολή", + "use": "Χρήση", + "interact": "Αλληλεπίδραση", + "modify": "Τροποποίηση", + "full": "Πλήρης" + }, + "capabilityIncluded": "Ήδη περιλαμβάνονται στο “{level}”" } }, "memberNotice": { @@ -607,21 +676,24 @@ "search": "Εύρεση εφαρμογής", "page": { "list": { - "title": "Εφαρμογές", + "ariaLabel": "Διαμορφωμένες εφαρμογές", "noResults": { "title": "Δεν υπάρχουν εφαρμογές ακόμα", - "action": "Δημιουργήστε την πρώτη σας εφαρμογή" + "description": "Οι εφαρμογές είναι σύνδεσμοι με τις υπηρεσίες και τα εργαλεία που θέλετε στους πίνακες σας.", + "action": "Δημιουργήστε την πρώτη σας εφαρμογή", + "filteredTitle": "Καμία εφαρμογή δεν ταιριάζει με την αναζήτησή σας", + "filteredDescription": "Δεν ταιριάζουν εφαρμογές \"{search}\". Δοκιμάστε άλλο όνομα ή URL.", + "createOnlyTitle": "Μπορείτε να προσθέσετε μόνο εφαρμογές", + "createOnlyDescription": "Τα δικαιώματά σας επιτρέπουν να δημιουργήσετε εφαρμογές αλλά να μην περιηγηθείτε σε ήδη υπάρχοντες. Ζητήστε από τον διαχειριστή πρόσβαση στη διαχείριση εφαρμογών για να δείτε την πλήρη λίστα." } }, "create": { "title": "Νέα εφαρμογή", "notification": { "success": { - "title": "Επιτυχής δημιουργία", "message": "Η εφαρμογή δημιουργήθηκε επιτυχώς" }, "error": { - "title": "Αποτυχία δημιουργίας", "message": "Δεν ήταν δυνατή η δημιουργία της εφαρμογής" } } @@ -630,11 +702,9 @@ "title": "Επεξεργασία εφαρμογής", "notification": { "success": { - "title": "Οι αλλαγές εφαρμόστηκαν επιτυχώς", "message": "Η εφαρμογή αποθηκεύτηκε επιτυχώς" }, "error": { - "title": "Δεν ήταν δυνατή η εφαρμογή των αλλαγών", "message": "Δεν ήταν δυνατή η αποθήκευση της εφαρμογής" } } @@ -644,26 +714,18 @@ "message": "Είστε βέβαιοι ότι θέλετε να διαγράψετε την εφαρμογή {name};", "notification": { "success": { - "title": "Επιτυχής διαγραφή", "message": "Η εφαρμογή διαγράφτηκε επιτυχώς" }, "error": { - "title": "Αποτυχία διαγραφής", "message": "Δεν ήταν δυνατή η διαγραφή της εφαρμογής" } } } }, "field": { - "name": { - "label": "Όνομα" - }, "description": { "label": "Περιγραφή" }, - "url": { - "label": "Url" - }, "useDifferentUrlForPing": { "checkbox": { "label": "Χρήση διαφορετικής URL για ping", @@ -678,34 +740,582 @@ "search": "Αναζήτηση εφαρμογής", "noResults": "", "action": "Επιλογή {app}", - "title": "Επιλέξτε μια εφαρμογή για προσθήκη σε αυτόν τον πίνακα" + "title": "Επιλέξτε μια εφαρμογή για προσθήκη σε αυτόν τον πίνακα", + "toggle": "Κάντε κλικ για να επιλέξετε", + "selected": "Επιλεγμένο", + "multiple": "Προσθήκη {count}", + "selectedCount": "{count, plural, one {# επιλεγμένα} other {# επιλεγμένα}}", + "appsSelected": "{count, plural, one {# η εφαρμογή επέλεξε} other {# επιλεγμένες εφαρμογές}}", + "selectMultiple": "Επιλογή πολλαπλών", + "cancelMultiple": "Έξοδος από πολλαπλή επιλογή", + "customApplication": "Προσαρμοσμένη εφαρμογή", + "application": "Εφαρμογή" }, "create": { "title": "", "description": "Δημιουργήστε νέα εφαρμογή ", "action": "Άνοιγμα δημιουργίας εφαρμογής" + } + } + }, + "tips": { + "dismiss": "Παράβλεψη φιλοδωρήματος", + "multiSelectApps": "Συμβουλή: Κρατήστε πατημένο το Ctrl / \"για να επιλέξετε πολλαπλές εφαρμογές ταυτόχρονα" + }, + "customWidget": { + "secretEntry": { + "title": "Ρύθμιση πηγής API", + "description": "Επιβεβαιώστε τη διεύθυνση URL του διακομιστή και εισάγετε τα διαπιστευτήρια. Οι μυστικές τιμές κρυπτογραφούνται από το Homarr και δεν επιστρέφονται ποτέ στον αιτούντα πράκτορα.", + "loading": "Φόρτωση ασφαλούς αιτήματος…", + "applying": "Εφαρμογή αυτής της διαμόρφωσης… Διατηρήστε αυτή τη σελίδα ανοιχτή.", + "saved": "Ρυθμίστηκε η πηγή API. Μπορείτε να κλείσετε αυτή τη σελίδα.", + "unavailable": "Αίτηση μη διαθέσιμη", + "saveError": "Αδυναμία ρύθμισης πηγής API", + "source": "Πηγή API: {name}", + "baseUrl": "Url Διακομιστή", + "networkScope": "Πρόσβαση δικτύου", + "save": "Αποθήκευση διαμόρφωσης API", + "expires": "Αυτό το one-time αίτημα λήγει στο {time}." + }, + "page": { + "list": { + "noResults": "Δεν υπάρχουν ακόμα προσαρμοσμένα widgets. Δημιουργήστε το πρώτο σας!", + "noDescription": "Χωρίς περιγραφή", + "enabled": "Ενεργοποιημένο", + "disabled": "Απενεργοποιημένο", + "disabledDescription": "Αυτό το widget παραμένει ρυθμισμένο, αλλά δεν θα φορτώσει σε κανένα διοικητικό συμβούλιο.", + "requestCount": "{count, plural, one {# αίτημα} other {# αιτήσεις}}", + "invalidDefinition": "Μη έγκυρος ορισμός", + "migrationRequired": "Απαιτείται μετεγκατάσταση", + "migrationInstructions": "Ανοίξτε Ενέργειες για να αντιγράψετε ή να εξάγετε τον αρχικό ορισμό v1 για τη χειροκίνητη αναψυχή. Μπορείτε επίσης να χρησιμοποιήσετε την άμεση μετανάστευση με ένα LLM. Υπάρχουσες θέσεις εργασίας μετά τη μετανάστευση.", + "missingCredentials": "{count, plural, one {Τα διαπιστευτήρια λείπουν} other {# τα διαπιστευτήρια λείπουν}}", + "missingCredentialsDescription": "{count, plural, one {Αυτό το widget χρειάζεται ακόμα ένα πιστοποιητικό.} other {Αυτό το widget χρειάζεται ακόμα # πιστοποιητικά.}} Επιλέξτε αυτό το σήμα για να ρυθμίσετε το URL και τις κρυπτογραφημένες τιμές." }, - "add": "" + "create": { + "title": "Δημιουργία Προσαρμοσμένου Widget", + "subtitle": "Ορίστε μια διεύθυνση URL API, πιστοποίηση και τον τρόπο εμφάνισης των δεδομένων απόκρισης." + }, + "tabs": { + "ariaLabel": "Προσαρμοσμένες ενότητες widget", + "installed": "Εγκατεστημένο", + "workshop": "Εργαστήριο" + } + }, + "action": { + "pasteImportHint": "Επικολλήστε ένα πλήρες προσαρμοσμένο widget JSON με Ctrl+V ή Command+V", + "delete": "Διαγραφή Προσαρμοσμένου Widget", + "deleteConfirm": "Είστε βέβαιοι ότι θέλετε να διαγράψετε το \"{name}\"; Αυτή η ενέργεια δεν μπορεί να αναιρεθεί.", + "export": "Εξαγωγή", + "duplicate": "Αντιγραφή", + "aiPrompt": "Σχεδιασμός με τεχνητή νοημοσύνη", + "copyAiPrompt": "Αντιγραφή προτροπής AI", + "enable": "Ενεργοποίηση", + "disable": "Απενεργοποίηση", + "menu": "Ενέργειες", + "downloadSkill": "Προβολή Προσαρμοσμένης Δεξιότητας Widget", + "publishWorkshop": "Δημοσίευση στο Workshop", + "migrate": "Μετεγκατάσταση Προσαρμοσμένου Γραφικού Στοιχείου", + "configureSources": "Ρύθμιση πηγών", + "copyLegacyDefinition": "Αντιγραφή αρχικού περιεχομένου widget", + "exportLegacyDefinition": "Εξαγωγή αρχικού περιεχομένου widget", + "copyMigrationPrompt": "Αντιγραφή προτροπής μετανάστευσης LLM", + "pasteMigration": "Επικόλληση μεταναστευτικού widget", + "importMigration": "Εισαγωγή μετεγκατάσταση αρχείου JSON" + }, + "sourceSetupDialog": { + "title": "Ρύθμιση πηγών widget", + "description": "Επανεξέταση όπου αυτό το widget συνδέει και προσθέτει ή αντικαθιστά τα κρυπτογραφημένα διαπιστευτήριά του.", + "credentialsRequired": "Τα αιτήματα θα αποτύχουν μέχρι να προστεθούν τα απαιτούμενα πιστοποιητικά.", + "save": "Αποθήκευση διαμόρφωσης" + }, + "field": { + "description": "Περιγραφή" + }, + "editor": { + "errorBoundary": { + "title": "Κάτι πήγε στραβά" + }, + "action": { + "components": "Συστατικά", + "format": "Μορφή", + "insertStarter": "Insert starter", + "redo": "Επανάληψη", + "copied": "Αντιγράφηκε", + "schema": "Σχήμα" + }, + "reference": { + "minimal": "Ελάχιστο παράδειγμα", + "full": "Πλήρες παράδειγμα" + }, + "componentReference": { + "search": "Αναζήτηση στοιχείων", + "empty": "Δεν υπάρχουν στοιχεία που να ταιριάζουν", + "count": "{count, number} διαθέσιμα στοιχεία" + }, + "status": { + "errors": "{count, number} σφάλματα", + "warnings": "{count, number} προειδοποιήσεις", + "ready": "Δεν βρέθηκαν προβλήματα", + "position": "Ln {line, number}, Col {column, number}", + "characters": "{count, number} χαρακτήρες", + "charactersWithLimit": "{count, number} / {limit, number}" + }, + "diagnostics": { + "title": "Πρότυπα διαγνωστικών", + "line": "Γραμμή {line, number}", + "ast": "{value}", + "bindingTypeConflict": "Η είσοδος \"{value}\" κοινοποιείται με χειριστήρια μη συμβατών τύπων τιμών.", + "runtimeBindingTypeConflict": "Η είσοδος \"{value}\" είναι δεσμευμένη τόσο {firstType} και {secondType}.", + "dynamicRequestId": "Απαιτείται literal requestId. Dynamic request IDs are not accepted.", + "dynamicInputBinding": "Απαιτείται ένα όνομα κυριολεκτικής εισόδου για τη σύνδεση.", + "inlineRequestProps": "Στοιχεία δικτύου δέχονται requestId και params; inline URL, μέθοδος, κεφαλίδα και στηρίγματα σώματος έχουν αποκλειστεί.", + "invalidRequestManifest": "Τα επώνυμα αιτήματα πρέπει να είναι έγκυρος χάρτης αιτημάτων. {value}", + "missingRequestId": "Αυτή η συνιστώσα δικτύου απαιτεί κυριολεκτικά Id.", + "templateEmpty": "Εισάγετε ένα πρότυπο JSX.", + "templateTooLong": "Το πρότυπο υπερβαίνει το όριο των 50.000 χαρακτήρων.", + "unknownRequest": "Δεν υπάρχει κανένα αίτημα με όνομα ID \"{value}\"." + } + }, + "workbench": { + "configure": "Ρύθμιση", + "sectionNavigation": "Προσαρμοσμένες ενότητες widget", + "widgetPreview": "Προεπισκόπηση widget", + "generalInformation": "Γενικές πληροφορίες", + "invalidWidget": "Μη έγκυρο widget", + "section": { + "general": "Γενικά", + "sources": "API πηγές", + "requests": "Αιτήματα", + "options": "Επιλογές", + "jsx": "JSX", + "preview": "Προεπισκόπηση" + }, + "status": { + "unsaved": "Μη αποθηκευμένες αλλαγές", + "invalid": "Χρειάζεται προσοχή", + "ready": "Έτοιμο" + }, + "saveError": { + "title": "Το widget δεν αποθηκεύτηκε", + "description": "Διορθώστε αυτά τα σφάλματα επικύρωσης και αποθηκεύστε ξανά.", + "more": "Εμφανίζονται ακόμη +{count} σφάλματα στο περιβάλλον εργασίας.", + "errors": "Σφάλματα επικύρωσης", + "copy": "Αντιγραφή σφαλμάτων", + "copied": "Τα σφάλματα αντιγράφηκαν" + }, + "action": { + "preview": "Δοκιμή και προεπισκόπηση", + "previewLoading": "Αιτήματα δοκιμής" + }, + "requests": { + "title": "Ερωτήματα και ενέργειες με όνομα", + "label": "Αιτήματα", + "description": "Ερωτήματα για τη φόρτωση δεδομένων; ενέργειες εκτελούνται μόνο μετά την αλληλεπίδραση του χρήστη. Οποιαδήποτε μέθοδος HTTP είναι έγκυρη για κάθε είδος." + }, + "options": { + "title": "Επιλογές widget" + }, + "builder": { + "advancedManifest": "Προηγμένο αρχείο δηλώσεων", + "advancedJson": "Προηγμένο manifest JSON", + "manifestFilename": "widget.json", + "request": "Αίτημα {count, number}", + "requestId": "Αναγνωριστικό Αίτησης", + "type": "Τύπος πελάτη λήψεων", + "method": "Μέθοδος", + "source": "API πηγή", + "run": "Εκτέλεση", + "runLoad": "Όταν φορτώσει το widget", + "runManual": "Από Υποανάκτηση", + "permission": "Άδεια", + "path": "Διαδρομή", + "pathDescription": "Χρησιμοποιήστε '{option:name}' για επιλογές widget και '{param:name}' για τιμές επίκλησης.", + "requestDetails": "Ερώτημα, σώμα και συμπεριφορά", + "queryValues": "Τιμές ερωτήματος", + "queryKey": "Κλειδί ερωτήματος", + "queryKeyInvalid": "Χρησιμοποιήστε ένα μοναδικό αναγνωριστικό που ξεκινά με ένα γράμμα και περιέχει μόνο γράμματα, αριθμούς, - ή _.", + "valueSource": "Πηγή τιμής", + "literal": "Literal", + "widgetOption": "Επιλογή widget", + "invocationParameter": "Παράμετρος κλίσης", + "option": "Επιλογή", + "parameterName": "Όνομα παραμέτρου", + "value": "Τιμή", + "removeQueryValue": "Αφαίρεση τιμής ερωτήματος", + "addQueryValue": "Προσθήκη τιμής ερωτήματος", + "jsonBody": "Φορέας JSON", + "jsonBodyDescription": "Προαιρετικό. Εισαγάγετε αναφορές $option και $param σε οποιοδήποτε βάθος.", + "insertOptionReference": "Εισαγωγή αναφοράς επιλογής", + "insertParameterReference": "Εισαγωγή αναφοράς παραμέτρου", + "confirmation": "Μήνυμα επιβεβαίωσης", + "invalidation": "Ανανέωση μετά την επιτυχία", + "invalidationDescription": "Αναγνωριστικά ερωτήματος διαχωρισμένα με κόμματα", + "noAuth": "Αποστολή χωρίς ταυτοποίηση πηγής", + "moveRequestUp": "Μετακίνηση αιτήματος πάνω", + "moveRequestDown": "Μετακίνηση αιτήματος κάτω", + "removeRequest": "Αφαίρεση αιτήματος", + "addRequest": "Προσθήκη αιτήματος", + "optionName": "Όνομα επιλογής", + "label": "Ετικέτα", + "control": "Έλεγχος", + "description": "Περιγραφή", + "default": "Προεπιλογή", + "optionDetails": "Περιορισμοί και δυναμικές επιλογές", + "minimum": "Ελάχιστο", + "maximum": "Μέγιστο", + "step": "Βήμα", + "choiceLabel": "Ετικέτα επιλογής", + "choiceValue": "Τιμή επιλογής", + "newChoice": "Νέα επιλογή", + "addChoice": "Προσθήκη επιλογής", + "removeChoice": "Αφαίρεση επιλογής", + "choicesRequest": "Φόρτωση επιλογών από αίτημα", + "itemsPath": "Διαδρομή στοιχείων", + "itemsPathPlaceholder": "στοιχεία (προαιρετικά)", + "valuePath": "Διαδρομή τιμής", + "labelPath": "Διαδρομή ετικέτας", + "group": "Ομάδα", + "advancedOption": "Προηγμένη επιλογή", + "moveOptionUp": "Μετακίνηση επιλογής πάνω", + "moveOptionDown": "Μετακίνηση επιλογής κάτω", + "removeOption": "Κατάργηση επιλογής", + "addOption": "Προσθήκη επιλογής", + "invalidJson": "Μη Έγκυρο JSON", + "invalidWidget": "Μη έγκυρο widget" + }, + "jsx": { + "title": "JSX πρότυπο", + "label": "Πρότυπο" + }, + "sources": { + "title": "Πηγές API και διαπιστευτήρια", + "newName": "API {count, number}", + "duplicateSourceId": "Τα αναγνωριστικά προέλευσης API πρέπει να είναι μοναδικά.", + "credentialRemoved": "Το διαπιστευτήριο αφαιρέθηκε", + "credentialRemovedDescription": "Η αποθηκευμένη τιμή διαγράφηκε.", + "primary": "Κύριο API", + "id": "Id Πηγής", + "name": "Όνομα εργασίας", + "baseUrl": "Βασικό URL", + "baseUrlError": { + "invalid": "Εισάγετε μια πλήρη διεύθυνση URL.", + "protocol": "Χρήση HTTP ή HTTPS URL.", + "credentials": "Αφαιρέστε το όνομα χρήστη και τον κωδικό πρόσβασης από αυτή τη διεύθυνση URL. Ρυθμίστε τα διαπιστευτήρια παρακάτω.", + "queryOrFragment": "Αφαιρέστε τη συμβολοσειρά ή το θραύσμα ερωτήματος από αυτό το βασικό URL. Προσθέστε τιμές ερωτήματος σε μια αίτηση με όνομα. (Automatic Translation)" + }, + "networkScope": "Πρόσβαση δικτύου", + "authentication": "Ταυτοποίηση", + "headerName": "Όνομα κεφαλίδας", + "queryParameter": "Παράμετρος ερωτήματος", + "configured": "Διαμορφωμένο - εισάγετε μια αντικατάσταση", + "clear": "Καθαρός", + "remove": "Αφαίρεση πηγής και των αιτημάτων της", + "advanced": "Προχωρημένα", + "add": "Προσθήκη άλλης πηγής API", + "sourceType": "Ενσωμάτωση", + "manualSource": "HTTP API", + "existingIntegration": "Υπάρχουσα ενσωμάτωση", + "integrationType": "Τύπος ενσωμάτωσης", + "selectIntegration": "Διαμορφωμένη ενσωμάτωση", + "noIntegrations": "Δεν υπάρχουν διαθέσιμες ενσωματώσεις", + "integrationUnavailable": "Η επιλεγμένη ενσωμάτωση δεν είναι πλέον διαθέσιμη. Επιλέξτε μια άλλη ενσωμάτωση.", + "integrationDescription": "Χρησιμοποιεί το αποθηκευμένο URL και τα διαπιστευτήρια. Οι αλλαγές εφαρμόζονται αυτόματα. Η πλήρης πρόσβαση στην ολοκλήρωση απαιτείται για την εκτέλεση των αιτημάτων." + }, + "ai": { + "title": "Δημιουργία ή διόρθωση με οποιοδήποτε τεχνητή νοημοσύνη", + "description": "Προσθέστε πρώτα μια διεύθυνση URL docs API αν διαθέτετε. Για επιδιορθώσεις, εκτελέστε προεπισκόπηση αν είναι δυνατόν. Αντιγράψτε την προτροπή σε οποιοδήποτε AI: μπορεί να ζητήσει τις πληροφορίες που λείπουν. Επικολλήστε την τελική της JSON εδώ.", + "request": "Τι πρέπει να κάνει αυτό το widget?", + "documentationUrl": "URL τεκμηρίωσης API (προαιρετικό)", + "paste": "Επικόλληση", + "response": "AI απάντηση", + "manualCopyDescription": "Η πρόσβαση στο πρόχειρο δεν είναι διαθέσιμη. Επιλέξτε την παρακάτω προτροπή και αντιγράψτε την χειροκίνητα.", + "manualPasteDescription": "Η πρόσβαση στο πρόχειρο δεν είναι διαθέσιμη ή η αντιγραμμένη απάντηση χρειάζεται διόρθωση. Επικολλήστε την απόκριση JSON της AI εδώ.", + "selectAll": "Επιλογή όλων", + "loadResponse": "Φόρτωση απάντησης", + "loaded": "Το widget φορτώθηκε στον επεξεργαστή", + "invalidResponse": "Το πρόχειρο δεν περιέχει ένα έγκυρο γραφικό συστατικό v2", + "invalidResponseDetail": "Η απόκριση της AI δεν είναι έγκυρη: {message}" + }, + "preview": { + "invalid": "Διόρθωση σφαλμάτων επικύρωσης για προεπισκόπηση αυτού του γραφικού συστατικού.", + "fixtureError": "Σφάλμα προεπισκόπησης προσθήκης", + "requestData": "Αίτηση δεδομένων", + "status": { + "idle": "Τα αιτήματα δεν έχουν ελεγχθεί", + "loading": "Αιτήματα δοκιμής", + "success": "Όλα τα αιτήματα φόρτωσης πέτυχαν", + "error": "Ένα ή περισσότερα αιτήματα φόρτωσης απέτυχε" + }, + "result": { + "loading": { + "title": "Δοκιμαστικό αίτημα API", + "description": "Το Homarr δημιουργεί μια συνεδρία προεπισκόπησης και φορτώνει τα δεδομένα widget" + }, + "success": { + "title": "Προεπισκόπηση έτοιμη", + "description": "{succeeded, plural, =0 {Αυτό το widget δεν έχει αιτήματα φόρτωσης.} one {# το αίτημα φόρτωσης πέτυχε.} other {# η φόρτωση των αιτήσεων πέτυχε.}} Ανοιχτά δεδομένα για να επιθεωρήσετε την απόκριση." + }, + "error": { + "title": "Η προεπισκόπηση ολοκληρώθηκε με σφάλματα αίτησης", + "description": "{succeeded, number} πέτυχε και {failed, number} απέτυχε. Ανοιχτά δεδομένα για τις λεπτομέρειες απόκρισης και σφάλματος." + } + }, + "instanceOptions": "Επιλογές εμφάνισης", + "liveActions": "Εκτέλεση ενεργειών με το ρυθμισμένο API", + "liveActionsDescription": "Απενεργοποιημένη είναι η ασφαλής προσομοίωση. Η ενεργοποίηση αυτής της λειτουργίας επηρεάζει την πραγματική υπηρεσία.", + "noActions": "Δεν έχουν οριστεί ενέργειες.", + "containedFailures": "Οι αποτυχίες εκτέλεσης περιέχονται μέσα σε αυτό το widget. Το αίτημα περιοδικών δεν περιλαμβάνει ποτέ μυστικές τιμές.", + "validation": { + "title": "Επικύρωση", + "ready": "Ο ορισμός του widget είναι έγκυρος." + }, + "accessibility": { + "title": "Έλεγχοι προσβασιμότητας", + "ready": "Δεν εντοπίστηκαν κοινές παραλείψεις προσβασιμότητας.", + "pending": "Οι έλεγχοι προσβασιμότητας θα εκτελούνται όταν ο ορισμός του widget είναι έγκυρος.", + "imageAlt": "Προσθήκη alt κειμένου σε κάθε Εικόνα, χρησιμοποιώντας ένα κενό alt μόνο για διακοσμητικές εικόνες.", + "actionIconLabel": "Προσθέστε μια αρια-ετικέτα ή τίτλο σε κάθε ActionIcon.", + "inputLabel": "Προσθέστε μια ορατή ετικέτα ή ένα προσιτό όνομα σε κάθε είσοδο." + }, + "journal": "Τροποποιήθηκε αίτημα χρονικού", + "actionParameters": "Παράμετροι δράσης (JSON)", + "invalidParameters": "Χρησιμοποιήστε τη δηλωμένη συμβολοσειρά, τον αριθμό και τους τύπους παραμέτρων boolean.", + "runDestructive": "Εκτέλεση καταστροφικής δράσης", + "runAction": "Ενέργεια εκτέλεσης", + "deleteConfirmation": "Αυτή η ενέργεια προεπισκόπησης αλλάζει τα απομακρυσμένα δεδομένα μέσω του ρυθμισμένου API.", + "simulated": "Προσομοίωση ενέργειας", + "httpStatus": "HTTP {status, number}", + "tab": { + "widget": "Widget", + "data": "Δεδομένα", + "options": "Επιλογές", + "state": "Κατάσταση", + "actions": "Έλεγχοι", + "diagnostics": "Διαγνωστικά" + }, + "size": { + "compact": "Συμπαγής", + "standard": "Τυπικό", + "wide": "Ευρεία" + }, + "fixture": { + "live": "Ζωντανά", + "loading": "Φόρτωση", + "empty": "Άδειο", + "error": "Σφάλμα" + } + } + }, + "preview": { + "request": { + "permission": { + "view": "Προβολή", + "modify": "Τροποποίηση", + "full": "Πλήρης" + } + } + }, + "notification": { + "created": "Το widget «{name}» δημιουργήθηκε επιτυχώς.", + "updated": "Το widget «{name}» ενημερώθηκε επιτυχώς.", + "deleted": "Το widget «{name}» διαγράφηκε.", + "imported": "Το widget εισήχθη επιτυχώς.", + "migrated": "Το παλαιού τύπου widget μετεγκαταστάθηκε με επιτυχία. Οι τοποθετήσεις του πίνακα τώρα χρησιμοποιούν τον ορισμό v2.", + "migrationError": "Αποτυχία μετεγκατάστασης του παλαιού γραφικού συστατικού. Βεβαιωθείτε ότι το αρχείο χρησιμοποιεί το σχήμα homarr-custom-widget-v2.", + "legacyDefinitionCopied": "Το αρχικό περιεχόμενο widget αντιγράφηκε. Αποθηκευμένες τιμές δεν περιλαμβάνονται.", + "legacyDefinitionCopyError": "Αποτυχία αντιγραφής του αρχικού περιεχομένου γραφικού συστατικού.", + "migrationPromptCopied": "Αντιγράφηκε μια εντολή επανασχεδιασμένης μετανάστευσης. Επικολλήστε την σε μια LLM, αντιγράψτε την ενιαία απόκριση JSON και, στη συνέχεια, επιλέξτε Επικόλληση μετανάστευσε widget εδώ.", + "migrationPromptCopyError": "Αποτυχία αντιγραφής της ερώτησης μετανάστευσης.", + "sourcesConfigured": "Αποθηκευμένες πηγές widget και διαπιστευτήρια.", + "sourceConfigurationError": "Αποτυχία ρύθμισης των πηγών γραφικών συστατικών.", + "aiPromptCopiedWithCount": "Η προτροπή τεχνητής νοημοσύνης αντιγράφηκε στο πρόχειρο ({count, number} χαρακτήρες).", + "aiPromptCopyError": "Αποτυχία αντιγραφής της προτροπής στο πρόχειρο. Το πρόγραμμα περιήγησής σας ενδέχεται να μην υποστηρίζει αυτήν τη λειτουργία.", + "aiPromptSent": "Προτροπή στάλθηκε. Μπορείτε να συνεχίσετε να επεξεργάζεστε ενώ ο βοηθός λειτουργεί στο παρασκήνιο.", + "updateError": "Αποτυχία ενημέρωσης του widget. Οι αλλαγές σας δεν αποθηκεύτηκαν.", + "importError": "Αποτυχία εισαγωγής του widget. Βεβαιωθείτε ότι το αρχείο είναι έγκυρη εξαγωγή JSON προσαρμοσμένου widget.", + "exportError": "Αποτυχία εξαγωγής του widget.", + "duplicated": "Το widget «{name}» αντιγράφηκε.", + "duplicateError": "Αποτυχία αντιγραφής του widget.", + "toggleError": "Αποτυχία εναλλαγής της κατάστασης του widget.", + "deleteError": "Αποτυχία διαγραφής του widget.", + "previewError": "Αποτυχία λήψης προεπισκόπησης. Ελέγξτε τη διεύθυνση URL και δοκιμάστε ξανά." + }, + "importReview": { + "title": "Αξιολόγηση προσαρμοσμένης εισαγωγής widget", + "description": "Ελέγξτε πού συνδέεται αυτό το γραφικό στοιχείο και τι χρειάζεται ο πίνακας πρόσβασης στα χειριστήριά του πριν από την εισαγωγή του.", + "migrationTitle": "Επανεξέταση μετεγκαταστάθηκε v2 αντικατάσταση", + "migrationDescription": "Επανεξέταση και επιβεβαίωση αυτού του παραγόμενου v2 ορισμού. Επιβεβαιώνοντας ατομικά αντικαθιστά το διατηρημένο v1 εγγραφή, διατηρώντας παράλληλα υπάρχουσες θέσεις του πίνακα που συνδέονται με το ίδιο αναγνωριστικό widget.", + "fileLabel": "Επιλέξτε ένα προσαρμοσμένο widget JSON αρχείο", + "name": "Όνομα εργασίας", + "origin": "Βασική προέλευση", + "authentication": "Ταυτοποίηση", + "networkScope": "Εμβέλεια δικτύου", + "methods": "Μέθοδος HTTP", + "permissions": "Απαιτούμενα δικαιώματα στον πίνακα", + "sourceSetup": { + "title": "Ρύθμιση πηγών API", + "description": "Επιβεβαιώστε όπου αυτό το γραφικό στοιχείο συνδέεται και προσθέστε διαπιστευτήρια. Τα προσωπικά και κυκλικά URL είναι ειδικά για την εγκατάσταση του Homarr.", + "suggestedUrl": "Προτεινόμενο URL", + "confirmUrl": "Επιβεβαιώνω ότι αυτό το URL του διακομιστή είναι σωστό για την εγκατάσταση του Homarr μου", + "ready": "URL έτοιμο", + "needsUrl": "Επιβεβαίωση URL", + "credentialsMissing": "Λείπουν διαπιστευτήρια", + "credentialsOptional": "Μπορείτε να εγκαταστήσετε χωρίς διαπιστευτήρια και να τα ρυθμίσετε αργότερα, αλλά οι αιτήσεις θα αποτύχουν μέχρι να προστεθούν." + }, + "actionWarning": { + "title": "Αυτό το widget μπορεί να αλλάξει απομακρυσμένα δεδομένα", + "description": "Επανεξέταση κάθε ενέργειας με όνομα, κληρονομημένη πιστοποίηση, και καταστροφική επιβεβαίωση μετά την εισαγωγή." + }, + "cancel": "Ακύρωση εισαγωγής", + "confirm": "Εισαγωγή widget", + "confirmMigration": "Επιβεβαίωση αντικατάστασης v2" + }, + "secret": { + "apiKey": "API κλειδί ή διακριτικό", + "username": "Όνομα χρήστη", + "password": "Κωδικός", + "savedPlaceholder": "••••••• (αποθηκευμένο, αφήστε κενό για διατήρηση)" + } + }, + "workshop": { + "title": "Εργαστήριο", + "browseWorkshop": "Περιήγηση Στο Εργαστήριο", + "openCommunity": "Ανοιχτό Εργαστήρι", + "openOnWorkshop": "Ανοίξτε το {title} στην ιστοσελίδα του Εργαστηρίου", + "back": "Πίσω στο Workshop", + "search": "Αναζήτηση widgets", + "searchCss": "Αναζήτηση θεμάτων CSS", + "sort": "Ταξινόμηση", + "sortTop": "Υψηλότερη βαθμολογία", + "sortNewest": "Νεότερα", + "listAriaLabel": "Γραφικά στοιχεία εργαστηρίου", + "listAriaLabelCss": "Θέματα CSS εργαστηρίου", + "empty": "Δεν υπάρχουν widget που να ταιριάζουν με αυτή την αναζήτηση.", + "emptyDescription": "Τα widgets της κοινότητας δημοσιεύονται στο Workshop εμφανίζονται εδώ.", + "emptyFilteredTitle": "Δεν υπάρχουν widget που να ταιριάζουν με αυτή την αναζήτηση", + "emptyFilteredDescription": "Δεν υπάρχει widget Workshop \"{search}\".", + "emptyCss": "Δεν υπάρχουν CSS θέματα ταιριάζουν με αυτή την αναζήτηση.", + "unavailableTitle": "Το εργαστήριο Homarr φαίνεται να μην είναι διαθέσιμο", + "unavailable": "Η υπηρεσία της κοινότητας μπορεί να είναι προσωρινά κάτω. Προσπαθήστε ξανά σε λίγο. Τα εγκατεστημένα widget σας δεν επηρεάζονται.", + "loadError": "Αυτή η υποβολή δεν μπορεί να φορτωθεί.", + "noDescription": "Χωρίς περιγραφή", + "author": "από {name}", + "communityMember": "Μέλος της κοινότητας", + "outdated": "Παρωχημένο", + "outdatedWarning": "Ο συγγραφέας σηματοδότησε αυτή την υποβολή ως ξεπερασμένη. Αναθεωρήστε την προσεκτικά πριν από την εισαγωγή.", + "score": "Βαθμολογία: {count, number}", + "upvote": "Upvote", + "downvote": "Καταψήφισε", + "voteError": "Δεν ήταν δυνατή η αποθήκευση της ψηφοφορίας.", + "signIn": "Συνδεθείτε με το GitHub", + "signInError": "Η σύνδεση στο GitHub απέτυχε. Ελέγξτε ότι ο πάροχος OAuth του Εργαστηρίου έχει ρυθμιστεί και ότι επιτρέπονται αναδυόμενα παράθυρα.", + "signOut": "Αποσύνδεση", + "signInHint": "Συνδεθείτε για να ψηφίσετε ή να αναφέρετε. Η εγκατάσταση δεν απαιτεί λογαριασμό Εργαστηρίου.", + "securityNotice": "Τα widget του εργαστηρίου μπορούν να καλέσουν τις δηλωμένες πηγές API τους και να εκτελέσουν δηλωμένες ενέργειες με διαπιστευτήρια που ρυθμίζετε τοπικά. Τα μυστικά δεν περιλαμβάνονται ποτέ.", + "securityNoticeCss": "Η Κοινότητα CSS μπορεί να αλλάξει την εμφάνιση και τη χρηστικότητα ενός πίνακα. Ελέγξτε την πριν από την εισαγωγή. Τίποτα δεν αποθηκεύεται μέχρι να αποθηκεύσετε τις ρυθμίσεις του πίνακα.", + "install": "Εγκατάσταση", + "installReviewTitle": "Επανεξέταση πριν την εγκατάσταση", + "installError": "Αυτό το widget δεν μπορεί να εγκατασταθεί", + "installErrorDescription": "Η υποβολή του Workshop δεν είναι ένα έγκυρο Custom JSX v2 widget.", + "useCss": "Import CSS", + "importCss": "Εισαγωγή CSS από το Workshop", + "importCssConfirm": "Αντικαταστήστε το τρέχον προσαρμοσμένο CSS με το \"{title}\"? Τίποτα δεν αποθηκεύεται μέχρι να αποθηκεύσετε τις ρυθμίσεις του πίνακα.", + "screenshotAlt": "{title} στιγμιότυπο οθόνης {count, number}", + "screenshotViewer": "Πρόγραμμα προβολής στιγμιότυπων οθόνης για {title}", + "screenshotsLabel": "Στιγμιότυπα οθόνης του {title}", + "zoomScreenshot": "Πλήρες μέγεθος προβολής", + "previousScreenshot": "Προηγούμενο στιγμιότυπο οθόνης", + "nextScreenshot": "Επόμενο στιγμιότυπο οθόνης", + "showScreenshotThumbnails": "Εμφάνιση εικόνων επισκόπησης οθόνης", + "hideScreenshotThumbnails": "Απόκρυψη εικόνων επισκόπησης οθόνης", + "closeScreenshotViewer": "Κλείσιμο προβολέα στιγμιότυπου οθόνης", + "technicalDetails": "Τεχνικές λεπτομέρειες", + "sourceCode": "Καταχώρηση εργαστηρίου", + "export": "Εξαγωγή", + "report": "Αναφορά", + "reportTitle": "Υποβολή έκθεσης", + "reportReason": "Λόγος", + "reportExplanation": "Τι πρέπει να γνωρίζουν οι συντονιστές του Εργαστηρίου?", + "reportSend": "Αποστολή αναφοράς", + "reportSent": "Η αναφορά στάλθηκε", + "reportSentDescription": "Οι συντονιστές του εργαστηρίου μπορούν τώρα να επανεξετάσουν αυτή την υποβολή.", + "reportCount": "{count, plural, one {# αναφορά} other {# αναφορές}}", + "reportWarning": "{count, plural, one {Αυτή η υποβολή έχει # αναφορά ανοιχτής κοινότητας.} other {Αυτή η υποβολή έχει # αναφορές ανοικτής κοινότητας.}} Παραμένει εγκαταστάσιμο, αλλά θα πρέπει να δείτε πρώτα το περιεχόμενό του.", + "reportVisibility": "Αναφορά λεπτομερειών είναι ορατές μόνο σε συγγραφείς και διαχειριστές Workshop.", + "reportCategory": { + "outdated": "Παρωχημένες ή δεν λειτουργούν πλέον", + "malicious": "Κακόβουλο", + "spam": "Ανεπιθύμητα", + "copyright": "Πνευματικά δικαιώματα", + "inappropriate": "Ακατάλληλο", + "other": "Άλλο" + }, + "publish": { + "title": "Δημοσίευση στο Workshop", + "introTitle": "Μοιραστείτε αυτό το widget με την κοινότητα", + "introDescription": "Το Homarr εξάγει ένα αντίγραφο του τρέχοντος γραφικού συστατικού. Προσθέστε σαφείς λεπτομέρειες καταχώρησης, ώστε οι άνθρωποι να γνωρίζουν τι κάνει πριν το εγκαταστήσετε.", + "listingDetails": "Λίστα εργαστηρίου", + "listingDetailsDescription": "Αυτές οι λεπτομέρειες εμφανίζονται δημόσια μαζί με τον ορισμό εξαγόμενου γραφικού συστατικού.", + "success": "Τα μέλη της Κοινότητας μπορούν τώρα να εγκαταστήσουν και να αναφέρουν αυτό το widget.", + "successTitle": "Το widget σας είναι ζωντανό", + "manageDescription": "Ανοίξτε την υποβολή για να ενημερώσετε την καταχώρισή της, εκθέσεις αναθεώρησης, επισημάνετε την ξεπερασμένη ή διαγράψτε την.", + "viewSubmission": "Προβολή και διαχείριση υποβολής", + "done": "Ολοκληρώθηκε", + "signInHint": "Συνδεθείτε για να δημοσιεύσετε υπό την ταυτότητα του Εργαστηρίου σας.", + "titleField": "Τίτλος", + "descriptionField": "Περιγραφή", + "screenshots": "Οθόνες", + "screenshotsDescription": "Έως πέντε εικόνες PNG, JPEG ή WebP", + "screenshotsPlaceholder": "Επιλογή στιγμιότυπων οθόνης", + "invalidScreenshot": "Χρήση εικόνων PNG, JPEG, ή WebP όχι μεγαλύτερο από {maxSize} κάθε.", + "privateSourceWarning": "Αυτό το widget περιέχει διευθύνσεις URL ιδιωτικού πηγαίου κώδικα για: {sources}. Αντικαταστήστε προσωπικούς υπολογιστές ή διευθύνσεις IP με ασφαλείς κατόχους θέσης υπηρεσίας πριν από τη δημοσίευση.", + "reviewSourcesTitle": "Αναθεώρηση ιδιωτικών URL πηγαίου κώδικα", + "privateSourceConfirmation": "Αναθεώρησα αυτά τα URL πηγής και δεν εκθέτουν λεπτομέρειες ιδιωτικής υποδομής", + "action": "Δημοσίευση τώρα", + "publicationNote": "Η δημοσίευση είναι άμεση. Μπορείτε να διαχειριστείτε την υποβολή στη συνέχεια στο Workshop.", + "definitionChanged": "Το widget άλλαξε κατά την προετοιμασία της δημοσίευσης. Αναθεωρήστε ξανά τις διευθύνσεις URL ιδιωτικής πηγής και προσπαθήστε ξανά.", + "error": "Αποτυχία δημοσίευσης" } }, "integration": { + "completion": { + "modalTitle": "Η υπηρεσία είναι έτοιμη", + "title": "Το {name} είναι συνδεδεμένο", + "description": "Η σύνδεση πέρασε το τεστ της. Επιλέξτε τι θα εμφανιστεί σε αυτόν τον πίνακα επόμενο.", + "connectionReady": "Η σύνδεση της υπηρεσίας είναι έτοιμη", + "appReady": "Η συντόμευση εφαρμογής είναι έτοιμη", + "compatibleWidgets": "{count, plural, =0 {Δεν υπάρχουν συμβατά widget} one {# συμβατό widget} other {# συμβατά widgets}} διαθέσιμα", + "chooseWidget": "Επιλογή widget", + "recipes": { + "title": "Συνιστάται για αυτόν τον πίνακα", + "description": "Βασισμένο σε συνδεδεμένες υπηρεσίες και widgets ήδη σε αυτόν τον πίνακα.", + "newConnectionReason": "Τώρα διαθέσιμο μέσω του {integration}", + "existingConnectionReason": "Λειτουργεί με μια υπηρεσία που έχετε ήδη συνδέσει", + "dismiss": "Παράβλεψη συστάσεων για αυτήν την υπηρεσία σε αυτόν τον πίνακα" + } + }, "page": { "list": { - "title": "Ενσωματώσεις", + "ariaLabel": "Διαμορφωμένες ενσωματώσεις", "search": "Αναζήτηση ενσωματώσεων", + "scopedNote": "Εμφανίζονται μόνο οι ενσωματώσεις που επιτρέπεται να διαχειριστεί.", "noResults": { - "title": "Δεν υπάρχουν ακόμα ενσωματώσεις" + "title": "Δεν υπάρχουν ακόμα ενσωματώσεις", + "description": "Συνδέστε μια υπηρεσία για να χρησιμοποιήσετε τα δεδομένα και τις ενέργειές της σε widgets Homarr.", + "action": "Δημιουργήστε την πρώτη σας ενσωμάτωση", + "filteredTitle": "Καμία ενσωμάτωση δεν ταιριάζει με την αναζήτησή σας", + "filteredDescription": "Δεν ταιριάζουν οι ενσωματώσεις \"{search}\". Δοκιμάστε άλλο όνομα, τύπο, ή URL.", + "createOnlyTitle": "Μπορείτε να προσθέσετε μόνο ενσωματώσεις", + "createOnlyDescription": "Τα δικαιώματά σας επιτρέπουν να δημιουργήσετε ενσωματώσεις αλλά να μην διαχειριστείτε τα ήδη υπάρχοντα. Ζητήστε από έναν διαχειριστή πρόσβαση σε αυτά που χρειάζεστε." } }, "create": { "title": "Νέα ενσωμάτωση {name}", "notification": { "success": { - "title": "Επιτυχής δημιουργία", "message": "Η ενσωμάτωση δημιουργήθηκε επιτυχώς" }, "error": { - "title": "Αποτυχία δημιουργίας", "message": "Δεν ήταν δυνατή η δημιουργία της ενσωμάτωσης" } }, @@ -729,11 +1339,9 @@ "title": "Επεξεργασία ενσωμάτωσης {name}", "notification": { "success": { - "title": "Οι αλλαγές εφαρμόστηκαν επιτυχώς", "message": "Η ενσωμάτωση αποθηκεύτηκε επιτυχώς" }, "error": { - "title": "Δεν ήταν δυνατή η εφαρμογή των αλλαγών", "message": "Δεν ήταν δυνατή η αποθήκευση της ενσωμάτωσης" } }, @@ -750,23 +1358,15 @@ "message": "Είστε βέβαιοι ότι θέλετε να διαγράψετε την ενσωμάτωση {name};", "notification": { "success": { - "title": "Επιτυχής διαγραφή", "message": "Η ενσωμάτωση διαγράφηκε επιτυχώς" }, "error": { - "title": "Αποτυχία διαγραφής", "message": "Δεν ήταν δυνατή η διαγραφή της ενσωμάτωσης" } } } }, "field": { - "name": { - "label": "Όνομα" - }, - "url": { - "label": "Url" - }, "attemptSearchEngineCreation": { "label": "Δημιουργία Μηχανής Αναζήτησης", "description": "Η ενσωμάτωση «{kind}» μπορεί να χρησιμοποιηθεί με τις μηχανές αναζήτησης. Επιλέξτε το για να ρυθμίσετε αυτόματα τη μηχανή αναζήτησης." @@ -778,6 +1378,10 @@ "label": "", "description": "Δημιουργήστε μια εφαρμογή με το ίδιο όνομα και εικονίδιο με την ενσωμάτωση. Αφήστε το παρακάτω πεδίο κενό για να δημιουργήσετε την εφαρμογή με τη διεύθυνση URL της ενσωμάτωσης." }, + "linkApp": { + "label": "Σύνδεση μιας υπάρχουσας εφαρμογής", + "description": "Συνδέστε αυτήν την ενσωμάτωση σε μια εφαρμογή που μπορείτε ήδη να χρησιμοποιήσετε." + }, "appHref": { "placeholder": "" }, @@ -791,7 +1395,11 @@ "grid": { "widgetCount": "{count} γουίτζετ", "noWidgets": "Κανένα widget", - "detected": "Εντοπίστηκε μέσω Docker" + "detected": "Εντοπίστηκε μέσω Docker", + "connected": "{count, plural, one {# συνδέθηκαν} other {# συνδέθηκαν}}", + "tiedWidgets": "Συνδεδεμένα γραφικά στοιχεία", + "more": "+{count} ακόμη", + "loadError": "Δεν ήταν δυνατή η φόρτωση των ενσωματώσεων. Προσπαθήστε ξανά πριν από τη δημιουργία νέας σύνδεσης." }, "category": { "dnsHole": "DNS", @@ -822,7 +1430,10 @@ "analytics": "Αναλυτικά", "vpn": "VPN", "mediaLibrary": "Βιβλιοθήκη Πολυμέσων", - "uptimeMonitoring": "Παρακολούθηση Διαθεσιμότητας" + "uptimeMonitoring": "Παρακολούθηση Διαθεσιμότητας", + "beszel": "Beszel", + "systemMonitoring": "Παρακολούθηση Συστήματος", + "security": "Ασφάλεια" }, "testConnection": { "action": { @@ -1107,6 +1718,22 @@ "slug": { "label": "Slug σελίδας κατάστασης", "newLabel": "Νέο slug σελίδας κατάστασης" + }, + "wazuhIndexerUrl": { + "label": "URL Ευρετηρίου", + "newLabel": "Νέο ευρετήριο URL" + }, + "wazuhIndexerUsername": { + "label": "Όνομα χρήστη ευρετηρίου", + "newLabel": "Νέο ευρετήριο όνομα χρήστη" + }, + "wazuhIndexerPassword": { + "label": "Κωδικός ευρετηρίου", + "newLabel": "Νέος κωδικός ευρετηρίου" + }, + "wazuhDashboardUrl": { + "label": "Διεύθυνση URL Ταμπλό (Προαιρετικό)", + "newLabel": "Νέο dashboard URL" } } }, @@ -1115,54 +1742,19 @@ "interact": "Αλληλεπίδραση με ενσωματώσεις", "full": "Πλήρης πρόσβαση στις ενσωματώσεις" }, - "audiobookshelf": { - "name": "Audiobookshelf", - "description": "Αυτο-φιλοξενούμενος διακομιστής ηχητικών βιβλίων και podcast" - }, - "navidrome": { - "name": "Navidrome", - "description": "Αυτο-φιλοξενούμενος διακομιστής ροής μουσικής με συμβατότητα Subsonic API" - }, - "uptimeKuma": { - "name": "Uptime Kuma", - "description": "Αυτο-φιλοξενούμενη παρακολούθηση διαθεσιμότητας με δημόσιες σελίδες κατάστασης", - "secret": { - "slug": { - "description": "Το slug της δημόσιας σελίδας κατάστασής σας. Προεπιλογή σε \"default\" αν δεν οριστεί." - }, - "apiKey": { - "description": "Προαιρετικό κλειδί API για πιστοποιημένη πρόσβαση /metrics" - } - } - }, - "traefik": { - "name": "Traefik", - "description": "Αντίστροφος διακομιστής μεσολάβησης και εξισορροπητής φόρτου για cloud-native περιβάλλοντα" - }, - "paperlessNgx": { - "name": "Paperless-ngx", - "description": "Σύστημα διαχείρισης εγγράφων για αρχειοθέτηση και οργάνωση σαρωμένων εγγράφων" - }, - "patchmon": { - "name": "PatchMon", - "description": "Διαχείριση ενημερώσεων κώδικα και παρακολούθηση κεντρικών υπολογιστών Linux" - }, - "bazarr": { - "name": "Bazarr", - "description": "Συνοδευτική εφαρμογή των Sonarr και Radarr που διαχειρίζεται και κατεβάζει υπότιτλους" - }, - "wud": { - "name": "Τι Είναι Το Docker", - "description": "Παρακολούθηση ποια από τα εμπορευματοκιβώτια Docker σας έχουν διαθέσιμες ενημερώσεις εικόνας" + "llamacpp": { + "name": "llama.cpp", + "description": "Παρακολουθήστε ένα τοπικό llama.cpp llama-server: Μετρήσεις υγείας, μοντέλου και γενιάς" } }, "media": { "plural": "Πολυμέσα", "search": "Εύρεση πολυμέσου", "field": { - "name": "Όνομα", + "preview": "Προεπισκόπηση", "size": "Μέγεθος", - "creator": "Δημιουργός" + "creator": "Δημιουργός", + "actions": "Έλεγχοι" }, "action": { "upload": { @@ -1190,10 +1782,12 @@ } }, "copy": { - "label": "Αντιγραφή URL" + "label": "Αντιγραφή URL", + "labelNamed": "Αντιγραφή διεύθυνσης URL για {name}" }, "open": { - "label": "Άνοιγμα πολυμέσων" + "label": "Άνοιγμα πολυμέσων", + "labelNamed": "Άνοιγμα του {name}" } }, "noResults": { @@ -1208,7 +1802,6 @@ "add": "Προσθήκη", "apply": "Εφαρμογή", "backToOverview": "Επιστροφή στην επισκόπηση", - "skip": "Παράλειψη", "change": "Αλλαγή", "create": "Δημιουργία", "createAnother": "Δημιουργία και νέα αρχή", @@ -1231,16 +1824,31 @@ "tryAgain": "Προσπαθήστε ξανά", "loading": "Φόρτωση", "show": "Εμφάνιση", - "hide": "Απόκρυψη" + "hide": "Απόκρυψη", + "undo": "Αναίρεση", + "editNamed": "Επεξεργασία του {name}", + "deleteNamed": "Διαγραφή του {name}", + "clearSearch": "Εκκαθάριση αναζήτησης", + "copy": "Αντιγραφή", + "copied": "Αντιγράφηκε", + "refresh": "Ανανέωση" + }, + "pagination": { + "pageOf": "Σελίδα {page} του {totalPages}" }, "here": "εδώ", + "serviceUrlTemplate": { + "serverTitle": "Συνήθης διεύθυνση διακομιστή", + "urlModeLabel": "Μοτίβο διεύθυνσης υπηρεσίας", + "hostPort": "Ίδια υποδοχή, διαφορετικές θύρες", + "subdomain": "Ένας υποτομέας ανά υπηρεσία", + "path": "Μία διαδρομή ανά υπηρεσία" + }, "iconPicker": { "label": "URL εικονιδίου", + "description": "Αναζήτηση στη βιβλιοθήκη, επικόλληση ενός URL εικόνας ή μεταφόρτωση αρχείου.", "header": "Αναζήτηση {countIcons} εικόνων με όνομα", "headerLoading": "Αναζήτηση εικόνων κατά όνομα", - "noResults": "Κανένα εικονίδιο δεν αντιστοιχεί στο «{search}».", - "error": "Δεν ήταν δυνατή η φόρτωση των εικονιδίων.", - "description": "Αναζήτηση στη βιβλιοθήκη, επικόλληση ενός URL εικόνας ή μεταφόρτωση αρχείου.", "clear": "Καθαρισμός εικόνας", "uploadImage": "Μεταφόρτωση εικόνας", "results": "Αποτελέσματα αναζήτησης εικόνας", @@ -1249,7 +1857,9 @@ "otherImages": "Άλλες εικόνες", "urlLoading": "Έλεγχος εικόνας…", "urlReady": "Η εικόνα είναι έτοιμη προς χρήση", - "urlError": "Δεν ήταν δυνατή η φόρτωση αυτής της εικόνας. Ελέγξτε τη διεύθυνση URL και προσπαθήστε ξανά." + "urlError": "Δεν ήταν δυνατή η φόρτωση αυτής της εικόνας. Ελέγξτε τη διεύθυνση URL και προσπαθήστε ξανά.", + "noResults": "Κανένα εικονίδιο δεν αντιστοιχεί στο «{search}».", + "error": "Δεν ήταν δυνατή η φόρτωση των εικονιδίων." }, "colorScheme": { "options": { @@ -1261,7 +1871,6 @@ "information": { "min": "Ελάχιστο", "max": "Μέγιστο", - "days": "Ημέρες", "hours": "Ώρες", "minutes": "Λεπτά" }, @@ -1298,16 +1907,16 @@ }, "userAvatar": { "menu": { - "switchToDarkMode": "Εναλλαγή σε σκοτεινή λειτουργία", - "switchToLightMode": "Εναλλαγή σε φωτεινή λειτουργία", + "open": "Άνοιγμα μενού λογαριασμού", "management": "Διαχείριση", - "docker": "Docker", "preferences": "Οι ρυθμίσεις σας", "logout": "Αποσύνδεση", "login": "Σύνδεση", "homeBoard": "Ο αρχικός σας πίνακας", - "loggedOut": "Αποσυνδεθήκατε", - "updateAvailable": "Διαθέσιμες ενημερώσεις: {countUpdates}: {tag}" + "updateAvailable": "Διαθέσιμες ενημερώσεις: {countUpdates}: {tag}", + "assistant": "Βοηθός", + "assistantThinking": "Σκέψη", + "modifier": "Mod" } }, "dangerZone": "Επικίνδυνη Περιοχή", @@ -1355,75 +1964,85 @@ "kilometersPerHour": "km/h", "milesPerHour": "mph" } + }, + "widgetQuery": { + "loading": "Φόρτωση δεδομένων widget" + }, + "total": "Σύνολο", + "filesystemUsage": "{count, plural, one {Δείξε χρήση για # σύστημα αρχείων} other {Δείξε χρήση για # συστήματα αρχείων}}", + "field": { + "name": "Όνομα εργασίας" + }, + "label": { + "new": "Νέο" + }, + "entity": { + "apps": "Εφαρμογές", + "boards": "Πίνακες", + "certificates": "Πιστοποιητικά", + "customWidgets": "Προσαρμοσμένα γραφικά στοιχεία", + "groups": "Ομάδες", + "integrations": "Ενσωματώσεις", + "invites": "Προσκλήσεις", + "logs": "Καταγραφή", + "media": "Πολυμέσα", + "searchEngines": "Μηχανές αναζήτησης", + "tasks": "Διεργασίες", + "users": "Χρήστες" } }, "section": { - "dynamic": { + "option": { + "showLabel": { + "label": "Εμφάνιση ετικέτας", + "description": "Εμφάνιση της ετικέτας του περιέκτη πάνω από το περιεχόμενό του." + }, + "collapsible": { + "label": "Επίτρεψε σύμπτυξη", + "description": "Αφήστε τους θεατές να επεκτείνουν και να καταρρεύσουν αυτό το κοντέινερ." + }, + "showOpenAll": { + "label": "Εμφάνιση ενέργειας ανοιχτού τύπου", + "description": "Εμφάνιση μιας ενέργειας που ανοίγει κάθε εφαρμογή σε αυτό το περιέκτη σε νέες καρτέλες." + }, + "scrollable": { + "label": "Κύλιση", + "description": "Κρατήστε αυτό το δοχείο στο καθορισμένο του μέγεθος και μετακινηθείτε τα περιεχόμενά του αντί να μεγαλώσετε για να τα χωρέσετε." + } + }, + "action": { + "openAllInNewTabsFor": "Άνοιγμα όλων των εφαρμογών στο {name} σε καρτέλες" + }, + "openAllInNewTabs": { + "title": "Άνοιγμα όλων σε καρτέλες", + "text": "Μερικοί περιηγητές μπορεί να εμποδίσουν το άνοιγμα των καρτελών χύδην για λόγους ασφαλείας. Το Homarr δεν μπόρεσε να ανοίξει όλα τα παράθυρα, επειδή ο περιηγητής σας απέκλεισε αυτήν την ενέργεια. Παρακαλώ επιτρέψτε το \"Άνοιγμα αναδυόμενων παραθύρων\" και προσπαθήστε ξανά." + }, + "container": { + "untitled": "Περιέκτης χωρίς τίτλο", "action": { - "create": "Νέα δυναμική ενότητα", - "remove": "Αφαίρεση δυναμικής ενότητας" + "create": "Νέο δοχείο", + "remove": "Αφαίρεση περιέκτη", + "expand": "Ανάπτυξη", + "collapse": "Σύμπτυξη" }, "option": { "title": { "label": "Τίτλος" }, "customCssClasses": { - "label": "Προσαρμοσμένες κλάσεις CSS" + "label": "Προσαρμοσμένες κλάσεις css" }, "borderColor": { "label": "Χρώμα περιγράμματος" } }, "remove": { - "title": "Αφαίρεση δυναμικής ενότητας", - "message": "Είστε βέβαιοι ότι θέλετε να αφαιρέσετε αυτήν τη δυναμική ενότητα; Τα στοιχεία θα μετακινηθούν στην ίδια θέση της γονικής ενότητας." - } - }, - "category": { - "field": { - "name": { - "label": "Όνομα" - } - }, - "action": { - "create": "Νέα κατηγορία", - "edit": "Μετονομασία κατηγορίας", - "remove": "Αφαίρεση κατηγορίας", - "moveUp": "Μετακίνηση επάνω", - "moveDown": "Μετακίνηση κάτω", - "createAbove": "Νέα κατηγορία επάνω", - "createBelow": "Νέα κατηγορία κάτω", - "openAllInNewTabs": "Άνοιγμα όλων σε καρτέλες" - }, - "create": { - "title": "Νέα κατηγορία", - "submit": "Προσθήκη κατηγορίας" - }, - "remove": { - "title": "Αφαίρεση κατηγορίας", - "message": "Είστε βέβαιοι ότι θέλετε να αφαιρέσετε την κατηγορία {name};" - }, - "edit": { - "title": "Μετονομασία κατηγορίας", - "submit": "Μετονομασία κατηγορίας" - }, - "menu": { - "label": { - "create": "Νέα κατηγορία", - "changePosition": "Αλλαγή θέσης", - "settings": "Ρυθμίσεις" - } - }, - "openAllInNewTabs": { - "title": "Άνοιγμα όλων σε καρτέλες", - "text": "Ορισμένα προγράμματα περιήγησης ενδέχεται να αποκλείουν το μαζικό άνοιγμα καρτελών για λόγους ασφαλείας. Το Homarr δεν μπόρεσε να ανοίξει όλα τα παράθυρα, επειδή το πρόγραμμα περιήγησής σας απέκλεισε αυτή την ενέργεια. Επιτρέψτε το «Άνοιγμα αναδυόμενων παραθύρων» και δοκιμάστε ξανά." + "message": "Αφαιρέστε αυτό το εμπορευματοκιβώτιο? Το περιεχόμενό του θα κινηθεί στη γύρω περιοχή." } } }, "item": { "action": { - "create": "Νέο στοιχείο", - "import": "Εισαγωγή στοιχείου", "edit": "Επεξεργασία στοιχείου", "moveResize": "Μετακίνηση / αλλαγή μεγέθους στοιχείου", "duplicate": "Διπλότυπο στοιχείο", @@ -1432,7 +2051,7 @@ "menu": { "label": { "settings": "Ρυθμίσεις", - "refresh": "Ανανέωση", + "settingsFor": "Ρυθμίσεις για {name}", "options": "Επιλογές", "actions": "Ενέργειες" }, @@ -1441,21 +2060,96 @@ "error": "Σφάλμα", "loading": "Φόρτωση", "idle": "Αδρανές" + }, + "notification": { + "saveError": { + "title": "Αδύνατη η αποθήκευση widget", + "message": "Οι αλλαγές widget επανήλθαν" + } } }, "create": { "title": "Επιλέξτε στοιχείο για προσθήκη", "search": "Φιλτράρισμα στοιχείων", - "addToBoard": "Προσθήκη στον πίνακα" + "addToBoard": "Προσθήκη στον πίνακα", + "addAtPosition": "Προσθήκη στοιχείου εδώ", + "destination": { + "label": "Προσθήκη σε", + "description": "Επιλέξτε που θα εμφανίζεται το γραφικό συστατικό. Μπορείτε ακόμα να το μετακινήσετε αργότερα.", + "mainCanvas": "Κύριος καμβάς", + "leftRail": "Αριστερή ράγα", + "rightRail": "Δεξιά σιδηροτροχιά" + }, + "connectionStatus": { + "ready": "Έτοιμο", + "needsSetup": "Χρειάζεται ρύθμιση", + "noConnectionRequired": "Δεν απαιτείται σύνδεση" + }, + "customWidget": "Προσαρμοσμένο widget", + "standalone": "Αυτόνομη", + "missingIntegration": { + "title": "Συνδέστε πρώτα μια υπηρεσία", + "noPermission": "Αυτό το widget χρειάζεται μια συμβατή σύνδεση υπηρεσίας. Ζητήστε από τον διαχειριστή να συνδεθεί και προσπαθήστε ξανά." + }, + "notification": { + "success": { + "title": "Widget προστέθηκε", + "message": "Το {name} προστέθηκε σε αυτόν τον πίνακα.", + "relocatedMessage": "Το {name} προστέθηκε στο {destination} επειδή ο επιλεγμένος προορισμός δεν ήταν διαθέσιμος." + }, + "error": { + "title": "Δεν είναι δυνατή η προσθήκη στοιχείου", + "message": "Το στοιχείο δεν μπορεί να προστεθεί σε αυτόν τον πίνακα" + } + } + }, + "selection": { + "summary": "{count, plural, one {# επιλεγμένο αντικείμενο} other {# επιλεγμένα αντικείμενα}}", + "selected": "{count, plural, one {# επιλεγμένα} other {# επιλεγμένα}}", + "copy": "Αντιγραφή", + "copied": "{count, plural, one {# το στοιχείο αντιγράφηκε στο πρόχειρο} other {# αντικείμενα αντιγράφηκαν στο πρόχειρο}}", + "copyError": "Δεν ήταν δυνατή η αντιγραφή των επιλεγμένων αντικειμένων. Ο περιηγητής σας ενδέχεται να μην επιτρέπει την πρόσβαση στο πρόχειρο.", + "paste": "Επικόλληση", + "pasteShortcut": "Επικόλληση αντιγραμμένων αντικειμένων εδώ (Ctrl / °C. + V)", + "pasted": "{count, plural, one {# αντικείμενο επικολλήθηκε} other {# αντικείμενα επικολλήθηκαν}}", + "pasteError": "Δεν ήταν δυνατή η ανάγνωση του προχείρου. Ο περιηγητής σας ενδέχεται να μην επιτρέπει πρόσβαση στο πρόχειρο.", + "pasteInvalid": "Το πρόχειρο δεν περιέχει έγκυρα αντικείμενα της πλακέτας Homarr.", + "pasteUnavailable": "Τα αντιγραμμένα στοιχεία δεν ταιριάζουν σε αυτόν τον πίνακα.", + "removed": "{count, plural, one {# στοιχείο αφαιρέθηκε} other {# στοιχεία αφαιρέθηκαν}}", + "move": "Μετακίνηση", + "moveTo": "Μετακίνηση των επιλεγμένων αντικειμένων", + "delete": "Διαγραφή", + "clear": "Καθαρισμός επιλογής", + "clearShortcut": "Καθαρισμός επιλογής (οριζόντια)", + "saveErrorTitle": "Δεν είναι δυνατή η ενημέρωση στοιχείων", + "saveErrorMessage": "Δεν ήταν δυνατή η αποθήκευση των αλλαγών. Ο πίνακας ανανεώθηκε.", + "moveUnavailableTitle": "Δεν είναι δυνατή η μετακίνηση των επιλεγμένων στοιχείων", + "moveUnavailableMessage": "Ο προορισμός δεν έχει αρκετό χώρο για ολόκληρη την επιλογή." }, "moveResize": { "title": "Μετακίνηση / αλλαγή μεγέθους", + "entryLabel": "{name}, στήλη {column}, σειρά {row}", + "target": { + "numbered": "{name}, προορισμός {index}", + "located": "{name}, {location}, προορισμός {index}" + }, + "keyboard": { + "instructions": "Πατήστε Enter ή Space για να ξεκινήσετε την επεξεργασία του πληκτρολογίου. Χρησιμοποιήστε τα πλήκτρα βέλους για να μετακινήσετε, Shift συν τα πλήκτρα βέλους για να αλλάξετε το μέγεθος και Escape για να σταματήσετε.", + "started": "Ξεκίνησε η επεξεργασία του πληκτρολογίου. Χρησιμοποιήστε τα πλήκτρα βέλους για να μετακινήσετε, Shift συν τα πλήκτρα βέλους για να αλλάξετε το μέγεθος, και Escape για να σταματήσετε.", + "stopped": "Η επεξεργασία πληκτρολογίου σταμάτησε.", + "boundary": "Αυτή η αλλαγή δεν ταιριάζει μέσα σε αυτό το τμήμα." + }, "field": { + "section": { + "label": "Τομέας ή σιδηροτροχιάς" + }, "width": { - "label": "Πλάτος" + "label": "Πλάτος", + "shortLabel": "W" }, "height": { - "label": "Ύψος" + "label": "Ύψος", + "shortLabel": "H" }, "xOffset": { "label": "Μετατόπιση X" @@ -1469,18 +2163,36 @@ "title": "Επεξεργασία στοιχείου", "tab": { "widget": "Επεξεργασία widget", - "app": "Επεξεργασία εφαρμογής" + "app": "Επεξεργασία εφαρμογής", + "integration": "Επεξεργασία ενσωμάτωσης" }, "app": { "propagationNotice": "Οι αλλαγές σε αυτήν την εφαρμογή θα εφαρμοστούν παντού όπου χρησιμοποιείται σε όλους τους πίνακες." }, + "integration": { + "action": "Επεξεργασία σύνδεσης", + "description": "Δοκιμάστε ή επισκευάστε μια επιλεγμένη σύνδεση χωρίς να βγείτε από αυτό το widget.", + "editLabel": "Επεξεργασία {name} ενσωμάτωσης", + "fullAccessRequired": "Απαιτείται πλήρης πρόσβαση", + "propagationNotice": "Οι αλλαγές σε αυτή την ενσωμάτωση ισχύουν παντού που χρησιμοποιείται. Η σύνδεση ελέγχεται πριν αποθηκευτεί.", + "loading": "Φόρτωση ενσωμάτωσης", + "loadError": "Δεν ήταν δυνατή η φόρτωση αυτής της ενσωμάτωσης. Δοκιμάστε ξανά πριν αλλάξετε τις ρυθμίσεις σύνδεσης." + }, + "preview": { + "integrationRequired": "Επιλέξτε μια σύνδεση για προεπισκόπηση αυτού του γραφικού στοιχείου.", + "size": "Μέγεθος Αρχείου" + }, + "settings": { + "label": "Ρυθμίσεις widget" + }, "advancedOptions": { "label": "Σύνθετες επιλογές", "title": "Σύνθετες επιλογές στοιχείου" }, "field": { "integrations": { - "label": "Ενσωματώσεις" + "label": "Ενσωματώσεις", + "removeLabel": "Αφαίρεση {name} ενσωμάτωσης" }, "title": { "label": "Τίτλος" @@ -1494,17 +2206,18 @@ } }, "remove": { - "title": "Αφαίρεση στοιχείου", "message": "Είστε βέβαιοι ότι θέλετε να αφαιρέσετε αυτό το στοιχείο;" + }, + "advancedFocus": { + "open": "Άνοιγμα προχωρημένης προβολής", + "close": "Κλείσιμο προχωρημένης προβολής", + "label": "Προχωρημένη προβολή {widget}" } }, "widget": { "integrationSelect": { "configureIntegrationFirst": "Συνδέστε πρώτα μια ενσωμάτωση", - "loading": "Φόρτωση...", - "placeholder": "Επιλέξτε μια επιλογή", - "noResults": "Δεν βρέθηκαν αποτελέσματα", - "loadError": "Αποτυχία φόρτωσης επιλογών" + "placeholder": "Επιλέξτε μια επιλογή" }, "app": { "name": "Εφαρμογή", @@ -1513,9 +2226,6 @@ "appId": { "label": "Επιλέξτε εφαρμογή" }, - "openInNewTab": { - "label": "Άνοιγμα σε νέα καρτέλα" - }, "showTitle": { "label": "Εμφάνιση ονόματος" }, @@ -1523,11 +2233,8 @@ "label": "Ενεργοποίηση ελέγχου κατάστασης" }, "layout": { - "label": "Διάταξη", "option": { - "row": "Οριζόντια", "row-reverse": "Οριζόντια (αντίστροφα)", - "column": "Κατακόρυφα", "column-reverse": "Κατακόρυφα (αντίστροφα)" } }, @@ -1552,23 +2259,60 @@ "name": "Σελιδοδείκτες", "description": "Εμφανίζει πολλαπλούς συνδέσμους εφαρμογών", "option": { - "title": { - "label": "Τίτλος" + "showTitle": { + "label": "Εμφάνιση τίτλου widget" + }, + "titleSize": { + "label": "Μέγεθος τίτλου widget (px)" }, "layout": { "label": "Διάταξη", "option": { - "row": { - "label": "Οριζόντια" - }, - "column": { - "label": "Κατακόρυφα" - }, - "grid": { - "label": "Πλέγμα" + "adaptive": { + "label": "Προσαρμοστική" }, "gridHorizontal": { "label": "Οριζόντιο πλέγμα" + }, + "icons": { + "label": "Εικονίδια" + } + } + }, + "variant": { + "label": "Εμφάνιση", + "option": { + "soft": { + "label": "Απαλό" + }, + "filled": { + "label": "Συμπληρώθηκε" + }, + "outline": { + "label": "Περίγραμμα" + }, + "plain": { + "label": "Απλό" + } + } + }, + "spacing": { + "label": "Απόσταση καρτών", + "option": { + "xs": { + "label": "Πολύ μικρό" + }, + "sm": { + "label": "Μικρό" + }, + "md": { + "label": "Μεσαίο" + }, + "lg": { + "label": "Μεγάλο" + }, + "xl": { + "label": "Πολύ μεγάλο" } } }, @@ -1581,17 +2325,28 @@ "hideHostname": { "label": "Απόκρυψη ονομάτων" }, - "openNewTab": { - "label": "Άνοιγμα σε νέα καρτέλα" - }, "withBorder": { "label": "Εμφάνιση περιγράμματος" }, + "grow": { + "label": "Επέκταση χαρτιών για συμπλήρωση γραμμής" + }, + "customUrls": { + "label": "Προσαρμοσμένοι σύνδεσμοι" + }, "items": { "label": "Σελιδοδείκτες", - "add": "Προσθήκη σελιδοδείκτη" + "remove": "Αφαίρεση σελιδοδείκτη", + "apps": { + "label": "Προσθήκη σελιδοδεικτών", + "description": "Επικόλληση URL ή εύρεση υπαρχουσών εφαρμογών. Σύρετε τους σελιδοδείκτες παρακάτω για να τους αναδιατάξετε.", + "placeholder": "Επικόλληση URL ή αναζήτηση εφαρμογών", + "addUrl": "Προσθέστε αυτό το URL", + "hint": "Πατήστε Enter για να προσθέσετε μια διεύθυνση URL. Επικόλληση URL διαχωρισμένων με κόμμα ή URL μιας ανά γραμμή για να προσθέσετε πολλά." + } } - } + }, + "empty": "Προσθέστε μια διεύθυνση URL ή εφαρμογή στις ρυθμίσεις widget" }, "archiveTeamWarrior": { "name": "ArchiveTeam Warrior", @@ -1600,33 +2355,61 @@ "showBroadcastMessage": { "label": "Εμφάνιση μηνυμάτων μετάδοσης" } + }, + "noProjectSelected": "Δεν επιλέχθηκε έργο", + "runnerStatus": "Εκτελεστής: {status}", + "projectId": "Έργο: {id}", + "sessionReceived": "Η συνεδρία λήφθηκε: {value}", + "sessionSent": "Η συνεδρία στάλθηκε: {value}", + "sessionId": "Συνεδρία: {id}", + "startedAt": "Ξεκίνησε στις {date}", + "emptyItems": "Καμία ενεργή ή πρόσφατη εργασία σε αυτό το στιγμιότυπο", + "metric": { + "running": "Εκτελείται", + "completed": "Ολοκληρώθηκε", + "failed": "Απέτυχε", + "canceled": "Ακυρώθηκε", + "download": "Λήψη", + "upload": "Ανέβασμα" + }, + "status": { + "running": "Εκτελείται", + "completed": "Ολοκληρώθηκε", + "failed": "Απέτυχε", + "canceled": "Ακυρώθηκε", + "stopped": "Διακόπηκε", + "idle": "Αδρανής", + "unknown": "Άγνωστο" + } + }, + "wud": { + "name": "Τι Είναι Το Docker", + "description": "Δείτε πόσες παρακολουθήσεις δοχείων έχουν διαθέσιμες ενημερώσεις.", + "title": "Τι Είναι Το Docker", + "monitored": "Ελέγχτηκε", + "updatesAvailable": "{count, plural, one {# διαθέσιμη ενημέρωση} other {# διαθέσιμες ενημερώσεις}}", + "updateAvailable": "Διαθέσιμη ενημέρωση", + "openReleaseNotes": "Άνοιγμα σημειώσεων έκδοσης", + "option": { + "showRing": { + "label": "Εμφάνιση κουδουνίσματος ενημέρωσης" + }, + "showUpdateList": { + "label": "Εμφάνιση λίστας ενημερώσεων περιέκτη", + "description": "Εμφανίζει κάθε δοχείο που παρακολουθείται και διαθέτει διαθέσιμη ενημέρωση εικόνας" + } } }, "dnsHoleSummary": { "name": "Σύνοψη DNS Hole", "description": "Εμφανίζει τη σύνοψη του DNS Hole σας", "option": { - "layout": { - "label": "Διάταξη", - "option": { - "row": { - "label": "Οριζόντια" - }, - "column": { - "label": "Κατακόρυφα" - }, - "grid": { - "label": "Πλέγμα" - } - } - }, "usePiHoleColors": { "label": "Χρήση χρωμάτων Pi-Hole" } }, "error": { - "internalServerError": "Αποτυχία λήψης της σύνοψης DNS Hole", - "integrationsDisconnected": "Δεν υπάρχουν διαθέσιμα δεδομένα, όλες οι ενσωματώσεις έχουν αποσυνδεθεί" + "internalServerError": "Αποτυχία λήψης της σύνοψης DNS Hole" }, "data": { "adsBlockedToday": "Σημερινοί αποκλεισμοί", @@ -1634,32 +2417,24 @@ "dnsQueriesToday": "Σημερινά queries", "domainsBeingBlocked": "Τομείς στη λίστα αποκλεισμού" }, - "domainsTooltip": "Λόγω πολλών ενσωματώσεων, το Homarr δεν μπορεί να υπολογίσει τον ακριβή αριθμό αποκλεισμένων τομέων" + "domainsTooltip": "Λόγω πολλών ενσωματώσεων, το Homarr δεν μπορεί να υπολογίσει τον ακριβή αριθμό αποκλεισμένων τομέων", + "status": { + "enabled": "Ενεργοποιημένο", + "disabled": "Απενεργοποιημένο", + "unknown": "Άγνωστο" + } }, "dnsHoleControls": { "name": "Στοιχεία ελέγχου DNS Hole", "description": "Ελέγξτε το PiHole ή το AdGuard από το dashboard σας", "option": { - "layout": { - "label": "Διάταξη", - "option": { - "row": { - "label": "Οριζόντια" - }, - "column": { - "label": "Κατακόρυφα" - }, - "grid": { - "label": "Πλέγμα" - } - } - }, "showToggleAllButtons": { "label": "Εμφάνιση κουμπιών εναλλαγής όλων" } }, "error": { - "internalServerError": "Αποτυχία ελέγχου του DNS Hole" + "internalServerError": "Αποτυχία ελέγχου του DNS Hole", + "bulkActionsFailed": "{count, plural, one {# η ενέργεια απέτυχε} other {# οι ενέργειες απέτυχαν}}" }, "controls": { "enableAll": "Ενεργοποίηση Όλων", @@ -1670,8 +2445,6 @@ "disabled": "Απενεργοποιημένο", "processing": "Σε επεξεργασία", "disconnected": "Αποσυνδεδεμένο", - "hours": "Ώρες", - "minutes": "Λεπτά", "unlimited": "Αφήστε κενό για απεριόριστο" } }, @@ -1683,16 +2456,10 @@ "label": "Εμφάνιση προσαρμοσμένου τίτλου/πόλης", "description": "Εμφανίστε έναν προσαρμοσμένο τίτλο ή το όνομα της πόλης/χώρας πάνω από το ρολόι." }, - "customTitle": { - "label": "Τίτλος" - }, "is24HourFormat": { "label": "Μορφή 24 ωρών", "description": "Χρήση μορφής 24 ωρών αντί της μορφής 12 ωρών" }, - "showSeconds": { - "label": "Εμφάνιση δευτερολέπτων" - }, "useCustomTimezone": { "label": "Χρήση σταθερής ζώνης ώρας" }, @@ -1711,29 +2478,295 @@ "label": "Προσαρμοσμένη μορφή ώρας", "description": "Χρησιμοποιήστε το ISO 8601 για τη μορφοποίηση της ώρας (θα παρακάμψει τις άλλες επιλογές)" }, - "customDateFormat": { - "label": "Προσαρμοσμένη μορφή ημερομηνίας", - "description": "Χρησιμοποιήστε το ISO 8601 για τη μορφοποίηση της ημερομηνίας (θα παρακάμψει τις άλλες επιλογές)" - }, "showWeather": { "label": "Εμφάνιση καιρού", "description": "Εμφάνιση ενός μικρού κινούμενου εικονιδίου καιρού και της θερμοκρασίας στη γωνία της κάρτας" }, - "weatherLocation": { - "label": "Τοποθεσία καιρού" - }, "isWeatherFormatFahrenheit": { "label": "Χρήση Fahrenheit" + }, + "animateWeatherIcon": { + "label": "Κίνηση εικονιδίου καιρού", + "description": "Εφέ κίνησης του εικονιδίου καιρού. Απενεργοποιήθηκε από προεπιλογή και πάντα απενεργοποιήθηκε όταν ζητείται μειωμένη κίνηση." + }, + "colorWeatherByDayNight": { + "label": "Χρώμα καιρού ανά ημέρα/νύχτα", + "description": "Tint το εικονίδιο του καιρού και η θερμοκρασία με χρώμα ημέρας ή νύχτα χρώμα, με βάση το αν αυτή τη στιγμή είναι μέρα ή νύχτα στην επιλεγμένη θέση." + }, + "dayWeatherColor": { + "label": "Χρώμα ημέρας" + }, + "nightWeatherColor": { + "label": "Νυχτερινό χρώμα" + }, + "worldClockCities": { + "label": "Παγκόσμιες πόλεις ρολογιών", + "description": "Προσθέστε και παραγγείλετε μέχρι έξι πόλεις για προχωρημένη προβολή." } + }, + "timezoneList": { + "timezone": "Ζώνη ώρας", + "cityLabel": "Ετικέτα πόλης", + "searchPlaceholder": "Αναζήτηση ζωνών χρόνου", + "noResults": "Δεν βρέθηκαν ζώνες ώρας", + "unsupportedOption": "Μη υποστηριζόμενη: {timeZone}", + "add": "Προσθήκη πόλης", + "remove": "Αφαίρεση {city}", + "reorder": "Αλλαγή σειράς {city}", + "limit": "Έχουν διαμορφωθεί {count} από {maximum} πόλεις" + }, + "worldClock": { + "primary": "Πρωτεύον ρολόι", + "local": "Τοπική ώρα", + "today": "Σήμερα", + "tomorrow": "Αύριο", + "yesterday": "Χθες", + "noSecondaryCities": "Προσθέστε τις πόλεις στο widget για να τις συγκρίνετε εδώ.", + "unsupportedPrimaryTitle": "Η κύρια ζώνη ώρας δεν είναι διαθέσιμη", + "unsupportedPrimary": "Το {timeZone} δεν υποστηρίζεται σε αυτό το πρόγραμμα περιήγησης. Εμφανίζεται η UTC ως σαφώς σημειωμένη εφεδρική.", + "unsupportedTimeZone": "Μη υποστηριζόμενη ζώνη ώρας: {timeZone}", + "accessibleTime": "{city}: {time}, {date}, {timeZone}", + "advancedLabel": "Προηγμένο παγκόσμιο ρολόι", + "cities": "Παγκόσμια ρολόγια", + "cityCount": "{count} timezones", + "timeBarLabel": "Θέση ώρας ημέρας 24 ωρών για {city}", + "dayProgress": "Το {percent}% πέρασε · {hours}h {minutes}m απομένει", + "phaseLegend": "Υπόμνημα ώρας ημέρας", + "tick": { + "midnight": "00", + "morning": "06", + "noon": "12", + "evening": "18", + "end": "24" + }, + "phaseRange": { + "night": "00–05 · 21–24", + "dawn": "05–08", + "day": "08–18", + "dusk": "18–21" + }, + "phase": { + "night": "Νύχτα", + "dawn": "Αυγή", + "day": "Ημέρα", + "dusk": "Σούρουπο" + } + } + }, + "airQuality": { + "name": "Ποιότητα Αέρα & Uv", + "description": "Εμφανίζει την ποιότητα του αέρα, τον δείκτη υπεριώδους ακτινοβολίας, τους ρύπους και τη γύρη για μια τοποθεσία.", + "option": { + "location": { + "label": "Θέση ποιότητας αέρα" + }, + "aqiStandard": { + "label": "Πρότυπο AQI", + "options": { + "auto": "Αυτόματο για τοπική ρύθμιση", + "european": "Ευρωπαϊκό AQI", + "us": "US AQI" + } + }, + "showUv": { + "label": "Εμφάνιση δείκτη UV" + }, + "showPollutants": { + "label": "Εμφάνιση συγκεντρώσεων ρύπων" + }, + "showPollen": { + "label": "Εμφάνιση συγκεντρώσεων γύρης" + } + }, + "category": { + "good": "Καλό", + "fair": "Δίκαιο", + "moderate": "Μέτρια", + "unhealthySensitive": "Ανθυγιεινός για τις ευαίσθητες ομάδες", + "unhealthy": "Μη υγιές", + "poor": "Φτωχή", + "veryPoor": "Πολύ φτωχή", + "veryUnhealthy": "Πολύ ανθυγιεινό", + "extremelyPoor": "Εξαιρετικά φτωχοί", + "hazardous": "Επικίνδυνο", + "unknown": "Χωρίς AQI ανάγνωση" + }, + "uv": { + "label": "Δείκτης UV", + "category": { + "low": "Χαμηλή", + "moderate": "Μέτρια", + "high": "Υψηλή", + "veryHigh": "Πολύ υψηλή", + "extreme": "Ακραία", + "unknown": "Χωρίς ανάγνωση" + } + }, + "dominantPollutant": "Dominant pollutant", + "aqiLabel": "AQI", + "strongestPollen": "Υψηλότερη γύρη", + "unit": { + "concentration": "{value} μg/m³", + "pollen": "{value} grains/m3" + }, + "pollutant": { + "pm2_5": "ΑΣ2.5", + "pm10": "PM10", + "ozone": "Όζον", + "nitrogenDioxide": "Διοξείδιο του αζώτου", + "sulphurDioxide": "Sulphur dioxide", + "carbonMonoxide": "Μονοξείδιο του άνθρακα" + }, + "pollen": { + "alder": "Alder", + "birch": "Σημύδα", + "grass": "Γρασίδι", + "mugwort": "Μοσχοκάρυδο", + "olive": "Ελιές", + "ragweed": "Ρύζι" + }, + "compact": { + "sixHourTrend": "Τάση AQI για τις επόμενες έξι ώρες" + }, + "advanced": { + "observedAt": "Ενημερώθηκε στο {time}", + "next24Hours": "Επόμενες 24 ώρες", + "pollutants": "Συγκεντρώσεις ρύπων", + "pollen": "Συγκεντρώσεις γύρης", + "sevenDayForecast": "μέγιστη πρόβλεψη 7 ημερών", + "aqiValue": "AQI {value}", + "uvValue": "UV {value}", + "uvShort": "UV {value}", + "noForecast": "Δεν υπάρχουν διαθέσιμα δεδομένα πρόγνωσης" + } + }, + "countdown": { + "name": "Αντίστροφη Μέτρηση", + "description": "Παρακολουθεί τις επερχόμενες εκδηλώσεις και τις επαναλαμβανόμενες επετείους.", + "option": { + "events": { + "label": "Συμβάντα", + "description": "Προσθήκη και παραγγελία μέχρι 20 εφάπαξ ή ετήσιες αντίστροφες μετρήσεις. Οι ημερομηνίες εισάγονται στην επιλεγμένη ζώνη ώρας." + }, + "showProgress": { + "label": "Εμφάνιση προόδου" + }, + "showSeconds": { + "label": "Εμφάνιση δευτερολέπτων", + "description": "Κρατήστε ορατά δευτερόλεπτα για κάθε επερχόμενο γεγονός." + } + }, + "dateTimeEventList": { + "newEvent": "Νέο συμβάν", + "add": "Προσθήκη συμβάντος", + "remove": "Αφαίρεση {event}", + "reorder": "Αναδιάταξη {event}", + "eventLabel": "Ετικέτα συμβάντος", + "timezone": "Ζώνη ώρας", + "unsupportedOption": "Μη υποστηριζόμενο: {timeZone}", + "recurrence": "Επανάληψη", + "recurrenceOption": { + "none": "Δεν επαναλαμβάνεται", + "yearly": "Κάθε χρόνο" + }, + "target": "Ημερομηνία και ώρα συμβάντος", + "trackProgress": "Παρακολούθηση προόδου από μια ημερομηνία έναρξης", + "start": "Ημερομηνία και ώρα έναρξης προόδου", + "confirmDateTime": "Επιβεβαίωση ημερομηνίας και ώρας", + "limit": "{count} από {maximum} διαμορφωμένα συμβάντα" + }, + "empty": { + "title": "Δεν υπάρχουν αντίστροφες μετρήσεις ακόμα", + "description": "Προσθέστε ένα συμβάν στις επιλογές widget για να ξεκινήσετε την καταμέτρηση κάτω." + }, + "completed": "Ολοκληρώθηκε", + "yearly": "Ετήσια", + "progress": "Πρόοδος συμβάντος", + "upcoming": "Επερχόμενες", + "completedEvents": "Ολοκληρωμένες εκδηλώσεις", + "invalid": { + "title": "Ορισμένα γεγονότα δεν μπορούν να εμφανιστούν", + "description": "{count, plural, one {Ένα συμβάν έχει μη έγκυρη ημερομηνία ή μη υποστηριζόμενη ζώνη ώρας.} other {Τα συμβάντα # έχουν μη έγκυρη ημερομηνία ή μη υποστηριζόμενη ζώνη ώρας.}}", + "value": "Unavailable" + }, + "alert": { + "notifications": "Ειδοποιήσεις περιηγητή", + "permissionDenied": "Οι ειδοποιήσεις αποκλείονται σε αυτό το πρόγραμμα περιήγησης.", + "reached": "Η αντίστροφη μέτρηση έχει φτάσει στο στόχο της." + } + }, + "timer": { + "name": "Timer / Pomodoro", + "description": "Εκτελεί ένα απλό χρονόμετρο ή μια διαμορφώσιμη ακολουθία Pomodoro.", + "option": { + "mode": { + "label": "Λειτουργία", + "options": { + "timer": "Χρονόμετρο", + "pomodoro": "Pomodoro" + } + }, + "timerMinutes": { + "label": "Λεπτά χρονόμετρου" + }, + "focusMinutes": { + "label": "Εστίαση σε λεπτά" + }, + "shortBreakMinutes": { + "label": "Σύντομο διάλειμμα λεπτά" + }, + "longBreakMinutes": { + "label": "Λεπτά μεγάλων διαλειμμάτων" + }, + "sessionsBeforeLongBreak": { + "label": "Εστίαση σε συνεδρίες πριν από ένα μεγάλο διάλειμμα" + }, + "autoStartBreaks": { + "label": "Αυτόματη εκκίνηση διαλειμμάτων" + }, + "autoStartFocus": { + "label": "Αυτόματη εκκίνηση εστιασμένων συνεδριών" + } + }, + "phase": { + "timer": "Χρονόμετρο", + "focus": "Εστίαση", + "shortBreak": "Σύντομο διάλειμμα", + "longBreak": "Μεγάλο διάλειμμα" + }, + "action": { + "start": "Έναρξη", + "pause": "Παύση", + "reset": "Reset" + }, + "attention": { + "timerComplete": "Timer complete", + "phaseReady": "Η φάση {phase} είναι έτοιμη" + }, + "progress": "Πρόοδος χρονοδιακόπτη: {progress}%", + "compact": { + "completedFocus": "{count, plural, =0 {Καμία συνεδρία εστίασης δεν ολοκληρώθηκε} one {# η συνεδρία εστίασης ολοκληρώθηκε} other {# Οι συνεδρίες εστίασης ολοκληρώθηκαν}}" + }, + "alert": { + "title": "Timer complete", + "completed": "Η φάση {phase} ολοκληρώθηκε." + }, + "advanced": { + "sequence": "Pomodoro sequence", + "focusSession": "Εστίαση στη συνεδρία {session}", + "settings": "Μόνιμες ρυθμίσεις", + "settingsHint": "Χρησιμοποιήστε το σχετικό μενού widget για να επεξεργαστείτε αυτές τις ρυθμίσεις του πίνακα.", + "localAlerts": "Τοπικές ειδοποιήσεις", + "notifications": "Ειδοποιήσεις περιηγητή", + "sound": "Ήχοι χρονόμετρου", + "localAlertsHint": "Οι ήχοι χρονομέτρησης είναι ενεργοποιημένοι από προεπιλογή. Οι ήχοι και οι ειδοποιήσεις ισχύουν μόνο για αυτό το widget σε αυτό το πρόγραμμα περιήγησης.", + "notificationsDenied": "Οι ειδοποιήσεις αποκλείονται σε αυτό το πρόγραμμα περιήγησης." } }, "minecraftServerStatus": { "name": "Κατάσταση διακομιστή Minecraft", "description": "Εμφανίζει την κατάσταση ενός διακομιστή Minecraft", "option": { - "title": { - "label": "Τίτλος" - }, "domain": { "label": "Διεύθυνση διακομιστή" }, @@ -1753,11 +2786,21 @@ "noStation": "Δεν επιλέχθηκε σταθμός", "option": { "baseUrl": { - "label": "URL Search.ch" + "label": "URL Search.ch", + "description": "Οι προσαρμοσμένες διευθύνσεις URL πρέπει να επιλύονται σε μια δημόσια διεύθυνση IP. Οι ιδιωτικοί και τοπικοί υπολογιστές απορρίπτονται." }, "station": { - "label": "Σταθμός" + "label": "Σταθμός", + "placeholder": "Αναζήτηση για ένα σταθμό" } + }, + "error": { + "customSourceUnavailable": "Η πηγή δρομολογίων δεν είναι διαθέσιμη. Ελέγξτε ότι η διεύθυνση URL επιλύεται σε μια δημόσια διεύθυνση IP.", + "stationSearch": "Δεν είναι δυνατή η αναζήτηση σταθμών. Ελέγξτε το προσαρμοσμένο URL και την πρόσβαση του πίνακα σας." + }, + "warning": { + "stale": "Το χρονοδιάγραμμα δεν ήταν δυνατό να ανανεωθεί. Εμφανίζονται οι αναχωρήσεις που ενημερώθηκαν τελευταία στο {time}.", + "staleCompact": "Παλιά δεδομένα" } }, "notebook": { @@ -1789,6 +2832,9 @@ "directionRtl": "Ορισμός κατεύθυνσης κειμένου από δεξιά προς τα αριστερά", "blockquote": "Μπλοκ κειμένου παράθεσης", "horizontalLine": "Οριζόντια γραμμή", + "details": "Εναλλαγή πτυσσόμενης ενότητας", + "expandDetails": "Ανάπτυξη πτυσσόμενου τμήματος", + "collapseDetails": "Σύμπτυξη πτυσσόμενου τμήματος", "bulletList": "Λίστα με κουκκίδες", "orderedList": "Ταξινομημένη λίστα", "checkList": "Λίστα ελέγχου", @@ -1797,16 +2843,20 @@ "link": "Σύνδεσμος", "unlink": "Αφαίρεση συνδέσμου", "image": "Ενσωμάτωση εικόνας", - "addTable": "Προσθήκη πίνακα", + "insertTable": "Εισαγωγή πίνακα", + "insertTableSize": "Εισαγωγή {columns} × {rows} πίνακας", "deleteTable": "Διαγραφή πίνακα", "colorCell": "Χρώμα κελιού", - "mergeCell": "Εναλλαγή συγχώνευσης κελιού", + "mergeCells": "Συγχώνευση κελιών", + "splitCell": "Διαχωρισμός κελιού", "addColumnLeft": "Προσθήκη στήλης πριν", "addColumnRight": "Προσθήκη στήλης μετά", "deleteColumn": "Διαγραφή στήλης", "addRowTop": "Προσθήκη γραμμής πριν", "addRowBelow": "Προσθήκη γραμμής μετά", - "deleteRow": "Διαγραφή γραμμής" + "deleteRow": "Διαγραφή γραμμής", + "toggleHeaderRow": "Εναλλαγή γραμμής κεφαλίδας", + "toggleHeaderColumn": "Εναλλαγή στήλης κεφαλίδας" }, "align": { "left": "Αριστερά", @@ -1817,8 +2867,6 @@ "clearColor": "Καθαρισμός χρώματος", "source": "Πηγή", "widthPlaceholder": "Τιμή σε % ή εικονοστοιχεία", - "columns": "Στήλες", - "rows": "Γραμμές", "width": "Πλάτος", "height": "Ύψος" }, @@ -1830,7 +2878,9 @@ "discard": "Απόρριψη αλλαγών", "keepEditing": "Συνέχιση επεξεργασίας" } - } + }, + "saveFailed": "Αδυναμία αποθήκευσης της σημείωσης", + "documentStats": "{words, plural, one {# λέξη} other {# λέξεις}} · {characters, plural, one {# χαρακτήρας} other {# χαρακτήρες}}" }, "anchorNote": { "name": "Σημείωση Anchor", @@ -1839,9 +2889,6 @@ "noteId": { "label": "Σημείωση" }, - "showTitle": { - "label": "Εμφάνιση τίτλου" - }, "showUpdatedAt": { "label": "Εμφάνιση τελευταίας ενημέρωσης" } @@ -1851,14 +2898,20 @@ "notFound": "Η σημείωση δεν βρέθηκε", "noNotes": "Δεν βρέθηκαν σημειώσεις", "integrationRequired": "Επιλέξτε πρώτα μια ενσωμάτωση Anchor", - "updatedAt": "Ενημερώθηκε {date}", "untitled": "Χωρίς τίτλο", - "edit": "Επεξεργασία", - "save": "Αποθήκευση", - "cancel": "Ακύρωση", "readOnlyViewer": "Έχετε πρόσβαση προβολής σε αυτήν τη σημείωση. Η επεξεργασία είναι απενεργοποιημένη.", "saveForbidden": "Δεν έχετε άδεια επεξεργασίας αυτής της σημείωσης.", - "saveFailed": "Αποτυχία αποθήκευσης αυτής της σημείωσης. Δοκιμάστε ξανά." + "saveFailed": "Αποτυχία αποθήκευσης αυτής της σημείωσης. Δοκιμάστε ξανά.", + "createdAt": "Δημιουργήθηκε {date}", + "permission": { + "owner": "Ιδιοκτήτης", + "editor": "Επεξεργαστής", + "viewer": "Προβολέας" + }, + "status": { + "pinned": "Καρφιτσωμένο", + "archived": "Αρχειοθετημένο" + } }, "iframe": { "name": "iframe", @@ -1917,6 +2970,25 @@ "clickable": { "label": "" } + }, + "state": { + "on": "Ενεργό", + "off": "Ανενεργό", + "unavailable": "Unavailable", + "unknown": "Άγνωστο" + }, + "advanced": { + "entityId": "Αναγνωριστικό οντότητας: {id}", + "lastChanged": "Τροποποιήθηκε {date}", + "attribute": { + "unit": "Μονάδα", + "deviceClass": "Τάξη συσκευής", + "icon": "Εικονίδιο" + } + }, + "error": { + "loadFailed": "Αδυναμία φόρτωσης οντότητας", + "toggleFailed": "Δεν είναι δυνατή η ενημέρωση οντότητας" } }, "smartHome-executeAutomation": { @@ -1932,11 +3004,31 @@ }, "spotlightAction": { "run": "Εκτέλεση {name}" + }, + "advanced": { + "lastExecuted": "Τελευταία εκτέλεση στο {time}", + "automationId": "Αναγνωριστικό αυτοματισμού: {id}", + "ready": "Έτοιμο για εκτέλεση", + "noPermission": "Δεν έχετε άδεια για να εκτελέσετε αυτόν τον αυτοματισμό" + }, + "status": { + "running": "Εκτελούμενος αυτοματισμός", + "success": "Ο αυτοματισμός ολοκληρώθηκε" + }, + "error": { + "executeFailed": "Δεν είναι δυνατή η εκτέλεση αυτοματισμού" } }, "stockPrice": { "name": "Τιμή μετοχής", "description": "Εμφανίζει την τρέχουσα τιμή μετοχής μιας εταιρείας", + "advanced": { + "currentPrice": "Τρέχουσα τιμή", + "previousClose": "Προηγούμενο κλείσιμο", + "changePercentage": "Μεταβολή (%)", + "minimum": "Ελάχιστο", + "maximum": "Μέγιστο" + }, "option": { "stock": { "label": "Σύμβολο μετοχής" @@ -2007,6 +3099,10 @@ "label": "1 μήνας" } } + }, + "showDetails": { + "label": "Εμφάνιση λεπτομερειών", + "description": "Εμφάνιση ονόματος, αλλαγής και χρονικού εύρους στην συμπαγή προβολή. Απενεργοποιήστε μόνο για το σύμβολο και την τιμή." } } }, @@ -2034,6 +3130,13 @@ "showUnmonitored": { "label": "Εμφάνιση μη επιτηρούμενων" } + }, + "advanced": { + "previousMonth": "Εμφάνιση προηγούμενου μήνα", + "nextMonth": "Εμφάνιση επόμενου μήνα", + "eventCount": "{count, plural, one {# εκδήλωση} other {# συμβάντα}}", + "loading": "Φόρτωση γεγονότων ημερολογίου...", + "noEvents": "Δεν υπάρχουν συμβάντα σε αυτό το μήνα" } }, "weather": { @@ -2046,16 +3149,18 @@ "disableTemperatureDecimals": { "label": "Απενεργοποίηση δεκαδικών θερμοκρασίας" }, + "animateIcons": { + "label": "Κίνηση εικονιδίων καιρού" + }, + "showHumidity": { + "label": "Εμφάνιση υγρασίας" + }, "showCurrentWindSpeed": { - "label": "Εμφάνιση τρέχουσας ταχύτητας ανέμου", - "description": "Μόνο στον τρέχοντα καιρό" + "label": "Εμφάνιση τρέχουσας ταχύτητας ανέμου" }, "useImperialSpeed": { "label": "Χρήση mph για την ταχύτητα ανέμου" }, - "location": { - "label": "Τοποθεσία καιρού" - }, "showCity": { "label": "Εμφάνιση πόλης" }, @@ -2065,13 +3170,10 @@ "forecastDayCount": { "label": "Αριθμός ημερών πρόγνωσης", "description": "Όταν το γραφικό στοιχείο δεν έχει αρκετό πλάτος, εμφανίζονται λιγότερες ημέρες" - }, - "dateFormat": { - "label": "Μορφή ημερομηνίας", - "description": "Πώς θα πρέπει να εμφανίζεται η ημερομηνία" } }, "currentWindSpeed": "{currentWindSpeed} {unit}", + "disabled": "Τα δεδομένα καιρού δεν είναι διαθέσιμα επειδή οι εξερχόμενες συνδέσεις είναι απενεργοποιημένες", "dailyForecast": { "sunrise": "Ανατολή", "sunset": "Δύση", @@ -2094,6 +3196,47 @@ "thunderstorm": "Καταιγίδα", "thunderstormWithHail": "Καταιγίδα με χαλάζι", "unknown": "Άγνωστο" + }, + "details": "Εμφάνιση λεπτομερειών καιρού", + "detailsFor": "Εμφάνιση λεπτομερειών καιρού για {date}", + "advanced": { + "forecast": "7-ήμερη πρόβλεψη", + "hourlyForecast": "Επόμενες 24 ώρες", + "day": "Ημέρα", + "time": "Ώρα", + "conditions": "Προϋποθέσεις", + "temperature": "Θερμοκρασία", + "feelsLike": "Αίσθηση θερμοκρασίας {temperature}", + "feelsLikeLabel": "Αισθάνεται σαν", + "feelsLikeRange": "Αισθάνεται όπως: {maximum} / {minimum}", + "highLow": "High {maximum} · low {minimum}", + "observedAt": "Ενημερώθηκε στο {time}", + "humidity": "Υγρασία", + "averageHumidity": "Μέση υγρασία: {humidity}%", + "currentHumidity": "Τρέχουσα υγρασία", + "wind": "Άνεμος / ριπές ({unit})", + "currentWind": "Τρέχων άνεμος / ριπές", + "windValue": "{speed} / {gusts} {unit}", + "windDetail": "Μέγιστος άνεμος / ριπές: {speed} / {gusts} {unit}", + "nextHourPrecipitation": "Κατακρήμνιση την επόμενη ώρα", + "precipitationChance": "Πιθανότητα βροχόπτωσης", + "precipitationValue": "{probability}% · {amount} mm", + "precipitationDetail": "Καθιζήσεις: {probability}% · {amount} mm", + "todayUv": "Ο σημερινός μέγιστος δείκτης UV", + "uvIndex": "Μέγιστος δείκτης UV: {value}", + "daylight": "Φως Ημέρας: {duration}", + "hourlyTooltip": "Αισθάνεται σαν {feelsLike}{temperatureUnit} · {amount} mm · {humidity}% υγρασία · {speed} {speedUnit} wind", + "hourlyTooltipWithoutHumidity": "Αισθάνεται σαν {feelsLike}{temperatureUnit} · {amount} mm · {speed} {speedUnit} wind", + "detailLabel": { + "feelsLike": "Αισθάνεται σαν", + "precipitation": "Κατακρήμνιση", + "humidity": "Μέση υγρασία", + "wind": "Μέγιστος άνεμος / ριπές", + "uv": "Μέγιστος δείκτης UV", + "daylight": "Daylight" + }, + "sun": "Ανατολή ηλίου / ηλιοβασίλεμα", + "noForecast": "Δεν υπάρχουν διαθέσιμα δεδομένα πρόγνωσης" } }, "indexerManager": { @@ -2106,8 +3249,15 @@ }, "title": "Διαχειριστής indexer", "testAll": "Δοκιμή όλων", + "status": { + "healthy": "Υγείες", + "unhealthy": "Μη υγιές", + "disabled": "Απενεργοποιημένο", + "unknown": "Μη διαθέσιμη υγεία" + }, "error": { - "internalServerError": "Αποτυχία λήψης της κατάστασης των indexer" + "internalServerError": "Αποτυχία λήψης της κατάστασης των indexer", + "testAll": "Το τεστ ευρετηρίου απέτυχε. Δοκιμάστε ξανά." } }, "healthMonitoring": { @@ -2136,11 +3286,6 @@ "fileSystem": { "label": "Εμφάνιση Πληροφοριών Συστήματος Αρχείων" }, - "visibleStorageVolumes": { - "label": "Ορατοί τόμοι αποθήκευσης", - "description": "Διαθέσιμο μόνο όταν όλες οι επιλεγμένες ενσωματώσεις είναι Synology. Αφήστε το κενό για να εμφανιστούν όλοι οι εντοπισμένοι τόμοι αποθήκευσης.", - "placeholder": "Επιλέξτε τόμους αποθήκευσης" - }, "defaultTab": { "label": "" }, @@ -2163,17 +3308,27 @@ "minutes": "{count} λεπτά", "used": "", "available": "Διαθέσιμο", - "lastSeen": "Τελευταία ενημέρωση κατάστασης: {lastSeen}" + "lastSeen": "Τελευταία ενημέρωση κατάστασης: {lastSeen}", + "updatesAvailable": "{count, plural, one {# διαθέσιμη ενημέρωση} other {# διαθέσιμες ενημερώσεις}}", + "rebootRequired": "Απαιτείται επανεκκίνηση", + "rebootNotRequired": "Δεν απαιτείται επανεκκίνηση" + }, + "smartStatus": { + "attributesWithinThresholds": "SMART: χαρακτηριστικά εντός ορίων", + "attributesFailed": "Αποτυχία χαρακτηριστικών SMART: {attributes}", + "noCriticalWarning": "SMART: δεν αναφέρθηκε προειδοποίηση από SSD", + "criticalWarning": "SMART: κρίσιμη προειδοποίηση που αναφέρεται από SSD" + }, + "gauge": { + "cpuUsage": "Χρήση CPU", + "cpuTemperature": "Θερμοκρασία επεξεργαστή", + "memoryUsage": "Χρήση μνήμης", + "gpuUsage": "Χρήση GPU του {name}" }, - "memory": {}, "error": { "internalServerError": "Αποτυχία λήψης της κατάστασης υγείας" }, "cluster": { - "summary": { - "cpu": "CPU", - "memory": "RAM" - }, "resource": { "node": { "name": "Κόμβοι" @@ -2209,8 +3364,6 @@ "table": { "header": { "name": "Όνομα", - "cpu": "CPU", - "memory": "RAM", "node": "Κόμβος" } } @@ -2220,33 +3373,29 @@ "name": "Στατιστικά Docker", "description": "Στατιστικά των κοντέινερ σας (Αυτό το γραφικό στοιχείο μπορεί να προστεθεί μόνο με δικαιώματα διαχειριστή)", "option": { - "columns": { - "label": "Στήλες προς εμφάνιση" + "endpointIds": { + "label": "Περιβάλλουσες προσάρτησης", + "description": "Αφήστε κενό για να εμφανίσετε δοχεία από κάθε περιβάλλον Docker", + "placeholder": "Όλα τα περιβάλλοντα Docker" }, - "enableRowSorting": { - "label": "Ενεργοποίηση ταξινόμησης στοιχείων" + "containerFilter": { + "label": "Περιέκτες για φιλτράρισμα" + }, + "filterIsWhitelist": { + "label": "Φιλτράρισμα ως λευκή λίστα" }, "defaultSort": { - "label": "Στήλη που χρησιμοποιείται για την προεπιλεγμένη ταξινόμηση", "option": { "name": "Όνομα", "state": "Κατάσταση", "cpuUsage": "Χρήση CPU", "memoryUsage": "Χρήση μνήμης" } - }, - "descendingDefaultSort": { - "label": "Αντιστροφή ταξινόμησης" - }, - "columnOrder": { - "label": "Σειρά στηλών" - }, - "columnWidths": { - "label": "Πλάτη στηλών" } }, "error": { "internalServerError": "Αποτυχία ανάκτησης στατιστικών κοντέινερ", + "endpointsUnavailable": "Τα τελικά σημεία προσάρτησης δεν είναι διαθέσιμα", "layoutSaveTitle": "Η διάταξη πίνακα δεν αποθηκεύτηκε", "layoutSaveMessage": "Δεν ήταν δυνατή η αποθήκευση της διάταξης του πίνακα Docker. Δοκιμάστε να μετακινήσετε ή να αλλάξετε ξανά το μέγεθος της στήλης." }, @@ -2255,7 +3404,6 @@ } }, "coolify": { - "name": "Coolify", "description": "Επισκόπηση της παρουσίας σας στο Coolify με διακομιστές και εφαρμογές", "option": { "showServers": { @@ -2281,17 +3429,49 @@ "internalServerError": "Αποτυχία λήψης δεδομένων Coolify" }, "server": { - "buildServer": "Δόμηση" + "buildServer": "Δόμηση", + "resourceCounts": "{applications, plural, one {# εφαρμογή} other {# εφαρμογές}} / {services, plural, one {# υπηρεσία} other {# υπηρεσίες}}", + "reachability": "Μεταβλητότητα", + "usability": "Χρηστικότητα" + }, + "source": { + "url": "Πηγή: {url}", + "unavailable": "{source}: unavailable" }, "instances": { "title": "Παρουσίες" + }, + "action": { + "openResource": "Άνοιγμα {name}", + "openLogs": "Άνοιγμα αρχείων καταγραφής του {name}", + "showIp": "Εμφάνιση διεύθυνσης IP", + "hideIp": "Απόκρυψη διεύθυνσης IP" + }, + "status": { + "running": "Εκτελείται", + "stopped": "Διακόπηκε", + "exited": "Έξοδος", + "starting": "Έναρξη", + "restarting": "Γίνεται επανεκκίνηση", + "unknown": "Άγνωστο", + "online": "Συνδεδεμένος", + "offline": "Αποσυνδεδεμένος", + "reachable": "Προσβάσιμο", + "unreachable": "Απροσπέλαστο", + "usable": "Ωφέλιμο", + "unusable": "Αχρησιμοποίητο" } }, "vpn": { "name": "VPN", "description": "Επισκόπηση των συνδέσεων VPN σας", "serviceUnavailable": "Το VPN δεν είναι διαθέσιμο", - "option": {} + "status": { + "running": "Εκτελείται", + "notRunning": "Δεν εκτελείται", + "unavailable": "Unavailable", + "vpn": "VPN: {status}" + } }, "ups": { "name": "UPS", @@ -2318,14 +3498,19 @@ "runtime": "Χρόνος λειτουργίας", "load": "Φορτίο", "input": "Είσοδος", - "output": "Έξοδος" + "output": "Έξοδος", + "batteryVoltage": "Τάση μπαταρίας", + "power": "Ισχύς", + "temperature": "Θερμοκρασία", + "manufacturer": "Παραγωγός", + "model": "Μοντέλο", + "serial": "Σειριακός" }, "error": { "internalServerError": "Αποτυχία ανάκτησης δεδομένων UPS" } }, "tracearr": { - "name": "Tracearr", "description": "Ενισχυμένη παρακολούθηση διακομιστή πολυμέσων με λεπτομερή δεδομένα ροής και μετακωδικοποίησης", "option": { "showStreams": { @@ -2413,10 +3598,7 @@ "label": "Συμβάν", "description": "Εμφάνιση συνολικών εμφανίσεων ενός συγκεκριμένου συμβάντος", "placeholder": "Επιλέξτε ένα συμβάν", - "loading": "Φόρτωση συμβάντων...", - "noEvents": "Δεν βρέθηκαν συμβάντα", - "none": "Κανένα συμβάν", - "configureWebsiteFirst": "Επιλέξτε πρώτα έναν ιστότοπο για να φορτώσετε συμβάντα" + "none": "Κανένα συμβάν" }, "chartType": { "label": "Τύπος γραφήματος", @@ -2447,26 +3629,21 @@ "eventNames": { "label": "Συμβάντα", "description": "Επιλέξτε ένα ή περισσότερα συμβάντα για το γράφημα", - "placeholder": "Επιλέξτε συμβάντα...", - "loading": "Φόρτωση συμβάντων...", - "noEvents": "Δεν βρέθηκαν συμβάντα", - "configureWebsiteFirst": "Επιλέξτε πρώτα έναν ιστότοπο για να φορτώσετε συμβάντα" + "placeholder": "Επιλέξτε συμβάντα..." }, "topCount": { "label": "Στοιχεία προς εμφάνιση", "description": "Αριθμός κορυφαίων στοιχείων προς εμφάνιση (μέγιστο 500)" + }, + "events": { + "loading": "Φόρτωση εκδηλώσεων...", + "noEvents": "Δεν βρέθηκαν συμβάντα", + "configureWebsiteFirst": "Επιλέξτε πρώτα μια ιστοσελίδα για να φορτώσετε συμβάντα" } }, "event": { - "occurrences": "συμβάντα", "label": "συμβάντα" }, - "topPages": { - "direct": "Απευθείας" - }, - "topReferrers": { - "direct": "Απευθείας" - }, "events": { "selectPrompt": "Επιλέξτε συμβάντα για το γράφημα" }, @@ -2475,6 +3652,9 @@ "noWebsite": "Δεν έχει ρυθμιστεί ιστότοπος", "noData": "Δεν υπάρχουν διαθέσιμα δεδομένα", "internalServerError": "Αποτυχία ανάκτησης δεδομένων Umami" + }, + "top": { + "direct": "Άμεση" } }, "common": { @@ -2502,7 +3682,8 @@ }, "integration": { "noData": "Δεν βρέθηκε ενσωμάτωση", - "description": "Κάντε κλικ για να δημιουργήσετε νέα ενσωμάτωση" + "description": "Κάντε κλικ για να δημιουργήσετε νέα ενσωμάτωση", + "manage": "Διαχείριση ενσωματώσεων" }, "app": { "noData": "Δε βρέθηκε εφαρμογή", @@ -2513,7 +3694,61 @@ "noIntegration": "Δεν έχει επιλεγεί ενσωμάτωση", "noData": "Δεν υπάρχουν διαθέσιμα δεδομένα ενσωμάτωσης" }, - "option": {} + "integrationDisconnected": "Δεν υπάρχουν διαθέσιμα δεδομένα, όλες οι ενσωματώσεις αποσυνδέθηκαν", + "updatedAt": "Ενημερώθηκε {date}", + "title": { + "label": "Τίτλος" + }, + "openInNewTab": { + "label": "Άνοιγμα σε νέα καρτέλα" + }, + "showTitle": { + "label": "Εμφάνιση τίτλου" + }, + "weatherLocation": { + "label": "Τοποθεσία καιρού" + }, + "layout": { + "label": "Διάταξη", + "option": { + "horizontal": "Οριζόντια", + "vertical": "Κατακόρυφα", + "grid": "Πλέγμα" + } + }, + "select": { + "loading": "Φόρτωση...", + "loadError": "Αποτυχία φόρτωσης των επιλογών" + }, + "dateFormat": { + "label": "Μορφή Ημερομηνίας", + "description": "Πώς θα πρέπει να μοιάζει η ημερομηνία" + }, + "visibleStorageVolumes": { + "label": "Ορατοί όγκοι αποθήκευσης", + "description": "Διαθέσιμο μόνο όταν κάθε επιλεγμένη ενσωμάτωση είναι το OpenMediaVault ή η Synology. Αφήστε κενό για να εμφανιστούν όλοι οι ανιχνευμένοι τόμοι αποθήκευσης.", + "placeholder": "Επιλογή εντάσεων αποθήκευσης" + }, + "tableOptions": { + "columns": { + "label": "Στήλες για εμφάνιση" + }, + "columnOrder": { + "label": "Σειρά στήλης" + }, + "columnWidths": { + "label": "Πλάτος στηλών" + }, + "enableRowSorting": { + "label": "Ενεργοποίηση ταξινόμησης στοιχείων" + }, + "defaultSort": { + "label": "Στήλη που χρησιμοποιείται για την ταξινόμηση κατά προεπιλογή" + }, + "invertSorting": { + "label": "Αντιστροφή ταξινόμησης" + } + } }, "video": { "name": "Ροή Βίντεο", @@ -2572,6 +3807,7 @@ "transcoding": "Μετακωδικοποίηση", "paused": "Σε παύση", "remaining": "Απομένουν {minutes} λεπτά", + "seasonEpisode": "S{season} E{episode}", "metadata": { "title": "Στατιστικά για περίεργους", "video": { @@ -2589,11 +3825,16 @@ "resolution": "Ανάλυση", "target": "" } - } + }, + "unknownUser": "Άγνωστος χρήστης" + }, + "summary": { + "sessions": "{count, plural, one {# συνεδρία} other {# συνεδρίες}}", + "playing": "{count} σε αναπαραγωγή", + "transcoding": "{count} transcoding" } }, "paperlessNgx": { - "name": "Paperless-ngx", "description": "Επισκόπηση του αρχείου εγγράφων σας στο Paperless-ngx", "documentsTotal": "Συνολικά Έγγραφα", "documentsInbox": "Εισερχόμενα", @@ -2637,6 +3878,192 @@ "internalServerError": "Αποτυχία λήψης δεδομένων Paperless-ngx" } }, + "patchmon": { + "description": "Επισκόπηση της κατάστασης ενημερώσεων κώδικα των κεντρικών υπολογιστών από το PatchMon", + "title": "Στατιστικά PatchMon", + "totalHosts": "Συνολικοί κεντρικοί υπολογιστές", + "hostsNeedingUpdates": "Χρειάζονται ενημερώσεις", + "securityUpdates": "Ενημερώσεις ασφαλείας", + "upToDateHosts": "Ενημερωμένοι κεντρικοί υπολογιστές", + "hostsWithSecurityUpdates": "Κεντρικοί υπολογιστές με ενημερώσεις ασφαλείας", + "recentUpdates24h": "Ενημερώσεις (24 ώρες)", + "totalOutdatedPackages": "Παρωχημένα πακέτα", + "totalRepos": "Αποθετήρια", + "osDistribution": "Κατανομή λειτουργικών συστημάτων", + "compliance": "Συμμόρφωση ενημερώσεων κώδικα", + "complianceRatio": "{upToDate} / {total}", + "lastUpdated": "Ενημερώθηκε {time}", + "option": { + "showTotalHosts": { + "label": "Εμφάνιση συνολικών κεντρικών υπολογιστών", + "description": "Εμφάνιση του συνολικού αριθμού των κεντρικών υπολογιστών υπό παρακολούθηση" + }, + "showHostsNeedingUpdates": { + "label": "Εμφάνιση κεντρικών υπολογιστών που χρειάζονται ενημερώσεις", + "description": "Εμφάνιση κεντρικών υπολογιστών με τουλάχιστον ένα παρωχημένο πακέτο" + }, + "showSecurityUpdates": { + "label": "Εμφάνιση ενημερώσεων ασφαλείας", + "description": "Εμφάνιση του συνολικού αριθμού διαθέσιμων ενημερώσεων ασφαλείας" + }, + "showUpToDateHosts": { + "label": "Εμφάνιση ενημερωμένων κεντρικών υπολογιστών", + "description": "Εμφάνιση κεντρικών υπολογιστών χωρίς παρωχημένα πακέτα" + }, + "showHostsWithSecurityUpdates": { + "label": "Εμφάνιση κεντρικών υπολογιστών με ενημερώσεις ασφαλείας", + "description": "Εμφάνιση κεντρικών υπολογιστών που απαιτούν ενημερώσεις ασφαλείας" + }, + "showRecentUpdates24h": { + "label": "Εμφάνιση πρόσφατων ενημερώσεων (24 ώρες)", + "description": "Εμφάνιση του αριθμού των ενημερώσεων που εφαρμόστηκαν τις τελευταίες 24 ώρες" + }, + "showTotalOutdatedPackages": { + "label": "Εμφάνιση παρωχημένων πακέτων", + "description": "Εμφάνιση του συνολικού αριθμού παρωχημένων πακέτων σε όλους τους κεντρικούς υπολογιστές" + }, + "showTotalRepos": { + "label": "Εμφάνιση αποθετηρίων", + "description": "Εμφάνιση του αριθμού των ενεργών αποθετηρίων υπό παρακολούθηση" + }, + "enableThresholdColors": { + "label": "Ενεργοποίηση χρωμάτων κατωφλίου", + "description": "Χρωματισμός των τιμών στατιστικών με πράσινο, κίτρινο ή κόκκινο βάσει προκαθορισμένων επιπέδων σοβαρότητας" + }, + "useCustomThresholds": { + "label": "Προηγμένα κατώφλια", + "description": "Προσαρμόστε τα κατώφλια προειδοποίησης και κρίσιμης κατάστασης ανά στατιστικό, χρησιμοποιώντας απόλυτες μετρήσεις ή ποσοστά του συνόλου των κεντρικών υπολογιστών" + }, + "thresholdMode": { + "option": { + "absolute": "Απόλυτη μέτρηση", + "percent": "Ποσοστό του συνόλου των κεντρικών υπολογιστών" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "Λειτουργία κατωφλίου για απαιτούμενες ενημερώσεις", + "description": "Σύγκριση του αριθμού απαιτούμενων ενημερώσεων ως απόλυτης τιμής ή ποσοστού του συνόλου των κεντρικών υπολογιστών" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "Κατώφλι προειδοποίησης απαιτούμενων ενημερώσεων" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "Κρίσιμο κατώφλι απαιτούμενων ενημερώσεων" + }, + "securityUpdatesThresholdMode": { + "label": "Λειτουργία κατωφλίου ενημερώσεων ασφαλείας", + "description": "Σύγκριση του αριθμού ενημερώσεων ασφαλείας ως απόλυτης τιμής ή ποσοστού του συνόλου των κεντρικών υπολογιστών" + }, + "securityUpdatesWarningAt": { + "label": "Κατώφλι προειδοποίησης ενημερώσεων ασφαλείας" + }, + "securityUpdatesCriticalAt": { + "label": "Κρίσιμο κατώφλι ενημερώσεων ασφαλείας" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "Λειτουργία κατωφλίου κεντρικών υπολογιστών με ενημερώσεις ασφαλείας", + "description": "Σύγκριση του αριθμού κεντρικών υπολογιστών ως απόλυτης τιμής ή ποσοστού του συνόλου των κεντρικών υπολογιστών" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "Κατώφλι προειδοποίησης κεντρικών υπολογιστών με ενημερώσεις ασφαλείας" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "Κρίσιμο κατώφλι κεντρικών υπολογιστών με ενημερώσεις ασφαλείας" + }, + "upToDateHostsThresholdMode": { + "label": "Λειτουργία κατωφλίου ενημερωμένων κεντρικών υπολογιστών", + "description": "Σύγκριση του αριθμού ενημερωμένων κεντρικών υπολογιστών ως απόλυτης τιμής ή ποσοστού του συνόλου των κεντρικών υπολογιστών" + }, + "upToDateHostsWarningAt": { + "label": "Κατώφλι προειδοποίησης ενημερωμένων κεντρικών υπολογιστών", + "description": "Εμφάνιση κίτρινου όταν η τιμή είναι ίση ή μεγαλύτερη από αυτό το κατώφλι αλλά μικρότερη από την πλήρη κάλυψη" + }, + "upToDateHostsCriticalAt": { + "label": "Κρίσιμο κατώφλι ενημερωμένων κεντρικών υπολογιστών", + "description": "Εμφάνιση κόκκινου όταν η τιμή πέσει κάτω από αυτό το κατώφλι" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "Λειτουργία κατωφλίου παρωχημένων πακέτων", + "description": "Σύγκριση του αριθμού παρωχημένων πακέτων ως απόλυτης τιμής ή ποσοστού του συνόλου των κεντρικών υπολογιστών" + }, + "totalOutdatedPackagesWarningAt": { + "label": "Κατώφλι προειδοποίησης παρωχημένων πακέτων" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "Κρίσιμο κατώφλι παρωχημένων πακέτων" + }, + "showOsDistribution": { + "label": "Εμφάνιση κατανομής λειτουργικών συστημάτων", + "description": "Εμφάνιση ανάλυσης των κεντρικών υπολογιστών υπό παρακολούθηση ανά λειτουργικό σύστημα" + }, + "osDistributionLimit": { + "label": "Όριο κατανομής λειτουργικών συστημάτων", + "description": "Μέγιστος αριθμός λειτουργικών συστημάτων προς εμφάνιση", + "option": { + "3": "Κορυφαία 3", + "5": "Κορυφαία 5", + "10": "Κορυφαία 10", + "all": "Όλα" + } + }, + "showOsVersion": { + "label": "Εμφάνιση έκδοσης λειτουργικού συστήματος", + "description": "Προσθήκη της έκδοσης του λειτουργικού συστήματος σε κάθε ετικέτα κατανομής, όταν είναι διαθέσιμη" + }, + "showComplianceHero": { + "label": "Εμφάνιση ένδειξης συμμόρφωσης", + "description": "Εμφάνιση δακτυλίου συμμόρφωσης που δείχνει το ποσοστό των ενημερωμένων κεντρικών υπολογιστών" + }, + "osDisplayMode": { + "label": "Λειτουργία εμφάνισης λειτουργικού συστήματος", + "description": "Επιλέξτε τον τρόπο εμφάνισης της κατανομής λειτουργικών συστημάτων", + "option": { + "bars": "Οριζόντιες γραμμές", + "donut": "Γράφημα δακτυλίου" + } + }, + "threshold": { + "warningAt": { + "description": "Εισάγετε κίτρινο όταν η τιμή φτάσει αυτό το όριο" + }, + "criticalAt": { + "description": "Εισάγετε κόκκινο όταν η τιμή φτάσει αυτό το όριο" + } + } + }, + "error": { + "internalServerError": "Αποτυχία λήψης δεδομένων PatchMon" + } + }, + "bazarr": { + "description": "Επισκόπηση των ελλειπόντων υποτίτλων και της κατάστασης υγείας της εγκατάστασης Bazarr", + "episodes": "Ελλείποντα επεισόδια", + "movies": "Ελλείπουσες ταινίες", + "providers": "Προβλήματα παρόχων", + "status": "Προβλήματα υγείας", + "announcements": "Ανακοινώσεις", + "option": { + "showMissingEpisodes": { + "label": "Εμφάνιση ελλειπόντων επεισοδίων", + "description": "Εμφάνιση του αριθμού των επεισοδίων χωρίς υπότιτλους" + }, + "showMissingMovies": { + "label": "Εμφάνιση ελλειπουσών ταινιών", + "description": "Εμφάνιση του αριθμού των ταινιών χωρίς υπότιτλους" + }, + "showProviderIssues": { + "label": "Εμφάνιση προβλημάτων παρόχων", + "description": "Εμφάνιση του αριθμού των παρόχων υποτίτλων με προβλήματα" + }, + "showHealthIssues": { + "label": "Εμφάνιση προβλημάτων υγείας", + "description": "Εμφάνιση του αριθμού των προβλημάτων υγείας του Bazarr" + } + }, + "error": { + "internalServerError": "Αποτυχία λήψης δεδομένων Bazarr" + } + }, "immich-serverStats": { "name": "Στατιστικά διακομιστή Immich", "description": "Πληροφορίες για την παρουσία σας στο Immich", @@ -2661,7 +4088,8 @@ "users": "Χρήστες", "photos": "Φωτογραφίες", "videos": "Βίντεο", - "storage": "Χρησιμοποιούμενος χώρος" + "storage": "Χρησιμοποιούμενος χώρος", + "albumLimit": "Μεγαλύτερα άλμπουμ (μέχρι το {count} εμφανίζεται)" }, "immich-albumCarousel": { "name": "Άλμπουμ Immich", @@ -2685,24 +4113,21 @@ } }, "description": "Παρουσίαση εικόνων από άλμπουμ Immich ή από ολόκληρη τη βιβλιοθήκη σας", - "noPhotos": "Δεν βρέθηκαν φωτογραφίες" + "noPhotos": "Δεν βρέθηκαν φωτογραφίες", + "albumPhoto": "Φωτογραφία άλμπουμ", + "actions": { + "previousPhoto": "Προηγούμενη φωτογραφία", + "nextPhoto": "Επόμενη φωτογραφία", + "pauseSlideshow": "Pause slideshow", + "resumeSlideshow": "Συνέχιση προβολής σλάιντ", + "toggleSlideshow": "Παύση ή συνέχιση προβολής σλάιντ", + "photo": "Φωτογραφία {number}" + } }, "downloads": { "name": "Πελάτης λήψεων", "description": "Σας επιτρέπει να προβάλλετε και να διαχειρίζεστε τις λήψεις σας από πελάτες Torrent και Usenet.", "option": { - "columns": { - "label": "Στήλες προς εμφάνιση" - }, - "enableRowSorting": { - "label": "Ενεργοποίηση ταξινόμησης στοιχείων" - }, - "defaultSort": { - "label": "Στήλη που χρησιμοποιείται για προεπιλεγμένη ταξινόμηση" - }, - "descendingDefaultSort": { - "label": "Αντιστροφή ταξινόμησης" - }, "showCompletedUsenet": { "label": "Εμφάνιση καταχωρίσεων Usenet με ένδειξη ολοκλήρωσης" }, @@ -2727,12 +4152,6 @@ "limitPerIntegration": { "label": "Περιορισμός στοιχείων ανά ενσωμάτωση", "description": "Αυτό θα περιορίσει τον αριθμό των στοιχείων που εμφανίζονται ανά ενσωμάτωση, όχι συνολικά" - }, - "columnOrder": { - "label": "Σειρά στηλών" - }, - "columnWidths": { - "label": "Πλάτη στηλών" } }, "errors": { @@ -2763,7 +4182,7 @@ "detailsTitle": "Τρέχων δείκτης στον πελάτη" }, "id": { - "columnTitle": "ID", + "columnTitle": "Αναγνωριστικό στοιχείου", "detailsTitle": "Αναγνωριστικό στοιχείου" }, "integration": { @@ -2794,7 +4213,7 @@ }, "state": { "columnTitle": "Κατάσταση", - "detailsTitle": "" + "detailsTitle": "Κατάσταση" }, "time": { "columnTitle": "Ώρα ολοκλήρωσης", @@ -2893,6 +4312,10 @@ "mediaRequests-requestList": { "name": "Λίστα αιτημάτων πολυμέσων", "description": "Δείτε μια λίστα με όλα τα αιτήματα μέσων ενημέρωσης από την περίπτωση Overseerr ή Jellyseerr", + "empty": { + "title": "Δεν υπάρχουν ακόμα αιτήματα πολυμέσων", + "description": "Αναζήτηση για μια ταινία ή εμφάνιση για να ξεκινήσει μια αίτηση." + }, "option": { "linksTargetNewTab": { "label": "Άνοιγμα συνδέσμων σε νέα καρτέλα" @@ -2926,12 +4349,16 @@ "failed": "Απέτυχε", "completed": "Ολοκληρώθηκε" }, + "unknown": "Άγνωστο", "toBeDetermined": "TBD" }, "mediaRequests-requestStats": { "name": "Στατιστικά αιτημάτων πολυμέσων", "description": "Στατιστικά στοιχεία σχετικά με τα αιτήματά σας για τα μέσα ενημέρωσης", - "option": {}, + "empty": { + "title": "Καμία δραστηριότητα αιτήματος ακόμα", + "description": "Στατιστικά θα εμφανιστούν μετά την πρώτη αίτηση πολυμέσων." + }, "titles": { "stats": { "main": "Στατιστικά Πολυμέσων", @@ -2941,8 +4368,7 @@ "declined": "Ήδη απορριφθέντα", "available": "Ήδη διαθέσιμα", "tv": "Αιτήσεις TV", - "movie": "Αιτήσεις ταινιών", - "total": "Σύνολο" + "movie": "Αιτήσεις ταινιών" }, "users": { "main": "Κορυφαίοι Χρήστες", @@ -2968,7 +4394,6 @@ }, "currentIndex": "{start}–{end} από {total}", "healthCheck": { - "title": "Έλεγχος υγείας", "queued": "Στην ουρά", "status": { "healthy": "Υγιές", @@ -2977,38 +4402,63 @@ }, "panel": { "statistics": { - "empty": "Άδειο", - "transcodes": "Μετακωδικοποιήσεις", - "transcodesCount": "", - "healthChecksCount": "Έλεγχοι υγείας", "filesCount": "Αρχεία", "savedSpace": "", - "healthChecks": "Έλεγχοι υγείας", "videoCodecs": "Κωδικοποιητές", "videoContainers": "Κοντέινερ", "videoResolutions": "Αναλύσεις" }, "workers": { - "empty": "Άδειο", "table": { - "file": "Αρχείο", "eta": "Εκτιμώμενος χρόνος αναμονής", - "progress": "Πρόοδος", - "transcode": "Μετακωδικοποίηση", - "healthCheck": "Έλεγχος υγείας" + "progress": "Πρόοδος" } }, "queue": { - "empty": "Άδειο", "table": { - "file": "Αρχείο", - "size": "Μέγεθος", - "transcode": "Μετακωδικοποίηση", - "healthCheck": "Έλεγχος υγείας" + "size": "Μέγεθος" } + }, + "common": { + "empty": "Άδειο", + "file": "Αρχείο", + "healthCheck": "Έλεγχος υγείας", + "transcode": "Μετακωδικοποίηση", + "transcodes": "Μετακωδικοποιήσεις", + "healthChecks": "Υγειονομικοί έλεγχοι" } } }, + "mediaMissing": { + "name": "Ελλείποντα και σε αναμονή πολυμέσα", + "description": "Εμφανίζει ελλείπουσες και σε αναμονή ταινίες και επεισόδια από τα Radarr και Sonarr", + "option": { + "showMissing": { + "label": "Εμφάνιση ελλειπόντων στοιχείων" + }, + "showQueued": { + "label": "Εμφάνιση στοιχείων σε αναμονή" + }, + "pageSize": { + "label": "Στοιχεία ανά σελίδα" + } + }, + "tab": { + "missing": "Ελλείποντα", + "queued": "Σε αναμονή" + }, + "type": { + "movie": "Ταινία", + "episode": "Επεισόδιο", + "book": "Βιβλίο" + }, + "empty": { + "missing": "Δεν υπάρχουν ελλείποντα στοιχεία", + "queued": "Δεν υπάρχουν στοιχεία σε αναμονή", + "noTabsEnabled": "Ενεργοποιήστε τουλάχιστον μία καρτέλα στις ρυθμίσεις του widget" + }, + "timeLeft": "Χρόνος που απομένει" + }, "rssFeed": { "name": "Ροές RSS", "description": "Παρακολουθεί και εμφανίζει μία ή περισσότερες γενικές ροές RSS, ATOM ή JSON", @@ -3031,6 +4481,13 @@ "showPosterImage": { "label": "Εμφάνιση εικόνας αφίσας" } + }, + "error": { + "allFeedsFailed": "Αδυναμία φόρτωσης RSS feeds. Ελέγξτε τα URL τροφοδοσίας και προσπαθήστε ξανά." + }, + "warning": { + "partial": "{count, plural, one {# Η τροφοδοσία RSS δεν μπόρεσε να φορτωθεί} other {# Οι τροφοδοσίες RSS δεν μπορούν να φορτωθούν}}", + "stale": "Οι ροές RSS δεν μπόρεσαν να ανανεωθούν. Εμφανίζονται προηγούμενες καταχωρήσεις." } }, "releases": { @@ -3106,17 +4563,8 @@ "label": "Κανονική έκφραση" } }, - "edit": { - "label": "" - }, "editForm": { - "title": "Επεξεργασία αποθετηρίου", - "cancel": { - "label": "Ακύρωση" - }, - "confirm": { - "label": "Επιβεβαίωση" - } + "title": "Επεξεργασία αποθετηρίου" }, "importForm": { "title": "Εισαγωγή από Docker" @@ -3133,8 +4581,7 @@ "label": "Διακριτικά παρόχου", "token": "Διακριτικό", "configured": "Το διακριτικό έχει διαμορφωθεί", - "notConfigured": "Δεν έχει οριστεί διακριτικό", - "save": "Αποθήκευση" + "notConfigured": "Δεν έχει οριστεί διακριτικό" } } }, @@ -3161,17 +4608,32 @@ "noProviderResponse": "Δεν υπάρχει απόκριση από τον πάροχο", "unexpected": "Απρόσμενο σφάλμα παρόχου" } - } + }, + "expandDetails": "Εμφάνιση λεπτομερειών για το {name}", + "collapseDetails": "Απόκρυψη λεπτομερειών για το {name}" }, "networkControllerSummary": { - "option": {}, - "card": { - "vpn": { - "countConnected": "{count} συνδεδεμένα" + "advanced": { + "updated": "Ενημερώθηκε", + "metric": { + "latency": "Καθυστέρηση", + "ping": "Κουδούνισμα", + "uptime": "Χρόνος", + "users": "Χρήστες", + "guests": "Επισκέπτες" } }, + "card": { + "vpn": { + "countConnected": "{count, plural, one {# συνδέθηκαν} other {# συνδέθηκαν}}", + "label": "VPN" + }, + "wan": "WAN", + "web": "Ιστός", + "wifi": "Wi-Fi", + "lan": "LAN" + }, "error": { - "integrationsDisconnected": "Δεν υπάρχουν διαθέσιμα δεδομένα, όλες οι ενσωματώσεις έχουν αποσυνδεθεί", "unknownContentOption": "Άγνωστη επιλογή περιεχομένου για το γραφικό στοιχείο σύνοψης ελεγκτή δικτύου: " }, "name": "Σύνοψη ελεγκτή δικτύου", @@ -3208,7 +4670,6 @@ } }, "error": { - "integrationsDisconnected": "Δεν υπάρχουν διαθέσιμα δεδομένα, όλες οι ενσωματώσεις έχουν αποσυνδεθεί", "unknownContentOption": "Άγνωστη επιλογή περιεχομένου για το γραφικό στοιχείο κατάστασης δικτύου: " }, "name": "Κατάσταση Δικτύου", @@ -3238,7 +4699,6 @@ "versiontitle": "Εκδόσεις", "cputitle": "Χρήση CPU", "memorytitle": "Χρήση μνήμης", - "cpu": "CPU", "memory": "Μνήμη", "interfaces": { "name": "όνομα", @@ -3246,6 +4706,16 @@ "recv": "Λήφθηκαν", "title": "Διεπαφές δικτύου" } + }, + "empty": { + "noInterfaces": "Δεν υπάρχουν ακόμη δεδομένα διεπαφής δικτύου" + }, + "versionUnknown": "Άγνωστη έκδοση", + "metricAccessible": "{metric}: {value}%, {status}", + "status": { + "normal": "Κανονικό", + "warning": "Προειδοποίηση", + "critical": "Κρίσιμο" } }, "notifications": { @@ -3255,8 +4725,21 @@ "option": { "hideLogos": { "label": "Απόκρυψη λογότυπων" + }, + "messageFormat": { + "label": "Μορφή μηνύματος", + "option": { + "auto": "Αυτόματο", + "plain": "Απλό κείμενο", + "markdown": "Markdown", + "html": "HTML" + } } - } + }, + "openService": "Άνοιγμα υπηρεσίας ειδοποιήσεων", + "deleteNotification": "Διαγραφή ειδοποίησης από Gotify", + "deleteFailed": "Αδυναμία διαγραφής ειδοποίησης", + "deleteFailedMessage": "Δεν ήταν δυνατή η διαγραφή της ειδοποίησης. Παρακαλώ δοκιμάστε ξανά." }, "speedtestTracker": { "name": "Speedtest Tracker", @@ -3298,7 +4781,6 @@ } }, "uptimeKuma": { - "name": "Uptime Kuma", "description": "Παρακολούθηση στατιστικών διαθεσιμότητας από τη σελίδα κατάστασης Uptime Kuma", "option": { "showAverageUptime": { @@ -3335,8 +4817,58 @@ }, "error": { "internalServerError": "Αποτυχία λήψης δεδομένων διαθεσιμότητας" + }, + "status": { + "up": "Σύνολο", + "down": "Σύνολο λήψεων", + "paused": "Σε παύση" } }, + "traefik": { + "description": "Επισκόπηση δρομολογητών, υπηρεσιών, middleware και σημείων εισόδου του Traefik", + "option": { + "showTcp": { + "label": "Εμφάνιση TCP" + }, + "showUdp": { + "label": "Εμφάνιση UDP" + }, + "showEntryPoints": { + "label": "Εμφάνιση σημείων εισόδου" + } + }, + "instances": "Εγκαταστάσεις Traefik", + "versionUnknown": "Άγνωστη έκδοση", + "summary": { + "routers": "Δρομολογητές", + "entryPoints": "Σημεία εισόδου" + }, + "resource": { + "routers": "Δρομολογητές", + "middlewares": "Middleware" + }, + "status": { + "healthy": "Υγιές", + "errors": "{count} σφάλματα", + "warnings": "{count} προειδοποιήσεις" + }, + "error": { + "internalServerError": "Αποτυχία λήψης δεδομένων Traefik" + }, + "resourceType": { + "router": "Router", + "service": "Υπηρεσία", + "middleware": "Μεσαία" + }, + "resourceStatus": { + "enabled": "Ενεργοποιημένο", + "disabled": "Απενεργοποιημένο", + "warning": "Προειδοποίηση", + "error": "Σφάλμα", + "unknown": "Άγνωστο" + }, + "failedEndpoint": "Αποτυχία: {endpoint}" + }, "audioStats": { "name": "Στατιστικά Ήχου", "description": "Στατιστικά βιβλιοθήκης και αναπαραγωγής από Navidrome ή Audiobookshelf", @@ -3401,9 +4933,7 @@ "label": "Ορατά γραφήματα", "description": "Επιλέξτε τα γραφήματα που θέλετε να είναι ορατά.", "option": { - "cpu": "CPU", "memory": "Μνήμη", - "gpu": "GPU", "network": "Δίκτυο" } }, @@ -3418,12 +4948,11 @@ } }, "card": { - "cpu": "CPU", "memory": "ΜΝΗΜΗ", - "gpu": "GPU", "network": "ΔΙΚΤΥΟ", "up": "UP", - "down": "ΚΑΘΟΔΟΣ" + "down": "ΚΑΘΟΔΟΣ", + "memoryTooltip": "{used} / {available} ({percent}%)" } }, "systemDisks": { @@ -3449,151 +4978,88 @@ }, "showBackgroundBar": { "label": "Εμφάνιση γραμμής χρήσης στο παρασκήνιο" - }, - "visibleStorageVolumes": { - "label": "Ορατοί τόμοι αποθήκευσης", - "description": "Διαθέσιμο μόνο όταν όλες οι επιλεγμένες ενσωματώσεις είναι Synology. Αφήστε το κενό για να εμφανιστούν όλοι οι εντοπισμένοι τόμοι αποθήκευσης.", - "placeholder": "Επιλέξτε τόμους αποθήκευσης" } }, "status": { - "unhealthy": "Μη υγιές" + "unhealthy": "Μη υγιές", + "smart": "ΕΞΥΠΝΟ", + "free": "{percentage}% ελεύθερος χώρος" + } + }, + "customApi": { + "name": "Προσαρμοσμένο widget", + "description": "Αποτύπωση ενός προσαρμοσμένου ορισμού JSX.", + "customJsx": { + "noTemplate": "Κανένα πρότυπο JSX δεν έχει ρυθμιστεί.", + "templateWarnings": "Προειδοποιήσεις προτύπου {count}", + "requestIdRequired": "Αυτός ο έλεγχος δικτύου απαιτεί ένα όνομα requestId.", + "unsavedPreview": "Εκτέλεση της αρχικής δοκιμής αιτήματος στον επεξεργαστή πριν από τη δοκιμή με όνομα αιτήματα.", + "invalidParams": "Οι παράμετροι του αιτήματος δεν είναι έγκυρες.", + "loading": "Φόρτωση αιτήματος...", + "loadRequest": "Αίτημα φόρτωσης", + "requestFailed": "Το αίτημα απέτυχε.", + "retry": "Επανάληψη αιτήματος", + "actionCompleted": "Η ενέργεια ολοκληρώθηκε επιτυχώς.", + "actionSimulated": "Προσομοίωση δράσης· δεν εστάλη αίτηση.", + "actionsDisabledEditMode": "Οι ενέργειες είναι απενεργοποιημένες όσο ο πίνακας βρίσκεται σε λειτουργία επεξεργασίας.", + "widgetItemUnavailable": "Αυτό το στοιχείο γραφικού στοιχείου δεν είναι διαθέσιμο.", + "toggle": "Εναλλαγή", + "copied": "Αντιγράφηκε", + "confirmDelete": "Επιβεβαιώστε αυτή την καταστροφική ενέργεια." + }, + "option": { + "definitionId": { + "label": "Προσαρμοσμένο widget" + }, + "refreshInterval": { + "label": "Διάστημα ανανέωσης", + "description": "Πόσο συχνά θα γίνεται εκ νέου λήψη δεδομένων από το API (σε δευτερόλεπτα)" + } + }, + "noDefinition": "Δεν επιλέχθηκε ορισμός", + "definitionNotFound": "Προσαρμοσμένο widget μη διαθέσιμο", + "migrationRequired": "Αυτή η παλαιού τύπου προσαρμοσμένη μικροεφαρμογή διατηρείται, αλλά πρέπει να μεταφερθεί στο Προσαρμοσμένο JSX v2 από τη Διαχείριση προσαρμοσμένων γραφικών συστατικών πριν εκτελεστεί.", + "manageMigration": "Άνοιγμα προσαρμοσμένων γραφικών συστατικών", + "contactAdmin": "Επικοινωνήστε με έναν διαχειριστή.", + "configurationNeedsRepair": "Οι επιλογές αυτού του widget άλλαξαν. Επεξεργαστείτε το widget για να επισκευάσετε τις ρυθμίσεις του.", + "removeFromBoard": "Αφαίρεση από τη σκακιέρα", + "editModePending": "Αποθηκεύστε τον πίνακα για να φορτώσετε αυτό το widget.", + "picker": { + "group": "Προσαρμοσμένα γραφικά στοιχεία JSX", + "empty": "Δεν βρέθηκαν προσαρμοσμένα γραφικά στοιχεία", + "preview": "Προεπισκόπηση", + "sources": "{count, plural, one {# πηγή} other {# πηγές}}", + "requests": "{count, plural, one {# αίτημα} other {# αιτήσεις}}", + "migrationRequired": "Απαιτείται μετεγκατάσταση", + "migrationDescription": "Αυτό το τοποθετημένο γραφικό συστατικό v1 δεν μπορεί να τρέξει ακόμα. Αντιγράψτε την εντολή ελέγχου σε μια LLM, στη συνέχεια, επικολλήστε την ενιαία απάντηση JSON στο Homarr.", + "manageMigration": "Άνοιγμα προσαρμοσμένων γραφικών συστατικών", + "contactAdmin": "Επικοινωνήστε με έναν διαχειριστή." + }, + "configuration": { + "needsAttention": "Απαιτείται προσοχή στη διαμόρφωση: {message}", + "advancedOptions": "Προηγμένες επιλογές", + "invalidJson": "Μη Έγκυρο JSON" } }, "beszelSystemTable": { "name": "Beszel Συστήματα (Πίνακας)", "description": "Προβολή πίνακα όλων των συστημάτων που παρακολουθούνται από το Beszel με ταξινομήσιμες στήλες και δείκτες κατάστασης", "option": { - "statusFilter": { - "label": "Φίλτρο κατάστασης" - }, "sortBy": { "label": "Ταξινόμηση κατά" }, "sortDirection": { "label": "Κατεύθυνση ταξινόμησης" - }, - "showCpu": { - "label": "Εμφάνιση CPU" - }, - "showMemory": { - "label": "Εμφάνιση μνήμης" - }, - "showDisk": { - "label": "Εμφάνιση δίσκου" - }, - "showGpu": { - "label": "Εμφάνιση GPU" - }, - "showLoadAvg": { - "label": "Εμφάνιση μέσου φόρτου" - }, - "showNet": { - "label": "Εμφάνιση δικτύου" - }, - "showTemp": { - "label": "Εμφάνιση θερμοκρασίας" - }, - "showBattery": { - "label": "Εμφάνιση μπαταρίας" - }, - "showServices": { - "label": "Εμφάνιση υπηρεσιών" - }, - "showUptime": { - "label": "Εμφάνιση χρόνου λειτουργίας" - }, - "showAgent": { - "label": "Εμφάνιση έκδοσης agent" - }, - "columnOrder": { - "label": "Σειρά στηλών" - }, - "columnWidths": { - "label": "Πλάτη στηλών" } }, - "noRecords": "Δεν βρέθηκαν συστήματα", "error": { - "internalServerError": "Αδυναμία σύνδεσης στο Beszel. Ελέγξτε τις ρυθμίσεις της ενσωμάτωσης.", "layoutSaveTitle": "Δεν ήταν δυνατή η αποθήκευση της διάταξης του πίνακα", "layoutSaveMessage": "Δεν ήταν δυνατή η αποθήκευση της σειράς ή των πλατών των στηλών. Δοκιμάστε ξανά." - }, - "column": { - "system": "Σύστημα", - "cpu": "CPU", - "memory": "Μνήμη", - "disk": "Δίσκος", - "gpu": "GPU", - "loadAvg": "Μέσος φόρτος", - "net": "Δίκτυο", - "temp": "Θερμοκρασία", - "battery": "Μπαταρία", - "services": "Υπηρεσίες", - "uptime": "Χρόνος λειτουργίας", - "agent": "Πράκτορας" } }, "beszelSystemGrid": { "name": "Beszel Συστήματα (Πλέγμα)", - "description": "Προβολή πλέγματος καρτών όλων των συστημάτων που παρακολουθούνται από το Beszel με μετρήσεις σε πραγματικό χρόνο", - "option": { - "statusFilter": { - "label": "Φίλτρο κατάστασης" - }, - "showCpu": { - "label": "Εμφάνιση CPU" - }, - "showMemory": { - "label": "Εμφάνιση μνήμης" - }, - "showDisk": { - "label": "Εμφάνιση δίσκου" - }, - "showGpu": { - "label": "Εμφάνιση GPU" - }, - "showLoadAvg": { - "label": "Εμφάνιση μέσου φόρτου" - }, - "showNet": { - "label": "Εμφάνιση δικτύου" - }, - "showTemp": { - "label": "Εμφάνιση θερμοκρασίας" - }, - "showBattery": { - "label": "Εμφάνιση μπαταρίας" - }, - "showServices": { - "label": "Εμφάνιση υπηρεσιών" - }, - "showUptime": { - "label": "Εμφάνιση χρόνου λειτουργίας" - }, - "showAgent": { - "label": "Εμφάνιση έκδοσης agent" - } - }, - "error": { - "internalServerError": "Αδυναμία σύνδεσης στο Beszel. Ελέγξτε τις ρυθμίσεις της ενσωμάτωσης." - }, - "empty": { - "noSystems": "Δεν βρέθηκαν συστήματα" - }, - "metric": { - "cpu": "CPU", - "memory": "Μνήμη", - "disk": "Δίσκος", - "gpu": "GPU", - "loadAvg": "Μέσος φόρτος", - "net": "Δίκτυο", - "temp": "Θερμοκρασία", - "battery": "Μπαταρία", - "services": "Υπηρεσίες", - "uptime": "Χρόνος λειτουργίας", - "agent": "Πράκτορας" - } + "description": "Προβολή πλέγματος καρτών όλων των συστημάτων που παρακολουθούνται από το Beszel με μετρήσεις σε πραγματικό χρόνο" }, "beszelAlerts": { "name": "Beszel Ειδοποιήσεις", @@ -3607,11 +5073,12 @@ } }, "empty": "Δεν έχουν διαμορφωθεί ειδοποιήσεις", - "error": { - "internalServerError": "Αδυναμία σύνδεσης στο Beszel. Ελέγξτε τις ρυθμίσεις της ενσωμάτωσης." - }, "history": "Ιστορικό", "resolved": "Επιλύθηκε", + "alertDescription": { + "statusDuration": "Κάτω για {minutes} λεπτά", + "threshold": "Υπερβαίνει το {value} πέρα από το {minutes} λεπτό" + }, "status": { "triggered": "Ενεργοποιήθηκε", "ok": "ΟΚ" @@ -3658,16 +5125,16 @@ "noSystems": "Δεν βρέθηκαν συστήματα" }, "error": { - "internalServerError": "Αδυναμία σύνδεσης στο Beszel. Ελέγξτε τις ρυθμίσεις της ενσωμάτωσης.", "liveConnectionFailed": "Η ζωντανή σύνδεση απέτυχε. Η εγκατάσταση Beszel ενδέχεται να μην υποστηρίζει ροή σε πραγματικό χρόνο.", "switchToHistorical": "Μετάβαση στην ιστορική προβολή", - "systemNotFound": "Το επιλεγμένο σύστημα δεν βρέθηκε. Επιλέξτε διαφορετικό σύστημα." + "systemNotFound": "Το επιλεγμένο σύστημα δεν βρέθηκε. Επιλέξτε διαφορετικό σύστημα.", + "selectionSaveTitle": "Αδυναμία αποθήκευσης της επιλογής", + "selectionSaveMessage": "Δεν ήταν δυνατή η αποθήκευση της επιλογής του συστήματος ή της χρονικής περιόδου. Δοκιμάστε ξανά." }, "chart": { "cpu": { "title": "Χρήση CPU", - "subtitle": "Μέση χρήση CPU σε όλο το σύστημα", - "series": "CPU" + "subtitle": "Μέση χρήση CPU σε όλο το σύστημα" }, "memory": { "title": "Χρήση Μνήμης", @@ -3709,289 +5176,550 @@ "title": "I/O Δικτύου Docker", "subtitle": "Κίνηση δικτύου των docker containers" } + }, + "period": { + "live": "Ζωντανά", + "oneHour": "1η", + "twelveHours": "12η", + "oneDay": "24η", + "oneWeek": "1κγ", + "thirtyDays": "30δ" } }, - "patchmon": { - "name": "PatchMon", - "description": "Επισκόπηση της κατάστασης ενημερώσεων κώδικα των κεντρικών υπολογιστών από το PatchMon", - "title": "Στατιστικά PatchMon", - "totalHosts": "Συνολικοί κεντρικοί υπολογιστές", - "hostsNeedingUpdates": "Χρειάζονται ενημερώσεις", - "securityUpdates": "Ενημερώσεις ασφαλείας", - "upToDateHosts": "Ενημερωμένοι κεντρικοί υπολογιστές", - "hostsWithSecurityUpdates": "Κεντρικοί υπολογιστές με ενημερώσεις ασφαλείας", - "recentUpdates24h": "Ενημερώσεις (24 ώρες)", - "totalOutdatedPackages": "Παρωχημένα πακέτα", - "totalRepos": "Αποθετήρια", - "osDistribution": "Κατανομή λειτουργικών συστημάτων", - "compliance": "Συμμόρφωση ενημερώσεων κώδικα", - "complianceRatio": "{upToDate} / {total}", - "lastUpdated": "Ενημερώθηκε {time}", - "option": { - "showTotalHosts": { - "label": "Εμφάνιση συνολικών κεντρικών υπολογιστών", - "description": "Εμφάνιση του συνολικού αριθμού των κεντρικών υπολογιστών υπό παρακολούθηση" - }, - "showHostsNeedingUpdates": { - "label": "Εμφάνιση κεντρικών υπολογιστών που χρειάζονται ενημερώσεις", - "description": "Εμφάνιση κεντρικών υπολογιστών με τουλάχιστον ένα παρωχημένο πακέτο" - }, - "showSecurityUpdates": { - "label": "Εμφάνιση ενημερώσεων ασφαλείας", - "description": "Εμφάνιση του συνολικού αριθμού διαθέσιμων ενημερώσεων ασφαλείας" - }, - "showUpToDateHosts": { - "label": "Εμφάνιση ενημερωμένων κεντρικών υπολογιστών", - "description": "Εμφάνιση κεντρικών υπολογιστών χωρίς παρωχημένα πακέτα" - }, - "showHostsWithSecurityUpdates": { - "label": "Εμφάνιση κεντρικών υπολογιστών με ενημερώσεις ασφαλείας", - "description": "Εμφάνιση κεντρικών υπολογιστών που απαιτούν ενημερώσεις ασφαλείας" - }, - "showRecentUpdates24h": { - "label": "Εμφάνιση πρόσφατων ενημερώσεων (24 ώρες)", - "description": "Εμφάνιση του αριθμού των ενημερώσεων που εφαρμόστηκαν τις τελευταίες 24 ώρες" - }, - "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": "Κορυφαία 3", - "5": "Κορυφαία 5", - "10": "Κορυφαία 10", - "all": "Όλα" - } - }, - "showOsVersion": { - "label": "Εμφάνιση έκδοσης λειτουργικού συστήματος", - "description": "Προσθήκη της έκδοσης του λειτουργικού συστήματος σε κάθε ετικέτα κατανομής, όταν είναι διαθέσιμη" - }, - "showComplianceHero": { - "label": "Εμφάνιση ένδειξης συμμόρφωσης", - "description": "Εμφάνιση δακτυλίου συμμόρφωσης που δείχνει το ποσοστό των ενημερωμένων κεντρικών υπολογιστών" - }, - "osDisplayMode": { - "label": "Λειτουργία εμφάνισης λειτουργικού συστήματος", - "description": "Επιλέξτε τον τρόπο εμφάνισης της κατανομής λειτουργικών συστημάτων", - "option": { - "bars": "Οριζόντιες γραμμές", - "donut": "Γράφημα δακτυλίου" - } - } + "assistant": { + "name": "Βοηθός", + "description": "Έχετε μια πλήρη συνομιλία βοηθός απευθείας στο διοικητικό σας συμβούλιο.", + "unavailable": { + "title": "Βοηθός μη διαθέσιμος", + "description": "Συνδεθείτε και ζητήστε από τον διαχειριστή να ρυθμίσει τον Βοηθό από τον πίνακα διαχείρισης." }, + "compact": { + "title": "Βοηθός", + "description": "Αλλαγή μεγέθους αυτού του widget για να συνομιλήσετε εδώ, ή να ανοίξετε την πλήρη συνομιλία.", + "open": "Άνοιγμα βοηθού", + "openTitle": "Βοηθός ανοιχτός στον πλευρικό πίνακα", + "openDescription": "Η συνομιλία παραμένει σε μία ενεργή επιφάνεια.", + "returnToWidget": "Επιστρέψτε την συνομιλία σε αυτό το widget", + "otherWidgetTitle": "Βοηθός ενεργός σε άλλο widget", + "otherWidgetDescription": "Μόνο μία επιφάνεια συνομιλίας παραμένει ενεργή κάθε φορά.", + "useHere": "Χρήση του βοηθού σε αυτό το widget" + } + }, + "beszel": { "error": { - "internalServerError": "Αποτυχία λήψης δεδομένων PatchMon" - } - }, - "bazarr": { - "name": "Bazarr", - "description": "Επισκόπηση των ελλειπόντων υποτίτλων και της κατάστασης υγείας της εγκατάστασης Bazarr", - "episodes": "Ελλείποντα επεισόδια", - "movies": "Ελλείπουσες ταινίες", - "providers": "Προβλήματα παρόχων", - "status": "Προβλήματα υγείας", - "option": { - "showMissingEpisodes": { - "label": "Εμφάνιση ελλειπόντων επεισοδίων", - "description": "Εμφάνιση του αριθμού των επεισοδίων χωρίς υπότιτλους" - }, - "showMissingMovies": { - "label": "Εμφάνιση ελλειπουσών ταινιών", - "description": "Εμφάνιση του αριθμού των ταινιών χωρίς υπότιτλους" - }, - "showProviderIssues": { - "label": "Εμφάνιση προβλημάτων παρόχων", - "description": "Εμφάνιση του αριθμού των παρόχων υποτίτλων με προβλήματα" - }, - "showHealthIssues": { - "label": "Εμφάνιση προβλημάτων υγείας", - "description": "Εμφάνιση του αριθμού των προβλημάτων υγείας του Bazarr" - } - }, - "error": { - "internalServerError": "Αποτυχία λήψης δεδομένων Bazarr" - } - }, - "mediaMissing": { - "name": "Ελλείποντα και σε αναμονή πολυμέσα", - "description": "Εμφανίζει ελλείπουσες και σε αναμονή ταινίες και επεισόδια από τα Radarr και Sonarr", - "option": { - "showMissing": { - "label": "Εμφάνιση ελλειπόντων στοιχείων" - }, - "showQueued": { - "label": "Εμφάνιση στοιχείων σε αναμονή" - }, - "pageSize": { - "label": "Στοιχεία ανά σελίδα" - } - }, - "tab": { - "missing": "Ελλείποντα", - "queued": "Σε αναμονή" - }, - "type": { - "movie": "Ταινία", - "episode": "Επεισόδιο" + "internalServerError": "Δεν είναι δυνατή η σύνδεση στο Beszel. Ελέγξτε τις ρυθμίσεις ενσωμάτωσης." }, "empty": { - "missing": "Δεν υπάρχουν ελλείποντα στοιχεία", - "queued": "Δεν υπάρχουν στοιχεία σε αναμονή", - "noTabsEnabled": "Ενεργοποιήστε τουλάχιστον μία καρτέλα στις ρυθμίσεις του widget" + "noSystems": "Δεν βρέθηκαν συστήματα" }, - "timeLeft": "Χρόνος που απομένει" - }, - "traefik": { - "name": "Traefik", - "description": "Επισκόπηση δρομολογητών, υπηρεσιών, middleware και σημείων εισόδου του Traefik", - "option": { - "showTcp": { - "label": "Εμφάνιση TCP" + "options": { + "statusFilter": { + "label": "Φίλτρο κατάστασης" }, - "showUdp": { - "label": "Εμφάνιση UDP" + "showCpu": { + "label": "Εμφάνιση Επεξεργαστή" }, - "showEntryPoints": { - "label": "Εμφάνιση σημείων εισόδου" + "showMemory": { + "label": "Εμφάνιση μνήμης" + }, + "showDisk": { + "label": "Εμφάνιση δίσκου" + }, + "showGpu": { + "label": "Εμφάνιση GPU" + }, + "showLoadAvg": { + "label": "Εμφάνιση μέσου φορτίου" + }, + "showNet": { + "label": "Εμφάνιση δικτύου" + }, + "showTemp": { + "label": "Εμφάνιση θερμοκρασίας" + }, + "showBattery": { + "label": "Εμφάνιση μπαταρίας" + }, + "showServices": { + "label": "Εμφάνιση υπηρεσιών" + }, + "showUptime": { + "label": "Εμφάνιση χρόνου" + }, + "showAgent": { + "label": "Εμφάνιση έκδοσης πράκτορα" } }, - "instances": "Εγκαταστάσεις Traefik", - "versionUnknown": "Άγνωστη έκδοση", - "summary": { - "routers": "Δρομολογητές", - "entryPoints": "Σημεία εισόδου" - }, - "resource": { - "routers": "Δρομολογητές", - "services": "Υπηρεσίες", - "middlewares": "Middleware" - }, - "status": { - "healthy": "Υγιές", - "errors": "{count} σφάλματα", - "warnings": "{count} προειδοποιήσεις" - }, - "error": { - "internalServerError": "Αποτυχία λήψης δεδομένων Traefik" + "metric": { + "system": "Σύστημα", + "source": "Ενσωμάτωση", + "hostname": "Hostname", + "cpuModel": "Μοντέλο CPU", + "cores": "Πυρήνες", + "memoryTotal": "Σύνολο μνήμης", + "memory": "Μνήμη", + "disk": "Δίσκος", + "loadAvg": "Μέση Φόρτωση", + "net": "Δίκτυο", + "temp": "Θερμοκρασία", + "battery": "Νυχτερίδα", + "uptime": "Χρόνος", + "agent": "Παράγοντας" } }, - "wud": { - "name": "Τι Είναι Το Docker", - "description": "Δείτε πόσες παρακολουθήσεις δοχείων έχουν διαθέσιμες ενημερώσεις.", - "title": "Τι Είναι Το Docker", - "monitored": "Ελέγχτηκε", - "updatesAvailable": "{count, plural, one {# διαθέσιμη ενημέρωση} other {# διαθέσιμες ενημερώσεις}}", - "updateAvailable": "Διαθέσιμη ενημέρωση", - "openReleaseNotes": "Άνοιγμα σημειώσεων έκδοσης", + "llamacpp": { + "name": "llama.cpp", + "description": "Εμφάνιση της υγείας, φορτωμένο μοντέλο και ταχύτητα παραγωγής του τοπικού διακομιστή llama.cpp σας.", + "title": "llama.cpp", + "status": { + "unhealthy": "Μη υγιές ({status})" + }, + "idle": "Αδρανής", + "speedTooltip": { + "current": "Ταχύτητα τρέχουσας παραγωγής", + "average": "Μέση ταχύτητα παραγωγής από την εκκίνηση", + "request": "Μέση ταχύτητα από την έναρξη αυτού του αιτήματος" + }, + "busy": "{count, plural, one {# αίτημα να τρέχει} other {# αιτήσεις να τρέξουν}}", + "modelInfo": { + "context": "Πλαίσιο", + "size": "Μέγεθος αρχείου", + "parameters": "Παράμετρος", + "model": "Μοντέλο", + "quantization": "Ποσότητα" + }, + "stats": { + "tokensProcessed": "Tokens επεξεργασμένα", + "contextUsage": "Πλαίσιο / Χρήση KV", + "cacheHitRate": "Προτροπή ποσοστού επιτυχίας cache", + "tokensGenerated": "Νομίσματα που δημιουργήθηκαν" + }, + "error": { + "unreachable": "llama-server δεν είναι προσβάσιμο" + }, + "unit": { + "speed": "{value} διακριτικά/s", + "parameters": "{value} δισ.", + "none": "—", + "speedShort": "t/δ" + }, "option": { "showTitle": { "label": "Εμφάνιση τίτλου" }, - "showRing": { - "label": "Εμφάνιση κουδουνίσματος ενημέρωσης" + "showModelInfo": { + "label": "Εμφάνιση πληροφοριών μοντέλου" }, - "layout": { - "label": "Διάταξη", + "showContextUsage": { + "label": "Εμφάνιση συμφραζόμενης χρήσης" + }, + "showCacheHitRate": { + "label": "Εμφάνιση ποσοστού επιτυχίας cache" + }, + "showSpeedStats": { + "label": "Εμφάνιση στατιστικών ταχύτητας" + }, + "showRequests": { + "label": "Εμφάνιση φόρτου αιτήματος" + }, + "showTokenStats": { + "label": "Εμφάνιση συνόλων διακριτικών" + }, + "showSpeculative": { + "label": "Εμφάνιση κερδοσκοπικής αποκωδικοποίησης" + } + }, + "advanced": { + "promptSpeed": "Προτροπή ταχύτητας", + "avgSpeed": "Μέση γενιά", + "requests": "Αιτήματα", + "deferred": "Αναβαλλόμενη", + "slots": "{processing}/{total} υποδοχές απασχολημένοι", + "speculative": "Θετική αποκωδικοποίηση", + "avgPrompt": "Μέση προτροπή", + "specDrafts": "Προδιαγραφές προσχεδίων", + "specAccepted": "Spec. αποδεκτές μάρκες", + "specDraftTokens": "Spec. προσχέδια tokens" + } + }, + "stats": { + "name": "Στατιστικά", + "description": "Συνδυάστε στατιστικά στοιχεία από τις ενσωματώσεις σας σε ένα διαμορφώσιμο widget.", + "configure": "Ρύθμιση μετρήσεων", + "refresh": "Ανανέωση στατιστικών", + "empty": "Ανοίξτε τις ρυθμίσεις widget, επιλέξτε ενσωματώσεις, στη συνέχεια, προσθέστε μετρήσεις.", + "editorHelp": "Προσθήκη μετρήσεων από τις ενσωματώσεις που έχουν επιλεγεί για αυτό το γραφικό συστατικό. Οι αλλαγές αποθηκεύονται με τον πίνακα ελέγχου.", + "source": "Ενσωμάτωση", + "metric": "Μετρικό", + "noMetrics": "Δεν υπάρχουν διαθέσιμα στατιστικά στοιχεία για αυτήν την ενσωμάτωση", + "add": "Προσθήκη μετρικού", + "label": "Προσαρμοσμένη ετικέτα", + "hidden": "Hidden", + "compact": "Συμπαγείς αριθμοί", + "moveUp": "Μετακίνηση επάνω", + "moveDown": "Μετακίνηση κάτω", + "remove": "Αφαίρεση μετρικού", + "loading": "Φόρτωση…", + "unavailable": "Unavailable", + "refreshFailed": "Η ανανέωση απέτυχε — εμφάνιση αποθηκευμένων δεδομένων", + "stale": "Αποθηκευμένα δεδομένα — Ανανέωση για ενημέρωση", + "table": { + "value": "Τιμή", + "status": "Κατάσταση" + }, + "option": { + "table": { + "label": "Προβολή πίνακα" + }, + "rows": { + "label": "Συμπαγείς γραμμές" + }, + "showIcon": { + "label": "Εμφάνιση εικονιδίου πηγαίου κώδικα" + }, + "spacing": { + "label": "Απόσταση", "option": { - "horizontal": { - "label": "Οριζόντια" + "xs": { + "label": "Συμπαγής" }, - "vertical": { - "label": "Κατακόρυφα" + "sm": { + "label": "Άνετο" + }, + "md": { + "label": "Ευρύχωρο" } } }, - "showUpdateList": { - "label": "Εμφάνιση λίστας ενημερώσεων περιέκτη", - "description": "Εμφανίζει κάθε δοχείο που παρακολουθείται και διαθέτει διαθέσιμη ενημέρωση εικόνας" + "entries": { + "label": "Μετρικές" + }, + "plain": { + "label": "Αφαίρεση φόντου κάρτας" } - } + }, + "fetchFailed": "Αδύνατη η ανάκτηση στατιστικών", + "viewOptions": "Προσαρμογή αυτής της προβολής", + "moreMetrics": "{count} περισσότερα σε προχωρημένη προβολή", + "localHelp": "Η διάταξη, η μορφοποίηση και η ορατότητα ισχύουν μόνο για αυτή την προβολή. Οι ρυθμίσεις κοινόχρηστου πίνακα παραμένουν οι ίδιες.", + "plain": "Αφαίρεση φόντου κάρτας", + "resetView": "Επαναφορά προβολής", + "allHidden": "Όλες οι μετρήσεις είναι κρυμμένες σε αυτήν την προβολή. Χρησιμοποιήστε Προσαρμογή αυτής της προβολής για επαναφορά τους." + }, + "wazuh": { + "target": { + "api": "API εξυπηρετητή Wazuh", + "indexer": "Δείκτης Wazuh", + "wazuh": "Wazuh" + }, + "severity": { + "low": "Χαμηλή", + "medium": "Μεσαίο", + "high": "Υψηλή", + "critical": "Κρίσιμο" + }, + "error": { + "unauthorized": { + "title": "Το {target} απέρριψε τα διαπιστευτήρια", + "description": "Ελέγξτε το όνομα χρήστη και τον κωδικό πρόσβασης που αποθηκεύονται στην ολοκλήρωση Wazuh. Το API διακομιστή (θύρα 55000) και το ευρετήριο (θύρα 9200) χρησιμοποιούν ξεχωριστούς χρήστες." + }, + "certificate": { + "title": "Το πιστοποιητικό {target} δεν είναι έμπιστο", + "description": "Το Wazuh χρησιμοποιεί ένα αυτο-υπογεγραμμένο πιστοποιητικό από προεπιλογή. Εκτελέστε τη \"σύνδεση δοκιμών\" στην ενσωμάτωση και εμπιστευτείτε το πιστοποιητικό, ή προσθέστε την CA σας στις Ρυθμίσεις → Πιστοποιητικά." + }, + "unreachable": { + "title": "Αδυναμία σύνδεσης με το {target}", + "description": "Ο υπολογιστής αρνήθηκε ή απέρριψε τη σύνδεση. Ελέγξτε τη διεύθυνση URL, τη θύρα και το τείχος προστασίας. Ο ευρετηριαστής ακούει μόνο στο localhost σε μια προεπιλεγμένη εγκατάσταση όλα-σε-ένα." + }, + "timeout": { + "title": "Το {target} έληξε λόγω χρονικού ορίου", + "description": "Καμία απάντηση εντός 15 δευτερολέπτων. Η υπηρεσία μπορεί να υπερφορτωθεί ή η διεύθυνση μπορεί να είναι λάθος." + }, + "status": { + "title": "Το {target} επέστρεψε ένα σφάλμα", + "description": "Το αίτημα απέτυχε με την κατάσταση HTTP {status}." + }, + "invalidResponse": { + "title": "Απροσδόκητη απόκριση από το {target}", + "description": "Ελέγξτε ότι η διεύθυνση URL δείχνει το API διακομιστή Wazuh ή ευρετήριο και όχι στον πίνακα ελέγχου." + }, + "indexerRequired": { + "title": "Απαιτούνται διαπιστευτήρια ευρετηρίου Wazuh", + "description": "Οι ειδοποιήσεις, τα τρωτά σημεία και τα γεγονότα ακεραιότητας αρχείων διαβάζονται από το ευρετήριο του Wazuh. Προσθέστε ένα ευρετήριο URL, όνομα χρήστη και κωδικό πρόσβασης στην ενσωμάτωση." + }, + "unknown": { + "title": "Αδυναμία φόρτωσης δεδομένων από το {target}", + "description": "Ελέγξτε τα αρχεία καταγραφής Homarr για λεπτομέρειες." + } + }, + "range": { + "1h": "1η", + "24h": "24η", + "7d": "7δ", + "30d": "30δ" + }, + "levelTooltip": "Rule level {level} ({severity})" + }, + "wazuhAgents": { + "name": "Παράγοντες του Wazuh", + "description": "Ταξινόμηση λίστα των παραγόντων Wazuh με κατάσταση, λειτουργικό σύστημα και τελευταία φύλαξη", + "option": { + "statusFilter": { + "label": "Εμφάνιση πράκτορων" + }, + "sortBy": { + "label": "Ταξινόμηση κατά" + }, + "showVersion": { + "label": "Εμφάνιση στήλης έκδοσης Wazuh" + }, + "showGroups": { + "label": "Εμφάνιση στήλης ομάδων" + } + }, + "title": "Πράκτορες", + "total": "{count} πράκτορες", + "status": { + "active": "Ενεργό", + "disconnected": "Αποσυνδέθηκε", + "neverConnected": "Ποτέ μη συνδεδεμένο", + "pending": "Εκκρεμεί" + }, + "statusLabel": { + "active": "Ενεργό", + "disconnected": "Αποσυνδέθηκε", + "never_connected": "Ποτέ μη συνδεδεμένο", + "pending": "Εκκρεμεί", + "unknown": "Άγνωστο" + }, + "live": "Ζωντανά", + "snapshot": "Το στιγμιότυπο είναι παλιό κατά {age}", + "snapshotHint": "Διαβάστε από το στιγμιότυπο πράκτορα του Wazuh (wazuh-monitoring) που λήφθηκε στο {time}. Προσθέστε τα διαπιστευτήρια API διακομιστή για ζωντανά δεδομένα.", + "staleSnapshot": "Το στιγμιότυπο του πράκτορα από το {time} είναι ξεπερασμένο. Ελέγξτε ότι η εργασία παρακολούθησης του ταμπλό Wazuh εκτελείται ή προσθέστε διαπιστευτήρια του διακομιστή API.", + "noDisconnected": "Όλοι οι πράκτορες είναι συνδεδεμένοι", + "empty": "Κανένας πράκτορας δεν ταιριάζει με αυτό το φίλτρο", + "column": { + "status": "Κατάσταση", + "name": "Όνομα εργασίας", + "ip": "IP", + "os": "OS", + "version": "Έκδοση", + "lastKeepAlive": "Keepalive", + "groups": "Ομάδες" + }, + "outdated": "Παλαιότερα από τη νεότερη έκδοση πράκτορα ({version})" + }, + "wazuhAlerts": { + "name": "Τροφοδοσία ειδοποιήσεων Wazuh", + "description": "Πρόσφατες ειδοποιήσεις Wazuh με το επίπεδο, MITRE ATT&CK τεχνικές, πράκτορας και πηγή IP", + "option": { + "minLevel": { + "label": "Ελάχιστο επίπεδο κανόνα", + "description": "Επίπεδα Wazuh: 0-6 χαμηλό, 7-11 μέσο, 12-14 υψηλό, 15+ κρίσιμο" + }, + "hours": { + "label": "Παράθυρο ώρας (ώρες)" + }, + "limit": { + "label": "Αριθμός καταχωρίσεων" + }, + "showMitre": { + "label": "Show MITRE ATT&CK techniques" + }, + "showAgent": { + "label": "Εμφάνιση πράκτορα" + }, + "showSourceIp": { + "label": "Εμφάνιση πηγαίου IP" + }, + "showRuleId": { + "label": "Εμφάνιση αναγνωριστικού κανόνα" + } + }, + "title": "Ειδοποιήσεις · επίπεδο {level}+ · {hours}h", + "empty": "Δεν υπάρχουν ειδοποιήσεις σε αυτό το επίπεδο. Όλα ήσυχα.", + "rule": "Κανόνας {id}", + "openInDashboard": "Άνοιγμα αυτής της ειδοποίησης στον πίνακα εργαλείων Wazuh" + }, + "wazuhSummary": { + "name": "Βαρύτητα συναγερμού Wazuh", + "description": "Κατανομή της σοβαρότητας με τάση έναντι της προηγούμενης περιόδου", + "option": { + "range": { + "label": "Χρονικό εύρος" + }, + "showTrend": { + "label": "Εμφάνιση τάσης σε σχέση με την προηγούμενη περίοδο" + }, + "showFooter": { + "label": "Εμφάνιση υποσέλιδου" + } + }, + "title": "Σοβαρότητα ειδοποιήσεων · {range}", + "alerts": "ειδοποιήσεις", + "none": "Δεν υπάρχουν ειδοποιήσεις", + "trend": { + "new": "νέο", + "tooltip": "Προηγούμενη περίοδος: {previous}" + }, + "previous": "Προηγούμενο {range}: {count}", + "maxLevel": "Μέγιστο επίπεδο {level}", + "health": "Κατάσταση indexer: {status}", + "manager": "Διαχειριστής {version}" + }, + "wazuhTimeline": { + "name": "Wazuh alerts timeline", + "description": "Συσσωρευμένο γράφημα Wazuh ειδοποιεί με την πάροδο του χρόνου από τη σοβαρότητα", + "option": { + "range": { + "label": "Χρονικό εύρος" + }, + "interval": { + "label": "Διάστημα" + }, + "chartType": { + "label": "Τύπος γραφήματος" + }, + "yScale": { + "label": "Κλίμακα άξονα Y", + "description": "Τετραγωνική ρίζα διατηρεί υψηλές και κρίσιμες ειδοποιήσεις ορατές δίπλα σε χιλιάδες χαμηλές" + }, + "minLevel": { + "label": "Ελάχιστο επίπεδο κανόνα" + }, + "showLegend": { + "label": "Εμφάνιση υπομνήματος με σύνολα" + } + }, + "title": "Χρονολόγιο ειδοποιήσεων · {range}", + "total": "{count} ειδοποιήσεις", + "interval": "ανά {interval}" + }, + "wazuhTopList": { + "name": "Κορυφαία λίστα Wazuh", + "description": "Κορυφαίοι κανόνες, πράκτορες, IPs πηγής ή τακτικές και τεχνικές MITRE ATT&CK μέσω συναγερμού", + "option": { + "kind": { + "label": "Κατάταξη" + }, + "range": { + "label": "Χρονικό εύρος" + }, + "limit": { + "label": "Αριθμός καταχωρήσεων" + }, + "minLevel": { + "label": "Ελάχιστο επίπεδο κανόνα" + }, + "showBars": { + "label": "Εμφάνιση μπαρών" + } + }, + "title": { + "rules": "Κορυφαίοι κανόνες · {range}", + "agents": "Κορυφαίοι πράκτορες · {range}", + "sourceIps": "Κορυφαίες IP πηγές · {range}", + "mitreTactics": "MITRE tactics · {range}", + "mitreTechniques": "MITRE techniques · {range}" + }, + "empty": { + "rules": "Δεν υπάρχουν ειδοποιήσεις σε αυτήν την περίοδο", + "agents": "Δεν υπάρχουν ειδοποιήσεις σε αυτήν την περίοδο", + "sourceIps": "Δεν υπάρχουν ειδοποιήσεις με πηγαίο IP σε αυτή την περίοδο", + "mitreTactics": "Δεν έχουν αντιστοιχιστεί ειδοποιήσεις για το MITRE ATT&CK σε αυτή την περίοδο", + "mitreTechniques": "Δεν έχουν αντιστοιχιστεί ειδοποιήσεις για το MITRE ATT&CK σε αυτή την περίοδο" + }, + "totalTooltip": "{count} αντίστοιχες ειδοποιήσεις", + "private": "LAN", + "public": "Δημόσιο", + "agents": "Εμφανίζεται σε {count} πράκτορες", + "others": "{count} ακόμη ειδοποιήσεις σε άλλες καταχωρίσεις" + }, + "wazuhVulnerabilities": { + "name": "Αδυναμίες στο Wazuh", + "description": "Αριθμός ευπάθειας, κορυφαίοι CVE και οι πιο ευάλωτοι παράγοντες", + "option": { + "cveOrder": { + "label": "Κατάταξη CVE κατά" + }, + "minSeverity": { + "label": "Ένταση CVE" + }, + "cveLimit": { + "label": "Αριθμός CVE" + }, + "agentLimit": { + "label": "Αριθμός πρακτόρων" + }, + "showAgents": { + "label": "Εμφάνιση πιο ευάλωτων παραγόντων" + } + }, + "title": "Ευπάθειες", + "topCves": "Κορυφαία CVE", + "score": "Βαθμολογία", + "agentsShort": "Πράκτορες", + "topAgents": "Οι πιο ευάλωτοι παράγοντες", + "criticalHigh": "Crit / Υψηλή", + "totalTooltip": "{count} ευρήματα σε {agents} πράκτορες", + "affected": "{count} πράκτορες", + "empty": "Δεν εντοπίστηκαν τρωτά σημεία", + "distribution": "Κατανομή σοβαρότητας. Τα {unscored} ευρήματα χωρίς βαθμολογία δεν εμφανίζονται.", + "worst": "Χειρότερο: {id} ({score}) σε {agents} πράκτορες" + }, + "wazuhFim": { + "name": "Ακεραιότητα αρχείου Wazuh", + "description": "Πρόσφατα συμβάντα παρακολούθησης ακεραιότητας του αρχείου (syscheck)", + "option": { + "range": { + "label": "Χρονικό εύρος" + }, + "event": { + "label": "Συμβάντα" + }, + "limit": { + "label": "Αριθμός συμβάντων" + }, + "includeRegistry": { + "label": "Συμπερίληψη συμβάντων μητρώου των Windows" + } + }, + "title": "Ακεραιότητα αρχείων · {range}", + "event": { + "added": "Ημερομηνία Προσθήκης", + "modified": "Τροποποιήθηκε", + "deleted": "Διαγράφηκε", + "unknown": "Άλλαξε" + }, + "empty": "Δεν υπάρχουν συμβάντα ακεραιότητας αρχείων σε αυτήν την περίοδο", + "user": "από τον χρήστη {user}", + "registry": "Μητρώο" + }, + "wazuhAuthFailures": { + "name": "Αποτυχίες ελέγχου ταυτότητας Wazuh", + "description": "Αποτυχία σύνδεσης και ειδοποιήσεις brute-force ανά πράκτορα με ωριαίες sparklines", + "option": { + "hours": { + "label": "Παράθυρο ώρας (ώρες)" + }, + "limit": { + "label": "Αριθμός πρακτόρων" + }, + "showSourceIps": { + "label": "Εμφάνιση IP κορυφαίας πηγής" + } + }, + "title": "Αποτυχίες ελέγχου ταυτότητας · {hours} ώρες", + "seriesTooltip": "Όλοι οι πράκτορες των τελευταίων {hours} ωρών", + "peak": "Μέγιστο {count}/ομάδα", + "empty": "Δεν υπάρχουν αποτυχημένες συνδέσεις σε αυτήν την περίοδο", + "failed": "Αποτυχημένες συνδέσεις", + "failedHint": "Αποτυχία ενός ελέγχου ταυτότητας (shd, PAM, σύνδεση με Windows, μη έγκυροι χρήστες)", + "bruteForce": "Brute force", + "bruteForceHint": "Κανόνες συσχετιζόμενοι με ωμάρια (πολλαπλές αποτυχίες σε σύντομο χρονικό διάστημα, MITRE T1110)", + "sourceIps": "Πηγαία IP", + "ipTooltip": "{ip}: {count} αποτυχίες", + "bruteForceCount": "{count} brute force" } }, "widgetPreview": { @@ -4004,7 +5732,76 @@ } }, "board": { + "emptyState": { + "title": "Φτιάξε την πρώτη σου προβολή", + "description": "Προσθήκη γραφικού στοιχείου ή εφαρμογής, ή σύνδεση μιας υπηρεσίας και χρήση των δεδομένων της σε αυτόν τον πίνακα.", + "addWidget": "Προσθήκη widget", + "addApp": "Προσθήκη εφαρμογής", + "connectService": "Σύνδεση υπηρεσίας" + }, + "setupChecklist": { + "title": "Κάντε αυτόν τον πίνακα χρήσιμο", + "description": "Παραλαβή από όπου σταματήσατε. Η πρόοδος ακολουθεί το περιεχόμενο που ήδη βρίσκεται σε αυτόν τον πίνακα.", + "collapse": "Σύμπτυξη λίστας ρυθμίσεων", + "dismiss": "Λίστα ελέγχου παράκαμψης ρυθμίσεων", + "resume": "Συνέχιση ρύθμισης ({completed}/{total})", + "progress": "Πρόοδος εγκατάστασης σκακιέρας", + "step": { + "content": { + "label": "Προσθήκη χρήσιμου περιεχομένου", + "description": "Επιλέξτε ένα γραφικό συστατικό και ρυθμίστε το πριν τοποθετηθεί." + }, + "app": { + "label": "Καρφίτσωμα μιας εφαρμογής", + "description": "Κρατήστε μια υπηρεσία ή ένα εργαλείο ένα κλικ μακριά από αυτόν τον πίνακα." + }, + "service": { + "label": "Συνδέστε μια υπηρεσία", + "description": "Ξεκλειδώστε ζωντανά δεδομένα και ενέργειες για συμβατά widgets.", + "permissionDescription": "Ένας διαχειριστής μπορεί να συνδέσει μια υπηρεσία για να ξεκλειδώσει ζωντανά δεδομένα.", + "action": "Σύνδεση" + } + } + }, "action": { + "addContent": "Προσθήκη περιεχομένου πίνακα", + "settings": "Ρυθμίσεις σκαλοπατιού", + "switch": "Εναλλαγή πλακέτας", + "switcher": { + "title": "Εναλλαγή πλακέτας", + "search": { + "empty": "Δεν ταιριάζουν πίνακες \"{search}\"." + }, + "results": "Διαθέσιμοι πίνακες", + "preview": "Προεπισκόπηση του {name} με στοιχεία {count}", + "currentHidden": "Τρέχων πίνακας: {name}", + "keyboard": { + "navigate": "Navigate", + "open": "Άνοιγμα", + "instructions": "Πληκτρολογήστε για να φιλτράρετε τους πίνακες. Χρησιμοποιήστε τα πλήκτρα βέλους για να μετακινηθείτε μέσω των αποτελεσμάτων και Enter για να ανοίξετε έναν πίνακα." + }, + "empty": { + "title": "Δεν υπάρχουν άλλοι πίνακες", + "description": "Δεν υπάρχουν άλλοι πίνακες που μπορείτε να έχετε πρόσβαση." + }, + "error": "Οι πίνακες δεν μπορούν να φορτωθούν." + }, + "create": { + "availability": { + "checking": "Έλεγχος διαθεσιμότητας…", + "available": "Το {name} είναι διαθέσιμο" + }, + "notification": { + "success": { + "title": "Ο πίνακας δημιουργήθηκε", + "message": "Έχει δημιουργηθεί Διοικητικό Συμβούλιο {name}" + }, + "error": { + "title": "Αδυναμία δημιουργίας πίνακα", + "message": "Το Board {name} δεν μπόρεσε να δημιουργηθεί" + } + } + }, "duplicate": { "title": "Αντιγραφή πίνακα", "message": "Αυτό θα αντιγράψει τον πίνακα {name} μαζί με όλο το περιεχόμενό του. Αν τα γραφικά στοιχεία αναφέρονται σε ενσωματώσεις που δεν επιτρέπεται να χρησιμοποιείτε, θα αφαιρεθούν.", @@ -4020,14 +5817,19 @@ } }, "edit": { + "enter": "Επεξεργασία πίνακα", + "save": "Αποθήκευση πίνακα", + "exit": "Λειτουργία επεξεργασίας εξόδου", "notification": { "success": { - "title": "Οι αλλαγές εφαρμόστηκαν επιτυχώς", "message": "Ο πίνακας αποθηκεύτηκε επιτυχώς" }, "error": { - "title": "Δεν ήταν δυνατή η εφαρμογή των αλλαγών", "message": "Δεν ήταν δυνατή η αποθήκευση του πίνακα" + }, + "loadError": { + "title": "Αδυναμία έναρξης επεξεργασίας", + "message": "Ο επεξεργαστής του ταμπλό δεν μπόρεσε να φορτωθεί. Ο πίνακας ελέγχου σας είναι ακόμα διαθέσιμος στη λειτουργία προβολής." } }, "confirmLeave": { @@ -4035,62 +5837,6 @@ "message": "Έχετε μη αποθηκευμένες αλλαγές. Είστε βέβαιοι ότι θέλετε να αποχωρήσετε;" } }, - "oldImport": { - "label": "Εισαγωγή από το homarr πριν από την έκδοση 1.0.0", - "notification": { - "success": { - "title": "Επιτυχής εισαγωγή", - "message": "Ο πίνακας εισήχθη επιτυχώς" - }, - "error": { - "title": "Αποτυχία εισαγωγής", - "message": "Δεν ήταν δυνατή η εισαγωγή του πίνακα. Ελέγξτε τα αρχεία καταγραφής για περισσότερες λεπτομέρειες" - } - }, - "form": { - "file": { - "label": "Επιλογή αρχείου JSON", - "invalidError": "Μη έγκυρο αρχείο διαμόρφωσης" - }, - "apps": { - "label": "Εφαρμογές", - "avoidDuplicates": { - "label": "Αποφυγή διπλότυπων", - "description": "Παραλείπει εφαρμογές για τις οποίες υπάρχει ήδη εφαρμογή με το ίδιο href" - }, - "onlyImportApps": { - "label": "Εισαγωγή μόνο εφαρμογών", - "description": "Προσθέτει μόνο τις εφαρμογές· ο πίνακας πρέπει να αναδημιουργηθεί χειροκίνητα" - } - }, - "name": { - "label": "Όνομα πίνακα" - }, - "screenSize": { - "label": "Μέγεθος οθόνης", - "description": "Σε εκδόσεις πριν από την 1.0 υπήρχαν τρεις διαφορετικές λειτουργίες, επομένως μπορούσατε να επιλέξετε τον αριθμό στηλών για κάθε μέγεθος οθόνης.", - "option": { - "sm": "Μικρό", - "md": "Μεσαίο", - "lg": "Μεγάλο" - } - }, - "sidebarBehavior": { - "label": "", - "description": "Οι πλευρικές γραμμές καταργήθηκαν στην έκδοση 1.0. Μπορείτε να επιλέξετε τι θα συμβεί στα στοιχεία που περιέχουν.", - "option": { - "lastSection": { - "label": "Τελευταία ενότητα", - "description": "Η πλευρική γραμμή θα εμφανίζεται κάτω από την τελευταία ενότητα" - }, - "removeItems": { - "label": "Αφαίρεση στοιχείων", - "description": "Τα στοιχεία που περιέχονται στην πλευρική γραμμή θα αφαιρεθούν" - } - } - } - } - }, "quickCreateApp": { "modal": { "title": "Δημιουργία εφαρμογής επιτόπου", @@ -4098,6 +5844,12 @@ } } }, + "landmark": { + "canvas": "Καμβάς ταμπλό", + "leftRail": "Αριστερή ράγα ταμπλό", + "rightRail": "Δεξιά ταμπλό ράγα", + "items": "Στοιχεία ταμπλό" + }, "field": { "pageTitle": { "label": "Τίτλος σελίδας" @@ -4167,7 +5919,8 @@ } }, "primaryColor": { - "label": "Βασικό χρώμα" + "label": "Βασικό χρώμα", + "locked": "Ο διαχειριστής σας κρατά το χρώμα της μάρκας παρουσία σε κάθε πίνακα." }, "secondaryColor": { "label": "Δευτερεύον χρώμα" @@ -4207,9 +5960,6 @@ "xl": "Πολύ μεγάλο" } }, - "name": { - "label": "Όνομα" - }, "isPublic": { "label": "Δημόσιο", "description": "Οι δημόσιοι πίνακες είναι προσβάσιμοι από όλους, ακόμη και χωρίς λογαριασμό." @@ -4229,9 +5979,44 @@ "title": "Διάταξη", "responsive": { "title": "Προσαρμοζόμενες διατάξεις", + "description": "Κάθε διάταξη διατηρεί τις δικές του θέσεις widget και μεγέθη. Τα κινητά και η βάση είναι πάντα διαθέσιμα, προσθέστε προσαρμοσμένες διατάξεις σε οποιοδήποτε πρόσθετο σημείο διακοπής.", "action": { "add": "Προσθήκη διάταξης" } + }, + "role": { + "mobile": "Κινητό", + "base": "Βάση", + "custom": "Προσαρμοσμένο" + }, + "custom": { + "defaultName": "Προσαρμοσμένη διάταξη" + }, + "mobile": { + "breakpointDescription": "Το κινητό χρησιμοποιείται πάντα από το 0px μέχρι το επόμενο σημείο διακοπής της διάταξης." + }, + "preview": { + "columns": "στήλες", + "empty": "Αυτή η διάταξη είναι κενή", + "dynamicSection": "Δυναμικό τμήμα", + "editorWidthLabel": "{layoutName} · {width}px" + }, + "reset": { + "action": "Επαναφορά από τη βάση", + "confirm": { + "title": "Reset {layoutName}?", + "message": "Αυτό αντικαθιστά κάθε αποθηκευμένη θέση και μέγεθος σε αυτή τη διάταξη με μια νέα διάταξη που δημιουργείται από τη βάση. Αυτό δεν μπορεί να αναιρεθεί." + } + }, + "edit": { + "action": "Επεξεργασία διάταξης", + "saveAndEdit": "Αποθήκευση και επεξεργασία", + "save": "Αποθήκευση διάταξης", + "cancel": { + "action": "Ακύρωση επεξεργασίας διάταξης", + "title": "Απόρριψη αλλαγών διάταξης?", + "message": "Οι αλλαγές σας που δεν έχουν αποθηκευτεί σε αυτή τη διάταξη θα απορριφθούν." + } } }, "background": { @@ -4268,10 +6053,7 @@ "rename": { "label": "Μετονομασία πίνακα", "description": "Η αλλαγή του ονόματος θα διακόψει τυχόν συνδέσμους προς αυτόν τον πίνακα.", - "button": "Μετονομασία ονόματος", - "modal": { - "title": "Μετονομασία πίνακα" - } + "button": "Μετονομασία ονόματος" }, "visibility": { "label": "Αλλαγή ορατότητας πίνακα", @@ -4295,9 +6077,7 @@ } }, "delete": { - "label": "Διαγραφή αυτού του πίνακα", "description": "Μόλις διαγράψετε έναν πίνακα, δεν υπάρχει επιστροφή. Βεβαιωθείτε ότι το θέλετε.", - "button": "Διαγραφή αυτού του πίνακα", "confirm": { "title": "Διαγραφή πίνακα", "description": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτόν τον πίνακα; Ο πίνακας και όλο το περιεχόμενό του θα διαγραφούν οριστικά." @@ -4342,28 +6122,41 @@ }, "layout": { "field": { - "name": { - "label": "Όνομα" - }, "columnCount": { "label": "Αριθμός στηλών" }, "breakpoint": { "label": "Σημείο διακοπής", "description": "Η διάταξη θα χρησιμοποιείται σε όλες τις οθόνες που είναι μεγαλύτερες από αυτό το σημείο διακοπής, μέχρι το επόμενο μεγαλύτερο σημείο διακοπής." + }, + "gutters": { + "label": "Σταθερές πλαϊνές μπάρες", + "description": "Κρατήστε έως και τρεις στήλες ταμπλό σε κάθε πλευρά. Ο εναπομείναντας καμβάς επανέρχεται αυτόματα.", + "left": { + "label": "Left sidebar", + "description": "Κρατήστε αυτήν την περιοχή ορατή κατά την κύλιση του ταμπλό.", + "thumbLabel": "Left sidebar width" + }, + "right": { + "label": "Δεξιά πλευρική μπάρα", + "description": "Κρατήστε αυτήν την περιοχή ορατή κατά την κύλιση του ταμπλό.", + "thumbLabel": "Δεξί πλάτος πλευρικής μπάρας" + }, + "width": { + "label": "Πλάτος στις στήλες" + }, + "preview": { + "label": "Προεπισκόπηση διάταξης ταμπλό" + } } } }, "management": { "metaTitle": "Διαχείριση", - "title": { - "morning": "Καλημέρα, {username}", - "afternoon": "Καλό απόγευμα, {username}", - "evening": "Καλησπέρα, {username}" - }, "notFound": { "title": "Δεν βρέθηκε", - "text": "Δεν ήταν δυνατή η εύρεση του ζητούμενου πόρου" + "text": "Δεν ήταν δυνατή η εύρεση του ζητούμενου πόρου", + "backToHome": "Επιστροφή στο σπίτι διαχείρισης" }, "error": { "title": "Δεν ήταν δυνατή η φόρτωση αυτής της σελίδας", @@ -4372,19 +6165,10 @@ }, "navbar": { "items": { - "workshop": "Workshop", "home": "Αρχική", - "boards": "Πίνακες", - "apps": "Εφαρμογές", - "integrations": "Ενσωματώσεις", - "searchEngies": "Μηχανές αναζήτησης", - "medias": "Πολυμέσα", "users": { - "label": "Χρήστες", "items": { - "manage": "Διαχείριση", - "invites": "Προσκλήσεις", - "groups": "Ομάδες" + "manage": "Διαχείριση" } }, "tools": { @@ -4392,10 +6176,7 @@ "items": { "docker": "Docker", "kubernetes": "Kubernetes", - "logs": "Logs", "api": "API και MCP", - "certificates": "Πιστοποιητικά", - "tasks": "Διεργασίες", "backup": "Αντίγραφο ασφαλείας" } }, @@ -4409,21 +6190,12 @@ "sourceCode": "Πηγαίος Κώδικας" } }, - "about": "Σχετικά" + "about": "Σχετικά", + "assistant": "Βοηθός" } }, "page": { "home": { - "statistic": { - "board": "Πίνακες", - "user": "Χρήστες", - "invite": "Προσκλήσεις", - "integration": "Ενσωματώσεις", - "app": "Εφαρμογές", - "group": "Ομάδες", - "searchEngine": "Μηχανές αναζήτησης", - "media": "Πολυμέσα" - }, "statisticLabel": { "boards": "Πίνακες", "resources": "Πόροι", @@ -4461,13 +6233,8 @@ "tooltip": "Αυτός ο πίνακας θα εμφανίζεται ως ο πίνακας κινητού σας" } }, - "duplicate": { - "label": "Αντιγραφή πίνακα" - }, "delete": { - "label": "Οριστική διαγραφή", "confirm": { - "title": "Διαγραφή πίνακα", "description": "Είστε βέβαιοι ότι θέλετε να διαγράψετε τον πίνακα {name};" } } @@ -4476,28 +6243,82 @@ "public": "Αυτός ο πίνακας είναι δημόσιος", "private": "Αυτός ο πίνακας είναι ιδιωτικός" }, - "noResults": { - "title": "Δεν υπάρχουν πίνακες ακόμα" + "preview": { + "label": "Προεπισκόπηση διάταξης για {name}, με στοιχεία {count}", + "unknownCreator": "Άγνωστος δημιουργός" }, - "modal": { - "createBoard": { - "field": { - "name": { - "label": "Όνομα" - } - } - } + "noResults": { + "title": "Δεν υπάρχουν πίνακες ακόμα", + "description": "Δημιουργήστε έναν πίνακα για να οργανώσετε τις εφαρμογές και τα widget σας σε ένα μέρος." } }, "media": { "includeFromAllUsers": "Συμπερίληψη πολυμέσων από όλους τους χρήστες" }, "user": { - "back": "Επιστροφή στους χρήστες", "fieldsDisabledExternalProvider": "Ορισμένα πεδία είναι απενεργοποιημένα επειδή τα διαχειρίζεται εξωτερικός πάροχος ελέγχου ταυτότητας.", "setting": { "general": { "title": "Γενικά", + "header": { + "title": "Κεφαλίδα στούντιο", + "badge": "Προσωπικό", + "description": "Σύρετε τους ελέγχους οπουδήποτε στη σειρά. Αριστερά, Κέντρο και Δικαίωμα μείνετε σταθερό ενώ ελέγχει τη μετατόπιση γύρω τους.", + "device": { + "desktop": "Επιφάνεια Εργασίας", + "mobile": "Κινητό" + }, + "zones": { + "left": "Αριστερά", + "center": "Κέντρο", + "right": "Δεξιά" + }, + "action": { + "hide": "Απόκρυψη κεφαλίδας", + "show": "Εμφάνιση κεφαλίδας", + "configure": "Μετακίνηση ή διαμόρφωση του {item}", + "remove": "Αφαίρεση του {item}", + "dropIntoZone": "Μετακίνηση στην ενότητα {zone}" + }, + "preview": { + "board": "Προεπισκόπηση ταμπλό για το {name}", + "empty": "Δεν υπάρχει διαθέσιμη διάταξη ταμπλό" + }, + "available": { + "title": "Διαθέσιμα στοιχεία ελέγχου", + "description": "Προσθέστε ένα χειριστήριο και μετά σύρετε το κουμπί στην παραπάνω θέση.", + "requiredAlways": "Αυτός ο έλεγχος απαιτείται, αλλά μπορείτε να τον μετακινήσετε οπουδήποτε στην κεφαλίδα.", + "allAdded": "Κάθε ενσωματωμένο χειριστήριο είναι ήδη στην κεφαλίδα σας.", + "add": "Προσθήκη {item}", + "boardShortcut": "Συντόμευση σκακιέρας", + "chooseBoard": "Επιλέξτε έναν πίνακα" + }, + "configuration": { + "description": "Αυτός ο έλεγχος παραμένει το ίδιο μέγεθος με το live header.", + "searchDisplay": { + "input": "Μπάρα αναζήτησης", + "icon": "Μόνο εικονίδιο" + }, + "logoDisplay": { + "logo": "Λογότυπο μόνο", + "logoAndText": "Λογότυπο + κείμενο" + } + }, + "items": { + "logo": "Λογότυπο", + "search": "Αναζήτηση", + "home": "Αρχική σελίδα", + "boardSwitcher": "Πίνακες", + "assistant": "Βοηθός", + "docker": "Προσάρτηση", + "boardEdit": "Επεξεργασία πίνακα", + "boardSettings": "Ρυθμίσεις σκαλοπατιού", + "settings": "Οι ρυθμίσεις σας", + "themeToggle": "Εναλλαγή θέματος", + "user": "Λογαριασμός", + "boardUnavailable": "Μη διαθέσιμη σκακιέρα" + } + }, "item": { "language": "Γλώσσα και περιοχή", "board": { @@ -4531,14 +6352,10 @@ }, "security": { "title": "Ασφάλεια" - }, - "board": { - "title": "Πίνακες" } }, "list": { - "metaTitle": "Διαχείριση χρηστών", - "title": "Χρήστες" + "metaTitle": "Διαχείριση χρηστών" }, "edit": { "metaTitle": "Επεξεργασία χρήστη {username}" @@ -4592,9 +6409,6 @@ } }, "field": { - "id": { - "label": "Αναγνωριστικό (ID)" - }, "creator": { "label": "Δημιουργός" }, @@ -4618,10 +6432,7 @@ }, "setting": { "title": "Ρυθμίσεις", - "alert": "Οι ρυθμίσεις των ομάδων ταξινομούνται με βάση τη σειρά των ομάδων στη λίστα. Οι ρυθμίσεις στην κορυφή αντικαθιστούν τις ρυθμίσεις στο κάτω μέρος.", - "board": { - "title": "Πίνακες" - } + "alert": "Οι ρυθμίσεις των ομάδων ταξινομούνται με βάση τη σειρά των ομάδων στη λίστα. Οι ρυθμίσεις στην κορυφή αντικαθιστούν τις ρυθμίσεις στο κάτω μέρος." }, "members": { "title": "Μέλη", @@ -4629,10 +6440,7 @@ "notFound": "Δεν βρέθηκαν μέλη" }, "permissions": { - "title": "Άδειες", - "form": { - "unsavedChanges": "Έχετε μη αποθηκευμένες αλλαγές!" - } + "title": "Άδειες" } } }, @@ -4641,12 +6449,10 @@ "notification": { "success": { "message": "Οι ρυθμίσεις αποθηκεύτηκαν επιτυχώς" - }, - "error": { - "message": "Αποτυχία αποθήκευσης ρυθμίσεων" } }, "section": { + "analyticsDocumentation": "Δείτε ακριβώς τι δεδομένα ανάλυσης Homarr συλλέγει", "analytics": { "title": "Analytics", "general": { @@ -4675,7 +6481,6 @@ } }, "board": { - "title": "Πίνακες", "homeBoard": { "label": "Καθολικός αρχικός πίνακας", "mobileLabel": "Καθολικός πίνακας κινητού", @@ -4694,7 +6499,6 @@ } }, "user": { - "title": "Χρήστες", "enableGravatar": { "label": "Ενεργοποίηση Gravatar", "description": "Χρησιμοποιεί εναλλακτικά avatar χρηστών από το Libravatar/Gravatar όταν δεν έχει οριστεί προσαρμοσμένο avatar και έχει ρυθμιστεί email" @@ -4710,12 +6514,86 @@ "appearance": { "title": "Εμφάνιση", "defaultColorScheme": { - "label": "Προεπιλεγμένος συνδυασμός χρωμάτων", + "label": "Προεπιλεγμένος συνδυασμός χρωμάτων" + } + }, + "branding": { + "title": "Παρουσία branding", + "groups": { + "identity": "Ταυτότητα", + "appearance": "Εμφάνιση", + "customCss": "Custom CSS", + "authentication": "Ταυτοποίηση" + }, + "identity": { + "description": "Το λογότυπο της εφαρμογής είναι το μεγαλύτερο σήμα που χρησιμοποιείται μέσα στην εφαρμογή, σε σελίδες σύνδεσης, και για εγκατεστημένες εφαρμογές. Το εικονίδιο του προγράμματος περιήγησης (favicon) είναι το μικρό τετράγωνο που χρησιμοποιείται σε καρτέλες και σελιδοδείκτες, όταν είναι άδειο, επιστρέφει στο λογότυπο της εφαρμογής." + }, + "appName": { + "label": "Όνομα εφαρμογής" + }, + "greeting": { + "label": "Προσαρμοσμένο χαιρετισμό" + }, + "logo": { + "label": "Λογότυπο εφαρμογής", + "placeholder": "/logo/logo.png" + }, + "favicon": { + "label": "Εικονίδιο περιηγητή (favicon)", + "placeholder": "Χρησιμοποιεί το λογότυπο εφαρμογής" + }, + "primaryColor": { + "label": "Βασικό χρώμα" + }, + "secondaryColor": { + "label": "Δευτερεύουσα έμφαση" + }, + "lockPrimaryColor": { + "label": "Κρατήστε αυτό το χρώμα σε κάθε πίνακα", + "description": "Αποτρέπει τα χρώματα του σκάφους από την αντικατάσταση της έμφασης της εφαρμογής." + }, + "signInBackground": { + "label": "Φόντο ελέγχου ταυτότητας", + "placeholder": "https://example.com/background.jpg" + }, + "signInOverlay": { + "label": "Επικάλυψη φόντου" + }, + "defaultRadius": { + "label": "Στυλ γωνίας", "options": { - "auto": "Αυτόματο", - "light": "Φωτεινό", - "dark": "" + "xs": "Σφιχτό", + "sm": "Λεπτό", + "md": "Ισορροπημένο", + "lg": "Στρογγυλεμένο", + "xl": "Απαλό" } + }, + "customCss": { + "label": "Καθολικό προσαρμοσμένο CSS", + "description": "Εφαρμοσμένη σε κάθε σελίδα. Προσαρμοσμένο CSS πίνακα μπορεί να το παρακάμψει." + }, + "authVisibility": { + "description": "Επιλέξτε αυτό που εμφανίζεται σε κάθε σελίδα ελέγχου ταυτότητας.", + "appName": "Όνομα εφαρμογής", + "logo": "Λογότυπο εφαρμογής", + "greeting": "Χαιρετισμός" + }, + "summary": { + "title": "Τρέχουσα σήμανση", + "cornerStyle": "Στυλ γωνίας", + "palette": "Palette", + "backgroundConfigured": "Προσαρμοσμένο φόντο · {overlay}% επικάλυψη", + "backgroundDefault": "Προεπιλεγμένο φόντο", + "greetingConfigured": "Προσαρμοσμένο χαιρετισμό", + "greetingDefault": "Προεπιλεγμένος χαιρετισμός", + "boardColorLocked": "Κλειδωμένο χρώμα σκακιέρας", + "boardColorFlexible": "Επιτρεπόμενα χρώματα πινάκων", + "appName": "Όνομα εργασίας", + "logo": "Λογότυπο", + "greeting": "Χαιρετισμός", + "on": "Ενεργό", + "off": "Ανενεργό" } }, "culture": { @@ -4723,12 +6601,177 @@ "defaultLocale": { "label": "Προεπιλεγμένη γλώσσα" } + }, + "assistant": { + "loading": "Φόρτωση ρυθμίσεων βοηθού", + "title": "Βοηθός", + "description": "Συνδέστε ένα μοντέλο συμβατό με OpenAI τελικό σημείο για τον βοηθό σε όλη την περίπτωση.", + "security": { + "description": "Τα κλειδιά API και οι πρόσθετες τιμές κεφαλίδας κρυπτογραφούνται στη βάση δεδομένων Homarr. Δεν επιστρέφονται ποτέ στους περιηγητές. Τα αιτήματα μοντέλου αποστέλλονται από το διακομιστή Homarr απευθείας στο καθορισμένο τελικό σημείο." + }, + "overview": { + "connectionReady": "Σύνδεση έτοιμη", + "unsavedChanges": "Μη αποθηκευμένες αλλαγές", + "setupRequired": "Απαιτείται ρύθμιση", + "disabled": "Απενεργοποιημένο", + "noModel": "Δεν επιλέχθηκε μοντέλο" + }, + "connection": { + "endpointTitle": "Πάροχος και τελικό σημείο", + "description": "Επιλέξτε μια προκαθορισμένη ρύθμιση ή συνδέστε οποιαδήποτε υπηρεσία που υλοποιεί το OpenAI Chat Completions API.", + "save": "Αποθήκευση σύνδεσης παρόχου" + }, + "credentials": { + "title": "Διαπιστευτήρια", + "description": "Προσθέστε τα μυστικά που χρειάζεται αυτό το τελικό σημείο. Αποθηκευμένες τιμές παραμένουν κρυπτογραφημένες και δεν μπορούν να διαβαστούν.", + "required": "Απαιτείται κλειδί", + "optional": "Προαιρετικό κλειδί", + "workshop": "Σύνδεση στο GitHub Per-user" + }, + "provider": { + "title": "Πάροχος", + "groups": { + "free": "Δωρεάν με το Homarr", + "hosted": "Φιλοξενούμενοι πάροχοι", + "local": "Τοπικοί πάροχοι", + "custom": "Προσαρμοσμένο" + }, + "options": { + "homarr": { + "description": "Ένας περιορισμένος αριθμός Βοηθών χρήσεων είναι δωρεάν κάθε μέρα, πληρώνονται από την ομάδα του Homarr. Συνδεθείτε με το Κοινοτικό Εργαστήριο για να χρησιμοποιήσετε το επίδομά σας." + }, + "openrouter": { + "description": "Φιλοξενούμενη δρομολόγηση μοντέλου με ένα μεγάλο πρότυπο κατάλογο που μπορεί να αντεπεξέλθει σε εργαλεία." + }, + "openai": { + "description": "Ολοκλήρωση Συνομιλίας OpenAI μέσω του επίσημου τέλους API." + }, + "anthropic": { + "description": "Claude μέσω του τέλους συμβατότητας OpenAI SDK της Anthropic." + }, + "google-gemini": { + "description": "Δίδυμοι μέσω του OpenAI-συμβατού τερματικού σημείου API της Google" + }, + "xai": { + "description": "Μοντέλα Grok μέσω API συμβατό με το OpenAI του xAI." + }, + "groq": { + "description": "Γρήγορη φιλοξενία συμπερασμάτων μέσω API συμβατό με το OpenAI Groq." + }, + "mistral": { + "description": "Mistral μοντέλα μέσω του επίσημου API." + }, + "deepseek": { + "description": "DeepSeek μοντέλα μέσω του OpenAI συμβατού API." + }, + "together": { + "description": "Φιλοξενία ανοικτών μοντέλων μέσω του API συμβατού με το OpenAI του Μαζί" + }, + "ollama": { + "description": "Ένας τοπικός ή δικτυακός εξυπηρετητής Ollama χρησιμοποιώντας το API συμβατό με το OpenAI." + }, + "lm-studio": { + "description": "Ένας τοπικός διακομιστής LM Studio με ενεργοποιημένη τη συμβατότητα του OpenAI." + }, + "llama-cpp": { + "description": "Ένας τοπικός ή δικτυακός διακομιστής llama.cpp χρησιμοποιώντας το API συμβατό με το OpenAI." + }, + "custom": { + "label": "Προσαρμοσμένο τελικό σημείο", + "description": "Οποιοδήποτε άλλο τελικό σημείο συμβατό με το OpenAI Chat Completions." + } + }, + "homarrAuth": { + "title": "Δωρεάν καθημερινή βοηθός χρήσεις περιλαμβάνονται", + "description": "Δεν απαιτείται κλειδί API. Η ομάδα Homarr καλύπτει περιορισμένο αριθμό βοηθών που χρησιμοποιεί για εσάς καθημερινά. Συνδεθείτε με το Κοινοτικό Εργαστήριο για να κρατήσετε το επίδομά σας ξεχωριστό." + } + }, + "baseUrl": { + "title": "URL βάσης API", + "description": "Συμπεριλάβετε το πρόθεμα API, συνήθως /v1. Σε δοχεία, localhost αναφέρεται το δοχείο Homarr." + }, + "apiKey": { + "title": "API κλειδί", + "required": "Απαιτείται από αυτόν τον πάροχο. Η τιμή είναι κρυπτογραφημένη και μόνο για εγγραφή.", + "optional": "Προαιρετικό για τα τοπικά τελικά σημεία. Αφήστε το κενό όταν η υπηρεσία δεν απαιτεί έλεγχο ταυτότητας στον κομιστή.", + "placeholder": "Εισάγετε ένα κλειδί API", + "savedTitle": "Το κρυπτογραφημένο κλειδί API αποθηκεύτηκε", + "savedDescription": "Το Homarr μπορεί να χρησιμοποιήσει αυτό το κλειδί, αλλά δεν μπορεί να επιδείξει ή να ανακτήσει την αξία του.", + "remove": "Αφαίρεση αποθηκευμένου κλειδιού API", + "removeFlow": { + "title": "Αφαίρεση του αποθηκευμένου κλειδιού API?", + "description": "Αυτός ο πάροχος απαιτεί ένα κλειδί API. Η αφαίρεση μπορεί να σταματήσει την ανακάλυψη μοντέλου και τις απαντήσεις βοηθού μέχρι να αποθηκευτεί ένα άλλο κλειδί.", + "optionalDescription": "Το τελικό σημείο θα σταματήσει να λαμβάνει έλεγχο ταυτότητας στον κομιστή μετά την αφαίρεση αυτού του κλειδιού. Επιβεβαιώστε ότι δέχεται μη πιστοποιημένες αιτήσεις ή χρησιμοποιεί άλλη αποθηκευμένη κεφαλίδα.", + "cancel": "Διατήρηση αποθηκευμένου κλειδιού", + "confirm": "Αφαίρεση κλειδιού API" + } + }, + "headers": { + "title": "Πρόσθετες κεφαλίδες αιτήματος", + "description": "Προαιρετικός έλεγχος ταυτότητας ή δρομολόγηση κεφαλίδων. Οι τιμές κεφαλίδας κρυπτογραφούνται και γράφονται μόνο.", + "add": "Προσθήκη κεφαλίδας", + "name": "Όνομα κεφαλίδας", + "value": "Τιμή κεφαλίδας", + "valuePlaceholder": "Μυστική ή τιμή δρομολόγησης", + "remove": "Αφαίρεση κεφαλίδας", + "configured": "Πρόσθετες κρυπτογραφημένες κεφαλίδες έχουν ρυθμιστεί. Η προσθήκη κεφαλίδων αντικαθιστά το πλήρες αποθηκευμένο σύνολο.", + "empty": "Δεν αποθηκεύονται πρόσθετες κεφαλίδες για αυτόν τον πάροχο.", + "savedBadge": "Κεφαλίδες αποθηκεύτηκαν", + "pendingRemoval": "Αφαίρεση σε αναμονή", + "clear": "Αφαίρεση των αποθηκευμένων κεφαλίδων κατά την αποθήκευση", + "keep": "Διατήρηση αποθηκευμένων κεφαλίδων" + }, + "model": { + "title": "Μοντέλο", + "description": "Επιλέξτε ένα μοντέλο που ανακαλύφθηκε ή εισάγετε ένα ακριβές αναγνωριστικό μοντέλου τελικού σημείου.", + "placeholder": "Αναγνωριστικό Μοντέλο", + "refresh": "Ανανέωση μοντέλων", + "chooseModel": "Επιλέξτε το μοντέλο που χρησιμοποιείται για νέες συνομιλίες.", + "discoveryPath": "Διαδρομή ανίχνευσης μοντέλου", + "discoveryPathDescription": "Προσαρτημένο στη βασική διεύθυνση URL API. Αφήστε κενό για να απενεργοποιήσετε την ανακάλυψη και χρησιμοποιήστε ένα χειροκίνητο αναγνωριστικό μοντέλου.", + "manual": "Εισάγετε ένα αναγνωριστικό μοντέλου χειροκίνητα ή αποθηκεύστε τη σύνδεση για να ανακαλύψετε μοντέλα.", + "manualFallback": "Η ανακάλυψη δεν είναι διαθέσιμη. Μπορείτε ακόμα να εισάγετε ένα αναγνωριστικό μοντέλου χειροκίνητα.", + "saveConnectionFirst": "Αποθηκεύστε τη σύνδεση του παρόχου πριν επιλέξετε ένα μοντέλο.", + "discovering": "Ανανέωση των διαθέσιμων μοντέλων από αυτόν τον πάροχο…", + "discovered": "{count, plural, one {Ανακαλύφθηκε # μοντέλο. Η υποστήριξη εργαλείων εξαρτάται από το επιλεγμένο τελικό σημείο και μοντέλο.} other {Ανακαλύφθηκε # μοντέλα. Η υποστήριξη εργαλείων εξαρτάται από το επιλεγμένο τελικό σημείο και μοντέλο.}}", + "discoveryFailed": "Η ανακάλυψη του μοντέλου δεν ολοκληρώθηκε", + "context": "{count} παράθυρο περιβάλλοντος", + "toolsConfirmed": "Εργαλεία που διαφημίζονται", + "toolsUnknown": "Επαλήθευση υποστήριξης εργαλείων" + }, + "serverTools": { + "title": "Εργαλεία διακομιστή", + "webSearch": { + "label": "Αναζήτηση στο διαδίκτυο", + "description": "Επιτρέψτε στο μοντέλο να αναζητήσει τον ζωντανό ιστό μέσω του OpenRouter όταν ένα αίτημα χρειάζεται τρέχουσες πληροφορίες. Η χρήση της αναζήτησης χρεώνεται ξεχωριστά από το OpenRouter.", + "proxyDescription": "Αποστολή του εργαλείου διακομιστή OpenRouter αναζήτησης ιστού σε αυτό το τελικό σημείο. Ενεργοποιήστε αυτό μόνο όταν το προσαρμοσμένο τελικό σημείο μπροστά από τη μορφή εργαλείων διακομιστή OpenRouter, όπως ένας διαμεσολαβητής του Homarr Router.", + "limit": "Το μοντέλο αποφασίζει πότε θα αναζητήσει, με ένα όριο 3 αναζητήσεις και 5 αποτελέσματα ανά αναζήτηση για κάθε αίτημα." + } + }, + "enabled": { + "label": "Ενεργοποίηση Βοηθού", + "description": "Εμφανίζει τον βοηθό σε όλους τους συνδεδεμένους χρήστες. Τα υπάρχοντα δικαιώματα Homarr εξακολουθούν να ισχύουν για κάθε εσωτερική κλήση εργαλείου." + }, + "save": "Αποθήκευση βοηθού", + "notification": { + "connectionSaved": { + "title": "Η σύνδεση παρόχου αποθηκεύτηκε", + "message": "Το τελικό σημείο και τα κρυπτογραφημένα διαπιστευτήρια είναι έτοιμα για την επιλογή μοντέλου.", + "credentialsCleared": "Το τελικό σημείο άλλαξε, οπότε τα προηγούμενα διαπιστευτήρια εκκαθαρίστηκαν. Προσθέστε διαπιστευτήρια για τον νέο προορισμό εάν απαιτείται." + }, + "saved": { + "title": "Οι ρυθμίσεις βοηθού αποθηκεύτηκαν", + "message": "Το νέο μοντέλο και οι ρυθμίσεις διαθεσιμότητας είναι ενεργές." + }, + "error": { + "title": "Δεν ήταν δυνατή η αποθήκευση των ρυθμίσεων βοηθού" + } + } } } }, "tool": { "tasks": { - "title": "Εργασίες", "status": { "idle": "Αδρανές", "running": "Εκτελείται", @@ -4746,6 +6789,11 @@ "label": "Pings" } }, + "action": { + "run": "Εκτέλεση {name} τώρα", + "enable": "Ενεργοποίηση του {name}", + "disable": "Απενεργοποίηση του {name}" + }, "interval": { "seconds": "", "minutes": "", @@ -4761,13 +6809,7 @@ } } }, - "settings": { - "title": "Ρυθμίσεις εργασίας για {jobName}" - }, "field": { - "name": { - "label": "Όνομα" - }, "interval": { "label": "Διάστημα προγραμματισμού" }, @@ -4781,11 +6823,6 @@ "table": { "search": "Αναζήτηση {count} εργασιών..." }, - "action": { - "refresh": { - "label": "Ανανέωση" - } - }, "refresh": { "success": { "message": "Οι εργασίες ανανεώθηκαν επιτυχώς" @@ -4819,7 +6856,6 @@ } }, "api": { - "title": "API", "modal": { "createApiToken": { "title": "Δημιουργήθηκε token API", @@ -4845,7 +6881,6 @@ }, "table": { "header": { - "id": "Αναγνωριστικό (ID)", "createdBy": "Δημιουργήθηκε από", "actions": "Ενέργειες" } @@ -4901,43 +6936,12 @@ "availableTools": { "title": "Διαθέσιμα Εργαλεία", "description": "{count} εργαλεία διαθέσιμα. Αναπτύξτε μια κατηγορία για να δείτε μεμονωμένα εργαλεία και τις περιγραφές τους.", - "columnType": "Τύπος", - "columnName": "Εργαλείο", - "columnDescription": "Περιγραφή" - }, - "troubleshooting": { - "title": "Αντιμετώπιση προβλημάτων", - "missingHeader": { - "title": "\"Λείπει η κεφαλίδα ApiKey\"", - "description": "Ο πελάτης σας δεν στέλνει την κεφαλίδα {header}. Βεβαιωθείτε ότι η ενότητα {section} στη διαμόρφωση MCP είναι σωστή. Ορισμένοι πελάτες απαιτούν επανεκκίνηση μετά από αλλαγές στη διαμόρφωση." - }, - "invalidFormat": { - "title": "\"Μη έγκυρη μορφή ApiKey\"", - "description": "Βεβαιωθείτε ότι αντιγράψατε ολόκληρο το κλειδί API, όχι μόνο ένα μέρος του." - }, - "invalidKey": { - "title": "\"Μη έγκυρο κλειδί API\"", - "description": "Το αναγνωριστικό κλειδιού δεν βρέθηκε ή το token είναι λάθος. Τα κλειδιά API μπορούν να προβληθούν μόνο μία φορά κατά τη δημιουργία. Αν το χάσατε, διαγράψτε το παλιό κλειδί και δημιουργήστε ένα νέο." - }, - "connectionRefused": { - "title": "Απόρριψη σύνδεσης / χρονικό όριο", - "description": "Βεβαιωθείτε ότι η διεύθυνση URL είναι προσβάσιμη από τον πελάτη AI σας. Αν το Homarr εκτελείται πίσω από αντίστροφο διακομιστή μεσολάβησης ή σε Docker, χρησιμοποιήστε την εξωτερική διεύθυνση URL (όχι {localhost}). Βεβαιωθείτε ότι η θύρα είναι σωστή (προεπιλογή: 7575 για Docker)." - }, - "toolsNotAppearing": { - "title": "Τα εργαλεία δεν εμφανίζονται", - "description": "Ορισμένα εργαλεία απαιτούν συγκεκριμένες ενσωματώσεις για να διαμορφωθούν (π.χ. Docker, Overseerr). Η λίστα εργαλείων εξαρτάται από το τι είναι διαθέσιμο στην εγκατάσταση Homarr σας." + "filteredDescription": "{count} ταιριάζουν εργαλεία σε εκτεταμένες κατηγορίες.", + "search": "Εργαλεία αναζήτησης", + "noResults": { + "title": "Κανένα εργαλείο δεν ταιριάζει με αυτήν την αναζήτηση", + "description": "Κανένα εργαλείο MCP δεν ταιριάζει \"{search}\". Δοκιμάστε ένα όνομα, όνομα εργαλείου ή περιγραφή." } - }, - "copy": "Αντιγραφή", - "oneClick": { - "title": "Εγκατάσταση με ένα κλικ", - "subtitle": "Χρησιμοποιεί OAuth — πιστοποιηθείτε στο πρόγραμμα περιήγησής σας κατά την πρώτη χρήση", - "vsCode": "Εγκατάσταση στο VS Code", - "cursor": "Εγκατάσταση στο Cursor", - "copyUrl": "Αντιγραφή URL MCP", - "copied": "Αντιγράφηκε!", - "copyHint": "Για ChatGPT, Claude Code ή οποιονδήποτε πελάτη MCP", - "manualConfig": "Χειροκίνητη Διαμόρφωση" } } } @@ -4954,47 +6958,12 @@ "title": "Εξαγωγή ευαίσθητων δεδομένων", "warningTitle": "Αυτή η εξαγωγή περιέχει ολόκληρη τη βάση δεδομένων σας.", "warningBody": "Το αντίγραφο ασφαλείας περιλαμβάνει όλους τους χρήστες, μυστικά ενσωμάτωσης (κρυπτογραφημένα), κλειδιά API, διαμορφώσεις πινάκων και δεδομένα εφαρμογών. Αποθηκεύστε το εξαγόμενο αρχείο με ασφάλεια και μην το μοιράζεστε.", - "typePrompt": "Πληκτρολογήστε \"{phrase}\" για να συνεχίσετε", - "submit": "Εξαγωγή βάσης δεδομένων", - "cancel": "Ακύρωση" + "submit": "Εξαγωγή βάσης δεδομένων" } }, "import": { "title": "Επαναφορά βάσης δεδομένων", - "description": "Μεταφορτώστε ένα προηγουμένως εξαχθέν αντίγραφο ασφαλείας ZIP για να επαναφέρετε τη βάση δεδομένων σας. Αυτό θα αντικαταστήσει ολόκληρη τη βάση δεδομένων σας. Εάν το αντίγραφο ασφαλείας δημιουργήθηκε με διαφορετικό κλειδί κρυπτογράφησης, τα μυστικά θα επανακρυπτογραφηθούν αυτόματα.", - "warning": "Η επαναφορά ενός αντιγράφου ασφαλείας θα αντικαταστήσει πλήρως την τρέχουσα βάση δεδομένων σας και θα επανεκκινήσει την εφαρμογή. Αυτή η ενέργεια δεν μπορεί να αναιρεθεί.", - "dropzone": { - "title": "Αποθέστε το αντίγραφο ασφαλείας ZIP εδώ ή κάντε κλικ για περιήγηση", - "description": "Γίνονται δεκτά μόνο αρχεία .zip από αντίγραφο ασφαλείας Homarr SQLite" - }, - "changeFile": "Αλλαγή αρχείου", - "button": "Επαναφορά βάσης δεδομένων", - "success": { - "title": "Η επαναφορά ολοκληρώθηκε", - "message": "Η βάση δεδομένων επαναφέρθηκε επιτυχώς. Η εφαρμογή επανεκκινείται..." - }, - "error": "Αποτυχία εισαγωγής" - }, - "preview": { - "title": "Περιεχόμενα αντιγράφου ασφαλείας", - "exported": "Εξήχθη {date}", - "loading": "Ανάλυση αρχείου αντιγράφου ασφαλείας...", - "errorTitle": "Σφάλμα προεπισκόπησης", - "entity": "Οντότητα", - "count": "Πλήθος", - "boards": "Πίνακες", - "entities": { - "board": "Πίνακες", - "user": "Χρήστες", - "app": "Εφαρμογές", - "integration": "Ενσωματώσεις", - "item": "Γουίτζετς", - "media": "Πολυμέσα", - "search_engine": "Μηχανές αναζήτησης" - }, - "analyzeError": "Αποτυχία ανάλυσης αρχείου αντιγράφου ασφαλείας", - "invalidMissingMetadata": "Μη έγκυρο αντίγραφο ασφαλείας: λείπει το metadata.json", - "invalidMissingDb": "Μη έγκυρο αντίγραφο ασφαλείας: λείπει το db.sqlite" + "description": "Μεταφορτώστε ένα προηγουμένως εξαχθέν αντίγραφο ασφαλείας ZIP για να επαναφέρετε τη βάση δεδομένων σας. Αυτό θα αντικαταστήσει ολόκληρη τη βάση δεδομένων σας. Εάν το αντίγραφο ασφαλείας δημιουργήθηκε με διαφορετικό κλειδί κρυπτογράφησης, τα μυστικά θα επανακρυπτογραφηθούν αυτόματα." }, "restore": { "dropzone": { @@ -5004,29 +6973,20 @@ "analyzing": "Ανάλυση αντιγράφου ασφαλείας...", "changeFile": "Αλλαγή αρχείου", "continueToRestore": "Συνέχεια στην επαναφορά", - "tryAgain": "Προσπαθήστε ξανά", "analysisError": "Σφάλμα ανάλυσης", "preview": { "title": "Περιεχόμενα αντιγράφου ασφαλείας", "exported": "Εξήχθη {date}", "entity": "Οντότητα", "count": "Πλήθος", - "boards": "Πίνακες", "entities": { - "board": "Πίνακες", - "user": "Χρήστες", - "app": "Εφαρμογές", - "integration": "Ενσωματώσεις", - "item": "Γουίτζετς", - "media": "Πολυμέσα", - "search_engine": "Μηχανές αναζήτησης" + "item": "Γουίτζετς" }, "migrationsApplied": "{count} μετεγκατάσταση εφαρμόστηκε", "migrationsAppliedPlural": "{count} μετεγκαταστάσεις εφαρμόστηκαν", "migrationsOlderVersion": "Αυτό το αντίγραφο ασφαλείας ήταν από παλαιότερη έκδοση Homarr. Εφαρμόστηκε {count} μετεγκατάσταση σχήματος για να ενημερωθεί.", "migrationsOlderVersionPlural": "Αυτό το αντίγραφο ασφαλείας ήταν από παλαιότερη έκδοση Homarr. Εφαρμόστηκαν {count} μετεγκαταστάσεις σχήματος για να ενημερωθεί.", "migrationsUpToDate": "Το σχήμα βάσης δεδομένων είναι ενημερωμένο ({count} μετεγκαταστάσεις εφαρμόστηκαν)", - "upToDate": "Ενημερωμένο", "migrationsPending": "{count} σε εκκρεμότητα" }, "migration": { @@ -5037,21 +6997,21 @@ "title": "Καταστροφική ενέργεια", "warningTitle": "Αυτό θα αντικαταστήσει μόνιμα ολόκληρη τη βάση δεδομένων σας.", "warningBody": "Όλοι οι τρέχοντες πίνακες, χρήστες, εφαρμογές, ενσωματώσεις, ρυθμίσεις και συνεδρίες θα χαθούν. Αυτή η ενέργεια δεν μπορεί να αναιρεθεί. Η εφαρμογή θα επανεκκινήσει μετά την επαναφορά.", - "typePrompt": "Πληκτρολογήστε \"{phrase}\" για να συνεχίσετε", - "cancel": "Ακύρωση", "submit": "Επαναφορά βάσης δεδομένων" }, "progress": { "title": "Επαναφορά βάσης δεδομένων...", - "extracting": "Εξαγωγή αρχείου αντιγράφου ασφαλείας", - "migrating": "Εφαρμογή μετεγκαταστάσεων βάσης δεδομένων", - "encrypting": "Επανακρυπτογράφηση μυστικών ενσωμάτωσης", - "swapping": "Αντικατάσταση αρχείου βάσης δεδομένων", - "restarting": "Επανεκκίνηση διακομιστή" + "restarting": "Επανεκκίνηση διακομιστή", + "relogin": "Η επαναφορά της βάσης δεδομένων ακύρωσε την τρέχουσα συνεδρία σας. Το Homarr θα σας στείλει για να συνδεθείτε όταν ο διακομιστής είναι έτοιμος." }, "complete": { "title": "Η επαναφορά ολοκληρώθηκε", - "message": "Η βάση δεδομένων επαναφέρθηκε επιτυχώς. Ο διακομιστής επανεκκινείται — παρακαλώ ανανεώστε τη σελίδα σε λίγα δευτερόλεπτα." + "message": "Η βάση δεδομένων επαναφέρθηκε επιτυχώς. Ο διακομιστής επανεκκινείται — παρακαλώ ανανεώστε τη σελίδα σε λίγα δευτερόλεπτα.", + "button": "Συνδεθείτε τώρα" + }, + "timeout": { + "title": "Ο διακομιστής δεν επέστρεψε online", + "message": "Η επαναφορά της βάσης δεδομένων τελείωσε, αλλά το Homarr δεν ετοιμάστηκε ξανά. Δοκιμάστε ξανά τον έλεγχο σύνδεσης ή ανανεώστε τη σελίδα χειροκίνητα." }, "failed": { "title": "Αποτυχία επαναφοράς" @@ -5059,6 +7019,9 @@ "invalidMissingMetadata": "Μη έγκυρο αντίγραφο ασφαλείας: λείπει το metadata.json", "invalidMissingDb": "Μη έγκυρο αντίγραφο ασφαλείας: λείπει το db.sqlite", "analyzeError": "Αποτυχία ανάλυσης αντιγράφου ασφαλείας" + }, + "confirm": { + "typePrompt": "Πληκτρολογήστε \"{phrase}\" για να συνεχίσετε" } } }, @@ -5093,7 +7056,11 @@ "toggleBoardEdit": "Εναλλαγή επεξεργασίας πίνακα", "toggleColorScheme": "Εναλλαγή φωτεινού/σκοτεινού", "saveNotebook": "Αποθήκευση σημειωματάριου (μόνο μέσα στο γραφικό στοιχείο σημειωματάριου)", - "openSpotlight": "Άνοιγμα αναζήτησης" + "openSpotlight": "Άνοιγμα αναζήτησης", + "openSpotlightApps": "Άνοιγμα αναζήτησης εφαρμογών", + "openSpotlightAssistant": "Άνοιγμα βοηθητικής λειτουργίας", + "openSpotlightPreferences": "Άνοιγμα λειτουργίας προτιμήσεων", + "openAssistant": "Άνοιγμα Βοηθού" }, "note": "Συμβουλή: Το Mod αναφέρεται τόσο στο πλήκτρο Ctrl όσο και στο πλήκτρο ⌘ στο macOS" } @@ -5103,6 +7070,63 @@ }, "docker": { "title": "Κοντέινερ", + "reconciliation": { + "title": "Υποβοηθούμενη εγκατάσταση Docker", + "suggestions": "{count, plural, =0 {Καμία πρόταση} one {# πρόταση} other {# προτάσεις}}", + "attention": "{count} χρειάζεται προσοχή", + "endpointUnavailable": "Ορισμένες υπηρεσίες δεν ήταν δυνατό να ελεγχθούν, επειδή αυτά τα τελικά σημεία δεν είναι διαθέσιμα: {names}", + "empty": "Δεν βρέθηκαν ορατές υπηρεσίες Docker.", + "emptyFilter": "Καμία υπηρεσία δεν ταιριάζει με αυτή την προβολή.", + "ambiguous": "Περισσότερα από ένα υπάρχον στοιχείο θα μπορούσε να ταιριάζει με αυτή την υπηρεσία. Homarr δεν θα επιλέξει ένα αυτόματα.", + "filter": { + "attention": "Χρειάζεται προσοχή", + "represented": "Ήδη ρυθμισμένο", + "all": "Όλα" + }, + "state": { + "newRecognized": "Έτοιμο για σύνδεση", + "newApp": "Νέα υπηρεσία", + "represented": "Ήδη εκπροσωπούμενη", + "linked": "Συνδεδεμένο", + "moved": "Η διεύθυνση άλλαξε" + }, + "url": { + "manual": "Εισάγετε μια διεύθυνση χειροκίνητα" + }, + "health": { + "layer": { + "docker": "Προσάρτηση", + "integrationConfiguration": "Ενσωμάτωση", + "authentication": "Ταυτοποίηση", + "apiRequest": "API", + "appRepresentation": "Εφαρμογή", + "widgetConfiguration": "Widget", + "widgetQuery": "Ερώτημα widget" + }, + "status": { + "available": "Διαθέσιμο", + "configured": "Διαμορφωμένο", + "linked": "Συνδεδεμένο", + "missing": "Λείπει", + "changed": "Άλλαξε", + "unused": "Δεν χρησιμοποιείται", + "notApplicable": "Δεν εφαρμόζεται.", + "notObserved": "Δεν παρατηρήθηκε" + } + }, + "action": { + "review": "Επανεξέταση", + "dismiss": "Απόρριψη", + "restoreDismissed": "Η επαναφορά απορρίφθηκε ({count})", + "setupIntegration": "Ρύθμιση ενσωμάτωσης", + "reviewIntegration": "Επανεξέταση ενσωμάτωσης", + "viewRepresentation": "Ρύθμιση προβολής" + }, + "loadError": { + "title": "Ο βοηθός εγκατάστασης Docker δεν μπόρεσε να φορτωθεί", + "message": "Οι πληροφορίες της υπηρεσίας Docker δεν είναι διαθέσιμες. Δοκιμάστε ξανά χωρίς να φύγετε από αυτή τη σελίδα." + } + }, "table": { "updated": "Ενημερώθηκε {when}", "refresh": { @@ -5115,9 +7139,6 @@ "totalMemory": "Συνολική μνήμη: {memory}" }, "field": { - "name": { - "label": "Όνομα" - }, "state": { "label": "Κατάσταση", "option": { @@ -5131,9 +7152,6 @@ } }, "stats": { - "cpu": { - "label": "CPU" - }, "memory": { "label": "Μνήμη" } @@ -5196,8 +7214,11 @@ } }, "remove": { - "label": "Αφαίρεση", "confirm": "Πατήστε ξανά για μόνιμη αφαίρεση", + "confirmation": { + "title": "{count, plural, one {Αφαιρέστε # εμπορευματοκιβώτιο?} other {Αφαιρέστε # εμπορευματοκιβώτια?}}", + "message": "{count, plural, one {Αυτό αφαιρεί μόνιμα # εμπορευματοκιβώτιο: {names}} other {Αυτό αφαιρεί μόνιμα # εμπορευματοκιβώτια: {names}}}" + }, "notification": { "success": { "title": "Τα κοντέινερ αφαιρέθηκαν", @@ -5209,8 +7230,13 @@ } } }, + "result": { + "failure": { + "title": "Κάποιες ενέργειες περιέκτη απέτυχε", + "message": "{total, plural, one {{failed} από # ενέργεια απέτυχε: {names}} other {{failed} από # ενέργειες απέτυχε: {names}}}" + } + }, "refresh": { - "label": "Ανανέωση", "notification": { "success": { "title": "Τα κοντέινερ ανανεώθηκαν", @@ -5241,18 +7267,33 @@ }, "error": { "internalServerError": "Αποτυχία λήψης κοντέινερ Docker", + "endpointUnavailable": "{count, plural, one {# Τελικό σημείο Docker μη διαθέσιμο: {names}} other {# Τελικά σημεία Docker δεν είναι διαθέσιμα: {names}}}", "noColumns": "Επιλέξτε τουλάχιστον μία στήλη στις ρυθμίσεις του widget" } }, "kubernetes": { + "context": { + "label": "Περιεχόμενα Kubernetes", + "loadError": { + "title": "Δεν ήταν δυνατή η φόρτωση των περιεχομένων του Kubernetes", + "message": "Οι πληροφορίες περιβάλλοντος δεν είναι διαθέσιμες. Δοκιμάστε ξανά χωρίς να φύγετε από αυτή τη σελίδα." + }, + "status": { + "available": "Διαθέσιμο", + "degraded": "Metrics unavailable", + "unavailable": "Unavailable" + }, + "unavailable": "Αυτό το πλαίσιο Kubernetes δεν μπορεί να επιτευχθεί. Επιλέξτε ένα άλλο περιβάλλον ή επιβεβαιώστε τα διαπιστευτήρια και το τελικό σημείο.", + "metricsUnavailable": "Αυτό το πλαίσιο είναι προσβάσιμο, αλλά ο διακομιστής μετρικών δεν είναι διαθέσιμος. Η απογραφή παραμένει διαθέσιμη χωρίς ζωντανή χρήση CPU και μνήμης." + }, "cluster": { "title": "Πίνακας ελέγχου συμπλέγματος", "label": "Σύμπλεγμα", "providers": "Πάροχοι", "version": "Έκδοση", - "architecture": "Αρχιτεκτονική", "capacity": { "title": "Χωρητικότητα", + "metricsUnavailable": "Ο διακομιστής μετρικών δεν είναι διαθέσιμος. Τα αποθέματα και η δεσμευμένη χωρητικότητα παραμένουν ορατά, αλλά η ζωντανή χρήση CPU και μνήμης δεν μπορεί να εμφανιστεί.", "resource": { "reserved": "Δεσμευμένα", "used": "" @@ -5271,38 +7312,10 @@ } }, "nodes": { - "label": "Κόμβοι", "field": { - "name": { - "label": "Όνομα" - }, - "state": { - "label": "Κατάσταση", - "option": { - "ready": "Έτοιμος", - "NotReady": "Μη έτοιμο" - } - }, - "cpu": { - "label": "CPU" - }, - "memory": { - "label": "RAM" - }, - "pods": { - "label": "Pods" - }, - "operatingSystem": { - "label": "OS" - }, - "architecture": { - "label": "Αρχιτεκτονική" - }, + "metricsUnavailable": "Unavailable", "kubernetesVersion": { "label": "Έκδοση Kubernetes" - }, - "creationTimestamp": { - "label": "" } }, "table": { @@ -5310,43 +7323,17 @@ } }, "namespaces": { - "label": "Χώροι ονομάτων", - "field": { - "name": { - "label": "Όνομα" - }, - "state": { - "label": "Κατάσταση", - "option": { - "active": "Ενεργός", - "terminating": "Τερματίζεται" - } - }, - "creationTimestamp": { - "label": "" - } - }, "table": { "search": "Αναζήτηση {count} χώρων ονομάτων" } }, "ingresses": { - "label": "Ingress", "field": { - "name": { - "label": "Όνομα" - }, - "namespace": { - "label": "Χώρος ονομάτων" - }, "className": { "label": "Όνομα κλάσης" }, "rulesAndPaths": { "label": "Κανόνες και διαδρομές" - }, - "creationTimestamp": { - "label": "" } }, "table": { @@ -5354,17 +7341,7 @@ } }, "services": { - "label": "Υπηρεσίες", "field": { - "name": { - "label": "Όνομα" - }, - "namespace": { - "label": "Χώρος ονομάτων" - }, - "type": { - "label": "Τύπος" - }, "ports": { "label": "Θύρες" }, @@ -5373,9 +7350,6 @@ }, "clusterIP": { "label": "IP συμπλέγματος" - }, - "creationTimestamp": { - "label": "" } }, "table": { @@ -5383,25 +7357,12 @@ } }, "pods": { - "label": "Pods", "field": { - "name": { - "label": "Όνομα" - }, - "namespace": { - "label": "Χώρος ονομάτων" - }, "image": { "label": "Εικόνα" }, "applicationType": { "label": "Τύπος εφαρμογής" - }, - "status": { - "label": "Κατάσταση" - }, - "creationTimestamp": { - "label": "" } }, "table": { @@ -5409,51 +7370,17 @@ } }, "secrets": { - "label": "Μυστικά", - "field": { - "name": { - "label": "Όνομα" - }, - "namespace": { - "label": "χώρος ονομάτων" - }, - "type": { - "label": "τύπος" - }, - "creationTimestamp": { - "label": "" - } - }, "table": { "search": "Αναζήτηση {count} μυστικών" } }, "configmaps": { - "label": "ConfigMaps", - "field": { - "name": { - "label": "Όνομα" - }, - "namespace": { - "label": "χώρος ονομάτων" - }, - "creationTimestamp": { - "label": "" - } - }, "table": { "search": "Αναζήτηση {count} ConfigMaps" } }, "volumes": { - "label": "Τόμοι", "field": { - "name": { - "label": "Όνομα" - }, - "namespace": { - "label": "Χώρος ονομάτων" - }, "accessModes": { "label": "Λειτουργίες πρόσβασης" }, @@ -5468,12 +7395,6 @@ }, "volumeName": { "label": "Όνομα τόμου" - }, - "status": { - "label": "Κατάσταση" - }, - "creationTimestamp": { - "label": "" } }, "table": { @@ -5482,6 +7403,29 @@ }, "error": { "internalServerError": "Αποτυχία ανάκτησης δεδομένων Kubernetes" + }, + "field": { + "name": { + "label": "Όνομα εργασίας" + }, + "namespace": { + "label": "Χώρος Ονομάτων" + }, + "creationTimestamp": { + "label": "Δημιουργήθηκε" + }, + "state": { + "label": "Κατάσταση" + }, + "status": { + "label": "Κατάσταση" + }, + "type": { + "label": "Τύπος πελάτη λήψεων" + }, + "architecture": { + "label": "Αρχιτεκτονική" + } } }, "permission": { @@ -5515,71 +7459,27 @@ }, "navigationStructure": { "manage": { - "workshop": { - "label": "Workshop" - }, "label": "Διαχείριση", - "boards": { - "label": "Πίνακες" - }, - "integrations": { - "label": "Ενσωματώσεις", + "custom-widgets": { "edit": { - "label": "Επεξεργασία" + "flow": { + "label": "Ροή" + } }, - "new": { - "label": "Νέο" - } - }, - "search-engines": { - "label": "Μηχανές αναζήτησης", - "new": { - "label": "Νέο" + "workshop": { + "label": "Εργαστήριο" }, - "edit": { - "label": "Επεξεργασία" - } - }, - "medias": { - "label": "Πολυμέσα" - }, - "apps": { - "label": "Εφαρμογές", - "new": { - "label": "Νέο" - }, - "edit": { - "label": "Επεξεργασία" + "publish": { + "label": "Δημοσίευση στο Workshop" } }, "users": { - "label": "Χρήστες", - "create": { - "label": "Δημιουργία" - }, "general": "Γενικά", - "security": "Ασφάλεια", - "board": "Πίνακες", - "groups": { - "label": "Ομάδες" - }, - "invites": { - "label": "Προσκλήσεις" - } + "security": "Ασφάλεια" }, "tools": { "label": "Εργαλεία", - "tasks": { - "label": "Εργασίες" - }, - "docker": { - "label": "Docker", - "logs": { - "label": "Αρχεία καταγραφής" - } - }, "kubernetes": { - "label": "Kubernetes", "nodes": { "label": "Κόμβοι" }, @@ -5605,11 +7505,7 @@ "label": "Τόμοι" } }, - "logs": { - "label": "Logs" - }, "certificates": { - "label": "Πιστοποιητικά", "hostnames": { "label": "Ονόματα host" } @@ -5620,12 +7516,60 @@ }, "about": { "label": "Σχετικά" + }, + "assistant": { + "label": "Βοηθός" } } }, "search": { "placeholder": "Αναζήτηση για οτιδήποτε", "nothingFound": "Δεν βρέθηκε τίποτα", + "modePicker": { + "search": { + "label": "Αναζήτηση", + "placeholder": "Αναζήτηση εφαρμογών, πινάκων, σελίδων, εντολών και προτιμήσεων" + }, + "apps": { + "label": "Εφαρμογές", + "placeholder": "Αναζήτηση εφαρμογών, πινάκων και ενσωματώσεων" + }, + "command": { + "label": "Εντολές", + "placeholder": "Ενέργειες και εντολές αναζήτησης" + }, + "preferences": { + "label": "Ρυθμίσεις", + "placeholder": "Αναζήτηση και αλλαγή προτιμήσεων" + }, + "assistant": { + "label": "Βοηθός", + "placeholder": "Ερώτηση Βοηθού" + }, + "external": { + "label": "Ιστός", + "placeholder": "Αναζήτηση με εξωτερική μηχανή αναζήτησης" + }, + "media": { + "label": "Πολυμέσα", + "placeholder": "Αναζήτηση για μια ταινία ή εμφάνιση", + "fallback": "Αναζήτηση πολυμέσων για «{query}»" + }, + "userGroup": { + "label": "Άτομα", + "placeholder": "Αναζήτηση χρηστών και ομάδων" + }, + "continueWith": "Συνέχεια με", + "dialogAriaLabel": "Μενού εντολής {mode}", + "navigationLabel": "Λειτουργίες αναζήτησης", + "modeAriaLabel": "Λειτουργία {mode}", + "resultsAriaLabel": "Αποτελέσματα {mode}", + "footer": { + "navigate": "Navigate", + "open": "Άνοιγμα", + "close": "Κλείσιμο" + } + }, "error": { "fetch": "Παρουσιάστηκε σφάλμα κατά τη λήψη δεδομένων" }, @@ -5634,7 +7578,6 @@ "help": "Αναζήτηση εφαρμογών, ενσωματώσεων ή πινάκων", "group": { "app": { - "title": "Εφαρμογές", "children": { "action": { "open": { @@ -5650,7 +7593,6 @@ } }, "board": { - "title": "Πίνακες", "children": { "action": { "open": { @@ -5670,9 +7612,6 @@ "title": "Επιλέξτε μια ενέργεια για τον πίνακα" } } - }, - "integration": { - "title": "Ενσωματώσεις" } } }, @@ -5701,9 +7640,6 @@ "newBoard": { "label": "Δημιουργία νέου πίνακα" }, - "importBoard": { - "label": "Εισαγωγή πίνακα" - }, "newApp": { "label": "Δημιουργία νέας εφαρμογής" }, @@ -5773,7 +7709,6 @@ } }, "defaultSearchEngineId": { - "label": "Προεπιλεγμένη μηχανή αναζήτησης", "children": { "detail": { "title": "Επιλέξτε την προεπιλεγμένη μηχανή αναζήτησης" @@ -5781,7 +7716,6 @@ } }, "openSearchInNewTab": { - "label": "Άνοιγμα αποτελεσμάτων αναζήτησης σε νέα καρτέλα", "children": { "detail": { "title": "Άνοιγμα αποτελεσμάτων αναζήτησης σε νέα καρτέλα" @@ -5789,7 +7723,6 @@ } }, "ddgBangs": { - "label": "Ενεργοποίηση bangs DuckDuckGo", "children": { "detail": { "title": "Ενεργοποίηση bangs DuckDuckGo" @@ -5804,6 +7737,13 @@ } } }, + "byteUnitSystem": { + "children": { + "detail": { + "title": "Επιλέξτε τις μονάδες μεγέθους δεδομένων" + } + } + }, "homeBoardId": { "label": "Αρχικός πίνακας", "children": { @@ -5821,7 +7761,6 @@ } }, "pingIconsEnabled": { - "label": "Χρήση εικονιδίων για pings", "children": { "detail": { "title": "Χρήση εικονιδίων για pings" @@ -5829,7 +7768,6 @@ } }, "enableRightClickOnWidgets": { - "label": "Ενεργοποίηση δεξιού κλικ στα widget", "children": { "detail": { "title": "Ενεργοποίηση δεξιού κλικ στα widget" @@ -5857,6 +7795,7 @@ "description": "Αρχίστε να πληκτρολογείτε για να αναζητήσετε τις ενσωματώσεις αιτημάτων πολυμέσων σας", "disabled": { "noIntegration": "Προσθέστε μια ενσωμάτωση Overseerr, Jellyseerr ή Seerr για να ενεργοποιήσετε την αναζήτηση πολυμέσων.", + "signInRequired": "Συνδεθείτε για να αναζητήσετε ενσωματώσεις αιτημάτων πολυμέσων.", "scoped": "Αυτό το widget δεν έχει προσβάσιμη ενσωμάτωση αιτημάτων πολυμέσων." } } @@ -5873,7 +7812,6 @@ "help": "Χρήση εξωτερικής μηχανής αναζήτησης", "group": { "searchEngine": { - "title": "Μηχανές αναζήτησης", "tipDdgBangs": "Συμβουλή: Μπορείτε να χρησιμοποιήσετε και bangs DuckDuckGo εδώ, π.χ. !something", "bang": { "searchWithQuery": "Αναζήτηση \"{query}\" με {label}", @@ -5924,20 +7862,6 @@ "group": { "mode": { "title": "" - }, - "help": { - "title": "Βοήθεια", - "option": { - "documentation": { - "label": "Τεκμηρίωση" - }, - "submitIssue": { - "label": "Υποβολή ζητήματος" - }, - "discord": { - "label": "Κοινότητα Discord" - } - } } } }, @@ -5949,9 +7873,10 @@ "other": { "label": "Αναζήτηση με άλλη μηχανή αναζήτησης" }, - "no-default": { - "label": "Χωρίς προεπιλεγμένη μηχανή", - "description": "Ορίστε μια προεπιλεγμένη μηχανή αναζήτησης στις προτιμήσεις" + "no-engines": { + "label": "Δεν έχουν ρυθμιστεί μηχανές αναζήτησης", + "descriptionCreate": "Προσθέστε μια μηχανή αναζήτησης για αναζήτηση από το μενού εντολών", + "descriptionUnavailable": "Ζητήστε από το διαχειριστή να ρυθμίσει μια μηχανή αναζήτησης" }, "search": { "label": "Αναζήτηση για «{query}» με {name}" @@ -6031,7 +7956,6 @@ "help": "Αναζήτηση χρηστών ή ομάδων", "group": { "user": { - "title": "Χρήστες", "children": { "action": { "detail": { @@ -6044,7 +7968,6 @@ } }, "group": { - "title": "Ομάδες", "children": { "action": { "detail": { @@ -6068,9 +7991,6 @@ "engine": { "search": "Εύρεση μηχανής αναζήτησης", "field": { - "name": { - "label": "Όνομα" - }, "short": { "label": "Σύντομο" }, @@ -6083,12 +8003,19 @@ }, "page": { "list": { - "title": "Μηχανές αναζήτησης", + "ariaLabel": "Διαμορφωμένες μηχανές αναζήτησης", "noResults": { "title": "Δεν υπάρχουν ακόμα μηχανές αναζήτησης", - "action": "Δημιουργήστε την πρώτη σας μηχανή αναζήτησης" + "description": "Οι μηχανές αναζήτησης αφήνουν το Spotlight να στείλει ένα ερώτημα σε μια τοποθεσία ή συνδεδεμένη υπηρεσία.", + "action": "Δημιουργήστε την πρώτη σας μηχανή αναζήτησης", + "filteredTitle": "Καμία μηχανή αναζήτησης δεν ταιριάζει με την αναζήτησή σας", + "filteredDescription": "Καμία μηχανή αναζήτησης δεν ταιριάζει με το \"{search}\". Δοκιμάστε ένα άλλο όνομα ή URL." }, - "interactive": "Διαδραστική, χρησιμοποιεί ενσωμάτωση" + "interactive": "Διαδραστική, χρησιμοποιεί ενσωμάτωση", + "type": { + "generic": "Πρότυπο URL", + "fromIntegration": "Ενσωμάτωση" + } }, "create": { "title": "Νέα μηχανή αναζήτησης", @@ -6107,11 +8034,9 @@ "title": "Επεξεργασία μηχανής αναζήτησης", "notification": { "success": { - "title": "Οι αλλαγές εφαρμόστηκαν επιτυχώς", "message": "Η μηχανή αναζήτησης αποθηκεύτηκε επιτυχώς" }, "error": { - "title": "Δεν ήταν δυνατή η εφαρμογή των αλλαγών", "message": "Δεν ήταν δυνατή η αποθήκευση της μηχανής αναζήτησης" } }, @@ -6250,6 +8175,10 @@ } }, "log": { + "context": { + "widgetError": "Το widget ανέφερε ένα σφάλμα γύρω από αυτή τη φορά", + "expiredWidgetError": "Καταγραφές γύρω από αυτό το σφάλμα widget δεν διατηρούνται πλέον" + }, "level": { "option": { "debug": "Debug", @@ -6261,7 +8190,6 @@ }, "onboardingTour": { "learnMore": "Διαβάστε τα έγγραφα", - "next": "Επόμενο", "prev": "Πίσω", "done": "Τέλος", "skip": "Παράλειψη περιήγησης", @@ -6325,5 +8253,359 @@ "description": "Αλλάξτε τον συνδυασμό χρωμάτων σας, τη γλώσσα, τον αρχικό πίνακα και τις προτιμήσεις σας. Μπορείτε επίσης να μεταβείτε στην περιοχή διαχείρισης από εδώ." } } + }, + "metadata": { + "description": "Ένας αυτόνομος πίνακας εργαλείων για τη στοίβα *arr και ολόκληρη την αρχική σας σελίδα. Ενσωματώνεται με υπηρεσίες 50+, γραφικά συστατικά, χωρίς αρχεία διαμόρφωσης.", + "dashboardTitle": "Πίνακας ελέγχου {appName}" + }, + "assistant": { + "title": "Βοηθός", + "open": "Άνοιγμα Βοηθού", + "close": "Κλείσιμο βοηθού", + "minimize": "Ελαχιστοποίηση βοηθού", + "spotlight": "Ερώτηση Βοηθού", + "spotlightDescription": "Πληκτρολογήστε και στείλτε μια προτροπή χωρίς να αφήσετε το μενού εντολής.", + "spotlightPrompt": { + "title": "Ερώτηση Βοηθού", + "description": "Πληκτρολογήστε μια παραπάνω προτροπή. Το Enter το στέλνει στο παρασκήνιο.", + "send": "Αποστολή ερώτησης", + "empty": "Πληκτρολογήστε μια προτροπή παραπάνω" + }, + "unavailable": { + "checking": "Έλεγχος διαθεσιμότητας του βοηθού…", + "error": "Η διαθεσιμότητα του βοηθού δεν μπορεί να ελεγχθεί. Δοκιμάστε ξανά.", + "notConfigured": "Ένας διαχειριστής πρέπει πρώτα να ρυθμίσει και να ενεργοποιήσει τον βοηθό.", + "signIn": "Συνδεθείτε για να χρησιμοποιήσετε τον Βοηθό." + }, + "newConversation": "Νέα συνομιλία", + "conversations": "Συζητήσεις", + "conversationActions": "Ενέργειες συνομιλίας", + "searchConversations": "Αναζήτηση συνομιλιών", + "noMatchingConversations": "Δεν υπάρχουν αντίστοιχες συνομιλίες", + "moreActions": "Περισσότερες ενέργειες απόκρισης", + "renameConversation": { + "action": "Μετονομασία", + "label": "Όνομα συνομιλίας", + "save": "Αποθήκευση ονόματος", + "failedTitle": "Η συνομιλία δεν μπόρεσε να μετονομαστεί", + "failedDescription": "Το Homarr δεν μπόρεσε να μετονομάσει αυτή τη συνομιλία. Δοκιμάστε ξανά." + }, + "deleteConversation": { + "title": "Διαγραφή συνομιλίας?", + "description": "Το «{title}» και τα μηνύματά του θα διαγραφούν οριστικά.", + "failedTitle": "Δεν ήταν δυνατή η διαγραφή της συνομιλίας", + "failedDescription": "Το Homarr δεν μπόρεσε να διαγράψει αυτή τη συνομιλία. Δοκιμάστε ξανά." + }, + "closeHistory": "Κλείσιμο ιστορικού συνομιλιών", + "openHistory": "Άνοιγμα ιστορικού συνομιλιών", + "emptyTitle": "Τι μπορώ να βοηθήσω με?", + "emptyDescription": "Ρωτήστε για τις ρυθμίσεις του Homarr, επιθεωρήστε δεδομένα ζωντανών παραστάσεων ή εγκρίνετε ενέργειες όταν θέλετε να κάνω μια αλλαγή.", + "suggestions": { + "health": { + "label": "Έλεγχος υγείας υπηρεσίας", + "prompt": "Ελέγξτε τις ενσωματώσεις μου και συνοψίστε οτιδήποτε χρειάζεται προσοχή." + }, + "explore": { + "label": "Εξερευνήστε μου Homarr", + "prompt": "Δείξτε μου τι μπορώ να δω και να διαχειριστώ σε αυτό το παράδειγμα του Homarr." + }, + "media": { + "label": "Εύρεση πολυμέσων για αίτημα", + "prompt": "Βοηθήστε με να βρω μια ταινία ή μια σειρά για να ζητήσω." + }, + "style": { + "label": "Βελτίωση ενός ταμπλό", + "prompt": "Βοηθήστε με να βελτιώσω την εμφάνιση ενός πίνακα ή προσαρμοσμένο CSS. Δείξτε μου τα διοικητικά συμβούλια μου πρώτα, στη συνέχεια, διατηρήστε τις τρέχουσες ρυθμίσεις μου ενώ κάνουμε την αλλαγή." + }, + "designWidget": { + "label": "Σχεδιάστε ένα widget", + "prompt": "Δημιουργία και εγκατάσταση προσαρμοσμένου γραφικού στοιχείου για " + } + }, + "composerPlaceholder": "Ρωτήστε τον βοηθό…", + "runtime": { + "model": "Μοντέλο", + "searchModels": "Αναζήτηση μοντέλων", + "noModels": "Δεν υπάρχουν διαθέσιμα μοντέλα", + "otherModels": "Άλλα μοντέλα", + "imageInput": "Αποδέχεται την είσοδο εικόνας", + "thinking": "Λειτουργία σκέψης", + "reasoning": { + "auto": "Αυτόματο", + "none": "Ανενεργό", + "minimal": "Ελάχιστα", + "low": "Χαμηλή", + "medium": "Μεσαίο", + "high": "Υψηλή" + } + }, + "providerQuota": { + "title": "Πάροχος Homarr", + "communityWorkshop": "Εργαστήριο Κοινότητας", + "dailyAllowance": "Ημερήσιο δικαίωμα αποζημίωσης", + "remainingLabel": "Απομένουν {remaining} από {limit} αιτήματα παρόχου του Homarr", + "loading": "Φόρτωση δικαιώματος παροχής Homarr", + "signInRequired": "Απαιτείται σύνδεση εργαστηρίου για τον πάροχο Homarr", + "signInDescription": "Συνδεθείτε με το GitHub μέσω του Κοινοτικού Εργαστηρίου για να λάβετε την ξεχωριστή ημερήσια αποζημίωσή σας.", + "exhaustedDescription": "Το επίδομα παροχής Homarr χρησιμοποιείται για σήμερα. Επαναφέρει τα μεσάνυχτα UTC.", + "unavailableDescription": "Συνδεθείτε στο Εργαστήρι ή περιμένετε το επίδομα παροχέα Homarr για επαναφορά.", + "signIn": "Συνδεθείτε με το GitHub", + "signInError": "Η σύνδεση με το GitHub απέτυχε. Προσπαθήστε ξανά σε λίγο.", + "loadError": "Το επίδομα παροχής Homarr δεν μπόρεσε να φορτωθεί.", + "reset": "Επαναφορά {relative} στο ", + "toolCalls": "Κάθε αίτημα μοντέλου και ολοκληρωμένο εργαλείο κλήσης χρησιμοποιεί ένα αίτημα.", + "retry": "Επαναφόρτωση επιδόματος", + "level": { + "ok": "ΟΚ", + "warning": "Προειδοποίηση", + "bad": "Χαμηλή", + "dead": "Χρησιμοποιείται" + } + }, + "stop": "Διακοπή απάντησης", + "send": "Αποστολή μηνύματος", + "copy": "Αντιγραφή απάντησης", + "copyMessage": "Αντιγραφή μηνύματος", + "editMessage": "Επεξεργασία μηνύματος", + "updateMessage": "Ενημέρωση μηνύματος", + "regenerate": "Αναδημιουργία απάντησης", + "helpful": "Χρήσιμο", + "notHelpful": "Δεν είναι χρήσιμο", + "readAloud": "Διαβάστε δυνατά την απάντηση", + "stopReading": "Διακοπή απάντησης ανάγνωσης", + "feedbackError": "Δεν ήταν δυνατή η αποθήκευση των σχολίων σας. Δοκιμάστε ξανά.", + "exportMarkdown": "Εξαγωγή ως Markdown", + "exportConversation": { + "action": "Εξαγωγή συνομιλίας ως Markdown", + "failedTitle": "Δεν ήταν δυνατή η εξαγωγή της συνομιλίας", + "failedDescription": "Το Homarr δεν μπόρεσε να φορτώσει αυτήν τη συνομιλία. Δοκιμάστε ξανά." + }, + "reasoning": "Σκέψη", + "previousResponse": "Προηγούμενη απάντηση", + "nextResponse": "Επόμενη απάντηση", + "removeAttachment": "Αφαίρεση συνημμένου", + "downloadFile": "Λήψη {name}", + "attachedImage": "Συνημμένη εικόνα", + "externalImageBlocked": "Εξωτερική εικόνα μπλοκαρισμένη για προστασία προσωπικών δεδομένων", + "image": { + "loading": "Φόρτωση εικόνας", + "failed": "Δεν ήταν δυνατή η φόρτωση της εικόνας.", + "retry": "Δοκιμάστε ξανά την εικόνα" + }, + "quoteSelection": "Παράθεση", + "dismissQuote": "Αφαίρεση παράθεσης", + "attachments": { + "add": "Επισύναψη εικόνας ή εγγράφου", + "errorTitle": "Δεν ήταν δυνατή η προσθήκη συνημμένου", + "imageUnsupported": "Το επιλεγμένο μοντέλο δεν υποστηρίζει είσοδο εικόνας." + }, + "mentions": { + "menu": "Προσθήκη περιβάλλοντος Homarr", + "context": "Πλαίσιο", + "app": "Εφαρμογές", + "integration": "Ενσωματώσεις", + "board": "Πίνακες", + "widget": "Widget", + "tools": "Διαθέσιμα εργαλεία" + }, + "markdown": { + "diagram": "Διάγραμμα", + "renderingDiagram": "Διάγραμμα αποτύπωσης…", + "diagramUnavailable": "Δεν ήταν δυνατή η απόδοση αυτού του διαγράμματος." + }, + "commands": { + "menu": "Βοηθητικές εντολές", + "health": "Προετοιμάστε έναν έλεγχο υπηρεσιών-υγείας", + "explore": "Προετοιμάστε μια επισκόπηση αυτής της παρουσίας του Homarr", + "media": "Προετοιμάστε μια αναζήτηση πολυμέσων", + "style": "Προετοιμάστε μια εμφάνιση του πίνακα ή προσαρμοσμένη αλλαγή CSS", + "designWidget": "Προετοιμάστε μια προτροπή κατασκευής προσαρμοσμένου γραφικού στοιχείου" + }, + "usage": { + "tokens": "μάρκες", + "contextWindow": "Παράθυρο πλαισίου", + "requestDetails": "Λεπτομέρειες αιτήματος", + "used": "Τελευταίο βήμα", + "remaining": "Απομένουν", + "capacity": "Χωρητικότητα", + "input": "Input", + "output": "Έξοδος", + "cached": "Προσωρινή αποθήκευση", + "cacheWrite": "Εγγραφή κρύπτης", + "reasoning": "Αιτιολόγηση", + "inputShort": "σε", + "outputShort": "έξω", + "cachedShort": "cached", + "reasoningShort": "συλλογιστική", + "firstOutput": "Πρώτη έξοδος", + "homarrTiming": "Παρατηρήθηκε Homarr", + "endToEnd": "Τέλος στο τέλος", + "observedThroughput": "Παρατηρούμενη ροή", + "providerTiming": "Παρόχος που αναφέρθηκε", + "loadingProviderDetails": "Φόρτωση λεπτομερειών γενιάς…", + "providerDetailsPending": "OpenRouter εξακολουθεί να επεξεργάζεται κάποιες λεπτομέρειες γενιάς. Ανοίξτε ξανά για να προσπαθήσετε.", + "providerLatency": "Ύψος του παρόχου", + "generationTime": "Χρόνος δημιουργίας", + "moderationLatency": "Εποπτεία", + "providerThroughput": "Μετατόπιση παρόχου", + "fallbacks": "Φθινόπωρο", + "fallbackLatency": "Κατώφλι επιστροφής", + "cacheDiscount": "Προσωρινή μνήμη έκπτωση", + "normalizedTokens": "Κανονικοποιημένη είσοδος / έξοδος OpenRouter", + "byok": "BYOK", + "cost": "Κόστος", + "reported": "Αναφέρθηκε από τον πάροχο", + "estimated": "Εκτιμώμενος από την τιμολόγηση μοντέλου", + "upstreamCost": "Εισροή ανάντη", + "webSearches": "Αναζητήσεις στο διαδίκτυο", + "finishReason": "Λόγος τερματισμού", + "notReported": "Δεν αναφέρθηκε", + "agentSteps": "Βήματα παράγοντα", + "step": "Βήμα {number}", + "generation": "Δημιουργία" + }, + "toolInput": "Input", + "toolOutput": "Έξοδος", + "toolActivity": { + "iconSearch": "Ψάχνετε για εικονίδια “{query}”", + "iconBrowse": "Περιήγηση διαθέσιμων εικονιδίων" + }, + "toolNavigation": { + "openPreview": "Άνοιγμα προεπισκόπησης", + "openWidget": "Άνοιγμα γραφικού στοιχείου" + }, + "webSearch": { + "title": "Αναζήτηση στο διαδίκτυο", + "completed": "Το OpenRouter ερεύνησε το ζωντανό web για αυτή την απάντηση.", + "searches": "{count, plural, one {# αναζήτηση} other {# αναζητά}}", + "sources": "{count, plural, one {# πηγή} other {# πηγές}}" + }, + "responseError": { + "title": "Ο βοηθός δεν μπόρεσε να τελειώσει", + "description": "Δοκιμάστε ξανά. Εάν το πρόβλημα συνεχιστεί, ζητήστε από τον διαχειριστή να επαληθεύσει το καθορισμένο τελικό σημείο μοντέλου." + }, + "toolPreparationError": { + "title": "Αυτό το αίτημα δεν ήταν δυνατόν να προετοιμαστεί", + "description": "Το μοντέλο σταμάτησε πριν παράσχει πλήρεις λεπτομέρειες. Δοκιμάστε ξανά την απάντηση ή περιγράψτε ξανά το αίτημα. Δεν έγινε καμία αλλαγή." + }, + "busy": { + "title": "Ο βοηθός λειτουργεί ήδη", + "description": "Περιμένετε για την τρέχουσα απόκριση ή ανοίξτε την για να σταματήσει η εκτέλεση." + }, + "pendingAction": { + "answerTitle": "Απαιτείται απάντηση", + "answerFallback": "Επιλέξτε μια απάντηση για να συνεχίσετε", + "formTitle": "Αναθεώρηση λεπτομερειών εφαρμογής", + "boardFormTitle": "Αλλαγές πίνακα αναθεώρησης", + "review": "Επανεξέταση", + "sendBlocked": "Επίλυση εκκρεμούς αιτήματος πριν από την αποστολή" + }, + "activity": { + "thinking": "Βοηθός σκέφτεται", + "working": "Δουλεύοντας στην προτροπή σας", + "ready": "Απάντηση έτοιμη", + "completed": "Άνοιγμα της απάντησης", + "approval": "Απαιτείται έγκριση", + "failed": "Ο βοηθός χρειάζεται προσοχή", + "expand": "Άνοιγμα της απάντησης βοηθού", + "dismiss": "Παράβλεψη δραστηριότητας βοηθού" + }, + "scrollToLatest": "Κύλιση στο τελευταίο", + "refresh": { + "action": "Ανανέωση τρέχουσας προβολής", + "working": "Ανανέωση τρέχουσας προβολής", + "completeTitle": "Προβολή ανανεωμένη", + "completeDescription": "Τα ορατά δεδομένα Homarr έχουν φορτωθεί.", + "failedTitle": "Η προβολή δεν μπορεί να ανανεωθεί", + "failedDescription": "Η αλλαγή μπορεί να αποθηκευτεί. Δοκιμάστε ξανά την ενέργεια ανανέωσης." + }, + "askUser": { + "preparing": "Προετοιμασία ερώτησης", + "answered": "Η απάντησή σας", + "other": "Άλλο", + "otherLabel": "Η απάντησή σας", + "otherPlaceholder": "Πληκτρολογήστε μια άλλη απάντηση…", + "submit": "Αποστολή απάντησης", + "cancelOther": "Ακύρωση άλλης απάντησης", + "optionKind": { + "affirmative": "Επιβεβαίωση", + "negative": "Άρνηση", + "alternative": "Επιλογή", + "custom": "Προσαρμοσμένο" + } + }, + "configureApp": { + "title": "Αναθεώρηση λεπτομερειών εφαρμογής", + "description": "Επιλέξτε ένα τοπικό εικονίδιο και ρυθμίστε τα πάντα πριν ο βοηθός ζητήσει έγκριση δημιουργίας.", + "preparing": "Προετοιμασία λεπτομερειών εφαρμογής", + "continue": "Χρησιμοποιήστε αυτές τις λεπτομέρειες", + "ready": "Λεπτομέρειες εφαρμογής έτοιμες", + "automaticContinue": "Αυτόματη χρήση αυτών των λεπτομερειών εφαρμογής" + }, + "configureBoardSettings": { + "title": "Αλλαγές πίνακα αναθεώρησης", + "loading": "Φόρτωση ρυθμίσεων του τρέχοντος πίνακα", + "loadErrorTitle": "Δεν ήταν δυνατή η φόρτωση των ρυθμίσεων σκακιέρας", + "loadErrorDescription": "Ο πίνακας ίσως να μην υπάρχει πλέον, ή μπορεί να μην έχετε δικαίωμα να τον τροποποιήσετε.", + "proposedCount": "Προτεινόμενα πεδία {count} βοηθός", + "changeCount": "{count} αλλαγές έτοιμες", + "ready": "Αλλαγές πίνακα έτοιμες", + "cancelled": "Κρατήθηκαν οι τρέχουσες ρυθμίσεις του πίνακα", + "noChanges": "Καμία ρύθμιση δεν θα αλλάξει", + "keepCurrent": "Διατήρηση των τρεχουσών ρυθμίσεων", + "continue": "Συνέχεια στην έγκριση", + "automaticContinue": "Αποδοχή των προτεινόμενων αλλαγών στο διοικητικό συμβούλιο αυτόματα", + "resetAll": "Επαναφορά όλων των αλλαγών", + "tabs": { + "css": "Custom CSS", + "appearance": "Εμφάνιση", + "background": "Φόντο", + "general": "Γενικά" + }, + "cssDescription": "Επεξεργαστείτε το πλήρες φύλλο στυλ. Οι υπάρχοντες κανόνες διατηρούνται εκτός αν αφαιρεθούν εδώ.", + "cssCharacters": "{count} από 16384 χαρακτήρες", + "copyCss": "Copy CSS", + "copied": "Αντιγράφηκε", + "restoreCss": "Restore current CSS", + "remoteCssTitle": "Αυτό το CSS φορτώνει έναν απομακρυσμένο πόρο", + "remoteCssDescription": "Τα εισαγόμενα stylesheets και απομακρυσμένες διευθύνσεις URL έρχονται σε επαφή με έναν άλλο διακομιστή όταν φορτώνει ο πίνακας. Ελέγξτε τα πριν συνεχίσετε." + }, + "configureWidget": { + "title": "Επανεξέταση widget", + "preparing": "Προετοιμασία ρυθμίσεων widget", + "review": "Επισκόπηση widget και ενσωματώσεις", + "ready": "Ρυθμίσεις widget έτοιμες", + "cancelled": "Widget δεν προστέθηκε", + "automaticContinue": "Αποδοχή της προτεινόμενης διαμόρφωσης widget αυτόματα", + "definitionLoadErrorTitle": "Δεν ήταν δυνατή η φόρτωση των ρυθμίσεων widget", + "definitionLoadErrorDescription": "Το Homarr δεν μπόρεσε να φορτώσει τις ρυθμίσεις του widget. Δοκιμάστε ξανά.", + "loadErrorTitle": "Δεν ήταν δυνατή η φόρτωση ενσωματώσεων", + "loadErrorDescription": "Το Homarr δεν μπόρεσε να φορτώσει τις ενσωματώσεις που είναι διαθέσιμες για αυτό το widget.", + "noIntegrationTitle": "Απαιτείται μια συμβατή ενσωμάτωση", + "noIntegrationDescription": "Ρυθμίστε μια ενσωμάτωση που υποστηρίζεται από αυτό το γραφικό συστατικό πριν την προσθήκη στον πίνακα ελέγχου.", + "connectIntegration": "Σύνδεση υπηρεσίας", + "manageIntegrations": "Διαχείριση ενσωματώσεων", + "skip": "Μην προσθέτετε", + "errorTitle": "Δεν ήταν δυνατή η προετοιμασία των ρυθμίσεων widget", + "errorDescription": "Το μοντέλο δεν παρείχε μια ολοκληρωμένη διαμόρφωση widget. Δεν προστέθηκε widget." + }, + "approvalRequired": "Απαιτείται έγκριση", + "complete": "Complete", + "denied": "Απορρίφθηκε", + "failed": "Απέτυχε", + "working": "Εργασία", + "approvalDescription": "Επανεξέταση αυτής της αλλαγής πριν από την εκτέλεση.", + "approveAndRun": "Έγκριση και εκτέλεση", + "deny": "Άρνηση", + "autoApproval": { + "label": "Αυτόματες εγκρίσεις", + "composerLabel": "Έγκριση για μένα", + "title": "Αυτόματες εγκρίσεις", + "description": "Προετοιμάζει αυτόματα τα έντυπα και εγκρίνει προστατευμένες αλλαγές για αυτή τη συνομιλία. Οι ερωτήσεις εξακολουθούν να περιμένουν την απάντησή σας και τα δικαιώματα του Homarr εξακολουθούν να ισχύουν. Αυτό απενεργοποιείται όταν αλλάζετε συνομιλίες.", + "enable": "Ενεργοποίηση για αυτήν την συνομιλία", + "disable": "Απενεργοποίηση αυτόματων εγκρίσεων", + "enabled": "Οι αυτόματες εγκρίσεις είναι ενεργοποιημένες", + "approving": "Αυτόματη έγκριση" + } } } diff --git a/packages/translation/src/lang/en-gb.json b/packages/translation/src/lang/en-gb.json index 60ea08e14..96081eeb2 100644 --- a/packages/translation/src/lang/en-gb.json +++ b/packages/translation/src/lang/en-gb.json @@ -1,156 +1,246 @@ { "init": { - "step": { - "start": { - "title": "Welcome to Homarr", - "subtitle": "Let's start setting your Homarr instance up.", - "description": "To get started, please select how you want to continue.", - "action": { - "scratch": "Start from scratch", - "importOldmarr": "Import from a Homarr version before v1.0", - "restoreSqlite": "Restore from SQLite backup", - "restoreSqliteDescription": "Upload a full SQLite database backup from a previous Homarr instance. This will restore all boards, users, apps, integrations, and settings.", - "backToOptions": "← Back to setup options" + "studio": { + "navigationLabel": "Getting started sections", + "back": "Back", + "buildBoard": "Create my board", + "common": { + "unknownError": "Something went wrong. Your choices are still here; please try again." + }, + "claim": { + "checking": "Securing this onboarding session…", + "checkingTitle": "Preparing secure setup", + "lockedTitle": "Setup is open in another browser", + "lockedDescription": "Continue there, or wait for its secure first-run session to expire before trying again.", + "signInTitle": "Administrator sign-in required", + "signInDescription": "An administrator already exists. Sign in to resume setup without exposing credentials or service access.", + "signIn": "Sign in and resume", + "errorTitle": "Setup could not be secured", + "errorDescription": "Reload the page to retry the secure first-run session." + }, + "navigation": { + "essentials": "Essentials", + "discover": "Discover", + "connect": "Connect", + "board": "Board", + "extend": "Extend", + "review": "Review" + }, + "welcome": { + "title": "Welcome home.", + "description": "Welcome to Homarr v{version}. We’ll guide you through the essentials and help you create your first board.", + "start": "Get started", + "restore": "Restore backup", + "restoreTitle": "Restore from backup", + "restoreDescription": "A full SQLite backup restores boards, people, apps, integrations and settings. Homarr validates it before replacing anything.", + "errorTitle": "Setup could not start", + "errorDescription": "Your setup choices are still here. Try again, or reload the page if the problem continues." + }, + "account": { + "title": "Create your administrator", + "description": "Please specify the credentials for your administrator user.", + "username": "Administrator username", + "passwordHint": "Only the 8-character minimum is required. The other password-strength checks are suggestions.", + "create": "Create administrator", + "errorTitle": "Administrator could not be created", + "recoveryTitle": "Administrator account created", + "recoveryDescription": "Automatic sign-in did not complete. Sign in with the administrator credentials you just created to continue setup.", + "recoveryAction": "Sign in and continue", + "unknownError": "The administrator could not be created." + }, + "externalGroup": { + "title": "Connect your administrator group", + "description": "Use the exact group name sent by LDAP or OIDC. Members of this group receive administrator access.", + "name": "External administrator group", + "nameDescription": "This is case-sensitive and must match your identity provider.", + "continue": "Save group and continue", + "errorTitle": "Group could not be saved", + "unknownError": "The administrator group could not be saved." + }, + "essentials": { + "title": "Start with familiar defaults", + "description": "Set the language and appearance everyone sees first, then give Homarr the address pattern used by your services.", + "language": "Default language", + "theme": "Default theme", + "themeAuto": "System", + "themeLight": "Light", + "themeDark": "Dark", + "serverOriginHelp": "Homarr uses this address to pre-fill detected service URLs. You can still edit every service individually.", + "serverDescription": "This is a shortcut, not a restriction. Every detected service remains editable.", + "serverOrigin": "Domain, IP or reverse-proxy path", + "serverOriginDescription": "Examples: home.lan, 192.168.1.10 or https://home.example.com/services. Choose how each service is appended below.", + "analytics": "Share anonymous product analytics", + "analyticsDescription": "Helps Homarr improve feature reliability. No service credentials or dashboard content are sent." + }, + "discover": { + "title": "See what this installation can actually reach", + "description": "Homarr checks capabilities in place. A missing Docker socket or Kubernetes context never blocks a manual setup.", + "database": "Database", + "docker": "Docker and compatible sockets", + "kubernetes": "Kubernetes", + "assistantWorkshop": "Assistant and Workshop", + "found": "Found {integrations} integrations and {apps} additional apps", + "retryKubernetes": "Check Kubernetes again", + "retryWorkshop": "Check Workshop again", + "unknownVersion": "Unknown version", + "kubernetesAvailable": "Connected to Kubernetes {version}", + "kubernetesDisabled": "Not enabled; continue with Docker or manual services", + "kubernetesUnavailable": "Kubernetes is enabled but cannot be reached from this Homarr process", + "workshopAvailable": "Community Workshop and hosted Assistant services are reachable", + "workshopUnavailable": "Local and custom Assistant providers remain available", + "partialTitle": "Some sources could not be scanned", + "partialDescription": "Results from reachable hosts are kept. Check socket permissions or add services manually in the next section.", + "status": { + "checking": "Checking availability…", + "available": "Available", + "partial": "Partially available", + "empty": "Reachable, no matching running services", + "disabled": "Disabled by server configuration", + "unavailable": "Unavailable from this Homarr process" } }, - "import": { - "title": "Import data", - "subtitle": "You can import data from an existing Homarr instance.", - "dropzone": { - "title": "Drag your ZIP file here or click to browse your files", - "description": "The ZIP file you uploaded will be processed and you will be able to select what you would like to import" + "connect": { + "title": "Connect what makes the board useful", + "description": "Select several services at once. Docker labels take priority, image matching fills gaps, and every URL and credential stays reviewable.", + "discoveredIntegrations": "Detected integration instances ({count})", + "detectedIntegrationLabel": "Import {name}, detected as {kind}", + "detectedAppLabel": "Import detected app {name}", + "otherIntegrations": "Add another integration", + "configureIntegrations": "Configure integrations", + "discoveredApps": "Detected apps ({count})", + "appAddressRequired": "Add an address for {name}, or remove it from the selection.", + "empty": "No integrations selected. Homarr will still create a useful starter board with general widgets.", + "dockerSource": "الحاويات", + "manualSource": "Manual", + "url": "Service URL", + "noCredentials": "No credentials", + "noCredentialsDescription": "This integration does not need credentials.", + "credentialMethod": "Credential method", + "getApiKey": "Open the API key settings for this service", + "openGuide": "Open Homarr's setup guide for this service", + "testConnection": "Test connection", + "testSuccess": "Connection works", + "testSuccessDescription": "Homarr connected using the current address and credentials.", + "testError": "Connection failed", + "testErrorDescription": "Check the service address and credentials, then try again.", + "needsConfiguration": "Configuration required", + "tested": "Connection test successful", + "testFailed": "Connection test failed", + "incompleteConfirmation": "Unfinished integrations will be skipped. Continue without them?" + }, + "board": { + "title": "Shape the board before it is built", + "description": "Homarr creates protected Mobile and Base layouts, then places apps and compatible widgets from the services you selected.", + "target": "Board to configure", + "targetDescription": "Choose the exact existing board that this setup should update.", + "targetPlaceholder": "Select a board", + "targetRequired": "Select the board to configure before continuing.", + "name": "Board name", + "nameDescription": "Used in the board URL; letters, numbers, dashes and underscores only.", + "nameRequired": "Enter a board name before continuing.", + "primaryColor": "Primary colour", + "secondaryColor": "Secondary colour", + "resetColors": "Reset colours", + "radius": "Widget corner radius", + "radiusOptions": { + "xs": "Tight", + "sm": "Subtle", + "md": "Balanced", + "lg": "Rounded", + "xl": "Soft" }, - "fileInfo": { - "action": { - "change": "Change file" - } + "columns": "Board columns", + "columnsDescription": "Columns define the horizontal grid used to size and position items. 12 is plenty for most people.", + "columnCount": "{count, plural, one {# column} other {# columns}}", + "leftSidebar": "Left sidebar", + "rightSidebar": "Right sidebar", + "previewLabel": "Live preview of the first board layout" + }, + "extend": { + "title": "Advanced features", + "tabsLabel": "Assistant, Workshop and MCP setup", + "assistant": "Assistant", + "workshop": "Workshop", + "assistantSetup": { + "loginTitle": "Administrator sign-in required", + "loginDescription": "Provider keys and model access are privileged. Finish setup, sign in, and Homarr will open the Assistant configuration directly.", + "loginAction": "Sign in to configure Assistant" }, - "importSettings": { - "title": "Import settings", - "description": "Configure the import behaviour" + "workshopSetup": { + "title": "Homarr Workshop", + "description": "Browse community Custom Widgets, inspect their requested capabilities, install them and publish your own work without copying code between servers.", + "available": "Available", + "checking": "Checking…", + "unavailable": "Unavailable", + "discoverTitle": "Discover", + "discoverDescription": "Find widgets built for real self-hosted workflows.", + "installTitle": "Review and install", + "installDescription": "See metadata and configuration before adding anything.", + "publishTitle": "Share", + "publishDescription": "Publish reusable widgets back to the community.", + "browse": "Browse Workshop" }, - "boardSelection": { - "title": "Found {count} boards", - "description": "Choose all the boards with the size you want to import", - "action": { - "selectAll": "Select all", - "unselectAll": "Deselect all" - } - }, - "summary": { - "title": "Import summary", - "description": "In the summary below, you can see what will be imported", - "action": { - "import": "Please confirm import and continue" - }, - "entities": { - "apps": "Applications", - "boards": "Boards", - "integrations": "Integrations", - "credentialUsers": "Credential users" - } - }, - "tokenModal": { - "title": "Enter import token", - "field": { - "token": { - "label": "Token", - "description": "Enter the import token shown in your previous Homarr instance" - } - }, - "notification": { - "error": { - "title": "Invalid Token", - "message": "Sorry, but the token you entered is invalid" - } - } + "mcpSetup": { + "title": "Homarr MCP", + "description": "Connect Claude, Codex or another MCP client to Homarr's typed tools. API keys keep access explicit and revocable.", + "endpoint": "Streamable HTTP endpoint", + "keyTitle": "Copy this key now", + "keyDescription": "For security, Homarr cannot show this API key again.", + "copyKey": "Copy API key", + "createKey": "Create an MCP API key", + "errorTitle": "MCP API key could not be created", + "loginRequired": "Sign in as an administrator after setup to create an API key.", + "configuration": "Client configuration", + "copy": "Copy configuration", + "copied": "Copied", + "advanced": "Open MCP tools, permissions and setup details" } }, - "user": { - "title": "Administrative user", - "subtitle": "Please specify the credentials for your administrator user.", - "notification": { - "success": { - "title": "User created", - "message": "The user has been created successfully" - }, - "error": { - "title": "User creation failed" - } - } - }, - "group": { - "title": "External group", - "subtitle": "Please specify the group which should be used for external users.", - "form": { - "name": { - "label": "Group name", - "description": "The name needs to match the admin group of your external provider" - } - } - }, - "settings": { - "title": "Settings", - "subtitle": "Configure server settings." - }, - "integrations": { - "title": "Integrations", - "subtitle": "Select the services you use.", - "description": "Choose the integrations you'd like to connect. We'll set up your dashboard with matching widgets automatically.", - "action": { - "continue": "Continue", - "skip": "Skip for now" - }, - "configure": { - "progress": "{current} of {total}", - "skip": "Skip this integration", - "finishing": "Setting up your dashboard...", - "error": { - "title": "Setup failed", - "message": "Something went wrong while setting up your dashboard. Please try again." - }, - "helpers": { - "tooltip": "URL helpers", - "description": "These helpers try to guess the URL for your services. If it doesn't work, just type the address manually." - } - }, - "urlTemplate": { - "label": "Base URL", - "placeholder": "homelab.local or 192.168.1.1", - "hint": "Enter your base domain or IP to auto-fill integration URLs", - "warning": "Setting your base URL now will auto-fill all integration URLs, saving you time during setup", - "preview": "e.g. {example}", - "mode": { - "subdomain": "Subdomain", - "hostPort": "Host:Port" - } - }, - "docker": { - "detected": "Docker detected {count} services", - "detectedBreakdown": "{integrations} integrations · {apps} apps", - "summary": "Homarr detected {apps} apps, {integrations} of which have integrations built-in", - "appBadge": "App", - "appSectionLabel": "Apps to add to dashboard ({count} selected)", - "scanning": "Scanning Docker...", - "scanningDescription": "Looking for running containers on your system" + "review": { + "title": "One board, built around your services", + "description": "Homarr tests unsaved connections, imports the selected apps, applies appearance and layouts, then opens the exact board it configured.", + "board": "First board", + "columns": "Board columns", + "columnsValue": "{count, plural, one {# column} other {# columns}}", + "sidebars": "Sidebars", + "sidebarsValue": "{count, plural, =0 {None} one {# sidebar} other {# sidebars}}", + "layouts": "Responsive layouts", + "layoutsValue": "Mobile + Base", + "integrations": "التكاملات", + "integrationsValue": "{count, plural, =0 {None selected} one {# integration} other {# integrations}}", + "apps": "App tiles", + "appsValue": "{count, plural, =0 {Starter apps only} one {# app tile} other {# app tiles}}", + "language": "Language", + "theme": "Theme", + "themeAuto": "System preference", + "themeLight": "Light", + "themeDark": "Dark", + "colors": "Board colours", + "radius": "Widget radius", + "automaticTitle": "What Homarr will create", + "automaticDescription": "Compatible widgets, icons, app links, integration relationships and responsive placement come from the shared Homarr catalogue. You can edit every result later.", + "dockerWarningTitle": "Some Docker labels changed during setup", + "dockerWarningDescription": "{count, plural, one {# selected Docker result could not be applied because its service changed, targeted another board or its widget was incompatible} other {# selected Docker results could not be applied because services changed, targeted another board or their widgets were incompatible}}.", + "errorTitle": "Board could not be built", + "progress": { + "applying": "Testing connections and building your board", + "done": "Your board is ready" } }, "finish": { - "title": "Finish set-up", - "subtitle": "Congratulations, you are ready to go!", - "description": "You have successfully finished the setup process. You can now start using Homarr. Please select your next action:", - "action": { - "goToBoard": "Go to {name} board", - "createBoard": "Create your first board", - "inviteUser": "Invite other users", - "docs": "Read the documentation" - } + "title": "Your first board is ready.", + "description": "Homarr connected the pieces you selected and kept the rest editable. Open the board now; the short in-product tour can show you edit mode, widgets, layouts and search.", + "openBoard": "Open my board", + "manageTitle": "إدارة المستخدمين", + "manageDescription": "Fine-tune apps, integrations, boards, users and server settings.", + "workshopTitle": "Workshop", + "workshopDescription": "Discover and install community Custom Widgets.", + "docsTitle": "Learn Homarr", + "docsDescription": "Read the focused guides for boards, widgets, integrations and tools." } - }, - "backToStart": "Go back to the start" + } }, "user": { - "title": "Users", "name": "User", "page": { "login": { @@ -159,12 +249,10 @@ }, "invite": { "title": "Join Homarr", + "titleWithAppName": "Join {appName}", "subtitle": "Welcome to Homarr! Please create an account", + "subtitleWithAppName": "Welcome to {appName}! Please create an account", "description": "You were invited by {username}" - }, - "init": { - "title": "New Homarr installation", - "subtitle": "Please create the initial administrator user" } }, "field": { @@ -192,12 +280,17 @@ "previousPassword": { "label": "Previous password" }, - "homeBoard": { - "label": "Home board" - }, "pingIconsEnabled": { "label": "Use icons for pings" }, + "byteUnitSystem": { + "label": "Data size units", + "description": "Choose how Homarr displays byte sizes and byte rates. Bit rates always use decimal units.", + "options": { + "binary": "Binary", + "decimal": "Decimal" + } + }, "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\")." @@ -247,7 +340,6 @@ } } }, - "create": "Create a user", "changePassword": { "label": "Change your password", "notification": { @@ -259,56 +351,6 @@ } } }, - "changeHomeBoard": { - "notification": { - "success": { - "message": "Home board has been changed successfully" - }, - "error": { - "message": "Unable to change the home board" - } - } - }, - "changeSearchPreferences": { - "notification": { - "success": { - "message": "Search preferences have been changed successfully" - }, - "error": { - "message": "Unable to change the search preferences" - } - } - }, - "changeFirstDayOfWeek": { - "notification": { - "success": { - "message": "The first day of the week has been changed successfully" - }, - "error": { - "message": "Unable to change the first day of the week" - } - } - }, - "changePingIconsEnabled": { - "notification": { - "success": { - "message": "Ping icons have been toggled successfully" - }, - "error": { - "message": "Unable to toggle the ping icons" - } - } - }, - "changeDdgBangs": { - "notification": { - "success": { - "message": "DuckDuckGo bangs toggled successfully" - }, - "error": { - "message": "Unable to toggle DuckDuckGo bangs" - } - } - }, "manageAvatar": { "changeImage": { "label": "Change image", @@ -338,16 +380,6 @@ } } }, - "editProfile": { - "notification": { - "success": { - "message": "Profile has been updated successfully" - }, - "error": { - "message": "Unable to update profile" - } - } - }, "delete": { "label": "Permanently delete user", "description": "This deletes this user, including their preferences. This will not delete any boards. The user will not be notified.", @@ -356,18 +388,13 @@ "select": { "label": "Select a user", "notFound": "No user found" - }, - "transfer": { - "label": "Select a new owner" } } }, "group": { - "title": "Groups", "name": "Group", "search": "Find a group", "field": { - "name": "Name", "members": "Members", "homeBoard": { "label": "Home board", @@ -388,6 +415,19 @@ } } }, + "custom-widget": { + "title": "Custom widgets", + "item": { + "manage": { + "label": "Manage custom widgets", + "description": "Allow members to create, edit and delete custom widget definitions" + }, + "secret-write": { + "label": "Configure custom widget secrets", + "description": "Allow members and their API keys to set encrypted custom widget credentials" + } + } + }, "app": { "title": "Applications", "item": { @@ -493,6 +533,35 @@ "description": "Allow members to manage and delete any search engine" } } + }, + "matrix": { + "none": "No access", + "impliedHint": "Also grants: {permissions}", + "grantedViaAdmin": "Administrators already have this. Set Admin to “No access” to configure it separately.", + "preset": { + "label": "Presets", + "viewer": "Viewer", + "viewerDescription": "Read-only: view boards and media, use apps and integrations that already exist.", + "editor": "Editor", + "editorDescription": "Day-to-day management: create and edit boards, apps, integrations and search engines.", + "admin": "Administrator", + "adminDescription": "Unrestricted access to every feature and setting, including user management.", + "custom": "Custom" + }, + "effective": { + "title": "Effective permissions", + "description": "The full, de-duplicated set of actions members of this group can perform, including permissions granted indirectly.", + "empty": "No permissions selected" + }, + "noneDescription": "Members get no access to this area.", + "level": { + "view": "View", + "use": "Use", + "interact": "Interact", + "modify": "Modify", + "full": "Full" + }, + "capabilityIncluded": "Already included in “{level}”" } }, "memberNotice": { @@ -607,21 +676,24 @@ "search": "Find an application", "page": { "list": { - "title": "Application", + "ariaLabel": "Configured apps", "noResults": { "title": "There are currently no applications", - "action": "Create the first application" + "description": "Apps are links to the services and tools you want on your boards.", + "action": "Create the first application", + "filteredTitle": "No apps match your search", + "filteredDescription": "No apps match \"{search}\". Try another name or URL.", + "createOnlyTitle": "You can only add apps", + "createOnlyDescription": "Your permissions let you create apps but not browse existing ones. Ask an administrator for app management access to see the full list." } }, "create": { "title": "Create application", "notification": { "success": { - "title": "Creation successful", "message": "The application has been successfully created" }, "error": { - "title": "Creation Failed", "message": "The application was unable to be created" } } @@ -630,11 +702,9 @@ "title": "Edit application", "notification": { "success": { - "title": "Changes have been successfully applied", "message": "The application was successfully saved" }, "error": { - "title": "Changes have not been applied", "message": "The application was unable to be saved" } } @@ -644,26 +714,18 @@ "message": "Are you certain that you want to delete the application, {name}?", "notification": { "success": { - "title": "Deleted successfully", "message": "The application was successfully deleted" }, "error": { - "title": "Deletion failed", "message": "The application was unable to be deleted" } } } }, "field": { - "name": { - "label": "Name" - }, "description": { "label": "Description" }, - "url": { - "label": "URL" - }, "useDifferentUrlForPing": { "checkbox": { "label": "Use a different URL for pings", @@ -678,59 +740,582 @@ "search": "Search for an app", "noResults": "No results", "action": "Select {app}", - "title": "Select an app to add to this board" + "title": "Select an app to add to this board", + "toggle": "Click to select", + "selected": "Chosen", + "multiple": "Add {count}", + "selectedCount": "{count, plural, one {# chosen} other {# chosen}}", + "appsSelected": "{count, plural, one {# app chosen} other {# apps chosen}}", + "selectMultiple": "Select several", + "cancelMultiple": "Exit multiple selection", + "customApplication": "Custom application", + "application": "Application" }, "create": { "title": "Create new app", "description": "Create a new app ", "action": "Open app creation" - }, - "add": "Add an app" + } } }, + "tips": { + "dismiss": "Dismiss hint", + "multiSelectApps": "Hint: Hold Ctrl / ⌘ to select multiple apps at once" + }, "customWidget": { + "secretEntry": { + "title": "Configure API source", + "description": "Confirm the server URL and enter your credentials. Secret values are encrypted by Homarr and are never returned to the requesting agent.", + "loading": "Loading secure request…", + "applying": "Applying this configuration… Keep this page open.", + "saved": "API source configured. You can close this page.", + "unavailable": "Request unavailable", + "saveError": "Unable to configure API source", + "source": "API source: {name}", + "baseUrl": "Server URL", + "networkScope": "Network access", + "save": "Save API configuration", + "expires": "This one-time request expires at {time}." + }, "page": { "list": { - "title": "Custom Widgets", "noResults": "No custom widgets yet. Create your first one!", - "loading": "Loading..." + "noDescription": "No description", + "enabled": "Enabled", + "disabled": "Disabled", + "disabledDescription": "This widget remains configured but will not load on any board.", + "requestCount": "{count, plural, one {# request} other {# requests}}", + "invalidDefinition": "Invalid definition", + "migrationRequired": "Migration required", + "migrationInstructions": "Open Actions to copy or export the original v1 definition for manual recreation. You can also use the migration prompt with an LLM. Existing board placements will continue to work after migration.", + "missingCredentials": "{count, plural, one {Credential missing} other {# credentials missing}}", + "missingCredentialsDescription": "{count, plural, one {This widget still needs one credential.} other {This widget still needs # credentials.}} Select this badge to configure the URL and encrypted values." }, "create": { "title": "Create Custom Widget", "subtitle": "Define an API URL, authentication, and how to display the response data." }, - "edit": { - "title": "Edit Custom Widget" + "tabs": { + "ariaLabel": "Custom widget sections", + "installed": "Installed", + "workshop": "Workshop" } }, "action": { - "create": "Create", - "import": "Import", - "save": "Save", + "pasteImportHint": "Paste a complete custom widget JSON with Ctrl+V or Command+V", "delete": "Delete Custom Widget", "deleteConfirm": "Are you sure you want to delete \"{name}\"? This action cannot be undone.", "export": "Export", - "edit": "Edit" + "duplicate": "Duplicate", + "aiPrompt": "Design with AI", + "copyAiPrompt": "Copy AI prompt", + "enable": "Enable", + "disable": "Disable", + "menu": "Actions", + "downloadSkill": "View custom widget skill", + "publishWorkshop": "Publish to Workshop", + "migrate": "Migrate custom widget", + "configureSources": "Configure sources", + "copyLegacyDefinition": "Copy original widget content", + "exportLegacyDefinition": "Export original widget content", + "copyMigrationPrompt": "Copy LLM migration prompt", + "pasteMigration": "Paste migrated widget", + "importMigration": "Import migrated JSON file" + }, + "sourceSetupDialog": { + "title": "Configure widget sources", + "description": "Review where this widget connects and add or replace its encrypted credentials.", + "credentialsRequired": "Requests will fail until the required credentials are added.", + "save": "Save configuration" + }, + "field": { + "description": "Description" + }, + "editor": { + "errorBoundary": { + "title": "Something went wrong" + }, + "action": { + "components": "Components", + "format": "Format", + "insertStarter": "Insert starter", + "redo": "Redo", + "copied": "Copied", + "schema": "Schema" + }, + "reference": { + "minimal": "Minimal example", + "full": "Full example" + }, + "componentReference": { + "search": "Search components", + "empty": "No matching components", + "count": "{count, number} components available" + }, + "status": { + "errors": "{count, number} errors", + "warnings": "{count, number} warnings", + "ready": "No issues found", + "position": "Line {line, number}, column {column, number}", + "characters": "{count, number} characters", + "charactersWithLimit": "{count, number} / {limit, number}" + }, + "diagnostics": { + "title": "Template diagnostics", + "line": "Line {line, number}", + "ast": "{value}", + "bindingTypeConflict": "The input \"{value}\" is shared by controls with incompatible value types.", + "runtimeBindingTypeConflict": "The input \"{value}\" is bound as both {firstType} and {secondType}.", + "dynamicRequestId": "A literal requestId is required. Dynamic request IDs are not accepted.", + "dynamicInputBinding": "A literal input name is required for bind.", + "inlineRequestProps": "Network components accept requestId and params; inline URL, method, header and body props are blocked.", + "invalidRequestManifest": "Named requests must be a valid request map. {value}", + "missingRequestId": "This network component requires a literal requestId.", + "templateEmpty": "Enter a JSX template.", + "templateTooLong": "The template exceeds the 50,000-character limit.", + "unknownRequest": "No named request with ID \"{value}\" exists." + } + }, + "workbench": { + "configure": "Configure", + "sectionNavigation": "Custom widget sections", + "widgetPreview": "Widget preview", + "generalInformation": "General information", + "invalidWidget": "Invalid widget", + "section": { + "general": "General", + "sources": "API sources", + "requests": "Requests", + "options": "Options", + "jsx": "JSX", + "preview": "Preview" + }, + "status": { + "unsaved": "Unsaved changes", + "invalid": "Needs attention", + "ready": "Ready" + }, + "saveError": { + "title": "Widget was not saved", + "description": "Fix these validation errors and save again.", + "more": "+{count} more errors are shown in the workbench.", + "errors": "Validation errors", + "copy": "Copy errors", + "copied": "Errors copied" + }, + "action": { + "preview": "Test and preview", + "previewLoading": "Testing requests" + }, + "requests": { + "title": "Named queries and actions", + "label": "Requests", + "description": "Queries load data; actions only run after user interaction. Any HTTP method is valid for either kind." + }, + "options": { + "title": "Widget options" + }, + "builder": { + "advancedManifest": "Advanced raw manifest", + "advancedJson": "Advanced manifest JSON", + "manifestFilename": "widget.json", + "request": "Request {count, number}", + "requestId": "Request ID", + "type": "Type", + "method": "Method", + "source": "API source", + "run": "Run", + "runLoad": "When the widget loads", + "runManual": "From SubFetch", + "permission": "Permission", + "path": "Path", + "pathDescription": "Use '{option:name}' for widget options and '{param:name}' for invocation values.", + "requestDetails": "Query, body and behaviour", + "queryValues": "Query values", + "queryKey": "Query key", + "queryKeyInvalid": "Use a unique ID that starts with a letter and contains only letters, numbers, - or _.", + "valueSource": "Value source", + "literal": "Literal", + "widgetOption": "Widget option", + "invocationParameter": "Invocation parameter", + "option": "Option", + "parameterName": "Parameter name", + "value": "Value", + "removeQueryValue": "Remove query value", + "addQueryValue": "Add query value", + "jsonBody": "JSON body", + "jsonBodyDescription": "Optional. Insert $option and $param references at any depth.", + "insertOptionReference": "Insert option reference", + "insertParameterReference": "Insert parameter reference", + "confirmation": "Confirmation message", + "invalidation": "Refresh after success", + "invalidationDescription": "Comma-separated query IDs", + "noAuth": "Send without source authentication", + "moveRequestUp": "Move request up", + "moveRequestDown": "Move request down", + "removeRequest": "Remove request", + "addRequest": "Add request", + "optionName": "Option name", + "label": "Label", + "control": "Control", + "description": "Description", + "default": "Default", + "optionDetails": "Constraints and dynamic choices", + "minimum": "Minimum", + "maximum": "Maximum", + "step": "Step", + "choiceLabel": "Choice label", + "choiceValue": "Choice value", + "newChoice": "New choice", + "addChoice": "Add choice", + "removeChoice": "Remove choice", + "choicesRequest": "Load choices from request", + "itemsPath": "Items path", + "itemsPathPlaceholder": "items (optional)", + "valuePath": "Value path", + "labelPath": "Label path", + "group": "Group", + "advancedOption": "Advanced option", + "moveOptionUp": "Move option up", + "moveOptionDown": "Move option down", + "removeOption": "Remove option", + "addOption": "Add option", + "invalidJson": "Invalid JSON", + "invalidWidget": "Invalid widget" + }, + "jsx": { + "title": "JSX template", + "label": "Template" + }, + "sources": { + "title": "API sources and credentials", + "newName": "API {count, number}", + "duplicateSourceId": "API source IDs must be unique.", + "credentialRemoved": "Credential removed", + "credentialRemovedDescription": "The stored value was deleted.", + "primary": "Primary API", + "id": "Source ID", + "name": "Name", + "baseUrl": "Base URL", + "baseUrlError": { + "invalid": "Enter a complete URL.", + "protocol": "Use an HTTP or HTTPS URL.", + "credentials": "Remove the username and password from this URL. Configure credentials below instead.", + "queryOrFragment": "Remove the query string or fragment from this base URL. Add query values to a named request." + }, + "networkScope": "Network access", + "authentication": "المصادقة", + "headerName": "Header name", + "queryParameter": "Query parameter", + "configured": "Configured — enter a replacement", + "clear": "Clear", + "remove": "Remove source and its requests", + "advanced": "Advanced", + "add": "Add another API source", + "sourceType": "Source", + "manualSource": "HTTP API", + "existingIntegration": "Existing integration", + "integrationType": "Integration type", + "selectIntegration": "Configured integration", + "noIntegrations": "No matching integrations available", + "integrationUnavailable": "The selected integration is no longer available. Select another integration.", + "integrationDescription": "Uses the saved integration URL and credentials. Changes apply automatically. Full integration access is required to run requests." + }, + "ai": { + "title": "Create or fix with any AI", + "description": "Add an API docs URL first if you have one. For fixes, run Preview if possible. Copy the prompt into any AI; it can ask for missing details. Paste its final JSON here.", + "request": "What should this widget do?", + "documentationUrl": "API documentation URL (optional)", + "paste": "Paste", + "response": "AI response", + "manualCopyDescription": "Clipboard access is unavailable. Select the prompt below and copy it manually.", + "manualPasteDescription": "Clipboard access is unavailable or the copied response needs correction. Paste the AI's JSON response here.", + "selectAll": "Select all", + "loadResponse": "Load response", + "loaded": "Widget loaded into the editor", + "invalidResponse": "Clipboard does not contain a valid v2 widget", + "invalidResponseDetail": "The AI response is invalid: {message}" + }, + "preview": { + "invalid": "Fix validation errors to preview this widget.", + "fixtureError": "Preview fixture error", + "requestData": "Request data", + "status": { + "idle": "Requests have not been tested", + "loading": "Testing requests", + "success": "All load requests succeeded", + "error": "One or more load requests failed" + }, + "result": { + "loading": { + "title": "Testing API requests", + "description": "Homarr is creating a preview session and loading the widget data." + }, + "success": { + "title": "Preview ready", + "description": "{succeeded, plural, =0 {This widget has no load requests.} one {# load request succeeded.} other {# load requests succeeded.}} Open Data to inspect the response." + }, + "error": { + "title": "Preview completed with request errors", + "description": "{succeeded, number} succeeded and {failed, number} failed. Open Data for the response and error details." + } + }, + "instanceOptions": "Instance options", + "liveActions": "Run actions against the configured API", + "liveActionsDescription": "Off is safe simulation. Turning this on affects the real service.", + "noActions": "No actions are defined.", + "containedFailures": "Runtime failures are contained inside this widget. Request journals never include secret values.", + "validation": { + "title": "Validation", + "ready": "The widget definition is valid." + }, + "accessibility": { + "title": "Accessibility checks", + "ready": "No common accessibility omissions detected.", + "pending": "Accessibility checks will run when the widget definition is valid.", + "imageAlt": "Add alt text to every Image, using an empty alt only for decorative images.", + "actionIconLabel": "Add an aria-label or title to every ActionIcon.", + "inputLabel": "Add a visible label or accessible name to every input." + }, + "journal": "Redacted request journal", + "actionParameters": "Action parameters (JSON)", + "invalidParameters": "Use the declared string, number and boolean parameter types.", + "runDestructive": "Run destructive action", + "runAction": "Run action", + "deleteConfirmation": "This preview action changes remote data through the configured API.", + "simulated": "Action simulated", + "httpStatus": "HTTP {status, number}", + "tab": { + "widget": "Widget", + "data": "Data", + "options": "Options", + "state": "State", + "actions": "Actions", + "diagnostics": "Diagnostics" + }, + "size": { + "compact": "Compact", + "standard": "Standard", + "wide": "Wide" + }, + "fixture": { + "live": "Live", + "loading": "Loading", + "empty": "Empty", + "error": "Error" + } + } + }, + "preview": { + "request": { + "permission": { + "view": "View", + "modify": "Modify", + "full": "Full" + } + } + }, + "notification": { + "created": "Widget \"{name}\" created successfully.", + "updated": "Widget \"{name}\" updated successfully.", + "deleted": "Widget \"{name}\" deleted.", + "imported": "Widget imported successfully.", + "migrated": "Legacy widget migrated successfully. Existing board placements now use the v2 definition.", + "migrationError": "Failed to migrate the legacy widget. Ensure the file uses the homarr-custom-widget-v2 schema.", + "legacyDefinitionCopied": "The original widget content was copied. Stored credential values are not included.", + "legacyDefinitionCopyError": "Failed to copy the original widget content.", + "migrationPromptCopied": "A redacted migration prompt was copied. Paste it into an LLM, copy its single JSON response, then choose Paste migrated widget here.", + "migrationPromptCopyError": "Failed to copy the migration prompt.", + "sourcesConfigured": "Widget sources and credentials saved.", + "sourceConfigurationError": "Failed to configure widget sources.", + "aiPromptCopiedWithCount": "AI prompt copied to clipboard ({count, number} characters).", + "aiPromptCopyError": "Failed to copy prompt to clipboard. Your browser may not support this feature.", + "aiPromptSent": "Prompt sent. You can keep editing while the assistant works in the background.", + "updateError": "Failed to update widget. Your changes were not saved.", + "importError": "Failed to import widget. Ensure the file is a valid custom widget JSON export.", + "exportError": "Failed to export widget.", + "duplicated": "Widget \"{name}\" duplicated.", + "duplicateError": "Failed to duplicate widget.", + "toggleError": "Failed to toggle widget status.", + "deleteError": "Failed to delete widget.", + "previewError": "Failed to fetch preview. Check the URL and try again." + }, + "importReview": { + "title": "Review custom widget import", + "description": "Check where this widget connects and what board access its controls require before importing it.", + "migrationTitle": "Review migrated v2 replacement", + "migrationDescription": "Review and confirm this generated v2 definition. Confirming atomically replaces the preserved v1 record while keeping existing board placements linked to the same widget ID.", + "fileLabel": "Choose a custom widget JSON file", + "name": "Job name", + "origin": "Base origin", + "authentication": "المصادقة", + "networkScope": "Network scope", + "methods": "HTTP methods", + "permissions": "Required board permissions", + "sourceSetup": { + "title": "Configure API sources", + "description": "Confirm where this widget connects and add credentials. Private and loopback URLs are specific to your Homarr installation.", + "suggestedUrl": "Suggested URL", + "confirmUrl": "I confirm that this server URL is correct for my Homarr installation", + "ready": "URL ready", + "needsUrl": "Confirm URL", + "credentialsMissing": "Credentials missing", + "credentialsOptional": "You can install without credentials and configure them later, but requests will fail until they are added." + }, + "actionWarning": { + "title": "This widget can change remote data", + "description": "Review every named action, inherited credential and destructive confirmation after import. Secrets are not included in the file." + }, + "cancel": "Cancel import", + "confirm": "Import widget", + "confirmMigration": "Confirm v2 replacement" + }, + "secret": { + "apiKey": "API key or token", + "username": "Username", + "password": "Password", + "savedPlaceholder": "••••••• (saved, leave empty to keep)" + } + }, + "workshop": { + "title": "Workshop", + "browseWorkshop": "Browse Workshop", + "openCommunity": "Open Workshop", + "openOnWorkshop": "Open {title} on the Workshop website", + "back": "Back to Workshop", + "search": "Search widgets", + "searchCss": "Search CSS themes", + "sort": "Sort", + "sortTop": "Top rated", + "sortNewest": "Newest", + "listAriaLabel": "Workshop widgets", + "listAriaLabelCss": "Workshop CSS themes", + "empty": "No widgets match this search.", + "emptyDescription": "Community widgets published to the Workshop appear here.", + "emptyFilteredTitle": "No widgets match this search", + "emptyFilteredDescription": "No Workshop widget matches \"{search}\".", + "emptyCss": "No CSS themes match this search.", + "unavailableTitle": "Homarr Workshop seems to be unavailable", + "unavailable": "The community service may be temporarily down. Try again in a moment. Your installed widgets are unaffected.", + "loadError": "This submission could not be loaded.", + "noDescription": "No description", + "author": "by {name}", + "communityMember": "Community member", + "outdated": "Outdated", + "outdatedWarning": "The author marked this submission as outdated. Review it carefully before importing.", + "score": "Score: {count, number}", + "upvote": "Upvote", + "downvote": "Downvote", + "voteError": "The vote could not be saved.", + "signIn": "Sign in with GitHub", + "signInError": "GitHub sign-in failed. Check that the Workshop OAuth provider is configured and that pop-ups are allowed.", + "signOut": "Sign out", + "signInHint": "Sign in to vote or report. Installing does not require a Workshop account.", + "securityNotice": "Workshop widgets can call their declared API sources and perform declared actions with credentials you configure locally. Secrets are never included.", + "securityNoticeCss": "Community CSS can change the appearance and usability of a board. Review it before importing; nothing is saved until you save the board settings.", + "install": "Install", + "installReviewTitle": "Review before installing", + "installError": "This widget cannot be installed", + "installErrorDescription": "The Workshop submission is not a valid Custom JSX v2 widget.", + "useCss": "Import CSS", + "importCss": "Import CSS from Workshop", + "importCssConfirm": "Replace the current custom CSS with \"{title}\"? Nothing is saved until you save the board settings.", + "screenshotAlt": "{title} screenshot {count, number}", + "screenshotViewer": "{title} screenshot viewer", + "screenshotsLabel": "{title} screenshots", + "zoomScreenshot": "View full size", + "previousScreenshot": "Previous screenshot", + "nextScreenshot": "Next screenshot", + "showScreenshotThumbnails": "Show screenshot thumbnails", + "hideScreenshotThumbnails": "Hide screenshot thumbnails", + "closeScreenshotViewer": "Close screenshot viewer", + "technicalDetails": "Technical details", + "sourceCode": "Workshop entry", + "export": "Export", + "report": "Report", + "reportTitle": "Report submission", + "reportReason": "Reason", + "reportExplanation": "What should the Workshop moderators know?", + "reportSend": "Send report", + "reportSent": "Report sent", + "reportSentDescription": "Workshop moderators can now review this submission.", + "reportCount": "{count, plural, one {# report} other {# reports}}", + "reportWarning": "{count, plural, one {This submission has # open community report.} other {This submission has # open community reports.}} It remains installable, but you should review its content first.", + "reportVisibility": "Report details are visible only to this submission's author and Workshop admins.", + "reportCategory": { + "outdated": "Outdated or no longer working", + "malicious": "Malicious", + "spam": "Spam", + "copyright": "Copyright", + "inappropriate": "Inappropriate", + "other": "Other" + }, + "publish": { + "title": "Publish to Workshop", + "introTitle": "Share this widget with the community", + "introDescription": "Homarr exports a credential-free copy of the current widget. Add clear listing details so people know what it does before installing it.", + "listingDetails": "Workshop listing", + "listingDetailsDescription": "These details appear publicly alongside the exported widget definition.", + "success": "Published immediately. Community members can now install and report this widget.", + "successTitle": "Your widget is live", + "manageDescription": "Open the submission to update its listing, review reports, mark it outdated, or delete it. Submission management is handled directly on the Workshop website.", + "viewSubmission": "View and manage submission", + "done": "Done", + "signInHint": "Sign in to publish under your Workshop identity.", + "titleField": "Title", + "descriptionField": "Description", + "screenshots": "Screenshots", + "screenshotsDescription": "Up to five PNG, JPEG, or WebP images", + "screenshotsPlaceholder": "Choose screenshots", + "invalidScreenshot": "Use PNG, JPEG, or WebP images no larger than {maxSize} each.", + "privateSourceWarning": "This widget contains private source URLs for: {sources}. Replace personal hosts or IP addresses with safe service placeholders before publishing.", + "reviewSourcesTitle": "Review private source URLs", + "privateSourceConfirmation": "I reviewed these source URLs and they do not expose private infrastructure details", + "action": "Publish now", + "publicationNote": "Publishing is immediate. You can manage the submission afterwards on Workshop.", + "definitionChanged": "The widget changed while publication was being prepared. Review its private source URLs again, then retry.", + "error": "Publication failed" } }, "integration": { + "completion": { + "modalTitle": "Service ready", + "title": "{name} is connected", + "description": "The connection passed its test. Choose what to show on this board next.", + "connectionReady": "Service connection is ready", + "appReady": "App shortcut is ready", + "compatibleWidgets": "{count, plural, =0 {No compatible widgets} one {# compatible widget} other {# compatible widgets}} available", + "chooseWidget": "Choose widget", + "recipes": { + "title": "Recommended for this board", + "description": "Based on connected services and widgets already on this board.", + "newConnectionReason": "Now available through {integration}", + "existingConnectionReason": "Works with a service you already connected", + "dismiss": "Dismiss recommendations for this service on this board" + } + }, "page": { "list": { - "title": "Integrations", + "ariaLabel": "Configured integrations", "search": "Search your integrations", + "scopedNote": "Showing only the integrations you are allowed to manage.", "noResults": { - "title": "There are currently no integrations" + "title": "There are currently no integrations", + "description": "Connect a service to use its data and actions in Homarr widgets.", + "action": "Create your first integration", + "filteredTitle": "No integrations match your search", + "filteredDescription": "No integrations match \"{search}\". Try another name, type, or URL.", + "createOnlyTitle": "You can only add integrations", + "createOnlyDescription": "Your permissions let you create integrations but not manage existing ones. Ask an administrator for access to the ones you need." } }, "create": { "title": "New {name} integration", "notification": { "success": { - "title": "Creation successful", "message": "The integration has been successfully created" }, "error": { - "title": "Creation failed", "message": "The integration was unable to be created" } }, @@ -754,11 +1339,9 @@ "title": "Edit {name} integration", "notification": { "success": { - "title": "Changes have been successfully applied", "message": "The integration was successfully saved" }, "error": { - "title": "Changes have not been applied", "message": "The integration was unable to be saved" } }, @@ -775,23 +1358,15 @@ "message": "Are you certain that you want to delete the integration, {name}?", "notification": { "success": { - "title": "Deletion successful", "message": "The integration was successfully deleted" }, "error": { - "title": "Deletion failed", "message": "The integration was unable to be deleted" } } } }, "field": { - "name": { - "label": "Name" - }, - "url": { - "label": "URL" - }, "attemptSearchEngineCreation": { "label": "Create a search engine", "description": "Integration, {kind} can be used with the search engine. Please check this to automatically configure the search engine." @@ -803,6 +1378,10 @@ "label": "Create application", "description": "Create an application with the same information as the integration. Please leave the input field below empty to create the application with the integration URL." }, + "linkApp": { + "label": "Link an existing app", + "description": "Connect this integration to an app you can already use." + }, "appHref": { "placeholder": "Custom application URL" }, @@ -816,7 +1395,11 @@ "grid": { "widgetCount": "{count} widgets", "noWidgets": "No widgets", - "detected": "Detected via Docker" + "detected": "Detected via Docker", + "connected": "{count, plural, one {# connected} other {# connected}}", + "tiedWidgets": "Tied widgets", + "more": "+{count} more", + "loadError": "Integrations could not be loaded. Try again before creating a new connection." }, "category": { "dnsHole": "DNS", @@ -847,7 +1430,10 @@ "analytics": "Analytics", "vpn": "VPN", "mediaLibrary": "Media Library", - "uptimeMonitoring": "Uptime Monitoring" + "uptimeMonitoring": "Uptime Monitoring", + "beszel": "Beszel", + "systemMonitoring": "System monitoring", + "security": "Security" }, "testConnection": { "action": { @@ -1132,6 +1718,22 @@ "slug": { "label": "Status page slug", "newLabel": "New status page slug" + }, + "wazuhIndexerUrl": { + "label": "Indexer URL", + "newLabel": "New indexer URL" + }, + "wazuhIndexerUsername": { + "label": "Indexer username", + "newLabel": "New indexer username" + }, + "wazuhIndexerPassword": { + "label": "Indexer password", + "newLabel": "New indexer password" + }, + "wazuhDashboardUrl": { + "label": "Dashboard URL (optional)", + "newLabel": "New dashboard URL" } } }, @@ -1140,54 +1742,19 @@ "interact": "Interact with integrations", "full": "Full integration access" }, - "audiobookshelf": { - "name": "Audiobookshelf", - "description": "Self-hosted audiobook and podcast server" - }, - "navidrome": { - "name": "Navidrome", - "description": "Self-hosted music streaming server with Subsonic API compatibility" - }, - "uptimeKuma": { - "name": "Uptime Kuma", - "description": "Self-hosted uptime monitoring with public status pages", - "secret": { - "slug": { - "description": "The slug of your public status page. Defaults to \"default\" if not set." - }, - "apiKey": { - "description": "Optional API key for authenticated /metrics access" - } - } - }, - "traefik": { - "name": "Traefik", - "description": "Cloud-native reverse proxy and load balancer" - }, - "paperlessNgx": { - "name": "Paperless-ngx", - "description": "Document management system for archiving and organizing scanned documents" - }, - "patchmon": { - "name": "PatchMon", - "description": "Patch management and monitoring for Linux hosts" - }, - "bazarr": { - "name": "Bazarr", - "description": "Companion application to Sonarr and Radarr that manages and downloads subtitles" - }, - "wud": { - "name": "What's Up Docker", - "description": "Monitor which of your Docker containers have image updates available" + "llamacpp": { + "name": "llama.cpp", + "description": "Monitor a local llama.cpp llama-server: health, model and generation metrics" } }, "media": { "plural": "Media", "search": "Find media", "field": { - "name": "Name", + "preview": "Preview", "size": "Size", - "creator": "Creator" + "creator": "Creator", + "actions": "Actions" }, "action": { "upload": { @@ -1215,10 +1782,12 @@ } }, "copy": { - "label": "Copy URL" + "label": "Copy URL", + "labelNamed": "Copy URL for {name}" }, "open": { - "label": "Open media" + "label": "Open media", + "labelNamed": "Open {name}" } }, "noResults": { @@ -1233,7 +1802,6 @@ "add": "Add", "apply": "Apply", "backToOverview": "Back to overview", - "skip": "Skip", "change": "Change", "create": "Create", "createAnother": "Create and start over", @@ -1256,16 +1824,31 @@ "tryAgain": "Try again", "loading": "Loading", "show": "Show", - "hide": "Hide" + "hide": "Hide", + "undo": "Undo", + "editNamed": "Edit {name}", + "deleteNamed": "Delete {name}", + "clearSearch": "Clear search", + "copy": "Copy", + "copied": "Copied", + "refresh": "Refresh" + }, + "pagination": { + "pageOf": "Page {page} of {totalPages}" }, "here": "here", + "serviceUrlTemplate": { + "serverTitle": "Usual server address", + "urlModeLabel": "Service address pattern", + "hostPort": "Same host, different ports", + "subdomain": "One subdomain per service", + "path": "One path per service" + }, "iconPicker": { "label": "Icon URL", + "description": "Search the library, paste an image URL, or upload a file.", "header": "Please enter a name or object to filter for the icon. Homarr will search throughout {countIcons} different icons to find the right one", "headerLoading": "Type to search icons", - "noResults": "No icons match \"{search}\".", - "error": "Couldn't load icons.", - "description": "Search the library, paste an image URL, or upload a file.", "clear": "Clear image", "uploadImage": "Upload image", "results": "Image search results", @@ -1274,7 +1857,9 @@ "otherImages": "Other images", "urlLoading": "Checking image…", "urlReady": "Image is ready to use", - "urlError": "This image could not be loaded. Check the URL and try again." + "urlError": "This image could not be loaded. Check the URL and try again.", + "noResults": "No icons match \"{search}\".", + "error": "Couldn't load icons." }, "colorScheme": { "options": { @@ -1286,7 +1871,6 @@ "information": { "min": "Minimum", "max": "Maximum", - "days": "Days", "hours": "Hours", "minutes": "Minutes" }, @@ -1323,16 +1907,16 @@ }, "userAvatar": { "menu": { - "switchToDarkMode": "Switch to dark mode", - "switchToLightMode": "Switch to light mode", + "open": "Open account menu", "management": "Management", - "docker": "Docker", "preferences": "Your preferences", "logout": "Log-out", "login": "Log-in", "homeBoard": "Your home board", - "loggedOut": "Logged out", - "updateAvailable": "{countUpdates} updates available: {tag}" + "updateAvailable": "{countUpdates} updates available: {tag}", + "assistant": "Assistant", + "assistantThinking": "Thinking", + "modifier": "Mod" } }, "dangerZone": "Danger zone", @@ -1380,13 +1964,66 @@ "kilometersPerHour": "km/h", "milesPerHour": "mph" } + }, + "widgetQuery": { + "loading": "Loading widget data" + }, + "total": "Total", + "filesystemUsage": "{count, plural, one {Show usage for # filesystem} other {Show usage for # filesystems}}", + "field": { + "name": "Job name" + }, + "label": { + "new": "New" + }, + "entity": { + "apps": "البرامج", + "boards": "الألواح", + "certificates": "الشهادات", + "customWidgets": "Custom widgets", + "groups": "المجموعات", + "integrations": "التكاملات", + "invites": "Invites", + "logs": "السجلات", + "media": "Media", + "searchEngines": "محركات البحث", + "tasks": "المهام", + "users": "مستخدمين" } }, "section": { - "dynamic": { + "option": { + "showLabel": { + "label": "Show label", + "description": "Display the container label above its contents." + }, + "collapsible": { + "label": "Allow collapse", + "description": "Let viewers expand and collapse this container." + }, + "showOpenAll": { + "label": "Show open-all action", + "description": "Show an action that opens every app in this container in new tabs." + }, + "scrollable": { + "label": "Scrollable", + "description": "Keep this container at its set size and scroll its contents instead of growing to fit them." + } + }, + "action": { + "openAllInNewTabsFor": "Open all apps in {name} in tabs" + }, + "openAllInNewTabs": { + "title": "Open all in tabs", + "text": "Some browsers may block the bulk-opening of tabs for security reasons. Homarr was unable to open all windows, because your browser blocked this action. Please allow \"Open pop-up windows\" and re-try." + }, + "container": { + "untitled": "Untitled container", "action": { - "create": "Create a new dynamic section", - "remove": "Delete dynamic section" + "create": "New container", + "remove": "Remove container", + "expand": "Expand", + "collapse": "Collapse" }, "option": { "title": { @@ -1400,55 +2037,12 @@ } }, "remove": { - "title": "Remove dynamic section", - "message": "Are you certain that you want to remove this dynamic section? All items inside will be moved to the same location within the parent section." - } - }, - "category": { - "field": { - "name": { - "label": "Name" - } - }, - "action": { - "create": "New category", - "edit": "Rename category", - "remove": "Remove category", - "moveUp": "Move upwards", - "moveDown": "Move downwards", - "createAbove": "Create new category above", - "createBelow": "Create new category below", - "openAllInNewTabs": "Open all in new tabs" - }, - "create": { - "title": "New category", - "submit": "Add category" - }, - "remove": { - "title": "Remove category", - "message": "Are you sure you want to remove the category {name}?" - }, - "edit": { - "title": "Rename category", - "submit": "Rename category" - }, - "menu": { - "label": { - "create": "New category", - "changePosition": "Change position", - "settings": "Settings" - } - }, - "openAllInNewTabs": { - "title": "Open all in tabs", - "text": "Some browsers may block the bulk-opening of tabs for security reasons. Homarr was unable to open all windows, because your browser blocked this action. Please allow \"Open pop-up windows\" and re-try." + "message": "Remove this container? Its contents will move into the surrounding area." } } }, "item": { "action": { - "create": "New item", - "import": "Import item", "edit": "Edit item", "moveResize": "Move / resize item", "duplicate": "Duplicate item", @@ -1457,7 +2051,7 @@ "menu": { "label": { "settings": "Settings", - "refresh": "Refresh", + "settingsFor": "Settings for {name}", "options": "Options", "actions": "Actions" }, @@ -1466,21 +2060,96 @@ "error": "Error", "loading": "Loading", "idle": "Idle" + }, + "notification": { + "saveError": { + "title": "Unable to save widget", + "message": "The widget changes were rolled back" + } } }, "create": { "title": "Choose item to add", "search": "Filter items", - "addToBoard": "Add to board" + "addToBoard": "Add to board", + "addAtPosition": "Add item here", + "destination": { + "label": "Add to", + "description": "Choose where the widget should appear. You can still move it later.", + "mainCanvas": "Main canvas", + "leftRail": "Left rail", + "rightRail": "Right rail" + }, + "connectionStatus": { + "ready": "Ready", + "needsSetup": "Needs setup", + "noConnectionRequired": "No connection required" + }, + "customWidget": "Custom widget", + "standalone": "Standalone", + "missingIntegration": { + "title": "Connect a service first", + "noPermission": "This widget needs a compatible service connection. Ask an administrator to connect one, then try again." + }, + "notification": { + "success": { + "title": "Widget added", + "message": "{name} was added to this board.", + "relocatedMessage": "{name} was added to {destination} because the selected destination was unavailable." + }, + "error": { + "title": "Unable to add item", + "message": "The item could not be added to this board" + } + } + }, + "selection": { + "summary": "{count, plural, one {# selected item} other {# selected items}}", + "selected": "{count, plural, one {# selected} other {# selected}}", + "copy": "Copy", + "copied": "{count, plural, one {# item copied to the clipboard} other {# items copied to the clipboard}}", + "copyError": "The selected items could not be copied. Your browser may not allow clipboard access.", + "paste": "Paste", + "pasteShortcut": "Paste copied items here (Ctrl / ⌘ + V)", + "pasted": "{count, plural, one {# item pasted} other {# items pasted}}", + "pasteError": "The clipboard could not be read. Your browser may not allow clipboard access.", + "pasteInvalid": "The clipboard does not contain valid Homarr board items.", + "pasteUnavailable": "The copied items do not fit on this board.", + "removed": "{count, plural, one {# item removed} other {# items removed}}", + "move": "Move", + "moveTo": "Move selected items", + "delete": "Delete", + "clear": "Clear selection", + "clearShortcut": "Clear selection (Escape)", + "saveErrorTitle": "Unable to update items", + "saveErrorMessage": "The changes could not be saved. The board was refreshed.", + "moveUnavailableTitle": "Unable to move selected items", + "moveUnavailableMessage": "The destination does not have enough room for the entire selection." }, "moveResize": { "title": "Move / resize item", + "entryLabel": "{name}, column {column}, row {row}", + "target": { + "numbered": "{name}, destination {index}", + "located": "{name}, {location}, destination {index}" + }, + "keyboard": { + "instructions": "Press Enter or Space to start keyboard editing. Use arrow keys to move, Shift plus arrow keys to resize, and Escape to stop.", + "started": "Keyboard editing started. Use arrow keys to move, Shift plus arrow keys to resize, and Escape to stop.", + "stopped": "Keyboard editing stopped.", + "boundary": "That change does not fit inside this section." + }, "field": { + "section": { + "label": "Section or rail" + }, "width": { - "label": "Width" + "label": "Width", + "shortLabel": "W" }, "height": { - "label": "Height" + "label": "Height", + "shortLabel": "H" }, "xOffset": { "label": "X offset" @@ -1494,18 +2163,36 @@ "title": "Edit item", "tab": { "widget": "Edit widget", - "app": "Edit app" + "app": "Edit app", + "integration": "Edit integration" }, "app": { "propagationNotice": "Changes to this app will be applied everywhere it is used across all dashboards." }, + "integration": { + "action": "Edit connection", + "description": "Test or repair a selected connection without leaving this widget.", + "editLabel": "Edit {name} integration", + "fullAccessRequired": "Full access required", + "propagationNotice": "Changes to this integration apply everywhere it is used. The connection is tested before it is saved.", + "loading": "Loading integration", + "loadError": "This integration could not be loaded. Try again before changing its connection settings." + }, + "preview": { + "integrationRequired": "Choose a connection to preview this widget.", + "size": "Size" + }, + "settings": { + "label": "Widget settings" + }, "advancedOptions": { "label": "Advanced options", "title": "Advanced item options" }, "field": { "integrations": { - "label": "Integrations" + "label": "Integrations", + "removeLabel": "Remove {name} integration" }, "title": { "label": "Title" @@ -1519,17 +2206,18 @@ } }, "remove": { - "title": "Remove item", "message": "Are you sure you want to remove this item?" + }, + "advancedFocus": { + "open": "Open advanced view", + "close": "Close advanced view", + "label": "{widget} advanced view" } }, "widget": { "integrationSelect": { "configureIntegrationFirst": "Connect an integration first", - "loading": "Loading...", - "placeholder": "Select an option", - "noResults": "No results found", - "loadError": "Failed to load options" + "placeholder": "Select an option" }, "app": { "name": "App", @@ -1538,9 +2226,6 @@ "appId": { "label": "Choose app" }, - "openInNewTab": { - "label": "Open in new tab" - }, "showTitle": { "label": "Show app name" }, @@ -1548,11 +2233,8 @@ "label": "Enable status check" }, "layout": { - "label": "Layout", "option": { - "row": "Horizontal", "row-reverse": "Horizontal (reversed)", - "column": "Vertical", "column-reverse": "Vertical (reversed)" } }, @@ -1577,23 +2259,60 @@ "name": "Bookmarks", "description": "Displays multiple app links", "option": { - "title": { - "label": "Title" + "showTitle": { + "label": "Show widget title" + }, + "titleSize": { + "label": "Widget title size (px)" }, "layout": { "label": "Layout", "option": { - "row": { - "label": "Horizontal" - }, - "column": { - "label": "Vertical" - }, - "grid": { - "label": "Grid" + "adaptive": { + "label": "Adaptive" }, "gridHorizontal": { "label": "Grid horizontal" + }, + "icons": { + "label": "Icons" + } + } + }, + "variant": { + "label": "Appearance", + "option": { + "soft": { + "label": "Soft" + }, + "filled": { + "label": "Filled" + }, + "outline": { + "label": "Outline" + }, + "plain": { + "label": "Plain" + } + } + }, + "spacing": { + "label": "Card spacing", + "option": { + "xs": { + "label": "Extra small" + }, + "sm": { + "label": "Small" + }, + "md": { + "label": "Medium" + }, + "lg": { + "label": "Large" + }, + "xl": { + "label": "Extra large" } } }, @@ -1606,17 +2325,28 @@ "hideHostname": { "label": "Hide hostnames" }, - "openNewTab": { - "label": "Open in new tab" - }, "withBorder": { "label": "Show border" }, + "grow": { + "label": "Expand cards to fill row" + }, + "customUrls": { + "label": "Custom links" + }, "items": { "label": "Bookmarks", - "add": "Add bookmark" + "remove": "Remove bookmark", + "apps": { + "label": "Add bookmarks", + "description": "Paste URLs or find existing apps. Drag the bookmarks below to reorder them.", + "placeholder": "Paste URLs or search apps", + "addUrl": "Add this URL", + "hint": "Press Enter to add a URL. Paste comma-separated or one-per-line URLs to add several." + } } - } + }, + "empty": "Add a URL or app in the widget settings" }, "archiveTeamWarrior": { "name": "ArchiveTeam Warrior", @@ -1625,33 +2355,61 @@ "showBroadcastMessage": { "label": "Show broadcast messages" } + }, + "noProjectSelected": "No project selected", + "runnerStatus": "Runner: {status}", + "projectId": "Project: {id}", + "sessionReceived": "Session received: {value}", + "sessionSent": "Session sent: {value}", + "sessionId": "Session: {id}", + "startedAt": "Started {date}", + "emptyItems": "No active or recent jobs in this snapshot", + "metric": { + "running": "Running", + "completed": "Done", + "failed": "Failed", + "canceled": "Cancelled", + "download": "Download", + "upload": "Upload" + }, + "status": { + "running": "Running", + "completed": "Completed", + "failed": "Failed", + "canceled": "Cancelled", + "stopped": "Stopped", + "idle": "Idle", + "unknown": "Unknown" + } + }, + "wud": { + "name": "What's Up Docker", + "description": "Show how many watched containers have updates available.", + "title": "What's Up Docker", + "monitored": "Monitored", + "updatesAvailable": "{count, plural, one {# update available} other {# updates available}}", + "updateAvailable": "Update available", + "openReleaseNotes": "Open release notes", + "option": { + "showRing": { + "label": "Show update ring" + }, + "showUpdateList": { + "label": "Show container update list", + "description": "Lists each monitored container that has an image update available" + } } }, "dnsHoleSummary": { "name": "DNS Hole Summary", "description": "Displays the summary of your DNS Hole", "option": { - "layout": { - "label": "Layout", - "option": { - "row": { - "label": "Horizontal" - }, - "column": { - "label": "Vertical" - }, - "grid": { - "label": "Grid" - } - } - }, "usePiHoleColors": { "label": "Use Pi-Hole colours" } }, "error": { - "internalServerError": "Failed to fetch DNS Hole Summary", - "integrationsDisconnected": "No data available, all integrations disconnected" + "internalServerError": "Failed to fetch DNS Hole Summary" }, "data": { "adsBlockedToday": "Blocked today", @@ -1659,32 +2417,24 @@ "dnsQueriesToday": "Queries today", "domainsBeingBlocked": "Domains on blocklist" }, - "domainsTooltip": "Due to multiple integrations Homarr can't calculate the exact number of domains being blocked" + "domainsTooltip": "Due to multiple integrations Homarr can't calculate the exact number of domains being blocked", + "status": { + "enabled": "Enabled", + "disabled": "Disabled", + "unknown": "Unknown" + } }, "dnsHoleControls": { "name": "DNS Hole Controls", "description": "Control PiHole or AdGuard from your dashboard", "option": { - "layout": { - "label": "Layout", - "option": { - "row": { - "label": "Horizontal" - }, - "column": { - "label": "Vertical" - }, - "grid": { - "label": "Grid" - } - } - }, "showToggleAllButtons": { "label": "Show Toggle All Buttons" } }, "error": { - "internalServerError": "Failed to control DNS Hole" + "internalServerError": "Failed to control DNS Hole", + "bulkActionsFailed": "{count, plural, one {# action failed} other {# actions failed}}" }, "controls": { "enableAll": "Enable All", @@ -1695,8 +2445,6 @@ "disabled": "Disabled", "processing": "Processing", "disconnected": "Disconnected", - "hours": "Hours", - "minutes": "Minutes", "unlimited": "Leave blank to unlimited" } }, @@ -1708,16 +2456,10 @@ "label": "Custom Title/City display", "description": "Show off a custom title or the name of the city/country on top of the clock." }, - "customTitle": { - "label": "Title" - }, "is24HourFormat": { "label": "24-hour format", "description": "Use 24-hour format instead of 12-hour format" }, - "showSeconds": { - "label": "Display seconds" - }, "useCustomTimezone": { "label": "Use a fixed timezone" }, @@ -1736,29 +2478,295 @@ "label": "Custom time format", "description": "Use ISO 8601 to format time (this will override other options)" }, - "customDateFormat": { - "label": "Custom date format", - "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" + }, + "animateWeatherIcon": { + "label": "Animate weather icon", + "description": "Animate the weather icon. Disabled by default and always disabled when reduced motion is requested." + }, + "colorWeatherByDayNight": { + "label": "Colour weather by day/night", + "description": "Tint the weather icon and temperature with a day colour or a night colour, based on whether it's currently day or night at the chosen location." + }, + "dayWeatherColor": { + "label": "Day colour" + }, + "nightWeatherColor": { + "label": "Night colour" + }, + "worldClockCities": { + "label": "World clock cities", + "description": "Add and order up to six cities for advanced view." } + }, + "timezoneList": { + "timezone": "Time zone", + "cityLabel": "City label", + "searchPlaceholder": "Search time zones", + "noResults": "No time zones found", + "unsupportedOption": "Unsupported: {timeZone}", + "add": "Add city", + "remove": "Remove {city}", + "reorder": "Reorder {city}", + "limit": "{count} of {maximum} cities configured" + }, + "worldClock": { + "primary": "Primary clock", + "local": "Local time", + "today": "Today", + "tomorrow": "Tomorrow", + "yesterday": "Yesterday", + "noSecondaryCities": "Add cities in widget options to compare them here.", + "unsupportedPrimaryTitle": "Primary time zone is unavailable", + "unsupportedPrimary": "{timeZone} is not supported in this browser. Showing UTC as a clearly marked fallback.", + "unsupportedTimeZone": "Unsupported time zone: {timeZone}", + "accessibleTime": "{city}: {time}, {date}, {timeZone}", + "advancedLabel": "Advanced world clock", + "cities": "World clocks", + "cityCount": "{count} time zones", + "timeBarLabel": "24-hour time-of-day position for {city}", + "dayProgress": "{percent}% elapsed · {hours}h {minutes}m remaining", + "phaseLegend": "Time-of-day legend", + "tick": { + "midnight": "00", + "morning": "06", + "noon": "12", + "evening": "18", + "end": "24" + }, + "phaseRange": { + "night": "00–05 · 21–24", + "dawn": "05–08", + "day": "08–18", + "dusk": "18–21" + }, + "phase": { + "night": "Night", + "dawn": "Dawn", + "day": "Day", + "dusk": "Dusk" + } + } + }, + "airQuality": { + "name": "Air quality & UV", + "description": "Displays air quality, ultraviolet index, pollutants and pollen for a location.", + "option": { + "location": { + "label": "Air quality location" + }, + "aqiStandard": { + "label": "AQI standard", + "options": { + "auto": "Automatic for locale", + "european": "European AQI", + "us": "US AQI" + } + }, + "showUv": { + "label": "Show UV index" + }, + "showPollutants": { + "label": "Show pollutant concentrations" + }, + "showPollen": { + "label": "Show pollen concentrations" + } + }, + "category": { + "good": "Good", + "fair": "Fair", + "moderate": "Moderate", + "unhealthySensitive": "Unhealthy for sensitive groups", + "unhealthy": "Unhealthy", + "poor": "Poor", + "veryPoor": "Very poor", + "veryUnhealthy": "Very unhealthy", + "extremelyPoor": "Extremely poor", + "hazardous": "Hazardous", + "unknown": "No AQI reading" + }, + "uv": { + "label": "UV index", + "category": { + "low": "Low", + "moderate": "Moderate", + "high": "High", + "veryHigh": "Very high", + "extreme": "Extreme", + "unknown": "No reading" + } + }, + "dominantPollutant": "Dominant pollutant", + "aqiLabel": "AQI", + "strongestPollen": "Highest pollen", + "unit": { + "concentration": "{value} µg/m³", + "pollen": "{value} grains/m³" + }, + "pollutant": { + "pm2_5": "PM2.5", + "pm10": "PM10", + "ozone": "Ozone", + "nitrogenDioxide": "Nitrogen dioxide", + "sulphurDioxide": "Sulphur dioxide", + "carbonMonoxide": "Carbon monoxide" + }, + "pollen": { + "alder": "Alder", + "birch": "Birch", + "grass": "Grass", + "mugwort": "Mugwort", + "olive": "Olive", + "ragweed": "Ragweed" + }, + "compact": { + "sixHourTrend": "AQI trend for the next six hours" + }, + "advanced": { + "observedAt": "Updated at {time}", + "next24Hours": "Next 24 hours", + "pollutants": "Pollutant concentrations", + "pollen": "Pollen concentrations", + "sevenDayForecast": "7-day maximum forecast", + "aqiValue": "AQI {value}", + "uvValue": "UV {value}", + "uvShort": "UV {value}", + "noForecast": "No forecast data available" + } + }, + "countdown": { + "name": "Countdowns", + "description": "Tracks upcoming events and recurring anniversaries.", + "option": { + "events": { + "label": "Events", + "description": "Add and order up to 20 one-time or yearly countdowns. Dates are entered in the selected time zone." + }, + "showProgress": { + "label": "Show progress" + }, + "showSeconds": { + "label": "Show seconds", + "description": "Keep seconds visible for every upcoming event." + } + }, + "dateTimeEventList": { + "newEvent": "New event", + "add": "Add event", + "remove": "Remove {event}", + "reorder": "Reorder {event}", + "eventLabel": "Event label", + "timezone": "Time zone", + "unsupportedOption": "Unsupported: {timeZone}", + "recurrence": "Repeats", + "recurrenceOption": { + "none": "Does not repeat", + "yearly": "Every year" + }, + "target": "Event date and time", + "trackProgress": "Track progress from a start date", + "start": "Progress start date and time", + "confirmDateTime": "Confirm date and time", + "limit": "{count} of {maximum} events configured" + }, + "empty": { + "title": "No countdowns yet", + "description": "Add an event in widget options to start counting down." + }, + "completed": "Completed", + "yearly": "Yearly", + "progress": "Event progress", + "upcoming": "Upcoming", + "completedEvents": "Completed events", + "invalid": { + "title": "Some events cannot be displayed", + "description": "{count, plural, one {One event has an invalid date or unsupported time zone.} other {# events have an invalid date or unsupported time zone.}}", + "value": "Unavailable" + }, + "alert": { + "notifications": "Browser notifications", + "permissionDenied": "Notifications are blocked in this browser.", + "reached": "The countdown has reached its target." + } + }, + "timer": { + "name": "Timer / Pomodoro", + "description": "Runs a simple timer or a configurable Pomodoro sequence.", + "option": { + "mode": { + "label": "Mode", + "options": { + "timer": "Timer", + "pomodoro": "Pomodoro" + } + }, + "timerMinutes": { + "label": "Timer minutes" + }, + "focusMinutes": { + "label": "Focus minutes" + }, + "shortBreakMinutes": { + "label": "Short break duration (minutes)" + }, + "longBreakMinutes": { + "label": "Long break duration (minutes)" + }, + "sessionsBeforeLongBreak": { + "label": "Focus sessions before a long break" + }, + "autoStartBreaks": { + "label": "Automatically start breaks" + }, + "autoStartFocus": { + "label": "Automatically start focus sessions" + } + }, + "phase": { + "timer": "Timer", + "focus": "Focus", + "shortBreak": "Short break", + "longBreak": "Long break" + }, + "action": { + "start": "Start", + "pause": "Pause", + "reset": "Reset" + }, + "attention": { + "timerComplete": "Timer finished", + "phaseReady": "{phase} ready" + }, + "progress": "Timer progress: {progress}%", + "compact": { + "completedFocus": "{count, plural, =0 {No focus sessions completed} one {# focus session completed} other {# focus sessions completed}}" + }, + "alert": { + "title": "Timer finished", + "completed": "{phase} completed." + }, + "advanced": { + "sequence": "Pomodoro sequence", + "focusSession": "Focus {session}", + "settings": "Permanent settings", + "settingsHint": "Use the widget context menu to edit these board settings.", + "localAlerts": "Local alerts", + "notifications": "Browser notifications", + "sound": "Timer sounds", + "localAlertsHint": "Timer sounds are enabled by default. Sounds and notifications apply only to this widget in this browser.", + "notificationsDenied": "Notifications are blocked in this browser." } }, "minecraftServerStatus": { "name": "Minecraft Server Status", "description": "Displays the status of a Minecraft server", "option": { - "title": { - "label": "Title" - }, "domain": { "label": "Server address" }, @@ -1778,11 +2786,21 @@ "noStation": "No station selected", "option": { "baseUrl": { - "label": "Search.ch URL" + "label": "Search.ch URL", + "description": "Custom URLs must resolve to a public IP address. Private and local hosts are rejected." }, "station": { - "label": "Station" + "label": "Station", + "placeholder": "Search for a station" } + }, + "error": { + "customSourceUnavailable": "The timetable source is unavailable. Check that its URL resolves to a public IP address.", + "stationSearch": "Unable to search for stations. Check the custom URL and your board access." + }, + "warning": { + "stale": "The timetable could not be refreshed. Showing departures last updated at {time}.", + "staleCompact": "Stale data" } }, "notebook": { @@ -1814,6 +2832,9 @@ "directionRtl": "Set text direction right to left", "blockquote": "Blockquote", "horizontalLine": "Horizontal line", + "details": "Toggle collapsible section", + "expandDetails": "Expand collapsible section", + "collapseDetails": "Collapse collapsible section", "bulletList": "Bullet list", "orderedList": "Ordered list", "checkList": "Check list", @@ -1822,16 +2843,20 @@ "link": "Link", "unlink": "Remove link", "image": "Embed Image", - "addTable": "Add table", + "insertTable": "Insert table", + "insertTableSize": "Insert {columns} × {rows} table", "deleteTable": "Delete Table", "colorCell": "Colour cell", - "mergeCell": "Toggle cell merging", + "mergeCells": "Merge cells", + "splitCell": "Split cell", "addColumnLeft": "Add column before", "addColumnRight": "Add column after", "deleteColumn": "Delete column", "addRowTop": "Add row before", "addRowBelow": "Add row after", - "deleteRow": "Delete row" + "deleteRow": "Delete row", + "toggleHeaderRow": "Toggle header row", + "toggleHeaderColumn": "Toggle header column" }, "align": { "left": "Left", @@ -1842,8 +2867,6 @@ "clearColor": "Clear colour", "source": "Source", "widthPlaceholder": "Value in % or pixels", - "columns": "Columns", - "rows": "Rows", "width": "Width", "height": "Height" }, @@ -1855,7 +2878,9 @@ "discard": "Discard changes", "keepEditing": "Keep editing" } - } + }, + "saveFailed": "Unable to save note", + "documentStats": "{words, plural, one {# word} other {# words}} · {characters, plural, one {# character} other {# characters}}" }, "anchorNote": { "name": "Anchor Note", @@ -1864,9 +2889,6 @@ "noteId": { "label": "Note" }, - "showTitle": { - "label": "Show title" - }, "showUpdatedAt": { "label": "Show last updated" } @@ -1876,14 +2898,20 @@ "notFound": "Note not found", "noNotes": "No notes found", "integrationRequired": "Select an Anchor integration first", - "updatedAt": "Updated {date}", "untitled": "Untitled", - "edit": "Edit", - "save": "Save", - "cancel": "Cancel", "readOnlyViewer": "You have viewer access to this note. Editing is disabled.", "saveForbidden": "You do not have permission to edit this note.", - "saveFailed": "Failed to save this note. Please try again." + "saveFailed": "Failed to save this note. Please try again.", + "createdAt": "Created {date}", + "permission": { + "owner": "Owner", + "editor": "Editor", + "viewer": "Viewer" + }, + "status": { + "pinned": "Pinned", + "archived": "Archived" + } }, "iframe": { "name": "iFrame", @@ -1942,6 +2970,25 @@ "clickable": { "label": "Clickable" } + }, + "state": { + "on": "On", + "off": "Off", + "unavailable": "Unavailable", + "unknown": "Unknown" + }, + "advanced": { + "entityId": "Entity ID: {id}", + "lastChanged": "Changed {date}", + "attribute": { + "unit": "Unit", + "deviceClass": "Device class", + "icon": "Icon" + } + }, + "error": { + "loadFailed": "Unable to load entity", + "toggleFailed": "Unable to update entity" } }, "smartHome-executeAutomation": { @@ -1957,11 +3004,31 @@ }, "spotlightAction": { "run": "Run {name}" + }, + "advanced": { + "lastExecuted": "Last run at {time}", + "automationId": "Automation ID: {id}", + "ready": "Ready to run", + "noPermission": "No permission to run this automation" + }, + "status": { + "running": "Running automation", + "success": "Automation completed" + }, + "error": { + "executeFailed": "Unable to run automation" } }, "stockPrice": { "name": "Stock Price", "description": "Displays the current stock price of a company", + "advanced": { + "currentPrice": "Current price", + "previousClose": "Previous close", + "changePercentage": "Change (%)", + "minimum": "Minimum", + "maximum": "Maximum" + }, "option": { "stock": { "label": "Stock symbol" @@ -2032,6 +3099,10 @@ "label": "1 Month" } } + }, + "showDetails": { + "label": "Show details", + "description": "Show the name, change and time range in the compact view. Turn off to show only the symbol and price." } } }, @@ -2059,6 +3130,13 @@ "showUnmonitored": { "label": "Show unmonitored" } + }, + "advanced": { + "previousMonth": "Show previous month", + "nextMonth": "Show next month", + "eventCount": "{count, plural, one {# event} other {# events}}", + "loading": "Loading calendar events...", + "noEvents": "No events this month" } }, "weather": { @@ -2071,16 +3149,18 @@ "disableTemperatureDecimals": { "label": "Disable temperature decimals" }, + "animateIcons": { + "label": "Animate weather icons" + }, + "showHumidity": { + "label": "Show humidity" + }, "showCurrentWindSpeed": { - "label": "Show current wind speed", - "description": "Only on current weather" + "label": "Show current wind speed" }, "useImperialSpeed": { "label": "Use mph for windspeed" }, - "location": { - "label": "Weather location" - }, "showCity": { "label": "Show city" }, @@ -2090,13 +3170,10 @@ "forecastDayCount": { "label": "Amount of forecast days", "description": "When the widget is not wide enough, less days are shown" - }, - "dateFormat": { - "label": "Date Format", - "description": "How the date should look like" } }, "currentWindSpeed": "{currentWindSpeed} {unit}", + "disabled": "Weather data is unavailable because outbound connections are disabled", "dailyForecast": { "sunrise": "Sunrise", "sunset": "Sunset", @@ -2119,6 +3196,47 @@ "thunderstorm": "Thunderstorm", "thunderstormWithHail": "Thunderstorm with hail", "unknown": "Unknown" + }, + "details": "Show weather details", + "detailsFor": "Show weather details for {date}", + "advanced": { + "forecast": "7-day forecast", + "hourlyForecast": "Next 24 hours", + "day": "Day", + "time": "Time", + "conditions": "Conditions", + "temperature": "Temperature", + "feelsLike": "Feels like {temperature}", + "feelsLikeLabel": "Feels like", + "feelsLikeRange": "Feels like: {maximum} / {minimum}", + "highLow": "High {maximum} · low {minimum}", + "observedAt": "Updated at {time}", + "humidity": "Humidity", + "averageHumidity": "Average humidity: {humidity}%", + "currentHumidity": "Current humidity", + "wind": "Wind / gusts ({unit})", + "currentWind": "Current wind / gusts", + "windValue": "{speed} / {gusts} {unit}", + "windDetail": "Maximum wind / gusts: {speed} / {gusts} {unit}", + "nextHourPrecipitation": "Precipitation in the next hour", + "precipitationChance": "Chance of precipitation", + "precipitationValue": "{probability}% · {amount} mm", + "precipitationDetail": "Precipitation: {probability}% · {amount} mm", + "todayUv": "Today's maximum UV index", + "uvIndex": "Maximum UV index: {value}", + "daylight": "Daylight: {duration}", + "hourlyTooltip": "Feels like {feelsLike}{temperatureUnit} · {amount} mm · {humidity}% humidity · {speed} {speedUnit} wind", + "hourlyTooltipWithoutHumidity": "Feels like {feelsLike}{temperatureUnit} · {amount} mm · {speed} {speedUnit} wind", + "detailLabel": { + "feelsLike": "Feels like", + "precipitation": "Precipitation", + "humidity": "Average humidity", + "wind": "Maximum wind / gusts", + "uv": "Maximum UV index", + "daylight": "Daylight" + }, + "sun": "Sunrise / sunset", + "noForecast": "No forecast data available" } }, "indexerManager": { @@ -2131,8 +3249,15 @@ }, "title": "Indexer manager", "testAll": "Test all", + "status": { + "healthy": "Healthy", + "unhealthy": "Unhealthy", + "disabled": "Disabled", + "unknown": "Health unavailable" + }, "error": { - "internalServerError": "Failed to fetch indexers status" + "internalServerError": "Failed to fetch indexers status", + "testAll": "The indexer test failed. Try again." } }, "healthMonitoring": { @@ -2161,11 +3286,6 @@ "fileSystem": { "label": "Show Filesystem Info" }, - "visibleStorageVolumes": { - "label": "Visible storage volumes", - "description": "Only available when all selected integrations are Synology. Leave empty to show all detected storage volumes.", - "placeholder": "Select storage volumes" - }, "defaultTab": { "label": "Default tab" }, @@ -2188,17 +3308,27 @@ "minutes": "{count} minutes", "used": "Used", "available": "Available", - "lastSeen": "Last status update: {lastSeen}" + "lastSeen": "Last status update: {lastSeen}", + "updatesAvailable": "{count, plural, one {# update available} other {# updates available}}", + "rebootRequired": "Reboot required", + "rebootNotRequired": "No reboot required" + }, + "smartStatus": { + "attributesWithinThresholds": "SMART: attributes within thresholds", + "attributesFailed": "SMART: {attributes} failed", + "noCriticalWarning": "SMART: no warning reported by SSD", + "criticalWarning": "SMART: critical warning reported by SSD" + }, + "gauge": { + "cpuUsage": "CPU usage", + "cpuTemperature": "CPU temperature", + "memoryUsage": "Memory usage", + "gpuUsage": "{name} GPU usage" }, - "memory": {}, "error": { "internalServerError": "Failed to fetch health status" }, "cluster": { - "summary": { - "cpu": "CPU", - "memory": "RAM" - }, "resource": { "node": { "name": "Nodes" @@ -2234,8 +3364,6 @@ "table": { "header": { "name": "Name", - "cpu": "CPU", - "memory": "RAM", "node": "Node" } } @@ -2245,33 +3373,29 @@ "name": "Docker stats", "description": "Stats of your containers (This widget can only be added with administrator privileges)", "option": { - "columns": { - "label": "Columns to show" + "endpointIds": { + "label": "Docker environments", + "description": "Leave empty to show containers from every Docker environment", + "placeholder": "All Docker environments" }, - "enableRowSorting": { - "label": "Enable items sorting" + "containerFilter": { + "label": "Containers to filter" + }, + "filterIsWhitelist": { + "label": "Filter as a whitelist" }, "defaultSort": { - "label": "Column used for sorting by default", "option": { "name": "Name", "state": "State", "cpuUsage": "CPU usage", "memoryUsage": "Memory usage" } - }, - "descendingDefaultSort": { - "label": "Invert sorting" - }, - "columnOrder": { - "label": "Column order" - }, - "columnWidths": { - "label": "Column widths" } }, "error": { "internalServerError": "Failed to fetch containers stats", + "endpointsUnavailable": "Docker endpoints are unavailable", "layoutSaveTitle": "Table layout not saved", "layoutSaveMessage": "The Docker table layout could not be saved. Try moving or resizing the column again." }, @@ -2280,7 +3404,6 @@ } }, "coolify": { - "name": "Coolify", "description": "Overview of your Coolify instance with servers and applications", "option": { "showServers": { @@ -2306,17 +3429,49 @@ "internalServerError": "Failed to fetch Coolify data" }, "server": { - "buildServer": "Build" + "buildServer": "Build", + "resourceCounts": "{applications, plural, one {# app} other {# apps}} / {services, plural, one {# service} other {# services}}", + "reachability": "Reachability", + "usability": "Usability" + }, + "source": { + "url": "Source: {url}", + "unavailable": "{source}: unavailable" }, "instances": { "title": "Instances" + }, + "action": { + "openResource": "Open {name}", + "openLogs": "Open {name} logs", + "showIp": "Show IP address", + "hideIp": "Hide IP address" + }, + "status": { + "running": "Running", + "stopped": "Stopped", + "exited": "Exited", + "starting": "Starting", + "restarting": "Restarting", + "unknown": "Unknown", + "online": "Online", + "offline": "Offline", + "reachable": "Reachable", + "unreachable": "Unreachable", + "usable": "Usable", + "unusable": "Unusable" } }, "vpn": { "name": "VPN", "description": "Overview of your VPN connections", "serviceUnavailable": "VPN unavailable", - "option": {} + "status": { + "running": "Running", + "notRunning": "Not running", + "unavailable": "Unavailable", + "vpn": "VPN: {status}" + } }, "ups": { "name": "UPS", @@ -2343,14 +3498,19 @@ "runtime": "Runtime", "load": "Load", "input": "Input", - "output": "Output" + "output": "Output", + "batteryVoltage": "Battery voltage", + "power": "Power", + "temperature": "Temperature", + "manufacturer": "Manufacturer", + "model": "Model", + "serial": "Serial" }, "error": { "internalServerError": "Failed to fetch UPS data" } }, "tracearr": { - "name": "Tracearr", "description": "Enhanced media server monitoring with detailed stream and transcoding data", "option": { "showStreams": { @@ -2438,10 +3598,7 @@ "label": "Event", "description": "Show total occurrences of a specific event", "placeholder": "Select an event", - "loading": "Loading events...", - "noEvents": "No events found", - "none": "No event", - "configureWebsiteFirst": "Select a website first to load events" + "none": "No event" }, "chartType": { "label": "Chart type", @@ -2472,26 +3629,21 @@ "eventNames": { "label": "Events", "description": "Select one or more events to chart", - "placeholder": "Select events...", - "loading": "Loading events...", - "noEvents": "No events found", - "configureWebsiteFirst": "Select a website first to load events" + "placeholder": "Select events..." }, "topCount": { "label": "Items to show", "description": "Number of top items to display (max 500)" + }, + "events": { + "loading": "Loading events...", + "noEvents": "No events found", + "configureWebsiteFirst": "Select a website first to load events" } }, "event": { - "occurrences": "events", "label": "events" }, - "topPages": { - "direct": "Direct" - }, - "topReferrers": { - "direct": "Direct" - }, "events": { "selectPrompt": "Select events to chart" }, @@ -2500,6 +3652,9 @@ "noWebsite": "No website configured", "noData": "No data available", "internalServerError": "Failed to fetch Umami data" + }, + "top": { + "direct": "Direct" } }, "common": { @@ -2527,7 +3682,8 @@ }, "integration": { "noData": "No integration found", - "description": "Click to create a new integration" + "description": "Click to create a new integration", + "manage": "Manage integrations" }, "app": { "noData": "No app found", @@ -2538,7 +3694,61 @@ "noIntegration": "No integration selected", "noData": "No integration data available" }, - "option": {} + "integrationDisconnected": "No data available, all integrations disconnected", + "updatedAt": "Updated {date}", + "title": { + "label": "Title" + }, + "openInNewTab": { + "label": "Open in new tab" + }, + "showTitle": { + "label": "Show title" + }, + "weatherLocation": { + "label": "Weather location" + }, + "layout": { + "label": "Layout", + "option": { + "horizontal": "Horizontal", + "vertical": "Vertical", + "grid": "Grid" + } + }, + "select": { + "loading": "Loading...", + "loadError": "Failed to load options" + }, + "dateFormat": { + "label": "Date Format", + "description": "How the date should look like" + }, + "visibleStorageVolumes": { + "label": "Visible storage volumes", + "description": "Only available when every selected integration is OpenMediaVault or Synology. Leave empty to show all detected storage volumes.", + "placeholder": "Select storage volumes" + }, + "tableOptions": { + "columns": { + "label": "Columns to show" + }, + "columnOrder": { + "label": "Column order" + }, + "columnWidths": { + "label": "Column widths" + }, + "enableRowSorting": { + "label": "Enable items sorting" + }, + "defaultSort": { + "label": "Column used for sorting by default" + }, + "invertSorting": { + "label": "Invert sorting" + } + } }, "video": { "name": "Video Stream", @@ -2597,6 +3807,7 @@ "transcoding": "Transcoding", "paused": "Paused", "remaining": "{minutes} min left", + "seasonEpisode": "S{season} E{episode}", "metadata": { "title": "Stats for nerds", "video": { @@ -2614,11 +3825,16 @@ "resolution": "Resolution", "target": "Target codec" } - } + }, + "unknownUser": "Unknown user" + }, + "summary": { + "sessions": "{count, plural, one {# session} other {# sessions}}", + "playing": "{count} playing", + "transcoding": "{count} transcoding" } }, "paperlessNgx": { - "name": "Paperless-ngx", "description": "Overview of your Paperless-ngx document archive", "documentsTotal": "Total Documents", "documentsInbox": "Inbox", @@ -2662,6 +3878,192 @@ "internalServerError": "Failed to fetch Paperless-ngx data" } }, + "patchmon": { + "description": "Overview of host patch status from PatchMon", + "title": "PatchMon Statistics", + "totalHosts": "Total Hosts", + "hostsNeedingUpdates": "Needs Updates", + "securityUpdates": "Security Updates", + "upToDateHosts": "Up-to-Date Hosts", + "hostsWithSecurityUpdates": "Hosts with Security Updates", + "recentUpdates24h": "Updates (24h)", + "totalOutdatedPackages": "Outdated Packages", + "totalRepos": "Repositories", + "osDistribution": "OS Distribution", + "compliance": "Patch Compliance", + "complianceRatio": "{upToDate} / {total}", + "lastUpdated": "Updated {time}", + "option": { + "showTotalHosts": { + "label": "Show total hosts", + "description": "Display the total number of monitored hosts" + }, + "showHostsNeedingUpdates": { + "label": "Show hosts needing updates", + "description": "Display hosts with at least one outdated package" + }, + "showSecurityUpdates": { + "label": "Show security updates", + "description": "Display the total number of security updates available" + }, + "showUpToDateHosts": { + "label": "Show up-to-date hosts", + "description": "Display hosts with zero outdated packages" + }, + "showHostsWithSecurityUpdates": { + "label": "Show hosts with security updates", + "description": "Display hosts requiring security patches" + }, + "showRecentUpdates24h": { + "label": "Show recent updates (24h)", + "description": "Display the number of updates applied in the last 24 hours" + }, + "showTotalOutdatedPackages": { + "label": "Show outdated packages", + "description": "Display the total number of outdated packages across all hosts" + }, + "showTotalRepos": { + "label": "Show repositories", + "description": "Display the number of active repositories being monitored" + }, + "enableThresholdColors": { + "label": "Enable threshold colours", + "description": "Colour stat values green, yellow, or red based on severity presets" + }, + "useCustomThresholds": { + "label": "Advanced thresholds", + "description": "Customise warning and critical thresholds per stat using absolute counts or percentages of total hosts" + }, + "thresholdMode": { + "option": { + "absolute": "Absolute count", + "percent": "Percent of total hosts" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "Needs updates threshold mode", + "description": "Compare the needs-updates count as an absolute value or percentage of total hosts" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "Needs updates warning threshold" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "Needs updates critical threshold" + }, + "securityUpdatesThresholdMode": { + "label": "Security updates threshold mode", + "description": "Compare the security-updates count as an absolute value or percentage of total hosts" + }, + "securityUpdatesWarningAt": { + "label": "Security updates warning threshold" + }, + "securityUpdatesCriticalAt": { + "label": "Security updates critical threshold" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "Hosts with security updates threshold mode", + "description": "Compare the host count as an absolute value or percentage of total hosts" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "Hosts with security updates warning threshold" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "Hosts with security updates critical threshold" + }, + "upToDateHostsThresholdMode": { + "label": "Up-to-date hosts threshold mode", + "description": "Compare the up-to-date host count as an absolute value or percentage of total hosts" + }, + "upToDateHostsWarningAt": { + "label": "Up-to-date hosts warning threshold", + "description": "Enter yellow when the value is at or above this threshold but below full coverage" + }, + "upToDateHostsCriticalAt": { + "label": "Up-to-date hosts critical threshold", + "description": "Enter red when the value falls below this threshold" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "Outdated packages threshold mode", + "description": "Compare the outdated-packages count as an absolute value or percentage of total hosts" + }, + "totalOutdatedPackagesWarningAt": { + "label": "Outdated packages warning threshold" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "Outdated packages critical threshold" + }, + "showOsDistribution": { + "label": "Show OS distribution", + "description": "Display a breakdown of monitored hosts by operating system" + }, + "osDistributionLimit": { + "label": "OS distribution limit", + "description": "Maximum number of operating systems to display", + "option": { + "3": "Top 3", + "5": "Top 5", + "10": "Top 10", + "all": "All" + } + }, + "showOsVersion": { + "label": "Show OS version", + "description": "Append the OS version to each distribution label when available" + }, + "showComplianceHero": { + "label": "Show compliance hero", + "description": "Display a compliance ring showing the percentage of up-to-date hosts" + }, + "osDisplayMode": { + "label": "OS display mode", + "description": "Choose how to display the operating system distribution", + "option": { + "bars": "Horizontal bars", + "donut": "Doughnut chart" + } + }, + "threshold": { + "warningAt": { + "description": "Enter yellow when the value reaches this threshold" + }, + "criticalAt": { + "description": "Enter red when the value reaches this threshold" + } + } + }, + "error": { + "internalServerError": "Failed to fetch PatchMon data" + } + }, + "bazarr": { + "description": "Overview of missing subtitles and health status from your Bazarr instance", + "episodes": "Missing Episodes", + "movies": "Missing Movies", + "providers": "Provider Issues", + "status": "Health Issues", + "announcements": "Announcements", + "option": { + "showMissingEpisodes": { + "label": "Show missing episodes", + "description": "Display the number of episodes with missing subtitles" + }, + "showMissingMovies": { + "label": "Show missing movies", + "description": "Display the number of movies with missing subtitles" + }, + "showProviderIssues": { + "label": "Show provider issues", + "description": "Display the number of subtitle providers with issues" + }, + "showHealthIssues": { + "label": "Show health issues", + "description": "Display the number of Bazarr health issues" + } + }, + "error": { + "internalServerError": "Failed to fetch Bazarr data" + } + }, "immich-serverStats": { "name": "Immich Server Stats", "description": "Information about your Immich instance", @@ -2686,7 +4088,8 @@ "users": "Users", "photos": "Photos", "videos": "Videos", - "storage": "Used Storage" + "storage": "Used Storage", + "albumLimit": "Largest albums (up to {count} shown)" }, "immich-albumCarousel": { "name": "Immich Album", @@ -2710,24 +4113,21 @@ } }, "description": "Slideshow of pictures from an Immich album or your full library", - "noPhotos": "No photos found" + "noPhotos": "No photos found", + "albumPhoto": "Album photo", + "actions": { + "previousPhoto": "Previous photo", + "nextPhoto": "Next photo", + "pauseSlideshow": "Pause slideshow", + "resumeSlideshow": "Resume slideshow", + "toggleSlideshow": "Pause or resume slideshow", + "photo": "Photo {number}" + } }, "downloads": { "name": "Download Client", "description": "Allows you to view and manage your Downloads from both Torrent and Usenet clients.", "option": { - "columns": { - "label": "" - }, - "enableRowSorting": { - "label": "" - }, - "defaultSort": { - "label": "" - }, - "descendingDefaultSort": { - "label": "" - }, "showCompletedUsenet": { "label": "Show usenet entries marked as completed" }, @@ -2738,7 +4138,7 @@ "label": "Show Miscellaneous entries marked as completed" }, "activeTorrentThreshold": { - "label": "" + "label": "Hide completed torrent under this threshold" }, "categoryFilter": { "label": "Categories/labels to filter" @@ -2752,12 +4152,6 @@ "limitPerIntegration": { "label": "Limit items per integration", "description": "This will limit the number of items shown per integration, not globally" - }, - "columnOrder": { - "label": "Column order" - }, - "columnWidths": { - "label": "Column widths" } }, "errors": { @@ -2769,70 +4163,70 @@ }, "items": { "actions": { - "columnTitle": "" + "columnTitle": "Actions" }, "added": { "columnTitle": "", - "detailsTitle": "" + "detailsTitle": "Added" }, "category": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Category", + "detailsTitle": "Category" }, "downSpeed": { "columnTitle": "Down", - "detailsTitle": "" + "detailsTitle": "Down" }, "index": { "columnTitle": "", - "detailsTitle": "" + "detailsTitle": "Index" }, "id": { - "columnTitle": "", + "columnTitle": "Item ID", "detailsTitle": "Item ID" }, "integration": { - "columnTitle": "" + "columnTitle": "Source" }, "name": { "columnTitle": "Job name" }, "progress": { "columnTitle": "Progress", - "detailsTitle": "" + "detailsTitle": "Progress" }, "ratio": { "columnTitle": "", - "detailsTitle": "" + "detailsTitle": "Ratio" }, "received": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Down", + "detailsTitle": "Downloaded" }, "sent": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Up", + "detailsTitle": "Uploaded" }, "size": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Size", + "detailsTitle": "Size" }, "state": { "columnTitle": "State", - "detailsTitle": "" + "detailsTitle": "State" }, "time": { - "columnTitle": "", - "detailsTitle": "", + "columnTitle": "ETA", + "detailsTitle": "ETA", "eta": "ETA" }, "type": { "columnTitle": "", - "detailsTitle": "" + "detailsTitle": "Type" }, "upSpeed": { "columnTitle": "", - "detailsTitle": "" + "detailsTitle": "Up" } }, "states": { @@ -2917,7 +4311,11 @@ }, "mediaRequests-requestList": { "name": "Media Requests List", - "description": "", + "description": "See a list of all media requests from your Seerr, Overseerr, or Jellyseerr instance", + "empty": { + "title": "No media requests yet", + "description": "Search for a film or show to start a request." + }, "option": { "linksTargetNewTab": { "label": "" @@ -2951,12 +4349,16 @@ "failed": "", "completed": "" }, + "unknown": "Unknown", "toBeDetermined": "" }, "mediaRequests-requestStats": { "name": "", "description": "", - "option": {}, + "empty": { + "title": "No request activity yet", + "description": "Stats will appear after the first media request." + }, "titles": { "stats": { "main": "Media Stats", @@ -2966,8 +4368,7 @@ "declined": "", "available": "", "tv": "", - "movie": "", - "total": "" + "movie": "" }, "users": { "main": "", @@ -2993,7 +4394,6 @@ }, "currentIndex": "", "healthCheck": { - "title": "", "queued": "", "status": { "healthy": "", @@ -3002,38 +4402,63 @@ }, "panel": { "statistics": { - "empty": "", - "transcodes": "Transcodes", - "transcodesCount": "", - "healthChecksCount": "", "filesCount": "", "savedSpace": "", - "healthChecks": "Health checks", "videoCodecs": "Codecs", "videoContainers": "Containers", "videoResolutions": "Resolutions" }, "workers": { - "empty": "", "table": { - "file": "", "eta": "", - "progress": "", - "transcode": "", - "healthCheck": "" + "progress": "" } }, "queue": { - "empty": "", "table": { - "file": "", - "size": "", - "transcode": "", - "healthCheck": "" + "size": "" } + }, + "common": { + "empty": "Empty", + "file": "File", + "healthCheck": "Health check", + "transcode": "Transcode", + "transcodes": "Transcodes", + "healthChecks": "Health checks" } } }, + "mediaMissing": { + "name": "Missing & Queued Media", + "description": "Shows missing and queued movies and episodes from Radarr and Sonarr", + "option": { + "showMissing": { + "label": "Show missing items" + }, + "showQueued": { + "label": "Show queued items" + }, + "pageSize": { + "label": "Items per page" + } + }, + "tab": { + "missing": "Missing", + "queued": "Queued" + }, + "type": { + "movie": "Movie", + "episode": "Episode", + "book": "Book" + }, + "empty": { + "missing": "No missing items", + "queued": "No queued items", + "noTabsEnabled": "Enable at least one tab in the widget settings" + }, + "timeLeft": "Time left" + }, "rssFeed": { "name": "", "description": "", @@ -3056,6 +4481,13 @@ "showPosterImage": { "label": "" } + }, + "error": { + "allFeedsFailed": "Unable to load RSS feeds. Check the feed URLs and try again." + }, + "warning": { + "partial": "{count, plural, one {# RSS feed could not be loaded} other {# RSS feeds could not be loaded}}", + "stale": "RSS feeds could not be refreshed. Showing previously loaded entries." } }, "releases": { @@ -3131,17 +4563,8 @@ "label": "" } }, - "edit": { - "label": "" - }, "editForm": { - "title": "", - "cancel": { - "label": "" - }, - "confirm": { - "label": "" - } + "title": "" }, "importForm": { "title": "" @@ -3158,8 +4581,7 @@ "label": "Provider Tokens", "token": "Token", "configured": "Token configured", - "notConfigured": "No token set", - "save": "Save" + "notConfigured": "No token set" } } }, @@ -3186,17 +4608,32 @@ "noProviderResponse": "", "unexpected": "Unexpected provider error" } - } + }, + "expandDetails": "Show details for {name}", + "collapseDetails": "Hide details for {name}" }, "networkControllerSummary": { - "option": {}, - "card": { - "vpn": { - "countConnected": "{count} connected" + "advanced": { + "updated": "Updated", + "metric": { + "latency": "Latency", + "ping": "Ping", + "uptime": "Uptime", + "users": "Users", + "guests": "Guests" } }, + "card": { + "vpn": { + "countConnected": "{count, plural, one {# connected} other {# connected}}", + "label": "VPN" + }, + "wan": "WAN", + "web": "Web", + "wifi": "Wi-Fi", + "lan": "LAN" + }, "error": { - "integrationsDisconnected": "", "unknownContentOption": "" }, "name": "", @@ -3233,7 +4670,6 @@ } }, "error": { - "integrationsDisconnected": "", "unknownContentOption": "" }, "name": "", @@ -3263,7 +4699,6 @@ "versiontitle": "", "cputitle": "", "memorytitle": "", - "cpu": "", "memory": "", "interfaces": { "name": "", @@ -3271,6 +4706,16 @@ "recv": "", "title": "" } + }, + "empty": { + "noInterfaces": "No network interface data yet" + }, + "versionUnknown": "Unknown version", + "metricAccessible": "{metric}: {value}%, {status}", + "status": { + "normal": "Normal", + "warning": "Warning", + "critical": "Critical" } }, "notifications": { @@ -3280,8 +4725,21 @@ "option": { "hideLogos": { "label": "Hide logos" + }, + "messageFormat": { + "label": "Message format", + "option": { + "auto": "Automatic", + "plain": "Plain text", + "markdown": "Markdown", + "html": "HTML" + } } - } + }, + "openService": "Open notification service", + "deleteNotification": "Delete notification from Gotify", + "deleteFailed": "Could not delete notification", + "deleteFailedMessage": "The notification could not be deleted. Please try again." }, "speedtestTracker": { "name": "", @@ -3323,7 +4781,6 @@ } }, "uptimeKuma": { - "name": "Uptime Kuma", "description": "Monitor uptime statistics from your Uptime Kuma status page", "option": { "showAverageUptime": { @@ -3360,8 +4817,58 @@ }, "error": { "internalServerError": "Failed to fetch uptime data" + }, + "status": { + "up": "Up", + "down": "Down", + "paused": "Paused" } }, + "traefik": { + "description": "Overview of Traefik routers, services, middlewares, and entry points", + "option": { + "showTcp": { + "label": "Show TCP" + }, + "showUdp": { + "label": "Show UDP" + }, + "showEntryPoints": { + "label": "Show entry points" + } + }, + "instances": "Traefik instances", + "versionUnknown": "Version unknown", + "summary": { + "routers": "Routers", + "entryPoints": "Entry points" + }, + "resource": { + "routers": "Routers", + "middlewares": "Middlewares" + }, + "status": { + "healthy": "Healthy", + "errors": "{count} errors", + "warnings": "{count} warnings" + }, + "error": { + "internalServerError": "Failed to fetch Traefik data" + }, + "resourceType": { + "router": "Router", + "service": "Service", + "middleware": "Middleware" + }, + "resourceStatus": { + "enabled": "Enabled", + "disabled": "Disabled", + "warning": "Warning", + "error": "Error", + "unknown": "Unknown" + }, + "failedEndpoint": "Failed: {endpoint}" + }, "audioStats": { "name": "Audio stats", "description": "Library and playback statistics from Navidrome or Audiobookshelf", @@ -3426,9 +4933,7 @@ "label": "", "description": "", "option": { - "cpu": "", "memory": "", - "gpu": "GPU", "network": "" } }, @@ -3443,12 +4948,11 @@ } }, "card": { - "cpu": "", "memory": "", - "gpu": "", "network": "NET", "up": "", - "down": "" + "down": "", + "memoryTooltip": "{used} / {available} ({percent}%)" } }, "systemDisks": { @@ -3465,7 +4969,7 @@ "label": "" }, "absolute": { - "label": "" + "label": "Absolute values" }, "free": { "label": "" @@ -3474,151 +4978,88 @@ }, "showBackgroundBar": { "label": "" - }, - "visibleStorageVolumes": { - "label": "Visible storage volumes", - "description": "Only available when all selected integrations are Synology. Leave empty to show all detected storage volumes.", - "placeholder": "Select storage volumes" } }, "status": { - "unhealthy": "" + "unhealthy": "", + "smart": "SMART", + "free": "{percentage}% free" + } + }, + "customApi": { + "name": "Custom widget", + "description": "Render a configured Custom JSX definition.", + "customJsx": { + "noTemplate": "No JSX template is configured.", + "templateWarnings": "{count, plural, one {# template warning:} other {# template warnings:}}", + "requestIdRequired": "This network control requires a named requestId.", + "unsavedPreview": "Run the initial request test in the editor before testing named requests.", + "invalidParams": "The request parameters are invalid.", + "loading": "Loading request...", + "loadRequest": "Load request", + "requestFailed": "The request failed.", + "retry": "Retry request", + "actionCompleted": "Action completed successfully.", + "actionSimulated": "Action simulated; no request was sent.", + "actionsDisabledEditMode": "Actions are disabled while the board is in edit mode.", + "widgetItemUnavailable": "This widget item is not available.", + "toggle": "Toggle", + "copied": "Copied", + "confirmDelete": "Confirm this destructive action." + }, + "option": { + "definitionId": { + "label": "Custom widget" + }, + "refreshInterval": { + "label": "Refresh interval", + "description": "How often to refetch data from the API (in seconds)" + } + }, + "noDefinition": "No definition selected", + "definitionNotFound": "Custom widget unavailable", + "migrationRequired": "This legacy custom widget is preserved, but it must be migrated to Custom JSX v2 from Manage custom widgets before it can run.", + "manageMigration": "Open Manage custom widgets", + "contactAdmin": "Contact an administrator.", + "configurationNeedsRepair": "This widget's options have changed. Edit the widget to repair its configuration.", + "removeFromBoard": "Remove from board", + "editModePending": "Save the board to load this widget.", + "picker": { + "group": "Custom JSX widgets", + "empty": "No custom widgets found", + "preview": "Preview", + "sources": "{count, plural, one {# source} other {# sources}}", + "requests": "{count, plural, one {# request} other {# requests}}", + "migrationRequired": "Migration required", + "migrationDescription": "This placed v1 widget cannot run yet. Copy its redacted prompt to an LLM, then paste the single JSON response into Homarr.", + "manageMigration": "Open Manage custom widgets", + "contactAdmin": "Contact an administrator." + }, + "configuration": { + "needsAttention": "Configuration needs attention: {message}", + "advancedOptions": "Advanced options", + "invalidJson": "Invalid JSON" } }, "beszelSystemTable": { "name": "Beszel Systems (Table)", "description": "Table view of all Beszel-monitored systems with sortable columns and status indicators", "option": { - "statusFilter": { - "label": "Status filter" - }, "sortBy": { "label": "Sort by" }, "sortDirection": { "label": "Sort direction" - }, - "showCpu": { - "label": "Show CPU" - }, - "showMemory": { - "label": "Show memory" - }, - "showDisk": { - "label": "Show disk" - }, - "showGpu": { - "label": "Show GPU" - }, - "showLoadAvg": { - "label": "Show load average" - }, - "showNet": { - "label": "Show network" - }, - "showTemp": { - "label": "Show temperature" - }, - "showBattery": { - "label": "Show battery" - }, - "showServices": { - "label": "Show services" - }, - "showUptime": { - "label": "Show uptime" - }, - "showAgent": { - "label": "Show agent version" - }, - "columnOrder": { - "label": "Column order" - }, - "columnWidths": { - "label": "Column widths" } }, - "noRecords": "No systems found", "error": { - "internalServerError": "Unable to connect to Beszel. Check your integration settings.", "layoutSaveTitle": "Unable to save table layout", "layoutSaveMessage": "Your column order or widths could not be saved. Please try again." - }, - "column": { - "system": "System", - "cpu": "CPU", - "memory": "Memory", - "disk": "Disk", - "gpu": "GPU", - "loadAvg": "Load Avg", - "net": "Net", - "temp": "Temp", - "battery": "Bat", - "services": "Services", - "uptime": "Uptime", - "agent": "Agent" } }, "beszelSystemGrid": { "name": "Beszel Systems (Grid)", - "description": "Card grid view of all Beszel-monitored systems with real-time metrics", - "option": { - "statusFilter": { - "label": "Status filter" - }, - "showCpu": { - "label": "Show CPU" - }, - "showMemory": { - "label": "Show memory" - }, - "showDisk": { - "label": "Show disk" - }, - "showGpu": { - "label": "Show GPU" - }, - "showLoadAvg": { - "label": "Show load average" - }, - "showNet": { - "label": "Show network" - }, - "showTemp": { - "label": "Show temperature" - }, - "showBattery": { - "label": "Show battery" - }, - "showServices": { - "label": "Show services" - }, - "showUptime": { - "label": "Show uptime" - }, - "showAgent": { - "label": "Show agent version" - } - }, - "error": { - "internalServerError": "Unable to connect to Beszel. Check your integration settings." - }, - "empty": { - "noSystems": "No systems found" - }, - "metric": { - "cpu": "CPU", - "memory": "Memory", - "disk": "Disk", - "gpu": "GPU", - "loadAvg": "Load Avg", - "net": "Net", - "temp": "Temp", - "battery": "Bat", - "services": "Services", - "uptime": "Uptime", - "agent": "Agent" - } + "description": "Card grid view of all Beszel-monitored systems with real-time metrics" }, "beszelAlerts": { "name": "Beszel Alerts", @@ -3632,11 +5073,12 @@ } }, "empty": "No alerts configured", - "error": { - "internalServerError": "Unable to connect to Beszel. Check your integration settings." - }, "history": "History", "resolved": "Resolved", + "alertDescription": { + "statusDuration": "Down for {minutes} min", + "threshold": "Exceeds {value} over {minutes} min" + }, "status": { "triggered": "Triggered", "ok": "OK" @@ -3683,16 +5125,16 @@ "noSystems": "No systems found" }, "error": { - "internalServerError": "Unable to connect to Beszel. Check your integration settings.", "liveConnectionFailed": "Live connection failed. Your Beszel instance may not support real-time streaming.", "switchToHistorical": "Switch to historical view", - "systemNotFound": "Selected system was not found. Choose a different system." + "systemNotFound": "Selected system was not found. Choose a different system.", + "selectionSaveTitle": "Unable to save selection", + "selectionSaveMessage": "Your system or time period selection could not be saved. Please try again." }, "chart": { "cpu": { "title": "CPU Usage", - "subtitle": "Average system-wide CPU utilization", - "series": "CPU" + "subtitle": "Average system-wide CPU utilization" }, "memory": { "title": "Memory Usage", @@ -3734,289 +5176,550 @@ "title": "Docker Network I/O", "subtitle": "Network traffic of docker containers" } + }, + "period": { + "live": "Live", + "oneHour": "1h", + "twelveHours": "12h", + "oneDay": "24h", + "oneWeek": "1w", + "thirtyDays": "30d" } }, - "patchmon": { - "name": "PatchMon", - "description": "Overview of host patch status from PatchMon", - "title": "PatchMon Statistics", - "totalHosts": "Total Hosts", - "hostsNeedingUpdates": "Needs Updates", - "securityUpdates": "Security Updates", - "upToDateHosts": "Up-to-Date Hosts", - "hostsWithSecurityUpdates": "Hosts with Security Updates", - "recentUpdates24h": "Updates (24h)", - "totalOutdatedPackages": "Outdated Packages", - "totalRepos": "Repositories", - "osDistribution": "OS Distribution", - "compliance": "Patch Compliance", - "complianceRatio": "{upToDate} / {total}", - "lastUpdated": "Updated {time}", - "option": { - "showTotalHosts": { - "label": "Show total hosts", - "description": "Display the total number of monitored hosts" - }, - "showHostsNeedingUpdates": { - "label": "Show hosts needing updates", - "description": "Display hosts with at least one outdated package" - }, - "showSecurityUpdates": { - "label": "Show security updates", - "description": "Display the total number of security updates available" - }, - "showUpToDateHosts": { - "label": "Show up-to-date hosts", - "description": "Display hosts with zero outdated packages" - }, - "showHostsWithSecurityUpdates": { - "label": "Show hosts with security updates", - "description": "Display hosts requiring security patches" - }, - "showRecentUpdates24h": { - "label": "Show recent updates (24h)", - "description": "Display the number of updates applied in the last 24 hours" - }, - "showTotalOutdatedPackages": { - "label": "Show outdated packages", - "description": "Display the total number of outdated packages across all hosts" - }, - "showTotalRepos": { - "label": "Show repositories", - "description": "Display the number of active repositories being monitored" - }, - "enableThresholdColors": { - "label": "Enable threshold colours", - "description": "Colour stat values green, yellow, or red based on severity presets" - }, - "useCustomThresholds": { - "label": "Advanced thresholds", - "description": "Customise warning and critical thresholds per stat using absolute counts or percentages of total hosts" - }, - "thresholdMode": { - "option": { - "absolute": "Absolute count", - "percent": "Percent of total hosts" - } - }, - "hostsNeedingUpdatesThresholdMode": { - "label": "Needs updates threshold mode", - "description": "Compare the needs-updates count as an absolute value or percentage of total hosts" - }, - "hostsNeedingUpdatesWarningAt": { - "label": "Needs updates warning threshold", - "description": "Enter yellow when the value reaches this threshold" - }, - "hostsNeedingUpdatesCriticalAt": { - "label": "Needs updates critical threshold", - "description": "Enter red when the value reaches this threshold" - }, - "securityUpdatesThresholdMode": { - "label": "Security updates threshold mode", - "description": "Compare the security-updates count as an absolute value or percentage of total hosts" - }, - "securityUpdatesWarningAt": { - "label": "Security updates warning threshold", - "description": "Enter yellow when the value reaches this threshold" - }, - "securityUpdatesCriticalAt": { - "label": "Security updates critical threshold", - "description": "Enter red when the value reaches this threshold" - }, - "hostsWithSecurityUpdatesThresholdMode": { - "label": "Hosts with security updates threshold mode", - "description": "Compare the host count as an absolute value or percentage of total hosts" - }, - "hostsWithSecurityUpdatesWarningAt": { - "label": "Hosts with security updates warning threshold", - "description": "Enter yellow when the value reaches this threshold" - }, - "hostsWithSecurityUpdatesCriticalAt": { - "label": "Hosts with security updates critical threshold", - "description": "Enter red when the value reaches this threshold" - }, - "upToDateHostsThresholdMode": { - "label": "Up-to-date hosts threshold mode", - "description": "Compare the up-to-date host count as an absolute value or percentage of total hosts" - }, - "upToDateHostsWarningAt": { - "label": "Up-to-date hosts warning threshold", - "description": "Enter yellow when the value is at or above this threshold but below full coverage" - }, - "upToDateHostsCriticalAt": { - "label": "Up-to-date hosts critical threshold", - "description": "Enter red when the value falls below this threshold" - }, - "totalOutdatedPackagesThresholdMode": { - "label": "Outdated packages threshold mode", - "description": "Compare the outdated-packages count as an absolute value or percentage of total hosts" - }, - "totalOutdatedPackagesWarningAt": { - "label": "Outdated packages warning threshold", - "description": "Enter yellow when the value reaches this threshold" - }, - "totalOutdatedPackagesCriticalAt": { - "label": "Outdated packages critical threshold", - "description": "Enter red when the value reaches this threshold" - }, - "showOsDistribution": { - "label": "Show OS distribution", - "description": "Display a breakdown of monitored hosts by operating system" - }, - "osDistributionLimit": { - "label": "OS distribution limit", - "description": "Maximum number of operating systems to display", - "option": { - "3": "Top 3", - "5": "Top 5", - "10": "Top 10", - "all": "All" - } - }, - "showOsVersion": { - "label": "Show OS version", - "description": "Append the OS version to each distribution label when available" - }, - "showComplianceHero": { - "label": "Show compliance hero", - "description": "Display a compliance ring showing the percentage of up-to-date hosts" - }, - "osDisplayMode": { - "label": "OS display mode", - "description": "Choose how to display the operating system distribution", - "option": { - "bars": "Horizontal bars", - "donut": "Doughnut chart" - } - } + "assistant": { + "name": "Assistant", + "description": "Have a complete assistant conversation directly on your board.", + "unavailable": { + "title": "Assistant unavailable", + "description": "Sign in and ask an administrator to configure the Assistant from the management panel." }, + "compact": { + "title": "Assistant", + "description": "Resize this widget to chat here, or open the full conversation.", + "open": "Open assistant", + "openTitle": "Assistant open in side panel", + "openDescription": "The conversation stays in one active surface.", + "returnToWidget": "Return the conversation to this widget", + "otherWidgetTitle": "Assistant active in another widget", + "otherWidgetDescription": "Only one conversation surface stays active at a time.", + "useHere": "Use the assistant in this widget" + } + }, + "beszel": { "error": { - "internalServerError": "Failed to fetch PatchMon data" - } - }, - "bazarr": { - "name": "Bazarr", - "description": "Overview of missing subtitles and health status from your Bazarr instance", - "episodes": "Missing Episodes", - "movies": "Missing Movies", - "providers": "Provider Issues", - "status": "Health Issues", - "option": { - "showMissingEpisodes": { - "label": "Show missing episodes", - "description": "Display the number of episodes with missing subtitles" - }, - "showMissingMovies": { - "label": "Show missing movies", - "description": "Display the number of movies with missing subtitles" - }, - "showProviderIssues": { - "label": "Show provider issues", - "description": "Display the number of subtitle providers with issues" - }, - "showHealthIssues": { - "label": "Show health issues", - "description": "Display the number of Bazarr health issues" - } - }, - "error": { - "internalServerError": "Failed to fetch Bazarr data" - } - }, - "mediaMissing": { - "name": "Missing & Queued Media", - "description": "Shows missing and queued movies and episodes from Radarr and Sonarr", - "option": { - "showMissing": { - "label": "Show missing items" - }, - "showQueued": { - "label": "Show queued items" - }, - "pageSize": { - "label": "Items per page" - } - }, - "tab": { - "missing": "Missing", - "queued": "Queued" - }, - "type": { - "movie": "Movie", - "episode": "Episode" + "internalServerError": "Unable to connect to Beszel. Check your integration settings." }, "empty": { - "missing": "No missing items", - "queued": "No queued items", - "noTabsEnabled": "Enable at least one tab in the widget settings" + "noSystems": "No systems found" }, - "timeLeft": "Time left" - }, - "traefik": { - "name": "Traefik", - "description": "Overview of Traefik routers, services, middlewares, and entry points", - "option": { - "showTcp": { - "label": "Show TCP" + "options": { + "statusFilter": { + "label": "Status filter" }, - "showUdp": { - "label": "Show UDP" + "showCpu": { + "label": "Show CPU" }, - "showEntryPoints": { - "label": "Show entry points" + "showMemory": { + "label": "Show memory" + }, + "showDisk": { + "label": "Show disk" + }, + "showGpu": { + "label": "Show GPU" + }, + "showLoadAvg": { + "label": "Show load average" + }, + "showNet": { + "label": "Show network" + }, + "showTemp": { + "label": "Show temperature" + }, + "showBattery": { + "label": "Show battery" + }, + "showServices": { + "label": "Show services" + }, + "showUptime": { + "label": "Show uptime" + }, + "showAgent": { + "label": "Show agent version" } }, - "instances": "Traefik instances", - "versionUnknown": "Version unknown", - "summary": { - "routers": "Routers", - "entryPoints": "Entry points" - }, - "resource": { - "routers": "Routers", - "services": "Services", - "middlewares": "Middlewares" - }, - "status": { - "healthy": "Healthy", - "errors": "{count} errors", - "warnings": "{count} warnings" - }, - "error": { - "internalServerError": "Failed to fetch Traefik data" + "metric": { + "system": "System", + "source": "Source", + "hostname": "Hostname", + "cpuModel": "CPU model", + "cores": "Cores", + "memoryTotal": "Total memory", + "memory": "Memory", + "disk": "Disk", + "loadAvg": "Load average", + "net": "Network", + "temp": "Temperature", + "battery": "Battery", + "uptime": "Uptime", + "agent": "Agent" } }, - "wud": { - "name": "What's Up Docker", - "description": "Show how many watched containers have updates available.", - "title": "What's Up Docker", - "monitored": "Monitored", - "updatesAvailable": "{count, plural, one {# update available} other {# updates available}}", - "updateAvailable": "Update available", - "openReleaseNotes": "Open release notes", + "llamacpp": { + "name": "llama.cpp", + "description": "Show the health, loaded model and generation speed of your local llama.cpp server.", + "title": "llama.cpp", + "status": { + "unhealthy": "Unhealthy ({status})" + }, + "idle": "Idle", + "speedTooltip": { + "current": "Current generation speed", + "average": "Average generation speed since startup", + "request": "Average speed since this request started" + }, + "busy": "{count, plural, one {# request running} other {# requests running}}", + "modelInfo": { + "context": "Context", + "size": "File size", + "parameters": "Parameters", + "model": "Model", + "quantization": "Quantisation" + }, + "stats": { + "tokensProcessed": "Tokens processed", + "contextUsage": "Context / KV usage", + "cacheHitRate": "Prompt cache hit rate", + "tokensGenerated": "Generated tokens" + }, + "error": { + "unreachable": "llama-server cannot be reached" + }, + "unit": { + "speed": "{value} t/s", + "parameters": "{value}B", + "none": "—", + "speedShort": "t/s" + }, "option": { "showTitle": { "label": "Show title" }, - "showRing": { - "label": "Show update ring" + "showModelInfo": { + "label": "Display model information" }, - "layout": { - "label": "Layout", + "showContextUsage": { + "label": "Display context usage" + }, + "showCacheHitRate": { + "label": "Display cache hit rate" + }, + "showSpeedStats": { + "label": "Show speed statistics" + }, + "showRequests": { + "label": "Display request load" + }, + "showTokenStats": { + "label": "Display token totals" + }, + "showSpeculative": { + "label": "Display speculative decoding" + } + }, + "advanced": { + "promptSpeed": "Prompt processing speed", + "avgSpeed": "Average generation", + "requests": "Requests", + "deferred": "Deferred", + "slots": "{processing}/{total} slots in use", + "speculative": "Speculative decoding", + "avgPrompt": "Average prompt", + "specDrafts": "Speculative drafts", + "specAccepted": "Speculative accepted tokens", + "specDraftTokens": "Speculative draft tokens" + } + }, + "stats": { + "name": "Statistics", + "description": "Combine statistics from your integrations in a single configurable widget.", + "configure": "Set up metrics", + "refresh": "Reload statistics", + "empty": "Open the widget settings, select integrations, and then add metrics.", + "editorHelp": "Add metrics from the integrations selected for this widget. Changes are saved with your dashboard.", + "source": "Integration", + "metric": "Metric", + "noMetrics": "No statistics are available for this integration", + "add": "Add a metric", + "label": "Custom label", + "hidden": "Hidden", + "compact": "Use compact numbers", + "moveUp": "Move upwards", + "moveDown": "Move downwards", + "remove": "Remove a metric", + "loading": "Loading…", + "unavailable": "Not available", + "refreshFailed": "Refresh failed — displaying saved data", + "stale": "Saved data — refresh to update", + "table": { + "value": "Value", + "status": "Status" + }, + "option": { + "table": { + "label": "Table view" + }, + "rows": { + "label": "Compact rows" + }, + "showIcon": { + "label": "Display source icon" + }, + "spacing": { + "label": "Spacing", "option": { - "horizontal": { - "label": "Horizontal" + "xs": { + "label": "Compact" }, - "vertical": { - "label": "Vertical" + "sm": { + "label": "Comfortable" + }, + "md": { + "label": "Spacious" } } }, - "showUpdateList": { - "label": "Show container update list", - "description": "Lists each monitored container that has an image update available" + "entries": { + "label": "Metrics" + }, + "plain": { + "label": "Hide card backgrounds" } - } + }, + "fetchFailed": "Unable to retrieve statistics", + "viewOptions": "Customise this view", + "moreMetrics": "{count} additional items in advanced view", + "localHelp": "Layout, formatting, and visibility apply only to this view. Shared board settings remain unchanged.", + "plain": "Hide card backgrounds", + "resetView": "Reset this view", + "allHidden": "All metrics are hidden in this view. Use Customise this view to restore them." + }, + "wazuh": { + "target": { + "api": "Wazuh server API", + "indexer": "Wazuh indexer", + "wazuh": "Wazuh" + }, + "severity": { + "low": "Low", + "medium": "Medium", + "high": "High", + "critical": "Critical" + }, + "error": { + "unauthorized": { + "title": "{target} rejected the credentials", + "description": "Check the username and password saved for the Wazuh integration. The server API (port 55000) and the indexer (port 9200) use separate users." + }, + "certificate": { + "title": "{target} certificate is not trusted", + "description": "Wazuh uses a self-signed certificate by default. Run \"Test connection\" for the integration and trust the certificate, or add your CA under Settings → Certificates." + }, + "unreachable": { + "title": "Cannot reach {target}", + "description": "The host refused or dropped the connection. Check the URL, port, and firewall. The indexer only listens on localhost in a default all-in-one installation." + }, + "timeout": { + "title": "{target} timed out", + "description": "There was no response within 15 seconds. The service may be overloaded, or the address may be incorrect." + }, + "status": { + "title": "{target} returned an error", + "description": "The request failed with HTTP status {status}." + }, + "invalidResponse": { + "title": "Unexpected response from {target}", + "description": "Check that the URL points to the Wazuh server API or indexer, rather than the dashboard." + }, + "indexerRequired": { + "title": "Wazuh indexer credentials are required", + "description": "Alerts, vulnerabilities, and file integrity events are read from the Wazuh indexer. Add an indexer URL, username, and password to the integration." + }, + "unknown": { + "title": "Could not load data from {target}", + "description": "Check the Homarr logs for further details." + } + }, + "range": { + "1h": "1h", + "24h": "24h", + "7d": "7d", + "30d": "30d" + }, + "levelTooltip": "Rule level {level} ({severity})" + }, + "wazuhAgents": { + "name": "Wazuh agents", + "description": "Sortable list of Wazuh agents showing status, OS, version, and last keepalive", + "option": { + "statusFilter": { + "label": "Display agents" + }, + "sortBy": { + "label": "Sort by" + }, + "showVersion": { + "label": "Display Wazuh version column" + }, + "showGroups": { + "label": "Display groups column" + } + }, + "title": "Agents", + "total": "{count} agents", + "status": { + "active": "Active", + "disconnected": "Disconnected", + "neverConnected": "Never connected", + "pending": "Pending" + }, + "statusLabel": { + "active": "Active", + "disconnected": "Disconnected", + "never_connected": "Never connected", + "pending": "Pending", + "unknown": "Unknown" + }, + "live": "Live", + "snapshot": "Snapshot {age} old", + "snapshotHint": "Read from the Wazuh dashboard's agent snapshot (wazuh-monitoring), taken at {time}. Add server API credentials for live data.", + "staleSnapshot": "The agent snapshot from {time} is outdated. Check that the Wazuh dashboard monitoring job is running, or add server API credentials.", + "noDisconnected": "All agents are connected", + "empty": "No agents match this filter", + "column": { + "status": "Status", + "name": "Job name", + "ip": "IP", + "os": "OS", + "version": "Version", + "lastKeepAlive": "Keepalive", + "groups": "المجموعات" + }, + "outdated": "Older than the latest agent version ({version})" + }, + "wazuhAlerts": { + "name": "Wazuh alerts feed", + "description": "Recent Wazuh alerts with level, MITRE ATT&CK techniques, agent, and source IP", + "option": { + "minLevel": { + "label": "Minimum rule level", + "description": "Wazuh levels: 0–6 low, 7–11 medium, 12–14 high, 15+ critical" + }, + "hours": { + "label": "Time window (hours)" + }, + "limit": { + "label": "Number of alerts" + }, + "showMitre": { + "label": "Display MITRE ATT&CK techniques" + }, + "showAgent": { + "label": "Display agent" + }, + "showSourceIp": { + "label": "Show source IP" + }, + "showRuleId": { + "label": "Show rule ID" + } + }, + "title": "Alerts · level {level}+ · {hours}h", + "empty": "No alerts at this level. All quiet.", + "rule": "Rule {id}", + "openInDashboard": "Open this alert in the Wazuh dashboard" + }, + "wazuhSummary": { + "name": "Wazuh alert severity", + "description": "Alert severity breakdown with a trend against the previous period", + "option": { + "range": { + "label": "Time range" + }, + "showTrend": { + "label": "Show trend against the previous period" + }, + "showFooter": { + "label": "Show footer" + } + }, + "title": "Alert severity · {range}", + "alerts": "alerts", + "none": "No alerts", + "trend": { + "new": "new", + "tooltip": "Previous period: {previous}" + }, + "previous": "Previous {range}: {count}", + "maxLevel": "Max level {level}", + "health": "Indexer health: {status}", + "manager": "Manager {version}" + }, + "wazuhTimeline": { + "name": "Wazuh alerts timeline", + "description": "Stacked chart of Wazuh alerts over time by severity", + "option": { + "range": { + "label": "Time range" + }, + "interval": { + "label": "Interval" + }, + "chartType": { + "label": "Chart type" + }, + "yScale": { + "label": "Y-axis scale", + "description": "Square root keeps high and critical alerts visible next to thousands of low ones" + }, + "minLevel": { + "label": "Minimum rule level" + }, + "showLegend": { + "label": "Show legend with totals" + } + }, + "title": "Alerts timeline · {range}", + "total": "{count} alerts", + "interval": "per {interval}" + }, + "wazuhTopList": { + "name": "Wazuh top list", + "description": "Top rules, agents, source IPs or MITRE ATT&CK tactics and techniques by alert count", + "option": { + "kind": { + "label": "Rank" + }, + "range": { + "label": "Time range" + }, + "limit": { + "label": "Number of entries" + }, + "minLevel": { + "label": "Minimum rule level" + }, + "showBars": { + "label": "Show bars" + } + }, + "title": { + "rules": "Top rules · {range}", + "agents": "Top agents · {range}", + "sourceIps": "Top source IPs · {range}", + "mitreTactics": "MITRE tactics · {range}", + "mitreTechniques": "MITRE techniques · {range}" + }, + "empty": { + "rules": "No alerts in this period", + "agents": "No alerts in this period", + "sourceIps": "No alerts with a source IP in this period", + "mitreTactics": "No alerts mapped to MITRE ATT&CK in this period", + "mitreTechniques": "No alerts mapped to MITRE ATT&CK in this period" + }, + "totalTooltip": "{count} matching alerts", + "private": "LAN", + "public": "Public", + "agents": "Seen on {count} agents", + "others": "{count} more alerts in other entries" + }, + "wazuhVulnerabilities": { + "name": "Wazuh vulnerabilities", + "description": "Vulnerability counts, top CVEs and the most vulnerable agents", + "option": { + "cveOrder": { + "label": "Rank CVEs by" + }, + "minSeverity": { + "label": "CVE severity" + }, + "cveLimit": { + "label": "Number of CVEs" + }, + "agentLimit": { + "label": "Number of agents" + }, + "showAgents": { + "label": "Show most vulnerable agents" + } + }, + "title": "Vulnerabilities", + "topCves": "Top CVEs", + "score": "Score", + "agentsShort": "Agents", + "topAgents": "Most vulnerable agents", + "criticalHigh": "Crit / High", + "totalTooltip": "{count} findings on {agents} agents", + "affected": "{count} agents", + "empty": "No vulnerabilities detected", + "distribution": "Severity distribution. {unscored} findings without a score are not shown.", + "worst": "Worst: {id} ({score}) on {agents} agents" + }, + "wazuhFim": { + "name": "Wazuh file integrity", + "description": "Recent file integrity monitoring (syscheck) events", + "option": { + "range": { + "label": "Time range" + }, + "event": { + "label": "Events" + }, + "limit": { + "label": "Number of events" + }, + "includeRegistry": { + "label": "Include Windows Registry events" + } + }, + "title": "File integrity · {range}", + "event": { + "added": "Added", + "modified": "Modified", + "deleted": "Deleted", + "unknown": "Changed" + }, + "empty": "No file integrity events in this period", + "user": "by {user}", + "registry": "Registry" + }, + "wazuhAuthFailures": { + "name": "Wazuh authentication failures", + "description": "Failed logins and brute-force alerts per agent with hourly sparklines", + "option": { + "hours": { + "label": "Time window (hours)" + }, + "limit": { + "label": "Number of agents" + }, + "showSourceIps": { + "label": "Show top source IPs" + } + }, + "title": "Authentication failures · {hours}h", + "seriesTooltip": "All agents over the last {hours}h", + "peak": "Peak {count}/bucket", + "empty": "No failed logins in this period", + "failed": "Failed logins", + "failedHint": "Individual authentication failures (sshd, PAM, Windows logon, invalid users)", + "bruteForce": "Brute force", + "bruteForceHint": "Correlated brute-force rules (multiple failures in a short period, MITRE T1110)", + "sourceIps": "Source IPs", + "ipTooltip": "{ip}: {count} failures", + "bruteForceCount": "{count} brute-force attempts" } }, "widgetPreview": { @@ -4029,7 +5732,76 @@ } }, "board": { + "emptyState": { + "title": "Build your first view", + "description": "Add a widget or app, or connect a service and use its data on this board.", + "addWidget": "Add widget", + "addApp": "Add app", + "connectService": "Connect service" + }, + "setupChecklist": { + "title": "Make this board useful", + "description": "Pick up where you left off. Progress follows the content already on this board.", + "collapse": "Collapse setup checklist", + "dismiss": "", + "resume": "Continue setup ({completed}/{total})", + "progress": "Board setup progress", + "step": { + "content": { + "label": "Add useful content", + "description": "Choose a widget and configure it before it is placed." + }, + "app": { + "label": "Pin an app", + "description": "Keep a service or tool one click away from this board." + }, + "service": { + "label": "Connect a service", + "description": "Enable live data and actions for compatible widgets.", + "permissionDescription": "An administrator can connect a service to enable live data.", + "action": "Connect" + } + } + }, "action": { + "addContent": "Add content to the board", + "settings": "Board settings", + "switch": "Switch board", + "switcher": { + "title": "Switch board", + "search": { + "empty": "No boards match \"{search}\"." + }, + "results": "Available boards", + "preview": "Preview of {name} containing {count} items", + "currentHidden": "Current board: {name}", + "keyboard": { + "navigate": "Navigate", + "open": "Open", + "instructions": "Type to filter boards. Use the arrow keys to browse the results, then press Enter to open a board." + }, + "empty": { + "title": "No other boards", + "description": "You cannot access any other boards." + }, + "error": "The boards could not be loaded." + }, + "create": { + "availability": { + "checking": "Checking availability…", + "available": "{name} is available" + }, + "notification": { + "success": { + "title": "Board created", + "message": "Board {name} has been created" + }, + "error": { + "title": "Could not create board", + "message": "Board {name} could not be created" + } + } + }, "duplicate": { "title": "", "message": "", @@ -4045,14 +5817,19 @@ } }, "edit": { + "enter": "Edit board", + "save": "Save board", + "exit": "Leave edit mode", "notification": { "success": { - "title": "", "message": "" }, "error": { - "title": "", "message": "" + }, + "loadError": { + "title": "Could not start editing", + "message": "The board editor could not be loaded. Your dashboard is still available in view mode." } }, "confirmLeave": { @@ -4060,62 +5837,6 @@ "message": "" } }, - "oldImport": { - "label": "", - "notification": { - "success": { - "title": "", - "message": "" - }, - "error": { - "title": "", - "message": "" - } - }, - "form": { - "file": { - "label": "", - "invalidError": "" - }, - "apps": { - "label": "", - "avoidDuplicates": { - "label": "", - "description": "" - }, - "onlyImportApps": { - "label": "", - "description": "" - } - }, - "name": { - "label": "" - }, - "screenSize": { - "label": "", - "description": "", - "option": { - "sm": "", - "md": "", - "lg": "" - } - }, - "sidebarBehavior": { - "label": "", - "description": "", - "option": { - "lastSection": { - "label": "", - "description": "" - }, - "removeItems": { - "label": "", - "description": "" - } - } - } - } - }, "quickCreateApp": { "modal": { "title": "", @@ -4123,6 +5844,12 @@ } } }, + "landmark": { + "canvas": "Dashboard canvas", + "leftRail": "Left dashboard rail", + "rightRail": "Right dashboard rail", + "items": "Dashboard items" + }, "field": { "pageTitle": { "label": "" @@ -4192,7 +5919,8 @@ } }, "primaryColor": { - "label": "Primary colour" + "label": "Primary colour", + "locked": "Your administrator keeps the instance brand colour on every board." }, "secondaryColor": { "label": "Secondary colour" @@ -4232,9 +5960,6 @@ "xl": "" } }, - "name": { - "label": "" - }, "isPublic": { "label": "", "description": "" @@ -4254,9 +5979,44 @@ "title": "", "responsive": { "title": "", + "description": "Each layout retains its own widget positions and sizes. Mobile and Base are always available; you can add custom layouts at any additional breakpoint.", "action": { "add": "" } + }, + "role": { + "mobile": "الجوال", + "base": "Base", + "custom": "Custom" + }, + "custom": { + "defaultName": "Custom layout" + }, + "mobile": { + "breakpointDescription": "Mobile is used from 0px up to the next layout breakpoint." + }, + "preview": { + "columns": "columns", + "empty": "This layout is empty", + "dynamicSection": "Dynamic section", + "editorWidthLabel": "{layoutName} · {width}px" + }, + "reset": { + "action": "Reset from Base", + "confirm": { + "title": "Reset {layoutName}?", + "message": "This replaces every saved position and size in this layout with a new layout generated from Base. This action cannot be undone." + } + }, + "edit": { + "action": "Edit layout", + "saveAndEdit": "Save and continue editing", + "save": "Save layout", + "cancel": { + "action": "Cancel layout editing", + "title": "Discard layout changes?", + "message": "Your unsaved changes to this layout will be discarded." + } } }, "background": { @@ -4293,10 +6053,7 @@ "rename": { "label": "", "description": "", - "button": "", - "modal": { - "title": "" - } + "button": "" }, "visibility": { "label": "", @@ -4320,9 +6077,7 @@ } }, "delete": { - "label": "", "description": "", - "button": "", "confirm": { "title": "", "description": "" @@ -4367,28 +6122,41 @@ }, "layout": { "field": { - "name": { - "label": "" - }, "columnCount": { "label": "" }, "breakpoint": { "label": "", "description": "" + }, + "gutters": { + "label": "Fixed sidebars", + "description": "Reserve up to three dashboard columns on either side. The remaining canvas will reflow automatically.", + "left": { + "label": "Left sidebar", + "description": "Keep this area visible as the dashboard scrolls.", + "thumbLabel": "Left sidebar width" + }, + "right": { + "label": "Right sidebar", + "description": "Keep this area visible as the dashboard scrolls.", + "thumbLabel": "Right sidebar width" + }, + "width": { + "label": "Width in columns" + }, + "preview": { + "label": "Dashboard layout preview" + } } } }, "management": { "metaTitle": "", - "title": { - "morning": "", - "afternoon": "", - "evening": "" - }, "notFound": { "title": "", - "text": "" + "text": "", + "backToHome": "Return to management home" }, "error": { "title": "This page couldn't load", @@ -4397,19 +6165,10 @@ }, "navbar": { "items": { - "workshop": "Workshop", "home": "Home", - "boards": "", - "apps": "", - "integrations": "", - "searchEngies": "", - "medias": "", "users": { - "label": "", "items": { - "manage": "", - "invites": "", - "groups": "" + "manage": "" } }, "tools": { @@ -4417,10 +6176,7 @@ "items": { "docker": "", "kubernetes": "", - "logs": "", "api": "API & MCP", - "certificates": "", - "tasks": "", "backup": "Backup" } }, @@ -4434,21 +6190,12 @@ "sourceCode": "" } }, - "about": "About" + "about": "About", + "assistant": "Assistant" } }, "page": { "home": { - "statistic": { - "board": "", - "user": "", - "invite": "", - "integration": "", - "app": "", - "group": "", - "searchEngine": "", - "media": "" - }, "statisticLabel": { "boards": "", "resources": "", @@ -4486,13 +6233,8 @@ "tooltip": "" } }, - "duplicate": { - "label": "" - }, "delete": { - "label": "", "confirm": { - "title": "", "description": "" } } @@ -4501,28 +6243,82 @@ "public": "", "private": "" }, - "noResults": { - "title": "No boards yet" + "preview": { + "label": "Layout preview for {name}, containing {count} items", + "unknownCreator": "Unknown creator" }, - "modal": { - "createBoard": { - "field": { - "name": { - "label": "" - } - } - } + "noResults": { + "title": "No boards yet", + "description": "Create a board to organise your apps and widgets in one place." } }, "media": { "includeFromAllUsers": "" }, "user": { - "back": "", "fieldsDisabledExternalProvider": "", "setting": { "general": { "title": "", + "header": { + "title": "Header studio", + "badge": "Personal", + "description": "Drag controls anywhere in the row. Left, Centre, and Right stay fixed while controls shift around them.", + "device": { + "desktop": "Desktop", + "mobile": "الجوال" + }, + "zones": { + "left": "Left", + "center": "Centre", + "right": "Right" + }, + "action": { + "hide": "Hide the header", + "show": "Show the header", + "configure": "Move or configure {item}", + "remove": "Remove {item}", + "dropIntoZone": "Move into the {zone} section" + }, + "preview": { + "board": "Dashboard preview for {name}", + "empty": "No dashboard layout is available" + }, + "available": { + "title": "Available controls", + "description": "Add a control, then drag its entire button into position above.", + "requiredAlways": "This control is required, but you can move it anywhere in the header.", + "allAdded": "All built-in controls are already in your header.", + "add": "Add {item}", + "boardShortcut": "Board shortcut", + "chooseBoard": "Choose a board" + }, + "configuration": { + "description": "This control remains the same size as in the live header.", + "searchDisplay": { + "input": "Search bar", + "icon": "Icon only" + }, + "logoDisplay": { + "logo": "Logo only", + "logoAndText": "Logo + text" + } + }, + "items": { + "logo": "Logo", + "search": "Search", + "home": "Home board", + "boardSwitcher": "الألواح", + "assistant": "Assistant", + "docker": "الحاويات", + "boardEdit": "Edit board", + "boardSettings": "Board settings", + "settings": "Your settings", + "themeToggle": "Toggle theme", + "user": "Account", + "boardUnavailable": "Board unavailable" + } + }, "item": { "language": "", "board": { @@ -4556,14 +6352,10 @@ }, "security": { "title": "" - }, - "board": { - "title": "" } }, "list": { - "metaTitle": "", - "title": "" + "metaTitle": "" }, "edit": { "metaTitle": "" @@ -4617,9 +6409,6 @@ } }, "field": { - "id": { - "label": "" - }, "creator": { "label": "" }, @@ -4643,10 +6432,7 @@ }, "setting": { "title": "", - "alert": "", - "board": { - "title": "" - } + "alert": "" }, "members": { "title": "", @@ -4654,10 +6440,7 @@ "notFound": "" }, "permissions": { - "title": "", - "form": { - "unsavedChanges": "" - } + "title": "" } } }, @@ -4666,12 +6449,10 @@ "notification": { "success": { "message": "" - }, - "error": { - "message": "" } }, "section": { + "analyticsDocumentation": "See exactly which analytics data Homarr collects", "analytics": { "title": "", "general": { @@ -4700,7 +6481,6 @@ } }, "board": { - "title": "", "homeBoard": { "label": "", "mobileLabel": "", @@ -4719,7 +6499,6 @@ } }, "user": { - "title": "", "enableGravatar": { "label": "", "description": "" @@ -4735,12 +6514,86 @@ "appearance": { "title": "", "defaultColorScheme": { - "label": "Default colour scheme", + "label": "Default colour scheme" + } + }, + "branding": { + "title": "Instance branding", + "groups": { + "identity": "Identity", + "appearance": "Appearance", + "customCss": "Custom CSS", + "authentication": "المصادقة" + }, + "identity": { + "description": "The application logo is the larger mark used within the app, on sign-in pages and for installed apps. The browser icon (favicon) is the small square used in tabs and bookmarks; when empty, it falls back to the application logo." + }, + "appName": { + "label": "Application name" + }, + "greeting": { + "label": "Custom greeting" + }, + "logo": { + "label": "Application logo", + "placeholder": "/logo/logo.png" + }, + "favicon": { + "label": "Browser icon (favicon)", + "placeholder": "Uses application logo" + }, + "primaryColor": { + "label": "Primary colour" + }, + "secondaryColor": { + "label": "Secondary accent" + }, + "lockPrimaryColor": { + "label": "Keep this colour on every board", + "description": "Prevents board colours from replacing the application accent." + }, + "signInBackground": { + "label": "Authentication background", + "placeholder": "https://example.com/background.jpg" + }, + "signInOverlay": { + "label": "Background overlay" + }, + "defaultRadius": { + "label": "Corner style", "options": { - "auto": "Auto", - "light": "", - "dark": "" + "xs": "Tight", + "sm": "Subtle", + "md": "Balanced", + "lg": "Rounded corners", + "xl": "Soft" } + }, + "customCss": { + "label": "Global custom CSS", + "description": "Applied to every page. Board custom CSS can override it." + }, + "authVisibility": { + "description": "Choose what appears on every authentication page.", + "appName": "Application name", + "logo": "Application logo", + "greeting": "Greeting" + }, + "summary": { + "title": "Current branding", + "cornerStyle": "Corner style", + "palette": "Colour palette", + "backgroundConfigured": "Custom background · {overlay}% overlay", + "backgroundDefault": "Default background", + "greetingConfigured": "Custom greeting", + "greetingDefault": "Default greeting", + "boardColorLocked": "Board colour locked", + "boardColorFlexible": "Board colours allowed", + "appName": "Job name", + "logo": "Logo", + "greeting": "Greeting", + "on": "On", + "off": "Off" } }, "culture": { @@ -4748,12 +6601,177 @@ "defaultLocale": { "label": "" } + }, + "assistant": { + "loading": "Loading assistant configuration", + "title": "Assistant", + "description": "Connect an OpenAI-compatible model endpoint for the instance-wide assistant.", + "security": { + "description": "API keys and additional header values are encrypted in the Homarr database. They are never returned to browsers. Model requests are sent from the Homarr server directly to the configured endpoint." + }, + "overview": { + "connectionReady": "Connection ready", + "unsavedChanges": "Unsaved changes", + "setupRequired": "Setup required", + "disabled": "Disabled", + "noModel": "No model selected" + }, + "connection": { + "endpointTitle": "Provider and endpoint", + "description": "Choose a preset or connect any service that implements the OpenAI Chat Completions API.", + "save": "Save provider connection" + }, + "credentials": { + "title": "Credentials", + "description": "Add the secrets this endpoint needs. Stored values remain encrypted and cannot be read back.", + "required": "Key required", + "optional": "Key optional", + "workshop": "Per-user GitHub sign-in" + }, + "provider": { + "title": "Provider", + "groups": { + "free": "Free with Homarr", + "hosted": "Hosted providers", + "local": "Local providers", + "custom": "Custom" + }, + "options": { + "homarr": { + "description": "A limited number of Assistant uses are free each day, paid for by the Homarr team. Sign in with the Community Workshop to use your allowance." + }, + "openrouter": { + "description": "Hosted model routing with a large tool-capable model catalogue." + }, + "openai": { + "description": "OpenAI Chat Completions through the official API endpoint." + }, + "anthropic": { + "description": "Claude through Anthropic's OpenAI SDK compatibility endpoint." + }, + "google-gemini": { + "description": "Gemini through Google's OpenAI-compatible API endpoint." + }, + "xai": { + "description": "Grok models through xAI's OpenAI-compatible API." + }, + "groq": { + "description": "Fast hosted inference through Groq's OpenAI-compatible API." + }, + "mistral": { + "description": "Mistral models through the official API." + }, + "deepseek": { + "description": "DeepSeek models through its OpenAI-compatible API." + }, + "together": { + "description": "Hosted open models through Together's OpenAI-compatible API." + }, + "ollama": { + "description": "A local or network Ollama server using its OpenAI-compatible API." + }, + "lm-studio": { + "description": "An LM Studio local server with OpenAI compatibility enabled." + }, + "llama-cpp": { + "description": "A local or network llama.cpp server using its OpenAI-compatible API." + }, + "custom": { + "label": "Custom endpoint", + "description": "Any other endpoint compatible with OpenAI Chat Completions." + } + }, + "homarrAuth": { + "title": "Free daily Assistant uses included", + "description": "No API key is needed. The Homarr team covers a limited number of Assistant uses for you each day. Sign in with the Community Workshop to keep your allowance separate." + } + }, + "baseUrl": { + "title": "API base URL", + "description": "Include the API prefix, usually /v1. In containers, localhost refers to the Homarr container." + }, + "apiKey": { + "title": "API key", + "required": "Required by this provider. The value is encrypted and write-only.", + "optional": "Optional for local endpoints. Leave it blank when the service does not require bearer authentication.", + "placeholder": "Enter an API key", + "savedTitle": "Encrypted API key saved", + "savedDescription": "Homarr can use this key, but it cannot display or recover its value.", + "remove": "Remove saved API key", + "removeFlow": { + "title": "Remove the saved API key?", + "description": "This provider requires an API key. Removing it can stop model discovery and assistant responses until another key is saved.", + "optionalDescription": "The endpoint will stop receiving bearer authentication after this key is removed. Confirm that it accepts unauthenticated requests or uses another stored header.", + "cancel": "Keep saved key", + "confirm": "Remove API key" + } + }, + "headers": { + "title": "Additional request headers", + "description": "Optional authentication or routing headers. Header values are encrypted and write-only.", + "add": "Add header", + "name": "Header name", + "value": "Header value", + "valuePlaceholder": "Secret or routing value", + "remove": "Remove header", + "configured": "Additional encrypted headers are configured. Adding headers replaces the complete stored set.", + "empty": "No additional headers are stored for this provider.", + "savedBadge": "Headers saved", + "pendingRemoval": "Removal pending", + "clear": "Remove stored headers when saving", + "keep": "Keep stored headers" + }, + "model": { + "title": "Model", + "description": "Select a discovered model or enter an exact endpoint model ID.", + "placeholder": "Model ID", + "refresh": "Refresh models", + "chooseModel": "Choose the model used for new conversations.", + "discoveryPath": "Model discovery path", + "discoveryPathDescription": "Appended to the API base URL. Leave blank to disable discovery and use a manual model ID.", + "manual": "Enter a model ID manually or save the connection to discover models.", + "manualFallback": "Discovery is unavailable. You can still enter a model ID manually.", + "saveConnectionFirst": "Save the provider connection before choosing a model.", + "discovering": "Refreshing the models available from this provider…", + "discovered": "{count, plural, one {Discovered # model. Tool support depends on the selected endpoint and model.} other {Discovered # models. Tool support depends on the selected endpoint and model.}}", + "discoveryFailed": "Model discovery did not complete", + "context": "{count} context window", + "toolsConfirmed": "Tools advertised", + "toolsUnknown": "Verify tool support" + }, + "serverTools": { + "title": "Server tools", + "webSearch": { + "label": "Web search", + "description": "Allow the model to search the live web through OpenRouter when a request needs current information. Search usage is charged separately by OpenRouter.", + "proxyDescription": "Send OpenRouter's web-search server tool to this endpoint. Enable this only when the custom endpoint forwards the OpenRouter server-tools format, such as a Homarr Router proxy.", + "limit": "The model decides when to search, with a limit of 3 searches and 5 results per search for each request." + } + }, + "enabled": { + "label": "Enable Assistant", + "description": "Shows the assistant to all signed-in users. Existing Homarr permissions still apply to every internal tool call." + }, + "save": "Save assistant", + "notification": { + "connectionSaved": { + "title": "Provider connection saved", + "message": "The endpoint and encrypted credentials are ready for model selection.", + "credentialsCleared": "The endpoint changed, so previous credentials were cleared. Add credentials for the new destination if required." + }, + "saved": { + "title": "Assistant settings saved", + "message": "The new model and availability settings are active." + }, + "error": { + "title": "Assistant settings could not be saved" + } + } } } }, "tool": { "tasks": { - "title": "", "status": { "idle": "", "running": "Running", @@ -4771,6 +6789,11 @@ "label": "" } }, + "action": { + "run": "Run {name} now", + "enable": "Enable {name}", + "disable": "Disable {name}" + }, "interval": { "seconds": "", "minutes": "", @@ -4786,13 +6809,7 @@ } } }, - "settings": { - "title": "" - }, "field": { - "name": { - "label": "" - }, "interval": { "label": "" }, @@ -4806,11 +6823,6 @@ "table": { "search": "" }, - "action": { - "refresh": { - "label": "" - } - }, "refresh": { "success": { "message": "" @@ -4844,7 +6856,6 @@ } }, "api": { - "title": "", "modal": { "createApiToken": { "title": "", @@ -4870,7 +6881,6 @@ }, "table": { "header": { - "id": "", "createdBy": "", "actions": "" } @@ -4926,43 +6936,12 @@ "availableTools": { "title": "Available Tools", "description": "{count} tools available. Expand a category to see individual tools and their descriptions.", - "columnType": "Type", - "columnName": "Tool", - "columnDescription": "Description" - }, - "troubleshooting": { - "title": "Troubleshooting", - "missingHeader": { - "title": "\"Missing ApiKey header\"", - "description": "Your client is not sending the {header} header. Verify the {section} section in your MCP config is correct. Some clients require restarting after config changes." - }, - "invalidFormat": { - "title": "\"Invalid ApiKey format\"", - "description": "Make sure you copied the full API key, not just part of it." - }, - "invalidKey": { - "title": "\"Invalid API key\"", - "description": "The key ID was not found or the token is wrong. API keys can only be viewed once when created. If you lost it, delete the old key and create a new one." - }, - "connectionRefused": { - "title": "Connection refused / timeout", - "description": "Make sure the URL is reachable from your AI client. If Homarr runs behind a reverse proxy or in Docker, use the external URL (not {localhost}). Verify the port is correct (default: 7575 for Docker)." - }, - "toolsNotAppearing": { - "title": "Tools not appearing", - "description": "Some tools require specific integrations to be configured (e.g. Docker, Overseerr). The tool list depends on what's available in your Homarr instance." + "filteredDescription": "{count} matching tools across expanded categories.", + "search": "Search tools", + "noResults": { + "title": "No tools match this search", + "description": "No MCP tool matches \"{search}\". Try a namespace, tool name, or description." } - }, - "copy": "Copy", - "oneClick": { - "title": "Install in One Click", - "subtitle": "Uses OAuth — authenticate in your browser on first use", - "vsCode": "Install in VS Code", - "cursor": "Install in Cursor", - "copyUrl": "Copy MCP URL", - "copied": "Copied!", - "copyHint": "For ChatGPT, Claude Code, or any MCP client", - "manualConfig": "Manual Configuration" } } } @@ -4979,47 +6958,12 @@ "title": "Sensitive data export", "warningTitle": "This export contains your entire database.", "warningBody": "The backup includes all users, integration secrets (encrypted), API keys, board configurations, and app data. Store the exported file securely and do not share it.", - "typePrompt": "Type \"{phrase}\" to continue", - "submit": "Export Database", - "cancel": "Cancel" + "submit": "Export Database" } }, "import": { "title": "Restore Database", - "description": "Upload a previously exported backup ZIP to restore your database. This will replace your entire database. If the backup was created with a different encryption key, secrets will be automatically re-encrypted.", - "warning": "Restoring a backup will completely replace your current database and restart the application. This action cannot be undone.", - "dropzone": { - "title": "Drop your backup ZIP here or click to browse", - "description": "Only .zip files from a Homarr SQLite backup are accepted" - }, - "changeFile": "Change file", - "button": "Restore Database", - "success": { - "title": "Restore Complete", - "message": "Database has been restored successfully. The application is restarting..." - }, - "error": "Import failed" - }, - "preview": { - "title": "Backup Contents", - "exported": "Exported {date}", - "loading": "Analyzing backup file...", - "errorTitle": "Preview Error", - "entity": "Entity", - "count": "Count", - "boards": "Boards", - "entities": { - "board": "Boards", - "user": "Users", - "app": "Apps", - "integration": "Integrations", - "item": "Widgets", - "media": "Media", - "search_engine": "Search Engines" - }, - "analyzeError": "Failed to analyze backup file", - "invalidMissingMetadata": "Invalid backup: missing metadata.json", - "invalidMissingDb": "Invalid backup: missing db.sqlite" + "description": "Upload a previously exported backup ZIP to restore your database. This will replace your entire database. If the backup was created with a different encryption key, secrets will be automatically re-encrypted." }, "restore": { "dropzone": { @@ -5029,29 +6973,20 @@ "analyzing": "Analyzing backup...", "changeFile": "Change file", "continueToRestore": "Continue to restore", - "tryAgain": "Try again", "analysisError": "Analysis Error", "preview": { "title": "Backup Contents", "exported": "Exported {date}", "entity": "Entity", "count": "Count", - "boards": "Boards", "entities": { - "board": "Boards", - "user": "Users", - "app": "Apps", - "integration": "Integrations", - "item": "Widgets", - "media": "Media", - "search_engine": "Search Engines" + "item": "Widgets" }, "migrationsApplied": "{count} migration applied", "migrationsAppliedPlural": "{count} migrations applied", "migrationsOlderVersion": "This backup was from an older Homarr version. {count} schema migration was applied to bring it up to date.", "migrationsOlderVersionPlural": "This backup was from an older Homarr version. {count} schema migrations were applied to bring it up to date.", "migrationsUpToDate": "Database schema is up to date ({count} migrations applied)", - "upToDate": "Up to date", "migrationsPending": "{count} pending" }, "migration": { @@ -5062,21 +6997,21 @@ "title": "Destructive action", "warningTitle": "This will permanently replace your entire database.", "warningBody": "All current boards, users, apps, integrations, settings, and sessions will be lost. This action cannot be undone. The application will restart after the restore.", - "typePrompt": "Type \"{phrase}\" to continue", - "cancel": "Cancel", "submit": "Restore Database" }, "progress": { "title": "Restoring database...", - "extracting": "Extracting backup archive", - "migrating": "Applying database migrations", - "encrypting": "Re-encrypting integration secrets", - "swapping": "Replacing database file", - "restarting": "Restarting server" + "restarting": "Restarting server", + "relogin": "Restoring the database invalidated your current session. Homarr will send you to sign in when the server is ready." }, "complete": { "title": "Restore Complete", - "message": "Database has been restored successfully. The server is restarting — please refresh the page in a few seconds." + "message": "Database has been restored successfully. The server is restarting — please refresh the page in a few seconds.", + "button": "Sign in now" + }, + "timeout": { + "title": "Server did not come back online", + "message": "The database restore finished, but Homarr did not become ready again. Retry the connection check or refresh this page manually." }, "failed": { "title": "Restore Failed" @@ -5084,6 +7019,9 @@ "invalidMissingMetadata": "Invalid backup: missing metadata.json", "invalidMissingDb": "Invalid backup: missing db.sqlite", "analyzeError": "Failed to analyze backup" + }, + "confirm": { + "typePrompt": "Type \"{phrase}\" to continue" } } }, @@ -5118,7 +7056,11 @@ "toggleBoardEdit": "", "toggleColorScheme": "", "saveNotebook": "", - "openSpotlight": "" + "openSpotlight": "", + "openSpotlightApps": "Open app search", + "openSpotlightAssistant": "Open Assistant mode", + "openSpotlightPreferences": "Open preferences mode", + "openAssistant": "Open Assistant" }, "note": "" } @@ -5128,6 +7070,63 @@ }, "docker": { "title": "", + "reconciliation": { + "title": "Assisted Docker setup", + "suggestions": "", + "attention": "{count} need attention", + "endpointUnavailable": "Some services could not be checked because these endpoints are unavailable: {names}", + "empty": "No visible Docker services were found.", + "emptyFilter": "No services match this view.", + "ambiguous": "More than one existing item could match this service. Homarr will not choose one automatically.", + "filter": { + "attention": "Needs attention", + "represented": "Already set up", + "all": "All" + }, + "state": { + "newRecognized": "Ready to connect", + "newApp": "New service", + "represented": "Already represented", + "linked": "Linked", + "moved": "Address changed" + }, + "url": { + "manual": "Enter an address manually" + }, + "health": { + "layer": { + "docker": "الحاويات", + "integrationConfiguration": "Integration", + "authentication": "المصادقة", + "apiRequest": "API", + "appRepresentation": "App", + "widgetConfiguration": "Widget", + "widgetQuery": "Widget query" + }, + "status": { + "available": "Available", + "configured": "Configured", + "linked": "Linked", + "missing": "Missing", + "changed": "Changed", + "unused": "Not used", + "notApplicable": "Not applicable", + "notObserved": "Not observed" + } + }, + "action": { + "review": "Review", + "dismiss": "Dismiss", + "restoreDismissed": "Restore dismissed ({count})", + "setupIntegration": "Set up integration", + "reviewIntegration": "Review integration", + "viewRepresentation": "View setup" + }, + "loadError": { + "title": "Docker setup assistant could not be loaded", + "message": "Docker service information is unavailable. Try again without leaving this page." + } + }, "table": { "updated": "", "refresh": { @@ -5140,9 +7139,6 @@ "totalMemory": "Total Mem: {memory}" }, "field": { - "name": { - "label": "" - }, "state": { "label": "", "option": { @@ -5156,9 +7152,6 @@ } }, "stats": { - "cpu": { - "label": "" - }, "memory": { "label": "" } @@ -5221,8 +7214,11 @@ } }, "remove": { - "label": "", "confirm": "Click again to remove permanently", + "confirmation": { + "title": "{count, plural, one {Remove # container?} other {Remove # containers?}}", + "message": "{count, plural, one {This permanently removes # container: {names}} other {This permanently removes # containers: {names}}}" + }, "notification": { "success": { "title": "", @@ -5234,8 +7230,13 @@ } } }, + "result": { + "failure": { + "title": "Some container actions failed", + "message": "{total, plural, one {{failed} of # action failed: {names}} other {{failed} of # actions failed: {names}}}" + } + }, "refresh": { - "label": "", "notification": { "success": { "title": "", @@ -5266,18 +7267,33 @@ }, "error": { "internalServerError": "", + "endpointUnavailable": "{count, plural, one {# Docker endpoint unavailable: {names}} other {# Docker endpoints unavailable: {names}}}", "noColumns": "Select at least one column in the widget settings" } }, "kubernetes": { + "context": { + "label": "Kubernetes context", + "loadError": { + "title": "Kubernetes contexts could not be loaded", + "message": "Context information is unavailable. Try again without leaving this page." + }, + "status": { + "available": "Available", + "degraded": "Metrics unavailable", + "unavailable": "Unavailable" + }, + "unavailable": "This Kubernetes context cannot be reached. Select another context or verify its credentials and endpoint.", + "metricsUnavailable": "This context is reachable, but Metrics Server is unavailable. Inventory remains available without live CPU and memory usage." + }, "cluster": { "title": "", "label": "", "providers": "", "version": "", - "architecture": "", "capacity": { "title": "", + "metricsUnavailable": "Metrics Server is unavailable. Inventory and reserved capacity remain visible, but live CPU and memory usage cannot be shown.", "resource": { "reserved": "", "used": "" @@ -5296,38 +7312,10 @@ } }, "nodes": { - "label": "", "field": { - "name": { - "label": "" - }, - "state": { - "label": "", - "option": { - "ready": "", - "NotReady": "" - } - }, - "cpu": { - "label": "" - }, - "memory": { - "label": "" - }, - "pods": { - "label": "" - }, - "operatingSystem": { - "label": "" - }, - "architecture": { - "label": "" - }, + "metricsUnavailable": "Unavailable", "kubernetesVersion": { "label": "" - }, - "creationTimestamp": { - "label": "" } }, "table": { @@ -5335,43 +7323,17 @@ } }, "namespaces": { - "label": "", - "field": { - "name": { - "label": "" - }, - "state": { - "label": "", - "option": { - "active": "", - "terminating": "" - } - }, - "creationTimestamp": { - "label": "" - } - }, "table": { "search": "" } }, "ingresses": { - "label": "", "field": { - "name": { - "label": "" - }, - "namespace": { - "label": "" - }, "className": { "label": "" }, "rulesAndPaths": { "label": "" - }, - "creationTimestamp": { - "label": "" } }, "table": { @@ -5379,17 +7341,7 @@ } }, "services": { - "label": "", "field": { - "name": { - "label": "" - }, - "namespace": { - "label": "" - }, - "type": { - "label": "" - }, "ports": { "label": "" }, @@ -5398,9 +7350,6 @@ }, "clusterIP": { "label": "" - }, - "creationTimestamp": { - "label": "" } }, "table": { @@ -5408,25 +7357,12 @@ } }, "pods": { - "label": "", "field": { - "name": { - "label": "" - }, - "namespace": { - "label": "" - }, "image": { "label": "" }, "applicationType": { "label": "" - }, - "status": { - "label": "" - }, - "creationTimestamp": { - "label": "" } }, "table": { @@ -5434,51 +7370,17 @@ } }, "secrets": { - "label": "", - "field": { - "name": { - "label": "" - }, - "namespace": { - "label": "" - }, - "type": { - "label": "" - }, - "creationTimestamp": { - "label": "" - } - }, "table": { "search": "" } }, "configmaps": { - "label": "", - "field": { - "name": { - "label": "" - }, - "namespace": { - "label": "" - }, - "creationTimestamp": { - "label": "" - } - }, "table": { "search": "" } }, "volumes": { - "label": "", "field": { - "name": { - "label": "" - }, - "namespace": { - "label": "" - }, "accessModes": { "label": "" }, @@ -5493,12 +7395,6 @@ }, "volumeName": { "label": "" - }, - "status": { - "label": "" - }, - "creationTimestamp": { - "label": "" } }, "table": { @@ -5507,6 +7403,29 @@ }, "error": { "internalServerError": "" + }, + "field": { + "name": { + "label": "Job name" + }, + "namespace": { + "label": "Namespace" + }, + "creationTimestamp": { + "label": "Created" + }, + "state": { + "label": "State" + }, + "status": { + "label": "Status" + }, + "type": { + "label": "Type" + }, + "architecture": { + "label": "Architecture" + } } }, "permission": { @@ -5540,71 +7459,27 @@ }, "navigationStructure": { "manage": { - "workshop": { - "label": "Workshop" - }, "label": "", - "boards": { - "label": "" - }, - "integrations": { - "label": "", + "custom-widgets": { "edit": { - "label": "" + "flow": { + "label": "Flow" + } }, - "new": { - "label": "" - } - }, - "search-engines": { - "label": "", - "new": { - "label": "" + "workshop": { + "label": "Workshop" }, - "edit": { - "label": "" - } - }, - "medias": { - "label": "" - }, - "apps": { - "label": "", - "new": { - "label": "" - }, - "edit": { - "label": "" + "publish": { + "label": "Publish to Workshop" } }, "users": { - "label": "", - "create": { - "label": "" - }, "general": "", - "security": "", - "board": "", - "groups": { - "label": "" - }, - "invites": { - "label": "" - } + "security": "" }, "tools": { "label": "", - "tasks": { - "label": "" - }, - "docker": { - "label": "", - "logs": { - "label": "Logs" - } - }, "kubernetes": { - "label": "", "nodes": { "label": "" }, @@ -5630,11 +7505,7 @@ "label": "" } }, - "logs": { - "label": "" - }, "certificates": { - "label": "", "hostnames": { "label": "" } @@ -5645,12 +7516,60 @@ }, "about": { "label": "" + }, + "assistant": { + "label": "Assistant" } } }, "search": { "placeholder": "Search for anything", "nothingFound": "", + "modePicker": { + "search": { + "label": "Search", + "placeholder": "Search apps, boards, pages, commands, and preferences" + }, + "apps": { + "label": "البرامج", + "placeholder": "Search apps, boards, and integrations" + }, + "command": { + "label": "Commands", + "placeholder": "Search actions and commands" + }, + "preferences": { + "label": "Preferences", + "placeholder": "Search and change preferences" + }, + "assistant": { + "label": "Assistant", + "placeholder": "Ask Assistant" + }, + "external": { + "label": "Web", + "placeholder": "Search with an external search engine" + }, + "media": { + "label": "Media", + "placeholder": "Search for a film or show", + "fallback": "Search media for \"{query}\"" + }, + "userGroup": { + "label": "People", + "placeholder": "Search users and groups" + }, + "continueWith": "Continue with", + "dialogAriaLabel": "{mode} command menu", + "navigationLabel": "Search modes", + "modeAriaLabel": "{mode} mode", + "resultsAriaLabel": "{mode} results", + "footer": { + "navigate": "Navigate", + "open": "Open", + "close": "Close" + } + }, "error": { "fetch": "" }, @@ -5659,7 +7578,6 @@ "help": "", "group": { "app": { - "title": "", "children": { "action": { "open": { @@ -5675,7 +7593,6 @@ } }, "board": { - "title": "", "children": { "action": { "open": { @@ -5695,9 +7612,6 @@ "title": "" } } - }, - "integration": { - "title": "" } } }, @@ -5726,9 +7640,6 @@ "newBoard": { "label": "Create a new board" }, - "importBoard": { - "label": "" - }, "newApp": { "label": "Create a new app" }, @@ -5798,7 +7709,6 @@ } }, "defaultSearchEngineId": { - "label": "Default search engine", "children": { "detail": { "title": "Select your default search engine" @@ -5806,7 +7716,6 @@ } }, "openSearchInNewTab": { - "label": "Open search results in new tab", "children": { "detail": { "title": "Open search results in new tab" @@ -5814,7 +7723,6 @@ } }, "ddgBangs": { - "label": "Enable DuckDuckGo bangs", "children": { "detail": { "title": "Enable DuckDuckGo bangs" @@ -5829,6 +7737,13 @@ } } }, + "byteUnitSystem": { + "children": { + "detail": { + "title": "Select your data size units" + } + } + }, "homeBoardId": { "label": "Home board", "children": { @@ -5846,7 +7761,6 @@ } }, "pingIconsEnabled": { - "label": "Use icons for pings", "children": { "detail": { "title": "Use icons for pings" @@ -5854,7 +7768,6 @@ } }, "enableRightClickOnWidgets": { - "label": "Enable right-click on widgets", "children": { "detail": { "title": "Enable right-click on widgets" @@ -5882,6 +7795,7 @@ "description": "Start typing to search your media request integrations", "disabled": { "noIntegration": "Add an Overseerr, Jellyseerr, or Seerr integration to enable media search.", + "signInRequired": "Sign in to search media request integrations.", "scoped": "This widget does not have an accessible media request integration." } } @@ -5898,7 +7812,6 @@ "help": "Use an external search engine", "group": { "searchEngine": { - "title": "", "tipDdgBangs": "Tip: You can use any DuckDuckGo bangs here as well, e.g. !something", "bang": { "searchWithQuery": "Search \"{query}\" with {label}", @@ -5949,20 +7862,6 @@ "group": { "mode": { "title": "Modes" - }, - "help": { - "title": "Help", - "option": { - "documentation": { - "label": "Documentation" - }, - "submitIssue": { - "label": "Submit an issue" - }, - "discord": { - "label": "Community Discord" - } - } } } }, @@ -5974,9 +7873,10 @@ "other": { "label": "Search with another search engine" }, - "no-default": { - "label": "No default search engine", - "description": "Set a default search engine in preferences" + "no-engines": { + "label": "No search engines configured", + "descriptionCreate": "Add a search engine to search from the command menu", + "descriptionUnavailable": "Ask an administrator to configure a search engine" }, "search": { "label": "Search for \"{query}\" with {name}" @@ -6056,7 +7956,6 @@ "help": "Search for users or groups", "group": { "user": { - "title": "Users", "children": { "action": { "detail": { @@ -6069,7 +7968,6 @@ } }, "group": { - "title": "Groups", "children": { "action": { "detail": { @@ -6093,9 +7991,6 @@ "engine": { "search": "Find a search engine", "field": { - "name": { - "label": "Name" - }, "short": { "label": "Short" }, @@ -6108,12 +8003,19 @@ }, "page": { "list": { - "title": "Search engines", + "ariaLabel": "Configured search engines", "noResults": { "title": "There are no search engines yet", - "action": "Create your first search engine" + "description": "Search engines let Spotlight send a query to a site or connected service.", + "action": "Create your first search engine", + "filteredTitle": "No search engines match your search", + "filteredDescription": "No search engines match \"{search}\". Try another name or URL." }, - "interactive": "Interactive, uses an integration" + "interactive": "Interactive, uses an integration", + "type": { + "generic": "URL template", + "fromIntegration": "Integration" + } }, "create": { "title": "New search engine", @@ -6132,11 +8034,9 @@ "title": "Edit search engine", "notification": { "success": { - "title": "Changes applied successfully", "message": "The search engine was saved successfully" }, "error": { - "title": "Unable to apply changes", "message": "The search engine could not be saved" } }, @@ -6275,6 +8175,10 @@ } }, "log": { + "context": { + "widgetError": "Widget reported an error around this time", + "expiredWidgetError": "Logs around this widget error are no longer retained" + }, "level": { "option": { "debug": "Debug", @@ -6286,7 +8190,6 @@ }, "onboardingTour": { "learnMore": "Read the docs", - "next": "Next", "prev": "Back", "done": "Done", "skip": "Skip tour", @@ -6350,5 +8253,359 @@ "description": "Change your colour scheme, language, home board, and preferences. You can also jump to the management area from here." } } + }, + "metadata": { + "description": "A self-hosted dashboard for the *arr stack and your entire homelab. Integrates with 50+ services, real-time widgets, no config files.", + "dashboardTitle": "{appName} Dashboard" + }, + "assistant": { + "title": "Assistant", + "open": "Open Assistant", + "close": "Close assistant", + "minimize": "Minimise assistant", + "spotlight": "Ask Assistant", + "spotlightDescription": "Type and send a prompt without leaving the command menu.", + "spotlightPrompt": { + "title": "Ask Assistant", + "description": "Type a prompt above. Enter sends it in the background.", + "send": "Send prompt", + "empty": "Type a prompt above" + }, + "unavailable": { + "checking": "Checking whether the assistant is available…", + "error": "The assistant's availability could not be checked. Try again.", + "notConfigured": "An administrator must configure and enable the assistant first.", + "signIn": "Sign in to use Assistant." + }, + "newConversation": "New conversation", + "conversations": "Conversations", + "conversationActions": "Conversation actions", + "searchConversations": "Search conversations", + "noMatchingConversations": "No matching conversations", + "moreActions": "More response actions", + "renameConversation": { + "action": "Rename", + "label": "Conversation name", + "save": "Save name", + "failedTitle": "Conversation could not be renamed", + "failedDescription": "Homarr could not rename this conversation. Try again." + }, + "deleteConversation": { + "title": "Delete conversation?", + "description": "“{title}” and its messages will be permanently deleted.", + "failedTitle": "Conversation could not be deleted", + "failedDescription": "Homarr could not delete this conversation. Try again." + }, + "closeHistory": "Close conversation history", + "openHistory": "Open conversation history", + "emptyTitle": "What can I help with?", + "emptyDescription": "Ask about your Homarr setup, inspect live instance data, or approve actions when you want me to make a change.", + "suggestions": { + "health": { + "label": "Check service health", + "prompt": "Check my integrations and summarise anything that needs attention." + }, + "explore": { + "label": "Explore my Homarr", + "prompt": "Show me what I can view and manage in this Homarr instance." + }, + "media": { + "label": "Find media to request", + "prompt": "Help me find a film or series to request." + }, + "style": { + "label": "Improve a dashboard", + "prompt": "Help me improve a board's appearance or custom CSS. Show me my boards first, then preserve my current settings while we make the change." + }, + "designWidget": { + "label": "Design a widget", + "prompt": "Create and install a Custom Widget for " + } + }, + "composerPlaceholder": "Ask Assistant…", + "runtime": { + "model": "Model", + "searchModels": "Search models", + "noModels": "No models available", + "otherModels": "Other models", + "imageInput": "Accepts image input", + "thinking": "Thinking mode", + "reasoning": { + "auto": "Auto", + "none": "Off", + "minimal": "Minimal", + "low": "Low", + "medium": "Medium", + "high": "High" + } + }, + "providerQuota": { + "title": "Homarr provider", + "communityWorkshop": "Community Workshop", + "dailyAllowance": "Daily request allowance", + "remainingLabel": "{remaining} of {limit} Homarr provider requests remaining", + "loading": "Loading Homarr provider allowance", + "signInRequired": "Workshop sign-in required for the Homarr provider", + "signInDescription": "Sign in with GitHub through the Community Workshop to receive your separate daily allowance.", + "exhaustedDescription": "Your Homarr provider allowance has been used for today. It resets at midnight UTC.", + "unavailableDescription": "Sign in to the Workshop or wait for your Homarr provider allowance to reset.", + "signIn": "Sign in with GitHub", + "signInError": "GitHub sign-in failed. Try again in a moment.", + "loadError": "The Homarr provider allowance could not be loaded.", + "reset": "Resets {relative} at ", + "toolCalls": "Each model request and completed tool call uses one request.", + "retry": "Reload allowance", + "level": { + "ok": "OK", + "warning": "Warning", + "bad": "Low", + "dead": "Used" + } + }, + "stop": "Stop response", + "send": "Send message", + "copy": "Copy response", + "copyMessage": "Copy message", + "editMessage": "Edit message", + "updateMessage": "Update message", + "regenerate": "Regenerate response", + "helpful": "Helpful", + "notHelpful": "Not helpful", + "readAloud": "Read response aloud", + "stopReading": "Stop reading response", + "feedbackError": "Your feedback could not be saved. Try again.", + "exportMarkdown": "Export as Markdown", + "exportConversation": { + "action": "Export conversation as Markdown", + "failedTitle": "Conversation could not be exported", + "failedDescription": "Homarr could not load this conversation. Try again." + }, + "reasoning": "Thinking", + "previousResponse": "Previous response", + "nextResponse": "Next response", + "removeAttachment": "Remove attachment", + "downloadFile": "Download {name}", + "attachedImage": "Attached image", + "externalImageBlocked": "External image blocked for privacy", + "image": { + "loading": "Loading image", + "failed": "This image could not be loaded.", + "retry": "Try image again" + }, + "quoteSelection": "Quote", + "dismissQuote": "Remove quote", + "attachments": { + "add": "Attach an image or document", + "errorTitle": "Attachment could not be added", + "imageUnsupported": "The selected model does not support image input." + }, + "mentions": { + "menu": "Add Homarr context", + "context": "Context", + "app": "البرامج", + "integration": "التكاملات", + "board": "الألواح", + "widget": "Widgets", + "tools": "Available tools" + }, + "markdown": { + "diagram": "Diagram", + "renderingDiagram": "Rendering diagram…", + "diagramUnavailable": "This diagram could not be rendered." + }, + "commands": { + "menu": "Assistant commands", + "health": "Prepare a service-health check", + "explore": "Prepare an overview of this Homarr instance", + "media": "Prepare a media search", + "style": "Prepare a board appearance or custom CSS change", + "designWidget": "Prepare a one-prompt Custom Widget build" + }, + "usage": { + "tokens": "tokens", + "contextWindow": "Context window", + "requestDetails": "Request details", + "used": "Latest step", + "remaining": "Remaining", + "capacity": "Capacity", + "input": "Input", + "output": "Output", + "cached": "Cached input", + "cacheWrite": "Cache write", + "reasoning": "Reasoning", + "inputShort": "in", + "outputShort": "out", + "cachedShort": "cached", + "reasoningShort": "reasoning", + "firstOutput": "First output", + "homarrTiming": "Homarr observed", + "endToEnd": "End-to-end", + "observedThroughput": "Observed throughput", + "providerTiming": "Provider reported", + "loadingProviderDetails": "Loading generation details…", + "providerDetailsPending": "OpenRouter is still processing some generation details. Reopen to retry.", + "providerLatency": "Provider latency", + "generationTime": "Generation time", + "moderationLatency": "Moderation", + "providerThroughput": "Provider throughput", + "fallbacks": "Fallbacks", + "fallbackLatency": "Fallback latency", + "cacheDiscount": "Cache discount", + "normalizedTokens": "OpenRouter normalised input / output", + "byok": "BYOK", + "cost": "Cost", + "reported": "Reported by provider", + "estimated": "Estimated from model pricing", + "upstreamCost": "Upstream inference", + "webSearches": "Web searches", + "finishReason": "Finish reason", + "notReported": "Not reported", + "agentSteps": "Agent steps", + "step": "Step {number}", + "generation": "Generation" + }, + "toolInput": "Input", + "toolOutput": "Output", + "toolActivity": { + "iconSearch": "Looking for “{query}” icons", + "iconBrowse": "Browsing available icons" + }, + "toolNavigation": { + "openPreview": "Open preview", + "openWidget": "Open widget" + }, + "webSearch": { + "title": "Web search", + "completed": "OpenRouter searched the live web for this response.", + "searches": "{count, plural, one {# search} other {# searches}}", + "sources": "{count, plural, one {# source} other {# sources}}" + }, + "responseError": { + "title": "The assistant could not finish", + "description": "Try again. If the problem continues, ask an administrator to verify the configured model endpoint." + }, + "toolPreparationError": { + "title": "This request could not be prepared", + "description": "The model stopped before it supplied complete details. Retry the response or describe the request again. No change was made." + }, + "busy": { + "title": "The assistant is already working", + "description": "Wait for the current response or open it to stop the run." + }, + "pendingAction": { + "answerTitle": "Answer needed", + "answerFallback": "Choose an answer to continue", + "formTitle": "Review app details", + "boardFormTitle": "Review board changes", + "review": "Review", + "sendBlocked": "Resolve the pending request before sending" + }, + "activity": { + "thinking": "Assistant is thinking", + "working": "Working on your prompt", + "ready": "Response ready", + "completed": "Open the response", + "approval": "Approval needed", + "failed": "Assistant needs attention", + "expand": "Open the assistant response", + "dismiss": "Dismiss assistant activity" + }, + "scrollToLatest": "Scroll to latest", + "refresh": { + "action": "Refresh current view", + "working": "Refreshing current view", + "completeTitle": "View refreshed", + "completeDescription": "Visible Homarr data has been reloaded.", + "failedTitle": "View could not be refreshed", + "failedDescription": "The change may still be saved. Try the refresh action again." + }, + "askUser": { + "preparing": "Preparing question", + "answered": "Your answer", + "other": "Other", + "otherLabel": "Your answer", + "otherPlaceholder": "Type another answer…", + "submit": "Send answer", + "cancelOther": "Cancel other answer", + "optionKind": { + "affirmative": "Confirm", + "negative": "Decline", + "alternative": "Option", + "custom": "Custom" + } + }, + "configureApp": { + "title": "Review app details", + "description": "Choose a local icon and adjust anything before the assistant requests creation approval.", + "preparing": "Preparing app details", + "continue": "Use these details", + "ready": "App details ready", + "automaticContinue": "Using these app details automatically" + }, + "configureBoardSettings": { + "title": "Review board changes", + "loading": "Loading current board settings", + "loadErrorTitle": "Board settings could not be loaded", + "loadErrorDescription": "The board may no longer exist, or you may not have permission to modify it.", + "proposedCount": "Assistant proposed {count} fields", + "changeCount": "{count} changes ready", + "ready": "Board changes ready", + "cancelled": "Current board settings kept", + "noChanges": "No settings will change", + "keepCurrent": "Keep current settings", + "continue": "Continue to approval", + "automaticContinue": "Accepting the proposed board changes automatically", + "resetAll": "Reset all changes", + "tabs": { + "css": "Custom CSS", + "appearance": "Appearance", + "background": "Background", + "general": "General" + }, + "cssDescription": "Edit the complete stylesheet. Existing rules are kept unless they are removed here.", + "cssCharacters": "{count} of 16384 characters", + "copyCss": "Copy CSS", + "copied": "Copied", + "restoreCss": "Restore current CSS", + "remoteCssTitle": "This CSS loads a remote resource", + "remoteCssDescription": "Imported stylesheets and remote URLs contact another server when the board loads. Review them before continuing." + }, + "configureWidget": { + "title": "Review widget", + "preparing": "Preparing widget settings", + "review": "Review widget and integrations", + "ready": "Widget configuration ready", + "cancelled": "Widget was not added", + "automaticContinue": "Accepting the proposed widget configuration automatically", + "definitionLoadErrorTitle": "Widget settings could not be loaded", + "definitionLoadErrorDescription": "Homarr could not load this widget's settings. Try again.", + "loadErrorTitle": "Integrations failed to load", + "loadErrorDescription": "Homarr was unable to load the integrations available for this widget.", + "noIntegrationTitle": "A compatible integration is needed", + "noIntegrationDescription": "Configure an integration supported by this widget before adding it to the dashboard.", + "connectIntegration": "Connect a service", + "manageIntegrations": "Manage integrations", + "skip": "Skip adding", + "errorTitle": "Widget settings could not be prepared", + "errorDescription": "The model did not provide a complete widget configuration, so no widget was added." + }, + "approvalRequired": "Approval needed", + "complete": "Finished", + "denied": "Rejected", + "failed": "Unsuccessful", + "working": "In progress", + "approvalDescription": "Review this change before it runs.", + "approveAndRun": "Approve and run", + "deny": "Reject", + "autoApproval": { + "label": "Automatic approvals", + "composerLabel": "Approve on my behalf", + "title": "Automatic approvals", + "description": "Automatically prepare forms and approve protected changes for this conversation. Questions still wait for your answer, and your Homarr permissions still apply. This is turned off when you switch conversations.", + "enable": "Enable for this conversation", + "disable": "Turn off automatic approvals", + "enabled": "Automatic approvals are enabled", + "approving": "Approving automatically" + } } } diff --git a/packages/translation/src/lang/es.json b/packages/translation/src/lang/es.json index 9fa429b07..172095204 100644 --- a/packages/translation/src/lang/es.json +++ b/packages/translation/src/lang/es.json @@ -1,156 +1,246 @@ { "init": { - "step": { - "start": { - "title": "Bienvenido a Homarr", - "subtitle": "Comencemos con la configuración de tu instancia de Homarr.", - "description": "Para empezar, por favor, selecciona cómo deseas configurar tu instancia de Homarr.", - "action": { - "scratch": "Empezar de cero", - "importOldmarr": "Importar desde una versión anterior a Homarr 1.0", - "restoreSqlite": "Restaurar desde una copia de seguridad de SQLite", - "restoreSqliteDescription": "Suba una copia de seguridad completa de la base de datos SQLite de una instancia anterior de Homarr. Esto restaurará todos los tableros, usuarios, aplicaciones, integraciones y ajustes.", - "backToOptions": "← Volver a las opciones de configuración" + "studio": { + "navigationLabel": "Secciones de incorporación", + "back": "Atrás", + "buildBoard": "Crear mi tablero", + "common": { + "unknownError": "Algo salió mal. Tus opciones siguen aquí; inténtalo de nuevo." + }, + "claim": { + "checking": "Asegurando esta sesión de incorporación…", + "checkingTitle": "Preparando configuración segura", + "lockedTitle": "La configuración está abierta en otro navegador", + "lockedDescription": "Continúe allí, o espere a que su sesión segura de primera ejecución expire antes de volver a intentarlo.", + "signInTitle": "Es necesario iniciar sesión con el administrador", + "signInDescription": "Ya existe un administrador. Inicia sesión para reanudar la configuración sin exponer las credenciales o el acceso al servicio.", + "signIn": "Iniciar sesión y reanudar", + "errorTitle": "No se pudo asegurar la configuración", + "errorDescription": "Recarga la página para reintentar la sesión segura de primer ejecución." + }, + "navigation": { + "essentials": "Esenciales", + "discover": "Descubre", + "connect": "Conectar", + "board": "Tablero", + "extend": "Extender", + "review": "Revisión" + }, + "welcome": { + "title": "Bienvenido a casa.", + "description": "Bienvenido a Homarr v{version}. Te guiaremos a través de lo esencial y te ayudaremos a construir tu primer panel.", + "start": "Empezar", + "restore": "Restaurar copia", + "restoreTitle": "Restaurar desde copia de seguridad", + "restoreDescription": "Una copia de seguridad completa de SQLite restaura tableros, personas, aplicaciones, integraciones y ajustes. Homarr lo valida antes de reemplazar nada.", + "errorTitle": "La configuración no pudo iniciarse", + "errorDescription": "Sus opciones de configuración todavía están aquí. Inténtelo de nuevo o vuelva a cargar la página si esto continúa." + }, + "account": { + "title": "Crear su administrador", + "description": "Especifica las credenciales para tu usuario administrador.", + "username": "Usuario de administrador", + "passwordHint": "Sólo se requiere el mínimo de 8 caracteres. Las otras comprobaciones de contraseña son sugerencias.", + "create": "Crear administrador", + "errorTitle": "El administrador no pudo ser creado", + "recoveryTitle": "Cuenta de administrador creada", + "recoveryDescription": "El inicio de sesión automático no se completó. Inicie sesión con las credenciales de administrador que acaba de crear para continuar con la configuración.", + "recoveryAction": "Iniciar sesión y continuar", + "unknownError": "El administrador no pudo ser creado." + }, + "externalGroup": { + "title": "Conecte su grupo de administrador", + "description": "Utilice el nombre exacto del grupo enviado por LDAP u OIDC. Los miembros de este grupo reciben acceso de administrador.", + "name": "Grupo de administrador externo", + "nameDescription": "Esto es sensible a mayúsculas y minúsculas y debe coincidir con su proveedor de identidad.", + "continue": "Guardar grupo y continuar", + "errorTitle": "No se pudo guardar el grupo", + "unknownError": "No se ha podido guardar el grupo de administradores." + }, + "essentials": { + "title": "Comenzar con los valores por defecto", + "description": "Establece el idioma y la apariencia que todo el mundo ve primero, luego da a Homarr el patrón de dirección utilizado por sus servicios.", + "language": "Idioma predeterminado", + "theme": "Tema por defecto", + "themeAuto": "Sistema", + "themeLight": "Claro", + "themeDark": "Oscuro", + "serverOriginHelp": "Homarr utiliza esta dirección para prellenar las URL del servicio detectado. Todavía puede editar todos los servicios individualmente.", + "serverDescription": "Esto es un atajo, no una restricción. Todos los servicios detectados permanecen editables.", + "serverOrigin": "Dominio, IP o ruta del proxy reverso", + "serverOriginDescription": "Ejemplos: home.lan, 192.168.1.10, o https://home.example.com/services. Elija cómo se añade cada servicio a continuación.", + "analytics": "Compartir análisis de productos anónimos", + "analyticsDescription": "Ayuda a Homarr a mejorar la fiabilidad de las funciones. No se envían credenciales de servicio ni contenido del tablero." + }, + "discover": { + "title": "Mira lo que esta instalación puede alcanzar", + "description": "Homarr comprueba las capacidades en su lugar. Un socket Docker perdido o el contexto de Kubernetes nunca bloquea una configuración manual.", + "database": "Base de datos", + "docker": "Sockets compatibles con Docker", + "kubernetes": "Kubernetes", + "assistantWorkshop": "Asistente y taller", + "found": "Se han encontrado integraciones {integrations} y {apps} aplicaciones adicionales", + "retryKubernetes": "Comprobar Kubernetes de nuevo", + "retryWorkshop": "Revisar taller de nuevo", + "unknownVersion": "versión desconocida", + "kubernetesAvailable": "Conectado a Kubernetes {version}", + "kubernetesDisabled": "Deshabilitado; continuar con los servicios de Docker o manual", + "kubernetesUnavailable": "Kubernetes está habilitado pero no se puede acceder desde este proceso Homarr", + "workshopAvailable": "Taller comunitario y servicios asistentes alojados son accesibles", + "workshopUnavailable": "Proveedores asistentes locales y personalizados siguen disponibles", + "partialTitle": "Algunas fuentes no pudieron escanearse", + "partialDescription": "Los resultados de los hosts alcanzables son contundentes. Compruebe los permisos del socket o añada los servicios manualmente en la siguiente sección.", + "status": { + "checking": "Comprobando disponibilidad…", + "available": "Disponible", + "partial": "Parcialmente disponible", + "empty": "Obtenible, no hay servicios que coincidan", + "disabled": "Deshabilitado por la configuración del servidor", + "unavailable": "No disponible en este proceso Homarr" } }, - "import": { - "title": "Importar datos", - "subtitle": "Puedes importar datos desde una instancia de Homarr existente.", - "dropzone": { - "title": "Arrastre el archivo ZIP aquí o haga clic para navegar", - "description": "El archivo ZIP subido será procesado y podrás seleccionar lo que quieres importar" + "connect": { + "title": "Conecta lo que hace que el tablero sea útil", + "description": "Seleccione varios servicios a la vez. Las etiquetas Docker tienen prioridad, los espacios de coincidencia de imágenes y todas las URL y credenciales permanecen revisables.", + "discoveredIntegrations": "Instancias de integración detectadas ({count})", + "detectedIntegrationLabel": "Importar {name}detectado como {kind}", + "detectedAppLabel": "Importar aplicación detectada {name}", + "otherIntegrations": "Añadir otra integración", + "configureIntegrations": "Configurar integraciones", + "discoveredApps": "Apps detectadas ({count})", + "appAddressRequired": "Añadir una dirección para {name}o eliminarla de la selección.", + "empty": "No hay integraciones seleccionadas. Homarr todavía creará un cuadro de inicio útil con widgets generales.", + "dockerSource": "Docker", + "manualSource": "Manual", + "url": "URL del servicio", + "noCredentials": "Sin credenciales", + "noCredentialsDescription": "Esta integración no necesita credenciales.", + "credentialMethod": "Método de credencial", + "getApiKey": "Abrir la configuración de la clave API para este servicio", + "openGuide": "Abrir la guía de configuración de Homarr para este servicio", + "testConnection": "Probar conexión", + "testSuccess": "Trabajos de conexión", + "testSuccessDescription": "Homarr conectó con la dirección y las credenciales actuales.", + "testError": "Fallo de conexión", + "testErrorDescription": "Compruebe la dirección del servicio y las credenciales y vuelva a intentarlo.", + "needsConfiguration": "Necesita configuración", + "tested": "Conexión probada", + "testFailed": "Prueba de conexión fallida", + "incompleteConfirmation": "Se omitirán las integraciones sin finalizar. ¿Continuar sin ellas?" + }, + "board": { + "title": "Forma el tablero antes de que se construya", + "description": "Homarr crea diseños móviles y base protegidos, luego coloca aplicaciones y widgets compatibles a partir de los servicios que seleccionó.", + "target": "Tablero a configurar", + "targetDescription": "Elija el tablero existente exacto que esta configuración debe actualizar.", + "targetPlaceholder": "Seleccione un tablero", + "targetRequired": "Seleccione el tablero a configurar antes de continuar.", + "name": "Nombre del tablero", + "nameDescription": "Utilizado en la URL del foro; letras, números, guiones y guiones bajos solamente.", + "nameRequired": "Introduzca el nombre del foro antes de continuar.", + "primaryColor": "Color primario", + "secondaryColor": "Color secundario", + "resetColors": "Restablecer colores", + "radius": "Radio de esquina del widget", + "radiusOptions": { + "xs": "Estrecho", + "sm": "Sutil", + "md": "Equilibrado", + "lg": "Redondeado", + "xl": "Suave" }, - "fileInfo": { - "action": { - "change": "Modificar el archivo" - } + "columns": "Columnas del foro", + "columnsDescription": "Las columnas definen la cuadrícula horizontal usada para el tamaño y la posición de los elementos. 12 son suficientes para la mayoría de las personas.", + "columnCount": "{count, plural, one {# columna} other {# columnas}}", + "leftSidebar": "Left sidebar", + "rightSidebar": "Barra lateral derecha", + "previewLabel": "Vista previa en vivo de la disposición del primer tablero" + }, + "extend": { + "title": "Características avanzadas", + "tabsLabel": "Asistente, Taller y configuración MCP", + "assistant": "Asistente", + "workshop": "Taller", + "assistantSetup": { + "loginTitle": "Es necesario iniciar sesión con el administrador", + "loginDescription": "Las claves del proveedor y el acceso al modelo son privilegiados. Termina la configuración, inicia sesión y Homarr abrirá la configuración del Asistente directamente.", + "loginAction": "Iniciar sesión para configurar el asistente" }, - "importSettings": { - "title": "Importar ajustes", - "description": "Configurar el comportamiento de la importación" + "workshopSetup": { + "title": "Taller Homarr", + "description": "Navegar por la comunidad Widgets personalizados, inspeccionar las capacidades solicitadas, instalarlas y publicar tu propio trabajo sin copiar código entre servidores.", + "available": "Disponible", + "checking": "Comprobando…", + "unavailable": "Unavailable", + "discoverTitle": "Descubre", + "discoverDescription": "Encuentra widgets creados para flujos de trabajo autosuficientes.", + "installTitle": "Revisar e instalar", + "installDescription": "Ver metadatos y configuración antes de añadir nada.", + "publishTitle": "Compartir", + "publishDescription": "Publicar widgets reutilizables de vuelta a la comunidad.", + "browse": "Ver taller" }, - "boardSelection": { - "title": "Se encontraron {count} tableros", - "description": "Elige todos los tableros con el tamaño que deseas para importar", - "action": { - "selectAll": "Seleccionar todo", - "unselectAll": "Deshacer selección" - } - }, - "summary": { - "title": "Resumen de la importación", - "description": "En el resumen que se muestra a continuación puedes ver qué se importará", - "action": { - "import": "Confirmar la importación y continuar" - }, - "entities": { - "apps": "Aplicaciones", - "boards": "Tableros", - "integrations": "Integraciones", - "credentialUsers": "Credenciales de usuarios" - } - }, - "tokenModal": { - "title": "Introducir token de importación", - "field": { - "token": { - "label": "Token", - "description": "Introduzca el token de importación mostrado de su anterior instancia de Homarr" - } - }, - "notification": { - "error": { - "title": "Token no válido", - "message": "El token que has introducido no es válido" - } - } + "mcpSetup": { + "title": "MCP Homarr", + "description": "Conecte Claude, Codex, u otro cliente MCP a las herramientas tipeadas de Homarr. Las claves API mantienen el acceso explícito y revocable.", + "endpoint": "endpoint HTTP Streamable", + "keyTitle": "Copiar esta clave ahora", + "keyDescription": "Por seguridad, Homarr no puede mostrar esta clave API de nuevo.", + "copyKey": "Copiar clave API", + "createKey": "Crear una clave API MCP", + "errorTitle": "La clave API MCP no pudo ser creada", + "loginRequired": "Inicia sesión como administrador después de la configuración para crear una clave API.", + "configuration": "Configuración del cliente", + "copy": "Copiar configuración", + "copied": "Copiado", + "advanced": "Abrir herramientas MCP, permisos y detalles de configuración" } }, - "user": { - "title": "Usuario administrador", - "subtitle": "Especifica las credenciales para tu usuario administrador.", - "notification": { - "success": { - "title": "Usuario creado", - "message": "El usuario se creó con éxito" - }, - "error": { - "title": "Error al crear el usuario" - } - } - }, - "group": { - "title": "Grupo externo", - "subtitle": "Especifique el grupo que debe ser usado para usuarios externos.", - "form": { - "name": { - "label": "Nombre del grupo", - "description": "El nombre debe coincidir con el grupo de administración del proveedor externo" - } - } - }, - "settings": { - "title": "Ajustes", - "subtitle": "Configurar ajustes del servidor." - }, - "integrations": { - "title": "Integraciones", - "subtitle": "Seleccione los servicios que utiliza.", - "description": "Elija las integraciones que le gustaría conectar. Configuraremos tu tablero con los widgets que coincidan automáticamente.", - "action": { - "continue": "Continuar", - "skip": "Saltar por ahora" - }, - "configure": { - "progress": "{current} de {total}", - "skip": "Saltar esta integración", - "finishing": "Configurando su tablero...", - "error": { - "title": "Configuración fallida", - "message": "Algo salió mal al configurar su tablero. Por favor, inténtelo de nuevo." - }, - "helpers": { - "tooltip": "Asistentes de URL", - "description": "Estos asistentes tratan de adivinar la URL de tus servicios. Si no funciona, escriba la dirección manualmente." - } - }, - "urlTemplate": { - "label": "URL base", - "placeholder": "homelab.local o 192.168.1.1", - "hint": "Introduzca su dominio base o IP para autocompletar las URLs de integración", - "warning": "Configurando la URL base ahora autorrellenarán todas las URLs de las integraciones, ahorrando tiempo durante la configuración", - "preview": "ej. {example}", - "mode": { - "subdomain": "Subdominio", - "hostPort": "Host:Puerto" - } - }, - "docker": { - "detected": "Docker detectó {count} servicios", - "detectedBreakdown": "{integrations} integraciones · {apps} aplicaciones", - "summary": "Homarr detectó {apps} aplicaciones, de las cuales {integrations} tienen integraciones integradas", - "appBadge": "Aplicación", - "appSectionLabel": "Aplicaciones para añadir al tablero ({count} seleccionadas)", - "scanning": "Escaneando Docker...", - "scanningDescription": "Buscando contenedores en su sistema" + "review": { + "title": "Un tablero, construido alrededor de sus servicios", + "description": "Homarr prueba conexiones sin guardar, importa las aplicaciones seleccionadas, aplica apariencia y diseños, luego abre el tablero exacto que configuró.", + "board": "Primer tablero", + "columns": "Columnas del foro", + "columnsValue": "{count, plural, one {# columna} other {# columnas}}", + "sidebars": "Barra lateral", + "sidebarsValue": "{count, plural, =0 {None} one {# sidebar} other {# sidebars}}", + "layouts": "Diseños interactivo", + "layoutsValue": "Móvil + Base", + "integrations": "Integraciones", + "integrationsValue": "{count, plural, =0 {¡Ninguno ha seleccionado} one {# integración} other {# integraciones}}", + "apps": "Azulejos", + "appsValue": "{count, plural, =0 {Solo aplicaciones de inicio} one {# de baldosa de aplicación} other {# baldosas de la aplicación}}", + "language": "Idioma", + "theme": "Tema", + "themeAuto": "Preferencias del sistema", + "themeLight": "Claro", + "themeDark": "Oscuro", + "colors": "Colores del tablero", + "radius": "Radio del widget", + "automaticTitle": "Qué creará Homarr", + "automaticDescription": "Widgets compatibles, iconos, enlaces de aplicaciones, relaciones de integración y colocación receptiva provienen del catálogo Homarr compartido. Puedes editar cada resultado más tarde.", + "dockerWarningTitle": "Algunas etiquetas Docker cambiaron durante la configuración", + "dockerWarningDescription": "{count, plural, one {# resultado Docker seleccionado no se pudo aplicar porque su servicio cambió, apuntó a otro foro, o su widget era incompatible} other {# los resultados seleccionados de Docker no pudieron ser aplicados porque los servicios cambiados, dirigidos a otro foro, o sus widgets eran incompatibles}}", + "errorTitle": "No se pudo construir el tablero", + "progress": { + "applying": "Probando conexiones y construyendo tu tablero", + "done": "Tu tablero está listo" } }, "finish": { - "title": "Finalizar la configuración", - "subtitle": "¡Estás listo para empezar!", - "description": "Has completado el proceso de configuración inicial con éxito. Puedes empezar a utilizar Homarr. Selecciona tu próxima tarea:", - "action": { - "goToBoard": "Ir al tablero {name}", - "createBoard": "Crea tu primer tablero", - "inviteUser": "Invita a otros usuarios", - "docs": "Consulta la documentación" - } + "title": "Tu primer tablero está listo.", + "description": "Homarr conectó las piezas que seleccionó y mantuvo el resto editable. Abra el tablero ahora; el tour breve en el producto puede mostrarle el modo de edición, los widgets, los diseños y la búsqueda.", + "openBoard": "Abrir mi tablero", + "manageTitle": "Administrar", + "manageDescription": "Ajustar aplicaciones, integraciones, tableros, usuarios y ajustes del servidor.", + "workshopTitle": "Taller", + "workshopDescription": "Descubre e instala Widgets personalizados de la comunidad.", + "docsTitle": "Aprender Homarr", + "docsDescription": "Lea las guías enfocadas para tableros, widgets, integraciones y herramientas." } - }, - "backToStart": "Volver al inicio" + } }, "user": { - "title": "Usuarios", "name": "Usuario", "page": { "login": { @@ -159,12 +249,10 @@ }, "invite": { "title": "Únete a Homarr", + "titleWithAppName": "Únete a {appName}", "subtitle": "¡Bienvenido a Homarr! Por favor crea tu cuenta", + "subtitleWithAppName": "¡Bienvenido a {appName}! Por favor, crea tu cuenta", "description": "Fuiste invitado por {username}" - }, - "init": { - "title": "Nueva instalación de Homarr", - "subtitle": "Por favor, crea el usuario administrador principal" } }, "field": { @@ -192,12 +280,17 @@ "previousPassword": { "label": "Contraseña anterior" }, - "homeBoard": { - "label": "Tablero de inicio" - }, "pingIconsEnabled": { "label": "Usar iconos para pings" }, + "byteUnitSystem": { + "label": "Unidades de tamaño de datos", + "description": "Elija cómo Homarr muestra tamaños de bytes y tasas de bytes. Las tasas de bits siempre usan unidades decimales.", + "options": { + "binary": "Binario", + "decimal": "Decimal" + } + }, "enableRightClickOnWidgets": { "label": "Habilitar clic derecho en widgets", "description": "Mostrar el menú contextual de Homarr al hacer clic derecho en un widget. Desactiva para usar el menú predeterminado del navegador (p. ej., \"Abrir enlace en una pestaña nueva\")." @@ -247,7 +340,6 @@ } } }, - "create": "Crear usuario", "changePassword": { "label": "Cambiar contraseña", "notification": { @@ -259,56 +351,6 @@ } } }, - "changeHomeBoard": { - "notification": { - "success": { - "message": "Tablero de inicio modificado con éxito" - }, - "error": { - "message": "No se pudo modificar el tablero de inicio" - } - } - }, - "changeSearchPreferences": { - "notification": { - "success": { - "message": "Preferencias de búsqueda modificadas con éxito" - }, - "error": { - "message": "No se pudieron modificar las preferencias de búsqueda" - } - } - }, - "changeFirstDayOfWeek": { - "notification": { - "success": { - "message": "Primer día de la semana modificado con éxito" - }, - "error": { - "message": "No se pudo modificar el primer día de la semana" - } - } - }, - "changePingIconsEnabled": { - "notification": { - "success": { - "message": "Iconos de ping modificados correctamente" - }, - "error": { - "message": "No se pudieron modificar los iconos de ping" - } - } - }, - "changeDdgBangs": { - "notification": { - "success": { - "message": "El estado de los bangs de DuckDuckGo ha cambiado con éxito" - }, - "error": { - "message": "No se pudo cambiar el estado de los bangs de DuckDuckGo" - } - } - }, "manageAvatar": { "changeImage": { "label": "Cambiar imagen", @@ -338,16 +380,6 @@ } } }, - "editProfile": { - "notification": { - "success": { - "message": "Perfil actualizado con éxito" - }, - "error": { - "message": "El perfil no ha podido ser actualizado" - } - } - }, "delete": { "label": "Eliminar usuario permanentemente", "description": "Elimina este usuario incluyendo sus preferencias. No eliminará ningún tablero. El usuario no será notificado.", @@ -356,18 +388,13 @@ "select": { "label": "Seleccionar usuario", "notFound": "Usuario no encontrado" - }, - "transfer": { - "label": "Seleccionar nuevo propietario" } } }, "group": { - "title": "Grupos", "name": "Grupo", "search": "Buscar un grupo...", "field": { - "name": "Nombre", "members": "Miembros", "homeBoard": { "label": "Tablero de inicio", @@ -388,6 +415,19 @@ } } }, + "custom-widget": { + "title": "Widgets personalizados", + "item": { + "manage": { + "label": "Administrar widgets personalizados", + "description": "Permitir a los miembros crear, editar y eliminar definiciones de widget personalizadas" + }, + "secret-write": { + "label": "Configurar secretos de widget personalizados", + "description": "Permitir a los miembros y sus claves API establecer credenciales de widget personalizado cifrado" + } + } + }, "app": { "title": "Aplicaciones", "item": { @@ -493,6 +533,35 @@ "description": "Permitir a los miembros gestionar y eliminar cualquier motor de búsqueda" } } + }, + "matrix": { + "none": "Sin acceso", + "impliedHint": "También concede: {permissions}", + "grantedViaAdmin": "Los administradores ya tienen esto. Configure Administrador a \"Sin acceso\" para configurarlo por separado.", + "preset": { + "label": "Preajustes", + "viewer": "Visor", + "viewerDescription": "Sólo lectura: ver tableros y medios, usar aplicaciones e integraciones que ya existen.", + "editor": "Editor", + "editorDescription": "Gestión diaria: crear y editar tableros, aplicaciones, integraciones y motores de búsqueda.", + "admin": "Administrador", + "adminDescription": "Acceso sin restricciones a cada característica y configuración, incluida la gestión de usuarios.", + "custom": "Personalizado" + }, + "effective": { + "title": "Permisos efectivos", + "description": "El conjunto completo y des-duplicado de acciones que los miembros de este grupo pueden realizar, incluyendo los permisos concedidos indirectamente.", + "empty": "No hay permisos seleccionados" + }, + "noneDescription": "Los miembros no tienen acceso a esta área.", + "level": { + "view": "Ver", + "use": "Usar", + "interact": "Interactuar", + "modify": "Modificar", + "full": "Lleno" + }, + "capabilityIncluded": "Ya está incluido en “{level}”" } }, "memberNotice": { @@ -607,21 +676,24 @@ "search": "Buscar una aplicación", "page": { "list": { - "title": "Aplicaciones", + "ariaLabel": "Aplicaciones configuradas", "noResults": { "title": "Aún no hay aplicaciones", - "action": "Crea tu primera aplicación" + "description": "Las aplicaciones son enlaces a los servicios y herramientas que desea en sus tableros.", + "action": "Crea tu primera aplicación", + "filteredTitle": "Ninguna aplicación coincide con tu búsqueda", + "filteredDescription": "No hay aplicaciones que coincidan con \"{search}\". Prueba con otro nombre o URL.", + "createOnlyTitle": "Sólo puedes añadir aplicaciones", + "createOnlyDescription": "Sus permisos le permiten crear aplicaciones pero no navegar por las existentes. Pídele a un administrador acceso a la gestión de aplicaciones para ver la lista completa." } }, "create": { "title": "Nueva aplicación", "notification": { "success": { - "title": "Creación exitosa", "message": "La aplicación fue creada con éxito" }, "error": { - "title": "No se ha podido crear", "message": "La aplicación no pudo ser creada" } } @@ -630,11 +702,9 @@ "title": "Editar aplicación", "notification": { "success": { - "title": "Cambios aplicados con éxito", "message": "La aplicación se guardó correctamente" }, "error": { - "title": "No se pudieron aplicar los cambios", "message": "La aplicación no se pudo guardar" } } @@ -644,26 +714,18 @@ "message": "¿Estás seguro de que deseas eliminar la aplicación {name}?", "notification": { "success": { - "title": "Eliminada correctamente", "message": "La aplicación fue eliminada con éxito" }, "error": { - "title": "Error al eliminar", "message": "No se pudo eliminar la aplicación" } } } }, "field": { - "name": { - "label": "Nombre" - }, "description": { "label": "Descripción" }, - "url": { - "label": "URL" - }, "useDifferentUrlForPing": { "checkbox": { "label": "Usar URL diferente para ping", @@ -678,34 +740,582 @@ "search": "Buscar una aplicación", "noResults": "Sin resultados", "action": "Seleccionar {app}", - "title": "Selecciona una aplicación para añadir a este tablero" + "title": "Selecciona una aplicación para añadir a este tablero", + "toggle": "Haga clic para seleccionar", + "selected": "Seleccionado", + "multiple": "Añadir {count}", + "selectedCount": "{count, plural, one {# seleccionado} other {# seleccionado}}", + "appsSelected": "{count, plural, one {# aplicación seleccionada} other {# aplicaciones seleccionadas}}", + "selectMultiple": "Seleccionar múltiples", + "cancelMultiple": "Salir de selección múltiple", + "customApplication": "Aplicación personalizada", + "application": "Aplicación" }, "create": { "title": "Crear nueva aplicación", "description": "Crear una nueva aplicación ", "action": "Abrir creación de aplicación" + } + } + }, + "tips": { + "dismiss": "Descartar consejo", + "multiSelectApps": "Consejo: Mantén pulsado Ctrl / deseas seleccionar múltiples aplicaciones a la vez" + }, + "customWidget": { + "secretEntry": { + "title": "Configurar fuente API", + "description": "Confirme la URL del servidor e introduzca credenciales. Los valores secretos son cifrados por Homarr y nunca regresaron al agente solicitante.", + "loading": "Cargando solicitud segura…", + "applying": "Aplicando esta configuración… Mantener esta página abierta.", + "saved": "Fuente de la API configurada. Puedes cerrar esta página.", + "unavailable": "Solicitud no disponible", + "saveError": "No se puede configurar la fuente de la API", + "source": "Fuente de la API: {name}", + "baseUrl": "URL del servidor", + "networkScope": "Acceso a la red", + "save": "Guardar configuración API", + "expires": "Esta solicitud única expira en {time}." + }, + "page": { + "list": { + "noResults": "Aún no hay widgets personalizados. ¡Crea tu primero!", + "noDescription": "Sin descripción", + "enabled": "Habilitado", + "disabled": "Deshabilitado", + "disabledDescription": "Este widget permanece configurado pero no se cargará en ningún foro.", + "requestCount": "{count, plural, one {# solicitud} other {# solicitudes}}", + "invalidDefinition": "Definición no válida", + "migrationRequired": "Migración requerida", + "migrationInstructions": "Acciones abiertas para copiar o exportar la definición v1 original para la grabación manual. También puede utilizar el indicador de migración con un LLM. Las colocaciones de los tableros existentes siguen funcionando después de la migración.", + "missingCredentials": "{count, plural, one {Falta credencial de} other {# credenciales faltantes}}", + "missingCredentialsDescription": "{count, plural, one {Este widget todavía necesita una credencial.} other {Este widget todavía necesita # credenciales.}} Seleccione esta insignia para configurar la URL y los valores cifrados." }, - "add": "Añadir una aplicación" + "create": { + "title": "Crear widget personalizado", + "subtitle": "Definir una URL de API, autenticación y cómo mostrar los datos de respuesta." + }, + "tabs": { + "ariaLabel": "Secciones de widget personalizadas", + "installed": "Instalado", + "workshop": "Taller" + } + }, + "action": { + "pasteImportHint": "Pegar un JSON de widget personalizado con Ctrl+V o Comando+V", + "delete": "Eliminar widget personalizado", + "deleteConfirm": "¿Está seguro de que desea eliminar \"{name}\"? Esta acción no se puede deshacer.", + "export": "Exportar", + "duplicate": "Duplicar", + "aiPrompt": "Diseño con IA", + "copyAiPrompt": "Copiar prompt de IA", + "enable": "Activar", + "disable": "Desactivar", + "menu": "Acciones", + "downloadSkill": "Ver habilidad de Widget personalizado", + "publishWorkshop": "Publicar en el taller", + "migrate": "Migrar widget personalizado", + "configureSources": "Configurar fuentes", + "copyLegacyDefinition": "Copiar contenido del widget original", + "exportLegacyDefinition": "Exportar contenido del widget original", + "copyMigrationPrompt": "Copiar indicador de migración LLM", + "pasteMigration": "Pegar widget migrado", + "importMigration": "Importar archivo JSON migrado" + }, + "sourceSetupDialog": { + "title": "Configurar fuentes de widget", + "description": "Revisar donde este widget se conecta y añade o reemplaza sus credenciales cifradas.", + "credentialsRequired": "Las solicitudes fallarán hasta que se añadan las credenciales requeridas.", + "save": "Guardar configuración" + }, + "field": { + "description": "Descripción" + }, + "editor": { + "errorBoundary": { + "title": "Algo salió mal" + }, + "action": { + "components": "Componentes", + "format": "Formatear", + "insertStarter": "Insert starter", + "redo": "Rehacer", + "copied": "Copiado", + "schema": "Esquema" + }, + "reference": { + "minimal": "Ejemplo mínimo", + "full": "Ejemplo completo" + }, + "componentReference": { + "search": "Buscar componentes", + "empty": "No hay componentes coincidentes", + "count": "{count, number} componentes disponibles" + }, + "status": { + "errors": "{count, number} errores", + "warnings": "{count, number} advertencias", + "ready": "No se encontraron peticiones", + "position": "Ln {line, number}, Col {column, number}", + "characters": "{count, number} caracteres", + "charactersWithLimit": "{count, number} / {limit, number}" + }, + "diagnostics": { + "title": "Diagnóstico de plantillas", + "line": "¡Línea {line, number}", + "ast": "{value}", + "bindingTypeConflict": "La entrada \"{value}\" es compartida por controles con tipos de valor incompatibles.", + "runtimeBindingTypeConflict": "La entrada \"{value}\" está enlazada como {firstType} y {secondType}.", + "dynamicRequestId": "Se requiere una solicitud literal. No se aceptan identificadores de solicitud dinámica.", + "dynamicInputBinding": "Se requiere un nombre de entrada literal para enlazar.", + "inlineRequestProps": "Los componentes de red aceptan requestId y los parámetros; la URL en línea, el método, la cabecera y los props corporales están bloqueados.", + "invalidRequestManifest": "Las solicitudes con nombre deben ser un mapa de solicitud válido. {value}", + "missingRequestId": "Este componente de red requiere una solicitud literal.", + "templateEmpty": "Introduzca una plantilla JSX.", + "templateTooLong": "La plantilla excede el límite de 50.000 caracteres.", + "unknownRequest": "Ninguna solicitud nombrada con ID \"{value}\" existe." + } + }, + "workbench": { + "configure": "Configurar", + "sectionNavigation": "Secciones de widget personalizadas", + "widgetPreview": "Vista previa del widget", + "generalInformation": "Información general", + "invalidWidget": "Widget inválido", + "section": { + "general": "Escritorio", + "sources": "Fuentes de API", + "requests": "Solicitudes", + "options": "Opciones", + "jsx": "JSX", + "preview": "Vista previa" + }, + "status": { + "unsaved": "Cambios no guardados", + "invalid": "Necesita atención", + "ready": "Listo" + }, + "saveError": { + "title": "El widget no se ha guardado", + "description": "Corregir estos errores de validación y guardar de nuevo.", + "more": "+{count} errores más se muestran en el banco de trabajo.", + "errors": "Errores de validación", + "copy": "Copiar errores", + "copied": "Errores copiados" + }, + "action": { + "preview": "Prueba y vista previa", + "previewLoading": "Solicitudes de prueba" + }, + "requests": { + "title": "Consultas y acciones con nombre", + "label": "Solicitudes", + "description": "Las consultas cargan datos; las acciones sólo se ejecutan después de la interacción del usuario. Cualquier método HTTP es válido para cualquier tipo." + }, + "options": { + "title": "Opciones de Widget" + }, + "builder": { + "advancedManifest": "manifest bruto avanzado", + "advancedJson": "JSON de manifiesto avanzado", + "manifestFilename": "widget.json", + "request": "¡Solicitud {count, number}", + "requestId": "ID de Solicitud", + "type": "Tipo", + "method": "Método", + "source": "Fuente de API", + "run": "Ejecutar", + "runLoad": "Cuando se carga el widget", + "runManual": "Desde SubFetch", + "permission": "Permisos", + "path": "Ruta", + "pathDescription": "Use '{option:name}' para opciones de widget y '{param:name}' para valores de invocación.", + "requestDetails": "Consulta, cuerpo y comportamiento", + "queryValues": "Valores de consulta", + "queryKey": "Clave de consulta", + "queryKeyInvalid": "Utilice un ID único que comience con una letra y contenga sólo letras, números, - o _.", + "valueSource": "Fuente de valor", + "literal": "Literal", + "widgetOption": "Opción Widget", + "invocationParameter": "Parámetro de Invocación", + "option": "Opción", + "parameterName": "Nombre del parámetro", + "value": "Valor", + "removeQueryValue": "Eliminar valor de consulta", + "addQueryValue": "Añadir valor de consulta", + "jsonBody": "Cuerpo JSON", + "jsonBodyDescription": "Opcional. Insertar referencias $option y $param en cualquier profundidad.", + "insertOptionReference": "Insertar referencia de opción", + "insertParameterReference": "Insertar referencia de parámetro", + "confirmation": "Mensaje de confirmación", + "invalidation": "Actualizar después de éxito", + "invalidationDescription": "IDs de consulta separados por comas", + "noAuth": "Enviar sin autenticación de origen", + "moveRequestUp": "Mover solicitud arriba", + "moveRequestDown": "Mover solicitud hacia abajo", + "removeRequest": "Eliminar solicitud", + "addRequest": "Añadir solicitud", + "optionName": "Nombre de opción", + "label": "Nombre", + "control": "Control", + "description": "Descripción", + "default": "Por defecto", + "optionDetails": "Restricciones y opciones dinámicas", + "minimum": "Mínimo", + "maximum": "Máximo", + "step": "Paso", + "choiceLabel": "Etiqueta de elección", + "choiceValue": "Valor de elección", + "newChoice": "Nueva opción", + "addChoice": "Añadir opción", + "removeChoice": "Eliminar opción", + "choicesRequest": "Cargar opciones desde la solicitud", + "itemsPath": "Ruta de artículos", + "itemsPathPlaceholder": "elementos (opcional)", + "valuePath": "Ruta de valor", + "labelPath": "Ruta de etiqueta", + "group": "Grupo", + "advancedOption": "Opción avanzada", + "moveOptionUp": "Mover opción arriba", + "moveOptionDown": "Mover opción abajo", + "removeOption": "Eliminar opción", + "addOption": "Añadir opción", + "invalidJson": "JSON no válido", + "invalidWidget": "Widget inválido" + }, + "jsx": { + "title": "Plantilla JSX", + "label": "Plantilla" + }, + "sources": { + "title": "Fuentes y credenciales de API", + "newName": "API {count, number}", + "duplicateSourceId": "Los ID de origen de la API deben ser únicos.", + "credentialRemoved": "Credencial eliminado", + "credentialRemovedDescription": "El valor almacenado fue eliminado.", + "primary": "API primaria", + "id": "ID fuente", + "name": "Nombre de la tarea", + "baseUrl": "URL base", + "baseUrlError": { + "invalid": "Introduzca una URL completa.", + "protocol": "Usar una URL HTTP o HTTPS.", + "credentials": "Elimine el nombre de usuario y contraseña de esta URL. Configure las credenciales a continuación en su lugar.", + "queryOrFragment": "Elimine la cadena de consulta o fragmento de esta URL base. Añada valores de consulta a una solicitud nombrada." + }, + "networkScope": "Acceso a la red", + "authentication": "Autenticación", + "headerName": "Nombre de cabecera", + "queryParameter": "Parámetro de consulta", + "configured": "Configurado — introduzca un reemplazo", + "clear": "Despejado", + "remove": "Eliminar fuente y sus peticiones", + "advanced": "Avanzado", + "add": "Añadir otra fuente API", + "sourceType": "Integración", + "manualSource": "HTTP API", + "existingIntegration": "Integración existente", + "integrationType": "Tipo de integración", + "selectIntegration": "Integración configurada", + "noIntegrations": "No hay integraciones disponibles", + "integrationUnavailable": "La integración seleccionada ya no está disponible. Seleccione otra integración.", + "integrationDescription": "Utiliza la URL de integración guardada y las credenciales. Los cambios se aplican automáticamente. Se requiere acceso completo a la integración para ejecutar las solicitudes." + }, + "ai": { + "title": "Crear o arreglar con cualquier IA", + "description": "Añade primero una URL de la API docs si tienes una. Para correcciones, ejecuta la vista previa si es posible. Copie el indicador en cualquier AI; puede pedir detalles faltantes. Pegue su JSON final aquí.", + "request": "¿Qué debería hacer este widget?", + "documentationUrl": "URL de documentación API (opcional)", + "paste": "Pegar", + "response": "Respuesta IA", + "manualCopyDescription": "El acceso al portapapeles no está disponible. Seleccione el siguiente mensaje y cópielo manualmente.", + "manualPasteDescription": "El acceso al portapapeles no está disponible o la respuesta copiada necesita corrección. Pegue la respuesta JSON de la IA aquí.", + "selectAll": "Seleccionar todo", + "loadResponse": "Cargar respuesta", + "loaded": "Widget cargado en el editor", + "invalidResponse": "El portapapeles no contiene un widget v2 válido", + "invalidResponseDetail": "La respuesta IA no es válida: {message}" + }, + "preview": { + "invalid": "Corregir errores de validación para previsualizar este widget.", + "fixtureError": "Previsualizar error de fixture", + "requestData": "Solicitar datos", + "status": { + "idle": "Las solicitudes no han sido probadas", + "loading": "Solicitudes de prueba", + "success": "Todas las solicitudes de carga han sido exitosas", + "error": "Una o más solicitudes de carga fallaron" + }, + "result": { + "loading": { + "title": "Probando solicitudes API", + "description": "Homarr está creando una sesión de vista previa y cargando los datos del widget." + }, + "success": { + "title": "Vista previa lista", + "description": "{succeeded, plural, =0 {Este widget no tiene solicitudes de carga.} one {# solicitud de carga exitosa.} other {# solicitudes de carga exitosas.}} Abre Datos para inspeccionar la respuesta." + }, + "error": { + "title": "Vista previa completada con errores de solicitud", + "description": "{succeeded, number} con éxito y {failed, number} falló. Open Data para la respuesta y los detalles del error." + } + }, + "instanceOptions": "Opciones de instancia", + "liveActions": "Ejecutar acciones contra la API configurada", + "liveActionsDescription": "Apagar es una simulación segura. Activar esto afecta al servicio real.", + "noActions": "No hay acciones definidas.", + "containedFailures": "Las fallas de ejecución están contenidas en este widget. Las revistas de solicitud nunca incluyen valores secretos.", + "validation": { + "title": "Validación", + "ready": "La definición del widget es válida." + }, + "accessibility": { + "title": "Comprobaciones de accesibilidad", + "ready": "No se han detectado omisiones de accesibilidad comunes.", + "pending": "Las comprobaciones de accesibilidad se ejecutarán cuando la definición del widget sea válida.", + "imageAlt": "Añade texto alternativo a cada imagen, usando un alt vacío sólo para imágenes decorativas.", + "actionIconLabel": "Añadir una etiqueta aria-etiqueta o título a cada ActionIcon.", + "inputLabel": "Añade una etiqueta visible o un nombre accesible a cada entrada." + }, + "journal": "Diario de solicitud Redactada", + "actionParameters": "Parámetros de acción (JSON)", + "invalidParameters": "Use la cadena declarada, el número y los tipos de parámetros booleanos.", + "runDestructive": "Ejecutar acción destructiva", + "runAction": "Ejecutar acción", + "deleteConfirmation": "Esta vista previa cambia los datos remotos a través de la API configurada.", + "simulated": "Acción simulada", + "httpStatus": "¡HTTP {status, number}", + "tab": { + "widget": "Widget", + "data": "Datos", + "options": "Opciones", + "state": "Estado de la tarea", + "actions": "Controles", + "diagnostics": "Diagnóstico" + }, + "size": { + "compact": "Compacto", + "standard": "Estándar", + "wide": "Ancho" + }, + "fixture": { + "live": "Vivo", + "loading": "Cargando", + "empty": "Vacío", + "error": "Error" + } + } + }, + "preview": { + "request": { + "permission": { + "view": "Ver", + "modify": "Modificar", + "full": "Lleno" + } + } + }, + "notification": { + "created": "Widget \"{name}\" creado con éxito.", + "updated": "Widget \"{name}\" actualizado con éxito.", + "deleted": "Widget \"{name}\" eliminado.", + "imported": "Widget importado con éxito.", + "migrated": "Widget heredado migrado con éxito. Las ubicaciones existentes en el tablero ahora utilizan la definición v2.", + "migrationError": "Error al migrar el widget antiguo. Asegúrese de que el archivo utiliza el esquema homarr-customget-v2.", + "legacyDefinitionCopied": "El contenido original del widget fue copiado. Los valores de credenciales almacenados no están incluidos.", + "legacyDefinitionCopyError": "Error al copiar el contenido del widget original.", + "migrationPromptCopied": "Se ha copiado un indicador de migración modificado. Pegalo en un LLM, copia su única respuesta JSON, luego elige Pegar widget migrado aquí.", + "migrationPromptCopyError": "Error al copiar la petición de migración.", + "sourcesConfigured": "Se han guardado fuentes y credenciales de Widget.", + "sourceConfigurationError": "Error al configurar las fuentes del widget.", + "aiPromptCopiedWithCount": "El prompt de IA se copió al portapapeles ({count, number} caracteres).", + "aiPromptCopyError": "", + "aiPromptSent": "Prompt enviado. Puedes seguir editando mientras el asistente trabaja en segundo plano.", + "updateError": "", + "importError": "", + "exportError": "Error al exportar el widget.", + "duplicated": "Widget \"{name}\" duplicado.", + "duplicateError": "Error al duplicar el widget.", + "toggleError": "", + "deleteError": "", + "previewError": "" + }, + "importReview": { + "title": "Revisar importación de widget personalizado", + "description": "Compruebe dónde se conecta este widget y qué acceso al tablero requiere sus controles antes de importarlo.", + "migrationTitle": "Revisar el reemplazo migrado v2", + "migrationDescription": "Revisar y confirmar esta definición v2 generada. Confirmando atómicamente reemplaza el registro preservado v1 mientras mantiene las ubicaciones existentes en los foros enlazadas al mismo widget ID.", + "fileLabel": "Elija un archivo JSON de widget personalizado", + "name": "Nombre de la tarea", + "origin": "Origen base", + "authentication": "Autenticación", + "networkScope": "Ámbito de red", + "methods": "Métodos HTTP", + "permissions": "Permisos requeridos del foro", + "sourceSetup": { + "title": "Configurar fuentes API", + "description": "Confirme dónde se conecta este widget y añade credenciales. Las URL privadas y de buclback son específicas para su instalación de Homarr.", + "suggestedUrl": "URL sugerida", + "confirmUrl": "Confirmo que la URL de este servidor es correcta para mi instalación Homarr", + "ready": "URL lista", + "needsUrl": "Confirmar URL", + "credentialsMissing": "Faltan credenciales", + "credentialsOptional": "Puede instalar sin credenciales y configurarlas más tarde, pero las peticiones fallarán hasta que se agregen." + }, + "actionWarning": { + "title": "Este widget puede cambiar los datos remotos", + "description": "Revise todas las acciones nombradas, credenciales heredadas y confirmación destructiva después de la importación. Los secretos no están incluidos en el archivo." + }, + "cancel": "Cancelar importación", + "confirm": "Importar widget", + "confirmMigration": "Confirmar reemplazo v2" + }, + "secret": { + "apiKey": "Clave o token API", + "username": "Nombre de usario", + "password": "Contraseña", + "savedPlaceholder": "••••••• (guardado, dejar vacío para mantener)" + } + }, + "workshop": { + "title": "Taller", + "browseWorkshop": "Ver taller", + "openCommunity": "Abrir taller", + "openOnWorkshop": "Abrir {title} en el sitio web del taller", + "back": "Volver al taller", + "search": "Buscar widgets", + "searchCss": "Buscar temas CSS", + "sort": "Ordenar", + "sortTop": "Más valorados", + "sortNewest": "Más reciente", + "listAriaLabel": "Widgets del taller", + "listAriaLabelCss": "Temas CSS del taller", + "empty": "No hay widgets que coincidan con esta búsqueda.", + "emptyDescription": "Los widgets de la comunidad publicados en el taller se muestran aquí.", + "emptyFilteredTitle": "No hay widgets que coincidan con esta búsqueda", + "emptyFilteredDescription": "Ningún widget del taller coincide con \"{search}\".", + "emptyCss": "Ningún tema CSS coincide con esta búsqueda.", + "unavailableTitle": "Taller de Homarr parece no estar disponible", + "unavailable": "El servicio de la comunidad puede estar temporalmente caído. Inténtalo de nuevo en un momento. Tus widgets instalados no se verán afectados.", + "loadError": "No se pudo cargar este envío.", + "noDescription": "Sin descripción", + "author": "por {name}", + "communityMember": "Miembro de la comunidad", + "outdated": "Antiguo", + "outdatedWarning": "El autor marcó este envío como obsoleto. Revísalo cuidadosamente antes de importar.", + "score": "Puntuación: {count, number}", + "upvote": "Upvote", + "downvote": "Bajar voto", + "voteError": "No se ha podido guardar la votación.", + "signIn": "Iniciar sesión con GitHub", + "signInError": "Error al iniciar sesión en GitHub. Compruebe que el proveedor OAuth del taller está configurado y que se permiten ventanas emergentes.", + "signOut": "Cerrar sesión", + "signInHint": "Inicia sesión para votar o reportar. La instalación no requiere una cuenta del taller.", + "securityNotice": "Los widgets del taller pueden llamar a sus fuentes API declaradas y realizar acciones declaradas con credenciales que configuras localmente. Los secretos nunca están incluidos.", + "securityNoticeCss": "CSS de la comunidad puede cambiar la apariencia y la usabilidad de un foro. Revísalo antes de importar; nada se guarda hasta que guarde la configuración del foro.", + "install": "Instalar", + "installReviewTitle": "Revisar antes de instalar", + "installError": "Este widget no se puede instalar", + "installErrorDescription": "El envío del taller no es un widget JSX v2 válido personalizado.", + "useCss": "Import CSS", + "importCss": "Importar CSS del taller", + "importCssConfirm": "Reemplazar el CSS personalizado actual con \"{title}\"? Nada se guarda hasta que guarde la configuración del foro.", + "screenshotAlt": "{title}, captura de pantalla {count, number}", + "screenshotViewer": "Visor de captura de pantalla {title}", + "screenshotsLabel": "Capturas de pantalla {title}", + "zoomScreenshot": "Ver tamaño completo", + "previousScreenshot": "Captura de pantalla anterior", + "nextScreenshot": "Siguiente captura de pantalla", + "showScreenshotThumbnails": "Mostrar miniaturas de captura de pantalla", + "hideScreenshotThumbnails": "Ocultar miniaturas de captura de pantalla", + "closeScreenshotViewer": "Cerrar visor de captura de pantalla", + "technicalDetails": "Detalles técnicos", + "sourceCode": "Entrada del taller", + "export": "Exportar", + "report": "Reporte", + "reportTitle": "Envío del informe", + "reportReason": "Razón", + "reportExplanation": "¿Qué deberían saber los moderadores del taller?", + "reportSend": "Enviar informe", + "reportSent": "Reporte enviado", + "reportSentDescription": "Los moderadores del taller ahora pueden revisar este envío.", + "reportCount": "{count, plural, one {# reporta} other {# reporta}}", + "reportWarning": "{count, plural, one {Este envío tiene # informe abierto de la comunidad.} other {Este envío tiene # informes abiertos de la comunidad.}} Sigue siendo instalable, pero debes revisar su contenido primero.", + "reportVisibility": "Los detalles del informe son visibles sólo para los administradores de este autor y del taller.", + "reportCategory": { + "outdated": "Anulado o dejado de funcionar", + "malicious": "Malicioso", + "spam": "Spam", + "copyright": "Copyright", + "inappropriate": "Inapropiado", + "other": "Otros" + }, + "publish": { + "title": "Publicar en el taller", + "introTitle": "Compartir este widget con la comunidad", + "introDescription": "Homarr exporta una copia sin credenciales del widget actual. Añade detalles de listado claros para que la gente sepa lo que hace antes de instalarlo.", + "listingDetails": "Listado del taller", + "listingDetailsDescription": "Estos detalles aparecen públicamente junto a la definición del widget exportado.", + "success": "Publicado inmediatamente. Los miembros de la comunidad ahora pueden instalar y reportar este widget.", + "successTitle": "Tu widget está en vivo", + "manageDescription": "Abra el envío para actualizar su listado, revisar informes, marcarlo desactualizado o eliminarlo. La gestión de los envíos se gestiona directamente en el sitio web del taller.", + "viewSubmission": "Ver y administrar el envío", + "done": "Hecho", + "signInHint": "Inicia sesión para publicar bajo tu identidad del taller.", + "titleField": "Título", + "descriptionField": "Descripción", + "screenshots": "Capturas de pantalla", + "screenshotsDescription": "Hasta cinco imágenes PNG, JPEG o WebP", + "screenshotsPlaceholder": "Elegir capturas", + "invalidScreenshot": "Usar imágenes PNG, JPEG o WebP que no sean mayores de {maxSize} cada una.", + "privateSourceWarning": "Este widget contiene las URL de origen privadas para: {sources}. Reemplaza los hosts personales o las direcciones IP con marcadores de posición de servicio seguros antes de publicar.", + "reviewSourcesTitle": "Revisar URLs de origen privado", + "privateSourceConfirmation": "He revisado estas URLs de fuente y no exponen los detalles privados de infraestructura", + "action": "Publicar ahora", + "publicationNote": "La publicación es inmediata. Puedes administrar el envío después en el taller.", + "definitionChanged": "El widget cambió mientras se preparaba la publicación. Revise de nuevo sus URLs de fuente privada y vuelva a intentarlo.", + "error": "Error al publicar" } }, "integration": { + "completion": { + "modalTitle": "Servicio listo", + "title": "{name} está conectado", + "description": "La conexión ha pasado su prueba. Elija qué mostrar en este tablero siguiente.", + "connectionReady": "La conexión de servicio está lista", + "appReady": "Acceso directo a la aplicación listo", + "compatibleWidgets": "{count, plural, =0 {No hay widgets compatibles} one {# widget compatible} other {# widgets compatibles}} disponibles", + "chooseWidget": "Elegir widget", + "recipes": { + "title": "Recomendado para este tablero", + "description": "Basado en servicios y widgets conectados ya en este foro.", + "newConnectionReason": "Ahora disponible a través de {integration}", + "existingConnectionReason": "Funciona con un servicio que ya has conectado", + "dismiss": "Descartar recomendaciones para este servicio en este foro" + } + }, "page": { "list": { - "title": "Integraciones", + "ariaLabel": "Integraciones configuradas", "search": "Buscar integraciones", + "scopedNote": "Mostrar sólo las integraciones que se le permiten gestionar.", "noResults": { - "title": "Aún no hay integraciones" + "title": "Aún no hay integraciones", + "description": "Conecte un servicio para usar sus datos y acciones en los widgets de Homarr.", + "action": "Crea tu primera integración", + "filteredTitle": "No hay integraciones que coincidan con tu búsqueda", + "filteredDescription": "No hay integraciones que coincidan con \"{search}\". Prueba con otro nombre, tipo o URL.", + "createOnlyTitle": "Sólo puedes añadir integraciones", + "createOnlyDescription": "Sus permisos le permiten crear integraciones pero no gestionar las existentes. Pida a un administrador acceso a las que necesita." } }, "create": { "title": "Nueva integración {name}", "notification": { "success": { - "title": "Creación exitosa", "message": "La integración fue creada con éxito" }, "error": { - "title": "No se ha podido crear", "message": "La integración no pudo ser creada" } }, @@ -729,11 +1339,9 @@ "title": "Editar integración {name}", "notification": { "success": { - "title": "Cambios aplicados con éxito", "message": "La integración se ha guardado correctamente" }, "error": { - "title": "No se pudieron aplicar los cambios", "message": "La integración no pudo ser creada" } }, @@ -750,23 +1358,15 @@ "message": "¿Estás seguro de que deseas eliminar la integración {name}?", "notification": { "success": { - "title": "Eliminación exitosa", "message": "La integración fue eliminada con éxito" }, "error": { - "title": "Error al eliminar", "message": "No se pudo eliminar la integración" } } } }, "field": { - "name": { - "label": "Nombre" - }, - "url": { - "label": "URL" - }, "attemptSearchEngineCreation": { "label": "Crear motor de búsqueda", "description": "La integración \"{kind}\" se puede utilizar con los motores de búsqueda. Marque esta opción para configurar automáticamente el motor de búsqueda." @@ -778,6 +1378,10 @@ "label": "Crear aplicación", "description": "Crea una aplicación con el mismo nombre e icono que la integración. Deja vacío el campo de entrada de abajo para crear la aplicación con la URL de la integración." }, + "linkApp": { + "label": "Vincular una aplicación existente", + "description": "Conecte esta integración a una aplicación que ya puede usar." + }, "appHref": { "placeholder": "URL personalizada de aplicación" }, @@ -791,7 +1395,11 @@ "grid": { "widgetCount": "{count} widgets", "noWidgets": "No hay widgets", - "detected": "Detectado a través de Docker" + "detected": "Detectado a través de Docker", + "connected": "{count, plural, one {# conectada} other {# conectada}}", + "tiedWidgets": "Widgets cubiertos", + "more": "+{count} más", + "loadError": "No se han podido cargar las integraciones. Inténtalo de nuevo antes de crear una nueva conexión." }, "category": { "dnsHole": "DNS", @@ -822,7 +1430,10 @@ "analytics": "Analíticas", "vpn": "VPN", "mediaLibrary": "Biblioteca multimedia", - "uptimeMonitoring": "Monitoreo de disponibilidad" + "uptimeMonitoring": "Monitoreo de disponibilidad", + "beszel": "Beszel", + "systemMonitoring": "Monitoreo del Sistema", + "security": "Seguridad" }, "testConnection": { "action": { @@ -1107,6 +1718,22 @@ "slug": { "label": "Slug de página de estado", "newLabel": "" + }, + "wazuhIndexerUrl": { + "label": "URL del indexador", + "newLabel": "Nueva URL del indexador" + }, + "wazuhIndexerUsername": { + "label": "Nombre de usuario del indexador", + "newLabel": "Nuevo nombre de usuario" + }, + "wazuhIndexerPassword": { + "label": "Contraseña del indexador", + "newLabel": "Nueva contraseña del indexador" + }, + "wazuhDashboardUrl": { + "label": "Tablero URL (opcional)", + "newLabel": "Nuevo dashboard URL" } } }, @@ -1115,54 +1742,19 @@ "interact": "Interactuar con integraciones", "full": "Acceso completo a la integración" }, - "audiobookshelf": { - "name": "Audiobookshelf", - "description": "" - }, - "navidrome": { - "name": "Navidrome", - "description": "" - }, - "uptimeKuma": { - "name": "Uptime Kuma", - "description": "", - "secret": { - "slug": { - "description": "" - }, - "apiKey": { - "description": "" - } - } - }, - "traefik": { - "name": "Traefik", - "description": "" - }, - "paperlessNgx": { - "name": "Paperless-ngx", - "description": "" - }, - "patchmon": { - "name": "PatchMon", - "description": "" - }, - "bazarr": { - "name": "Bazarr", - "description": "" - }, - "wud": { - "name": "Qué hay de nuevo Docker", - "description": "Controlar cuál de sus contenedores Docker tiene actualizaciones de imagen disponibles" + "llamacpp": { + "name": "llama.cpp", + "description": "Monitorear un servidor llama-server local llama.cpp: métricas de salud, modelo y generación" } }, "media": { "plural": "Imágenes", "search": "Buscar una imagen", "field": { - "name": "Nombre", + "preview": "Vista previa", "size": "Tamaño", - "creator": "Creador" + "creator": "Creador", + "actions": "Controles" }, "action": { "upload": { @@ -1190,10 +1782,12 @@ } }, "copy": { - "label": "Copiar URL" + "label": "Copiar URL", + "labelNamed": "Copiar URL para {name}" }, "open": { - "label": "Abrir imagen" + "label": "Abrir imagen", + "labelNamed": "Abrir {name}" } }, "noResults": { @@ -1208,7 +1802,6 @@ "add": "Añadir", "apply": "Aplicar", "backToOverview": "Volver a la vista general", - "skip": "Saltar", "change": "Modificar", "create": "Crear", "createAnother": "Crear e iniciar de nuevo", @@ -1231,16 +1824,31 @@ "tryAgain": "Intentar de nuevo", "loading": "Cargando", "show": "Mostrar", - "hide": "Ocultar" + "hide": "Ocultar", + "undo": "Deshacer", + "editNamed": "Editar {name}", + "deleteNamed": "Eliminar {name}", + "clearSearch": "Limpiar búsqueda", + "copy": "Copiar", + "copied": "Copiado", + "refresh": "Actualizar" + }, + "pagination": { + "pageOf": "Página {page} de {totalPages}" }, "here": "aquí", + "serviceUrlTemplate": { + "serverTitle": "Dirección del servidor habitual", + "urlModeLabel": "Patrón de dirección de servicio", + "hostPort": "Mismo host, diferentes puertos", + "subdomain": "Un subdominio por servicio", + "path": "Una ruta por servicio" + }, "iconPicker": { "label": "URL del icono", + "description": "Busca en la biblioteca, pega una URL de imagen o sube un archivo.", "header": "Buscar imágenes {countIcons} por nombre", "headerLoading": "Buscar imágenes por nombre", - "noResults": "No hay iconos que coincidan con \"{search}\".", - "error": "No se pudieron cargar los iconos.", - "description": "Busca en la biblioteca, pega una URL de imagen o sube un archivo.", "clear": "Borrar imagen", "uploadImage": "Subir imagen", "results": "Resultados de búsqueda de imágenes", @@ -1249,7 +1857,9 @@ "otherImages": "Otras imágenes", "urlLoading": "Comprobando imagen…", "urlReady": "La imagen está lista para usar", - "urlError": "Esta imagen no se pudo cargar. Compruebe la URL e inténtelo de nuevo." + "urlError": "Esta imagen no se pudo cargar. Compruebe la URL e inténtelo de nuevo.", + "noResults": "No hay iconos que coincidan con \"{search}\".", + "error": "No se pudieron cargar los iconos." }, "colorScheme": { "options": { @@ -1261,7 +1871,6 @@ "information": { "min": "Mínimo", "max": "Máximo", - "days": "Días", "hours": "Horas", "minutes": "Minutos" }, @@ -1298,16 +1907,16 @@ }, "userAvatar": { "menu": { - "switchToDarkMode": "Cambiar a modo oscuro", - "switchToLightMode": "Cambiar a modo claro", + "open": "Abrir menú de cuenta", "management": "Administración", - "docker": "Docker", "preferences": "Tus preferencias", "logout": "Cerrar sesión", "login": "Iniciar sesión", "homeBoard": "Tu tablero de inicio", - "loggedOut": "Sesión cerrada", - "updateAvailable": "{countUpdates} actualizaciones disponibles: {tag}" + "updateAvailable": "{countUpdates} actualizaciones disponibles: {tag}", + "assistant": "Asistente", + "assistantThinking": "Pensando", + "modifier": "Mod" } }, "dangerZone": "Zona de riesgo", @@ -1355,13 +1964,66 @@ "kilometersPerHour": "km/h", "milesPerHour": "mph" } + }, + "widgetQuery": { + "loading": "Cargando datos del widget" + }, + "total": "Total", + "filesystemUsage": "{count, plural, one {Mostrar uso para # filesystem} other {Mostrar uso para # filesystems}}", + "field": { + "name": "Nombre de la tarea" + }, + "label": { + "new": "Nueva" + }, + "entity": { + "apps": "Aplicaciones", + "boards": "Tableros", + "certificates": "Certificados", + "customWidgets": "Widgets personalizados", + "groups": "Grupos", + "integrations": "Integraciones", + "invites": "Invitaciones", + "logs": "Registros", + "media": "Multimedia", + "searchEngines": "Motores de búsqueda", + "tasks": "Tareas", + "users": "Users" } }, "section": { - "dynamic": { + "option": { + "showLabel": { + "label": "Mostrar etiqueta", + "description": "Mostrar la etiqueta del contenedor sobre su contenido." + }, + "collapsible": { + "label": "Permitir contraer", + "description": "Permite que los televidentes se expandan y contraigan este contenedor." + }, + "showOpenAll": { + "label": "Mostrar acción abierta", + "description": "Mostrar una acción que abre cada aplicación en este contenedor en nuevas pestañas." + }, + "scrollable": { + "label": "Desplazable", + "description": "Mantenga este contenedor en su tamaño establecido y despliegue su contenido en lugar de crecer para ajustarse a ellos." + } + }, + "action": { + "openAllInNewTabsFor": "Abrir todas las aplicaciones en {name} en pestañas" + }, + "openAllInNewTabs": { + "title": "Abrir todo en nuevas pestañas", + "text": "Algunos navegadores pueden bloquear la apertura masiva de nuevas pestañas por razones de seguridad. Homarr no pudo abrir todas las ventanas, porque tu navegador bloqueó esta acción. Por favor, permite \"Abrir ventanas emergentes\" y vuelve a intentarlo." + }, + "container": { + "untitled": "Contenedor sin título", "action": { - "create": "Nueva sección dinámica", - "remove": "Eliminar sección dinámica" + "create": "Nuevo contenedor", + "remove": "Eliminar contenedor", + "expand": "Expandir", + "collapse": "Colapso" }, "option": { "title": { @@ -1375,55 +2037,12 @@ } }, "remove": { - "title": "Eliminar sección dinámica", - "message": "¿Estás seguro de que deseas eliminar esta sección dinámica? Los artículos se mantendrán en la misma ubicación." - } - }, - "category": { - "field": { - "name": { - "label": "Nombre" - } - }, - "action": { - "create": "Nueva Categoría", - "edit": "Renombrar categoría", - "remove": "Eliminar categoría", - "moveUp": "Mover hacia arriba", - "moveDown": "Mover hacia abajo", - "createAbove": "Nueva categoría arriba", - "createBelow": "Nueva categoría abajo", - "openAllInNewTabs": "Abrir todo en nuevas pestañas" - }, - "create": { - "title": "Nueva Categoría", - "submit": "Añadir categoría" - }, - "remove": { - "title": "Eliminar categoría", - "message": "¿Estás seguro de que deseas eliminar la categoría {name}?" - }, - "edit": { - "title": "Renombrar categoría", - "submit": "Renombrar categoría" - }, - "menu": { - "label": { - "create": "Nueva Categoría", - "changePosition": "Cambiar posición", - "settings": "Ajustes" - } - }, - "openAllInNewTabs": { - "title": "Abrir todo en nuevas pestañas", - "text": "Algunos navegadores pueden bloquear la apertura masiva de nuevas pestañas por razones de seguridad. Homarr no pudo abrir todas las ventanas, porque tu navegador bloqueó esta acción. Por favor, permite \"Abrir ventanas emergentes\" y vuelve a intentarlo." + "message": "¿Eliminar este contenedor? Su contenido se moverá a la zona circundante." } } }, "item": { "action": { - "create": "Nuevo elemento", - "import": "Importar elemento", "edit": "Editar elemento", "moveResize": "Mover / Redimensionar elemento", "duplicate": "Duplicar elemento", @@ -1432,7 +2051,7 @@ "menu": { "label": { "settings": "Ajustes", - "refresh": "Actualizar", + "settingsFor": "Configuración de {name}", "options": "Opciones", "actions": "Acciones" }, @@ -1441,21 +2060,96 @@ "error": "Error", "loading": "Cargando", "idle": "" + }, + "notification": { + "saveError": { + "title": "No se puede guardar el widget", + "message": "Los cambios en el widget se deshacen" + } } }, "create": { "title": "Seleccionar elemento a añadir", "search": "Filtrar elementos", - "addToBoard": "Añadir al tablero" + "addToBoard": "Añadir al tablero", + "addAtPosition": "Añadir elemento aquí", + "destination": { + "label": "Añadir a", + "description": "Elija dónde debe aparecer el widget. Todavía puede moverlo más tarde.", + "mainCanvas": "Lienzo principal", + "leftRail": "Raíl izquierdo", + "rightRail": "Raíl derecho" + }, + "connectionStatus": { + "ready": "Listo", + "needsSetup": "Necesita configuración", + "noConnectionRequired": "No se requiere conexión" + }, + "customWidget": "Widget personalizado", + "standalone": "Independiente", + "missingIntegration": { + "title": "Conectar un servicio primero", + "noPermission": "Este widget necesita una conexión de servicio compatible. Pídele a un administrador que conecte uno, y vuelva a intentarlo." + }, + "notification": { + "success": { + "title": "Widget añadido", + "message": "Se añadió {name} a este panel.", + "relocatedMessage": "{name} fue añadido a {destination} porque el destino seleccionado no estaba disponible." + }, + "error": { + "title": "No se puede agregar el artículo", + "message": "El elemento no pudo ser añadido a este tablero" + } + } + }, + "selection": { + "summary": "{count, plural, one {# elemento seleccionado} other {# elementos seleccionados}}", + "selected": "{count, plural, one {# seleccionado} other {# seleccionado}}", + "copy": "Copiar", + "copied": "{count, plural, one {# elemento copiado al portapapeles} other {# elementos copiados al portapapeles}}", + "copyError": "Los elementos seleccionados no pudieron ser copiados. Su navegador puede no permitir el acceso al portapapeles.", + "paste": "Pegar", + "pasteShortcut": "Pegar los elementos copiados aquí (Ctrl + V)", + "pasted": "{count, plural, one {# elemento pegado} other {# elementos pegados}}", + "pasteError": "El portapapeles no pudo ser leído. Su navegador puede no permitir el acceso al portapapeles.", + "pasteInvalid": "El portapapeles no contiene elementos válidos del tablero Homarr.", + "pasteUnavailable": "Los objetos copiados no caben en este tablero.", + "removed": "{count, plural, one {# elemento eliminado} other {# elementos eliminados}}", + "move": "Mover", + "moveTo": "Mover elementos seleccionados", + "delete": "Eliminar", + "clear": "Borrar selección", + "clearShortcut": "Borrar selección (Escape)", + "saveErrorTitle": "No se pueden actualizar los artículos", + "saveErrorMessage": "No se han podido guardar los cambios. El tablero ha sido actualizado.", + "moveUnavailableTitle": "No se puede mover los elementos seleccionados", + "moveUnavailableMessage": "El destino no tiene suficiente espacio para toda la selección." }, "moveResize": { "title": "Mover / Redimensionar elemento", + "entryLabel": "{name}, columna {column}, fila {row}", + "target": { + "numbered": "{name}, destino {index}", + "located": "{name}, {location}, destino {index}" + }, + "keyboard": { + "instructions": "Pulse Intro o Espacio para comenzar a editar el teclado. Utilice las teclas de flecha para mover, Mayús y las teclas de flecha para cambiar el tamaño, y Escape para parar.", + "started": "Edición de teclado iniciada. Utilice las teclas de flecha para mover, Mayús y teclas de flecha para cambiar el tamaño, y Escape para parar.", + "stopped": "Edición del teclado detenida.", + "boundary": "Ese cambio no cabe dentro de esta sección." + }, "field": { + "section": { + "label": "Sección o raíl" + }, "width": { - "label": "Ancho" + "label": "Ancho", + "shortLabel": "M" }, "height": { - "label": "Alto" + "label": "Alto", + "shortLabel": "D" }, "xOffset": { "label": "Margen X" @@ -1469,18 +2163,36 @@ "title": "Editar elemento", "tab": { "widget": "Editar widget", - "app": "Editar aplicación" + "app": "Editar aplicación", + "integration": "Editar integración" }, "app": { "propagationNotice": "Los cambios a esta aplicación se aplicarán en cualquier lugar donde se utilice en todos los tableros." }, + "integration": { + "action": "Editar conexión", + "description": "Probar o reparar una conexión seleccionada sin salir de este widget.", + "editLabel": "Editar integración {name}", + "fullAccessRequired": "Se requiere acceso completo", + "propagationNotice": "Los cambios a esta integración se aplican dondequiera que se utilice. La conexión se prueba antes de guardarla.", + "loading": "Cargando integración", + "loadError": "Esta integración no se pudo cargar. Inténtalo de nuevo antes de cambiar su configuración de conexión." + }, + "preview": { + "integrationRequired": "Elija una conexión para previsualizar este widget.", + "size": "Tamaño del archivo" + }, + "settings": { + "label": "Configuración del Widget" + }, "advancedOptions": { "label": "Opciones avanzadas", "title": "Opciones avanzadas del elemento" }, "field": { "integrations": { - "label": "Integraciones" + "label": "Integraciones", + "removeLabel": "Eliminar integración con {name}" }, "title": { "label": "Título" @@ -1494,17 +2206,18 @@ } }, "remove": { - "title": "Eliminar elemento", "message": "¿Estás seguro de que deseas eliminar este elemento?" + }, + "advancedFocus": { + "open": "Abrir vista avanzada", + "close": "Cerrar vista avanzada", + "label": "{widget} vista avanzada" } }, "widget": { "integrationSelect": { "configureIntegrationFirst": "Conecte primero una integración", - "loading": "Cargando...", - "placeholder": "Seleccione una opción", - "noResults": "No se encontraron resultados", - "loadError": "Error al cargar las opciones" + "placeholder": "Seleccione una opción" }, "app": { "name": "Aplicación", @@ -1513,9 +2226,6 @@ "appId": { "label": "Elegir aplicación" }, - "openInNewTab": { - "label": "Abrir en una nueva pestaña" - }, "showTitle": { "label": "Mostrar el nombre de la aplicación" }, @@ -1523,11 +2233,8 @@ "label": "Habilitar comprobación de estado" }, "layout": { - "label": "Diseño", "option": { - "row": "Horizontal", "row-reverse": "Horizontal (invertido)", - "column": "Vertical", "column-reverse": "Vertical (invertido)" } }, @@ -1552,23 +2259,60 @@ "name": "Marcadores", "description": "Mostrar múltiples enlaces de aplicación", "option": { - "title": { - "label": "Título" + "showTitle": { + "label": "Mostrar título del widget" + }, + "titleSize": { + "label": "Tamaño del título del widget (px)" }, "layout": { "label": "Diseño", "option": { - "row": { - "label": "Horizontal" - }, - "column": { - "label": "Vertical" - }, - "grid": { - "label": "Cuadrícula" + "adaptive": { + "label": "Adaptivo" }, "gridHorizontal": { "label": "Cuadrícula horizontal" + }, + "icons": { + "label": "Iconos" + } + } + }, + "variant": { + "label": "Apariencia", + "option": { + "soft": { + "label": "Suave" + }, + "filled": { + "label": "Rellenado" + }, + "outline": { + "label": "Contorno" + }, + "plain": { + "label": "Simple" + } + } + }, + "spacing": { + "label": "Espaciado de tarjeta", + "option": { + "xs": { + "label": "Extra pequeño" + }, + "sm": { + "label": "Pequeño" + }, + "md": { + "label": "Mediano" + }, + "lg": { + "label": "Grande" + }, + "xl": { + "label": "Extra grande" } } }, @@ -1581,17 +2325,28 @@ "hideHostname": { "label": "Ocultar nombres de host" }, - "openNewTab": { - "label": "Abrir en una nueva pestaña" - }, "withBorder": { "label": "Mostrar borde" }, + "grow": { + "label": "Expandir tarjetas para llenar fila" + }, + "customUrls": { + "label": "Enlaces personalizados" + }, "items": { "label": "Marcadores", - "add": "Añadir marcador" + "remove": "Eliminar marcador", + "apps": { + "label": "Añadir marcadores", + "description": "Pegue URLs o encuentre aplicaciones existentes. Arrastre los marcadores de abajo para reordenarlos.", + "placeholder": "Pegar URLs o buscar aplicaciones", + "addUrl": "Añadir esta URL", + "hint": "Pulse Enter para añadir una URL. Pegue las URLs separadas por comas o una por línea para añadir varias." + } } - } + }, + "empty": "Añadir una URL o aplicación en la configuración del widget" }, "archiveTeamWarrior": { "name": "ArchiveTeam Warrior", @@ -1600,33 +2355,61 @@ "showBroadcastMessage": { "label": "" } + }, + "noProjectSelected": "Ningún proyecto seleccionado", + "runnerStatus": "Cazador: {status}", + "projectId": "Proyecto: {id}", + "sessionReceived": "Sesión recibida: {value}", + "sessionSent": "Sesión enviada: {value}", + "sessionId": "Sesión: {id}", + "startedAt": "Comenzó {date}", + "emptyItems": "No hay trabajos activos o recientes en esta instantánea", + "metric": { + "running": "En ejecución", + "completed": "Hecho", + "failed": "Fallido", + "canceled": "Cancelado", + "download": "Descarga", + "upload": "Subida" + }, + "status": { + "running": "En ejecución", + "completed": "Completado", + "failed": "Fallido", + "canceled": "Cancelado", + "stopped": "Detenido", + "idle": "Inactivo", + "unknown": "Desconocido" + } + }, + "wud": { + "name": "Qué hay de nuevo Docker", + "description": "Mostrar cuántos contenedores vistos tienen actualizaciones disponibles.", + "title": "Qué hay de nuevo Docker", + "monitored": "Monitoreado", + "updatesAvailable": "{count, plural, one {# actualización disponible} other {# actualizaciones disponibles}}", + "updateAvailable": "Actualización disponible", + "openReleaseNotes": "Notas de la versión abierta", + "option": { + "showRing": { + "label": "Mostrar anillo de actualización" + }, + "showUpdateList": { + "label": "Mostrar lista de actualización del contenedor", + "description": "Lista cada contenedor supervisado que tiene una actualización de imagen disponible" + } } }, "dnsHoleSummary": { "name": "Resumen del agujero DNS", "description": "Muestra el resumen de tu agujero DNS", "option": { - "layout": { - "label": "Diseño", - "option": { - "row": { - "label": "Horizontal" - }, - "column": { - "label": "Vertical" - }, - "grid": { - "label": "Cuadrícula" - } - } - }, "usePiHoleColors": { "label": "Usar colores de Pi-Hole" } }, "error": { - "internalServerError": "Error al recuperar el resumen del agujero DNS", - "integrationsDisconnected": "No hay datos disponibles, todas las integraciones desconectadas" + "internalServerError": "Error al recuperar el resumen del agujero DNS" }, "data": { "adsBlockedToday": "Bloqueados hoy", @@ -1634,32 +2417,24 @@ "dnsQueriesToday": "Consultas de hoy", "domainsBeingBlocked": "Dominios en la lista de bloqueo" }, - "domainsTooltip": "Debido a múltiples integraciones, Homarr no puede calcular el número exacto de dominios bloqueados" + "domainsTooltip": "Debido a múltiples integraciones, Homarr no puede calcular el número exacto de dominios bloqueados", + "status": { + "enabled": "Habilitado", + "disabled": "Deshabilitado", + "unknown": "Desconocido" + } }, "dnsHoleControls": { "name": "Controles de agujero DNS", "description": "Controla Pihole o AdGuard desde tu tablero", "option": { - "layout": { - "label": "Diseño", - "option": { - "row": { - "label": "Horizontal" - }, - "column": { - "label": "Vertical" - }, - "grid": { - "label": "Cuadrícula" - } - } - }, "showToggleAllButtons": { "label": "Mostrar pulsar todos los botones" } }, "error": { - "internalServerError": "No se pudo controlar el agujero DNS" + "internalServerError": "No se pudo controlar el agujero DNS", + "bulkActionsFailed": "{count, plural, one {# acción falló} other {# acciones fallaron}}" }, "controls": { "enableAll": "Habilitar Todo", @@ -1670,8 +2445,6 @@ "disabled": "Deshabilitado", "processing": "Procesando", "disconnected": "Desconectado", - "hours": "Horas", - "minutes": "Minutos", "unlimited": "Dejar en blanco para ilimitado" } }, @@ -1683,16 +2456,10 @@ "label": "Mostrar Título/Ciudad Personalizados", "description": "Mostrar un título personalizado o el nombre de la ciudad/país en la parte superior del reloj." }, - "customTitle": { - "label": "Título" - }, "is24HourFormat": { "label": "Formato de 24 horas", "description": "Usar formato de 24 horas en lugar del formato de 12 horas" }, - "showSeconds": { - "label": "Mostrar segundos" - }, "useCustomTimezone": { "label": "Usar una zona horaria fija" }, @@ -1711,29 +2478,295 @@ "label": "Formato de hora personalizado", "description": "Usar ISO 8601 para dar formato a la hora (esto anulará otras opciones)" }, - "customDateFormat": { - "label": "Formato de fecha personalizado", - "description": "Usar ISO 8601 para dar formato a la hora (esto anulará otras opciones)" - }, "showWeather": { "label": "Mostrar el clima", "description": "Mostrar un pequeño icono de clima animado y la temperatura en la esquina de la tarjeta" }, - "weatherLocation": { - "label": "Ubicación para el clima" - }, "isWeatherFormatFahrenheit": { "label": "Usar Fahrenheit" + }, + "animateWeatherIcon": { + "label": "Animar icono del clima", + "description": "Animar el icono del clima. Desactivado por defecto y siempre desactivado cuando se solicita un movimiento reducido." + }, + "colorWeatherByDayNight": { + "label": "Color del clima por día/noche", + "description": "Tinta el icono del tiempo y la temperatura con un color de día o de noche, en función de si actualmente es de día o noche en el lugar elegido." + }, + "dayWeatherColor": { + "label": "Color del día" + }, + "nightWeatherColor": { + "label": "Color nocturno" + }, + "worldClockCities": { + "label": "Ciudades del mundo del reloj", + "description": "Añadir y pedir hasta seis ciudades para la vista avanzada." } + }, + "timezoneList": { + "timezone": "Zona horaria", + "cityLabel": "Etiqueta ciudad", + "searchPlaceholder": "Buscar zonas horarias", + "noResults": "No se encontraron zonas horarias", + "unsupportedOption": "No soportado: {timeZone}", + "add": "Añadir ciudad", + "remove": "Eliminar {city}", + "reorder": "Reordenar {city}", + "limit": "{count} de {maximum} ciudades configuradas" + }, + "worldClock": { + "primary": "Reloj principal", + "local": "Hora local", + "today": "Hoy", + "tomorrow": "Mañana", + "yesterday": "Ayer", + "noSecondaryCities": "Añade ciudades en opciones de widget para compararlas aquí.", + "unsupportedPrimaryTitle": "Zona horaria principal no está disponible", + "unsupportedPrimary": "El {timeZone} no es compatible con este navegador. Mostrando UTC como un respaldo claramente marcado.", + "unsupportedTimeZone": "Zona horaria no soportada: {timeZone}", + "accessibleTime": "{city}: {time}, {date}, {timeZone}", + "advancedLabel": "Reloj avanzado del mundo", + "cities": "Reloj del mundo", + "cityCount": "{count} timezones", + "timeBarLabel": "Posición de 24 horas del día para {city}", + "dayProgress": "{percent}% transcurrido · {hours}h {minutes}m restantes", + "phaseLegend": "Leyenda del día", + "tick": { + "midnight": "00", + "morning": "06", + "noon": "12", + "evening": "18", + "end": "24" + }, + "phaseRange": { + "night": "00–05 · 21–24", + "dawn": "05–08", + "day": "08–18", + "dusk": "18–21" + }, + "phase": { + "night": "Noche", + "dawn": "Amanecer", + "day": "Día", + "dusk": "Colmillo" + } + } + }, + "airQuality": { + "name": "Calidad del aire y UV", + "description": "Muestra la calidad del aire, índice ultravioleta, contaminantes y polen para una ubicación.", + "option": { + "location": { + "label": "Ubicación de calidad del aire" + }, + "aqiStandard": { + "label": "AQI estándar", + "options": { + "auto": "Automático para el local", + "european": "European AQI", + "us": "AQI US" + } + }, + "showUv": { + "label": "Mostrar índice UV" + }, + "showPollutants": { + "label": "Mostrar concentraciones de contaminantes" + }, + "showPollen": { + "label": "Mostrar concentraciones de polen" + } + }, + "category": { + "good": "Bueno", + "fair": "Justo", + "moderate": "Moderado", + "unhealthySensitive": "No saludable para grupos sensibles", + "unhealthy": "Mal estado", + "poor": "Pobre", + "veryPoor": "Muy pobre", + "veryUnhealthy": "Muy poco saludable", + "extremelyPoor": "Exteriormente pobre", + "hazardous": "Peligroso", + "unknown": "Sin lectura AQI" + }, + "uv": { + "label": "Índice UV", + "category": { + "low": "Baja", + "moderate": "Moderado", + "high": "Alta", + "veryHigh": "Muy alta", + "extreme": "Extremo", + "unknown": "Sin lectura" + } + }, + "dominantPollutant": "Dominant pollutant", + "aqiLabel": "AQI", + "strongestPollen": "Polen más alto", + "unit": { + "concentration": "{value} μg/m3", + "pollen": "{value} granos/m3" + }, + "pollutant": { + "pm2_5": "PM2.5", + "pm10": "PM10", + "ozone": "Ozono", + "nitrogenDioxide": "dióxido de nitrógeno", + "sulphurDioxide": "Sulphur dioxide", + "carbonMonoxide": "Monóxido de carbono" + }, + "pollen": { + "alder": "Alder", + "birch": "Abedul", + "grass": "Hierba", + "mugwort": "Mugwort", + "olive": "Oliva", + "ragweed": "Algodón" + }, + "compact": { + "sixHourTrend": "Tendencia AQI para las próximas seis horas" + }, + "advanced": { + "observedAt": "Actualizado en {time}", + "next24Hours": "Próximas 24 horas", + "pollutants": "Concentraciones de contaminantes", + "pollen": "Conconcentraciones de polen", + "sevenDayForecast": "Previsión máxima de 7 días", + "aqiValue": "AQI {value}", + "uvValue": "UV {value}", + "uvShort": "UV {value}", + "noForecast": "No hay datos de previsión disponibles" + } + }, + "countdown": { + "name": "Cuenta", + "description": "Sigue los próximos eventos y aniversarios recurrentes.", + "option": { + "events": { + "label": "Eventos", + "description": "Añadir y ordenar hasta 20 cuentas regresivas de una sola vez o anuales. Las fechas se introducen en la zona horaria seleccionada." + }, + "showProgress": { + "label": "Mostrar progreso" + }, + "showSeconds": { + "label": "Mostrar segundos", + "description": "Mantenga los segundos visibles para cada evento próximo." + } + }, + "dateTimeEventList": { + "newEvent": "Nuevo evento", + "add": "Añadir evento", + "remove": "Eliminar {event}", + "reorder": "Reordenar {event}", + "eventLabel": "Etiqueta de evento", + "timezone": "Zona horaria", + "unsupportedOption": "No soportado: {timeZone}", + "recurrence": "Repetir", + "recurrenceOption": { + "none": "No se repite", + "yearly": "Cada año" + }, + "target": "Fecha y hora del evento", + "trackProgress": "Rastrear progreso desde una fecha de inicio", + "start": "Progreso fecha y hora de inicio", + "confirmDateTime": "Confirmar fecha y hora", + "limit": "{count} de {maximum} eventos configurados" + }, + "empty": { + "title": "No hay derribos aún", + "description": "Añadir un evento en las opciones del widget para empezar a contar hacia abajo." + }, + "completed": "Completado", + "yearly": "Anual", + "progress": "Progreso del evento", + "upcoming": "Próximamente", + "completedEvents": "Eventos completados", + "invalid": { + "title": "Algunos eventos no se pueden mostrar", + "description": "{count, plural, one {Un evento tiene una fecha no válida o una zona horaria no soportada.} other {# eventos tienen una fecha válida o una zona horaria no soportada.}}", + "value": "Unavailable" + }, + "alert": { + "notifications": "Notificaciones del navegador", + "permissionDenied": "Las notificaciones están bloqueadas en este navegador.", + "reached": "La cuenta atrás ha alcanzado su objetivo." + } + }, + "timer": { + "name": "Timer / Pomodoro", + "description": "Ejecuta un cronómetro simple o una secuencia Pomodoro configurable.", + "option": { + "mode": { + "label": "Modo", + "options": { + "timer": "Temporizador", + "pomodoro": "Pomodoro" + } + }, + "timerMinutes": { + "label": "Minutos de temporizador" + }, + "focusMinutes": { + "label": "Minutos de foco" + }, + "shortBreakMinutes": { + "label": "Minutos de descanso corto" + }, + "longBreakMinutes": { + "label": "Minutos de descanso largo" + }, + "sessionsBeforeLongBreak": { + "label": "Sesiones de concentración antes de un largo descanso" + }, + "autoStartBreaks": { + "label": "Iniciar saltos automáticamente" + }, + "autoStartFocus": { + "label": "Iniciar automáticamente las sesiones de enfoque" + } + }, + "phase": { + "timer": "Temporizador", + "focus": "Enfoque", + "shortBreak": "Pausa corta", + "longBreak": "Descanso largo" + }, + "action": { + "start": "Iniciar", + "pause": "Pausa", + "reset": "Reset" + }, + "attention": { + "timerComplete": "Timer complete", + "phaseReady": "{phase} listo" + }, + "progress": "Progreso del temporizador: {progress}%", + "compact": { + "completedFocus": "{count, plural, =0 {No hay sesiones de enfoque completadas} one {# sesión de enfoque completada} other {# sesiones de enfoque completadas}}" + }, + "alert": { + "title": "Timer complete", + "completed": "{phase} completado." + }, + "advanced": { + "sequence": "Pomodoro sequence", + "focusSession": "Enfocar {session}", + "settings": "Ajustes permanentes", + "settingsHint": "Utilice el menú contextual del widget para editar estos ajustes del foro.", + "localAlerts": "Alertas locales", + "notifications": "Notificaciones del navegador", + "sound": "Sonidos del temporizador", + "localAlertsHint": "Los sonidos del temporizador están habilitados por defecto. Los sonidos y las notificaciones se aplican sólo a este widget en este navegador.", + "notificationsDenied": "Las notificaciones están bloqueadas en este navegador." } }, "minecraftServerStatus": { "name": "Estado de Servidor de Minecraft", "description": "Muestra el estado de un servidor de Minecraft", "option": { - "title": { - "label": "Título" - }, "domain": { "label": "Dirección del servidor" }, @@ -1753,11 +2786,21 @@ "noStation": "No se ha seleccionado ninguna integración", "option": { "baseUrl": { - "label": "" + "label": "", + "description": "Las URL personalizadas deben resolverse a una dirección IP pública. Los hosts privados y locales son rechazados." }, "station": { - "label": "Estación" + "label": "Estación", + "placeholder": "Buscar una estación" } + }, + "error": { + "customSourceUnavailable": "La fuente de horarios no está disponible. Compruebe que su URL se resuelve a una dirección IP pública.", + "stationSearch": "No se puede buscar estaciones. Compruebe la URL personalizada y el acceso al foro." + }, + "warning": { + "stale": "No se pudo actualizar el horario. Mostrando las salidas actualizadas por última vez en {time}.", + "staleCompact": "Datos obsoletos" } }, "notebook": { @@ -1789,6 +2832,9 @@ "directionRtl": "Establecer dirección de texto derecha a izquierda", "blockquote": "Cita", "horizontalLine": "Línea horizontal", + "details": "Cambiar sección plegable", + "expandDetails": "Expandir sección colapsable", + "collapseDetails": "Colapsar sección colapsable", "bulletList": "Lista sin ordenar", "orderedList": "Lista ordenada", "checkList": "Lista de control", @@ -1797,16 +2843,20 @@ "link": "Enlace", "unlink": "Eliminar enlace", "image": "Insertar imagen", - "addTable": "Añadir tabla", + "insertTable": "Insertar tabla", + "insertTableSize": "Insertar tabla {columns} × {rows}", "deleteTable": "Eliminar tabla", "colorCell": "Color de celda", - "mergeCell": "Alternar combinación de celdas", + "mergeCells": "Combinar celdas", + "splitCell": "Dividir celda", "addColumnLeft": "Añadir columna a la izquierda", "addColumnRight": "Añadir columna a la derecha", "deleteColumn": "Eliminar columna", "addRowTop": "Añadir fila encima", "addRowBelow": "Añadir fila debajo", - "deleteRow": "Eliminar fila" + "deleteRow": "Eliminar fila", + "toggleHeaderRow": "Cambiar fila de cabecera", + "toggleHeaderColumn": "Cambiar columna de cabecera" }, "align": { "left": "Izquierda", @@ -1817,8 +2867,6 @@ "clearColor": "Eliminar color", "source": "Fuente", "widthPlaceholder": "Valor en % o píxeles", - "columns": "Columnas", - "rows": "Filas", "width": "Ancho", "height": "Alto" }, @@ -1830,7 +2878,9 @@ "discard": "Descartar cambios", "keepEditing": "Seguir editando" } - } + }, + "saveFailed": "No se puede guardar la nota", + "documentStats": "{words, plural, one {# palabra} other {# palabras}} · {characters, plural, one {# carácter} other {# caracteres}}" }, "anchorNote": { "name": "Nota de Anchor", @@ -1839,9 +2889,6 @@ "noteId": { "label": "Nota" }, - "showTitle": { - "label": "Mostrar título" - }, "showUpdatedAt": { "label": "Mostrar última actualización" } @@ -1851,14 +2898,20 @@ "notFound": "No se encontró la nota", "noNotes": "No se encontraron notas", "integrationRequired": "Selecciona primero una integración de Anchor", - "updatedAt": "Actualizado a {date}", "untitled": "Sin título", - "edit": "Editar", - "save": "Guardar", - "cancel": "Cancelar", "readOnlyViewer": "Solo tienes acceso de lectura para esta nota.", "saveForbidden": "No tienes permiso para editar esta nota.", - "saveFailed": "Error al guardar esta nota. Por favor, inténtalo de nuevo." + "saveFailed": "Error al guardar esta nota. Por favor, inténtalo de nuevo.", + "createdAt": "Creado {date}", + "permission": { + "owner": "Propietario", + "editor": "Editor", + "viewer": "Visor" + }, + "status": { + "pinned": "Fijado", + "archived": "Archivado" + } }, "iframe": { "name": "iFrame", @@ -1917,6 +2970,25 @@ "clickable": { "label": "Se puede hacer clic" } + }, + "state": { + "on": "En", + "off": "Apagado", + "unavailable": "Unavailable", + "unknown": "Desconocido" + }, + "advanced": { + "entityId": "ID de la entidad: {id}", + "lastChanged": "Cambiado {date}", + "attribute": { + "unit": "Unidad", + "deviceClass": "Clase de dispositivo", + "icon": "Icono" + } + }, + "error": { + "loadFailed": "No se puede cargar la entidad", + "toggleFailed": "No se puede actualizar la entidad" } }, "smartHome-executeAutomation": { @@ -1932,11 +3004,31 @@ }, "spotlightAction": { "run": "Ejecutar {name}" + }, + "advanced": { + "lastExecuted": "Última ejecución en {time}", + "automationId": "ID de automatización: {id}", + "ready": "Listo para ejecutar", + "noPermission": "Sin permiso para ejecutar esta automatización" + }, + "status": { + "running": "Automatización en ejecución", + "success": "Automatización completada" + }, + "error": { + "executeFailed": "No se puede ejecutar automatización" } }, "stockPrice": { "name": "Precio de una acción", "description": "Muestra el precio actual de acciones de una compañía", + "advanced": { + "currentPrice": "Precio actual", + "previousClose": "Cerrado anterior", + "changePercentage": "Cambiar (%)", + "minimum": "Mínimo", + "maximum": "Máximo" + }, "option": { "stock": { "label": "Símbolo de la acción" @@ -2007,6 +3099,10 @@ "label": "1 Mes" } } + }, + "showDetails": { + "label": "Mostrar detalles", + "description": "Mostrar el nombre, cambio y rango de tiempo en la vista compacta. Desactívalo por sólo el símbolo y el precio." } } }, @@ -2034,6 +3130,13 @@ "showUnmonitored": { "label": "Mostrar sin monitorear" } + }, + "advanced": { + "previousMonth": "Mostrar mes anterior", + "nextMonth": "Mostrar el mes próximo", + "eventCount": "{count, plural, one {# evento} other {# eventos}}", + "loading": "Cargando eventos del calendario...", + "noEvents": "No hay eventos en este mes" } }, "weather": { @@ -2046,16 +3149,18 @@ "disableTemperatureDecimals": { "label": "Deshabilitar decimales de temperatura" }, + "animateIcons": { + "label": "Animar iconos del tiempo" + }, + "showHumidity": { + "label": "Mostrar humedad" + }, "showCurrentWindSpeed": { - "label": "Mostrar velocidad del viento actual", - "description": "Sólo en el tiempo actual" + "label": "Mostrar velocidad del viento actual" }, "useImperialSpeed": { "label": "Usar mph para la velocidad del viento" }, - "location": { - "label": "Ubicación" - }, "showCity": { "label": "Mostrar ciudad" }, @@ -2065,13 +3170,10 @@ "forecastDayCount": { "label": "Cantidad de días de previsión", "description": "Cuando el widget no es lo suficientemente amplio, se muestran menos días" - }, - "dateFormat": { - "label": "Formato de la fecha", - "description": "Cómo debería ser la fecha" } }, "currentWindSpeed": "{currentWindSpeed} {unit}", + "disabled": "Los datos meteorológicos no están disponibles porque las conexiones salientes están desactivadas", "dailyForecast": { "sunrise": "Amanecer", "sunset": "Atardecer", @@ -2094,6 +3196,47 @@ "thunderstorm": "Tormenta eléctrica", "thunderstormWithHail": "Tormenta con granizo", "unknown": "Desconocido" + }, + "details": "Mostrar detalles del clima", + "detailsFor": "Mostrar detalles meteorológicos de {date}", + "advanced": { + "forecast": "Previsión de 7 días", + "hourlyForecast": "Próximas 24 horas", + "day": "Día", + "time": "Hora", + "conditions": "Condiciones", + "temperature": "Temperatura", + "feelsLike": "Sentirse como {temperature}", + "feelsLikeLabel": "Siente como", + "feelsLikeRange": "Me gusta: {maximum} / {minimum}", + "highLow": "Alta {maximum} · baja {minimum}", + "observedAt": "Actualizado en {time}", + "humidity": "Humedad", + "averageHumidity": "Humedad media: {humidity}%", + "currentHumidity": "Humedad actual", + "wind": "Viento / ráfagas ({unit})", + "currentWind": "Viento actual / ráfagas", + "windValue": "{speed} / {gusts} {unit}", + "windDetail": "Viento máximo / ráfagas: {speed} / {gusts} {unit}", + "nextHourPrecipitation": "Precipitación la próxima hora", + "precipitationChance": "Oportunidad de precisión", + "precipitationValue": "{probability}% · {amount} mm", + "precipitationDetail": "Precipitación: {probability}% · {amount} mm", + "todayUv": "Índice UV máximo de hoy", + "uvIndex": "Índice máximo de UV: {value}", + "daylight": "Día: {duration}", + "hourlyTooltip": "Siéntete como {feelsLike}{temperatureUnit} · {amount} mm · {humidity}% humedad · {speed} {speedUnit} viento", + "hourlyTooltipWithoutHumidity": "Siéntete como {feelsLike}{temperatureUnit} · {amount} mm · {speed} {speedUnit} viento", + "detailLabel": { + "feelsLike": "Siente como", + "precipitation": "Precipitación", + "humidity": "Humedad media", + "wind": "Viento máximo / ráfagas", + "uv": "Índice UV máximo", + "daylight": "Daylight" + }, + "sun": "Abrimiento / puesta de sol", + "noForecast": "No hay datos de previsión disponibles" } }, "indexerManager": { @@ -2106,8 +3249,15 @@ }, "title": "Administrador de Índices", "testAll": "Probar todo", + "status": { + "healthy": "Buen estado", + "unhealthy": "Mal estado", + "disabled": "Deshabilitado", + "unknown": "Salud no disponible" + }, "error": { - "internalServerError": "Error al recuperar el estado de los indexadores" + "internalServerError": "Error al recuperar el estado de los indexadores", + "testAll": "La prueba del indexador falló. Inténtelo de nuevo." } }, "healthMonitoring": { @@ -2136,11 +3286,6 @@ "fileSystem": { "label": "Mostrar información del sistema de archivos" }, - "visibleStorageVolumes": { - "label": "Volúmenes de almacenamiento visibles", - "description": "", - "placeholder": "" - }, "defaultTab": { "label": "Seleccionar pestaña predeterminada" }, @@ -2163,17 +3308,27 @@ "minutes": "{count} minutos", "used": "Usado", "available": "Disponible", - "lastSeen": "Última actualización de estado: {lastSeen}" + "lastSeen": "Última actualización de estado: {lastSeen}", + "updatesAvailable": "{count, plural, one {# actualización disponible} other {# actualizaciones disponibles}}", + "rebootRequired": "Reiniciar", + "rebootNotRequired": "No es necesario reiniciar" + }, + "smartStatus": { + "attributesWithinThresholds": "SMART: atributos dentro de umbrales", + "attributesFailed": "SMART: {attributes} falló", + "noCriticalWarning": "SMART: sin aviso reportado por SSD", + "criticalWarning": "SMART: advertencia crítica reportada por SSD" + }, + "gauge": { + "cpuUsage": "Uso de CPU", + "cpuTemperature": "Temperatura de CPU", + "memoryUsage": "Uso de memoria", + "gpuUsage": "Uso de GPU {name}" }, - "memory": {}, "error": { "internalServerError": "Error al recuperar el estado de salud" }, "cluster": { - "summary": { - "cpu": "CPU", - "memory": "RAM" - }, "resource": { "node": { "name": "Nodos" @@ -2209,8 +3364,6 @@ "table": { "header": { "name": "Nombre", - "cpu": "CPU", - "memory": "RAM", "node": "Nodo" } } @@ -2220,33 +3373,29 @@ "name": "Estadísticas de Docker", "description": "Estadísticas de tus contenedores (Este widget sólo puede ser añadido con privilegios de administrador)", "option": { - "columns": { - "label": "Columnas a mostrar" + "endpointIds": { + "label": "Entornos Docker", + "description": "Dejar vacío para mostrar contenedores de cada entorno de Docker", + "placeholder": "Todos los entornos de Docker" }, - "enableRowSorting": { - "label": "Habilitar ordenar elementos" + "containerFilter": { + "label": "Contenedores a filtrar" + }, + "filterIsWhitelist": { + "label": "Filtrar como lista blanca" }, "defaultSort": { - "label": "Columna usada para ordenar por defecto", "option": { "name": "Nombre", "state": "Estado", "cpuUsage": "Uso de CPU", "memoryUsage": "Uso de memoria" } - }, - "descendingDefaultSort": { - "label": "Invertir orden" - }, - "columnOrder": { - "label": "Orden de columnas" - }, - "columnWidths": { - "label": "Ancho de columnas" } }, "error": { "internalServerError": "No se pudo obtener las estadísticas de los contenedores", + "endpointsUnavailable": "Los extremos de Docker no están disponibles", "layoutSaveTitle": "", "layoutSaveMessage": "" }, @@ -2255,7 +3404,6 @@ } }, "coolify": { - "name": "Coolify", "description": "Resumen de su instancia de Coolify con servidores y aplicaciones", "option": { "showServers": { @@ -2281,17 +3429,49 @@ "internalServerError": "No se pudieron obtener los datos de Coolify" }, "server": { - "buildServer": "Construir" + "buildServer": "Construir", + "resourceCounts": "{applications, plural, one {# aplicación} other {# aplicaciones}} / {services, plural, one {# servicio} other {# servicios}}", + "reachability": "Habilidad", + "usability": "Usabilidad" + }, + "source": { + "url": "Fuente: {url}", + "unavailable": "{source}: unavailable" }, "instances": { "title": "Instancias" + }, + "action": { + "openResource": "Abrir {name}", + "openLogs": "Abrir registros {name}", + "showIp": "Mostrar dirección IP", + "hideIp": "Ocultar dirección IP" + }, + "status": { + "running": "En ejecución", + "stopped": "Detenido", + "exited": "Finalizado", + "starting": "Iniciando", + "restarting": "Reiniciando", + "unknown": "Desconocido", + "online": "En línea", + "offline": "Desconectado", + "reachable": "Alcanzable", + "unreachable": "Inalcanzable", + "usable": "Usable", + "unusable": "Inutilizable" } }, "vpn": { "name": "VPN", "description": "", "serviceUnavailable": "VPN no disponible", - "option": {} + "status": { + "running": "En ejecución", + "notRunning": "No ejecutándose", + "unavailable": "Unavailable", + "vpn": "VPN: {status}" + } }, "ups": { "name": "SAI", @@ -2318,14 +3498,19 @@ "runtime": "", "load": "Carga", "input": "Entrada", - "output": "Salida" + "output": "Salida", + "batteryVoltage": "Tensión de batería", + "power": "Potencia", + "temperature": "Temperatura", + "manufacturer": "Fabricante", + "model": "Modelo", + "serial": "Serial" }, "error": { "internalServerError": "Error al obtener los datos del SAI" } }, "tracearr": { - "name": "Tracearr", "description": "Monitoreo de servidores multimedia mejorado con información detallada de flujo y transcodificación", "option": { "showStreams": { @@ -2413,10 +3598,7 @@ "label": "Evento", "description": "Mostrar ocurrencias totales de un evento específico", "placeholder": "Seleccione un evento", - "loading": "Cargando eventos...", - "noEvents": "No se encontraron eventos", - "none": "Ningún evento", - "configureWebsiteFirst": "Seleccione un sitio web primero para cargar eventos" + "none": "Ningún evento" }, "chartType": { "label": "Tipo de gráfico", @@ -2447,26 +3629,21 @@ "eventNames": { "label": "", "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "configureWebsiteFirst": "" + "placeholder": "" }, "topCount": { "label": "", "description": "" + }, + "events": { + "loading": "Cargando eventos...", + "noEvents": "No se encontraron eventos", + "configureWebsiteFirst": "Seleccione un sitio web primero para cargar eventos" } }, "event": { - "occurrences": "", "label": "" }, - "topPages": { - "direct": "" - }, - "topReferrers": { - "direct": "" - }, "events": { "selectPrompt": "" }, @@ -2475,6 +3652,9 @@ "noWebsite": "", "noData": "", "internalServerError": "" + }, + "top": { + "direct": "Directo" } }, "common": { @@ -2502,7 +3682,8 @@ }, "integration": { "noData": "No se encontró integración", - "description": "Haz clic para crear una nueva integración" + "description": "Haz clic para crear una nueva integración", + "manage": "Administrar integraciones" }, "app": { "noData": "No se encontraron aplicaciones", @@ -2513,7 +3694,61 @@ "noIntegration": "No se ha seleccionado ninguna integración", "noData": "No hay datos de integración disponibles" }, - "option": {} + "integrationDisconnected": "No hay datos disponibles, todas las integraciones desconectadas", + "updatedAt": "Actualizado a {date}", + "title": { + "label": "Título" + }, + "openInNewTab": { + "label": "Abrir en una nueva pestaña" + }, + "showTitle": { + "label": "Mostrar título" + }, + "weatherLocation": { + "label": "Ubicación para el clima" + }, + "layout": { + "label": "Diseño", + "option": { + "horizontal": "Horizontal", + "vertical": "Vertical", + "grid": "Cuadrícula" + } + }, + "select": { + "loading": "Cargando...", + "loadError": "Error al cargar las opciones" + }, + "dateFormat": { + "label": "Formato de la fecha", + "description": "Cómo debería ser la fecha" + }, + "visibleStorageVolumes": { + "label": "Volúmenes de almacenamiento visibles", + "description": "Sólo disponible cuando cada integración seleccionada es OpenMediaVault o Synology. Dejar en blanco para mostrar todos los volúmenes de almacenamiento detectados.", + "placeholder": "Seleccionar volúmenes de almacenamiento" + }, + "tableOptions": { + "columns": { + "label": "Columnas a mostrar" + }, + "columnOrder": { + "label": "Orden de columnas" + }, + "columnWidths": { + "label": "Ancho de columnas" + }, + "enableRowSorting": { + "label": "Habilitar ordenar elementos" + }, + "defaultSort": { + "label": "Columna usada para ordenar por defecto" + }, + "invertSorting": { + "label": "Invertir orden" + } + } }, "video": { "name": "Video en directo", @@ -2572,6 +3807,7 @@ "transcoding": "Transcodificando", "paused": "En pausa", "remaining": "{minutes} min restantes", + "seasonEpisode": "T{season} E{episode}", "metadata": { "title": "Estadísticas", "video": { @@ -2589,11 +3825,16 @@ "resolution": "Resolución", "target": "Códec de destino" } - } + }, + "unknownUser": "Usuario desconocido" + }, + "summary": { + "sessions": "{count, plural, one {# sesión} other {# sesiones}}", + "playing": "{count} en reproducción", + "transcoding": "Transcodificación {count}" } }, "paperlessNgx": { - "name": "Paperless-ngx", "description": "Resumen de su archivo de documentos Paperless-ngx", "documentsTotal": "Total de documentos", "documentsInbox": "Bandeja de entrada", @@ -2638,7 +3879,6 @@ } }, "patchmon": { - "name": "PatchMon", "description": "", "title": "Estadísticas de PatchMon", "totalHosts": "", @@ -2705,36 +3945,30 @@ "description": "" }, "hostsNeedingUpdatesWarningAt": { - "label": "", - "description": "" + "label": "" }, "hostsNeedingUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "" }, "securityUpdatesThresholdMode": { "label": "", "description": "" }, "securityUpdatesWarningAt": { - "label": "", - "description": "" + "label": "" }, "securityUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "" }, "hostsWithSecurityUpdatesThresholdMode": { "label": "", "description": "" }, "hostsWithSecurityUpdatesWarningAt": { - "label": "", - "description": "" + "label": "" }, "hostsWithSecurityUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "" }, "upToDateHostsThresholdMode": { "label": "", @@ -2753,12 +3987,10 @@ "description": "" }, "totalOutdatedPackagesWarningAt": { - "label": "", - "description": "" + "label": "" }, "totalOutdatedPackagesCriticalAt": { - "label": "", - "description": "" + "label": "" }, "showOsDistribution": { "label": "", @@ -2789,6 +4021,14 @@ "bars": "", "donut": "" } + }, + "threshold": { + "warningAt": { + "description": "Introduzca amarillo cuando el valor alcance este umbral" + }, + "criticalAt": { + "description": "Introduzca rojo cuando el valor alcance este umbral" + } } }, "error": { @@ -2796,12 +4036,12 @@ } }, "bazarr": { - "name": "Bazarr", "description": "", "episodes": "", "movies": "Películas restantes", "providers": "", "status": "", + "announcements": "Anuncios", "option": { "showMissingEpisodes": { "label": "", @@ -2848,7 +4088,8 @@ "users": "Usuarios", "photos": "Fotos", "videos": "Vídeos", - "storage": "Almacenamiento usado" + "storage": "Almacenamiento usado", + "albumLimit": "Álbumes más grandes (se muestra {count})" }, "immich-albumCarousel": { "name": "Álbum de Immich", @@ -2872,24 +4113,21 @@ } }, "description": "Presentación de fotos de un álbum de Immich", - "noPhotos": "No hay fotos en este álbum" + "noPhotos": "No hay fotos en este álbum", + "albumPhoto": "Foto del álbum", + "actions": { + "previousPhoto": "Foto anterior", + "nextPhoto": "Siguiente foto", + "pauseSlideshow": "Pause slideshow", + "resumeSlideshow": "Reanudar presentación", + "toggleSlideshow": "Pausar o reanudar presentación", + "photo": "Foto {number}" + } }, "downloads": { "name": "Cliente de descarga", "description": "Te permite ver y gestionar tus descargas tanto desde los clientes de Torrent como desde Usenet.", "option": { - "columns": { - "label": "Columnas a mostrar" - }, - "enableRowSorting": { - "label": "Habilitar ordenar elementos" - }, - "defaultSort": { - "label": "Columna usada para ordenar por defecto" - }, - "descendingDefaultSort": { - "label": "Invertir orden" - }, "showCompletedUsenet": { "label": "Mostrar entradas de Usenet marcadas como completadas" }, @@ -2914,12 +4152,6 @@ "limitPerIntegration": { "label": "Limitar elementos por integración", "description": "Esto limitará el número de elementos mostrados por integración, no globalmente" - }, - "columnOrder": { - "label": "" - }, - "columnWidths": { - "label": "" } }, "errors": { @@ -2951,7 +4183,7 @@ }, "id": { "columnTitle": "ID", - "detailsTitle": "" + "detailsTitle": "ID" }, "integration": { "columnTitle": "Integración" @@ -3080,6 +4312,10 @@ "mediaRequests-requestList": { "name": "Lista de solicitudes de medios", "description": "Mostrar una lista de todas las solicitudes multimedia de tu instancia de Overseerr o Jellyseerr", + "empty": { + "title": "Aún no hay peticiones de medios", + "description": "Busca una película o una serie para iniciar una solicitud." + }, "option": { "linksTargetNewTab": { "label": "Abrir enlaces en una pestaña nueva" @@ -3113,12 +4349,16 @@ "failed": "Fallido", "completed": "Completado" }, + "unknown": "Desconocido", "toBeDetermined": "Por determinar" }, "mediaRequests-requestStats": { "name": "Estadísticas de solicitudes de medios", "description": "Estadísticas sobre tus solicitudes multimedia", - "option": {}, + "empty": { + "title": "Aún no hay actividad de solicitud", + "description": "Las estadísticas aparecerán después de la primera solicitud de medios." + }, "titles": { "stats": { "main": "Estadísticas Multimedia", @@ -3128,8 +4368,7 @@ "declined": "Ya rechazado", "available": "Ya disponible", "tv": "Solicitudes de TV", - "movie": "Solicitudes de películas", - "total": "Total" + "movie": "Solicitudes de películas" }, "users": { "main": "Clasificación de usuarios", @@ -3155,7 +4394,6 @@ }, "currentIndex": "{start}-{end} de {total}", "healthCheck": { - "title": "Comprobación de salud", "queued": "En cola", "status": { "healthy": "Saludable", @@ -3164,41 +4402,36 @@ }, "panel": { "statistics": { - "empty": "Vacío", - "transcodes": "Transcodificaciones", - "transcodesCount": "Transcodificaciones", - "healthChecksCount": "Comprobaciones de salud", "filesCount": "Archivos", "savedSpace": "Espacio ahorrado", - "healthChecks": "Comprobaciones de salud", "videoCodecs": "Códecs", "videoContainers": "Contenedores", "videoResolutions": "Resoluciones" }, "workers": { - "empty": "Vacío", "table": { - "file": "Archivo", "eta": "Tiempo restante", - "progress": "Progreso", - "transcode": "Transcodificar", - "healthCheck": "Comprobación de salud" + "progress": "Progreso" } }, "queue": { - "empty": "Vacío", "table": { - "file": "Archivo", - "size": "Tamaño", - "transcode": "Transcodificar", - "healthCheck": "Comprobación de salud" + "size": "Tamaño" } + }, + "common": { + "empty": "Vacío", + "file": "Archivo", + "healthCheck": "Comprobación de salud", + "transcode": "Transcodificación", + "transcodes": "Transcodificaciones", + "healthChecks": "Comprobaciones de salud" } } }, "mediaMissing": { "name": "", - "description": "", + "description": "Muestra películas, episodios y libros en cola de {radarr}, {sonarr} y {bindery}", "option": { "showMissing": { "label": "" @@ -3216,7 +4449,8 @@ }, "type": { "movie": "Película", - "episode": "Episodio" + "episode": "Episodio", + "book": "Reservar" }, "empty": { "missing": "", @@ -3247,6 +4481,13 @@ "showPosterImage": { "label": "Mostrar imagen del póster" } + }, + "error": { + "allFeedsFailed": "No se pueden cargar las fuentes RSS. Compruebe las URL del feed e inténtelo de nuevo." + }, + "warning": { + "partial": "{count, plural, one {# RSS feed no pudo ser cargado} other {# RSS feeds no pudieron ser cargados}}", + "stale": "No se han podido actualizar las fuentes RSS. Mostrar entradas cargadas previamente." } }, "releases": { @@ -3322,17 +4563,8 @@ "label": "Expresión Regular" } }, - "edit": { - "label": "Editar" - }, "editForm": { - "title": "Editar Repositorio", - "cancel": { - "label": "Cancelar" - }, - "confirm": { - "label": "Confirmar" - } + "title": "Editar Repositorio" }, "importForm": { "title": "Importar desde Docker" @@ -3349,8 +4581,7 @@ "label": "", "token": "", "configured": "", - "notConfigured": "", - "save": "" + "notConfigured": "" } } }, @@ -3377,17 +4608,32 @@ "noProviderResponse": "No hay respuesta del proveedor", "unexpected": "" } - } + }, + "expandDetails": "Mostrar detalles de {name}", + "collapseDetails": "Ocultar detalles de {name}" }, "networkControllerSummary": { - "option": {}, - "card": { - "vpn": { - "countConnected": "{count} conectado" + "advanced": { + "updated": "Actualizado", + "metric": { + "latency": "Latencia", + "ping": "Latencia", + "uptime": "Tiempo de actividad", + "users": "Users", + "guests": "Invitados" } }, + "card": { + "vpn": { + "countConnected": "{count, plural, one {# conectada} other {# conectada}}", + "label": "VPN" + }, + "wan": "WAN", + "web": "Web", + "wifi": "Wi-Fi", + "lan": "LAN" + }, "error": { - "integrationsDisconnected": "No hay datos disponibles, todas las integraciones desconectadas", "unknownContentOption": "Opción de contenido desconocida para el widget de resumen del controlador de red: " }, "name": "Resumen del Controlador de Red", @@ -3424,7 +4670,6 @@ } }, "error": { - "integrationsDisconnected": "No hay datos disponibles, todas las integraciones desconectadas", "unknownContentOption": "Opción de contenido desconocida para el widget de estado de red: " }, "name": "Estado de Red", @@ -3454,7 +4699,6 @@ "versiontitle": "Versiones", "cputitle": "Uso de CPU", "memorytitle": "Uso de memoria", - "cpu": "CPU", "memory": "Memoria", "interfaces": { "name": "nombre", @@ -3462,6 +4706,16 @@ "recv": "Recibido", "title": "Interfaces de red" } + }, + "empty": { + "noInterfaces": "Aún no hay datos de interfaz de red" + }, + "versionUnknown": "Versión desconocida", + "metricAccessible": "{metric}: {value}%, {status}", + "status": { + "normal": "Normal", + "warning": "Advertencia", + "critical": "Crítico" } }, "notifications": { @@ -3471,8 +4725,21 @@ "option": { "hideLogos": { "label": "" + }, + "messageFormat": { + "label": "Formato de mensaje", + "option": { + "auto": "Automático", + "plain": "Texto simple", + "markdown": "Markdown", + "html": "HTML" + } } - } + }, + "openService": "Abrir servicio de notificación", + "deleteNotification": "Eliminar notificación de Gotify", + "deleteFailed": "No se pudo eliminar la notificación", + "deleteFailedMessage": "La notificación no pudo ser eliminada. Por favor, inténtalo de nuevo." }, "speedtestTracker": { "name": "Speedtest Tracker", @@ -3514,7 +4781,6 @@ } }, "uptimeKuma": { - "name": "Uptime Kuma", "description": "", "option": { "showAverageUptime": { @@ -3551,10 +4817,14 @@ }, "error": { "internalServerError": "" + }, + "status": { + "up": "Subida total", + "down": "Velocidad de Descarga", + "paused": "En pausa" } }, "traefik": { - "name": "Traefik", "description": "", "option": { "showTcp": { @@ -3575,7 +4845,6 @@ }, "resource": { "routers": "", - "services": "Servicios", "middlewares": "" }, "status": { @@ -3585,7 +4854,20 @@ }, "error": { "internalServerError": "" - } + }, + "resourceType": { + "router": "Enrutador", + "service": "Servicio", + "middleware": "Medios" + }, + "resourceStatus": { + "enabled": "Habilitado", + "disabled": "Deshabilitado", + "warning": "Advertencia", + "error": "Error", + "unknown": "Desconocido" + }, + "failedEndpoint": "Error: {endpoint}" }, "audioStats": { "name": "", @@ -3651,9 +4933,7 @@ "label": "Gráficos visibles", "description": "Selecciona los gráficos que quieres que sean visibles.", "option": { - "cpu": "CPU", "memory": "Memoria", - "gpu": "GPU", "network": "Red" } }, @@ -3668,12 +4948,11 @@ } }, "card": { - "cpu": "CPU", "memory": "MEM", - "gpu": "GPU", "network": "RED", "up": "ENCENDIDO", - "down": "APAGADO" + "down": "APAGADO", + "memoryTooltip": "{used} / {available} ({percent}%)" } }, "systemDisks": { @@ -3699,151 +4978,88 @@ }, "showBackgroundBar": { "label": "Mostrar la barra de uso en segundo plano" - }, - "visibleStorageVolumes": { - "label": "", - "description": "", - "placeholder": "" } }, "status": { - "unhealthy": "Poco sano" + "unhealthy": "Poco sano", + "smart": "SMART", + "free": "{percentage}% libre" + } + }, + "customApi": { + "name": "Widget personalizado", + "description": "Procesar una definición JSX personalizada configurada.", + "customJsx": { + "noTemplate": "No se ha configurado ninguna plantilla JSX.", + "templateWarnings": "{count} advertencias de plantilla:", + "requestIdRequired": "Este control de red requiere una solicitud con nombre.", + "unsavedPreview": "Ejecute la prueba de solicitud inicial en el editor antes de probar solicitudes nombradas.", + "invalidParams": "Los parámetros de la solicitud no son válidos.", + "loading": "Cargando solicitud...", + "loadRequest": "Cargar solicitud", + "requestFailed": "La solicitud falló.", + "retry": "Reintentar solicitud", + "actionCompleted": "Acción completada con éxito.", + "actionSimulated": "Acción simulada; no se envió ninguna solicitud.", + "actionsDisabledEditMode": "Las acciones están desactivadas mientras el tablero está en modo edición.", + "widgetItemUnavailable": "Este elemento del widget no está disponible.", + "toggle": "Cambiar", + "copied": "Copiado", + "confirmDelete": "Confirme esta acción destructiva." + }, + "option": { + "definitionId": { + "label": "Widget personalizado" + }, + "refreshInterval": { + "label": "", + "description": "" + } + }, + "noDefinition": "", + "definitionNotFound": "Widget personalizado no disponible", + "migrationRequired": "Este widget personalizado heredado se conserva, pero debe migrarse a JSX personalizado v2 desde Administrar widgets personalizados antes de que se pueda ejecutar.", + "manageMigration": "Abrir Administrar widgets personalizados", + "contactAdmin": "Contacte a un administrador.", + "configurationNeedsRepair": "Las opciones de este widget han cambiado. Edite el widget para reparar su configuración.", + "removeFromBoard": "Eliminar del tablero", + "editModePending": "Guardar el tablero para cargar este widget.", + "picker": { + "group": "Widgets JSX personalizados", + "empty": "No se encontraron widgets personalizados", + "preview": "Vista previa", + "sources": "{count, plural, one {# fuente} other {# fuentes}}", + "requests": "{count, plural, one {# solicitud} other {# solicitudes}}", + "migrationRequired": "Migración requerida", + "migrationDescription": "Esto colocó el widget v1 no se puede ejecutar todavía. Copia su prompt redactado a un LLM, luego pega la única respuesta JSON en Homarr.", + "manageMigration": "Abrir Administrar widgets personalizados", + "contactAdmin": "Contacte a un administrador." + }, + "configuration": { + "needsAttention": "La configuración necesita atención: {message}", + "advancedOptions": "Opciones avanzadas", + "invalidJson": "JSON no válido" } }, "beszelSystemTable": { "name": "", "description": "", "option": { - "statusFilter": { - "label": "" - }, "sortBy": { "label": "" }, "sortDirection": { "label": "" - }, - "showCpu": { - "label": "" - }, - "showMemory": { - "label": "" - }, - "showDisk": { - "label": "" - }, - "showGpu": { - "label": "" - }, - "showLoadAvg": { - "label": "" - }, - "showNet": { - "label": "" - }, - "showTemp": { - "label": "" - }, - "showBattery": { - "label": "" - }, - "showServices": { - "label": "" - }, - "showUptime": { - "label": "" - }, - "showAgent": { - "label": "" - }, - "columnOrder": { - "label": "" - }, - "columnWidths": { - "label": "" } }, - "noRecords": "", "error": { - "internalServerError": "", "layoutSaveTitle": "", "layoutSaveMessage": "" - }, - "column": { - "system": "", - "cpu": "", - "memory": "", - "disk": "Disco", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "Temperatura", - "battery": "", - "services": "", - "uptime": "", - "agent": "Agente" } }, "beszelSystemGrid": { "name": "", - "description": "", - "option": { - "statusFilter": { - "label": "" - }, - "showCpu": { - "label": "" - }, - "showMemory": { - "label": "" - }, - "showDisk": { - "label": "" - }, - "showGpu": { - "label": "" - }, - "showLoadAvg": { - "label": "" - }, - "showNet": { - "label": "" - }, - "showTemp": { - "label": "" - }, - "showBattery": { - "label": "" - }, - "showServices": { - "label": "" - }, - "showUptime": { - "label": "" - }, - "showAgent": { - "label": "" - } - }, - "error": { - "internalServerError": "" - }, - "empty": { - "noSystems": "" - }, - "metric": { - "cpu": "", - "memory": "Memoria", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" - } + "description": "" }, "beszelAlerts": { "name": "", @@ -3857,11 +5073,12 @@ } }, "empty": "", - "error": { - "internalServerError": "" - }, "history": "Historial", "resolved": "Resuelto", + "alertDescription": { + "statusDuration": "Abajo por {minutes} min", + "threshold": "Excede {value} más de {minutes} min" + }, "status": { "triggered": "Desencadenado", "ok": "" @@ -3908,16 +5125,16 @@ "noSystems": "" }, "error": { - "internalServerError": "", "liveConnectionFailed": "", "switchToHistorical": "", - "systemNotFound": "" + "systemNotFound": "", + "selectionSaveTitle": "No se puede guardar la selección", + "selectionSaveMessage": "No se ha podido guardar la selección de su sistema o período de tiempo. Por favor, inténtelo de nuevo." }, "chart": { "cpu": { "title": "", - "subtitle": "Promedio de uso de CPU en el sistema", - "series": "CPU" + "subtitle": "Promedio de uso de CPU en el sistema" }, "memory": { "title": "Uso de memoria", @@ -3959,39 +5176,550 @@ "title": "", "subtitle": "" } + }, + "period": { + "live": "Vivo", + "oneHour": "1 h", + "twelveHours": "12h", + "oneDay": "24h", + "oneWeek": "1 s", + "thirtyDays": "30d" } }, - "wud": { - "name": "Qué hay de nuevo Docker", - "description": "Mostrar cuántos contenedores vistos tienen actualizaciones disponibles.", - "title": "Qué hay de nuevo Docker", - "monitored": "Monitoreado", - "updatesAvailable": "{count, plural, one {# actualización disponible} other {# actualizaciones disponibles}}", - "updateAvailable": "Actualización disponible", - "openReleaseNotes": "Notas de la versión abierta", + "assistant": { + "name": "Asistente", + "description": "Mantén una conversación completa con el asistente directamente en tu tablero.", + "unavailable": { + "title": "Asistente no disponible", + "description": "Inicia sesión y solicita a un administrador que configure el Asistente desde el panel de administración." + }, + "compact": { + "title": "Asistente", + "description": "Redimensionar este widget para chatear aquí, o abrir la conversación completa.", + "open": "Asistente abierto", + "openTitle": "Apertura del asistente en el panel lateral", + "openDescription": "La conversación se mantiene en una sola superficie activa.", + "returnToWidget": "Devolver la conversación a este widget", + "otherWidgetTitle": "Asistente activo en otro widget", + "otherWidgetDescription": "Sólo una superficie de conversación permanece activa a la vez.", + "useHere": "Usar el asistente en este widget" + } + }, + "beszel": { + "error": { + "internalServerError": "No se puede conectar a Beszel. Compruebe su configuración de integración." + }, + "empty": { + "noSystems": "No se encontraron sistemas" + }, + "options": { + "statusFilter": { + "label": "Filtro de estado" + }, + "showCpu": { + "label": "Mostrar CPU" + }, + "showMemory": { + "label": "Mostrar memoria" + }, + "showDisk": { + "label": "Mostrar disco" + }, + "showGpu": { + "label": "Mostrar GPU" + }, + "showLoadAvg": { + "label": "Mostrar promedio de carga" + }, + "showNet": { + "label": "Mostrar red" + }, + "showTemp": { + "label": "Mostrar temperatura" + }, + "showBattery": { + "label": "Mostrar nivel de batería" + }, + "showServices": { + "label": "Mostrar servicios" + }, + "showUptime": { + "label": "Mostrar tiempo de actividad" + }, + "showAgent": { + "label": "Mostrar versión del agente" + } + }, + "metric": { + "system": "Sistema", + "source": "Integración", + "hostname": "Nombre de host", + "cpuModel": "Modelo de CPU", + "cores": "Núcleos", + "memoryTotal": "Memoria total", + "memory": "Memoria", + "disk": "Disco", + "loadAvg": "Cargar Media", + "net": "Neto", + "temp": "Temperatura", + "battery": "Batio", + "uptime": "Tiempo de actividad", + "agent": "Agente" + } + }, + "llamacpp": { + "name": "llama.cpp", + "description": "Muestra la salud, el modelo cargado y la velocidad de generación de tu servidor llama.cpp local.", + "title": "llama.cpp", + "status": { + "unhealthy": "Poco saludable ({status})" + }, + "idle": "Inactivo", + "speedTooltip": { + "current": "Velocidad de generación actual", + "average": "Velocidad media de generación desde el inicio", + "request": "Velocidad media desde el inicio de esta solicitud" + }, + "busy": "{count, plural, one {# solicitud ejecutando} other {# solicitudes ejecutando}}", + "modelInfo": { + "context": "Contexto", + "size": "Tamaño del archivo", + "parameters": "Parámetros", + "model": "Modelo", + "quantization": "Cuantificación" + }, + "stats": { + "tokensProcessed": "Tokens procesados", + "contextUsage": "Contexto / Uso de KV", + "cacheHitRate": "Tasa de éxito del cache de Prompt", + "tokensGenerated": "Tokens generados" + }, + "error": { + "unreachable": "llama-servidor no accesible" + }, + "unit": { + "speed": "{value} t/s", + "parameters": "{value}B", + "none": "—", + "speedShort": "t/s" + }, "option": { "showTitle": { "label": "Mostrar título" }, - "showRing": { - "label": "Mostrar anillo de actualización" + "showModelInfo": { + "label": "Mostrar información del modelo" }, - "layout": { - "label": "Diseño", + "showContextUsage": { + "label": "Mostrar uso del contexto" + }, + "showCacheHitRate": { + "label": "Mostrar tasa de éxito de caché" + }, + "showSpeedStats": { + "label": "Mostrar estadísticas de velocidad" + }, + "showRequests": { + "label": "Mostrar carga de solicitud" + }, + "showTokenStats": { + "label": "Mostrar tokens totales" + }, + "showSpeculative": { + "label": "Mostrar decodificación especulativa" + } + }, + "advanced": { + "promptSpeed": "Velocidad del aviso", + "avgSpeed": "Generación media", + "requests": "Solicitudes", + "deferred": "Aplazado", + "slots": "Ranuras {processing}/{total} ocupadas", + "speculative": "Decodificación especulativa", + "avgPrompt": "Promedio", + "specDrafts": "Espec. borradores", + "specAccepted": "Especificación. Tokens aceptados", + "specDraftTokens": "Espec. fichas de borrador" + } + }, + "stats": { + "name": "Estadísticas", + "description": "Combina las estadísticas de tus integraciones en un widget configurable.", + "configure": "Configurar métricas", + "refresh": "Actualizar estadísticas", + "empty": "Abre los ajustes del widget, selecciona integraciones, luego añade métricas.", + "editorHelp": "Agrega métricas de las integraciones seleccionadas para este widget. Los cambios se guardan con tu tablero.", + "source": "Integración", + "metric": "Métrica", + "noMetrics": "No hay estadísticas disponibles para esta integración", + "add": "Añadir métrica", + "label": "Etiqueta personalizada", + "hidden": "Oculto", + "compact": "Números de pacto", + "moveUp": "Mover hacia arriba", + "moveDown": "Mover hacia abajo", + "remove": "Eliminar métrica", + "loading": "Cargando…", + "unavailable": "Unavailable", + "refreshFailed": "Error al actualizar, mostrando datos guardados", + "stale": "Datos guardados — actualizar para actualizar", + "table": { + "value": "Valor", + "status": "Estado" + }, + "option": { + "table": { + "label": "Vista de tabla" + }, + "rows": { + "label": "Filas de pacto" + }, + "showIcon": { + "label": "Mostrar icono de origen" + }, + "spacing": { + "label": "Espaciado", "option": { - "horizontal": { - "label": "Horizontal" + "xs": { + "label": "Compacto" }, - "vertical": { - "label": "Vertical" + "sm": { + "label": "Confortable" + }, + "md": { + "label": "Espacioso" } } }, - "showUpdateList": { - "label": "Mostrar lista de actualización del contenedor", - "description": "Lista cada contenedor supervisado que tiene una actualización de imagen disponible" + "entries": { + "label": "Métricas" + }, + "plain": { + "label": "Eliminar fondos de tarjeta" } - } + }, + "fetchFailed": "No se pueden recuperar las estadísticas", + "viewOptions": "Personalizar esta vista", + "moreMetrics": "{count} más en la vista avanzada", + "localHelp": "Diseño, formato y visibilidad sólo se aplican a esta vista. Los ajustes del tablero compartido permanecen iguales.", + "plain": "Eliminar fondos de tarjeta", + "resetView": "Reiniciar vista", + "allHidden": "Todas las métricas están ocultas en esta vista. Utilice Personalizar esta vista para restaurarlas." + }, + "wazuh": { + "target": { + "api": "API del servidor Wazuh", + "indexer": "Índice Wazuh", + "wazuh": "Wazuh" + }, + "severity": { + "low": "Baja", + "medium": "Mediano", + "high": "Alta", + "critical": "Crítico" + }, + "error": { + "unauthorized": { + "title": "{target} rechazó las credenciales", + "description": "Compruebe el nombre de usuario y la contraseña guardados en la integración de Wazuh. La API del servidor (puerto 55000) y el indexador (puerto 9200) utilizan usuarios separados." + }, + "certificate": { + "title": "El certificado {target} no es de confianza", + "description": "Wazuh utiliza un certificado autofirmado de forma predeterminada. Ejecute \"Probar conexión\" en la integración y confíe en el certificado, o añada su CA en Configuración → Certificados." + }, + "unreachable": { + "title": "No se puede llegar a {target}", + "description": "El host rechazó o eliminó la conexión. Comprueba la URL, el puerto y el firewall. El indexador sólo escucha en localhost en una instalación por defecto todo en uno." + }, + "timeout": { + "title": "{target} agotado", + "description": "No hay respuesta en 15 segundos. El servicio puede estar sobrecargado o la dirección puede estar equivocada." + }, + "status": { + "title": "{target} devolvió un error", + "description": "La solicitud falló con el estado HTTP {status}." + }, + "invalidResponse": { + "title": "Respuesta inesperada de {target}", + "description": "Compruebe que la URL apunta a la API o indexador del servidor Wazuh y no al panel de control." + }, + "indexerRequired": { + "title": "Se requieren credenciales de indexador Wazuh", + "description": "Las alertas, vulnerabilidades y eventos de integridad de archivos se leen desde el indexador Wazuh. Añada una URL, nombre de usuario y contraseña del indexador a la integración." + }, + "unknown": { + "title": "No se pudo cargar los datos de {target}", + "description": "Revisa los registros de Homarr para más detalles." + } + }, + "range": { + "1h": "1 h", + "24h": "24h", + "7d": "7d", + "30d": "30d" + }, + "levelTooltip": "Nivel de regla {level} ({severity})" + }, + "wazuhAgents": { + "name": "Agentes Wazuh", + "description": "Lista ordenable de agentes de Wazuh con estado, sistema operativo, versión y último keepalive", + "option": { + "statusFilter": { + "label": "Mostrar agentes" + }, + "sortBy": { + "label": "Ordenar por" + }, + "showVersion": { + "label": "Mostrar columna de versión Wazuh" + }, + "showGroups": { + "label": "Mostrar columna de grupos" + } + }, + "title": "Agentes", + "total": "{count} agentes", + "status": { + "active": "Activo", + "disconnected": "Desconectado", + "neverConnected": "Nunca conectado", + "pending": "Pendiente" + }, + "statusLabel": { + "active": "Activo", + "disconnected": "Desconectado", + "never_connected": "Nunca conectado", + "pending": "Pendiente", + "unknown": "Desconocido" + }, + "live": "Vivo", + "snapshot": "Instantánea de hace {age}", + "snapshotHint": "Lea desde el panel de control de Wazuh snapshot (monitoreo de wazuh) tomado en {time}. Añada credenciales API del servidor para datos en vivo.", + "staleSnapshot": "La instantánea del agente de {time} está desactualizada. Compruebe que el trabajo de monitoreo del panel de control de Wazuh se esté ejecutando, o añada credenciales de API del servidor.", + "noDisconnected": "Todos los agentes están conectados", + "empty": "Ningún agente coincide con este filtro", + "column": { + "status": "Estado", + "name": "Nombre de la tarea", + "ip": "IP", + "os": "Sistema Operativo", + "version": "Versión", + "lastKeepAlive": "Mantener", + "groups": "Grupos" + }, + "outdated": "Anterior a la versión más reciente del agente ({version})" + }, + "wazuhAlerts": { + "name": "Feed de alertas de Wazuh", + "description": "Alertas recientes de Wazuh con nivel, técnicas MITRE ATT&CK, agente y fuente IP", + "option": { + "minLevel": { + "label": "Nivel mínimo de regla", + "description": "Niveles de Wazuh: 0-6 bajo, 7-11, mediano, 12-14 alto, 15+ crítico" + }, + "hours": { + "label": "Ventana de tiempo (horas)" + }, + "limit": { + "label": "Número de alertas" + }, + "showMitre": { + "label": "Show MITRE ATT&CK techniques" + }, + "showAgent": { + "label": "Mostrar agente" + }, + "showSourceIp": { + "label": "Mostrar IP origen" + }, + "showRuleId": { + "label": "Mostrar ID de regla" + } + }, + "title": "Alertas · nivel {level}+ · {hours}h", + "empty": "No hay alertas a este nivel. Todo en silencio.", + "rule": "Regla {id}", + "openInDashboard": "Abrir esta alerta en el panel de control de Wazuh" + }, + "wazuhSummary": { + "name": "severidad de alerta de Wazuh", + "description": "Desglose de gravedad de alerta con una tendencia respecto al período anterior", + "option": { + "range": { + "label": "Rango de tiempo" + }, + "showTrend": { + "label": "Mostrar tendencia frente al período anterior" + }, + "showFooter": { + "label": "Mostrar pie de página" + } + }, + "title": "Gravedad de alerta · {range}", + "alerts": "alertas", + "none": "Sin alertas", + "trend": { + "new": "nueva", + "tooltip": "Período anterior: {previous}" + }, + "previous": "{range}anterior : {count}", + "maxLevel": "Nivel máximo {level}", + "health": "Salud del indexador: {status}", + "manager": "Gestor {version}" + }, + "wazuhTimeline": { + "name": "Wazuh alerts timeline", + "description": "Gráfico acumulado de alertas de Wazuh a lo largo del tiempo por gravedad", + "option": { + "range": { + "label": "Rango de tiempo" + }, + "interval": { + "label": "Intervalo" + }, + "chartType": { + "label": "Tipo de gráfico" + }, + "yScale": { + "label": "Escala del eje Y", + "description": "La raíz de Square mantiene las alertas altas y críticas visibles junto a miles de bajas" + }, + "minLevel": { + "label": "Nivel mínimo de regla" + }, + "showLegend": { + "label": "Mostrar leyenda con totales" + } + }, + "title": "Alertas timeline · {range}", + "total": "Alertas {count}", + "interval": "por {interval}" + }, + "wazuhTopList": { + "name": "Lista superior de Wazuh", + "description": "Principales reglas, agentes, fuentes IP o MITRE ATT&CK y técnicas por conteo de alertas", + "option": { + "kind": { + "label": "Rango" + }, + "range": { + "label": "Rango de tiempo" + }, + "limit": { + "label": "Número de entradas" + }, + "minLevel": { + "label": "Nivel mínimo de regla" + }, + "showBars": { + "label": "Mostrar barras" + } + }, + "title": { + "rules": "Mejores reglas · {range}", + "agents": "Top agentes · {range}", + "sourceIps": "Ids principales de origen · {range}", + "mitreTactics": "Tácticas MITRE · {range}", + "mitreTechniques": "MITRE techniques · {range}" + }, + "empty": { + "rules": "No hay alertas en este período", + "agents": "No hay alertas en este período", + "sourceIps": "No hay alertas con IP fuente en este período", + "mitreTactics": "No hay alertas asignadas a MITRE ATT&CK en este período", + "mitreTechniques": "No hay alertas asignadas a MITRE ATT&CK en este período" + }, + "totalTooltip": "{count} alertas coincidentes", + "private": "LAN", + "public": "Pública", + "agents": "Visto en agentes {count}", + "others": "{count} alertas más en otras entradas" + }, + "wazuhVulnerabilities": { + "name": "vulnerabilidades Wazuh", + "description": "Contadores de vulnerabilidad, mejores currículos y los agentes más vulnerables", + "option": { + "cveOrder": { + "label": "Clasificar CVEs por" + }, + "minSeverity": { + "label": "severidad CVE" + }, + "cveLimit": { + "label": "Número de currículos" + }, + "agentLimit": { + "label": "Número de agentes" + }, + "showAgents": { + "label": "Mostrar los agentes más vulnerables" + } + }, + "title": "Vulnerabilidades", + "topCves": "Top CVEs", + "score": "Puntaje", + "agentsShort": "Agentes", + "topAgents": "Agentes más vulnerables", + "criticalHigh": "Crítico / alto", + "totalTooltip": "{count} hallazgos sobre agentes de {agents}", + "affected": "{count} agentes", + "empty": "No hay vulnerabilidades detectadas", + "distribution": "Distribución de la gravedad. No se muestran los hallazgos de {unscored} sin puntuación.", + "worst": "Peor: {id} ({score}) en agentes {agents}" + }, + "wazuhFim": { + "name": "Integridad del archivo Wazuh", + "description": "Eventos recientes de monitorización de integridad del archivo (syscheck)", + "option": { + "range": { + "label": "Rango de tiempo" + }, + "event": { + "label": "Eventos" + }, + "limit": { + "label": "Número de eventos" + }, + "includeRegistry": { + "label": "Incluye eventos de registro de Windows" + } + }, + "title": "Integridad del archivo · {range}", + "event": { + "added": "Fecha Agregada", + "modified": "Modificado", + "deleted": "Eliminado", + "unknown": "Cambiado" + }, + "empty": "No hay eventos de integridad del archivo en este período", + "user": "por {user}", + "registry": "Registro" + }, + "wazuhAuthFailures": { + "name": "Fallos de autenticación Wazuh", + "description": "Fallo de inicio de sesión y alertas de fuerza bruta por agente con líneas de chispas por hora", + "option": { + "hours": { + "label": "Ventana de tiempo (horas)" + }, + "limit": { + "label": "Número de agentes" + }, + "showSourceIps": { + "label": "Mostrar la fuente principal" + } + }, + "title": "Fallos de autenticación · {hours}h", + "seriesTooltip": "Todos los agentes de los últimos {hours}h", + "peak": "Pico {count}/cubo", + "empty": "No hay entradas fallidas en este período", + "failed": "Inicio de sesión fallido", + "failedHint": "Fallos de autenticación única (sshd, PAM, inicio de sesión de Windows, usuarios no válidos)", + "bruteForce": "Fuerza bruta", + "bruteForceHint": "Reglas correlacionadas de fuerza bruta (múltiples fallos en un corto período, MITRE T1110)", + "sourceIps": "Ids. de origen", + "ipTooltip": "{ip}: {count} fallos", + "bruteForceCount": "Fuerza bruta {count}" } }, "widgetPreview": { @@ -4004,7 +5732,76 @@ } }, "board": { + "emptyState": { + "title": "Crea tu primera vista", + "description": "Añade un widget o una aplicación, o conecta un servicio y utiliza sus datos en este foro.", + "addWidget": "Añadir widget", + "addApp": "Añadir app", + "connectService": "Conectar servicio" + }, + "setupChecklist": { + "title": "Hacer útil este tablero", + "description": "Recoge donde lo dejaste. Progreso sigue el contenido ya en este foro.", + "collapse": "Contraer lista de verificación de configuración", + "dismiss": "Descartar la lista de instalación", + "resume": "Continuar configuración ({completed}/{total})", + "progress": "Progreso de configuración del tablero", + "step": { + "content": { + "label": "Añadir contenido útil", + "description": "Elija un widget y configúrelo antes de colocarlo." + }, + "app": { + "label": "Anclar una aplicación", + "description": "Mantenga un servicio o herramienta a un clic de este foro." + }, + "service": { + "label": "Conectar un servicio", + "description": "Desbloquear datos en vivo y acciones para widgets compatibles.", + "permissionDescription": "Un administrador puede conectar un servicio para desbloquear datos en vivo.", + "action": "Conectar" + } + } + }, "action": { + "addContent": "Añadir contenido del foro", + "settings": "Ajustes del foro", + "switch": "Cambiar de tablero", + "switcher": { + "title": "Cambiar de tablero", + "search": { + "empty": "No hay tableros que coincidan con \"{search}\"." + }, + "results": "Tableros disponibles", + "preview": "Vista previa de {name} con {count} elementos", + "currentHidden": "Tablero actual: {name}", + "keyboard": { + "navigate": "Navigate", + "open": "Abrir", + "instructions": "Tipo para filtrar tableros. Utilice las teclas de flecha para moverse a través de los resultados e Intro para abrir un tablero." + }, + "empty": { + "title": "No hay otros foros", + "description": "No hay otros foros a los que pueda acceder." + }, + "error": "No se han podido cargar los foros." + }, + "create": { + "availability": { + "checking": "Comprobando disponibilidad…", + "available": "{name} está disponible" + }, + "notification": { + "success": { + "title": "Tablero creado", + "message": "El foro {name} ha sido creado" + }, + "error": { + "title": "No se puede crear el tablero", + "message": "El foro {name} no pudo ser creado" + } + } + }, "duplicate": { "title": "Duplicar tablero", "message": "Esto duplicará el tablero {name} con todo su contenido. Si hay widgets que hacen referencia a integraciones, que no se te permite usar, se eliminarán.", @@ -4020,14 +5817,19 @@ } }, "edit": { + "enter": "Editar tablero", + "save": "Guardar tablero", + "exit": "Salir del modo edición", "notification": { "success": { - "title": "Cambios aplicados con éxito", "message": "El tablero se ha guardado correctamente" }, "error": { - "title": "No se pudieron aplicar los cambios", "message": "No se ha podido guardar el tablero" + }, + "loadError": { + "title": "No se puede empezar a editar", + "message": "El editor del tablero no pudo ser cargado. Su panel todavía está disponible en el modo de visualización." } }, "confirmLeave": { @@ -4035,62 +5837,6 @@ "message": "Tienes cambios sin guardar, ¿estás seguro de que quieres salir?" } }, - "oldImport": { - "label": "Importar desde una versión anterior a Homarr 1.0", - "notification": { - "success": { - "title": "Importación con éxito", - "message": "El tablero fue importado con éxito" - }, - "error": { - "title": "Error de importación", - "message": "El tablero no pudo ser importado, compruebe los registros para más detalles" - } - }, - "form": { - "file": { - "label": "Seleccionar archivo JSON", - "invalidError": "Archivo de configuración no válido" - }, - "apps": { - "label": "Aplicaciones", - "avoidDuplicates": { - "label": "Evitar duplicados", - "description": "Ignora aplicaciones donde ya existe una aplicación con el mismo href" - }, - "onlyImportApps": { - "label": "Importar solo aplicaciones", - "description": "Sólo añade las aplicaciones, el tablero debe ser recreado manualmente" - } - }, - "name": { - "label": "Nombre del tablero" - }, - "screenSize": { - "label": "Tamaño de pantalla", - "description": "En versiones anteriores a la 1.0 existían tres modos diferentes, por lo que podías elegir la cantidad de columnas para cada tamaño de pantalla.", - "option": { - "sm": "Pequeño", - "md": "Mediano", - "lg": "Grande" - } - }, - "sidebarBehavior": { - "label": "Comportamiento de la barra lateral", - "description": "Las barras laterales fueron eliminadas en la versión 1.0, puedes seleccionar lo que debería pasar con los elementos dentro de ellas.", - "option": { - "lastSection": { - "label": "Última sección", - "description": "La barra lateral se mostrará debajo de la última sección" - }, - "removeItems": { - "label": "Eliminar los elementos", - "description": "Los elementos contenidos en la barra lateral serán eliminados" - } - } - } - } - }, "quickCreateApp": { "modal": { "title": "Crear aplicación en el momento", @@ -4098,6 +5844,12 @@ } } }, + "landmark": { + "canvas": "Tela de panel", + "leftRail": "Raíl del tablero izquierdo", + "rightRail": "Raíl del tablero derecho", + "items": "Tablero de elementos" + }, "field": { "pageTitle": { "label": "Título de página" @@ -4167,7 +5919,8 @@ } }, "primaryColor": { - "label": "Color primario" + "label": "Color primario", + "locked": "Su administrador mantiene el color de la instancia de la marca en cada foro." }, "secondaryColor": { "label": "Color secundario" @@ -4207,9 +5960,6 @@ "xl": "Muy grande" } }, - "name": { - "label": "Nombre" - }, "isPublic": { "label": "Pública", "description": "Los tableros públicos son accesibles por todos, incluso sin una cuenta." @@ -4229,9 +5979,44 @@ "title": "Diseño", "responsive": { "title": "Diseños interactivo", + "description": "Cada diseño mantiene sus propias posiciones y tamaños de widgets. Móvil y Base están siempre disponibles; añadir diseños personalizados en cualquier punto de interrupción adicional.", "action": { "add": "Añadir diseño" } + }, + "role": { + "mobile": "Móvil", + "base": "Base", + "custom": "Personalizado" + }, + "custom": { + "defaultName": "Diseño personalizado" + }, + "mobile": { + "breakpointDescription": "El móvil siempre se utiliza desde 0px hasta el siguiente punto de interrupción de la distribución." + }, + "preview": { + "columns": "columnas", + "empty": "Este diseño está vacío", + "dynamicSection": "Sección dinámica", + "editorWidthLabel": "{layoutName} · {width}px" + }, + "reset": { + "action": "Restablecer de base", + "confirm": { + "title": "Reset {layoutName}?", + "message": "Esto reemplaza cada posición y tamaño guardados en este diseño con un nuevo diseño generado desde la Base. Esto no se puede deshacer." + } + }, + "edit": { + "action": "Editar diseño", + "saveAndEdit": "Guardar y editar", + "save": "Guardar diseño", + "cancel": { + "action": "Cancelar edición de diseño", + "title": "¿Descartar cambios de diseño?", + "message": "Los cambios no guardados en este diseño serán descartados." + } } }, "background": { @@ -4268,10 +6053,7 @@ "rename": { "label": "Renombrar tablero", "description": "Cambiar el nombre invalidará cualquier enlace a este tablero.", - "button": "Cambiar nombre", - "modal": { - "title": "Renombrar tablero" - } + "button": "Cambiar nombre" }, "visibility": { "label": "Cambiar visibilidad del tablero", @@ -4295,9 +6077,7 @@ } }, "delete": { - "label": "Eliminar este tablero", "description": "Una vez que elimines un tablero, no hay vuelta atrás. Por favor, asegúrate de ello.", - "button": "Eliminar este tablero", "confirm": { "title": "Eliminar tablero", "description": "¿Estás seguro que deseas eliminar este tablero? Esto eliminará permanentemente el tablero y todo su contenido." @@ -4342,28 +6122,41 @@ }, "layout": { "field": { - "name": { - "label": "Nombre" - }, "columnCount": { "label": "Recuento de columnas" }, "breakpoint": { "label": "Punto de ruptura", "description": "El diseño se utilizará en todas las pantallas más grandes que este punto de interrupción hasta el siguiente punto de ruptura." + }, + "gutters": { + "label": "Barra lateral fija", + "description": "Reserve hasta tres columnas de tablero en ambos lados. El resto del lienzo se recarga automáticamente.", + "left": { + "label": "Left sidebar", + "description": "Mantén esta zona visible mientras el panel de control se desplaza.", + "thumbLabel": "Left sidebar width" + }, + "right": { + "label": "Barra lateral derecha", + "description": "Mantén esta zona visible mientras el panel de control se desplaza.", + "thumbLabel": "Ancho lateral derecho" + }, + "width": { + "label": "Ancho en columnas" + }, + "preview": { + "label": "Vista previa del diseño del tablero" + } } } }, "management": { "metaTitle": "Administración", - "title": { - "morning": "Buenos días, {username}", - "afternoon": "Buenas tardes, {username}", - "evening": "Buenas tardes, {username}" - }, "notFound": { "title": "No Encontrado", - "text": "No se pudo encontrar el recurso solicitado" + "text": "No se pudo encontrar el recurso solicitado", + "backToHome": "Volver a la casa de gestión" }, "error": { "title": "", @@ -4372,19 +6165,10 @@ }, "navbar": { "items": { - "workshop": "Workshop", "home": "Inicio", - "boards": "Tableros", - "apps": "Aplicaciones", - "integrations": "Integraciones", - "searchEngies": "Motores de búsqueda", - "medias": "Imágenes", "users": { - "label": "Usuarios", "items": { - "manage": "Administrar", - "invites": "Invitaciones", - "groups": "Grupos" + "manage": "Administrar" } }, "tools": { @@ -4392,10 +6176,7 @@ "items": { "docker": "Docker", "kubernetes": "Kubernetes", - "logs": "Registros", "api": "API", - "certificates": "Certificados", - "tasks": "Tareas", "backup": "Copias de seguridad" } }, @@ -4409,21 +6190,12 @@ "sourceCode": "Código Fuente" } }, - "about": "Acerca de" + "about": "Acerca de", + "assistant": "Asistente" } }, "page": { "home": { - "statistic": { - "board": "Tableros", - "user": "Usuarios", - "invite": "Invitaciones", - "integration": "Integraciones", - "app": "Aplicaciones", - "group": "Grupos", - "searchEngine": "Motores de búsqueda", - "media": "Imágenes" - }, "statisticLabel": { "boards": "Tableros", "resources": "Recursos", @@ -4461,13 +6233,8 @@ "tooltip": "Este tablero se mostrará como tu tablero móvil" } }, - "duplicate": { - "label": "Duplicar tablero" - }, "delete": { - "label": "Eliminar permanentemente", "confirm": { - "title": "Eliminar tablero", "description": "¿Estás seguro de que deseas eliminar el tablero {name}?" } } @@ -4476,28 +6243,82 @@ "public": "Este tablero es público", "private": "Este tablero es privado" }, - "noResults": { - "title": "" + "preview": { + "label": "Vista previa del diseño para {name}, con {count} elementos", + "unknownCreator": "Creador desconocido" }, - "modal": { - "createBoard": { - "field": { - "name": { - "label": "Nombre" - } - } - } + "noResults": { + "title": "", + "description": "Crea un tablero para organizar tus aplicaciones y widgets en un solo lugar." } }, "media": { "includeFromAllUsers": "Incluir imágenes de todos los usuarios" }, "user": { - "back": "Volver a usuarios", "fieldsDisabledExternalProvider": "Ciertos campos están deshabilitados porque son gestionados por un proveedor de autenticación externo.", "setting": { "general": { "title": "General", + "header": { + "title": "Estudio de encabezado", + "badge": "Personal", + "description": "Arrastre los controles en cualquier lugar de la fila. Queda fijo el centro y la derecha mientras los controles cambian a su alrededor.", + "device": { + "desktop": "Escritorio", + "mobile": "Móvil" + }, + "zones": { + "left": "Izquierda", + "center": "Centrar", + "right": "Derecha" + }, + "action": { + "hide": "Ocultar el encabezado", + "show": "Mostrar el encabezado", + "configure": "Mover o configurar {item}", + "remove": "Eliminar {item}", + "dropIntoZone": "Mover a la sección {zone}" + }, + "preview": { + "board": "Vista previa del panel para {name}", + "empty": "No hay disposición de tablero disponible" + }, + "available": { + "title": "Controles disponibles", + "description": "Agregue un control, luego arrastre su botón completo a la posición de arriba.", + "requiredAlways": "Este control es necesario, pero puede moverlo a cualquier lugar en el encabezado.", + "allAdded": "Cada control integrado ya está en el encabezado.", + "add": "Añadir {item}", + "boardShortcut": "Atajo del tablero", + "chooseBoard": "Elige un tablero" + }, + "configuration": { + "description": "Este control permanece del mismo tamaño que en la cabecera en vivo.", + "searchDisplay": { + "input": "Barra de búsqueda", + "icon": "Solo icono" + }, + "logoDisplay": { + "logo": "Sólo Logo", + "logoAndText": "Logo + texto" + } + }, + "items": { + "logo": "Logo", + "search": "Búsqueda", + "home": "Tableros", + "boardSwitcher": "Tableros", + "assistant": "Asistente", + "docker": "Docker", + "boardEdit": "Editar tablero", + "boardSettings": "Ajustes del foro", + "settings": "Tus ajustes", + "themeToggle": "Cambiar tema", + "user": "Cuenta", + "boardUnavailable": "Tablero no disponible" + } + }, "item": { "language": "Idioma", "board": { @@ -4531,14 +6352,10 @@ }, "security": { "title": "Seguridad" - }, - "board": { - "title": "Tableros" } }, "list": { - "metaTitle": "Administrar usuarios", - "title": "Usuarios" + "metaTitle": "Administrar usuarios" }, "edit": { "metaTitle": "Editar usuario {username}" @@ -4592,9 +6409,6 @@ } }, "field": { - "id": { - "label": "ID" - }, "creator": { "label": "Creador" }, @@ -4618,10 +6432,7 @@ }, "setting": { "title": "Ajustes", - "alert": "Los ajustes de grupo son priorizados por el orden de los grupos en la lista. Los ajustes superiores sobrescriben los ajustes inferiores.", - "board": { - "title": "Tableros" - } + "alert": "Los ajustes de grupo son priorizados por el orden de los grupos en la lista. Los ajustes superiores sobrescriben los ajustes inferiores." }, "members": { "title": "Miembros", @@ -4629,10 +6440,7 @@ "notFound": "No se han encontrado miembros" }, "permissions": { - "title": "Permisos", - "form": { - "unsavedChanges": "¡Tienes cambios sin guardar!" - } + "title": "Permisos" } } }, @@ -4641,12 +6449,10 @@ "notification": { "success": { "message": "Configuración guardada con éxito" - }, - "error": { - "message": "Error al guardar los ajustes" } }, "section": { + "analyticsDocumentation": "Ver exactamente qué datos analíticos recoge Homarr", "analytics": { "title": "Estadísticas", "general": { @@ -4675,7 +6481,6 @@ } }, "board": { - "title": "Tableros", "homeBoard": { "label": "Tablero de escritorio global", "mobileLabel": "Tablero móvil global", @@ -4694,7 +6499,6 @@ } }, "user": { - "title": "Usuarios", "enableGravatar": { "label": "Habilitar Gravatar", "description": "Recupera los avatares de usuario de Libravatar/Gravatar cuando no hay ningún avatar personalizado y se configura un correo electrónico" @@ -4710,12 +6514,86 @@ "appearance": { "title": "Apariencia", "defaultColorScheme": { - "label": "Esquema de color predeterminado", + "label": "Esquema de color predeterminado" + } + }, + "branding": { + "title": "Ejemplo de marca", + "groups": { + "identity": "Identidad", + "appearance": "Apariencia", + "customCss": "Custom CSS", + "authentication": "Autenticación" + }, + "identity": { + "description": "El logotipo de la aplicación es la marca más grande utilizada dentro de la aplicación, en las páginas de inicio de sesión y para las aplicaciones instaladas. El icono del navegador (favicon) es el cuadrado pequeño utilizado en pestañas y marcadores; cuando está vacío, vuelve al logotipo de la aplicación." + }, + "appName": { + "label": "Nombre de la aplicación" + }, + "greeting": { + "label": "Saludos personalizados" + }, + "logo": { + "label": "Logo de la aplicación", + "placeholder": "/logo/logo.png" + }, + "favicon": { + "label": "Icono del navegador (favicon)", + "placeholder": "Usa el logo de la aplicación" + }, + "primaryColor": { + "label": "Color primario" + }, + "secondaryColor": { + "label": "Acento secundario" + }, + "lockPrimaryColor": { + "label": "Mantener este color en cada tablero", + "description": "Evita que los colores del tablero sustituyan el acento de la aplicación." + }, + "signInBackground": { + "label": "Fondo de autenticación", + "placeholder": "https://ejemplo.com/background.jpg" + }, + "signInOverlay": { + "label": "Capa de fondo" + }, + "defaultRadius": { + "label": "Estilo de esquina", "options": { - "auto": "", - "light": "Claro", - "dark": "Oscuro" + "xs": "Estrecho", + "sm": "Sutil", + "md": "Equilibrado", + "lg": "Redondeado", + "xl": "Suave" } + }, + "customCss": { + "label": "CSS personalizado global", + "description": "Aplicado a cada página. El foro CSS personalizado puede reemplazarlo." + }, + "authVisibility": { + "description": "Elija lo que aparece en cada página de autenticación.", + "appName": "Nombre de la aplicación", + "logo": "Logo de la aplicación", + "greeting": "Saludos" + }, + "summary": { + "title": "Marca actual", + "cornerStyle": "Estilo de esquina", + "palette": "Palette", + "backgroundConfigured": "Fondo personalizado · {overlay}% superposición", + "backgroundDefault": "Fondo por defecto", + "greetingConfigured": "Saludos personalizados", + "greetingDefault": "Saludos por defecto", + "boardColorLocked": "Color del foro bloqueado", + "boardColorFlexible": "Colores permitidos", + "appName": "Nombre de la tarea", + "logo": "Logo", + "greeting": "Saludos", + "on": "En", + "off": "Apagado" } }, "culture": { @@ -4723,12 +6601,177 @@ "defaultLocale": { "label": "Idioma predeterminado" } + }, + "assistant": { + "loading": "Cargando configuración del asistente", + "title": "Asistente", + "description": "Conecte un punto final de modelo compatible con OpenAI para el asistente de toda la instancia.", + "security": { + "description": "Las claves API y los valores de cabecera adicionales se cifran en la base de datos Homarr. Nunca se devuelven a los navegadores. Las peticiones de modelos se envían desde el servidor Homarr directamente al punto final configurado." + }, + "overview": { + "connectionReady": "Conexión lista", + "unsavedChanges": "Cambios no guardados", + "setupRequired": "Configuración requerida", + "disabled": "Deshabilitado", + "noModel": "Ningún modelo seleccionado" + }, + "connection": { + "endpointTitle": "Proveedor y punto final", + "description": "Elija un ajuste predeterminado o conecte cualquier servicio que implemente la API Completions de Chat OpenAI.", + "save": "Guardar conexión de proveedor" + }, + "credentials": { + "title": "Credenciales", + "description": "Añade los secretos que necesita este extremo. Los valores almacenados permanecen cifrados y no pueden ser leídos.", + "required": "Clave requerida", + "optional": "Clave opcional", + "workshop": "Inicio de sesión por usuario en GitHub" + }, + "provider": { + "title": "Proveedor", + "groups": { + "free": "Libre con Homarr", + "hosted": "Proveedores alojados", + "local": "Proveedores locales", + "custom": "Personalizado" + }, + "options": { + "homarr": { + "description": "Un número limitado de usos del Asistente son gratuitos cada día, pagados por el equipo Homarr. Inicia sesión con el taller de la comunidad para usar tu dieta." + }, + "openrouter": { + "description": "Rutas de modelo alojadas con un gran catálogo de modelos con capacidad de herramientas." + }, + "openai": { + "description": "Completaciones del Chat OpenAI a través del punto final oficial de la API." + }, + "anthropic": { + "description": "Claude a través del extremo de compatibilidad OpenAI SDK de Antropic." + }, + "google-gemini": { + "description": "Gemini a través del punto final de API compatible con OpenAI de Google." + }, + "xai": { + "description": "Grok modelos a través de la API compatible con OpenAI de xAI." + }, + "groq": { + "description": "Inferencia rápida alojada a través de la API compatible con OpenAI de Groq." + }, + "mistral": { + "description": "Modelos Mistral a través de la API oficial." + }, + "deepseek": { + "description": "DeepSeek modela a través de su API compatible con OpenAI." + }, + "together": { + "description": "Modelos abiertos alojados a través de la API compatible con OpenAI de Juntos." + }, + "ollama": { + "description": "Un servidor Ollama local o de red utilizando su API compatible con OpenAI." + }, + "lm-studio": { + "description": "Un servidor local de LM Studio con compatibilidad OpenAI habilitado." + }, + "llama-cpp": { + "description": "Un servidor llama.cpp local o de red utilizando su API compatible con OpenAI." + }, + "custom": { + "label": "Independiente personalizado", + "description": "Cualquier otro extremo compatible con OpenAI Chat Completions." + } + }, + "homarrAuth": { + "title": "Usos diarios gratuitos del asistente incluidos", + "description": "No se necesita ninguna clave API. El equipo de Homarr cubre un número limitado de usos de Asistente para usted cada día. Inicia sesión con el taller de la comunidad para mantener tu dieta por separado." + } + }, + "baseUrl": { + "title": "URL base de API", + "description": "Incluye el prefijo API, generalmente /v1. En contenedores, localhost se refiere al contenedor Homarr." + }, + "apiKey": { + "title": "Clave API", + "required": "Requerido por este proveedor. El valor es cifrado y sólo escritura.", + "optional": "Opcional para los extremos locales. Deje en blanco cuando el servicio no requiera autenticación del portador.", + "placeholder": "Introduzca una clave API", + "savedTitle": "Clave API cifrada guardada", + "savedDescription": "Homarr puede usar esta clave, pero no puede mostrar ni recuperar su valor.", + "remove": "Eliminar clave API guardada", + "removeFlow": { + "title": "¿Eliminar la clave API guardada?", + "description": "Este proveedor requiere una clave API. Eliminarla puede detener el descubrimiento del modelo y las respuestas del asistente hasta que se guarde otra clave.", + "optionalDescription": "El endpoint dejará de recibir autenticación de portador después de eliminar esta clave. Confirme que acepta peticiones no autenticadas o utiliza otro encabezado almacenado.", + "cancel": "Mantener la tecla guardada", + "confirm": "Eliminar clave API" + } + }, + "headers": { + "title": "Cabeceras de solicitud adicionales", + "description": "Encabezados de autenticación o ruta opcionales. Los valores de cabecera son cifrados y sólo escritura.", + "add": "Añadir cabecera", + "name": "Nombre de cabecera", + "value": "Valor de cabecera", + "valuePlaceholder": "Valor secreto o de ruta", + "remove": "Eliminar cabecera", + "configured": "Se configuran cabeceras cifradas adicionales. Añadir cabeceras reemplaza el conjunto completo almacenado.", + "empty": "No hay cabeceras adicionales almacenadas para este proveedor.", + "savedBadge": "Cabeceras guardadas", + "pendingRemoval": "Eliminación pendiente", + "clear": "Eliminar las cabeceras almacenadas al guardar", + "keep": "Mantener cabeceras almacenadas" + }, + "model": { + "title": "Modelo", + "description": "Seleccione un modelo descubierto o introduzca un ID exacto del modelo de punto final.", + "placeholder": "ID del modelo", + "refresh": "Actualizar modelos", + "chooseModel": "Elija el modelo utilizado para nuevas conversaciones.", + "discoveryPath": "Ruta de descubrimiento del modelo", + "discoveryPathDescription": "Agregado a la URL base de la API. Dejar en blanco para desactivar el descubrimiento y utilizar un ID de modelo manual.", + "manual": "Introduzca un ID de modelo manualmente o guarde la conexión para descubrir modelos.", + "manualFallback": "El descubrimiento no está disponible. Todavía puede introducir un modelo de ID manualmente.", + "saveConnectionFirst": "Guarde la conexión del proveedor antes de elegir un modelo.", + "discovering": "Actualizando los modelos disponibles de este proveedor…", + "discovered": "{count, plural, one {Descubierto # modelo. El soporte de herramientas depende del endpoint y modelo seleccionados.} other {Descubiertos # modelos. El soporte de herramientas depende del endpoint y modelo seleccionados.}}", + "discoveryFailed": "El descubrimiento del modelo no se completó", + "context": "Ventana contextual {count}", + "toolsConfirmed": "Herramientas anunciadas", + "toolsUnknown": "Verificar soporte de herramienta" + }, + "serverTools": { + "title": "Herramientas del servidor", + "webSearch": { + "label": "Búsqueda web", + "description": "Permitir al modelo buscar en la web en vivo a través de OpenRouter cuando una solicitud necesita información actual. El uso de la búsqueda es cobrado por OpenRouter.", + "proxyDescription": "Enviar la herramienta de servidor de búsqueda web de OpenRaindr a este extremo. Habilite esto sólo cuando el endpoint personalizado reenvía el formato de herramientas de servidor OpenRouter, como un proxy Homarr Router.", + "limit": "El modelo decide cuándo buscar, con un límite de 3 búsquedas y 5 resultados por búsqueda para cada solicitud." + } + }, + "enabled": { + "label": "Habilitar asistente", + "description": "Muestra el asistente a todos los usuarios conectados. Los permisos de Homarr existentes siguen aplicándose a cada llamada de herramienta interna." + }, + "save": "Guardar asistente", + "notification": { + "connectionSaved": { + "title": "Conexión con el proveedor guardada", + "message": "Las credenciales endpoint y cifradas están listas para la selección de modelos.", + "credentialsCleared": "El punto final cambió, así que las credenciales anteriores fueron borradas. Añada credenciales para el nuevo destino si es necesario." + }, + "saved": { + "title": "Configuración del asistente guardada", + "message": "Los nuevos ajustes del modelo y la disponibilidad están activos." + }, + "error": { + "title": "No se han podido guardar los ajustes del asistente" + } + } } } }, "tool": { "tasks": { - "title": "Tareas", "status": { "idle": "Inactivo", "running": "En ejecución", @@ -4746,6 +6789,11 @@ "label": "Pings" } }, + "action": { + "run": "Ejecutar {name} ahora", + "enable": "Habilitar {name}", + "disable": "Desactivar {name}" + }, "interval": { "seconds": "Cada {interval, plural, =1 {segundo} other {# segundos}}", "minutes": "Cada {interval, plural, =1 {minuto} other {# minutos}}", @@ -4761,13 +6809,7 @@ } } }, - "settings": { - "title": "Ajustes de la tarea para {jobName}" - }, "field": { - "name": { - "label": "Nombre" - }, "interval": { "label": "Intervalo de planificación" }, @@ -4781,11 +6823,6 @@ "table": { "search": "Buscar una tarea..." }, - "action": { - "refresh": { - "label": "Actualizar" - } - }, "refresh": { "success": { "message": "Tareas actualizadas con éxito" @@ -4819,7 +6856,6 @@ } }, "api": { - "title": "API", "modal": { "createApiToken": { "title": "Token de API creado", @@ -4845,7 +6881,6 @@ }, "table": { "header": { - "id": "ID", "createdBy": "Creado por", "actions": "Acciones" } @@ -4901,43 +6936,12 @@ "availableTools": { "title": "", "description": "", - "columnType": "", - "columnName": "", - "columnDescription": "" - }, - "troubleshooting": { - "title": "", - "missingHeader": { - "title": "", - "description": "" - }, - "invalidFormat": { - "title": "", - "description": "" - }, - "invalidKey": { - "title": "", - "description": "" - }, - "connectionRefused": { - "title": "", - "description": "" - }, - "toolsNotAppearing": { - "title": "", - "description": "" + "filteredDescription": "Herramientas {count} que coinciden entre categorías expandidas.", + "search": "Buscar herramientas", + "noResults": { + "title": "Ninguna herramienta coincide con esta búsqueda", + "description": "Ninguna herramienta MCP coincide con \"{search}\". Prueba un espacio de nombres, nombre de herramienta o descripción." } - }, - "copy": "", - "oneClick": { - "title": "", - "subtitle": "", - "vsCode": "", - "cursor": "", - "copyUrl": "", - "copied": "", - "copyHint": "", - "manualConfig": "" } } } @@ -4954,47 +6958,12 @@ "title": "", "warningTitle": "", "warningBody": "", - "typePrompt": "", - "submit": "", - "cancel": "" + "submit": "" } }, "import": { "title": "Restaurar base de datos", - "description": "Sube una copia de seguridad ZIP previamente exportada para restaurar tu base de datos. Esto reemplazará a toda tu base de datos. Si la copia de seguridad se creó con una clave de cifrado diferente, los secretos se volverán a cifrar automáticamente.", - "warning": "", - "dropzone": { - "title": "", - "description": "" - }, - "changeFile": "", - "button": "", - "success": { - "title": "", - "message": "" - }, - "error": "" - }, - "preview": { - "title": "", - "exported": "", - "loading": "", - "errorTitle": "", - "entity": "", - "count": "", - "boards": "", - "entities": { - "board": "", - "user": "Users", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" - }, - "analyzeError": "", - "invalidMissingMetadata": "", - "invalidMissingDb": "" + "description": "Sube una copia de seguridad ZIP previamente exportada para restaurar tu base de datos. Esto reemplazará a toda tu base de datos. Si la copia de seguridad se creó con una clave de cifrado diferente, los secretos se volverán a cifrar automáticamente." }, "restore": { "dropzone": { @@ -5004,29 +6973,20 @@ "analyzing": "", "changeFile": "", "continueToRestore": "", - "tryAgain": "", "analysisError": "", "preview": { "title": "", "exported": "", "entity": "", "count": "", - "boards": "", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "item": "" }, "migrationsApplied": "", "migrationsAppliedPlural": "", "migrationsOlderVersion": "", "migrationsOlderVersionPlural": "", "migrationsUpToDate": "", - "upToDate": "", "migrationsPending": "" }, "migration": { @@ -5037,21 +6997,21 @@ "title": "", "warningTitle": "", "warningBody": "", - "typePrompt": "", - "cancel": "", "submit": "" }, "progress": { "title": "", - "extracting": "", - "migrating": "", - "encrypting": "", - "swapping": "", - "restarting": "" + "restarting": "", + "relogin": "Restaurando la base de datos invalidó tu sesión actual. Homarr te enviará a iniciar sesión cuando el servidor esté listo." }, "complete": { - "title": "", - "message": "" + "title": "Restore complete", + "message": "La base de datos fue restaurada. Tu sesión anterior fue invalida, así que inicia sesión de nuevo para ver tu tablero restaurado.", + "button": "Iniciar sesión ahora" + }, + "timeout": { + "title": "El servidor no volvió a estar en línea", + "message": "La restauración de la base de datos terminó, pero Homarr no se volvió a preparar otra vez. Vuelva a intentar la comprobación de conexión o actualice esta página manualmente." }, "failed": { "title": "" @@ -5059,6 +7019,9 @@ "invalidMissingMetadata": "", "invalidMissingDb": "", "analyzeError": "" + }, + "confirm": { + "typePrompt": "Escribe \"{phrase}\" para continuar" } } }, @@ -5093,7 +7056,11 @@ "toggleBoardEdit": "Cambiar a modo de edición de tablero", "toggleColorScheme": "Cambiar a modo claro/oscuro", "saveNotebook": "Guardar el bloc de notas (solo dentro del widget de bloc de notas)", - "openSpotlight": "Abrir búsqueda" + "openSpotlight": "Abrir búsqueda", + "openSpotlightApps": "Abrir búsqueda de app", + "openSpotlightAssistant": "Abrir modo asistente", + "openSpotlightPreferences": "Abrir modo de preferencias", + "openAssistant": "Asistente abierto" }, "note": "Sugerencia: Mod se refiere tanto a la tecla CTRL como a la tecla ⌘ en macOS" } @@ -5103,6 +7070,63 @@ }, "docker": { "title": "Contenedores", + "reconciliation": { + "title": "Configuración de Docker Asistido", + "suggestions": "{count, plural, =0 {No hay sugerencias} one {# sugerencia} other {# sugerencias}}", + "attention": "{count} necesita atención", + "endpointUnavailable": "Algunos servicios no se pudieron comprobar porque estos puntos finales no están disponibles: {names}", + "empty": "No se encontraron servicios Docker visibles.", + "emptyFilter": "No hay servicios que coincidan con esta vista.", + "ambiguous": "Más de un elemento existente podría coincidir con este servicio. Homarr no elegirá uno automáticamente.", + "filter": { + "attention": "Necesita atención", + "represented": "Ya configurado", + "all": "Todos" + }, + "state": { + "newRecognized": "Listo para conectar", + "newApp": "Nuevo servicio", + "represented": "Ya representado", + "linked": "Vinculado", + "moved": "Dirección cambiada" + }, + "url": { + "manual": "Introduzca una dirección manualmente" + }, + "health": { + "layer": { + "docker": "Docker", + "integrationConfiguration": "Integración", + "authentication": "Autenticación", + "apiRequest": "API", + "appRepresentation": "Aplicación", + "widgetConfiguration": "Widget", + "widgetQuery": "Consulta Widget" + }, + "status": { + "available": "Disponible", + "configured": "Configurado", + "linked": "Vinculado", + "missing": "Falta", + "changed": "Cambiado", + "unused": "No usado", + "notApplicable": "No aplicable", + "notObserved": "No observado" + } + }, + "action": { + "review": "Revisión", + "dismiss": "Descartar", + "restoreDismissed": "Restaurar descartado ({count})", + "setupIntegration": "Configurar integración", + "reviewIntegration": "Integración de la revisión", + "viewRepresentation": "Ver configuración" + }, + "loadError": { + "title": "No se pudo cargar el asistente de configuración de Docker", + "message": "La información del servicio Docker no está disponible. Inténtalo de nuevo sin salir de esta página." + } + }, "table": { "updated": "Actualizado {when}", "refresh": { @@ -5115,9 +7139,6 @@ "totalMemory": "" }, "field": { - "name": { - "label": "Nombre" - }, "state": { "label": "Estado", "option": { @@ -5131,9 +7152,6 @@ } }, "stats": { - "cpu": { - "label": "CPU" - }, "memory": { "label": "Memoria" } @@ -5196,8 +7214,11 @@ } }, "remove": { - "label": "Eliminar", "confirm": "", + "confirmation": { + "title": "{count, plural, one {Elimina # contenedor?} other {Elimina # contenedores?}}", + "message": "{count, plural, one {Esto elimina permanentemente # contenedor: {names}} other {Esto elimina # contenedores permanentemente: {names}}}" + }, "notification": { "success": { "title": "Contenedores eliminados", @@ -5209,8 +7230,13 @@ } } }, + "result": { + "failure": { + "title": "Algunas acciones de contenedor fallaron", + "message": "{total, plural, one {{failed} de # acción falló: {names}} other {{failed} de # acciones fallidas: {names}}}" + } + }, "refresh": { - "label": "Actualizar", "notification": { "success": { "title": "Contenedores actualizados", @@ -5241,18 +7267,33 @@ }, "error": { "internalServerError": "Fallo al obtener los contenedores de Docker", + "endpointUnavailable": "{count, plural, one {# endpoint Docker no disponible: {names}} other {# endpoints Docker no disponibles: {names}}}", "noColumns": "" } }, "kubernetes": { + "context": { + "label": "Contexto de Kubernetes", + "loadError": { + "title": "No se pudieron cargar los contextos de Kubernetes", + "message": "La información del contexto no está disponible. Inténtalo de nuevo sin salir de esta página." + }, + "status": { + "available": "Disponible", + "degraded": "Metrics unavailable", + "unavailable": "Unavailable" + }, + "unavailable": "No se puede alcanzar este contexto de Kubernetes. Seleccione otro contexto o verifique sus credenciales y punto final.", + "metricsUnavailable": "Este contexto es accesible, pero el servidor de métricas no está disponible. El inventario sigue estando disponible sin el uso de CPU y memoria en vivo." + }, "cluster": { "title": "Panel del Clúster", "label": "Clúster", "providers": "Proveedores", "version": "Versión", - "architecture": "Arquitectura", "capacity": { "title": "Capacidad", + "metricsUnavailable": "El servidor de métricas no está disponible. El inventario y la capacidad reservada siguen siendo visibles, pero no se puede mostrar el uso de CPU y memoria en vivo.", "resource": { "reserved": "Reservado", "used": "Usado" @@ -5271,38 +7312,10 @@ } }, "nodes": { - "label": "Nodos", "field": { - "name": { - "label": "Nombre" - }, - "state": { - "label": "Estado", - "option": { - "ready": "Listo", - "NotReady": "No está listo" - } - }, - "cpu": { - "label": "CPU" - }, - "memory": { - "label": "RAM" - }, - "pods": { - "label": "Pods" - }, - "operatingSystem": { - "label": "Sistema Operativo" - }, - "architecture": { - "label": "Arquitectura" - }, + "metricsUnavailable": "Unavailable", "kubernetesVersion": { "label": "Versión de Kubernetes" - }, - "creationTimestamp": { - "label": "Creado" } }, "table": { @@ -5310,43 +7323,17 @@ } }, "namespaces": { - "label": "Espacios de nombres", - "field": { - "name": { - "label": "Nombre" - }, - "state": { - "label": "Estado", - "option": { - "active": "Activo", - "terminating": "Terminando" - } - }, - "creationTimestamp": { - "label": "Creado" - } - }, "table": { "search": "Buscar {count} espacios de nombres" } }, "ingresses": { - "label": "Ingresos", "field": { - "name": { - "label": "Nombre" - }, - "namespace": { - "label": "Espacio de nombre" - }, "className": { "label": "Nombre de la clase" }, "rulesAndPaths": { "label": "Reglas y rutas" - }, - "creationTimestamp": { - "label": "Creado" } }, "table": { @@ -5354,17 +7341,7 @@ } }, "services": { - "label": "Servicios", "field": { - "name": { - "label": "Nombre" - }, - "namespace": { - "label": "Espacio de nombre" - }, - "type": { - "label": "Tipo" - }, "ports": { "label": "Puertos" }, @@ -5373,9 +7350,6 @@ }, "clusterIP": { "label": "IP del clúster" - }, - "creationTimestamp": { - "label": "Creado" } }, "table": { @@ -5383,25 +7357,12 @@ } }, "pods": { - "label": "Pods", "field": { - "name": { - "label": "Nombre" - }, - "namespace": { - "label": "Espacio de nombre" - }, "image": { "label": "Imagen" }, "applicationType": { "label": "Tipo de aplicación" - }, - "status": { - "label": "Estado" - }, - "creationTimestamp": { - "label": "Creado" } }, "table": { @@ -5409,51 +7370,17 @@ } }, "secrets": { - "label": "Credenciales", - "field": { - "name": { - "label": "Nombre" - }, - "namespace": { - "label": "Espacio de nombre" - }, - "type": { - "label": "Tipo" - }, - "creationTimestamp": { - "label": "Creado" - } - }, "table": { "search": "Buscar {count} credenciales" } }, "configmaps": { - "label": "ConfigMaps", - "field": { - "name": { - "label": "Nombre" - }, - "namespace": { - "label": "Espacio de nombre" - }, - "creationTimestamp": { - "label": "Creado" - } - }, "table": { "search": "Buscar {count} configMaps" } }, "volumes": { - "label": "Volúmenes", "field": { - "name": { - "label": "Nombre" - }, - "namespace": { - "label": "Espacio de nombre" - }, "accessModes": { "label": "Modos de acceso" }, @@ -5468,12 +7395,6 @@ }, "volumeName": { "label": "Nombre del volumen" - }, - "status": { - "label": "Estado" - }, - "creationTimestamp": { - "label": "Creado" } }, "table": { @@ -5482,6 +7403,29 @@ }, "error": { "internalServerError": "Error al recuperar datos de Kubernetes" + }, + "field": { + "name": { + "label": "Nombre de la tarea" + }, + "namespace": { + "label": "Espacio de nombre" + }, + "creationTimestamp": { + "label": "Creado" + }, + "state": { + "label": "Estado de la tarea" + }, + "status": { + "label": "Estado" + }, + "type": { + "label": "Tipo de cliente de descarga" + }, + "architecture": { + "label": "Arquitectura" + } } }, "permission": { @@ -5515,71 +7459,27 @@ }, "navigationStructure": { "manage": { - "workshop": { - "label": "Workshop" - }, "label": "Administrar", - "boards": { - "label": "Tableros" - }, - "integrations": { - "label": "Integraciones", + "custom-widgets": { "edit": { - "label": "Editar" - }, - "new": { - "label": "Nueva" - } - }, - "search-engines": { - "label": "Motores de búsqueda", - "new": { - "label": "Nuevo" - }, - "edit": { - "label": "Editar" - } - }, - "medias": { - "label": "Imágenes" - }, - "apps": { - "label": "Aplicaciones", - "new": { - "label": "Nueva" - }, - "edit": { - "label": "Editar" - } - }, - "users": { - "label": "Usuarios", - "create": { - "label": "Crear" - }, - "general": "General", - "security": "Seguridad", - "board": "Tableros", - "groups": { - "label": "Grupos" - }, - "invites": { - "label": "Invitaciones" - } - }, - "tools": { - "label": "Herramientas", - "tasks": { - "label": "Tareas" - }, - "docker": { - "label": "Docker", - "logs": { + "flow": { "label": "" } }, + "workshop": { + "label": "Taller" + }, + "publish": { + "label": "Publicar en el taller" + } + }, + "users": { + "general": "General", + "security": "Seguridad" + }, + "tools": { + "label": "Herramientas", "kubernetes": { - "label": "Kubernetes", "nodes": { "label": "Nodos" }, @@ -5605,11 +7505,7 @@ "label": "Volúmenes" } }, - "logs": { - "label": "Registros" - }, "certificates": { - "label": "Certificados", "hostnames": { "label": "Nombres de host" } @@ -5620,12 +7516,60 @@ }, "about": { "label": "Acerca de" + }, + "assistant": { + "label": "Asistente" } } }, "search": { "placeholder": "Busca lo que quieras", "nothingFound": "Ningún resultado encontrado", + "modePicker": { + "search": { + "label": "Búsqueda", + "placeholder": "Buscar aplicaciones, tableros, páginas, comandos y preferencias" + }, + "apps": { + "label": "Aplicaciones", + "placeholder": "Buscar aplicaciones, tableros e integraciones" + }, + "command": { + "label": "Comandos", + "placeholder": "Buscar acciones y comandos" + }, + "preferences": { + "label": "Preferencias", + "placeholder": "Buscar y cambiar preferencias" + }, + "assistant": { + "label": "Asistente", + "placeholder": "Assistente" + }, + "external": { + "label": "Web", + "placeholder": "Buscar con un motor de búsqueda externo" + }, + "media": { + "label": "Multimedia", + "placeholder": "Buscar una película o programa", + "fallback": "Buscar medios de comunicación por \"{query}\"" + }, + "userGroup": { + "label": "Personas", + "placeholder": "Buscar usuarios y grupos" + }, + "continueWith": "Continuar con", + "dialogAriaLabel": "Menú de comandos {mode}", + "navigationLabel": "Modos de búsqueda", + "modeAriaLabel": "Modo {mode}", + "resultsAriaLabel": "{mode} resultados", + "footer": { + "navigate": "Navigate", + "open": "Abrir", + "close": "Cerrar" + } + }, "error": { "fetch": "Se produjo un error al recuperar los datos" }, @@ -5634,7 +7578,6 @@ "help": "Buscar aplicaciones, integraciones o tableros", "group": { "app": { - "title": "Aplicaciones", "children": { "action": { "open": { @@ -5650,7 +7593,6 @@ } }, "board": { - "title": "Tableros", "children": { "action": { "open": { @@ -5670,9 +7612,6 @@ "title": "Seleccionar una acción para el tablero" } } - }, - "integration": { - "title": "Integraciones" } } }, @@ -5701,9 +7640,6 @@ "newBoard": { "label": "Crear un nuevo tablero" }, - "importBoard": { - "label": "Importar un tablero" - }, "newApp": { "label": "Crear una nueva aplicación" }, @@ -5773,7 +7709,6 @@ } }, "defaultSearchEngineId": { - "label": "", "children": { "detail": { "title": "" @@ -5781,7 +7716,6 @@ } }, "openSearchInNewTab": { - "label": "", "children": { "detail": { "title": "Abrir resultados de búsqueda en una nueva pestaña" @@ -5789,7 +7723,6 @@ } }, "ddgBangs": { - "label": "", "children": { "detail": { "title": "Activar bangs de DuckDuckGo" @@ -5804,6 +7737,13 @@ } } }, + "byteUnitSystem": { + "children": { + "detail": { + "title": "Seleccione sus unidades de tamaño de datos" + } + } + }, "homeBoardId": { "label": "", "children": { @@ -5821,7 +7761,6 @@ } }, "pingIconsEnabled": { - "label": "", "children": { "detail": { "title": "" @@ -5829,7 +7768,6 @@ } }, "enableRightClickOnWidgets": { - "label": "Habilitar clic derecho en widgets", "children": { "detail": { "title": "" @@ -5857,6 +7795,7 @@ "description": "", "disabled": { "noIntegration": "", + "signInRequired": "Inicia sesión para buscar integraciones de medios.", "scoped": "" } } @@ -5873,7 +7812,6 @@ "help": "Usar un motor de búsqueda externo", "group": { "searchEngine": { - "title": "Motores de búsqueda", "tipDdgBangs": "", "bang": { "searchWithQuery": "", @@ -5924,20 +7862,6 @@ "group": { "mode": { "title": "Modos" - }, - "help": { - "title": "Ayuda", - "option": { - "documentation": { - "label": "Documentación" - }, - "submitIssue": { - "label": "Enviar una incidencia" - }, - "discord": { - "label": "Comunidad de Discord" - } - } } } }, @@ -5949,9 +7873,10 @@ "other": { "label": "Buscar con otro motor de búsqueda" }, - "no-default": { - "label": "Ningún motor de búsqueda por defecto", - "description": "Establece un motor de búsqueda predeterminado en las preferencias" + "no-engines": { + "label": "No hay motores de búsqueda configurados", + "descriptionCreate": "Añadir un motor de búsqueda para buscar desde el menú de comandos", + "descriptionUnavailable": "Pídele a un administrador que configure un motor de búsqueda" }, "search": { "label": "Buscar \"{query}\" con {name}" @@ -6031,7 +7956,6 @@ "help": "Buscar usuarios o grupos", "group": { "user": { - "title": "Usuarios", "children": { "action": { "detail": { @@ -6044,7 +7968,6 @@ } }, "group": { - "title": "Grupos", "children": { "action": { "detail": { @@ -6068,9 +7991,6 @@ "engine": { "search": "Buscar un motor de búsqueda", "field": { - "name": { - "label": "Nombre" - }, "short": { "label": "Abreviatura" }, @@ -6083,12 +8003,19 @@ }, "page": { "list": { - "title": "Motores de búsqueda", + "ariaLabel": "Motores de búsqueda configurados", "noResults": { "title": "Todavía no hay motores de búsqueda", - "action": "Crea tu primer motor de búsqueda" + "description": "Los motores de búsqueda permiten que Spotlight envíe una consulta a un sitio o servicio conectado.", + "action": "Crea tu primer motor de búsqueda", + "filteredTitle": "Ningún motor de búsqueda coincide con tu búsqueda", + "filteredDescription": "Ningún motor de búsqueda coincide con \"{search}\". Prueba con otro nombre o URL." }, - "interactive": "Interactivo, utiliza una integración" + "interactive": "Interactivo, utiliza una integración", + "type": { + "generic": "Plantilla de URL", + "fromIntegration": "Integración" + } }, "create": { "title": "Nuevo motor de búsqueda", @@ -6107,11 +8034,9 @@ "title": "Editar motor de búsqueda", "notification": { "success": { - "title": "Cambios aplicados con éxito", "message": "El motor de búsqueda se guardó con éxito" }, "error": { - "title": "No se pudieron aplicar los cambios", "message": "No se pudo guardar el motor de búsqueda" } }, @@ -6250,6 +8175,10 @@ } }, "log": { + "context": { + "widgetError": "Widget reportó un error en esta hora", + "expiredWidgetError": "Los registros alrededor de este error de widget ya no se conservan" + }, "level": { "option": { "debug": "Depuración", @@ -6261,7 +8190,6 @@ }, "onboardingTour": { "learnMore": "Leer la documentación", - "next": "Siguiente", "prev": "", "done": "", "skip": "Saltar tour", @@ -6288,7 +8216,7 @@ }, "integrationsList": { "title": "", - "description": "" + "description": "Estos son los servicios conectados a Homarr. Todas las credenciales son cifradas en reposo." }, "integrationsCreate": { "title": "", @@ -6325,5 +8253,359 @@ "description": "" } } + }, + "metadata": { + "description": "Un panel de control autoalojado para la *pila de arr y todo tu homelab. Integra con más de 50 servicios, widgets en tiempo real, sin archivos de configuración.", + "dashboardTitle": "Tablero {appName}" + }, + "assistant": { + "title": "Asistente", + "open": "Asistente abierto", + "close": "Cerrar asistente", + "minimize": "Minimizar asistente", + "spotlight": "Assistente", + "spotlightDescription": "Escriba y envíe un prompt sin salir del menú de comandos.", + "spotlightPrompt": { + "title": "Assistente", + "description": "Escriba un prompt arriba. Introduzca enviarlo en segundo plano.", + "send": "Enviar aviso", + "empty": "Escribe un mensaje arriba" + }, + "unavailable": { + "checking": "Comprobando si el asistente está disponible…", + "error": "No se ha podido comprobar la disponibilidad del asistente. Vuelve a intentarlo.", + "notConfigured": "Un administrador debe configurar y habilitar el asistente primero.", + "signIn": "Inicia sesión para usar Asistente." + }, + "newConversation": "Nueva conversación", + "conversations": "Conversaciones", + "conversationActions": "Acciones de conversación", + "searchConversations": "Buscar conversaciones", + "noMatchingConversations": "No hay conversaciones coincidentes", + "moreActions": "Más acciones de respuesta", + "renameConversation": { + "action": "Renombrar", + "label": "Nombre de la conversación", + "save": "Guardar nombre", + "failedTitle": "No se pudo renombrar la conversación", + "failedDescription": "Homarr no pudo renombrar esta conversación. Inténtalo de nuevo." + }, + "deleteConversation": { + "title": "¿Eliminar conversación?", + "description": "“{title}” y sus mensajes se eliminarán permanentemente.", + "failedTitle": "No se ha podido eliminar la conversación", + "failedDescription": "Homarr no pudo eliminar esta conversación. Inténtalo de nuevo." + }, + "closeHistory": "Cerrar historial de conversaciones", + "openHistory": "Abrir historial de conversaciones", + "emptyTitle": "¿Con qué puedo ayudar?", + "emptyDescription": "Pregunte por su configuración de Homarr, inspeccione los datos de la instancia en vivo o apruebe las acciones cuando desee que haga un cambio.", + "suggestions": { + "health": { + "label": "Comprobar el estado del servicio", + "prompt": "Compruebe mis integraciones y resuma cualquier cosa que necesite atención." + }, + "explore": { + "label": "Explorar mi hogar", + "prompt": "Muéstrame lo que puedo ver y administrar en esta instancia de Homarr." + }, + "media": { + "label": "Buscar medios para solicitar", + "prompt": "Ayúdame a encontrar una película o serie para solicitarla." + }, + "style": { + "label": "Mejorar un panel", + "prompt": "Ayúdame a mejorar la apariencia de un tablero o CSS personalizado. Muéstrame mis tableros primero, luego preserve mi configuración actual mientras hacemos el cambio." + }, + "designWidget": { + "label": "Diseñar un widget", + "prompt": "Crear e instalar un Widget personalizado para " + } + }, + "composerPlaceholder": "Preguntar al asistente…", + "runtime": { + "model": "Modelo", + "searchModels": "Buscar modelos", + "noModels": "No hay modelos disponibles", + "otherModels": "Otros modelos", + "imageInput": "Acepta entrada de imagen", + "thinking": "Modo de pensamiento", + "reasoning": { + "auto": "Automático", + "none": "Apagado", + "minimal": "Mínimo", + "low": "Baja", + "medium": "Mediano", + "high": "Alta" + } + }, + "providerQuota": { + "title": "Proveedor de Homarr", + "communityWorkshop": "Taller de la comunidad", + "dailyAllowance": "Permiso de solicitud diaria", + "remainingLabel": "{remaining} de {limit} solicitudes de proveedor Homarr restantes", + "loading": "Cargando permisos de proveedor Homarr", + "signInRequired": "Es necesario iniciar sesión en el taller para el proveedor Homarr", + "signInDescription": "Inicia sesión con GitHub a través del taller comunitario para recibir tu dieta diaria por separado.", + "exhaustedDescription": "Tu franquicia de proveedor Homarr se utiliza para hoy. Se reinicia a medianoche UTC.", + "unavailableDescription": "Inicia sesión en el taller o espera a que tu franquicia de proveedor de Homarr se reinicie.", + "signIn": "Iniciar sesión con GitHub", + "signInError": "Error al iniciar sesión en GitHub. Inténtalo de nuevo en un momento.", + "loadError": "La franquicia de proveedor de Homarr no se pudo cargar.", + "reset": "Restablece {relative} en ", + "toolCalls": "Cada petición de modelo y llamada de herramienta completa utiliza una petición.", + "retry": "Recargar franquicia", + "level": { + "ok": "Ok", + "warning": "Advertencia", + "bad": "Baja", + "dead": "Usado" + } + }, + "stop": "Detener respuesta", + "send": "Enviar mensaje", + "copy": "Copiar respuesta", + "copyMessage": "Copiar mensaje", + "editMessage": "Editar mensaje", + "updateMessage": "Actualizar mensaje", + "regenerate": "Regenerar respuesta", + "helpful": "Útil", + "notHelpful": "No es útil", + "readAloud": "Leer respuesta en voz alta", + "stopReading": "Dejar de leer la respuesta", + "feedbackError": "No se ha podido guardar tu comentario. Vuelve a intentarlo.", + "exportMarkdown": "Exportar como Markdown", + "exportConversation": { + "action": "Exportar conversación como Markdown", + "failedTitle": "No se pudo exportar la conversación", + "failedDescription": "Homarr no pudo cargar esta conversación. Inténtalo de nuevo." + }, + "reasoning": "Pensando", + "previousResponse": "Respuesta anterior", + "nextResponse": "Siguiente respuesta", + "removeAttachment": "Eliminar archivo adjunto", + "downloadFile": "Descargar {name}", + "attachedImage": "Imagen adjunta", + "externalImageBlocked": "Imagen externa bloqueada por privacidad", + "image": { + "loading": "Cargando imagen", + "failed": "Esta imagen no pudo ser cargada.", + "retry": "Intentar imagen de nuevo" + }, + "quoteSelection": "Cotización", + "dismissQuote": "Eliminar cita", + "attachments": { + "add": "Adjuntar una imagen o documento", + "errorTitle": "No se ha podido añadir el archivo adjunto", + "imageUnsupported": "El modelo seleccionado no soporta la entrada de la imagen." + }, + "mentions": { + "menu": "Añadir contexto de Homarr", + "context": "Contexto", + "app": "Aplicaciones", + "integration": "Integraciones", + "board": "Tableros", + "widget": "Widgets", + "tools": "Herramientas disponibles" + }, + "markdown": { + "diagram": "Diagrama", + "renderingDiagram": "Renderizando diagrama…", + "diagramUnavailable": "Este diagrama no pudo ser renderizado." + }, + "commands": { + "menu": "Comandos del asistente", + "health": "Prepara un chequeo de estado del servicio", + "explore": "Prepara un resumen de esta instancia de Homarr", + "media": "Prepara una búsqueda de medios", + "style": "Prepara una apariencia del foro o un cambio personalizado de CSS", + "designWidget": "Prepara una construcción personalizada del Widget" + }, + "usage": { + "tokens": "fichas", + "contextWindow": "Ventana contextual", + "requestDetails": "Detalles de la solicitud", + "used": "Último paso", + "remaining": "Restante", + "capacity": "Capacidad", + "input": "Entrada", + "output": "Salida", + "cached": "Entrada en caché", + "cacheWrite": "Caché de escritura", + "reasoning": "Razonando", + "inputShort": "en", + "outputShort": "fuera", + "cachedShort": "cacheado", + "reasoningShort": "razonamiento", + "firstOutput": "Primera salida", + "homarrTiming": "Homarr observado", + "endToEnd": "Fin a fin", + "observedThroughput": "Seguimiento observado", + "providerTiming": "Proveedor reportado", + "loadingProviderDetails": "Cargando detalles de generación…", + "providerDetailsPending": "OpenRouter todavía está procesando algunos detalles de generación. Reabrir para reintentar.", + "providerLatency": "latencia del proveedor", + "generationTime": "Tiempo de generación", + "moderationLatency": "Moderación", + "providerThroughput": "Proveedor a través", + "fallbacks": "Fallbacks", + "fallbackLatency": "latencia de Fallback", + "cacheDiscount": "Descuento en caché", + "normalizedTokens": "Entrada / salida normalizada OpenRouter", + "byok": "BYOK", + "cost": "Costo", + "reported": "Reportado por el proveedor", + "estimated": "Estimado para el precio del modelo", + "upstreamCost": "Inferencia de la corriente superior", + "webSearches": "Búsqueda web", + "finishReason": "Razón final", + "notReported": "No reportado", + "agentSteps": "Pasos del agente", + "step": "Paso {number}", + "generation": "Generación" + }, + "toolInput": "Entrada", + "toolOutput": "Salida", + "toolActivity": { + "iconSearch": "Buscando iconos de “{query}”", + "iconBrowse": "Navegando iconos disponibles" + }, + "toolNavigation": { + "openPreview": "Abrir vista previa", + "openWidget": "Abrir widget" + }, + "webSearch": { + "title": "Búsqueda web", + "completed": "OpenRouter buscó esta respuesta en la web en vivo.", + "searches": "{count, plural, one {# búsqueda} other {# búsquedas}}", + "sources": "{count, plural, one {# fuente} other {# fuentes}}" + }, + "responseError": { + "title": "El asistente no pudo terminar", + "description": "Inténtelo de nuevo. Si el problema continúa, pida a un administrador que verifique el punto final del modelo configurado." + }, + "toolPreparationError": { + "title": "Esta solicitud no pudo ser preparada", + "description": "El modelo se detuvo antes de proporcionar detalles completos. Vuelva a intentar la respuesta o describa la solicitud de nuevo. No se hizo ningún cambio." + }, + "busy": { + "title": "El asistente ya está trabajando", + "description": "Espere la respuesta actual o ábrela para detener la ejecución." + }, + "pendingAction": { + "answerTitle": "Respuesta necesaria", + "answerFallback": "Elige una respuesta para continuar", + "formTitle": "Revisar detalles de la aplicación", + "boardFormTitle": "Revisar cambios en el tablero", + "review": "Revisión", + "sendBlocked": "Resolver la solicitud pendiente antes de enviar" + }, + "activity": { + "thinking": "El asistente está pensando", + "working": "Trabajando en tu mensaje", + "ready": "Respuesta lista", + "completed": "Abrir la respuesta", + "approval": "Aprobación necesaria", + "failed": "Asistente necesita atención", + "expand": "Abrir la respuesta del asistente", + "dismiss": "Descartar actividad del asistente" + }, + "scrollToLatest": "Desplazar a la última", + "refresh": { + "action": "Actualizar vista actual", + "working": "Actualizando la vista actual", + "completeTitle": "Ver actualizados", + "completeDescription": "Los datos visibles de Homarr han sido recargados.", + "failedTitle": "No se pudo actualizar la vista", + "failedDescription": "El cambio aún puede ser guardado. Intenta actualizar la acción de nuevo." + }, + "askUser": { + "preparing": "Preparando pregunta", + "answered": "Tu respuesta", + "other": "Otros", + "otherLabel": "Tu respuesta", + "otherPlaceholder": "Escribe otra respuesta…", + "submit": "Enviar respuesta", + "cancelOther": "Cancelar otra respuesta", + "optionKind": { + "affirmative": "Confirmar", + "negative": "Rechazar", + "alternative": "Opción", + "custom": "Personalizado" + } + }, + "configureApp": { + "title": "Revisar detalles de la aplicación", + "description": "Elige un icono local y ajusta cualquier cosa antes de que el asistente solicite la aprobación de la creación.", + "preparing": "Preparando detalles de la aplicación", + "continue": "Usar estos detalles", + "ready": "Detalles de la aplicación listos", + "automaticContinue": "Usando estos detalles de la aplicación automáticamente" + }, + "configureBoardSettings": { + "title": "Revisar cambios en el tablero", + "loading": "Cargando la configuración actual del tablero", + "loadErrorTitle": "No se pudo cargar la configuración del foro", + "loadErrorDescription": "El tablero ya no existe o no tiene permiso para modificarlo.", + "proposedCount": "Asistente propuesto {count} campos", + "changeCount": "{count} cambios listos", + "ready": "Cambios del tablero listos", + "cancelled": "Configuración actual del tablero guardada", + "noChanges": "Ninguna configuración cambiará", + "keepCurrent": "Mantener la configuración actual", + "continue": "Continuar a la aprobación", + "automaticContinue": "Aceptar el tablero propuesto cambia automáticamente", + "resetAll": "Restablecer todos los cambios", + "tabs": { + "css": "Custom CSS", + "appearance": "Apariencia", + "background": "Fondo", + "general": "Escritorio" + }, + "cssDescription": "Editar la hoja de estilos completa. Las reglas existentes se mantienen a menos que se eliminen aquí.", + "cssCharacters": "{count} de 16384 caracteres", + "copyCss": "Copy CSS", + "copied": "Copiado", + "restoreCss": "Restore current CSS", + "remoteCssTitle": "Este CSS carga un recurso remoto", + "remoteCssDescription": "Las hojas de estilo importadas y las URL remotas se ponen en contacto con otro servidor cuando el foro se carga. Revísalas antes de continuar." + }, + "configureWidget": { + "title": "Revisar widget", + "preparing": "Preparando ajustes del widget", + "review": "Revisar widget e integraciones", + "ready": "Configuración de Widget lista", + "cancelled": "El widget no fue añadido", + "automaticContinue": "Aceptando automáticamente la configuración del widget propuesto", + "definitionLoadErrorTitle": "No se pudo cargar la configuración del widget", + "definitionLoadErrorDescription": "Homarr no pudo cargar la configuración de este widget. Inténtalo de nuevo.", + "loadErrorTitle": "No se han podido cargar las integraciones", + "loadErrorDescription": "Homarr no pudo cargar las integraciones disponibles para este widget.", + "noIntegrationTitle": "Se requiere una integración compatible", + "noIntegrationDescription": "Configurar una integración soportada por este widget antes de añadirlo al panel.", + "connectIntegration": "Conectar servicio", + "manageIntegrations": "Administrar integraciones", + "skip": "No añadir", + "errorTitle": "No se pudo preparar la configuración del widget", + "errorDescription": "El modelo no ha proporcionado una configuración completa del widget. No se ha añadido ningún widget." + }, + "approvalRequired": "Aprobación necesaria", + "complete": "Complete", + "denied": "Denegado", + "failed": "Fallido", + "working": "Trabajando", + "approvalDescription": "Revisar este cambio antes de que se ejecute.", + "approveAndRun": "Aprobar y ejecutar", + "deny": "Denegar", + "autoApproval": { + "label": "Aprobaciones automáticas", + "composerLabel": "Aprobar para mí", + "title": "Aprobaciones automáticas", + "description": "Preparar automáticamente formularios y aprobar cambios protegidos para esta conversación. Las preguntas siguen esperando su respuesta y sus permisos de Homarr siguen aplicándose. Esto se desactiva cuando cambia de conversación.", + "enable": "Activar para esta conversación", + "disable": "Desactivar aprobaciones automáticas", + "enabled": "Aprobaciones automáticas activadas", + "approving": "Aprobación automática" + } } } diff --git a/packages/translation/src/lang/et.json b/packages/translation/src/lang/et.json index 61c873b30..94f87cc4e 100644 --- a/packages/translation/src/lang/et.json +++ b/packages/translation/src/lang/et.json @@ -1,156 +1,246 @@ { "init": { - "step": { - "start": { - "title": "Tere tulemast Homarri", - "subtitle": "Alustame sinu Homarri seadistamisega.", - "description": "Alustamiseks vali, kuidas soovid oma Homarri seadistada.", - "action": { - "scratch": "Alustage nullist", - "importOldmarr": "Impordi Homarrist enne versiooni 1.0", - "restoreSqlite": "Taasta SQLite-varukoopiast", - "restoreSqliteDescription": "Laadi üles eelmise Homarri täielik SQLite-andmebaasi varukoopia. See taastab kõik töölauad, kasutajad, rakendused, integratsioonid ja seaded.", - "backToOptions": "​← Tagasi seadistusvalikute juurde" + "studio": { + "navigationLabel": "Sissejuhatuse jaotised", + "back": "Tagasi", + "buildBoard": "Koosta minu paneel", + "common": { + "unknownError": "Midagi läks valesti. Sinu valikud on endiselt alles; proovi uuesti." + }, + "claim": { + "checking": "Seda alustamisseanssi turvatakse…", + "checkingTitle": "Turvalise seadistuse ettevalmistamine", + "lockedTitle": "Seadistus on avatud teises brauseris", + "lockedDescription": "Jätka seal või oota, kuni selle turvaline esmakäituse seanss aegub, enne kui uuesti proovid.", + "signInTitle": "Administraatorina sisselogimine on nõutav", + "signInDescription": "Administraator on juba olemas. Seadistuse jätkamiseks logi sisse, ilma et volitused või teenuse juurdepääs avalikuks saaksid.", + "signIn": "Logi sisse ja jätka", + "errorTitle": "Seadistust ei saanud turvata", + "errorDescription": "Turvalise esmakäituse seansi uuesti proovimiseks laadi leht uuesti." + }, + "navigation": { + "essentials": "Oluline", + "discover": "Avasta", + "connect": "Ühenda", + "board": "Paneel", + "extend": "Laienda", + "review": "Vaata üle" + }, + "welcome": { + "title": "Tere tulemast koju.", + "description": "Tere tulemast Homarr v{version} kasutajaks. Juhendame sind oluliste sammude juures ja aitame sul koostada oma esimese paneeli.", + "start": "Alusta", + "restore": "Taasta varukoopia", + "restoreTitle": "Taasta varukoopiast", + "restoreDescription": "Täielik SQLite-varukoopia taastab paneelid, inimesed, rakendused, integratsioonid ja seaded. Homarr valideerib selle enne millegi asendamist.", + "errorTitle": "Seadistust ei saanud alustada", + "errorDescription": "Sinu seadistusvalikud on endiselt alles. Proovi uuesti või laadi leht uuesti, kui probleem püsib." + }, + "account": { + "title": "Loo administraator", + "description": "Määrake administraatori kasutaja sisselogimisandmed.", + "username": "Administraatori kasutajanimi", + "passwordHint": "Nõutav on ainult vähemalt 8 märki. Muud parooli tugevuse kontrollid on soovituslikud.", + "create": "Loo administraator", + "errorTitle": "Administraatorit ei saanud luua", + "recoveryTitle": "Administraatori konto on loodud", + "recoveryDescription": "Automaatne sisselogimine ei lõpetanud toimingut. Seadistuse jätkamiseks logi sisse äsja loodud administraatori mandaatidega.", + "recoveryAction": "Logi sisse ja jätka", + "unknownError": "Administraatorit ei saanud luua." + }, + "externalGroup": { + "title": "Ühenda oma administraatorirühm", + "description": "Kasuta LDAP-i või OIDC-i saadetud täpset rühmanime. Selle rühma liikmed saavad administraatoriõigused.", + "name": "Väline administraatorirühm", + "nameDescription": "See on tõstutundlik ja peab vastama sinu identiteedipakkuja väärtusele.", + "continue": "Salvesta rühm ja jätka", + "errorTitle": "Rühma ei saanud salvestada", + "unknownError": "Administraatorirühma ei saanud salvestada." + }, + "essentials": { + "title": "Alusta tuttavate vaikeseadetega", + "description": "Määra keel ja välimus, mida kõik esmalt näevad, ning anna Homarrile sinu teenuste kasutatav aadressimuster.", + "language": "Vaikimisi keel", + "theme": "Vaikimisi teema", + "themeAuto": "Süsteem", + "themeLight": "Hele", + "themeDark": "Tume", + "serverOriginHelp": "Homarr kasutab seda aadressi tuvastatud teenuste URL-ide eeltäitmiseks. Iga teenust saab endiselt eraldi muuta.", + "serverDescription": "See on otsetee, mitte piirang. Iga tuvastatud teenust saab endiselt muuta.", + "serverOrigin": "Domeen, IP või pöördpuhvri tee", + "serverOriginDescription": "Näited: home.lan, 192.168.1.10 või https://home.example.com/services. Vali all, kuidas iga teenus lisatakse.", + "analytics": "Jaga anonüümset tootetäienduse analüütikat", + "analyticsDescription": "Aitab Homarril funktsioonide töökindlust parandada. Teenuse mandaate ega armatuurlaua sisu ei saadeta." + }, + "discover": { + "title": "Vaata, milleni see paigaldus tegelikult ulatub", + "description": "Homarr kontrollib saadaolevaid võimalusi kohapeal. Puuduv Dockeri sokkel või Kubernetese kontekst ei blokeeri käsitsi seadistamist.", + "database": "Andmebaas", + "docker": "Docker ja ühilduvad soklid", + "kubernetes": "Kubernetes", + "assistantWorkshop": "Assistent ja töötuba", + "found": "Leiti {integrations} integratsiooni ja {apps} täiendavat rakendust", + "retryKubernetes": "Kontrolli Kuberneteset uuesti", + "retryWorkshop": "Kontrolli töötuba uuesti", + "unknownVersion": "tundmatu versioon", + "kubernetesAvailable": "Ühendatud Kubernetesega {version}", + "kubernetesDisabled": "Pole lubatud; jätka Dockeri või käsitsi lisatud teenustega", + "kubernetesUnavailable": "Kubernetes on lubatud, kuid sellest Homarri protsessist pole sellele juurdepääsu", + "workshopAvailable": "Kogukonna töötuba ja majutatud assistenditeenused on kättesaadavad", + "workshopUnavailable": "Kohalikud ja kohandatud assistendipakkujad on endiselt saadaval", + "partialTitle": "Mõnda allikat ei saanud skannida", + "partialDescription": "Juurdepääsetavate hostide tulemused säilitatakse. Kontrolli sokliõigusi või lisa järgmises jaotises teenused käsitsi.", + "status": { + "checking": "Saadavuse kontrollimine…", + "available": "Saadaval", + "partial": "Osaliselt saadaval", + "empty": "Juurdepääsetav, kuid sobivaid töötavaid teenuseid pole", + "disabled": "Serveri konfiguratsiooniga keelatud", + "unavailable": "Sellest Homarri protsessist pole saadaval" } }, - "import": { - "title": "Impordi andmed", - "subtitle": "Saad importida andmeid olemasolevast Homarrist.", - "dropzone": { - "title": "Lohista zip-fail siia või klõpsa sirvimiseks", - "description": "Üleslaaditud zip-fail töödeldakse ja saad valida, mida soovid importida" + "connect": { + "title": "Ühenda see, mis muudab paneeli kasulikuks", + "description": "Vali korraga mitu teenust. Dockeri sildid on esmatähtsad, kujutiste sobitamine täidab lüngad ning iga URL ja mandaat jääb ülevaadatavaks.", + "discoveredIntegrations": "Tuvastatud integratsioonieksemplarid ({count})", + "detectedIntegrationLabel": "Impordi {name}, tuvastatud liigina {kind}", + "detectedAppLabel": "Impordi tuvastatud rakendus {name}", + "otherIntegrations": "Lisa veel üks integratsioon", + "configureIntegrations": "Konfigureeri integratsioonid", + "discoveredApps": "Tuvastatud rakendused ({count})", + "appAddressRequired": "Lisa aadress rakendusele {name} või eemalda see valikust.", + "empty": "Integratsioone pole valitud. Homarr loob siiski kasuliku alguspaneeli üldiste vidinatega.", + "dockerSource": "Docker", + "manualSource": "Käsitsi", + "url": "Teenuse URL", + "noCredentials": "Mandaadid puuduvad", + "noCredentialsDescription": "See integratsioon ei vaja mandaate.", + "credentialMethod": "Mandaadimeetod", + "getApiKey": "Ava selle teenuse API-võtme seaded", + "openGuide": "Ava Homarri selle teenuse seadistusjuhend", + "testConnection": "Testi ühendust", + "testSuccess": "Ühendus toimib", + "testSuccessDescription": "Homarr ühendus praeguse aadressi ja mandaatidega õnnestus.", + "testError": "Ühendus nurjus", + "testErrorDescription": "Kontrolli teenuse aadressi ja mandaate ning proovi uuesti.", + "needsConfiguration": "Vajab seadistamist", + "tested": "Ühendust on testitud", + "testFailed": "Ühenduse test nurjus", + "incompleteConfirmation": "Lõpetamata integratsioonid jäetakse vahele. Kas jätkata ilma nendeta?" + }, + "board": { + "title": "Kujunda paneel enne selle loomist", + "description": "Homarr loob kaitstud mobiili- ja baaspaigutused ning paigutab sinna teie valitud teenuste rakendused ja ühilduvad vidinad.", + "target": "Seadistatav paneel", + "targetDescription": "Valige täpselt see olemasolev paneel, mida see seadistus peaks uuendama.", + "targetPlaceholder": "Valige paneel", + "targetRequired": "Valige enne jätkamist seadistatav paneel.", + "name": "Paneeli nimi", + "nameDescription": "Kasutatakse paneeli URL-is; lubatud on ainult tähed, numbrid, sidekriipsud ja alakriipsud.", + "nameRequired": "Enne jätkamist sisestage paneeli nimi.", + "primaryColor": "Põhivärv", + "secondaryColor": "Sekundaarne värv", + "resetColors": "Lähtesta värvid", + "radius": "Vidina nurga raadius", + "radiusOptions": { + "xs": "Tihe", + "sm": "Tagasihoidlik", + "md": "Tasakaalustatud", + "lg": "Ümar", + "xl": "Pehme" }, - "fileInfo": { - "action": { - "change": "Muuda faili" - } + "columns": "Paneeli veerud", + "columnsDescription": "Veerud määravad horisontaalse ruudustiku, mida kasutatakse elementide suuruse ja asukoha määramiseks. Enamiku kasutajate jaoks piisab 12-st.", + "columnCount": "{count, plural, one {# veerg} other {# veergu}}", + "leftSidebar": "Vasak külgriba", + "rightSidebar": "Parem külgriba", + "previewLabel": "Esimese paneelipaigutuse reaalajas eelvaade" + }, + "extend": { + "title": "Täpsemad funktsioonid", + "tabsLabel": "Assistendi, töötoa ja MCP seadistus", + "assistant": "Assistent", + "workshop": "Töötuba", + "assistantSetup": { + "loginTitle": "Administraatorina sisselogimine on nõutav", + "loginDescription": "Teenusepakkujate võtmed ja mudelitele juurdepääs on piiratud. Viige seadistus lõpule, logige sisse ja Homarr avab otse assistendi konfiguratsiooni.", + "loginAction": "Logi sisse assistendi seadistamiseks" }, - "importSettings": { - "title": "Impordi sätted", - "description": "Seadista importimise parameetrid" + "workshopSetup": { + "title": "Homarri töötuba", + "description": "Sirvige kogukonna kohandatud vidinaid, vaadake nende küsitud võimalusi, installige neid ja avaldage oma tööd ilma koodi serverite vahel kopeerimata.", + "available": "Saadaval", + "checking": "Kontrollimine…", + "unavailable": "Pole saadaval", + "discoverTitle": "Avasta", + "discoverDescription": "Leidke vidinaid, mis on loodud päris isemajutatud töövoogude jaoks.", + "installTitle": "Vaata üle ja installi", + "installDescription": "Enne millegi lisamist vaadake metaandmeid ja konfiguratsiooni.", + "publishTitle": "Jaga", + "publishDescription": "Avaldage korduvkasutatavad vidinad kogukonnale.", + "browse": "Sirvi töötuba" }, - "boardSelection": { - "title": "Leiti {count} paneeli", - "description": "Vali kõik paneelid koos nende suurustega, mida soovid importida", - "action": { - "selectAll": "Vali kõik", - "unselectAll": "Eemalda valikud" - } - }, - "summary": { - "title": "Impordi kokkuvõte", - "description": "Allolevas kokkuvõttes näed, mida imporditakse", - "action": { - "import": "Kinnita import ja jätka" - }, - "entities": { - "apps": "Rakendused", - "boards": "Paneelid", - "integrations": "Integratsioonid", - "credentialUsers": "Mandaadiga kasutajad" - } - }, - "tokenModal": { - "title": "Sisesta impordiluba", - "field": { - "token": { - "label": "Luba", - "description": "Sisesta oma eelmises Homarri eksemplaris kuvatud impordiluba" - } - }, - "notification": { - "error": { - "title": "Sobimatu luba", - "message": "Sisestatud luba on sobimatu" - } - } + "mcpSetup": { + "title": "Homarri MCP", + "description": "Ühendage Claude, Codex või mõni muu MCP-klient Homarri tüübipõhiste tööriistadega. API-võtmed tagavad selgesõnalise ja tühistatava juurdepääsu.", + "endpoint": "Voogedastatav HTTP-lõpp-punkt", + "keyTitle": "Kopeerige see võti kohe", + "keyDescription": "Turvalisuse huvides ei saa Homarr seda API-võtit enam näidata.", + "copyKey": "Kopeeri API-võti", + "createKey": "Loo MCP API-võti", + "errorTitle": "MCP API-võtit ei saanud luua", + "loginRequired": "Pärast seadistamist logige administraatorina sisse, et luua API-võti.", + "configuration": "Kliendi konfiguratsioon", + "copy": "Kopeeri konfiguratsioon", + "copied": "Kopeeritud", + "advanced": "Ava MCP tööriistad, õigused ja seadistuse üksikasjad" } }, - "user": { - "title": "Administraator", - "subtitle": "Määra administraatori kasutaja mandaadid.", - "notification": { - "success": { - "title": "Kasutaja loodud", - "message": "Kasutaja loodi edukalt" - }, - "error": { - "title": "Kasutaja loomine ebaõnnestus" - } - } - }, - "group": { - "title": "Väline rühm", - "subtitle": "Määra rühm, mida tuleks väliste kasutajate jaoks kasutada.", - "form": { - "name": { - "label": "Rühma nimi", - "description": "Nimi peab vastama välise pakkuja administraatorirühmale" - } - } - }, - "settings": { - "title": "Seaded", - "subtitle": "Määra serveri seaded." - }, - "integrations": { - "title": "Integratsioonid", - "subtitle": "Vali kasutatavad teenused.", - "description": "Vali integratsioonid, mida soovid ühendada. Seadistame sinu juhtpaneeli automaatselt vastavate vidinatega.", - "action": { - "continue": "Jätka", - "skip": "Jäta praegu vahele" - }, - "configure": { - "progress": "{current} / {total}", - "skip": "Jäta see integratsioon vahele", - "finishing": "Sinu juhtpaneeli seadistamine...", - "error": { - "title": "Seadistamine nurjus", - "message": "Juhtpaneeli seadistamisel läks midagi valesti. Palun proovi uuesti." - }, - "helpers": { - "tooltip": "URL-iabilised", - "description": "Need abilised püüavad sinu teenuste URL-i ära arvata. Kui see ei tööta, sisesta aadress käsitsi." - } - }, - "urlTemplate": { - "label": "Baasi-URL", - "placeholder": "homelab.local või 192.168.1.1", - "hint": "Sisesta automaatseks integratsiooni-URL-ide täitmiseks oma baasdomeen või IP-aadress", - "warning": "Baasi-URL-i määramine täidab kõik integratsiooni-URL-id automaatselt ja säästab seadistamisel aega", - "preview": "nt {example}", - "mode": { - "subdomain": "Alamdomeen", - "hostPort": "Host:port" - } - }, - "docker": { - "detected": "Docker tuvastas {count} teenust", - "detectedBreakdown": "{integrations} integratsiooni · {apps} rakendust", - "summary": "Homarr tuvastas {apps} rakendust, millest {integrations} sisaldavad sisseehitatud integratsiooni", - "appBadge": "Rakendus", - "appSectionLabel": "Juhtpaneelile lisatavad rakendused ({count} valitud)", - "scanning": "Dockeri skannimine...", - "scanningDescription": "Süsteemis töötavate konteinerite otsimine" + "review": { + "title": "Üks paneel teie teenuste jaoks", + "description": "Homarr testib salvestamata ühendusi, impordib valitud rakendused, rakendab välimuse ja paigutused ning avab seejärel täpselt konfigureeritud paneeli.", + "board": "Esimene paneel", + "columns": "Paneeli veerud", + "columnsValue": "{count, plural, one {# veerg} other {# veergu}}", + "sidebars": "Külgribad", + "sidebarsValue": "{count, plural, =0 {Puuduvad} one {# külgriba} other {# külgriba}}", + "layouts": "Kohanduvad paigutused", + "layoutsValue": "Mobiil + baas", + "integrations": "Integratsioonid", + "integrationsValue": "{count, plural, =0 {Midagi pole valitud} one {# integratsioon} other {# integratsiooni}}", + "apps": "Rakendusepaanid", + "appsValue": "{count, plural, =0 {Ainult alustusrakendused} one {# rakendusepaan} other {# rakendusepaani}}", + "language": "Keel", + "theme": "Teema", + "themeAuto": "Süsteemi eelistus", + "themeLight": "Hele", + "themeDark": "Tume", + "colors": "Paneeli värvid", + "radius": "Vidina raadius", + "automaticTitle": "Mida Homarr loob", + "automaticDescription": "Ühilduvad vidinad, ikoonid, rakenduste lingid, integratsioonisuhted ja kohanduv paigutus pärinevad Homarri jagatud kataloogist. Kõiki tulemusi saab hiljem muuta.", + "dockerWarningTitle": "Mõned Dockeri sildid muutusid seadistamise ajal", + "dockerWarningDescription": "{count, plural, one {Valitud Dockeri tulemust ei saanud rakendada, sest selle teenus muutus, see oli suunatud teisele paneelile või vidin ei ühildunud} other {Valitud Dockeri tulemusi ei saanud rakendada, sest teenused muutusid, need olid suunatud teistele paneelidele või vidinad ei ühildunud}}.", + "errorTitle": "Paneeli ei saanud luua", + "progress": { + "applying": "Ühenduste testimine ja paneeli loomine", + "done": "Teie paneel on valmis" } }, "finish": { - "title": "Lõpeta seadistamine", - "subtitle": "Kõik on valmis!", - "description": "Oled seadistamise edukalt lõpetanud. Nüüd saad hakata Homarri kasutama. Vali järgmine toiming:", - "action": { - "goToBoard": "Mine paneelile {name}", - "createBoard": "Loo oma esimene paneel", - "inviteUser": "Kutsu teisi kasutajaid", - "docs": "Loe dokumentatsiooni" - } + "title": "Teie esimene paneel on valmis.", + "description": "Homarr ühendas teie valitud osad ja jättis ülejäänu muudetavaks. Avage paneel kohe; lühike rakendusesisene tuur näitab teile redigeerimisrežiimi, vidinaid, paigutusi ja otsingut.", + "openBoard": "Ava minu paneel", + "manageTitle": "Halda", + "manageDescription": "Viimistlege rakendusi, integratsioone, paneele, kasutajaid ja serveri seadeid.", + "workshopTitle": "Töötuba", + "workshopDescription": "Avastage ja installige kogukonna kohandatud vidinaid.", + "docsTitle": "Õpi Homarri kasutama", + "docsDescription": "Lugege keskendunud juhendeid paneelide, vidinate, integratsioonide ja tööriistade kohta." } - }, - "backToStart": "Tagasi algusesse" + } }, "user": { - "title": "Kasutajad", "name": "Kasutaja", "page": { "login": { @@ -159,12 +249,10 @@ }, "invite": { "title": "Liitu Homarriga", + "titleWithAppName": "Liitu rakendusega {appName}", "subtitle": "Tere tulemast Homarrisse! Palun loo oma konto", + "subtitleWithAppName": "Tere tulemast rakendusse {appName}! Palun looge oma konto", "description": "Sind kutsus {username}" - }, - "init": { - "title": "Uus Homarri paigaldus", - "subtitle": "Palun loo esmane administraatori kasutaja" } }, "field": { @@ -192,12 +280,17 @@ "previousPassword": { "label": "Eelmine parool" }, - "homeBoard": { - "label": "Kodupaneel" - }, "pingIconsEnabled": { "label": "Kasuta pingide jaoks ikoone" }, + "byteUnitSystem": { + "label": "Andmemahu ühikud", + "description": "Valige, kuidas Homarr kuvab baitide mahtusid ja edastuskiirusi. Bitikiirused kasutavad alati kümnendühikuid.", + "options": { + "binary": "Binaarne", + "decimal": "Kümnend" + } + }, "enableRightClickOnWidgets": { "label": "Luba vidinatel paremklõps", "description": "Kuva vidinal paremklõpsamisel Homarri kontekstimenüü. Keela see, et kasutada brauseri vaikemenüüd (nt \"Ava link uuel vahelehel\")." @@ -247,7 +340,6 @@ } } }, - "create": "Loo kasutaja", "changePassword": { "label": "Muuda parooli", "notification": { @@ -259,56 +351,6 @@ } } }, - "changeHomeBoard": { - "notification": { - "success": { - "message": "Kodupaneel edukalt muudetud" - }, - "error": { - "message": "Kodujuhtpaneeli ei saanud muuta" - } - } - }, - "changeSearchPreferences": { - "notification": { - "success": { - "message": "Otsingueelistused muudeti edukalt" - }, - "error": { - "message": "Otsingueelistusi ei saanud muuta" - } - } - }, - "changeFirstDayOfWeek": { - "notification": { - "success": { - "message": "Nädala esimene päev edukalt muudetud" - }, - "error": { - "message": "Nädala esimest päeva ei saanud muuta" - } - } - }, - "changePingIconsEnabled": { - "notification": { - "success": { - "message": "Pingiikoonid edukalt lülitatud" - }, - "error": { - "message": "Pingiikoone ei saanud lülitada" - } - } - }, - "changeDdgBangs": { - "notification": { - "success": { - "message": "DuckDuckGo hüüdotsingute muutmine õnnestus" - }, - "error": { - "message": "DuckDuckGo hüüdotsingute lülitamine nurjus" - } - } - }, "manageAvatar": { "changeImage": { "label": "Muuda pilti", @@ -338,16 +380,6 @@ } } }, - "editProfile": { - "notification": { - "success": { - "message": "Profiil edukalt uuendatud" - }, - "error": { - "message": "Profiili ei saanud uuendada" - } - } - }, "delete": { "label": "Kustuta kasutaja jäädavalt", "description": "Kustutab selle kasutaja koos tema eelistustega. Ei kustuta ühtegi juhtpaneeli. Kasutajat ei teavitata.", @@ -356,18 +388,13 @@ "select": { "label": "Vali kasutaja", "notFound": "Kasutajat ei leitud" - }, - "transfer": { - "label": "Vali uus omanik" } } }, "group": { - "title": "Rühmad", "name": "Rühm", "search": "Otsi rühma", "field": { - "name": "Nimi", "members": "Liikmed", "homeBoard": { "label": "Kodupaneel", @@ -388,6 +415,19 @@ } } }, + "custom-widget": { + "title": "Kohandatud vidinad", + "item": { + "manage": { + "label": "Halda kohandatud vidinaid", + "description": "Luba liikmetel kohandatud vidinate määratlusi luua, redigeerida ja kustutada" + }, + "secret-write": { + "label": "Konfigureeri kohandatud vidinate saladusi", + "description": "Luba liikmetel ja nende API-võtmetel määrata krüptitud kohandatud vidinate mandaate" + } + } + }, "app": { "title": "Rakendused", "item": { @@ -493,6 +533,35 @@ "description": "Luba liikmetel hallata ja kustutada mis tahes otsingumootorit" } } + }, + "matrix": { + "none": "Juurdepääs puudub", + "impliedHint": "Annab samuti: {permissions}", + "grantedViaAdmin": "Administraatoritel on see juba olemas. Eraldi konfigureerimiseks määrake administraatori tasemeks „Juurdepääs puudub“.", + "preset": { + "label": "Eelseaded", + "viewer": "Vaataja", + "viewerDescription": "Ainult lugemisõigus: vaadake paneele ja meediat ning kasutage olemasolevaid rakendusi ja integratsioone.", + "editor": "Redaktor", + "editorDescription": "Igapäevane haldus: looge ja redigeerige paneele, rakendusi, integratsioone ja otsingumootoreid.", + "admin": "Administraator", + "adminDescription": "Piiramatu juurdepääs kõigile funktsioonidele ja seadetele, sealhulgas kasutajate haldusele.", + "custom": "Kohandatud" + }, + "effective": { + "title": "Tegelikud õigused", + "description": "Täielik, duplikaatideta toimingute kogum, mida selle rühma liikmed saavad teha, sealhulgas kaudselt antud õigused.", + "empty": "Õigusi pole valitud" + }, + "noneDescription": "Liikmetel puudub sellele alale juurdepääs.", + "level": { + "view": "Vaata", + "use": "Kasuta", + "interact": "Suhtle", + "modify": "Muuda", + "full": "Täielik" + }, + "capabilityIncluded": "Juba sisaldub tasemes „{level}“" } }, "memberNotice": { @@ -607,21 +676,24 @@ "search": "Leia rakendus", "page": { "list": { - "title": "Rakendused", + "ariaLabel": "Konfigureeritud rakendused", "noResults": { "title": "Ühtegi rakendust pole veel", - "action": "Loo oma esimene rakendus" + "description": "Rakendused on lingid teenustele ja tööriistadele, mida soovite oma paneelidel kasutada.", + "action": "Loo oma esimene rakendus", + "filteredTitle": "Ükski rakendus ei vasta teie otsingule", + "filteredDescription": "Ükski rakendus ei vasta otsingule „{search}“. Proovige muud nime või URL-i.", + "createOnlyTitle": "Saate lisada ainult rakendusi", + "createOnlyDescription": "Teie õigused lubavad teil rakendusi luua, kuid mitte olemasolevaid sirvida. Täieliku loendi nägemiseks paluge administraatorilt rakenduste haldamise õigust." } }, "create": { "title": "Uus rakendus", "notification": { "success": { - "title": "Loomine õnnestus", "message": "Rakendus loodi edukalt" }, "error": { - "title": "Loomine ebaõnnestus", "message": "Rakendust ei saanud luua" } } @@ -630,11 +702,9 @@ "title": "Muuda rakendust", "notification": { "success": { - "title": "Muudatused rakendati edukalt", "message": "Rakendus edukalt salvestatud" }, "error": { - "title": "Muudatusi ei saanud rakendada", "message": "Rakendust ei saanud salvestada" } } @@ -644,26 +714,18 @@ "message": "Kas oled kindel, et soovid kustutada rakenduse {name}?", "notification": { "success": { - "title": "Kustutamine õnnestus", "message": "Rakendus edukalt kustutatud" }, "error": { - "title": "Kustutamine ebaõnnestus", "message": "Rakendust ei saanud kustutada" } } } }, "field": { - "name": { - "label": "Nimi" - }, "description": { "label": "Kirjeldus" }, - "url": { - "label": "Url" - }, "useDifferentUrlForPing": { "checkbox": { "label": "Kasuta pingi jaoks teist URL-i", @@ -678,34 +740,582 @@ "search": "Otsi rakendust", "noResults": "Tulemusi pole", "action": "Vali {app}", - "title": "Vali rakendus, mida sellele paneelile lisada" + "title": "Vali rakendus, mida sellele paneelile lisada", + "toggle": "Valimiseks klõpsake", + "selected": "Valitud", + "multiple": "Lisa {count}", + "selectedCount": "{count, plural, one {# valitud} other {# valitud}}", + "appsSelected": "{count, plural, one {# rakendus valitud} other {# rakendust valitud}}", + "selectMultiple": "Vali mitu", + "cancelMultiple": "Välju mitmikvalikust", + "customApplication": "Kohandatud rakendus", + "application": "Rakendus" }, "create": { "title": "Loo uus rakendus", "description": "Loo uus rakendus ", "action": "Ava rakenduse loomine" + } + } + }, + "tips": { + "dismiss": "Sulge vihje", + "multiSelectApps": "Vihje: hoidke mitme rakenduse korraga valimiseks all klahvi Ctrl / ⌘" + }, + "customWidget": { + "secretEntry": { + "title": "Konfigureeri API allikas", + "description": "Kinnitage serveri URL ja sisestage mandaadid. Homarr krüptib saladuste väärtused ning neid ei tagastata kunagi päringu teinud agendile.", + "loading": "Turvalise päringu laadimine…", + "applying": "Selle konfiguratsiooni rakendamine… Hoidke see leht avatuna.", + "saved": "API allikas on konfigureeritud. Võite selle lehe sulgeda.", + "unavailable": "Päring pole saadaval", + "saveError": "API allikat ei saanud konfigureerida", + "source": "API allikas: {name}", + "baseUrl": "Serveri URL", + "networkScope": "Võrgule juurdepääs", + "save": "Salvesta API konfiguratsioon", + "expires": "See ühekordne päring aegub ajal {time}." + }, + "page": { + "list": { + "noResults": "Kohandatud vidinaid veel pole. Loo esimene!", + "noDescription": "Kirjeldus puudub", + "enabled": "Lubatud", + "disabled": "Keelatud", + "disabledDescription": "See vidin jääb konfigureerituks, kuid seda ei laadita ühelgi paneelil.", + "requestCount": "{count, plural, one {# päring} other {# päringut}}", + "invalidDefinition": "Vigane määratlus", + "migrationRequired": "Vajalik on migreerimine", + "migrationInstructions": "Avage toimingud, et kopeerida või eksportida algne v1 määratlus käsitsi taasloomiseks. Võite kasutada ka migratsiooniviipa koos LLM-iga. Olemasolevad paigutused paneelidel töötavad pärast migratsiooni edasi.", + "missingCredentials": "{count, plural, one {Mandaat puudub} other {# mandaati puudub}}", + "missingCredentialsDescription": "{count, plural, one {See vidin vajab endiselt üht mandaati.} other {See vidin vajab endiselt # mandaati.}} Valige see märk URL-i ja krüptitud väärtuste konfigureerimiseks." }, - "add": "Lisa rakendus" + "create": { + "title": "Loo kohandatud vidin", + "subtitle": "Määra API URL, autentimine ja vastuseandmete kuvamisviis." + }, + "tabs": { + "ariaLabel": "Kohandatud vidinate jaotised", + "installed": "Installitud", + "workshop": "Töötuba" + } + }, + "action": { + "pasteImportHint": "Kleepige täielik kohandatud vidina JSON klahvikombinatsiooniga Ctrl+V või Command+V", + "delete": "Kustuta kohandatud vidin", + "deleteConfirm": "Kas oled kindel, et soovid „{name}“ kustutada? Seda toimingut ei saa tagasi võtta.", + "export": "Ekspordi", + "duplicate": "Dubleeri", + "aiPrompt": "Kujunda tehisintellekti abil", + "copyAiPrompt": "Kopeeri tehisintellekti viip", + "enable": "Luba", + "disable": "Keela", + "menu": "Toimingud", + "downloadSkill": "Vaata kohandatud vidina oskust", + "publishWorkshop": "Avalda töötoas", + "migrate": "Migreeri kohandatud vidin", + "configureSources": "Seadista allikad", + "copyLegacyDefinition": "Kopeeri algse vidina sisu", + "exportLegacyDefinition": "Ekspordi algse vidina sisu", + "copyMigrationPrompt": "Kopeeri LLM-i migratsiooniviip", + "pasteMigration": "Kleebi migreeritud vidin", + "importMigration": "Impordi migreeritud JSON-fail" + }, + "sourceSetupDialog": { + "title": "Vidina allikate seadistamine", + "description": "Vaata üle, millega see vidin ühendub, ning lisa või asenda selle krüptitud mandaadid.", + "credentialsRequired": "Päringud nurjuvad, kuni nõutud mandaadid on lisatud.", + "save": "Salvesta konfiguratsioon" + }, + "field": { + "description": "Kirjeldus" + }, + "editor": { + "errorBoundary": { + "title": "Midagi läks valesti" + }, + "action": { + "components": "Komponendid", + "format": "Vorminda", + "insertStarter": "Lisa algmall", + "redo": "Tee uuesti", + "copied": "Kopeeritud", + "schema": "Skeem" + }, + "reference": { + "minimal": "Minimaalne näide", + "full": "Täielik näide" + }, + "componentReference": { + "search": "Otsi komponente", + "empty": "Sobivaid komponente ei leitud", + "count": "Saadaval on {count, number} komponenti" + }, + "status": { + "errors": "{count, number} viga", + "warnings": "{count, number} hoiatust", + "ready": "Probleeme ei leitud", + "position": "Rida {line, number}, veerg {column, number}", + "characters": "{count, number} märki", + "charactersWithLimit": "{count, number} / {limit, number}" + }, + "diagnostics": { + "title": "Malli diagnostika", + "line": "Rida {line, number}", + "ast": "{value}", + "bindingTypeConflict": "Sisendit „{value}“ jagavad ühildumatute väärtusetüüpidega juhtelemendid.", + "runtimeBindingTypeConflict": "Sisend on „{value}“ seotud nii tüübiga {firstType} kui ka tüübiga {secondType}.", + "dynamicRequestId": "Vajalik on sõnasõnaline requestId. Dünaamilisi päringu-ID-sid ei aktsepteerita.", + "dynamicInputBinding": "Sidumiseks on vaja sõnasõnalist sisendi nime.", + "inlineRequestProps": "Võrgukomponendid aktsepteerivad requestId-d ja parameetreid; URL-i, meetodi, päise ja keha tekstisisesed atribuudid on blokeeritud.", + "invalidRequestManifest": "Nimega päringud peavad olema kehtiv päringukaart. {value}", + "missingRequestId": "See võrgukomponent nõuab sõnasõnalist requestId-d.", + "templateEmpty": "Sisesta JSX-mall.", + "templateTooLong": "Mall ületab 50 000 märgi piirangu.", + "unknownRequest": "Nimega päringut ID-ga „{value}“ ei ole olemas." + } + }, + "workbench": { + "configure": "Seadista", + "sectionNavigation": "Kohandatud vidina jaotised", + "widgetPreview": "Vidina eelvaade", + "generalInformation": "Üldteave", + "invalidWidget": "Kehtetu vidin", + "section": { + "general": "Üldine", + "sources": "API-allikad", + "requests": "Päringud", + "options": "Suvandid", + "jsx": "JSX", + "preview": "Eelvaade" + }, + "status": { + "unsaved": "Salvestamata muudatused", + "invalid": "Vajab tähelepanu", + "ready": "Valmis" + }, + "saveError": { + "title": "Vidinat ei salvestatud", + "description": "Paranda need valideerimisvead ja salvesta uuesti.", + "more": "Tööpingis kuvatakse veel {count} viga.", + "errors": "Valideerimisvead", + "copy": "Kopeeri vead", + "copied": "Vead kopeeritud" + }, + "action": { + "preview": "Testi ja eelvaata", + "previewLoading": "Päringute testimine" + }, + "requests": { + "title": "Nimega päringud ja toimingud", + "label": "Päringud", + "description": "Päringud laadivad andmeid; toimingud käivitatakse alles kasutaja suhtluse järel. Mõlema jaoks sobib mis tahes HTTP-meetod." + }, + "options": { + "title": "Vidina suvandid" + }, + "builder": { + "advancedManifest": "Täiustatud toormanifest", + "advancedJson": "Täiustatud manifesti JSON", + "manifestFilename": "widget.json", + "request": "Päring {count, number}", + "requestId": "Päringu ID", + "type": "Allalaadimishalduri tüüp", + "method": "Meetod", + "source": "API-allikas", + "run": "Käivita", + "runLoad": "Vidina laadimisel", + "runManual": "SubFetchist", + "permission": "Õigus", + "path": "Tee", + "pathDescription": "Kasuta vidina suvandite jaoks „{option:name}“ ja väljakutse väärtuste jaoks „{param:name}“.", + "requestDetails": "Päring, keha ja käitumine", + "queryValues": "Päringu väärtused", + "queryKey": "Päringu võti", + "queryKeyInvalid": "Kasuta kordumatut ID-d, mis algab tähega ja sisaldab ainult tähti, numbreid, märke - või _.", + "valueSource": "Väärtuse allikas", + "literal": "Sõnasõnaline väärtus", + "widgetOption": "Vidina suvand", + "invocationParameter": "Väljakutse parameeter", + "option": "Suvand", + "parameterName": "Parameetri nimi", + "value": "Väärtus", + "removeQueryValue": "Eemalda päringu väärtus", + "addQueryValue": "Lisa päringu väärtus", + "jsonBody": "JSON-keha", + "jsonBodyDescription": "Valikuline. Lisa $option- ja $param-viiteid mis tahes sügavusele.", + "insertOptionReference": "Lisa suvandi viide", + "insertParameterReference": "Lisa parameetri viide", + "confirmation": "Kinnitusteade", + "invalidation": "Värskenda pärast õnnestumist", + "invalidationDescription": "Komadega eraldatud päringu-ID-d", + "noAuth": "Saada ilma allika autentimiseta", + "moveRequestUp": "Liiguta päring üles", + "moveRequestDown": "Liiguta päring alla", + "removeRequest": "Eemalda päring", + "addRequest": "Lisa päring", + "optionName": "Suvandi nimi", + "label": "Silt", + "control": "Juhtelement", + "description": "Kirjeldus", + "default": "Vaikeväärtus", + "optionDetails": "Piirangud ja dünaamilised valikud", + "minimum": "Miinimum", + "maximum": "Maksimum", + "step": "Samm", + "choiceLabel": "Valiku silt", + "choiceValue": "Valiku väärtus", + "newChoice": "Uus valik", + "addChoice": "Lisa valik", + "removeChoice": "Eemalda valik", + "choicesRequest": "Laadi valikud päringust", + "itemsPath": "Üksuste tee", + "itemsPathPlaceholder": "üksused (valikuline)", + "valuePath": "Väärtuse tee", + "labelPath": "Sildi tee", + "group": "Rühm", + "advancedOption": "Täiustatud suvand", + "moveOptionUp": "Liiguta suvand üles", + "moveOptionDown": "Liiguta suvand alla", + "removeOption": "Eemalda suvand", + "addOption": "Lisa suvand", + "invalidJson": "Vigane JSON", + "invalidWidget": "Kehtetu vidin" + }, + "jsx": { + "title": "JSX-mall", + "label": "Mall" + }, + "sources": { + "title": "API-allikad ja mandaadid", + "newName": "API nr {count, number}", + "duplicateSourceId": "API-allikate ID-d peavad olema kordumatud.", + "credentialRemoved": "Mandaat eemaldatud", + "credentialRemovedDescription": "Salvestatud väärtus kustutati.", + "primary": "Esmane API", + "id": "Allika ID", + "name": "Töö nimetus", + "baseUrl": "Baas-URL", + "baseUrlError": { + "invalid": "Sisesta täielik URL.", + "protocol": "Kasuta HTTP- või HTTPS-URL-i.", + "credentials": "Eemalda sellest URL-ist kasutajanimi ja parool. Seadista mandaadid selle asemel allpool.", + "queryOrFragment": "Eemalda baas-URL-ist päringustring või fragment. Lisa päringu väärtused nimega päringule." + }, + "networkScope": "Võrgupääs", + "authentication": "Autentimine", + "headerName": "Päise nimi", + "queryParameter": "Päringuparameeter", + "configured": "Seadistatud — sisesta asendus", + "clear": "Tühjenda", + "remove": "Eemalda allikas ja selle päringud", + "advanced": "Täpsemad seaded", + "add": "Lisa veel üks API-allikas", + "sourceType": "Integratsioon", + "manualSource": "HTTP-liides", + "existingIntegration": "Olemasolev integratsioon", + "integrationType": "Integratsiooni tüüp", + "selectIntegration": "Seadistatud integratsioon", + "noIntegrations": "Sobivaid integratsioone pole saadaval", + "integrationUnavailable": "Valitud integratsioon pole enam saadaval. Vali mõni teine integratsioon.", + "integrationDescription": "Kasutab salvestatud integratsiooni URL-i ja mandaate. Muudatused rakenduvad automaatselt. Päringute käivitamiseks on vaja täielikku integratsioonipääsu." + }, + "ai": { + "title": "Loo või paranda mis tahes AI abil", + "description": "Kui sul on API dokumentatsiooni URL, lisa see esmalt. Paranduste puhul käivita võimaluse korral eelvaade. Kopeeri viip mis tahes AI-sse; see võib küsida puuduvaid üksikasju. Kleebi selle lõplik JSON siia.", + "request": "Mida see vidin tegema peaks?", + "documentationUrl": "API dokumentatsiooni URL (valikuline)", + "paste": "Kleebi", + "response": "AI vastus", + "manualCopyDescription": "Lõikelaua kasutamine pole saadaval. Vali allolev viip ja kopeeri see käsitsi.", + "manualPasteDescription": "Lõikelaua kasutamine pole saadaval või kopeeritud vastus vajab parandamist. Kleebi AI JSON-vastus siia.", + "selectAll": "Vali kõik", + "loadResponse": "Laadi vastus", + "loaded": "Vidin laaditi redaktorisse", + "invalidResponse": "Lõikelaud ei sisalda kehtivat v2 vidinat", + "invalidResponseDetail": "AI vastus on kehtetu: {message}" + }, + "preview": { + "invalid": "Vidina eelvaate kuvamiseks paranda valideerimisvead.", + "fixtureError": "Eelvaate fikstuuri viga", + "requestData": "Päringuandmed", + "status": { + "idle": "Päringuid pole testitud", + "loading": "Päringute testimine", + "success": "Kõik laadimispäringud õnnestusid", + "error": "Üks või mitu laadimispäringut nurjus" + }, + "result": { + "loading": { + "title": "API-päringute testimine", + "description": "Homarr loob eelvaateseanssi ja laadib vidina andmeid." + }, + "success": { + "title": "Eelvaade on valmis", + "description": "{succeeded, plural, =0 {Sellel vidinal pole laadimispäringuid.} one {# laadimispäring õnnestus.} other {# laadimispäringut õnnestus.}} Ava andmed vastuse kontrollimiseks." + }, + "error": { + "title": "Eelvaade lõppes päringuvigadega", + "description": "{succeeded, number} õnnestus ja {failed, number} nurjus. Ava andmed vastuse ja vea üksikasjade vaatamiseks." + } + }, + "instanceOptions": "Eksemplari suvandid", + "liveActions": "Käivita toiminguid seadistatud API vastu", + "liveActionsDescription": "Väljalülitatud olek on turvaline simulatsioon. Selle sisselülitamine mõjutab tegelikku teenust.", + "noActions": "Toiminguid pole määratletud.", + "containedFailures": "Käitusaja tõrked on selles vidinas isoleeritud. Päringupäevikud ei sisalda kunagi salajasi väärtusi.", + "validation": { + "title": "Valideerimine", + "ready": "Vidina määratlus on kehtiv." + }, + "accessibility": { + "title": "Hõlbustuskontrollid", + "ready": "Levinud hõlbustuspuudusi ei tuvastatud.", + "pending": "Hõlbustuskontrollid käivitatakse, kui vidina määratlus on kehtiv.", + "imageAlt": "Lisa igale Image-komponendile alternatiivtekst; tühja alt-atribuuti kasuta ainult dekoratiivsete piltide puhul.", + "actionIconLabel": "Lisa igale ActionIconile aria-label või pealkiri.", + "inputLabel": "Lisa igale sisendile nähtav silt või hõlbustatav nimi." + }, + "journal": "Puhastatud päringupäevik", + "actionParameters": "Toimingu parameetrid (JSON)", + "invalidParameters": "Kasuta deklareeritud stringi-, numbri- ja tõeväärtuse tüüpe.", + "runDestructive": "Käivita hävitav toiming", + "runAction": "Käivita toiming", + "deleteConfirmation": "See eelvaate toiming muudab seadistatud API kaudu kaugandmeid.", + "simulated": "Toiming simuleeritud", + "httpStatus": "HTTP olek {status, number}", + "tab": { + "widget": "Vidin", + "data": "Andmed", + "options": "Suvandid", + "state": "Töö olek", + "actions": "Juhtelemendid", + "diagnostics": "Diagnostika" + }, + "size": { + "compact": "Kompaktne", + "standard": "Standardne", + "wide": "Lai" + }, + "fixture": { + "live": "Reaalajas", + "loading": "Laadimine", + "empty": "Tühi", + "error": "Viga" + } + } + }, + "preview": { + "request": { + "permission": { + "view": "Vaata", + "modify": "Muuda", + "full": "Täielik" + } + } + }, + "notification": { + "created": "Vidin „{name}“ loodi edukalt.", + "updated": "Vidinat „{name}“ värskendati edukalt.", + "deleted": "Vidin „{name}“ kustutati.", + "imported": "Vidin imporditi edukalt.", + "migrated": "Pärandvidin migreeriti edukalt. Olemasolevad tahvlipaigutused kasutavad nüüd v2 määratlust.", + "migrationError": "Pärandvidina migreerimine nurjus. Veendu, et fail kasutab homarr-custom-widget-v2 skeemi.", + "legacyDefinitionCopied": "Algse vidina sisu kopeeriti. Salvestatud mandaadiväärtusi ei kaasatud.", + "legacyDefinitionCopyError": "Algse vidina sisu kopeerimine nurjus.", + "migrationPromptCopied": "Puhastatud migratsiooniviip kopeeriti. Kleebi see LLM-i, kopeeri selle üksik JSON-vastus ja vali siin „Kleebi migreeritud vidin“.", + "migrationPromptCopyError": "Migratsiooniviiba kopeerimine nurjus.", + "sourcesConfigured": "Vidina allikad ja mandaadid salvestati.", + "sourceConfigurationError": "Vidina allikate seadistamine nurjus.", + "aiPromptCopiedWithCount": "AI viip kopeeriti lõikelauale ({count, number} märki).", + "aiPromptCopyError": "Viiba kopeerimine lõikelauale nurjus. Sinu veebibrauser ei pruugi seda funktsiooni toetada.", + "aiPromptSent": "Viip saadeti. Saad jätkata muutmist, kuni assistent töötab taustal.", + "updateError": "Vidina värskendamine nurjus. Muudatusi ei salvestatud.", + "importError": "Vidina importimine nurjus. Veendu, et fail oleks sobiv kohandatud vidina JSON-eksport.", + "exportError": "Vidina eksportimine nurjus.", + "duplicated": "Vidin „{name}“ dubleeriti.", + "duplicateError": "Vidina dubleerimine nurjus.", + "toggleError": "Vidina oleku lülitamine nurjus.", + "deleteError": "Vidina kustutamine nurjus.", + "previewError": "Eelvaate toomine nurjus. Kontrolli URL-i ja proovi uuesti." + }, + "importReview": { + "title": "Vaata üle kohandatud vidina import", + "description": "Kontrolli enne importimist, millega see vidin ühendub ja millist tahvli juurdepääsu selle juhtelemendid vajavad.", + "migrationTitle": "Vaata üle migreeritud v2 asendus", + "migrationDescription": "Vaata üle ja kinnita see loodud v2 määratlus. Kinnitamine asendab säilitatud v1 kirje aatomiliselt, jättes olemasolevad tahvlipaigutused sama vidina ID-ga seotuks.", + "fileLabel": "Vali kohandatud vidina JSON-fail", + "name": "Töö nimetus", + "origin": "Baaspäritolu", + "authentication": "Autentimine", + "networkScope": "Võrguskoop", + "methods": "HTTP-meetodid", + "permissions": "Nõutud tahvliõigused", + "sourceSetup": { + "title": "API-allikate seadistamine", + "description": "Kinnita, millega see vidin ühendub, ja lisa mandaadid. Privaatsed ja loopback-URL-id on sinu Homarri paigalduse põhised.", + "suggestedUrl": "Soovitatud URL", + "confirmUrl": "Kinnitan, et see serveri URL on minu Homarri paigalduse jaoks õige", + "ready": "URL on valmis", + "needsUrl": "Kinnita URL", + "credentialsMissing": "Mandaadid puuduvad", + "credentialsOptional": "Saad installida ilma mandaatideta ja need hiljem seadistada, kuid päringud nurjuvad, kuni need on lisatud." + }, + "actionWarning": { + "title": "See vidin võib muuta kaugandmeid", + "description": "Vaata pärast importimist üle kõik nimega toimingud, päritud mandaadid ja hävitava toimingu kinnitused. Saladusi failis ei sisaldu." + }, + "cancel": "Tühista import", + "confirm": "Impordi vidin", + "confirmMigration": "Kinnita v2 asendus" + }, + "secret": { + "apiKey": "API-võti või tunnus", + "username": "Kasutajanimi", + "password": "Parool", + "savedPlaceholder": "••••••• (salvestatud, jätmiseks tühjaks)" + } + }, + "workshop": { + "title": "Töötuba", + "browseWorkshop": "Sirvi töötuba", + "openCommunity": "Ava töötuba", + "openOnWorkshop": "Ava {title} töötoa veebisaidil", + "back": "Tagasi töötuppa", + "search": "Otsi vidinaid", + "searchCss": "Otsi CSS-teemasid", + "sort": "Sorteeri", + "sortTop": "Enim hinnatud", + "sortNewest": "Uusimad", + "listAriaLabel": "Töötoa vidinad", + "listAriaLabelCss": "Töötoa CSS-teemad", + "empty": "Ükski vidin ei vasta sellele otsingule.", + "emptyDescription": "Siin kuvatakse töötoas avaldatud kogukonna vidinaid.", + "emptyFilteredTitle": "Ükski vidin ei vasta sellele otsingule", + "emptyFilteredDescription": "Ükski töötoa vidin ei vasta otsingule „{search}“.", + "emptyCss": "Ükski CSS-teema ei vasta sellele otsingule.", + "unavailableTitle": "Homarri töötuba pole saadaval", + "unavailable": "Kogukonnateenus võib olla ajutiselt maas. Proovi hetke pärast uuesti. Paigaldatud vidinaid see ei mõjuta.", + "loadError": "Seda esildist ei saanud laadida.", + "noDescription": "Kirjeldus puudub", + "author": "autor: {name}", + "communityMember": "Kogukonna liige", + "outdated": "Aegunud", + "outdatedWarning": "Autor märkis selle esildise aegunuks. Enne importimist vaata see hoolikalt üle.", + "score": "Skoor: {count, number}", + "upvote": "Poolthääl", + "downvote": "Vastuhääl", + "voteError": "Häält ei saanud salvestada.", + "signIn": "Logi GitHubiga sisse", + "signInError": "GitHubiga sisselogimine ebaõnnestus. Kontrolli, kas töötoa OAuth-pakkuja on seadistatud ja hüpikaknad lubatud.", + "signOut": "Logi välja", + "signInHint": "Hääletamiseks või raporteerimiseks logi sisse. Paigaldamiseks pole töötoa kontot vaja.", + "securityNotice": "Töötoa vidinad võivad kutsuda nende deklareeritud API-allikaid ja teha deklareeritud toiminguid sinu kohapeal seadistatud mandaatidega. Salajasi andmeid ei kaasata kunagi.", + "securityNoticeCss": "Kogukonna CSS võib muuta paneeli välimust ja kasutatavust. Vaata see enne importimist üle; midagi ei salvestata enne paneeli seadete salvestamist.", + "install": "Paigalda", + "installReviewTitle": "Vaata enne paigaldamist üle", + "installError": "Seda vidinat ei saa paigaldada", + "installErrorDescription": "Töötoa esildis ei ole kehtiv Custom JSX v2 vidin.", + "useCss": "Impordi CSS", + "importCss": "Impordi CSS töötoast", + "importCssConfirm": "Kas asendada praegune kohandatud CSS failiga „{title}“? Midagi ei salvestata enne paneeli seadete salvestamist.", + "screenshotAlt": "{title} ekraanipilt {count, number}", + "screenshotViewer": "{title} ekraanipiltide vaatur", + "screenshotsLabel": "{title} ekraanipildid", + "zoomScreenshot": "Kuva täissuuruses", + "previousScreenshot": "Eelmine ekraanipilt", + "nextScreenshot": "Järgmine ekraanipilt", + "showScreenshotThumbnails": "Kuva ekraanipiltide pisipildid", + "hideScreenshotThumbnails": "Peida ekraanipiltide pisipildid", + "closeScreenshotViewer": "Sulge ekraanipiltide vaatur", + "technicalDetails": "Tehnilised üksikasjad", + "sourceCode": "Töötoa kirje", + "export": "Ekspordi", + "report": "Raporteeri", + "reportTitle": "Raporteeri esildisest", + "reportReason": "Põhjus", + "reportExplanation": "Mida peaksid töötoa moderaatorid teadma?", + "reportSend": "Saada raport", + "reportSent": "Raport saadetud", + "reportSentDescription": "Töötoa moderaatorid saavad nüüd selle esildise üle vaadata.", + "reportCount": "{count, plural, one {# raport} other {# raportit}}", + "reportWarning": "{count, plural, one {Selle esildise kohta on # avatud kogukonnaraport.} other {Selle esildise kohta on # avatud kogukonnaraportit.}} Seda saab endiselt paigaldada, kuid vaata selle sisu enne üle.", + "reportVisibility": "Raporti üksikasjad on nähtavad ainult selle esildise autorile ja töötoa administraatoritele.", + "reportCategory": { + "outdated": "Aegunud või enam mittetöötav", + "malicious": "Pahatahtlik", + "spam": "Rämpspost", + "copyright": "Autoriõigus", + "inappropriate": "Sobimatu", + "other": "Muu" + }, + "publish": { + "title": "Avalda töötoas", + "introTitle": "Jaga seda vidinat kogukonnaga", + "introDescription": "Homarr ekspordib praegusest vidinast mandaatideta koopia. Lisa selged kirje üksikasjad, et inimesed teaksid enne paigaldamist, mida see teeb.", + "listingDetails": "Töötoa kirje", + "listingDetailsDescription": "Need üksikasjad kuvatakse avalikult koos eksporditud vidina määratlusega.", + "success": "Avaldatud kohe. Kogukonna liikmed saavad nüüd selle vidina paigaldada ja sellest raporteerida.", + "successTitle": "Sinu vidin on avaldatud", + "manageDescription": "Ava esildis, et uuendada selle kirjet, vaadata raporteid, märkida see aegunuks või kustutada. Esildise haldamine toimub otse töötoa veebisaidil.", + "viewSubmission": "Vaata ja halda esildist", + "done": "Tehtud", + "signInHint": "Avaldamiseks oma töötoa identiteediga logi sisse.", + "titleField": "Pealkiri", + "descriptionField": "Kirjeldus", + "screenshots": "Ekraanipildid", + "screenshotsDescription": "Kuni viis PNG-, JPEG- või WebP-pilti", + "screenshotsPlaceholder": "Vali ekraanipildid", + "invalidScreenshot": "Kasuta PNG-, JPEG- või WebP-pilte, mille suurus ei ületa {maxSize} iga pildi kohta.", + "privateSourceWarning": "See vidin sisaldab privaatseid lähte-URL-e järgmiste jaoks: {sources}. Enne avaldamist asenda isiklikud hostid või IP-aadressid turvaliste teenusekohatäidetega.", + "reviewSourcesTitle": "Vaata privaatsed lähte-URL-id üle", + "privateSourceConfirmation": "Olen need lähte-URL-id üle vaadanud ja need ei paljasta privaatse taristu üksikasju", + "action": "Avalda kohe", + "publicationNote": "Avaldamine toimub kohe. Hiljem saad esildist töötoas hallata.", + "definitionChanged": "Vidin muutus avaldamise ettevalmistamise ajal. Vaata selle privaatsed lähte-URL-id uuesti üle ja proovi siis uuesti.", + "error": "Avaldamine ebaõnnestus" } }, "integration": { + "completion": { + "modalTitle": "Teenus on valmis", + "title": "{name} on ühendatud", + "description": "Ühenduse test õnnestus. Vali nüüd, mida sellel paneelil kuvada.", + "connectionReady": "Teenuse ühendus on valmis", + "appReady": "Rakenduse otsetee on valmis", + "compatibleWidgets": "", + "chooseWidget": "Vali vidin", + "recipes": { + "title": "Selle paneeli jaoks soovitatud", + "description": "Põhineb ühendatud teenustel ja sellel paneelil juba olevatel vidinatel.", + "newConnectionReason": "Nüüd saadaval integratsiooni {integration} kaudu", + "existingConnectionReason": "Töötab juba ühendatud teenusega", + "dismiss": "Loobu selle teenuse soovitustest sellel paneelil" + } + }, "page": { "list": { - "title": "Integratsioonid", + "ariaLabel": "Seadistatud integratsioonid", "search": "Otsi integratsioone", + "scopedNote": "Kuvatakse ainult integratsioone, mida sul on lubatud hallata.", "noResults": { - "title": "Ühtegi integratsiooni pole veel" + "title": "Ühtegi integratsiooni pole veel", + "description": "Ühenda teenus, et kasutada selle andmeid ja toiminguid Homarri vidinates.", + "action": "Loo oma esimene integratsioon", + "filteredTitle": "Ükski integratsioon ei vasta sinu otsingule", + "filteredDescription": "Ükski integratsioon ei vasta otsingule „{search}“. Proovi muud nime, tüüpi või URL-i.", + "createOnlyTitle": "Saad lisada ainult integratsioone", + "createOnlyDescription": "Sinu õigused lubavad integratsioone luua, kuid mitte olemasolevaid hallata. Küsi administraatorilt ligipääsu vajalikele integratsioonidele." } }, "create": { "title": "Uus {name} integratsioon", "notification": { "success": { - "title": "Loomine õnnestus", "message": "Integratsioon loodi edukalt" }, "error": { - "title": "Loomine ebaõnnestus", "message": "Integratsiooni ei saanud luua" } }, @@ -729,11 +1339,9 @@ "title": "Muuda {name} integratsiooni", "notification": { "success": { - "title": "Muudatused rakendati edukalt", "message": "Integratsioon edukalt salvestatud" }, "error": { - "title": "Muudatusi ei saanud rakendada", "message": "Integratsiooni ei saanud salvestada" } }, @@ -750,23 +1358,15 @@ "message": "Kas oled kindel, et soovid kustutada integratsiooni {name}?", "notification": { "success": { - "title": "Kustutamine õnnestus", "message": "Integratsioon edukalt kustutatud" }, "error": { - "title": "Kustutamine ebaõnnestus", "message": "Integratsiooni ei saanud kustutada" } } } }, "field": { - "name": { - "label": "Nimi" - }, - "url": { - "label": "Url" - }, "attemptSearchEngineCreation": { "label": "Loo otsingumootor", "description": "Integratsiooni „{kind}“ saab kasutada otsingumootoritega. Märgi see, et otsingumootor automaatselt seadistada." @@ -778,6 +1378,10 @@ "label": "Loo rakendus", "description": "Loo integratsiooniga sama nime ja ikooniga rakendus. Jäta allolev sisestusväli tühjaks, et luua rakendus integratsiooni URL-iga." }, + "linkApp": { + "label": "Seo olemasolev rakendus", + "description": "Ühenda see integratsioon rakendusega, mida saad juba kasutada." + }, "appHref": { "placeholder": "Kohandatud rakenduse URL" }, @@ -791,7 +1395,11 @@ "grid": { "widgetCount": "{count} vidinat", "noWidgets": "Vidinaid pole", - "detected": "Tuvastatud Dockeri kaudu" + "detected": "Tuvastatud Dockeri kaudu", + "connected": "{count, plural, one {# ühendatud} other {# ühendatud}}", + "tiedWidgets": "Seotud vidinad", + "more": "+{count} veel", + "loadError": "Integratsioone ei saanud laadida. Proovi enne uue ühenduse loomist uuesti." }, "category": { "dnsHole": "DNS", @@ -822,7 +1430,10 @@ "analytics": "Analüütika", "vpn": "VPN", "mediaLibrary": "Meediumikogu", - "uptimeMonitoring": "Tööaja seire" + "uptimeMonitoring": "Tööaja seire", + "beszel": "Beszel", + "systemMonitoring": "Süsteemi jälgimine", + "security": "Turvalisus" }, "testConnection": { "action": { @@ -1107,6 +1718,22 @@ "slug": { "label": "Oleku lehe lühinimi", "newLabel": "Uue oleku lehe lühinimi" + }, + "wazuhIndexerUrl": { + "label": "Indekseerija URL", + "newLabel": "Uus indekseerija URL" + }, + "wazuhIndexerUsername": { + "label": "Indekseerija kasutajanimi", + "newLabel": "Uus indekseerija kasutajanimi" + }, + "wazuhIndexerPassword": { + "label": "Indekseerija parool", + "newLabel": "Uus indekseerija parool" + }, + "wazuhDashboardUrl": { + "label": "Armatuurlaua URL (valikuline)", + "newLabel": "Uus armatuurlaua URL" } } }, @@ -1115,54 +1742,19 @@ "interact": "Suhtle integratsioonidega", "full": "Täielik integratsioonide juurdepääs" }, - "audiobookshelf": { - "name": "Audiobookshelf", - "description": "Isehostitav audioraamatute ja taskuhäälingute server" - }, - "navidrome": { - "name": "Navidrome", - "description": "Isehostitav muusika voogedastusserver Subsonicu API ühilduvusega" - }, - "uptimeKuma": { - "name": "Uptime Kuma", - "description": "Isehostitav tööaja seire avalike olekulehtedega", - "secret": { - "slug": { - "description": "Sinu avaliku olekulehe lühinimi. Vaikimisi on „default“, kui seda pole määratud." - }, - "apiKey": { - "description": "Valikuline API-võti autentitud /metrics-juurdepääsuks" - } - } - }, - "traefik": { - "name": "Traefik", - "description": "Pilvepõhine pöördproksi ja koormusjaotur" - }, - "paperlessNgx": { - "name": "Paperless-ngx", - "description": "Dokumendihaldussüsteem skannitud dokumentide arhiveerimiseks ja korrastamiseks" - }, - "patchmon": { - "name": "PatchMon", - "description": "Linuxi hostide paikade haldus ja jälgimine" - }, - "bazarr": { - "name": "Bazarr", - "description": "Sonarri ja Radarri kaasrakendus, mis haldab ja laadib alla subtiitreid" - }, - "wud": { - "name": "What's Up Docker", - "description": "Jälgige, millistel teie Dockeri konteineritel on pildivärskendusi saadaval." + "llamacpp": { + "name": "llama.cpp", + "description": "Jälgi kohaliku llama.cpp llama-serveri tervist, mudelit ja genereerimise mõõdikuid" } }, "media": { "plural": "Meedia", "search": "Otsi meediat", "field": { - "name": "Nimi", + "preview": "Eelvaade", "size": "Suurus", - "creator": "Looja" + "creator": "Looja", + "actions": "Juhtelemendid" }, "action": { "upload": { @@ -1190,10 +1782,12 @@ } }, "copy": { - "label": "Kopeeri URL" + "label": "Kopeeri URL", + "labelNamed": "Kopeeri {name} URL" }, "open": { - "label": "Ava meedia" + "label": "Ava meedia", + "labelNamed": "Ava {name}" } }, "noResults": { @@ -1208,7 +1802,6 @@ "add": "Lisa", "apply": "Rakenda", "backToOverview": "Tagasi ülevaatesse", - "skip": "Jäta vahele", "change": "Muuda", "create": "Loo", "createAnother": "Loo ja alusta uuesti", @@ -1231,16 +1824,31 @@ "tryAgain": "Proovi uuesti", "loading": "Laadimine", "show": "Kuva", - "hide": "Peida" + "hide": "Peida", + "undo": "Võta tagasi", + "editNamed": "Muuda {name}", + "deleteNamed": "Kustuta {name}", + "clearSearch": "Tühjenda otsing", + "copy": "Kopeeri", + "copied": "Kopeeritud", + "refresh": "Värskenda" + }, + "pagination": { + "pageOf": "Lehekülg {page} / {totalPages}" }, "here": "siin", + "serviceUrlTemplate": { + "serverTitle": "Tavaline serveriaadress", + "urlModeLabel": "Teenuse aadressi muster", + "hostPort": "Sama host, erinevad pordid", + "subdomain": "Üks alamdomeen teenuse kohta", + "path": "Üks tee teenuse kohta" + }, "iconPicker": { "label": "Ikooni URL", + "description": "Otsi teegist, kleebi pildi URL või laadi fail üles.", "header": "Sisesta nimi või objektid ikoonide filtreerimiseks... Homarr otsib {countIcons} ikooni seast", "headerLoading": "Otsi pilte nime järgi", - "noResults": "Otsingule „{search}“ vastavaid ikoone pole.", - "error": "Ikoonide laadimine nurjus.", - "description": "Otsi teegist, kleebi pildi URL või laadi fail üles.", "clear": "Eemalda pilt", "uploadImage": "Laadi pilt üles", "results": "Pildiotsingu tulemused", @@ -1249,7 +1857,9 @@ "otherImages": "Teised pildid", "urlLoading": "Pildi kontrollimine…", "urlReady": "Pilt on kasutamiseks valmis", - "urlError": "Seda pilti ei õnnestunud laadida. Kontrolli URL-i ja proovi uuesti." + "urlError": "Seda pilti ei õnnestunud laadida. Kontrolli URL-i ja proovi uuesti.", + "noResults": "Otsingule „{search}“ vastavaid ikoone pole.", + "error": "Ikoonide laadimine nurjus." }, "colorScheme": { "options": { @@ -1261,7 +1871,6 @@ "information": { "min": "Minimaalne", "max": "Maksimaalne", - "days": "Päevad", "hours": "Tunnid", "minutes": "Minutid" }, @@ -1298,16 +1907,16 @@ }, "userAvatar": { "menu": { - "switchToDarkMode": "Lülita tumedale režiimile", - "switchToLightMode": "Lülita heledale režiimile", + "open": "Ava konto menüü", "management": "Haldus", - "docker": "Docker", "preferences": "Teie eelistused", "logout": "Logi välja", "login": "Logi sisse", "homeBoard": "Sinu kodujuhtpaneel", - "loggedOut": "Välja logitud", - "updateAvailable": "Saadaval on {countUpdates} uuendust: {tag}" + "updateAvailable": "Saadaval on {countUpdates} uuendust: {tag}", + "assistant": "Assistent", + "assistantThinking": "Mõtleb", + "modifier": "Modifikaator" } }, "dangerZone": "Ohtlike toimingute ala", @@ -1355,75 +1964,85 @@ "kilometersPerHour": "km/h", "milesPerHour": "mph" } + }, + "widgetQuery": { + "loading": "Vidina andmete laadimine" + }, + "total": "Kokku", + "filesystemUsage": "{count, plural, one {Kuva # failisüsteemi kasutus} other {Kuva # failisüsteemi kasutus}}", + "field": { + "name": "Töö nimetus" + }, + "label": { + "new": "Uus" + }, + "entity": { + "apps": "Rakendused", + "boards": "Paneelid", + "certificates": "Sertifikaadid", + "customWidgets": "Kohandatud vidinad", + "groups": "Rühmad", + "integrations": "Integratsioonid", + "invites": "Kutsed", + "logs": "Logid", + "media": "Meedia", + "searchEngines": "Otsingumootorid", + "tasks": "Ülesanded", + "users": "Kasutajad" } }, "section": { - "dynamic": { + "option": { + "showLabel": { + "label": "Kuva silt", + "description": "Kuva konteineri silt selle sisu kohal." + }, + "collapsible": { + "label": "Luba ahendamine", + "description": "Luba vaatajatel seda konteinerit laiendada ja ahendada." + }, + "showOpenAll": { + "label": "Kuva kõigi avamise toiming", + "description": "Kuva toiming, mis avab kõik selles konteineris olevad rakendused uutel vahekaartidel." + }, + "scrollable": { + "label": "Keritav", + "description": "Hoia seda konteinerit määratud suuruses ja selle sisu mahutamiseks laienemise asemel keri sisu." + } + }, + "action": { + "openAllInNewTabsFor": "Ava kõik rakenduse {name} rakendused vahekaartidel" + }, + "openAllInNewTabs": { + "title": "Ava kõik vahekaartidel", + "text": "Mõni brauser võib turvakaalutlustel blokeerida vahekaartide hulgiavamise. Homarr ei saanud kõiki aknaid avada, sest brauser blokeeris selle toimingu. Luba „Hüpikakende avamine“ ja proovi uuesti." + }, + "container": { + "untitled": "Nimetu konteiner", "action": { - "create": "Uus dünaamiline sektsioon", - "remove": "Eemalda dünaamiline sektsioon" + "create": "Loo uus konteiner", + "remove": "Eemalda konteiner", + "expand": "Laienda", + "collapse": "Ahenda" }, "option": { "title": { "label": "Pealkiri" }, "customCssClasses": { - "label": "Kohandatud CSS-klassid" + "label": "Kohandatud css-klassid" }, "borderColor": { "label": "Äärise värv" } }, "remove": { - "title": "Eemalda dünaamiline sektsioon", - "message": "Kas oled kindel, et soovid selle dünaamilise sektsiooni eemaldada? Üksused teisaldatakse ülemsektsiooni samasse asukohta." - } - }, - "category": { - "field": { - "name": { - "label": "Nimi" - } - }, - "action": { - "create": "Uus kategooria", - "edit": "Nimeta kategooria ümber", - "remove": "Eemalda kategooria", - "moveUp": "Liiguta üles", - "moveDown": "Liiguta alla", - "createAbove": "Uus kategooria ülal", - "createBelow": "Uus kategooria all", - "openAllInNewTabs": "Ava kõik vahekaartidel" - }, - "create": { - "title": "Uus kategooria", - "submit": "Lisa kategooria" - }, - "remove": { - "title": "Eemalda kategooria", - "message": "Kas oled kindel, et soovid eemaldada kategooria {name}?" - }, - "edit": { - "title": "Nimeta kategooria ümber", - "submit": "Nimeta kategooria ümber" - }, - "menu": { - "label": { - "create": "Uus kategooria", - "changePosition": "Muuda asukohta", - "settings": "Seaded" - } - }, - "openAllInNewTabs": { - "title": "Ava kõik vahekaartidel", - "text": "Mõned brauserid võivad turvakaalutlustel blokeerida vahekaartide hulgiavamise. Homarr ei saanud kõiki aknaid avada, sest brauser blokeeris selle toimingu. Luba „Hüpikakende avamine“ ja proovi uuesti." + "message": "Kas eemaldada see konteiner? Selle sisu liigub ümbritsevasse alasse." } } }, "item": { "action": { - "create": "Uus üksus", - "import": "Impordi üksus", "edit": "Muuda üksust", "moveResize": "Liiguta / muuda suurust", "duplicate": "Dubleeri üksus", @@ -1432,7 +2051,7 @@ "menu": { "label": { "settings": "Seaded", - "refresh": "Värskenda", + "settingsFor": "{name} seaded", "options": "Suvandid", "actions": "Toimingud" }, @@ -1441,21 +2060,96 @@ "error": "Viga", "loading": "Laadimine", "idle": "Jõude" + }, + "notification": { + "saveError": { + "title": "Vidina salvestamine ebaõnnestus", + "message": "Vidina muudatused võeti tagasi" + } } }, "create": { "title": "Vali lisatav üksus", "search": "Filtreeri üksusi", - "addToBoard": "Lisa juhtpaneelile" + "addToBoard": "Lisa juhtpaneelile", + "addAtPosition": "Lisa üksus siia", + "destination": { + "label": "Lisa asukohta", + "description": "Vali, kus vidin peaks asuma. Hiljem saad seda endiselt liigutada.", + "mainCanvas": "Põhilõuend", + "leftRail": "Vasak külgriba", + "rightRail": "Parem külgriba" + }, + "connectionStatus": { + "ready": "Valmis", + "needsSetup": "Vajab seadistamist", + "noConnectionRequired": "Ühendust pole vaja" + }, + "customWidget": "Kohandatud vidin", + "standalone": "Eraldiseisev", + "missingIntegration": { + "title": "Ühenda esmalt teenus", + "noPermission": "See vidin vajab ühilduvat teenuseühendust. Palu administraatoril üks ühendada ja proovi siis uuesti." + }, + "notification": { + "success": { + "title": "Vidin lisatud", + "message": "{name} lisati sellele paneelile.", + "relocatedMessage": "{name} lisati asukohta {destination}, sest valitud asukoht polnud saadaval." + }, + "error": { + "title": "Üksust ei saanud lisada", + "message": "Üksust ei saanud sellele paneelile lisada" + } + } + }, + "selection": { + "summary": "{count, plural, one {# valitud üksus} other {# valitud üksust}}", + "selected": "{count, plural, one {# valitud} other {# valitud}}", + "copy": "Kopeeri", + "copied": "{count, plural, one {# üksus kopeeriti lõikelauale} other {# üksust kopeeriti lõikelauale}}", + "copyError": "Valitud üksusi ei saanud kopeerida. Sinu brauser ei pruugi lubada lõikelauale juurdepääsu.", + "paste": "Kleebi", + "pasteShortcut": "Kleebi kopeeritud üksused siia (Ctrl / ⌘ + V)", + "pasted": "{count, plural, one {# üksus kleebiti} other {# üksust kleebiti}}", + "pasteError": "Lõikelauda ei saanud lugeda. Sinu brauser ei pruugi lubada lõikelauale juurdepääsu.", + "pasteInvalid": "Lõikelaud ei sisalda kehtivaid Homarri paneeliüksusi.", + "pasteUnavailable": "Kopeeritud üksused ei mahu sellele paneelile.", + "removed": "{count, plural, one {# üksus eemaldati} other {# üksust eemaldati}}", + "move": "Liiguta", + "moveTo": "Liiguta valitud üksusi", + "delete": "Kustuta", + "clear": "Tühjenda valik", + "clearShortcut": "Tühjenda valik (Escape)", + "saveErrorTitle": "Üksusi ei saanud uuendada", + "saveErrorMessage": "Muudatusi ei saanud salvestada. Paneel värskendati.", + "moveUnavailableTitle": "Valitud üksusi ei saanud liigutada", + "moveUnavailableMessage": "Sihtkohas pole kogu valiku jaoks piisavalt ruumi." }, "moveResize": { "title": "Liiguta / muuda suurust", + "entryLabel": "{name}, veerg {column}, rida {row}", + "target": { + "numbered": "{name}, sihtkoht {index}", + "located": "{name}, {location}, sihtkoht {index}" + }, + "keyboard": { + "instructions": "Klaviatuuriga muutmise alustamiseks vajuta Enter või tühikut. Kasuta liigutamiseks nooleklahve, suuruse muutmiseks Shift-klahvi koos nooleklahvidega ja lõpetamiseks paoklahvi.", + "started": "Klaviatuuriga muutmine algas. Kasuta liigutamiseks nooleklahve, suuruse muutmiseks Shift-klahvi koos nooleklahvidega ja lõpetamiseks paoklahvi.", + "stopped": "Klaviatuuriga muutmine peatati.", + "boundary": "See muudatus ei mahu sellesse jaotisse." + }, "field": { + "section": { + "label": "Jaotis või külgriba" + }, "width": { - "label": "Laius" + "label": "Laius", + "shortLabel": "L" }, "height": { - "label": "Kõrgus" + "label": "Kõrgus", + "shortLabel": "K" }, "xOffset": { "label": "X nihe" @@ -1469,18 +2163,36 @@ "title": "Muuda üksust", "tab": { "widget": "Muuda vidinat", - "app": "Muuda rakendust" + "app": "Muuda rakendust", + "integration": "Muuda integratsiooni" }, "app": { "propagationNotice": "Selle äpi muudatused rakenduvad kõigil juhtpaneelidel." }, + "integration": { + "action": "Muuda ühendust", + "description": "Testi või paranda valitud ühendust sellest vidinast lahkumata.", + "editLabel": "Muuda integratsiooni {name}", + "fullAccessRequired": "Vaja on täielikku juurdepääsu", + "propagationNotice": "Selle integratsiooni muudatused rakenduvad kõikjal, kus seda kasutatakse. Ühendust testitakse enne salvestamist.", + "loading": "Integratsiooni laadimine", + "loadError": "Seda integratsiooni ei saanud laadida. Proovi enne ühenduse seadete muutmist uuesti." + }, + "preview": { + "integrationRequired": "Selle vidina eelvaate kuvamiseks vali ühendus.", + "size": "Faili suurus" + }, + "settings": { + "label": "Vidina seaded" + }, "advancedOptions": { "label": "Täpsemad valikud", "title": "Üksuse täpsemad valikud" }, "field": { "integrations": { - "label": "Integratsioonid" + "label": "Integratsioonid", + "removeLabel": "Eemalda integratsioon {name}" }, "title": { "label": "Pealkiri" @@ -1494,17 +2206,18 @@ } }, "remove": { - "title": "Eemalda üksus", "message": "Kas oled kindel, et soovid selle üksuse eemaldada?" + }, + "advancedFocus": { + "open": "Ava täpsem vaade", + "close": "Sulge täpsem vaade", + "label": "Vidina {widget} täpsem vaade" } }, "widget": { "integrationSelect": { "configureIntegrationFirst": "Ühenda esmalt integratsioon", - "loading": "Laadimine...", - "placeholder": "Vali suvand", - "noResults": "Tulemusi ei leitud", - "loadError": "Suvandite laadimine nurjus" + "placeholder": "Vali suvand" }, "app": { "name": "Rakendus", @@ -1513,9 +2226,6 @@ "appId": { "label": "Vali rakendus" }, - "openInNewTab": { - "label": "Ava uues vahekaardis" - }, "showTitle": { "label": "Näita rakenduse nime" }, @@ -1523,11 +2233,8 @@ "label": "Luba olekukontroll" }, "layout": { - "label": "Paigutus", "option": { - "row": "Horisontaalne", "row-reverse": "Horisontaalne (ümberpööratud)", - "column": "Vertikaalne", "column-reverse": "Vertikaalne (ümberpööratud)" } }, @@ -1552,23 +2259,60 @@ "name": "Järjehoidjad", "description": "Kuvab mitu rakenduse linki", "option": { - "title": { - "label": "Pealkiri" + "showTitle": { + "label": "Kuva vidina pealkiri" + }, + "titleSize": { + "label": "Vidina pealkirja suurus (px)" }, "layout": { "label": "Paigutus", "option": { - "row": { - "label": "Horisontaalne" - }, - "column": { - "label": "Vertikaalne" - }, - "grid": { - "label": "Ruudustik" + "adaptive": { + "label": "Kohanduv" }, "gridHorizontal": { "label": "Horisontaalne ruudustik" + }, + "icons": { + "label": "Ikoonid" + } + } + }, + "variant": { + "label": "Välimus", + "option": { + "soft": { + "label": "Pehme" + }, + "filled": { + "label": "Täidetud" + }, + "outline": { + "label": "Kontuur" + }, + "plain": { + "label": "Lihtne" + } + } + }, + "spacing": { + "label": "Kaartide vahe", + "option": { + "xs": { + "label": "Eriti väike" + }, + "sm": { + "label": "Väike" + }, + "md": { + "label": "Keskmine" + }, + "lg": { + "label": "Suur" + }, + "xl": { + "label": "Eriti suur" } } }, @@ -1581,17 +2325,28 @@ "hideHostname": { "label": "Peida hostinimed" }, - "openNewTab": { - "label": "Ava uuel vahekaardil" - }, "withBorder": { "label": "Kuva ääris" }, + "grow": { + "label": "Laienda kaardid rea täitmiseks" + }, + "customUrls": { + "label": "Kohandatud lingid" + }, "items": { "label": "Järjehoidjad", - "add": "Lisa järjehoidja" + "remove": "Eemalda järjehoidja", + "apps": { + "label": "Lisa järjehoidjaid", + "description": "Kleebi URL-id või leia olemasolevaid rakendusi. Lohista allolevaid järjehoidjaid nende järjestuse muutmiseks.", + "placeholder": "Kleebi URL-id või otsi rakendusi", + "addUrl": "Lisa see URL", + "hint": "URL-i lisamiseks vajuta Enter. Mitme URL-i lisamiseks kleebi komadega eraldatud või igale reale eraldi URL-id." + } } - } + }, + "empty": "Lisa vidina seadetes URL või rakendus" }, "archiveTeamWarrior": { "name": "ArchiveTeam Warrior", @@ -1600,33 +2355,61 @@ "showBroadcastMessage": { "label": "Kuva edastusteated" } + }, + "noProjectSelected": "Projekti pole valitud", + "runnerStatus": "Käiviti: {status}", + "projectId": "Projekt: {id}", + "sessionReceived": "Seanss vastu võetud: {value}", + "sessionSent": "Seanss saadetud: {value}", + "sessionId": "Seanss: {id}", + "startedAt": "Alustati: {date}", + "emptyItems": "Selles hetktõmmises pole aktiivseid ega hiljutisi töid", + "metric": { + "running": "Töös", + "completed": "Tehtud", + "failed": "Ebaõnnestus", + "canceled": "Tühistatud", + "download": "Allalaadimine", + "upload": "Üleslaadimine" + }, + "status": { + "running": "Töötab", + "completed": "Lõpetatud", + "failed": "Nurjus", + "canceled": "Tühistatud", + "stopped": "Peatatud", + "idle": "Jõude", + "unknown": "Teadmata" + } + }, + "wud": { + "name": "What's Up Docker", + "description": "Näita, mitu jälgitavat konteinerit on uuendusi saadaval.", + "title": "What's Up Docker", + "monitored": "Jälgitud", + "updatesAvailable": "{count, plural, one {# uuendus saadaval} other {# uuendust saadaval}}", + "updateAvailable": "Uuendus saadaval", + "openReleaseNotes": "Ava väljalaskemärkmed", + "option": { + "showRing": { + "label": "Näita uuenduste rõngast" + }, + "showUpdateList": { + "label": "Näita konteinerite uuenduste loendit", + "description": "Loetleb iga jälgitava konteineri, millel on pildiuuendus saadaval" + } } }, "dnsHoleSummary": { "name": "DNS Hole kokkuvõte", "description": "Kuvab sinu DNS Hole kokkuvõtte", "option": { - "layout": { - "label": "Paigutus", - "option": { - "row": { - "label": "Horisontaalne" - }, - "column": { - "label": "Vertikaalne" - }, - "grid": { - "label": "Ruudustik" - } - } - }, "usePiHoleColors": { "label": "Kasuta Pi-Hole värve" } }, "error": { - "internalServerError": "DNS Hole kokkuvõtte hankimine ebaõnnestus", - "integrationsDisconnected": "Andmeid pole, kõik integratsioonid on katkestatud" + "internalServerError": "DNS Hole kokkuvõtte hankimine ebaõnnestus" }, "data": { "adsBlockedToday": "Täna blokeeritud", @@ -1634,32 +2417,24 @@ "dnsQueriesToday": "Tänased päringud", "domainsBeingBlocked": "Domeene blokeerimisnimekirjas" }, - "domainsTooltip": "Mitme integratsiooni tõttu ei saa Homarr blokeeritavate domeenide täpset arvu arvutada" + "domainsTooltip": "Mitme integratsiooni tõttu ei saa Homarr blokeeritavate domeenide täpset arvu arvutada", + "status": { + "enabled": "Lubatud", + "disabled": "Keelatud", + "unknown": "Teadmata" + } }, "dnsHoleControls": { "name": "DNS Hole juhtimine", "description": "Juhti PiHole või AdGuard oma juhtpaneelilt", "option": { - "layout": { - "label": "Paigutus", - "option": { - "row": { - "label": "Horisontaalne" - }, - "column": { - "label": "Vertikaalne" - }, - "grid": { - "label": "Ruudustik" - } - } - }, "showToggleAllButtons": { "label": "Näita lülita kõik nuppe" } }, "error": { - "internalServerError": "DNS Hole juhtimine ebaõnnestus" + "internalServerError": "DNS Hole juhtimine ebaõnnestus", + "bulkActionsFailed": "{count, plural, one {# toiming nurjus} other {# toimingut nurjus}}" }, "controls": { "enableAll": "Luba kõik", @@ -1670,8 +2445,6 @@ "disabled": "Keelatud", "processing": "Töötlemine", "disconnected": "Katkestatud", - "hours": "Tunnid", - "minutes": "Minutid", "unlimited": "Tühjaks jättes piiramatu" } }, @@ -1683,16 +2456,10 @@ "label": "Kohandatud pealkirja/linna kuvamine", "description": "Näita kohandatud pealkirja või linna/riigi nime kella kohal." }, - "customTitle": { - "label": "Pealkiri" - }, "is24HourFormat": { "label": "24-tunni formaat", "description": "Kasuta 24-tunnist vormingut 12-tunnise asemel" }, - "showSeconds": { - "label": "Näita sekundeid" - }, "useCustomTimezone": { "label": "Kasuta fikseeritud ajavööndit" }, @@ -1711,29 +2478,295 @@ "label": "Kohandatud ajavorming", "description": "Kasuta aja vormindamiseks ISO 8601 vormingut (see alistab muud suvandid)" }, - "customDateFormat": { - "label": "Kohandatud kuupäevavorming", - "description": "Kasuta kuupäeva vormindamiseks ISO 8601 vormingut (see alistab muud suvandid)" - }, "showWeather": { "label": "Kuva ilma", "description": "Kuva kaardi nurgas väikest animeeritud ilmaikooni ja temperatuuri" }, - "weatherLocation": { - "label": "Ilma asukoht" - }, "isWeatherFormatFahrenheit": { "label": "Kasuta Fahrenheiti" + }, + "animateWeatherIcon": { + "label": "Animeeri ilmaikooni", + "description": "Animeeri ilmaikooni. Vaikimisi on see keelatud ja vähendatud liikumise eelistuse korral alati keelatud." + }, + "colorWeatherByDayNight": { + "label": "Värvi ilma päeva/öö järgi", + "description": "Toonib ilmaikooni ja temperatuuri päeva- või öövärviga vastavalt sellele, kas valitud asukohas on parasjagu päev või öö." + }, + "dayWeatherColor": { + "label": "Päevavärv" + }, + "nightWeatherColor": { + "label": "Öövärv" + }, + "worldClockCities": { + "label": "Maailmakella linnad", + "description": "Lisa täpsema vaate jaoks kuni kuus linna ja määra nende järjestus." } + }, + "timezoneList": { + "timezone": "Ajavöönd", + "cityLabel": "Linna silt", + "searchPlaceholder": "Otsi ajavööndeid", + "noResults": "Ajavööndeid ei leitud", + "unsupportedOption": "Toetamata: {timeZone}", + "add": "Lisa linn", + "remove": "Eemalda {city}", + "reorder": "Järjesta {city} ümber", + "limit": "{count} linna {maximum}-st konfigureeritud" + }, + "worldClock": { + "primary": "Põhikell", + "local": "Kohalik aeg", + "today": "Täna", + "tomorrow": "Homme", + "yesterday": "Eile", + "noSecondaryCities": "Nende võrdlemiseks lisa linnad vidina suvandites.", + "unsupportedPrimaryTitle": "Põhiajavöönd pole saadaval", + "unsupportedPrimary": "{timeZone} ei ole selles brauseris toetatud. Varuna kuvatakse UTC, mis on selgelt tähistatud.", + "unsupportedTimeZone": "Toetamata ajavöönd: {timeZone}", + "accessibleTime": "{city}: {time}, {date}, {timeZone}", + "advancedLabel": "Täpsem maailmakell", + "cities": "Maailmakellad", + "cityCount": "{count} ajavööndit", + "timeBarLabel": "24-tunnise ööpäeva kellaaeg linnas {city}", + "dayProgress": "{percent}% möödunud · {hours} h {minutes} min jäänud", + "phaseLegend": "Ööpäevaaja legend", + "tick": { + "midnight": "00", + "morning": "06", + "noon": "12", + "evening": "18", + "end": "24" + }, + "phaseRange": { + "night": "00–05 · 21–24", + "dawn": "05–08", + "day": "08–18", + "dusk": "18–21" + }, + "phase": { + "night": "Öö", + "dawn": "Koit", + "day": "Päev", + "dusk": "Hämarik" + } + } + }, + "airQuality": { + "name": "Õhukvaliteet ja UV", + "description": "Kuvab asukoha õhukvaliteeti, ultraviolettindeksit, saasteaineid ja õietolmu.", + "option": { + "location": { + "label": "Õhukvaliteedi asukoht" + }, + "aqiStandard": { + "label": "Õhukvaliteedi indeksi standard", + "options": { + "auto": "Asukoha järgi automaatselt", + "european": "Euroopa õhukvaliteedi indeks", + "us": "USA õhukvaliteedi indeks" + } + }, + "showUv": { + "label": "Näita UV-indeksit" + }, + "showPollutants": { + "label": "Näita saasteainete kontsentratsioone" + }, + "showPollen": { + "label": "Näita õietolmu kontsentratsioone" + } + }, + "category": { + "good": "Hea", + "fair": "Rahuldav", + "moderate": "Mõõdukas", + "unhealthySensitive": "Tundlikele rühmadele ebatervislik", + "unhealthy": "Ebatervislik", + "poor": "Halb", + "veryPoor": "Väga halb", + "veryUnhealthy": "Väga ebatervislik", + "extremelyPoor": "Äärmiselt halb", + "hazardous": "Ohtlik", + "unknown": "Õhukvaliteedi näit puudub" + }, + "uv": { + "label": "UV-indeks", + "category": { + "low": "Madal", + "moderate": "Mõõdukas", + "high": "Kõrge", + "veryHigh": "Väga kõrge", + "extreme": "Äärmuslik", + "unknown": "Näit puudub" + } + }, + "dominantPollutant": "Peamine saasteaine", + "aqiLabel": "Õhukvaliteedi indeks", + "strongestPollen": "Kõige rohkem õietolmu", + "unit": { + "concentration": "{value} µg/m³", + "pollen": "{value} tera/m³" + }, + "pollutant": { + "pm2_5": "PM2.5", + "pm10": "PM10", + "ozone": "Osoon", + "nitrogenDioxide": "Lämmastikdioksiid", + "sulphurDioxide": "Vääveldioksiid", + "carbonMonoxide": "Vingugaas" + }, + "pollen": { + "alder": "Lepp", + "birch": "Kask", + "grass": "Heintaimed", + "mugwort": "Puju", + "olive": "Oliiv", + "ragweed": "Ambroosia" + }, + "compact": { + "sixHourTrend": "Õhukvaliteedi trend järgmise kuue tunni jooksul" + }, + "advanced": { + "observedAt": "Uuendatud kell {time}", + "next24Hours": "Järgmised 24 tundi", + "pollutants": "Saasteainete kontsentratsioonid", + "pollen": "Õietolmu kontsentratsioonid", + "sevenDayForecast": "7 päeva maksimaalne prognoos", + "aqiValue": "Õhukvaliteedi indeks {value}", + "uvValue": "UV {value}", + "uvShort": "UV {value}", + "noForecast": "Prognoosiandmed pole saadaval" + } + }, + "countdown": { + "name": "Loendurid", + "description": "Jälgib tulevasi sündmusi ja korduvaid tähtpäevi.", + "option": { + "events": { + "label": "Sündmused", + "description": "Lisa ja järjestada kuni 20 ühekordset või iga-aastast loendurit. Kuupäevad sisestatakse valitud ajavööndis." + }, + "showProgress": { + "label": "Näita edenemist" + }, + "showSeconds": { + "label": "Näita sekundeid", + "description": "Hoia sekundid iga tulevase sündmuse korral nähtaval." + } + }, + "dateTimeEventList": { + "newEvent": "Uus sündmus", + "add": "Lisa sündmus", + "remove": "Eemalda {event}", + "reorder": "Järjesta {event} ümber", + "eventLabel": "Sündmuse silt", + "timezone": "Ajavöönd", + "unsupportedOption": "Toetamata: {timeZone}", + "recurrence": "Kordub", + "recurrenceOption": { + "none": "Ei kordu", + "yearly": "Igal aastal" + }, + "target": "Sündmuse kuupäev ja kellaaeg", + "trackProgress": "Jälgi edenemist alguskuupäevast", + "start": "Edenemise alguskuupäev ja kellaaeg", + "confirmDateTime": "Kinnita kuupäev ja kellaaeg", + "limit": "{count} sündmust {maximum}-st konfigureeritud" + }, + "empty": { + "title": "Loendureid pole veel", + "description": "Loenduri käivitamiseks lisa vidina suvandites sündmus." + }, + "completed": "Lõpetatud", + "yearly": "Iga-aastane", + "progress": "Sündmuse edenemine", + "upcoming": "Tulekul", + "completedEvents": "Lõppenud sündmused", + "invalid": { + "title": "Mõnda sündmust ei saa kuvada", + "description": "{count, plural, one {Ühel sündmusel on vigane kuupäev või toetamata ajavöönd.} other {# sündmusel on vigane kuupäev või toetamata ajavöönd.}}", + "value": "Pole saadaval" + }, + "alert": { + "notifications": "Brauseri teavitused", + "permissionDenied": "Teavitused on selles brauseris blokeeritud.", + "reached": "Loendur jõudis sihtajani." + } + }, + "timer": { + "name": "Taimer / Pomodoro", + "description": "Käivitab lihtsa taimeri või seadistatava Pomodoro jada.", + "option": { + "mode": { + "label": "Režiim", + "options": { + "timer": "Taimer", + "pomodoro": "Pomodoro" + } + }, + "timerMinutes": { + "label": "Taimeri minutid" + }, + "focusMinutes": { + "label": "Keskendumise minutid" + }, + "shortBreakMinutes": { + "label": "Lühikese pausi minutid" + }, + "longBreakMinutes": { + "label": "Pika pausi minutid" + }, + "sessionsBeforeLongBreak": { + "label": "Keskendumisseansid enne pikka pausi" + }, + "autoStartBreaks": { + "label": "Käivita pausid automaatselt" + }, + "autoStartFocus": { + "label": "Käivita keskendumisseansid automaatselt" + } + }, + "phase": { + "timer": "Taimer", + "focus": "Keskendumine", + "shortBreak": "Lühike paus", + "longBreak": "Pikk paus" + }, + "action": { + "start": "Käivita", + "pause": "Peata", + "reset": "Lähtesta" + }, + "attention": { + "timerComplete": "Taimer lõpetas töö", + "phaseReady": "{phase} valmis" + }, + "progress": "Taimeri edenemine: {progress}%", + "compact": { + "completedFocus": "{count, plural, =0 {Keskendumisseansse pole lõpetatud} one {Lõpetatud on # keskendumisseanss} other {Lõpetatud on # keskendumisseanssi}}" + }, + "alert": { + "title": "Taimer lõpetas töö", + "completed": "{phase} lõpetatud." + }, + "advanced": { + "sequence": "Pomodoro jada", + "focusSession": "Fookus: {session}", + "settings": "Püsiseaded", + "settingsHint": "Nende tahvli seadete muutmiseks kasuta vidina kontekstimenüüd.", + "localAlerts": "Kohalikud märguanded", + "notifications": "Brauseri teavitused", + "sound": "Taimeri helid", + "localAlertsHint": "Taimeri helid on vaikimisi lubatud. Helid ja teavitused kehtivad ainult selles brauseris selle vidina puhul.", + "notificationsDenied": "Teavitused on selles brauseris blokeeritud." } }, "minecraftServerStatus": { "name": "Minecrafti serveri olek", "description": "Kuvab Minecrafti serveri olekut", "option": { - "title": { - "label": "Pealkiri" - }, "domain": { "label": "Serveri aadress" }, @@ -1753,11 +2786,21 @@ "noStation": "Jaama pole valitud", "option": { "baseUrl": { - "label": "Search.ch URL" + "label": "Search.ch URL", + "description": "Kohandatud URL-id peavad lahenduma avalikuks IP-aadressiks. Privaatsed ja kohalikud hostid lükatakse tagasi." }, "station": { - "label": "Jaam" + "label": "Jaam", + "placeholder": "Otsi jaama" } + }, + "error": { + "customSourceUnavailable": "Sõiduplaani allikas pole saadaval. Kontrolli, et selle URL lahenduks avalikuks IP-aadressiks.", + "stationSearch": "Jaamade otsimine nurjus. Kontrolli kohandatud URL-i ja oma tahvli juurdepääsu." + }, + "warning": { + "stale": "Sõiduplaani ei saanud värskendada. Kuvatakse väljumised, mida värskendati viimati kell {time}.", + "staleCompact": "Aegunud andmed" } }, "notebook": { @@ -1789,6 +2832,9 @@ "directionRtl": "Määra teksti suunaks paremalt vasakule", "blockquote": "Tsitaat", "horizontalLine": "Horisontaaljoon", + "details": "Ahenda/laienda jaotis", + "expandDetails": "Laienda ahendatavat jaotist", + "collapseDetails": "Ahenda ahendatav jaotis", "bulletList": "Täpploend", "orderedList": "Nummerdatud loend", "checkList": "Kontroll-loend", @@ -1797,16 +2843,20 @@ "link": "Link", "unlink": "Eemalda link", "image": "Lisa pilt", - "addTable": "Lisa tabel", + "insertTable": "Lisa tabel", + "insertTableSize": "Lisa {columns} × {rows} tabel", "deleteTable": "Kustuta tabel", "colorCell": "Lahtri värv", - "mergeCell": "Lülita lahtrite ühendamine", + "mergeCells": "Ühenda lahtrid", + "splitCell": "Tükelda lahter", "addColumnLeft": "Lisa veerg ette", "addColumnRight": "Lisa veerg järele", "deleteColumn": "Kustuta veerg", "addRowTop": "Lisa rida ette", "addRowBelow": "Lisa rida järele", - "deleteRow": "Kustuta rida" + "deleteRow": "Kustuta rida", + "toggleHeaderRow": "Lülita päiserida", + "toggleHeaderColumn": "Lülita päiseveerg" }, "align": { "left": "Vasakule", @@ -1817,8 +2867,6 @@ "clearColor": "Eemalda värv", "source": "Allikas", "widthPlaceholder": "Väärtus % või pikslites", - "columns": "Veerud", - "rows": "Read", "width": "Laius", "height": "Kõrgus" }, @@ -1830,7 +2878,9 @@ "discard": "Jäta muudatused kõrvale", "keepEditing": "Jätka redigeerimist" } - } + }, + "saveFailed": "Märkme salvestamine nurjus", + "documentStats": "{words, plural, one {# sõna} other {# sõna}} · {characters, plural, one {# märk} other {# märki}}" }, "anchorNote": { "name": "Anchori märkus", @@ -1839,9 +2889,6 @@ "noteId": { "label": "Märkus" }, - "showTitle": { - "label": "Näita pealkirja" - }, "showUpdatedAt": { "label": "Näita viimast uuendamist" } @@ -1851,14 +2898,20 @@ "notFound": "Märkust ei leitud", "noNotes": "Märkmeid ei leitud", "integrationRequired": "Vali esmalt Anchori integratsioon", - "updatedAt": "Uuendatud {date}", "untitled": "Pealkirjata", - "edit": "Muuda", - "save": "Salvesta", - "cancel": "Tühista", "readOnlyViewer": "Sul on sellele märkmele vaatamisõigus. Muutmine on keelatud.", "saveForbidden": "Sul pole õigust seda märkust muuta.", - "saveFailed": "Märkme salvestamine ebaõnnestus. Proovi uuesti." + "saveFailed": "Märkme salvestamine ebaõnnestus. Proovi uuesti.", + "createdAt": "Loodud {date}", + "permission": { + "owner": "Omanik", + "editor": "Redaktor", + "viewer": "Vaataja" + }, + "status": { + "pinned": "Kinnitatud", + "archived": "Arhiveeritud" + } }, "iframe": { "name": "iFrame", @@ -1917,6 +2970,25 @@ "clickable": { "label": "Klikitav" } + }, + "state": { + "on": "Sees", + "off": "Väljas", + "unavailable": "Pole saadaval", + "unknown": "Teadmata" + }, + "advanced": { + "entityId": "Olem ID: {id}", + "lastChanged": "Muudetud {date}", + "attribute": { + "unit": "Ühik", + "deviceClass": "Seadme klass", + "icon": "Ikoon" + } + }, + "error": { + "loadFailed": "Olemuse laadimine nurjus", + "toggleFailed": "Olemuse värskendamine nurjus" } }, "smartHome-executeAutomation": { @@ -1932,11 +3004,31 @@ }, "spotlightAction": { "run": "Käivita {name}" + }, + "advanced": { + "lastExecuted": "Viimane käivitus kell {time}", + "automationId": "Automaatika ID: {id}", + "ready": "Käivitamiseks valmis", + "noPermission": "Selle automaatika käivitamiseks puudub õigus" + }, + "status": { + "running": "Automaatika töötab", + "success": "Automaatika lõpetatud" + }, + "error": { + "executeFailed": "Automaatika käivitamine nurjus" } }, "stockPrice": { "name": "Aktsia hind", "description": "Kuvab ettevõtte praeguse aktsiahinna", + "advanced": { + "currentPrice": "Praegune hind", + "previousClose": "Eelmine sulgemishind", + "changePercentage": "Muutus (%)", + "minimum": "Miinimum", + "maximum": "Maksimum" + }, "option": { "stock": { "label": "Aktsiasümbol" @@ -2007,6 +3099,10 @@ "label": "1 kuu" } } + }, + "showDetails": { + "label": "Näita üksikasju", + "description": "Näita kompaktses vaates nime, muutust ja ajavahemikku. Ainult sümboli ja hinna kuvamiseks lülita see välja." } } }, @@ -2034,6 +3130,13 @@ "showUnmonitored": { "label": "Kuva jälgimata üksused" } + }, + "advanced": { + "previousMonth": "Näita eelmist kuud", + "nextMonth": "Näita järgmist kuud", + "eventCount": "{count, plural, one {# sündmus} other {# sündmust}}", + "loading": "Kalendrisündmuste laadimine...", + "noEvents": "Sel kuul sündmusi pole" } }, "weather": { @@ -2046,16 +3149,18 @@ "disableTemperatureDecimals": { "label": "Keela temperatuuri kümnendkohad" }, + "animateIcons": { + "label": "Animeeri ilmaikoone" + }, + "showHumidity": { + "label": "Näita õhuniiskust" + }, "showCurrentWindSpeed": { - "label": "Kuva praegune tuulekiirus", - "description": "Ainult praeguse ilma korral" + "label": "Kuva praegune tuulekiirus" }, "useImperialSpeed": { "label": "Kasuta tuulekiirusel mph" }, - "location": { - "label": "Ilmakoht" - }, "showCity": { "label": "Näita linna" }, @@ -2065,13 +3170,10 @@ "forecastDayCount": { "label": "Prognoosipäevade arv", "description": "Kui vidin pole piisavalt lai, näidatakse vähem päevi" - }, - "dateFormat": { - "label": "Kuupäeva vorming", - "description": "Kuidas kuupäev peaks välja nägema" } }, "currentWindSpeed": "{currentWindSpeed} {unit}", + "disabled": "Ilmaandmed pole saadaval, sest väljuvad ühendused on keelatud", "dailyForecast": { "sunrise": "Päikesetõus", "sunset": "Loojang", @@ -2094,6 +3196,47 @@ "thunderstorm": "Äike", "thunderstormWithHail": "Äike koos rahega", "unknown": "Tundmatu" + }, + "details": "Näita ilma üksikasju", + "detailsFor": "Kuva ilma üksikasjad kuupäeva {date} kohta", + "advanced": { + "forecast": "7 päeva prognoos", + "hourlyForecast": "Järgmised 24 tundi", + "day": "Päev", + "time": "Aeg", + "conditions": "Ilmastikutingimused", + "temperature": "Temperatuur", + "feelsLike": "Tundub nagu {temperature}", + "feelsLikeLabel": "Tundub nagu", + "feelsLikeRange": "Tundub nagu: {maximum} / {minimum}", + "highLow": "Kõrgeim {maximum} · madalaim {minimum}", + "observedAt": "Uuendatud kell {time}", + "humidity": "Õhuniiskus", + "averageHumidity": "Keskmine õhuniiskus: {humidity}%", + "currentHumidity": "Praegune õhuniiskus", + "wind": "Tuul / puhangud ({unit})", + "currentWind": "Praegune tuul / puhangud", + "windValue": "{speed} / {gusts} {unit}", + "windDetail": "Maksimaalne tuul / puhangud: {speed} / {gusts} {unit}", + "nextHourPrecipitation": "Sademed järgmise tunni jooksul", + "precipitationChance": "Sademete tõenäosus", + "precipitationValue": "{probability}% · {amount} mm", + "precipitationDetail": "Sademed: {probability}% · {amount} mm", + "todayUv": "Tänane maksimaalne UV-indeks", + "uvIndex": "Maksimaalne UV-indeks: {value}", + "daylight": "Päevavalgus: {duration}", + "hourlyTooltip": "Tundub nagu {feelsLike}{temperatureUnit} · {amount} mm · õhuniiskus {humidity}% · tuul {speed} {speedUnit}", + "hourlyTooltipWithoutHumidity": "Tundub nagu {feelsLike}{temperatureUnit} · {amount} mm · tuul {speed} {speedUnit}", + "detailLabel": { + "feelsLike": "Tundub nagu", + "precipitation": "Sademed", + "humidity": "Keskmine õhuniiskus", + "wind": "Maksimaalne tuul / puhangud", + "uv": "Maksimaalne UV-indeks", + "daylight": "Päevavalgus" + }, + "sun": "Päikesetõus / -loojang", + "noForecast": "Prognoosiandmed pole saadaval" } }, "indexerManager": { @@ -2106,8 +3249,15 @@ }, "title": "Indekseerijate haldur", "testAll": "Testi kõiki", + "status": { + "healthy": "Terve", + "unhealthy": "Ebatervislik", + "disabled": "Keelatud", + "unknown": "Terviseseisund pole saadaval" + }, "error": { - "internalServerError": "Indekseerijate oleku hankimine ebaõnnestus" + "internalServerError": "Indekseerijate oleku hankimine ebaõnnestus", + "testAll": "Indekseerija test nurjus. Proovi uuesti." } }, "healthMonitoring": { @@ -2136,11 +3286,6 @@ "fileSystem": { "label": "Näita failisüsteemi teavet" }, - "visibleStorageVolumes": { - "label": "Nähtavad salvestusmahud", - "description": "Saadaval ainult siis, kui kõik valitud integratsioonid on Synology. Jäta tühjaks, et kuvada kõik tuvastatud salvestusmahud.", - "placeholder": "Vali salvestusruumid" - }, "defaultTab": { "label": "Vaikimisi vahekaart" }, @@ -2163,17 +3308,27 @@ "minutes": "{count} minutit", "used": "Kasutatud", "available": "Saadaval", - "lastSeen": "Viimane oleku uuendus: {lastSeen}" + "lastSeen": "Viimane oleku uuendus: {lastSeen}", + "updatesAvailable": "{count, plural, one {# värskendus on saadaval} other {# värskendust on saadaval}}", + "rebootRequired": "Taaskäivitamine on vajalik", + "rebootNotRequired": "Taaskäivitamine pole vajalik" + }, + "smartStatus": { + "attributesWithinThresholds": "SMART: atribuudid jäävad läviväärtuste piiresse", + "attributesFailed": "SMART: {attributes} atribuuti nurjus", + "noCriticalWarning": "SMART: SSD ei teatanud ühestki hoiatusest", + "criticalWarning": "SMART: SSD teatas kriitilisest hoiatusest" + }, + "gauge": { + "cpuUsage": "Protsessori kasutus", + "cpuTemperature": "Protsessori temperatuur", + "memoryUsage": "Mälu kasutus", + "gpuUsage": "{name} GPU kasutus" }, - "memory": {}, "error": { "internalServerError": "Tervisliku seisundi hankimine ebaõnnestus" }, "cluster": { - "summary": { - "cpu": "CPU", - "memory": "RAM" - }, "resource": { "node": { "name": "Sõlmed" @@ -2209,8 +3364,6 @@ "table": { "header": { "name": "Nimi", - "cpu": "CPU", - "memory": "RAM", "node": "Sõlm" } } @@ -2220,33 +3373,29 @@ "name": "Dockeri statistika", "description": "Sinu konteinerite statistika (selle vidina saab lisada ainult administraatoriõigustega)", "option": { - "columns": { - "label": "Kuvatavad veerud" + "endpointIds": { + "label": "Dockeri keskkonnad", + "description": "Jäta tühjaks, et kuvada kõigi Dockeri keskkondade konteinereid", + "placeholder": "Kõik Dockeri keskkonnad" }, - "enableRowSorting": { - "label": "Luba üksuste sortimine" + "containerFilter": { + "label": "Filtreeritavad konteinerid" + }, + "filterIsWhitelist": { + "label": "Filtreeri lubatud loendina" }, "defaultSort": { - "label": "Vaikimisi sortimiseks kasutatav veerg", "option": { "name": "Nimi", "state": "Olek", "cpuUsage": "CPU kasutus", "memoryUsage": "Mälukasutus" } - }, - "descendingDefaultSort": { - "label": "Pööra sortimine ümber" - }, - "columnOrder": { - "label": "Veergude järjekord" - }, - "columnWidths": { - "label": "Veergude laiused" } }, "error": { "internalServerError": "Konteinerite statistika toomine ebaõnnestus", + "endpointsUnavailable": "Dockeri lõpp-punktid pole saadaval", "layoutSaveTitle": "Tabelipaigutust ei salvestatud", "layoutSaveMessage": "Dockeri tabelipaigutust ei saanud salvestada. Proovi veergu uuesti liigutada või selle suurust muuta." }, @@ -2255,7 +3404,6 @@ } }, "coolify": { - "name": "Coolify", "description": "Ülevaade sinu Coolify eksemplari serveritest ja rakendustest", "option": { "showServers": { @@ -2281,17 +3429,49 @@ "internalServerError": "Coolify andmete toomine ebaõnnestus" }, "server": { - "buildServer": "Ehitamine" + "buildServer": "Ehitamine", + "resourceCounts": "{applications, plural, one {# rakendus} other {# rakendust}} / {services, plural, one {# teenus} other {# teenust}}", + "reachability": "Kättesaadavus", + "usability": "Kasutatavus" + }, + "source": { + "url": "Allikas: {url}", + "unavailable": "{source}: pole saadaval" }, "instances": { "title": "Eksemplarid" + }, + "action": { + "openResource": "Ava {name}", + "openLogs": "Ava {name} logid", + "showIp": "Näita IP-aadressi", + "hideIp": "Peida IP-aadress" + }, + "status": { + "running": "Töötab", + "stopped": "Peatatud", + "exited": "Väljunud", + "starting": "Käivitub", + "restarting": "Taaskäivitub", + "unknown": "Teadmata", + "online": "Võrgus", + "offline": "Võrgust väljas", + "reachable": "Kättesaadav", + "unreachable": "Kättesaamatu", + "usable": "Kasutatav", + "unusable": "Kasutamatu" } }, "vpn": { "name": "VPN", "description": "Ülevaade VPN-ühendustest", "serviceUnavailable": "VPN pole saadaval", - "option": {} + "status": { + "running": "Töötab", + "notRunning": "Ei tööta", + "unavailable": "Pole saadaval", + "vpn": "VPN: {status}" + } }, "ups": { "name": "UPS", @@ -2318,14 +3498,19 @@ "runtime": "Tööaeg", "load": "Koormus", "input": "Sisend", - "output": "Väljund" + "output": "Väljund", + "batteryVoltage": "Aku pinge", + "power": "Toide", + "temperature": "Temperatuur", + "manufacturer": "Tootja", + "model": "Mudel", + "serial": "Seerianumber" }, "error": { "internalServerError": "UPS-i andmete toomine nurjus" } }, "tracearr": { - "name": "Tracearr", "description": "Täiustatud meediaserveri jälgimine üksikasjalike voo- ja transkodeerimisandmetega", "option": { "showStreams": { @@ -2413,10 +3598,7 @@ "label": "Sündmus", "description": "Kuva konkreetse sündmuse esinemiste koguarv", "placeholder": "Vali sündmus", - "loading": "Sündmuste laadimine...", - "noEvents": "Sündmusi ei leitud", - "none": "Sündmus puudub", - "configureWebsiteFirst": "Sündmuste laadimiseks vali esmalt veebisait" + "none": "Sündmus puudub" }, "chartType": { "label": "Diagrammi tüüp", @@ -2447,26 +3629,21 @@ "eventNames": { "label": "Sündmused", "description": "Vali diagrammi jaoks üks või mitu sündmust", - "placeholder": "Vali sündmused...", - "loading": "Sündmuste laadimine...", - "noEvents": "Sündmusi ei leitud", - "configureWebsiteFirst": "Sündmuste laadimiseks vali esmalt veebisait" + "placeholder": "Vali sündmused..." }, "topCount": { "label": "Kuvatavate üksuste arv", "description": "Kuvatavate populaarseimate üksuste arv (max 500)" + }, + "events": { + "loading": "Sündmuste laadimine...", + "noEvents": "Sündmusi ei leitud", + "configureWebsiteFirst": "Sündmuste laadimiseks vali esmalt veebisait" } }, "event": { - "occurrences": "sündmust", "label": "sündmust" }, - "topPages": { - "direct": "Otse" - }, - "topReferrers": { - "direct": "Otse" - }, "events": { "selectPrompt": "Vali diagrammi jaoks sündmused" }, @@ -2475,6 +3652,9 @@ "noWebsite": "Veebisait pole seadistatud", "noData": "Andmed pole saadaval", "internalServerError": "Umami andmete toomine nurjus" + }, + "top": { + "direct": "Otsene" } }, "common": { @@ -2502,7 +3682,8 @@ }, "integration": { "noData": "Integratsiooni ei leitud", - "description": "Klõpsa uue integratsiooni loomiseks" + "description": "Klõpsa uue integratsiooni loomiseks", + "manage": "Halda integratsioone" }, "app": { "noData": "Rakendust ei leitud", @@ -2513,7 +3694,61 @@ "noIntegration": "Integratsiooni pole valitud", "noData": "Integratsiooni andmed pole saadaval" }, - "option": {} + "integrationDisconnected": "Andmed pole saadaval, kõik integratsioonid on ühendamata", + "updatedAt": "Uuendatud {date}", + "title": { + "label": "Pealkiri" + }, + "openInNewTab": { + "label": "Ava uuel vahelehel" + }, + "showTitle": { + "label": "Kuva pealkiri" + }, + "weatherLocation": { + "label": "Ilma asukoht" + }, + "layout": { + "label": "Paigutus", + "option": { + "horizontal": "Horisontaalne", + "vertical": "Vertikaalne", + "grid": "Ruudustik" + } + }, + "select": { + "loading": "Laadimine...", + "loadError": "Valikute laadimine nurjus" + }, + "dateFormat": { + "label": "Kuupäeva vorming", + "description": "Kuidas kuupäev peaks välja nägema" + }, + "visibleStorageVolumes": { + "label": "Nähtavad salvestusruumid", + "description": "Saadaval ainult siis, kui kõik valitud integratsioonid on OpenMediaVault või Synology. Jätke tühjaks, et kuvada kõik tuvastatud salvestusruumid.", + "placeholder": "Vali salvestusruumid" + }, + "tableOptions": { + "columns": { + "label": "Kuvatavad veerud" + }, + "columnOrder": { + "label": "Veergude järjekord" + }, + "columnWidths": { + "label": "Veergude laiused" + }, + "enableRowSorting": { + "label": "Luba üksuste sortimine" + }, + "defaultSort": { + "label": "Vaikimisi sortimiseks kasutatav veerg" + }, + "invertSorting": { + "label": "Pööra sortimisjärjestus ümber" + } + } }, "video": { "name": "Video voog", @@ -2572,6 +3807,7 @@ "transcoding": "Transkodeerimine", "paused": "Peatatud", "remaining": "{minutes} min jäänud", + "seasonEpisode": "H{season} O{episode}", "metadata": { "title": "Nohikute statistika", "video": { @@ -2589,11 +3825,16 @@ "resolution": "Eraldusvõime", "target": "Sihtkoodek" } - } + }, + "unknownUser": "Tundmatu kasutaja" + }, + "summary": { + "sessions": "{count, plural, one {# seanss} other {# seanssi}}", + "playing": "{count} esitamisel", + "transcoding": "{count} transkodeerimisel" } }, "paperlessNgx": { - "name": "Paperless-ngx", "description": "Ülevaade sinu Paperless-ngx dokumendiarhiivist", "documentsTotal": "Dokumente kokku", "documentsInbox": "Sisendkaust", @@ -2637,6 +3878,192 @@ "internalServerError": "Paperless-ngx andmete toomine nurjus" } }, + "patchmon": { + "description": "Hostide paikade oleku ülevaade PatchMonist", + "title": "PatchMoni statistika", + "totalHosts": "Hoste kokku", + "hostsNeedingUpdates": "Vajavad uuendusi", + "securityUpdates": "Turvauuendused", + "upToDateHosts": "Ajakohased hostid", + "hostsWithSecurityUpdates": "Turvauuendustega hostid", + "recentUpdates24h": "Uuendused (24 h)", + "totalOutdatedPackages": "Aegunud paketid", + "totalRepos": "Hoidlad", + "osDistribution": "Operatsioonisüsteemide jaotus", + "compliance": "Paikade vastavus", + "complianceRatio": "{upToDate} / {total}", + "lastUpdated": "Uuendatud {time}", + "option": { + "showTotalHosts": { + "label": "Kuva hostide koguarv", + "description": "Kuva jälgitavate hostide koguarv" + }, + "showHostsNeedingUpdates": { + "label": "Kuva uuendusi vajavad hostid", + "description": "Kuva hostid, millel on vähemalt üks aegunud pakett" + }, + "showSecurityUpdates": { + "label": "Kuva turvauuendused", + "description": "Kuva saadaolevate turvauuenduste koguarv" + }, + "showUpToDateHosts": { + "label": "Kuva ajakohased hostid", + "description": "Kuva hostid, millel pole aegunud pakette" + }, + "showHostsWithSecurityUpdates": { + "label": "Kuva turvauuendustega hostid", + "description": "Kuva turvapaiku vajavad hostid" + }, + "showRecentUpdates24h": { + "label": "Kuva hiljutised uuendused (24 h)", + "description": "Kuva viimase 24 tunni jooksul rakendatud uuenduste arv" + }, + "showTotalOutdatedPackages": { + "label": "Kuva aegunud paketid", + "description": "Kuva kõigi hostide aegunud pakettide koguarv" + }, + "showTotalRepos": { + "label": "Kuva hoidlad", + "description": "Kuva jälgitavate aktiivsete hoidlate arv" + }, + "enableThresholdColors": { + "label": "Luba läviväärtuste värvid", + "description": "Värvi statistikanäitajad raskusastme eelseadete alusel roheliseks, kollaseks või punaseks" + }, + "useCustomThresholds": { + "label": "Täpsemad läviväärtused", + "description": "Kohanda iga statistikanäitaja hoiatuse ja kriitilisi läviväärtusi absoluutarvude või hostide koguarvu protsentidena" + }, + "thresholdMode": { + "option": { + "absolute": "Absoluutarv", + "percent": "Hostide koguarvu protsent" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "Uuendusi vajavate hostide läviväärtuse režiim", + "description": "Võrdle uuendusi vajavate hostide arvu absoluutväärtuse või hostide koguarvu protsendina" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "Uuendusi vajavate hostide hoiatuse läviväärtus" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "Uuendusi vajavate hostide kriitiline läviväärtus" + }, + "securityUpdatesThresholdMode": { + "label": "Turvauuenduste läviväärtuse režiim", + "description": "Võrdle turvauuenduste arvu absoluutväärtuse või hostide koguarvu protsendina" + }, + "securityUpdatesWarningAt": { + "label": "Turvauuenduste hoiatuse läviväärtus" + }, + "securityUpdatesCriticalAt": { + "label": "Turvauuenduste kriitiline läviväärtus" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "Turvauuendustega hostide läviväärtuse režiim", + "description": "Võrdle hostide arvu absoluutväärtuse või hostide koguarvu protsendina" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "Turvauuendustega hostide hoiatuse läviväärtus" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "Turvauuendustega hostide kriitiline läviväärtus" + }, + "upToDateHostsThresholdMode": { + "label": "Ajakohaste hostide läviväärtuse režiim", + "description": "Võrdle ajakohaste hostide arvu absoluutväärtuse või hostide koguarvu protsendina" + }, + "upToDateHostsWarningAt": { + "label": "Ajakohaste hostide hoiatuse läviväärtus", + "description": "Kuva kollane, kui väärtus on sellel läviväärtusel või sellest suurem, kuid täielik katvus pole saavutatud" + }, + "upToDateHostsCriticalAt": { + "label": "Ajakohaste hostide kriitiline läviväärtus", + "description": "Kuva punane, kui väärtus langeb sellest läviväärtusest allapoole" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "Aegunud pakettide läviväärtuse režiim", + "description": "Võrdle aegunud pakettide arvu absoluutväärtuse või hostide koguarvu protsendina" + }, + "totalOutdatedPackagesWarningAt": { + "label": "Aegunud pakettide hoiatuse läviväärtus" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "Aegunud pakettide kriitiline läviväärtus" + }, + "showOsDistribution": { + "label": "Kuva operatsioonisüsteemide jaotus", + "description": "Kuva jälgitavate hostide jaotus operatsioonisüsteemi järgi" + }, + "osDistributionLimit": { + "label": "Operatsioonisüsteemide jaotuse piirang", + "description": "Kuvatavate operatsioonisüsteemide maksimaalne arv", + "option": { + "3": "3 parimat", + "5": "5 parimat", + "10": "10 parimat", + "all": "Kõik" + } + }, + "showOsVersion": { + "label": "Kuva operatsioonisüsteemi versioon", + "description": "Lisa operatsioonisüsteemi versioon võimaluse korral iga jaotuse sildile" + }, + "showComplianceHero": { + "label": "Kuva vastavuse põhinäitaja", + "description": "Kuva vastavusrõngas, mis näitab ajakohaste hostide protsenti" + }, + "osDisplayMode": { + "label": "Operatsioonisüsteemi kuvamisrežiim", + "description": "Vali, kuidas operatsioonisüsteemide jaotust kuvada", + "option": { + "bars": "Horisontaalsed ribad", + "donut": "Rõngasdiagramm" + } + }, + "threshold": { + "warningAt": { + "description": "Sisesta väärtus, mille saavutamisel kuvatakse kollane hoiatus" + }, + "criticalAt": { + "description": "Sisesta väärtus, mille saavutamisel kuvatakse punane hoiatus" + } + } + }, + "error": { + "internalServerError": "PatchMoni andmete toomine nurjus" + } + }, + "bazarr": { + "description": "Bazarr'i eksemplari puuduvate subtiitrite ja seisundi ülevaade", + "episodes": "Puuduvad osad", + "movies": "Puuduvad filmid", + "providers": "Teenusepakkujate probleemid", + "status": "Seisundiprobleemid", + "announcements": "Teadaanded", + "option": { + "showMissingEpisodes": { + "label": "Kuva puuduvad osad", + "description": "Kuva subtiitriteta osade arv" + }, + "showMissingMovies": { + "label": "Kuva puuduvad filmid", + "description": "Kuva subtiitriteta filmide arv" + }, + "showProviderIssues": { + "label": "Kuva teenusepakkujate probleemid", + "description": "Kuva probleemidega subtiitriteenusepakkujate arv" + }, + "showHealthIssues": { + "label": "Kuva seisundiprobleemid", + "description": "Kuva Bazarr'i seisundiprobleemide arv" + } + }, + "error": { + "internalServerError": "Bazarr'i andmete toomine nurjus" + } + }, "immich-serverStats": { "name": "Immichi serveri statistika", "description": "Teave sinu Immichi eksemplari kohta", @@ -2661,7 +4088,8 @@ "users": "Kasutajad", "photos": "Fotod", "videos": "Videod", - "storage": "Kasutatud salvestusruum" + "storage": "Kasutatud salvestusruum", + "albumLimit": "Suurimad albumid (kuvatakse kuni {count})" }, "immich-albumCarousel": { "name": "Immichi album", @@ -2685,24 +4113,21 @@ } }, "description": "Immichi albumi või kogu fototeegi piltide slaidiseanss", - "noPhotos": "Fotosid ei leitud" + "noPhotos": "Fotosid ei leitud", + "albumPhoto": "Albumi foto", + "actions": { + "previousPhoto": "Eelmine foto", + "nextPhoto": "Järgmine foto", + "pauseSlideshow": "Peata slaidiseanss", + "resumeSlideshow": "Jätka slaidiseanssi", + "toggleSlideshow": "Peata või jätka slaidiseanssi", + "photo": "Foto {number}" + } }, "downloads": { "name": "Allalaadimishaldur", "description": "Võimaldab vaadata ja hallata allalaadimisi nii Torrenti kui Usenet'i klientidest.", "option": { - "columns": { - "label": "Näidatavad veerud" - }, - "enableRowSorting": { - "label": "Luba üksuste sorteerimine" - }, - "defaultSort": { - "label": "Vaikimisi sorteerimise veerg" - }, - "descendingDefaultSort": { - "label": "Pööra sorteerimine ümber" - }, "showCompletedUsenet": { "label": "Näita Usenet'i kirjeid, mis on märgitud lõpetatuks" }, @@ -2727,12 +4152,6 @@ "limitPerIntegration": { "label": "Piira üksusi integratsiooni kohta", "description": "See piirab iga integratsiooni kohta kuvatavate üksuste arvu, mitte koguarvu" - }, - "columnOrder": { - "label": "Veergude järjekord" - }, - "columnWidths": { - "label": "Veergude laiused" } }, "errors": { @@ -2763,7 +4182,7 @@ "detailsTitle": "Praegune indeks kliendi sees" }, "id": { - "columnTitle": "ID", + "columnTitle": "Üksuse ID", "detailsTitle": "Üksuse ID" }, "integration": { @@ -2893,6 +4312,10 @@ "mediaRequests-requestList": { "name": "Meediapäringute nimekiri", "description": "Vaata kõiki meediapäringuid oma Overseerr või Jellyseerr eksemplarist", + "empty": { + "title": "Meediumipäringuid pole veel", + "description": "Päringu alustamiseks otsi filmi või saadet." + }, "option": { "linksTargetNewTab": { "label": "Ava lingid uuel vahelehel" @@ -2926,12 +4349,16 @@ "failed": "Nurjus", "completed": "Lõpetatud" }, + "unknown": "Teadmata", "toBeDetermined": "Tuleb määrata" }, "mediaRequests-requestStats": { "name": "Meediapäringute statistika", "description": "Statistika teie meediapäringute kohta", - "option": {}, + "empty": { + "title": "Päringutegevust pole veel", + "description": "Statistika kuvatakse pärast esimest meediumipäringut." + }, "titles": { "stats": { "main": "Meedia statistika", @@ -2941,8 +4368,7 @@ "declined": "Juba tagasi lükatud", "available": "Juba saadaval", "tv": "TV päringud", - "movie": "Filmipäringud", - "total": "Kokku" + "movie": "Filmipäringud" }, "users": { "main": "Parimad kasutajad", @@ -2968,7 +4394,6 @@ }, "currentIndex": "{start}–{end} kokku {total}-st", "healthCheck": { - "title": "Tervisekontroll", "queued": "Järjekorras", "status": { "healthy": "Terve", @@ -2977,38 +4402,63 @@ }, "panel": { "statistics": { - "empty": "Tühi", - "transcodes": "Transkodeerimised", - "transcodesCount": "Transkodeerimised", - "healthChecksCount": "Tervisekontrollid", "filesCount": "Failid", "savedSpace": "Säästetud ruum", - "healthChecks": "Tervisekontrollid", "videoCodecs": "Koodekid", "videoContainers": "Konteinerid", "videoResolutions": "Eraldusvõimed" }, "workers": { - "empty": "Tühi", "table": { - "file": "Fail", "eta": "ETA", - "progress": "Edenemine", - "transcode": "Transkodeerimine", - "healthCheck": "Tervisekontroll" + "progress": "Edenemine" } }, "queue": { - "empty": "Tühi", "table": { - "file": "Fail", - "size": "Suurus", - "transcode": "Transkodeerimine", - "healthCheck": "Tervisekontroll" + "size": "Suurus" } + }, + "common": { + "empty": "Tühi", + "file": "Fail", + "healthCheck": "Tervisekontroll", + "transcode": "Transkodeeri", + "transcodes": "Transkodeeringud", + "healthChecks": "Tervisekontrollid" } } }, + "mediaMissing": { + "name": "Puuduv ja järjekorras olev meedia", + "description": "Kuvab Radarrist ja Sonarrist puuduvad ning järjekorras olevad filmid ja osad", + "option": { + "showMissing": { + "label": "Kuva puuduvad üksused" + }, + "showQueued": { + "label": "Kuva järjekorras olevad üksused" + }, + "pageSize": { + "label": "Üksusi lehel" + } + }, + "tab": { + "missing": "Puuduvad", + "queued": "Järjekorras" + }, + "type": { + "movie": "Film", + "episode": "Osa", + "book": "Raamat" + }, + "empty": { + "missing": "Puuduvaid üksusi pole", + "queued": "Järjekorras olevaid üksusi pole", + "noTabsEnabled": "Luba vidina seadetes vähemalt üks vahekaart" + }, + "timeLeft": "Aega jäänud" + }, "rssFeed": { "name": "RSS-voogud", "description": "Jälgi ja kuva üht või enamat üldist RSS-, ATOM- või JSON-voogu", @@ -3031,6 +4481,13 @@ "showPosterImage": { "label": "Näita postripilti" } + }, + "error": { + "allFeedsFailed": "RSS-voogude laadimine nurjus. Kontrolli voogude URL-e ja proovi uuesti." + }, + "warning": { + "partial": "{count, plural, one {# RSS-voogu ei saanud laadida} other {# RSS-voogu ei saanud laadida}}", + "stale": "RSS-vooge ei saanud värskendada. Kuvatakse varem laaditud kirjed." } }, "releases": { @@ -3106,17 +4563,8 @@ "label": "Regulaaravaldis" } }, - "edit": { - "label": "Muuda" - }, "editForm": { - "title": "Muuda hoidlat", - "cancel": { - "label": "Tühista" - }, - "confirm": { - "label": "Kinnita" - } + "title": "Muuda hoidlat" }, "importForm": { "title": "Impordi Dockerist" @@ -3133,8 +4581,7 @@ "label": "Pakkuja märgid", "token": "Märk", "configured": "Märk on seadistatud", - "notConfigured": "Märki pole määratud", - "save": "Salvesta" + "notConfigured": "Märki pole määratud" } } }, @@ -3161,17 +4608,32 @@ "noProviderResponse": "Teenusepakkujalt ei saadud vastust", "unexpected": "Ootamatu pakkuja viga" } - } + }, + "expandDetails": "Kuva {name} üksikasjad", + "collapseDetails": "Peida {name} üksikasjad" }, "networkControllerSummary": { - "option": {}, - "card": { - "vpn": { - "countConnected": "{count} ühendatud" + "advanced": { + "updated": "Värskendatud", + "metric": { + "latency": "Latentsus", + "ping": "Ping", + "uptime": "Tööaeg", + "users": "Kasutajad", + "guests": "Külalised" } }, + "card": { + "vpn": { + "countConnected": "{count, plural, one {# ühendatud} other {# ühendatud}}", + "label": "VPN" + }, + "wan": "WAN", + "web": "Veeb", + "wifi": "Wi-Fi", + "lan": "LAN" + }, "error": { - "integrationsDisconnected": "Andmed pole saadaval, kõik integratsioonid on ühenduse kaotanud", "unknownContentOption": "Võrgukontrolleri kokkuvõtte tundmatu sisuvalik: " }, "name": "Võrgukontrolleri kokkuvõte", @@ -3208,7 +4670,6 @@ } }, "error": { - "integrationsDisconnected": "Andmed pole saadaval, kõik integratsioonid on ühenduse kaotanud", "unknownContentOption": "Võrguoleku vidina tundmatu sisuvalik: " }, "name": "Võrgu olek", @@ -3238,7 +4699,6 @@ "versiontitle": "Versioonid", "cputitle": "CPU kasutus", "memorytitle": "Mälukasutus", - "cpu": "CPU", "memory": "Mälu", "interfaces": { "name": "nimi", @@ -3246,6 +4706,16 @@ "recv": "Vastu võetud", "title": "Võrguliidesed" } + }, + "empty": { + "noInterfaces": "Võrguliideste andmeid pole veel" + }, + "versionUnknown": "Tundmatu versioon", + "metricAccessible": "{metric}: {value}%, {status}", + "status": { + "normal": "Normaalne", + "warning": "Hoiatus", + "critical": "Kriitiline" } }, "notifications": { @@ -3255,8 +4725,21 @@ "option": { "hideLogos": { "label": "Peida logod" + }, + "messageFormat": { + "label": "Sõnumi vorming", + "option": { + "auto": "Automaatne", + "plain": "Lihttekst", + "markdown": "Markdown", + "html": "HTML" + } } - } + }, + "openService": "Ava teavitusteenus", + "deleteNotification": "Kustuta teavitus Gotifyst", + "deleteFailed": "Teavituse kustutamine nurjus", + "deleteFailedMessage": "Teavitust ei saanud kustutada. Proovi uuesti." }, "speedtestTracker": { "name": "Speedtest Tracker", @@ -3298,7 +4781,6 @@ } }, "uptimeKuma": { - "name": "Uptime Kuma", "description": "Jälgi tööaja statistikat oma Uptime Kuma olekulehelt", "option": { "showAverageUptime": { @@ -3335,8 +4817,58 @@ }, "error": { "internalServerError": "Tööaja andmete toomine nurjus" + }, + "status": { + "up": "Kokku üles", + "down": "Allalaadimiskiirus", + "paused": "Pausil" } }, + "traefik": { + "description": "Traefiku ruuterite, teenuste, vahevara ja sisenemispunktide ülevaade", + "option": { + "showTcp": { + "label": "Kuva TCP" + }, + "showUdp": { + "label": "Kuva UDP" + }, + "showEntryPoints": { + "label": "Kuva sisenemispunkte" + } + }, + "instances": "Traefiku eksemplarid", + "versionUnknown": "Versioon teadmata", + "summary": { + "routers": "Ruuterid", + "entryPoints": "Sisenemispunktid" + }, + "resource": { + "routers": "Ruuterid", + "middlewares": "Vahevarad" + }, + "status": { + "healthy": "Terve", + "errors": "{count} viga", + "warnings": "{count} hoiatust" + }, + "error": { + "internalServerError": "Traefiku andmete toomine nurjus" + }, + "resourceType": { + "router": "Ruuter", + "service": "Teenus", + "middleware": "Vahendustarkvara" + }, + "resourceStatus": { + "enabled": "Lubatud", + "disabled": "Keelatud", + "warning": "Hoiatus", + "error": "Viga", + "unknown": "Teadmata" + }, + "failedEndpoint": "Nurjus: {endpoint}" + }, "audioStats": { "name": "Helistatistika", "description": "Navidrome'i või Audiobookshelfi kogu- ja taasesitusstatistika", @@ -3401,9 +4933,7 @@ "label": "Nähtavad diagrammid", "description": "Vali diagrammid, mida soovid näha.", "option": { - "cpu": "CPU", "memory": "Mälu", - "gpu": "GPU", "network": "Võrk" } }, @@ -3418,12 +4948,11 @@ } }, "card": { - "cpu": "CPU", "memory": "MÄLU", - "gpu": "GPU", "network": "VÕRK", "up": "ÜLES", - "down": "ALLA" + "down": "ALLA", + "memoryTooltip": "{used} / {available} ({percent}%)" } }, "systemDisks": { @@ -3449,151 +4978,88 @@ }, "showBackgroundBar": { "label": "Näita taustal kasutusriba" - }, - "visibleStorageVolumes": { - "label": "Nähtavad salvestusruumid", - "description": "Saadaval ainult siis, kui kõik valitud integratsioonid on Synology. Jäta tühjaks, et kuvada kõik tuvastatud salvestusruumid.", - "placeholder": "Vali salvestusruumid" } }, "status": { - "unhealthy": "Ebatervislik" + "unhealthy": "Ebatervislik", + "smart": "SMART", + "free": "{percentage}% vaba" + } + }, + "customApi": { + "name": "Kohandatud vidin", + "description": "Renderdab konfigureeritud kohandatud JSX-definitsiooni.", + "customJsx": { + "noTemplate": "JSX-malli pole konfigureeritud.", + "templateWarnings": "{count} malliteadet:", + "requestIdRequired": "See võrgutoiming nõuab nimega requestId-d.", + "unsavedPreview": "Enne nimega päringute testimist käivita redaktoris esialgne päringutest.", + "invalidParams": "Päringu parameetrid on sobimatud.", + "loading": "Päringu laadimine…", + "loadRequest": "Laadi päring", + "requestFailed": "Päring nurjus.", + "retry": "Proovi päringut uuesti", + "actionCompleted": "Toiming lõpetati edukalt.", + "actionSimulated": "Toiming simuleeriti; päringut ei saadetud.", + "actionsDisabledEditMode": "Toimingud on tahvli redigeerimisrežiimis keelatud.", + "widgetItemUnavailable": "See vidinaelement pole saadaval.", + "toggle": "Lülita sisse/välja", + "copied": "Kopeeritud", + "confirmDelete": "Kinnita see pöördumatu toiming." + }, + "option": { + "definitionId": { + "label": "Kohandatud vidin" + }, + "refreshInterval": { + "label": "Värskendusintervall", + "description": "Kui sageli API-st andmeid uuesti tuua (sekundites)" + } + }, + "noDefinition": "Määratlust pole valitud", + "definitionNotFound": "Kohandatud vidin pole saadaval", + "migrationRequired": "See pärand-kohandatud vidin säilitatakse, kuid selle käivitamiseks tuleb see halduspaneeli kohandatud vidinate haldusest üle viia versioonile Custom JSX v2.", + "manageMigration": "Ava kohandatud vidinate haldus", + "contactAdmin": "Võta ühendust administraatoriga.", + "configurationNeedsRepair": "Selle vidina suvandid muutusid. Konfiguratsiooni parandamiseks redigeeri vidinat.", + "removeFromBoard": "Eemalda tahvlilt", + "editModePending": "Vidina laadimiseks salvesta tahvel.", + "picker": { + "group": "Kohandatud JSX-vidinad", + "empty": "Kohandatud vidinaid ei leitud", + "preview": "Eelvaade", + "sources": "{count, plural, one {# allikas} other {# allikat}}", + "requests": "{count, plural, one {# päring} other {# päringut}}", + "migrationRequired": "Vajalik on üleviimine", + "migrationDescription": "See paigutatud v1-vidin ei saa veel käivituda. Kopeeri selle varjatud viip LLM-i ja kleebi üks JSON-vastus Homarri.", + "manageMigration": "Ava kohandatud vidinate haldus", + "contactAdmin": "Võta ühendust administraatoriga." + }, + "configuration": { + "needsAttention": "Konfiguratsioon vajab tähelepanu: {message}", + "advancedOptions": "Täpsemad suvandid", + "invalidJson": "Sobimatu JSON" } }, "beszelSystemTable": { "name": "Beszeli süsteemid (tabel)", "description": "Kõigi Beszeli jälgitavate süsteemide tabelivaade sorteeritavate veergude ja olekunäidikutega", "option": { - "statusFilter": { - "label": "Oleku filter" - }, "sortBy": { "label": "Sorteerimisalus" }, "sortDirection": { "label": "Sorteerimise suund" - }, - "showCpu": { - "label": "Kuva protsessor" - }, - "showMemory": { - "label": "Kuva mälu" - }, - "showDisk": { - "label": "Kuva ketas" - }, - "showGpu": { - "label": "Kuva GPU" - }, - "showLoadAvg": { - "label": "Kuva koormuse keskmine" - }, - "showNet": { - "label": "Kuva võrk" - }, - "showTemp": { - "label": "Kuva temperatuur" - }, - "showBattery": { - "label": "Kuva aku" - }, - "showServices": { - "label": "Kuva teenused" - }, - "showUptime": { - "label": "Kuva tööaeg" - }, - "showAgent": { - "label": "Kuva agendi versioon" - }, - "columnOrder": { - "label": "Veergude järjekord" - }, - "columnWidths": { - "label": "Veergude laiused" } }, - "noRecords": "Süsteeme ei leitud", "error": { - "internalServerError": "Beszeliga ei õnnestunud ühendust luua. Kontrolli oma integratsiooni seadeid.", "layoutSaveTitle": "Tabelipaigutust ei saanud salvestada", "layoutSaveMessage": "Veergude järjekorda või laiusi ei saanud salvestada. Proovi uuesti." - }, - "column": { - "system": "Süsteem", - "cpu": "Protsessor", - "memory": "Mälu", - "disk": "Ketas", - "gpu": "GPU", - "loadAvg": "Koormuse keskmine", - "net": "Võrk", - "temp": "Temperatuur", - "battery": "Aku", - "services": "Teenused", - "uptime": "Tööaeg", - "agent": "Agent" } }, "beszelSystemGrid": { "name": "Beszeli süsteemid (ruudustik)", - "description": "Kaardiruudustiku vaade kõigist Beszeli jälgitavatest süsteemidest reaalajas mõõdikutega", - "option": { - "statusFilter": { - "label": "Oleku filter" - }, - "showCpu": { - "label": "Kuva protsessor" - }, - "showMemory": { - "label": "Kuva mälu" - }, - "showDisk": { - "label": "Kuva ketas" - }, - "showGpu": { - "label": "Kuva GPU" - }, - "showLoadAvg": { - "label": "Kuva koormuse keskmine" - }, - "showNet": { - "label": "Kuva võrk" - }, - "showTemp": { - "label": "Kuva temperatuur" - }, - "showBattery": { - "label": "Kuva aku" - }, - "showServices": { - "label": "Kuva teenused" - }, - "showUptime": { - "label": "Kuva tööaeg" - }, - "showAgent": { - "label": "Kuva agendi versioon" - } - }, - "error": { - "internalServerError": "Beszeliga ei õnnestunud ühendust luua. Kontrolli oma integratsiooni seadeid." - }, - "empty": { - "noSystems": "Süsteeme ei leitud" - }, - "metric": { - "cpu": "Protsessor", - "memory": "Mälu", - "disk": "Ketas", - "gpu": "GPU", - "loadAvg": "Koormuse keskmine", - "net": "Võrk", - "temp": "Temperatuur", - "battery": "Aku", - "services": "Teenused", - "uptime": "Tööaeg", - "agent": "Agent" - } + "description": "Kaardiruudustiku vaade kõigist Beszeli jälgitavatest süsteemidest reaalajas mõõdikutega" }, "beszelAlerts": { "name": "Beszeli hoiatused", @@ -3607,11 +5073,12 @@ } }, "empty": "Hoiatusi pole seadistatud", - "error": { - "internalServerError": "Beszeliga ei õnnestunud ühendust luua. Kontrolli oma integratsiooni seadeid." - }, "history": "Ajalugu", "resolved": "Lahendatud", + "alertDescription": { + "statusDuration": "Maas olnud {minutes} min", + "threshold": "Ületab väärtust {value} {minutes} min jooksul" + }, "status": { "triggered": "Käivitunud", "ok": "Korras" @@ -3658,16 +5125,16 @@ "noSystems": "Süsteeme ei leitud" }, "error": { - "internalServerError": "Beszeliga ei õnnestunud ühendust luua. Kontrolli oma integratsiooni seadeid.", "liveConnectionFailed": "Reaalajaühendus nurjus. Sinu Beszeli eksemplar ei pruugi reaalajas voogedastust toetada.", "switchToHistorical": "Lülitu ajaloolisele vaatele", - "systemNotFound": "Valitud süsteemi ei leitud. Vali mõni muu süsteem." + "systemNotFound": "Valitud süsteemi ei leitud. Vali mõni muu süsteem.", + "selectionSaveTitle": "Valikut ei saanud salvestada", + "selectionSaveMessage": "Sinu süsteemi- või ajavahemiku valikut ei saanud salvestada. Proovi uuesti." }, "chart": { "cpu": { "title": "Protsessori kasutus", - "subtitle": "Kogu süsteemi keskmine protsessorikasutus", - "series": "Protsessor" + "subtitle": "Kogu süsteemi keskmine protsessorikasutus" }, "memory": { "title": "Mälukasutus", @@ -3709,289 +5176,550 @@ "title": "Dockeri võrgu I/O", "subtitle": "Dockeri konteinerite võrguliiklus" } + }, + "period": { + "live": "Reaalajas", + "oneHour": "1 h", + "twelveHours": "12 h", + "oneDay": "24 h", + "oneWeek": "1 nädal", + "thirtyDays": "30 päeva" } }, - "patchmon": { - "name": "PatchMon", - "description": "Hostide paikade oleku ülevaade PatchMonist", - "title": "PatchMoni statistika", - "totalHosts": "Hoste kokku", - "hostsNeedingUpdates": "Vajavad uuendusi", - "securityUpdates": "Turvauuendused", - "upToDateHosts": "Ajakohased hostid", - "hostsWithSecurityUpdates": "Turvauuendustega hostid", - "recentUpdates24h": "Uuendused (24 h)", - "totalOutdatedPackages": "Aegunud paketid", - "totalRepos": "Hoidlad", - "osDistribution": "Operatsioonisüsteemide jaotus", - "compliance": "Paikade vastavus", - "complianceRatio": "{upToDate} / {total}", - "lastUpdated": "Uuendatud {time}", - "option": { - "showTotalHosts": { - "label": "Kuva hostide koguarv", - "description": "Kuva jälgitavate hostide koguarv" - }, - "showHostsNeedingUpdates": { - "label": "Kuva uuendusi vajavad hostid", - "description": "Kuva hostid, millel on vähemalt üks aegunud pakett" - }, - "showSecurityUpdates": { - "label": "Kuva turvauuendused", - "description": "Kuva saadaolevate turvauuenduste koguarv" - }, - "showUpToDateHosts": { - "label": "Kuva ajakohased hostid", - "description": "Kuva hostid, millel pole aegunud pakette" - }, - "showHostsWithSecurityUpdates": { - "label": "Kuva turvauuendustega hostid", - "description": "Kuva turvapaiku vajavad hostid" - }, - "showRecentUpdates24h": { - "label": "Kuva hiljutised uuendused (24 h)", - "description": "Kuva viimase 24 tunni jooksul rakendatud uuenduste arv" - }, - "showTotalOutdatedPackages": { - "label": "Kuva aegunud paketid", - "description": "Kuva kõigi hostide aegunud pakettide koguarv" - }, - "showTotalRepos": { - "label": "Kuva hoidlad", - "description": "Kuva jälgitavate aktiivsete hoidlate arv" - }, - "enableThresholdColors": { - "label": "Luba läviväärtuste värvid", - "description": "Värvi statistikanäitajad raskusastme eelseadete alusel roheliseks, kollaseks või punaseks" - }, - "useCustomThresholds": { - "label": "Täpsemad läviväärtused", - "description": "Kohanda iga statistikanäitaja hoiatuse ja kriitilisi läviväärtusi absoluutarvude või hostide koguarvu protsentidena" - }, - "thresholdMode": { - "option": { - "absolute": "Absoluutarv", - "percent": "Hostide koguarvu protsent" - } - }, - "hostsNeedingUpdatesThresholdMode": { - "label": "Uuendusi vajavate hostide läviväärtuse režiim", - "description": "Võrdle uuendusi vajavate hostide arvu absoluutväärtuse või hostide koguarvu protsendina" - }, - "hostsNeedingUpdatesWarningAt": { - "label": "Uuendusi vajavate hostide hoiatuse läviväärtus", - "description": "Kuva kollane, kui väärtus jõuab selle läviväärtuseni" - }, - "hostsNeedingUpdatesCriticalAt": { - "label": "Uuendusi vajavate hostide kriitiline läviväärtus", - "description": "Kuva punane, kui väärtus jõuab selle läviväärtuseni" - }, - "securityUpdatesThresholdMode": { - "label": "Turvauuenduste läviväärtuse režiim", - "description": "Võrdle turvauuenduste arvu absoluutväärtuse või hostide koguarvu protsendina" - }, - "securityUpdatesWarningAt": { - "label": "Turvauuenduste hoiatuse läviväärtus", - "description": "Kuva kollane, kui väärtus jõuab selle läviväärtuseni" - }, - "securityUpdatesCriticalAt": { - "label": "Turvauuenduste kriitiline läviväärtus", - "description": "Kuva punane, kui väärtus jõuab selle läviväärtuseni" - }, - "hostsWithSecurityUpdatesThresholdMode": { - "label": "Turvauuendustega hostide läviväärtuse režiim", - "description": "Võrdle hostide arvu absoluutväärtuse või hostide koguarvu protsendina" - }, - "hostsWithSecurityUpdatesWarningAt": { - "label": "Turvauuendustega hostide hoiatuse läviväärtus", - "description": "Kuva kollane, kui väärtus jõuab selle läviväärtuseni" - }, - "hostsWithSecurityUpdatesCriticalAt": { - "label": "Turvauuendustega hostide kriitiline läviväärtus", - "description": "Kuva punane, kui väärtus jõuab selle läviväärtuseni" - }, - "upToDateHostsThresholdMode": { - "label": "Ajakohaste hostide läviväärtuse režiim", - "description": "Võrdle ajakohaste hostide arvu absoluutväärtuse või hostide koguarvu protsendina" - }, - "upToDateHostsWarningAt": { - "label": "Ajakohaste hostide hoiatuse läviväärtus", - "description": "Kuva kollane, kui väärtus on sellel läviväärtusel või sellest suurem, kuid täielik katvus pole saavutatud" - }, - "upToDateHostsCriticalAt": { - "label": "Ajakohaste hostide kriitiline läviväärtus", - "description": "Kuva punane, kui väärtus langeb sellest läviväärtusest allapoole" - }, - "totalOutdatedPackagesThresholdMode": { - "label": "Aegunud pakettide läviväärtuse režiim", - "description": "Võrdle aegunud pakettide arvu absoluutväärtuse või hostide koguarvu protsendina" - }, - "totalOutdatedPackagesWarningAt": { - "label": "Aegunud pakettide hoiatuse läviväärtus", - "description": "Kuva kollane, kui väärtus jõuab selle läviväärtuseni" - }, - "totalOutdatedPackagesCriticalAt": { - "label": "Aegunud pakettide kriitiline läviväärtus", - "description": "Kuva punane, kui väärtus jõuab selle läviväärtuseni" - }, - "showOsDistribution": { - "label": "Kuva operatsioonisüsteemide jaotus", - "description": "Kuva jälgitavate hostide jaotus operatsioonisüsteemi järgi" - }, - "osDistributionLimit": { - "label": "Operatsioonisüsteemide jaotuse piirang", - "description": "Kuvatavate operatsioonisüsteemide maksimaalne arv", - "option": { - "3": "3 parimat", - "5": "5 parimat", - "10": "10 parimat", - "all": "Kõik" - } - }, - "showOsVersion": { - "label": "Kuva operatsioonisüsteemi versioon", - "description": "Lisa operatsioonisüsteemi versioon võimaluse korral iga jaotuse sildile" - }, - "showComplianceHero": { - "label": "Kuva vastavuse põhinäitaja", - "description": "Kuva vastavusrõngas, mis näitab ajakohaste hostide protsenti" - }, - "osDisplayMode": { - "label": "Operatsioonisüsteemi kuvamisrežiim", - "description": "Vali, kuidas operatsioonisüsteemide jaotust kuvada", - "option": { - "bars": "Horisontaalsed ribad", - "donut": "Rõngasdiagramm" - } - } + "assistant": { + "name": "Assistent", + "description": "Kasuta otse oma tahvlil täielikku vestlust assistendiga.", + "unavailable": { + "title": "Assistent pole saadaval", + "description": "Logi sisse ja palu administraatoril halduspaneelis assistent konfigureerida." }, + "compact": { + "title": "Assistent", + "description": "Vestlemiseks muuda selle vidina suurust või ava täielik vestlus.", + "open": "Ava assistent", + "openTitle": "Assistent on külgpaneelil avatud", + "openDescription": "Vestlus jääb ühele aktiivsele pinnale.", + "returnToWidget": "Too vestlus sellesse vidinasse tagasi", + "otherWidgetTitle": "Assistent on aktiivne teises vidinas", + "otherWidgetDescription": "Korraga jääb aktiivseks ainult üks vestluspind.", + "useHere": "Kasuta assistenti selles vidinas" + } + }, + "beszel": { "error": { - "internalServerError": "PatchMoni andmete toomine nurjus" - } - }, - "bazarr": { - "name": "Bazarr", - "description": "Bazarr'i eksemplari puuduvate subtiitrite ja seisundi ülevaade", - "episodes": "Puuduvad osad", - "movies": "Puuduvad filmid", - "providers": "Teenusepakkujate probleemid", - "status": "Seisundiprobleemid", - "option": { - "showMissingEpisodes": { - "label": "Kuva puuduvad osad", - "description": "Kuva subtiitriteta osade arv" - }, - "showMissingMovies": { - "label": "Kuva puuduvad filmid", - "description": "Kuva subtiitriteta filmide arv" - }, - "showProviderIssues": { - "label": "Kuva teenusepakkujate probleemid", - "description": "Kuva probleemidega subtiitriteenusepakkujate arv" - }, - "showHealthIssues": { - "label": "Kuva seisundiprobleemid", - "description": "Kuva Bazarr'i seisundiprobleemide arv" - } - }, - "error": { - "internalServerError": "Bazarr'i andmete toomine nurjus" - } - }, - "mediaMissing": { - "name": "Puuduv ja järjekorras olev meedia", - "description": "Kuvab Radarrist ja Sonarrist puuduvad ning järjekorras olevad filmid ja osad", - "option": { - "showMissing": { - "label": "Kuva puuduvad üksused" - }, - "showQueued": { - "label": "Kuva järjekorras olevad üksused" - }, - "pageSize": { - "label": "Üksusi lehel" - } - }, - "tab": { - "missing": "Puuduvad", - "queued": "Järjekorras" - }, - "type": { - "movie": "Film", - "episode": "Osa" + "internalServerError": "Beszeliga ei õnnestunud ühendust luua. Kontrolli oma integratsiooni seadeid." }, "empty": { - "missing": "Puuduvaid üksusi pole", - "queued": "Järjekorras olevaid üksusi pole", - "noTabsEnabled": "Luba vidina seadetes vähemalt üks vahekaart" + "noSystems": "Süsteeme ei leitud" }, - "timeLeft": "Aega jäänud" - }, - "traefik": { - "name": "Traefik", - "description": "Traefiku ruuterite, teenuste, vahevara ja sisenemispunktide ülevaade", - "option": { - "showTcp": { - "label": "Kuva TCP" + "options": { + "statusFilter": { + "label": "Oleku filter" }, - "showUdp": { - "label": "Kuva UDP" + "showCpu": { + "label": "Kuva protsessor" }, - "showEntryPoints": { - "label": "Kuva sisenemispunkte" + "showMemory": { + "label": "Kuva mälu" + }, + "showDisk": { + "label": "Kuva ketas" + }, + "showGpu": { + "label": "Kuva GPU" + }, + "showLoadAvg": { + "label": "Kuva koormuse keskmine" + }, + "showNet": { + "label": "Kuva võrk" + }, + "showTemp": { + "label": "Kuva temperatuur" + }, + "showBattery": { + "label": "Kuva aku" + }, + "showServices": { + "label": "Kuva teenused" + }, + "showUptime": { + "label": "Kuva tööaeg" + }, + "showAgent": { + "label": "Kuva agendi versioon" } }, - "instances": "Traefiku eksemplarid", - "versionUnknown": "Versioon teadmata", - "summary": { - "routers": "Ruuterid", - "entryPoints": "Sisenemispunktid" - }, - "resource": { - "routers": "Ruuterid", - "services": "Teenused", - "middlewares": "Vahevarad" - }, - "status": { - "healthy": "Terve", - "errors": "{count} viga", - "warnings": "{count} hoiatust" - }, - "error": { - "internalServerError": "Traefiku andmete toomine nurjus" + "metric": { + "system": "Süsteem", + "source": "Integratsioon", + "hostname": "Hostinimi", + "cpuModel": "Protsessori mudel", + "cores": "Tuuma", + "memoryTotal": "Mälu kogumaht", + "memory": "Mälu", + "disk": "Ketas", + "loadAvg": "Koormuse keskmine", + "net": "Võrk", + "temp": "Temperatuur", + "battery": "Aku", + "uptime": "Tööaeg", + "agent": "Agent" } }, - "wud": { - "name": "What's Up Docker", - "description": "Näita, mitu jälgitavat konteinerit on uuendusi saadaval.", - "title": "What's Up Docker", - "monitored": "Jälgitud", - "updatesAvailable": "{count, plural, one {# uuendus saadaval} other {# uuendust saadaval}}", - "updateAvailable": "Uuendus saadaval", - "openReleaseNotes": "Ava väljalaskemärkmed", + "llamacpp": { + "name": "llama.cpp", + "description": "Kuva oma kohaliku llama.cpp serveri seisundit, laaditud mudelit ja genereerimiskiirust.", + "title": "llama.cpp", + "status": { + "unhealthy": "Ebatervislik ({status})" + }, + "idle": "Jõude", + "speedTooltip": { + "current": "Praegune genereerimiskiirus", + "average": "Keskmine genereerimiskiirus alates käivitamisest", + "request": "Keskmine kiirus alates selle päringu käivitumisest" + }, + "busy": "{count, plural, one {# töötav päring} other {# töötavat päringut}}", + "modelInfo": { + "context": "Kontekst", + "size": "Faili suurus", + "parameters": "Parameetrid", + "model": "Mudel", + "quantization": "Kvantisatsioon" + }, + "stats": { + "tokensProcessed": "Töödeldud tokenid", + "contextUsage": "Konteksti / KV kasutus", + "cacheHitRate": "Viibemälu tabamuste määr", + "tokensGenerated": "Genereeritud tokenid" + }, + "error": { + "unreachable": "llama-server pole kättesaadav" + }, + "unit": { + "speed": "{value} t/s", + "parameters": "{value}B", + "none": "—", + "speedShort": "t/s" + }, "option": { "showTitle": { - "label": "Näita pealkirja" + "label": "Kuva pealkiri" }, - "showRing": { - "label": "Näita uuenduste rõngast" + "showModelInfo": { + "label": "Kuva mudeli teave" }, - "layout": { - "label": "Paigutus", + "showContextUsage": { + "label": "Kuva konteksti kasutus" + }, + "showCacheHitRate": { + "label": "Kuva viibemälu tabamuste määr" + }, + "showSpeedStats": { + "label": "Kuva kiiruse statistika" + }, + "showRequests": { + "label": "Kuva päringute koormus" + }, + "showTokenStats": { + "label": "Kuva tokenite kogusummad" + }, + "showSpeculative": { + "label": "Kuva spekulatiivne dekodeerimine" + } + }, + "advanced": { + "promptSpeed": "Viiba kiirus", + "avgSpeed": "Keskmine genereerimine", + "requests": "Päringud", + "deferred": "Edasilükatud", + "slots": "{processing}/{total} pesa hõivatud", + "speculative": "Spekulatiivne dekodeerimine", + "avgPrompt": "Keskmine viip", + "specDrafts": "Spekulatiivsed mustandid", + "specAccepted": "Spekulatiivselt aktsepteeritud tokenid", + "specDraftTokens": "Spekulatiivsed mustandtokenid" + } + }, + "stats": { + "name": "Statistika", + "description": "Koonda oma integratsioonide statistika ühte seadistatavasse vidinasse.", + "configure": "Seadista mõõdikud", + "refresh": "Värskenda statistikat", + "empty": "Ava vidina seaded, vali integratsioonid ja lisa mõõdikud.", + "editorHelp": "Lisa sellesse vidinasse valitud integratsioonide mõõdikud. Muudatused salvestatakse koos juhtpaneeliga.", + "source": "Integratsioon", + "metric": "Mõõdik", + "noMetrics": "Selle integratsiooni kohta pole statistikat saadaval", + "add": "Lisa mõõdik", + "label": "Kohandatud silt", + "hidden": "Peidetud", + "compact": "Kompaktsed arvud", + "moveUp": "Liiguta üles", + "moveDown": "Liiguta alla", + "remove": "Eemalda mõõdik", + "loading": "Laadimine…", + "unavailable": "Pole saadaval", + "refreshFailed": "Värskendamine nurjus — kuvatakse salvestatud andmed", + "stale": "Salvestatud andmed — värskendamiseks värskenda", + "table": { + "value": "Väärtus", + "status": "Olek" + }, + "option": { + "table": { + "label": "Tabelivaade" + }, + "rows": { + "label": "Kompaktsed read" + }, + "showIcon": { + "label": "Kuva allika ikoon" + }, + "spacing": { + "label": "Vahed", "option": { - "horizontal": { - "label": "Horisontaalne" + "xs": { + "label": "Kompaktne" }, - "vertical": { - "label": "Vertikaalne" + "sm": { + "label": "Mugav" + }, + "md": { + "label": "Avar" } } }, - "showUpdateList": { - "label": "Näita konteinerite uuenduste loendit", - "description": "Loetleb iga jälgitava konteineri, millel on pildiuuendus saadaval" + "entries": { + "label": "Mõõdikud" + }, + "plain": { + "label": "Eemalda kaartide taustad" } - } + }, + "fetchFailed": "Statistika hankimine nurjus", + "viewOptions": "Kohanda seda vaadet", + "moreMetrics": "{count} mõõdikut veel täpsemas vaates", + "localHelp": "Paigutus, vorming ja nähtavus kehtivad ainult selles vaates. Jagatud tahvli seaded jäävad samaks.", + "plain": "Eemalda kaartide taustad", + "resetView": "Lähtesta vaade", + "allHidden": "Kõik mõõdikud on selles vaates peidetud. Nende taastamiseks vali „Kohanda seda vaadet“." + }, + "wazuh": { + "target": { + "api": "Wazuhi serveri API", + "indexer": "Wazuhi indekseerija", + "wazuh": "Wazuh" + }, + "severity": { + "low": "Madal", + "medium": "Keskmine", + "high": "Kõrge", + "critical": "Kriitiline" + }, + "error": { + "unauthorized": { + "title": "{target} lükkas mandaadid tagasi", + "description": "Kontrolli Wazuhi integratsiooni salvestatud kasutajanime ja parooli. Serveri API (port 55000) ja indekseerija (port 9200) kasutavad eraldi kasutajaid." + }, + "certificate": { + "title": "{target} sertifikaati ei usaldata", + "description": "Wazuh kasutab vaikimisi iseallkirjastatud sertifikaati. Käivita integratsioonis „Testi ühendust“ ja usalda sertifikaati või lisa oma CA jaotises Seaded → Sertifikaadid." + }, + "unreachable": { + "title": "{target} pole kättesaadav", + "description": "Host keeldus ühendusest või katkestas selle. Kontrolli URL-i, porti ja tulemüüri. Vaikimisi kõik-ühes-paigalduse korral kuulab indekseerija ainult localhostil." + }, + "timeout": { + "title": "{target} ühendus aegus", + "description": "15 sekundi jooksul vastust ei saadud. Teenus võib olla ülekoormatud või aadress võib olla vale." + }, + "status": { + "title": "{target} tagastas vea", + "description": "Päring nurjus HTTP-olekuga {status}." + }, + "invalidResponse": { + "title": "Ootamatu vastus sihtkohast {target}", + "description": "Kontrolli, et URL viitaks Wazuhi serveri API-le või indekseerijale, mitte armatuurlauale." + }, + "indexerRequired": { + "title": "Wazuhi indekseerija mandaadid on nõutavad", + "description": "Hoiatused, turvanõrkused ja failide tervikluse sündmused loetakse Wazuhi indekseerijast. Lisa integratsioonile indekseerija URL, kasutajanimi ja parool." + }, + "unknown": { + "title": "Sihtkohast {target} ei saanud andmeid laadida", + "description": "Üksikasjade saamiseks kontrolli Homarri logisid." + } + }, + "range": { + "1h": "1 h", + "24h": "24 h", + "7d": "7 päeva", + "30d": "30 päeva" + }, + "levelTooltip": "Reegli tase {level} ({severity})" + }, + "wazuhAgents": { + "name": "Wazuhi agendid", + "description": "Sorteeritav Wazuhi agentide loend oleku, operatsioonisüsteemi, versiooni ja viimase ühenduse hoidmise ajaga", + "option": { + "statusFilter": { + "label": "Kuva agendid" + }, + "sortBy": { + "label": "Sordi alusel" + }, + "showVersion": { + "label": "Kuva Wazuhi versiooni veerg" + }, + "showGroups": { + "label": "Kuva rühmade veerg" + } + }, + "title": "Agendid", + "total": "{count} agenti", + "status": { + "active": "Aktiivne", + "disconnected": "Ühenduseta", + "neverConnected": "Pole kunagi ühendunud", + "pending": "Ootel" + }, + "statusLabel": { + "active": "Aktiivne", + "disconnected": "Ühenduseta", + "never_connected": "Pole kunagi ühendunud", + "pending": "Ootel", + "unknown": "Teadmata" + }, + "live": "Reaalajas", + "snapshot": "Hetktõmmis on {age} vana", + "snapshotHint": "Loetud Wazuhi töölaua agendi hetktõmmisest (wazuh-monitoring), mis tehti kell {time}. Reaalajas andmete jaoks lisage serveri API mandaadid.", + "staleSnapshot": "Agendi hetktõmmis kellaajast {time} on aegunud. Kontrollige, kas Wazuhi töölaua jälgimistöö töötab, või lisage serveri API mandaadid.", + "noDisconnected": "Kõik agendid on ühendatud", + "empty": "Ükski agent ei vasta sellele filtrile", + "column": { + "status": "Olek", + "name": "Töö nimetus", + "ip": "IP", + "os": "Operatsioonisüsteem", + "version": "Versioon", + "lastKeepAlive": "Ühenduse elushoidmine", + "groups": "Rühmad" + }, + "outdated": "Uusimast agendi versioonist vanem ({version})" + }, + "wazuhAlerts": { + "name": "Wazuhi hoiatuste voog", + "description": "Hiljutised Wazuhi hoiatused taseme, MITRE ATT&CK tehnikate, agendi ja lähte-IP-ga", + "option": { + "minLevel": { + "label": "Minimaalne reegli tase", + "description": "Wazuhi tasemed: 0–6 madal, 7–11 keskmine, 12–14 kõrge, 15+ kriitiline" + }, + "hours": { + "label": "Ajavahemik (tundides)" + }, + "limit": { + "label": "Hoiatuste arv" + }, + "showMitre": { + "label": "Kuva MITRE ATT&CK tehnikad" + }, + "showAgent": { + "label": "Kuva agent" + }, + "showSourceIp": { + "label": "Kuva lähte-IP" + }, + "showRuleId": { + "label": "Kuva reegli ID" + } + }, + "title": "Hoiatused · tase {level}+ · {hours} h", + "empty": "Sellel tasemel hoiatusi pole. Kõik on vaikne.", + "rule": "Reegel {id}", + "openInDashboard": "Ava see hoiatus Wazuhi töölaual" + }, + "wazuhSummary": { + "name": "Wazuhi hoiatuste raskusaste", + "description": "Hoiatuste raskusastme jaotus koos eelmise perioodi trendiga", + "option": { + "range": { + "label": "Ajavahemik" + }, + "showTrend": { + "label": "Kuva trendi võrreldes eelmise perioodiga" + }, + "showFooter": { + "label": "Kuva jalus" + } + }, + "title": "Hoiatuste raskusaste · {range}", + "alerts": "hoiatused", + "none": "Hoiatusi pole", + "trend": { + "new": "uued", + "tooltip": "Eelmine periood: {previous}" + }, + "previous": "Eelmine {range}: {count}", + "maxLevel": "Maksimaalne tase {level}", + "health": "Indekseerija seisund: {status}", + "manager": "Haldur {version}" + }, + "wazuhTimeline": { + "name": "Wazuhi hoiatuste ajajoon", + "description": "Wazuhi hoiatuste raskusastmepõhine virnastatud ajagraafik", + "option": { + "range": { + "label": "Ajavahemik" + }, + "interval": { + "label": "Intervall" + }, + "chartType": { + "label": "Graafiku tüüp" + }, + "yScale": { + "label": "Y-telje skaala", + "description": "Ruutjuur hoiab kõrged ja kriitilised hoiatused nähtavana tuhandete madalate hoiatuste kõrval" + }, + "minLevel": { + "label": "Minimaalne reegli tase" + }, + "showLegend": { + "label": "Kuva legend koos kogusummadega" + } + }, + "title": "Hoiatuste ajajoon · {range}", + "total": "{count} hoiatust", + "interval": "intervalli kohta {interval}" + }, + "wazuhTopList": { + "name": "Wazuhi edetabel", + "description": "Peamised reeglid, agendid, lähte-IP-aadressid või MITRE ATT&CK taktikad ja tehnikad hoiatuste arvu järgi", + "option": { + "kind": { + "label": "Järjestus" + }, + "range": { + "label": "Ajavahemik" + }, + "limit": { + "label": "Kirjete arv" + }, + "minLevel": { + "label": "Reegli minimaalne tase" + }, + "showBars": { + "label": "Kuva ribad" + } + }, + "title": { + "rules": "Peamised reeglid · {range}", + "agents": "Peamised agendid · {range}", + "sourceIps": "Peamised lähte-IP-d · {range}", + "mitreTactics": "MITRE taktikad · {range}", + "mitreTechniques": "MITRE tehnikad · {range}" + }, + "empty": { + "rules": "Sellel perioodil hoiatusi pole", + "agents": "Sellel perioodil hoiatusi pole", + "sourceIps": "Sellel perioodil pole lähte-IP-ga hoiatusi", + "mitreTactics": "Sellel perioodil pole MITRE ATT&CK-iga seotud hoiatusi", + "mitreTechniques": "Sellel perioodil pole MITRE ATT&CK-iga seotud hoiatusi" + }, + "totalTooltip": "{count} sobivat hoiatust", + "private": "LAN", + "public": "Avalik", + "agents": "Nähtud {count} agendil", + "others": "Veel {count} hoiatust teistes kirjete rühmades" + }, + "wazuhVulnerabilities": { + "name": "Wazuhi turvanõrkused", + "description": "Turvanõrkuste arv, peamised CVE-d ja kõige haavatavamad agendid", + "option": { + "cveOrder": { + "label": "Järjesta CVE-d järgmise järgi" + }, + "minSeverity": { + "label": "CVE tõsidus" + }, + "cveLimit": { + "label": "CVE-de arv" + }, + "agentLimit": { + "label": "Agentide arv" + }, + "showAgents": { + "label": "Kuva kõige haavatavamad agendid" + } + }, + "title": "Turvanõrkused", + "topCves": "Peamised CVE-d", + "score": "Skoor", + "agentsShort": "Agendid", + "topAgents": "Kõige haavatavamad agendid", + "criticalHigh": "Kriitiline / kõrge", + "totalTooltip": "{count} leidu {agents} agendil", + "affected": "{count} agenti", + "empty": "Turvanõrkusi ei tuvastatud", + "distribution": "Tõsiduse jaotus. Ilma skoorita {unscored} leidu ei kuvata.", + "worst": "Halvim: {id} ({score}) {agents} agendil" + }, + "wazuhFim": { + "name": "Wazuhi failide terviklus", + "description": "Hiljutised failide tervikluse jälgimise (syscheck) sündmused", + "option": { + "range": { + "label": "Ajavahemik" + }, + "event": { + "label": "Sündmused" + }, + "limit": { + "label": "Sündmuste arv" + }, + "includeRegistry": { + "label": "Kaasa Windowsi registri sündmused" + } + }, + "title": "Failide terviklus · {range}", + "event": { + "added": "Lisamise kuupäev", + "modified": "Muudetud", + "deleted": "Kustutatud", + "unknown": "Muud" + }, + "empty": "Sellel perioodil pole failide tervikluse sündmusi", + "user": "kasutaja {user}", + "registry": "Register" + }, + "wazuhAuthFailures": { + "name": "Wazuhi autentimise nurjumised", + "description": "Nurjunud sisselogimised ja jõuründeh hoiatused agentide kaupa koos tunniste minigraafikutega", + "option": { + "hours": { + "label": "Ajavahemik (tundides)" + }, + "limit": { + "label": "Agentide arv" + }, + "showSourceIps": { + "label": "Kuva peamised lähte-IP-d" + } + }, + "title": "Autentimise nurjumised · {hours} h", + "seriesTooltip": "Kõik agendid viimase {hours} tunni jooksul", + "peak": "Tipp {count}/ämber", + "empty": "Sellel perioodil nurjunud sisselogimisi pole", + "failed": "Nurjunud sisselogimised", + "failedHint": "Üksikud autentimise nurjumised (sshd, PAM, Windowsi sisselogimine, sobimatud kasutajad)", + "bruteForce": "Jõurünne", + "bruteForceHint": "Seotud jõuründereeglid (lühikese aja jooksul mitu nurjumist, MITRE T1110)", + "sourceIps": "Lähte-IP-d", + "ipTooltip": "{ip}: {count} nurjumist", + "bruteForceCount": "{count} jõurünnakut" } }, "widgetPreview": { @@ -4004,7 +5732,76 @@ } }, "board": { + "emptyState": { + "title": "Koosta oma esimene vaade", + "description": "Lisa vidin või rakendus või ühenda teenus ja kasuta selle andmeid sellel tahvlil.", + "addWidget": "Lisa vidin", + "addApp": "Lisa rakendus", + "connectService": "Ühenda teenus" + }, + "setupChecklist": { + "title": "Muuda see tahvel kasulikuks", + "description": "Jätka sealt, kus pooleli jäid. Edenemine põhineb sellel, mis tahvlil juba olemas on.", + "collapse": "Ahenda seadistusloend", + "dismiss": "", + "resume": "Jätka seadistamist ({completed}/{total})", + "progress": "Tahvli seadistamise edenemine", + "step": { + "content": { + "label": "Lisa kasulikku sisu", + "description": "Valige vidin ja seadistage see enne paigutamist." + }, + "app": { + "label": "Kinnita rakendus", + "description": "Hoidke teenus või tööriist sellelt paneelilt ühe klõpsu kaugusel." + }, + "service": { + "label": "Ühenda teenus", + "description": "Avage ühilduvate vidinate reaalajas andmed ja toimingud.", + "permissionDescription": "Administraator saab teenuse ühendada, et avada reaalajas andmed.", + "action": "Ühenda" + } + } + }, "action": { + "addContent": "Lisa paneelile sisu", + "settings": "Paneeli seaded", + "switch": "Vaheta paneeli", + "switcher": { + "title": "Vaheta paneeli", + "search": { + "empty": "Ükski paneel ei vasta otsingule „{search}“." + }, + "results": "Saadaolevad paneelid", + "preview": "{name} eelvaade, {count} üksust", + "currentHidden": "Praegune paneel: {name}", + "keyboard": { + "navigate": "Liigu", + "open": "Ava", + "instructions": "Paneelide filtreerimiseks alustage tippimist. Tulemuste vahel liikumiseks kasutage nooleklahve ja paneeli avamiseks vajutage sisestusklahvi." + }, + "empty": { + "title": "Teisi paneele pole", + "description": "Teil pole juurdepääsu ühelegi teisele paneelile." + }, + "error": "Paneele ei saanud laadida." + }, + "create": { + "availability": { + "checking": "Saadavuse kontrollimine…", + "available": "{name} on saadaval" + }, + "notification": { + "success": { + "title": "Paneel on loodud", + "message": "Paneel {name} on loodud" + }, + "error": { + "title": "Paneeli loomine nurjus", + "message": "Paneeli {name} ei saanud luua" + } + } + }, "duplicate": { "title": "Tee paneelist koopia", "message": "See teeb paneelist {name} ja kogu selle sisust koopia. Kui vidinad viitavad integratsioonidele, mille kasutamiseks sul puudub õigus, eemaldatakse need.", @@ -4020,14 +5817,19 @@ } }, "edit": { + "enter": "Muuda paneeli", + "save": "Salvesta paneel", + "exit": "Välju redigeerimisrežiimist", "notification": { "success": { - "title": "Muudatused rakendati edukalt", "message": "Paneel salvestati edukalt" }, "error": { - "title": "Muudatusi ei saa rakendada", "message": "Paneeli ei saanud salvestada" + }, + "loadError": { + "title": "Redigeerimist ei saanud alustada", + "message": "Paneeliredaktorit ei saanud laadida. Teie juhtpaneel on vaaterežiimis endiselt saadaval." } }, "confirmLeave": { @@ -4035,62 +5837,6 @@ "message": "Teil on salvestamata muudatusi, kas olete kindel, et soovite lahkuda?" } }, - "oldImport": { - "label": "Impordi Homarr'ist enne 1.0.0", - "notification": { - "success": { - "title": "Importimine õnnestus", - "message": "Paneel imporditi edukalt" - }, - "error": { - "title": "Importimine ebaõnnestus", - "message": "Paneeli ei saanud importida, vaata täpsema teabe saamiseks logisid" - } - }, - "form": { - "file": { - "label": "Vali JSON fail", - "invalidError": "Vigane seadistusfail" - }, - "apps": { - "label": "Rakendused", - "avoidDuplicates": { - "label": "Väldi duplikaate", - "description": "Ignoreerib rakendusi, kui sama href'iga rakendus on juba olemas" - }, - "onlyImportApps": { - "label": "Impordi ainult rakendusi", - "description": "Lisab ainult rakendused, paneel tuleb käsitsi uuesti luua" - } - }, - "name": { - "label": "Paneeli nimi" - }, - "screenSize": { - "label": "Ekraani suurus", - "description": "Versioonides enne 1.0 oli kolm eri režiimi, mis võimaldasid valida iga ekraanisuuruse jaoks veergude arvu.", - "option": { - "sm": "Väike", - "md": "Keskmine", - "lg": "Suur" - } - }, - "sidebarBehavior": { - "label": "Külgriba käitumine", - "description": "Külgribad eemaldati versioonis 1.0, saate valida, mis peaks juhtuma neis olevate üksustega.", - "option": { - "lastSection": { - "label": "Viimane jaotis", - "description": "Külgriba kuvatakse viimase jaotise all" - }, - "removeItems": { - "label": "Eemalda üksused", - "description": "Külgribal olevad üksused eemaldatakse" - } - } - } - } - }, "quickCreateApp": { "modal": { "title": "Loo rakendus käigu pealt", @@ -4098,6 +5844,12 @@ } } }, + "landmark": { + "canvas": "Juhtpaneeli lõuend", + "leftRail": "Juhtpaneeli vasak külgriba", + "rightRail": "Juhtpaneeli parem külgriba", + "items": "Juhtpaneeli üksused" + }, "field": { "pageTitle": { "label": "Lehe pealkiri" @@ -4167,7 +5919,8 @@ } }, "primaryColor": { - "label": "Peamine värv" + "label": "Peamine värv", + "locked": "Administraator määrab eksemplari brändivärvi kõigil paneelidel." }, "secondaryColor": { "label": "Teisene värv" @@ -4207,9 +5960,6 @@ "xl": "Väga suur" } }, - "name": { - "label": "Nimi" - }, "isPublic": { "label": "Avalik", "description": "Avalikud paneelid on kõigile juurdepääsetavad, isegi ilma kontota." @@ -4229,9 +5979,44 @@ "title": "Paigutus", "responsive": { "title": "Kohanduvad paigutused", + "description": "Iga paigutus säilitab oma vidinate asukohad ja suurused. Mobiili- ja baaspaigutus on alati saadaval; kohandatud paigutusi saab lisada mis tahes täiendava murdepunkti jaoks.", "action": { "add": "Lisa paigutus" } + }, + "role": { + "mobile": "Mobiilne", + "base": "Baas", + "custom": "Kohandatud" + }, + "custom": { + "defaultName": "Kohandatud paigutus" + }, + "mobile": { + "breakpointDescription": "Mobiilipaigutust kasutatakse alati alates 0 pikslist kuni järgmise paigutuse murdepunktini." + }, + "preview": { + "columns": "veergu", + "empty": "See paigutus on tühi", + "dynamicSection": "Dünaamiline jaotis", + "editorWidthLabel": "{layoutName} · {width}px" + }, + "reset": { + "action": "Lähtesta baasi järgi", + "confirm": { + "title": "Kas lähtestada {layoutName}?", + "message": "See asendab kõik selle paigutuse salvestatud asukohad ja suurused baaspaigutuse põhjal loodud uue paigutusega. Seda ei saa tagasi võtta." + } + }, + "edit": { + "action": "Muuda paigutust", + "saveAndEdit": "Salvesta ja muuda", + "save": "Salvesta paigutus", + "cancel": { + "action": "Tühista paigutuse muutmine", + "title": "Kas loobuda paigutuse muudatustest?", + "message": "Selle paigutuse salvestamata muudatused hüljatakse." + } } }, "background": { @@ -4268,10 +6053,7 @@ "rename": { "label": "Nimeta paneel ümber", "description": "Nime muutmine lõhub kõik selle paneeli lingid.", - "button": "Muuda nime", - "modal": { - "title": "Nimeta paneel ümber" - } + "button": "Muuda nime" }, "visibility": { "label": "Muuda paneeli nähtavust", @@ -4295,9 +6077,7 @@ } }, "delete": { - "label": "Kustuta see paneel", "description": "Kui paneel on kustutatud, ei saa seda enam taastada. Palun ole täiesti kindel.", - "button": "Kustuta see paneel", "confirm": { "title": "Kustuta paneel", "description": "​Kas soovid kindlasti selle paneeli kustutada? See kustutab jäädavalt paneeli ja kogu selle sisu." @@ -4342,28 +6122,41 @@ }, "layout": { "field": { - "name": { - "label": "Nimi" - }, "columnCount": { "label": "Veergude arv" }, "breakpoint": { "label": "Murdepunkt", "description": "Paigutust kasutatakse kõigil ekraanidel, mis on sellest murdepunktist suuremad, kuni järgmise suurema murdepunktini." + }, + "gutters": { + "label": "Fikseeritud külgribad", + "description": "Reserveerige mõlemale küljele kuni kolm juhtpaneeli veergu. Ülejäänud lõuend kohandub automaatselt.", + "left": { + "label": "Vasak külgriba", + "description": "Hoidke see ala juhtpaneeli kerimise ajal nähtavana.", + "thumbLabel": "Vasaku külgriba laius" + }, + "right": { + "label": "Parem külgriba", + "description": "Hoidke see ala juhtpaneeli kerimise ajal nähtavana.", + "thumbLabel": "Parema külgriba laius" + }, + "width": { + "label": "Laius veergudes" + }, + "preview": { + "label": "Juhtpaneeli paigutuse eelvaade" + } } } }, "management": { "metaTitle": "Haldus", - "title": { - "morning": "Tere hommikust, {username}", - "afternoon": "Tere päevast, {username}", - "evening": "Tere õhtust, {username}" - }, "notFound": { "title": "Ei leitud", - "text": "Taotletud ressurssi ei leitud" + "text": "Taotletud ressurssi ei leitud", + "backToHome": "Tagasi halduse avalehele" }, "error": { "title": "Seda lehte ei saanud laadida", @@ -4372,19 +6165,10 @@ }, "navbar": { "items": { - "workshop": "Workshop", "home": "Kodu", - "boards": "Paneelid", - "apps": "Rakendused", - "integrations": "Integratsioonid", - "searchEngies": "Otsingumootorid", - "medias": "Meedia", "users": { - "label": "Kasutajad", "items": { - "manage": "Halda", - "invites": "Kutsed", - "groups": "Rühmad" + "manage": "Halda" } }, "tools": { @@ -4392,10 +6176,7 @@ "items": { "docker": "Docker", "kubernetes": "Kubernetes", - "logs": "Logid", "api": "API ja MCP", - "certificates": "Sertifikaadid", - "tasks": "Ülesanded", "backup": "Varundus" } }, @@ -4409,21 +6190,12 @@ "sourceCode": "Lähtekood" } }, - "about": "Teave" + "about": "Teave", + "assistant": "Assistent" } }, "page": { "home": { - "statistic": { - "board": "Paneelid", - "user": "Kasutajad", - "invite": "Kutsed", - "integration": "Integratsioonid", - "app": "Äpid", - "group": "Rühmad", - "searchEngine": "Otsingumootorid", - "media": "Meedia" - }, "statisticLabel": { "boards": "Paneelid", "resources": "Ressursid", @@ -4461,13 +6233,8 @@ "tooltip": "Seda paneeli kuvatakse sinu mobiilipaneelina" } }, - "duplicate": { - "label": "Tee paneelist koopia" - }, "delete": { - "label": "Kustuta jäädavalt", "confirm": { - "title": "Kustuta paneel", "description": "Kas oled kindel, et soovid paneeli {name} kustutada?" } } @@ -4476,28 +6243,82 @@ "public": "See paneel on avalik", "private": "See paneel on privaatne" }, - "noResults": { - "title": "Paneele pole veel" + "preview": { + "label": "{name} paigutuse eelvaade, {count} üksust", + "unknownCreator": "Tundmatu looja" }, - "modal": { - "createBoard": { - "field": { - "name": { - "label": "Nimi" - } - } - } + "noResults": { + "title": "Paneele pole veel", + "description": "Looge paneel, et paigutada rakendused ja vidinad ühte kohta." } }, "media": { "includeFromAllUsers": "Kaasa kõigi kasutajate meedia" }, "user": { - "back": "Kasutajatele tagasi", "fieldsDisabledExternalProvider": "Mõned väljad on keelatud, sest neid haldab väline autentimisteenuse pakkuja.", "setting": { "general": { "title": "Üldine", + "header": { + "title": "Päise kujundus", + "badge": "Isiklik", + "description": "Lohistage juhte reas suvalisse kohta. Vasak, keskosa ja parem pool jäävad fikseerituks, samal ajal kui juhte nende ümber liigutatakse.", + "device": { + "desktop": "Töölaud", + "mobile": "Mobiilne" + }, + "zones": { + "left": "Vasak", + "center": "Keskosa", + "right": "Parem" + }, + "action": { + "hide": "Peida päis", + "show": "Kuva päis", + "configure": "Liiguta või seadista {item}", + "remove": "Eemalda {item}", + "dropIntoZone": "Liiguta jaotisse „{zone}“" + }, + "preview": { + "board": "Paneeli {name} eelvaade", + "empty": "Juhtpaneeli paigutus pole saadaval" + }, + "available": { + "title": "Saadaolevad juhtelemendid", + "description": "Lisage juhtelement ja lohistage selle täielik nupp ülal soovitud kohta.", + "requiredAlways": "See juhtelement on nõutav, kuid saate selle päises suvalisse kohta liigutada.", + "allAdded": "Kõik sisseehitatud juhtelemendid on juba teie päises.", + "add": "Lisa {item}", + "boardShortcut": "Paneeli otsetee", + "chooseBoard": "Vali paneel" + }, + "configuration": { + "description": "See juhtelement jääb sama suureks nagu aktiivses päises.", + "searchDisplay": { + "input": "Otsinguriba", + "icon": "Ainult ikoon" + }, + "logoDisplay": { + "logo": "Ainult logo", + "logoAndText": "Logo + tekst" + } + }, + "items": { + "logo": "Logotüüp", + "search": "Otsing", + "home": "Kodupaneel", + "boardSwitcher": "Paneelid", + "assistant": "Assistent", + "docker": "Docker", + "boardEdit": "Muuda paneeli", + "boardSettings": "Paneeli seaded", + "settings": "Sinu seaded", + "themeToggle": "Vaheta teemat", + "user": "Konto", + "boardUnavailable": "Paneel pole saadaval" + } + }, "item": { "language": "Keel ja piirkond", "board": { @@ -4531,14 +6352,10 @@ }, "security": { "title": "Turvalisus" - }, - "board": { - "title": "Paneelid" } }, "list": { - "metaTitle": "Halda kasutajaid", - "title": "Kasutajad" + "metaTitle": "Halda kasutajaid" }, "edit": { "metaTitle": "Muuda kasutajat {username}" @@ -4592,9 +6409,6 @@ } }, "field": { - "id": { - "label": "ID" - }, "creator": { "label": "Looja" }, @@ -4618,10 +6432,7 @@ }, "setting": { "title": "Seaded", - "alert": "Grupi seaded seatakse tähtsuse järjekorda vastavalt gruppide järjestusele loendis. Ülalasuvad seaded tühistavad allpool asuvad.", - "board": { - "title": "Paneelid" - } + "alert": "Grupi seaded seatakse tähtsuse järjekorda vastavalt gruppide järjestusele loendis. Ülalasuvad seaded tühistavad allpool asuvad." }, "members": { "title": "Liikmed", @@ -4629,10 +6440,7 @@ "notFound": "Liikmeid ei leitud" }, "permissions": { - "title": "Õigused", - "form": { - "unsavedChanges": "Sul on salvestamata muudatusi!" - } + "title": "Õigused" } } }, @@ -4641,12 +6449,10 @@ "notification": { "success": { "message": "Seaded edukalt salvestatud" - }, - "error": { - "message": "Seadete salvestamine nurjus" } }, "section": { + "analyticsDocumentation": "Vaadake täpselt, milliseid analüüsiandmeid Homarr kogub", "analytics": { "title": "Analüütika", "general": { @@ -4675,7 +6481,6 @@ } }, "board": { - "title": "Paneelid", "homeBoard": { "label": "Üldine kodupaneel", "mobileLabel": "Üldine mobiilipaneel", @@ -4694,7 +6499,6 @@ } }, "user": { - "title": "Kasutajad", "enableGravatar": { "label": "Luba Gravatar", "description": "Kui kohandatud avatari pole määratud ja e-posti aadress on seadistatud, kasutatakse varuvariandina Libravatari/Gravatari profiilipilti" @@ -4710,12 +6514,86 @@ "appearance": { "title": "Välimus", "defaultColorScheme": { - "label": "Vaikimisi värviskeem", + "label": "Vaikimisi värviskeem" + } + }, + "branding": { + "title": "Eksemplari bränding", + "groups": { + "identity": "Identiteet", + "appearance": "Välimus", + "customCss": "Kohandatud CSS", + "authentication": "Autentimine" + }, + "identity": { + "description": "Rakenduse logo on suurem tähis, mida kasutatakse rakenduses, sisselogimislehtedel ja installitud rakenduste puhul. Brauseriikoon (favicon) on vahekaartidel ja järjehoidjates kasutatav väike ruut; tühjana kasutatakse selle asemel rakenduse logo." + }, + "appName": { + "label": "Rakenduse nimi" + }, + "greeting": { + "label": "Kohandatud tervitus" + }, + "logo": { + "label": "Rakenduse logo", + "placeholder": "/logo/logo.png" + }, + "favicon": { + "label": "Brauseriikoon (favicon)", + "placeholder": "Kasutab rakenduse logo" + }, + "primaryColor": { + "label": "Põhivärv" + }, + "secondaryColor": { + "label": "Teisene aktsentvärv" + }, + "lockPrimaryColor": { + "label": "Kasuta seda värvi kõigil paneelidel", + "description": "Takistab paneelivärvidega rakenduse aktsentvärvi asendamist." + }, + "signInBackground": { + "label": "Autentimise taust", + "placeholder": "https://example.com/background.jpg" + }, + "signInOverlay": { + "label": "Tausta ülekate" + }, + "defaultRadius": { + "label": "Nurga stiil", "options": { - "auto": "Automaatne", - "light": "Hele", - "dark": "Tume" + "xs": "Tihe", + "sm": "Tagasihoidlik", + "md": "Tasakaalus", + "lg": "Ümar", + "xl": "Pehme" } + }, + "customCss": { + "label": "Globaalne kohandatud CSS", + "description": "Rakendatakse igal lehel. Paneeli kohandatud CSS võib selle alistada." + }, + "authVisibility": { + "description": "Valige, mis kuvatakse igal autentimislehel.", + "appName": "Rakenduse nimi", + "logo": "Rakenduse logo", + "greeting": "Tervitus" + }, + "summary": { + "title": "Praegune bränding", + "cornerStyle": "Nurga stiil", + "palette": "Värvipalett", + "backgroundConfigured": "Kohandatud taust · {overlay}% ülekate", + "backgroundDefault": "Vaiketaust", + "greetingConfigured": "Kohandatud tervitus", + "greetingDefault": "Vaiketervitus", + "boardColorLocked": "Paneeli värv lukustatud", + "boardColorFlexible": "Paneelivärvid lubatud", + "appName": "Töö nimetus", + "logo": "Logotüüp", + "greeting": "Tervitus", + "on": "Sees", + "off": "Väljas" } }, "culture": { @@ -4723,12 +6601,177 @@ "defaultLocale": { "label": "Vaikimisi keel" } + }, + "assistant": { + "loading": "Assistendi seadistuse laadimine", + "title": "Assistent", + "description": "Ühendage eksemplariülene assistent OpenAI-ga ühilduva mudeli lõpp-punktiga.", + "security": { + "description": "API-võtmed ja päiste täiendavad väärtused krüpteeritakse Homarri andmebaasis. Neid ei saadeta kunagi brauseritesse tagasi. Mudelipäringud saadetakse Homarri serverist otse seadistatud lõpp-punkti." + }, + "overview": { + "connectionReady": "Ühendus on valmis", + "unsavedChanges": "Salvestamata muudatused", + "setupRequired": "Seadistamine on vajalik", + "disabled": "Keelatud", + "noModel": "Mudelit pole valitud" + }, + "connection": { + "endpointTitle": "Teenusepakkuja ja lõpp-punkt", + "description": "Valige eelseadistus või ühendage mis tahes OpenAI Chat Completionsi API-d rakendav teenus.", + "save": "Salvesta teenusepakkuja ühendus" + }, + "credentials": { + "title": "Mandaadid", + "description": "Lisage selle lõpp-punkti vajalikud saladused. Salvestatud väärtused jäävad krüpteerituks ja neid ei saa tagasi lugeda.", + "required": "Võti on nõutav", + "optional": "Võti on valikuline", + "workshop": "Kasutajapõhine GitHubi sisselogimine" + }, + "provider": { + "title": "Teenusepakkuja", + "groups": { + "free": "Homarriga tasuta", + "hosted": "Majutatud teenusepakkujad", + "local": "Kohalikud teenusepakkujad", + "custom": "Kohandatud" + }, + "options": { + "homarr": { + "description": "Iga päev on piiratud arv assistendi kasutuskordi tasuta ja nende eest tasub Homarri meeskond. Kvoodi kasutamiseks logige sisse Community Workshopi kaudu." + }, + "openrouter": { + "description": "Majutatud mudelite suunamine suure tööriistu toetavate mudelite kataloogiga." + }, + "openai": { + "description": "OpenAI Chat Completions ametliku API lõpp-punkti kaudu." + }, + "anthropic": { + "description": "Claude Anthropic OpenAI SDK-ga ühilduva lõpp-punkti kaudu." + }, + "google-gemini": { + "description": "Gemini Google'i OpenAI-ga ühilduva API lõpp-punkti kaudu." + }, + "xai": { + "description": "Grok-mudelid xAI OpenAI-ga ühilduva API kaudu." + }, + "groq": { + "description": "Kiire majutatud järeldamine Groqi OpenAI-ga ühilduva API kaudu." + }, + "mistral": { + "description": "Mistrali mudelid ametliku API kaudu." + }, + "deepseek": { + "description": "DeepSeeki mudelid selle OpenAI-ga ühilduva API kaudu." + }, + "together": { + "description": "Majutatud avatud mudelid Togetheri OpenAI-ga ühilduva API kaudu." + }, + "ollama": { + "description": "Kohalik või võrgus asuv Ollama server, mis kasutab OpenAI-ga ühilduvat API-t." + }, + "lm-studio": { + "description": "Kohalik LM Studio server, milles on OpenAI-ühilduvus lubatud." + }, + "llama-cpp": { + "description": "Kohalik või võrgus asuv llama.cpp server, mis kasutab OpenAI-ga ühilduvat API-t." + }, + "custom": { + "label": "Kohandatud lõpp-punkt", + "description": "Mis tahes muu OpenAI Chat Completionsiga ühilduv lõpp-punkt." + } + }, + "homarrAuth": { + "title": "Igapäevased tasuta assistendi kasutuskorrad on kaasatud", + "description": "API-võtit pole vaja. Homarri meeskond katab teie eest iga päev piiratud arvu assistendi kasutuskordi. Oma kvoodi eraldi hoidmiseks logige sisse Community Workshopi kaudu." + } + }, + "baseUrl": { + "title": "API baas-URL", + "description": "Lisage API eesliide, tavaliselt /v1. Konteinerites viitab localhost Homarri konteinerile." + }, + "apiKey": { + "title": "API-võti", + "required": "Selle teenusepakkuja nõue. Väärtus on krüpteeritud ja ainult kirjutatav.", + "optional": "Kohalike lõpp-punktide puhul valikuline. Jätke tühjaks, kui teenus ei nõua kandja autentimist.", + "placeholder": "Sisestage API-võti", + "savedTitle": "Krüpteeritud API-võti on salvestatud", + "savedDescription": "Homarr saab seda võtit kasutada, kuid ei saa selle väärtust kuvada ega taastada.", + "remove": "Eemalda salvestatud API-võti", + "removeFlow": { + "title": "Kas eemaldada salvestatud API-võti?", + "description": "See teenusepakkuja nõuab API-võtit. Selle eemaldamine võib peatada mudelite leidmise ja assistendi vastused, kuni salvestatakse uus võti.", + "optionalDescription": "Pärast selle võtme eemaldamist ei saada lõpp-punkt enam kandja autentimist. Veenduge, et see aktsepteerib autentimata päringuid või kasutab muud salvestatud päist.", + "cancel": "Säilita salvestatud võti", + "confirm": "Eemalda API-võti" + } + }, + "headers": { + "title": "Täiendavad päringu päised", + "description": "Valikulised autentimis- või marsruutimispäised. Päiste väärtused on krüpteeritud ja ainult kirjutatavad.", + "add": "Lisa päis", + "name": "Päise nimi", + "value": "Päise väärtus", + "valuePlaceholder": "Salajane või marsruutimise väärtus", + "remove": "Eemalda päis", + "configured": "Täiendavad krüpteeritud päised on seadistatud. Päiste lisamine asendab kogu salvestatud komplekti.", + "empty": "Selle teenusepakkuja jaoks pole täiendavaid päiseid salvestatud.", + "savedBadge": "Päised salvestatud", + "pendingRemoval": "Eemaldamine ootel", + "clear": "Eemalda salvestatud päised salvestamisel", + "keep": "Säilita salvestatud päised" + }, + "model": { + "title": "Mudel", + "description": "Valige leitud mudel või sisestage lõpp-punkti täpne mudeli ID.", + "placeholder": "Mudeli ID", + "refresh": "Värskenda mudeleid", + "chooseModel": "Valige uute vestluste jaoks kasutatav mudel.", + "discoveryPath": "Mudelite leidmise tee", + "discoveryPathDescription": "Lisatakse API baas-URL-ile. Leidmise keelamiseks ja käsitsi mudeli ID kasutamiseks jätke tühjaks.", + "manual": "Sisestage mudeli ID käsitsi või salvestage ühendus mudelite leidmiseks.", + "manualFallback": "Mudeleid ei saa automaatselt leida. Mudeli ID saate siiski käsitsi sisestada.", + "saveConnectionFirst": "Enne mudeli valimist salvestage teenusepakkuja ühendus.", + "discovering": "Selle teenusepakkuja saadaolevate mudelite värskendamine…", + "discovered": "{count, plural, one {Leiti # mudel. Tööriistade tugi sõltub valitud lõpp-punktist ja mudelist.} other {Leiti # mudelit. Tööriistade tugi sõltub valitud lõpp-punktist ja mudelist.}}", + "discoveryFailed": "Mudelite leidmine ei lõpetanud edukalt", + "context": "{count} kontekstiaken", + "toolsConfirmed": "Reklaamitud tööriistad", + "toolsUnknown": "Kontrolli tööriistade tuge" + }, + "serverTools": { + "title": "Serveri tööriistad", + "webSearch": { + "label": "Veebiotsing", + "description": "Luba mudelil OpenRouteri kaudu aktiivsest veebist otsida, kui päring vajab värsket teavet. Otsingu eest võtab OpenRouter eraldi tasu.", + "proxyDescription": "Saada OpenRouteri veebiotsingu serveritööriist sellele lõpp-punktile. Lubage see ainult siis, kui kohandatud lõpp-punkt edastab OpenRouteri serveritööriistade vormingu, näiteks Homarri ruuteri puhverserveri kaudu.", + "limit": "Mudel otsustab, millal otsida; iga päringu kohta on lubatud kuni 3 otsingut ja 5 tulemust otsingu kohta." + } + }, + "enabled": { + "label": "Luba assistent", + "description": "Kuvab assistendi kõigile sisseloginud kasutajatele. Olemasolevad Homarri õigused kehtivad endiselt igale sisemise tööriista kutsele." + }, + "save": "Salvesta assistent", + "notification": { + "connectionSaved": { + "title": "Teenusepakkuja ühendus salvestatud", + "message": "Lõpp-punkt ja krüpteeritud mandaadid on mudeli valimiseks valmis.", + "credentialsCleared": "Lõpp-punkt muutus, seega eelmised mandaadid kustutati. Vajaduse korral lisage uue sihtkoha mandaadid." + }, + "saved": { + "title": "Assistendi seaded salvestatud", + "message": "Uus mudel ja saadavuse seaded on aktiivsed." + }, + "error": { + "title": "Assistendi seadeid ei saanud salvestada" + } + } } } }, "tool": { "tasks": { - "title": "Ülesanded", "status": { "idle": "Jõude", "running": "Töötab", @@ -4746,6 +6789,11 @@ "label": "Pingid" } }, + "action": { + "run": "Käivita {name} nüüd", + "enable": "Luba {name}", + "disable": "Keela {name}" + }, "interval": { "seconds": "", "minutes": "", @@ -4761,13 +6809,7 @@ } } }, - "settings": { - "title": "Ülesande \"{jobName}\" seaded" - }, "field": { - "name": { - "label": "Nimi" - }, "interval": { "label": "Graafiku intervall" }, @@ -4781,11 +6823,6 @@ "table": { "search": "Otsi {count} ülesannet..." }, - "action": { - "refresh": { - "label": "Värskenda" - } - }, "refresh": { "success": { "message": "Ülesanded värskendati edukalt" @@ -4819,7 +6856,6 @@ } }, "api": { - "title": "API", "modal": { "createApiToken": { "title": "API-luba loodud", @@ -4845,7 +6881,6 @@ }, "table": { "header": { - "id": "ID", "createdBy": "Looja", "actions": "Toimingud" } @@ -4901,43 +6936,12 @@ "availableTools": { "title": "Saadaolevad tööriistad", "description": "Saadaval on {count} tööriista. Üksikute tööriistade ja nende kirjelduste nägemiseks ava kategooria.", - "columnType": "Tüüp", - "columnName": "Tööriist", - "columnDescription": "Kirjeldus" - }, - "troubleshooting": { - "title": "Tõrkeotsing", - "missingHeader": { - "title": "„ApiKey päis puudub“", - "description": "Sinu klient ei saada päist {header}. Kontrolli, et MCP-seadistuse jaotis {section} oleks õige. Mõni klient vajab seadistuse muutmise järel taaskäivitamist." - }, - "invalidFormat": { - "title": "„Vigane ApiKey vorming“", - "description": "Veendu, et kopeerisid kogu API-võtme, mitte ainult osa sellest." - }, - "invalidKey": { - "title": "„Vigane API-võti“", - "description": "Võtme ID-d ei leitud või märk on vale. API-võtmeid saab pärast loomist vaadata ainult ühe korra. Kui kaotasid võtme, kustuta vana ja loo uus." - }, - "connectionRefused": { - "title": "Ühendusest keelduti / ajalõpp", - "description": "Veendu, et URL oleks sinu tehisintellekti kliendist kättesaadav. Kui Homarr töötab pöördproksi taga või Dockeris, kasuta välist URL-i (mitte {localhost}). Kontrolli, et port oleks õige (Dockeri vaikeport: 7575)." - }, - "toolsNotAppearing": { - "title": "Tööriistu ei kuvata", - "description": "Mõni tööriist vajab kindlate integratsioonide seadistamist (nt Docker, Overseerr). Tööriistade loend sõltub sinu Homarri eksemplaris saadaolevast." + "filteredDescription": "{count} sobivat tööriista laiendatud kategooriates.", + "search": "Otsi tööriistu", + "noResults": { + "title": "Ükski tööriist ei vasta sellele otsingule", + "description": "Ükski MCP tööriist ei vasta otsingule „{search}“. Proovige nimeruumi, tööriista nime või kirjeldust." } - }, - "copy": "Kopeeri", - "oneClick": { - "title": "Installi ühe klõpsuga", - "subtitle": "Kasutab OAuthi — autentimine toimub esmakordsel kasutamisel brauseris", - "vsCode": "Installi VS Code'i", - "cursor": "Installi Cursori", - "copyUrl": "Kopeeri MCP URL", - "copied": "Kopeeritud!", - "copyHint": "ChatGPT-le, Claude Code'ile või mis tahes MCP-kliendile", - "manualConfig": "Käsitsi seadistamine" } } } @@ -4954,47 +6958,12 @@ "title": "Tundlike andmete eksport", "warningTitle": "See eksport sisaldab kogu sinu andmebaasi.", "warningBody": "Varukoopia sisaldab kõiki kasutajaid, integratsioonisaladusi (krüpteeritud), API-võtmeid, paneelide konfigureerimisi ja rakenduste andmeid. Hoia eksporditud faili turvaliselt ega jaga seda teistega.", - "typePrompt": "Jätkamiseks sisesta „{phrase}“", - "submit": "Ekspordi andmebaas", - "cancel": "Tühista" + "submit": "Ekspordi andmebaas" } }, "import": { "title": "Taasta andmebaas", - "description": "Laadi varem eksporditud ZIP-varukoopia üles, et andmebaas taastada. See asendab kogu sinu andmebaasi. Kui varukoopia loodi muu krüpteerimisvõtmega, krüpteeritakse saladused automaatselt uuesti.", - "warning": "Varukoopia taastamine asendab täielikult praeguse andmebaasi ja taaskäivitab rakenduse. Seda toimingut ei saa tagasi võtta.", - "dropzone": { - "title": "Lohista ZIP-varukoopia siia või klõpsa sirvimiseks", - "description": "Aktsepteeritakse ainult Homarr SQLite'i varukoopia .zip-faile" - }, - "changeFile": "Muuda faili", - "button": "Taasta andmebaas", - "success": { - "title": "Taastamine lõpetatud", - "message": "Andmebaas on edukalt taastatud. Rakendus taaskäivitub..." - }, - "error": "Import nurjus" - }, - "preview": { - "title": "Varukoopia sisu", - "exported": "Eksporditud {date}", - "loading": "Varukoopiafaili analüüsimine...", - "errorTitle": "Eelvaate viga", - "entity": "Olem", - "count": "Arv", - "boards": "Paneelid", - "entities": { - "board": "Paneelid", - "user": "Kasutajad", - "app": "Rakendused", - "integration": "Integratsioonid", - "item": "Vidinad", - "media": "Meedium", - "search_engine": "Otsingumootorid" - }, - "analyzeError": "Varukoopiafaili analüüsimine nurjus", - "invalidMissingMetadata": "Vigane varukoopia: metadata.json puudub", - "invalidMissingDb": "Vigane varukoopia: db.sqlite puudub" + "description": "Laadi varem eksporditud ZIP-varukoopia üles, et andmebaas taastada. See asendab kogu sinu andmebaasi. Kui varukoopia loodi muu krüpteerimisvõtmega, krüpteeritakse saladused automaatselt uuesti." }, "restore": { "dropzone": { @@ -5004,29 +6973,20 @@ "analyzing": "Varukoopia analüüsimine...", "changeFile": "Muuda faili", "continueToRestore": "Jätka taastamisega", - "tryAgain": "Proovi uuesti", "analysisError": "Analüüsi viga", "preview": { "title": "Varukoopia sisu", "exported": "Eksporditud {date}", "entity": "Olem", "count": "Arv", - "boards": "Paneelid", "entities": { - "board": "Paneelid", - "user": "Kasutajad", - "app": "Rakendused", - "integration": "Integratsioonid", - "item": "Vidinad", - "media": "Meedium", - "search_engine": "Otsingumootorid" + "item": "Vidinad" }, "migrationsApplied": "Rakendati {count} migratsioon", "migrationsAppliedPlural": "Rakendati {count} migratsiooni", "migrationsOlderVersion": "See varukoopia pärines vanemast Homarri versioonist. Selle ajakohastamiseks rakendati {count} skeemimigratsioon.", "migrationsOlderVersionPlural": "See varukoopia pärines vanemast Homarri versioonist. Selle ajakohastamiseks rakendati {count} skeemimigratsiooni.", "migrationsUpToDate": "Andmebaasi skeem on ajakohane (rakendati {count} migratsiooni)", - "upToDate": "Ajakohane", "migrationsPending": "{count} ootel" }, "migration": { @@ -5037,21 +6997,21 @@ "title": "Hävitav toiming", "warningTitle": "See asendab jäädavalt kogu sinu andmebaasi.", "warningBody": "Kõik praegused paneelid, kasutajad, rakendused, integratsioonid, seaded ja sessioonid kustutatakse. Seda toimingut ei saa tagasi võtta. Rakendus taaskäivitub pärast taastamist.", - "typePrompt": "Jätkamiseks sisesta „{phrase}“", - "cancel": "Tühista", "submit": "Taasta andmebaas" }, "progress": { "title": "Andmebaasi taastamine...", - "extracting": "Varukoopiaarhiivi ekstraktimine", - "migrating": "Andmebaasi migratsioonide rakendamine", - "encrypting": "Integratsioonisaladuste uuesti krüpteerimine", - "swapping": "Andmebaasifaili asendamine", - "restarting": "Serveri taaskäivitamine" + "restarting": "Serveri taaskäivitamine", + "relogin": "Andmebaasi taastamine muutis teie praeguse seansi kehtetuks. Homarr suunab teid serveri valmisolekul sisselogimisele." }, "complete": { "title": "Taastamine lõpetatud", - "message": "Andmebaas on edukalt taastatud. Server taaskäivitub — värskenda lehte mõne sekundi pärast." + "message": "Andmebaas on edukalt taastatud. Server taaskäivitub — värskenda lehte mõne sekundi pärast.", + "button": "Logi kohe sisse" + }, + "timeout": { + "title": "Server ei tulnud tagasi võrku", + "message": "Andmebaasi taastamine lõpetati, kuid Homarr ei muutunud uuesti valmisolevaks. Proovige ühenduse kontrolli uuesti või värskendage seda lehte käsitsi." }, "failed": { "title": "Taastamine nurjus" @@ -5059,6 +7019,9 @@ "invalidMissingMetadata": "Vigane varukoopia: metadata.json puudub", "invalidMissingDb": "Vigane varukoopia: db.sqlite puudub", "analyzeError": "Varukoopia analüüsimine nurjus" + }, + "confirm": { + "typePrompt": "Jätkamiseks sisestage „{phrase}“" } } }, @@ -5093,7 +7056,11 @@ "toggleBoardEdit": "Vaheta paneeli muutmisrežiimi", "toggleColorScheme": "Heleda/tumeda režiimi lülitamine", "saveNotebook": "Salvesta märkmik (ainult märkmikuvidinas)", - "openSpotlight": "Ava otsing" + "openSpotlight": "Ava otsing", + "openSpotlightApps": "Ava rakenduste otsing", + "openSpotlightAssistant": "Ava assistendi režiim", + "openSpotlightPreferences": "Ava eelistuste režiim", + "openAssistant": "Ava assistent" }, "note": "Nõuanne: Mod tähistab macOS-is nii Ctrl-klahvi kui ka ⌘-klahvi" } @@ -5103,6 +7070,63 @@ }, "docker": { "title": "Konteinerid", + "reconciliation": { + "title": "Juhendatud Dockeri seadistus", + "suggestions": "{count, plural, =0 {Soovitusi pole} one {# soovitus} other {# soovitust}}", + "attention": "{count} vajavad tähelepanu", + "endpointUnavailable": "Mõnda teenust ei saanud kontrollida, sest järgmised lõpp-punktid pole saadaval: {names}", + "empty": "Nähtavaid Dockeri teenuseid ei leitud.", + "emptyFilter": "Ükski teenus ei vasta sellele vaatele.", + "ambiguous": "Sellele teenusele võib vastata rohkem kui üks olemasolev üksus. Homarr ei vali neist automaatselt ühtki.", + "filter": { + "attention": "Vajab tähelepanu", + "represented": "Juba seadistatud", + "all": "Kõik" + }, + "state": { + "newRecognized": "Ühendamiseks valmis", + "newApp": "Uus teenus", + "represented": "Juba esindatud", + "linked": "Lingitud", + "moved": "Aadress muutus" + }, + "url": { + "manual": "Sisestage aadress käsitsi" + }, + "health": { + "layer": { + "docker": "Docker", + "integrationConfiguration": "Integratsioon", + "authentication": "Autentimine", + "apiRequest": "API", + "appRepresentation": "Rakendus", + "widgetConfiguration": "Vidin", + "widgetQuery": "Vidina päring" + }, + "status": { + "available": "Saadaval", + "configured": "Konfigureeritud", + "linked": "Lingitud", + "missing": "Puudub", + "changed": "Muudetud", + "unused": "Ei kasutata", + "notApplicable": "Ei kohaldu", + "notObserved": "Ei täheldatud" + } + }, + "action": { + "review": "Vaata üle", + "dismiss": "Lükka tagasi", + "restoreDismissed": "Taasta tagasilükatud ({count})", + "setupIntegration": "Seadista integratsioon", + "reviewIntegration": "Vaata integratsioon üle", + "viewRepresentation": "Vaata seadistust" + }, + "loadError": { + "title": "Dockeri seadistusabilist ei saanud laadida", + "message": "Dockeri teenuse teave pole saadaval. Proovige uuesti sellelt lehelt lahkumata." + } + }, "table": { "updated": "Uuendatud {when}", "refresh": { @@ -5115,9 +7139,6 @@ "totalMemory": "Mälu kokku: {memory}" }, "field": { - "name": { - "label": "Nimi" - }, "state": { "label": "Olek", "option": { @@ -5131,9 +7152,6 @@ } }, "stats": { - "cpu": { - "label": "CPU" - }, "memory": { "label": "Mälu" } @@ -5196,8 +7214,11 @@ } }, "remove": { - "label": "Eemalda", "confirm": "Püsivaks eemaldamiseks klõpsa uuesti", + "confirmation": { + "title": "{count, plural, one {Kas eemaldada # konteiner?} other {Kas eemaldada # konteinerit?}}", + "message": "{count, plural, one {See eemaldab jäädavalt # konteineri: {names}} other {See eemaldab jäädavalt # konteinerit: {names}}}" + }, "notification": { "success": { "title": "Konteinerid eemaldatud", @@ -5209,8 +7230,13 @@ } } }, + "result": { + "failure": { + "title": "Mõni konteineri toiming nurjus", + "message": "{total, plural, one {{failed} toimingust # nurjus: {names}} other {{failed} toimingust # nurjusid: {names}}}" + } + }, "refresh": { - "label": "Värskenda", "notification": { "success": { "title": "Konteinerid värskendatud", @@ -5241,18 +7267,33 @@ }, "error": { "internalServerError": "Dockeri konteinerite laadimine ebaõnnestus", + "endpointUnavailable": "{count, plural, one {# Dockeri lõpp-punkt pole saadaval: {names}} other {# Dockeri lõpp-punkti pole saadaval: {names}}}", "noColumns": "Vali vidina seadetes vähemalt üks tulp" } }, "kubernetes": { + "context": { + "label": "Kubernetese kontekst", + "loadError": { + "title": "Kubernetese kontekste ei saanud laadida", + "message": "Konteksti teave pole saadaval. Proovige uuesti sellelt lehelt lahkumata." + }, + "status": { + "available": "Saadaval", + "degraded": "Mõõdikud pole saadaval", + "unavailable": "Pole saadaval" + }, + "unavailable": "Selle Kubernetese kontekstiga ei saa ühendust luua. Valige muu kontekst või kontrollige selle mandaate ja lõpp-punkti.", + "metricsUnavailable": "Selle kontekstiga saab ühendust luua, kuid Metrics Server pole saadaval. Inventar on saadaval ka ilma reaalajas protsessori- ja mälukasutuseta." + }, "cluster": { "title": "Klastri juhtpaneel", "label": "Klaster", "providers": "Pakkujad", "version": "Versioon", - "architecture": "Arhitektuur", "capacity": { "title": "Mahutavus", + "metricsUnavailable": "Metrics Server pole saadaval. Inventar ja reserveeritud maht on nähtavad, kuid reaalajas protsessori- ja mälukasutust ei saa kuvada.", "resource": { "reserved": "Reserveeritud", "used": "Kulutud" @@ -5271,38 +7312,10 @@ } }, "nodes": { - "label": "Sõlmed", "field": { - "name": { - "label": "Nimi" - }, - "state": { - "label": "Olek", - "option": { - "ready": "Valmis", - "NotReady": "Pole valmis" - } - }, - "cpu": { - "label": "CPU" - }, - "memory": { - "label": "RAM" - }, - "pods": { - "label": "Podid" - }, - "operatingSystem": { - "label": "OS" - }, - "architecture": { - "label": "Arhitektuur" - }, + "metricsUnavailable": "Pole saadaval", "kubernetesVersion": { "label": "Kubernetese versioon" - }, - "creationTimestamp": { - "label": "Loodud" } }, "table": { @@ -5310,43 +7323,17 @@ } }, "namespaces": { - "label": "Nimeruumid", - "field": { - "name": { - "label": "Nimi" - }, - "state": { - "label": "Olek", - "option": { - "active": "Aktiivne", - "terminating": "Lõpetamisel" - } - }, - "creationTimestamp": { - "label": "Loodud" - } - }, "table": { "search": "Otsi {count} nimeruumi" } }, "ingresses": { - "label": "Ingressid", "field": { - "name": { - "label": "Nimi" - }, - "namespace": { - "label": "Nimeruum" - }, "className": { "label": "Klassi nimi" }, "rulesAndPaths": { "label": "Reeglid ja teed" - }, - "creationTimestamp": { - "label": "Loodud" } }, "table": { @@ -5354,17 +7341,7 @@ } }, "services": { - "label": "Teenused", "field": { - "name": { - "label": "Nimi" - }, - "namespace": { - "label": "Nimeruum" - }, - "type": { - "label": "Tüüp" - }, "ports": { "label": "Pordid" }, @@ -5373,9 +7350,6 @@ }, "clusterIP": { "label": "Klastri IP" - }, - "creationTimestamp": { - "label": "Loodud" } }, "table": { @@ -5383,25 +7357,12 @@ } }, "pods": { - "label": "Podid", "field": { - "name": { - "label": "Nimi" - }, - "namespace": { - "label": "Nimeruum" - }, "image": { "label": "Tõmmis" }, "applicationType": { "label": "Rakenduse tüüp" - }, - "status": { - "label": "Olek" - }, - "creationTimestamp": { - "label": "Loodud" } }, "table": { @@ -5409,51 +7370,17 @@ } }, "secrets": { - "label": "Saladused", - "field": { - "name": { - "label": "Nimi" - }, - "namespace": { - "label": "nimeruum" - }, - "type": { - "label": "tüüp" - }, - "creationTimestamp": { - "label": "Loodud" - } - }, "table": { "search": "Otsi {count} saladust" } }, "configmaps": { - "label": "ConfigMapid", - "field": { - "name": { - "label": "Nimi" - }, - "namespace": { - "label": "nimeruum" - }, - "creationTimestamp": { - "label": "Loodud" - } - }, "table": { "search": "Otsi {count} ConfigMapi" } }, "volumes": { - "label": "Mahud", "field": { - "name": { - "label": "Nimi" - }, - "namespace": { - "label": "Nimeruum" - }, "accessModes": { "label": "Juurdepääsurežiimid" }, @@ -5468,12 +7395,6 @@ }, "volumeName": { "label": "Mahu nimi" - }, - "status": { - "label": "Olek" - }, - "creationTimestamp": { - "label": "Loodud" } }, "table": { @@ -5482,6 +7403,29 @@ }, "error": { "internalServerError": "Kubernetese andmete laadimine ebaõnnestus" + }, + "field": { + "name": { + "label": "Töö nimetus" + }, + "namespace": { + "label": "Nimeruum" + }, + "creationTimestamp": { + "label": "Loodud" + }, + "state": { + "label": "Töö olek" + }, + "status": { + "label": "Olek" + }, + "type": { + "label": "Allalaadimishalduri tüüp" + }, + "architecture": { + "label": "Arhitektuur" + } } }, "permission": { @@ -5515,71 +7459,27 @@ }, "navigationStructure": { "manage": { - "workshop": { - "label": "Workshop" - }, "label": "Halda", - "boards": { - "label": "Paneelid" - }, - "integrations": { - "label": "Integratsioonid", + "custom-widgets": { "edit": { - "label": "Muuda" + "flow": { + "label": "Voog" + } }, - "new": { - "label": "Uus" - } - }, - "search-engines": { - "label": "Otsingumootorid", - "new": { - "label": "Uus" + "workshop": { + "label": "Töötuba" }, - "edit": { - "label": "Muuda" - } - }, - "medias": { - "label": "Meedia" - }, - "apps": { - "label": "Äpid", - "new": { - "label": "Uus" - }, - "edit": { - "label": "Muuda" + "publish": { + "label": "Avalda töötuppa" } }, "users": { - "label": "Kasutajad", - "create": { - "label": "Loo" - }, "general": "Üldine", - "security": "Turvalisus", - "board": "Paneelid", - "groups": { - "label": "Rühmad" - }, - "invites": { - "label": "Kutsed" - } + "security": "Turvalisus" }, "tools": { "label": "Tööriist", - "tasks": { - "label": "Ülesanded" - }, - "docker": { - "label": "Docker", - "logs": { - "label": "Logid" - } - }, "kubernetes": { - "label": "Kubernetes", "nodes": { "label": "Sõlmed" }, @@ -5605,11 +7505,7 @@ "label": "Mahud" } }, - "logs": { - "label": "Logid" - }, "certificates": { - "label": "Sertifikaadid", "hostnames": { "label": "Hostinimed" } @@ -5620,12 +7516,60 @@ }, "about": { "label": "Teave" + }, + "assistant": { + "label": "Assistent" } } }, "search": { "placeholder": "Otsi mida tahes", "nothingFound": "Midagi ei leitud", + "modePicker": { + "search": { + "label": "Otsing", + "placeholder": "Otsi rakendusi, paneele, lehti, käske ja eelistusi" + }, + "apps": { + "label": "Rakendused", + "placeholder": "Otsi rakendusi, paneele ja integratsioone" + }, + "command": { + "label": "Käsud", + "placeholder": "Otsi toiminguid ja käske" + }, + "preferences": { + "label": "Eelistused", + "placeholder": "Otsi ja muuda eelistusi" + }, + "assistant": { + "label": "Assistent", + "placeholder": "Küsi assistendilt" + }, + "external": { + "label": "Veeb", + "placeholder": "Otsi välise otsingumootori abil" + }, + "media": { + "label": "Meedia", + "placeholder": "Otsi filmi või saadet", + "fallback": "Otsi meediast „{query}“" + }, + "userGroup": { + "label": "Inimesed", + "placeholder": "Otsi kasutajaid ja rühmi" + }, + "continueWith": "Jätka valikuga", + "dialogAriaLabel": "{mode} käsumenüü", + "navigationLabel": "Otsingurežiimid", + "modeAriaLabel": "Režiim „{mode}“", + "resultsAriaLabel": "Režiimi „{mode}“ tulemused", + "footer": { + "navigate": "Navigeeri", + "open": "Ava", + "close": "Sulge" + } + }, "error": { "fetch": "Andmete laadimisel tekkis viga" }, @@ -5634,7 +7578,6 @@ "help": "Otsi rakendusi, integratsioone või paneele", "group": { "app": { - "title": "Rakendused", "children": { "action": { "open": { @@ -5650,7 +7593,6 @@ } }, "board": { - "title": "Paneelid", "children": { "action": { "open": { @@ -5670,9 +7612,6 @@ "title": "Vali paneelile toiming" } } - }, - "integration": { - "title": "Integratsioonid" } } }, @@ -5701,9 +7640,6 @@ "newBoard": { "label": "Loo uus paneel" }, - "importBoard": { - "label": "Impordi paneel" - }, "newApp": { "label": "Loo uus rakendus" }, @@ -5773,7 +7709,6 @@ } }, "defaultSearchEngineId": { - "label": "Vaikimisi otsingumootor", "children": { "detail": { "title": "Vali vaikimisi otsingumootor" @@ -5781,7 +7716,6 @@ } }, "openSearchInNewTab": { - "label": "Ava otsingutulemused uuel vahekaardil", "children": { "detail": { "title": "Ava otsingutulemused uuel vahekaardil" @@ -5789,7 +7723,6 @@ } }, "ddgBangs": { - "label": "Luba DuckDuckGo hüüdotsingud", "children": { "detail": { "title": "Luba DuckDuckGo hüüdotsingud" @@ -5804,6 +7737,13 @@ } } }, + "byteUnitSystem": { + "children": { + "detail": { + "title": "Valige oma andmemahu ühikud" + } + } + }, "homeBoardId": { "label": "Kodupaneel", "children": { @@ -5821,7 +7761,6 @@ } }, "pingIconsEnabled": { - "label": "Kasuta pingide jaoks ikoone", "children": { "detail": { "title": "Kasuta pingide jaoks ikoone" @@ -5829,7 +7768,6 @@ } }, "enableRightClickOnWidgets": { - "label": "Luba vidinatel paremklõps", "children": { "detail": { "title": "Luba vidinatel paremklõps" @@ -5857,6 +7795,7 @@ "description": "Alusta otsingut oma meediumitaotluste integratsioonides", "disabled": { "noIntegration": "Meediumiotsingu lubamiseks lisa Overseerri, Jellyseerri või Seerri integratsioon.", + "signInRequired": "Meediapäringu integratsioonide otsimiseks logige sisse.", "scoped": "Sellel vidinal pole juurdepääsetavat meediumitaotluste integratsiooni." } } @@ -5873,7 +7812,6 @@ "help": "Kasuta välist otsingumootorit", "group": { "searchEngine": { - "title": "Otsingumootorid", "tipDdgBangs": "Nõuanne: siin saab kasutada ka mis tahes DuckDuckGo hüüdotsingut, nt !something", "bang": { "searchWithQuery": "Otsi {label} abil „{query}“", @@ -5924,20 +7862,6 @@ "group": { "mode": { "title": "Režiimid" - }, - "help": { - "title": "Abi", - "option": { - "documentation": { - "label": "Dokumentatsioon" - }, - "submitIssue": { - "label": "Teata probleemist" - }, - "discord": { - "label": "Kogukonna Discord" - } - } } } }, @@ -5949,9 +7873,10 @@ "other": { "label": "Otsi teise otsingumootoriga" }, - "no-default": { - "label": "Vaikimisi otsingumootorit pole", - "description": "Määra eelistustes vaikimisi otsingumootor" + "no-engines": { + "label": "Otsingumootoreid pole konfigureeritud", + "descriptionCreate": "Käsumenüüst otsimiseks lisage otsingumootor", + "descriptionUnavailable": "Paluge administraatoril otsingumootor konfigureerida" }, "search": { "label": "Otsi päringut „{query}“ rakendusega {name}" @@ -6031,7 +7956,6 @@ "help": "Otsi kasutajaid või rühmi", "group": { "user": { - "title": "Kasutajad", "children": { "action": { "detail": { @@ -6044,7 +7968,6 @@ } }, "group": { - "title": "Rühmad", "children": { "action": { "detail": { @@ -6068,9 +7991,6 @@ "engine": { "search": "Leia otsingumootor", "field": { - "name": { - "label": "Nimi" - }, "short": { "label": "Lühinimi" }, @@ -6083,12 +8003,19 @@ }, "page": { "list": { - "title": "Otsingumootorid", + "ariaLabel": "Konfigureeritud otsingumootorid", "noResults": { "title": "Otsingumootoreid veel pole", - "action": "Loo esimene otsingumootor" + "description": "Otsingumootorid võimaldavad Spotlightil saata päringu saidile või ühendatud teenusele.", + "action": "Loo esimene otsingumootor", + "filteredTitle": "Ükski otsingumootor ei vasta teie otsingule", + "filteredDescription": "Ükski otsingumootor ei vasta otsingule „{search}“. Proovige muud nime või URL-i." }, - "interactive": "Interaktiivne, kasutab integratsiooni" + "interactive": "Interaktiivne, kasutab integratsiooni", + "type": { + "generic": "URL-i mall", + "fromIntegration": "Integratsioon" + } }, "create": { "title": "Uus otsingumootor", @@ -6107,11 +8034,9 @@ "title": "Muuda otsingumootorit", "notification": { "success": { - "title": "Muudatused rakendati edukalt", "message": "Otsingumootor salvestati edukalt" }, "error": { - "title": "Muudatusi ei saanud rakendada", "message": "Otsingumootorit ei saanud salvestada" } }, @@ -6250,6 +8175,10 @@ } }, "log": { + "context": { + "widgetError": "Vidin teatas sel ajal veast", + "expiredWidgetError": "Selle vidinavea lähedasi logisid enam ei säilitata" + }, "level": { "option": { "debug": "Silumine", @@ -6261,7 +8190,6 @@ }, "onboardingTour": { "learnMore": "Loe dokumentatsiooni", - "next": "Edasi", "prev": "Tagasi", "done": "Tehtud", "skip": "Jäta õpetus vahele", @@ -6325,5 +8253,359 @@ "description": "​Muuda oma värviteemat, keelt, kodupaneeli ja eelistusi. Siit saad ka otse haldusalasse liikuda." } } + }, + "metadata": { + "description": "Isehostitav juhtpaneel *arr-i virna ja kogu teie kodulabori jaoks. Integreerub enam kui 50 teenusega, reaalajas vidinad, konfiguratsioonifaile pole.", + "dashboardTitle": "{appName} juhtpaneel" + }, + "assistant": { + "title": "Assistent", + "open": "Ava assistent", + "close": "Sulge assistent", + "minimize": "Minimeeri assistent", + "spotlight": "Küsi assistendilt", + "spotlightDescription": "Sisestage ja saatke viip käsumenüüst lahkumata.", + "spotlightPrompt": { + "title": "Küsi assistendilt", + "description": "Sisestage ülal viip. Enter saadab selle taustal.", + "send": "Saada viip", + "empty": "Sisestage ülal viip" + }, + "unavailable": { + "checking": "Kontrollimine, kas assistent on saadaval…", + "error": "Assistendi saadavust ei saanud kontrollida. Proovige uuesti.", + "notConfigured": "Administraator peab assistendi esmalt konfigureerima ja lubama.", + "signIn": "Assistendi kasutamiseks logige sisse." + }, + "newConversation": "Uus vestlus", + "conversations": "Vestlused", + "conversationActions": "Vestluse toimingud", + "searchConversations": "Otsi vestlusi", + "noMatchingConversations": "Sobivaid vestlusi pole", + "moreActions": "Rohkem vastuse toiminguid", + "renameConversation": { + "action": "Nimeta ümber", + "label": "Vestluse nimi", + "save": "Salvesta nimi", + "failedTitle": "Vestlust ei saanud ümber nimetada", + "failedDescription": "Homarr ei saanud seda vestlust ümber nimetada. Proovige uuesti." + }, + "deleteConversation": { + "title": "Kas kustutada vestlus?", + "description": "„{title}“ ja selle sõnumid kustutatakse jäädavalt.", + "failedTitle": "Vestlust ei saanud kustutada", + "failedDescription": "Homarr ei saanud seda vestlust kustutada. Proovige uuesti." + }, + "closeHistory": "Sulge vestluste ajalugu", + "openHistory": "Ava vestluste ajalugu", + "emptyTitle": "Millega saan aidata?", + "emptyDescription": "Küsige oma Homarri seadistuse kohta, uurige eksemplari reaalajas andmeid või kinnitage toimingud, kui soovite, et ma midagi muudaksin.", + "suggestions": { + "health": { + "label": "Kontrolli teenuse seisundit", + "prompt": "Kontrollige oma integratsioone ja tehke kokkuvõte kõigest, mis vajab tähelepanu." + }, + "explore": { + "label": "Avasta minu Homarr", + "prompt": "Näita mulle, mida saan selles Homarri eksemplaris vaadata ja hallata." + }, + "media": { + "label": "Leia taotlemiseks meediat", + "prompt": "Aita mul leida taotlemiseks film või sari." + }, + "style": { + "label": "Täiusta armatuurlauda", + "prompt": "Aita mul täiustada armatuurlaua välimust või kohandatud CSS-i. Näita mulle esmalt minu armatuurlaudu ja säilita muudatuste tegemise ajal mu praegused seaded." + }, + "designWidget": { + "label": "Kujunda vidin", + "prompt": "Loo ja installi kohandatud vidin kasutajale " + } + }, + "composerPlaceholder": "Küsi assistendilt…", + "runtime": { + "model": "Mudel", + "searchModels": "Otsi mudeleid", + "noModels": "Mudeleid pole saadaval", + "otherModels": "Muud mudelid", + "imageInput": "Toetab pildisisendit", + "thinking": "Mõtlemisrežiim", + "reasoning": { + "auto": "Automaatne", + "none": "Väljas", + "minimal": "Minimaalne", + "low": "Madal", + "medium": "Keskmine", + "high": "Kõrge" + } + }, + "providerQuota": { + "title": "Homarri teenusepakkuja", + "communityWorkshop": "Kogukonna töötuba", + "dailyAllowance": "Igapäevane päringute limiit", + "remainingLabel": "Homarri teenusepakkuja päringuid on alles {remaining} / {limit}", + "loading": "Homarri teenusepakkuja limiidi laadimine", + "signInRequired": "Homarri teenusepakkuja kasutamiseks on vajalik töötuppa sisselogimine", + "signInDescription": "Eraldi päevase limiidi saamiseks logige kogukonna töötoa kaudu GitHubi sisse.", + "exhaustedDescription": "Oled tänaseks Homarri teenusepakkuja limiidi ära kasutanud. See lähtestatakse keskööl UTC järgi.", + "unavailableDescription": "Logige töötuppa sisse või oodake, kuni Homarri teenusepakkuja limiit lähtestatakse.", + "signIn": "Logi GitHubiga sisse", + "signInError": "GitHubi sisselogimine ebaõnnestus. Proovige hetke pärast uuesti.", + "loadError": "Homarri teenusepakkuja limiiti ei saanud laadida.", + "reset": "Lähtestatakse {relative} kell ", + "toolCalls": "Iga mudelipäring ja lõpetatud tööriistakutse kasutab ühe päringu.", + "retry": "Laadi limiit uuesti", + "level": { + "ok": "OK", + "warning": "Hoiatus", + "bad": "Madal", + "dead": "Kasutatud" + } + }, + "stop": "Peata vastus", + "send": "Saada sõnum", + "copy": "Kopeeri vastus", + "copyMessage": "Kopeeri sõnum", + "editMessage": "Muuda sõnumit", + "updateMessage": "Uuenda sõnumit", + "regenerate": "Loo vastus uuesti", + "helpful": "Kasulik", + "notHelpful": "Pole kasulik", + "readAloud": "Loe vastus ette", + "stopReading": "Peata vastuse ettelugemine", + "feedbackError": "Teie tagasisidet ei saanud salvestada. Proovige uuesti.", + "exportMarkdown": "Ekspordi Markdownina", + "exportConversation": { + "action": "Ekspordi vestlus Markdownina", + "failedTitle": "Vestlust ei saanud eksportida", + "failedDescription": "Homarr ei saanud seda vestlust laadida. Proovige uuesti." + }, + "reasoning": "Mõtlemine", + "previousResponse": "Eelmine vastus", + "nextResponse": "Järgmine vastus", + "removeAttachment": "Eemalda manus", + "downloadFile": "Laadi alla {name}", + "attachedImage": "Manustatud pilt", + "externalImageBlocked": "Väline pilt on privaatsuse kaitseks blokeeritud", + "image": { + "loading": "Pildi laadimine", + "failed": "Seda pilti ei saanud laadida.", + "retry": "Proovi pilti uuesti laadida" + }, + "quoteSelection": "Tsitaat", + "dismissQuote": "Eemalda tsitaat", + "attachments": { + "add": "Lisa pilt või dokument", + "errorTitle": "Manust ei saanud lisada", + "imageUnsupported": "Valitud mudel ei toeta pildisisendit." + }, + "mentions": { + "menu": "Lisa Homarri kontekst", + "context": "Kontekst", + "app": "Rakendused", + "integration": "Integratsioonid", + "board": "Paneelid", + "widget": "Vidinad", + "tools": "Saadaolevad tööriistad" + }, + "markdown": { + "diagram": "Diagramm", + "renderingDiagram": "Diagrammi renderdamine…", + "diagramUnavailable": "Seda diagrammi ei saanud renderdada." + }, + "commands": { + "menu": "Assistendi käsud", + "health": "Valmista ette teenuse seisundi kontroll", + "explore": "Valmista ette selle Homarri eksemplari ülevaade", + "media": "Valmista ette meediaotsing", + "style": "Valmista ette armatuurlaua välimuse või kohandatud CSS-i muudatus", + "designWidget": "Valmista ühe viibaga ette kohandatud vidina loomine" + }, + "usage": { + "tokens": "märgid", + "contextWindow": "Kontekstiaken", + "requestDetails": "Päringu üksikasjad", + "used": "Viimane samm", + "remaining": "Alles", + "capacity": "Maht", + "input": "Sisend", + "output": "Väljund", + "cached": "Vahemällu salvestatud sisend", + "cacheWrite": "Vahemälu kirjutamine", + "reasoning": "Arutluskäik", + "inputShort": "sisse", + "outputShort": "välja", + "cachedShort": "vahemällu salvestatud", + "reasoningShort": "arutluskäik", + "firstOutput": "Esimene väljund", + "homarrTiming": "Homarri mõõdetud", + "endToEnd": "Algusest lõpuni", + "observedThroughput": "Mõõdetud läbilaskevõime", + "providerTiming": "Teenusepakkuja teatatud", + "loadingProviderDetails": "Genereerimisandmete laadimine…", + "providerDetailsPending": "OpenRouter töötleb endiselt mõningaid genereerimisandmeid. Proovimiseks avage uuesti.", + "providerLatency": "Teenusepakkuja latentsus", + "generationTime": "Genereerimisaeg", + "moderationLatency": "Modereerimine", + "providerThroughput": "Teenusepakkuja läbilaskevõime", + "fallbacks": "Varuvariandid", + "fallbackLatency": "Varuvariandi latentsus", + "cacheDiscount": "Vahemälu allahindlus", + "normalizedTokens": "OpenRouteri normaliseeritud sisend / väljund", + "byok": "BYOK", + "cost": "Maksumus", + "reported": "Teenusepakkuja teatatud", + "estimated": "Hinnanguline mudeli hinnastuse põhjal", + "upstreamCost": "Ülesvoolu järeldamine", + "webSearches": "Veebiotsingud", + "finishReason": "Lõpetamise põhjus", + "notReported": "Pole teatatud", + "agentSteps": "Agendi sammud", + "step": "Samm {number}", + "generation": "Genereerimine" + }, + "toolInput": "Sisend", + "toolOutput": "Väljund", + "toolActivity": { + "iconSearch": "Ikoonide otsimine päringule „{query}“", + "iconBrowse": "Saadaolevate ikoonide sirvimine" + }, + "toolNavigation": { + "openPreview": "Ava eelvaade", + "openWidget": "Ava vidin" + }, + "webSearch": { + "title": "Veebiotsing", + "completed": "OpenRouter otsis selle vastuse jaoks veebist värsket teavet.", + "searches": "{count, plural, one {# otsing} other {# otsingut}}", + "sources": "{count, plural, one {# allikas} other {# allikat}}" + }, + "responseError": { + "title": "Assistent ei saanud lõpetada", + "description": "Proovige uuesti. Probleemi jätkumisel paluge administraatoril kontrollida seadistatud mudeli lõpp-punkti." + }, + "toolPreparationError": { + "title": "Seda päringut ei saanud ette valmistada", + "description": "Mudel peatus enne täielike üksikasjade esitamist. Proovige vastust uuesti või kirjeldage päringut uuesti. Muudatusi ei tehtud." + }, + "busy": { + "title": "Assistent juba töötab", + "description": "Oodake praegust vastust või avage see töö peatamiseks." + }, + "pendingAction": { + "answerTitle": "Vajalik vastus", + "answerFallback": "Jätkamiseks valige vastus", + "formTitle": "Vaata rakenduse üksikasjad üle", + "boardFormTitle": "Vaata armatuurlaua muudatused üle", + "review": "Vaata üle", + "sendBlocked": "Enne saatmist lahendage ootel päring" + }, + "activity": { + "thinking": "Assistent mõtleb", + "working": "Töötan teie viiba kallal", + "ready": "Vastus on valmis", + "completed": "Ava vastus", + "approval": "Vajalik heakskiit", + "failed": "Assistent vajab tähelepanu", + "expand": "Ava assistendi vastus", + "dismiss": "Sulge assistendi tegevus" + }, + "scrollToLatest": "Keri uusimani", + "refresh": { + "action": "Värskenda praegust vaadet", + "working": "Praeguse vaate värskendamine", + "completeTitle": "Vaade on värskendatud", + "completeDescription": "Nähtavad Homarri andmed on uuesti laaditud.", + "failedTitle": "Vaadet ei saanud värskendada", + "failedDescription": "Muudatus võidi siiski salvestada. Proovige värskendamist uuesti." + }, + "askUser": { + "preparing": "Küsimuse ettevalmistamine", + "answered": "Teie vastus", + "other": "Muu", + "otherLabel": "Teie vastus", + "otherPlaceholder": "Sisestage teine vastus…", + "submit": "Saada vastus", + "cancelOther": "Tühista teine vastus", + "optionKind": { + "affirmative": "Kinnita", + "negative": "Keeldu", + "alternative": "Valik", + "custom": "Kohandatud" + } + }, + "configureApp": { + "title": "Vaata rakenduse üksikasjad üle", + "description": "Valige kohalik ikoon ja kohandage kõike enne, kui assistent taotleb loomise heakskiitu.", + "preparing": "Rakenduse üksikasjade ettevalmistamine", + "continue": "Kasuta neid üksikasju", + "ready": "Rakenduse üksikasjad on valmis", + "automaticContinue": "Neid rakenduse üksikasju kasutatakse automaatselt" + }, + "configureBoardSettings": { + "title": "Vaata armatuurlaua muudatused üle", + "loading": "Praeguste armatuurlaua seadete laadimine", + "loadErrorTitle": "Armatuurlaua seadeid ei saanud laadida", + "loadErrorDescription": "Armatuurlauda ei pruugi enam olemas olla või teil pole selle muutmiseks õigust.", + "proposedCount": "Assistent pakkus välja {count} välja", + "changeCount": "{count} muudatust on valmis", + "ready": "Armatuurlaua muudatused on valmis", + "cancelled": "Praegused armatuurlaua seaded säilitati", + "noChanges": "Seadeid ei muudeta", + "keepCurrent": "Säilita praegused seaded", + "continue": "Jätka heakskiitmisega", + "automaticContinue": "Pakutud armatuurlaua muudatused kinnitatakse automaatselt", + "resetAll": "Lähtesta kõik muudatused", + "tabs": { + "css": "Kohandatud CSS", + "appearance": "Välimus", + "background": "Taust", + "general": "Üldine" + }, + "cssDescription": "Muutke kogu laaditabelit. Olemasolevad reeglid säilitatakse, kui neid siin ei eemaldata.", + "cssCharacters": "{count} / 16384 märki", + "copyCss": "Kopeeri CSS", + "copied": "Kopeeritud", + "restoreCss": "Taasta praegune CSS", + "remoteCssTitle": "See CSS laadib kaugressursi", + "remoteCssDescription": "Imporditud laaditabelid ja kaug-URL-id võtavad armatuurlaua laadimisel ühendust teise serveriga. Vaadake need enne jätkamist üle." + }, + "configureWidget": { + "title": "Vaata vidin üle", + "preparing": "Vidina seadete ettevalmistamine", + "review": "Vaata vidin ja integratsioonid üle", + "ready": "Vidina konfiguratsioon on valmis", + "cancelled": "Vidinat ei lisatud", + "automaticContinue": "Pakutud vidina konfiguratsioon kinnitatakse automaatselt", + "definitionLoadErrorTitle": "Vidina seadeid ei saanud laadida", + "definitionLoadErrorDescription": "Homarr ei saanud selle vidina seadeid laadida. Proovige uuesti.", + "loadErrorTitle": "Integratsioone ei saanud laadida", + "loadErrorDescription": "Homarr ei saanud selle vidina jaoks saadaolevaid integratsioone laadida.", + "noIntegrationTitle": "Vajalik on ühilduv integratsioon", + "noIntegrationDescription": "Enne vidina armatuurlauale lisamist seadistage selle toetatud integratsioon.", + "connectIntegration": "Ühenda teenus", + "manageIntegrations": "Halda integratsioone", + "skip": "Ära lisa", + "errorTitle": "Vidina seadeid ei saanud ette valmistada", + "errorDescription": "Mudel ei esitanud täielikku vidina konfiguratsiooni. Vidinat ei lisatud." + }, + "approvalRequired": "Vajalik heakskiit", + "complete": "Lõpetatud", + "denied": "Tagasi lükatud", + "failed": "Nurjunud", + "working": "Töötlemisel", + "approvalDescription": "Vaadake see muudatus enne käivitamist üle.", + "approveAndRun": "Kiida heaks ja käivita", + "deny": "Keeldu", + "autoApproval": { + "label": "Automaatsed heakskiidud", + "composerLabel": "Kiida minu eest heaks", + "title": "Automaatsed heakskiidud", + "description": "Valmista selle vestluse jaoks vormid automaatselt ette ja kiida kaitstud muudatused heaks. Küsimused ootavad endiselt teie vastust ning teie Homarri õigused kehtivad endiselt. See lülitatakse vestluste vahetamisel välja.", + "enable": "Luba selle vestluse jaoks", + "disable": "Lülita automaatsed heakskiidud välja", + "enabled": "Automaatsed heakskiidud on sisse lülitatud", + "approving": "Automaatne heakskiitmine" + } } } diff --git a/packages/translation/src/lang/fi.json b/packages/translation/src/lang/fi.json index 15d32c073..19095d36a 100644 --- a/packages/translation/src/lang/fi.json +++ b/packages/translation/src/lang/fi.json @@ -1,156 +1,246 @@ { "init": { - "step": { - "start": { - "title": "Tervetuloa Homarriin", - "subtitle": "", - "description": "", - "action": { - "scratch": "", - "importOldmarr": "", - "restoreSqlite": "Palauta SQLite-varmuuskopiosta", - "restoreSqliteDescription": "Lataa täysi SQLite-tietokantavarmuuskopio aiemmasta Homarr-instanssista. Tämä palauttaa kaikki paneelit, käyttäjät, sovellukset, integraatiot ja asetukset.", - "backToOptions": "← Takaisin asennusvaihtoehtoihin" + "studio": { + "navigationLabel": "Perehdytyksen osat", + "back": "Takaisin", + "buildBoard": "Rakenna minun lautani", + "common": { + "unknownError": "Jokin meni pieleen. Valintosi ovat yhä täällä; yritä uudelleen." + }, + "claim": { + "checking": "Varmistetaan tämä perehdytysistunto…", + "checkingTitle": "Valmistellaan turvallista asetusta", + "lockedTitle": "Asennus on auki toisessa selaimessa", + "lockedDescription": "Jatka siellä, tai odota sen turvallinen ensimmäinen ajo istunto päättyy ennen kuin yrität uudelleen.", + "signInTitle": "Ylläpitäjän kirjautuminen vaaditaan", + "signInDescription": "Järjestelmänvalvoja on jo olemassa. Kirjaudu sisään jatkaaksesi asetuksia paljastamatta käyttäjätietoja tai käyttöoikeuksia.", + "signIn": "Kirjaudu sisään ja jatka", + "errorTitle": "Asetusta ei voitu suojata", + "errorDescription": "Lataa sivu uudelleen kokeillaksesi suojattua ensimmäistä kertaa -istuntoa uudelleen." + }, + "navigation": { + "essentials": "Essentials", + "discover": "Löydä", + "connect": "Yhdistä", + "board": "Lauta", + "extend": "Laajenna", + "review": "Yhteenveto" + }, + "welcome": { + "title": "Tervetuloa kotiin.", + "description": "Tervetuloa Homarr v{version}. Me opastaa sinut läpi olennaiset ja auttaa sinua rakentamaan ensimmäisen hallituksen.", + "start": "Aloita alusta", + "restore": "Palauta varmuuskopio", + "restoreTitle": "Palauta varmuuskopiosta", + "restoreDescription": "Täydellinen SQLite varmuuskopio palauttaa taulut, ihmiset, sovellukset, integraatiot ja asetukset. Homarr validoi sen ennen kuin korvaa mitään.", + "errorTitle": "Asennus ei onnistunut käynnistämään", + "errorDescription": "Asetuksesi ovat edelleen täällä. Yritä uudelleen tai lataa sivu uudelleen, jos tämä jatkuu." + }, + "account": { + "title": "Luo järjestelmänvalvoja", + "description": "Määritä pääkäyttäjäsi kirjautumistiedot.", + "username": "Ylläpitäjän käyttäjätunnus", + "passwordHint": "Vain 8-merkkinen minimi vaaditaan. Muut salasanan vahvuus tarkistukset ovat ehdotuksia.", + "create": "Luo järjestelmänvalvoja", + "errorTitle": "Ylläpitäjää ei voitu luoda", + "recoveryTitle": "Ylläpitäjän tili luotu", + "recoveryDescription": "Automaattinen sisäänkirjautuminen ei valmistunut. Kirjaudu sisään järjestelmänvalvojan tunnuksilla, jotka juuri luot jatkaaksesi asennusta.", + "recoveryAction": "Kirjaudu sisään ja jatka", + "unknownError": "Ylläpitäjää ei voitu luoda." + }, + "externalGroup": { + "title": "Yhdistä järjestelmänvalvojaryhmääsi", + "description": "Käytä tarkkaa LDAP:n tai OIDC:n lähettämää ryhmän nimeä. Tämän ryhmän jäsenet saavat järjestelmänvalvojan käyttöoikeuden.", + "name": "Ulkoisen järjestelmänvalvojan ryhmä", + "nameDescription": "Tämä on tapauskohtaista ja vastaa henkilöllisyytesi tarjoajaa.", + "continue": "Tallenna ryhmä ja jatka", + "errorTitle": "Ryhmää ei voitu tallentaa", + "unknownError": "Ylläpitoryhmää ei voitu tallentaa." + }, + "essentials": { + "title": "Aloita tutut oletukset", + "description": "Aseta kieli ja ulkonäkö, jonka kaikki näkevät ensin, ja anna sitten Homarrille palvelujesi käyttämä osoitekuvio.", + "language": "Oletuskieli", + "theme": "Oletus teema", + "themeAuto": "Järjestelmä", + "themeLight": "Vaalea", + "themeDark": "Tumma", + "serverOriginHelp": "Homarr käyttää tätä osoitetta esitäyttää havaitut palvelun URLit. Voit silti muokata jokaista palvelua erikseen.", + "serverDescription": "Tämä on pikanäppäin, ei rajoitus. Jokainen havaittu palvelu on muokattavissa.", + "serverOrigin": "Verkkotunnus, IP tai käänteisvälityspalvelimen polku", + "serverOriginDescription": "Esimerkkejä: home.lan, 192.168.1.10 tai https://home.example.com/services. Valitse miten jokainen palvelu on liitetty alla.", + "analytics": "Jaa anonyymi tuoteanalytiikka", + "analyticsDescription": "Auttaa Homarr parantaa ominaisuuksien luotettavuutta. Ei palvelutunnuksia tai hallintapaneelin sisältöä lähetetään." + }, + "discover": { + "title": "Katso, mihin tämä asennus todella saavuttaa", + "description": "Homarr tarkistaa ominaisuudet paikallaan. Puuttuva Docker pistorasia tai Kubernetes konteksti koskaan estää manuaalisen asetuksen.", + "database": "Tietokanta", + "docker": "Telakoittimet ja yhteensopivat pistorasiat", + "kubernetes": "Kubernetes", + "assistantWorkshop": "Avustaja ja työpaja", + "found": "Löytyi {integrations} integraatiota ja {apps} muuta sovellusta", + "retryKubernetes": "Tarkista Kubernetes uudelleen", + "retryWorkshop": "Tarkista huoltopiste uudelleen", + "unknownVersion": "tuntematon versio", + "kubernetesAvailable": "Yhdistetty Kubernekseen {version}", + "kubernetesDisabled": "Ei käytössä, jatka Dockerilla tai manuaalisilla palveluilla", + "kubernetesUnavailable": "Kubernetes on käytössä, mutta sitä ei voi saavuttaa tästä Homarr-prosessista", + "workshopAvailable": "Yhteisön työpaja ja isännöivät avustavat palvelut ovat saavutettavissa", + "workshopUnavailable": "Paikalliset ja mukautetut apupalvelujen tarjoajat pysyvät saatavilla", + "partialTitle": "Joitakin lähteitä ei voitu skannata", + "partialDescription": "Löydettävissä olevien isäntien tulokset säilytetään. Tarkista pistorasian käyttöoikeudet tai lisää palveluita manuaalisesti seuraavassa osiossa.", + "status": { + "checking": "Tarkistetaan saatavuutta…", + "available": "Saatavilla", + "partial": "Osittain saatavilla", + "empty": "Reachable, no matching running services", + "disabled": "Poistettu käytöstä palvelimen kokoonpanon perusteella", + "unavailable": "Ei saatavilla tästä Homarr-prosessista" } }, - "import": { - "title": "", - "subtitle": "", - "dropzone": { - "title": "", - "description": "" + "connect": { + "title": "Yhdistä mikä tekee hallituksesta hyödyllisen", + "description": "Valitse useita palveluita kerralla. Telakoitsijan etiketit ovat etusijalla, kuvien täsmäytys täyttää aukot, ja jokainen URL ja käyttöoikeustiedot pysyvät arvioitavissa.", + "discoveredIntegrations": "Havaitut integraatiohäiriöt ({count})", + "detectedIntegrationLabel": "Tuo {name}, tunnistettu tyypiksi {kind}", + "detectedAppLabel": "Tuo havaittu sovellus {name}", + "otherIntegrations": "Lisää toinen integraatio", + "configureIntegrations": "Määritä integraatiot", + "discoveredApps": "Havaitut sovellukset ({count})", + "appAddressRequired": "Lisää osoite kohteelle {name}tai poista se valinnasta.", + "empty": "Ei integraatioita valittuna. Homarr luo silti hyödyllisen aloituslautan, jossa on yleiset widgetit.", + "dockerSource": "Docker", + "manualSource": "Manuaalinen", + "url": "Palvelun URL", + "noCredentials": "Ei käyttäjätunnuksia", + "noCredentialsDescription": "Tämä integraatio ei edellytä käyttäjätietoja.", + "credentialMethod": "Käyttöoikeustietojen metodi", + "getApiKey": "Avaa API avain asetukset tälle palvelulle", + "openGuide": "Open Homarr's setup opas tähän palveluun", + "testConnection": "Testaa yhteys", + "testSuccess": "Yhteyden työt", + "testSuccessDescription": "Homarr liittyy nykyiseen osoitteeseen ja tunnisteisiin.", + "testError": "Yhteys epäonnistui", + "testErrorDescription": "Tarkista palvelun osoite ja käyttäjätunnukset ja yritä uudelleen.", + "needsConfiguration": "Tarvitsee konfiguraatiota", + "tested": "Yhteys testattu", + "testFailed": "Yhteyden testi epäonnistui", + "incompleteConfirmation": "Keskeneräiset integraatiot ohitetaan. Jatketaanko ilman niitä?" + }, + "board": { + "title": "Muodosta lauta ennen kuin se rakennetaan", + "description": "Homarr luo suojatun Mobiili- ja Base -asettelut, sitten asettaa sovelluksia ja yhteensopivia widgetejä valitsemistasi palveluista.", + "target": "Lauta asetettavaksi", + "targetDescription": "Valitse tarkka olemassa oleva taulu, joka tämän asennuksen pitäisi päivittää.", + "targetPlaceholder": "Valitse lauta", + "targetRequired": "Valitse taulu, jotta voit määrittää ennen jatkamista.", + "name": "Laudan nimi", + "nameDescription": "Käytetään hallituksen URL; kirjaimia, numeroita, viivoja ja alaviivoja vain.", + "nameRequired": "Anna hallituksen nimi ennen jatkamista.", + "primaryColor": "Ensisijainen väri", + "secondaryColor": "Toissijainen väri", + "resetColors": "Nollaa värit", + "radius": "Widgetin kulman säde", + "radiusOptions": { + "xs": "Tiukka", + "sm": "Hieno", + "md": "Tasapainotettu", + "lg": "Pyöristetty", + "xl": "Pehmeä" }, - "fileInfo": { - "action": { - "change": "" - } + "columns": "Laudan sarakkeet", + "columnsDescription": "Sarakkeet määrittelevät vaakasuoran ruudukon, jota käytetään kokoon ja sijoitukseen. 12 on monille ihmisille.", + "columnCount": "{count, plural, one {# saraketta} other {# saraketta}}", + "leftSidebar": "Left sidebar", + "rightSidebar": "Oikea sivupalkki", + "previewLabel": "Ensimmäisen taulun näkymän reaaliaikainen esikatselu" + }, + "extend": { + "title": "Edistyneet ominaisuudet", + "tabsLabel": "Avustaja, Workshop, ja MCP-asetukset", + "assistant": "Avustaja", + "workshop": "Työpaja", + "assistantSetup": { + "loginTitle": "Ylläpitäjän kirjautuminen vaaditaan", + "loginDescription": "Tarjoajan avaimet ja mallioikeudet ovat oikeutettuja. Valmis asennus, kirjaudu sisään, ja Homarr avaa Assistant-konfiguraation suoraan.", + "loginAction": "Kirjaudu sisään konfiguroidaksesi avustajan" }, - "importSettings": { - "title": "", - "description": "" + "workshopSetup": { + "title": "Homarr Työpaja", + "description": "Selaa yhteisön Mukautettuja widgetejä, tarkasta niiden pyydetyt ominaisuudet, asenna ne ja julkaise oma työsi ilman koodia palvelimien välillä.", + "available": "Saatavilla", + "checking": "Tarkistetaan…", + "unavailable": "Unavailable", + "discoverTitle": "Löydä", + "discoverDescription": "Etsi widgetit rakennettu todellinen itsenäinen työnkulkua.", + "installTitle": "Arvostele ja asenna", + "installDescription": "Katso metatiedot ja konfiguraatio ennen kuin lisäät mitään.", + "publishTitle": "Jaa", + "publishDescription": "Julkaise uudelleen käytettäviä widgetejä takaisin yhteisöön.", + "browse": "Selaa Työpajaa" }, - "boardSelection": { - "title": "", - "description": "", - "action": { - "selectAll": "Valitse kaikki", - "unselectAll": "Tyhjennä valinnat" - } - }, - "summary": { - "title": "", - "description": "", - "action": { - "import": "" - }, - "entities": { - "apps": "", - "boards": "", - "integrations": "Integraatiot", - "credentialUsers": "" - } - }, - "tokenModal": { - "title": "", - "field": { - "token": { - "label": "", - "description": "" - } - }, - "notification": { - "error": { - "title": "", - "message": "" - } - } + "mcpSetup": { + "title": "Homarr MCP", + "description": "Yhdistä Claude, Codex, tai toinen MCP asiakas Homarr's kirjoitetut työkalut. API näppäimet pitää käyttää nimenomaista ja peruutettavissa.", + "endpoint": "Streamable HTTP päätepiste", + "keyTitle": "Kopioi tämä avain nyt", + "keyDescription": "Turvallisuuden vuoksi Homarr ei voi näyttää tätä API-avainta uudelleen.", + "copyKey": "Kopioi API-avain", + "createKey": "Luo MCP API-avain", + "errorTitle": "MCP API-avainta ei voitu luoda", + "loginRequired": "Kirjaudu sisään järjestelmänvalvojana asennuksen jälkeen luodaksesi API-avaimen.", + "configuration": "Asiakkaan asetukset", + "copy": "Kopioi määritys", + "copied": "Kopioitu", + "advanced": "Avaa MCP-työkalut, käyttöoikeudet ja asetukset" } }, - "user": { - "title": "Pääkäyttäjä", - "subtitle": "Määritä pääkäyttäjäsi kirjautumistiedot.", - "notification": { - "success": { - "title": "", - "message": "" - }, - "error": { - "title": "Käyttäjän luonti epäonnistui" - } - } - }, - "group": { - "title": "Ulkoinen ryhmä", - "subtitle": "Määritä ulkoisille käyttäjille käytettävä ryhmä.", - "form": { - "name": { - "label": "Ryhmän nimi", - "description": "Nimen tulee vastata ulkoisen palveluntarjoajan pääkäyttäjäryhmää" - } - } - }, - "settings": { - "title": "Asetukset", - "subtitle": "Määritä palvelimen asetukset." - }, - "integrations": { - "title": "Integraatiot", - "subtitle": "Valitse käyttämäsi palvelut.", - "description": "Valitse integraatiot, jotka haluat yhdistää. Kojelaudallaesi lisätään automaattisesti yhteensopivia widgettejä.", - "action": { - "continue": "Jatka", - "skip": "Ohita toistaiseksi" - }, - "configure": { - "progress": "{current}/{total}", - "skip": "Ohita tämä integraatio", - "finishing": "Kojelautaasi määritetään...", - "error": { - "title": "Määritys epäonnistui", - "message": "Jotain meni pieleen kojelautaasi määritettäessä. Yritä uudelleen." - }, - "helpers": { - "tooltip": "URL-avustajat", - "description": "Nämä apurit pyrkivät arvaamaan palveluidesi URL-osoitteet. Jos tämä ei toimi, kirjoita osoite manuaalisesti." - } - }, - "urlTemplate": { - "label": "Perus-URL", - "placeholder": "homelab.local tai 192.168.1.1", - "hint": "Syötä perusverkkotunnuksesi tai IP-osoite täyttääksesi integraation URL-osoitteet automaattisesti", - "warning": "Asettamalla perusosoitteen nyt, voidaan integraatioiden URL-osoitteet täyttää automaattisesti, joka nopeuttaa käyttöönottoa", - "preview": "esim. {example}", - "mode": { - "subdomain": "Aliverkkotunnus", - "hostPort": "Isäntä:Portti" - } - }, - "docker": { - "detected": "Docker löysi {count} palvelua", - "detectedBreakdown": "{integrations} integraatiota · {apps} sovellusta", - "summary": "Homarr havaitse {apps} sovellusta, joista {integrations} löytyy sisäänrakennettu integraatio", - "appBadge": "Sovellus", - "appSectionLabel": "Ohjauspaneeliin lisättävät sovellukset ({count} valittu)", - "scanning": "Tutkitaan Dockeria...", - "scanningDescription": "Tunnistetaan järjestelmässäsi suoritettavia kontteja" + "review": { + "title": "Yksi alus, joka on rakennettu palvelujesi ympärille", + "description": "Homarr testaa tallentamattomia yhteyksiä, tuo valitut sovellukset, soveltaa ulkonäkö ja asettelut, avaa sitten tarkka taulu, jonka se määritti.", + "board": "Ensimmäinen lauta", + "columns": "Laudan sarakkeet", + "columnsValue": "{count, plural, one {# saraketta} other {# saraketta}}", + "sidebars": "Sivupalkit", + "sidebarsValue": "{count, plural, =0 {None} one {# sidebar} other {# sidebars}}", + "layouts": "Responsiiviset asettelut", + "layoutsValue": "Mobiili + Perus", + "integrations": "Integraatiot", + "integrationsValue": "{count, plural, =0 {Kukaan ei valinnut} one {# integraatio} other {# integraatiota}}", + "apps": "Sovellusten laatat", + "appsValue": "{count, plural, =0 {Aloitussovellukset vain} one {# sovelluslaatta} other {# sovelluslaattoja}}", + "language": "Kieli", + "theme": "Teema", + "themeAuto": "Järjestelmän asetukset", + "themeLight": "Vaalea", + "themeDark": "Tumma", + "colors": "Hallituksen värit", + "radius": "Widgetin säde", + "automaticTitle": "Mitä Homarr luo", + "automaticDescription": "Yhteensopivat widgetit, kuvakkeet, sovelluslinkit, integraatiosuhteet ja reagoiva sijoittelu tulevat jaetusta Homarr-luettelosta. Voit muokata jokaista tulosta myöhemmin.", + "dockerWarningTitle": "Joitakin Docker-tarroja on muutettu asetusten aikana", + "dockerWarningDescription": "{count, plural, one {# valittua Docker tulosta ei voitu soveltaa, koska sen palvelu muuttunut, kohdistettu toinen hallitus tai sen widget oli yhteensopimaton} other {# valittu Docker tuloksia ei voitu soveltaa, koska palvelut muuttunut, kohdistettu toinen hallitus tai niiden widgetit olivat yhteensopimattomia}}.", + "errorTitle": "Lautaa ei voitu rakentaa", + "progress": { + "applying": "Yhteyksien testaaminen ja hallituksen rakentaminen", + "done": "Lautasi on valmis" } }, "finish": { - "title": "Viimeistele määritys", - "subtitle": "Olet valmis aloittamaan!", - "description": "Olet suorittanut käyttöönoton onnistuneesti ja voit nyt aloittaa Homarrin käytön. Valitse seuraava toimenpiteesi:", - "action": { - "goToBoard": "Avaa paneeli {name}", - "createBoard": "Luo ensimmäinen paneelisi", - "inviteUser": "Kutsu muita käyttäjiä", - "docs": "Lue ohjeita" - } + "title": "Ensimmäinen aluksesi on valmis.", + "description": "Homarr yhdisti valitsemasi palaset ja piti loput muokattavissa. Avaa lauta nyt; lyhyt tuotekierros voi näyttää sinulle muokkaustilaa, widgetit, asetteluja ja hakua.", + "openBoard": "Avaa oma lauta", + "manageTitle": "Hallinnoi", + "manageDescription": "Hienosäädä sovelluksia, integraatioita, tauluja, käyttäjiä ja palvelinasetuksia.", + "workshopTitle": "Työpaja", + "workshopDescription": "Löydä ja asenna yhteisö mukautettuja widgetejä.", + "docsTitle": "Opi Homarr", + "docsDescription": "Lue kohdennetut oppaat levyille, widgeteille, integraatioille ja työkaluille." } - }, - "backToStart": "Palaa alkuun" + } }, "user": { - "title": "Käyttäjät", "name": "Käyttäjä", "page": { "login": { @@ -159,12 +249,10 @@ }, "invite": { "title": "Liity Homarriin", + "titleWithAppName": "Liity {appName}", "subtitle": "Tervetuloa Homarriin! Luo käyttäjätunnuksesi", + "subtitleWithAppName": "Tervetuloa {appName}! Luo tilisi", "description": "Sinut kutsui {username}" - }, - "init": { - "title": "Uusi Homarr-asennus", - "subtitle": "Luo ensimmäinen pääkäyttäjä" } }, "field": { @@ -192,12 +280,17 @@ "previousPassword": { "label": "Edellinen salasana" }, - "homeBoard": { - "label": "Kotipaneeli" - }, "pingIconsEnabled": { "label": "Käytä ping-kuvakkeita" }, + "byteUnitSystem": { + "label": "Tietojen kokoyksiköt", + "description": "Valitse, miten Homarr näyttää tavujen koot ja tavut. Bittihinnat käyttävät aina desimaaliyksikköjä.", + "options": { + "binary": "Binääri", + "decimal": "Desimaali" + } + }, "enableRightClickOnWidgets": { "label": "Käytä hiiren kakkospainiketta widgeteissä", "description": "Näytä Homarrin kontekstivalikko, kun napsautat hiiren kakkospainikkeella widgetiä. Poista käytöstä käyttääksesi selaimen oletusvalikkoa (esim. \"Avaa linkki uudessa välilehdessä\")." @@ -247,7 +340,6 @@ } } }, - "create": "Luo käyttäjä", "changePassword": { "label": "Vaihda salasana", "notification": { @@ -259,56 +351,6 @@ } } }, - "changeHomeBoard": { - "notification": { - "success": { - "message": "" - }, - "error": { - "message": "Kotipaneelia ei voitu vaihtaa" - } - } - }, - "changeSearchPreferences": { - "notification": { - "success": { - "message": "Hakuasetukset muutettiin" - }, - "error": { - "message": "Hakuasetuksia ei voitu muuttaa" - } - } - }, - "changeFirstDayOfWeek": { - "notification": { - "success": { - "message": "" - }, - "error": { - "message": "Viikon ensimmäistä päivää ei voitu vaihtaa" - } - } - }, - "changePingIconsEnabled": { - "notification": { - "success": { - "message": "Ping-kuvakkeet otettiin käyttöön" - }, - "error": { - "message": "Ping-kuvakkeita ei voitu kytkeä" - } - } - }, - "changeDdgBangs": { - "notification": { - "success": { - "message": "DuckDuckGon Bangs-komentojen tila vaihdettiin" - }, - "error": { - "message": "DuckDuckGo Bangs -komentojen tilaa ei voitu vaihtaa" - } - } - }, "manageAvatar": { "changeImage": { "label": "Vaihda kuva", @@ -338,16 +380,6 @@ } } }, - "editProfile": { - "notification": { - "success": { - "message": "" - }, - "error": { - "message": "Profiilia ei voitu päivittää" - } - } - }, "delete": { "label": "Poista käyttäjä pysyvästi", "description": "Poistaa käyttäjän sekä kaikki heidän asetuksensa. Paneeleita ei poisteta. Käyttäjälle ei ilmoiteta.", @@ -356,18 +388,13 @@ "select": { "label": "Valitse käyttäjä", "notFound": "" - }, - "transfer": { - "label": "Valitse uusi omistaja" } } }, "group": { - "title": "Ryhmät", "name": "Ryhmä", "search": "Suodata ryhmiä", "field": { - "name": "Nimi", "members": "Jäsenet", "homeBoard": { "label": "Kotipaneeli", @@ -388,6 +415,19 @@ } } }, + "custom-widget": { + "title": "Mukautetut widgetit", + "item": { + "manage": { + "label": "Hallinnoi mukautettuja widgetejä", + "description": "Salli jäsenten luoda, muokata ja poistaa mukautettuja widgetin määrityksiä" + }, + "secret-write": { + "label": "Määritä mukautetut widgetin salaisuudet", + "description": "Salli jäsenten ja heidän API-avaimiensa asettaa salatut mukautetut widgetit" + } + } + }, "app": { "title": "Sovellukset", "item": { @@ -493,6 +533,35 @@ "description": "Sallii jäsenten hallita ja poistaa kaikkia hakukoneita." } } + }, + "matrix": { + "none": "Ei pääsyä", + "impliedHint": "Myönnetty myös: {permissions}", + "grantedViaAdmin": "Järjestelmänvalvojilla on jo tämä. Aseta ylläpitäjä “Ei pääsyä” määrittääksesi sen erikseen.", + "preset": { + "label": "Esiasetukset", + "viewer": "Katsoja", + "viewerDescription": "Vain luku: näytä taulut ja mediat, käytä jo olemassa olevia sovelluksia ja integraatioita.", + "editor": "Muokkain", + "editorDescription": "Päivittäinen hallinta: luo ja muokkaa tauluja, sovelluksia, integraatioita ja hakukoneita.", + "admin": "Ylläpito", + "adminDescription": "Rajoittamaton pääsy jokaiseen ominaisuuteen ja asetukseen, mukaan lukien käyttäjähallinta.", + "custom": "Mukautettu" + }, + "effective": { + "title": "Tehokkaat käyttöoikeudet", + "description": "Tämän ryhmän jäsenet voivat suorittaa täysimittaisia ja päällekkäisiä toimia, epäsuorasti myönnetyt luvat mukaan luettuina.", + "empty": "Käyttöoikeuksia ei ole valittu" + }, + "noneDescription": "Jäsenet eivät pääse tälle alueelle.", + "level": { + "view": "Näytä", + "use": "Käytä", + "interact": "Vuorovaikutus", + "modify": "Muokkaa", + "full": "Täysi" + }, + "capabilityIncluded": "Sisältyy jo ”{level}”" } }, "memberNotice": { @@ -607,21 +676,24 @@ "search": "Suodata sovelluksia", "page": { "list": { - "title": "Sovellukset", + "ariaLabel": "Määritetyt sovellukset", "noResults": { "title": "Sovelluksia ei vielä ole", - "action": "" + "description": "Sovellukset ovat linkkejä palveluihin ja työkaluihin, joita haluat hallituksillasi.", + "action": "", + "filteredTitle": "Yksikään sovellus ei vastaa hakuasi", + "filteredDescription": "Sovelluksia ei löydy \"{search}\". Kokeile toista nimeä tai URL-osoitetta.", + "createOnlyTitle": "Voit lisätä vain sovelluksia", + "createOnlyDescription": "Käyttöoikeutesi antavat sinun luoda sovelluksia, mutta et selaa olemassa olevia sovelluksia. Pyydä järjestelmänvalvojaa sovellusten hallinnan käyttöoikeutta nähdäksesi koko luettelon." } }, "create": { "title": "Uusi sovellus", "notification": { "success": { - "title": "", "message": "" }, "error": { - "title": "", "message": "" } } @@ -630,11 +702,9 @@ "title": "Muokkaa sovellusta", "notification": { "success": { - "title": "Muutokset onnistuivat", "message": "Sovelluksen tallennus onnistui" }, "error": { - "title": "Muutoksia ei voitu ottaa käyttöön", "message": "" } } @@ -644,26 +714,18 @@ "message": "Haluatko varmasti poistaa sovelluksen {name}?", "notification": { "success": { - "title": "", "message": "" }, "error": { - "title": "", "message": "Sovellusta ei voitu poistaa" } } } }, "field": { - "name": { - "label": "Nimi" - }, "description": { "label": "Kuvaus" }, - "url": { - "label": "URL-osoite" - }, "useDifferentUrlForPing": { "checkbox": { "label": "Käytä erillistä ping-osoitetta", @@ -678,34 +740,582 @@ "search": "Suodata sovelluksia", "noResults": "", "action": "Valitse {app}", - "title": "Valitse paneeliin lisättävä sovellus" + "title": "Valitse paneeliin lisättävä sovellus", + "toggle": "Klikkaa valitaksesi", + "selected": "Valittu", + "multiple": "Lisää {count}", + "selectedCount": "{count, plural, one {# valittu} other {# valittu}}", + "appsSelected": "{count, plural, one {# sovellus valittu} other {# sovellusta valittu}}", + "selectMultiple": "Valitse useita", + "cancelMultiple": "Poistu monivalinnasta", + "customApplication": "Mukautettu sovellus", + "application": "Sovellus" }, "create": { "title": "Luo uusi sovellus", "description": "Luo uusi sovellus ", "action": "Avaa sovelluksen luonti" + } + } + }, + "tips": { + "dismiss": "Hylkää vihje", + "multiSelectApps": "Vinkki: Pidä Ctrl / - pohjassa valitaksesi useita sovelluksia kerralla" + }, + "customWidget": { + "secretEntry": { + "title": "Määritä API lähde", + "description": "Vahvista palvelimen URL-osoite ja kirjoita käyttäjätiedot. Homarr salaa salatut arvot, eikä koskaan palannut pyynnön esittäneelle edustajalle.", + "loading": "Ladataan suojattua pyyntöä…", + "applying": "Tätä määritystä otetaan käyttöön… Pidä tämä sivu avoinna.", + "saved": "API-lähde asetettu. Voit sulkea tämän sivun.", + "unavailable": "Pyyntö ei käytettävissä", + "saveError": "API lähdettä ei voi määrittää", + "source": "API-lähde: {name}", + "baseUrl": "Palvelimen URL", + "networkScope": "Verkon käyttö", + "save": "Tallenna API-asetukset", + "expires": "Tämä kertapyyntö päättyy klo {time}." + }, + "page": { + "list": { + "noResults": "Ei vielä mukautettuja widgettejä. Luo ensimmäinen!", + "noDescription": "Ei kuvausta", + "enabled": "Käytössä", + "disabled": "Ei käytössä", + "disabledDescription": "Tämä widget pysyy määritettynä, mutta se ei lataudu millekään alukselle.", + "requestCount": "{count, plural, one {# pyyntö} other {# pyyntöä}}", + "invalidDefinition": "Määritys ei kelpaa", + "migrationRequired": "Muuttoa tarvitaan", + "migrationInstructions": "Open Actions to copy or export the original v1 definition for manual recreation. Voit myös käyttää siirtolaisuuskehikkoa LLM:n avulla. Olemassa olevat lautaharjoittelut jatkavat työskentelyä muuttoliikkeen jälkeen.", + "missingCredentials": "{count, plural, one {Hyvitys puuttuu} other {# käyttäjätunnusta puuttuu}}", + "missingCredentialsDescription": "{count, plural, one {Tämä widget vaatii vielä yhden käyttäjätunnuksen.} other {Tämä widget tarvitsee vielä # käyttäjätunnuksia.}} Valitse tämä merkki määrittääksesi URL-osoitteen ja salatut arvot." }, - "add": "Lisää sovellus" + "create": { + "title": "Luo mukautettu widget", + "subtitle": "Määritä API-URL, todennus ja miten vastaustiedot näytetään." + }, + "tabs": { + "ariaLabel": "Mukautetut widgettien osat", + "installed": "Asennettu", + "workshop": "Työpaja" + } + }, + "action": { + "pasteImportHint": "Liitä täysi mukautettu widget JSON Ctrl+V tai Command+V", + "delete": "Poista mukautettu widget", + "deleteConfirm": "Haluatko varmasti poistaa \"{name}\"? Tätä toimintoa ei voi peruuttaa.", + "export": "Vie", + "duplicate": "Monista", + "aiPrompt": "Suunnittelu tekoälyn kanssa", + "copyAiPrompt": "Kopioi AI-kehoteprompt", + "enable": "Ota käyttöön", + "disable": "Poista käytöstä", + "menu": "Toiminnot", + "downloadSkill": "Näytä Mukautettu Pienoisohjelman Taito", + "publishWorkshop": "Julkaise työpajaan", + "migrate": "Siirrä Mukautettu Widget", + "configureSources": "Määritä lähteet", + "copyLegacyDefinition": "Kopioi alkuperäisen widgetin sisältö", + "exportLegacyDefinition": "Vie alkuperäinen widgetin sisältö", + "copyMigrationPrompt": "Kopioi LLM-siirtokehotus", + "pasteMigration": "Liitä siirretty widget", + "importMigration": "Tuo muutettu JSON tiedosto" + }, + "sourceSetupDialog": { + "title": "Määritä widgetin lähteet", + "description": "Tarkista, missä tämä widget yhdistää ja korvaa sen salatut käyttäjätunnukset.", + "credentialsRequired": "Pyynnöt epäonnistuvat, kunnes vaaditut tiedot on lisätty.", + "save": "Tallenna asetukset" + }, + "field": { + "description": "Kuvaus" + }, + "editor": { + "errorBoundary": { + "title": "Jokin meni pieleen" + }, + "action": { + "components": "Komponentit", + "format": "Muoto", + "insertStarter": "Insert starter", + "redo": "Toista", + "copied": "Kopioitu", + "schema": "Skeema" + }, + "reference": { + "minimal": "Pieni esimerkki", + "full": "Täydellinen esimerkki" + }, + "componentReference": { + "search": "Etsi komponentteja", + "empty": "Ei vastaavia komponentteja", + "count": "{count, number} komponentteja saatavilla" + }, + "status": { + "errors": "{count, number} virheet", + "warnings": "{count, number} varoitukset", + "ready": "Ongelmia ei löytynyt", + "position": "Ln {line, number}, Col {column, number}", + "characters": "{count, number} merkkiä", + "charactersWithLimit": "{count, number} / {limit, number}" + }, + "diagnostics": { + "title": "Mallin diagnostiikka", + "line": "Rivi {line, number}", + "ast": "{value}", + "bindingTypeConflict": "Syöte \"{value}\" on jaettu kontrollien kanssa yhteensopimattomilla arvotyypeillä.", + "runtimeBindingTypeConflict": "Syöte \"{value}\" on sidottu sekä tyyppiin {firstType} että tyyppiin {secondType}.", + "dynamicRequestId": "Tarvitaan kirjaimellinen pyyntöID. Dynaaminen pyyntö tunnuksia ei hyväksytä.", + "dynamicInputBinding": "Sopiva syötteen nimi vaaditaan sitomiselle.", + "inlineRequestProps": "Verkon komponentit hyväksyvät pyynnötId ja params; inline URL, menetelmä, otsikko ja kehon rekvisiitta on estetty.", + "invalidRequestManifest": "Nimettyjen pyyntöjen on oltava kelvollinen pyyntökartta. {value}", + "missingRequestId": "Tämä verkkokomponentti vaatii kirjaimellisen pyynnön.", + "templateEmpty": "Syötä JSX-malli.", + "templateTooLong": "Malli ylittää 50,000 merkin rajan.", + "unknownRequest": "Ei nimettyä pyyntöä tunnisteella \"{value}\" on olemassa." + } + }, + "workbench": { + "configure": "Määritä", + "sectionNavigation": "Mukautetut widgettien osat", + "widgetPreview": "Widgetin esikatselu", + "generalInformation": "Yleiset tiedot", + "invalidWidget": "Virheellinen widget", + "section": { + "general": "Yleiset", + "sources": "API lähteet", + "requests": "Pyynnöt", + "options": "Valinnat", + "jsx": "JSX", + "preview": "Esikatselu" + }, + "status": { + "unsaved": "Tallentamattomia muutoksia", + "invalid": "Tarvitsee huomiota", + "ready": "Valmis" + }, + "saveError": { + "title": "Widgetiä ei tallennettu", + "description": "Korjaa nämä validointivirheet ja tallenna uudelleen.", + "more": "Työtilassa näytetään vielä +{count} virhettä.", + "errors": "Vahvistusvirheet", + "copy": "Kopioi virheet", + "copied": "Virheet kopioitu" + }, + "action": { + "preview": "Testaa ja esikatsele", + "previewLoading": "Testataan pyyntöjä" + }, + "requests": { + "title": "Nimetyt kyselyt ja toiminnot", + "label": "Pyynnöt", + "description": "Kyselyjen lataustiedot; toiminnot suoritetaan vain käyttäjän vuorovaikutuksen jälkeen. Mikä tahansa HTTP-menetelmä on voimassa kumpaankin suuntaan." + }, + "options": { + "title": "Widgetin asetukset" + }, + "builder": { + "advancedManifest": "Kehittynyt raaka manifesti", + "advancedJson": "Edistynyt manifest JSON", + "manifestFilename": "widget.json", + "request": "Pyydä {count, number}", + "requestId": "Pyydä ID", + "type": "Tyyppi", + "method": "Menetelmä", + "source": "API lähde", + "run": "Suorita", + "runLoad": "Kun widgetin kuormitus", + "runManual": "AliFetchistä", + "permission": "Käyttöoikeus", + "path": "Polku", + "pathDescription": "Käytä '{option:name}' widgetin valintoihin ja '{param:name}' invocation arvoihin.", + "requestDetails": "Kysely, ruumis ja käyttäytyminen", + "queryValues": "Kyselyn arvot", + "queryKey": "Kyselyn avain", + "queryKeyInvalid": "Käytä yksilöllistä tunnusta, joka alkaa kirjaimella ja sisältää vain kirjaimia, numeroita, - tai _.", + "valueSource": "Arvon lähde", + "literal": "Kirjaimellinen", + "widgetOption": "Widgetin valinta", + "invocationParameter": "Kutsumisen parametri", + "option": "Valinta", + "parameterName": "Parametrin nimi", + "value": "Arvo", + "removeQueryValue": "Poista kyselyn arvo", + "addQueryValue": "Lisää kyselyn arvo", + "jsonBody": "JSON runko", + "jsonBodyDescription": "Valinnainen. Lisää $option- ja $param-viittauksia mille tahansa syvyystasolle.", + "insertOptionReference": "Lisää vaihtoehtoviite", + "insertParameterReference": "Lisää parametrin viite", + "confirmation": "Vahvistus viesti", + "invalidation": "Päivitys onnistumisen jälkeen", + "invalidationDescription": "Pilkulla eroteltujen kyselyn tunnukset", + "noAuth": "Lähetä ilman lähdetunnistusta", + "moveRequestUp": "Siirrä pyyntö ylös", + "moveRequestDown": "Siirrä pyyntö alas", + "removeRequest": "Poista pyyntö", + "addRequest": "Lisää pyyntö", + "optionName": "Valinnan nimi", + "label": "Tunniste", + "control": "Ohjaus", + "description": "Kuvaus", + "default": "Oletus", + "optionDetails": "Rajoitukset ja dynaamiset valinnat", + "minimum": "Minimi", + "maximum": "Maksimi", + "step": "Vaihe", + "choiceLabel": "Valinnan tunnus", + "choiceValue": "Valinnan arvo", + "newChoice": "Uusi valinta", + "addChoice": "Lisää valinta", + "removeChoice": "Poista valinta", + "choicesRequest": "Lataa valinnat pyynnöstä", + "itemsPath": "Kohteiden polku", + "itemsPathPlaceholder": "kohdat (valinnainen)", + "valuePath": "Arvon polku", + "labelPath": "Tunnisteen polku", + "group": "Ryhmä", + "advancedOption": "Edistynyt vaihtoehto", + "moveOptionUp": "Siirrä asetukset ylös", + "moveOptionDown": "Siirrä vaihtoehto alaspäin", + "removeOption": "Poista vaihtoehto", + "addOption": "Lisää vaihtoehto", + "invalidJson": "Virheellinen JSON", + "invalidWidget": "Virheellinen widget" + }, + "jsx": { + "title": "JSX pohja", + "label": "Malli" + }, + "sources": { + "title": "API-lähteet ja tunnistetiedot", + "newName": "API {count, number}", + "duplicateSourceId": "API-lähdetunnusten on oltava ainutlaatuisia.", + "credentialRemoved": "Käyttöoikeustiedot poistettu", + "credentialRemovedDescription": "Tallennettu arvo poistettiin.", + "primary": "Ensisijainen API", + "id": "Lähteen Tunnus", + "name": "Työn nimi", + "baseUrl": "Perus-URL", + "baseUrlError": { + "invalid": "Anna täydellinen URL-osoite.", + "protocol": "Käytä HTTP- tai HTTPS URL-osoitetta.", + "credentials": "Poista käyttäjätunnus ja salasana tästä URL-osoitteesta. Määritä käyttäjätunnukset alla sen sijaan.", + "queryOrFragment": "Poista kyselyn merkkijono tai fragmentti tästä perusosoitteesta. Lisää kyselyn arvot nimettyyn pyyntöön." + }, + "networkScope": "Verkon käyttö", + "authentication": "Tunnistautuminen", + "headerName": "Otsikon nimi", + "queryParameter": "Kyselyn parametri", + "configured": "Määritetty – kirjoita korvaaja", + "clear": "Tyhjennä", + "remove": "Poista lähde ja sen pyynnöt", + "advanced": "Lisäasetukset", + "add": "Lisää toinen API-lähde", + "sourceType": "Integraatio", + "manualSource": "HTTP API", + "existingIntegration": "Nykyinen integraatio", + "integrationType": "Integraation tyyppi", + "selectIntegration": "Määritetty integraatio", + "noIntegrations": "Vastaavia integraatioita ei ole saatavilla", + "integrationUnavailable": "Valittu integraatio ei ole enää käytettävissä. Valitse toinen integraatio.", + "integrationDescription": "Käyttää tallennetun integraation URL-osoitetta ja käyttäjätunnisteita. Muutokset ovat käytössä automaattisesti. Pyyntöjen suorittaminen vaatii täyden käyttöoikeuden." + }, + "ai": { + "title": "Luo tai korjaa millä tahansa tekoälyllä", + "description": "Lisää API docs URL ensimmäiseksi, jos sinulla on yksi. Suorita korjauksia varten esikatselu, jos mahdollista. Kopioi kehotus mihin tahansa AI; se voi pyytää puuttuvia tietoja. Liitä lopullinen JSON tähän.", + "request": "Mitä tämän widgetin pitäisi tehdä?", + "documentationUrl": "API-dokumentaation URL (valinnainen)", + "paste": "Liitä", + "response": "tekoälyn vastaus", + "manualCopyDescription": "Leikepöydän käyttö ei ole käytettävissä. Valitse alla oleva kehotus ja kopioi se manuaalisesti.", + "manualPasteDescription": "Leikepöydän käyttö ei ole käytettävissä tai kopioitu vastaus tarvitsee korjausta. Liitä AI:n JSON vastaus tähän.", + "selectAll": "Valitse kaikki", + "loadResponse": "Lataa vastaus", + "loaded": "Widget ladattu muokkaimeen", + "invalidResponse": "Leikepöytä ei sisällä kelvollista v2 widgetiä", + "invalidResponseDetail": "AI-vastaus on virheellinen: {message}" + }, + "preview": { + "invalid": "Korjaa validointivirheet tämän widgetin esikatselussa.", + "fixtureError": "Liitteen esikatselu virhe", + "requestData": "Pyydä tietoja", + "status": { + "idle": "Pyyntöjä ei ole testattu", + "loading": "Testataan pyyntöjä", + "success": "Kaikki latauspyynnöt onnistui", + "error": "Yksi tai useampi latauspyyntö epäonnistui" + }, + "result": { + "loading": { + "title": "Testataan API-pyyntöjä", + "description": "Homarr on luomassa esikatselua ja lataamassa widgetin tietoja." + }, + "success": { + "title": "Esikatselu valmis", + "description": "{succeeded, plural, =0 {Tällä widgetillä ei ole latauspyyntöjä.} one {# latauspyyntö onnistui.} other {# latauspyyntöä onnistui.}} Avaa tiedot tarkastaaksesi vastauksen." + }, + "error": { + "title": "Esikatselu valmistui pyyntövirheiden kanssa", + "description": "{succeeded, number} onnistui ja {failed, number} epäonnistui. Avoimen datan tiedot ja virhetiedot." + } + }, + "instanceOptions": "Instanssin asetukset", + "liveActions": "Suorita toiminnot määritettyä APIa vastaan", + "liveActionsDescription": "Pois päältä on turvallinen simulointi. Tämän ottaminen käyttöön vaikuttaa todelliseen palveluun.", + "noActions": "Toimia ei ole määritelty.", + "containedFailures": "Runtime epäonnistumiset sisältyvät tämän widgetin. Pyydä lehtien koskaan sisältävät salaisia arvoja.", + "validation": { + "title": "Vahvistus", + "ready": "Widgetin määritelmä on voimassa." + }, + "accessibility": { + "title": "Esteettömyyden tarkastukset", + "ready": "Yhteisiä esteettömyyspuutteita ei havaittu.", + "pending": "Esteettömyystarkistukset suoritetaan, kun widgetin määritelmä on voimassa.", + "imageAlt": "Lisää tekstiä jokaiseen kuvaan käyttämällä tyhjää alttaria vain koristekuviin.", + "actionIconLabel": "Lisää aria-etiketti tai otsikko jokaiseen ActionIcon.", + "inputLabel": "Lisää jokaiseen syötteeseen näkyvä tunniste tai saavutettavissa oleva nimi." + }, + "journal": "Redacted request journal", + "actionParameters": "Toiminnan parametrit (JSON)", + "invalidParameters": "Käytä ilmoitettua merkkijonoa, numeroa ja totuusparametrityyppejä.", + "runDestructive": "Suorita tuhoisa toiminta", + "runAction": "Suorita toiminto", + "deleteConfirmation": "Tämä esikatselutoiminto muuttaa etädataa määritetyn APIn kautta.", + "simulated": "Simuloitu toiminta", + "httpStatus": "HTTP {status, number}", + "tab": { + "widget": "Pienoisohjelma", + "data": "Tiedot", + "options": "Valinnat", + "state": "Tila", + "actions": "Toiminnot", + "diagnostics": "Diagnostiikka" + }, + "size": { + "compact": "Kompakti", + "standard": "Normaali", + "wide": "Laaja" + }, + "fixture": { + "live": "Suora", + "loading": "Ladataan", + "empty": "Tyhjä", + "error": "Virhe" + } + } + }, + "preview": { + "request": { + "permission": { + "view": "Näytä", + "modify": "Muokkaa", + "full": "Täysi" + } + } + }, + "notification": { + "created": "Widget \"{name}\" luotiin onnistuneesti.", + "updated": "Widget \"{name}\" päivitettiin onnistuneesti.", + "deleted": "Widget \"{name}\" poistettiin.", + "imported": "Widget tuotiin onnistuneesti.", + "migrated": "Vanha widget siirretty onnistuneesti. Olemassa olevat lautaharjoittelut käyttävät nyt v2 määritelmää.", + "migrationError": "Ei voitu siirtää perintö widget. Varmista, että tiedosto käyttää homarr-custom-widget-v2 kaavio.", + "legacyDefinitionCopied": "Alkuperäinen widgetin sisältö kopioitu. Tallennetut käyttöoikeusarvot eivät sisälly hintaan.", + "legacyDefinitionCopyError": "Alkuperäisen widgetin sisällön kopiointi epäonnistui.", + "migrationPromptCopied": "Punaistettu muuttokehä kopioitiin. Liitä se LLM, kopioi sen yhden JSON vastaus, sitten valita Liitä siirretty widget täältä.", + "migrationPromptCopyError": "Siirtokehotuksen kopiointi epäonnistui.", + "sourcesConfigured": "Widgetin lähteet ja käyttöoikeustiedot tallennettu.", + "sourceConfigurationError": "Widgetin lähteiden määrittäminen epäonnistui.", + "aiPromptCopiedWithCount": "AI pyytää kopioida leikepöydälle ({count, number} merkkejä).", + "aiPromptCopyError": "Kehotepromptin kopiointi leikepöydälle epäonnistui. Selaimesi ei ehkä tue tätä ominaisuutta.", + "aiPromptSent": "Kysy lähetetty. Voit jatkaa muokkausta samalla kun avustaja toimii taustalla.", + "updateError": "Widgetin päivitys epäonnistui. Muutoksiasi ei tallennettu.", + "importError": "Widgetin tuonti epäonnistui. Varmista, että tiedosto on kelvollinen mukautetun widgetin JSON-vienti.", + "exportError": "Widgetin vienti epäonnistui.", + "duplicated": "Widget \"{name}\" kopioitiin.", + "duplicateError": "Widgetin kopiointi epäonnistui.", + "toggleError": "Widgetin tilan vaihto epäonnistui.", + "deleteError": "Widgetin poisto epäonnistui.", + "previewError": "Esikatselun nouto epäonnistui. Tarkista URL ja yritä uudelleen." + }, + "importReview": { + "title": "Arvostele mukautettu widgetin tuonti", + "description": "Tarkista, missä tämä widgetti yhdistää ja mitä hallituksen ohjaimet vaativat ennen sen tuontia.", + "migrationTitle": "Siirretyn v2:n vaihtaminen uudelleen", + "migrationDescription": "Tarkista ja vahvista tämä luotu v2 määritelmä. Vahvistaminen atomisesti korvaa säilötty v1 tietueen pitäen olemassa hallituksen sijainnit liittyvät samaan widget ID.", + "fileLabel": "Valitse mukautettu widget JSON tiedosto", + "name": "Työn nimi", + "origin": "Perus alkuperä", + "authentication": "Tunnistautuminen", + "networkScope": "Verkon soveltamisala", + "methods": "HTTP-menetelmät", + "permissions": "Tarvittavat lautan käyttöoikeudet", + "sourceSetup": { + "title": "Määritä API-lähteet", + "description": "Vahvista missä tämä widgetti yhdistää ja lisää käyttäjätietoja. Yksityiset ja palautuksen osoitteet ovat erityisiä Homarr-asennuksellesi.", + "suggestedUrl": "Ehdotettu URL", + "confirmUrl": "Vahvistan, että tämä palvelimen URL on oikea Homarr asennukseni", + "ready": "URL valmis", + "needsUrl": "Vahvista URL", + "credentialsMissing": "Käyttäjätunnukset puuttuvat", + "credentialsOptional": "Voit asentaa ilman tunnuksia ja määrittää ne myöhemmin, mutta pyynnöt epäonnistuvat, kunnes ne lisätään." + }, + "actionWarning": { + "title": "Tämä widget voi muuttaa etätietoja", + "description": "Tarkista kaikki nimetyt toimet, perityt tunnistetiedot ja tuhoisa vahvistus tuonnin jälkeen. Salaisuudet eivät sisälly tiedostoon." + }, + "cancel": "Peruuta tuonti", + "confirm": "Tuo widgetti", + "confirmMigration": "Vahvista v2:n korvaaminen" + }, + "secret": { + "apiKey": "API avain tai tunnus", + "username": "Käyttäjätunnus", + "password": "Salasana", + "savedPlaceholder": "••••••• (tallennettu, jätä tyhjäksi säilyttääksesi)" + } + }, + "workshop": { + "title": "Työpaja", + "browseWorkshop": "Selaa Työpajaa", + "openCommunity": "Avaa Työpaja", + "openOnWorkshop": "Avaa {title} Workshop -sivustolla", + "back": "Takaisin työpajaan", + "search": "Hae widgettejä", + "searchCss": "Etsi CSS-teemoja", + "sort": "Järjestä", + "sortTop": "Paras pisteytetty", + "sortNewest": "Uusin", + "listAriaLabel": "Huoltopisteen widgetit", + "listAriaLabelCss": "Workshopin CSS-teemat", + "empty": "Mikään widgetit eivät vastaa tätä hakua.", + "emptyDescription": "Työpajaan on julkaistu yhteisön widgetit täällä.", + "emptyFilteredTitle": "Yksikään widgetit eivät täsmää tähän hakuun", + "emptyFilteredDescription": "Ei korjaamowidgetin osumia \"{search}\".", + "emptyCss": "Mikään CSS-teemoista ei täsmää tähän hakuun.", + "unavailableTitle": "Homarr Workshop ei näytä olevan käytettävissä", + "unavailable": "Yhteisön palvelu voi olla tilapäisesti alhaalla. Yritä hetken kuluttua uudelleen. Asennetut widgetit eivät vaikuta siihen.", + "loadError": "Tätä lähetystä ei voitu ladata.", + "noDescription": "Ei kuvausta", + "author": "esittäjä: {name}", + "communityMember": "Yhteisön jäsen", + "outdated": "Vanhentunut", + "outdatedWarning": "Kirjoittaja merkitsi tämän lähetyksen vanhentuneeksi. Tarkista se huolellisesti ennen tuontia.", + "score": "Pisteet: {count, number}", + "upvote": "Upvote", + "downvote": "Alaäänestys", + "voteError": "Äänestystä ei voitu tallentaa.", + "signIn": "Kirjaudu sisään GitHubilla", + "signInError": "GitHub kirjautuminen epäonnistui. Tarkista, että Workshop OAuth on määritetty ja ponnahdusikkunat ovat sallittuja.", + "signOut": "Kirjaudu ulos", + "signInHint": "Kirjaudu sisään äänestääksesi tai raportoidaksesi. Asentaminen ei vaadi Workshop-tiliä.", + "securityNotice": "Korjaamowidgetit voivat soittaa ilmoitettuihin API-lähteisiin ja suorittaa ilmoitetut toiminnot tunnuksilla, joita määrität paikallisesti. Salaisuudet eivät koskaan sisälly hintaan.", + "securityNoticeCss": "Yhteisön CSS voi muuttaa hallituksen ulkonäköä ja käytettävyyttä. Tarkista se ennen tuontia; mitään ei tallenneta, ennen kuin tallennat tauluasetuksia.", + "install": "Asenna", + "installReviewTitle": "Tarkista ennen asennusta", + "installError": "Tätä widgetiä ei voi asentaa", + "installErrorDescription": "Korjaamon lähetys ei ole kelvollinen Custom JSX v2 widget.", + "useCss": "Import CSS", + "importCss": "Tuo CSS Workshopista", + "importCssConfirm": "Korvaa nykyinen mukautettu CSS \"{title}\"? Mitään ei tallenneta, ennen kuin tallennat taulun asetukset.", + "screenshotAlt": "{title} kuvakaappaus {count, number}", + "screenshotViewer": "{title} kuvakaappauksen katselin", + "screenshotsLabel": "{title} kuvakaappausta", + "zoomScreenshot": "Näytä koko koko", + "previousScreenshot": "Edellinen kuvakaappaus", + "nextScreenshot": "Seuraava kuvakaappaus", + "showScreenshotThumbnails": "Näytä kuvakaappauksen pikkukuvat", + "hideScreenshotThumbnails": "Piilota kuvakaappaukset", + "closeScreenshotViewer": "Sulje kuvakaappauksen katsoja", + "technicalDetails": "Tekniset tiedot", + "sourceCode": "Huoltopisteen merkintä", + "export": "Vie", + "report": "Raportoi", + "reportTitle": "Raportin toimittaminen", + "reportReason": "Syy", + "reportExplanation": "Mitä työpajan moderaattoreiden pitäisi tietää?", + "reportSend": "Lähetä raportti", + "reportSent": "Raportti lähetetty", + "reportSentDescription": "Huoltopalvelun valvojat voivat nyt tarkistaa tämän lähetyksen.", + "reportCount": "{count, plural, one {# raportti} other {# raporttia}}", + "reportWarning": "{count, plural, one {Tässä artikkelissa on # avoin yhteisön raportti.} other {Tässä artikkelissa on # avointa yhteisön raporttia.}} Se pysyy asennettavana, mutta sen sisältö kannattaa tarkistaa ensin.", + "reportVisibility": "Raportin tiedot näkyvät vain tämän viestin kirjoittajalle ja korjaamon ylläpitäjille.", + "reportCategory": { + "outdated": "Vanhentunut tai vanhentunut", + "malicious": "Haitallinen", + "spam": "Roskaposti", + "copyright": "Tekijänoikeus", + "inappropriate": "Epäasianmukainen", + "other": "Muut" + }, + "publish": { + "title": "Julkaise työpajaan", + "introTitle": "Jaa tämä widget yhteisön kanssa", + "introDescription": "Homarr vie käyttöoikeus-vapaa kopio nykyisen widget. Lisää selkeä listaus yksityiskohdat jotta ihmiset tietävät, mitä se tekee ennen sen asentamista.", + "listingDetails": "Huoltopisteen listaus", + "listingDetailsDescription": "Nämä tiedot näkyvät julkisesti vietyjen widgettien määritelmän rinnalla.", + "success": "Julkaistu välittömästi. Yhteisön jäsenet voivat nyt asentaa ja raportoida tämän widgetin.", + "successTitle": "Widgetisi on suorassa", + "manageDescription": "Avaa lähetys päivittääksesi sen luettelon, tarkistaaksesi raportteja, merkitse se vanhentuneeksi tai poista se. Lähetysten hallinta käsitellään suoraan Workshop -sivustolla.", + "viewSubmission": "Näytä ja hallitse lähetystä", + "done": "Valmis", + "signInHint": "Kirjaudu sisään julkaistaksesi oman Workshop identiteetti.", + "titleField": "Otsikko", + "descriptionField": "Kuvaus", + "screenshots": "Kuvakaappaukset", + "screenshotsDescription": "Enintään viisi PNG-, JPEG- tai WebP-kuvaa", + "screenshotsPlaceholder": "Valitse kuvakaappaukset", + "invalidScreenshot": "Käytä PNG-, JPEG- tai WebP-kuvia enintään {maxSize} kappaletta.", + "privateSourceWarning": "Tämä widget sisältää yksityisen lähdekoodin URL-osoitteet: {sources}. Korvaa henkilökohtaiset isännät tai IP-osoitteet turvallisilla palvelupaikoilla ennen julkaisua.", + "reviewSourcesTitle": "Tarkista yksityisen lähdekoodin URL-osoitteet", + "privateSourceConfirmation": "Olen tarkastellut näitä lähteen URL-osoitteita eivätkä ne paljasta yksityistä infrastruktuuria koskevia tietoja", + "action": "Julkaise nyt", + "publicationNote": "Julkaisu on välitön. Voit hallita lähetystä jälkeenpäin Workshopissa.", + "definitionChanged": "Widget muuttui, kun julkaisu oli valmis. Tarkista sen yksityisen lähdekoodin URL-osoitteita uudelleen ja yritä uudelleen.", + "error": "Julkaisu epäonnistui" } }, "integration": { + "completion": { + "modalTitle": "Palvelu valmis", + "title": "{name} on yhdistetty", + "description": "Yhteys läpäisi testinsä. Valitse mitä näytetään tällä sivulla seuraavaksi.", + "connectionReady": "Palvelu yhteys on valmis", + "appReady": "Sovelluksen pikakuvake on valmis", + "compatibleWidgets": "{count, plural, =0 {Ei yhteensopivia widgetejä} one {# yhteensopiva widget} other {# yhteensopivia widgetejä}} saatavilla", + "chooseWidget": "Valitse widget", + "recipes": { + "title": "Suositeltu tälle lautakunnalle", + "description": "Perustuu liitettyihin palveluihin ja widgeteihin jo tällä aluksella.", + "newConnectionReason": "Nyt saatavilla kautta {integration}", + "existingConnectionReason": "Toimii jo yhdistämäsi palvelun kanssa", + "dismiss": "Hylkää tämän palvelun suositukset tällä aluksella" + } + }, "page": { "list": { - "title": "Integraatiot", + "ariaLabel": "Määritetyt integraatiot", "search": "Suodata integraatioita", + "scopedNote": "Näytetään vain integraatiot, joita voit hallita.", "noResults": { - "title": "Integraatioita ei vielä ole" + "title": "Integraatioita ei vielä ole", + "description": "Yhdistä palvelu käyttääksesi sen dataa ja toimintoja Homarr-widgeteissä.", + "action": "Luo ensimmäinen integrointisi", + "filteredTitle": "Hakuasi vastaavia integraatioita ei löytynyt", + "filteredDescription": "Mikään integraatio ei täsmää \"{search}\". Kokeile toista nimeä, tyyppiä tai URL-osoitetta.", + "createOnlyTitle": "Voit lisätä vain integraatioita", + "createOnlyDescription": "Käyttöoikeutesi antavat sinun luoda integraatioita, mutta et hallitse olemassa olevia integraatioita. Pyydä järjestelmänvalvojaa päästäksesi tarvitsemiisi." } }, "create": { "title": "Uusi {name} integraatio", "notification": { "success": { - "title": "Luonti onnistui", "message": "Integraatio luotiin" }, "error": { - "title": "Luonti epäonnistui", "message": "Integraatiota ei voitu luoda" } }, @@ -729,11 +1339,9 @@ "title": "Muokkaa integraatiota {name}", "notification": { "success": { - "title": "Muutokset onnistuivat", "message": "Integraation tallennus onnistui" }, "error": { - "title": "Muutoksia ei voitu ottaa käyttöön", "message": "Integraatiota ei voitu tallentaa" } }, @@ -750,23 +1358,15 @@ "message": "Haluatko varmasti poistaa integraation {name}?", "notification": { "success": { - "title": "Poisto onnistui", "message": "Integraatio poistettiin" }, "error": { - "title": "Poisto epäonnistui", "message": "Integraatiota ei voitu poistaa" } } } }, "field": { - "name": { - "label": "Nimi" - }, - "url": { - "label": "URL-osoite" - }, "attemptSearchEngineCreation": { "label": "Luo hakukone", "description": "Integraatiota \"{kind}\" voidaan käyttää hakukoneiden kanssa. Merkitse tämä määrittääksesi hakukoneen automaattisesti." @@ -778,6 +1378,10 @@ "label": "Luo sovellus", "description": "Luo sovellus, jolla on sama nimi ja kuvake kuin integraatiolla. Jätä syötekenttä tyhjäksi luodaksesi sovelluksen integraation URL-osoitteella." }, + "linkApp": { + "label": "Linkitä olemassa oleva sovellus", + "description": "Yhdistä tämä integraatio sovellukseen, jota voit jo käyttää." + }, "appHref": { "placeholder": "Mukautettu sovelluksen URL-osoite" }, @@ -791,7 +1395,11 @@ "grid": { "widgetCount": "{count} widgettiä", "noWidgets": "Widgettejä ei ole", - "detected": "Havaittu Dockerilla" + "detected": "Havaittu Dockerilla", + "connected": "{count, plural, one {# yhdistetty} other {# yhdistetty}}", + "tiedWidgets": "Sidotetut widgetit", + "more": "+{count} lisää", + "loadError": "Integraatioita ei voitu ladata. Yritä uudelleen ennen uuden yhteyden luomista." }, "category": { "dnsHole": "DNS", @@ -822,7 +1430,10 @@ "analytics": "Analytiikka", "vpn": "VPN", "mediaLibrary": "Mediakirjasto", - "uptimeMonitoring": "Käytettävyysvalvonta" + "uptimeMonitoring": "Käytettävyysvalvonta", + "beszel": "Beszel", + "systemMonitoring": "Järjestelmän Valvonta", + "security": "Suojaus" }, "testConnection": { "action": { @@ -1107,6 +1718,22 @@ "slug": { "label": "Tilasivun polkutunnus", "newLabel": "Uusi tilasivun polkutunnus" + }, + "wazuhIndexerUrl": { + "label": "Indeksoijan URL", + "newLabel": "Uusi indeksoija URL-osoite" + }, + "wazuhIndexerUsername": { + "label": "Indeksoijan käyttäjänimi", + "newLabel": "Uusi indeksoijan käyttäjänimi" + }, + "wazuhIndexerPassword": { + "label": "Indeksoijan salasana", + "newLabel": "Uusi indeksoijan salasana" + }, + "wazuhDashboardUrl": { + "label": "Dashboardin URL (valinnainen)", + "newLabel": "Uusi dashboardin URL" } } }, @@ -1115,54 +1742,19 @@ "interact": "Integraatioiden ohjaus", "full": "Integraatioiden hallinta" }, - "audiobookshelf": { - "name": "Audiobookshelf", - "description": "Itsepalveluperiaatteella toimiva äänikirja- ja podcast-palvelin" - }, - "navidrome": { - "name": "Navidrome", - "description": "Itsepalveluperiaatteella toimiva musiikin suoratoistopalvelin Subsonic API -yhteensopivuudella" - }, - "uptimeKuma": { - "name": "Uptime Kuma", - "description": "Itsepalveluperiaatteella toimiva käytettävyysvalvonta julkisilla tilasivuilla", - "secret": { - "slug": { - "description": "Julkisen tilasivusi polkutunnus. Oletuksena \"default\", jos ei asetettu." - }, - "apiKey": { - "description": "Valinnainen API-avain todennettua /metrics-käyttöä varten" - } - } - }, - "traefik": { - "name": "Traefik", - "description": "Pilvinatiivi käänteinen välityspalvelin ja kuormantasaaja" - }, - "paperlessNgx": { - "name": "Paperless-ngx", - "description": "Asiakirjojen hallintajärjestelmä skannattujen dokumenttien arkistointiin ja järjestelyyn" - }, - "patchmon": { - "name": "PatchMon", - "description": "Paikkaustenhallinta ja -valvonta Linux-isännille" - }, - "bazarr": { - "name": "Bazarr", - "description": "Sonarrin ja Radarrin kumppanisovellus, joka hallinnoi ja lataa tekstityksiä" - }, - "wud": { - "name": "Mikä Ylös Docker", - "description": "Tarkkaile missä Docker-säiliöissä on saatavilla kuvapäivityksiä" + "llamacpp": { + "name": "llama.cpp", + "description": "Seurata paikallista llama.cpp llama-palvelinta: terveys, malli ja sukupolven mittareita" } }, "media": { "plural": "Mediatiedostot", "search": "Suodata mediatiedostoja", "field": { - "name": "Nimi", + "preview": "Esikatselu", "size": "Koko", - "creator": "Lisääjä" + "creator": "Lisääjä", + "actions": "Toiminnot" }, "action": { "upload": { @@ -1190,10 +1782,12 @@ } }, "copy": { - "label": "" + "label": "", + "labelNamed": "Kopioi kohteen {name} URL-osoite" }, "open": { - "label": "Avaa mediatiedosto" + "label": "Avaa mediatiedosto", + "labelNamed": "Avaa {name}" } }, "noResults": { @@ -1208,7 +1802,6 @@ "add": "Lisää", "apply": "", "backToOverview": "Palaa yleisnäkymään", - "skip": "Ohita", "change": "Vaihda", "create": "Luo", "createAnother": "Luo ja aloita uudelleen", @@ -1231,16 +1824,31 @@ "tryAgain": "", "loading": "", "show": "Näytä", - "hide": "Piilota" + "hide": "Piilota", + "undo": "Kumoa", + "editNamed": "Muokkaa {name}", + "deleteNamed": "Poista {name}", + "clearSearch": "Tyhjennä haku", + "copy": "Kopioi", + "copied": "Kopioitu", + "refresh": "Päivitä" + }, + "pagination": { + "pageOf": "Sivu {page} / {totalPages}" }, "here": "", + "serviceUrlTemplate": { + "serverTitle": "Tavallinen palvelimen osoite", + "urlModeLabel": "Palvelun osoitteen malli", + "hostPort": "Sama isäntä, eri portit", + "subdomain": "Yksi aliverkkotunnus per palvelu", + "path": "Yksi polku per palvelu" + }, "iconPicker": { "label": "Kuvakkeen URL-osoite", + "description": "Etsi kirjastosta, liitä kuvan URL-osoite tai lataa tiedosto.", "header": "Etsi {countIcons} kuvaa nimen mukaan", "headerLoading": "Hae kuvia nimen mukaan", - "noResults": "Ei kuvakkeita haulla \"{search}\".", - "error": "Kuvakkeiden lataaminen epäonnistui.", - "description": "Etsi kirjastosta, liitä kuvan URL-osoite tai lataa tiedosto.", "clear": "Tyhjennä kuva", "uploadImage": "Lataa kuva", "results": "Haun tulokset", @@ -1249,7 +1857,9 @@ "otherImages": "Muut kuvat", "urlLoading": "Tarkistetaan kuvaa…", "urlReady": "Kuva on valmis käytettäväksi", - "urlError": "Kuvaa ei voitu ladata. Tarkista URL-osoite ja yritä uudelleen." + "urlError": "Kuvaa ei voitu ladata. Tarkista URL-osoite ja yritä uudelleen.", + "noResults": "Ei kuvakkeita haulla \"{search}\".", + "error": "Kuvakkeiden lataaminen epäonnistui." }, "colorScheme": { "options": { @@ -1261,7 +1871,6 @@ "information": { "min": "Alin", "max": "Ylin", - "days": "", "hours": "", "minutes": "" }, @@ -1298,16 +1907,16 @@ }, "userAvatar": { "menu": { - "switchToDarkMode": "", - "switchToLightMode": "", + "open": "Avaa tilivalikko", "management": "Hallinta", - "docker": "Docker", "preferences": "Asetuksesi", "logout": "Kirjaudu ulos", "login": "", "homeBoard": "Kotipaneelisi", - "loggedOut": "", - "updateAvailable": "" + "updateAvailable": "", + "assistant": "Avustaja", + "assistantThinking": "Ajattelu", + "modifier": "Mod" } }, "dangerZone": "Vaaravyöhyke", @@ -1355,75 +1964,85 @@ "kilometersPerHour": "km/t", "milesPerHour": "" } + }, + "widgetQuery": { + "loading": "Ladataan widgetin tietoja" + }, + "total": "Yhteensä", + "filesystemUsage": "{count, plural, one {Näytä käyttö # tiedostojärjestelmälle} other {Näytä käyttö # tiedostojärjestelmälle}}", + "field": { + "name": "Työn nimi" + }, + "label": { + "new": "Uusi" + }, + "entity": { + "apps": "Sovellukset", + "boards": "Paneelit", + "certificates": "Varmenteet", + "customWidgets": "Mukautetut widgetit", + "groups": "Ryhmät", + "integrations": "Integraatiot", + "invites": "Kutsut", + "logs": "Lokitiedot", + "media": "Media", + "searchEngines": "Hakukoneet", + "tasks": "Tehtävät", + "users": "Käyttäjät" } }, "section": { - "dynamic": { + "option": { + "showLabel": { + "label": "Näytä tunniste", + "description": "Näytä säiliön etiketti sen sisällön yläpuolella." + }, + "collapsible": { + "label": "Salli tiivistäminen", + "description": "Anna katsojien laajentaa ja romahtaa tämä kontti." + }, + "showOpenAll": { + "label": "Näytä avoin toiminto", + "description": "Näytä toiminto, joka avaa jokaisen sovelluksen tässä pakkauksessa uusissa välilehdissä." + }, + "scrollable": { + "label": "Vieritettävissä", + "description": "Säilytä tämä säiliö sen koko ja vieritä sen sisältö sen sijaan, että se kasvaisi sopivaksi." + } + }, + "action": { + "openAllInNewTabsFor": "Avaa kaikki sovellukset {name} välilehdissä" + }, + "openAllInNewTabs": { + "title": "Avaa kaikki välilehdissä", + "text": "Jotkin selaimet voivat turvallisuussyistä estää välilehtien massa-avaamisen. Homarr ei voinut avata kaikkia ikkunoita, koska selaimesi esti toimenpiteen. Salli ponnahdusikkunoiden avaaminen ja yritä uudelleen." + }, + "container": { + "untitled": "Nimetön kontti", "action": { - "create": "Uusi dynaaminen osio", - "remove": "" + "create": "Uusi säiliö", + "remove": "Poista säiliö", + "expand": "Laajenna", + "collapse": "Kutista" }, "option": { "title": { - "label": "" + "label": "Otsikko" }, "customCssClasses": { - "label": "" + "label": "Omat CSS-luokat" }, "borderColor": { - "label": "" + "label": "Reunuksen väri" } }, "remove": { - "title": "", - "message": "Haluatko varmasti poistaa tämän dynaamisen osion? Kohteet siirretään samaan paikkaan yläosiossa." - } - }, - "category": { - "field": { - "name": { - "label": "" - } - }, - "action": { - "create": "Uusi kategoria", - "edit": "", - "remove": "", - "moveUp": "", - "moveDown": "", - "createAbove": "", - "createBelow": "", - "openAllInNewTabs": "" - }, - "create": { - "title": "", - "submit": "" - }, - "remove": { - "title": "", - "message": "Haluatko varmasti poistaa kategorian {name}?" - }, - "edit": { - "title": "", - "submit": "" - }, - "menu": { - "label": { - "create": "", - "changePosition": "", - "settings": "Asetukset" - } - }, - "openAllInNewTabs": { - "title": "", - "text": "Jotkin selaimet voivat turvallisuussyistä estää välilehtien massa-avaamisen. Homarr ei voinut avata kaikkia ikkunoita, koska selaimesi esti toimenpiteen. Salli ponnahdusikkunoiden avaaminen ja yritä uudelleen." + "message": "Poistetaanko tämä säiliö? Sen sisältö siirtyy ympäröivälle alueelle." } } }, "item": { "action": { - "create": "Uusi kohde", - "import": "", "edit": "Muokkaa kohdetta", "moveResize": "Siirrä/muuta kohteen kokoa", "duplicate": "Monista kohde", @@ -1432,7 +2051,7 @@ "menu": { "label": { "settings": "Asetukset", - "refresh": "Päivitä", + "settingsFor": "{name} asetukset", "options": "Asetukset", "actions": "Toiminnot" }, @@ -1441,21 +2060,96 @@ "error": "Virhe", "loading": "Ladataan", "idle": "Toimeton" + }, + "notification": { + "saveError": { + "title": "Widgetin tallentaminen epäonnistui", + "message": "Widgetin muutokset rullattiin takaisin" + } } }, "create": { "title": "", "search": "", - "addToBoard": "" + "addToBoard": "", + "addAtPosition": "Lisää kohde tähän", + "destination": { + "label": "Lisää kohteeseen", + "description": "Valitse missä widgetin pitäisi näkyä. Voit silti siirtää sitä myöhemmin.", + "mainCanvas": "Pääkangas", + "leftRail": "Vasen kisko", + "rightRail": "Oikea kisko" + }, + "connectionStatus": { + "ready": "Valmis", + "needsSetup": "Tarvitsee asetuksia", + "noConnectionRequired": "Yhteyttä ei tarvita" + }, + "customWidget": "Mukautettu widget", + "standalone": "Standalone", + "missingIntegration": { + "title": "Yhdistä palvelu ensin", + "noPermission": "Tämä widget tarvitsee yhteensopivan palveluyhteyden. Pyydä järjestelmänvalvojaa yhdistämään se ja yritä uudelleen." + }, + "notification": { + "success": { + "title": "Widget lisätty", + "message": "{name} lisättiin tähän tauluun.", + "relocatedMessage": "{name} lisättiin kohteeseen {destination}, koska valittu kohde ei ollut käytettävissä." + }, + "error": { + "title": "Kohdetta ei voi lisätä", + "message": "Kohdetta ei voitu lisätä tälle pöydälle" + } + } + }, + "selection": { + "summary": "{count, plural, one {# valittu tuote} other {# valittua tuotetta}}", + "selected": "{count, plural, one {# valittu} other {# valittu}}", + "copy": "Kopioi", + "copied": "{count, plural, one {# kohde kopioitu leikepöydälle} other {# kohdetta kopioitu leikepöydälle}}", + "copyError": "Valittuja kohteita ei voitu kopioida. Selaimesi ei ehkä salli leikepöydälle pääsyä.", + "paste": "Liitä", + "pasteShortcut": "Liitä kopioitavat esineet tähän (Ctrl / ¶ + V)", + "pasted": "{count, plural, one {# tuote liitettiin} other {# kohdetta liitettiin}}", + "pasteError": "Leikepöytää ei voitu lukea. Selaimesi ei ehkä salli leikepöydälle pääsyä.", + "pasteInvalid": "Leikepöytä ei sisällä kelvollisia Homarr board kohteita.", + "pasteUnavailable": "Kopioidut esineet eivät sovi tähän levyyn.", + "removed": "{count, plural, one {# kohde poistettu} other {# kohdetta poistettu}}", + "move": "Siirrä", + "moveTo": "Siirrä valitut kohteet", + "delete": "Poista", + "clear": "Tyhjennä valinta", + "clearShortcut": "Tyhjennä valinta (kuva)", + "saveErrorTitle": "Kohdetta ei voi päivittää", + "saveErrorMessage": "Muutoksia ei voitu tallentaa. Lauta päivitettiin.", + "moveUnavailableTitle": "Valittuja kohteita ei voi siirtää", + "moveUnavailableMessage": "Kohteessa ei ole tarpeeksi tilaa koko valinnalle." }, "moveResize": { "title": "", + "entryLabel": "{name}, sarake {column}, rivi {row}", + "target": { + "numbered": "{name}, kohde {index}", + "located": "{name}, {location}, kohde {index}" + }, + "keyboard": { + "instructions": "Paina Enter tai välilyöntiä käynnistääksesi näppäimistön muokkauksen. Käytä nuolinäppäimiä liikkuaksesi, Shift plus nuolinäppäimiä muuttaaksesi ja Escape pysäyttääksesi.", + "started": "Näppäimistön muokkaus alkoi. Käytä nuolinäppäimiä liikkua, Shift plus nuolinäppäimiä kokoon, ja paeta lopettaa.", + "stopped": "Näppäimistön muokkaus pysäytetty.", + "boundary": "Tämä muutos ei sovi tämän osan sisään." + }, "field": { + "section": { + "label": "Jakso tai rautatie" + }, "width": { - "label": "" + "label": "", + "shortLabel": "W" }, "height": { - "label": "" + "label": "", + "shortLabel": "H" }, "xOffset": { "label": "" @@ -1469,18 +2163,36 @@ "title": "Muokkaa kohdetta", "tab": { "widget": "Muokkaa widgettiä", - "app": "Muokkaa sovellusta" + "app": "Muokkaa sovellusta", + "integration": "Muokkaa integraatiota" }, "app": { "propagationNotice": "Sovellukseen tehtävät muutokset koskevat kaikkia paneeleita, joissa sitä käytetään kaikissa kojelautaissa." }, + "integration": { + "action": "Muokkaa yhteyttä", + "description": "Testaa tai korjaa valittu yhteys poistumatta tästä widgetistä.", + "editLabel": "Muokkaa integraatiota {name}", + "fullAccessRequired": "Täydet käyttöoikeudet vaaditaan", + "propagationNotice": "Muutokset tähän integraatioon ovat käytössä kaikkialla. Yhteys testataan ennen kuin se tallennetaan.", + "loading": "Ladataan integraatiota", + "loadError": "Tätä integraatiota ei voitu ladata. Yritä uudelleen ennen yhteysasetusten muuttamista." + }, + "preview": { + "integrationRequired": "Valitse yhteys esikatseleaksesi tätä widgetiä.", + "size": "Tiedostokoko" + }, + "settings": { + "label": "Widgetin asetukset" + }, "advancedOptions": { "label": "Lisäasetukset", "title": "Kohteen lisäasetukset" }, "field": { "integrations": { - "label": "Integraatiot" + "label": "Integraatiot", + "removeLabel": "Poista {name} integraatio" }, "title": { "label": "Otsikko" @@ -1494,17 +2206,18 @@ } }, "remove": { - "title": "", "message": "Haluatko varmasti poistaa kohteen?" + }, + "advancedFocus": { + "open": "Avaa lisänäkymä", + "close": "Sulje lisänäkymä", + "label": "{widget} lisänäkymä" } }, "widget": { "integrationSelect": { "configureIntegrationFirst": "Yhdistä integraatio ensin", - "loading": "Ladataan...", - "placeholder": "Valitse vaihtoehto", - "noResults": "Ei hakutuloksia", - "loadError": "Vaihtoehtojen lataus epäonnistui" + "placeholder": "Valitse vaihtoehto" }, "app": { "name": "Sovellus", @@ -1513,9 +2226,6 @@ "appId": { "label": "Valitse sovellus" }, - "openInNewTab": { - "label": "Avaa uudessa välilehdessä" - }, "showTitle": { "label": "Näytä sovelluksen nimi" }, @@ -1523,11 +2233,8 @@ "label": "Käytä tilatarkistusta" }, "layout": { - "label": "Asettelu", "option": { - "row": "Vaaka", "row-reverse": "Vaaka (käänteinen)", - "column": "Pysty", "column-reverse": "Pysty (käänteinen)" } }, @@ -1552,28 +2259,65 @@ "name": "", "description": "", "option": { - "title": { - "label": "" + "showTitle": { + "label": "Näytä widgetin otsikko" + }, + "titleSize": { + "label": "Widgetin otsikon koko (px)" }, "layout": { "label": "", "option": { - "row": { - "label": "" - }, - "column": { - "label": "Pysty" - }, - "grid": { - "label": "" + "adaptive": { + "label": "Mukautuva" }, "gridHorizontal": { - "label": "" + "label": "Kompakti ruudukko" + }, + "icons": { + "label": "Kuvakkeet" + } + } + }, + "variant": { + "label": "Ulkoasu", + "option": { + "soft": { + "label": "Pehmeä" + }, + "filled": { + "label": "Täytetty" + }, + "outline": { + "label": "Ääriviiva" + }, + "plain": { + "label": "Tavallinen" + } + } + }, + "spacing": { + "label": "Korttien väli", + "option": { + "xs": { + "label": "Erittäin pieni" + }, + "sm": { + "label": "Pieni" + }, + "md": { + "label": "Keskikokoinen" + }, + "lg": { + "label": "Suuri" + }, + "xl": { + "label": "Erittäin suuri" } } }, "hideTitle": { - "label": "" + "label": "Piilota kirjanmerkkien nimet" }, "hideIcon": { "label": "" @@ -1581,17 +2325,28 @@ "hideHostname": { "label": "" }, - "openNewTab": { - "label": "Avaa uudessa välilehdessä" - }, "withBorder": { "label": "Näytä reunus" }, + "grow": { + "label": "Laajenna kortteja täyttääksesi rivi" + }, + "customUrls": { + "label": "Mukautetut linkit" + }, "items": { "label": "", - "add": "" + "remove": "Poista kirjanmerkki", + "apps": { + "label": "Lisää kirjanmerkkejä", + "description": "Liitä URL-osoitteet tai etsi olemassa olevia sovelluksia. Järjestä ne uudelleen vetämällä alla olevat kirjanmerkit.", + "placeholder": "Liitä URL-osoitteet tai etsi sovelluksia", + "addUrl": "Lisää tämä URL-osoite", + "hint": "Paina Enter lisätäksesi URL-osoitteen. Liitä pilkulla erotettu tai yhden rivin URL-osoitteet lisätäksesi useita." + } } - } + }, + "empty": "Lisää URL tai sovellus widgetin asetuksiin" }, "archiveTeamWarrior": { "name": "ArchiveTeam Warrior", @@ -1600,33 +2355,61 @@ "showBroadcastMessage": { "label": "Näytä yleislähetysviestit" } + }, + "noProjectSelected": "Projektia ei ole valittu", + "runnerStatus": "Juoksija: {status}", + "projectId": "Projekti: {id}", + "sessionReceived": "Istunto vastaanotettu: {value}", + "sessionSent": "Istunto lähetetty: {value}", + "sessionId": "Istunto: {id}", + "startedAt": "Aloitti {date}", + "emptyItems": "Ei aktiivisia tai viimeaikaisia työpaikkoja tässä tilannekatsauksessa", + "metric": { + "running": "Käynnissä", + "completed": "Valmis", + "failed": "Epäonnistui", + "canceled": "Peruttu", + "download": "Lataus", + "upload": "Lähetys" + }, + "status": { + "running": "Käynnissä", + "completed": "Suoritettu", + "failed": "Epäonnistui", + "canceled": "Peruttu", + "stopped": "Pysäytetty", + "idle": "Toimeton", + "unknown": "Tuntematon" + } + }, + "wud": { + "name": "Mikä Ylös Docker", + "description": "Näytä kuinka monta katsottua astiaa on saatavilla päivityksiä.", + "title": "Mikä Ylös Docker", + "monitored": "Valvottu", + "updatesAvailable": "{count, plural, one {# päivitys saatavilla} other {# päivitystä saatavilla}}", + "updateAvailable": "Päivitys saatavilla", + "openReleaseNotes": "Avaa julkaisutiedot", + "option": { + "showRing": { + "label": "Näytä päivitysrengas" + }, + "showUpdateList": { + "label": "Näytä kontin päivityslista", + "description": "Luettele jokaisen seuratun säiliön joka on saatavilla päivityksessä" + } } }, "dnsHoleSummary": { "name": "", "description": "", "option": { - "layout": { - "label": "", - "option": { - "row": { - "label": "" - }, - "column": { - "label": "Pysty" - }, - "grid": { - "label": "" - } - } - }, "usePiHoleColors": { "label": "" } }, "error": { - "internalServerError": "", - "integrationsDisconnected": "" + "internalServerError": "" }, "data": { "adsBlockedToday": "", @@ -1634,32 +2417,24 @@ "dnsQueriesToday": "", "domainsBeingBlocked": "" }, - "domainsTooltip": "" + "domainsTooltip": "", + "status": { + "enabled": "Käytössä", + "disabled": "Ei käytössä", + "unknown": "Tuntematon" + } }, "dnsHoleControls": { "name": "", "description": "", "option": { - "layout": { - "label": "", - "option": { - "row": { - "label": "" - }, - "column": { - "label": "Pysty" - }, - "grid": { - "label": "" - } - } - }, "showToggleAllButtons": { "label": "" } }, "error": { - "internalServerError": "" + "internalServerError": "", + "bulkActionsFailed": "{count, plural, one {# toiminto epäonnistui} other {# toiminto epäonnistui}}" }, "controls": { "enableAll": "", @@ -1670,8 +2445,6 @@ "disabled": "", "processing": "", "disconnected": "", - "hours": "", - "minutes": "", "unlimited": "" } }, @@ -1683,16 +2456,10 @@ "label": "Näytä oma otsikko/kaupunki", "description": "Näytä kellon yläpuolella oma otsikkoteksti, kuten vaikka maan/kaupungin nimi." }, - "customTitle": { - "label": "Otsikko" - }, "is24HourFormat": { "label": "24-tunnin muoto", "description": "Käytä 24-tuntista muotoa 12-tuntisen sijaan." }, - "showSeconds": { - "label": "Näytä sekunnit" - }, "useCustomTimezone": { "label": "Määritä pysyvä aikavyöhyke" }, @@ -1711,29 +2478,295 @@ "label": "Oma ajan esitystapa", "description": "Määritä ISO 8601 -standardin mukainen kellonajan muoto (korvaa muut valinnat)." }, - "customDateFormat": { - "label": "Oma päiväyksen esitystapa", - "description": "Määritä ISO 8601 -standardin mukainen päiväyksen muoto (korvaa muut valinnat)." - }, "showWeather": { "label": "Näytä sää", "description": "Näytä pieni animoitu sääkuvake ja lämpötila kortin kulmassa" }, - "weatherLocation": { - "label": "Sään sijainti" - }, "isWeatherFormatFahrenheit": { "label": "Käytä Fahrenheit-asteita" + }, + "animateWeatherIcon": { + "label": "Animoi sääkuvake", + "description": "Animoi sääkuvake. Käytöstä oletuksena ja pois päältä aina, kun alennettua liikettä pyydetään." + }, + "colorWeatherByDayNight": { + "label": "Sääväri päivällä/yöllä", + "description": "Tint sää kuvaketta ja lämpötilaa päivän väri tai yön väri, perustuu onko se tällä hetkellä päivä tai yö valitussa paikassa." + }, + "dayWeatherColor": { + "label": "Päivän väri" + }, + "nightWeatherColor": { + "label": "Yön väri" + }, + "worldClockCities": { + "label": "Maailman kellon kaupungit", + "description": "Lisää ja tilaa jopa kuusi kaupunkia edistykselliseen näkymään." } + }, + "timezoneList": { + "timezone": "Aikavyöhyke", + "cityLabel": "Kaupungin nimi", + "searchPlaceholder": "Hae aikavyöhykkeitä", + "noResults": "Aikavyöhykkeitä ei löytynyt", + "unsupportedOption": "Tukematon: {timeZone}", + "add": "Lisää kaupunki", + "remove": "Poista {city}", + "reorder": "Järjestä {city}", + "limit": "{count} / {maximum} kaupunkia määritetty" + }, + "worldClock": { + "primary": "Ensisijainen kello", + "local": "Paikallinen aika", + "today": "Tänään", + "tomorrow": "Huomenna", + "yesterday": "Eilen", + "noSecondaryCities": "Lisää kaupunkeja widgetin valintoihin vertaillaksesi niitä täällä.", + "unsupportedPrimaryTitle": "Ensisijainen aikavyöhyke ei ole käytettävissä", + "unsupportedPrimary": "{timeZone} ei ole tuettu tässä selaimessa. Näytetään UTC selvästi merkittynä fallback.", + "unsupportedTimeZone": "Aikavyöhykettä ei tuettu: {timeZone}", + "accessibleTime": "{city}: {date} klo {time}, aikavyöhyke {timeZone}", + "advancedLabel": "Edistynyt maailmankello", + "cities": "Maailman kellot", + "cityCount": "{count} timezones", + "timeBarLabel": "24 tunnin aika päivässä: {city}", + "dayProgress": "{percent} % kulunut · {hours} t {minutes} min jäljellä", + "phaseLegend": "Päivän selite", + "tick": { + "midnight": "00", + "morning": "06", + "noon": "12", + "evening": "18", + "end": "24" + }, + "phaseRange": { + "night": "00–05 · 21–24", + "dawn": "05–08", + "day": "08–18", + "dusk": "18–21" + }, + "phase": { + "night": "Yö", + "dawn": "Pähkinät", + "day": "Päivä", + "dusk": "Hämärä" + } + } + }, + "airQuality": { + "name": "Ilmanlaatu Ja UV", + "description": "Näyttää paikan ilmanlaadun, ultraviolettiindeksin, epäpuhtaudet ja siitepölyn.", + "option": { + "location": { + "label": "Ilmanlaadun sijainti" + }, + "aqiStandard": { + "label": "AQI standardi", + "options": { + "auto": "Automaattinen lokaatioon", + "european": "Eurooppalainen AQI", + "us": "US AQI" + } + }, + "showUv": { + "label": "Näytä UV-indeksi" + }, + "showPollutants": { + "label": "Näytä pilaavien aineiden pitoisuudet" + }, + "showPollen": { + "label": "Näytä siitepölypitoisuudet" + } + }, + "category": { + "good": "Hyvä", + "fair": "Kohtalainen", + "moderate": "Kohtalainen", + "unhealthySensitive": "Epäterveellinen herkille ryhmille", + "unhealthy": "Epäterveellistä", + "poor": "Huono", + "veryPoor": "Erittäin huono", + "veryUnhealthy": "Hyvin epäterveellinen", + "extremelyPoor": "Erittäin huono", + "hazardous": "Vaarallinen", + "unknown": "AQI-lukua ei ole" + }, + "uv": { + "label": "UV-indeksi", + "category": { + "low": "Matala", + "moderate": "Kohtalainen", + "high": "Korkea", + "veryHigh": "Erittäin korkea", + "extreme": "Äärimmä", + "unknown": "Ei lukua" + } + }, + "dominantPollutant": "Dominant pollutant", + "aqiLabel": "AQI", + "strongestPollen": "Korkein siitepöly", + "unit": { + "concentration": "{value} μg/m3", + "pollen": "{value} jyvää/m3" + }, + "pollutant": { + "pm2_5": "PM2,5", + "pm10": "PM10", + "ozone": "Otsoni", + "nitrogenDioxide": "Typpidioksidi", + "sulphurDioxide": "Sulphur dioxide", + "carbonMonoxide": "Hiilimonoksidi" + }, + "pollen": { + "alder": "Alder", + "birch": "Koivu", + "grass": "Ruoho", + "mugwort": "Mugwort", + "olive": "Oliivit", + "ragweed": "Ragweed" + }, + "compact": { + "sixHourTrend": "AQI trendi seuraavien kuuden tunnin aikana" + }, + "advanced": { + "observedAt": "Päivitetty: {time}", + "next24Hours": "Seuraavat 24 tuntia", + "pollutants": "Epäpuhtauksien pitoisuudet", + "pollen": "Turvotuspitoisuudet", + "sevenDayForecast": "7 päivän maksimiennuste", + "aqiValue": "Aqi {value}", + "uvValue": "Uv {value}", + "uvShort": "Uv {value}", + "noForecast": "Ennustetietoja ei saatavilla" + } + }, + "countdown": { + "name": "Lähtölaskenta", + "description": "Seuraa tulevia tapahtumia ja toistuvia vuosipäiviä.", + "option": { + "events": { + "label": "Tapahtumat", + "description": "Lisää ja tilaa jopa 20 kerta- tai vuosilaskua. Päivämäärät merkitään valittuun aikavyöhykkeeseen." + }, + "showProgress": { + "label": "Näytä edistyminen" + }, + "showSeconds": { + "label": "Näytä sekuntia", + "description": "Pidä sekunnit näkyvillä jokaisesta tulevasta tapahtumasta." + } + }, + "dateTimeEventList": { + "newEvent": "Uusi tapahtuma", + "add": "Lisää tapahtuma", + "remove": "Poista {event}", + "reorder": "Järjestä {event}", + "eventLabel": "Tapahtuman nimi", + "timezone": "Aikavyöhyke", + "unsupportedOption": "Tukematon: {timeZone}", + "recurrence": "Toistuu", + "recurrenceOption": { + "none": "Ei toisteta", + "yearly": "Joka vuosi" + }, + "target": "Tapahtuman päivämäärä ja kellonaika", + "trackProgress": "Seuraa edistymistä aloituspäivästä alkaen", + "start": "Edistymisen alkamispäivä ja kellonaika", + "confirmDateTime": "Vahvista päivämäärä ja aika", + "limit": "Määritetty {count}/{maximum} tapahtumaa" + }, + "empty": { + "title": "Ei vielä lähtölaskentaa", + "description": "Lisää tapahtuma widgetin valinnoissa aloittaaksesi laskemisen alas." + }, + "completed": "Suoritettu", + "yearly": "Vuosittain", + "progress": "Tapahtuman edistyminen", + "upcoming": "Tulevat", + "completedEvents": "Suoritetut tapahtumat", + "invalid": { + "title": "Joitakin tapahtumia ei voi näyttää", + "description": "{count, plural, one {Yhdellä tapahtumalla on virheellinen päivämäärä tai sitä ei tueta.} other {# tapahtumassa on virheellinen päivämäärä tai sitä ei tueta.}}", + "value": "Unavailable" + }, + "alert": { + "notifications": "Selain ilmoitukset", + "permissionDenied": "Ilmoitukset on estetty tällä selaimella.", + "reached": "Lähtölaskenta on saavuttanut tavoitteensa." + } + }, + "timer": { + "name": "Timer / Pomodoro", + "description": "Suorittaa yksinkertaisen ajastimen tai konfiguroitavan Pomodoro sekvenssin.", + "option": { + "mode": { + "label": "Tila", + "options": { + "timer": "Ajastin", + "pomodoro": "Pomodoro" + } + }, + "timerMinutes": { + "label": "Ajastin minuuttia" + }, + "focusMinutes": { + "label": "Keskity minuutteihin" + }, + "shortBreakMinutes": { + "label": "Lyhyt tauko minuuttia" + }, + "longBreakMinutes": { + "label": "Pitkä tauko minuutit" + }, + "sessionsBeforeLongBreak": { + "label": "Kohdista istuntoja ennen pitkää taukoa" + }, + "autoStartBreaks": { + "label": "Käynnistä tauot automaattisesti" + }, + "autoStartFocus": { + "label": "Aloita tarkennusistunnot automaattisesti" + } + }, + "phase": { + "timer": "Ajastin", + "focus": "Kohdistus", + "shortBreak": "Lyhyt tauko", + "longBreak": "Pitkä tauko" + }, + "action": { + "start": "Käynnistä", + "pause": "Tauko", + "reset": "Reset" + }, + "attention": { + "timerComplete": "Timer complete", + "phaseReady": "{phase} valmis" + }, + "progress": "Ajastin etenee: {progress}%", + "compact": { + "completedFocus": "{count, plural, =0 {Kohdistusistuntoja ei ole suoritettu} one {# kohdistusistunto valmistui} other {# kohdistusistuntoa suoritettu}}" + }, + "alert": { + "title": "Timer complete", + "completed": "{phase} valmis." + }, + "advanced": { + "sequence": "Pomodoro sequence", + "focusSession": "Tarkenna {session}", + "settings": "Pysyvät asetukset", + "settingsHint": "Käytä widgetin kontekstivalikkoa muokataksesi näitä taulun asetuksia.", + "localAlerts": "Paikalliset hälytykset", + "notifications": "Selain ilmoitukset", + "sound": "Ajastimen äänet", + "localAlertsHint": "Ajastimen äänet ovat oletusarvoisesti käytössä. Äänet ja ilmoitukset koskevat vain tätä widgetiä tässä selaimessa.", + "notificationsDenied": "Ilmoitukset on estetty tällä selaimella." } }, "minecraftServerStatus": { "name": "", "description": "", "option": { - "title": { - "label": "" - }, "domain": { "label": "" }, @@ -1753,11 +2786,21 @@ "noStation": "", "option": { "baseUrl": { - "label": "Search.ch URL" + "label": "Search.ch URL", + "description": "Mukautettujen URL-osoitteiden on ratkaistava julkiseen IP-osoitteeseen. Yksityiset ja paikalliset isännät hylätään." }, "station": { - "label": "" + "label": "", + "placeholder": "Etsi asemaa" } + }, + "error": { + "customSourceUnavailable": "Aikataulun lähde ei ole käytettävissä. Tarkista, että sen URL ratkaisee julkisen IP-osoitteen.", + "stationSearch": "Asemia ei voi etsiä. Tarkista mukautettu URL-osoite ja pääsy." + }, + "warning": { + "stale": "Aikataulua ei voitu päivittää. Näyttää lähdöt viimeksi päivitetty klo {time}.", + "staleCompact": "Stale data" } }, "notebook": { @@ -1789,6 +2832,9 @@ "directionRtl": "Aseta tekstin suunta oikealta vasemmalle", "blockquote": "", "horizontalLine": "", + "details": "Vaihda tiivistettävää osiota", + "expandDetails": "Laajenna romahtava osio", + "collapseDetails": "Tiivistä tiivistyvä osio", "bulletList": "", "orderedList": "", "checkList": "", @@ -1797,16 +2843,20 @@ "link": "", "unlink": "", "image": "", - "addTable": "", - "deleteTable": "", + "insertTable": "Lisää taulu", + "insertTableSize": "Lisää {columns} × {rows} taulukko", + "deleteTable": "Poista taulu", "colorCell": "", - "mergeCell": "", + "mergeCells": "Yhdistä solut", + "splitCell": "Jaa solu", "addColumnLeft": "Lisää sarake ennen", "addColumnRight": "Lisää sarake jälkeen", "deleteColumn": "Poista sarake", "addRowTop": "", "addRowBelow": "", - "deleteRow": "" + "deleteRow": "", + "toggleHeaderRow": "Vaihda ylärivin tilaa", + "toggleHeaderColumn": "Vaihda ylätunnisteen sarake" }, "align": { "left": "", @@ -1817,8 +2867,6 @@ "clearColor": "", "source": "", "widthPlaceholder": "", - "columns": "Sarakkeet", - "rows": "", "width": "", "height": "" }, @@ -1830,7 +2878,9 @@ "discard": "", "keepEditing": "" } - } + }, + "saveFailed": "Merkintää ei voitu tallentaa", + "documentStats": "{words, plural, one {# sana} other {# sana}} · {characters, plural, one {# merkki} other {# merkkiä}}" }, "anchorNote": { "name": "", @@ -1839,9 +2889,6 @@ "noteId": { "label": "" }, - "showTitle": { - "label": "" - }, "showUpdatedAt": { "label": "" } @@ -1851,14 +2898,20 @@ "notFound": "", "noNotes": "", "integrationRequired": "", - "updatedAt": "", "untitled": "", - "edit": "", - "save": "", - "cancel": "", "readOnlyViewer": "", "saveForbidden": "Sinulla ei ole oikeutta muokata tätä muistiinpanoa.", - "saveFailed": "" + "saveFailed": "", + "createdAt": "Luotu {date}", + "permission": { + "owner": "Omistaja", + "editor": "Muokkain", + "viewer": "Katsoja" + }, + "status": { + "pinned": "Kiinnitetty", + "archived": "Arkistoitu" + } }, "iframe": { "name": "", @@ -1917,6 +2970,25 @@ "clickable": { "label": "" } + }, + "state": { + "on": "Päällä", + "off": "Pois", + "unavailable": "Unavailable", + "unknown": "Tuntematon" + }, + "advanced": { + "entityId": "Entiteetin ID: {id}", + "lastChanged": "Muutettu {date}", + "attribute": { + "unit": "Yksikkö", + "deviceClass": "Laitteen luokka", + "icon": "Kuvake" + } + }, + "error": { + "loadFailed": "Ei voitu ladata entiteettiä", + "toggleFailed": "Sisältöä ei voi päivittää" } }, "smartHome-executeAutomation": { @@ -1932,11 +3004,31 @@ }, "spotlightAction": { "run": "" + }, + "advanced": { + "lastExecuted": "Viimeksi ajettu {time}", + "automationId": "Automaation ID: {id}", + "ready": "Valmis suorittamaan", + "noPermission": "Ei oikeuksia suorittaa tätä automaatiota" + }, + "status": { + "running": "Käynnissä oleva automaatio", + "success": "Automaatio suoritettu" + }, + "error": { + "executeFailed": "Automaation suorittaminen epäonnistui" } }, "stockPrice": { "name": "Osakkeen hinta", "description": "Näyttää yrityksen nykyisen osakearvon", + "advanced": { + "currentPrice": "Nykyinen hinta", + "previousClose": "Edellinen sulje", + "changePercentage": "Muutos (%)", + "minimum": "Minimi", + "maximum": "Maksimi" + }, "option": { "stock": { "label": "" @@ -2007,6 +3099,10 @@ "label": "Kuukausi" } } + }, + "showDetails": { + "label": "Näytä tiedot", + "description": "Näytä nimi, muutos ja aikaväli kompaktissa näkymässä. Poista vain symboli ja hinta käytöstä." } } }, @@ -2034,6 +3130,13 @@ "showUnmonitored": { "label": "Näytä valvomattomat" } + }, + "advanced": { + "previousMonth": "Näytä edellinen kuukausi", + "nextMonth": "Näytä ensi kuussa", + "eventCount": "{count, plural, one {# tapahtuma} other {# tapahtuma}}", + "loading": "Ladataan kalenteritapahtumia...", + "noEvents": "Ei tapahtumia tässä kuussa" } }, "weather": { @@ -2046,16 +3149,18 @@ "disableTemperatureDecimals": { "label": "Älä näytä lämpötilojen desimaaleja" }, + "animateIcons": { + "label": "Animoi sääkuvakkeet" + }, + "showHumidity": { + "label": "Näytä kosteus" + }, "showCurrentWindSpeed": { - "label": "Näytä nykyinen tuulen nopeus", - "description": "Vain nykyiselle säälle" + "label": "Näytä nykyinen tuulen nopeus" }, "useImperialSpeed": { "label": "Käytä tuulen nopeudelle mph-yksikköä" }, - "location": { - "label": "Sään sijainti" - }, "showCity": { "label": "Näytä kaupunki" }, @@ -2065,13 +3170,10 @@ "forecastDayCount": { "label": "Ennusteen päivien määrä", "description": "Kun widgetin leveys ei riitä, näytetään päiviä vähemmän." - }, - "dateFormat": { - "label": "Päiväyksen esitystapa", - "description": "Miten päivämäärän näytetään." } }, "currentWindSpeed": "{currentWindSpeed} {unit}", + "disabled": "Säätiedot eivät ole käytettävissä, koska lähtevät yhteydet ovat pois päältä", "dailyForecast": { "sunrise": "Auringonnousu", "sunset": "Auringonlasku", @@ -2094,6 +3196,47 @@ "thunderstorm": "", "thunderstormWithHail": "", "unknown": "" + }, + "details": "Näytä säätiedot", + "detailsFor": "Näytä säätiedot kohteelle {date}", + "advanced": { + "forecast": "7 päivän ennuste", + "hourlyForecast": "Seuraavat 24 tuntia", + "day": "Päivä", + "time": "Aika", + "conditions": "Ehdot", + "temperature": "Lämpötila", + "feelsLike": "Tuntuu siltä, että {temperature}", + "feelsLikeLabel": "Tuntuu tykältä", + "feelsLikeRange": "Tuntuma: {maximum} / {minimum}", + "highLow": "Ylin {maximum} · alin {minimum}", + "observedAt": "Päivitetty: {time}", + "humidity": "Kosteus", + "averageHumidity": "Keskimääräinen ilmankosteus: {humidity} %", + "currentHumidity": "Nykyinen kosteus", + "wind": "Tuuli / puuskat ({unit})", + "currentWind": "Nykyinen tuuli / puuskat", + "windValue": "{speed} / {gusts} {unit}", + "windDetail": "Tuuli / puuskat enintään: {speed} / {gusts} {unit}", + "nextHourPrecipitation": "Sademäärä ensi tunnissa", + "precipitationChance": "Sademäärän mahdollisuus", + "precipitationValue": "{probability} % · {amount} mm", + "precipitationDetail": "Sademäärä: {probability} % · {amount} mm", + "todayUv": "Tämän päivän maksimi UV-indeksi", + "uvIndex": "Max UV-indeksi: {value}", + "daylight": "Päivänvalossa: {duration}", + "hourlyTooltip": "Tuntuma {feelsLike}{temperatureUnit} · {amount} mm · ilmankosteus {humidity} % · tuuli {speed} {speedUnit}", + "hourlyTooltipWithoutHumidity": "Tuntuma {feelsLike}{temperatureUnit} · {amount} mm · tuuli {speed} {speedUnit}", + "detailLabel": { + "feelsLike": "Tuntuu tykältä", + "precipitation": "Sademäärä", + "humidity": "Keskimääräinen kosteus", + "wind": "Maksimi tuuli / puuska", + "uv": "Suurin UV-indeksi", + "daylight": "Daylight" + }, + "sun": "Auringonnousu / auringonlasku", + "noForecast": "Ennustetietoja ei saatavilla" } }, "indexerManager": { @@ -2106,8 +3249,15 @@ }, "title": "", "testAll": "", + "status": { + "healthy": "Tervettä", + "unhealthy": "Epäterveellistä", + "disabled": "Ei käytössä", + "unknown": "Terveys ei saatavilla" + }, "error": { - "internalServerError": "" + "internalServerError": "", + "testAll": "Indeksoijan testi epäonnistui. Yritä uudelleen." } }, "healthMonitoring": { @@ -2136,11 +3286,6 @@ "fileSystem": { "label": "" }, - "visibleStorageVolumes": { - "label": "Näkyvät tallennusvolyymit", - "description": "Käytettävissä vain, kun kaikki valitut integraatiot ovat Synology. Jätä tyhjäksi näyttääksesi kaikki havaitut tallennusvolyymit.", - "placeholder": "Valitse tallennusvolyymit" - }, "defaultTab": { "label": "" }, @@ -2154,8 +3299,8 @@ "popover": { "information": "", "processor": "", - "memory": "", - "memoryAvailable": "", + "memory": "Muisti: {memory}", + "memoryAvailable": "Saatavilla: {memoryAvailable} ({percent}%)", "version": "", "uptime": "", "loadAverage": "", @@ -2163,17 +3308,27 @@ "minutes": "", "used": "", "available": "", - "lastSeen": "" + "lastSeen": "", + "updatesAvailable": "{count, plural, one {# päivitys saatavilla} other {# päivitystä saatavilla}}", + "rebootRequired": "Uudelleenkäynnistys vaaditaan", + "rebootNotRequired": "Uudelleenkäynnistystä ei tarvita" + }, + "smartStatus": { + "attributesWithinThresholds": "SMART: määritteet kynnysarvojen sisällä", + "attributesFailed": "SMART: {attributes} epäonnistui", + "noCriticalWarning": "SMART: SSD ei ilmoita varoitusta", + "criticalWarning": "SMART: SSD:n raportoima kriittinen varoitus" + }, + "gauge": { + "cpuUsage": "Suorittimen kuormitus", + "cpuTemperature": "Suorittimen lämpötila", + "memoryUsage": "Muistin varaus", + "gpuUsage": "{name} GPU käyttöä" }, - "memory": {}, "error": { "internalServerError": "" }, "cluster": { - "summary": { - "cpu": "", - "memory": "" - }, "resource": { "node": { "name": "" @@ -2209,8 +3364,6 @@ "table": { "header": { "name": "", - "cpu": "", - "memory": "", "node": "" } } @@ -2220,33 +3373,29 @@ "name": "Docker-tilastot", "description": "Konttiesi tilastot (tämä widget voidaan lisätä vain ylläpito-oikeuksilla)", "option": { - "columns": { - "label": "Näytettävät sarakkeet" + "endpointIds": { + "label": "Telakoiden ympäristöt", + "description": "Jätä tyhjäksi näyttääksesi säiliöt jokaisesta Docker-ympäristöstä", + "placeholder": "Kaikki Docker-ympäristöt" }, - "enableRowSorting": { - "label": "Salli kohteiden järjestys" + "containerFilter": { + "label": "Suodatettavat säiliöt" + }, + "filterIsWhitelist": { + "label": "Suodata valkolistana" }, "defaultSort": { - "label": "Lajitteluun oletusarvoisesti käytettävä sarake", "option": { "name": "Nimi", "state": "Tila", "cpuUsage": "Suorittimen kuormitus", "memoryUsage": "Muistin varaus" } - }, - "descendingDefaultSort": { - "label": "Käänteinen järjestys" - }, - "columnOrder": { - "label": "Sarakkeiden järjestys" - }, - "columnWidths": { - "label": "Sarakkeiden leveydet" } }, "error": { "internalServerError": "", + "endpointsUnavailable": "Telakoitsijan päätepisteet eivät ole käytettävissä", "layoutSaveTitle": "Taulukon asettelua ei tallennettu", "layoutSaveMessage": "Docker-taulukon asettelua ei voitu tallentaa. Yritä siirtää tai muuttaa sarakkeen kokoa uudelleen." }, @@ -2255,7 +3404,6 @@ } }, "coolify": { - "name": "", "description": "", "option": { "showServers": { @@ -2281,17 +3429,49 @@ "internalServerError": "" }, "server": { - "buildServer": "" + "buildServer": "", + "resourceCounts": "{applications, plural, one {# app} other {# apps}} / {services, plural, one {# service} other {# services}}", + "reachability": "Saavutettavuus", + "usability": "Käytettävyys" + }, + "source": { + "url": "Lähde: {url}", + "unavailable": "{source}: unavailable" }, "instances": { "title": "" + }, + "action": { + "openResource": "Avaa {name}", + "openLogs": "Avaa {name} lokit", + "showIp": "Näytä IP-osoite", + "hideIp": "Piilota IP-osoite" + }, + "status": { + "running": "Käynnissä", + "stopped": "Pysäytetty", + "exited": "Suljettu", + "starting": "Aloitetaan", + "restarting": "Käynnistetään Uudelleen", + "unknown": "Tuntematon", + "online": "Paikalla", + "offline": "Offline-tilassa", + "reachable": "Toteutettavissa", + "unreachable": "Taittamaton", + "usable": "Käytettävissä", + "unusable": "Käyttökelvoton" } }, "vpn": { "name": "VPN", "description": "Yleiskatsaus VPN-yhteyksistäsi", "serviceUnavailable": "VPN ei ole käytettävissä", - "option": {} + "status": { + "running": "Käynnissä", + "notRunning": "Ei käynnissä", + "unavailable": "Unavailable", + "vpn": "Vpn: {status}" + } }, "ups": { "name": "UPS", @@ -2318,14 +3498,19 @@ "runtime": "Toiminta-aika", "load": "Kuorma", "input": "Syöttö", - "output": "Lähtö" + "output": "Lähtö", + "batteryVoltage": "Akun jännite", + "power": "Virta", + "temperature": "Lämpötila", + "manufacturer": "Valmistaja", + "model": "Malli", + "serial": "Sarja" }, "error": { "internalServerError": "UPS-tietojen haku epäonnistui" } }, "tracearr": { - "name": "", "description": "", "option": { "showStreams": { @@ -2413,10 +3598,7 @@ "label": "Tapahtuma", "description": "Näytä tietyn tapahtuman esiintymiskerrat yhteensä", "placeholder": "Valitse tapahtuma", - "loading": "Ladataan tapahtumia...", - "noEvents": "Tapahtumia ei löytynyt", - "none": "Ei tapahtumaa", - "configureWebsiteFirst": "Valitse ensin verkkosivusto ladataksesi tapahtumat" + "none": "Ei tapahtumaa" }, "chartType": { "label": "Kaavion tyyppi", @@ -2447,26 +3629,21 @@ "eventNames": { "label": "Tapahtumat", "description": "Valitse yksi tai useampi tapahtuma kaavioon", - "placeholder": "Valitse tapahtumia...", - "loading": "Ladataan tapahtumia...", - "noEvents": "Tapahtumia ei löytynyt", - "configureWebsiteFirst": "Valitse ensin verkkosivusto ladataksesi tapahtumat" + "placeholder": "Valitse tapahtumia..." }, "topCount": { "label": "Näytettävien kohteiden määrä", "description": "Näytettävien huippukohteiden määrä (enintään 500)" + }, + "events": { + "loading": "Ladataan tapahtumia...", + "noEvents": "Tapahtumia ei löytynyt", + "configureWebsiteFirst": "Valitse sivusto ensin ladataksesi tapahtumia" } }, "event": { - "occurrences": "tapahtumaa", "label": "tapahtumaa" }, - "topPages": { - "direct": "Suora" - }, - "topReferrers": { - "direct": "Suora" - }, "events": { "selectPrompt": "Valitse tapahtumat kaavioitavaksi" }, @@ -2475,6 +3652,9 @@ "noWebsite": "Verkkosivustoa ei ole määritetty", "noData": "Ei tietoja saatavilla", "internalServerError": "Umami-tietojen haku epäonnistui" + }, + "top": { + "direct": "Suora" } }, "common": { @@ -2502,7 +3682,8 @@ }, "integration": { "noData": "Integraatiota ei löytynyt", - "description": "Luo uusi integraatio painamalla " + "description": "Luo uusi integraatio painamalla ", + "manage": "Hallinnoi integraatioita" }, "app": { "noData": "", @@ -2513,7 +3694,61 @@ "noIntegration": "Integraatiota ei ole valittu", "noData": "Integraatiotietoja ei ole käytettävissä" }, - "option": {} + "integrationDisconnected": "Tietoja ei ole saatavilla, kaikki integraatiot on irrotettu", + "updatedAt": "Päivitetty {date}", + "title": { + "label": "Otsikko" + }, + "openInNewTab": { + "label": "Avaa uudessa välilehdessä" + }, + "showTitle": { + "label": "Näytä otsikko" + }, + "weatherLocation": { + "label": "Sään sijainti" + }, + "layout": { + "label": "Asettelu", + "option": { + "horizontal": "Vaaka", + "vertical": "Pysty", + "grid": "Ruudukko" + } + }, + "select": { + "loading": "Ladataan...", + "loadError": "Vaihtoehtojen lataaminen epäonnistui" + }, + "dateFormat": { + "label": "Päiväyksen esitystapa", + "description": "Miten päivämäärän näytetään." + }, + "visibleStorageVolumes": { + "label": "Näkyvät tallennustilavuudet", + "description": "Saatavilla vain, kun jokainen valittu integraatio on OpenMediaVault tai Synology. Jätä tyhjäksi näyttääksesi kaikki havaitut tallennustilat.", + "placeholder": "Valitse tallennustilan taltiot" + }, + "tableOptions": { + "columns": { + "label": "Näytettävät sarakkeet" + }, + "columnOrder": { + "label": "Sarakkeen järjestys" + }, + "columnWidths": { + "label": "Sarakkeen leveys" + }, + "enableRowSorting": { + "label": "Salli kohteiden järjestys" + }, + "defaultSort": { + "label": "Järjestykseen oletusarvoisesti käytettävä sarake" + }, + "invertSorting": { + "label": "Käänteinen järjestys" + } + } }, "video": { "name": "", @@ -2544,7 +3779,7 @@ "option": { "showOnlyPlaying": { "label": "", - "description": "" + "description": "Jokainen mediapalvelin ei tue tätä valintaa" }, "showBitrate": { "label": "Näytä bittinopeus", @@ -2572,6 +3807,7 @@ "transcoding": "Transkoodaus", "paused": "Keskeytetty", "remaining": "{minutes} min jäljellä", + "seasonEpisode": "K{season} J{episode}", "metadata": { "title": "", "video": { @@ -2589,11 +3825,16 @@ "resolution": "", "target": "" } - } + }, + "unknownUser": "Tuntematon käyttäjä" + }, + "summary": { + "sessions": "{count, plural, one {# istunto} other {# istuntoa}}", + "playing": "{count} soi", + "transcoding": "{count} transkoodausta" } }, "paperlessNgx": { - "name": "Paperless-ngx", "description": "Yleiskatsaus Paperless-ngx-dokumenttiarkistostasi", "documentsTotal": "Dokumentteja yhteensä", "documentsInbox": "Saapuneet", @@ -2637,6 +3878,192 @@ "internalServerError": "Paperless-ngx-tietojen haku epäonnistui" } }, + "patchmon": { + "description": "Yleiskatsaus isäntien päivitystilanteesta PatchMonista", + "title": "PatchMon-tilastot", + "totalHosts": "Isännät yhteensä", + "hostsNeedingUpdates": "Päivitystä tarvitsevat", + "securityUpdates": "Tietoturvapäivitykset", + "upToDateHosts": "Ajan tasalla olevat isännät", + "hostsWithSecurityUpdates": "Isännät, joilla on tietoturvapäivityksiä", + "recentUpdates24h": "Päivitykset (24 h)", + "totalOutdatedPackages": "Vanhentuneet paketit", + "totalRepos": "Pakettivarastot", + "osDistribution": "Käyttöjärjestelmien jakauma", + "compliance": "Päivityskattavuus", + "complianceRatio": "{upToDate} / {total}", + "lastUpdated": "Päivitetty {time}", + "option": { + "showTotalHosts": { + "label": "Näytä isännät yhteensä", + "description": "Näytä valvottujen isäntien kokonaismäärä" + }, + "showHostsNeedingUpdates": { + "label": "Näytä päivitystä tarvitsevat isännät", + "description": "Näytä isännät, joilla on vähintään yksi vanhentunut paketti" + }, + "showSecurityUpdates": { + "label": "Näytä tietoturvapäivitykset", + "description": "Näytä saatavilla olevien tietoturvapäivitysten kokonaismäärä" + }, + "showUpToDateHosts": { + "label": "Näytä ajan tasalla olevat isännät", + "description": "Näytä isännät, joissa ei ole vanhentuneita paketteja" + }, + "showHostsWithSecurityUpdates": { + "label": "Näytä isännät, joilla on tietoturvapäivityksiä", + "description": "Näytä isännät, jotka tarvitsevat tietoturvakorjauksia" + }, + "showRecentUpdates24h": { + "label": "Näytä viimeaikaiset päivitykset (24 h)", + "description": "Näytä viimeisen 24 tunnin aikana asennettujen päivitysten määrä" + }, + "showTotalOutdatedPackages": { + "label": "Näytä vanhentuneet paketit", + "description": "Näytä vanhentuneiden pakettien kokonaismäärä kaikissa isännissä" + }, + "showTotalRepos": { + "label": "Näytä repositoriot", + "description": "Näytä valvottavien aktiivisten repositorioiden määrä" + }, + "enableThresholdColors": { + "label": "Ota käyttöön kynnysarvovärit", + "description": "Väritä tilastoarvot vihreäksi, keltaiseksi tai punaiseksi vakavuusesiasetusten perusteella" + }, + "useCustomThresholds": { + "label": "Edistyneet kynnysarvot", + "description": "Mukauta varoitus- ja kriittiset kynnysarvot tilastoittain käyttäen absoluuttisia määriä tai prosenttiosuutta isäntien kokonaismäärästä" + }, + "thresholdMode": { + "option": { + "absolute": "Absoluuttinen määrä", + "percent": "Prosenttia isäntien kokonaismäärästä" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "Päivityksiä tarvitsevien kynnysarvotila", + "description": "Vertaa päivitystarpeiden määrää absoluuttisena arvona tai prosenttiosuutena isäntien kokonaismäärästä" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "Päivitystarpeiden varoituskynnysarvo" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "Päivitystarpeiden kriittinen kynnysarvo" + }, + "securityUpdatesThresholdMode": { + "label": "Tietoturvapäivitysten kynnysarvotila", + "description": "Vertaa tietoturvapäivitysten määrää absoluuttisena arvona tai prosenttiosuutena isäntien kokonaismäärästä" + }, + "securityUpdatesWarningAt": { + "label": "Tietoturvapäivitysten varoituskynnysarvo" + }, + "securityUpdatesCriticalAt": { + "label": "Tietoturvapäivitysten kriittinen kynnysarvo" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "Tietoturvapäivityksiä sisältävien isäntien kynnysarvotila", + "description": "Vertaa isäntien määrää absoluuttisena arvona tai prosenttiosuutena isäntien kokonaismäärästä" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "Tietoturvapäivityksiä sisältävien isäntien varoituskynnysarvo" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "Tietoturvapäivityksiä sisältävien isäntien kriittinen kynnysarvo" + }, + "upToDateHostsThresholdMode": { + "label": "Ajan tasalla olevien isäntien kynnysarvotila", + "description": "Vertaa ajan tasalla olevien isäntien määrää absoluuttisena arvona tai prosenttiosuutena isäntien kokonaismäärästä" + }, + "upToDateHostsWarningAt": { + "label": "Ajan tasalla olevien isäntien varoituskynnysarvo", + "description": "Muuta keltaiseksi, kun arvo on vähintään tämä kynnysarvo, mutta alle täyden kattavuuden" + }, + "upToDateHostsCriticalAt": { + "label": "Ajan tasalla olevien isäntien kriittinen kynnysarvo", + "description": "Muuta punaiseksi, kun arvo laskee tämän kynnysarvon alle" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "Vanhentuneiden pakettien kynnysarvotila", + "description": "Vertaa vanhentuneiden pakettien määrää absoluuttisena arvona tai prosenttiosuutena isäntien kokonaismäärästä" + }, + "totalOutdatedPackagesWarningAt": { + "label": "Vanhentuneiden pakettien varoituskynnysarvo" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "Vanhentuneiden pakettien kriittinen kynnysarvo" + }, + "showOsDistribution": { + "label": "Näytä käyttöjärjestelmäjakauma", + "description": "Näytä erittely valvotuista isännistä käyttöjärjestelmittäin" + }, + "osDistributionLimit": { + "label": "Käyttöjärjestelmäjakauman rajoitus", + "description": "Näytettävien käyttöjärjestelmien enimmäismäärä", + "option": { + "3": "3 parasta", + "5": "5 parasta", + "10": "10 parasta", + "all": "Kaikki" + } + }, + "showOsVersion": { + "label": "Näytä käyttöjärjestelmän versio", + "description": "Liitä käyttöjärjestelmän versio jokaiseen jakauman nimikkeeseen, kun se on saatavilla" + }, + "showComplianceHero": { + "label": "Näytä compliance-hero", + "description": "Näytä vaatimustenmukaisuusrengas, joka näyttää ajan tasalla olevien isäntien prosenttiosuuden" + }, + "osDisplayMode": { + "label": "Käyttöjärjestelmän näyttötila", + "description": "Valitse, miten käyttöjärjestelmän jakelu näytetään", + "option": { + "bars": "Vaakapalkit", + "donut": "Donitsikaavio" + } + }, + "threshold": { + "warningAt": { + "description": "Anna keltainen kun arvo saavuttaa tämän kynnyksen" + }, + "criticalAt": { + "description": "Syötä punainen kun arvo saavuttaa tämän kynnyksen" + } + } + }, + "error": { + "internalServerError": "PatchMon-tietojen nouto epäonnistui" + } + }, + "bazarr": { + "description": "Yleiskatsaus puuttuvista tekstityksistä ja terveystilasta Bazarr-instanssistasi", + "episodes": "Puuttuvat jaksot", + "movies": "Puuttuvat elokuvat", + "providers": "Palveluntarjoajan ongelmat", + "status": "Terveysongelmat", + "announcements": "Ilmoitukset", + "option": { + "showMissingEpisodes": { + "label": "Näytä puuttuvat jaksot", + "description": "Näytä niiden jaksojen määrä, joista puuttuu tekstitys" + }, + "showMissingMovies": { + "label": "Näytä puuttuvat elokuvat", + "description": "Näytä niiden elokuvien määrä, joista puuttuu tekstitykset" + }, + "showProviderIssues": { + "label": "Näytä tarjoajien ongelmat", + "description": "Näytä ongelmallisten tekstitystarjoajien määrä" + }, + "showHealthIssues": { + "label": "Näytä kunto-ongelmat", + "description": "Näytä Bazarrin kunto-ongelmien määrä" + } + }, + "error": { + "internalServerError": "Bazarrin tietojen nouto epäonnistui" + } + }, "immich-serverStats": { "name": "", "description": "", @@ -2661,7 +4088,8 @@ "users": "", "photos": "", "videos": "", - "storage": "" + "storage": "", + "albumLimit": "Suurimmat albumit (enimmillään char@@0 {count} näytetään)" }, "immich-albumCarousel": { "name": "", @@ -2685,24 +4113,21 @@ } }, "description": "Diaesitys kuvista Immich-albumista tai koko kirjastostasi", - "noPhotos": "Valokuvia ei löytynyt" + "noPhotos": "Valokuvia ei löytynyt", + "albumPhoto": "Albumin kuva", + "actions": { + "previousPhoto": "Edellinen kuva", + "nextPhoto": "Seuraava kuva", + "pauseSlideshow": "Pause slideshow", + "resumeSlideshow": "Jatka diaesitystä", + "toggleSlideshow": "Keskeytä tai jatka diaesitystä", + "photo": "Kuva {number}" + } }, "downloads": { "name": "Latauspääte", "description": "", "option": { - "columns": { - "label": "Näytettävät sarakkeet" - }, - "enableRowSorting": { - "label": "Salli kohteiden järjestys" - }, - "defaultSort": { - "label": "Järjestykseen oletusarvoisesti käytettävä sarake" - }, - "descendingDefaultSort": { - "label": "Käänteinen järjestys" - }, "showCompletedUsenet": { "label": "" }, @@ -2727,12 +4152,6 @@ "limitPerIntegration": { "label": "Integraation elementtien määrärajoitus", "description": "Tämä rajoittaa näytettävien elementtien määrää integraatiokohtaisesti, ei kokonaisvaltaisesti" - }, - "columnOrder": { - "label": "Sarakkeiden järjestys" - }, - "columnWidths": { - "label": "Sarakkeiden leveydet" } }, "errors": { @@ -2748,19 +4167,19 @@ }, "added": { "columnTitle": "Lisätty", - "detailsTitle": "" + "detailsTitle": "Lisätty" }, "category": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Kategoria", + "detailsTitle": "Kategoria" }, "downSpeed": { "columnTitle": "Lataus", - "detailsTitle": "" + "detailsTitle": "Ladattu kaikkiaan" }, "index": { "columnTitle": "#", - "detailsTitle": "" + "detailsTitle": "Indeksi" }, "id": { "columnTitle": "Tunniste", @@ -2774,40 +4193,40 @@ }, "progress": { "columnTitle": "Edistyminen", - "detailsTitle": "" + "detailsTitle": "Edistyminen" }, "ratio": { "columnTitle": "Suhde", - "detailsTitle": "" + "detailsTitle": "Suhde" }, "received": { "columnTitle": "Ladattu kaikkiaan", - "detailsTitle": "" + "detailsTitle": "Ladattu" }, "sent": { "columnTitle": "Lähetty kaikkiaan", - "detailsTitle": "" + "detailsTitle": "Ladattu" }, "size": { "columnTitle": "Tiedostokoko", - "detailsTitle": "" + "detailsTitle": "Tiedostokoko" }, "state": { "columnTitle": "Tila", - "detailsTitle": "" + "detailsTitle": "Tila" }, "time": { "columnTitle": "Valmistumisaika", - "detailsTitle": "", + "detailsTitle": "Valmistumisaika", "eta": "Arvioitu aika" }, "type": { "columnTitle": "Tyyppi", - "detailsTitle": "" + "detailsTitle": "Tyyppi" }, "upSpeed": { "columnTitle": "Lähetys", - "detailsTitle": "" + "detailsTitle": "Lähetty kaikkiaan" } }, "states": { @@ -2892,7 +4311,11 @@ }, "mediaRequests-requestList": { "name": "", - "description": "", + "description": "Katso lista kaikista median pyynnöistä Seerrin, Overseerrin tai Jellyseerrin instanssistasi", + "empty": { + "title": "Ei vielä mediatietoja", + "description": "Etsi elokuvaa tai näytä aloittaaksesi pyynnön." + }, "option": { "linksTargetNewTab": { "label": "Avaa linkit uudessa välilehdessä" @@ -2926,12 +4349,16 @@ "failed": "", "completed": "" }, + "unknown": "Tuntematon", "toBeDetermined": "" }, "mediaRequests-requestStats": { "name": "", "description": "", - "option": {}, + "empty": { + "title": "Ei pyyntöä vielä", + "description": "Tilastot tulevat näkyviin ensimmäisen mediatietopyynnön jälkeen." + }, "titles": { "stats": { "main": "", @@ -2941,8 +4368,7 @@ "declined": "", "available": "", "tv": "", - "movie": "", - "total": "" + "movie": "" }, "users": { "main": "", @@ -2968,7 +4394,6 @@ }, "currentIndex": "{start}-{end}/{total}", "healthCheck": { - "title": "Terveystarkastus", "queued": "Jonossa", "status": { "healthy": "Tervettä", @@ -2977,38 +4402,63 @@ }, "panel": { "statistics": { - "empty": "", - "transcodes": "Transkoodaukset", - "transcodesCount": "", - "healthChecksCount": "", "filesCount": "", "savedSpace": "", - "healthChecks": "Terveystarkastukset", "videoCodecs": "Koodekit", "videoContainers": "Kontit", "videoResolutions": "Resoluutiot" }, "workers": { - "empty": "Tyhjä", "table": { - "file": "", "eta": "", - "progress": "", - "transcode": "", - "healthCheck": "" + "progress": "" } }, "queue": { - "empty": "Tyhjä", "table": { - "file": "", - "size": "", - "transcode": "", - "healthCheck": "" + "size": "" } + }, + "common": { + "empty": "Tyhjä", + "file": "Tiedosto", + "healthCheck": "Terveystarkastus", + "transcode": "Transkoodaus", + "transcodes": "Transkoodaukset", + "healthChecks": "Terveystarkastukset" } } }, + "mediaMissing": { + "name": "Puuttuva & jonossa oleva media", + "description": "Näyttää puuttuvat ja jonossa olevat elokuvat ja jaksot Radarr:sta ja Sonarr:sta", + "option": { + "showMissing": { + "label": "Näytä puuttuvat kohteet" + }, + "showQueued": { + "label": "Näytä jonossa olevat kohteet" + }, + "pageSize": { + "label": "Kohteita per sivu" + } + }, + "tab": { + "missing": "Puuttuvat", + "queued": "Jonossa" + }, + "type": { + "movie": "Elokuva", + "episode": "Jakso", + "book": "Kirja" + }, + "empty": { + "missing": "Ei puuttuvia kohteita", + "queued": "Ei jonossa olevia kohteita", + "noTabsEnabled": "Ota käyttöön vähintään yksi välilehti widgetin asetuksissa" + }, + "timeLeft": "Jäljellä oleva aika" + }, "rssFeed": { "name": "", "description": "", @@ -3031,6 +4481,13 @@ "showPosterImage": { "label": "" } + }, + "error": { + "allFeedsFailed": "RSS-syötteitä ei voitu ladata. Tarkista syötteen URL-osoitteet ja yritä uudelleen." + }, + "warning": { + "partial": "{count, plural, one {# RSS-syötettä ei voitu ladata} other {# RSS-syötteitä ei voitu ladata}}", + "stale": "RSS-syötteitä ei voitu päivittää. Näytetään aiemmin ladatut merkinnät." } }, "releases": { @@ -3106,17 +4563,8 @@ "label": "" } }, - "edit": { - "label": "" - }, "editForm": { - "title": "", - "cancel": { - "label": "" - }, - "confirm": { - "label": "" - } + "title": "" }, "importForm": { "title": "" @@ -3133,8 +4581,7 @@ "label": "Palveluntarjoajan tokenit", "token": "Käyttöavain", "configured": "Token määritetty", - "notConfigured": "Tokenia ei ole asetettu", - "save": "Tallenna" + "notConfigured": "Tokenia ei ole asetettu" } } }, @@ -3161,17 +4608,32 @@ "noProviderResponse": "", "unexpected": "Odottamaton palveluntarjoajan virhe" } - } + }, + "expandDetails": "Näytä tiedot kohteelle {name}", + "collapseDetails": "Piilota tiedot kohteelle {name}" }, "networkControllerSummary": { - "option": {}, - "card": { - "vpn": { - "countConnected": "" + "advanced": { + "updated": "Päivitetty", + "metric": { + "latency": "Latenssi", + "ping": "Viive", + "uptime": "Käyttöaika", + "users": "Käyttäjät", + "guests": "Vieraat" } }, + "card": { + "vpn": { + "countConnected": "{count, plural, one {# yhdistetty} other {# yhdistetty}}", + "label": "VPN" + }, + "wan": "WAN", + "web": "Verkko", + "wifi": "Wi-Fi", + "lan": "LAN" + }, "error": { - "integrationsDisconnected": "Tietoja ei ole saatavilla, kaikki integraatiot on irrotettu", "unknownContentOption": "" }, "name": "", @@ -3208,7 +4670,6 @@ } }, "error": { - "integrationsDisconnected": "Tietoja ei ole saatavilla, kaikki integraatiot on irrotettu", "unknownContentOption": "" }, "name": "Verkon tila", @@ -3238,7 +4699,6 @@ "versiontitle": "", "cputitle": "", "memorytitle": "", - "cpu": "", "memory": "", "interfaces": { "name": "", @@ -3246,6 +4706,16 @@ "recv": "", "title": "Verkkosovittimet" } + }, + "empty": { + "noInterfaces": "Verkkoliittymän tietoja ei ole vielä" + }, + "versionUnknown": "Tuntematon versio", + "metricAccessible": "{metric}: {value} %, {status}", + "status": { + "normal": "Normaali", + "warning": "Varoitus", + "critical": "Kriittinen" } }, "notifications": { @@ -3255,8 +4725,21 @@ "option": { "hideLogos": { "label": "Piilota logot" + }, + "messageFormat": { + "label": "Viestin muoto", + "option": { + "auto": "Automaattinen", + "plain": "Pelkkä teksti", + "markdown": "Markdown", + "html": "HTML" + } } - } + }, + "openService": "Avaa ilmoituspalvelu", + "deleteNotification": "Poista ilmoitus Gotifysta", + "deleteFailed": "Ilmoitusta ei voitu poistaa", + "deleteFailedMessage": "Ilmoitusta ei voitu poistaa. Yritä uudelleen." }, "speedtestTracker": { "name": "", @@ -3298,7 +4781,6 @@ } }, "uptimeKuma": { - "name": "Uptime Kuma", "description": "Tarkkaile käytettävyystilastoja Uptime Kuma -tilasivultasi", "option": { "showAverageUptime": { @@ -3335,8 +4817,58 @@ }, "error": { "internalServerError": "Käytettävyystietojen haku epäonnistui" + }, + "status": { + "up": "Lähetty kaikkiaan", + "down": "Ladattu kaikkiaan", + "paused": "Keskeytetty" } }, + "traefik": { + "description": "Yleiskatsaus Traefikin reitittimistä, palveluista, middlewareista ja sisääntulopisteistä", + "option": { + "showTcp": { + "label": "Näytä TCP" + }, + "showUdp": { + "label": "Näytä UDP" + }, + "showEntryPoints": { + "label": "Näytä sisääntulopisteet" + } + }, + "instances": "Traefik-instanssit", + "versionUnknown": "Versio tuntematon", + "summary": { + "routers": "Reitittimet", + "entryPoints": "Sisääntulopisteet" + }, + "resource": { + "routers": "Reitittimet", + "middlewares": "Middlewaret" + }, + "status": { + "healthy": "Terve", + "errors": "{count} virhettä", + "warnings": "{count} varoitusta" + }, + "error": { + "internalServerError": "Traefikin tietojen nouto epäonnistui" + }, + "resourceType": { + "router": "Reititin", + "service": "Palvelu", + "middleware": "Keskivarasto" + }, + "resourceStatus": { + "enabled": "Käytössä", + "disabled": "Ei käytössä", + "warning": "Varoitus", + "error": "Virhe", + "unknown": "Tuntematon" + }, + "failedEndpoint": "Epäonnistui: {endpoint}" + }, "audioStats": { "name": "Äänitilastot", "description": "Kirjasto- ja toistotilastot Navidromesta tai Audiobookshelfistä", @@ -3401,9 +4933,7 @@ "label": "", "description": "Valitse näytettävät kartat.", "option": { - "cpu": "", "memory": "", - "gpu": "", "network": "Verkko" } }, @@ -3418,12 +4948,11 @@ } }, "card": { - "cpu": "", "memory": "", - "gpu": "", "network": "", "up": "", - "down": "" + "down": "", + "memoryTooltip": "{used} / {available} ({percent} %)" } }, "systemDisks": { @@ -3440,7 +4969,7 @@ "label": "" }, "absolute": { - "label": "" + "label": "Absoluuttiset arvot" }, "free": { "label": "" @@ -3449,151 +4978,88 @@ }, "showBackgroundBar": { "label": "" - }, - "visibleStorageVolumes": { - "label": "Näkyvät tallennusvolyymit", - "description": "Käytettävissä vain, kun kaikki valitut integraatiot ovat Synology. Jätä tyhjäksi näyttääksesi kaikki havaitut tallennusvolyymit.", - "placeholder": "Valitse tallennusvolyymit" } }, "status": { - "unhealthy": "" + "unhealthy": "", + "smart": "SMART", + "free": "{percentage}% vapaa" + } + }, + "customApi": { + "name": "Mukautettu widget", + "description": "Renderöi määritetty mukautettu JSX-määritelmä.", + "customJsx": { + "noTemplate": "JSX-mallia ei ole määritetty.", + "templateWarnings": "{count} sivupohjan varoitusta:", + "requestIdRequired": "Tämä verkon hallinta vaatii nimetyn pyynnön.", + "unsavedPreview": "Suorita alkuperäisen pyynnön testi editorissa ennen kuin testaa nimettyjä pyyntöjä.", + "invalidParams": "Pyyntöjen parametrit eivät kelpaa.", + "loading": "Ladataan pyyntöä...", + "loadRequest": "Lataa pyyntö", + "requestFailed": "Pyyntö epäonnistui.", + "retry": "Yritä pyyntöä uudelleen", + "actionCompleted": "Toiminto suoritettu onnistuneesti.", + "actionSimulated": "Simuloitu toiminta; pyyntöä ei lähetetty.", + "actionsDisabledEditMode": "Toiminnot eivät ole käytössä, kun taulu on muokkaustilassa.", + "widgetItemUnavailable": "Tämä widgetin kohde ei ole käytettävissä.", + "toggle": "Vaihda", + "copied": "Kopioitu", + "confirmDelete": "Vahvista tämä tuhoisa toiminta." + }, + "option": { + "definitionId": { + "label": "Mukautettu widget" + }, + "refreshInterval": { + "label": "Päivitysväli", + "description": "Kuinka usein data haetaan uudelleen API:sta (sekunteina)" + } + }, + "noDefinition": "Määritelmää ei valittu", + "definitionNotFound": "Mukautettu widget ei käytettävissä", + "migrationRequired": "Tämä vanhanaikainen mukautettu widget on säilytetty, mutta se on siirrettävä mukautettuun JSX v2 Hallitse mukautettuja widgetejä ennen kuin se voi suorittaa.", + "manageMigration": "Avaa hallitse mukautettuja widgetejä", + "contactAdmin": "Ota yhteyttä ylläpitäjään.", + "configurationNeedsRepair": "Tämän widgetin asetukset muuttuvat. Muokkaa widgetiä korjataksesi sen konfiguraatiota.", + "removeFromBoard": "Poista pöydältä", + "editModePending": "Tallenna taulu, jotta voit ladata tämän widgetin.", + "picker": { + "group": "Mukautetut JSX-widgetit", + "empty": "Mukautettuja widgetejä ei löytynyt", + "preview": "Esikatselu", + "sources": "{count, plural, one {# lähde} other {# lähdettä}}", + "requests": "{count, plural, one {# pyyntö} other {# pyyntöä}}", + "migrationRequired": "Muuttoa tarvitaan", + "migrationDescription": "Tämä sijoitettu v1 widget ei voi suorittaa vielä. Kopioi sen redacted nopea LLM, liitä yhden JSON vastaus Homarr.", + "manageMigration": "Avaa hallitse mukautettuja widgetejä", + "contactAdmin": "Ota yhteyttä ylläpitäjään." + }, + "configuration": { + "needsAttention": "Asetukset tarvitsevat huomiota: {message}", + "advancedOptions": "Lisäasetukset", + "invalidJson": "Virheellinen JSON" } }, "beszelSystemTable": { "name": "Beszel-järjestelmät (taulukko)", "description": "Taulukkonäkymä kaikista Beszel-valvotuista järjestelmistä, lajiteltavilla sarakkeilla ja tilaindikaattoreilla", "option": { - "statusFilter": { - "label": "Tilasuodatin" - }, "sortBy": { "label": "Lajitteluperuste" }, "sortDirection": { "label": "Lajittelusuunta" - }, - "showCpu": { - "label": "Näytä suoritin" - }, - "showMemory": { - "label": "Näytä muisti" - }, - "showDisk": { - "label": "Näytä levy" - }, - "showGpu": { - "label": "Näytä näytönohjain" - }, - "showLoadAvg": { - "label": "Näytä kuormituskeskiarvo" - }, - "showNet": { - "label": "Näytä verkko" - }, - "showTemp": { - "label": "Näytä lämpötila" - }, - "showBattery": { - "label": "Näytä akku" - }, - "showServices": { - "label": "Näytä palvelut" - }, - "showUptime": { - "label": "Näytä käynnissäoloaika" - }, - "showAgent": { - "label": "Näytä agentin versio" - }, - "columnOrder": { - "label": "Sarakkeiden järjestys" - }, - "columnWidths": { - "label": "Sarakkeiden leveydet" } }, - "noRecords": "Järjestelmiä ei löytynyt", "error": { - "internalServerError": "Beszel-yhteyden muodostaminen epäonnistui. Tarkista integraatioasetuksesi.", "layoutSaveTitle": "Taulukon asettelua ei voitu tallentaa", "layoutSaveMessage": "Sarakkeiden järjestystä tai leveyksiä ei voitu tallentaa. Yritä uudelleen." - }, - "column": { - "system": "Järjestelmä", - "cpu": "Suoritin", - "memory": "Muisti", - "disk": "Levy", - "gpu": "Näytönohjain", - "loadAvg": "Kuormituska", - "net": "Verkko", - "temp": "Lämpötila", - "battery": "Akku", - "services": "Palvelut", - "uptime": "Käynnissäoloaika", - "agent": "Agentti" } }, "beszelSystemGrid": { "name": "Beszel-järjestelmät (ruudukko)", - "description": "Korttiruudukkonäkymä kaikista Beszel-valvotuista järjestelmistä reaaliaikaisilla mittareilla", - "option": { - "statusFilter": { - "label": "Tilasuodatin" - }, - "showCpu": { - "label": "Näytä suoritin" - }, - "showMemory": { - "label": "Näytä muisti" - }, - "showDisk": { - "label": "Näytä levy" - }, - "showGpu": { - "label": "Näytä näytönohjain" - }, - "showLoadAvg": { - "label": "Näytä kuormituskeskiarvo" - }, - "showNet": { - "label": "Näytä verkko" - }, - "showTemp": { - "label": "Näytä lämpötila" - }, - "showBattery": { - "label": "Näytä akku" - }, - "showServices": { - "label": "Näytä palvelut" - }, - "showUptime": { - "label": "Näytä käynnissäoloaika" - }, - "showAgent": { - "label": "Näytä agentin versio" - } - }, - "error": { - "internalServerError": "Beszel-yhteyden muodostaminen epäonnistui. Tarkista integraatioasetuksesi." - }, - "empty": { - "noSystems": "Järjestelmiä ei löytynyt" - }, - "metric": { - "cpu": "Suoritin", - "memory": "Muisti", - "disk": "Levy", - "gpu": "Näytönohjain", - "loadAvg": "Kuormituska", - "net": "Verkko", - "temp": "Lämpötila", - "battery": "Akku", - "services": "Palvelut", - "uptime": "Käynnissäoloaika", - "agent": "Agentti" - } + "description": "Korttiruudukkonäkymä kaikista Beszel-valvotuista järjestelmistä reaaliaikaisilla mittareilla" }, "beszelAlerts": { "name": "Beszel-hälytykset", @@ -3607,11 +5073,12 @@ } }, "empty": "Ei määritettyjä hälytyksiä", - "error": { - "internalServerError": "Beszel-yhteyden muodostaminen epäonnistui. Tarkista integraatioasetuksesi." - }, "history": "Historia", "resolved": "Kuitattu", + "alertDescription": { + "statusDuration": "Alas {minutes} min", + "threshold": "Ylittää arvon {value} {minutes} minuutin ajan" + }, "status": { "triggered": "Lauennut", "ok": "OK" @@ -3658,16 +5125,16 @@ "noSystems": "Järjestelmiä ei löytynyt" }, "error": { - "internalServerError": "Beszel-yhteyden muodostaminen epäonnistui. Tarkista integraatioasetuksesi.", "liveConnectionFailed": "Live-yhteys epäonnistui. Beszel-instanssisi ei ehkä tue reaaliaikaista suoratoistoa.", "switchToHistorical": "Siirry historialliseen näkymään", - "systemNotFound": "Valittua järjestelmää ei löydy. Valitse eri järjestelmä." + "systemNotFound": "Valittua järjestelmää ei löydy. Valitse eri järjestelmä.", + "selectionSaveTitle": "Valintaa ei voitu tallentaa", + "selectionSaveMessage": "Järjestelmäsi tai aikajaksosi valintaa ei voitu tallentaa. Yritä uudelleen." }, "chart": { "cpu": { "title": "Suorittimen kuormitus", - "subtitle": "Keskimääräinen koko järjestelmän suorittimen käyttö", - "series": "Suoritin" + "subtitle": "Keskimääräinen koko järjestelmän suorittimen käyttö" }, "memory": { "title": "Muistin varaus", @@ -3709,289 +5176,550 @@ "title": "Docker-verkon I/O", "subtitle": "Docker-konttien verkkoliikenne" } + }, + "period": { + "live": "Suora", + "oneHour": "1t", + "twelveHours": "12h", + "oneDay": "24h", + "oneWeek": "1w", + "thirtyDays": "30pv" } }, - "patchmon": { - "name": "PatchMon", - "description": "Yleiskatsaus isäntien päivitystilanteesta PatchMonista", - "title": "PatchMon-tilastot", - "totalHosts": "Isännät yhteensä", - "hostsNeedingUpdates": "Päivitystä tarvitsevat", - "securityUpdates": "Tietoturvapäivitykset", - "upToDateHosts": "Ajan tasalla olevat isännät", - "hostsWithSecurityUpdates": "Isännät, joilla on tietoturvapäivityksiä", - "recentUpdates24h": "Päivitykset (24 h)", - "totalOutdatedPackages": "Vanhentuneet paketit", - "totalRepos": "Pakettivarastot", - "osDistribution": "Käyttöjärjestelmien jakauma", - "compliance": "Päivityskattavuus", - "complianceRatio": "{upToDate} / {total}", - "lastUpdated": "Päivitetty {time}", - "option": { - "showTotalHosts": { - "label": "Näytä isännät yhteensä", - "description": "Näytä valvottujen isäntien kokonaismäärä" - }, - "showHostsNeedingUpdates": { - "label": "Näytä päivitystä tarvitsevat isännät", - "description": "Näytä isännät, joilla on vähintään yksi vanhentunut paketti" - }, - "showSecurityUpdates": { - "label": "Näytä tietoturvapäivitykset", - "description": "Näytä saatavilla olevien tietoturvapäivitysten kokonaismäärä" - }, - "showUpToDateHosts": { - "label": "Näytä ajan tasalla olevat isännät", - "description": "Näytä isännät, joissa ei ole vanhentuneita paketteja" - }, - "showHostsWithSecurityUpdates": { - "label": "Näytä isännät, joilla on tietoturvapäivityksiä", - "description": "Näytä isännät, jotka tarvitsevat tietoturvakorjauksia" - }, - "showRecentUpdates24h": { - "label": "Näytä viimeaikaiset päivitykset (24 h)", - "description": "Näytä viimeisen 24 tunnin aikana asennettujen päivitysten määrä" - }, - "showTotalOutdatedPackages": { - "label": "Näytä vanhentuneet paketit", - "description": "Näytä vanhentuneiden pakettien kokonaismäärä kaikissa isännissä" - }, - "showTotalRepos": { - "label": "Näytä repositoriot", - "description": "Näytä valvottavien aktiivisten repositorioiden määrä" - }, - "enableThresholdColors": { - "label": "Ota käyttöön kynnysarvovärit", - "description": "Väritä tilastoarvot vihreäksi, keltaiseksi tai punaiseksi vakavuusesiasetusten perusteella" - }, - "useCustomThresholds": { - "label": "Edistyneet kynnysarvot", - "description": "Mukauta varoitus- ja kriittiset kynnysarvot tilastoittain käyttäen absoluuttisia määriä tai prosenttiosuutta isäntien kokonaismäärästä" - }, - "thresholdMode": { - "option": { - "absolute": "Absoluuttinen määrä", - "percent": "Prosenttia isäntien kokonaismäärästä" - } - }, - "hostsNeedingUpdatesThresholdMode": { - "label": "Päivityksiä tarvitsevien kynnysarvotila", - "description": "Vertaa päivitystarpeiden määrää absoluuttisena arvona tai prosenttiosuutena isäntien kokonaismäärästä" - }, - "hostsNeedingUpdatesWarningAt": { - "label": "Päivitystarpeiden varoituskynnysarvo", - "description": "Muuta keltaiseksi, kun arvo saavuttaa tämän kynnysarvon" - }, - "hostsNeedingUpdatesCriticalAt": { - "label": "Päivitystarpeiden kriittinen kynnysarvo", - "description": "Muuta punaiseksi, kun arvo saavuttaa tämän kynnysarvon" - }, - "securityUpdatesThresholdMode": { - "label": "Tietoturvapäivitysten kynnysarvotila", - "description": "Vertaa tietoturvapäivitysten määrää absoluuttisena arvona tai prosenttiosuutena isäntien kokonaismäärästä" - }, - "securityUpdatesWarningAt": { - "label": "Tietoturvapäivitysten varoituskynnysarvo", - "description": "Muuta keltaiseksi, kun arvo saavuttaa tämän kynnysarvon" - }, - "securityUpdatesCriticalAt": { - "label": "Tietoturvapäivitysten kriittinen kynnysarvo", - "description": "Muuta punaiseksi, kun arvo saavuttaa tämän kynnysarvon" - }, - "hostsWithSecurityUpdatesThresholdMode": { - "label": "Tietoturvapäivityksiä sisältävien isäntien kynnysarvotila", - "description": "Vertaa isäntien määrää absoluuttisena arvona tai prosenttiosuutena isäntien kokonaismäärästä" - }, - "hostsWithSecurityUpdatesWarningAt": { - "label": "Tietoturvapäivityksiä sisältävien isäntien varoituskynnysarvo", - "description": "Muuta keltaiseksi, kun arvo saavuttaa tämän kynnysarvon" - }, - "hostsWithSecurityUpdatesCriticalAt": { - "label": "Tietoturvapäivityksiä sisältävien isäntien kriittinen kynnysarvo", - "description": "Muuta punaiseksi, kun arvo saavuttaa tämän kynnysarvon" - }, - "upToDateHostsThresholdMode": { - "label": "Ajan tasalla olevien isäntien kynnysarvotila", - "description": "Vertaa ajan tasalla olevien isäntien määrää absoluuttisena arvona tai prosenttiosuutena isäntien kokonaismäärästä" - }, - "upToDateHostsWarningAt": { - "label": "Ajan tasalla olevien isäntien varoituskynnysarvo", - "description": "Muuta keltaiseksi, kun arvo on vähintään tämä kynnysarvo, mutta alle täyden kattavuuden" - }, - "upToDateHostsCriticalAt": { - "label": "Ajan tasalla olevien isäntien kriittinen kynnysarvo", - "description": "Muuta punaiseksi, kun arvo laskee tämän kynnysarvon alle" - }, - "totalOutdatedPackagesThresholdMode": { - "label": "Vanhentuneiden pakettien kynnysarvotila", - "description": "Vertaa vanhentuneiden pakettien määrää absoluuttisena arvona tai prosenttiosuutena isäntien kokonaismäärästä" - }, - "totalOutdatedPackagesWarningAt": { - "label": "Vanhentuneiden pakettien varoituskynnysarvo", - "description": "Muuta keltaiseksi, kun arvo saavuttaa tämän kynnysarvon" - }, - "totalOutdatedPackagesCriticalAt": { - "label": "Vanhentuneiden pakettien kriittinen kynnysarvo", - "description": "Muuta punaiseksi, kun arvo saavuttaa tämän kynnysarvon" - }, - "showOsDistribution": { - "label": "Näytä käyttöjärjestelmäjakauma", - "description": "Näytä erittely valvotuista isännistä käyttöjärjestelmittäin" - }, - "osDistributionLimit": { - "label": "Käyttöjärjestelmäjakauman rajoitus", - "description": "Näytettävien käyttöjärjestelmien enimmäismäärä", - "option": { - "3": "3 parasta", - "5": "5 parasta", - "10": "10 parasta", - "all": "Kaikki" - } - }, - "showOsVersion": { - "label": "Näytä käyttöjärjestelmän versio", - "description": "Liitä käyttöjärjestelmän versio jokaiseen jakauman nimikkeeseen, kun se on saatavilla" - }, - "showComplianceHero": { - "label": "Näytä compliance-hero", - "description": "Näytä vaatimustenmukaisuusrengas, joka näyttää ajan tasalla olevien isäntien prosenttiosuuden" - }, - "osDisplayMode": { - "label": "Käyttöjärjestelmän näyttötila", - "description": "Valitse, miten käyttöjärjestelmän jakelu näytetään", - "option": { - "bars": "Vaakapalkit", - "donut": "Donitsikaavio" - } - } + "assistant": { + "name": "Avustaja", + "description": "Ota täydellinen avustajakeskustelu suoraan pöydällesi.", + "unavailable": { + "title": "Avustaja ei saatavilla", + "description": "Kirjaudu sisään ja pyydä järjestelmänvalvojaa määrittämään assistentin hallintapaneelista." }, + "compact": { + "title": "Avustaja", + "description": "Muuta tämän widgetin kokoa keskustellaksesi täällä tai avataksesi koko keskustelun.", + "open": "Avaa assistentti", + "openTitle": "Avustaja auki sivupaneelissa", + "openDescription": "Keskustelu pysyy yhdellä aktiivisella pinnalla.", + "returnToWidget": "Palauta keskustelu tähän widgetiin", + "otherWidgetTitle": "Toisessa widgetissä aktiivinen avustaja", + "otherWidgetDescription": "Vain yksi keskustelupinta pysyy aktiivisena kerrallaan.", + "useHere": "Käytä avustajaa tässä widgetissä" + } + }, + "beszel": { "error": { - "internalServerError": "PatchMon-tietojen nouto epäonnistui" - } - }, - "bazarr": { - "name": "Bazarr", - "description": "Yleiskatsaus puuttuvista tekstityksistä ja terveystilasta Bazarr-instanssistasi", - "episodes": "Puuttuvat jaksot", - "movies": "Puuttuvat elokuvat", - "providers": "Palveluntarjoajan ongelmat", - "status": "Terveysongelmat", - "option": { - "showMissingEpisodes": { - "label": "Näytä puuttuvat jaksot", - "description": "Näytä niiden jaksojen määrä, joista puuttuu tekstitys" - }, - "showMissingMovies": { - "label": "Näytä puuttuvat elokuvat", - "description": "Näytä niiden elokuvien määrä, joista puuttuu tekstitykset" - }, - "showProviderIssues": { - "label": "Näytä tarjoajien ongelmat", - "description": "Näytä ongelmallisten tekstitystarjoajien määrä" - }, - "showHealthIssues": { - "label": "Näytä kunto-ongelmat", - "description": "Näytä Bazarrin kunto-ongelmien määrä" - } - }, - "error": { - "internalServerError": "Bazarrin tietojen nouto epäonnistui" - } - }, - "mediaMissing": { - "name": "Puuttuva & jonossa oleva media", - "description": "Näyttää puuttuvat ja jonossa olevat elokuvat ja jaksot Radarr:sta ja Sonarr:sta", - "option": { - "showMissing": { - "label": "Näytä puuttuvat kohteet" - }, - "showQueued": { - "label": "Näytä jonossa olevat kohteet" - }, - "pageSize": { - "label": "Kohteita per sivu" - } - }, - "tab": { - "missing": "Puuttuvat", - "queued": "Jonossa" - }, - "type": { - "movie": "Elokuva", - "episode": "Jakso" + "internalServerError": "Beszel-yhteyden muodostaminen epäonnistui. Tarkista integraatioasetuksesi." }, "empty": { - "missing": "Ei puuttuvia kohteita", - "queued": "Ei jonossa olevia kohteita", - "noTabsEnabled": "Ota käyttöön vähintään yksi välilehti widgetin asetuksissa" + "noSystems": "Järjestelmiä ei löytynyt" }, - "timeLeft": "Jäljellä oleva aika" - }, - "traefik": { - "name": "Traefik", - "description": "Yleiskatsaus Traefikin reitittimistä, palveluista, middlewareista ja sisääntulopisteistä", - "option": { - "showTcp": { - "label": "Näytä TCP" + "options": { + "statusFilter": { + "label": "Tilan suodatin" }, - "showUdp": { - "label": "Näytä UDP" + "showCpu": { + "label": "Näytä Suoritin" }, - "showEntryPoints": { - "label": "Näytä sisääntulopisteet" + "showMemory": { + "label": "Näytä muisti" + }, + "showDisk": { + "label": "Näytä levy" + }, + "showGpu": { + "label": "Näytä GPU" + }, + "showLoadAvg": { + "label": "Näytä lataus keskimäärin" + }, + "showNet": { + "label": "Näytä verkko" + }, + "showTemp": { + "label": "Näytä lämpötila" + }, + "showBattery": { + "label": "Näytä akku" + }, + "showServices": { + "label": "Näytä palvelut" + }, + "showUptime": { + "label": "Näytä käytettävyys" + }, + "showAgent": { + "label": "Näytä agenttiversio" } }, - "instances": "Traefik-instanssit", - "versionUnknown": "Versio tuntematon", - "summary": { - "routers": "Reitittimet", - "entryPoints": "Sisääntulopisteet" - }, - "resource": { - "routers": "Reitittimet", - "services": "Palvelut", - "middlewares": "Middlewaret" - }, - "status": { - "healthy": "Terve", - "errors": "{count} virhettä", - "warnings": "{count} varoitusta" - }, - "error": { - "internalServerError": "Traefikin tietojen nouto epäonnistui" + "metric": { + "system": "Järjestelmä", + "source": "Integraatio", + "hostname": "Hostname", + "cpuModel": "Suorittimen malli", + "cores": "Cores", + "memoryTotal": "Muistia yhteensä", + "memory": "Muisti", + "disk": "Levy", + "loadAvg": "Lataa Keskim.", + "net": "Verkko", + "temp": "Väliaikainen", + "battery": "Lepakko", + "uptime": "Käyttöaika", + "agent": "Agentin" } }, - "wud": { - "name": "Mikä Ylös Docker", - "description": "Näytä kuinka monta katsottua astiaa on saatavilla päivityksiä.", - "title": "Mikä Ylös Docker", - "monitored": "Valvottu", - "updatesAvailable": "{count, plural, one {# päivitys saatavilla} other {# päivitystä saatavilla}}", - "updateAvailable": "Päivitys saatavilla", - "openReleaseNotes": "Avaa julkaisutiedot", + "llamacpp": { + "name": "llama.cpp", + "description": "Näytä paikallisen llama.cpp palvelimen terveys, ladattu malli ja sukupolven nopeus.", + "title": "llama.cpp", + "status": { + "unhealthy": "Epäterveellinen ({status})" + }, + "idle": "Toimeton", + "speedTooltip": { + "current": "Nykyisen sukupolven nopeus", + "average": "Keskimääräinen generoinnin nopeus käynnistyksen jälkeen", + "request": "Keskimääräinen nopeus pyynnön alkamisen jälkeen" + }, + "busy": "{count, plural, one {# pyyntö käynnissä} other {# pyyntöä käynnissä}}", + "modelInfo": { + "context": "Konteksti", + "size": "Tiedoston koko", + "parameters": "Parametrit", + "model": "Malli", + "quantization": "Määrittäminen" + }, + "stats": { + "tokensProcessed": "Tokenit käsitelty", + "contextUsage": "Konteksti / KV käyttö", + "cacheHitRate": "Kysy välimuistin osumataajuutta", + "tokensGenerated": "Tokenit luotu" + }, + "error": { + "unreachable": "llama-palvelin ei ole tavoitettavissa" + }, + "unit": { + "speed": "{value} t/s", + "parameters": "{value}B", + "none": "—", + "speedShort": "t/s" + }, "option": { "showTitle": { "label": "Näytä otsikko" }, - "showRing": { - "label": "Näytä päivitysrengas" + "showModelInfo": { + "label": "Näytä mallin tiedot" }, - "layout": { - "label": "Asettelu", + "showContextUsage": { + "label": "Näytä kontekstin käyttö" + }, + "showCacheHitRate": { + "label": "Näytä kätkön osumataajuus" + }, + "showSpeedStats": { + "label": "Näytä nopeuden tilastot" + }, + "showRequests": { + "label": "Näytä pyynnön lataus" + }, + "showTokenStats": { + "label": "Näytä tunnisteen loppusummat" + }, + "showSpeculative": { + "label": "Näytä spekulatiivinen dekoodaus" + } + }, + "advanced": { + "promptSpeed": "Nopea nopeus", + "avgSpeed": "Keskim. luominen", + "requests": "Pyynnöt", + "deferred": "Laskettu", + "slots": "{processing}/{total} paikkaa varattuna", + "speculative": "Spekulatiivinen dekoodaus", + "avgPrompt": "Keskim. kehote", + "specDrafts": "Tekniset luonnokset", + "specAccepted": "Spec. hyväksytyt rahakkeet", + "specDraftTokens": "Spec. luonnokset poletteja" + } + }, + "stats": { + "name": "Tilastot", + "description": "Yhdistä tilastot integraatioista yhdessä konfiguroitavissa widget.", + "configure": "Määritä mittarit", + "refresh": "Päivitä tilastot", + "empty": "Avaa widgetin asetukset, valitse integraatiot ja lisää sitten metriikka.", + "editorHelp": "Lisää mittareita valituista integraatioista tälle widgetille. Muutokset tallennetaan hallintapaneelillasi.", + "source": "Integraatio", + "metric": "Metrinen", + "noMetrics": "Tälle integroinnille ei ole saatavilla tilastoja", + "add": "Lisää metrinen", + "label": "Mukautettu tunniste", + "hidden": "Piilotettu", + "compact": "Kompakti numerot", + "moveUp": "Siirrä ylös", + "moveDown": "Siirrä alas", + "remove": "Poista metrinen", + "loading": "Ladataan…", + "unavailable": "Unavailable", + "refreshFailed": "Päivitys epäonnistui — tallennettujen tietojen näyttäminen", + "stale": "Tallennetut tiedot — päivitä", + "table": { + "value": "Arvo", + "status": "Tila" + }, + "option": { + "table": { + "label": "Taulun näkymä" + }, + "rows": { + "label": "Kompakti rivit" + }, + "showIcon": { + "label": "Näytä lähdekuvake" + }, + "spacing": { + "label": "Väli", "option": { - "horizontal": { - "label": "Vaaka" + "xs": { + "label": "Kompakti" }, - "vertical": { - "label": "Pysty" + "sm": { + "label": "Mukava" + }, + "md": { + "label": "Tilava" } } }, - "showUpdateList": { - "label": "Näytä kontin päivityslista", - "description": "Luettele jokaisen seuratun säiliön joka on saatavilla päivityksessä" + "entries": { + "label": "Metrics" + }, + "plain": { + "label": "Poista kortin taustat" } - } + }, + "fetchFailed": "Tilastoja ei voitu hakea", + "viewOptions": "Muokkaa tätä näkymää", + "moreMetrics": "{count} lisää lisänäytössä", + "localHelp": "Layout, muotoilu ja näkyvyys koskevat vain tätä näkymää. Jaetut lauta-asetukset pysyvät samoina.", + "plain": "Poista kortin taustat", + "resetView": "Nollaa näkymä", + "allHidden": "Kaikki mittarit on piilotettu tähän näkymään. Käytä Muokkaa tätä näkymää palauttaaksesi ne." + }, + "wazuh": { + "target": { + "api": "Wazuh palvelimen API", + "indexer": "Wazuh indexer", + "wazuh": "Wazuh" + }, + "severity": { + "low": "Matala", + "medium": "Keskikokoinen", + "high": "Korkea", + "critical": "Kriittinen" + }, + "error": { + "unauthorized": { + "title": "{target} hylkäsi käyttäjätunnukset", + "description": "Tarkista Wazuh integraation käyttäjätunnus ja salasana. Palvelimen API (portti 55000) ja indeksoija (portti 9200) käyttävät erillisiä käyttäjiä." + }, + "certificate": { + "title": "{target} varmenne ei ole luotettu", + "description": "Wazuh käyttää oletuksena itse allekirjoitettua varmennetta. Suorita \"Testaa yhteyttä\" integraatiossa ja luota varmenteeseen tai lisää varmenne Asetukset → Sertifikaatit." + }, + "unreachable": { + "title": "{target} ei tavoita", + "description": "Palvelin kieltäytyi tai pudotti yhteyden. Tarkista URL, portti ja palomuuri. Indeksoija kuuntelee vain paikallisessa palvelimessa oletuksena all-in-one -asennuksessa." + }, + "timeout": { + "title": "{target} aikakatkaistu", + "description": "Ei vastausta 15 sekunnin kuluessa. Palvelu voi olla ylikuormitettu tai osoite voi olla väärä." + }, + "status": { + "title": "{target} palautti virheen", + "description": "Pyyntö epäonnistui HTTP tilalla {status}." + }, + "invalidResponse": { + "title": "Odottamaton vastaus {target}", + "description": "Tarkista, että URL osoittaa Wazuh palvelimen API tai indexer eikä kojelautaan." + }, + "indexerRequired": { + "title": "Wazuh indexer tunnukset vaaditaan", + "description": "Wazuhin indeksiltä luetaan hälytykset, haavoittuvuudet ja tiedostojen eheystapahtumat. Lisää integraatioon indeksoijan URL-osoite, käyttäjätunnus ja salasana." + }, + "unknown": { + "title": "Tietoja ei voitu ladata {target}", + "description": "Tarkista Homarr lokit lisätietoja." + } + }, + "range": { + "1h": "1t", + "24h": "24h", + "7d": "7pv", + "30d": "30pv" + }, + "levelTooltip": "Säännön taso {level} ({severity})" + }, + "wazuhAgents": { + "name": "Wazuh aineet", + "description": "Sortable list of Wazuh agents with status, OS, version and last keepalive", + "option": { + "statusFilter": { + "label": "Näytä agentit" + }, + "sortBy": { + "label": "Järjestä" + }, + "showVersion": { + "label": "Näytä Wazuh versio sarake" + }, + "showGroups": { + "label": "Näytä ryhmien sarake" + } + }, + "title": "Agentit", + "total": "{count} agenttia", + "status": { + "active": "Aktiivinen", + "disconnected": "Yhteys Katkaistu", + "neverConnected": "Ei yhdistetty", + "pending": "Odottaa" + }, + "statusLabel": { + "active": "Aktiivinen", + "disconnected": "Yhteys Katkaistu", + "never_connected": "Ei yhdistetty", + "pending": "Odottaa", + "unknown": "Tuntematon" + }, + "live": "Suora", + "snapshot": "Tilannevedos {age} vanha", + "snapshotHint": "Lue Wazuh kojelaudan agentin tilannevedosta (wazuh-monitoring) joka on otettu {time}-palvelimen kautta. Lisää palvelimen API-tunnukset live datalle.", + "staleSnapshot": "Asiakkaan {time} tilannekatsaus on vanhentunut. Tarkista, että Wazuh kojelaudan seurantatyö on käynnissä, tai lisää palvelimen API-tunnisteet.", + "noDisconnected": "Kaikki agentit ovat yhteydessä", + "empty": "Suodatinta ei vastaa agentteja", + "column": { + "status": "Tila", + "name": "Työn nimi", + "ip": "IP", + "os": "Käyttöjärjestelmä", + "version": "Versio", + "lastKeepAlive": "Keepalive", + "groups": "Ryhmät" + }, + "outdated": "Vanhempi kuin uusin agenttiversio ({version})" + }, + "wazuhAlerts": { + "name": "Wazuh hälytykset syöte", + "description": "Viimeaikaiset Wazuh hälytykset tasolla, MITRE ATT&CK tekniikoita, agentti ja lähde IP", + "option": { + "minLevel": { + "label": "Pienin sääntötaso", + "description": "Wazuh tasot: 0–6 matala, 7–11 keskitaso, 12–14 korkea, 15+ kriittinen" + }, + "hours": { + "label": "Aika-ikkuna (tuntia)" + }, + "limit": { + "label": "Kuulutusten määrä" + }, + "showMitre": { + "label": "Show MITRE ATT&CK techniques" + }, + "showAgent": { + "label": "Näytä agentti" + }, + "showSourceIp": { + "label": "Näytä lähde IP" + }, + "showRuleId": { + "label": "Näytä säännön tunnus" + } + }, + "title": "Hälytykset · taso {level}+ · {hours} h", + "empty": "Ei hälytyksiä tällä tasolla. Kaikki hiljainen.", + "rule": "Sääntö {id}", + "openInDashboard": "Avaa tämä hälytys Wazuhin hallintapaneelissa" + }, + "wazuhSummary": { + "name": "Wazuh hälytyksen vakavuus", + "description": "Hälytyksen vakavuusjakauma ja suuntaus edelliseen kauteen verrattuna", + "option": { + "range": { + "label": "Aikaväli" + }, + "showTrend": { + "label": "Näytä trendi edelliseltä kaudelta" + }, + "showFooter": { + "label": "Näytä alatunniste" + } + }, + "title": "Hälytyksen vakavuus · {range}", + "alerts": "hälytykset", + "none": "Ei hälytyksiä", + "trend": { + "new": "uusi", + "tooltip": "Edellinen jakso: {previous}" + }, + "previous": "Edellinen {range}: {count}", + "maxLevel": "Maksimi taso {level}", + "health": "Indeksoijan terveys: {status}", + "manager": "Hallitse {version}" + }, + "wazuhTimeline": { + "name": "Wazuh alerts timeline", + "description": "Pinottu kaavio Wazuh hälytyksiä ajan mittaan vakavuuden mukaan", + "option": { + "range": { + "label": "Aikaväli" + }, + "interval": { + "label": "Aikaväli" + }, + "chartType": { + "label": "Kaavion tyyppi" + }, + "yScale": { + "label": "Y akselin mittakaava", + "description": "Neliöjuuri pitää korkeat ja kriittiset hälytykset näkyvissä tuhansien alhaisten hälytysten vieressä" + }, + "minLevel": { + "label": "Pienin sääntötaso" + }, + "showLegend": { + "label": "Näytä selitteet yhteenlaskettuina" + } + }, + "title": "Hälytysten aikajana · {range}", + "total": "{count} hälytystä", + "interval": "per {interval}" + }, + "wazuhTopList": { + "name": "Wazuh top list", + "description": "Eniten sääntöjä, agentteja, lähdeIP-osoitteita tai MITRE ATT&CK taktiikoita ja tekniikoita hälytysten mukaan", + "option": { + "kind": { + "label": "Sija" + }, + "range": { + "label": "Aikaväli" + }, + "limit": { + "label": "Tietueiden määrä" + }, + "minLevel": { + "label": "Pienin sääntötaso" + }, + "showBars": { + "label": "Näytä palkit" + } + }, + "title": { + "rules": "Parhaat säännöt · {range}", + "agents": "Parhaat agentit · {range}", + "sourceIps": "Parhaat lähteet · {range}", + "mitreTactics": "MITRE taktiikka · {range}", + "mitreTechniques": "MITRE techniques · {range}" + }, + "empty": { + "rules": "Ei hälytyksiä tänä aikana", + "agents": "Ei hälytyksiä tänä aikana", + "sourceIps": "Ei hälytyksiä lähteen IP-osoitteella tällä ajanjaksolla", + "mitreTactics": "MITRE ATT&CK:iin ei ole liitetty hälytyksiä tällä ajanjaksolla", + "mitreTechniques": "MITRE ATT&CK:iin ei ole liitetty hälytyksiä tällä ajanjaksolla" + }, + "totalTooltip": "{count} vastaavaa hälytystä", + "private": "LAN", + "public": "Julkinen", + "agents": "Nähty {count} agenttia", + "others": "{count} lisää hälytyksiä muissa merkinnöissä" + }, + "wazuhVulnerabilities": { + "name": "Wazuh haavoittuvuudet", + "description": "Haavoittuvuusluku, parhaat CVE:t ja haavoittuvimmat tekijät", + "option": { + "cveOrder": { + "label": "Sijoitus CVE:t by" + }, + "minSeverity": { + "label": "CVE:n vakavuus" + }, + "cveLimit": { + "label": "CVE:iden lukumäärä" + }, + "agentLimit": { + "label": "Apuaineiden lukumäärä" + }, + "showAgents": { + "label": "Näytä haavoittuvimmat tekijät" + } + }, + "title": "Haavoittuvuus", + "topCves": "Parhaat CVE:t", + "score": "Pisteet", + "agentsShort": "Agentit", + "topAgents": "Eniten haavoittuvia tekijöitä", + "criticalHigh": "Crit / Korkea", + "totalTooltip": "{count} havaintoa {agents} agentissa", + "affected": "{count} agenttia", + "empty": "Ei havaittuja haavoittuvuuksia", + "distribution": "Vakavuuden jakauma. {unscored} havaintoa ilman pisteytystä ei näytetä.", + "worst": "Huonoin: {id} ({score}) {agents} agentissa" + }, + "wazuhFim": { + "name": "Wazuh tiedoston eheys", + "description": "Viimeaikaiset tiedostojen eheyden seuranta (syscheck)", + "option": { + "range": { + "label": "Aikaväli" + }, + "event": { + "label": "Tapahtumat" + }, + "limit": { + "label": "Tapahtumien lukumäärä" + }, + "includeRegistry": { + "label": "Sisällytä Windows-rekisterin tapahtumat" + } + }, + "title": "Tiedoston eheys · {range}", + "event": { + "added": "Lisätty", + "modified": "Muokattu", + "deleted": "Poistettu", + "unknown": "Muutettu" + }, + "empty": "Ei tiedostojen eheystapahtumia tänä aikana", + "user": "esittäjä: {user}", + "registry": "Rekisteriin" + }, + "wazuhAuthFailures": { + "name": "Wazuh autentikointi epäonnistuu", + "description": "Epäonnistuneet kirjautumiset ja brute-force hälytykset per agentti tuntikohtaisesti sparklines", + "option": { + "hours": { + "label": "Aika-ikkuna (tuntia)" + }, + "limit": { + "label": "Apuaineiden lukumäärä" + }, + "showSourceIps": { + "label": "Näytä ylimmän lähdekoodin IP-osoitteet" + } + }, + "title": "Auth epäonnistumiset · {hours}h", + "seriesTooltip": "Kaikki agentit viimeisen {hours}tunnin aikana", + "peak": "Huippu {count}/jakso", + "empty": "Tällä ajanjaksolla ei ole kirjautumisia", + "failed": "Epäonnistuneet kirjautuminen", + "failedHint": "Yksittäinen todennus epäonnistumiset (sshd, PAM, Windows-loki, virheellinen käyttäjä)", + "bruteForce": "Brute voima", + "bruteForceHint": "Korreloivat brute-force -säännöt (useita epäonnistumisia lyhyellä aikavälillä, MITRE T1110)", + "sourceIps": "Lähteen IP-osoitteet", + "ipTooltip": "{ip}: {count} epäonnistumista", + "bruteForceCount": "{count} brute force" } }, "widgetPreview": { @@ -4004,7 +5732,76 @@ } }, "board": { + "emptyState": { + "title": "Rakenna ensimmäinen näkymäsi", + "description": "Lisää widget tai sovellus, tai yhdistä palvelu ja käytä sen tietoja tällä aluksella.", + "addWidget": "Lisää widget", + "addApp": "Lisää sovellus", + "connectService": "Yhdistä palvelu" + }, + "setupChecklist": { + "title": "Tee tästä taulusta hyödyllinen", + "description": "Poimi minne jäit. Edistys seuraa sisältöä jo tällä laudalla.", + "collapse": "Tiivistä tarkistuslista", + "dismiss": "Hylkää tarkistuslista", + "resume": "Jatka määritystä ({completed}/{total})", + "progress": "Laudan asetusten edistyminen", + "step": { + "content": { + "label": "Lisää hyödyllistä sisältöä", + "description": "Valitse widget ja määritä se ennen kuin se asetetaan." + }, + "app": { + "label": "Kiinnitä sovellus", + "description": "Pidä palvelu tai työkalu yhdellä napsautuksella poissa tästä levystä." + }, + "service": { + "label": "Yhdistä palvelu", + "description": "Avaa live tiedot ja toiminnot yhteensopiville widgeteille.", + "permissionDescription": "Järjestelmänvalvoja voi yhdistää palvelun avataksesi live-tietoja.", + "action": "Yhdistä" + } + } + }, "action": { + "addContent": "Lisää taulun sisältö", + "settings": "Laudan asetukset", + "switch": "Vaihda taulua", + "switcher": { + "title": "Vaihda taulua", + "search": { + "empty": "Yhtään taulua ei täsmää \"{search}\"." + }, + "results": "Käytettävissä olevat taulut", + "preview": "Kohteen {name} esikatselu, {count} kohdetta", + "currentHidden": "Nykyinen taulu: {name}", + "keyboard": { + "navigate": "Navigate", + "open": "Avaa", + "instructions": "Kirjoita suodattaaksesi levyt. Käytä nuolinäppäimiä liikkuaksesi tulosten läpi ja Syötä avataksesi levyn." + }, + "empty": { + "title": "Ei muita tauluja", + "description": "Ei ole muita tauluja, joihin voit päästä." + }, + "error": "Tauluja ei voitu ladata." + }, + "create": { + "availability": { + "checking": "Tarkistetaan saatavuutta…", + "available": "{name} on saatavilla" + }, + "notification": { + "success": { + "title": "Lauta luotu", + "message": "Lauta {name} on luotu" + }, + "error": { + "title": "Lautaa ei voi luoda", + "message": "Lautaa {name} ei voitu luoda" + } + } + }, "duplicate": { "title": "Monista paneeli", "message": "Tämä luo uuden kopion paneelista {name} kaikkine sisältöineen. Widgetit, joissa viitataan integraatiohin, joiden käyttöoikeutta sinulla ei ole, poistetaan.", @@ -4020,14 +5817,19 @@ } }, "edit": { + "enter": "Muokkaa taulua", + "save": "Tallenna lauta", + "exit": "Poistu muokkaustilasta", "notification": { "success": { - "title": "Muutokset tallennettiin", "message": "Paneelin tallennus onnistui" }, "error": { - "title": "Muutoksia ei voitu ottaa käyttöön", "message": "" + }, + "loadError": { + "title": "Muokkausta ei voi aloittaa", + "message": "Lautaeditoria ei voitu ladata. Kojelautasi on edelleen käytettävissä näkymätilassa." } }, "confirmLeave": { @@ -4035,62 +5837,6 @@ "message": "Muutoksia ei ole tallennettu. Haluatko varmasti poistua?" } }, - "oldImport": { - "label": "Tuo Homarr-versiota 1.0.0 vanhemmasta", - "notification": { - "success": { - "title": "", - "message": "" - }, - "error": { - "title": "", - "message": "" - } - }, - "form": { - "file": { - "label": "", - "invalidError": "" - }, - "apps": { - "label": "", - "avoidDuplicates": { - "label": "", - "description": "" - }, - "onlyImportApps": { - "label": "", - "description": "" - } - }, - "name": { - "label": "" - }, - "screenSize": { - "label": "", - "description": "", - "option": { - "sm": "", - "md": "", - "lg": "" - } - }, - "sidebarBehavior": { - "label": "", - "description": "", - "option": { - "lastSection": { - "label": "", - "description": "" - }, - "removeItems": { - "label": "", - "description": "" - } - } - } - } - }, "quickCreateApp": { "modal": { "title": "Luo sovellus lennossa", @@ -4098,6 +5844,12 @@ } } }, + "landmark": { + "canvas": "Kojelaudan kangas", + "leftRail": "Vasemman kojelaudan kisko", + "rightRail": "Oikea kojelaudan kisko", + "items": "Kojelaudan nimikkeet" + }, "field": { "pageTitle": { "label": "Sivun otsikko" @@ -4167,7 +5919,8 @@ } }, "primaryColor": { - "label": "Ensisijainen väri" + "label": "Ensisijainen väri", + "locked": "Järjestelmänvalvojasi pitää instanssibrändin värin jokaisella laudalla." }, "secondaryColor": { "label": "Toissijainen väri" @@ -4207,9 +5960,6 @@ "xl": "Erittäin suuri" } }, - "name": { - "label": "Nimi" - }, "isPublic": { "label": "Julkinen", "description": "Julkiset paneelit ovat kenen tahansa avattavissa, myös ilman käyttäjätiliä." @@ -4229,9 +5979,44 @@ "title": "Asettelu", "responsive": { "title": "Responsiiviset asettelut", + "description": "Jokainen asettelu pitää omat widget kannat ja koot. Mobiili ja Base ovat aina käytettävissä; lisää mukautettuja asetteluja tahansa ylimääräinen keskeytyspisteen.", "action": { "add": "Lisää asettelu" } + }, + "role": { + "mobile": "Mobiili", + "base": "Perus", + "custom": "Mukautettu" + }, + "custom": { + "defaultName": "Mukautettu asettelu" + }, + "mobile": { + "breakpointDescription": "Mobiililaitetta käytetään aina 0px alkaen seuraavaan asettelun katkeamispisteeseen." + }, + "preview": { + "columns": "sarakkeet", + "empty": "Tämä asettelu on tyhjä", + "dynamicSection": "Dynaaminen osio", + "editorWidthLabel": "{layoutName} · {width}px" + }, + "reset": { + "action": "Nollaa Base", + "confirm": { + "title": "Reset {layoutName}?", + "message": "Tämä korvaa tämän asettelun jokaisen tallennetun sijainnin ja koon uudella asettelulla, joka on luotu emäksestä. Tätä ei voi perua." + } + }, + "edit": { + "action": "Muokkaa asettelua", + "saveAndEdit": "Tallenna ja muokkaa", + "save": "Tallenna asettelu", + "cancel": { + "action": "Peruuta asettelun muokkaus", + "title": "Hylätäänkö asettelun muutokset?", + "message": "Tallentamattomat muutokset tähän asetteluun hylätään." + } } }, "background": { @@ -4268,10 +6053,7 @@ "rename": { "label": "Nimeä paneeli uudelleen", "description": "Uudelleennimeäminen rikkoo paneelin osittavat linkit.", - "button": "Vaihda nimi", - "modal": { - "title": "" - } + "button": "Vaihda nimi" }, "visibility": { "label": "Muuta paneelin näkyvyyttä", @@ -4295,9 +6077,7 @@ } }, "delete": { - "label": "Poista paneeli", "description": "Paneelin poistosta ei ole paluuta. Ole varma, ennen kuin teet sen.", - "button": "Poista paneeli", "confirm": { "title": "", "description": "Haluatko varmasti poistaa paneelin? Paneeli ja sen kaikki sisältö poistetaan pysyvästi." @@ -4342,28 +6122,41 @@ }, "layout": { "field": { - "name": { - "label": "Nimi" - }, "columnCount": { "label": "Sarakemäärä" }, "breakpoint": { "label": "Katkaisupiste", "description": "Asettelua käytetään kaikilla tätä arvoa suuremmilla näytöillä, kunnes kohdataan seuraavaksi suurempi katkaisupiste." + }, + "gutters": { + "label": "Kiinteät sivupalkit", + "description": "Varaa kummallakin puolella enintään kolme kojelautaa. Jäljellä oleva kojelauta aukeaa automaattisesti.", + "left": { + "label": "Left sidebar", + "description": "Pidä tämä alue näkyvissä, kun dashboard vierittää", + "thumbLabel": "Left sidebar width" + }, + "right": { + "label": "Oikea sivupalkki", + "description": "Pidä tämä alue näkyvissä, kun dashboard vierittää", + "thumbLabel": "Oikean sivupalkin leveys" + }, + "width": { + "label": "Sarakkeiden leveys" + }, + "preview": { + "label": "Kojelaudan asettelun esikatselu" + } } } }, "management": { "metaTitle": "Hallinta", - "title": { - "morning": "", - "afternoon": "", - "evening": "" - }, "notFound": { "title": "", - "text": "" + "text": "", + "backToHome": "Takaisin johdon kotiin" }, "error": { "title": "Tätä sivua ei voitu ladata", @@ -4372,19 +6165,10 @@ }, "navbar": { "items": { - "workshop": "Workshop", "home": "Aloitus", - "boards": "Paneelit", - "apps": "Sovellukset", - "integrations": "Integraatiot", - "searchEngies": "Hakukoneet", - "medias": "Mediatiedostot", "users": { - "label": "Käyttäjät", "items": { - "manage": "Hallinnoi", - "invites": "Kutsut", - "groups": "Ryhmät" + "manage": "Hallinnoi" } }, "tools": { @@ -4392,10 +6176,7 @@ "items": { "docker": "Docker", "kubernetes": "Kubernetes", - "logs": "Lokitiedot", "api": "API & MCP", - "certificates": "Varmenteet", - "tasks": "Tehtävät", "backup": "Varmuuskopio" } }, @@ -4409,21 +6190,12 @@ "sourceCode": "Lähdekoodi" } }, - "about": "Tietoja" + "about": "Tietoja", + "assistant": "Avustaja" } }, "page": { "home": { - "statistic": { - "board": "Paneelit", - "user": "Käyttäjät", - "invite": "Kutsut", - "integration": "Integraatiot", - "app": "Sovellukset", - "group": "Ryhmät", - "searchEngine": "Hakukoneet", - "media": "Media" - }, "statisticLabel": { "boards": "Paneelit", "resources": "Resurssit", @@ -4461,13 +6233,8 @@ "tooltip": "Tämä paneeli näytetään mobiilipaneelina" } }, - "duplicate": { - "label": "Monista paneeli" - }, "delete": { - "label": "Poista pysyvästi", "confirm": { - "title": "Poista paneeli", "description": "Haluatko varmasti poistaa paneelin {name}?" } } @@ -4476,28 +6243,82 @@ "public": "", "private": "" }, - "noResults": { - "title": "Ei paneeleita vielä" + "preview": { + "label": "Asettelun esikatselu kohteelle {name}, {count} kohdetta", + "unknownCreator": "Tuntematon luoja" }, - "modal": { - "createBoard": { - "field": { - "name": { - "label": "" - } - } - } + "noResults": { + "title": "Ei paneeleita vielä", + "description": "Luo taulu, joka järjestää sovelluksesi ja widgetit yhteen paikkaan." } }, "media": { "includeFromAllUsers": "Sisällytä kaikkien käyttäjien media" }, "user": { - "back": "", "fieldsDisabledExternalProvider": "", "setting": { "general": { "title": "Yleiset", + "header": { + "title": "Otsikon studio", + "badge": "Henkilökohtainen", + "description": "Vedä säätöjä missä tahansa rivissä. Vasen, Center, ja Oikea pysyy kiinteänä ja ohjaimet siirtyvät niiden ympärille.", + "device": { + "desktop": "Työpöytä", + "mobile": "Mobiili" + }, + "zones": { + "left": "Vasen", + "center": "Keskitetty", + "right": "Oikea" + }, + "action": { + "hide": "Piilota otsikko", + "show": "Näytä otsikko", + "configure": "Siirrä tai määritä {item}", + "remove": "Poista {item}", + "dropIntoZone": "Siirrä {zone} osioon" + }, + "preview": { + "board": "Kojelaudan esikatselu {name}", + "empty": "Kojelaudan asettelua ei ole saatavilla" + }, + "available": { + "title": "Saatavilla olevat kontrollit", + "description": "Lisää hallintalaite ja vedä sen koko painike asentoon.", + "requiredAlways": "Tämä ohjaus on tarpeen, mutta voit siirtää sen mihin tahansa otsikkoon.", + "allAdded": "Jokainen sisäänrakennettu ohjaus on jo otsikossasi.", + "add": "Lisää {item}", + "boardShortcut": "Pikakuvake pöydälle", + "chooseBoard": "Valitse lauta" + }, + "configuration": { + "description": "Tämä ohjaus pysyy samankokoisena kuin se tekee elävässä otsikossa.", + "searchDisplay": { + "input": "Hakupalkki", + "icon": "Vain kuvake" + }, + "logoDisplay": { + "logo": "Vain logo", + "logoAndText": "Logo + teksti" + } + }, + "items": { + "logo": "Logo", + "search": "Haku", + "home": "Kotipaneeli", + "boardSwitcher": "Paneelit", + "assistant": "Avustaja", + "docker": "Docker", + "boardEdit": "Muokkaa taulua", + "boardSettings": "Laudan asetukset", + "settings": "Omat asetukset", + "themeToggle": "Vaihda teema", + "user": "Tili", + "boardUnavailable": "Lauta ei käytettävissä" + } + }, "item": { "language": "Kieli ja alue", "board": { @@ -4531,14 +6352,10 @@ }, "security": { "title": "Suojaus" - }, - "board": { - "title": "" } }, "list": { - "metaTitle": "", - "title": "Käyttäjät" + "metaTitle": "" }, "edit": { "metaTitle": "Muokkaa käyttäjää {username}" @@ -4592,9 +6409,6 @@ } }, "field": { - "id": { - "label": "Tunniste" - }, "creator": { "label": "Luoja" }, @@ -4618,10 +6432,7 @@ }, "setting": { "title": "Asetukset", - "alert": "", - "board": { - "title": "Paneelit" - } + "alert": "" }, "members": { "title": "Jäsenet", @@ -4629,10 +6440,7 @@ "notFound": "Jäseniä ei löytynyt" }, "permissions": { - "title": "Käyttöoikeudet", - "form": { - "unsavedChanges": "Muutoksia ei ole tallennettu!" - } + "title": "Käyttöoikeudet" } } }, @@ -4641,17 +6449,15 @@ "notification": { "success": { "message": "" - }, - "error": { - "message": "" } }, "section": { + "analyticsDocumentation": "Katso tarkalleen, mitä analytiikan tiedot Homarr kerää", "analytics": { "title": "Analytiikka", "general": { "title": "Lähetä anonyymejä käyttötietoja", - "text": "Homarr lähettää anonymisoitua analytiikkaa avoimen lähdekoodin Umami‑järjestelmän avulla. Kun analytiikka on käytössä, keräämme seuraavat tiedot: Homarrin version, tietokannan tyypin (PostgreSQL/SQLite), Docker‑/Kubernetes‑tilan, käytössä olevat tunnistautumismenetelmät sekä eri ominaisuuksien lukumäärät. Kaikki tiedot on anonymisoitu ja koottu tilastomuotoon – mitään henkilötietoja, URL‑osoitteita, nimiä tai muita tunnistettavia tietoja ei koskaan kerätä. Tämä auttaa avoimen lähdekoodin tiimiämme ymmärtämään käyttötapoja ja priorisoimaan kehitystä." + "text": "Homarr lähettää anonymisoitua analytiikkaa avoimen lähdekoodin Umami‑järjestelmän avulla. Kun analytiikka on käytössä, keräämme seuraavat tiedot: Homarrin version, tietokannan tyypin (MySQL/PostgreSQL/SQLite), Docker‑/Kubernetes‑tilan, käytössä olevat tunnistautumismenetelmät sekä eri ominaisuuksien lukumäärät. Kaikki tiedot on anonymisoitu ja koottu tilastomuotoon – mitään henkilötietoja, URL‑osoitteita, nimiä tai muita tunnistettavia tietoja ei koskaan kerätä. Tämä auttaa avoimen lähdekoodin tiimiämme ymmärtämään käyttötapoja ja priorisoimaan kehitystä." } }, "crawlingAndIndexing": { @@ -4675,7 +6481,6 @@ } }, "board": { - "title": "Paneelit", "homeBoard": { "label": "Globaali kotipaneeli", "mobileLabel": "Globaali mobiilipaneeli", @@ -4694,7 +6499,6 @@ } }, "user": { - "title": "Käyttäjät", "enableGravatar": { "label": "Käytä Gravataria", "description": "Varmistaa käyttäjäkuvat Libravatar-/Gravatar-palveluilla, kun mukautettua profiilikuvaa ei ole ja sähköpostiosoite on" @@ -4710,12 +6514,86 @@ "appearance": { "title": "Ulkoasu", "defaultColorScheme": { - "label": "Oletusarvoinen väriteema", + "label": "Oletusarvoinen väriteema" + } + }, + "branding": { + "title": "Instanssi tuotemerkki", + "groups": { + "identity": "Identiteetti", + "appearance": "Ulkoasu", + "customCss": "Custom CSS", + "authentication": "Tunnistautuminen" + }, + "identity": { + "description": "Sovelluksen logo on suurempi merkki, jota käytetään sovelluksen sisällä, sisäänkirjautumisen sivuilla ja asennetuissa sovelluksissa. Selaimen kuvake (favicon) on pieni neliö jota käytetään välilehdet ja kirjanmerkit; kun tyhjä, se putoaa takaisin sovelluksen logoon." + }, + "appName": { + "label": "Sovelluksen nimi" + }, + "greeting": { + "label": "Mukautettu tervehdys" + }, + "logo": { + "label": "Sovelluksen logo", + "placeholder": "/logo/logo.png" + }, + "favicon": { + "label": "Selaimen kuvake (favicon)", + "placeholder": "Käyttää sovelluksen logoa" + }, + "primaryColor": { + "label": "Ensisijainen väri" + }, + "secondaryColor": { + "label": "Toissijainen aksentti" + }, + "lockPrimaryColor": { + "label": "Pidä tämä väri jokaisella laudalla", + "description": "Estä hallituksen värejä korvaamasta sovelluksen aksentti." + }, + "signInBackground": { + "label": "Tunnistautumisen tausta", + "placeholder": "https://example.com/background.jpg" + }, + "signInOverlay": { + "label": "Taustan peitto" + }, + "defaultRadius": { + "label": "Kulman tyyli", "options": { - "auto": "Automaattinen", - "light": "Vaalea", - "dark": "Tumma" + "xs": "Tiukka", + "sm": "Hieno", + "md": "Tasapainotettu", + "lg": "Pyöristetty", + "xl": "Pehmeä" } + }, + "customCss": { + "label": "Globaalit mukautetut CSS", + "description": "Sovelletaan jokaiselle sivulle. Hallitus mukautettu CSS voi ohittaa sen." + }, + "authVisibility": { + "description": "Valitse mikä näkyy jokaisella tunnistautumissivulla.", + "appName": "Sovelluksen nimi", + "logo": "Sovelluksen logo", + "greeting": "Tervehdys" + }, + "summary": { + "title": "Nykyinen tuotemerkki", + "cornerStyle": "Kulman tyyli", + "palette": "Palette", + "backgroundConfigured": "Mukautettu tausta · {overlay}% peitto", + "backgroundDefault": "Oletus tausta", + "greetingConfigured": "Mukautettu tervehdys", + "greetingDefault": "Tervehdyksen oletus", + "boardColorLocked": "Laudan väri lukittu", + "boardColorFlexible": "Hallituksen värit sallittu", + "appName": "Työn nimi", + "logo": "Logo", + "greeting": "Tervehdys", + "on": "Päällä", + "off": "Pois" } }, "culture": { @@ -4723,12 +6601,177 @@ "defaultLocale": { "label": "Oletuskieli" } + }, + "assistant": { + "loading": "Ladataan assistentin asetuksia", + "title": "Avustaja", + "description": "Yhdistä OpenAI-yhteensopiva mallin päätepiste instance-wide assistentille.", + "security": { + "description": "API-avaimet ja muut otsikkoarvot salataan Homarr-tietokannassa. Niitä ei koskaan palauteta selaimille. Mallipyynnöt lähetetään Homarr palvelimelta suoraan määritettyyn päätetapahtumaan." + }, + "overview": { + "connectionReady": "Yhteys valmis", + "unsavedChanges": "Tallentamattomia muutoksia", + "setupRequired": "Asennus vaaditaan", + "disabled": "Ei käytössä", + "noModel": "Ei mallia valittuna" + }, + "connection": { + "endpointTitle": "Tarjoaja ja päätepiste", + "description": "Valitse esiasetus tai yhdistä mikä tahansa palvelu, joka toteuttaa OpenAI Chat Completions APIa.", + "save": "Tallenna palveluntarjoajan yhteys" + }, + "credentials": { + "title": "Käyttäjätunnukset", + "description": "Lisää tämän päätepisteen salaisuudet. Tallennetut arvot pysyvät salattuina, eikä niitä voi lukea takaisin.", + "required": "Avain tarvitaan", + "optional": "Valinnainen avain", + "workshop": "Käyttäjäkohtainen GitHub kirjautuminen" + }, + "provider": { + "title": "Tarjoaja", + "groups": { + "free": "Vapaa Homarr", + "hosted": "Palveluntarjoajat", + "local": "Paikalliset palveluntarjoajat", + "custom": "Mukautettu" + }, + "options": { + "homarr": { + "description": "Rajoitettu määrä Assistant käyttökohteita on ilmaisia joka päivä, maksetaan Homarr joukkue. Kirjaudu sisään yhteisön työpajassa käyttääksesi korvaustasi." + }, + "openrouter": { + "description": "Hosted malli reititys suurella työkalunkäyttöinen mallikatalogi." + }, + "openai": { + "description": "OpenAI Chat Completions kautta virallisen API päätetapahtuma." + }, + "anthropic": { + "description": "Claude Anthropicin OpenAI SDK -yhteensopivuuden päätepisteen kautta." + }, + "google-gemini": { + "description": "Gemini kautta Googlen OpenAI-yhteensopiva API päätepiste." + }, + "xai": { + "description": "Grok mallit kautta xAI: n OpenAI-yhteensopiva API." + }, + "groq": { + "description": "Nopea hosted inference kautta Groq OpenAI-yhteensopiva API." + }, + "mistral": { + "description": "Mistral malleja virallisen API kautta." + }, + "deepseek": { + "description": "DeepSeek mallit OpenAI- yhteensopivan APIn kautta." + }, + "together": { + "description": "Hosted open models through Together's OpenAI-yhteensopiva API." + }, + "ollama": { + "description": "Paikallinen tai verkko Ollama palvelin käyttäen OpenAI- yhteensopivaa APIa." + }, + "lm-studio": { + "description": "Paikallinen LM Studio -palvelin, jossa OpenAI yhteensopivuus on käytössä." + }, + "llama-cpp": { + "description": "Paikallinen tai verkko llama.cpp palvelin käyttäen OpenAII-yhteensopivaa APIa." + }, + "custom": { + "label": "Mukautettu päätetapahtuma", + "description": "Mikä tahansa muu OpenAI Chat Completionsin kanssa yhteensopiva päätetapahtuma." + } + }, + "homarrAuth": { + "title": "Vapaa päivittäinen apulaiskäyttö sisältyy", + "description": "Mitään API-avainta ei tarvita. Homarr tiimi kattaa rajoitetun määrän Assistant käyttö sinulle päivittäin. Kirjaudu sisään yhteisön työpajassa pitääksesi oikeutesi erillään." + } + }, + "baseUrl": { + "title": "API base URL", + "description": "Sisällytä API etuliite, yleensä /v1. Konteissa, paikallinen isäntä viittaa Homarr konttiin." + }, + "apiKey": { + "title": "API avain", + "required": "Tämä tarjoaja vaatii. Arvo on salattu ja vain kirjoitussuojattu.", + "optional": "Valinnainen paikallisille päätepisteille. Jätä tyhjäksi, kun palvelu ei edellytä haltijan tunnistautumista.", + "placeholder": "Syötä API-avain", + "savedTitle": "Salattu API-avain tallennettu", + "savedDescription": "Homarr voi käyttää tätä avainta, mutta se ei voi näyttää tai palauttaa arvoa.", + "remove": "Poista tallennettu API-avain", + "removeFlow": { + "title": "Poistetaanko tallennettu API-avain?", + "description": "Tämä tarjoaja tarvitsee API-avaimen. Sen poistaminen voi pysäyttää mallin löytämisen ja avustajan vastaukset kunnes toinen avain on tallennettu.", + "optionalDescription": "Loppupiste lakkaa vastaanottamasta haltijan todennusta kun tämä avain on poistettu. Vahvista hyväksyvänsä tunnistamattomat pyynnöt tai käyttää toista tallennettua otsikkoa.", + "cancel": "Pidä tallennettu avain", + "confirm": "Poista API-avain" + } + }, + "headers": { + "title": "Lisää pyynnön otsikot", + "description": "Valinnainen todennus tai reititys otsikot. Otsikkoarvot ovat salattuja ja vain kirjoitussuojattuja.", + "add": "Lisää ylätunniste", + "name": "Otsikon nimi", + "value": "Otsikon arvo", + "valuePlaceholder": "Salaisuus tai reititys arvo", + "remove": "Poista ylätunniste", + "configured": "Salatut otsikot on määritetty. Otsikkotunnisteiden lisääminen korvaa koko tallennetun luettelon.", + "empty": "Tällä palveluntarjoajalla ei ole ylimääräisiä otsikoita.", + "savedBadge": "Otsikot tallennettu", + "pendingRemoval": "Poisto odottaa", + "clear": "Poista tallennetut otsikot tallennettaessa", + "keep": "Pidä tallennetut otsikot" + }, + "model": { + "title": "Malli", + "description": "Valitse löydetty malli tai kirjoita tarkka päätepisteen malli ID.", + "placeholder": "Malli ID", + "refresh": "Päivitä mallit", + "chooseModel": "Valitse malli, jota käytetään uusiin keskusteluihin.", + "discoveryPath": "Mallin löytämispolku", + "discoveryPathDescription": "Liitetty API perusosoitteeseen. Jätä tyhjäksi poistaaksesi käytöstä ja käyttääksesi manuaalista mallitunnusta.", + "manual": "Anna mallin ID manuaalisesti tai tallenna yhteys löytääksesi malleja.", + "manualFallback": "Löytäminen ei ole käytettävissä. Voit silti syöttää mallin ID manuaalisesti.", + "saveConnectionFirst": "Tallenna palveluntarjoajan yhteys ennen kuin valitset mallin.", + "discovering": "Päivitetään tämän palveluntarjoajan saatavilla olevia malleja…", + "discovered": "{count, plural, one {Löydetty # malli. Työkalun tuki riippuu valitusta päätepisteestä ja mallista.} other {Löydetty # mallit. Työkalun tuki riippuu valitusta päätepisteestä ja mallista.}}", + "discoveryFailed": "Mallin löytäminen ei ollut valmis", + "context": "{count} konteksti-ikkuna", + "toolsConfirmed": "Mainostetut työkalut", + "toolsUnknown": "Vahvista työkalun tuki" + }, + "serverTools": { + "title": "Palvelimen työkalut", + "webSearch": { + "label": "Hae netistä", + "description": "Salli mallin etsiä live web kautta OpenRouter kun pyyntö tarvitsee nykyisiä tietoja. Etsi käyttö veloitetaan erikseen OpenRouter.", + "proxyDescription": "Lähetä OpenRouterin web-hakupalvelimen työkalu tähän päätepisteeseen. Ota tämä käyttöön vain, kun mukautettu päätepiste vie OpenRouter-palvelintyökalujen muotoa, kuten Homarr Router proxy.", + "limit": "Malli päättää milloin etsiä, 3 haun rajalla ja 5 hakua kutakin hakemusta kohti." + } + }, + "enabled": { + "label": "Ota Avustaja Käyttöön", + "description": "Näyttää avustajan kaikille kirjautuneille käyttäjille. Olemassa olevat Homarrin oikeudet pätevät edelleen jokaiseen sisäiseen työkalupuheluun." + }, + "save": "Tallenna assistentti", + "notification": { + "connectionSaved": { + "title": "Palveluntarjoajan yhteys tallennettu", + "message": "Loppupiste ja salattu käyttäjätunnus ovat valmiina mallin valintaan.", + "credentialsCleared": "Lopputapahtuma muuttui, joten aiemmat käyttäjätunnukset tyhjennettiin. Lisää käyttäjätunnukset uudelle käyttäjälle tarvittaessa." + }, + "saved": { + "title": "Assistenttien asetukset tallennettu", + "message": "Uusi malli ja saatavuus asetukset ovat aktiivisia." + }, + "error": { + "title": "Assistenttejä asetuksia ei voitu tallentaa" + } + } } } }, "tool": { "tasks": { - "title": "Tehtävät", "status": { "idle": "Toimeton", "running": "Käynnissä", @@ -4746,6 +6789,11 @@ "label": "Pingit" } }, + "action": { + "run": "Suorita {name} nyt", + "enable": "Ota Käyttöön {name}", + "disable": "Poista Käytöstä {name}" + }, "interval": { "seconds": "{interval, plural, =1 {sekunnin} other {# sekunnin}} välein", "minutes": "{interval, plural, =1 {minuutin} other {# minuutin}} välein", @@ -4761,13 +6809,7 @@ } } }, - "settings": { - "title": "" - }, "field": { - "name": { - "label": "Nimi" - }, "interval": { "label": "Ajoituksen aikajakso" }, @@ -4781,11 +6823,6 @@ "table": { "search": "Suodata {count} tehtävää..." }, - "action": { - "refresh": { - "label": "Päivitä" - } - }, "refresh": { "success": { "message": "" @@ -4819,7 +6856,6 @@ } }, "api": { - "title": "", "modal": { "createApiToken": { "title": "", @@ -4845,7 +6881,6 @@ }, "table": { "header": { - "id": "", "createdBy": "", "actions": "" } @@ -4901,43 +6936,12 @@ "availableTools": { "title": "Käytettävissä olevat työkalut", "description": "{count} työkalua käytettävissä. Laajenna kategoria nähdäksesi yksittäiset työkalut ja niiden kuvaukset.", - "columnType": "Tyyppi", - "columnName": "Työkalu", - "columnDescription": "Kuvaus" - }, - "troubleshooting": { - "title": "Vianmääritys", - "missingHeader": { - "title": "\"ApiKey-otsikko puuttuu\"", - "description": "Asiakkaasi ei lähetä {header}-otsikkoa. Tarkista, että {section}-osio MCP-asetuksissasi on oikein. Jotkut asiakkaat vaativat uudelleenkäynnistyksen asetusmuutosten jälkeen." - }, - "invalidFormat": { - "title": "\"ApiKey-muoto virheellinen\"", - "description": "Varmista, että kopioit koko API-avaimen, et vain osaa siitä." - }, - "invalidKey": { - "title": "\"Virheellinen API-avain\"", - "description": "Avaimen tunnusta ei löydy tai tunnus on väärä. API-avaimet voidaan näyttää vain kerran luotaessa. Jos kadotit sen, poista vanha avain ja luo uusi." - }, - "connectionRefused": { - "title": "Yhteys hylättiin / aikakatkaisu", - "description": "Varmista, että URL on tavoitettavissa AI-asiakkaaltasi. Jos Homarr toimii käänteisen välityspalvelimen takana tai Dockerissa, käytä ulkoista URL-osoitetta (ei {localhost}). Tarkista portti on oikein (oletus: 7575 Dockerille)." - }, - "toolsNotAppearing": { - "title": "Työkalut eivät näy", - "description": "Jotkut työkalut vaativat tiettyjä integraatioita (esim. Docker, Overseerr). Työkalulista riippuu siitä, mitä Homarr-instanssissasi on käytettävissä." + "filteredDescription": "{count} matching tools across expanded categories.", + "search": "Hae työkaluja", + "noResults": { + "title": "Ei hakua vastaavia työkaluja", + "description": "MCP-työkalu ei täsmää \"{search}\". Kokeile nimiavaruutta, työkalun nimeä tai kuvausta." } - }, - "copy": "Kopioi", - "oneClick": { - "title": "Asenna yhdellä napsautuksella", - "subtitle": "Käyttää OAuthia – todenna selaimesi ensimmäisellä käyttökerralla", - "vsCode": "Asenna VS Codeen", - "cursor": "Asenna Cursoriin", - "copyUrl": "Kopioi MCP-URL", - "copied": "Kopioitu!", - "copyHint": "ChatGPT:lle, Claude Codelle tai mille tahansa MCP-asiakkaalle", - "manualConfig": "Manuaalinen määritys" } } } @@ -4954,47 +6958,12 @@ "title": "Arkaluonteisten tietojen vienti", "warningTitle": "Tämä vienti sisältää koko tietokannan.", "warningBody": "Varmuuskopio sisältää kaikki käyttäjät, integraatiosalaisuudet (salattuina), API-avaimet, paneelien asetukset ja sovellustiedot. Säilytä viety tiedosto turvallisesti äläkä jaa sitä.", - "typePrompt": "Kirjoita \"{phrase}\" jatkaaksesi", - "submit": "Vie tietokanta", - "cancel": "Peruuta" + "submit": "Vie tietokanta" } }, "import": { "title": "Palauta tietokanta", - "description": "Lataa aiemmin viety varmuuskopio-ZIP palauttaaksesi tietokannan. Tämä korvaa koko tietokantasi. Jos varmuuskopio on luotu eri salausavaimella, salaisuudet salataan automaattisesti uudelleen.", - "warning": "Varmuuskopion palauttaminen korvaa nykyisen tietokannan kokonaan ja käynnistää sovelluksen uudelleen. Tätä toimintoa ei voi peruuttaa.", - "dropzone": { - "title": "Pudota varmuuskopio-ZIP tähän tai napsauta selataksesi", - "description": "Vain Homarr SQLite -varmuuskopion .zip-tiedostot hyväksytään" - }, - "changeFile": "Vaihda tiedosto", - "button": "Palauta tietokanta", - "success": { - "title": "Palautus valmis", - "message": "Tietokanta on palautettu onnistuneesti. Sovellus käynnistyy uudelleen..." - }, - "error": "Tuonti epäonnistui" - }, - "preview": { - "title": "Varmuuskopion sisältö", - "exported": "Viety {date}", - "loading": "Analysoidaan varmuuskopiotiedostoa...", - "errorTitle": "Esikatseluvirhe", - "entity": "Entiteetti", - "count": "Lukumäärä", - "boards": "Paneelit", - "entities": { - "board": "Paneelit", - "user": "Käyttäjät", - "app": "Sovellukset", - "integration": "Integraatiot", - "item": "Widgetit", - "media": "Media", - "search_engine": "Hakukoneet" - }, - "analyzeError": "Varmuuskopiotiedoston analysointi epäonnistui", - "invalidMissingMetadata": "Virheellinen varmuuskopio: metadata.json puuttuu", - "invalidMissingDb": "Virheellinen varmuuskopio: db.sqlite puuttuu" + "description": "Lataa aiemmin viety varmuuskopio-ZIP palauttaaksesi tietokannan. Tämä korvaa koko tietokantasi. Jos varmuuskopio on luotu eri salausavaimella, salaisuudet salataan automaattisesti uudelleen." }, "restore": { "dropzone": { @@ -5004,29 +6973,20 @@ "analyzing": "Analysoidaan varmuuskopiota...", "changeFile": "Vaihda tiedosto", "continueToRestore": "Jatka palautukseen", - "tryAgain": "Yritä uudelleen", "analysisError": "Analyysivirhe", "preview": { "title": "Varmuuskopion sisältö", "exported": "Viety {date}", "entity": "Entiteetti", "count": "Lukumäärä", - "boards": "Paneelit", "entities": { - "board": "Paneelit", - "user": "Käyttäjät", - "app": "Sovellukset", - "integration": "Integraatiot", - "item": "Widgetit", - "media": "Media", - "search_engine": "Hakukoneet" + "item": "Widgetit" }, "migrationsApplied": "{count} migraatio käytössä", "migrationsAppliedPlural": "{count} migraatiota käytössä", "migrationsOlderVersion": "Tämä varmuuskopio on vanhemmasta Homarr-versiosta. {count} skeemamigraatio otettiin käyttöön saattaakseen sen ajan tasalle.", "migrationsOlderVersionPlural": "Tämä varmuuskopio on vanhemmasta Homarr-versiosta. {count} skeemamigraatiota otettiin käyttöön saattaakseen sen ajan tasalle.", "migrationsUpToDate": "Tietokantaskeema on ajan tasalla ({count} migraatiota käytössä)", - "upToDate": "Ajan tasalla", "migrationsPending": "{count} odottaa" }, "migration": { @@ -5037,21 +6997,21 @@ "title": "Tuhoava toimenpide", "warningTitle": "Tämä korvaa koko tietokantasi pysyvästi.", "warningBody": "Kaikki nykyiset paneelit, käyttäjät, sovellukset, integraatiot, asetukset ja istunnot menetetään. Tätä toimintoa ei voi peruuttaa. Sovellus käynnistyy uudelleen palautuksen jälkeen.", - "typePrompt": "Kirjoita \"{phrase}\" jatkaaksesi", - "cancel": "Peruuta", "submit": "Palauta tietokanta" }, "progress": { "title": "Palautetaan tietokantaa...", - "extracting": "Puretaan varmuuskopioarkistoa", - "migrating": "Otetaan käyttöön tietokantamigraatioita", - "encrypting": "Salataan integraatiosalaisuuksia uudelleen", - "swapping": "Korvataan tietokantatiedosto", - "restarting": "Käynnistetään palvelin uudelleen" + "restarting": "Käynnistetään palvelin uudelleen", + "relogin": "Tietokannan palauttaminen mitätöi nykyisen istunnon. Homarr lähettää sinut kirjautumaan sisään kun palvelin on valmis." }, "complete": { "title": "Palautus valmis", - "message": "Tietokanta on palautettu onnistuneesti. Palvelin käynnistyy uudelleen – päivitä sivu muutaman sekunnin kuluttua." + "message": "Tietokanta on palautettu onnistuneesti. Palvelin käynnistyy uudelleen – päivitä sivu muutaman sekunnin kuluttua.", + "button": "Kirjaudu sisään" + }, + "timeout": { + "title": "Palvelin ei tullut takaisin verkossa", + "message": "Tietokannan palautus valmis, mutta Homarr ei tullut taas valmiiksi. Yritä uudelleen yhteystarkistusta tai päivitä tämä sivu manuaalisesti." }, "failed": { "title": "Palautus epäonnistui" @@ -5059,6 +7019,9 @@ "invalidMissingMetadata": "Virheellinen varmuuskopio: metadata.json puuttuu", "invalidMissingDb": "Virheellinen varmuuskopio: db.sqlite puuttuu", "analyzeError": "Varmuuskopion analysointi epäonnistui" + }, + "confirm": { + "typePrompt": "Kirjoita \"{phrase}\" jatkaaksesi" } } }, @@ -5093,7 +7056,11 @@ "toggleBoardEdit": "Vaihda paneelin muokkaustilaa", "toggleColorScheme": "Kytke vaalean/tumman tila", "saveNotebook": "Tallenna muistikirja (vain muistikirjawidgetin sisällä)", - "openSpotlight": "Avaa haku" + "openSpotlight": "Avaa haku", + "openSpotlightApps": "Avaa sovellushaku", + "openSpotlightAssistant": "Avaa avustava tila", + "openSpotlightPreferences": "Avaa asetustila", + "openAssistant": "Avaa Avustaja" }, "note": "Vinkki: \"Mod\" viittaa Ctrl-painikkeeseeen ja Macin ⌘-painikkeeseen" } @@ -5103,6 +7070,63 @@ }, "docker": { "title": "Kontit", + "reconciliation": { + "title": "Avustettu Docker-asetukset", + "suggestions": "{count, plural, =0 {Ei ehdotuksia} one {# ehdotusta} other {# ehdotusta}}", + "attention": "{count} tarvitsee huomiota", + "endpointUnavailable": "Joitakin palveluita ei voitu tarkistaa, koska nämä päätepisteet eivät ole käytettävissä: {names}", + "empty": "Näkyviä Docker-palveluita ei löytynyt.", + "emptyFilter": "Yksikään palvelu ei täsmää tähän näkymään.", + "ambiguous": "Enemmän kuin yksi olemassa oleva kohde voisi vastata tätä palvelua. Homarr ei valitse sitä automaattisesti.", + "filter": { + "attention": "Tarvitsee huomiota", + "represented": "Määritä jo", + "all": "Kaikki" + }, + "state": { + "newRecognized": "Valmis yhdistämään", + "newApp": "Uusi palvelu", + "represented": "Jo edustettuna", + "linked": "Linkitetty", + "moved": "Osoite vaihdettu" + }, + "url": { + "manual": "Syötä osoite manuaalisesti" + }, + "health": { + "layer": { + "docker": "Docker", + "integrationConfiguration": "Integraatio", + "authentication": "Tunnistautuminen", + "apiRequest": "Rajapinta", + "appRepresentation": "Sovellus", + "widgetConfiguration": "Pienoisohjelma", + "widgetQuery": "Widgetin kysely" + }, + "status": { + "available": "Saatavilla", + "configured": "Määritetty", + "linked": "Linkitetty", + "missing": "Puuttuu", + "changed": "Muutettu", + "unused": "Ei käytössä", + "notApplicable": "Ei sovelleta", + "notObserved": "Ei havaittu" + } + }, + "action": { + "review": "Yhteenveto", + "dismiss": "Hylkää", + "restoreDismissed": "Palauta hylkäsi ({count})", + "setupIntegration": "Määritä integrointi", + "reviewIntegration": "Tarkastele integraatiota", + "viewRepresentation": "Näytä asetukset" + }, + "loadError": { + "title": "Telakoitsijoiden asennusohjelmaa ei voitu ladata", + "message": "Telakointipalvelun tiedot eivät ole saatavilla. Yritä uudelleen poistumatta tältä sivulta." + } + }, "table": { "updated": "Päivitetty {when}", "refresh": { @@ -5115,9 +7139,6 @@ "totalMemory": "Muisti yhteensä: {memory}" }, "field": { - "name": { - "label": "Nimi" - }, "state": { "label": "Tila", "option": { @@ -5131,9 +7152,6 @@ } }, "stats": { - "cpu": { - "label": "Suoritin" - }, "memory": { "label": "Muisti" } @@ -5196,8 +7214,11 @@ } }, "remove": { - "label": "Poista", "confirm": "Napsauta uudelleen poistaaksesi pysyvästi", + "confirmation": { + "title": "{count, plural, one {Poista # astia?} other {Poista # astioita?}}", + "message": "{count, plural, one {Tämä poistaa pysyvästi # kontti: {names}} other {Tämä poistaa pysyvästi # konttia: {names}}}" + }, "notification": { "success": { "title": "", @@ -5209,8 +7230,13 @@ } } }, + "result": { + "failure": { + "title": "Jotkin säilytystoiminnot epäonnistuivat", + "message": "{total, plural, one {{failed} # toimesta epäonnistui: {names}} other {{failed} # toimesta epäonnistui: {names}}}" + } + }, "refresh": { - "label": "Päivitä", "notification": { "success": { "title": "", @@ -5241,18 +7267,33 @@ }, "error": { "internalServerError": "", + "endpointUnavailable": "{count, plural, one {# Telakointipäätepiste ei ole käytettävissä: {names}} other {# Telakointipäätepistettä ei saatavana: {names}}}", "noColumns": "Valitse vähintään yksi sarake widgetin asetuksista" } }, "kubernetes": { + "context": { + "label": "Kubernetesin konteksti", + "loadError": { + "title": "Kubernetesin konteksteja ei voitu ladata", + "message": "Kontekstitietoja ei ole saatavilla. Yritä uudelleen poistumatta tältä sivulta." + }, + "status": { + "available": "Saatavilla", + "degraded": "Metrics unavailable", + "unavailable": "Unavailable" + }, + "unavailable": "Kubernetesin kontekstia ei voida saavuttaa. Valitse toinen konteksti tai vahvista sen käyttäjätunnukset ja päätepiste.", + "metricsUnavailable": "Tämä konteksti on saavutettavissa, mutta Metrics Server ei ole käytettävissä. Tavaraluettelo on saatavilla ilman live CPU ja muistin käyttöä." + }, "cluster": { "title": "", "label": "", "providers": "", "version": "", - "architecture": "", "capacity": { "title": "", + "metricsUnavailable": "Metrics Server ei ole käytettävissä. Varasto ja varattu kapasiteetti säilyvät näkyvissä, mutta live-prosessori ja muistin käyttöä ei voi näyttää.", "resource": { "reserved": "", "used": "" @@ -5271,38 +7312,10 @@ } }, "nodes": { - "label": "", "field": { - "name": { - "label": "" - }, - "state": { - "label": "", - "option": { - "ready": "", - "NotReady": "" - } - }, - "cpu": { - "label": "" - }, - "memory": { - "label": "" - }, - "pods": { - "label": "" - }, - "operatingSystem": { - "label": "" - }, - "architecture": { - "label": "" - }, + "metricsUnavailable": "Unavailable", "kubernetesVersion": { "label": "Kubernetes-versio" - }, - "creationTimestamp": { - "label": "" } }, "table": { @@ -5310,43 +7323,17 @@ } }, "namespaces": { - "label": "", - "field": { - "name": { - "label": "" - }, - "state": { - "label": "", - "option": { - "active": "", - "terminating": "" - } - }, - "creationTimestamp": { - "label": "" - } - }, "table": { "search": "" } }, "ingresses": { - "label": "", "field": { - "name": { - "label": "" - }, - "namespace": { - "label": "" - }, "className": { "label": "" }, "rulesAndPaths": { "label": "" - }, - "creationTimestamp": { - "label": "" } }, "table": { @@ -5354,17 +7341,7 @@ } }, "services": { - "label": "Palvelut", "field": { - "name": { - "label": "" - }, - "namespace": { - "label": "" - }, - "type": { - "label": "" - }, "ports": { "label": "" }, @@ -5373,9 +7350,6 @@ }, "clusterIP": { "label": "" - }, - "creationTimestamp": { - "label": "" } }, "table": { @@ -5383,25 +7357,12 @@ } }, "pods": { - "label": "", "field": { - "name": { - "label": "" - }, - "namespace": { - "label": "" - }, "image": { "label": "" }, "applicationType": { "label": "" - }, - "status": { - "label": "" - }, - "creationTimestamp": { - "label": "" } }, "table": { @@ -5409,51 +7370,17 @@ } }, "secrets": { - "label": "", - "field": { - "name": { - "label": "" - }, - "namespace": { - "label": "" - }, - "type": { - "label": "" - }, - "creationTimestamp": { - "label": "" - } - }, "table": { "search": "" } }, "configmaps": { - "label": "", - "field": { - "name": { - "label": "" - }, - "namespace": { - "label": "" - }, - "creationTimestamp": { - "label": "" - } - }, "table": { "search": "" } }, "volumes": { - "label": "", "field": { - "name": { - "label": "" - }, - "namespace": { - "label": "" - }, "accessModes": { "label": "" }, @@ -5468,12 +7395,6 @@ }, "volumeName": { "label": "" - }, - "status": { - "label": "" - }, - "creationTimestamp": { - "label": "" } }, "table": { @@ -5482,6 +7403,29 @@ }, "error": { "internalServerError": "Kubernetesin tietojen nouto epäonnistui" + }, + "field": { + "name": { + "label": "Työn nimi" + }, + "namespace": { + "label": "Nimiavaruus" + }, + "creationTimestamp": { + "label": "Luotu" + }, + "state": { + "label": "Tila" + }, + "status": { + "label": "Tila" + }, + "type": { + "label": "Tyyppi" + }, + "architecture": { + "label": "Arkkitehtuuri" + } } }, "permission": { @@ -5515,71 +7459,27 @@ }, "navigationStructure": { "manage": { - "workshop": { - "label": "Workshop" - }, "label": "", - "boards": { - "label": "Paneelit" - }, - "integrations": { - "label": "Integraatiot", + "custom-widgets": { "edit": { - "label": "Muokkaa" + "flow": { + "label": "Kulku" + } }, - "new": { - "label": "Uusi" - } - }, - "search-engines": { - "label": "Hakukoneet", - "new": { - "label": "Uusi" + "workshop": { + "label": "Työpaja" }, - "edit": { - "label": "Muokkaa" - } - }, - "medias": { - "label": "Mediatiedostot" - }, - "apps": { - "label": "Sovellukset", - "new": { - "label": "Uusi" - }, - "edit": { - "label": "Muokkaa" + "publish": { + "label": "Julkaise työpajaan" } }, "users": { - "label": "Käyttäjät", - "create": { - "label": "Luo" - }, "general": "Yleiset", - "security": "Suojaus", - "board": "", - "groups": { - "label": "Ryhmät" - }, - "invites": { - "label": "Kutsut" - } + "security": "Suojaus" }, "tools": { "label": "Työkalut", - "tasks": { - "label": "Tehtävät" - }, - "docker": { - "label": "Docker", - "logs": { - "label": "Lokit" - } - }, "kubernetes": { - "label": "Kubernetes", "nodes": { "label": "" }, @@ -5605,11 +7505,7 @@ "label": "" } }, - "logs": { - "label": "Lokitiedot" - }, "certificates": { - "label": "Varmenteet", "hostnames": { "label": "Isäntänimet" } @@ -5620,12 +7516,60 @@ }, "about": { "label": "Tietoja" + }, + "assistant": { + "label": "Avustaja" } } }, "search": { "placeholder": "Etsi mitä tahansa", "nothingFound": "", + "modePicker": { + "search": { + "label": "Haku", + "placeholder": "Hae sovelluksia, tauluja, sivuja, komentoja ja asetuksia" + }, + "apps": { + "label": "Sovellukset", + "placeholder": "Hae sovelluksia, tauluja ja integraatioita" + }, + "command": { + "label": "Komennot", + "placeholder": "Hae toimintoja ja komentoja" + }, + "preferences": { + "label": "Asetukset", + "placeholder": "Etsi ja muuta asetuksia" + }, + "assistant": { + "label": "Avustaja", + "placeholder": "Kysy Avustaja" + }, + "external": { + "label": "Verkko", + "placeholder": "Etsi ulkoisella hakukoneella" + }, + "media": { + "label": "Media", + "placeholder": "Etsi elokuvaa tai näytä", + "fallback": "Etsi mediaa kohteelle \"{query}\"" + }, + "userGroup": { + "label": "Ihmiset", + "placeholder": "Etsi käyttäjiä ja ryhmiä" + }, + "continueWith": "Jatka sovellusta", + "dialogAriaLabel": "{mode} komentovalikko", + "navigationLabel": "Hae tiloja", + "modeAriaLabel": "{mode} tila", + "resultsAriaLabel": "{mode} tulosta", + "footer": { + "navigate": "Navigate", + "open": "Avaa", + "close": "Sulje" + } + }, "error": { "fetch": "" }, @@ -5634,7 +7578,6 @@ "help": "Etsi sovelluksia, integraatioita tai paneeleita", "group": { "app": { - "title": "Sovellukset", "children": { "action": { "open": { @@ -5650,7 +7593,6 @@ } }, "board": { - "title": "Paneelit", "children": { "action": { "open": { @@ -5670,9 +7612,6 @@ "title": "Valitse paneelille toiminto" } } - }, - "integration": { - "title": "Integraatiot" } } }, @@ -5701,9 +7640,6 @@ "newBoard": { "label": "Luo uusi paneeli" }, - "importBoard": { - "label": "Tuo paneeli" - }, "newApp": { "label": "Luo uusi sovellus" }, @@ -5773,7 +7709,6 @@ } }, "defaultSearchEngineId": { - "label": "Oletushakukone", "children": { "detail": { "title": "Valitse oletuarvoinen hakukoneesi" @@ -5781,7 +7716,6 @@ } }, "openSearchInNewTab": { - "label": "Avaa tulokset uudessa välilehdessä", "children": { "detail": { "title": "Avaa hakutulokset uudessa välilehdessä" @@ -5789,7 +7723,6 @@ } }, "ddgBangs": { - "label": "Käytä DuckDuckGon Bangs-komentoja", "children": { "detail": { "title": "Käytä DuckDuckGon Bangs-komentoja" @@ -5804,6 +7737,13 @@ } } }, + "byteUnitSystem": { + "children": { + "detail": { + "title": "Valitse datan kokoyksiköt" + } + } + }, "homeBoardId": { "label": "Kotipaneeli", "children": { @@ -5821,7 +7761,6 @@ } }, "pingIconsEnabled": { - "label": "Käytä ping-ikoneita", "children": { "detail": { "title": "Käytä ping-ikoneita" @@ -5829,7 +7768,6 @@ } }, "enableRightClickOnWidgets": { - "label": "Käytä hiiren kakkospainiketta widgeteissä", "children": { "detail": { "title": "Käytä hiiren kakkospainiketta widgeteissä" @@ -5857,6 +7795,7 @@ "description": "Aloita mediapyyntöintegraatioden haku kirjoittamalla", "disabled": { "noIntegration": "Ota mediahaku käyttöön lisäämällä Overseerr-, Jellyseerr- tai Seerr-integraatio.", + "signInRequired": "Kirjaudu sisään etsiäksesi mediapyyntöjen integraatioita.", "scoped": "Widgetille ei ole käytettävissä olevaa mediapyyntöintegrointia." } } @@ -5873,7 +7812,6 @@ "help": "Käytä ulkoista hakukonetta", "group": { "searchEngine": { - "title": "Hakukoneet", "tipDdgBangs": "Vinkki: Voit käyttää myös tässä mitä tahansa DuckDuckGo Bangs -komentoja, esim. !jotain", "bang": { "searchWithQuery": "Etsitään \"{query}\" tunnisteella {label}", @@ -5924,20 +7862,6 @@ "group": { "mode": { "title": "Tilat" - }, - "help": { - "title": "Tuki", - "option": { - "documentation": { - "label": "Käyttöohjeet" - }, - "submitIssue": { - "label": "Ilmoita ongelmasta" - }, - "discord": { - "label": "Discord-yhteisö" - } - } } } }, @@ -5949,9 +7873,10 @@ "other": { "label": "Etsi eri hakukoneella" }, - "no-default": { - "label": "Oletushakukonetta ei ole määritetty", - "description": "Määritä oletushakukone asetuksista" + "no-engines": { + "label": "Hakukoneita ei ole määritetty", + "descriptionCreate": "Lisää hakukone hakuun komento- valikosta", + "descriptionUnavailable": "Pyydä järjestelmänvalvojaa määrittämään hakukone" }, "search": { "label": "Etsi hakua \"{query}\" tunnisteella {name}" @@ -6031,7 +7956,6 @@ "help": "Etsi käyttäjiä tai ryhmiä", "group": { "user": { - "title": "Käyttäjät", "children": { "action": { "detail": { @@ -6044,7 +7968,6 @@ } }, "group": { - "title": "Ryhmät", "children": { "action": { "detail": { @@ -6068,9 +7991,6 @@ "engine": { "search": "Suodata hakukoneita", "field": { - "name": { - "label": "Nimi" - }, "short": { "label": "Lyhyesti" }, @@ -6083,12 +8003,19 @@ }, "page": { "list": { - "title": "Hakukoneet", + "ariaLabel": "Konfiguroidut hakukoneet", "noResults": { "title": "Hakukoneita ei vielä ole", - "action": "Luo ensimmäinen hakukoneesi" + "description": "Hakumoottoreiden avulla Spotlight lähettää kyselyn sivustolle tai liitetylle palvelulle.", + "action": "Luo ensimmäinen hakukoneesi", + "filteredTitle": "Hakuasi vastaavaa hakua ei löytynyt", + "filteredDescription": "Hakukoneet eivät täsmää \"{search}\". Kokeile toista nimeä tai URL-osoitetta." }, - "interactive": "Vuorovaikutteinen, käyttää integraatiota" + "interactive": "Vuorovaikutteinen, käyttää integraatiota", + "type": { + "generic": "URL-osoitteen malli", + "fromIntegration": "Integraatio" + } }, "create": { "title": "Uusi hakukone", @@ -6107,11 +8034,9 @@ "title": "Muokkaa hakukonetta", "notification": { "success": { - "title": "Muutokset onnistuivat", "message": "Hakukone tallennettiin" }, "error": { - "title": "Muutoksia ei voitu ottaa käyttöön", "message": "" } }, @@ -6250,6 +8175,10 @@ } }, "log": { + "context": { + "widgetError": "Widget raportoitu virhe noin tähän aikaan", + "expiredWidgetError": "Tämän widgetin ympärillä olevia lokeja ei enää säilytetä" + }, "level": { "option": { "debug": "Vianselvitys", @@ -6261,7 +8190,6 @@ }, "onboardingTour": { "learnMore": "Lue dokumentaatio", - "next": "Seuraava", "prev": "Takaisin", "done": "Valmis", "skip": "Ohita kierros", @@ -6325,5 +8253,359 @@ "description": "Vaihda väriteemaa, kieltä, kotipaneelia ja asetuksia. Täältä pääset myös hallinta-alueelle." } } + }, + "metadata": { + "description": "Itsestään isännöity kojelauta *arr pino ja koko kotona. Integroi 50+ palvelua, reaaliaikainen widgetit, ei config tiedostoja.", + "dashboardTitle": "{appName} Kojelauta" + }, + "assistant": { + "title": "Avustaja", + "open": "Avaa Avustaja", + "close": "Sulje avustaja", + "minimize": "Pienennä avustaja", + "spotlight": "Kysy Avustaja", + "spotlightDescription": "Kirjoita ja lähetä kehotus poistumatta komentovalikosta.", + "spotlightPrompt": { + "title": "Kysy Avustaja", + "description": "Kirjoita ylläoleva kehys. Syötä se taustalle.", + "send": "Lähetä kehotus", + "empty": "Kirjoita kehote yläpuolelle" + }, + "unavailable": { + "checking": "Tarkistetaan, onko avustaja käytettävissä…", + "error": "Avustajan saatavuutta ei voitu tarkistaa. Yritä uudelleen.", + "notConfigured": "Ylläpitäjän on määritettävä ja otettava avustaja käyttöön ensin.", + "signIn": "Kirjaudu sisään käyttääksesi avustajaa." + }, + "newConversation": "Uusi keskustelu", + "conversations": "Keskustelut", + "conversationActions": "Keskustelun toiminnot", + "searchConversations": "Etsi keskusteluita", + "noMatchingConversations": "Ei vastaavia keskusteluja", + "moreActions": "Enemmän vastaustoimia", + "renameConversation": { + "action": "Uudelleennimeä", + "label": "Keskustelun nimi", + "save": "Tallenna nimi", + "failedTitle": "Keskustelua ei voitu nimetä uudelleen", + "failedDescription": "Homarr ei voinut uudelleennimetä tätä keskustelua. Yritä uudelleen." + }, + "deleteConversation": { + "title": "Poistetaanko keskustelu?", + "description": "“{title}” ja sen viestit poistetaan pysyvästi.", + "failedTitle": "Keskustelua ei voitu poistaa", + "failedDescription": "Homarr ei voinut poistaa tätä keskustelua. Yritä uudelleen." + }, + "closeHistory": "Sulje keskustelun historia", + "openHistory": "Avaa keskustelun historia", + "emptyTitle": "Mitä voin auttaa?", + "emptyDescription": "Kysy Homarr-asetuksistasi, tarkasta live-ilmentymän tiedot tai hyväksy toimintoja, kun haluat minun tekevän muutoksen.", + "suggestions": { + "health": { + "label": "Tarkista palvelun terveys", + "prompt": "Tarkista integraationi ja tee yhteenveto kaikesta, mikä kaipaa huomiota." + }, + "explore": { + "label": "Tutki Homarria", + "prompt": "Näytä minulle mitä voin nähdä ja hallita tässä Homarr instanssissa." + }, + "media": { + "label": "Etsi media pyytääksesi", + "prompt": "Auta minua löytämään elokuva tai sarja pyynnöstä." + }, + "style": { + "label": "Paranna kojelautaa", + "prompt": "Auta minua parantamaan laudan ulkonäköä tai mukautettua CSS:ää. Näytä ensin laudat ja säilytä nykyiset asetukseni samalla kun teemme muutoksen." + }, + "designWidget": { + "label": "Suunnittele widget", + "prompt": "Luo ja asenna mukautettu widget " + } + }, + "composerPlaceholder": "Kysy avustajalta…", + "runtime": { + "model": "Malli", + "searchModels": "Hae malleja", + "noModels": "Ei malleja saatavilla", + "otherModels": "Muut mallit", + "imageInput": "Hyväksy kuvan syöte", + "thinking": "Ajattelutila", + "reasoning": { + "auto": "Automaattinen", + "none": "Pois", + "minimal": "Minimaali", + "low": "Matala", + "medium": "Keskikokoinen", + "high": "Korkea" + } + }, + "providerQuota": { + "title": "Homarr toimittaja", + "communityWorkshop": "Yhteisön Työpaja", + "dailyAllowance": "Päivittäinen pyyntö avustus", + "remainingLabel": "Homarr-palveluntarjoajan pyyntöjä jäljellä: {remaining}/{limit}", + "loading": "Ladataan Homarr-palveluntarjoajan avustusta", + "signInRequired": "Huoltopisteen kirjautuminen vaaditaan Homarrin tarjoajalle", + "signInDescription": "Kirjaudu sisään GitHubilla yhteisön työpajan kautta saadaksesi erillisen päivärahan.", + "exhaustedDescription": "Homarr-palveluntarjoajasi avustus käytetään tänään. Se palautuu keskiyöllä UTC.", + "unavailableDescription": "Kirjaudu sisään työpajaan tai odota Homarr tarjoajan avustusta nollata.", + "signIn": "Kirjaudu sisään GitHubilla", + "signInError": "GitHub kirjautuminen epäonnistui. Yritä hetken kuluttua uudelleen.", + "loadError": "Homarr-palveluntarjoajan avustusta ei voitu ladata.", + "reset": "Nollaa {relative} ", + "toolCalls": "Jokainen mallipyyntö ja täytetty työkalu puhelu käyttää yhden pyynnön.", + "retry": "Lataa avustus uudelleen", + "level": { + "ok": "Ok", + "warning": "Varoitus", + "bad": "Matala", + "dead": "Käytetty" + } + }, + "stop": "Pysäytä vastaus", + "send": "Lähetä viesti", + "copy": "Kopioi vastaus", + "copyMessage": "Kopioi viesti", + "editMessage": "Muokkaa viestiä", + "updateMessage": "Päivitä viesti", + "regenerate": "Luo vastaus uudelleen", + "helpful": "Hyödyllinen", + "notHelpful": "Ei apua", + "readAloud": "Lue vastaus ääneen", + "stopReading": "Lopeta vastaus lukemiseen", + "feedbackError": "Palautettasi ei voitu tallentaa. Yritä uudelleen.", + "exportMarkdown": "Vie Markdownina", + "exportConversation": { + "action": "Vie keskustelu Markdownina", + "failedTitle": "Keskustelua ei voitu viedä", + "failedDescription": "Homarr ei voinut ladata tätä keskustelua. Yritä uudelleen." + }, + "reasoning": "Ajattelu", + "previousResponse": "Edellinen vastaus", + "nextResponse": "Seuraava vastaus", + "removeAttachment": "Poista liite", + "downloadFile": "Lataa {name}", + "attachedImage": "Liitetty kuva", + "externalImageBlocked": "Yksityisyyden suojaamiseksi estetty ulkoinen kuva", + "image": { + "loading": "Ladataan kuvaa", + "failed": "Kuvaa ei voitu ladata.", + "retry": "Kokeile kuvaa uudelleen" + }, + "quoteSelection": "Tarjous", + "dismissQuote": "Poista tarjous", + "attachments": { + "add": "Liitä kuva tai asiakirja", + "errorTitle": "Liitettä ei voitu lisätä", + "imageUnsupported": "Valittu malli ei tue kuvan syötettä." + }, + "mentions": { + "menu": "Lisää Homarr konteksti", + "context": "Konteksti", + "app": "Sovellukset", + "integration": "Integraatiot", + "board": "Paneelit", + "widget": "Widgetit", + "tools": "Käytettävissä olevat työkalut" + }, + "markdown": { + "diagram": "Kaavio", + "renderingDiagram": "Kaavion hahmontaminen…", + "diagramUnavailable": "Tätä kaaviota ei voitu luoda." + }, + "commands": { + "menu": "Avustavat komennot", + "health": "Valmistele palvelun terveystarkastus", + "explore": "Valmistele yleiskatsaus tähän Homarr instanssiin", + "media": "Valmistele mediahaku", + "style": "Valmistele laudan ulkonäkö tai mukautettu CSS-muutos", + "designWidget": "Valmistele yksi kehotteellinen mukautettu widget-versio" + }, + "usage": { + "tokens": "kuponkia", + "contextWindow": "Konteksti- ikkuna", + "requestDetails": "Pyydä tietoja", + "used": "Viimeisin vaihe", + "remaining": "Jäljellä", + "capacity": "Tilavuus", + "input": "Input", + "output": "Ulostulo", + "cached": "Välimuistissa oleva syöte", + "cacheWrite": "Välimuistin kirjoittaminen", + "reasoning": "Perustelu", + "inputShort": "sisään", + "outputShort": "ulos", + "cachedShort": "välimuistissa", + "reasoningShort": "päättely", + "firstOutput": "Ensimmäinen tuloste", + "homarrTiming": "Havaittu Homarr", + "endToEnd": "Lopeta loppuun", + "observedThroughput": "Havaittu ulostulo", + "providerTiming": "Toimittaja raportoitu", + "loadingProviderDetails": "Ladataan generointitietoja…", + "providerDetailsPending": "OpenRouter käsittelee edelleen joitakin sukupolven tietoja. Avaa yrittääksesi uudelleen.", + "providerLatency": "Tarjoajan viive", + "generationTime": "Luomisen aika", + "moderationLatency": "Moderointi", + "providerThroughput": "Toimittajan elinaika", + "fallbacks": "Pudotukset", + "fallbackLatency": "Takaisinperinnän latenssi", + "cacheDiscount": "Välimuistin alennus", + "normalizedTokens": "OpenRouter normalisoitu tulo / tuloste", + "byok": "BYOK", + "cost": "Kustannukset", + "reported": "Palveluntarjoajan ilmoittama", + "estimated": "Arvioitu mallihinnoittelun perusteella", + "upstreamCost": "Ylävirtaan kohdistuva vaikutus", + "webSearches": "Verkkohaut", + "finishReason": "Lopeta syy", + "notReported": "Ei raportoitu", + "agentSteps": "Agentin vaiheet", + "step": "Vaihe {number}", + "generation": "Luominen" + }, + "toolInput": "Input", + "toolOutput": "Ulostulo", + "toolActivity": { + "iconSearch": "Etsitään “{query}” kuvakkeita", + "iconBrowse": "Selataan saatavilla olevia kuvakkeita" + }, + "toolNavigation": { + "openPreview": "Avaa esikatselu", + "openWidget": "Avaa widget" + }, + "webSearch": { + "title": "Hae netistä", + "completed": "OpenRouter etsi suoran verkon tälle vastaukselle.", + "searches": "{count, plural, one {# haku} other {# hakua}}", + "sources": "{count, plural, one {# lähde} other {# lähdettä}}" + }, + "responseError": { + "title": "Avustaja ei voinut lopettaa", + "description": "Yritä uudelleen. Jos ongelma jatkuu, pyydä järjestelmänvalvojaa tarkistamaan määritetty mallin päätetapahtuma." + }, + "toolPreparationError": { + "title": "Tätä pyyntöä ei voitu laatia", + "description": "Malli pysäytettiin ennen kuin se toimitti täydelliset tiedot. Yritä vastausta tai kuvaile pyyntöä uudelleen. Muutosta ei tehty." + }, + "busy": { + "title": "Avustaja toimii jo nyt", + "description": "Odota nykyistä vastausta tai avaa se pysäyttääksesi suorituksen." + }, + "pendingAction": { + "answerTitle": "Vastaa tarvitaan", + "answerFallback": "Valitse vastaus jatkaaksesi", + "formTitle": "Tarkista sovelluksen tiedot", + "boardFormTitle": "Tarkastele lautakunnan muutoksia", + "review": "Yhteenveto", + "sendBlocked": "Ratkaise odottava pyyntö ennen lähettämistä" + }, + "activity": { + "thinking": "Avustaja ajattelee", + "working": "Työskennellään kehotuksesi parissa", + "ready": "Vastaus valmis", + "completed": "Avaa vastaus", + "approval": "Hyväksyntä tarvitaan", + "failed": "Apulaistarpeisiin on kiinnitettävä huomiota", + "expand": "Avaa avustajan vastaus", + "dismiss": "Hylkää avustajan toiminta" + }, + "scrollToLatest": "Vieritä viimeiseen", + "refresh": { + "action": "Päivitä nykyinen näkymä", + "working": "Päivitetään nykyinen näkymä", + "completeTitle": "Näytä päivitetyt", + "completeDescription": "Visible Homarr data on ladattu uudelleen.", + "failedTitle": "Näkymää ei voitu päivittää", + "failedDescription": "Muutos voidaan silti tallentaa. Kokeile päivitystoimintoa uudelleen." + }, + "askUser": { + "preparing": "Valmistellaan kysymystä", + "answered": "Sinun vastauksesi", + "other": "Muut", + "otherLabel": "Sinun vastauksesi", + "otherPlaceholder": "Kirjoita toinen vastaus…", + "submit": "Lähetä vastaus", + "cancelOther": "Peruuta muu vastaus", + "optionKind": { + "affirmative": "Vahvista", + "negative": "Hylkää", + "alternative": "Valinta", + "custom": "Mukautettu" + } + }, + "configureApp": { + "title": "Tarkista sovelluksen tiedot", + "description": "Valitse paikallinen kuvake ja säädä mitä tahansa ennen kuin avustaja pyytää luomisen hyväksymistä.", + "preparing": "Valmistellaan sovelluksen tietoja", + "continue": "Käytä näitä tietoja", + "ready": "Sovelluksen tiedot valmiina", + "automaticContinue": "Käyttämällä näitä tietoja automaattisesti" + }, + "configureBoardSettings": { + "title": "Tarkastele lautakunnan muutoksia", + "loading": "Ladataan nykyisen taulun asetuksia", + "loadErrorTitle": "Laudan asetuksia ei voitu ladata", + "loadErrorDescription": "Lautaa ei ehkä ole enää olemassa, tai sinulla ei ole oikeuksia muokata sitä.", + "proposedCount": "Avustaja ehdottanut {count} kenttää", + "changeCount": "{count} muutosta valmiina", + "ready": "Laudan muutokset valmiina", + "cancelled": "Nykyinen taulun asetukset säilytetty", + "noChanges": "Asetuksia ei muuteta", + "keepCurrent": "Säilytä nykyiset asetukset", + "continue": "Hyväksynnän jatkaminen", + "automaticContinue": "Ehdotettujen muutosten hyväksyminen automaattisesti", + "resetAll": "Nollaa kaikki muutokset", + "tabs": { + "css": "Custom CSS", + "appearance": "Ulkoasu", + "background": "Tausta", + "general": "Yleiset" + }, + "cssDescription": "Muokkaa kokonaista tyyliä. Olemassa olevat säännöt säilytetään, ellei niitä poisteta täältä.", + "cssCharacters": "{count} / 16384 merkkiä", + "copyCss": "Copy CSS", + "copied": "Kopioitu", + "restoreCss": "Restore current CSS", + "remoteCssTitle": "Tämä CSS lataa etäresurssin", + "remoteCssDescription": "Tuodut tyylitiedostot ja etäosoitteet ottavat yhteyttä toiseen palvelimeen, kun latautuu. Tarkista ne ennen jatkamista." + }, + "configureWidget": { + "title": "Arvostele widget", + "preparing": "Valmistellaan widgetin asetuksia", + "review": "Arvostele widget ja integraatiot", + "ready": "Widgetin asetukset valmiina", + "cancelled": "Widgetiä ei lisätty", + "automaticContinue": "Ehdotetun widgetin määrityksen hyväksyminen automaattisesti", + "definitionLoadErrorTitle": "Widgetin asetuksia ei voitu ladata", + "definitionLoadErrorDescription": "Homarr ei voinut ladata tämän widgetin asetuksia. Yritä uudelleen.", + "loadErrorTitle": "Integraatioita ei voitu ladata", + "loadErrorDescription": "Homarr ei voinut ladata integrointeja saatavilla tälle widget.", + "noIntegrationTitle": "Tarvitaan yhteensopiva integrointi", + "noIntegrationDescription": "Määritä tämän widgetin tukema integraatio ennen sen lisäämistä hallintapaneeliin.", + "connectIntegration": "Yhdistä palvelu", + "manageIntegrations": "Hallinnoi integraatioita", + "skip": "Älä lisää", + "errorTitle": "Widgetin asetuksia ei voitu valmistaa", + "errorDescription": "Malli ei tarjonnut täydellistä widgetin konfiguraatiota. Mitään widgetiä ei lisätty." + }, + "approvalRequired": "Hyväksyntä vaaditaan", + "complete": "Complete", + "denied": "Estetty", + "failed": "Epäonnistui", + "working": "Työskentely", + "approvalDescription": "Tarkista tämä muutos ennen sen päättymistä.", + "approveAndRun": "Hyväksy ja aja", + "deny": "Estä", + "autoApproval": { + "label": "Automaattiset hyväksynnät", + "composerLabel": "Hyväksy minulle", + "title": "Automaattiset hyväksynnät", + "description": "Valmistele lomakkeet automaattisesti ja hyväksy suojatut muutokset tähän keskusteluun. Kysymykset odottavat vastaustasi, ja Homarr-oikeudet ovat edelleen voimassa. Tämä sammuttaa kun vaihdat keskusteluja.", + "enable": "Ota tämä keskustelu käyttöön", + "disable": "Poista automaattiset hyväksynnät käytöstä", + "enabled": "Automaattiset hyväksynnät ovat käytössä", + "approving": "Hyväksytään automaattisesti" + } } } diff --git a/packages/translation/src/lang/fr.json b/packages/translation/src/lang/fr.json index 4aab8e810..54aa17a5c 100644 --- a/packages/translation/src/lang/fr.json +++ b/packages/translation/src/lang/fr.json @@ -1,156 +1,246 @@ { "init": { - "step": { - "start": { - "title": "Bienvenue sur Homarr", - "subtitle": "Commençons par configurer votre instance Homarr.", - "description": "Pour commencer, veuillez sélectionner comment vous souhaitez configurer votre instance Homarr.", - "action": { - "scratch": "Partir de zéro", - "importOldmarr": "Importer depuis Homarr avant la 1.0", - "restoreSqlite": "Restaurer depuis une sauvegarde SQLite", - "restoreSqliteDescription": "Téléchargez une sauvegarde complète de la base de données SQLite depuis une instance Homarr précédente. Cela restaurera tous les tableaux, utilisateurs, applications, intégrations et paramètres.", - "backToOptions": "← Retour aux options de configuration" + "studio": { + "navigationLabel": "Sections d'intégration", + "back": "Précédent", + "buildBoard": "Construire mon tableau", + "common": { + "unknownError": "Quelque chose s'est mal passé. Vos choix sont toujours là; essayez à nouveau." + }, + "claim": { + "checking": "Sécurisation de cette session d'intégration…", + "checkingTitle": "Préparation de la configuration sécurisée", + "lockedTitle": "L'installation est ouverte dans un autre navigateur", + "lockedDescription": "Continuez là ou attendez que sa session sécurisée en première exécution expire avant de réessayer.", + "signInTitle": "Connexion de l'administrateur requise", + "signInDescription": "Un administrateur existe déjà. Connectez-vous pour reprendre la configuration sans révéler les identifiants ou l'accès au service.", + "signIn": "Se connecter et reprendre", + "errorTitle": "L'installation n'a pas pu être sécurisée", + "errorDescription": "Recharger la page pour réessayer la session sécurisée de première exécution." + }, + "navigation": { + "essentials": "Essentiels", + "discover": "Découvrir", + "connect": "Connecter", + "board": "Tableau", + "extend": "Étendre", + "review": "Aperçu" + }, + "welcome": { + "title": "Bienvenue à la maison.", + "description": "Bienvenue sur Homarr v{version}. Nous vous guiderons à travers l'essentiel et vous aiderons à construire votre première planche.", + "start": "Commencer", + "restore": "Restaurer la sauvegarde", + "restoreTitle": "Restaurer à partir d'une sauvegarde", + "restoreDescription": "Une sauvegarde SQLite complète restaure les cartes, les personnes, les applications, les intégrations et les paramètres. Homarr le valide avant de remplacer quoi que ce soit.", + "errorTitle": "L'installation n'a pas pu démarrer", + "errorDescription": "Vos choix de configuration sont toujours ici. Essayez à nouveau, ou rechargez la page si cela continue." + }, + "account": { + "title": "Créez votre administrateur", + "description": "Spécifiez les informations d'identification pour votre compte d'administrateur.", + "username": "Nom d'utilisateur de l'administrateur", + "passwordHint": "Seul le minimum de 8 caractères est requis. Les autres contrôles de résistance au mot de passe sont des suggestions.", + "create": "Créer un administrateur", + "errorTitle": "L'administrateur n'a pas pu être créé", + "recoveryTitle": "Compte administrateur créé", + "recoveryDescription": "La connexion automatique n'est pas terminée. Connectez-vous avec les identifiants d'administrateur que vous venez de créer pour continuer l'installation.", + "recoveryAction": "Connectez-vous et continuez", + "unknownError": "L'administrateur n'a pas pu être créé." + }, + "externalGroup": { + "title": "Connecter votre groupe d'administrateur", + "description": "Utilisez le nom exact du groupe envoyé par LDAP ou OIDC. Les membres de ce groupe reçoivent un accès administrateur.", + "name": "Groupe administrateur externe", + "nameDescription": "Ceci est sensible à la casse et doit correspondre à votre fournisseur d'identité.", + "continue": "Enregistrer le groupe et continuer", + "errorTitle": "Le groupe n'a pas pu être enregistré", + "unknownError": "Le groupe administrateur n'a pas pu être enregistré." + }, + "essentials": { + "title": "Commencer avec des valeurs par défaut familières", + "description": "Définissez la langue et l'apparence que tout le monde voit en premier, puis donnez à Homarr le modèle d'adresse utilisé par vos services.", + "language": "Langue par défaut", + "theme": "Thème par défaut", + "themeAuto": "Système", + "themeLight": "Clair", + "themeDark": "Sombre", + "serverOriginHelp": "Homarr utilise cette adresse pour préremplir les URL de service détectées. Vous pouvez toujours modifier chaque service individuellement.", + "serverDescription": "Ceci est un raccourci, pas une restriction. Chaque service détecté reste modifiable.", + "serverOrigin": "Domaine, IP ou chemin de proxy inversé", + "serverOriginDescription": "Exemples : home.lan, 192.168.1.10, ou https://home.example.com/services. Choisissez comment chaque service est ajouté ci-dessous.", + "analytics": "Partager des analyses de produits anonymes", + "analyticsDescription": "Aide Homarr à améliorer la fiabilité des fonctionnalités. Aucun identifiant de service ou contenu du tableau de bord ne sont envoyés." + }, + "discover": { + "title": "Voir ce que cette installation peut réellement atteindre", + "description": "Homarr vérifie les capacités en place. Un socket Docker manquant ou un contexte Kubernetes ne bloque jamais une installation manuelle.", + "database": "Base de données", + "docker": "Docker et sockets compatibles", + "kubernetes": "Kubernetes", + "assistantWorkshop": "Assistant et atelier", + "found": "Intégrations {integrations} trouvées et applications supplémentaires {apps}", + "retryKubernetes": "Vérifiez à nouveau Kubernetes", + "retryWorkshop": "Revérifier l'atelier", + "unknownVersion": "version inconnue", + "kubernetesAvailable": "Connecté à Kubernetes {version}", + "kubernetesDisabled": "Non activé; continuer avec Docker ou les services manuels", + "kubernetesUnavailable": "Kubernetes est activé mais ne peut pas être atteint à partir de ce processus Homarr", + "workshopAvailable": "Atelier communautaire et services d'assistants hébergés sont accessibles", + "workshopUnavailable": "Des fournisseurs d'assistants locaux et personnalisés restent disponibles", + "partialTitle": "Certaines sources n'ont pas pu être analysées", + "partialDescription": "Les résultats des hôtes accessibles sont conservés. Vérifiez les autorisations de socket ou ajoutez les services manuellement dans la section suivante.", + "status": { + "checking": "Vérification de la disponibilité…", + "available": "Disponible", + "partial": "Partiellement disponible", + "empty": "Accessible, aucun service en cours", + "disabled": "Désactivé par la configuration du serveur", + "unavailable": "Indisponible dans ce processus Homarr" } }, - "import": { - "title": "Importer des données", - "subtitle": "Vous pouvez importer des données depuis une instance Homarr existante.", - "dropzone": { - "title": "Déposez le fichier zip ici ou cliquez pour naviguer", - "description": "Le zip téléchargé sera traité et vous pourrez sélectionner ce que vous voulez importer" + "connect": { + "title": "Connectez ce qui rend le tableau utile", + "description": "Sélectionnez plusieurs services à la fois. Les étiquettes Docker prennent la priorité, les images correspondantes comblent les lacunes, et chaque URL et les informations d'identification restent vérifiables.", + "discoveredIntegrations": "Instances d'intégration détectées ({count})", + "detectedIntegrationLabel": "Importer {name}, détecté comme {kind}", + "detectedAppLabel": "Importer l'application détectée {name}", + "otherIntegrations": "Ajouter une autre intégration", + "configureIntegrations": "Configurer les intégrations", + "discoveredApps": "Applications détectées ({count})", + "appAddressRequired": "Ajouter une adresse pour {name}, ou la supprimer de la sélection.", + "empty": "Aucune intégration sélectionnée. Homarr va toujours créer un tableau de démarrage utile avec des widgets généraux.", + "dockerSource": "Docker", + "manualSource": "Manuelle", + "url": "URL du service", + "noCredentials": "Aucun mot de passe", + "noCredentialsDescription": "Cette intégration n'a pas besoin d'identifiants.", + "credentialMethod": "Méthode d'identification", + "getApiKey": "Ouvrir les paramètres de la clé API pour ce service", + "openGuide": "Ouvrir le guide de configuration d'Homarrr pour ce service", + "testConnection": "Tester la connexion", + "testSuccess": "Fonctions de connexion", + "testSuccessDescription": "Homarr connecté avec l'adresse actuelle et les identifiants.", + "testError": "Échec de la connexion", + "testErrorDescription": "Vérifiez l'adresse et les identifiants du service, puis réessayez.", + "needsConfiguration": "Configuration nécessaire", + "tested": "Connexion testée", + "testFailed": "Le test de connexion a échoué", + "incompleteConfirmation": "Les intégrations inachevées seront ignorées. Continuer sans ?" + }, + "board": { + "title": "Formez la planche avant sa construction", + "description": "Homarr crée des mises en page mobiles et de base protégées, puis place des applications et des widgets compatibles à partir des services que vous avez sélectionnés.", + "target": "Tableau à configurer", + "targetDescription": "Choisissez exactement la carte existante que cette configuration devrait mettre à jour.", + "targetPlaceholder": "Sélectionnez un tableau", + "targetRequired": "Sélectionnez le tableau à configurer avant de continuer.", + "name": "Nom du tableau", + "nameDescription": "Utilisé dans l'URL du tableau; lettres, chiffres, tirets et tirets bas seulement.", + "nameRequired": "Entrez un nom de tableau avant de continuer.", + "primaryColor": "Couleur principale", + "secondaryColor": "Couleur secondaire", + "resetColors": "Réinitialiser les couleurs", + "radius": "Rayon d'angle du widget", + "radiusOptions": { + "xs": "Poignée", + "sm": "Discret", + "md": "Equilibré", + "lg": "Arrondi", + "xl": "Douce" }, - "fileInfo": { - "action": { - "change": "Changer le fichier" - } + "columns": "Colonnes du tableau", + "columnsDescription": "Les colonnes définissent la grille horizontale utilisée pour la taille et la position des objets. 12 sont abondants pour la plupart des personnes.", + "columnCount": "{count, plural, one {# colonne} other {# colonnes}}", + "leftSidebar": "Left sidebar", + "rightSidebar": "Barre latérale droite", + "previewLabel": "Aperçu en direct de la mise en page du premier tableau" + }, + "extend": { + "title": "Fonctionnalités avancées", + "tabsLabel": "Assistant, Atelier et Configuration MCP", + "assistant": "Assistant", + "workshop": "Atelier", + "assistantSetup": { + "loginTitle": "Connexion de l'administrateur requise", + "loginDescription": "Les clés du fournisseur et l'accès du modèle sont autorisés. Terminez l'installation, connectez-vous et Homarr ouvrira la configuration de l'Assistant directement.", + "loginAction": "Connectez-vous pour configurer l'Assistant" }, - "importSettings": { - "title": "Importer des paramètres", - "description": "Configurer le comportement d'importation" + "workshopSetup": { + "title": "Atelier Homarr", + "description": "Parcourez les Widgets Personnalisés de la Communauté, inspectez les capacités demandées, installez-les et publiez votre propre travail sans copier de code entre les serveurs.", + "available": "Disponible", + "checking": "Vérification de…", + "unavailable": "Unavailable", + "discoverTitle": "Découvrir", + "discoverDescription": "Trouvez des widgets construits pour de vrais workflows auto-hébergés.", + "installTitle": "Réviser et installer", + "installDescription": "Voir les métadonnées et la configuration avant d'ajouter quoi que ce soit.", + "publishTitle": "Partager", + "publishDescription": "Publier des widgets réutilisables dans la communauté.", + "browse": "Parcourir l'atelier" }, - "boardSelection": { - "title": "{count} tableaux trouvés", - "description": "Choisissez tous les tableaux avec la taille que vous souhaitez importer", - "action": { - "selectAll": "Tout sélectionner", - "unselectAll": "Tout désélectionner" - } - }, - "summary": { - "title": "Résumé de l'importation", - "description": "Dans le résumé ci-dessous vous pouvez voir ce qui va être importé", - "action": { - "import": "Confirmer l'importation et continuer" - }, - "entities": { - "apps": "Applications", - "boards": "Tableaux de bord", - "integrations": "Intégrations", - "credentialUsers": "Utilisateurs identifiés" - } - }, - "tokenModal": { - "title": "Saisir le jeton d'importation", - "field": { - "token": { - "label": "Jeton", - "description": "Entrez le jeton d'importation de votre instance précédente" - } - }, - "notification": { - "error": { - "title": "Jeton non valide", - "message": "Le jeton que vous avez saisi est invalide" - } - } + "mcpSetup": { + "title": "MCP Homarr", + "description": "Connectez Claude, Codex ou un autre client MCP aux outils saisis par Homarr. Les clés API conservent un accès explicite et révocable.", + "endpoint": "Point de terminaison HTTP streamable", + "keyTitle": "Copier cette clé maintenant", + "keyDescription": "Pour des raisons de sécurité, Homarr ne peut plus afficher cette clé API.", + "copyKey": "Copier la clé API", + "createKey": "Créer une clé API MCP", + "errorTitle": "La clé MCP API n'a pas pu être créée", + "loginRequired": "Connectez-vous en tant qu'administrateur après l'installation pour créer une clé API.", + "configuration": "Configuration du client", + "copy": "Copier la configuration", + "copied": "Copié", + "advanced": "Ouvrir les outils MCP, les autorisations et les détails de configuration" } }, - "user": { - "title": "Administrateur", - "subtitle": "Spécifiez les informations d'identification pour votre compte d'administrateur.", - "notification": { - "success": { - "title": "Utilisateur créé", - "message": "L’utilisateur a été créé avec succès" - }, - "error": { - "title": "La création de l'utilisateur a échoué" - } - } - }, - "group": { - "title": "Groupe externe", - "subtitle": "Spécifie le groupe à utiliser pour les utilisateurs externes.", - "form": { - "name": { - "label": "Nom du groupe", - "description": "Le nom doit correspondre au groupe administrateur du fournisseur externe" - } - } - }, - "settings": { - "title": "Paramètres", - "subtitle": "Configurer les paramètres du serveur." - }, - "integrations": { - "title": "Intégrations", - "subtitle": "Sélectionnez les services que vous utilisez.", - "description": "Choisissez les intégrations que vous souhaitez connecter. Nous allons configurer votre tableau de bord avec les widgets correspondants automatiquement.", - "action": { - "continue": "Continuer", - "skip": "Ignorer pour le moment" - }, - "configure": { - "progress": "{current} sur {total}", - "skip": "Ignorer cette intégration", - "finishing": "Configuration de votre tableau de bord...", - "error": { - "title": "Échec de la configuration", - "message": "Une erreur s'est produite lors de la configuration de votre tableau de bord. Veuillez réessayer." - }, - "helpers": { - "tooltip": "Aides pour les URL", - "description": "Ces aides essaient de deviner l'URL de vos services. Si cela ne fonctionne pas, tapez simplement l'adresse manuellement." - } - }, - "urlTemplate": { - "label": "URL de base", - "placeholder": "homelab.local ou 192.168.1.1", - "hint": "Entrez votre domaine de base ou votre IP pour le remplissage automatique des URL d'intégration", - "warning": "Définir votre URL de base maintenant remplira automatiquement toutes les URL d'intégration, ce qui vous fera gagner du temps lors de la configuration", - "preview": "ex. {example}", - "mode": { - "subdomain": "Sous-domaine", - "hostPort": "Hôte:Port" - } - }, - "docker": { - "detected": "Docker a détecté {count} services", - "detectedBreakdown": "Intégrations {integrations} · Applications {apps}", - "summary": "Les applications {apps} ont été détectées par Homarr, dont {integrations} ont des intégrations intégrées", - "appBadge": "Application", - "appSectionLabel": "Applications à ajouter au tableau de bord ({count} sélectionné)", - "scanning": "Analyse de Docker...", - "scanningDescription": "Recherche de conteneurs en cours d'exécution sur votre système" + "review": { + "title": "Un tableau, construit autour de vos services", + "description": "Homarr teste les connexions non enregistrées, importe les applications sélectionnées, applique l'apparence et la mise en page, puis ouvre le tableau exact qu'il a configuré.", + "board": "Premier tableau", + "columns": "Colonnes du tableau", + "columnsValue": "{count, plural, one {# colonne} other {# colonnes}}", + "sidebars": "Barres latérales", + "sidebarsValue": "{count, plural, =0 {None} one {# sidebar} other {# sidebars}}", + "layouts": "Mises en page adaptatives", + "layoutsValue": "Mobile + Base", + "integrations": "Intégrations", + "integrationsValue": "{count, plural, =0 {Aucun sélectionné} one {# intégration} other {# intégrations}}", + "apps": "Tuiles de l'application", + "appsValue": "{count, plural, =0 {Les applications de démarrage seulement} one {# tuile d'application} other {# tuiles d'application}}", + "language": "Langue", + "theme": "Thème", + "themeAuto": "Préférences du système", + "themeLight": "Clair", + "themeDark": "Sombre", + "colors": "Couleurs du tableau", + "radius": "Rayon du widget", + "automaticTitle": "Ce qu'Homarr va créer", + "automaticDescription": "Des widgets, des icônes, des liens d'applications, des relations d'intégration et un placement réactif proviennent du catalogue Homarr partagé. Vous pourrez modifier chaque résultat plus tard.", + "dockerWarningTitle": "Certaines étiquettes Docker ont été modifiées lors de l'installation", + "dockerWarningDescription": "{count, plural, one {Le résultat sélectionné Docker n'a pas pu être appliqué car son service a changé, ciblé un autre tableau, ou son widget était incompatible} other {# Les résultats sélectionnés de Docker n'ont pas pu être appliqués parce que les services ont changé, ciblé un autre tableau, ou leurs widgets étaient incompatibles}}", + "errorTitle": "Le tableau n'a pas pu être construit", + "progress": { + "applying": "Tester les connexions et construire votre carte", + "done": "Votre tableau est prêt" } }, "finish": { - "title": "Terminer la configuration", - "subtitle": "Vous êtes prêt !", - "description": "Vous avez terminé avec succès le processus d'installation. Vous pouvez maintenant commencer à utiliser Homarr. Sélectionnez votre prochaine action :", - "action": { - "goToBoard": "Accéder au tableau {name}", - "createBoard": "Créez votre premier tableau", - "inviteUser": "Inviter d'autres utilisateurs", - "docs": "Lire la documentation" - } + "title": "Votre premier tableau est prêt.", + "description": "Homarr a connecté les pièces que vous avez sélectionnées et gardé le reste éditable. Ouvrez maintenant le tableau; la visite courte dans le produit peut vous montrer le mode d'édition, les widgets, les mises en page et la recherche.", + "openBoard": "Ouvrir mon tableau", + "manageTitle": "Gérer", + "manageDescription": "Ajuster les applications, les intégrations, les tableaux, les utilisateurs et les paramètres du serveur.", + "workshopTitle": "Atelier", + "workshopDescription": "Découvrez et installez les Widgets Personnalisés de la communauté.", + "docsTitle": "Apprendre Homarr", + "docsDescription": "Lisez les guides axés sur les tableaux, les widgets, les intégrations et les outils." } - }, - "backToStart": "Retour au début" + } }, "user": { - "title": "Utilisateurs", "name": "Utilisateur", "page": { "login": { @@ -159,12 +249,10 @@ }, "invite": { "title": "Rejoignez Homarr", + "titleWithAppName": "Rejoindre {appName}", "subtitle": "Bienvenue sur Homarr ! Veuillez créer votre compte", + "subtitleWithAppName": "Bienvenue sur {appName}! Veuillez créer votre compte", "description": "Vous avez été invité par {username}" - }, - "init": { - "title": "Nouvelle installation Homarr", - "subtitle": "Veuillez créer l'utilisateur administrateur initial" } }, "field": { @@ -192,12 +280,17 @@ "previousPassword": { "label": "Ancien mot de passe" }, - "homeBoard": { - "label": "Tableau de bord" - }, "pingIconsEnabled": { "label": "Utiliser les icônes pour les pings" }, + "byteUnitSystem": { + "label": "Unités de taille de données", + "description": "Choisir comment Homarr affiche les tailles d'octets et les taux d'octets. Les débits de bits utilisent toujours les unités décimales.", + "options": { + "binary": "Binaire", + "decimal": "Décimal" + } + }, "enableRightClickOnWidgets": { "label": "Activer le clic droit sur les widgets", "description": "Afficher le menu contextuel d'Homarr lorsque vous cliquez avec le bouton droit sur un widget. Désactiver pour utiliser le menu par défaut du navigateur (par exemple \"Ouvrir le lien dans un nouvel onglet\")." @@ -247,7 +340,6 @@ } } }, - "create": "Créer un utilisateur", "changePassword": { "label": "Changer le mot de passe", "notification": { @@ -259,56 +351,6 @@ } } }, - "changeHomeBoard": { - "notification": { - "success": { - "message": "Tableau de bord modifié avec succès" - }, - "error": { - "message": "Impossible de modifier le tableau de bord" - } - } - }, - "changeSearchPreferences": { - "notification": { - "success": { - "message": "Les préférences de recherche ont été modifiées avec succès" - }, - "error": { - "message": "Impossible de modifier les préférences de recherche" - } - } - }, - "changeFirstDayOfWeek": { - "notification": { - "success": { - "message": "Le premier jour de la semaine a été modifié avec succès" - }, - "error": { - "message": "Impossible de modifier le premier jour de la semaine" - } - } - }, - "changePingIconsEnabled": { - "notification": { - "success": { - "message": "Icônes de ping activés avec succès" - }, - "error": { - "message": "Impossible d'activer les icônes de ping" - } - } - }, - "changeDdgBangs": { - "notification": { - "success": { - "message": "Bangs DuckDuckGo activés avec succès" - }, - "error": { - "message": "Impossible d'activer/désactiver les bangs DuckDuckGo" - } - } - }, "manageAvatar": { "changeImage": { "label": "Modifier l’image", @@ -338,16 +380,6 @@ } } }, - "editProfile": { - "notification": { - "success": { - "message": "Profil mis à jour avec succès" - }, - "error": { - "message": "Impossible de mettre à jour le profil" - } - } - }, "delete": { "label": "Supprimer définitivement l'utilisateur", "description": "Supprime cet utilisateur ainsi que ses préférences. Ne supprimera aucun tableau. L'utilisateur ne sera pas averti.", @@ -356,18 +388,13 @@ "select": { "label": "Sélectionner l'utilisateur", "notFound": "Aucun utilisateur trouvé" - }, - "transfer": { - "label": "Choisir un nouveau propriétaire" } } }, "group": { - "title": "Groupes", "name": "Groupe", "search": "Trouver un groupe", "field": { - "name": "Nom", "members": "Membres", "homeBoard": { "label": "Tableau d'accueil", @@ -388,6 +415,19 @@ } } }, + "custom-widget": { + "title": "Widgets personnalisés", + "item": { + "manage": { + "label": "Gérer les widgets personnalisés", + "description": "Permettre aux membres de créer, modifier et supprimer des définitions de widget personnalisées" + }, + "secret-write": { + "label": "Configurer les secrets personnalisés des widgets", + "description": "Autoriser les membres et leurs clés API à définir des identifiants personnalisés de widget chiffrés" + } + } + }, "app": { "title": "Applications", "item": { @@ -493,6 +533,35 @@ "description": "Autoriser les membres à gérer et supprimer n'importe quel moteur de recherche" } } + }, + "matrix": { + "none": "Pas d'accès", + "impliedHint": "Donne également : {permissions}", + "grantedViaAdmin": "Les administrateurs l'ont déjà. Réglez l'administrateur sur \"Aucun accès\" pour le configurer séparément.", + "preset": { + "label": "Préréglages", + "viewer": "Visionneuse", + "viewerDescription": "Lecture seule: afficher les tableaux et les médias, utiliser les applications et les intégrations qui existent déjà.", + "editor": "Editeur", + "editorDescription": "Gestion quotidienne : créer et éditer des tableaux, des applications, des intégrations et des moteurs de recherche.", + "admin": "Admin", + "adminDescription": "Accès illimité à toutes les fonctionnalités et paramètres, y compris la gestion des utilisateurs.", + "custom": "Personnalisé" + }, + "effective": { + "title": "Autorisations effectives", + "description": "L'ensemble complet et dédoublé des actions que les membres de ce groupe peuvent effectuer, y compris les permissions accordées indirectement.", + "empty": "Aucune permission sélectionnée" + }, + "noneDescription": "Les membres n'ont pas accès à cette zone.", + "level": { + "view": "Voir", + "use": "Utiliser", + "interact": "Interagir", + "modify": "Modifier", + "full": "Plein" + }, + "capabilityIncluded": "Déjà inclus dans «{level}»" } }, "memberNotice": { @@ -607,21 +676,24 @@ "search": "Trouver une app", "page": { "list": { - "title": "Applications", + "ariaLabel": "Applications configurées", "noResults": { "title": "Il n'y a pas encore d'apps", - "action": "Créer votre première app" + "description": "Les applications sont des liens vers les services et les outils que vous voulez sur vos tableaux.", + "action": "Créer votre première app", + "filteredTitle": "Aucune application ne correspond à votre recherche", + "filteredDescription": "Aucune application ne correspond à «{search}». Essayez un autre nom ou une autre URL.", + "createOnlyTitle": "Vous pouvez seulement ajouter des applications", + "createOnlyDescription": "Vos autorisations vous permettent de créer des applications mais pas de naviguer dans celles existantes. Demandez à un administrateur d'accéder à la gestion des applications pour voir la liste complète." } }, "create": { "title": "Nouvelle app", "notification": { "success": { - "title": "Créé avec succès", "message": "L'application a bien été créée" }, "error": { - "title": "Échec de la création", "message": "L'application n'a pas pu être créée" } } @@ -630,11 +702,9 @@ "title": "Éditer l'application", "notification": { "success": { - "title": "Modifications appliquées avec succès", "message": "L'application a été enregistrée avec succès" }, "error": { - "title": "Impossible d'appliquer les changements", "message": "L'application n'a pas pu être enregistrée" } } @@ -644,26 +714,18 @@ "message": "Êtes-vous sûr de vouloir supprimer l'app {name} ?", "notification": { "success": { - "title": "Suppression effectuée avec succès", "message": "L'application a été supprimée avec succès" }, "error": { - "title": "Échec de la suppression", "message": "Impossible de supprimer l'application" } } } }, "field": { - "name": { - "label": "Nom" - }, "description": { "label": "Description" }, - "url": { - "label": "Url" - }, "useDifferentUrlForPing": { "checkbox": { "label": "Utiliser une URL différente pour le ping", @@ -678,57 +740,397 @@ "search": "Rechercher une application", "noResults": "Pas de résultats", "action": "Sélectionner {app}", - "title": "Sélectionner une application à ajouter à ce tableau" + "title": "Sélectionner une application à ajouter à ce tableau", + "toggle": "Cliquez pour sélectionner", + "selected": "Sélectionnés", + "multiple": "Ajouter {count}", + "selectedCount": "{count, plural, one {# sélectionné} other {# sélectionné}}", + "appsSelected": "{count, plural, one {# app sélectionnée} other {# applications sélectionnées}}", + "selectMultiple": "Sélectionner plusieurs", + "cancelMultiple": "Quitter la sélection multiple", + "customApplication": "Application personnalisée", + "application": "Application" }, "create": { "title": "Créer une nouvelle application", "description": "Créer une nouvelle application ", "action": "Ouvrir la création de l'application" - }, - "add": "Ajouter une application" + } } }, + "tips": { + "dismiss": "Rejeter l'astuce", + "multiSelectApps": "Astuce : Maintenez Ctrl / pour sélectionner plusieurs applications à la fois" + }, "customWidget": { + "secretEntry": { + "title": "Configurer la source de l'API", + "description": "Confirmez l'URL du serveur et entrez les identifiants. Les valeurs secrètes sont chiffrées par Homarr et jamais retournées à l'agent requérant.", + "loading": "Chargement de la requête sécurisée…", + "applying": "Application de cette configuration… Garder cette page ouverte.", + "saved": "Source de l'API configurée. Vous pouvez fermer cette page.", + "unavailable": "Demande indisponible", + "saveError": "Impossible de configurer la source de l'API", + "source": "Source de l'API : {name}", + "baseUrl": "URL du serveur", + "networkScope": "Accès au réseau", + "save": "Enregistrer la configuration de l'API", + "expires": "Cette demande unique expire à {time}." + }, "page": { "list": { - "title": "Widgets personnalisés", "noResults": "Pas encore de widgets personnalisés. Créez votre premier widget!", - "loading": "Chargement..." + "noDescription": "Pas de description", + "enabled": "Activé", + "disabled": "Désactivé", + "disabledDescription": "Ce widget reste configuré mais ne sera chargé sur aucun tableau.", + "requestCount": "{count, plural, one {# demande} other {# demandes}}", + "invalidDefinition": "Définition non valide", + "migrationRequired": "Migration requise", + "migrationInstructions": "Ouvrir les actions pour copier ou exporter la définition originale de la v1 pour les loisirs manuels. Vous pouvez également utiliser l'invite de migration avec un LLM. Les placements existants de la carte fonctionnent après la migration.", + "missingCredentials": "{count, plural, one {Identification manquante} other {# identifiants manquants}}", + "missingCredentialsDescription": "{count, plural, one {Ce widget a encore besoin d'un identifiant.} other {Ce widget a encore besoin de # identifiants.}} Sélectionnez ce badge pour configurer l'URL et les valeurs chiffrées." }, "create": { "title": "Créer un widget personnalisé", "subtitle": "Définissez une URL de l'API, l'authentification, et comment afficher les données de réponse." }, - "edit": { - "title": "Modifier le widget personnalisé" + "tabs": { + "ariaLabel": "Sections de widget personnalisées", + "installed": "Installé", + "workshop": "Atelier" } }, "action": { - "create": "Créer", - "import": "Importer", - "save": "Sauvegarder", + "pasteImportHint": "Collez un widget JSON personnalisé complet avec Ctrl+V ou Command+V", "delete": "Supprimer le widget personnalisé", "deleteConfirm": "Êtes-vous sûr de vouloir supprimer \"{name}\" ? Cette action est irréversible.", "export": "Exporter", - "edit": "Modifier", "duplicate": "Dupliquer", + "aiPrompt": "Design avec IA", "copyAiPrompt": "Copier le prompt IA", "enable": "Activer", "disable": "Désactiver", - "menu": "Actions" + "menu": "Actions", + "downloadSkill": "Voir la compétence personnalisée du Widget", + "publishWorkshop": "Publier dans l'atelier", + "migrate": "Migrer le widget personnalisé", + "configureSources": "Configurer les sources", + "copyLegacyDefinition": "Copier le contenu du widget original", + "exportLegacyDefinition": "Exporter le contenu du widget original", + "copyMigrationPrompt": "Copier l'invite de migration LLM", + "pasteMigration": "Coller le widget migré", + "importMigration": "Importer un fichier JSON migré" + }, + "sourceSetupDialog": { + "title": "Configurer les sources du widget", + "description": "Examinez où ce widget se connecte et ajoutez ou remplacez ses identifiants chiffrés.", + "credentialsRequired": "Les requêtes échoueront jusqu'à ce que les informations d'identification requises soient ajoutées.", + "save": "Enregistrer la configuration" }, "field": { - "name": "Nom", - "description": "Description", - "iconUrl": "URL de l'icône" + "description": "Description" + }, + "editor": { + "errorBoundary": { + "title": "Quelque chose s'est mal passé" + }, + "action": { + "components": "Composants", + "format": "Formater", + "insertStarter": "Insert starter", + "redo": "Refaire", + "copied": "Copié", + "schema": "Schéma" + }, + "reference": { + "minimal": "Exemple minimal", + "full": "Exemple complet" + }, + "componentReference": { + "search": "Rechercher des composants", + "empty": "Aucun composant correspondant", + "count": "{count, number} composants disponibles" + }, + "status": { + "errors": "{count, number} erreurs", + "warnings": "{count, number} avertissements", + "ready": "Aucun problème trouvé", + "position": "Ln {line, number}, Col {column, number}", + "characters": "{count, number} caractères", + "charactersWithLimit": "{count, number} / {limit, number}" + }, + "diagnostics": { + "title": "Diagnostic du modèle", + "line": "Ligne {line, number}", + "ast": "{value}", + "bindingTypeConflict": "L'entrée \"{value}\" est partagée par des contrôles avec des types de valeurs incompatibles.", + "runtimeBindingTypeConflict": "L'entrée \"{value}\" est liée à la fois à {firstType} et à {secondType}.", + "dynamicRequestId": "Un identifiant de requête littéral est requis. Les identifiants dynamiques ne sont pas acceptés.", + "dynamicInputBinding": "Un nom d'entrée littéral est requis pour la liaison.", + "inlineRequestProps": "Les composants réseau acceptent requestId et les paramètres; les URL en ligne, la méthode, l'en-tête et les props corps sont bloqués.", + "invalidRequestManifest": "Les requêtes nommées doivent être une carte de requête valide. {value}", + "missingRequestId": "Ce composant réseau nécessite un identifiant de requête littéral.", + "templateEmpty": "Entrez un modèle JSX.", + "templateTooLong": "Le modèle dépasse la limite de 50 000 caractères.", + "unknownRequest": "Aucune requête nommée avec l'ID \"{value}\" n'existe." + } + }, + "workbench": { + "configure": "Configurer", + "sectionNavigation": "Sections de widget personnalisées", + "widgetPreview": "Aperçu du widget", + "generalInformation": "Informations générales", + "invalidWidget": "Widget invalide", + "section": { + "general": "Général", + "sources": "Sources de l'API", + "requests": "Demandes", + "options": "Options", + "jsx": "JSX", + "preview": "Aperçu" + }, + "status": { + "unsaved": "Modifications non enregistrées", + "invalid": "A besoin d'attention", + "ready": "Prêt" + }, + "saveError": { + "title": "Widget n'a pas été sauvegardé", + "description": "Corrigez ces erreurs de validation et enregistrez à nouveau.", + "more": "+{count} autres erreurs sont affichées dans l'établi.", + "errors": "Erreurs de validation", + "copy": "Erreurs de copie", + "copied": "Erreurs copiées" + }, + "action": { + "preview": "Test et aperçu", + "previewLoading": "Demandes de test" + }, + "requests": { + "title": "Requêtes et actions nommées", + "label": "Demandes", + "description": "Les requêtes chargent les données; les actions ne s'exécutent qu'après l'interaction de l'utilisateur. Toute méthode HTTP est valide pour chaque type." + }, + "options": { + "title": "Options du widget" + }, + "builder": { + "advancedManifest": "Manifeste brut avancé", + "advancedJson": "Manifeste avancé JSON", + "manifestFilename": "widget.json", + "request": "Demander {count, number}", + "requestId": "ID de la requête", + "type": "Type de client de téléchargement", + "method": "Méthode", + "source": "Source de l'API", + "run": "Exécuter", + "runLoad": "Quand le widget se charge", + "runManual": "Depuis le sous-chargement", + "permission": "Permission", + "path": "Chemin d'accès", + "pathDescription": "Utilisez '{option:name}' pour les options du widget et '{param:name}' pour les valeurs d'invocation.", + "requestDetails": "Requête, corps et comportement", + "queryValues": "Valeurs de la requête", + "queryKey": "Clé de requête", + "queryKeyInvalid": "Utilisez un ID unique qui commence par une lettre et ne contient que des lettres, des chiffres, - ou _.", + "valueSource": "Source de valeur", + "literal": "Litérale", + "widgetOption": "Option de widget", + "invocationParameter": "Paramètre d'invocation", + "option": "Option", + "parameterName": "Nom du paramètre", + "value": "Valeur", + "removeQueryValue": "Supprimer la valeur de la requête", + "addQueryValue": "Ajouter la valeur de la requête", + "jsonBody": "Corps JSON", + "jsonBodyDescription": "Optionnel. Insérez les références $option et $param à n'importe quelle profondeur.", + "insertOptionReference": "Insérer une référence d'option", + "insertParameterReference": "Insérer la référence de paramètre", + "confirmation": "Message de confirmation", + "invalidation": "Rafraîchir après succès", + "invalidationDescription": "ID de requête séparés par des virgules", + "noAuth": "Envoyer sans authentification source", + "moveRequestUp": "Déplacer la requête vers le haut", + "moveRequestDown": "Déplacer la requête vers le bas", + "removeRequest": "Retirer la demande", + "addRequest": "Ajouter une demande", + "optionName": "Nom de l’option", + "label": "Étiquette", + "control": "Contrôle", + "description": "Description", + "default": "Par défaut", + "optionDetails": "Contraintes et choix dynamiques", + "minimum": "Minimum", + "maximum": "Maximum", + "step": "Étape", + "choiceLabel": "Étiquette de choix", + "choiceValue": "Valeur de choix", + "newChoice": "Nouveau choix", + "addChoice": "Ajouter un choix", + "removeChoice": "Supprimer le choix", + "choicesRequest": "Charger les choix depuis la requête", + "itemsPath": "Chemin des éléments", + "itemsPathPlaceholder": "Eléments (optionnel)", + "valuePath": "Chemin de la valeur", + "labelPath": "Chemin de l'étiquette", + "group": "Groupe", + "advancedOption": "Options avancées", + "moveOptionUp": "Déplacer l'option vers le haut", + "moveOptionDown": "Déplacer l'option vers le bas", + "removeOption": "Supprimer l'option", + "addOption": "Ajouter une option", + "invalidJson": "JSON invalide", + "invalidWidget": "Widget invalide" + }, + "jsx": { + "title": "Modèle JSX", + "label": "Gabarit" + }, + "sources": { + "title": "Sources et identifiants de l'API", + "newName": "API {count, number}", + "duplicateSourceId": "Les ID source de l'API doivent être uniques.", + "credentialRemoved": "Identification supprimée", + "credentialRemovedDescription": "La valeur enregistrée a été supprimée.", + "primary": "API Primaire", + "id": "ID source", + "name": "Nom de la tâche", + "baseUrl": "URL de base", + "baseUrlError": { + "invalid": "Entrez une URL complète.", + "protocol": "Utiliser une URL HTTP ou HTTPS.", + "credentials": "Supprimer le nom d'utilisateur et le mot de passe de cette URL. Configurer les identifiants ci-dessous à la place.", + "queryOrFragment": "Enlever la chaîne de requête ou le fragment de cette URL de base. Ajouter des valeurs de requête à une requête nommée." + }, + "networkScope": "Accès au réseau", + "authentication": "Authentification", + "headerName": "Nom de l'en-tête", + "queryParameter": "Paramètre de requête", + "configured": "Configuré — entrez un remplacement", + "clear": "Clair", + "remove": "Supprimer la source et ses requêtes", + "advanced": "Avancé", + "add": "Ajouter une autre source API", + "sourceType": "Intégration", + "manualSource": "HTTP API", + "existingIntegration": "Intégration existante", + "integrationType": "Type d'intégration", + "selectIntegration": "Intégration configurée", + "noIntegrations": "Aucune intégration correspondante disponible", + "integrationUnavailable": "L'intégration sélectionnée n'est plus disponible. Sélectionnez une autre intégration.", + "integrationDescription": "Utilise l’URL d’intégration et les identifiants enregistrés. Les modifications s’appliquent automatiquement. Un accès complet à l’intégration est nécessaire pour exécuter les requêtes." + }, + "ai": { + "title": "Créer ou réparer avec une IA", + "description": "Ajoutez d'abord une URL API docs si vous en avez une. Pour les correctifs, exécutez si possible. Copiez l'invite dans n'importe quelle AI; il peut demander des détails manquants. Collez son JSON final ici.", + "request": "Que doit faire ce widget ?", + "documentationUrl": "URL de la documentation de l'API (facultatif)", + "paste": "Coller", + "response": "Réponse IA", + "manualCopyDescription": "L'accès au presse-papier n'est pas disponible. Sélectionnez l'invite ci-dessous et copiez-le manuellement.", + "manualPasteDescription": "L'accès au presse-papiers n'est pas disponible ou la réponse copiée a besoin de correction. Collez la réponse JSON de l'IA ici.", + "selectAll": "Tout sélectionner", + "loadResponse": "Charger la réponse", + "loaded": "Widget chargé dans l'éditeur", + "invalidResponse": "Le presse-papier ne contient pas de widget v2 valide", + "invalidResponseDetail": "La réponse de l'IA est invalide : {message}" + }, + "preview": { + "invalid": "Corriger les erreurs de validation pour prévisualiser ce widget.", + "fixtureError": "Erreur de prévisualisation", + "requestData": "Demander des données", + "status": { + "idle": "Les demandes n'ont pas été testées", + "loading": "Demandes de test", + "success": "Toutes les requêtes de chargement ont réussi", + "error": "Une ou plusieurs requêtes de chargement ont échoué" + }, + "result": { + "loading": { + "title": "Test des requêtes API", + "description": "Homarr est en train de créer une session d'aperçu et de charger les données du widget." + }, + "success": { + "title": "Aperçu prêt", + "description": "{succeeded, plural, =0 {Ce widget n'a pas de requêtes de chargement.} one {# demande de chargement réussie.} other {# demandes de chargement réussies.}} Ouvrez les données pour inspecter la réponse." + }, + "error": { + "title": "Aperçu terminé avec des erreurs de demande", + "description": "{succeeded, number} réussi et {failed, number} Échec ouvert. Données ouvertes pour la réponse et les détails de l'erreur." + } + }, + "instanceOptions": "Options de l'instance", + "liveActions": "Exécuter des actions contre l'API configurée", + "liveActionsDescription": "Désactivé est une simulation sûre. L'activation affecte le service réel.", + "noActions": "Aucune action définie.", + "containedFailures": "Les échecs d'exécution sont contenus dans ce widget. Les journaux de requête n'incluent jamais de valeurs secrètes.", + "validation": { + "title": "Validation", + "ready": "La définition du widget est valide." + }, + "accessibility": { + "title": "Contrôles d'accessibilité", + "ready": "Aucune omission d'accessibilité commune détectée.", + "pending": "Les vérifications d'accessibilité seront exécutées lorsque la définition du widget sera valide.", + "imageAlt": "Ajouter le texte alt à chaque image, en utilisant un alt vide uniquement pour les images décoratives.", + "actionIconLabel": "Ajouter une étiquette aria ou un titre à chaque icône ActionIcon.", + "inputLabel": "Ajouter un libellé visible ou un nom accessible à chaque entrée." + }, + "journal": "Journal des demandes édité", + "actionParameters": "Paramètres d'action (JSON)", + "invalidParameters": "Utilisez la chaîne déclarée, le nombre et les types de paramètres booléens.", + "runDestructive": "Exécuter une action destructive", + "runAction": "Exécuter l'action", + "deleteConfirmation": "Cette action d'aperçu modifie les données distantes à travers l'API configurée.", + "simulated": "Action simulée", + "httpStatus": "HTTP {status, number}", + "tab": { + "widget": "Widget", + "data": "Donnée", + "options": "Options", + "state": "État de la tâche", + "actions": "Contrôles", + "diagnostics": "Diagnostics" + }, + "size": { + "compact": "Compact", + "standard": "Standard", + "wide": "Large" + }, + "fixture": { + "live": "En direct", + "loading": "Chargement", + "empty": "Vide", + "error": "Erreur" + } + } + }, + "preview": { + "request": { + "permission": { + "view": "Voir", + "modify": "Modifier", + "full": "Plein" + } + } }, "notification": { "created": "Widget \"{name}\" créé avec succès.", "updated": "Widget \"{name}\" mis à jour avec succès.", "deleted": "Widget \"{name}\" supprimé.", "imported": "Widget importé avec succès.", + "migrated": "Ancien widget migré avec succès. Les placements existants de cartes utilisent maintenant la définition v2.", + "migrationError": "Impossible de migrer le widget existant. Assurez-vous que le fichier utilise le schéma homarr-custom-widget-v2.", + "legacyDefinitionCopied": "Le contenu original du widget a été copié. Les identifiants stockés ne sont pas inclus.", + "legacyDefinitionCopyError": "Impossible de copier le contenu du widget original.", + "migrationPromptCopied": "Une invite de migration a été copiée. Collez-la dans un LLM, copiez sa réponse JSON unique, puis choisissez Coller le widget migré ici.", + "migrationPromptCopyError": "Impossible de copier l'invite de migration.", + "sourcesConfigured": "Sources du widget et identifiants enregistrés.", + "sourceConfigurationError": "Impossible de configurer les sources du widget.", + "aiPromptCopiedWithCount": "L'invite IA a été copiée dans le presse-papiers ({count, number} caractères).", "aiPromptCopyError": "Échec de la copie du prompt dans le presse-papiers. Votre navigateur peut ne pas prendre en charge cette fonctionnalité.", - "createError": "Impossible de créer le widget. Vérifiez que votre point de terminaison API est joignable.", + "aiPromptSent": "Invitation envoyée. Vous pouvez continuer à éditer pendant que l'assistant fonctionne en arrière-plan.", "updateError": "Impossible de mettre à jour le widget. Vos modifications n'ont pas été enregistrées.", "importError": "Impossible d'importer le widget. Assurez-vous que le fichier est un export JSON de widget personnalisé valide.", "exportError": "Impossible d'exporter le widget.", @@ -736,29 +1138,184 @@ "duplicateError": "Impossible de dupliquer le widget.", "toggleError": "Impossible de changer le statut du widget.", "deleteError": "Impossible de supprimer le widget.", - "previewError": "Impossible de récupérer l'aperçu. Vérifiez l'URL et réessayez.", - "executed": "Action exécutée avec succès.", - "executeError": "Échec de l'action: {error}" + "previewError": "Impossible de récupérer l'aperçu. Vérifiez l'URL et réessayez." + }, + "importReview": { + "title": "Examiner l'import de widget personnalisé", + "description": "Vérifiez où ce widget se connecte et quel accès au tableau de bord est requis avant de l'importer.", + "migrationTitle": "Remplacement de la révision migrée v2", + "migrationDescription": "Revoir et confirmer cette définition générée de la v2. Confirmer atomiquement le remplacement de l'enregistrement v1 préservé tout en gardant les emplacements de tableau existants liés au même ID de widget.", + "fileLabel": "Choisir un fichier JSON de widget personnalisé", + "name": "Nom de la tâche", + "origin": "Origine de base", + "authentication": "Authentification", + "networkScope": "Portée du réseau", + "methods": "Méthodes HTTP", + "permissions": "Autorisations de tableau requises", + "sourceSetup": { + "title": "Configurer les sources de l'API", + "description": "Confirmez où ce widget se connecte et ajoute des identifiants. Les URL privées et de rebouclage sont spécifiques à votre installation d'Homarr.", + "suggestedUrl": "URL suggérée", + "confirmUrl": "Je confirme que l'URL de ce serveur est correcte pour mon installation d'Homarr", + "ready": "URL prête", + "needsUrl": "Confirmer l'URL", + "credentialsMissing": "Identifiants manquants", + "credentialsOptional": "Vous pouvez installer sans les identifiants et les configurer plus tard, mais les requêtes échoueront jusqu'à ce qu'elles soient ajoutées." + }, + "actionWarning": { + "title": "Ce widget peut modifier les données distantes", + "description": "Examinez toutes les actions nommées, les identifiants hérités et la confirmation destructrice après l'importation. Les secrets ne sont pas inclus dans le fichier." + }, + "cancel": "Annuler l'importation", + "confirm": "Importer le widget", + "confirmMigration": "Confirmer le remplacement v2" + }, + "secret": { + "apiKey": "Clé API ou jeton", + "username": "Nom d'utilisateur", + "password": "Mot de passe", + "savedPlaceholder": "••••••• (sauvegardé, laisser vide pour garder)" + } + }, + "workshop": { + "title": "Atelier", + "browseWorkshop": "Parcourir l'atelier", + "openCommunity": "Ouvrir un atelier", + "openOnWorkshop": "Ouvrir {title} sur le site de l'Atelier", + "back": "Retour à l'atelier", + "search": "Rechercher des widgets", + "searchCss": "Rechercher des thèmes CSS", + "sort": "Trier", + "sortTop": "Les mieux notés", + "sortNewest": "Plus récent", + "listAriaLabel": "Widgets de l'atelier", + "listAriaLabelCss": "Thèmes CSS de l'atelier", + "empty": "Aucun widget ne correspond à cette recherche.", + "emptyDescription": "Les widgets de la communauté publiés dans l'Atelier apparaissent ici.", + "emptyFilteredTitle": "Aucun widget ne correspond à cette recherche", + "emptyFilteredDescription": "Aucun widget d'atelier ne correspond à \"{search}\".", + "emptyCss": "Aucun thème CSS ne correspond à cette recherche.", + "unavailableTitle": "L'Atelier Homarr semble indisponible", + "unavailable": "Le service communautaire peut être temporairement désactivé. Réessayez dans un instant. Vos widgets installés ne sont pas affectés.", + "loadError": "Cette soumission n'a pas pu être chargée.", + "noDescription": "Pas de description", + "author": "par {name}", + "communityMember": "Membre de la communauté", + "outdated": "Mis à jour", + "outdatedWarning": "L'auteur a marqué cette soumission comme obsolète. Révisez-la soigneusement avant d'importer.", + "score": "Score : {count, number}", + "upvote": "Upvote", + "downvote": "Vote négatif", + "voteError": "Le vote n'a pas pu être sauvegardé.", + "signIn": "Se connecter avec GitHub", + "signInError": "La connexion à GitHub a échoué. Vérifiez que le fournisseur OAuth Workshop est configuré et que les popups sont autorisés.", + "signOut": "Se déconnecter", + "signInHint": "Connectez-vous pour voter ou faire un rapport. L'installation ne nécessite pas de compte Atelier.", + "securityNotice": "Les widgets Workshop peuvent appeler leurs sources API déclarées et effectuer des actions déclarées avec les identifiants que vous configurez localement. Les secrets ne sont jamais inclus.", + "securityNoticeCss": "Le CSS de la communauté peut modifier l'apparence et la convivialité d'un tableau. Revisez-le avant d'importer; rien n'est sauvegardé tant que vous n'enregistrez pas les paramètres du tableau.", + "install": "Installer", + "installReviewTitle": "Réviser avant l'installation", + "installError": "Ce widget ne peut pas être installé", + "installErrorDescription": "La soumission de l'atelier n'est pas un widget JSX v2 Personnalisé valide.", + "useCss": "Import CSS", + "importCss": "Importer CSS depuis un atelier", + "importCssConfirm": "Remplacer le CSS personnalisé actuel par \"{title}\" ? Rien n'est sauvegardé tant que vous n'enregistrez pas les paramètres du forum.", + "screenshotAlt": "Capture d'écran {title} {count, number}", + "screenshotViewer": "Visionneuse de capture d'écran {title}", + "screenshotsLabel": "Captures d'écran {title}", + "zoomScreenshot": "Voir la taille complète", + "previousScreenshot": "Capture d'écran précédente", + "nextScreenshot": "Prochaine capture d'écran", + "showScreenshotThumbnails": "Afficher les vignettes de la capture d'écran", + "hideScreenshotThumbnails": "Masquer les vignettes de la capture d'écran", + "closeScreenshotViewer": "Fermer la visionneuse de capture d'écran", + "technicalDetails": "Détails techniques", + "sourceCode": "Entrée d'atelier", + "export": "Exporter", + "report": "Rapporter", + "reportTitle": "Signaler la soumission", + "reportReason": "Raison", + "reportExplanation": "Que doivent savoir les modérateurs de l'Atelier?", + "reportSend": "Envoyer le rapport", + "reportSent": "Rapport envoyé", + "reportSentDescription": "Les modérateurs de l'atelier peuvent maintenant examiner cette soumission.", + "reportCount": "{count, plural, one {# rapport} other {# rapport}}", + "reportWarning": "{count, plural, one {Cette soumission a # rapport communautaire ouvert.} other {Cette soumission a # des rapports de la communauté ouverts.}} Il reste installable, mais vous devriez d'abord revoir son contenu.", + "reportVisibility": "Les détails du rapport ne sont visibles que pour les administrateurs de l'auteur et de l'atelier de cette soumission.", + "reportCategory": { + "outdated": "Dépassé ou ne fonctionne plus", + "malicious": "Malicieux", + "spam": "Spam", + "copyright": "Droit d'auteur", + "inappropriate": "Inapproprié", + "other": "Autre" + }, + "publish": { + "title": "Publier dans l'atelier", + "introTitle": "Partager ce widget avec la communauté", + "introDescription": "Homarr exporte une copie sans identification du widget actuel. Ajouter des détails de liste clairs pour que les gens sachent ce qu'il fait avant de l'installer.", + "listingDetails": "Liste des ateliers", + "listingDetailsDescription": "Ces détails apparaissent publiquement aux côtés de la définition du widget exporté.", + "success": "Publié immédiatement. Les membres de la communauté peuvent maintenant installer et rapporter ce widget.", + "successTitle": "Votre widget est en direct", + "manageDescription": "Ouvrez la soumission pour mettre à jour sa liste, ses rapports d'évaluation, la marquer dépassée ou la supprimer. La gestion des soumissions est gérée directement sur le site Web de l'Atelier.", + "viewSubmission": "Voir et gérer la soumission", + "done": "Fait", + "signInHint": "Connectez-vous pour publier sous votre identité d’atelier.", + "titleField": "Titre", + "descriptionField": "Description", + "screenshots": "Captures d'écran", + "screenshotsDescription": "Jusqu'à cinq images PNG, JPEG ou WebP", + "screenshotsPlaceholder": "Choisir des captures d'écran", + "invalidScreenshot": "Utilisez des images PNG, JPEG ou WebP d'une taille inférieure à {maxSize} chacune.", + "privateSourceWarning": "Ce widget contient des URL source privées pour : {sources}. Remplacez les hôtes personnels ou les adresses IP par des espaces réservés avant de publier.", + "reviewSourcesTitle": "Examiner les URL de la source privée", + "privateSourceConfirmation": "J'ai passé en revue ces URL de source et elles n'exposent pas les détails de l'infrastructure privée", + "action": "Publier maintenant", + "publicationNote": "La publication est immédiate. Vous pouvez gérer la soumission par la suite sur l'atelier.", + "definitionChanged": "Le widget a été modifié lors de la préparation de la publication. Vérifiez à nouveau ses URL sources privées, puis réessayez.", + "error": "La publication a échoué" } }, "integration": { + "completion": { + "modalTitle": "Service prêt", + "title": "{name} est connecté", + "description": "La connexion a réussi son test. Choisissez ce qu'il faut afficher sur ce tableau ensuite.", + "connectionReady": "La connexion au service est prête", + "appReady": "Le raccourci de l'application est prêt", + "compatibleWidgets": "{count, plural, =0 {Aucun widget compatible} one {# widget compatible} other {# widgets compatibles}} disponible", + "chooseWidget": "Choisir un widget", + "recipes": { + "title": "Recommandé pour ce tableau", + "description": "Basé sur les services et widgets connectés déjà sur ce tableau.", + "newConnectionReason": "Maintenant disponible via {integration}", + "existingConnectionReason": "Fonctionne avec un service que vous avez déjà connecté", + "dismiss": "Rejeter les recommandations pour ce service sur ce tableau" + } + }, "page": { "list": { - "title": "Intégrations", + "ariaLabel": "Intégrations configurées", "search": "Rechercher des intégrations", + "scopedNote": "Ne montrant que les intégrations que vous êtes autorisé à gérer.", "noResults": { - "title": "Il n'y a pas encore d'intégrations" + "title": "Il n'y a pas encore d'intégrations", + "description": "Connectez un service pour utiliser ses données et actions dans les widgets d'Homarr.", + "action": "Créez votre première intégration", + "filteredTitle": "Aucune intégration ne correspond à votre recherche", + "filteredDescription": "Aucune intégration ne correspond à \"{search}\". Essayez un autre nom, type ou URL.", + "createOnlyTitle": "Vous pouvez uniquement ajouter des intégrations", + "createOnlyDescription": "Vos permissions vous permettent de créer des intégrations mais pas de gérer celles existantes. Demandez à un administrateur d'accéder à celles dont vous avez besoin." } }, "create": { "title": "Nouvelle intégration {name}", "notification": { "success": { - "title": "Créé avec succès", "message": "L'intégration a été créée avec succès" }, "error": { - "title": "Échec de la création", "message": "L'intégration n'a pas pu être créée" } }, @@ -782,11 +1339,9 @@ "title": "Modifier l'intégration {name}", "notification": { "success": { - "title": "Modifications appliquées avec succès", "message": "L'intégration a été enregistrée avec succès" }, "error": { - "title": "Impossible d'appliquer les modifications", "message": "L'intégration n'a pas pu être enregistrée" } }, @@ -803,23 +1358,15 @@ "message": "Êtes-vous sûr(e) de vouloir supprimer l'intégration {name} ?", "notification": { "success": { - "title": "Suppression réussie", "message": "L'intégration a été supprimée avec succès" }, "error": { - "title": "Échec de la suppression", "message": "Impossible de supprimer l'intégration" } } } }, "field": { - "name": { - "label": "Nom" - }, - "url": { - "label": "Url" - }, "attemptSearchEngineCreation": { "label": "Créer un moteur de recherche", "description": "L'intégration \"{kind}\" peut être utilisée avec les moteurs de recherche. Cochez ceci pour configurer automatiquement le moteur de recherche." @@ -831,6 +1378,10 @@ "label": "Créer une application", "description": "Créer une application avec le même nom et l'icône que l'intégration. Laissez le champ de saisie ci-dessous vide pour créer l'application avec l'URL d'intégration." }, + "linkApp": { + "label": "Lier une application existante", + "description": "Connectez cette intégration à une application que vous pouvez déjà utiliser." + }, "appHref": { "placeholder": "URL personnalisée de l'application" }, @@ -844,7 +1395,11 @@ "grid": { "widgetCount": "{count, plural, one {# widget} other {# widgets}}", "noWidgets": "Aucun widget", - "detected": "Détecté via Docker" + "detected": "Détecté via Docker", + "connected": "{count, plural, one {# connecté} other {# connecté}}", + "tiedWidgets": "Widgets attachés", + "more": "+{count} de plus", + "loadError": "Les intégrations n'ont pas pu être chargées. Réessayez avant de créer une nouvelle connexion." }, "category": { "dnsHole": "DNS", @@ -875,7 +1430,10 @@ "analytics": "Statistiques", "vpn": "VPN", "mediaLibrary": "Bibliothèque de médias", - "uptimeMonitoring": "Surveillance des disponibilités" + "uptimeMonitoring": "Surveillance des disponibilités", + "beszel": "Beszel", + "systemMonitoring": "Surveillance système", + "security": "Sécurité" }, "testConnection": { "action": { @@ -1160,6 +1718,22 @@ "slug": { "label": "Slug de la page de statut", "newLabel": "Nouveau slug de page de statut" + }, + "wazuhIndexerUrl": { + "label": "URL de l'indexeur", + "newLabel": "Nouvelle URL de l'indexeur" + }, + "wazuhIndexerUsername": { + "label": "Nom d'utilisateur de l'indexeur", + "newLabel": "Nouveau nom d'utilisateur de l'indexeur" + }, + "wazuhIndexerPassword": { + "label": "Mot de passe de l'indexeur", + "newLabel": "Nouveau mot de passe de l'indexeur" + }, + "wazuhDashboardUrl": { + "label": "URL du tableau de bord (facultatif)", + "newLabel": "Nouvelle URL du tableau de bord" } } }, @@ -1168,54 +1742,19 @@ "interact": "Interagir avec les intégrations", "full": "Accès intégral à l'intégration" }, - "audiobookshelf": { - "name": "Étagère de livres audio", - "description": "Serveur de livres audio et de podcasts auto-hébergés" - }, - "navidrome": { - "name": "Navidrome", - "description": "Serveur de streaming de musique auto-hébergé avec compatibilité avec l'API Subsonic" - }, - "uptimeKuma": { - "name": "Uptime Kuma", - "description": "", - "secret": { - "slug": { - "description": "" - }, - "apiKey": { - "description": "" - } - } - }, - "traefik": { - "name": "Traefik", - "description": "" - }, - "paperlessNgx": { - "name": "Paperless-ngx", - "description": "" - }, - "patchmon": { - "name": "PatchMon", - "description": "Gestion et surveillance des correctifs pour les hôtes Linux" - }, - "bazarr": { - "name": "Bazarr", - "description": "" - }, - "wud": { - "name": "Qu'est ce que Docker", - "description": "Surveiller lequel de vos conteneurs Docker a des mises à jour d'images disponibles" + "llamacpp": { + "name": "llama.cpp", + "description": "Surveiller un serveur local llama.cpp : santé, modèle et paramètres de génération" } }, "media": { "plural": "Médias", "search": "Rechercher un média", "field": { - "name": "Nom", + "preview": "Aperçu", "size": "Taille", - "creator": "Créateur" + "creator": "Créateur", + "actions": "Contrôles" }, "action": { "upload": { @@ -1243,10 +1782,12 @@ } }, "copy": { - "label": "Copier l'URL" + "label": "Copier l'URL", + "labelNamed": "Copier l'URL pour {name}" }, "open": { - "label": "Ouvrir le média" + "label": "Ouvrir le média", + "labelNamed": "Ouvrir {name}" } }, "noResults": { @@ -1261,7 +1802,6 @@ "add": "Ajouter", "apply": "Appliquer", "backToOverview": "Retourner à l'aperçu", - "skip": "Ignorer", "change": "Modifier", "create": "Créer", "createAnother": "Créer et recommencer", @@ -1284,19 +1824,31 @@ "tryAgain": "Réessayer", "loading": "Chargement", "show": "Afficher", - "hide": "Masquer" + "hide": "Masquer", + "undo": "Annuler", + "editNamed": "Modifier {name}", + "deleteNamed": "Supprimer {name}", + "clearSearch": "Effacer la recherche", + "copy": "Copie", + "copied": "Copié", + "refresh": "Rafraîchir" }, "pagination": { "pageOf": "Page {page} sur {totalPages}" }, "here": "ici", + "serviceUrlTemplate": { + "serverTitle": "Adresse du serveur habituelle", + "urlModeLabel": "Modèle d'adresse de service", + "hostPort": "Même hôte, ports différents", + "subdomain": "Un sous-domaine par service", + "path": "Un chemin par service" + }, "iconPicker": { "label": "URL de l'icône ", + "description": "Recherchez dans la bibliothèque, collez une URL d'image, ou téléchargez un fichier.", "header": "Rechercher les images {countIcons} par nom", "headerLoading": "Rechercher des images par nom", - "noResults": "Aucune icône ne correspond à \"{search}\".", - "error": "Impossible de charger les icônes.", - "description": "Recherchez dans la bibliothèque, collez une URL d'image, ou téléchargez un fichier.", "clear": "Effacer l'image", "uploadImage": "Charger une image", "results": "Résultats de la recherche d'images", @@ -1305,7 +1857,9 @@ "otherImages": "Autres images", "urlLoading": "Vérification de l'image…", "urlReady": "L'image est prête à être utilisée", - "urlError": "Cette image n'a pas pu être chargée. Vérifiez l'URL et réessayez." + "urlError": "Cette image n'a pas pu être chargée. Vérifiez l'URL et réessayez.", + "noResults": "Aucune icône ne correspond à \"{search}\".", + "error": "Impossible de charger les icônes." }, "colorScheme": { "options": { @@ -1317,7 +1871,6 @@ "information": { "min": "Min", "max": "Max", - "days": "Jours", "hours": "Heures", "minutes": "Minutes" }, @@ -1354,16 +1907,16 @@ }, "userAvatar": { "menu": { - "switchToDarkMode": "Activer le mode sombre", - "switchToLightMode": "Activer le mode clair", + "open": "Ouvrir le menu du compte", "management": "Administration", - "docker": "Docker", "preferences": "Vos préférences", "logout": "Se déconnecter", "login": "Connexion", "homeBoard": "Votre tableau de bord", - "loggedOut": "Déconnecté", - "updateAvailable": "{countUpdates} Mises à jour disponibles : {tag}" + "updateAvailable": "{countUpdates} Mises à jour disponibles : {tag}", + "assistant": "Assistant", + "assistantThinking": "Penser", + "modifier": "Mod" } }, "dangerZone": "Zone de danger", @@ -1411,13 +1964,66 @@ "kilometersPerHour": "km/h", "milesPerHour": "mph" } + }, + "widgetQuery": { + "loading": "Chargement des données du widget" + }, + "total": "Total", + "filesystemUsage": "{count, plural, one {Affiche l'utilisation du # système de fichiers} other {Affiche l'utilisation de # systèmes de fichiers}}", + "field": { + "name": "Nom de la tâche" + }, + "label": { + "new": "Nouveau" + }, + "entity": { + "apps": "Apps", + "boards": "Tableaux de bord", + "certificates": "Certificats", + "customWidgets": "Widgets personnalisés", + "groups": "Groupes", + "integrations": "Intégrations", + "invites": "Invitations", + "logs": "Journaux", + "media": "Média", + "searchEngines": "Moteurs de recherche", + "tasks": "Tâches", + "users": "Utilisateurs" } }, "section": { - "dynamic": { + "option": { + "showLabel": { + "label": "Afficher le libellé", + "description": "Afficher le libellé du conteneur au-dessus de son contenu." + }, + "collapsible": { + "label": "Permettre de réduire", + "description": "Laissez les spectateurs s'étendre et réduire ce conteneur." + }, + "showOpenAll": { + "label": "Afficher l'action ouverte", + "description": "Afficher une action qui ouvre toutes les applications de ce conteneur dans de nouveaux onglets." + }, + "scrollable": { + "label": "Défilement", + "description": "Gardez ce conteneur à sa taille définie et faites défiler son contenu au lieu de grandir pour les ajuster." + } + }, + "action": { + "openAllInNewTabsFor": "Ouvrir toutes les applications dans {name} dans les onglets" + }, + "openAllInNewTabs": { + "title": "Tout ouvrir dans des onglets", + "text": "Certains navigateurs peuvent bloquer l'ouverture en masse d'onglets pour des raisons de sécurité. Homarr n'a pas pu ouvrir toutes les fenêtres, car votre navigateur a bloqué cette action. Veuillez autoriser \"Ouvrir les fenêtres pop-ups\" et réessayer." + }, + "container": { + "untitled": "Conteneur sans titre", "action": { - "create": "Nouvelle section dynamique", - "remove": "Supprimer la section dynamique" + "create": "Nouveau conteneur", + "remove": "Supprimer le conteneur", + "expand": "Agrandir", + "collapse": "Réduire" }, "option": { "title": { @@ -1431,55 +2037,12 @@ } }, "remove": { - "title": "Supprimer la section dynamique", - "message": "Êtes-vous sûr de vouloir supprimer cette section dynamique ? Les éléments seront déplacés au même emplacement dans la section parente." - } - }, - "category": { - "field": { - "name": { - "label": "Nom" - } - }, - "action": { - "create": "Nouvelle catégorie", - "edit": "Renommer la catégorie", - "remove": "Supprimer la catégorie", - "moveUp": "Monter", - "moveDown": "Descendre", - "createAbove": "Nouvelle catégorie au-dessus", - "createBelow": "Nouvelle catégorie en dessous", - "openAllInNewTabs": "Tout ouvrir dans des onglets" - }, - "create": { - "title": "Nouvelle catégorie", - "submit": "Ajouter une catégorie" - }, - "remove": { - "title": "Supprimer la catégorie", - "message": "Êtes-vous sûr de vouloir supprimer la catégorie {name}?" - }, - "edit": { - "title": "Renommer la catégorie", - "submit": "Renommer la catégorie" - }, - "menu": { - "label": { - "create": "Nouvelle catégorie", - "changePosition": "Modifier la position", - "settings": "Réglages" - } - }, - "openAllInNewTabs": { - "title": "Tout ouvrir dans des onglets", - "text": "Certains navigateurs peuvent bloquer l'ouverture en masse d'onglets pour des raisons de sécurité. Homarr n'a pas pu ouvrir toutes les fenêtres, car votre navigateur a bloqué cette action. Veuillez autoriser \"Ouvrir les fenêtres pop-ups\" et réessayer." + "message": "Supprimer ce conteneur ? Son contenu se déplacera dans la zone environnante." } } }, "item": { "action": { - "create": "Nouvel élément", - "import": "Importer un élément", "edit": "Éditer l'élément", "moveResize": "Déplacer / redimensionner l'élément", "duplicate": "Dupliquer l'élément", @@ -1488,7 +2051,7 @@ "menu": { "label": { "settings": "Paramètres", - "refresh": "Actualiser", + "settingsFor": "Paramètres pour {name}", "options": "Options", "actions": "Actions" }, @@ -1497,21 +2060,96 @@ "error": "Erreur", "loading": "Chargement", "idle": "Inactif" + }, + "notification": { + "saveError": { + "title": "Impossible d'enregistrer le widget", + "message": "Les modifications du widget ont été annulées" + } } }, "create": { "title": "Choisissez un élément à ajouter", "search": "Filtrer les éléments", - "addToBoard": "Ajouter au Tableau" + "addToBoard": "Ajouter au Tableau", + "addAtPosition": "Ajouter un élément ici", + "destination": { + "label": "Ajouter à", + "description": "Choisissez où le widget doit apparaître. Vous pouvez toujours le déplacer plus tard.", + "mainCanvas": "Toile principale", + "leftRail": "Rail gauche", + "rightRail": "Rail droit" + }, + "connectionStatus": { + "ready": "Prêt", + "needsSetup": "Configuration nécessaire", + "noConnectionRequired": "Aucune connexion requise" + }, + "customWidget": "Widget personnalisé", + "standalone": "Autonomie", + "missingIntegration": { + "title": "Connectez d'abord un service", + "noPermission": "Ce widget a besoin d'une connexion de service compatible. Demandez à un administrateur d'en connecter un, puis réessayez." + }, + "notification": { + "success": { + "title": "Widget ajouté", + "message": "{name} a été ajouté à ce tableau.", + "relocatedMessage": "{name} a été ajouté à {destination} car la destination sélectionnée était indisponible." + }, + "error": { + "title": "Impossible d'ajouter l'élément", + "message": "L'élément n'a pas pu être ajouté à ce tableau" + } + } + }, + "selection": { + "summary": "{count, plural, one {# élément sélectionné} other {# éléments sélectionnés}}", + "selected": "{count, plural, one {# sélectionné} other {# sélectionné}}", + "copy": "Copie", + "copied": "{count, plural, one {# élément copié dans le presse-papiers} other {# éléments copiés dans le presse-papiers}}", + "copyError": "Les éléments sélectionnés n'ont pas pu être copiés. Votre navigateur peut ne pas autoriser l'accès au presse-papiers.", + "paste": "Coller", + "pasteShortcut": "Coller les éléments copiés ici (Ctrl / + V)", + "pasted": "{count, plural, one {# objet collé} other {# éléments collés}}", + "pasteError": "Le presse-papiers n'a pas pu être lu. Votre navigateur peut ne pas autoriser l'accès au presse-papiers.", + "pasteInvalid": "Le presse-papiers ne contient pas d'articles valides du PCB Homarr.", + "pasteUnavailable": "Les éléments copiés ne correspondent pas à ce tableau.", + "removed": "{count, plural, one {# objet supprimé} other {# objets retirés}}", + "move": "Déplacer", + "moveTo": "Déplacer les éléments sélectionnés", + "delete": "Supprimer", + "clear": "Effacer la sélection", + "clearShortcut": "Effacer la sélection (paysage)", + "saveErrorTitle": "Impossible de mettre à jour les éléments", + "saveErrorMessage": "Les modifications n'ont pas pu être enregistrées. Le tableau a été actualisé.", + "moveUnavailableTitle": "Impossible de déplacer les éléments sélectionnés", + "moveUnavailableMessage": "La destination n'a pas assez de place pour toute la sélection." }, "moveResize": { "title": "Déplacer / redimensionner l'élément", + "entryLabel": "{name}, colonne {column}, ligne {row}", + "target": { + "numbered": "{name}, destination {index}", + "located": "{name}, {location}, destination {index}" + }, + "keyboard": { + "instructions": "Appuyez sur Entrée ou sur Espace pour démarrer l'édition du clavier. Utilisez les touches fléchées pour vous déplacer, Majuscule plus les touches fléchées pour redimensionner, et Échap pour arrêter.", + "started": "L'édition du clavier a commencé. Utilisez les touches fléchées pour se déplacer, Majuscule plus les touches fléchées pour redimensionner et Échap pour arrêter.", + "stopped": "L'édition du clavier a été arrêtée.", + "boundary": "Ce changement ne s'intègre pas dans cette section." + }, "field": { + "section": { + "label": "Section ou rail" + }, "width": { - "label": "Largeur" + "label": "Largeur", + "shortLabel": "SM" }, "height": { - "label": "Hauteur" + "label": "Hauteur", + "shortLabel": "H" }, "xOffset": { "label": "Décalage en X" @@ -1525,18 +2163,36 @@ "title": "Éditer l'élément", "tab": { "widget": "Éditer le widget", - "app": "Modifier l'application" + "app": "Modifier l'application", + "integration": "Modifier l'intégration" }, "app": { "propagationNotice": "Les modifications apportées à cette application seront appliquées partout où elle est utilisée sur tous les tableaux de bord." }, + "integration": { + "action": "Modifier la connexion", + "description": "Tester ou réparer une connexion sélectionnée sans quitter ce widget.", + "editLabel": "Modifier l'intégration {name}", + "fullAccessRequired": "Accès complet requis", + "propagationNotice": "Les modifications apportées à cette intégration s'appliquent partout où elle est utilisée. La connexion est testée avant qu'elle ne soit enregistrée.", + "loading": "Chargement de l'intégration", + "loadError": "Cette intégration n'a pas pu être chargée. Réessayez avant de modifier ses paramètres de connexion." + }, + "preview": { + "integrationRequired": "Choisissez une connexion pour prévisualiser ce widget.", + "size": "Taille du fichier" + }, + "settings": { + "label": "Paramètres du widget" + }, "advancedOptions": { "label": "Options avancées", "title": "Options avancées de l'élément" }, "field": { "integrations": { - "label": "Intégrations" + "label": "Intégrations", + "removeLabel": "Supprimer l'intégration {name}" }, "title": { "label": "Titre" @@ -1550,17 +2206,18 @@ } }, "remove": { - "title": "Supprimer l'élément", "message": "Êtes-vous sûr de vouloir supprimer cet élément ?" + }, + "advancedFocus": { + "open": "Ouvrir la vue avancée", + "close": "Fermer la vue avancée", + "label": "Vue avancée {widget}" } }, "widget": { "integrationSelect": { "configureIntegrationFirst": "Connectez d'abord une intégration", - "loading": "Chargement...", - "placeholder": "Choisir une option", - "noResults": "Aucun résultat trouvé", - "loadError": "Impossible de charger les options" + "placeholder": "Choisir une option" }, "app": { "name": "App", @@ -1569,9 +2226,6 @@ "appId": { "label": "Choisir une application" }, - "openInNewTab": { - "label": "Ouvrir dans un nouvel onglet" - }, "showTitle": { "label": "Afficher le nom de l'application" }, @@ -1579,11 +2233,8 @@ "label": "Activer la vérification du statut" }, "layout": { - "label": "Mise en page", "option": { - "row": "Horizontale", "row-reverse": "Horizontal (inversé)", - "column": "Vertical", "column-reverse": "Vertical (inversé)" } }, @@ -1608,23 +2259,60 @@ "name": "Signets", "description": "Affiche les liens de plusieurs applications", "option": { - "title": { - "label": "Titre" + "showTitle": { + "label": "Afficher le titre du widget" + }, + "titleSize": { + "label": "Taille du titre du widget (px)" }, "layout": { "label": "Mise en page", "option": { - "row": { - "label": "Horizontale" - }, - "column": { - "label": "Verticale" - }, - "grid": { - "label": "Grille" + "adaptive": { + "label": "Adaptatif" }, "gridHorizontal": { "label": "Grille horizontale" + }, + "icons": { + "label": "Icônes" + } + } + }, + "variant": { + "label": "Apparence", + "option": { + "soft": { + "label": "Douce" + }, + "filled": { + "label": "Rempli" + }, + "outline": { + "label": "Contour" + }, + "plain": { + "label": "Plaine" + } + } + }, + "spacing": { + "label": "Espacement de la carte", + "option": { + "xs": { + "label": "Très petit" + }, + "sm": { + "label": "Petit" + }, + "md": { + "label": "Moyen" + }, + "lg": { + "label": "Grand" + }, + "xl": { + "label": "Très grand" } } }, @@ -1637,52 +2325,91 @@ "hideHostname": { "label": "Masquer les noms d'hôtes" }, - "openNewTab": { - "label": "Ouvrir dans un nouvel onglet" - }, "withBorder": { "label": "Afficher la bordure" }, + "grow": { + "label": "Développer les cartes pour remplir la ligne" + }, + "customUrls": { + "label": "Liens personnalisés" + }, "items": { "label": "Signets", - "add": "Ajouter un signet" + "remove": "Supprimer le favori", + "apps": { + "label": "Ajouter des signets", + "description": "Collez des URL ou trouvez des applications existantes. Faites glisser les signets ci-dessous pour les réorganiser.", + "placeholder": "Coller les URL ou rechercher des applications", + "addUrl": "Ajouter cette URL", + "hint": "Appuyez sur Entrée pour ajouter une URL. Collez des URL séparées par des virgules ou une URL par ligne pour en ajouter plusieurs." + } } - } + }, + "empty": "Ajouter une URL ou une application dans les paramètres du widget" }, "archiveTeamWarrior": { "name": "ArchiveTeam Warrior", - "description": "", + "description": "Suivre l'état d'ArchiveTeam Warrior, ses projets et les tâches d'archivage en cours.", "option": { "showBroadcastMessage": { "label": "Afficher les messages de diffusion" } + }, + "noProjectSelected": "Aucun projet sélectionné", + "runnerStatus": "Exécuteur: {status}", + "projectId": "Projet: {id}", + "sessionReceived": "Session reçue : {value}", + "sessionSent": "Session envoyée : {value}", + "sessionId": "Session : {id}", + "startedAt": "A démarré {date}", + "emptyItems": "Aucune tâche active ou récente dans cet instantané", + "metric": { + "running": "Exécution", + "completed": "Fait", + "failed": "Échec", + "canceled": "Annulé", + "download": "Télécharger", + "upload": "Charger" + }, + "status": { + "running": "Exécution", + "completed": "Complété", + "failed": "Échec", + "canceled": "Annulé", + "stopped": "Arrêté", + "idle": "Inactif", + "unknown": "Inconnu" + } + }, + "wud": { + "name": "Qu'est ce que Docker", + "description": "Afficher combien de conteneurs surveillés ont des mises à jour disponibles.", + "title": "Qu'est ce que Docker", + "monitored": "Surveillé", + "updatesAvailable": "{count, plural, one {# mise à jour disponible} other {# mises à jour disponibles}}", + "updateAvailable": "Mise à jour disponible", + "openReleaseNotes": "Ouvrir les notes de version", + "option": { + "showRing": { + "label": "Afficher l'anneau de mise à jour" + }, + "showUpdateList": { + "label": "Afficher la liste de mise à jour du conteneur", + "description": "Liste chaque conteneur surveillé qui a une mise à jour d'image disponible" + } } }, "dnsHoleSummary": { "name": "Résumé du puit DNS", "description": "Affiche le résumé de votre puit DNS", "option": { - "layout": { - "label": "Mise en page", - "option": { - "row": { - "label": "Horizontale" - }, - "column": { - "label": "Verticale" - }, - "grid": { - "label": "Grille" - } - } - }, "usePiHoleColors": { "label": "Utiliser les couleurs de Pi-Hole" } }, "error": { - "internalServerError": "Impossible de récupérer le résumé du puit DNS", - "integrationsDisconnected": "Aucune donnée disponible, toutes les intégrations sont déconnectées" + "internalServerError": "Impossible de récupérer le résumé du puit DNS" }, "data": { "adsBlockedToday": "Bloqué aujourd'hui", @@ -1690,32 +2417,24 @@ "dnsQueriesToday": "Requêtes aujourd'hui", "domainsBeingBlocked": "Domaines sur la liste noire" }, - "domainsTooltip": "En raison de multiples intégrations, Homarr ne peut pas calculer le nombre exact de domaines bloqués" + "domainsTooltip": "En raison de multiples intégrations, Homarr ne peut pas calculer le nombre exact de domaines bloqués", + "status": { + "enabled": "Activé", + "disabled": "Désactivé", + "unknown": "Inconnu" + } }, "dnsHoleControls": { "name": "Contrôles du puit DNS", "description": "Contrôlez PiHole ou AdGuard depuis votre tableau de bord", "option": { - "layout": { - "label": "Mise en page", - "option": { - "row": { - "label": "Horizontale" - }, - "column": { - "label": "Verticale" - }, - "grid": { - "label": "Grille" - } - } - }, "showToggleAllButtons": { "label": "Afficher le bouton \"Afficher tout\"" } }, "error": { - "internalServerError": "Impossible de contrôler le puit DNS" + "internalServerError": "Impossible de contrôler le puit DNS", + "bulkActionsFailed": "{count, plural, one {# action a échoué} other {# actions ont échoué}}" }, "controls": { "enableAll": "Tout activer", @@ -1726,8 +2445,6 @@ "disabled": "Désactivé", "processing": "Traitement en cours", "disconnected": "Déconnecté", - "hours": "Heures", - "minutes": "Minutes", "unlimited": "Laisser vide pour illimité" } }, @@ -1739,16 +2456,10 @@ "label": "Affichage du titre/de la ville personnalisé", "description": "Afficher un titre personnalisé ou le nom de la ville/pays en haut de l'horloge." }, - "customTitle": { - "label": "Titre" - }, "is24HourFormat": { "label": "Format 24 heures", "description": "Utiliser le format 24 heures au lieu du format 12 heures" }, - "showSeconds": { - "label": "Afficher les secondes" - }, "useCustomTimezone": { "label": "Utiliser un fuseau horaire fixe" }, @@ -1767,29 +2478,295 @@ "label": "Format de l'heure personnalisé", "description": "Utiliser ISO 8601 pour formater l'heure (cela remplacera d'autres options)" }, - "customDateFormat": { - "label": "Format de date personnalisé", - "description": "Utiliser ISO 8601 pour formater la date (cela remplacera les autres options)" - }, "showWeather": { "label": "Afficher la météo", "description": "Afficher une petite icône météo animée et la température dans le coin de la carte" }, - "weatherLocation": { - "label": "Lieu de la météo" - }, "isWeatherFormatFahrenheit": { "label": "Utiliser les degrés Fahrenheit" + }, + "animateWeatherIcon": { + "label": "Animer l'icône météo", + "description": "Animer l'icône météo. Désactivé par défaut et toujours désactivé lorsque des mouvements réduits sont demandés." + }, + "colorWeatherByDayNight": { + "label": "Couleur de la météo par jour/nuit", + "description": "Teignez l'icône et la température de la météo avec une couleur de jour ou une couleur de nuit, en fonction de la date ou de la nuit à l'endroit choisi." + }, + "dayWeatherColor": { + "label": "Couleur du jour" + }, + "nightWeatherColor": { + "label": "Couleur de nuit" + }, + "worldClockCities": { + "label": "Villes mondiales de l'horloge", + "description": "Ajoutez et commandez jusqu'à six villes pour une vue avancée." } + }, + "timezoneList": { + "timezone": "Fuseau Horaire", + "cityLabel": "Étiquette de ville", + "searchPlaceholder": "Rechercher des fuseaux horaires", + "noResults": "Aucun fuseau horaire trouvé", + "unsupportedOption": "Non pris en charge : {timeZone}", + "add": "Ajouter une ville", + "remove": "Retirer {city}", + "reorder": "Réordonner {city}", + "limit": "{count} des villes {maximum} configurées" + }, + "worldClock": { + "primary": "Horloge principale", + "local": "Heure locale", + "today": "Aujourd'hui", + "tomorrow": "Demain", + "yesterday": "Hier", + "noSecondaryCities": "Ajoutez des villes dans les options de widget pour les comparer ici.", + "unsupportedPrimaryTitle": "Le fuseau horaire principal n'est pas disponible", + "unsupportedPrimary": "{timeZone} n'est pas pris en charge dans ce navigateur. Afficher l'UTC comme un repli clairement marqué.", + "unsupportedTimeZone": "Fuseau horaire non pris en charge : {timeZone}", + "accessibleTime": "{city} : {time}, {date}, {timeZone}", + "advancedLabel": "Horloge du monde avancée", + "cities": "Horloges du monde", + "cityCount": "{count} timezones", + "timeBarLabel": "Position 24 heures sur 24 pour {city}", + "dayProgress": "{percent}% écoulé · {hours}h {minutes}m restantes", + "phaseLegend": "Légende de l'heure", + "tick": { + "midnight": "00", + "morning": "06", + "noon": "12", + "evening": "18", + "end": "24" + }, + "phaseRange": { + "night": "00–05 · 21–24", + "dawn": "05–08", + "day": "08–18", + "dusk": "18–21" + }, + "phase": { + "night": "Nuit", + "dawn": "Aube", + "day": "Jour", + "dusk": "Crépuscule" + } + } + }, + "airQuality": { + "name": "Qualité de l'air & UV", + "description": "Affiche la qualité de l'air, l'indice ultraviolet, les polluants et le pollen pour un emplacement.", + "option": { + "location": { + "label": "Emplacement de la qualité de l'air" + }, + "aqiStandard": { + "label": "Norme AQI", + "options": { + "auto": "Automatique pour la locale", + "european": "AQI Européen", + "us": "AQI US" + } + }, + "showUv": { + "label": "Afficher l'index UV" + }, + "showPollutants": { + "label": "Afficher les concentrations de polluants" + }, + "showPollen": { + "label": "Afficher les concentrations de pollen" + } + }, + "category": { + "good": "Bon", + "fair": "Équitable", + "moderate": "Modérée", + "unhealthySensitive": "Malsain pour les groupes sensibles", + "unhealthy": "Dysfonctionnement", + "poor": "Mauvais", + "veryPoor": "Très pauvre", + "veryUnhealthy": "Très malsain", + "extremelyPoor": "Extrêmement pauvre", + "hazardous": "Dangereux", + "unknown": "Pas de lecture AQI" + }, + "uv": { + "label": "Indice UV", + "category": { + "low": "Bas", + "moderate": "Modérée", + "high": "Élevé", + "veryHigh": "Très haut", + "extreme": "Extrême", + "unknown": "Pas de lecture" + } + }, + "dominantPollutant": "Dominant pollutant", + "aqiLabel": "AQI", + "strongestPollen": "Pollen le plus haut", + "unit": { + "concentration": "{value} μg/m3", + "pollen": "{value} grains/m3" + }, + "pollutant": { + "pm2_5": "PM2,5", + "pm10": "PM10", + "ozone": "Ozone", + "nitrogenDioxide": "Dioxyde d'azote", + "sulphurDioxide": "Sulphur dioxide", + "carbonMonoxide": "monoxyde de carbone" + }, + "pollen": { + "alder": "Alder", + "birch": "Bouleau", + "grass": "Herbe", + "mugwort": "Mugwort", + "olive": "Olive", + "ragweed": "Ragoux" + }, + "compact": { + "sixHourTrend": "Tendance AQI pour les six prochaines heures" + }, + "advanced": { + "observedAt": "Mis à jour à {time}", + "next24Hours": "Prochaines 24 heures", + "pollutants": "Concentrations de polluants", + "pollen": "Concentrations de pollen", + "sevenDayForecast": "Prévisions maximales de 7 jours", + "aqiValue": "AQI {value}", + "uvValue": "UV {value}", + "uvShort": "UV {value}", + "noForecast": "Aucune donnée de prévision disponible" + } + }, + "countdown": { + "name": "Compte à Rebours", + "description": "Trace les événements à venir et les anniversaires récurrents.", + "option": { + "events": { + "label": "Évènements", + "description": "Ajouter et commander jusqu'à 20 comptes à rebours uniques ou annuels. Les dates sont entrées dans le fuseau horaire sélectionné." + }, + "showProgress": { + "label": "Afficher la progression" + }, + "showSeconds": { + "label": "Afficher les secondes", + "description": "Garder les secondes visibles pour chaque événement à venir." + } + }, + "dateTimeEventList": { + "newEvent": "Nouvel événement", + "add": "Ajouter un événement", + "remove": "Retirer {event}", + "reorder": "Réordonner {event}", + "eventLabel": "Étiquette de l'événement", + "timezone": "Fuseau Horaire", + "unsupportedOption": "Non pris en charge : {timeZone}", + "recurrence": "Répéter", + "recurrenceOption": { + "none": "Ne se répète pas", + "yearly": "Chaque année" + }, + "target": "Date et heure de l'événement", + "trackProgress": "Suivre la progression depuis une date de début", + "start": "Date et heure de début d'avancement", + "confirmDateTime": "Confirmer la date et l'heure", + "limit": "{count} des événements {maximum} configurés" + }, + "empty": { + "title": "Aucun compte à rebours pour le moment", + "description": "Ajouter un événement dans les options du widget pour commencer à compter." + }, + "completed": "Complété", + "yearly": "Annuel", + "progress": "Progression de l'événement", + "upcoming": "À venir", + "completedEvents": "Événements terminés", + "invalid": { + "title": "Certains événements ne peuvent pas être affichés", + "description": "{count, plural, one {Un événement a une date non valide ou un fuseau horaire non pris en charge} other {# Les événements ont une date non valide ou un fuseau horaire non pris en charge}}", + "value": "Unavailable" + }, + "alert": { + "notifications": "Notifications du navigateur", + "permissionDenied": "Les notifications sont bloquées dans ce navigateur.", + "reached": "Le compte à rebours a atteint sa cible." + } + }, + "timer": { + "name": "Timer / Pomodoro", + "description": "Exécute une simple minuterie ou une séquence de Pomodoro configurable.", + "option": { + "mode": { + "label": "Mode", + "options": { + "timer": "Minuterie", + "pomodoro": "Pomodoro" + } + }, + "timerMinutes": { + "label": "Minuterie minutes" + }, + "focusMinutes": { + "label": "Minutes de mise au point" + }, + "shortBreakMinutes": { + "label": "Minutes de pause courte" + }, + "longBreakMinutes": { + "label": "Minutes de pause longue" + }, + "sessionsBeforeLongBreak": { + "label": "Concentrez les sessions avant une pause longue" + }, + "autoStartBreaks": { + "label": "Démarrer automatiquement les pauses" + }, + "autoStartFocus": { + "label": "Démarrer automatiquement les sessions de focus" + } + }, + "phase": { + "timer": "Minuterie", + "focus": "Concentration", + "shortBreak": "Petite pause", + "longBreak": "Pause longue" + }, + "action": { + "start": "Début", + "pause": "Mettre en pause", + "reset": "Reset" + }, + "attention": { + "timerComplete": "Timer complete", + "phaseReady": "{phase} prêt" + }, + "progress": "Progression de la minuterie : {progress}%", + "compact": { + "completedFocus": "{count, plural, =0 {Aucune session de focus terminée} one {# session de focus terminée} other {# sessions de focus terminées}}" + }, + "alert": { + "title": "Timer complete", + "completed": "{phase} terminé." + }, + "advanced": { + "sequence": "Pomodoro sequence", + "focusSession": "Focus sur {session}", + "settings": "Paramètres permanents", + "settingsHint": "Utilisez le menu contextuel du widget pour modifier ces paramètres du forum.", + "localAlerts": "Alertes locales", + "notifications": "Notifications du navigateur", + "sound": "Sons de la minuterie", + "localAlertsHint": "Les sons de minuterie sont activés par défaut. Les sons et les notifications ne s'appliquent qu'à ce widget dans ce navigateur.", + "notificationsDenied": "Les notifications sont bloquées dans ce navigateur." } }, "minecraftServerStatus": { "name": "Statut du serveur Minecraft", "description": "Affiche le statut d'un serveur Minecraft", "option": { - "title": { - "label": "Titre" - }, "domain": { "label": "Adresse du serveur" }, @@ -1809,11 +2786,21 @@ "noStation": "Aucune station sélectionnée", "option": { "baseUrl": { - "label": "URL Search.ch" + "label": "URL Search.ch", + "description": "Les URL personnalisées doivent être résolues à une adresse IP publique. Les hôtes privés et locaux sont rejetés." }, "station": { - "label": "Station" + "label": "Station", + "placeholder": "Rechercher une station" } + }, + "error": { + "customSourceUnavailable": "La source du calendrier n'est pas disponible. Vérifiez que son URL correspond à une adresse IP publique.", + "stationSearch": "Impossible de rechercher des stations. Vérifiez l'URL personnalisée et l'accès au forum." + }, + "warning": { + "stale": "L'horaire n'a pas pu être actualisé. Affichage des départs mis à jour pour la dernière fois à {time}.", + "staleCompact": "Données de l'histoire" } }, "notebook": { @@ -1891,7 +2878,9 @@ "discard": "Ignorer les modifications", "keepEditing": "Continuer les modifications" } - } + }, + "saveFailed": "Impossible d'enregistrer la note", + "documentStats": "{words, plural, one {# mot} other {# mots}} · {characters, plural, one {# caractère} other {# caractères}}" }, "anchorNote": { "name": "Note Anchor", @@ -1900,9 +2889,6 @@ "noteId": { "label": "Note" }, - "showTitle": { - "label": "Afficher le titre" - }, "showUpdatedAt": { "label": "Afficher la dernière mise à jour" } @@ -1912,14 +2898,20 @@ "notFound": "Note introuvable", "noNotes": "Aucune note trouvée", "integrationRequired": "Sélectionnez d'abord une intégration Anchor", - "updatedAt": "Mis à jour {date}", "untitled": "Sans titre", - "edit": "Modifier", - "save": "Sauvegarder", - "cancel": "Annuler", "readOnlyViewer": "Vous avez un accès en lecture seule à cette note. La modification est désactivée.", "saveForbidden": "Vous n'êtes pas autorisé à modifier cette note.", - "saveFailed": "Impossible d'enregistrer cette note. Veuillez réessayer." + "saveFailed": "Impossible d'enregistrer cette note. Veuillez réessayer.", + "createdAt": "Créé le {date}", + "permission": { + "owner": "Propriétaire", + "editor": "Editeur", + "viewer": "Visionneuse" + }, + "status": { + "pinned": "Épinglé", + "archived": "Archivé" + } }, "iframe": { "name": "iFrame", @@ -1978,6 +2970,25 @@ "clickable": { "label": "Cliquable" } + }, + "state": { + "on": "Activé", + "off": "Désactivé", + "unavailable": "Unavailable", + "unknown": "Inconnu" + }, + "advanced": { + "entityId": "ID de l'entité : {id}", + "lastChanged": "Changé {date}", + "attribute": { + "unit": "Unité", + "deviceClass": "Classe de l'appareil", + "icon": "Icône" + } + }, + "error": { + "loadFailed": "Impossible de charger l'entité", + "toggleFailed": "Impossible de mettre à jour l'entité" } }, "smartHome-executeAutomation": { @@ -1993,11 +3004,31 @@ }, "spotlightAction": { "run": "Exécuter {name}" + }, + "advanced": { + "lastExecuted": "Dernière exécution à {time}", + "automationId": "ID de l'automatisation : {id}", + "ready": "Prêt à fonctionner", + "noPermission": "Pas de permission d'exécuter cette automatisation" + }, + "status": { + "running": "Automatisation en cours d'exécution", + "success": "Automatisation terminée" + }, + "error": { + "executeFailed": "Impossible d'exécuter l'automatisation" } }, "stockPrice": { "name": "Cours des actions", "description": "Affiche le cours des actions d'une entreprise", + "advanced": { + "currentPrice": "Prix actuel", + "previousClose": "Fermeture précédente", + "changePercentage": "Changer (%)", + "minimum": "Minimum", + "maximum": "Maximum" + }, "option": { "stock": { "label": "Symbole de l'action" @@ -2068,6 +3099,10 @@ "label": "1 mois" } } + }, + "showDetails": { + "label": "Afficher les détails", + "description": "Afficher le nom, le changement et la plage de temps dans la vue compacte. Désactivez pour juste le symbole et le prix." } } }, @@ -2095,6 +3130,13 @@ "showUnmonitored": { "label": "Afficher les messages non surveillés" } + }, + "advanced": { + "previousMonth": "Afficher le mois précédent", + "nextMonth": "Afficher le mois prochain", + "eventCount": "{count, plural, one {# événement} other {# événements}}", + "loading": "Chargement des événements du calendrier...", + "noEvents": "Aucun événement ce mois-ci" } }, "weather": { @@ -2107,16 +3149,18 @@ "disableTemperatureDecimals": { "label": "Désactiver les décimales pour la température" }, + "animateIcons": { + "label": "Animer les icônes météo" + }, + "showHumidity": { + "label": "Afficher l'humidité" + }, "showCurrentWindSpeed": { - "label": "Afficher la vitesse actuelle du vent", - "description": "Uniquement sur la météo actuelle" + "label": "Afficher la vitesse actuelle du vent" }, "useImperialSpeed": { "label": "Utiliser mph pour la vitesse du vent" }, - "location": { - "label": "Lieu de la météo" - }, "showCity": { "label": "Afficher la ville" }, @@ -2126,13 +3170,10 @@ "forecastDayCount": { "label": "Nombre de jours de prévisions", "description": "Lorsque le widget n'est pas assez large, moins de jours sont affichés" - }, - "dateFormat": { - "label": "Format de la date", - "description": "À quoi devrait ressembler la date" } }, "currentWindSpeed": "{currentWindSpeed} {unit}", + "disabled": "Les données météo ne sont pas disponibles car les connexions sortantes sont désactivées", "dailyForecast": { "sunrise": "Lever du Soleil", "sunset": "Coucher du soleil", @@ -2155,6 +3196,47 @@ "thunderstorm": "Orage", "thunderstormWithHail": "Orage avec grêle", "unknown": "Inconnu" + }, + "details": "Afficher les détails météo", + "detailsFor": "Afficher les détails de la météo pour {date}", + "advanced": { + "forecast": "Prévisions de 7 jours", + "hourlyForecast": "Prochaines 24 heures", + "day": "Jour", + "time": "Date et heure", + "conditions": "Condition", + "temperature": "Température", + "feelsLike": "Se sent comme {temperature}", + "feelsLikeLabel": "Se sent comme", + "feelsLikeRange": "Se sent comme : {maximum} / {minimum}", + "highLow": "Haut {maximum} · faible {minimum}", + "observedAt": "Mis à jour à {time}", + "humidity": "Humidité", + "averageHumidity": "Humidité moyenne: {humidity}%", + "currentHumidity": "Humidité actuelle", + "wind": "Vent / rafales ({unit})", + "currentWind": "Vent actuel / rafales", + "windValue": "{speed} / {gusts} {unit}", + "windDetail": "Vent max / Goutes : {speed} / {gusts} {unit}", + "nextHourPrecipitation": "Précipitation de l'heure prochaine", + "precipitationChance": "Probabilité des précipitations", + "precipitationValue": "{probability}% · {amount} mm", + "precipitationDetail": "Précipitation : {probability}% · {amount} mm", + "todayUv": "Indice UV max du jour", + "uvIndex": "Indice max des UV : {value}", + "daylight": "Lumière du jour : {duration}", + "hourlyTooltip": "Se sent comme {feelsLike}{temperatureUnit} · {amount} mm · {humidity}% humidité · {speed} {speedUnit} vent", + "hourlyTooltipWithoutHumidity": "Se sent comme {feelsLike}{temperatureUnit} · {amount} mm · {speed} {speedUnit} vent", + "detailLabel": { + "feelsLike": "Se sent comme", + "precipitation": "Précipitations", + "humidity": "Humidité moyenne", + "wind": "Vent / rafales max", + "uv": "Indice UV max", + "daylight": "Daylight" + }, + "sun": "Lever / coucher du soleil", + "noForecast": "Aucune donnée de prévision disponible" } }, "indexerManager": { @@ -2167,8 +3249,15 @@ }, "title": "Gestionnaire d’indexeur", "testAll": "Tout tester", + "status": { + "healthy": "Sain", + "unhealthy": "Dysfonctionnement", + "disabled": "Désactivé", + "unknown": "Santé indisponible" + }, "error": { - "internalServerError": "Impossible de récupérer le statut des indexeurs" + "internalServerError": "Impossible de récupérer le statut des indexeurs", + "testAll": "Le test d'indexation a échoué. Veuillez réessayer." } }, "healthMonitoring": { @@ -2197,11 +3286,6 @@ "fileSystem": { "label": "Afficher les infos sur le système de fichiers" }, - "visibleStorageVolumes": { - "label": "Volumes de stockage visibles", - "description": "Uniquement disponible lorsque toutes les intégrations sélectionnées sont Synology. Laissez vide pour afficher tous les volumes de stockage détectés.", - "placeholder": "Sélectionnez les volumes de stockage" - }, "defaultTab": { "label": "Onglet par défaut" }, @@ -2224,7 +3308,16 @@ "minutes": "{count} minutes", "used": "Utilisé", "available": "Disponible", - "lastSeen": "Dernière mise à jour de statut : {lastSeen}" + "lastSeen": "Dernière mise à jour de statut : {lastSeen}", + "updatesAvailable": "{count, plural, one {# mise à jour disponible} other {# mises à jour disponibles}}", + "rebootRequired": "Redémarrage nécessaire", + "rebootNotRequired": "Pas de redémarrage nécessaire" + }, + "smartStatus": { + "attributesWithinThresholds": "SMART: attributs à l'intérieur des seuils", + "attributesFailed": "SMART: {attributes} a échoué", + "noCriticalWarning": "SMART: pas d'avertissement signalé par SSD", + "criticalWarning": "SMART: avertissement critique signalé par SSD" }, "gauge": { "cpuUsage": "Utilisation du processeur", @@ -2232,15 +3325,10 @@ "memoryUsage": "Utilisation de la mémoire", "gpuUsage": "Utilisation du GPU {name}" }, - "memory": {}, "error": { "internalServerError": "Impossible de récupérer l'état de santé" }, "cluster": { - "summary": { - "cpu": "CPU", - "memory": "RAM" - }, "resource": { "node": { "name": "Nœuds" @@ -2276,8 +3364,6 @@ "table": { "header": { "name": "Nom", - "cpu": "CPU", - "memory": "RAM", "node": "Noeud" } } @@ -2287,42 +3373,37 @@ "name": "Statistiques de Docker", "description": "Statistiques de vos conteneurs (Ce widget ne peut être ajouté qu'avec les privilèges d'administrateur)", "option": { - "columns": { - "label": "Colonnes à afficher" + "endpointIds": { + "label": "Environnements Docker", + "description": "Laisser vide pour afficher les conteneurs de tous les environnements Docker", + "placeholder": "Tous les environnements Docker" }, - "enableRowSorting": { - "label": "Activer le tri des éléments" + "containerFilter": { + "label": "Conteneurs à filtrer" + }, + "filterIsWhitelist": { + "label": "Filtrer en tant que liste blanche" }, "defaultSort": { - "label": "Colonne de tri par défaut", "option": { "name": "Nom", "state": "État", "cpuUsage": "Utilisation du CPU", "memoryUsage": "Utilisation mémoire" } - }, - "descendingDefaultSort": { - "label": "Inverser le tri" - }, - "columnOrder": { - "label": "Ordre des colonnes" - }, - "columnWidths": { - "label": "Largeurs des colonnes" } }, "error": { "internalServerError": "Impossible de récupérer les statistiques des conteneurs", + "endpointsUnavailable": "Les points de terminaison Docker sont indisponibles", "layoutSaveTitle": "Disposition du tableau non sauvegardée", - "layoutSaveMessage": "" + "layoutSaveMessage": "Impossible d'enregistrer la mise en page du tableau Docker. Essayez à nouveau de déplacer ou de redimensionner la colonne." }, "empty": { "noContainers": "Aucun conteneur trouvé" } }, "coolify": { - "name": "Coolify", "description": "Aperçu de votre instance Coolify avec les serveurs et les applications", "option": { "showServers": { @@ -2348,17 +3429,49 @@ "internalServerError": "Impossible de récupérer les données de Coolify" }, "server": { - "buildServer": "Version" + "buildServer": "Version", + "resourceCounts": "{applications, plural, one {# app} other {# apps}} / {services, plural, one {# service} other {# services}}", + "reachability": "Accessibilité", + "usability": "Usabilité" + }, + "source": { + "url": "Source: {url}", + "unavailable": "{source}: unavailable" }, "instances": { "title": "Instances" + }, + "action": { + "openResource": "Ouvrir {name}", + "openLogs": "Ouvrir les logs {name}", + "showIp": "Afficher l'adresse IP", + "hideIp": "Cacher l'adresse IP" + }, + "status": { + "running": "Exécution", + "stopped": "Arrêté", + "exited": "Quitté", + "starting": "Démarrage", + "restarting": "Redémarrage en cours", + "unknown": "Inconnu", + "online": "En ligne", + "offline": "Hors ligne", + "reachable": "Accessible", + "unreachable": "Injoignable", + "usable": "Utilisable", + "unusable": "Inutilisable" } }, "vpn": { "name": "VPN", "description": "Aperçu de vos connexions VPN", "serviceUnavailable": "VPN indisponible", - "option": {} + "status": { + "running": "Exécution", + "notRunning": "Ne pas exécuter", + "unavailable": "Unavailable", + "vpn": "VPN: {status}" + } }, "ups": { "name": "UPS", @@ -2385,14 +3498,19 @@ "runtime": "Runtime", "load": "Charger", "input": "Entrée", - "output": "Sortie" + "output": "Sortie", + "batteryVoltage": "Tension batterie", + "power": "Électricité", + "temperature": "Température", + "manufacturer": "Fabricant", + "model": "Modélisation", + "serial": "Série" }, "error": { "internalServerError": "Impossible de récupérer les données UPS" } }, "tracearr": { - "name": "Tracearr", "description": "Surveillance avancée du serveur multimédia avec des données détaillées de flux et de transcodage", "option": { "showStreams": { @@ -2480,10 +3598,7 @@ "label": "Evénement", "description": "Afficher le total des occurrences d'un événement spécifique", "placeholder": "Sélectionner un événement", - "loading": "Chargement des événements...", - "noEvents": "Aucun événement trouvé", - "none": "Aucun événement", - "configureWebsiteFirst": "Sélectionnez d'abord un site web pour charger les événements" + "none": "Aucun événement" }, "chartType": { "label": "Type de graphique", @@ -2514,26 +3629,21 @@ "eventNames": { "label": "Événements", "description": "Sélectionnez un ou plusieurs événements à afficher dans le graphique", - "placeholder": "Sélectionner les événements...", - "loading": "Chargement des événements...", - "noEvents": "Aucun événement trouvé", - "configureWebsiteFirst": "Sélectionnez d'abord un site web pour charger les événements" + "placeholder": "Sélectionner les événements..." }, "topCount": { "label": "Éléments à afficher", "description": "Nombre d'éléments principaux à afficher (max 500)" + }, + "events": { + "loading": "Chargement des événements...", + "noEvents": "Aucun événement trouvé", + "configureWebsiteFirst": "Sélectionnez d'abord un site web pour charger des événements" } }, "event": { - "occurrences": "événements", "label": "événements" }, - "topPages": { - "direct": "Directe" - }, - "topReferrers": { - "direct": "Directe" - }, "events": { "selectPrompt": "Sélectionnez les événements à afficher" }, @@ -2542,6 +3652,9 @@ "noWebsite": "Aucun site web configuré", "noData": "Aucune donnée disponible", "internalServerError": "Impossible de récupérer les données Umami" + }, + "top": { + "direct": "Directe" } }, "common": { @@ -2569,7 +3682,8 @@ }, "integration": { "noData": "Aucune intégration trouvée", - "description": "Cliquez sur pour créer une nouvelle intégration" + "description": "Cliquez sur pour créer une nouvelle intégration", + "manage": "Gérer les intégrations" }, "app": { "noData": "Aucune application trouvée", @@ -2580,7 +3694,61 @@ "noIntegration": "Aucune intégration sélectionnée", "noData": "Aucune donnée d’interaction disponible" }, - "option": {} + "integrationDisconnected": "Aucune donnée disponible, toutes les intégrations sont déconnectées", + "updatedAt": "Mis à jour {date}", + "title": { + "label": "Titre" + }, + "openInNewTab": { + "label": "Ouvrir dans un nouvel onglet" + }, + "showTitle": { + "label": "Afficher le titre" + }, + "weatherLocation": { + "label": "Lieu de la météo" + }, + "layout": { + "label": "Mise en page", + "option": { + "horizontal": "Horizontale", + "vertical": "Vertical", + "grid": "Grille" + } + }, + "select": { + "loading": "Chargement...", + "loadError": "Impossible de charger les options" + }, + "dateFormat": { + "label": "Format de la date", + "description": "À quoi devrait ressembler la date" + }, + "visibleStorageVolumes": { + "label": "Volumes de stockage visibles", + "description": "Uniquement disponible lorsque chaque intégration sélectionnée est OpenMediaVault ou Synology. Laisser vide pour afficher tous les volumes de stockage détectés.", + "placeholder": "Sélectionnez les volumes de stockage" + }, + "tableOptions": { + "columns": { + "label": "Colonnes à afficher" + }, + "columnOrder": { + "label": "Ordre des colonnes" + }, + "columnWidths": { + "label": "Largeur des colonnes" + }, + "enableRowSorting": { + "label": "Activer le tri des éléments" + }, + "defaultSort": { + "label": "Colonne de tri par défaut" + }, + "invertSorting": { + "label": "Inverser le tri" + } + } }, "video": { "name": "Flux vidéo", @@ -2615,11 +3783,11 @@ }, "showBitrate": { "label": "Afficher le débit", - "description": "" + "description": "Afficher le débit binaire de lecture actuel à côté de la position" }, "showLocation": { "label": "Afficher la localisation", - "description": "" + "description": "Indiquez si le flux se trouve sur votre réseau local (LAN) ou sur votre réseau étendu (WAN)" } }, "footer": { @@ -2639,6 +3807,7 @@ "transcoding": "Transcodage", "paused": "En pause", "remaining": "{minutes} min restantes", + "seasonEpisode": "S{season} E{episode}", "metadata": { "title": "Statistiques détaillées", "video": { @@ -2656,11 +3825,16 @@ "resolution": "Résolution", "target": "Codec cible" } - } + }, + "unknownUser": "Utilisateur inconnu" + }, + "summary": { + "sessions": "{count, plural, one {# session} other {# sessions}}", + "playing": "{count} en cours de lecture", + "transcoding": "Transcodage {count}" } }, "paperlessNgx": { - "name": "Paperless-ngx", "description": "Aperçu de votre archive de documents Paperless-ngx", "documentsTotal": "Nombre total de documents", "documentsInbox": "Boîte de réception", @@ -2704,6 +3878,192 @@ "internalServerError": "Échec de la récupération des données Paperless-ngx" } }, + "patchmon": { + "description": "Aperçu de l'état des correctifs des hôtes depuis PatchMon", + "title": "Statistiques PatchMon", + "totalHosts": "Total des hôtes", + "hostsNeedingUpdates": "Mises à jour requises", + "securityUpdates": "Mises à jour de sécurité", + "upToDateHosts": "Hôtes à jour", + "hostsWithSecurityUpdates": "Hôtes avec mises à jour de sécurité", + "recentUpdates24h": "Mises à jour (24h)", + "totalOutdatedPackages": "Paquets obsolètes", + "totalRepos": "Dépôts", + "osDistribution": "Répartition des OS", + "compliance": "Conformité des correctifs", + "complianceRatio": "{upToDate} / {total}", + "lastUpdated": "Mis à jour {time}", + "option": { + "showTotalHosts": { + "label": "Afficher le nombre total d'hôtes", + "description": "Afficher le nombre total d'hôtes surveillés" + }, + "showHostsNeedingUpdates": { + "label": "Afficher les hôtes ayant besoin de mises à jour", + "description": "Afficher les hôtes avec au moins un paquet obsolète" + }, + "showSecurityUpdates": { + "label": "Afficher les mises à jour de sécurité", + "description": "Afficher le nombre total de mises à jour de sécurité disponibles" + }, + "showUpToDateHosts": { + "label": "Afficher les hôtes à jour", + "description": "Afficher les hôtes avec aucun paquet obsolète" + }, + "showHostsWithSecurityUpdates": { + "label": "Afficher les hôtes avec les mises à jour de sécurité", + "description": "Afficher les hôtes nécessitant des correctifs de sécurité" + }, + "showRecentUpdates24h": { + "label": "Afficher les mises à jour récentes (24h)", + "description": "Afficher le nombre de mises à jour appliquées au cours des dernières 24 heures" + }, + "showTotalOutdatedPackages": { + "label": "Afficher les paquets obsolètes", + "description": "Afficher le nombre total de paquets obsolètes sur tous les hôtes" + }, + "showTotalRepos": { + "label": "Afficher les dépôts", + "description": "Afficher le nombre de dépôts actifs en cours de surveillance" + }, + "enableThresholdColors": { + "label": "Activer les couleurs de seuil", + "description": "" + }, + "useCustomThresholds": { + "label": "Seuils avancés", + "description": "" + }, + "thresholdMode": { + "option": { + "absolute": "", + "percent": "Pourcentage du total des hôtes" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "Nécessite le mode de mise à jour de seuil", + "description": "" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "" + }, + "securityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "securityUpdatesWarningAt": { + "label": "" + }, + "securityUpdatesCriticalAt": { + "label": "Seuil critique de mise à jour de sécurité" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "" + }, + "upToDateHostsThresholdMode": { + "label": "", + "description": "" + }, + "upToDateHostsWarningAt": { + "label": "", + "description": "" + }, + "upToDateHostsCriticalAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesWarningAt": { + "label": "" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "" + }, + "showOsDistribution": { + "label": "Afficher la répartition des OS", + "description": "" + }, + "osDistributionLimit": { + "label": "", + "description": "", + "option": { + "3": "Top 3", + "5": "Top 5", + "10": "Top 10", + "all": "Tout" + } + }, + "showOsVersion": { + "label": "Afficher la version de l'OS", + "description": "Ajouter la version de l'OS à chaque étiquette de distribution lorsque disponible" + }, + "showComplianceHero": { + "label": "Afficher la jauge de conformité", + "description": "" + }, + "osDisplayMode": { + "label": "Mode d'affichage de l'OS", + "description": "Choisir comment afficher la répartition des systèmes d'exploitation", + "option": { + "bars": "Barres horizontales", + "donut": "Graphique en anneau" + } + }, + "threshold": { + "warningAt": { + "description": "Entrez le jaune lorsque la valeur atteint ce seuil" + }, + "criticalAt": { + "description": "Entrez rouge lorsque la valeur atteint ce seuil" + } + } + }, + "error": { + "internalServerError": "" + } + }, + "bazarr": { + "description": "", + "episodes": "Épisodes manquants", + "movies": "Films manquants", + "providers": "Problèmes de fournisseurs", + "status": "", + "announcements": "Annonces", + "option": { + "showMissingEpisodes": { + "label": "Afficher les épisodes manquants", + "description": "Afficher le nombre d'épisodes avec les sous-titres manquants" + }, + "showMissingMovies": { + "label": "Afficher les films manquants", + "description": "" + }, + "showProviderIssues": { + "label": "", + "description": "" + }, + "showHealthIssues": { + "label": "", + "description": "" + } + }, + "error": { + "internalServerError": "" + } + }, "immich-serverStats": { "name": "Statistiques du serveur Immich", "description": "Informations sur votre instance Immich", @@ -2728,7 +4088,8 @@ "users": "Utilisateurs", "photos": "Photos", "videos": "Vidéos", - "storage": "Stockage utilisé" + "storage": "Stockage utilisé", + "albumLimit": "Les plus grands albums (jusqu'à {count} affiché)" }, "immich-albumCarousel": { "name": "Album Immich", @@ -2752,24 +4113,21 @@ } }, "description": "Diaporama de photos dans votre album Immich", - "noPhotos": "Aucune photo dans cet album" + "noPhotos": "Aucune photo dans cet album", + "albumPhoto": "Photo de l'album", + "actions": { + "previousPhoto": "Photo précédente", + "nextPhoto": "Photo suivante", + "pauseSlideshow": "Pause slideshow", + "resumeSlideshow": "Reprendre le diaporama", + "toggleSlideshow": "Mettre en pause ou reprendre le diaporama", + "photo": "Photo {number}" + } }, "downloads": { "name": "Client de téléchargement", "description": "Vous permet de visualiser et de gérer vos téléchargements à partir de clients Torrent et Usenet.", "option": { - "columns": { - "label": "Colonnes à afficher" - }, - "enableRowSorting": { - "label": "Activer le tri des éléments" - }, - "defaultSort": { - "label": "Colonne utilisée pour le tri par défaut" - }, - "descendingDefaultSort": { - "label": "Inverser le Tri" - }, "showCompletedUsenet": { "label": "Afficher les entrées de Usenet marquées comme terminées" }, @@ -2794,12 +4152,6 @@ "limitPerIntegration": { "label": "Limiter les éléments par intégration", "description": "Cela limitera le nombre d'éléments affichés par intégration, pas globalement" - }, - "columnOrder": { - "label": "Ordre des colonnes" - }, - "columnWidths": { - "label": "Largeur des colonnes" } }, "errors": { @@ -2831,7 +4183,7 @@ }, "id": { "columnTitle": "Id", - "detailsTitle": "" + "detailsTitle": "Id" }, "integration": { "columnTitle": "Intégration" @@ -2960,6 +4312,10 @@ "mediaRequests-requestList": { "name": "Liste des demandes de médias", "description": "Voir la liste de toutes les demandes de médias de votre instance Overseerr ou Jellyseerr", + "empty": { + "title": "Aucune demande de média pour le moment", + "description": "Recherchez un film ou une série pour lancer une demande." + }, "option": { "linksTargetNewTab": { "label": "Ouvrir les liens dans un nouvel onglet" @@ -2993,12 +4349,16 @@ "failed": "Échec", "completed": "Complété" }, + "unknown": "Inconnu", "toBeDetermined": "À déterminer" }, "mediaRequests-requestStats": { "name": "Statistiques des demandes de médias", "description": "Statistiques sur vos demandes de médias", - "option": {}, + "empty": { + "title": "Aucune activité de demande pour l'instant", + "description": "Les statistiques apparaîtront après la première demande de média." + }, "titles": { "stats": { "main": "Stats des médias", @@ -3008,8 +4368,7 @@ "declined": "Déjà refusé", "available": "Déjà disponible", "tv": "Demandes de séries TV", - "movie": "Demandes de films", - "total": "Total" + "movie": "Demandes de films" }, "users": { "main": "Principaux utilisateurs", @@ -3035,7 +4394,6 @@ }, "currentIndex": "{start} - {end} sur {total}", "healthCheck": { - "title": "Bilan de santé", "queued": "En file d’attente", "status": { "healthy": "Sain", @@ -3044,38 +4402,63 @@ }, "panel": { "statistics": { - "empty": "Vide", - "transcodes": "Transcodeur", - "transcodesCount": "Transcodeur", - "healthChecksCount": "Bilans de santé", "filesCount": "Fichiers", "savedSpace": "Espace libéré", - "healthChecks": "Bilans de santé", "videoCodecs": "Codecs", "videoContainers": "Conteneurs", "videoResolutions": "Résolutions" }, "workers": { - "empty": "Vide", "table": { - "file": "Fichier", "eta": "Temps Restant", - "progress": "Progrès", - "transcode": "Transcodeur", - "healthCheck": "Bilan de santé" + "progress": "Progrès" } }, "queue": { - "empty": "Vide", "table": { - "file": "Fichier", - "size": "Taille", - "transcode": "Transcodeur", - "healthCheck": "Contrôle de santé" + "size": "Taille" } + }, + "common": { + "empty": "Vide", + "file": "Fichier", + "healthCheck": "Contrôle de santé", + "transcode": "Transcodeur", + "transcodes": "Transcodages", + "healthChecks": "Bilans de santé" } } }, + "mediaMissing": { + "name": "", + "description": "Montre les films, épisodes et livres manquants et en attente de {radarr}, {sonarr} et {bindery}", + "option": { + "showMissing": { + "label": "" + }, + "showQueued": { + "label": "Afficher les éléments en attente" + }, + "pageSize": { + "label": "Éléments par page" + } + }, + "tab": { + "missing": "", + "queued": "En file d’attente" + }, + "type": { + "movie": "Film", + "episode": "Épisode", + "book": "Réserver" + }, + "empty": { + "missing": "Aucun élément manquant", + "queued": "Aucun élément en file d'attente", + "noTabsEnabled": "Activer au moins un onglet dans les paramètres du widget" + }, + "timeLeft": "Temps restant" + }, "rssFeed": { "name": "Flux RSS", "description": "Surveiller et afficher un ou plusieurs flux RSS, ATOM ou JSON génériques", @@ -3098,6 +4481,13 @@ "showPosterImage": { "label": "Afficher l'image de l'affiche" } + }, + "error": { + "allFeedsFailed": "Impossible de charger les flux RSS. Vérifiez les URL du flux et réessayez." + }, + "warning": { + "partial": "{count, plural, one {# Le flux RSS n'a pas pu être chargé} other {# Les fils RSS n'ont pas pu être chargés}}", + "stale": "Les flux RSS n'ont pas pu être actualisés. Affichage des entrées précédemment chargées." } }, "releases": { @@ -3173,17 +4563,8 @@ "label": "Expression Régulière" } }, - "edit": { - "label": "Modifier" - }, "editForm": { - "title": "Modifier le dépôt", - "cancel": { - "label": "Annuler" - }, - "confirm": { - "label": "Confirmer" - } + "title": "Modifier le dépôt" }, "importForm": { "title": "Importer depuis Docker" @@ -3200,8 +4581,7 @@ "label": "Tokens du fournisseur", "token": "Token", "configured": "Token configuré", - "notConfigured": "Aucun token défini", - "save": "Sauvegarder" + "notConfigured": "Aucun token défini" } } }, @@ -3228,17 +4608,32 @@ "noProviderResponse": "Aucune réponse du fournisseur", "unexpected": "Erreur de fournisseur inattendue" } - } + }, + "expandDetails": "Afficher les détails pour {name}", + "collapseDetails": "Masquer les détails pour {name}" }, "networkControllerSummary": { - "option": {}, - "card": { - "vpn": { - "countConnected": "{count} connecté" + "advanced": { + "updated": "Mis à jour", + "metric": { + "latency": "Latence", + "ping": "Ping", + "uptime": "Disponible", + "users": "Utilisateurs", + "guests": "Invités" } }, + "card": { + "vpn": { + "countConnected": "{count, plural, one {# connecté} other {# connecté}}", + "label": "VPN" + }, + "wan": "WAN", + "web": "Web", + "wifi": "Wi-Fi", + "lan": "LAN" + }, "error": { - "integrationsDisconnected": "Aucune donnée disponible, toutes les intégrations sont déconnectées", "unknownContentOption": "Option de contenu inconnue pour le widget de résumé du contrôleur réseau : " }, "name": "Résumé du contrôleur réseau", @@ -3275,7 +4670,6 @@ } }, "error": { - "integrationsDisconnected": "Aucune donnée disponible, toutes les intégrations sont déconnectées", "unknownContentOption": "Option de contenu inconnue pour le widget d'état du réseau : " }, "name": "État du réseau", @@ -3305,7 +4699,6 @@ "versiontitle": "Versions", "cputitle": "Utilisation du CPU", "memorytitle": "Utilisation de la mémoire", - "cpu": "CPU", "memory": "Mémoire", "interfaces": { "name": "nom", @@ -3313,6 +4706,16 @@ "recv": "Reçus", "title": "Interfaces réseau" } + }, + "empty": { + "noInterfaces": "Aucune donnée d'interface réseau pour le moment" + }, + "versionUnknown": "Version inconnue", + "metricAccessible": "{metric} : {value} %, {status}", + "status": { + "normal": "Normale", + "warning": "Avertissement", + "critical": "Critique" } }, "notifications": { @@ -3322,8 +4725,21 @@ "option": { "hideLogos": { "label": "Masquer les logos" + }, + "messageFormat": { + "label": "Format du message", + "option": { + "auto": "Automatique", + "plain": "Texte brut", + "markdown": "Markdown", + "html": "HTML" + } } - } + }, + "openService": "Ouvrir le service de notification", + "deleteNotification": "Supprimer la notification de Gotify", + "deleteFailed": "Impossible de supprimer la notification", + "deleteFailedMessage": "La notification n'a pas pu être supprimée. Veuillez réessayer." }, "speedtestTracker": { "name": "Suivi de test de vitesse", @@ -3365,7 +4781,6 @@ } }, "uptimeKuma": { - "name": "Uptime Kuma", "description": "", "option": { "showAverageUptime": { @@ -3402,8 +4817,58 @@ }, "error": { "internalServerError": "Impossible de récupérer les données de disponibilité" + }, + "status": { + "up": "Total envoyé", + "down": "Vitesse de téléchargement", + "paused": "En pause" } }, + "traefik": { + "description": "", + "option": { + "showTcp": { + "label": "" + }, + "showUdp": { + "label": "" + }, + "showEntryPoints": { + "label": "" + } + }, + "instances": "", + "versionUnknown": "", + "summary": { + "routers": "", + "entryPoints": "" + }, + "resource": { + "routers": "", + "middlewares": "" + }, + "status": { + "healthy": "", + "errors": "", + "warnings": "" + }, + "error": { + "internalServerError": "" + }, + "resourceType": { + "router": "Routeur", + "service": "Service", + "middleware": "Middleware" + }, + "resourceStatus": { + "enabled": "Activé", + "disabled": "Désactivé", + "warning": "Avertissement", + "error": "Erreur", + "unknown": "Inconnu" + }, + "failedEndpoint": "Échec: {endpoint}" + }, "audioStats": { "name": "Statistiques audio", "description": "", @@ -3468,9 +4933,7 @@ "label": "Graphiques visibles", "description": "Sélectionnez les graphiques à afficher.", "option": { - "cpu": "CPU", "memory": "Mémoire", - "gpu": "GPU", "network": "Réseau" } }, @@ -3485,12 +4948,11 @@ } }, "card": { - "cpu": "CPU", "memory": "RAM", - "gpu": "GPU", "network": "NET", "up": "UP", - "down": "HORS SERVICE" + "down": "HORS SERVICE", + "memoryTooltip": "{used} / {available} ({percent}%)" } }, "systemDisks": { @@ -3516,151 +4978,88 @@ }, "showBackgroundBar": { "label": "Afficher la barre d'utilisation en arrière-plan" - }, - "visibleStorageVolumes": { - "label": "", - "description": "", - "placeholder": "" } }, "status": { - "unhealthy": "Dysfonctionnement" + "unhealthy": "Dysfonctionnement", + "smart": "SMART", + "free": "{percentage}% gratuit" + } + }, + "customApi": { + "name": "Widget personnalisé", + "description": "Renvoie une définition JSX personnalisée configurée.", + "customJsx": { + "noTemplate": "Aucun modèle JSX n'est configuré.", + "templateWarnings": "Avertissements du modèle {count}:", + "requestIdRequired": "Ce contrôle réseau nécessite un nom requestId.", + "unsavedPreview": "Exécutez le test initial de requête dans l'éditeur avant de tester les requêtes nommées.", + "invalidParams": "Les paramètres de requête ne sont pas valides.", + "loading": "Chargement de la requête...", + "loadRequest": "Demande de chargement", + "requestFailed": "La demande a échoué.", + "retry": "Demande de nouvelle tentative", + "actionCompleted": "Action terminée avec succès.", + "actionSimulated": "Action simulée; aucune demande n'a été envoyée.", + "actionsDisabledEditMode": "Les actions sont désactivées lorsque le tableau est en mode édition.", + "widgetItemUnavailable": "Cet élément du widget n'est pas disponible.", + "toggle": "Activer/désactiver", + "copied": "Copié", + "confirmDelete": "Confirmer cette action destructrice." + }, + "option": { + "definitionId": { + "label": "Widget personnalisé" + }, + "refreshInterval": { + "label": "", + "description": "" + } + }, + "noDefinition": "", + "definitionNotFound": "Widget personnalisé indisponible", + "migrationRequired": "Ce widget personnalisé hérité est préservé, mais il doit être migré vers JSX personnalisé v2 depuis Gérer les widgets personnalisés avant de pouvoir fonctionner.", + "manageMigration": "Ouvrir Gérer les widgets personnalisés", + "contactAdmin": "Contactez un administrateur.", + "configurationNeedsRepair": "Les options de ce widget ont changé. Modifiez le widget pour réparer sa configuration.", + "removeFromBoard": "Retirer du tableau", + "editModePending": "Enregistrez le tableau pour charger ce widget.", + "picker": { + "group": "Widgets JSX personnalisés", + "empty": "Aucun widget personnalisé trouvé", + "preview": "Aperçu", + "sources": "{count, plural, one {# source} other {# sources}}", + "requests": "{count, plural, one {# demande} other {# demandes}}", + "migrationRequired": "Migration requise", + "migrationDescription": "Ce widget v1 placé ne peut pas encore être exécuté. Copiez son invite reproduite vers un LLM, puis collez la seule réponse JSON dans Homarr.", + "manageMigration": "Ouvrir Gérer les widgets personnalisés", + "contactAdmin": "Contactez un administrateur." + }, + "configuration": { + "needsAttention": "La configuration nécessite une attention : {message}", + "advancedOptions": "Options avancées", + "invalidJson": "JSON invalide" } }, "beszelSystemTable": { "name": "Systèmes Beszel (Tableau)", "description": "Vue en tableau de tous les systèmes surveillés par Beszel avec colonnes triables et indicateurs d'état", "option": { - "statusFilter": { - "label": "Filtre d'état" - }, "sortBy": { "label": "Trier par" }, "sortDirection": { "label": "Direction du tri" - }, - "showCpu": { - "label": "Afficher le CPU" - }, - "showMemory": { - "label": "Afficher la mémoire" - }, - "showDisk": { - "label": "Afficher le disque" - }, - "showGpu": { - "label": "Afficher le GPU" - }, - "showLoadAvg": { - "label": "Afficher la charge moyenne" - }, - "showNet": { - "label": "Afficher le réseau" - }, - "showTemp": { - "label": "Afficher la température" - }, - "showBattery": { - "label": "Afficher la batterie" - }, - "showServices": { - "label": "" - }, - "showUptime": { - "label": "" - }, - "showAgent": { - "label": "" - }, - "columnOrder": { - "label": "" - }, - "columnWidths": { - "label": "" } }, - "noRecords": "", "error": { - "internalServerError": "", "layoutSaveTitle": "", "layoutSaveMessage": "" - }, - "column": { - "system": "", - "cpu": "", - "memory": "", - "disk": "Disque", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "Temp", - "battery": "", - "services": "", - "uptime": "", - "agent": "Agent" } }, "beszelSystemGrid": { "name": "", - "description": "", - "option": { - "statusFilter": { - "label": "" - }, - "showCpu": { - "label": "" - }, - "showMemory": { - "label": "" - }, - "showDisk": { - "label": "" - }, - "showGpu": { - "label": "" - }, - "showLoadAvg": { - "label": "" - }, - "showNet": { - "label": "" - }, - "showTemp": { - "label": "" - }, - "showBattery": { - "label": "" - }, - "showServices": { - "label": "" - }, - "showUptime": { - "label": "" - }, - "showAgent": { - "label": "" - } - }, - "error": { - "internalServerError": "" - }, - "empty": { - "noSystems": "" - }, - "metric": { - "cpu": "", - "memory": "Mémoire", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" - } + "description": "" }, "beszelAlerts": { "name": "", @@ -3674,13 +5073,14 @@ } }, "empty": "", - "error": { - "internalServerError": "" - }, "history": "Historique", "resolved": "Résolu", + "alertDescription": { + "statusDuration": "Descendre pour {minutes} min", + "threshold": "Dépasse {value} sur {minutes} min" + }, "status": { - "triggered": "", + "triggered": "Déclenché", "ok": "" } }, @@ -3725,16 +5125,16 @@ "noSystems": "" }, "error": { - "internalServerError": "", "liveConnectionFailed": "", "switchToHistorical": "", - "systemNotFound": "" + "systemNotFound": "", + "selectionSaveTitle": "Impossible d'enregistrer la sélection", + "selectionSaveMessage": "La sélection de la période ou du système n'a pas pu être enregistrée. Veuillez réessayer." }, "chart": { "cpu": { "title": "", - "subtitle": "Utilisation moyenne du CPU à l'échelle du système", - "series": "CPU" + "subtitle": "Utilisation moyenne du CPU à l'échelle du système" }, "memory": { "title": "Utilisation Mémoire", @@ -3744,7 +5144,7 @@ }, "disk": { "title": "", - "subtitle": "", + "subtitle": "Utilisation par système de fichiers", "series": "" }, "diskIO": { @@ -3755,7 +5155,7 @@ }, "storage": { "title": "", - "subtitle": "", + "subtitle": "Utilisation du disque par système de fichiers", "series": "" }, "network": { @@ -3776,289 +5176,550 @@ "title": "", "subtitle": "" } + }, + "period": { + "live": "En direct", + "oneHour": "1h", + "twelveHours": "12h", + "oneDay": "24h", + "oneWeek": "1 mois", + "thirtyDays": "30j" } }, - "patchmon": { - "name": "PatchMon", - "description": "Aperçu de l'état des correctifs des hôtes depuis PatchMon", - "title": "Statistiques PatchMon", - "totalHosts": "Total des hôtes", - "hostsNeedingUpdates": "Mises à jour requises", - "securityUpdates": "Mises à jour de sécurité", - "upToDateHosts": "Hôtes à jour", - "hostsWithSecurityUpdates": "Hôtes avec mises à jour de sécurité", - "recentUpdates24h": "Mises à jour (24h)", - "totalOutdatedPackages": "Paquets obsolètes", - "totalRepos": "Dépôts", - "osDistribution": "Répartition des OS", - "compliance": "Conformité des correctifs", - "complianceRatio": "{upToDate} / {total}", - "lastUpdated": "Mis à jour {time}", - "option": { - "showTotalHosts": { - "label": "Afficher le nombre total d'hôtes", - "description": "Afficher le nombre total d'hôtes surveillés" - }, - "showHostsNeedingUpdates": { - "label": "Afficher les hôtes ayant besoin de mises à jour", - "description": "Afficher les hôtes avec au moins un paquet obsolète" - }, - "showSecurityUpdates": { - "label": "Afficher les mises à jour de sécurité", - "description": "Afficher le nombre total de mises à jour de sécurité disponibles" - }, - "showUpToDateHosts": { - "label": "Afficher les hôtes à jour", - "description": "Afficher les hôtes avec aucun paquet obsolète" - }, - "showHostsWithSecurityUpdates": { - "label": "Afficher les hôtes avec les mises à jour de sécurité", - "description": "Afficher les hôtes nécessitant des correctifs de sécurité" - }, - "showRecentUpdates24h": { - "label": "Afficher les mises à jour récentes (24h)", - "description": "Afficher le nombre de mises à jour appliquées au cours des dernières 24 heures" - }, - "showTotalOutdatedPackages": { - "label": "Afficher les paquets obsolètes", - "description": "" - }, - "showTotalRepos": { - "label": "Afficher les dépôts", - "description": "Afficher le nombre de dépôts actifs en cours de surveillance" - }, - "enableThresholdColors": { - "label": "Activer les couleurs de seuil", - "description": "" - }, - "useCustomThresholds": { - "label": "Seuils avancés", - "description": "" - }, - "thresholdMode": { - "option": { - "absolute": "", - "percent": "Pourcentage du total des hôtes" - } - }, - "hostsNeedingUpdatesThresholdMode": { - "label": "Nécessite le mode de mise à jour de seuil", - "description": "" - }, - "hostsNeedingUpdatesWarningAt": { - "label": "", - "description": "" - }, - "hostsNeedingUpdatesCriticalAt": { - "label": "", - "description": "" - }, - "securityUpdatesThresholdMode": { - "label": "", - "description": "" - }, - "securityUpdatesWarningAt": { - "label": "", - "description": "" - }, - "securityUpdatesCriticalAt": { - "label": "Seuil critique de mise à jour de sécurité", - "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": "Afficher la répartition des OS", - "description": "" - }, - "osDistributionLimit": { - "label": "", - "description": "", - "option": { - "3": "Top 3", - "5": "Top 5", - "10": "Top 10", - "all": "Tout" - } - }, - "showOsVersion": { - "label": "Afficher la version de l'OS", - "description": "Ajouter la version de l'OS à chaque étiquette de distribution lorsque disponible" - }, - "showComplianceHero": { - "label": "Afficher la jauge de conformité", - "description": "" - }, - "osDisplayMode": { - "label": "Mode d'affichage de l'OS", - "description": "Choisir comment afficher la répartition des systèmes d'exploitation", - "option": { - "bars": "Barres horizontales", - "donut": "Graphique en anneau" - } - } + "assistant": { + "name": "Assistant", + "description": "Ayez une conversation assistante complète directement sur votre plateau.", + "unavailable": { + "title": "Assistant indisponible", + "description": "Connectez-vous et demandez à un administrateur de configurer l'Assistant à partir du panneau de gestion." }, + "compact": { + "title": "Assistant", + "description": "Redimensionner ce widget pour discuter ici, ou ouvrir la conversation complète.", + "open": "Ouvrir l'assistant", + "openTitle": "Assistant ouvert dans le panneau latéral", + "openDescription": "La conversation reste dans une seule surface active.", + "returnToWidget": "Renvoyer la conversation à ce widget", + "otherWidgetTitle": "Assistant actif dans un autre widget", + "otherWidgetDescription": "Une seule surface de conversation reste active à la fois.", + "useHere": "Utiliser l'assistant dans ce widget" + } + }, + "beszel": { "error": { - "internalServerError": "" - } - }, - "bazarr": { - "name": "Bazarr", - "description": "", - "episodes": "Épisodes manquants", - "movies": "Films manquants", - "providers": "Problèmes de fournisseurs", - "status": "", - "option": { - "showMissingEpisodes": { - "label": "Afficher les épisodes manquants", - "description": "Afficher le nombre d'épisodes avec les sous-titres manquants" - }, - "showMissingMovies": { - "label": "Afficher les films manquants", - "description": "" - }, - "showProviderIssues": { - "label": "", - "description": "" - }, - "showHealthIssues": { - "label": "", - "description": "" - } - }, - "error": { - "internalServerError": "" - } - }, - "mediaMissing": { - "name": "", - "description": "", - "option": { - "showMissing": { - "label": "" - }, - "showQueued": { - "label": "Afficher les éléments en attente" - }, - "pageSize": { - "label": "Éléments par page" - } - }, - "tab": { - "missing": "", - "queued": "En file d’attente" - }, - "type": { - "movie": "Film", - "episode": "Épisode" + "internalServerError": "Impossible de se connecter à Beszel. Vérifiez vos paramètres d'intégration." }, "empty": { - "missing": "Aucun élément manquant", - "queued": "Aucun élément en file d'attente", - "noTabsEnabled": "Activer au moins un onglet dans les paramètres du widget" + "noSystems": "Aucun système trouvé" }, - "timeLeft": "Temps restant" - }, - "traefik": { - "name": "", - "description": "", - "option": { - "showTcp": { - "label": "" + "options": { + "statusFilter": { + "label": "Filtre de statut" }, - "showUdp": { - "label": "" + "showCpu": { + "label": "Afficher le CPU" }, - "showEntryPoints": { - "label": "" + "showMemory": { + "label": "Afficher la mémoire" + }, + "showDisk": { + "label": "Afficher le disque" + }, + "showGpu": { + "label": "Afficher le GPU" + }, + "showLoadAvg": { + "label": "Afficher la moyenne de charge" + }, + "showNet": { + "label": "Afficher le réseau" + }, + "showTemp": { + "label": "Afficher la température" + }, + "showBattery": { + "label": "Afficher la batterie" + }, + "showServices": { + "label": "Afficher les services" + }, + "showUptime": { + "label": "Afficher le temps de disponibilité" + }, + "showAgent": { + "label": "Afficher la version de l'agent" } }, - "instances": "", - "versionUnknown": "", - "summary": { - "routers": "", - "entryPoints": "" - }, - "resource": { - "routers": "", - "services": "Services", - "middlewares": "" - }, - "status": { - "healthy": "", - "errors": "", - "warnings": "" - }, - "error": { - "internalServerError": "" + "metric": { + "system": "Système", + "source": "Intégration", + "hostname": "Nom d'Hôte", + "cpuModel": "Modèle de CPU", + "cores": "Coeurs", + "memoryTotal": "Mémoire totale", + "memory": "Mémoire", + "disk": "Disque", + "loadAvg": "Charge Moyenne", + "net": "NT", + "temp": "Temp", + "battery": "Chauve-souris", + "uptime": "Disponible", + "agent": "Agent" } }, - "wud": { - "name": "Qu'est ce que Docker", - "description": "Afficher combien de conteneurs surveillés ont des mises à jour disponibles.", - "title": "Qu'est ce que Docker", - "monitored": "Surveillé", - "updatesAvailable": "{count, plural, one {# mise à jour disponible} other {# mises à jour disponibles}}", - "updateAvailable": "Mise à jour disponible", - "openReleaseNotes": "Ouvrir les notes de version", + "llamacpp": { + "name": "llama.cpp", + "description": "Montrez la santé, le modèle chargé et la vitesse de génération de votre serveur local llama.cpp.", + "title": "llama.cpp", + "status": { + "unhealthy": "Malsain ({status})" + }, + "idle": "Inactif", + "speedTooltip": { + "current": "Vitesse de génération actuelle", + "average": "Vitesse de génération moyenne depuis le démarrage", + "request": "Vitesse moyenne depuis le démarrage de cette requête" + }, + "busy": "{count, plural, one {# demande en cours d'exécution} other {# requêtes en cours}}", + "modelInfo": { + "context": "Contexte", + "size": "Taille du fichier", + "parameters": "Paramètres", + "model": "Modélisation", + "quantization": "Quantification" + }, + "stats": { + "tokensProcessed": "Jetons traités", + "contextUsage": "Contexte / Utilisation KV", + "cacheHitRate": "Taux de réussite du cache", + "tokensGenerated": "Jetons générés" + }, + "error": { + "unreachable": "le serveur llama n'est pas joignable" + }, + "unit": { + "speed": "{value} (s)", + "parameters": "{value}B", + "none": "—", + "speedShort": "/s" + }, "option": { "showTitle": { "label": "Afficher le titre" }, - "showRing": { - "label": "Afficher l'anneau de mise à jour" + "showModelInfo": { + "label": "Afficher les informations du modèle" }, - "layout": { - "label": "Mise en page", + "showContextUsage": { + "label": "Afficher l'utilisation du contexte" + }, + "showCacheHitRate": { + "label": "Afficher le taux de réussite de la cache" + }, + "showSpeedStats": { + "label": "Afficher les statistiques de vitesse" + }, + "showRequests": { + "label": "Afficher la charge de la requête" + }, + "showTokenStats": { + "label": "Afficher les totaux de jetons" + }, + "showSpeculative": { + "label": "Afficher le décodage spéculatif" + } + }, + "advanced": { + "promptSpeed": "Vitesse de poussée", + "avgSpeed": "Génération moyenne", + "requests": "Demandes", + "deferred": "Retardé", + "slots": "Emplacements {processing}/{total} occupés", + "speculative": "Décodage spéculatif", + "avgPrompt": "Invitation moy", + "specDrafts": "Brouillons de spécification", + "specAccepted": "Caractéristiques acceptées", + "specDraftTokens": "Caractéristiques des jetons brouillons" + } + }, + "stats": { + "name": "Statistiques", + "description": "Combinez les statistiques de vos intégrations dans un seul widget configurable.", + "configure": "Configurer les métriques", + "refresh": "Rafraîchir les statistiques", + "empty": "Ouvrez les paramètres du widget, sélectionnez les intégrations, puis ajoutez des métriques.", + "editorHelp": "Ajouter des métriques à partir des intégrations sélectionnées pour ce widget. Les modifications sont enregistrées avec votre tableau de bord.", + "source": "Intégration", + "metric": "Métrique", + "noMetrics": "Aucune statistique disponible pour cette intégration", + "add": "Ajouter une métrique", + "label": "Étiquette personnalisée", + "hidden": "Masquer", + "compact": "Numéros compacts", + "moveUp": "Monter", + "moveDown": "Descendre", + "remove": "Supprimer la métrique", + "loading": "Chargement de…", + "unavailable": "Unavailable", + "refreshFailed": "Échec de l'actualisation — affichage des données enregistrées", + "stale": "Données enregistrées - actualiser pour mettre à jour", + "table": { + "value": "Valeur", + "status": "Statut" + }, + "option": { + "table": { + "label": "Vue tableau" + }, + "rows": { + "label": "Lignes compactes" + }, + "showIcon": { + "label": "Afficher l'icône source" + }, + "spacing": { + "label": "Espacement", "option": { - "horizontal": { - "label": "Horizontale" + "xs": { + "label": "Compact" }, - "vertical": { - "label": "Vertical" + "sm": { + "label": "Confortable" + }, + "md": { + "label": "Spacieux" } } }, - "showUpdateList": { - "label": "Afficher la liste de mise à jour du conteneur", - "description": "Liste chaque conteneur surveillé qui a une mise à jour d'image disponible" + "entries": { + "label": "Métriques" + }, + "plain": { + "label": "Retirer les fonds de la carte" } - } + }, + "fetchFailed": "Impossible de récupérer les statistiques", + "viewOptions": "Personnaliser cette vue", + "moreMetrics": "{count} de plus en vue avancée", + "localHelp": "La mise en page, le formatage et la visibilité ne s'appliquent qu'à cette vue. Les paramètres du tableau partagé restent les mêmes.", + "plain": "Retirer les fonds de la carte", + "resetView": "Réinitialiser la vue", + "allHidden": "Toutes les métriques sont masquées dans cette vue. Utilisez Personnaliser cette vue pour les restaurer." + }, + "wazuh": { + "target": { + "api": "API serveur Wazuh", + "indexer": "Indexeur Wazuh", + "wazuh": "Wazuh" + }, + "severity": { + "low": "Bas", + "medium": "Moyen", + "high": "Élevé", + "critical": "Critique" + }, + "error": { + "unauthorized": { + "title": "{target} a rejeté les identifiants", + "description": "Vérifiez le nom d'utilisateur et le mot de passe enregistrés sur l'intégration Wazuh. L'API serveur (port 55000) et l'indexeur (port 9200) utilisent des utilisateurs séparés." + }, + "certificate": { + "title": "Le certificat {target} n'est pas fiable", + "description": "Wazuh utilise un certificat auto-signé par défaut. Exécutez \"Tester la connexion\" sur l'intégration et faites confiance au certificat, ou ajoutez votre AC dans Réglages → Certificats." + }, + "unreachable": { + "title": "Impossible d'atteindre {target}", + "description": "L'hôte a refusé ou abandonné la connexion. Vérifiez l'URL, le port et le pare-feu. L'indexeur n'écoute que sur localhost dans une installation par défaut du tout-en-un." + }, + "timeout": { + "title": "Délai d’attente dépassé pour {target}", + "description": "Aucune réponse dans les 15 secondes. Le service peut être surchargé ou l'adresse peut être incorrecte." + }, + "status": { + "title": "{target} a renvoyé une erreur", + "description": "La requête a échoué avec le statut HTTP {status}." + }, + "invalidResponse": { + "title": "Réponse inattendue de {target}", + "description": "Vérifiez que l'URL pointe vers l'API ou l'indexeur du serveur Wazuh et non vers le tableau de bord." + }, + "indexerRequired": { + "title": "Identifiants de l'indexeur Wazuh requis", + "description": "Les alertes, les vulnérabilités et les événements d'intégrité des fichiers sont lus à partir de l'indexeur Wazuh. Ajoutez une URL d'indexeur, un nom d'utilisateur et un mot de passe à l'intégration." + }, + "unknown": { + "title": "Impossible de charger les données depuis {target}", + "description": "Consultez les logs d'Homarr pour plus de détails." + } + }, + "range": { + "1h": "1h", + "24h": "24h", + "7d": "7j", + "30d": "30j" + }, + "levelTooltip": "Niveau de règle {level} ({severity})" + }, + "wazuhAgents": { + "name": "Agents Wazuh", + "description": "Liste des agents Wazuh triés avec statut, OS, version et dernier entretien", + "option": { + "statusFilter": { + "label": "Afficher les agents" + }, + "sortBy": { + "label": "Trier par" + }, + "showVersion": { + "label": "Afficher la colonne de version Wazuh" + }, + "showGroups": { + "label": "Afficher la colonne des groupes" + } + }, + "title": "Agents", + "total": "Les agents {count}", + "status": { + "active": "Actif", + "disconnected": "Déconnecté", + "neverConnected": "Jamais connecté", + "pending": "En attente" + }, + "statusLabel": { + "active": "Actif", + "disconnected": "Déconnecté", + "never_connected": "Jamais connecté", + "pending": "En attente", + "unknown": "Inconnu" + }, + "live": "En direct", + "snapshot": "Instantané {age} vieux", + "snapshotHint": "Lisez depuis le tableau de bord Wazuh un instantané d'agent (surveillance de wazuh) pris sur {time}. Ajoutez les identifiants API du serveur pour les données en direct.", + "staleSnapshot": "L'instantané de l'agent de {time} est obsolète. Vérifiez que la tâche de surveillance du tableau de bord Wazuh est en cours d'exécution, ou ajoutez les identifiants API du serveur.", + "noDisconnected": "Tous les agents sont connectés", + "empty": "Aucun agent ne correspond à ce filtre", + "column": { + "status": "Statut", + "name": "Nom de la tâche", + "ip": "IP", + "os": "OS", + "version": "Version", + "lastKeepAlive": "Garder en vie", + "groups": "Groupes" + }, + "outdated": "Plus ancienne que la dernière version de l'agent ({version})" + }, + "wazuhAlerts": { + "name": "Fil d'alerte Wazuh", + "description": "Alertes Wazuh récentes avec niveau, techniques MITRE ATT&CK, agent et IP source", + "option": { + "minLevel": { + "label": "Niveau de règle minimum", + "description": "Niveaux Wazuh : 0-6 bas, 7-11 médium, 12-14 hauts, 15+ critique" + }, + "hours": { + "label": "Fenêtre de temps (heures)" + }, + "limit": { + "label": "Nombre d'alertes" + }, + "showMitre": { + "label": "Show MITRE ATT&CK techniques" + }, + "showAgent": { + "label": "Afficher l'agent" + }, + "showSourceIp": { + "label": "Afficher l'IP source" + }, + "showRuleId": { + "label": "Afficher l'ID de la règle" + } + }, + "title": "Alertes · niveau {level}+ · {hours}h", + "empty": "Aucune alerte à ce niveau. Tous silencieux.", + "rule": "Règle {id}", + "openInDashboard": "Ouvrir cette alerte dans le tableau de bord Wazuh" + }, + "wazuhSummary": { + "name": "Sévérité d'alerte Wazuh", + "description": "Incidence de la gravité de l'alerte avec une tendance par rapport à la période précédente", + "option": { + "range": { + "label": "Intervalle de temps" + }, + "showTrend": { + "label": "Afficher la tendance par rapport à la période précédente" + }, + "showFooter": { + "label": "Afficher le pied de page" + } + }, + "title": "Sévérité de l'alerte · {range}", + "alerts": "alertes", + "none": "Aucune alerte", + "trend": { + "new": "nouveau", + "tooltip": "Période précédente : {previous}" + }, + "previous": "{range}précédent : {count}", + "maxLevel": "Niveau max {level}", + "health": "Santé de l'indexeur : {status}", + "manager": "Manager {version}" + }, + "wazuhTimeline": { + "name": "Wazuh alerts timeline", + "description": "Graphique empilé des alertes Wazuh au fil du temps par gravité", + "option": { + "range": { + "label": "Intervalle de temps" + }, + "interval": { + "label": "Intervalle" + }, + "chartType": { + "label": "Type de graphique" + }, + "yScale": { + "label": "Échelle de l'axe Y", + "description": "La racine carrée garde les alertes élevées et critiques visibles à côté de milliers de bas" + }, + "minLevel": { + "label": "Niveau de règle minimum" + }, + "showLegend": { + "label": "Afficher la légende avec les totaux" + } + }, + "title": "Chronologie des alertes · {range}", + "total": "Alertes {count}", + "interval": "par {interval}" + }, + "wazuhTopList": { + "name": "Top liste Wazuh", + "description": "Règles principales, agents, adresses IP source ou techniques MITRE ATT&CK par nombre d'alertes", + "option": { + "kind": { + "label": "Rang" + }, + "range": { + "label": "Intervalle de temps" + }, + "limit": { + "label": "Nombre d'entrées" + }, + "minLevel": { + "label": "Niveau de règle minimum" + }, + "showBars": { + "label": "Afficher les barres" + } + }, + "title": { + "rules": "Top règles · {range}", + "agents": "Top des agents · {range}", + "sourceIps": "IP les plus sources · {range}", + "mitreTactics": "tactiques MITRE · {range}", + "mitreTechniques": "MITRE techniques · {range}" + }, + "empty": { + "rules": "Aucune alerte durant cette période", + "agents": "Aucune alerte durant cette période", + "sourceIps": "Aucune alerte avec une IP source pendant cette période", + "mitreTactics": "Aucune alerte associée à MITRE ATT&CK pendant cette période", + "mitreTechniques": "Aucune alerte associée à MITRE ATT&CK pendant cette période" + }, + "totalTooltip": "Alertes correspondantes à {count}", + "private": "LAN", + "public": "Public", + "agents": "Vu sur les agents {count}", + "others": "{count} alertes supplémentaires dans les autres entrées" + }, + "wazuhVulnerabilities": { + "name": "Vulnérabilités Wazuh", + "description": "La vulnérabilité compte, les meilleurs CVE et les agents les plus vulnérables", + "option": { + "cveOrder": { + "label": "Classer les CVEs par" + }, + "minSeverity": { + "label": "Sévérité CVE" + }, + "cveLimit": { + "label": "Nombre de CVE" + }, + "agentLimit": { + "label": "Nombre d'agents" + }, + "showAgents": { + "label": "Afficher les agents les plus vulnérables" + } + }, + "title": "Vulnérabilités", + "topCves": "Meilleurs CVE", + "score": "Score", + "agentsShort": "Agents", + "topAgents": "Les agents les plus vulnérables", + "criticalHigh": "Crit / Haut", + "totalTooltip": "Résultats {count} sur les agents {agents}", + "affected": "Les agents {count}", + "empty": "Aucune vulnérabilité détectée", + "distribution": "Répartition de la gravité. Les résultats {unscored} sans score ne sont pas affichés.", + "worst": "Pire: {id} ({score}) sur les agents {agents}" + }, + "wazuhFim": { + "name": "Intégrité du fichier Wazuh", + "description": "Événements récents de surveillance de l'intégrité des fichiers (syscheck)", + "option": { + "range": { + "label": "Intervalle de temps" + }, + "event": { + "label": "Évènements" + }, + "limit": { + "label": "Nombre d'événements" + }, + "includeRegistry": { + "label": "Inclure les événements du registre Windows" + } + }, + "title": "Intégrité du fichier · {range}", + "event": { + "added": "Date d’ajout", + "modified": "Modifié", + "deleted": "Supprimé", + "unknown": "Modifié" + }, + "empty": "Aucun événement d'intégrité de fichier pendant cette période", + "user": "par {user}", + "registry": "Registre" + }, + "wazuhAuthFailures": { + "name": "Échec d'authentification Wazuh", + "description": "Connexions échouées et alertes de force brute par agent avec des lignes d'étincelles horaires", + "option": { + "hours": { + "label": "Fenêtre de temps (heures)" + }, + "limit": { + "label": "Nombre d'agents" + }, + "showSourceIps": { + "label": "Afficher les meilleures adresses IP source" + } + }, + "title": "Échec d'authentification · {hours}h", + "seriesTooltip": "Tous les agents au cours de la dernière {hours}h", + "peak": "Pic {count}/seau", + "empty": "Aucune connexion échouée dans cette période", + "failed": "Connexion échouée", + "failedHint": "Échec d'authentification unique (sshd, PAM, connexion Windows, utilisateurs invalides)", + "bruteForce": "Force brute", + "bruteForceHint": "Règles de force brute corrélées (échecs multiples en une courte période, MITRE T1110)", + "sourceIps": "IP source", + "ipTooltip": "{ip} : {count} échecs", + "bruteForceCount": "Force brute {count}" } }, "widgetPreview": { @@ -4071,7 +5732,76 @@ } }, "board": { + "emptyState": { + "title": "Construisez votre première vue", + "description": "Ajoutez un widget ou une application, ou connectez un service et utilisez ses données sur ce tableau.", + "addWidget": "Ajouter un widget", + "addApp": "Ajouter une application", + "connectService": "Connecter le service" + }, + "setupChecklist": { + "title": "Rendre ce tableau utile", + "description": "Récupérez où vous vous êtes arrêté. Progression suit le contenu déjà sur ce tableau.", + "collapse": "Réduire la liste de contrôle de configuration", + "dismiss": "Rejeter la liste de contrôle de configuration", + "resume": "Poursuivre la configuration ({completed}/{total})", + "progress": "Progression de la configuration du tableau", + "step": { + "content": { + "label": "Ajouter un contenu utile", + "description": "Choisissez un widget et configurez-le avant de le placer." + }, + "app": { + "label": "Épingler une application", + "description": "Gardez un service ou un outil en un clic loin de ce tableau." + }, + "service": { + "label": "Connecter un service", + "description": "Débloquer les données et actions en direct pour les widgets compatibles.", + "permissionDescription": "Un administrateur peut connecter un service pour déverrouiller les données en direct.", + "action": "Connecter" + } + } + }, "action": { + "addContent": "Ajouter un contenu de tableau", + "settings": "Paramètres du tableau", + "switch": "Changer de carte", + "switcher": { + "title": "Changer de carte", + "search": { + "empty": "Aucun tableau ne correspond à \"{search}\"." + }, + "results": "Tableaux disponibles", + "preview": "Aperçu de {name} avec {count} éléments", + "currentHidden": "Tableau actuel: {name}", + "keyboard": { + "navigate": "Navigate", + "open": "Ouvert", + "instructions": "Tapez pour filtrer les tableaux. Utilisez les flèches pour vous déplacer à travers les résultats et entrez pour ouvrir un tableau." + }, + "empty": { + "title": "Aucun autre tableau", + "description": "Il n'y a aucun autre tableau auquel vous pouvez accéder." + }, + "error": "Les tableaux n'ont pas pu être chargés." + }, + "create": { + "availability": { + "checking": "Vérification de la disponibilité…", + "available": "{name} est disponible" + }, + "notification": { + "success": { + "title": "Tableau créé", + "message": "Le tableau {name} a été créé" + }, + "error": { + "title": "Impossible de créer le tableau", + "message": "La carte {name} n'a pas pu être créée" + } + } + }, "duplicate": { "title": "Dupliquer le tableau", "message": "Cela va dupliquer le tableau {name} avec tout son contenu. Si les widgets référencent des intégrations, que vous n'êtes pas autorisé à utiliser, ils seront supprimés.", @@ -4087,14 +5817,19 @@ } }, "edit": { + "enter": "Modifier le tableau", + "save": "Enregistrer le tableau", + "exit": "Quitter le mode édition", "notification": { "success": { - "title": "Modifications appliquées avec succès", "message": "Le tableau a été enregistré avec succès" }, "error": { - "title": "Impossible d'appliquer les modifications", "message": "Le tableau n'a pas pu être enregistré" + }, + "loadError": { + "title": "Impossible de démarrer l'édition", + "message": "L'éditeur du tableau de bord n'a pas pu être chargé. Votre tableau de bord est toujours disponible en mode vue." } }, "confirmLeave": { @@ -4102,62 +5837,6 @@ "message": "Vous avez des modifications non enregistrées, êtes-vous sûr(e) de vouloir quitter ?" } }, - "oldImport": { - "label": "Importer depuis homarr avant la version 1.0.0", - "notification": { - "success": { - "title": "Importation réussie", - "message": "Le tableau a été importé avec succès" - }, - "error": { - "title": "Échec de l'importation", - "message": "Le tableau n'a pas pu être importé, vérifiez les logs pour plus de détails" - } - }, - "form": { - "file": { - "label": "Sélectionnez un fichier JSON", - "invalidError": "Fichier de configuration invalide" - }, - "apps": { - "label": "Applications", - "avoidDuplicates": { - "label": "Éviter les doublons", - "description": "Ignore les applications où une application avec le même href existe déjà" - }, - "onlyImportApps": { - "label": "Importer uniquement les applications", - "description": "Ajoute uniquement les applications, le tableau doit être recréé manuellement" - } - }, - "name": { - "label": "Nom du tableau" - }, - "screenSize": { - "label": "Taille de l'écran", - "description": "Dans les versions antérieures à 1,0 il existait trois modes différents, de sorte que vous pouviez choisir le nombre de colonnes pour chaque taille d'écran.", - "option": { - "sm": "Petite", - "md": "Moyenne", - "lg": "Grande" - } - }, - "sidebarBehavior": { - "label": "Comportement de la barre latérale", - "description": "Les barres latérales ont été enlevées en 1.0, vous pouvez sélectionner ce qui doit se passer avec les éléments à l'intérieur.", - "option": { - "lastSection": { - "label": "Dernière section", - "description": "La barre latérale sera affichée sous la dernière section" - }, - "removeItems": { - "label": "Retirer des éléments", - "description": "Les éléments contenus dans la barre latérale seront supprimés" - } - } - } - } - }, "quickCreateApp": { "modal": { "title": "Créer une application à la volée", @@ -4165,6 +5844,12 @@ } } }, + "landmark": { + "canvas": "Tableau de bord", + "leftRail": "Rail du tableau de bord gauche", + "rightRail": "Rail du tableau de bord droit", + "items": "Éléments du tableau de bord" + }, "field": { "pageTitle": { "label": "Titre de la page" @@ -4234,7 +5919,8 @@ } }, "primaryColor": { - "label": "Couleur principale" + "label": "Couleur principale", + "locked": "Votre administrateur conserve la couleur de la marque de l'instance sur chaque tableau." }, "secondaryColor": { "label": "Couleur secondaire" @@ -4274,9 +5960,6 @@ "xl": "Très grand" } }, - "name": { - "label": "Nom" - }, "isPublic": { "label": "Public", "description": "Les tableaux publics sont accessibles à tous, même sans compte." @@ -4296,9 +5979,44 @@ "title": "Mise en page", "responsive": { "title": "Mises en page adaptatives", + "description": "Chaque mise en page conserve ses propres positions et tailles de widget. Mobile et Base sont toujours disponibles; ajoutez des mises en page personnalisées à n'importe quel point d'arrêt supplémentaire.", "action": { "add": "Ajouter une mise en page" } + }, + "role": { + "mobile": "Mobile", + "base": "Base", + "custom": "Personnalisé" + }, + "custom": { + "defaultName": "Mise en page personnalisée" + }, + "mobile": { + "breakpointDescription": "Mobile est toujours utilisé à partir de 0px jusqu'au point d'arrêt de la mise en page suivant." + }, + "preview": { + "columns": "colonnes", + "empty": "Cette mise en page est vide", + "dynamicSection": "Section dynamique", + "editorWidthLabel": "{layoutName} · {width}px" + }, + "reset": { + "action": "Remise à zéro depuis la base", + "confirm": { + "title": "Reset {layoutName}?", + "message": "Ceci remplace toutes les positions et tailles enregistrées dans cette mise en page par une nouvelle mise en page générée à partir de la Base. Cela ne peut pas être annulé." + } + }, + "edit": { + "action": "Modifier la mise en page", + "saveAndEdit": "Enregistrer et éditer", + "save": "Enregistrer la mise en page", + "cancel": { + "action": "Annuler l'édition de la mise en page", + "title": "Annuler les modifications de la mise en page ?", + "message": "Vos modifications non enregistrées de cette mise en page seront ignorées." + } } }, "background": { @@ -4335,10 +6053,7 @@ "rename": { "label": "Renommer le tableau", "description": "Modifier le nom cassera tous les liens vers ce tableau.", - "button": "Modifier le nom", - "modal": { - "title": "Renommer le tableau" - } + "button": "Modifier le nom" }, "visibility": { "label": "Modifier la visibilité du tableau", @@ -4362,9 +6077,7 @@ } }, "delete": { - "label": "Supprimer ce tableau", "description": "Une fois que vous supprimez un tableau, il n'y a pas de retour en arrière. Soyez certain de votre choix.", - "button": "Supprimer ce tableau", "confirm": { "title": "Supprimer le tableau de bord", "description": "Êtes-vous sûr de vouloir supprimer ce tableau ? Cela supprimera définitivement le tableau et tout son contenu." @@ -4409,28 +6122,41 @@ }, "layout": { "field": { - "name": { - "label": "Nom" - }, "columnCount": { "label": "Nombre de colonnes" }, "breakpoint": { "label": "Point de rupture", "description": "La mise en page sera utilisée sur tous les écrans plus grands que ce point de rupture jusqu'au point de rupture suivant." + }, + "gutters": { + "label": "Barres latérales fixes", + "description": "Réservez jusqu'à trois colonnes du tableau de bord de chaque côté. Le reste de la toile se recharge automatiquement.", + "left": { + "label": "Left sidebar", + "description": "Garder cette zone visible pendant que le tableau de bord fait défiler.", + "thumbLabel": "Left sidebar width" + }, + "right": { + "label": "Barre latérale droite", + "description": "Garder cette zone visible pendant que le tableau de bord fait défiler.", + "thumbLabel": "Largeur de la barre latérale droite" + }, + "width": { + "label": "Largeur dans les colonnes" + }, + "preview": { + "label": "Aperçu de la mise en page du tableau de bord" + } } } }, "management": { "metaTitle": "Administration", - "title": { - "morning": "Bonjour {username}", - "afternoon": "Bonjour {username}", - "evening": "Bonsoir {username}" - }, "notFound": { "title": "Non trouvé", - "text": "Impossible de trouver la ressource demandée" + "text": "Impossible de trouver la ressource demandée", + "backToHome": "Retour à la page d'accueil de la gestion" }, "error": { "title": "", @@ -4439,19 +6165,10 @@ }, "navbar": { "items": { - "workshop": "Workshop", "home": "Accueil", - "boards": "Tableaux de bord", - "apps": "Applications", - "integrations": "Intégrations", - "searchEngies": "Moteurs de recherche", - "medias": "Médias", "users": { - "label": "Utilisateurs", "items": { - "manage": "Gérer", - "invites": "Invitations", - "groups": "Groupes" + "manage": "Gérer" } }, "tools": { @@ -4459,10 +6176,7 @@ "items": { "docker": "Docker", "kubernetes": "Kubernetes", - "logs": "Journaux", "api": "API", - "certificates": "Certificats", - "tasks": "Tâches", "backup": "Sauvegarde" } }, @@ -4476,21 +6190,12 @@ "sourceCode": "Code source" } }, - "about": "À propos" + "about": "À propos", + "assistant": "Assistant" } }, "page": { "home": { - "statistic": { - "board": "Tableaux de bord", - "user": "Utilisateurs", - "invite": "Invitations", - "integration": "Intégrations", - "app": "Applications", - "group": "Groupes", - "searchEngine": "Moteurs de recherche", - "media": "Médias" - }, "statisticLabel": { "boards": "Tableaux de bord", "resources": "Ressources", @@ -4528,13 +6233,8 @@ "tooltip": "Ce tableau s'affichera comme votre tableau mobile" } }, - "duplicate": { - "label": "Dupliquer le tableau" - }, "delete": { - "label": "Supprimer définitivement", "confirm": { - "title": "Supprimer le tableau de bord", "description": "Êtes-vous sûr de vouloir supprimer le tableau {name} ?" } } @@ -4543,28 +6243,82 @@ "public": "Ce tableau est public", "private": "Ce tableau est privé" }, - "noResults": { - "title": "Aucun tableau de bord pour l'instant" + "preview": { + "label": "Aperçu de la mise en page pour {name}, avec {count} éléments", + "unknownCreator": "Créateur inconnu" }, - "modal": { - "createBoard": { - "field": { - "name": { - "label": "Nom" - } - } - } + "noResults": { + "title": "Aucun tableau de bord pour l'instant", + "description": "Créez un tableau pour organiser vos applications et widgets en un seul endroit." } }, "media": { "includeFromAllUsers": "Inclure les médias de tous les utilisateurs" }, "user": { - "back": "Retourner à la liste des utilisateurs", "fieldsDisabledExternalProvider": "Certains champs sont désactivés car ils sont gérés par un fournisseur d'authentification externe.", "setting": { "general": { "title": "Général", + "header": { + "title": "Studio d'en-tête", + "badge": "Personnels", + "description": "Faites glisser les commandes n'importe où dans la rangée. Restez fixe à gauche, au centre et à droite pendant que les contrôles se déplacent autour d'eux.", + "device": { + "desktop": "Bureau", + "mobile": "Mobile" + }, + "zones": { + "left": "Gauche", + "center": "Centrer", + "right": "Droite" + }, + "action": { + "hide": "Cacher l'en-tête", + "show": "Afficher l'en-tête", + "configure": "Déplacer ou configurer {item}", + "remove": "Retirer {item}", + "dropIntoZone": "Déplacer dans la section {zone}" + }, + "preview": { + "board": "Aperçu du tableau de bord pour {name}", + "empty": "Aucune disposition du tableau de bord n'est disponible" + }, + "available": { + "title": "Commandes disponibles", + "description": "Ajoutez une commande, puis faites glisser son bouton complet dans la position ci-dessus.", + "requiredAlways": "Ce contrôle est nécessaire, mais vous pouvez le déplacer n'importe où dans l'en-tête.", + "allAdded": "Chaque contrôle intégré est déjà dans votre en-tête.", + "add": "Ajouter {item}", + "boardShortcut": "Raccourci de la carte", + "chooseBoard": "Choisir un tableau" + }, + "configuration": { + "description": "Ce contrôle reste la même taille que dans l'en-tête en direct.", + "searchDisplay": { + "input": "Barre de recherche", + "icon": "Icône uniquement" + }, + "logoDisplay": { + "logo": "Logo uniquement", + "logoAndText": "Logo + texte" + } + }, + "items": { + "logo": "Logo", + "search": "Rechercher", + "home": "Tableau de bord", + "boardSwitcher": "Tableaux de bord", + "assistant": "Assistant", + "docker": "Docker", + "boardEdit": "Modifier le tableau", + "boardSettings": "Paramètres du tableau", + "settings": "Vos paramètres", + "themeToggle": "Basculer le thème", + "user": "Compte client", + "boardUnavailable": "Tableau indisponible" + } + }, "item": { "language": "Langue et région", "board": { @@ -4598,14 +6352,10 @@ }, "security": { "title": "Sécurité" - }, - "board": { - "title": "Tableaux de bord" } }, "list": { - "metaTitle": "Gérer les utilisateurs", - "title": "Utilisateurs" + "metaTitle": "Gérer les utilisateurs" }, "edit": { "metaTitle": "Modifier l'utilisateur {username}" @@ -4659,9 +6409,6 @@ } }, "field": { - "id": { - "label": "ID" - }, "creator": { "label": "Créateur" }, @@ -4685,10 +6432,7 @@ }, "setting": { "title": "Paramètres", - "alert": "Les paramètres du groupe sont priorisés par l'ordre des groupes dans la liste. Les paramètres du haut remplacent les paramètres du bas.", - "board": { - "title": "Tableaux de bord" - } + "alert": "Les paramètres du groupe sont priorisés par l'ordre des groupes dans la liste. Les paramètres du haut remplacent les paramètres du bas." }, "members": { "title": "Membres", @@ -4696,10 +6440,7 @@ "notFound": "Aucun membre n'a été trouvé" }, "permissions": { - "title": "Permissions", - "form": { - "unsavedChanges": "Vous avez des modifications non enregistrées !" - } + "title": "Permissions" } } }, @@ -4708,12 +6449,10 @@ "notification": { "success": { "message": "Paramètres enregistrés avec succès" - }, - "error": { - "message": "Échec de l'enregistrement des paramètres" } }, "section": { + "analyticsDocumentation": "Voir exactement quelles données d'analyse Homarr collecte", "analytics": { "title": "Statistiques", "general": { @@ -4742,7 +6481,6 @@ } }, "board": { - "title": "Tableaux de bord", "homeBoard": { "label": "Tableau de bord global", "mobileLabel": "Tableau de bord mobile global", @@ -4761,7 +6499,6 @@ } }, "user": { - "title": "Utilisateurs", "enableGravatar": { "label": "Activer Gravatar", "description": "Revient aux avatars des utilisateurs de Libravatar/Gravatar quand aucun avatar personnalisé n'est défini et qu'un e-mail est configuré" @@ -4777,12 +6514,86 @@ "appearance": { "title": "Apparence", "defaultColorScheme": { - "label": "Schéma de couleurs par défaut", + "label": "Schéma de couleurs par défaut" + } + }, + "branding": { + "title": "Image de marque Instance", + "groups": { + "identity": "Identité", + "appearance": "Apparence", + "customCss": "Custom CSS", + "authentication": "Authentification" + }, + "identity": { + "description": "Le logo de l'application est la marque plus grande utilisée dans l'application, sur les pages de connexion, et pour les applications installées. L'icône du navigateur (favicon) est le petit carré utilisé dans les onglets et les signets; lorsqu'il est vide, il revient au logo de l'application." + }, + "appName": { + "label": "Nom de l'application" + }, + "greeting": { + "label": "Accueil personnalisé" + }, + "logo": { + "label": "Logo de l'application", + "placeholder": "/fr/logo/logo.png" + }, + "favicon": { + "label": "Icône du navigateur (favicon)", + "placeholder": "Utilise le logo de l'application" + }, + "primaryColor": { + "label": "Couleur principale" + }, + "secondaryColor": { + "label": "accent secondaire" + }, + "lockPrimaryColor": { + "label": "Garder cette couleur sur chaque tableau", + "description": "Empêche les couleurs du tableau de remplacer l'accent." + }, + "signInBackground": { + "label": "Fond d'authentification", + "placeholder": "https://example.com/background.jpg" + }, + "signInOverlay": { + "label": "Superposition d'arrière-plan" + }, + "defaultRadius": { + "label": "Style de coin", "options": { - "auto": "Automatique", - "light": "Clair", - "dark": "Sombre" + "xs": "Poignée", + "sm": "Discret", + "md": "Equilibré", + "lg": "Arrondi", + "xl": "Douce" } + }, + "customCss": { + "label": "CSS global personnalisé", + "description": "Appliqué à chaque page. Le CSS personnalisé du tableau peut le remplacer." + }, + "authVisibility": { + "description": "Choisissez ce qui apparaît sur chaque page d'authentification.", + "appName": "Nom de l'application", + "logo": "Logo de l'application", + "greeting": "Salutation" + }, + "summary": { + "title": "Branding actuel", + "cornerStyle": "Style de coin", + "palette": "Palette", + "backgroundConfigured": "Arrière-plan personnalisé · {overlay}% superposition", + "backgroundDefault": "Arrière-plan par défaut", + "greetingConfigured": "Accueil personnalisé", + "greetingDefault": "Salutation par défaut", + "boardColorLocked": "Couleur du tableau verrouillé", + "boardColorFlexible": "Couleurs autorisées", + "appName": "Nom de la tâche", + "logo": "Logo", + "greeting": "Salutation", + "on": "Activé", + "off": "Désactivé" } }, "culture": { @@ -4790,12 +6601,177 @@ "defaultLocale": { "label": "Langue par défaut" } + }, + "assistant": { + "loading": "Chargement de la configuration de l'assistant", + "title": "Assistant", + "description": "Connectez un point de terminaison de modèle compatible OpenAI pour l'assistant d'instance.", + "security": { + "description": "Les clés API et les valeurs d'en-tête supplémentaires sont chiffrées dans la base de données Homarr. Elles ne sont jamais retournées aux navigateurs. Les requêtes de modèles sont envoyées depuis le serveur Homarr directement au point de terminaison configuré." + }, + "overview": { + "connectionReady": "Connexion prête", + "unsavedChanges": "Modifications non enregistrées", + "setupRequired": "Configuration requise", + "disabled": "Désactivé", + "noModel": "Aucun modèle sélectionné" + }, + "connection": { + "endpointTitle": "Fournisseur et point de terminaison", + "description": "Choisissez un préréglage ou connectez n'importe quel service qui implémente l'API OpenAI Chat Completions.", + "save": "Enregistrer la connexion fournisseur" + }, + "credentials": { + "title": "Identifiants", + "description": "Ajoutez les secrets dont ce point de terminaison a besoin. Les valeurs stockées restent chiffrées et ne peuvent pas être lues.", + "required": "Clé requise", + "optional": "Clé optionnelle", + "workshop": "Connexion GitHub par utilisateur" + }, + "provider": { + "title": "Fournisseur", + "groups": { + "free": "Libre avec Homarr", + "hosted": "Fournisseurs hébergés", + "local": "Fournisseurs locaux", + "custom": "Personnalisé" + }, + "options": { + "homarr": { + "description": "Un nombre limité d'utilisations d'Assistant est gratuit chaque jour, payé par l'équipe Homarr. Connectez-vous à l'Atelier Communautaire pour utiliser votre autorisation." + }, + "openrouter": { + "description": "Routage de modèles hébergés avec un grand catalogue de modèles fonctionnant avec des outils." + }, + "openai": { + "description": "Complétions de chat OpenAI via le point de terminaison officiel de l'API." + }, + "anthropic": { + "description": "Le point de terminaison de compatibilité OpenAI SDK de Claude à travers Anthropic." + }, + "google-gemini": { + "description": "Gemini via le point de terminaison API compatible OpenAI de Google." + }, + "xai": { + "description": "Modèles Grok à travers l'API compatible OpenAI de xAI." + }, + "groq": { + "description": "Inférence hébergée rapidement via l'API compatible OpenAI de Groq." + }, + "mistral": { + "description": "Modèles Mistral à travers l’API officielle." + }, + "deepseek": { + "description": "Les modèles DeepSeek à travers son API compatible OpenAI." + }, + "together": { + "description": "Hébergé des modèles ouverts à travers l'API compatible OpenAI de Ensemble." + }, + "ollama": { + "description": "Un serveur Ollama local ou réseau utilisant son API compatible OpenAI." + }, + "lm-studio": { + "description": "Un serveur local LM Studio avec compatibilité OpenAI activée." + }, + "llama-cpp": { + "description": "Un serveur local ou réseau llama.cpp utilisant son API compatible OpenAI." + }, + "custom": { + "label": "Point de terminaison personnalisé", + "description": "Tout autre point de terminaison compatible avec les complétions de chat OpenAI." + } + }, + "homarrAuth": { + "title": "Des utilisations quotidiennes gratuites sont incluses", + "description": "Aucune clé API n'est nécessaire. L'équipe d'Homarr couvre un nombre limité d'utilisations pour vous chaque jour. Connectez-vous à l'Atelier Communautaire pour garder votre allocation séparée." + } + }, + "baseUrl": { + "title": "URL de base de l'API", + "description": "Inclure le préfixe de l'API, généralement /v1. Dans les conteneurs, localhost fait référence au conteneur Homarr." + }, + "apiKey": { + "title": "Clé API", + "required": "Requis par ce fournisseur. La valeur est chiffrée et en lecture seule.", + "optional": "Optionnel pour les terminaux locaux. Laissez vide lorsque le service ne nécessite pas d'authentification au porteur.", + "placeholder": "Entrez une clé API", + "savedTitle": "Clé API chiffrée enregistrée", + "savedDescription": "Homarr peut utiliser cette clé, mais elle ne peut pas afficher ou récupérer sa valeur.", + "remove": "Supprimer la clé API enregistrée", + "removeFlow": { + "title": "Supprimer la clé API enregistrée ?", + "description": "Ce fournisseur nécessite une clé API. La retirer peut arrêter la découverte du modèle et les réponses de l'assistant jusqu'à ce qu'une autre clé soit enregistrée.", + "optionalDescription": "Le point de terminaison cessera de recevoir l'authentification du porteur après la suppression de cette clé. Confirmez qu'il accepte les requêtes non authentifiées ou utilise un autre en-tête stocké.", + "cancel": "Garder la clé enregistrée", + "confirm": "Supprimer la clé API" + } + }, + "headers": { + "title": "En-têtes de requête supplémentaires", + "description": "En-têtes d'authentification ou de routage optionnels. Les valeurs d'en-tête sont chiffrées et en écriture seule.", + "add": "Ajouter un en-tête", + "name": "Nom de l'en-tête", + "value": "Valeur de l'en-tête", + "valuePlaceholder": "Valeur de routage ou de secret", + "remove": "Supprimer l'en-tête", + "configured": "Des en-têtes chiffrés supplémentaires sont configurés. L'ajout d'en-têtes remplace l'ensemble complet stocké.", + "empty": "Aucun en-tête supplémentaire n'est stocké pour ce fournisseur.", + "savedBadge": "En-têtes enregistrés", + "pendingRemoval": "Suppression en attente", + "clear": "Supprimer les en-têtes stockés lors de la sauvegarde", + "keep": "Garder les en-têtes stockés" + }, + "model": { + "title": "Modélisation", + "description": "Sélectionnez un modèle découvert ou entrez un identifiant exact du modèle de terminaison.", + "placeholder": "ID du modèle", + "refresh": "Rafraîchir les modèles", + "chooseModel": "Choisissez le modèle utilisé pour les nouvelles conversations.", + "discoveryPath": "Chemin de découverte du modèle", + "discoveryPathDescription": "Ajouté à l'URL de base de l'API. Laisser vide pour désactiver la découverte et utiliser un ID de modèle manuel.", + "manual": "Entrez un ID de modèle manuellement ou enregistrez la connexion pour découvrir les modèles.", + "manualFallback": "La découverte n'est pas disponible. Vous pouvez toujours entrer un ID de modèle manuellement.", + "saveConnectionFirst": "Enregistrez la connexion du fournisseur avant de choisir un modèle.", + "discovering": "Actualisation des modèles disponibles auprès de ce fournisseur…", + "discovered": "{count, plural, one {Modèle # découvert. Le support des outils dépend du point de terminaison et du modèle sélectionnés.} other {Les # modèles découverts. Le support des outils dépend du point de terminaison et du modèle sélectionnés.}}", + "discoveryFailed": "La découverte du modèle n'est pas terminée", + "context": "Fenêtre de contexte {count}", + "toolsConfirmed": "Outils annoncés", + "toolsUnknown": "Vérifier le support de l'outil" + }, + "serverTools": { + "title": "Outils serveur", + "webSearch": { + "label": "Recherche sur le Web", + "description": "Autoriser le modèle à rechercher sur le Web en direct via OpenRouter lorsqu'une requête nécessite des informations actuelles. L'utilisation de la recherche est facturée séparément par OpenRouter.", + "proxyDescription": "Envoyer l'outil de recherche web d'OpenRouter à cet endroit. Activer cette option uniquement lorsque le point de terminaison personnalisé redirige le format des outils de serveur OpenRouter, comme un proxy de routeur Homarr.", + "limit": "Le modèle décide quand effectuer une recherche, avec une limite de 3 recherches et 5 résultats par recherche pour chaque requête." + } + }, + "enabled": { + "label": "Activer l'Assistant", + "description": "Affiche l'assistant à tous les utilisateurs connectés. Les autorisations existantes d'Homarr s'appliquent toujours à chaque appel d'outil interne." + }, + "save": "Enregistrer l'assistant", + "notification": { + "connectionSaved": { + "title": "Connexion fournisseur enregistrée", + "message": "Le point de terminaison et les identifiants chiffrés sont prêts pour la sélection du modèle.", + "credentialsCleared": "Le point de terminaison a changé, les identifiants précédents ont été effacés. Ajoutez des identifiants pour la nouvelle destination si nécessaire." + }, + "saved": { + "title": "Paramètres de l'assistant enregistrés", + "message": "Le nouveau modèle et les paramètres de disponibilité sont actifs." + }, + "error": { + "title": "Les paramètres de l'assistant n'ont pas pu être sauvegardés" + } + } } } }, "tool": { "tasks": { - "title": "Tâches", "status": { "idle": "Inactif", "running": "En cours", @@ -4813,6 +6789,11 @@ "label": "Pings" } }, + "action": { + "run": "Exécuter {name} maintenant", + "enable": "Activer {name}", + "disable": "Désactiver {name}" + }, "interval": { "seconds": "Chaque {interval, plural, one {}=1 {seconde} other {# secondes}}", "minutes": "Chaque {interval, plural, one {}=1 {minute} other {# minutes}}", @@ -4828,13 +6809,7 @@ } } }, - "settings": { - "title": "Paramètres de la tâche pour {jobName}" - }, "field": { - "name": { - "label": "Nom" - }, "interval": { "label": "Intervalle de planification" }, @@ -4848,11 +6823,6 @@ "table": { "search": "Rechercher des tâches {count}..." }, - "action": { - "refresh": { - "label": "Rafraîchir" - } - }, "refresh": { "success": { "message": "Tâches actualisées avec succès" @@ -4886,7 +6856,6 @@ } }, "api": { - "title": "API", "modal": { "createApiToken": { "title": "Jeton API créé", @@ -4912,7 +6881,6 @@ }, "table": { "header": { - "id": "ID", "createdBy": "Créé par", "actions": "Actions" } @@ -4968,43 +6936,12 @@ "availableTools": { "title": "", "description": "", - "columnType": "", - "columnName": "", - "columnDescription": "" - }, - "troubleshooting": { - "title": "", - "missingHeader": { - "title": "", - "description": "" - }, - "invalidFormat": { - "title": "", - "description": "" - }, - "invalidKey": { - "title": "", - "description": "" - }, - "connectionRefused": { - "title": "", - "description": "" - }, - "toolsNotAppearing": { - "title": "", - "description": "" + "filteredDescription": "Outils correspondants {count} dans les catégories étendues.", + "search": "Outils de recherche", + "noResults": { + "title": "Aucun outil ne correspond à cette recherche", + "description": "Aucun outil MCP ne correspond à \"{search}\". Essayez un espace de noms, un nom d'outil ou une description." } - }, - "copy": "", - "oneClick": { - "title": "", - "subtitle": "", - "vsCode": "", - "cursor": "", - "copyUrl": "", - "copied": "", - "copyHint": "", - "manualConfig": "" } } } @@ -5021,47 +6958,12 @@ "title": "Exportation de données sensibles", "warningTitle": "Cette exportation contient l'intégralité de votre base de données.", "warningBody": "La sauvegarde comprend tous les utilisateurs, les secrets d'intégration (chiffrés), les clés API, les configurations de tableaux de bord et les données d'application. Stockez le fichier exporté en lieu sûr et ne le partagez pas.", - "typePrompt": "Tapez \"{phrase}\" pour continuer", - "submit": "Exporter la base de données", - "cancel": "Annuler" + "submit": "Exporter la base de données" } }, "import": { "title": "Restaurer la base de données", - "description": "Téléversez une sauvegarde ZIP précédemment exportée pour restaurer votre base de données. Cela remplacera l'intégralité de votre base de données. Si la sauvegarde a été créée avec une clé de chiffrement différente, les secrets seront automatiquement rechiffrés.", - "warning": "Restaurer une sauvegarde remplacera complètement votre base de données actuelle et redémarrera l'application. Cette action est irréversible.", - "dropzone": { - "title": "Déposez votre fichier ZIP de sauvegarde ici ou cliquez pour parcourir", - "description": "Seuls les fichiers .zip provenant d'une sauvegarde SQLite Homarr sont acceptés" - }, - "changeFile": "Changer le fichier", - "button": "Restaurer la base de données", - "success": { - "title": "Restauration terminée", - "message": "La base de données a été restaurée avec succès. L'application redémarre..." - }, - "error": "Échec de l'importation" - }, - "preview": { - "title": "Contenu de la sauvegarde", - "exported": "Exporté le {date}", - "loading": "Analyse du fichier de sauvegarde...", - "errorTitle": "Erreur d'aperçu", - "entity": "Entité", - "count": "Nombre", - "boards": "Tableaux de bord", - "entities": { - "board": "Tableaux de bord", - "user": "Utilisateurs", - "app": "Applications", - "integration": "Intégrations", - "item": "Widgets", - "media": "Médias", - "search_engine": "Moteurs de recherche" - }, - "analyzeError": "Échec de l'analyse du fichier de sauvegarde", - "invalidMissingMetadata": "Sauvegarde invalide : metadata.json manquant", - "invalidMissingDb": "Sauvegarde invalide : db.sqlite manquant" + "description": "Téléversez une sauvegarde ZIP précédemment exportée pour restaurer votre base de données. Cela remplacera l'intégralité de votre base de données. Si la sauvegarde a été créée avec une clé de chiffrement différente, les secrets seront automatiquement rechiffrés." }, "restore": { "dropzone": { @@ -5071,29 +6973,20 @@ "analyzing": "Analyse de la sauvegarde...", "changeFile": "Changer le fichier", "continueToRestore": "Continuer vers la restauration", - "tryAgain": "Réessayer", "analysisError": "Erreur d'analyse", "preview": { "title": "Contenu de la sauvegarde", "exported": "Exporté le {date}", "entity": "Entité", "count": "Nombre", - "boards": "Tableaux de bord", "entities": { - "board": "Tableaux de bord", - "user": "Utilisateurs", - "app": "Applications", - "integration": "Intégrations", - "item": "Widgets", - "media": "Médias", - "search_engine": "Moteurs de recherche" + "item": "Widgets" }, "migrationsApplied": "{count} migration appliquée", "migrationsAppliedPlural": "{count} migrations appliquées", "migrationsOlderVersion": "Cette sauvegarde provient d'une version plus ancienne de Homarr. {count} migration de schéma a été appliquée pour la mettre à jour.", "migrationsOlderVersionPlural": "Cette sauvegarde provient d'une version plus ancienne de Homarr. {count} migrations de schéma ont été appliquées pour la mettre à jour.", "migrationsUpToDate": "Le schéma de base de données est à jour ({count} migrations appliquées)", - "upToDate": "À jour", "migrationsPending": "{count} en attente" }, "migration": { @@ -5104,21 +6997,21 @@ "title": "Action destructive", "warningTitle": "Cela remplacera définitivement l'intégralité de votre base de données.", "warningBody": "Tous les tableaux, utilisateurs, applications, intégrations, paramètres et sessions actuels seront perdus. Cette action est irréversible. L'application redémarrera après la restauration.", - "typePrompt": "Tapez \"{phrase}\" pour continuer", - "cancel": "Annuler", "submit": "Restaurer la base de données" }, "progress": { "title": "Restauration de la base de données...", - "extracting": "Extraction de l'archive de sauvegarde", - "migrating": "Application des migrations de base de données", - "encrypting": "Rechiffrement des secrets d'intégration", - "swapping": "Remplacement du fichier de base de données", - "restarting": "Redémarrage du serveur" + "restarting": "Redémarrage du serveur", + "relogin": "Restauration de la base de données invalidée de votre session actuelle. Homarr vous enverra la connexion lorsque le serveur sera prêt." }, "complete": { "title": "Restauration terminée", - "message": "La base de données a été restaurée avec succès. Le serveur redémarre — veuillez rafraîchir la page dans quelques secondes." + "message": "La base de données a été restaurée avec succès. Le serveur redémarre — veuillez rafraîchir la page dans quelques secondes.", + "button": "Connectez-vous maintenant" + }, + "timeout": { + "title": "Le serveur n'est pas revenu en ligne", + "message": "La restauration de la base de données est terminée, mais Homarr n'est plus prêt. Réessayez la vérification de connexion ou actualisez cette page manuellement." }, "failed": { "title": "Échec de la restauration" @@ -5126,6 +7019,9 @@ "invalidMissingMetadata": "Sauvegarde invalide : metadata.json manquant", "invalidMissingDb": "Sauvegarde invalide : db.sqlite manquant", "analyzeError": "Échec de l'analyse de la sauvegarde" + }, + "confirm": { + "typePrompt": "Tapez \"{phrase}\" pour continuer" } } }, @@ -5160,7 +7056,11 @@ "toggleBoardEdit": "Activer/désactiver le mode d'édition du tableau", "toggleColorScheme": "Basculer en mode clair/sombre", "saveNotebook": "Enregistrer le bloc-notes (uniquement à l'intérieur du widget notebook)", - "openSpotlight": "Ouvrir la recherche" + "openSpotlight": "Ouvrir la recherche", + "openSpotlightApps": "Ouvrir la recherche d'application", + "openSpotlightAssistant": "Ouvrir le mode Assistant", + "openSpotlightPreferences": "Ouvrir le mode de préférences", + "openAssistant": "Ouvrir l'assistant" }, "note": "Astuce : Mod correspond à la touche Ctrl ou ⌘ sur macOS" } @@ -5170,6 +7070,63 @@ }, "docker": { "title": "Conteneurs", + "reconciliation": { + "title": "Configuration assistée de Docker", + "suggestions": "{count, plural, =0 {Aucune suggestion} one {# suggestion} other {# suggestions}}", + "attention": "{count} a besoin d'attention", + "endpointUnavailable": "Certains services n'ont pas pu être vérifiés car ces terminaux ne sont pas disponibles : {names}", + "empty": "Aucun service Docker visible n'a été trouvé.", + "emptyFilter": "Aucun service ne correspond à cette vue.", + "ambiguous": "Plus d'un élément existant pourrait correspondre à ce service. Homarr n'en choisira pas un automatiquement.", + "filter": { + "attention": "A besoin d'attention", + "represented": "Déjà configuré", + "all": "Tout" + }, + "state": { + "newRecognized": "Prêt à se connecter", + "newApp": "Nouveau service", + "represented": "Déjà représenté", + "linked": "Lié", + "moved": "Adresse modifiée" + }, + "url": { + "manual": "Entrez une adresse manuellement" + }, + "health": { + "layer": { + "docker": "Docker", + "integrationConfiguration": "Intégration", + "authentication": "Authentification", + "apiRequest": "API", + "appRepresentation": "Application", + "widgetConfiguration": "Widget", + "widgetQuery": "Requête de widget" + }, + "status": { + "available": "Disponible", + "configured": "Configuré", + "linked": "Lié", + "missing": "Manquant", + "changed": "Modifié", + "unused": "Non utilisé", + "notApplicable": "Non applicable", + "notObserved": "Non observé" + } + }, + "action": { + "review": "Aperçu", + "dismiss": "Refuser", + "restoreDismissed": "Restauration rejetée ({count})", + "setupIntegration": "Mettre en place l'intégration", + "reviewIntegration": "Revoir l'intégration", + "viewRepresentation": "Voir la configuration" + }, + "loadError": { + "title": "L'assistant de configuration de Docker n'a pas pu être chargé", + "message": "Les informations du service Docker sont indisponibles. Réessayez sans quitter cette page." + } + }, "table": { "updated": "Mis à jour {when}", "refresh": { @@ -5182,9 +7139,6 @@ "totalMemory": "" }, "field": { - "name": { - "label": "Nom" - }, "state": { "label": "État", "option": { @@ -5198,9 +7152,6 @@ } }, "stats": { - "cpu": { - "label": "Processeur" - }, "memory": { "label": "Mémoire" } @@ -5263,8 +7214,11 @@ } }, "remove": { - "label": "Supprimer", "confirm": "", + "confirmation": { + "title": "{count, plural, one {Enlever # conteneur?} other {Enlever # conteneurs?}}", + "message": "{count, plural, one {Cela enlève # conteneur en permanence: {names}} other {Cela enlève définitivement # conteneurs: {names}}}" + }, "notification": { "success": { "title": "Conteneurs supprimés", @@ -5276,8 +7230,13 @@ } } }, + "result": { + "failure": { + "title": "Certaines actions du conteneur ont échoué", + "message": "{total, plural, one {{failed} of # action failed : {names}} other {{failed} of # actions failed : {names}}}" + } + }, "refresh": { - "label": "Actualiser", "notification": { "success": { "title": "Conteneurs actualisés", @@ -5308,18 +7267,33 @@ }, "error": { "internalServerError": "Impossible de récupérer les conteneurs Docker", + "endpointUnavailable": "{count, plural, one {# Point de terminaison Docker indisponible : {names}} other {# Points de terminaison Docker indisponibles : {names}}}", "noColumns": "" } }, "kubernetes": { + "context": { + "label": "Contexte Kubernetes", + "loadError": { + "title": "Les contextes Kubernetes n'ont pas pu être chargés", + "message": "Les informations de contexte sont indisponibles. Réessayez sans quitter cette page." + }, + "status": { + "available": "Disponible", + "degraded": "Metrics unavailable", + "unavailable": "Unavailable" + }, + "unavailable": "Ce contexte Kubernetes ne peut pas être atteint. Sélectionnez un autre contexte ou vérifiez ses identifiants et son extrémité.", + "metricsUnavailable": "Ce contexte est joignable, mais Metrics Server n'est pas disponible. L'inventaire reste disponible sans utilisation du CPU en direct et de la mémoire." + }, "cluster": { "title": "Tableau de bord du cluster", "label": "Cluster", "providers": "Fournisseurs", "version": "Version", - "architecture": "Architecture", "capacity": { "title": "Capacité", + "metricsUnavailable": "Le serveur Metrics n'est pas disponible. L'inventaire et la capacité réservée restent visibles, mais l'utilisation du CPU et de la mémoire ne peuvent pas être affichées.", "resource": { "reserved": "Réservé", "used": "Utilisé" @@ -5338,38 +7312,10 @@ } }, "nodes": { - "label": "Nœuds", "field": { - "name": { - "label": "Nom" - }, - "state": { - "label": "État", - "option": { - "ready": "Prêt", - "NotReady": "Pas Prêt" - } - }, - "cpu": { - "label": "CPU" - }, - "memory": { - "label": "RAM" - }, - "pods": { - "label": "Pods" - }, - "operatingSystem": { - "label": "OS" - }, - "architecture": { - "label": "Architecture" - }, + "metricsUnavailable": "Unavailable", "kubernetesVersion": { "label": "Version de Kubernetes" - }, - "creationTimestamp": { - "label": "Créé le" } }, "table": { @@ -5377,43 +7323,17 @@ } }, "namespaces": { - "label": "Espaces de noms", - "field": { - "name": { - "label": "Nom" - }, - "state": { - "label": "État", - "option": { - "active": "Actif", - "terminating": "Arrêt en cours" - } - }, - "creationTimestamp": { - "label": "Créé le" - } - }, "table": { "search": "Rechercher dans {count} espaces de noms" } }, "ingresses": { - "label": "Routes", "field": { - "name": { - "label": "Nom" - }, - "namespace": { - "label": "Espace de noms" - }, "className": { "label": "Nom de la classe" }, "rulesAndPaths": { "label": "Règles & chemins" - }, - "creationTimestamp": { - "label": "Créé le" } }, "table": { @@ -5421,17 +7341,7 @@ } }, "services": { - "label": "Services", "field": { - "name": { - "label": "Nom" - }, - "namespace": { - "label": "Espace de noms" - }, - "type": { - "label": "Type" - }, "ports": { "label": "Ports" }, @@ -5440,9 +7350,6 @@ }, "clusterIP": { "label": "IP du cluster" - }, - "creationTimestamp": { - "label": "Créé le" } }, "table": { @@ -5450,25 +7357,12 @@ } }, "pods": { - "label": "Pods", "field": { - "name": { - "label": "Nom" - }, - "namespace": { - "label": "Espace de noms" - }, "image": { "label": "Image" }, "applicationType": { "label": "Type d'Application" - }, - "status": { - "label": "État" - }, - "creationTimestamp": { - "label": "Créé le" } }, "table": { @@ -5476,51 +7370,17 @@ } }, "secrets": { - "label": "Secrets", - "field": { - "name": { - "label": "Nom" - }, - "namespace": { - "label": "Espace de nom" - }, - "type": { - "label": "Type" - }, - "creationTimestamp": { - "label": "Créé le" - } - }, "table": { "search": "Rechercher dans {count} secrets" } }, "configmaps": { - "label": "ConfigMaps", - "field": { - "name": { - "label": "Nom" - }, - "namespace": { - "label": "Espace de noms" - }, - "creationTimestamp": { - "label": "Créé le" - } - }, "table": { "search": "Rechercher dans {count} configMaps" } }, "volumes": { - "label": "Volumes", "field": { - "name": { - "label": "Nom" - }, - "namespace": { - "label": "Espace de noms" - }, "accessModes": { "label": "Modes d'accès" }, @@ -5535,12 +7395,6 @@ }, "volumeName": { "label": "Nom du volume" - }, - "status": { - "label": "État" - }, - "creationTimestamp": { - "label": "Créé le" } }, "table": { @@ -5549,6 +7403,29 @@ }, "error": { "internalServerError": "Impossible de récupérer les données de Kubernetes" + }, + "field": { + "name": { + "label": "Nom de la tâche" + }, + "namespace": { + "label": "Espace de noms" + }, + "creationTimestamp": { + "label": "Créé le" + }, + "state": { + "label": "État de la tâche" + }, + "status": { + "label": "Statut" + }, + "type": { + "label": "Type de client de téléchargement" + }, + "architecture": { + "label": "Architecture" + } } }, "permission": { @@ -5582,71 +7459,27 @@ }, "navigationStructure": { "manage": { - "workshop": { - "label": "Workshop" - }, "label": "Gérer", - "boards": { - "label": "Tableaux de bord" - }, - "integrations": { - "label": "Intégrations", + "custom-widgets": { "edit": { - "label": "Modifier" + "flow": { + "label": "" + } }, - "new": { - "label": "Nouveau" - } - }, - "search-engines": { - "label": "Moteurs de recherche", - "new": { - "label": "Nouveau" + "workshop": { + "label": "Atelier" }, - "edit": { - "label": "Modifier" - } - }, - "medias": { - "label": "Médias" - }, - "apps": { - "label": "Apps", - "new": { - "label": "Nouveau" - }, - "edit": { - "label": "Modifier" + "publish": { + "label": "Publier dans l'atelier" } }, "users": { - "label": "Utilisateurs", - "create": { - "label": "Créer" - }, "general": "Général", - "security": "Sécurité", - "board": "Tableaux de bord", - "groups": { - "label": "Groupes" - }, - "invites": { - "label": "Invitations" - } + "security": "Sécurité" }, "tools": { "label": "Outils", - "tasks": { - "label": "Tâches" - }, - "docker": { - "label": "Docker", - "logs": { - "label": "Journaux" - } - }, "kubernetes": { - "label": "Kubernetes", "nodes": { "label": "Nœuds" }, @@ -5672,11 +7505,7 @@ "label": "Volumes" } }, - "logs": { - "label": "Journaux" - }, "certificates": { - "label": "Certificats", "hostnames": { "label": "Noms d'hôtes" } @@ -5687,12 +7516,60 @@ }, "about": { "label": "À propos" + }, + "assistant": { + "label": "Assistant" } } }, "search": { "placeholder": "Rechercher quelque chose", "nothingFound": "Aucun résultat", + "modePicker": { + "search": { + "label": "Rechercher", + "placeholder": "Rechercher des applications, des tableaux, des pages, des commandes et des préférences" + }, + "apps": { + "label": "Apps", + "placeholder": "Rechercher des applications, des tableaux et des intégrations" + }, + "command": { + "label": "Commandes", + "placeholder": "Rechercher des actions et des commandes" + }, + "preferences": { + "label": "Préférences", + "placeholder": "Rechercher et modifier les préférences" + }, + "assistant": { + "label": "Assistant", + "placeholder": "Demander à l'assistant" + }, + "external": { + "label": "Web", + "placeholder": "Rechercher avec un moteur de recherche externe" + }, + "media": { + "label": "Média", + "placeholder": "Rechercher un film ou une série", + "fallback": "Rechercher dans les médias \"{query}\"" + }, + "userGroup": { + "label": "Personnes", + "placeholder": "Rechercher des utilisateurs et des groupes" + }, + "continueWith": "Continuer avec", + "dialogAriaLabel": "Menu de commande {mode}", + "navigationLabel": "Modes de recherche", + "modeAriaLabel": "Mode {mode}", + "resultsAriaLabel": "Résultats {mode}", + "footer": { + "navigate": "Navigate", + "open": "Ouvert", + "close": "Fermer" + } + }, "error": { "fetch": "Une erreur s'est produite lors de la récupération des données" }, @@ -5701,7 +7578,6 @@ "help": "Rechercher des applications, des intégrations ou des tableaux", "group": { "app": { - "title": "Applications", "children": { "action": { "open": { @@ -5717,7 +7593,6 @@ } }, "board": { - "title": "Tableaux de bord", "children": { "action": { "open": { @@ -5737,9 +7612,6 @@ "title": "Sélectionnez une action pour le tableau" } } - }, - "integration": { - "title": "Intégrations" } } }, @@ -5768,9 +7640,6 @@ "newBoard": { "label": "Créer un nouveau tableau" }, - "importBoard": { - "label": "Importer un tableau" - }, "newApp": { "label": "Créer une nouvelle application" }, @@ -5840,7 +7709,6 @@ } }, "defaultSearchEngineId": { - "label": "Moteur de recherche par défaut", "children": { "detail": { "title": "Sélectionnez votre moteur de recherche par défaut" @@ -5848,7 +7716,6 @@ } }, "openSearchInNewTab": { - "label": "Ouvrir les résultats de recherche dans un nouvel onglet", "children": { "detail": { "title": "Ouvrir les résultats de recherche dans un nouvel onglet" @@ -5856,7 +7723,6 @@ } }, "ddgBangs": { - "label": "Activer les bangs DuckDuckGo", "children": { "detail": { "title": "Activer les bangs DuckDuckGo" @@ -5871,6 +7737,13 @@ } } }, + "byteUnitSystem": { + "children": { + "detail": { + "title": "Sélectionnez vos unités de taille de données" + } + } + }, "homeBoardId": { "label": "Tableau de bord d'accueil", "children": { @@ -5888,7 +7761,6 @@ } }, "pingIconsEnabled": { - "label": "Utiliser les icônes pour les pings", "children": { "detail": { "title": "Utiliser les icônes pour les pings" @@ -5896,7 +7768,6 @@ } }, "enableRightClickOnWidgets": { - "label": "", "children": { "detail": { "title": "" @@ -5924,6 +7795,7 @@ "description": "Commencez à taper pour rechercher vos intégrations de demande de médias", "disabled": { "noIntegration": "Ajoutez une intégration Overseerr, Jellyseerr ou Seerr pour activer la recherche de médias.", + "signInRequired": "Connectez-vous pour rechercher des intégrations de demandes multimédia.", "scoped": "Ce widget n'a pas d'intégration de demande de médias accessible." } } @@ -5940,7 +7812,6 @@ "help": "Utiliser un moteur de recherche externe", "group": { "searchEngine": { - "title": "Moteurs de recherche", "tipDdgBangs": "Astuce : Vous pouvez également utiliser ici n'importe quel bang DuckDuckGo, par ex. !quelquechose", "bang": { "searchWithQuery": "Rechercher \"{query}\" avec {label}", @@ -5991,20 +7862,6 @@ "group": { "mode": { "title": "Modes" - }, - "help": { - "title": "Aide", - "option": { - "documentation": { - "label": "Documentation" - }, - "submitIssue": { - "label": "Signaler un problème" - }, - "discord": { - "label": "Communauté Discord" - } - } } } }, @@ -6016,9 +7873,10 @@ "other": { "label": "Rechercher avec un autre moteur de recherche" }, - "no-default": { - "label": "Aucun moteur de recherche par défaut", - "description": "Définir un moteur de recherche par défaut dans les préférences" + "no-engines": { + "label": "Aucun moteur de recherche configuré", + "descriptionCreate": "Ajouter un moteur de recherche à partir du menu de commandes", + "descriptionUnavailable": "Demandez à un administrateur de configurer un moteur de recherche" }, "search": { "label": "Rechercher «{query}» avec {name}" @@ -6098,7 +7956,6 @@ "help": "Rechercher des utilisateurs ou des groupes", "group": { "user": { - "title": "Utilisateurs", "children": { "action": { "detail": { @@ -6111,7 +7968,6 @@ } }, "group": { - "title": "Groupes", "children": { "action": { "detail": { @@ -6135,9 +7991,6 @@ "engine": { "search": "Trouver un moteur de recherche", "field": { - "name": { - "label": "Nom" - }, "short": { "label": "Court" }, @@ -6150,12 +8003,19 @@ }, "page": { "list": { - "title": "Moteurs de recherche", + "ariaLabel": "Moteurs de recherche configurés", "noResults": { "title": "Il n'y a pas encore de moteur de recherche", - "action": "Créez votre premier moteur de recherche" + "description": "Les moteurs de recherche permettent à Spotlight d'envoyer une requête à un site ou à un service connecté.", + "action": "Créez votre premier moteur de recherche", + "filteredTitle": "Aucun moteur de recherche ne correspond à votre recherche", + "filteredDescription": "Aucun moteur de recherche ne correspond à \"{search}\". Essayez un autre nom ou une autre URL." }, - "interactive": "Interactif, utilise une intégration" + "interactive": "Interactif, utilise une intégration", + "type": { + "generic": "Modèle d'URL", + "fromIntegration": "Intégration" + } }, "create": { "title": "Nouveau moteur de recherche", @@ -6174,11 +8034,9 @@ "title": "Modifier un moteur de recherche", "notification": { "success": { - "title": "Modifications appliquées avec succès", "message": "Le moteur de recherche a été enregistré avec succès" }, "error": { - "title": "Impossible d'appliquer les modifications", "message": "Le moteur de recherche n'a pas pu être enregistré" } }, @@ -6317,6 +8175,10 @@ } }, "log": { + "context": { + "widgetError": "Widget a signalé une erreur à ce moment-là", + "expiredWidgetError": "Les logs autour de cette erreur de widget ne sont plus conservés" + }, "level": { "option": { "debug": "Débogage", @@ -6328,7 +8190,6 @@ }, "onboardingTour": { "learnMore": "Lire la documentation", - "next": "Suivant", "prev": "Retour", "done": "Terminé", "skip": "Passer la visite", @@ -6392,5 +8253,359 @@ "description": "Changez votre thème de couleurs, votre langue, votre tableau d'accueil et vos préférences. Vous pouvez également accéder à la zone de gestion depuis ici." } } + }, + "metadata": { + "description": "Un tableau de bord auto-hébergé pour la pile *arr et votre maison entière. Intègre avec plus de 50 services, des widgets en temps réel, pas de fichiers de configuration.", + "dashboardTitle": "Tableau de bord {appName}" + }, + "assistant": { + "title": "Assistant", + "open": "Ouvrir l'assistant", + "close": "Fermer l'assistant", + "minimize": "Réduire l'assistant", + "spotlight": "Demander à l'assistant", + "spotlightDescription": "Tapez et envoyez une invite sans quitter le menu de commande.", + "spotlightPrompt": { + "title": "Demander à l'assistant", + "description": "Tapez une invite ci-dessus. Entrée l'envoie en arrière-plan.", + "send": "Envoyer l'invite", + "empty": "Tapez une invite ci-dessus" + }, + "unavailable": { + "checking": "Vérification de la disponibilité de l'assistant…", + "error": "La disponibilité de l'assistant n'a pas pu être vérifiée. Veuillez réessayer.", + "notConfigured": "Un administrateur doit d'abord configurer et activer l'assistant.", + "signIn": "Connectez-vous pour utiliser l'Assistant." + }, + "newConversation": "Nouvelle conversation", + "conversations": "Conversations", + "conversationActions": "Actions de conversation", + "searchConversations": "Rechercher des conversations", + "noMatchingConversations": "Aucune conversation correspondante", + "moreActions": "Plus d'actions de réponse", + "renameConversation": { + "action": "Renommer", + "label": "Nom de la conversation", + "save": "Enregistrer le nom", + "failedTitle": "La conversation n'a pas pu être renommée", + "failedDescription": "Homarr n'a pas pu renommer cette conversation. Réessayez." + }, + "deleteConversation": { + "title": "Supprimer la conversation ?", + "description": "«{title}» et ses messages seront supprimés définitivement.", + "failedTitle": "La conversation n'a pas pu être supprimée", + "failedDescription": "Homarr n'a pas pu supprimer cette conversation. Réessayez." + }, + "closeHistory": "Fermer l'historique de la conversation", + "openHistory": "Ouvrir l'historique des conversations", + "emptyTitle": "Que puis-je aider ?", + "emptyDescription": "Demandez à propos de votre installation d'Homarr, inspectez les données de l'instance en direct, ou approuvez les actions lorsque vous voulez que je fasse un changement.", + "suggestions": { + "health": { + "label": "Vérifier la santé du service", + "prompt": "Vérifiez mes intégrations et résumez tout ce qui a besoin d'attention." + }, + "explore": { + "label": "Explorer mon Homarr", + "prompt": "Montrez-moi ce que je peux voir et gérer dans cette instance Homarr." + }, + "media": { + "label": "Trouver les médias à demander", + "prompt": "Aidez-moi à trouver un film ou une série à demander." + }, + "style": { + "label": "Améliorer un tableau de bord", + "prompt": "Aidez-moi à améliorer l'apparence d'un tableau ou un CSS personnalisé. Montrez-moi d'abord mes tableaux, puis préservez mes paramètres actuels pendant que nous faisons le changement." + }, + "designWidget": { + "label": "Concevoir un widget", + "prompt": "Créer et installer un widget personnalisé pour " + } + }, + "composerPlaceholder": "Demander à l'assistant…", + "runtime": { + "model": "Modélisation", + "searchModels": "Rechercher des modèles", + "noModels": "Aucun modèle disponible", + "otherModels": "Autres modèles", + "imageInput": "Accepte la saisie de l'image", + "thinking": "Mode de pensée", + "reasoning": { + "auto": "Auto", + "none": "Désactivé", + "minimal": "Minimal", + "low": "Bas", + "medium": "Moyen", + "high": "Élevé" + } + }, + "providerQuota": { + "title": "Fournisseur Homarr", + "communityWorkshop": "Atelier communautaire", + "dailyAllowance": "Requêtes journalières", + "remainingLabel": "{remaining} requêtes de fournisseur Homarr restantes sur {limit}", + "loading": "Chargement de l'allocation du fournisseur Homarr", + "signInRequired": "Connexion à l'atelier requise pour le fournisseur Homarr", + "signInDescription": "Connectez-vous avec GitHub via l'Atelier Communautaire pour recevoir votre allocation journalière séparée.", + "exhaustedDescription": "Votre autorisation de fournisseur Homarr est utilisée pour aujourd'hui. Elle se réinitialise à minuit UTC.", + "unavailableDescription": "Connectez-vous à l'Atelier ou attendez que votre allocation de fournisseur Homarr soit réinitialisée.", + "signIn": "Se connecter avec GitHub", + "signInError": "La connexion à GitHub a échoué. Réessayez dans un instant.", + "loadError": "L'autorisation de fournisseur Homarr n'a pas pu être chargée.", + "reset": "Réinitialise {relative} à ", + "toolCalls": "Chaque demande de modèle et chaque appel d'outil complété utilise une demande.", + "retry": "Recharger l'allocation", + "level": { + "ok": "OK", + "warning": "Avertissement", + "bad": "Bas", + "dead": "Utilisé" + } + }, + "stop": "Arrêter la réponse", + "send": "Envoyer un message", + "copy": "Copier la réponse", + "copyMessage": "Copier le message", + "editMessage": "Modifier le message", + "updateMessage": "Message de mise à jour", + "regenerate": "Régénérer la réponse", + "helpful": "Utile", + "notHelpful": "Non utile", + "readAloud": "Lire la réponse à haute voix", + "stopReading": "Arrêter la lecture de la réponse", + "feedbackError": "Votre commentaire n'a pas pu être enregistré. Veuillez réessayer.", + "exportMarkdown": "Exporter en tant que Markdown", + "exportConversation": { + "action": "Exporter la conversation en tant que Markdown", + "failedTitle": "La conversation n'a pas pu être exportée", + "failedDescription": "Homarr n'a pas pu charger cette conversation. Réessayez." + }, + "reasoning": "Penser", + "previousResponse": "Réponse précédente", + "nextResponse": "Réponse suivante", + "removeAttachment": "Supprimer la pièce jointe", + "downloadFile": "Télécharger {name}", + "attachedImage": "Image attachée", + "externalImageBlocked": "Image externe bloquée pour confidentialité", + "image": { + "loading": "Chargement de l'image", + "failed": "Cette image n'a pas pu être chargée.", + "retry": "Réessayez l'image" + }, + "quoteSelection": "Devis", + "dismissQuote": "Supprimer le devis", + "attachments": { + "add": "Joindre une image ou un document", + "errorTitle": "La pièce jointe n'a pas pu être ajoutée", + "imageUnsupported": "Le modèle sélectionné ne prend pas en charge l'entrée de l'image." + }, + "mentions": { + "menu": "Ajouter un contexte Homarr", + "context": "Contexte", + "app": "Apps", + "integration": "Intégrations", + "board": "Tableaux de bord", + "widget": "Widgets", + "tools": "Outils disponibles" + }, + "markdown": { + "diagram": "Schéma", + "renderingDiagram": "Rendu du diagramme…", + "diagramUnavailable": "Ce diagramme n'a pas pu être affiché." + }, + "commands": { + "menu": "Commandes de l'assistant", + "health": "Préparer un test de santé de service", + "explore": "Préparer un aperçu de cette instance d'Homarr", + "media": "Préparer une recherche de média", + "style": "Préparer une apparence de tableau ou un changement CSS personnalisé", + "designWidget": "Préparez une construction de Widget personnalisé à une seule invite" + }, + "usage": { + "tokens": "jetons", + "contextWindow": "Fenêtre de contexte", + "requestDetails": "Détails de la demande", + "used": "Dernière étape", + "remaining": "Restant", + "capacity": "Capacité", + "input": "Entrée", + "output": "Sortie", + "cached": "Entrée mise en cache", + "cacheWrite": "Écriture du cache", + "reasoning": "Raisonnement", + "inputShort": "dans", + "outputShort": "Sortie", + "cachedShort": "mis en cache", + "reasoningShort": "raisonnement", + "firstOutput": "Première sortie", + "homarrTiming": "Homarr observé", + "endToEnd": "De bout en bout", + "observedThroughput": "débit observé", + "providerTiming": "Fournisseur signalé", + "loadingProviderDetails": "Chargement des détails de génération…", + "providerDetailsPending": "OpenRouter est toujours en train de traiter certains détails de génération. Réouvrez-le pour réessayer.", + "providerLatency": "latence du fournisseur", + "generationTime": "Temps de génération", + "moderationLatency": "Modération", + "providerThroughput": "débit du fournisseur", + "fallbacks": "Rétro-retour", + "fallbackLatency": "latence de repli", + "cacheDiscount": "Remise sur le cache", + "normalizedTokens": "Entrée / sortie normalisée OpenRouter", + "byok": "Au revoir", + "cost": "Coûts", + "reported": "Signalé par le fournisseur", + "estimated": "Estimé à partir de la tarification du modèle", + "upstreamCost": "Inférence amont", + "webSearches": "Recherches Web", + "finishReason": "Raison de la fin", + "notReported": "Non signalé", + "agentSteps": "Étapes de l'agent", + "step": "Étape {number}", + "generation": "Générer" + }, + "toolInput": "Entrée", + "toolOutput": "Sortie", + "toolActivity": { + "iconSearch": "Recherche d'icônes «{query}»", + "iconBrowse": "Parcourir les icônes disponibles" + }, + "toolNavigation": { + "openPreview": "Ouvrir l'aperçu", + "openWidget": "Ouvrir le widget" + }, + "webSearch": { + "title": "Recherche sur le Web", + "completed": "OpenRouter a recherché cette réponse sur le web en direct.", + "searches": "{count, plural, one {# recherche} other {# recherche}}", + "sources": "{count, plural, one {# source} other {# sources}}" + }, + "responseError": { + "title": "L'assistant n'a pas pu terminer", + "description": "Réessayez. Si le problème persiste, demandez à un administrateur de vérifier le point de terminaison du modèle configuré." + }, + "toolPreparationError": { + "title": "Cette demande n'a pas pu être préparée", + "description": "Le modèle s'est arrêté avant de fournir des détails complets. Réessayez la réponse ou décrivez la demande à nouveau. Aucune modification n'a été faite." + }, + "busy": { + "title": "L'assistant fonctionne déjà", + "description": "Attendez la réponse en cours ou ouvrez-la pour arrêter l'exécution." + }, + "pendingAction": { + "answerTitle": "Réponse nécessaire", + "answerFallback": "Choisissez une réponse pour continuer", + "formTitle": "Vérifier les détails de l'application", + "boardFormTitle": "Examiner les modifications du tableau", + "review": "Aperçu", + "sendBlocked": "Résoudre la demande en attente avant l'envoi" + }, + "activity": { + "thinking": "L'assistant pense", + "working": "Travailler sur votre invite", + "ready": "Réponse prête", + "completed": "Ouvrir la réponse", + "approval": "Approbation nécessaire", + "failed": "L'assistant a besoin d'attention", + "expand": "Ouvrir la réponse de l'assistant", + "dismiss": "Rejeter l'activité de l'assistant" + }, + "scrollToLatest": "Défiler vers la dernière fois", + "refresh": { + "action": "Rafraîchir la vue actuelle", + "working": "Rafraîchissement de la vue actuelle", + "completeTitle": "Vue actualisée", + "completeDescription": "Les données d'Homarr visibles ont été rechargées.", + "failedTitle": "La vue n'a pas pu être actualisée", + "failedDescription": "La modification peut encore être enregistrée. Réessayez l'action de rafraîchissement." + }, + "askUser": { + "preparing": "Préparation de la question", + "answered": "Votre réponse", + "other": "Autre", + "otherLabel": "Votre réponse", + "otherPlaceholder": "Tapez une autre réponse…", + "submit": "Envoyer la réponse", + "cancelOther": "Annuler une autre réponse", + "optionKind": { + "affirmative": "Confirmer", + "negative": "Refuser", + "alternative": "Option", + "custom": "Personnalisé" + } + }, + "configureApp": { + "title": "Vérifier les détails de l'application", + "description": "Choisissez une icône locale et ajustez quoi que ce soit avant l'approbation de création de l'assistant.", + "preparing": "Préparation des détails de l'application", + "continue": "Utiliser ces détails", + "ready": "Détails de l'application prêts", + "automaticContinue": "Utiliser automatiquement ces détails de l'application" + }, + "configureBoardSettings": { + "title": "Examiner les modifications du tableau", + "loading": "Chargement des paramètres du tableau actuel", + "loadErrorTitle": "Les paramètres de la carte n'ont pas pu être chargés", + "loadErrorDescription": "Le tableau peut ne plus exister, ou vous n'avez pas la permission de le modifier.", + "proposedCount": "Champs {count} proposés par l'assistant", + "changeCount": "{count} modifications prêtes", + "ready": "Changements de tableau prêts", + "cancelled": "Paramètres du tableau actuel conservés", + "noChanges": "Aucun paramètre ne changera", + "keepCurrent": "Garder les paramètres actuels", + "continue": "Continuer à approuver", + "automaticContinue": "Accepter automatiquement les modifications proposées au tableau", + "resetAll": "Réinitialiser toutes les modifications", + "tabs": { + "css": "Custom CSS", + "appearance": "Apparence", + "background": "Fond", + "general": "Général" + }, + "cssDescription": "Modifier la feuille de style complète. Les règles existantes sont conservées à moins qu'elles ne soient supprimées ici.", + "cssCharacters": "{count} de 16384 caractères", + "copyCss": "Copy CSS", + "copied": "Copié", + "restoreCss": "Restore current CSS", + "remoteCssTitle": "Ce CSS charge une ressource distante", + "remoteCssDescription": "Les feuilles de style et les URL distantes importées communiquent avec un autre serveur lorsque le tableau se charge. Révisez-les avant de continuer." + }, + "configureWidget": { + "title": "Widget de revue", + "preparing": "Préparation des paramètres du widget", + "review": "Examiner le widget et les intégrations", + "ready": "Configuration du widget prête", + "cancelled": "Widget n'a pas été ajouté", + "automaticContinue": "Accepter automatiquement la configuration du widget proposée", + "definitionLoadErrorTitle": "Les paramètres du widget n'ont pas pu être chargés", + "definitionLoadErrorDescription": "Homarr n'a pas pu charger les paramètres de ce widget. Réessayez.", + "loadErrorTitle": "Les intégrations n'ont pas pu être chargées", + "loadErrorDescription": "Homarr n'a pas pu charger les intégrations disponibles pour ce widget.", + "noIntegrationTitle": "Une intégration compatible est nécessaire", + "noIntegrationDescription": "Configurer une intégration prise en charge par ce widget avant de l'ajouter au tableau de bord.", + "connectIntegration": "Connecter le service", + "manageIntegrations": "Gérer les intégrations", + "skip": "Ne pas ajouter", + "errorTitle": "Les paramètres du widget n'ont pas pu être préparés", + "errorDescription": "Le modèle n'a pas fourni de configuration complète du widget. Aucun widget n'a été ajouté." + }, + "approvalRequired": "Approbation requise", + "complete": "Complete", + "denied": "Refusé", + "failed": "Échec", + "working": "Travailler", + "approvalDescription": "Examinez ce changement avant qu'il ne s'exécute.", + "approveAndRun": "Approuver et exécuter", + "deny": "Refuser", + "autoApproval": { + "label": "Approbations automatiques", + "composerLabel": "Approuver pour moi", + "title": "Approbations automatiques", + "description": "Préparer automatiquement les formulaires et approuver les modifications protégées pour cette conversation. Les questions attendent toujours votre réponse, et vos autorisations Homarr s'appliquent. Cela s'éteint lorsque vous changez de conversation.", + "enable": "Activer pour cette conversation", + "disable": "Désactiver les approbations automatiques", + "enabled": "Les approbations automatiques sont activées", + "approving": "Approbation automatique" + } } } diff --git a/packages/translation/src/lang/he.json b/packages/translation/src/lang/he.json index efdc6c79b..697b67f6b 100644 --- a/packages/translation/src/lang/he.json +++ b/packages/translation/src/lang/he.json @@ -1,156 +1,246 @@ { "init": { - "step": { - "start": { - "title": "ברוכים הבאים ל- Homarr", - "subtitle": "בוא נתחיל בהגדרת ה-Homarr שלך.", - "description": "כדי להתחיל, בחר כיצד ברצונך להגדיר את ה-Homarr שלך.", - "action": { - "scratch": "התחל מאפס", - "importOldmarr": "יבוא מ-Homarr לפני 1.0", - "restoreSqlite": "", - "restoreSqliteDescription": "", - "backToOptions": "" + "studio": { + "navigationLabel": "מקטעי הגדרה ראשונית", + "back": "חזרה", + "buildBoard": "בנה את הלוח שלי", + "common": { + "unknownError": "משהו השתבש. הבחירות שלך עדיין כאן; נסה שוב." + }, + "claim": { + "checking": "מאבטח את סשן ההגדרה הראשונית…", + "checkingTitle": "מכין הגדרה מאובטחת", + "lockedTitle": "ההגדרה פתוחה בדפדפן אחר", + "lockedDescription": "המשך שם, או המתן עד שפג תוקף סשן ההפעלה המאובטח שלו לפני שתנסה שוב.", + "signInTitle": "נדרשת התחברות של מנהל מערכת", + "signInDescription": "כבר קיים מנהל מערכת. התחבר כדי להמשיך בהגדרה בלי לחשוף פרטי התחברות או גישה לשירותים.", + "signIn": "התחבר והמשך", + "errorTitle": "לא ניתן לאבטח את ההגדרה", + "errorDescription": "טען מחדש את הדף כדי לנסות שוב את סשן ההפעלה המאובטח." + }, + "navigation": { + "essentials": "יסודות", + "discover": "גלה", + "connect": "חבר", + "board": "לוח", + "extend": "הרחב", + "review": "סקירה" + }, + "welcome": { + "title": "ברוכים הבאים הביתה.", + "description": "ברוכים הבאים ל-Homarr v{version}. נדריך אתכם דרך היסודות ונעזור לכם לבנות את הלוח הראשון שלכם.", + "start": "תחילת העבודה", + "restore": "שחזר גיבוי", + "restoreTitle": "שחזור מגיבוי", + "restoreDescription": "גיבוי SQLite מלא משחזר לוחות, אנשים, אפליקציות, אינטגרציות והגדרות. Homarr מאמת אותו לפני החלפת נתונים כלשהם.", + "errorTitle": "לא ניתן להתחיל את ההגדרה", + "errorDescription": "בחירות ההגדרה שלך עדיין כאן. נסה שוב, או טען מחדש את הדף אם הבעיה נמשכת." + }, + "account": { + "title": "צור את מנהל המערכת שלך", + "description": "ציין את האישורים עבור משתמש המנהל שלך.", + "username": "שם משתמש של מנהל המערכת", + "passwordHint": "נדרשים לפחות 8 תווים בלבד. שאר בדיקות חוזק הסיסמה הן המלצות.", + "create": "צור מנהל מערכת", + "errorTitle": "לא ניתן ליצור את מנהל המערכת", + "recoveryTitle": "חשבון מנהל המערכת נוצר", + "recoveryDescription": "ההתחברות האוטומטית לא הושלמה. התחבר עם פרטי ההתחברות של מנהל המערכת שיצרת זה עתה כדי להמשיך בהגדרה.", + "recoveryAction": "התחבר והמשך", + "unknownError": "לא ניתן היה ליצור את מנהל המערכת." + }, + "externalGroup": { + "title": "חבר את קבוצת מנהלי המערכת שלך", + "description": "השתמש בשם הקבוצה המדויק שנשלח על ידי LDAP או OIDC. חברי הקבוצה הזו יקבלו גישת מנהל מערכת.", + "name": "קבוצת מנהלי מערכת חיצונית", + "nameDescription": "השדה תלוי רישיות וחייב להתאים לספק הזהויות שלך.", + "continue": "שמור את הקבוצה והמשך", + "errorTitle": "לא ניתן לשמור את הקבוצה", + "unknownError": "לא ניתן היה לשמור את קבוצת מנהלי המערכת." + }, + "essentials": { + "title": "התחל עם ברירות מחדל מוכרות", + "description": "הגדר את השפה והמראה שכולם יראו בהתחלה, ולאחר מכן ספק ל-Homarr את תבנית הכתובות שבה משתמשים השירותים שלך.", + "language": "שפת ברירת מחדל", + "theme": "ערכת נושא כברירת מחדל", + "themeAuto": "מערכת", + "themeLight": "בהיר", + "themeDark": "כהה", + "serverOriginHelp": "Homarr משתמש בכתובת הזו כדי למלא מראש כתובות URL של שירותים שזוהו. עדיין ניתן לערוך כל שירות בנפרד.", + "serverDescription": "זהו קיצור דרך, לא הגבלה. כל שירות שזוהה עדיין ניתן לעריכה.", + "serverOrigin": "דומיין, כתובת IP או נתיב של פרוקסי הפוך", + "serverOriginDescription": "דוגמאות: home.lan, 192.168.1.10 או https://home.example.com/services. בחר כיצד לצרף כל שירות בהמשך.", + "analytics": "שיתוף נתוני ניתוח אנונימיים על המוצר", + "analyticsDescription": "מסייע ל-Homarr לשפר את אמינות התכונות. לא נשלחים פרטי התחברות לשירותים או תוכן מהלוח." + }, + "discover": { + "title": "גלה למה ההתקנה הזו באמת יכולה לגשת", + "description": "Homarr בודק את היכולות הזמינות בפועל. שקע Docker או הקשר Kubernetes חסרים לעולם לא יחסמו הגדרה ידנית.", + "database": "מסד נתונים", + "docker": "שקעי Docker תואמים", + "kubernetes": "Kubernetes", + "assistantWorkshop": "עוזר וסדנה", + "found": "נמצאו {integrations} אינטגרציות ו-{apps} אפליקציות נוספות", + "retryKubernetes": "בדוק שוב את Kubernetes", + "retryWorkshop": "בדוק שוב את הסדנה", + "unknownVersion": "גרסה לא ידועה", + "kubernetesAvailable": "מחובר ל-Kubernetes {version}", + "kubernetesDisabled": "לא מופעל; המשך עם Docker או שירותים ידניים", + "kubernetesUnavailable": "Kubernetes מופעל, אך לא ניתן לגשת אליו מתהליך Homarr זה", + "workshopAvailable": "הסדנה הקהילתית ושירותי העוזר המתארחים זמינים לגישה", + "workshopUnavailable": "ספקי עוזר מקומיים ומותאמים אישית עדיין זמינים", + "partialTitle": "לא ניתן היה לסרוק חלק מהמקורות", + "partialDescription": "התוצאות ממארחים שניתן לגשת אליהם נשמרו. בדוק את הרשאות השקע או הוסף שירותים ידנית בחלק הבא.", + "status": { + "checking": "בודק זמינות…", + "available": "זמין", + "partial": "זמין חלקית", + "empty": "נגיש, ללא שירותים פעילים תואמים", + "disabled": "מושבת על ידי תצורת השרת", + "unavailable": "לא זמין מתהליך Homarr זה" } }, - "import": { - "title": "ייבוא נתונים", - "subtitle": "אתה יכול לייבא נתונים מ- Homarr קיים.", - "dropzone": { - "title": "גרור את קובץ ה-zip לכאן או לחץ כדי לחפש", - "description": "ה-zip שהועלה יעובד ותוכל לבחור מה אתה רוצה לייבא" + "connect": { + "title": "חבר את מה שהופך את הלוח לשימושי", + "description": "בחר כמה שירותים בו-זמנית. תוויות Docker מקבלות עדיפות, התאמת תמונות משלימה פערים, וכל כתובת URL ופרטי התחברות ניתנים לבדיקה.", + "discoveredIntegrations": "מופעי אינטגרציות שזוהו ({count})", + "detectedIntegrationLabel": "ייבא את {name}, שזוהה בתור {kind}", + "detectedAppLabel": "ייבא את האפליקציה שזוהתה {name}", + "otherIntegrations": "הוסף אינטגרציה נוספת", + "configureIntegrations": "הגדר אינטגרציות", + "discoveredApps": "אפליקציות שזוהו ({count})", + "appAddressRequired": "הוסף כתובת עבור {name}, או הסר אותו מהבחירה.", + "empty": "לא נבחרו אינטגרציות. Homarr עדיין ייצור לוח פתיחה שימושי עם ווידג'טים כלליים.", + "dockerSource": "דוקר", + "manualSource": "ידני", + "url": "כתובת URL של השירות", + "noCredentials": "ללא פרטי התחברות", + "noCredentialsDescription": "אינטגרציה זו אינה זקוקה לפרטי התחברות.", + "credentialMethod": "שיטת פרטי התחברות", + "getApiKey": "פתח את הגדרות מפתח ה-API עבור שירות זה", + "openGuide": "פתח את מדריך ההגדרה של Homarr עבור שירות זה", + "testConnection": "בדוק חיבור", + "testSuccess": "החיבור תקין", + "testSuccessDescription": "Homarr התחבר באמצעות הכתובת ופרטי ההתחברות הנוכחיים.", + "testError": "החיבור נכשל", + "testErrorDescription": "בדוק את כתובת השירות ואת פרטי ההתחברות, ולאחר מכן נסה שוב.", + "needsConfiguration": "נדרשת הגדרה", + "tested": "בדיקת החיבור הושלמה", + "testFailed": "בדיקת החיבור נכשלה", + "incompleteConfirmation": "על אינטגרציות שלא הושלמו יידלגו. להמשיך בלעדיהן?" + }, + "board": { + "title": "עצבו את הלוח לפני בנייתו", + "description": "Homarr יוצרת פריסות מוגנות של Mobile ושל Base, ולאחר מכן ממקמת אפליקציות ווידג'טים תואמים מהשירותים שבחרתם.", + "target": "לוח להגדרה", + "targetDescription": "בחרו את הלוח הקיים המדויק שהגדרה זו אמורה לעדכן.", + "targetPlaceholder": "בחרו לוח", + "targetRequired": "בחרו את הלוח שברצונכם להגדיר לפני שתמשיכו.", + "name": "שם הלוח", + "nameDescription": "משמש בכתובת ה-URL של הלוח; מותר להשתמש באותיות, במספרים, במקפים ובקו תחתון בלבד.", + "nameRequired": "הזן שם ללוח לפני שתמשיך.", + "primaryColor": "צבע ראשי", + "secondaryColor": "צבע משני", + "resetColors": "איפוס צבעים", + "radius": "רדיוס פינות היישומונים", + "radiusOptions": { + "xs": "הדוק", + "sm": "עדין", + "md": "מאוזן", + "lg": "מעוגל", + "xl": "רך" }, - "fileInfo": { - "action": { - "change": "שנה קובץ" - } + "columns": "עמודות הלוח", + "columnsDescription": "העמודות מגדירות את הרשת האופקית המשמשת לקביעת הגודל והמיקום של פריטים. 12 עמודות מספיקות לרוב המשתמשים.", + "columnCount": "{count, plural, one {# עמודה} two {# עמודות} other {# עמודות}}", + "leftSidebar": "סרגל צד שמאלי", + "rightSidebar": "סרגל צד ימני", + "previewLabel": "תצוגה מקדימה חיה של פריסת הלוח הראשון" + }, + "extend": { + "title": "תכונות מתקדמות", + "tabsLabel": "הגדרת העוזר, Workshop ו-MCP", + "assistant": "עוזר", + "workshop": "נדרשת התחברות כמנהל מערכת", + "assistantSetup": { + "loginTitle": "נדרשת התחברות של מנהל מערכת", + "loginDescription": "מפתחות הספק וגישה למודלים הם הרשאות מיוחדות. השלימו את ההגדרה, התחברו, ו-Homarr יפתח ישירות את תצורת העוזר.", + "loginAction": "התחבר כדי להגדיר את העוזר" }, - "importSettings": { - "title": "הגדרות ייבוא", - "description": "הגדר את התנהגות הייבוא" + "workshopSetup": { + "title": "סדנת Homarr", + "description": "עיינו ביישומונים מותאמים אישית מהקהילה, בדקו את היכולות שהם מבקשים, התקינו אותם ופרסמו את העבודה שלכם בלי להעתיק קוד בין שרתים.", + "available": "זמין", + "checking": "בודק…", + "unavailable": "לא זמין", + "discoverTitle": "גילוי", + "discoverDescription": "מצאו יישומונים שנבנו לתהליכי עבודה אמיתיים באירוח עצמי.", + "installTitle": "סקירה והתקנה", + "installDescription": "צפו במטא-נתונים ובהגדרות לפני הוספת דבר.", + "publishTitle": "שיתוף", + "publishDescription": "פרסמו יישומונים לשימוש חוזר בחזרה לקהילה.", + "browse": "עיון ב-Workshop" }, - "boardSelection": { - "title": "נמצאו {count} לוחות", - "description": "בחר את כל הלוחות עם הגודל שברצונך לייבא", - "action": { - "selectAll": "בחר הכל", - "unselectAll": "בטל את הבחירה בכולם" - } - }, - "summary": { - "title": "סיכום ייבוא", - "description": "בסיכום למטה תוכלו לראות מה ייבא", - "action": { - "import": "אשר את הייבוא והמשך" - }, - "entities": { - "apps": "אפליקציות", - "boards": "לוחות", - "integrations": "אינטגרציות", - "credentialUsers": "משתמשים מאושרים" - } - }, - "tokenModal": { - "title": "הזן אסימון ייבוא", - "field": { - "token": { - "label": "טוקן", - "description": "הזן את אסימון הייבוא המוצג ב- Homarr הקודם שלך" - } - }, - "notification": { - "error": { - "title": "אסימון לא חוקי", - "message": "האסימון שהזנת אינו חוקי" - } - } + "mcpSetup": { + "title": "MCP של Homarr", + "description": "חברו את Claude, את Codex או לקוח MCP אחר לכלים המוגדרים של Homarr. מפתחות API שומרים על גישה מפורשת וניתנת לביטול.", + "endpoint": "נקודת קצה HTTP זורמת", + "keyTitle": "העתק את המפתח עכשיו", + "keyDescription": "מטעמי אבטחה, Homarr לא יכול להציג את מפתח ה-API הזה שוב.", + "copyKey": "העתקת מפתח API", + "createKey": "יצירת מפתח API ל-MCP", + "errorTitle": "לא ניתן ליצור את מפתח ה-API של MCP", + "loginRequired": "התחבר כמנהל מערכת לאחר ההגדרה כדי ליצור מפתח API.", + "configuration": "תצורת לקוח", + "copy": "העתקת תצורה", + "copied": "הועתק", + "advanced": "פתיחת כלי MCP, הרשאות ופרטי הגדרה" } }, - "user": { - "title": "משתמש מנהל", - "subtitle": "ציין את האישורים עבור משתמש המנהל שלך.", - "notification": { - "success": { - "title": "המשתמש נוצר", - "message": "המשתמש נוצר בהצלחה" - }, - "error": { - "title": "יצירת המשתמש נכשלה" - } - } - }, - "group": { - "title": "קבוצה חיצונית", - "subtitle": "ציין את הקבוצה שבה יש להשתמש עבור משתמשים חיצוניים.", - "form": { - "name": { - "label": "שם הקבוצה", - "description": "השם צריך להתאים לקבוצת הניהול של הספק החיצוני" - } - } - }, - "settings": { - "title": "הגדרות", - "subtitle": "קבע את הגדרות השרת." - }, - "integrations": { - "title": "", - "subtitle": "", - "description": "", - "action": { - "continue": "", - "skip": "" - }, - "configure": { - "progress": "", - "skip": "", - "finishing": "", - "error": { - "title": "", - "message": "" - }, - "helpers": { - "tooltip": "", - "description": "" - } - }, - "urlTemplate": { - "label": "", - "placeholder": "", - "hint": "", - "warning": "", - "preview": "", - "mode": { - "subdomain": "", - "hostPort": "" - } - }, - "docker": { - "detected": "", - "detectedBreakdown": "", - "summary": "", - "appBadge": "", - "appSectionLabel": "", - "scanning": "", - "scanningDescription": "" + "review": { + "title": "לוח אחד, שנבנה סביב השירותים שלכם", + "description": "Homarr בודק חיבורים שלא נשמרו, מייבא את היישומים שנבחרו, מחיל מראה ופריסות, ואז פותח את הלוח המדויק שהוגדר.", + "board": "לוח ראשון", + "columns": "עמודות הלוח", + "columnsValue": "{count, plural, one {# עמודה} two {# עמודות} other {# עמודות}}", + "sidebars": "סרגלי צד", + "sidebarsValue": "{count, plural, =0 {ללא סרגלי צד} one {# סרגל צד} two {# סרגלי צד} other {# סרגלי צד}}", + "layouts": "פריסות רספונסיביות", + "layoutsValue": "נייד + בסיס", + "integrations": "אינטגרציות", + "integrationsValue": "{count, plural, =0 {לא נבחרו} one {# אינטגרציה} two {# אינטגרציות} other {# אינטגרציות}}", + "apps": "אריחי יישומים", + "appsValue": "{count, plural, =0 {יישומי התחלה בלבד} one {# אריח יישום} two {# אריחי יישום} other {# אריחי יישום}}", + "language": "שפה", + "theme": "ערכת נושא", + "themeAuto": "העדפת המערכת", + "themeLight": "בהיר", + "themeDark": "כהה", + "colors": "צבעי הלוח", + "radius": "רדיוס היישומון", + "automaticTitle": "מה Homarr ייצור", + "automaticDescription": "יישומונים תואמים, סמלים, קישורי יישומים, קשרי אינטגרציה ומיקום מותאם מגיעים מהקטלוג המשותף של Homarr. ניתן לערוך כל תוצאה בהמשך.", + "dockerWarningTitle": "חלק מתוויות Docker השתנו במהלך ההגדרה", + "dockerWarningDescription": "{count, plural, one {לא ניתן להחיל את תוצאת Docker שנבחרה מכיוון שהשירות שלה השתנה, כוונה ללוח אחר או שהיישומון שלה לא היה תואם} two {לא ניתן להחיל את # תוצאות Docker שנבחרו מכיוון שהשירותים שלהן השתנו, כוונו ללוח אחר או שהיישומונים שלהן לא היו תואמים} other {לא ניתן להחיל את # תוצאות Docker שנבחרו מכיוון שהשירותים שלהן השתנו, כוונו ללוח אחר או שהיישומונים שלהן לא היו תואמים}}.", + "errorTitle": "לא ניתן היה לבנות את הלוח", + "progress": { + "applying": "בודק חיבורים ובונה את הלוח שלכם", + "done": "הלוח שלכם מוכן" } }, "finish": { - "title": "סיים את ההגדרה", - "subtitle": "המערכת מוכנה לפעולה!", - "description": "השלמת בהצלחה את תהליך ההגדרה. כעת תוכל להתחיל להשתמש ב-Homarr. בחר את הפעולה הבאה שלך:", - "action": { - "goToBoard": "עבור ללוח {name}", - "createBoard": "צור את הלוח הראשון שלך", - "inviteUser": "הזמן משתמשים אחרים", - "docs": "קרא את הדוקומנטציה" - } + "title": "הלוח הראשון שלכם מוכן.", + "description": "Homarr חיבר את הרכיבים שבחרתם והשאיר את השאר ניתנים לעריכה. פתחו את הלוח עכשיו; הסיור הקצר בתוך המוצר יכול להציג לכם את מצב העריכה, היישומונים, הפריסות והחיפוש.", + "openBoard": "פתיחת הלוח שלי", + "manageTitle": "ניהול", + "manageDescription": "כווננו יישומים, אינטגרציות, לוחות, משתמשים והגדרות שרת.", + "workshopTitle": "סדנה", + "workshopDescription": "גלו והתקינו יישומונים מותאמים אישית מהקהילה.", + "docsTitle": "לימוד Homarr", + "docsDescription": "קראו את המדריכים הממוקדים ללוחות, יישומונים, אינטגרציות וכלים." } - }, - "backToStart": "חזרה להתחלה" + } }, "user": { - "title": "משתמשים", "name": "משתמש", "page": { "login": { @@ -159,12 +249,10 @@ }, "invite": { "title": "הצטרף ל- Homarr", + "titleWithAppName": "הצטרפות ל-{appName}", "subtitle": "ברוכים הבאים ל- Homarr! נא ליצור את החשבון שלך", + "subtitleWithAppName": "ברוכים הבאים ל-{appName}! נא ליצור את החשבון שלכם", "description": "הוזמנת על ידי {username}" - }, - "init": { - "title": "התקנת Homarr חדשה", - "subtitle": "נא ליצור את משתמש המנהל הראשוני" } }, "field": { @@ -192,12 +280,17 @@ "previousPassword": { "label": "סיסמה קודמת" }, - "homeBoard": { - "label": "לוח בית" - }, "pingIconsEnabled": { "label": "השתמש בסמלים עבור פינגים" }, + "byteUnitSystem": { + "label": "יחידות גודל נתונים", + "description": "בחרו כיצד Homarr מציג גדלים וקצבים של בתים. קצבי סיביות משתמשים תמיד ביחידות עשרוניות.", + "options": { + "binary": "בינארי", + "decimal": "עשרוני" + } + }, "enableRightClickOnWidgets": { "label": "", "description": "" @@ -247,7 +340,6 @@ } } }, - "create": "צור משתמש", "changePassword": { "label": "שינוי סיסמה", "notification": { @@ -259,56 +351,6 @@ } } }, - "changeHomeBoard": { - "notification": { - "success": { - "message": "לוח הבית השתנה בהצלחה" - }, - "error": { - "message": "לא ניתן לשנות לוח בית" - } - } - }, - "changeSearchPreferences": { - "notification": { - "success": { - "message": "העדפות חיפוש השתנו בהצלחה" - }, - "error": { - "message": "לא ניתן לשנות העדפות חיפוש" - } - } - }, - "changeFirstDayOfWeek": { - "notification": { - "success": { - "message": "היום הראשון בשבוע השתנה בהצלחה" - }, - "error": { - "message": "לא ניתן לשנות את היום הראשון בשבוע" - } - } - }, - "changePingIconsEnabled": { - "notification": { - "success": { - "message": "סמלי פינג הוחלפו בהצלחה" - }, - "error": { - "message": "לא ניתן לשנות את סמלי הפינג" - } - } - }, - "changeDdgBangs": { - "notification": { - "success": { - "message": "" - }, - "error": { - "message": "" - } - } - }, "manageAvatar": { "changeImage": { "label": "שנה תמונה", @@ -338,16 +380,6 @@ } } }, - "editProfile": { - "notification": { - "success": { - "message": "הפרופיל עודכן בהצלחה" - }, - "error": { - "message": "לא ניתן לעדכן את הפרופיל" - } - } - }, "delete": { "label": "מחק משתמש לצמיתות", "description": "מוחק משתמש זה כולל העדפותיו. לא ימחק אף לוח. המשתמש לא יקבל הודעה.", @@ -356,18 +388,13 @@ "select": { "label": "בחר משתמש", "notFound": "לא נמצא משתמש" - }, - "transfer": { - "label": "בחר בעלים חדש" } } }, "group": { - "title": "קבוצות", "name": "קבוצה", "search": "מצא קבוצה", "field": { - "name": "שם", "members": "חברים", "homeBoard": { "label": "לוח בית", @@ -388,6 +415,19 @@ } } }, + "custom-widget": { + "title": "יישומונים מותאמים אישית", + "item": { + "manage": { + "label": "ניהול יישומונים מותאמים אישית", + "description": "אפשר לחברים ליצור, לערוך ולמחוק הגדרות של יישומונים מותאמים אישית" + }, + "secret-write": { + "label": "הגדרת סודות של יישומונים מותאמים אישית", + "description": "אפשר לחברים ולמפתחות ה-API שלהם להגדיר פרטי התחברות מוצפנים של יישומונים מותאמים אישית" + } + } + }, "app": { "title": "אפליקציות", "item": { @@ -493,6 +533,35 @@ "description": "אפשר לחברים לנהל ולמחוק כל מנוע חיפוש" } } + }, + "matrix": { + "none": "אין גישה", + "impliedHint": "מעניק גם: {permissions}", + "grantedViaAdmin": "למנהלי מערכת כבר יש הרשאה זו. הגדירו את מנהל המערכת ל\"אין גישה\" כדי להגדיר אותה בנפרד.", + "preset": { + "label": "קביעות מוגדרות מראש", + "viewer": "מציג", + "viewerDescription": "לקריאה בלבד: צפייה בלוחות ובמדיה, ושימוש ביישומים ובאינטגרציות שכבר קיימים.", + "editor": "עורך", + "editorDescription": "ניהול שוטף: יצירה ועריכה של לוחות, יישומים, אינטגרציות ומנועי חיפוש.", + "admin": "מנהל מערכת", + "adminDescription": "גישה בלתי מוגבלת לכל תכונה והגדרה, כולל ניהול משתמשים.", + "custom": "מותאם אישית" + }, + "effective": { + "title": "הרשאות בפועל", + "description": "הקבוצה המלאה, ללא כפילויות, של הפעולות שחברי הקבוצה יכולים לבצע, כולל הרשאות שניתנו בעקיפין.", + "empty": "לא נבחרו הרשאות" + }, + "noneDescription": "לחברים אין גישה לאזור זה.", + "level": { + "view": "צפייה", + "use": "שימוש", + "interact": "אינטראקציה", + "modify": "שינוי", + "full": "מלאה" + }, + "capabilityIncluded": "כבר נכלל ב\"{level}\"" } }, "memberNotice": { @@ -607,21 +676,24 @@ "search": "חיפוש אפליקציה", "page": { "list": { - "title": "אפליקציות", + "ariaLabel": "יישומים מוגדרים", "noResults": { "title": "עדיין אין אפליקציות", - "action": "צור את האפליקציה הראשונה שלך" + "description": "יישומים הם קישורים לשירותים ולכלים שתרצו בלוחות שלכם.", + "action": "צור את האפליקציה הראשונה שלך", + "filteredTitle": "אין יישומים התואמים לחיפוש", + "filteredDescription": "אין יישומים התואמים ל\"{search}\". נסו שם או כתובת URL אחרת.", + "createOnlyTitle": "ניתן להוסיף יישומים בלבד", + "createOnlyDescription": "ההרשאות שלכם מאפשרות ליצור יישומים אך לא לעיין ביישומים קיימים. בקשו ממנהל מערכת גישה לניהול יישומים כדי לראות את הרשימה המלאה." } }, "create": { "title": "אפליקציה חדשה", "notification": { "success": { - "title": "היצירה הצליחה", "message": "האפליקציה נוצרה בהצלחה" }, "error": { - "title": "היצירה נכשלה", "message": "לא ניתן ליצור את האפליקציה" } } @@ -630,11 +702,9 @@ "title": "ערוך אפליקציה", "notification": { "success": { - "title": "השינויים הוחלו בהצלחה", "message": "האפליקציה נשמרה בהצלחה" }, "error": { - "title": "לא ניתן להחיל שינויים", "message": "לא ניתן היה לשמור את האפליקציה" } } @@ -644,26 +714,18 @@ "message": "האם אתה בטוח שברצונך למחוק את האפליקציה {name}?", "notification": { "success": { - "title": "המחיקה הצליחה", "message": "האפליקציה נמחקה בהצלחה" }, "error": { - "title": "המחיקה נכשלה", "message": "לא ניתן למחוק את האפליקציה" } } } }, "field": { - "name": { - "label": "שם" - }, "description": { "label": "תיאור" }, - "url": { - "label": "כתובת אתר" - }, "useDifferentUrlForPing": { "checkbox": { "label": "השתמש בקישור שונה עבור פינג", @@ -678,34 +740,582 @@ "search": "חפש אפליקציה", "noResults": "אין תוצאות", "action": "בחר {app}", - "title": "בחר אפליקציה להוספה ללוח זה" + "title": "בחר אפליקציה להוספה ללוח זה", + "toggle": "לחצו לבחירה", + "selected": "נבחר", + "multiple": "הוסף {count}", + "selectedCount": "{count, plural, one {# נבחר} two {# נבחרו} other {# נבחרו}}", + "appsSelected": "{count, plural, one {# יישום נבחר} two {# יישומים נבחרו} other {# יישומים נבחרו}}", + "selectMultiple": "בחירה מרובה", + "cancelMultiple": "יציאה מבחירה מרובה", + "customApplication": "יישום מותאם אישית", + "application": "יישום" }, "create": { "title": "צור אפליקציה חדשה", "description": "צור אפליקציה חדשה", "action": "פתח את יצירת האפליקציה" + } + } + }, + "tips": { + "dismiss": "סגירת הטיפ", + "multiSelectApps": "טיפ: החזיקו Ctrl / ⌘ כדי לבחור כמה יישומים בבת אחת" + }, + "customWidget": { + "secretEntry": { + "title": "הגדרת מקור API", + "description": "אשרו את כתובת השרת והזינו פרטי התחברות. ערכי סודות מוצפנים על ידי Homarr ולעולם אינם מוחזרים לסוכן המבקש.", + "loading": "טוען בקשה מאובטחת…", + "applying": "מחיל את התצורה הזו… השאירו את הדף פתוח.", + "saved": "מקור ה-API הוגדר. ניתן לסגור את הדף.", + "unavailable": "הבקשה אינה זמינה", + "saveError": "לא ניתן להגדיר את מקור ה-API", + "source": "מקור API: {name}", + "baseUrl": "כתובת שרת", + "networkScope": "גישה לרשת", + "save": "שמירת תצורת API", + "expires": "בקשה חד-פעמית זו תפוג ב-{time}." + }, + "page": { + "list": { + "noResults": "", + "noDescription": "אין תיאור", + "enabled": "מאופשר", + "disabled": "מושבת", + "disabledDescription": "יישומון זה יישאר מוגדר אך לא ייטען באף לוח.", + "requestCount": "{count, plural, one {# בקשה} two {# בקשות} other {# בקשות}}", + "invalidDefinition": "הגדרה לא חוקית", + "migrationRequired": "נדרשת הגירה", + "migrationInstructions": "פתחו את \"פעולות\" כדי להעתיק או לייצא את ההגדרה המקורית מגרסה 1 לצורך שחזור ידני. ניתן גם להשתמש בהנחיית ההגירה עם LLM. מיקומי הלוחות הקיימים ימשיכו לפעול לאחר ההגירה.", + "missingCredentials": "{count, plural, one {חסר פריט התחברות} two {חסרים # פרטי התחברות} other {חסרים # פרטי התחברות}}", + "missingCredentialsDescription": "{count, plural, one {יישומון זה עדיין זקוק לפריט התחברות אחד.} two {יישומון זה עדיין זקוק ל-# פרטי התחברות.} other {יישומון זה עדיין זקוק ל-# פרטי התחברות.}} בחרו בתג זה כדי להגדיר את הכתובת ואת הערכים המוצפנים." }, - "add": "הוסף אפליקציה" + "create": { + "title": "", + "subtitle": "" + }, + "tabs": { + "ariaLabel": "מקטעי יישומונים מותאמים אישית", + "installed": "מותקן", + "workshop": "סדנה" + } + }, + "action": { + "pasteImportHint": "הדביקו JSON מלא של יישומון מותאם אישית באמצעות Ctrl+V או Command+V", + "delete": "", + "deleteConfirm": "", + "export": "", + "duplicate": "", + "aiPrompt": "עיצוב באמצעות AI", + "copyAiPrompt": "", + "enable": "", + "disable": "", + "menu": "", + "downloadSkill": "הצגת היכולת של היישומון המותאם אישית", + "publishWorkshop": "פרסום ב-Workshop", + "migrate": "הגירת יישומון מותאם אישית", + "configureSources": "הגדרת מקורות", + "copyLegacyDefinition": "העתקת תוכן היישומון המקורי", + "exportLegacyDefinition": "ייצוא תוכן היישומון המקורי", + "copyMigrationPrompt": "העתקת הנחיית הגירה ל-LLM", + "pasteMigration": "הדבקת יישומון שעבר הגירה", + "importMigration": "ייבוא קובץ JSON שעבר הגירה" + }, + "sourceSetupDialog": { + "title": "הגדרת מקורות היישומון", + "description": "בדקו לאן היישומון הזה מתחבר והוסיפו או החליפו את פרטי ההתחברות המוצפנים שלו.", + "credentialsRequired": "הבקשות ייכשלו עד להוספת פרטי ההתחברות הנדרשים.", + "save": "שמירת תצורה" + }, + "field": { + "description": "" + }, + "editor": { + "errorBoundary": { + "title": "משהו השתבש" + }, + "action": { + "components": "רכיבים", + "format": "עיצוב", + "insertStarter": "הוספת תבנית התחלתית", + "redo": "ביצוע מחדש", + "copied": "הועתק", + "schema": "סכמה" + }, + "reference": { + "minimal": "דוגמה מינימלית", + "full": "דוגמה מלאה" + }, + "componentReference": { + "search": "חיפוש רכיבים", + "empty": "אין רכיבים תואמים", + "count": "{count, number} רכיבים זמינים" + }, + "status": { + "errors": "{count, number} שגיאות", + "warnings": "{count, number} אזהרות", + "ready": "לא נמצאו בעיות", + "position": "שורה {line, number}, עמודה {column, number}", + "characters": "{count, number} תווים", + "charactersWithLimit": "{count, number} / {limit, number}" + }, + "diagnostics": { + "title": "אבחון תבנית", + "line": "שורה {line, number}", + "ast": "הערך: {value}", + "bindingTypeConflict": "הקלט \"{value}\" משותף לבקרים עם סוגי ערכים שאינם תואמים.", + "runtimeBindingTypeConflict": "הקלט \"{value}\" מקושר גם כ-{firstType} וגם כ-{secondType}.", + "dynamicRequestId": "נדרש requestId מילולי. מזהי בקשות דינמיים אינם מתקבלים.", + "dynamicInputBinding": "נדרש שם קלט מילולי עבור bind.", + "inlineRequestProps": "רכיבי רשת מקבלים requestId ו-params; מאפייני URL, method, header ו-body בתוך השורה חסומים.", + "invalidRequestManifest": "בקשות בעלות שם חייבות להיות מפת בקשות חוקית. {value}", + "missingRequestId": "רכיב רשת זה דורש requestId מילולי.", + "templateEmpty": "הזינו תבנית JSX.", + "templateTooLong": "התבנית חורגת ממגבלת 50,000 התווים.", + "unknownRequest": "לא קיימת בקשה בעלת השם \"{value}\"." + } + }, + "workbench": { + "configure": "הגדרה", + "sectionNavigation": "מקטעי יישומונים מותאמים אישית", + "widgetPreview": "תצוגה מקדימה של היישומון", + "generalInformation": "מידע כללי", + "invalidWidget": "יישומון לא חוקי", + "section": { + "general": "כללי", + "sources": "מקורות API", + "requests": "בקשות", + "options": "אפשרויות", + "jsx": "קוד JSX", + "preview": "תצוגה מקדימה" + }, + "status": { + "unsaved": "שינויים שלא נשמרו", + "invalid": "דורש טיפול", + "ready": "מוכן" + }, + "saveError": { + "title": "היישומון לא נשמר", + "description": "תקנו את שגיאות האימות האלה ושמרו שוב.", + "more": "+{count} שגיאות נוספות מוצגות ב-workbench.", + "errors": "שגיאות אימות", + "copy": "העתקת שגיאות", + "copied": "השגיאות הועתקו" + }, + "action": { + "preview": "בדיקה ותצוגה מקדימה", + "previewLoading": "בודק בקשות" + }, + "requests": { + "title": "שאילתות ופעולות בעלות שם", + "label": "בקשות", + "description": "שאילתות טוענות נתונים; פעולות מופעלות רק לאחר אינטראקציה של המשתמש. כל שיטת HTTP תקפה עבור כל אחד מהסוגים." + }, + "options": { + "title": "אפשרויות היישומון" + }, + "builder": { + "advancedManifest": "מניפסט גולמי מתקדם", + "advancedJson": "JSON מתקדם של המניפסט", + "manifestFilename": "קובץ widget.json", + "request": "בקשה {count, number}", + "requestId": "מזהה בקשה", + "type": "סוג", + "method": "שיטה", + "source": "מקור API", + "run": "הרצה", + "runLoad": "בעת טעינת היישומון", + "runManual": "מ-SubFetch", + "permission": "הרשאה", + "path": "נתיב", + "pathDescription": "השתמשו ב-'{option:name}' עבור אפשרויות יישומון וב-'{param:name}' עבור ערכי הפעלה.", + "requestDetails": "שאילתה, גוף והתנהגות", + "queryValues": "ערכי שאילתה", + "queryKey": "מפתח שאילתה", + "queryKeyInvalid": "השתמשו במזהה ייחודי שמתחיל באות ומכיל רק אותיות, מספרים, - או _.", + "valueSource": "מקור ערך", + "literal": "מילולי", + "widgetOption": "אפשרות יישומון", + "invocationParameter": "פרמטר הפעלה", + "option": "אפשרות", + "parameterName": "שם פרמטר", + "value": "ערך", + "removeQueryValue": "הסרת ערך שאילתה", + "addQueryValue": "הוספת ערך שאילתה", + "jsonBody": "גוף JSON", + "jsonBodyDescription": "אופציונלי. הוסיפו הפניות ל-$option ול-$param בכל עומק.", + "insertOptionReference": "הוספת הפניה לאפשרות", + "insertParameterReference": "הוספת הפניה לפרמטר", + "confirmation": "הודעת אישור", + "invalidation": "רענון לאחר הצלחה", + "invalidationDescription": "מזהי שאילתות מופרדים בפסיקים", + "noAuth": "שליחה ללא אימות מקור", + "moveRequestUp": "הזזת בקשה למעלה", + "moveRequestDown": "הזזת בקשה למטה", + "removeRequest": "הסרת בקשה", + "addRequest": "הוספת בקשה", + "optionName": "שם אפשרות", + "label": "תווית", + "control": "בקר", + "description": "תיאור", + "default": "ברירת מחדל", + "optionDetails": "אילוצים ובחירות דינמיות", + "minimum": "מינימום", + "maximum": "מקסימום", + "step": "שלב", + "choiceLabel": "תווית בחירה", + "choiceValue": "ערך בחירה", + "newChoice": "בחירה חדשה", + "addChoice": "הוספת בחירה", + "removeChoice": "הסרת בחירה", + "choicesRequest": "טעינת בחירות מבקשה", + "itemsPath": "נתיב פריטים", + "itemsPathPlaceholder": "פריטים (אופציונלי)", + "valuePath": "נתיב ערך", + "labelPath": "נתיב תווית", + "group": "קבוצה", + "advancedOption": "אפשרות מתקדמת", + "moveOptionUp": "הזזת אפשרות למעלה", + "moveOptionDown": "הזזת אפשרות למטה", + "removeOption": "הסרת אפשרות", + "addOption": "הוספת אפשרות", + "invalidJson": "JSON לא חוקי", + "invalidWidget": "יישומון לא חוקי" + }, + "jsx": { + "title": "תבנית JSX", + "label": "תבנית" + }, + "sources": { + "title": "מקורות API ופרטי התחברות", + "newName": "ממשק API: {count, number}", + "duplicateSourceId": "מזהי מקורות API חייבים להיות ייחודיים.", + "credentialRemoved": "פריט התחברות הוסר", + "credentialRemovedDescription": "הערך המאוחסן נמחק.", + "primary": "API ראשי", + "id": "מזהה מקור", + "name": "שם", + "baseUrl": "כתובת URL בסיסית", + "baseUrlError": { + "invalid": "הזינו כתובת URL מלאה.", + "protocol": "השתמשו בכתובת URL של HTTP או HTTPS.", + "credentials": "הסירו את שם המשתמש והסיסמה מכתובת URL זו. הגדירו את פרטי ההתחברות למטה במקום זאת.", + "queryOrFragment": "הסירו את מחרוזת השאילתה או את המקטע מכתובת URL בסיסית זו. הוסיפו ערכי שאילתה לבקשה בעלת שם." + }, + "networkScope": "גישה לרשת", + "authentication": "אימות", + "headerName": "שם כותרת", + "queryParameter": "פרמטר שאילתה", + "configured": "מוגדר — הזינו תחליף", + "clear": "בהיר", + "remove": "הסרת המקור והבקשות שלו", + "advanced": "מתקדם", + "add": "הוספת מקור API נוסף", + "sourceType": "אינטגרציה", + "manualSource": "API של HTTP", + "existingIntegration": "אינטגרציה קיימת", + "integrationType": "סוג אינטגרציה", + "selectIntegration": "אינטגרציה מוגדרת", + "noIntegrations": "אין אינטגרציות תואמות זמינות", + "integrationUnavailable": "האינטגרציה שנבחרה אינה זמינה עוד. בחרו אינטגרציה אחרת.", + "integrationDescription": "משתמש בכתובת ה-URL ובפרטי ההתחברות של האינטגרציה השמורים. השינויים מוחלים אוטומטית. נדרשת גישה מלאה לאינטגרציה כדי להריץ בקשות." + }, + "ai": { + "title": "יצירה או תיקון באמצעות כל AI", + "description": "הוסיפו תחילה כתובת URL של תיעוד API, אם יש לכם כזו. לצורך תיקונים, הריצו תצוגה מקדימה אם אפשר. העתיקו את ההנחיה לכל AI; הוא יכול לבקש פרטים חסרים. הדביקו כאן את ה-JSON הסופי שלו.", + "request": "מה היישומון הזה צריך לעשות?", + "documentationUrl": "כתובת URL של תיעוד API (אופציונלי)", + "paste": "הדבקה", + "response": "תגובת AI", + "manualCopyDescription": "הגישה ללוח נכשלה. בחרו את ההנחיה למטה והעתיקו אותה ידנית.", + "manualPasteDescription": "הגישה ללוח אינה זמינה או שהתגובה שהועתקה דורשת תיקון. הדביקו כאן את תגובת ה-JSON של ה-AI.", + "selectAll": "בחר הכל", + "loadResponse": "טעינת תגובה", + "loaded": "הווידג׳ט נטען בעורך ועכשיו ניתן לערוך אותו", + "invalidResponse": "הלוח אינו מכיל ווידג׳ט v2 חוקי", + "invalidResponseDetail": "תגובת ה-AI אינה תקינה: {message}" + }, + "preview": { + "invalid": "תקנו את שגיאות האימות כדי להציג תצוגה מקדימה של ווידג׳ט זה.", + "fixtureError": "שגיאה בנתוני תצוגה מקדימה", + "requestData": "נתוני בקשה", + "status": { + "idle": "הבקשות טרם נבדקו", + "loading": "בודק בקשות", + "success": "כל בקשות הטעינה הצליחו", + "error": "בקשת טעינה אחת או יותר נכשלה" + }, + "result": { + "loading": { + "title": "בודק בקשות API", + "description": "Homarr יוצר הפעלת תצוגה מקדימה וטוען את נתוני הווידג׳ט." + }, + "success": { + "title": "התצוגה המקדימה מוכנה", + "description": "{succeeded, plural, =0 {לווידג׳ט הזה אין בקשות טעינה.} one {בקשת טעינה אחת הצליחה.} two {שתי בקשות טעינה הצליחו.} other {# בקשות טעינה הצליחו.}} פתחו את «נתונים» כדי לבדוק את התגובה." + }, + "error": { + "title": "התצוגה המקדימה הושלמה עם שגיאות בבקשות", + "description": "{succeeded, number} הצליחו ו-{failed, number} נכשלו. פתחו את «נתונים» כדי לבדוק את פרטי התגובה והשגיאות." + } + }, + "instanceOptions": "אפשרויות מופע", + "liveActions": "הפעלת פעולות מול ה-API שהוגדר", + "liveActionsDescription": "כבוי הוא סימולציה בטוחה. הפעלה זו משפיעה על השירות האמיתי.", + "noActions": "לא הוגדרו פעולות.", + "containedFailures": "כשלי זמן הריצה מבודדים בתוך הווידג׳ט הזה. יומני הבקשות לעולם אינם כוללים ערכים סודיים.", + "validation": { + "title": "אימות", + "ready": "הגדרת הווידג׳ט תקינה." + }, + "accessibility": { + "title": "בדיקות נגישות", + "ready": "לא זוהו השמטות נפוצות של נגישות.", + "pending": "בדיקות הנגישות יופעלו כאשר הגדרת הווידג׳ט תהיה תקינה.", + "imageAlt": "הוסיפו טקסט חלופי לכל תמונה, והשתמשו ב-alt ריק רק לתמונות דקורטיביות.", + "actionIconLabel": "הוסיפו aria-label או title לכל ActionIcon.", + "inputLabel": "הוסיפו תווית גלויה או שם נגיש לכל קלט." + }, + "journal": "יומן בקשות מצונזר", + "actionParameters": "פרמטרים של פעולה (JSON)", + "invalidParameters": "השתמשו בסוגי הפרמטרים המוצהרים: מחרוזת, מספר ובוליאני.", + "runDestructive": "הפעלת פעולה הרסנית", + "runAction": "הפעלת פעולה", + "deleteConfirmation": "פעולת תצוגה מקדימה זו משנה נתונים מרוחקים דרך ה-API שהוגדר.", + "simulated": "הפעולה דומתה", + "httpStatus": "HTTP {status, number}", + "tab": { + "widget": "ווידג׳ט", + "data": "נתונים", + "options": "אפשרויות", + "state": "מצב המשימה", + "actions": "פקדים", + "diagnostics": "אבחון" + }, + "size": { + "compact": "קומפקטי", + "standard": "רגיל", + "wide": "רחב" + }, + "fixture": { + "live": "חי", + "loading": "טוען", + "empty": "ריק", + "error": "שגיאה" + } + } + }, + "preview": { + "request": { + "permission": { + "view": "צפייה", + "modify": "שינוי", + "full": "מלאה" + } + } + }, + "notification": { + "created": "", + "updated": "", + "deleted": "", + "imported": "", + "migrated": "הווידג׳ט מדור קודם הועבר בהצלחה. המיקומים הקיימים בלוח משתמשים כעת בהגדרת v2.", + "migrationError": "העברת הווידג׳ט מדור קודם נכשלה. ודאו שהקובץ משתמש בסכמת homarr-custom-widget-v2.", + "legacyDefinitionCopied": "תוכן הווידג׳ט המקורי הועתק. ערכי פרטי הכניסה השמורים אינם כלולים.", + "legacyDefinitionCopyError": "העתקת תוכן הווידג׳ט המקורי נכשלה.", + "migrationPromptCopied": "הועתקה בקשת העברה מצונזרת. הדביקו אותה ב-LLM, העתיקו את תגובת ה-JSON היחידה שלו, ולאחר מכן בחרו «הדבקת ווידג׳ט שהועבר לכאן».", + "migrationPromptCopyError": "העתקת בקשת ההעברה נכשלה.", + "sourcesConfigured": "מקורות הווידג׳ט ופרטי הכניסה נשמרו.", + "sourceConfigurationError": "הגדרת מקורות הווידג׳ט נכשלה.", + "aiPromptCopiedWithCount": "הנחיית ה-AI הועתקה ללוח ({count, number} תווים).", + "aiPromptCopyError": "", + "aiPromptSent": "הבקשה נשלחה. תוכלו להמשיך לערוך בזמן שהעוזר פועל ברקע.", + "updateError": "", + "importError": "", + "exportError": "", + "duplicated": "", + "duplicateError": "", + "toggleError": "", + "deleteError": "", + "previewError": "" + }, + "importReview": { + "title": "סקירת ייבוא ווידג׳ט מותאם אישית", + "description": "בדקו לאן הווידג׳ט מתחבר ואילו הרשאות לוח נדרשות לפקדים שלו לפני הייבוא.", + "migrationTitle": "סקירת תחליף v2 שהועבר", + "migrationDescription": "בדקו ואשרו את הגדרת ה-v2 שנוצרה. האישור מחליף באופן אטומי את רשומת ה-v1 שנשמרה, תוך שמירה על הקישור של מיקומי הלוח הקיימים לאותו מזהה ווידג׳ט.", + "fileLabel": "בחירת קובץ JSON של ווידג׳ט מותאם אישית", + "name": "שם המשימה", + "origin": "מקור בסיס", + "authentication": "אימות", + "networkScope": "טווח רשת", + "methods": "שיטות HTTP", + "permissions": "הרשאות לוח נדרשות", + "sourceSetup": { + "title": "הגדרת מקורות API", + "description": "אשרו לאן הווידג׳ט מתחבר והוסיפו פרטי כניסה. כתובות URL פרטיות וכתובות loopback ייחודיות להתקנת Homarr שלכם.", + "suggestedUrl": "כתובת URL מוצעת", + "confirmUrl": "אני מאשר/ת שכתובת השרת הזו נכונה עבור התקנת Homarr שלי", + "ready": "כתובת ה-URL מוכנה", + "needsUrl": "אישור כתובת URL", + "credentialsMissing": "פרטי הכניסה חסרים", + "credentialsOptional": "אפשר להתקין ללא פרטי כניסה ולהגדיר אותם מאוחר יותר, אך הבקשות ייכשלו עד להוספתם." + }, + "actionWarning": { + "title": "ווידג׳ט זה יכול לשנות נתונים מרוחקים", + "description": "בדקו כל פעולה בשם, כל פרטי כניסה שעברו בירושה וכל אישור לפעולה הרסנית לאחר הייבוא. סודות אינם כלולים בקובץ." + }, + "cancel": "ביטול הייבוא", + "confirm": "ייבוא ווידג׳ט", + "confirmMigration": "אישור תחליף v2" + }, + "secret": { + "apiKey": "מפתח API או אסימון", + "username": "", + "password": "", + "savedPlaceholder": "" + } + }, + "workshop": { + "title": "סדנה", + "browseWorkshop": "עיון בסדנה", + "openCommunity": "פתיחת הסדנה", + "openOnWorkshop": "פתיחת {title} באתר הסדנה", + "back": "חזרה לסדנה", + "search": "חיפוש ווידג׳טים", + "searchCss": "חיפוש ערכות CSS", + "sort": "מיון", + "sortTop": "הדירוג הגבוה ביותר", + "sortNewest": "החדשים ביותר", + "listAriaLabel": "ווידג׳טים בסדנה", + "listAriaLabelCss": "ערכות CSS בסדנה", + "empty": "אין ווידג׳טים התואמים לחיפוש.", + "emptyDescription": "ווידג׳טים קהילתיים שפורסמו בסדנה יופיעו כאן.", + "emptyFilteredTitle": "אין ווידג׳טים התואמים לחיפוש", + "emptyFilteredDescription": "אין ווידג׳ט בסדנה התואם ל-\"{search}\".", + "emptyCss": "אין ערכות CSS התואמות לחיפוש.", + "unavailableTitle": "נראה שהסדנה של Homarr אינה זמינה", + "unavailable": "השירות הקהילתי עשוי להיות מושבת זמנית. נסו שוב בעוד רגע. הווידג׳טים המותקנים שלכם לא הושפעו.", + "loadError": "לא ניתן היה לטעון את השליחה הזו.", + "noDescription": "אין תיאור", + "author": "מאת {name}", + "communityMember": "חבר/ת קהילה", + "outdated": "מיושן", + "outdatedWarning": "המחבר סימן את השליחה הזו כמיושנת. בדקו אותה בקפידה לפני הייבוא.", + "score": "ציון: {count, number}", + "upvote": "הצבעה בעד", + "downvote": "הצבעה נגד", + "voteError": "לא ניתן היה לשמור את ההצבעה.", + "signIn": "כניסה באמצעות GitHub", + "signInError": "הכניסה באמצעות GitHub נכשלה. בדקו שספק ה-OAuth של הסדנה מוגדר ושחלונות קופצים מורשים.", + "signOut": "יציאה", + "signInHint": "התחברו כדי להצביע או לדווח. להתקנה אין צורך בחשבון סדנה.", + "securityNotice": "ווידג׳טים בסדנה יכולים לקרוא למקורות ה-API המוצהרים שלהם ולבצע פעולות מוצהרות באמצעות פרטי כניסה שהוגדרו מקומית. סודות לעולם אינם נכללים.", + "securityNoticeCss": "CSS קהילתי יכול לשנות את המראה והשימושיות של לוח. בדקו אותו לפני הייבוא; דבר לא נשמר עד שתשמרו את הגדרות הלוח.", + "install": "התקנה", + "installReviewTitle": "סקירה לפני ההתקנה", + "installError": "לא ניתן להתקין את הווידג׳ט הזה", + "installErrorDescription": "שליחת הסדנה אינה ווידג׳ט Custom JSX v2 תקין.", + "useCss": "ייבוא CSS", + "importCss": "ייבוא CSS מהסדנה", + "importCssConfirm": "להחליף את ה-CSS המותאם אישית הנוכחי ב-\"{title}\"? דבר לא יישמר עד שתשמרו את הגדרות הלוח.", + "screenshotAlt": "צילום מסך של {title}, {count, number}", + "screenshotViewer": "מציג צילומי מסך של {title}", + "screenshotsLabel": "צילומי מסך של {title}", + "zoomScreenshot": "הצגה בגודל מלא", + "previousScreenshot": "צילום המסך הקודם", + "nextScreenshot": "צילום המסך הבא", + "showScreenshotThumbnails": "הצגת תמונות ממוזערות של צילומי מסך", + "hideScreenshotThumbnails": "הסתרת תמונות ממוזערות של צילומי מסך", + "closeScreenshotViewer": "סגירת מציג צילומי המסך", + "technicalDetails": "פרטים טכניים", + "sourceCode": "רשומה בסדנה", + "export": "ייצוא", + "report": "דיווח", + "reportTitle": "דיווח על שליחה", + "reportReason": "סיבה", + "reportExplanation": "מה על מנהלי הסדנה לדעת?", + "reportSend": "שליחת דיווח", + "reportSent": "הדיווח נשלח", + "reportSentDescription": "מנהלי הסדנה יכולים כעת לבדוק את השליחה הזו.", + "reportCount": "{count, plural, one {דיווח אחד} two {שני דיווחים} other {# דיווחים}}", + "reportWarning": "{count, plural, one {לשליחה הזו יש דיווח קהילתי פתוח אחד.} two {לשליחה הזו יש שני דיווחים קהילתיים פתוחים.} other {לשליחה הזו יש # דיווחים קהילתיים פתוחים.}} עדיין ניתן להתקין אותה, אך מומלץ לבדוק תחילה את התוכן שלה.", + "reportVisibility": "פרטי הדיווח גלויים רק למחבר השליחה הזו ולמנהלי הסדנה.", + "reportCategory": { + "outdated": "מיושן או אינו פועל עוד", + "malicious": "זדוני", + "spam": "ספאם", + "copyright": "זכויות יוצרים", + "inappropriate": "לא הולם", + "other": "אחר" + }, + "publish": { + "title": "פרסום בסדנה", + "introTitle": "שתפו את הווידג׳ט הזה עם הקהילה", + "introDescription": "Homarr מייצא עותק של הווידג׳ט הנוכחי ללא פרטי כניסה. הוסיפו פרטי רישום ברורים כדי שאנשים ידעו מה הוא עושה לפני ההתקנה.", + "listingDetails": "רישום בסדנה", + "listingDetailsDescription": "פרטים אלה יופיעו בפומבי לצד הגדרת הווידג׳ט המיוצאת.", + "success": "פורסם מיד. חברי הקהילה יכולים כעת להתקין את הווידג׳ט ולדווח עליו.", + "successTitle": "הווידג׳ט שלכם פעיל", + "manageDescription": "פתחו את השליחה כדי לעדכן את הרישום שלה, לבדוק דיווחים, לסמן אותה כמיושנת או למחוק אותה. ניהול השליחה מתבצע ישירות באתר הסדנה.", + "viewSubmission": "הצגה וניהול של השליחה", + "done": "סיום", + "signInHint": "התחברו כדי לפרסם בזהות הסדנה שלכם.", + "titleField": "כותרת", + "descriptionField": "תיאור", + "screenshots": "צילומי מסך", + "screenshotsDescription": "עד חמישה קובצי תמונה מסוג PNG, JPEG או WebP", + "screenshotsPlaceholder": "בחירת צילומי מסך", + "invalidScreenshot": "השתמשו בתמונות PNG, JPEG או WebP שגודלן אינו עולה על {maxSize} כל אחת.", + "privateSourceWarning": "ווידג׳ט זה מכיל כתובות מקור פרטיות עבור: {sources}. החליפו מארחים פרטיים או כתובות IP במצייני שירות בטוחים לפני הפרסום.", + "reviewSourcesTitle": "סקירת כתובות מקור פרטיות", + "privateSourceConfirmation": "בדקתי את כתובות המקור האלה והן אינן חושפות פרטי תשתית פרטיים", + "action": "פרסום עכשיו", + "publicationNote": "הפרסום מיידי. תוכלו לנהל את השליחה לאחר מכן בסדנה.", + "definitionChanged": "הווידג׳ט השתנה בזמן הכנת הפרסום. בדקו שוב את כתובות המקור הפרטיות שלו ולאחר מכן נסו שוב.", + "error": "הפרסום נכשל" } }, "integration": { + "completion": { + "modalTitle": "השירות מוכן", + "title": "{name} מחובר", + "description": "החיבור עבר את הבדיקה. בחרו מה להציג בלוח הזה.", + "connectionReady": "חיבור השירות מוכן", + "appReady": "קיצור הדרך לאפליקציה מוכן", + "compatibleWidgets": "{count, plural, =0 {אין ווידג׳טים תואמים} one {ווידג׳ט תואם אחד} two {שני ווידג׳טים תואמים} other {# ווידג׳טים תואמים}} זמינים", + "chooseWidget": "בחירת ווידג׳ט", + "recipes": { + "title": "מומלץ עבור לוח זה", + "description": "מבוסס על שירותים מחוברים ועל ווידג׳טים שכבר נמצאים בלוח הזה.", + "newConnectionReason": "זמין כעת דרך {integration}", + "existingConnectionReason": "פועל עם שירות שכבר חיברתם", + "dismiss": "סגירת ההמלצות עבור שירות זה בלוח הזה" + } + }, "page": { "list": { - "title": "אינטגרציות", + "ariaLabel": "אינטגרציות מוגדרות", "search": "חיפוש אינטגרציות", + "scopedNote": "מוצגות רק האינטגרציות שמותר לכם לנהל.", "noResults": { - "title": "עדיין אין אינטגרציות" + "title": "עדיין אין אינטגרציות", + "description": "חברו שירות כדי להשתמש בנתונים ובפעולות שלו בווידג׳טים של Homarr.", + "action": "יצירת האינטגרציה הראשונה שלכם", + "filteredTitle": "אין אינטגרציות התואמות לחיפוש", + "filteredDescription": "אין אינטגרציות התואמות ל-\"{search}\". נסו שם, סוג או כתובת URL אחרים.", + "createOnlyTitle": "אפשר להוסיף אינטגרציות בלבד", + "createOnlyDescription": "ההרשאות שלכם מאפשרות ליצור אינטגרציות אך לא לנהל אינטגרציות קיימות. בקשו ממנהל מערכת גישה לאלו שאתם צריכים." } }, "create": { "title": "אינטגרציה {name} חדשה", "notification": { "success": { - "title": "היצירה הצליחה", "message": "האינטגרציה נוצרה בהצלחה" }, "error": { - "title": "היצירה נכשלה", "message": "לא ניתן ליצור את האינטגרציה" } }, @@ -729,11 +1339,9 @@ "title": "ערוך אינטגרציה {name}", "notification": { "success": { - "title": "השינויים הוחלו בהצלחה", "message": "האינטגרציה נשמרה בהצלחה" }, "error": { - "title": "לא ניתן להחיל שינויים", "message": "לא ניתן היה לשמור את האינטגרציה" } }, @@ -750,23 +1358,15 @@ "message": "האם אתה בטוח שברצונך למחוק את האינטגרציה {name}?", "notification": { "success": { - "title": "המחיקה הצליחה", "message": "האינטגרציה נמחקה בהצלחה" }, "error": { - "title": "המחיקה נכשלה", "message": "לא ניתן למחוק את האינטגרציה" } } } }, "field": { - "name": { - "label": "שם" - }, - "url": { - "label": "כתובת אתר" - }, "attemptSearchEngineCreation": { "label": "יצירת מנוע חיפוש", "description": "אינטגרציה {kind} יכולה לשמש עם מנועי חיפוש. סמן עבור הגדרה אוטומטית של מנוע חיפוש." @@ -778,6 +1378,10 @@ "label": "יצירת אפליקציה", "description": "יצירת אפליקציה עם אותו שם וסמל כמו האינטגרציה. יש להשאיר את שדה הקלט למטה ריק כדי ליצור את האפליקציה עם כתובת האתר לאינטגרציה." }, + "linkApp": { + "label": "קישור אפליקציה קיימת", + "description": "חברו את האינטגרציה הזו לאפליקציה שכבר ניתן להשתמש בה." + }, "appHref": { "placeholder": "כתובת אתר מותאמת אישית של אפליקציה" }, @@ -791,7 +1395,11 @@ "grid": { "widgetCount": "", "noWidgets": "", - "detected": "" + "detected": "", + "connected": "{count, plural, one {מחובר אחד} two {שניים מחוברים} other {# מחוברים}}", + "tiedWidgets": "ווידג׳טים מקושרים", + "more": "+{count} נוספים", + "loadError": "לא ניתן היה לטעון את האינטגרציות. נסו שוב לפני יצירת חיבור חדש." }, "category": { "dnsHole": "", @@ -822,7 +1430,10 @@ "analytics": "", "vpn": "", "mediaLibrary": "", - "uptimeMonitoring": "" + "uptimeMonitoring": "", + "beszel": "Beszel", + "systemMonitoring": "ניטור המערכת", + "security": "אבטחה" }, "testConnection": { "action": { @@ -1107,6 +1718,22 @@ "slug": { "label": "", "newLabel": "" + }, + "wazuhIndexerUrl": { + "label": "כתובת URL של אינדקס", + "newLabel": "כתובת URL חדשה של אינדקס" + }, + "wazuhIndexerUsername": { + "label": "שם משתמש של אינדקס", + "newLabel": "שם משתמש חדש של אינדקס" + }, + "wazuhIndexerPassword": { + "label": "סיסמת אינדקס", + "newLabel": "סיסמת אינדקס חדשה" + }, + "wazuhDashboardUrl": { + "label": "כתובת URL של לוח המחוונים (אופציונלי)", + "newLabel": "כתובת URL חדשה של לוח המחוונים" } } }, @@ -1115,54 +1742,19 @@ "interact": "אינטראקציה עם אינטגרציות", "full": "גישת אינטגרציה מלאה" }, - "audiobookshelf": { - "name": "", - "description": "" - }, - "navidrome": { - "name": "", - "description": "" - }, - "uptimeKuma": { - "name": "", - "description": "", - "secret": { - "slug": { - "description": "" - }, - "apiKey": { - "description": "" - } - } - }, - "traefik": { - "name": "", - "description": "" - }, - "paperlessNgx": { - "name": "", - "description": "" - }, - "patchmon": { - "name": "", - "description": "" - }, - "bazarr": { - "name": "", - "description": "" - }, - "wud": { - "name": "וואטס אפ דוקר", - "description": "עקוב אחר אילו מקונטיינרי הדוקר שלך כוללים עדכוני תמונה זמינים" + "llamacpp": { + "name": "llama.cpp", + "description": "ניטור llama-server מקומי של llama.cpp: מדדי תקינות, מודל ויצירה" } }, "media": { "plural": "מדיה", "search": "מצא מדיה", "field": { - "name": "שם", + "preview": "תצוגה מקדימה", "size": "גודל", - "creator": "יוצר" + "creator": "יוצר", + "actions": "פקדים" }, "action": { "upload": { @@ -1190,10 +1782,12 @@ } }, "copy": { - "label": "העתק קישור" + "label": "העתק קישור", + "labelNamed": "העתקת כתובת URL עבור {name}" }, "open": { - "label": "פתיחת מדיה" + "label": "פתיחת מדיה", + "labelNamed": "פתיחת {name}" } }, "noResults": { @@ -1208,7 +1802,6 @@ "add": "הוסף", "apply": "החל", "backToOverview": "חזרה לסקירה כללית", - "skip": "", "change": "לשנות", "create": "צור", "createAnother": "צור והתחל מחדש", @@ -1231,16 +1824,31 @@ "tryAgain": "נא לנסות שוב", "loading": "טוען", "show": "", - "hide": "" + "hide": "", + "undo": "ביטול", + "editNamed": "עריכת {name}", + "deleteNamed": "מחיקת {name}", + "clearSearch": "ניקוי החיפוש", + "copy": "העתקה", + "copied": "הועתק", + "refresh": "רענן" + }, + "pagination": { + "pageOf": "עמוד {page} מתוך {totalPages}" }, "here": "כאן", + "serviceUrlTemplate": { + "serverTitle": "כתובת שרת רגילה", + "urlModeLabel": "תבנית כתובת השירות", + "hostPort": "אותו מארח, יציאות שונות", + "subdomain": "תת-דומיין אחד לכל שירות", + "path": "נתיב אחד לכל שירות" + }, "iconPicker": { "label": "קישור של הסמל", + "description": "חפש בספרייה, הדבק כתובת URL של תמונה, או העלה קובץ.", "header": "הקלד שם או אובייקטים לסינון עבור אייקונים... Homarr יחפש עבורך סמלים של {countIcons} ", "headerLoading": "חפש תמונות לפי שם", - "noResults": "", - "error": "", - "description": "חפש בספרייה, הדבק כתובת URL של תמונה, או העלה קובץ.", "clear": "נקה תמונה", "uploadImage": "העלה תמונה", "results": "תוצאות חיפוש תמונות", @@ -1249,7 +1857,9 @@ "otherImages": "תמונות אחרות", "urlLoading": "בודק תמונה…", "urlReady": "התמונה מוכנה לשימוש", - "urlError": "לא ניתן היה לטעון את התמונה. בדוק את כתובת ה-URL ונסה שוב." + "urlError": "לא ניתן היה לטעון את התמונה. בדוק את כתובת ה-URL ונסה שוב.", + "noResults": "", + "error": "" }, "colorScheme": { "options": { @@ -1261,7 +1871,6 @@ "information": { "min": "מינימום", "max": "מקסימום", - "days": "ימים", "hours": "שעות", "minutes": "דקות" }, @@ -1298,16 +1907,16 @@ }, "userAvatar": { "menu": { - "switchToDarkMode": "עבור למצב כהה", - "switchToLightMode": "עבור למצב בהיר", + "open": "פתיחת תפריט המשתמש", "management": "ניהול", - "docker": "", "preferences": "העדפות שלך", "logout": "התנתק/י", "login": "התחבר/י", "homeBoard": "לוח הבית שלך", - "loggedOut": "נותקת מהמערכת", - "updateAvailable": "{countUpdates} עדכונים זמינים: {tag}" + "updateAvailable": "{countUpdates} עדכונים זמינים: {tag}", + "assistant": "עוזר", + "assistantThinking": "חושב", + "modifier": "משנה" } }, "dangerZone": "אזור מסוכן", @@ -1355,13 +1964,66 @@ "kilometersPerHour": "קמ\"ש", "milesPerHour": "מייל/שעה" } + }, + "widgetQuery": { + "loading": "טוען נתוני ווידג׳ט" + }, + "total": "סך הכל", + "filesystemUsage": "{count, plural, one {הצגת שימוש במערכת קבצים אחת} two {הצגת שימוש בשתי מערכות קבצים} other {הצגת שימוש ב-# מערכות קבצים}}", + "field": { + "name": "שם המשימה" + }, + "label": { + "new": "חדש" + }, + "entity": { + "apps": "אפליקציות", + "boards": "לוחות", + "certificates": "אישורי אבטחה", + "customWidgets": "ווידג׳טים מותאמים אישית", + "groups": "קבוצות", + "integrations": "אינטגרציות", + "invites": "הזמנות", + "logs": "קבצי לוג", + "media": "מדיה", + "searchEngines": "מנועי חיפוש", + "tasks": "משימות", + "users": "משתמשים" } }, "section": { - "dynamic": { + "option": { + "showLabel": { + "label": "הצגת תווית", + "description": "הצגת תווית המכל מעל התוכן שלו." + }, + "collapsible": { + "label": "אפשר כיווץ", + "description": "אפשרו לצופים להרחיב ולכווץ את המכל הזה." + }, + "showOpenAll": { + "label": "הצגת פעולת «פתיחת הכול»", + "description": "הצגת פעולה שפותחת כל אפליקציה במכל הזה בכרטיסייה חדשה." + }, + "scrollable": { + "label": "ניתן לגלילה", + "description": "שמירת המכל בגודל שהוגדר וגלילה בתוכן שלו במקום הגדלתו כדי להכיל את התוכן." + } + }, + "action": { + "openAllInNewTabsFor": "פתיחת כל האפליקציות ב-{name} בכרטיסיות" + }, + "openAllInNewTabs": { + "title": "פתח הכל בכרטיסיות", + "text": "דפדפנים מסוימים עשויים לחסום פתיחה בכמות גדולה של כרטיסיות מסיבות אבטחה. Homarr לא הצליח לפתוח את כל החלונות, מכיוון שהדפדפן שלך חסם את הפעולה הזו. אפשר \"פתח חלונות קופצים\" ונסה שוב." + }, + "container": { + "untitled": "מכל ללא שם", "action": { - "create": "מדור דינמי חדש", - "remove": "הסר קטע דינמי" + "create": "מכל חדש", + "remove": "הסרת מכל", + "expand": "הרחבה", + "collapse": "כיווץ" }, "option": { "title": { @@ -1375,55 +2037,12 @@ } }, "remove": { - "title": "הסר קטע דינמי", - "message": "האם אתה בטוח שברצונך להסיר את הקטע הדינמי הזה? פריטים יועברו לאותו מיקום במדור האב." - } - }, - "category": { - "field": { - "name": { - "label": "שם" - } - }, - "action": { - "create": "קטגוריה חדשה", - "edit": "שנה את שם הקטגוריה", - "remove": "הסר קטגוריה", - "moveUp": "הזזה למעלה", - "moveDown": "הזזה למטה", - "createAbove": "קטגוריה חדשה למעלה", - "createBelow": "קטגוריה חדשה למטה", - "openAllInNewTabs": "פתח הכל בכרטיסיות" - }, - "create": { - "title": "קטגוריה חדשה", - "submit": "הוסף קטגוריה" - }, - "remove": { - "title": "הסר קטגוריה", - "message": "האם אתה בטוח שברצונך להסיר את הקטגוריה {name}?" - }, - "edit": { - "title": "שנה את שם הקטגוריה", - "submit": "שנה את שם הקטגוריה" - }, - "menu": { - "label": { - "create": "קטגוריה חדשה", - "changePosition": "שנה מיקום", - "settings": "" - } - }, - "openAllInNewTabs": { - "title": "פתח הכל בכרטיסיות", - "text": "דפדפנים מסוימים עשויים לחסום פתיחה בכמות גדולה של כרטיסיות מסיבות אבטחה. Homarr לא הצליח לפתוח את כל החלונות, מכיוון שהדפדפן שלך חסם את הפעולה הזו. אפשר \"פתח חלונות קופצים\" ונסה שוב." + "message": "להסיר את המכל הזה? התוכן שלו יועבר לאזור המקיף אותו." } } }, "item": { "action": { - "create": "פריט חדש", - "import": "ייבוא פריט", "edit": "ערוך פריט", "moveResize": "הזז/שנה גודל פריט", "duplicate": "שכפול פריט", @@ -1432,7 +2051,7 @@ "menu": { "label": { "settings": "הגדרות", - "refresh": "", + "settingsFor": "הגדרות עבור {name}", "options": "", "actions": "" }, @@ -1441,21 +2060,96 @@ "error": "", "loading": "", "idle": "" + }, + "notification": { + "saveError": { + "title": "לא ניתן לשמור את הווידג׳ט", + "message": "השינויים בווידג׳ט בוטלו" + } } }, "create": { "title": "בחירת פריט להוספה", "search": "סנן פריטים", - "addToBoard": "הוספה ללוח" + "addToBoard": "הוספה ללוח", + "addAtPosition": "הוספת פריט לכאן", + "destination": { + "label": "הוספה אל", + "description": "בחרו היכן הווידג׳ט יופיע. עדיין תוכלו להזיז אותו מאוחר יותר.", + "mainCanvas": "משטח ראשי", + "leftRail": "סרגל שמאלי", + "rightRail": "סרגל ימני" + }, + "connectionStatus": { + "ready": "מוכן", + "needsSetup": "נדרשת הגדרה", + "noConnectionRequired": "אין צורך בחיבור" + }, + "customWidget": "ווידג׳ט מותאם אישית", + "standalone": "עצמאי", + "missingIntegration": { + "title": "תחילה יש לחבר שירות", + "noPermission": "ווידג׳ט זה זקוק לחיבור שירות תואם. בקשו ממנהל מערכת לחבר אחד ולאחר מכן נסו שוב." + }, + "notification": { + "success": { + "title": "הווידג׳ט נוסף", + "message": "{name} נוסף ללוח זה.", + "relocatedMessage": "{name} נוסף אל {destination} מכיוון שהיעד שנבחר לא היה זמין." + }, + "error": { + "title": "לא ניתן להוסיף פריט", + "message": "לא ניתן היה להוסיף את הפריט ללוח הזה" + } + } + }, + "selection": { + "summary": "{count, plural, one {פריט אחד נבחר} two {שני פריטים נבחרו} other {# פריטים נבחרו}}", + "selected": "{count, plural, one {אחד נבחר} two {שניים נבחרו} other {# נבחרו}}", + "copy": "העתקה", + "copied": "{count, plural, one {פריט אחד הועתק ללוח} two {שני פריטים הועתקו ללוח} other {# פריטים הועתקו ללוח}}", + "copyError": "לא ניתן היה להעתיק את הפריטים שנבחרו. ייתכן שהדפדפן שלכם אינו מאפשר גישה ללוח.", + "paste": "הדבקה", + "pasteShortcut": "הדבקת פריטים שהועתקו לכאן (Ctrl / ⌘ + V)", + "pasted": "{count, plural, one {פריט אחד הודבק} two {שני פריטים הודבקו} other {# פריטים הודבקו}}", + "pasteError": "לא ניתן היה לקרוא את הלוח. ייתכן שהדפדפן שלכם אינו מאפשר גישה ללוח.", + "pasteInvalid": "הלוח אינו מכיל פריטי לוח תקינים של Homarr.", + "pasteUnavailable": "הפריטים שהועתקו אינם מתאימים ללוח הזה.", + "removed": "{count, plural, one {פריט אחד הוסר} two {שני פריטים הוסרו} other {# פריטים הוסרו}}", + "move": "העברה", + "moveTo": "העברת הפריטים שנבחרו", + "delete": "מחיקה", + "clear": "ניקוי הבחירה", + "clearShortcut": "ניקוי הבחירה (Escape)", + "saveErrorTitle": "לא ניתן לעדכן פריטים", + "saveErrorMessage": "לא ניתן היה לשמור את השינויים. הלוח רוענן.", + "moveUnavailableTitle": "לא ניתן להעביר את הפריטים שנבחרו", + "moveUnavailableMessage": "ביעד אין מספיק מקום לכל הבחירה." }, "moveResize": { "title": "הזז/שנה גודל פריט", + "entryLabel": "{name}, עמודה {column}, שורה {row}", + "target": { + "numbered": "{name}, יעד {index}", + "located": "{name}, {location}, יעד {index}" + }, + "keyboard": { + "instructions": "לחצו על Enter או על מקש הרווח כדי להתחיל עריכה במקלדת. השתמשו במקשי החצים כדי להזיז, בחצים בתוספת Shift כדי לשנות גודל, וב-Escape כדי לעצור.", + "started": "העריכה במקלדת התחילה. השתמשו במקשי החצים כדי להזיז, בחצים בתוספת Shift כדי לשנות גודל, וב-Escape כדי לעצור.", + "stopped": "העריכה במקלדת נעצרה.", + "boundary": "השינוי הזה אינו מתאים לתוך המקטע הזה." + }, "field": { + "section": { + "label": "מקטע או סרגל" + }, "width": { - "label": "רוחב" + "label": "רוחב", + "shortLabel": "רוחב" }, "height": { - "label": "גובה" + "label": "גובה", + "shortLabel": "גובה" }, "xOffset": { "label": "היסט X" @@ -1469,18 +2163,36 @@ "title": "ערוך פריט", "tab": { "widget": "", - "app": "" + "app": "", + "integration": "עריכת אינטגרציה" }, "app": { "propagationNotice": "" }, + "integration": { + "action": "עריכת חיבור", + "description": "בדקו או תקנו חיבור שנבחר בלי לצאת מהווידג׳ט הזה.", + "editLabel": "ערוך אינטגרציה {name}", + "fullAccessRequired": "נדרשת גישה מלאה", + "propagationNotice": "שינויים באינטגרציה הזו חלים בכל מקום שבו היא נמצאת בשימוש. החיבור נבדק לפני השמירה.", + "loading": "טוען אינטגרציה", + "loadError": "לא ניתן היה לטעון את האינטגרציה הזו. נסו שוב לפני שינוי הגדרות החיבור שלה." + }, + "preview": { + "integrationRequired": "בחרו חיבור כדי להציג תצוגה מקדימה של הווידג׳ט הזה.", + "size": "גודל קובץ" + }, + "settings": { + "label": "הגדרות ווידג׳ט" + }, "advancedOptions": { "label": "אפשרויות מתקדמות", "title": "אפשרויות פריט מתקדמות" }, "field": { "integrations": { - "label": "אינטגרציות" + "label": "אינטגרציות", + "removeLabel": "הסרת אינטגרציית {name}" }, "title": { "label": "כותרת" @@ -1494,17 +2206,18 @@ } }, "remove": { - "title": "הסרת פריט", "message": "האם אתה בטוח שברצונך להסיר פריט זה?" + }, + "advancedFocus": { + "open": "פתיחת תצוגה מתקדמת", + "close": "סגירת תצוגה מתקדמת", + "label": "תצוגה מתקדמת של {widget}" } }, "widget": { "integrationSelect": { "configureIntegrationFirst": "", - "loading": "", - "placeholder": "", - "noResults": "", - "loadError": "" + "placeholder": "" }, "app": { "name": "אפליקציה", @@ -1513,9 +2226,6 @@ "appId": { "label": "בחר אפליקציה" }, - "openInNewTab": { - "label": "פתיחה בכרטיסיה חדשה" - }, "showTitle": { "label": "הצג את שם האפליקציה" }, @@ -1523,11 +2233,8 @@ "label": "אפשר בדיקת מצב" }, "layout": { - "label": "פריסה", "option": { - "row": "אופקי", "row-reverse": "אופקי (היפוך)", - "column": "אנכי", "column-reverse": "אנכי (היפוך)" } }, @@ -1552,23 +2259,60 @@ "name": "סימניות", "description": "מציג קישורי אפליקציות מרובים", "option": { - "title": { - "label": "כותרת" + "showTitle": { + "label": "הצגת כותרת הווידג׳ט" + }, + "titleSize": { + "label": "גודל כותרת הווידג׳ט (פיקסלים)" }, "layout": { "label": "פריסה", "option": { - "row": { - "label": "אופקי" - }, - "column": { - "label": "אנכי" - }, - "grid": { - "label": "רשת" + "adaptive": { + "label": "מותאם" }, "gridHorizontal": { "label": "רשת אופקית" + }, + "icons": { + "label": "סמלים" + } + } + }, + "variant": { + "label": "מראה", + "option": { + "soft": { + "label": "עדין" + }, + "filled": { + "label": "מלאה" + }, + "outline": { + "label": "קו מתאר" + }, + "plain": { + "label": "פשוט" + } + } + }, + "spacing": { + "label": "מרווח בין כרטיסים", + "option": { + "xs": { + "label": "קטן במיוחד" + }, + "sm": { + "label": "קטן" + }, + "md": { + "label": "בינוני" + }, + "lg": { + "label": "גדול" + }, + "xl": { + "label": "גדול במיוחד" } } }, @@ -1581,17 +2325,28 @@ "hideHostname": { "label": "הסתרת כתובת רשת" }, - "openNewTab": { - "label": "פתיחה בכרטיסיה חדשה" - }, "withBorder": { "label": "" }, + "grow": { + "label": "הרחב את הכרטיסים כדי למלא את השורה" + }, + "customUrls": { + "label": "קישורים מותאמים אישית" + }, "items": { "label": "סימניות", - "add": "הוסף סימניה" + "remove": "הסר סימנייה", + "apps": { + "label": "הוסף סימניות", + "description": "הדבק כתובות URL או מצא אפליקציות קיימות. גרור את הסימניות שלמטה כדי לשנות את סדרן.", + "placeholder": "הדבק כתובות URL או חפש אפליקציות", + "addUrl": "הוסף כתובת URL זו", + "hint": "לחץ על Enter כדי להוסיף כתובת URL. הדבק כתובות URL מופרדות בפסיקים או כתובת אחת בכל שורה כדי להוסיף כמה כתובות." + } } - } + }, + "empty": "הוסף כתובת URL או אפליקציה בהגדרות הווידג'ט" }, "archiveTeamWarrior": { "name": "", @@ -1600,33 +2355,61 @@ "showBroadcastMessage": { "label": "" } + }, + "noProjectSelected": "לא נבחר פרויקט", + "runnerStatus": "מריץ: {status}", + "projectId": "פרויקט: {id}", + "sessionReceived": "התקבלה הפעלה: {value}", + "sessionSent": "נשלחה הפעלה: {value}", + "sessionId": "הפעלה: {id}", + "startedAt": "התחיל ב־{date}", + "emptyItems": "אין משימות פעילות או אחרונות בתמונת מצב זו", + "metric": { + "running": "פועל", + "completed": "הושלמו", + "failed": "נכשל", + "canceled": "בוטלו", + "download": "הורדה", + "upload": "העלאה" + }, + "status": { + "running": "פועל", + "completed": "הושלם", + "failed": "נכשל", + "canceled": "בוטל", + "stopped": "נעצר", + "idle": "ממתין", + "unknown": "לא ידוע" + } + }, + "wud": { + "name": "וואטס אפ דוקר", + "description": "הצג כמה מהמכולות הנצפות עם עדכונים זמינים.", + "title": "What's Up Docker", + "monitored": "מנוטר", + "updatesAvailable": "{count, plural, one {# עדכון זמין} two {# עדכונים זמינים} many {# עדכונים זמינים} other {# עדכונים זמינים}}", + "updateAvailable": "עדכון זמין", + "openReleaseNotes": "פתח הערות שחרור", + "option": { + "showRing": { + "label": "הצג טבעת עדכון" + }, + "showUpdateList": { + "label": "הצג רשימת עדכוני מכולות", + "description": "מפרט כל מכולה מנוטרת שיש עדכון תמונה זמין עבורה" + } } }, "dnsHoleSummary": { "name": "סיכום חור אבטחה DNS", "description": "מציג את הסיכום חור אבטחת DNS שלך", "option": { - "layout": { - "label": "פריסה", - "option": { - "row": { - "label": "אופקי" - }, - "column": { - "label": "אנכי" - }, - "grid": { - "label": "רשת" - } - } - }, "usePiHoleColors": { "label": "השתמש בצבעי Pi-Hole" } }, "error": { - "internalServerError": "אחזור סיכום החור אבטחת DNS נכשל", - "integrationsDisconnected": "אין נתונים זמינים, כל האינטגרציות מנותקות" + "internalServerError": "אחזור סיכום החור אבטחת DNS נכשל" }, "data": { "adsBlockedToday": "נחסמו היום", @@ -1634,32 +2417,24 @@ "dnsQueriesToday": "שאילתות היום", "domainsBeingBlocked": "דומיינים ברשימת החסימה" }, - "domainsTooltip": "בגלל ריבוי אינטגרציות Homarr לא יכול לחשב במדיוק את כמות הדומיינים שנחסמו" + "domainsTooltip": "בגלל ריבוי אינטגרציות Homarr לא יכול לחשב במדיוק את כמות הדומיינים שנחסמו", + "status": { + "enabled": "מאופשר", + "disabled": "מושבת", + "unknown": "לא ידוע" + } }, "dnsHoleControls": { "name": "בקרות חור אבטחת DNS", "description": "שלוט ב-PiHole או ב-AdGuard מלוח המחוונים שלך", "option": { - "layout": { - "label": "פריסה", - "option": { - "row": { - "label": "אופקי" - }, - "column": { - "label": "אנכי" - }, - "grid": { - "label": "רשת" - } - } - }, "showToggleAllButtons": { "label": "הצג את כל הלחצנים" } }, "error": { - "internalServerError": "השליטה בחור אבטחת DNS נכשלה" + "internalServerError": "השליטה בחור אבטחת DNS נכשלה", + "bulkActionsFailed": "{count, plural, one {פעולה אחת נכשלה} two {# פעולות נכשלו} other {# פעולות נכשלו}}" }, "controls": { "enableAll": "אפשר הכל", @@ -1670,8 +2445,6 @@ "disabled": "מושבת", "processing": "מעבד", "disconnected": "מנותק", - "hours": "שעות", - "minutes": "דקות", "unlimited": "השאר ריק עבור ללא הגבלה" } }, @@ -1683,16 +2456,10 @@ "label": "תצוגת כותרת/עיר מותאמת אישית", "description": "הצג כותרת מותאמת אישית או שם העיר/המדינה על גבי השעון." }, - "customTitle": { - "label": "כותרת" - }, "is24HourFormat": { "label": "פורמט 24 שעות", "description": "השתמש בפורמט של 24 שעות במקום בפורמט של 12 שעות" }, - "showSeconds": { - "label": "הצג שניות" - }, "useCustomTimezone": { "label": "השתמש באזור זמן קבוע" }, @@ -1711,29 +2478,295 @@ "label": "פורמט זמן מותאם אישית", "description": "השתמש ב-ISO 8601 כדי לעצב תצוגת זמן (זה ידרוס אפשרויות אחרות)" }, - "customDateFormat": { - "label": "פורמט זמן מותאם אישית", - "description": "השתמש ב-ISO 8601 כדי לעצב תצוגת זמן (זה ידרוס אפשרויות אחרות)" - }, "showWeather": { "label": "", "description": "" }, - "weatherLocation": { - "label": "" - }, "isWeatherFormatFahrenheit": { "label": "" + }, + "animateWeatherIcon": { + "label": "הנפש את סמל מזג האוויר", + "description": "הנפש את סמל מזג האוויר. מושבת כברירת מחדל ותמיד מושבת כאשר מתבקשת הפחתת תנועה." + }, + "colorWeatherByDayNight": { + "label": "צביעת מזג האוויר לפי יום או לילה", + "description": "החל את צבע היום או צבע הלילה על סמל מזג האוויר והטמפרטורה, בהתאם לשאלה אם כעת יום או לילה במיקום שנבחר." + }, + "dayWeatherColor": { + "label": "צבע יום" + }, + "nightWeatherColor": { + "label": "צבע לילה" + }, + "worldClockCities": { + "label": "ערי שעון עולמי", + "description": "הוסף וסדר עד שש ערים בתצוגה המתקדמת." } + }, + "timezoneList": { + "timezone": "אזור זמן", + "cityLabel": "תווית עיר", + "searchPlaceholder": "חיפוש אזורי זמן", + "noResults": "לא נמצאו אזורי זמן", + "unsupportedOption": "לא נתמך: {timeZone}", + "add": "הוסף עיר", + "remove": "הסר את {city}", + "reorder": "שנה את סדר {city}", + "limit": "הוגדרו {count} מתוך {maximum} ערים" + }, + "worldClock": { + "primary": "שעון ראשי", + "local": "זמן מקומי", + "today": "היום", + "tomorrow": "מחר", + "yesterday": "אתמול", + "noSecondaryCities": "הוסף ערים באפשרויות הווידג'ט כדי להשוות ביניהן כאן.", + "unsupportedPrimaryTitle": "אזור הזמן הראשי אינו זמין", + "unsupportedPrimary": "{timeZone} אינו נתמך בדפדפן זה. מוצג UTC כחלופה מסומנת בבירור.", + "unsupportedTimeZone": "אזור זמן לא נתמך: {timeZone}", + "accessibleTime": "{city}: {time}, {date}, {timeZone}", + "advancedLabel": "שעון עולמי מתקדם", + "cities": "שעונים עולמיים", + "cityCount": "{count} אזורי זמן", + "timeBarLabel": "מיקום השעה ביום, בפורמט של 24 שעות, עבור {city}", + "dayProgress": "{percent}% חלפו · נותרו {hours} שעות ו־{minutes} דקות", + "phaseLegend": "מקרא שעות היום", + "tick": { + "midnight": "00", + "morning": "06", + "noon": "12", + "evening": "18", + "end": "24" + }, + "phaseRange": { + "night": "00–05 · 21–24", + "dawn": "05–08", + "day": "08–18", + "dusk": "18–21" + }, + "phase": { + "night": "לילה", + "dawn": "שחר", + "day": "יום", + "dusk": "דמדומים" + } + } + }, + "airQuality": { + "name": "איכות האוויר ו־UV", + "description": "מציג את איכות האוויר, מדד הקרינה האולטרה־סגולה, מזהמים ואבקה עבור מיקום מסוים.", + "option": { + "location": { + "label": "מיקום איכות האוויר" + }, + "aqiStandard": { + "label": "תקן AQI", + "options": { + "auto": "אוטומטי בהתאם לאזור", + "european": "AQI אירופי", + "us": "AQI אמריקאי" + } + }, + "showUv": { + "label": "הצג מדד UV" + }, + "showPollutants": { + "label": "הצג ריכוזי מזהמים" + }, + "showPollen": { + "label": "הצג ריכוזי אבקה" + } + }, + "category": { + "good": "טובה", + "fair": "סבירה", + "moderate": "בינונית", + "unhealthySensitive": "לא בריאה לקבוצות רגישות", + "unhealthy": "לא בריא", + "poor": "ירודה", + "veryPoor": "ירודה מאוד", + "veryUnhealthy": "לא בריאה מאוד", + "extremelyPoor": "ירודה באופן קיצוני", + "hazardous": "מסוכנת", + "unknown": "אין קריאת AQI" + }, + "uv": { + "label": "מדד UV", + "category": { + "low": "נמוך", + "moderate": "בינוני", + "high": "גבוה", + "veryHigh": "גבוה מאוד", + "extreme": "קיצוני", + "unknown": "אין קריאה" + } + }, + "dominantPollutant": "מזהם דומיננטי", + "aqiLabel": "מדד איכות האוויר (AQI)", + "strongestPollen": "רמת האבקנים הגבוהה ביותר", + "unit": { + "concentration": "{value} מיקרוגרם/מ״ק", + "pollen": "{value} גרגרים/מ״³" + }, + "pollutant": { + "pm2_5": "חלקיקים PM2.5", + "pm10": "חלקיקים PM10", + "ozone": "אוזון", + "nitrogenDioxide": "חנקן דו-חמצני", + "sulphurDioxide": "גופרית דו-חמצנית", + "carbonMonoxide": "פחמן חד-חמצני" + }, + "pollen": { + "alder": "אלמון", + "birch": "שדר", + "grass": "דשא", + "mugwort": "לענה", + "olive": "זית", + "ragweed": "אמברוסיה" + }, + "compact": { + "sixHourTrend": "מגמת AQI בשש השעות הקרובות" + }, + "advanced": { + "observedAt": "עודכן ב- {time}", + "next24Hours": "24 השעות הבאות", + "pollutants": "ריכוזי מזהמים", + "pollen": "ריכוזי אבקנים", + "sevenDayForecast": "תחזית מרבית ל-7 ימים", + "aqiValue": "AQI {value}", + "uvValue": "UV {value}", + "uvShort": "UV {value}", + "noForecast": "נתוני תחזית אינם זמינים" + } + }, + "countdown": { + "name": "ספירות לאחור", + "description": "עוקב אחר אירועים קרובים וימי שנה חוזרים.", + "option": { + "events": { + "label": "אירועים", + "description": "הוסף וסדר עד 20 ספירות לאחור חד-פעמיות או שנתיות. התאריכים מוזנים באזור הזמן שנבחר." + }, + "showProgress": { + "label": "הצג התקדמות" + }, + "showSeconds": { + "label": "הצג שניות", + "description": "השאר את השניות גלויות לכל אירוע קרוב." + } + }, + "dateTimeEventList": { + "newEvent": "אירוע חדש", + "add": "הוסף אירוע", + "remove": "הסר את {event}", + "reorder": "סדר מחדש את {event}", + "eventLabel": "תווית האירוע", + "timezone": "אזור זמן", + "unsupportedOption": "לא נתמך: {timeZone}", + "recurrence": "חוזר", + "recurrenceOption": { + "none": "אינו חוזר", + "yearly": "כל שנה" + }, + "target": "תאריך ושעת האירוע", + "trackProgress": "עקוב אחר ההתקדמות מתאריך התחלה", + "start": "תאריך ושעת התחלת ההתקדמות", + "confirmDateTime": "אישור תאריך ושעה", + "limit": "{count} מתוך {maximum} אירועים מוגדרים" + }, + "empty": { + "title": "אין עדיין ספירות לאחור", + "description": "הוסף אירוע באפשרויות הווידג׳ט כדי להתחיל בספירה לאחור." + }, + "completed": "הושלם", + "yearly": "שנתי", + "progress": "התקדמות האירוע", + "upcoming": "קרובים", + "completedEvents": "אירועים שהושלמו", + "invalid": { + "title": "לא ניתן להציג חלק מהאירועים", + "description": "{count, plural, one {לאירוע אחד יש תאריך שגוי או אזור זמן שאינו נתמך.} two {לשני אירועים יש תאריך שגוי או אזור זמן שאינו נתמך.} other {ל-# אירועים יש תאריך שגוי או אזור זמן שאינו נתמך.}}", + "value": "לא זמין" + }, + "alert": { + "notifications": "התראות בדפדפן", + "permissionDenied": "ההתראות חסומות בדפדפן זה.", + "reached": "הספירה לאחור הגיעה ליעדה." + } + }, + "timer": { + "name": "טיימר / פומודורו", + "description": "מפעיל טיימר פשוט או רצף פומודורו הניתן להגדרה.", + "option": { + "mode": { + "label": "מצב", + "options": { + "timer": "טיימר", + "pomodoro": "פומודורו" + } + }, + "timerMinutes": { + "label": "דקות טיימר" + }, + "focusMinutes": { + "label": "דקות מיקוד" + }, + "shortBreakMinutes": { + "label": "דקות הפסקה קצרה" + }, + "longBreakMinutes": { + "label": "דקות הפסקה ארוכה" + }, + "sessionsBeforeLongBreak": { + "label": "מקטעי מיקוד לפני הפסקה ארוכה" + }, + "autoStartBreaks": { + "label": "התחל הפסקות אוטומטית" + }, + "autoStartFocus": { + "label": "התחל מקטעי מיקוד אוטומטית" + } + }, + "phase": { + "timer": "טיימר", + "focus": "מיקוד", + "shortBreak": "הפסקה קצרה", + "longBreak": "הפסקה ארוכה" + }, + "action": { + "start": "התחל", + "pause": "השהה", + "reset": "איפוס" + }, + "attention": { + "timerComplete": "הטיימר הושלם", + "phaseReady": "{phase} מוכן" + }, + "progress": "התקדמות הטיימר: {progress}%", + "compact": { + "completedFocus": "{count, plural, =0 {לא הושלמו מקטעי מיקוד} one {הושלם מקטע מיקוד אחד} two {הושלמו שני מקטעי מיקוד} other {הושלמו # מקטעי מיקוד}}" + }, + "alert": { + "title": "הטיימר הושלם", + "completed": "{phase} הושלם." + }, + "advanced": { + "sequence": "רצף פומודורו", + "focusSession": "מיקוד {session}", + "settings": "הגדרות קבועות", + "settingsHint": "השתמש בתפריט ההקשר של הווידג׳ט כדי לערוך את הגדרות הלוח האלה.", + "localAlerts": "התראות מקומיות", + "notifications": "התראות בדפדפן", + "sound": "צלילי טיימר", + "localAlertsHint": "צלילי הטיימר מופעלים כברירת מחדל. הצלילים וההתראות חלים רק על וידג׳ט זה בדפדפן זה.", + "notificationsDenied": "ההתראות חסומות בדפדפן זה." } }, "minecraftServerStatus": { "name": "סטטוס שרת מיינקראפט", "description": "מציג את סטטוס שרת מיינקראפט", "option": { - "title": { - "label": "כותרת" - }, "domain": { "label": "כתובת השרת" }, @@ -1753,11 +2786,21 @@ "noStation": "לא נבחרה תחנה", "option": { "baseUrl": { - "label": "" + "label": "", + "description": "כתובות URL מותאמות אישית חייבות לפנות לכתובת IP ציבורית. מארחים פרטיים ומקומיים נדחים." }, "station": { - "label": "תחנה" + "label": "תחנה", + "placeholder": "חפש תחנה" } + }, + "error": { + "customSourceUnavailable": "מקור לוח הזמנים אינו זמין. ודא שה-URL שלו מפנה לכתובת IP ציבורית.", + "stationSearch": "לא ניתן לחפש תחנות. בדוק את ה-URL המותאם אישית ואת הגישה ללוח שלך." + }, + "warning": { + "stale": "לא ניתן לרענן את לוח הזמנים. מוצגות יציאות שעודכנו לאחרונה ב-{time}.", + "staleCompact": "נתונים לא עדכניים" } }, "notebook": { @@ -1789,6 +2832,9 @@ "directionRtl": "", "blockquote": "ציטוט", "horizontalLine": "קו אופקי", + "details": "החלף מצב של מקטע הניתן לכיווץ", + "expandDetails": "הרחב מקטע הניתן לכיווץ", + "collapseDetails": "כווץ מקטע הניתן לכיווץ", "bulletList": "רשימת תבליט", "orderedList": "רשימה מסודרת", "checkList": "צ'ק ליסט", @@ -1797,16 +2843,20 @@ "link": "קישור", "unlink": "הסרת קישור", "image": "הטמעת תמונה", - "addTable": "הוספת טבלה", + "insertTable": "הוסף טבלה", + "insertTableSize": "הוסף טבלה בגודל {columns} × {rows}", "deleteTable": "מחיקת טבלה", "colorCell": "טקסט צבעוני", - "mergeCell": "החלפת מיזוג התא", + "mergeCells": "מזג תאים", + "splitCell": "פצל תא", "addColumnLeft": "הוספת עמודה לפני", "addColumnRight": "הוספת עמודה אחרי", "deleteColumn": "מחיקת עמודה", "addRowTop": "הוספת שורה לפני", "addRowBelow": "הוספת שורה אחרי", - "deleteRow": "מחיקת שורה" + "deleteRow": "מחיקת שורה", + "toggleHeaderRow": "החלף מצב שורת כותרת", + "toggleHeaderColumn": "החלף מצב עמודת כותרת" }, "align": { "left": "שמאל", @@ -1817,8 +2867,6 @@ "clearColor": "ניקוי צבע", "source": "מקור", "widthPlaceholder": "ערך באחוזים או בפיקסלים", - "columns": "עמודות", - "rows": "שורות", "width": "רוחב", "height": "גובה" }, @@ -1830,7 +2878,9 @@ "discard": "בטל שינויים", "keepEditing": "המשך לערוך" } - } + }, + "saveFailed": "לא ניתן לשמור את ההערה", + "documentStats": "{words, plural, one {# מילה} two {# מילים} other {# מילים}} · {characters, plural, one {# תו} two {# תווים} other {# תווים}}" }, "anchorNote": { "name": "פתק Anchor", @@ -1839,9 +2889,6 @@ "noteId": { "label": "פתק" }, - "showTitle": { - "label": "הצג כותרת" - }, "showUpdatedAt": { "label": "הצג עדכון אחרון" } @@ -1851,14 +2898,20 @@ "notFound": "הפתק לא נמצא", "noNotes": "לא נמצאו פתקים", "integrationRequired": "בחר תחילה אינטגרציית Anchor", - "updatedAt": "עודכן ב- {date}", "untitled": "ללא כותרת", - "edit": "עריכה", - "save": "שמור", - "cancel": "בטל", "readOnlyViewer": "יש לך גישת צפייה לפתק זה. עריכה מושבתת.", "saveForbidden": "אין לך הרשאה לערוך פתק זה.", - "saveFailed": "שמירת הפתק נכשלה. נסה שוב." + "saveFailed": "שמירת הפתק נכשלה. נסה שוב.", + "createdAt": "נוצר ב-{date}", + "permission": { + "owner": "בעלים", + "editor": "עורך", + "viewer": "צופה" + }, + "status": { + "pinned": "מוצמד", + "archived": "בארכיון" + } }, "iframe": { "name": "iFrame", @@ -1917,6 +2970,25 @@ "clickable": { "label": "ניתן ללחיצה" } + }, + "state": { + "on": "מופעל", + "off": "כבוי", + "unavailable": "לא זמין", + "unknown": "לא ידוע" + }, + "advanced": { + "entityId": "מזהה ישות: {id}", + "lastChanged": "שונה ב-{date}", + "attribute": { + "unit": "יחידה", + "deviceClass": "סוג התקן", + "icon": "סמל" + } + }, + "error": { + "loadFailed": "לא ניתן לטעון את הישות", + "toggleFailed": "לא ניתן לעדכן את הישות" } }, "smartHome-executeAutomation": { @@ -1932,11 +3004,31 @@ }, "spotlightAction": { "run": "הפעל {name}" + }, + "advanced": { + "lastExecuted": "הרצה אחרונה ב-{time}", + "automationId": "מזהה אוטומציה: {id}", + "ready": "מוכן להפעלה", + "noPermission": "אין הרשאה להפעיל אוטומציה זו" + }, + "status": { + "running": "האוטומציה פועלת", + "success": "האוטומציה הושלמה" + }, + "error": { + "executeFailed": "לא ניתן להפעיל את האוטומציה" } }, "stockPrice": { "name": "מחיר המניה", "description": "מציג את מחיר המניה הנוכחי של חברה", + "advanced": { + "currentPrice": "מחיר נוכחי", + "previousClose": "שער נעילה קודם", + "changePercentage": "שינוי (%)", + "minimum": "מינימום", + "maximum": "מקסימום" + }, "option": { "stock": { "label": "סמל מניה" @@ -2007,6 +3099,10 @@ "label": "חודש אחד" } } + }, + "showDetails": { + "label": "הצג פרטים", + "description": "הצג את השם, השינוי וטווח הזמן בתצוגה המצומצמת. כבה כדי להציג רק את הסמל והמחיר." } } }, @@ -2034,6 +3130,13 @@ "showUnmonitored": { "label": "הצג ללא פיקוח" } + }, + "advanced": { + "previousMonth": "הצג את החודש הקודם", + "nextMonth": "הצג את החודש הבא", + "eventCount": "{count, plural, one {אירוע אחד} two {שני אירועים} other {# אירועים}}", + "loading": "טוען אירועי לוח שנה...", + "noEvents": "אין אירועים בחודש זה" } }, "weather": { @@ -2046,16 +3149,18 @@ "disableTemperatureDecimals": { "label": "ביטול טמפרטורה עשרונית" }, + "animateIcons": { + "label": "הנפש סמלי מזג האוויר" + }, + "showHumidity": { + "label": "הצג לחות" + }, "showCurrentWindSpeed": { - "label": "הצגת מהירות רוח נוכחית", - "description": "רק במזג אוויר נוכחי" + "label": "הצגת מהירות רוח נוכחית" }, "useImperialSpeed": { "label": "השתמש במייל לשעה עבור מהירות הרוח" }, - "location": { - "label": "מיקום מזג האוויר" - }, "showCity": { "label": "הצג עיר" }, @@ -2065,13 +3170,10 @@ "forecastDayCount": { "label": "כמות ימי התחזית", "description": "כאשר הווידג'ט אינו רחב מספיק, פחות ימים מוצגים" - }, - "dateFormat": { - "label": "פורמט תאריך", - "description": "איך צריך להיראות התאריך" } }, "currentWindSpeed": "{currentWindSpeed} קמ״ש", + "disabled": "נתוני מזג האוויר אינם זמינים משום שחיבורים יוצאים מושבתים", "dailyForecast": { "sunrise": "זריחה", "sunset": "שקיעה", @@ -2094,6 +3196,47 @@ "thunderstorm": "סופת רעמים", "thunderstormWithHail": "סופת רעמים עם ברד", "unknown": "לא ידוע" + }, + "details": "הצג פרטי מזג אוויר", + "detailsFor": "הצג פרטי מזג אוויר עבור {date}", + "advanced": { + "forecast": "תחזית ל-7 ימים", + "hourlyForecast": "24 השעות הבאות", + "day": "יום", + "time": "שעה", + "conditions": "תנאים", + "temperature": "טמפרטורה", + "feelsLike": "מרגיש כמו {temperature}", + "feelsLikeLabel": "מרגיש כמו", + "feelsLikeRange": "מרגיש כמו: {maximum} / {minimum}", + "highLow": "גבוהה {maximum} · נמוכה {minimum}", + "observedAt": "עודכן ב- {time}", + "humidity": "לחות", + "averageHumidity": "לחות ממוצעת: {humidity}%", + "currentHumidity": "לחות נוכחית", + "wind": "רוח / משבים ({unit})", + "currentWind": "רוח / משבים נוכחיים", + "windValue": "{speed} / {gusts} {unit}", + "windDetail": "רוח / משבים מרביים: {speed} / {gusts} {unit}", + "nextHourPrecipitation": "משקעים בשעה הקרובה", + "precipitationChance": "סיכוי למשקעים", + "precipitationValue": "{probability}% · {amount} מ״מ", + "precipitationDetail": "משקעים: {probability}% · {amount} מ״מ", + "todayUv": "מדד UV מרבי היום", + "uvIndex": "מדד UV מרבי: {value}", + "daylight": "אור יום: {duration}", + "hourlyTooltip": "מרגיש כמו {feelsLike}{temperatureUnit} · {amount} מ״מ · לחות {humidity}% · רוח {speed} {speedUnit}", + "hourlyTooltipWithoutHumidity": "מרגיש כמו {feelsLike}{temperatureUnit} · {amount} מ״מ · רוח {speed} {speedUnit}", + "detailLabel": { + "feelsLike": "מרגיש כמו", + "precipitation": "משקעים", + "humidity": "לחות ממוצעת", + "wind": "רוח / משבים מרביים", + "uv": "מדד UV מרבי", + "daylight": "אור יום" + }, + "sun": "זריחה / שקיעה", + "noForecast": "נתוני תחזית אינם זמינים" } }, "indexerManager": { @@ -2106,8 +3249,15 @@ }, "title": "מנהל אינדקס", "testAll": "בדוק הכל", + "status": { + "healthy": "בָּרִיא", + "unhealthy": "לא בריא", + "disabled": "מושבת", + "unknown": "הבריאות אינה זמינה" + }, "error": { - "internalServerError": "נכשל באחזור סטטוס האינדקסים" + "internalServerError": "נכשל באחזור סטטוס האינדקסים", + "testAll": "בדיקת האינדקסרים נכשלה. נסה שוב." } }, "healthMonitoring": { @@ -2136,11 +3286,6 @@ "fileSystem": { "label": "הצג מידע על מערכת הקבצים" }, - "visibleStorageVolumes": { - "label": "", - "description": "", - "placeholder": "" - }, "defaultTab": { "label": "כרטיסיית ברירת מחדל" }, @@ -2163,17 +3308,27 @@ "minutes": "{count} דקות", "used": "בשימוש", "available": "זמין", - "lastSeen": "עדכון סטטוס אחרון: {lastSeen}" + "lastSeen": "עדכון סטטוס אחרון: {lastSeen}", + "updatesAvailable": "{count, plural, one {עדכון אחד זמין} two {שני עדכונים זמינים} other {# עדכונים זמינים}}", + "rebootRequired": "נדרשת הפעלה מחדש", + "rebootNotRequired": "אין צורך בהפעלה מחדש" + }, + "smartStatus": { + "attributesWithinThresholds": "SMART: התכונות נמצאות בטווחי הסף", + "attributesFailed": "SMART: {attributes} נכשלו", + "noCriticalWarning": "SMART: ה-SSD לא דיווח על אזהרה", + "criticalWarning": "SMART: ה-SSD דיווח על אזהרה קריטית" + }, + "gauge": { + "cpuUsage": "ניצול מעבד", + "cpuTemperature": "טמפרטורת המעבד", + "memoryUsage": "ניצול זיכרון", + "gpuUsage": "שימוש ב-GPU של {name}" }, - "memory": {}, "error": { "internalServerError": "נכשל בעדכון סטטוס בריאות המערכת" }, "cluster": { - "summary": { - "cpu": "מעבד", - "memory": "זכרון פנימי" - }, "resource": { "node": { "name": "צמתים" @@ -2209,8 +3364,6 @@ "table": { "header": { "name": "שם", - "cpu": "מעבד", - "memory": "זכרון פנימי", "node": "צומת" } } @@ -2220,33 +3373,29 @@ "name": "סטטיסטיקות דוקר", "description": "סטטיסטיקות של המכולות שלך (ניתן להוסיף ווידג'ט זה רק עם הרשאות מנהל)", "option": { - "columns": { - "label": "" + "endpointIds": { + "label": "סביבות Docker", + "description": "השאר ריק כדי להציג קונטיינרים מכל סביבות Docker", + "placeholder": "כל סביבות Docker" }, - "enableRowSorting": { - "label": "אפשר מיון פריטים" + "containerFilter": { + "label": "קונטיינרים לסינון" + }, + "filterIsWhitelist": { + "label": "סנן כרשימת היתרים" }, "defaultSort": { - "label": "עמודה המשמשת למיון כברירת מחדל", "option": { "name": "שם", "state": "מצב", "cpuUsage": "ניצול מעבד", "memoryUsage": "ניצול זיכרון" } - }, - "descendingDefaultSort": { - "label": "מיון הפוך" - }, - "columnOrder": { - "label": "" - }, - "columnWidths": { - "label": "" } }, "error": { "internalServerError": "נכשל באחזור סטטיסטיקות המכולות", + "endpointsUnavailable": "נקודות הקצה של Docker אינן זמינות", "layoutSaveTitle": "", "layoutSaveMessage": "" }, @@ -2255,7 +3404,6 @@ } }, "coolify": { - "name": "קוליפיי", "description": "סקירה של מופע Coolify שלך עם שרתים ואפליקציות", "option": { "showServers": { @@ -2281,17 +3429,49 @@ "internalServerError": "אחזור נתוני Coolify נכשל" }, "server": { - "buildServer": "בנייה" + "buildServer": "בנייה", + "resourceCounts": "{applications, plural, one {# אפליקציה} two {# אפליקציות} other {# אפליקציות}} / {services, plural, one {# שירות} two {# שירותים} other {# שירותים}}", + "reachability": "נגישות", + "usability": "שמישות" + }, + "source": { + "url": "מקור: {url}", + "unavailable": "{source}: לא זמין" }, "instances": { "title": "מופעים" + }, + "action": { + "openResource": "פתח את {name}", + "openLogs": "פתח את יומני {name}", + "showIp": "הצג כתובת IP", + "hideIp": "הסתר כתובת IP" + }, + "status": { + "running": "פועל", + "stopped": "נעצר", + "exited": "נסגר", + "starting": "מופעל", + "restarting": "מפעיל מחדש", + "unknown": "לא ידוע", + "online": "מקוון", + "offline": "לא מקוון", + "reachable": "נגיש", + "unreachable": "לא נגיש", + "usable": "שמיש", + "unusable": "לא שמיש" } }, "vpn": { "name": "", "description": "", "serviceUnavailable": "", - "option": {} + "status": { + "running": "פועל", + "notRunning": "לא פועל", + "unavailable": "לא זמין", + "vpn": "VPN: {status}" + } }, "ups": { "name": "", @@ -2318,14 +3498,19 @@ "runtime": "", "load": "", "input": "", - "output": "" + "output": "", + "batteryVoltage": "מתח סוללה", + "power": "הספק", + "temperature": "טמפרטורה", + "manufacturer": "יצרן", + "model": "דגם", + "serial": "מספר סידורי" }, "error": { "internalServerError": "" } }, "tracearr": { - "name": "טרייסאר", "description": "ניטור שרת מדיה משופר עם נתוני זרם וקידוד מפורטים", "option": { "showStreams": { @@ -2413,10 +3598,7 @@ "label": "", "description": "", "placeholder": "", - "loading": "", - "noEvents": "", - "none": "", - "configureWebsiteFirst": "" + "none": "" }, "chartType": { "label": "", @@ -2447,26 +3629,21 @@ "eventNames": { "label": "", "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "configureWebsiteFirst": "" + "placeholder": "" }, "topCount": { "label": "", "description": "" + }, + "events": { + "loading": "טוען אירועים...", + "noEvents": "לא נמצאו אירועים", + "configureWebsiteFirst": "בחר אתר תחילה כדי לטעון אירועים" } }, "event": { - "occurrences": "", "label": "" }, - "topPages": { - "direct": "" - }, - "topReferrers": { - "direct": "" - }, "events": { "selectPrompt": "" }, @@ -2475,6 +3652,9 @@ "noWebsite": "", "noData": "", "internalServerError": "" + }, + "top": { + "direct": "ישיר" } }, "common": { @@ -2502,7 +3682,8 @@ }, "integration": { "noData": "לא נמצא אינטגרציה", - "description": "לחץ על כדי ליצור אינטגרציה חדשה" + "description": "לחץ על כדי ליצור אינטגרציה חדשה", + "manage": "ניהול אינטגרציות" }, "app": { "noData": "לא נמצאה אפליקציה", @@ -2513,7 +3694,61 @@ "noIntegration": "לא נבחרה אינטגרציה", "noData": "אין נתוני אינטגרציה זמינים" }, - "option": {} + "integrationDisconnected": "אין נתונים זמינים, כל האינטגרציות מנותקות", + "updatedAt": "עודכן ב- {date}", + "title": { + "label": "כותרת" + }, + "openInNewTab": { + "label": "פתיחה בכרטיסיה חדשה" + }, + "showTitle": { + "label": "הצג כותרת" + }, + "weatherLocation": { + "label": "מיקום מזג האוויר" + }, + "layout": { + "label": "פריסה", + "option": { + "horizontal": "אופקי", + "vertical": "אנכי", + "grid": "רשת" + } + }, + "select": { + "loading": "טוען...", + "loadError": "טעינת האפשרויות נכשלה" + }, + "dateFormat": { + "label": "פורמט תאריך", + "description": "איך צריך להיראות התאריך" + }, + "visibleStorageVolumes": { + "label": "אמצעי אחסון גלויים", + "description": "זמין רק כאשר כל האינטגרציות שנבחרו הן OpenMediaVault או Synology. השאר ריק כדי להציג את כל אמצעי האחסון שזוהו.", + "placeholder": "בחר אמצעי אחסון" + }, + "tableOptions": { + "columns": { + "label": "עמודות להצגה" + }, + "columnOrder": { + "label": "סדר עמודות" + }, + "columnWidths": { + "label": "רוחב עמודות" + }, + "enableRowSorting": { + "label": "אפשר מיון פריטים" + }, + "defaultSort": { + "label": "עמודה המשמשת למיון כברירת מחדל" + }, + "invertSorting": { + "label": "מיון הפוך" + } + } }, "video": { "name": "זרם וידאו", @@ -2572,6 +3807,7 @@ "transcoding": "", "paused": "", "remaining": "", + "seasonEpisode": "עונה {season} פרק {episode}", "metadata": { "title": "סטטיסטיקות לחנונים", "video": { @@ -2589,11 +3825,16 @@ "resolution": "רזולוציה", "target": "קידוד יעד" } - } + }, + "unknownUser": "משתמש לא ידוע" + }, + "summary": { + "sessions": "{count, plural, one {# הפעלה} two {# הפעלות} other {# הפעלות}}", + "playing": "{count} פועל", + "transcoding": "{count} בהמרת קידוד" } }, "paperlessNgx": { - "name": "", "description": "", "documentsTotal": "", "documentsInbox": "", @@ -2638,7 +3879,6 @@ } }, "patchmon": { - "name": "", "description": "", "title": "", "totalHosts": "", @@ -2705,36 +3945,30 @@ "description": "" }, "hostsNeedingUpdatesWarningAt": { - "label": "", - "description": "" + "label": "" }, "hostsNeedingUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "" }, "securityUpdatesThresholdMode": { "label": "", "description": "" }, "securityUpdatesWarningAt": { - "label": "", - "description": "" + "label": "" }, "securityUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "" }, "hostsWithSecurityUpdatesThresholdMode": { "label": "", "description": "" }, "hostsWithSecurityUpdatesWarningAt": { - "label": "", - "description": "" + "label": "" }, "hostsWithSecurityUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "" }, "upToDateHostsThresholdMode": { "label": "", @@ -2753,12 +3987,10 @@ "description": "" }, "totalOutdatedPackagesWarningAt": { - "label": "", - "description": "" + "label": "" }, "totalOutdatedPackagesCriticalAt": { - "label": "", - "description": "" + "label": "" }, "showOsDistribution": { "label": "", @@ -2789,6 +4021,14 @@ "bars": "", "donut": "" } + }, + "threshold": { + "warningAt": { + "description": "הזן צהוב כאשר הערך מגיע לסף זה" + }, + "criticalAt": { + "description": "הזן אדום כאשר הערך מגיע לסף זה" + } } }, "error": { @@ -2796,12 +4036,12 @@ } }, "bazarr": { - "name": "", "description": "", "episodes": "", "movies": "", "providers": "", "status": "", + "announcements": "הודעות", "option": { "showMissingEpisodes": { "label": "", @@ -2848,7 +4088,8 @@ "users": "משתמשים", "photos": "תמונות", "videos": "סרטונים", - "storage": "אחסון בשימוש" + "storage": "אחסון בשימוש", + "albumLimit": "האלבומים הגדולים ביותר (מוצגים עד {count})" }, "immich-albumCarousel": { "name": "אלבום Immich", @@ -2872,24 +4113,21 @@ } }, "description": "", - "noPhotos": "" + "noPhotos": "", + "albumPhoto": "תמונת אלבום", + "actions": { + "previousPhoto": "תמונה קודמת", + "nextPhoto": "תמונה הבאה", + "pauseSlideshow": "השהה מצגת", + "resumeSlideshow": "המשך מצגת", + "toggleSlideshow": "השהה או המשך מצגת", + "photo": "תמונה {number}" + } }, "downloads": { "name": "הורדת לקוח", "description": "מאפשר לך להציג ולנהל את ההורדות שלך הן מלקוחות Torrent והן מלקוחות Usenet.", "option": { - "columns": { - "label": "עמודות להצגה" - }, - "enableRowSorting": { - "label": "אפשר מיון פריטים" - }, - "defaultSort": { - "label": "עמודה המשמשת למיון כברירת מחדל" - }, - "descendingDefaultSort": { - "label": "מיון הפוך" - }, "showCompletedUsenet": { "label": "הצג ערכי usenet שסומנו כהשלמה" }, @@ -2914,12 +4152,6 @@ "limitPerIntegration": { "label": "הגבלת פריטים לכל אינטגרציה", "description": "פעולה זו תגביל את מספר הפריטים המוצגים בכל אינטגרציה, לא באופן גלובלי" - }, - "columnOrder": { - "label": "" - }, - "columnWidths": { - "label": "" } }, "errors": { @@ -2951,7 +4183,7 @@ }, "id": { "columnTitle": "מזהה", - "detailsTitle": "" + "detailsTitle": "מזהה" }, "integration": { "columnTitle": "אינטגרציה" @@ -3080,6 +4312,10 @@ "mediaRequests-requestList": { "name": "רשימת בקשות מדיה", "description": "ראה רשימה של כל בקשות המדיה ממופע Overseerr או Jellyseerr שלך", + "empty": { + "title": "אין עדיין בקשות מדיה", + "description": "חפש סרט או תוכנית כדי להתחיל בקשה." + }, "option": { "linksTargetNewTab": { "label": "פתח לינק בלשונית חדשה" @@ -3113,12 +4349,16 @@ "failed": "נכשל", "completed": "הושלם" }, + "unknown": "לא ידוע", "toBeDetermined": "ייקבע בהמשך" }, "mediaRequests-requestStats": { "name": "מצב בקשות מדיה", "description": "סטטיסטיקה לגבי בקשות המדיה", - "option": {}, + "empty": { + "title": "אין עדיין פעילות בקשות", + "description": "הסטטיסטיקות יופיעו לאחר בקשת המדיה הראשונה." + }, "titles": { "stats": { "main": "סטטיסטיקות מדיה", @@ -3128,8 +4368,7 @@ "declined": "נדחה כבר", "available": "כבר זמין", "tv": "בקשות סדרות", - "movie": "בקשות סרטים", - "total": "סך הכל" + "movie": "בקשות סרטים" }, "users": { "main": "משתמשים מובילים", @@ -3155,7 +4394,6 @@ }, "currentIndex": "{start}-{end} מתוך {total}", "healthCheck": { - "title": "בדיקת תקינות", "queued": "בתור", "status": { "healthy": "בָּרִיא", @@ -3164,41 +4402,36 @@ }, "panel": { "statistics": { - "empty": "ריק", - "transcodes": "קידודים", - "transcodesCount": "קידודים", - "healthChecksCount": "בדיקות בריאות", "filesCount": "קבצים", "savedSpace": "שטח שמור", - "healthChecks": "בדיקות בריאות", "videoCodecs": "קודקים", "videoContainers": "מיכלים", "videoResolutions": "רזולוציות" }, "workers": { - "empty": "ריק", "table": { - "file": "קוֹבֶץ", "eta": "זמן סיום משוער", - "progress": "התקדמות", - "transcode": "קידוד", - "healthCheck": "בדיקת תקינות" + "progress": "התקדמות" } }, "queue": { - "empty": "ריק", "table": { - "file": "קוֹבֶץ", - "size": "גודל", - "transcode": "קידוד", - "healthCheck": "בדיקת תקינות" + "size": "גודל" } + }, + "common": { + "empty": "ריק", + "file": "קוֹבֶץ", + "healthCheck": "בדיקת תקינות", + "transcode": "קידוד", + "transcodes": "קידודים", + "healthChecks": "בדיקות בריאות" } } }, "mediaMissing": { "name": "", - "description": "", + "description": "מציג סרטים, פרקים וספרים חסרים וממתינים מ־{radarr}, {sonarr} ו־{bindery}", "option": { "showMissing": { "label": "" @@ -3216,7 +4449,8 @@ }, "type": { "movie": "", - "episode": "" + "episode": "", + "book": "ספר" }, "empty": { "missing": "", @@ -3247,6 +4481,13 @@ "showPosterImage": { "label": "הצג תמונת פוסטר" } + }, + "error": { + "allFeedsFailed": "לא ניתן לטעון הזנות RSS. בדוק את כתובות ההזנה ונסה שוב." + }, + "warning": { + "partial": "{count, plural, one {לא ניתן לטעון הזנת RSS אחת} two {לא ניתן לטעון שתי הזנות RSS} other {לא ניתן לטעון # הזנות RSS}}", + "stale": "לא ניתן לרענן הזנות RSS. מוצגים פריטים שנטענו קודם לכן." } }, "releases": { @@ -3322,17 +4563,8 @@ "label": "ביטויים רגילים" } }, - "edit": { - "label": "עריכה" - }, "editForm": { - "title": "ערוך מאגר", - "cancel": { - "label": "בטל" - }, - "confirm": { - "label": "אשר" - } + "title": "ערוך מאגר" }, "importForm": { "title": "ייבוא מדוקר" @@ -3349,8 +4581,7 @@ "label": "", "token": "", "configured": "", - "notConfigured": "", - "save": "" + "notConfigured": "" } } }, @@ -3377,17 +4608,32 @@ "noProviderResponse": "אין תשובה מהספק", "unexpected": "" } - } + }, + "expandDetails": "הצג פרטים עבור {name}", + "collapseDetails": "הסתר פרטים עבור {name}" }, "networkControllerSummary": { - "option": {}, - "card": { - "vpn": { - "countConnected": "{count} מחובר" + "advanced": { + "updated": "עודכן", + "metric": { + "latency": "השהיה", + "ping": "פינג", + "uptime": "זמן ריצה", + "users": "משתמשים", + "guests": "אורחים" } }, + "card": { + "vpn": { + "countConnected": "{count, plural, one {# מחובר} two {# מחוברים} other {# מחוברים}}", + "label": "VPN" + }, + "wan": "WAN", + "web": "אינטרנט", + "wifi": "אלחוטי", + "lan": "LAN" + }, "error": { - "integrationsDisconnected": "אין נתונים זמינים, כל האינטגרציות מנותקות", "unknownContentOption": "אפשרות תוכן לא ידוע עבור ווידג'ט סיכום בקר רשת: " }, "name": "סיכום בקר רשת", @@ -3424,7 +4670,6 @@ } }, "error": { - "integrationsDisconnected": "אין נתונים זמינים, כל האינטגרציות מנותקות", "unknownContentOption": "אפשרות תוכן לא ידוע עבור ווידג'ט סיכום בקר רשת: " }, "name": "סטטוס רשת", @@ -3454,7 +4699,6 @@ "versiontitle": "גרסאות", "cputitle": "ניצול מעבד", "memorytitle": "ניצול זיכרון", - "cpu": "מעבד", "memory": "זיכרון", "interfaces": { "name": "שם", @@ -3462,6 +4706,16 @@ "recv": "התקבל", "title": "ממשקי רשת" } + }, + "empty": { + "noInterfaces": "אין עדיין נתונים על ממשקי רשת" + }, + "versionUnknown": "גרסה לא ידועה", + "metricAccessible": "{metric}: {value}%, {status}", + "status": { + "normal": "רגיל", + "warning": "אזהרה", + "critical": "קריטי" } }, "notifications": { @@ -3471,8 +4725,21 @@ "option": { "hideLogos": { "label": "" + }, + "messageFormat": { + "label": "תבנית הודעה", + "option": { + "auto": "אוטומטי", + "plain": "טקסט רגיל", + "markdown": "Markdown", + "html": "HTML" + } } - } + }, + "openService": "פתח שירות התראות", + "deleteNotification": "מחק התראה מ-Gotify", + "deleteFailed": "לא ניתן למחוק את ההתראה", + "deleteFailedMessage": "לא ניתן למחוק את ההתראה. נסה שוב." }, "speedtestTracker": { "name": "מעקב Speedtest", @@ -3514,7 +4781,6 @@ } }, "uptimeKuma": { - "name": "", "description": "", "option": { "showAverageUptime": { @@ -3551,10 +4817,14 @@ }, "error": { "internalServerError": "" + }, + "status": { + "up": "סך הכל העלאה", + "down": "מהירות הורדה", + "paused": "מושהה" } }, "traefik": { - "name": "", "description": "", "option": { "showTcp": { @@ -3575,7 +4845,6 @@ }, "resource": { "routers": "", - "services": "", "middlewares": "" }, "status": { @@ -3585,7 +4854,20 @@ }, "error": { "internalServerError": "" - } + }, + "resourceType": { + "router": "נתב", + "service": "שירות", + "middleware": "תוכנת תווך" + }, + "resourceStatus": { + "enabled": "מאופשר", + "disabled": "מושבת", + "warning": "אזהרה", + "error": "שגיאה", + "unknown": "לא ידוע" + }, + "failedEndpoint": "נכשל: {endpoint}" }, "audioStats": { "name": "", @@ -3651,9 +4933,7 @@ "label": "תרשימים גלויים", "description": "בחר את התרשימים שברצונך שיהיו גלויים.", "option": { - "cpu": "מעבד", "memory": "זיכרון", - "gpu": "מעבד גרפי", "network": "רשת" } }, @@ -3668,12 +4948,11 @@ } }, "card": { - "cpu": "מעבד", "memory": "זיכרון", - "gpu": "מעבד גרפי", "network": "רשת", "up": "העלאה", - "down": "הורדה" + "down": "הורדה", + "memoryTooltip": "{used} / {available} ({percent}%)" } }, "systemDisks": { @@ -3699,151 +4978,88 @@ }, "showBackgroundBar": { "label": "הצג סרגל שימוש ברקע" - }, - "visibleStorageVolumes": { - "label": "", - "description": "", - "placeholder": "" } }, "status": { - "unhealthy": "לא בריא" + "unhealthy": "לא בריא", + "smart": "SMART", + "free": "{percentage}% פנוי" + } + }, + "customApi": { + "name": "ווידג׳ט מותאם אישית", + "description": "מרנדר הגדרת JSX מותאמת אישית.", + "customJsx": { + "noTemplate": "לא מוגדרת תבנית JSX.", + "templateWarnings": "{count} אזהרות תבנית:", + "requestIdRequired": "בקרת רשת זו דורשת requestId בעל שם.", + "unsavedPreview": "הפעל את בדיקת הבקשה הראשונית בעורך לפני בדיקת בקשות בעלות שם.", + "invalidParams": "פרמטרי הבקשה אינם חוקיים.", + "loading": "טוען בקשה...", + "loadRequest": "טען בקשה", + "requestFailed": "הבקשה נכשלה.", + "retry": "נסה שוב את הבקשה", + "actionCompleted": "הפעולה הושלמה בהצלחה.", + "actionSimulated": "הפעולה בוצעה בהדמיה; לא נשלחה בקשה.", + "actionsDisabledEditMode": "הפעולות מושבתות כאשר הלוח במצב עריכה.", + "widgetItemUnavailable": "פריט הווידג׳ט הזה אינו זמין.", + "toggle": "החלף מצב", + "copied": "הועתק", + "confirmDelete": "אשר פעולה הרסנית זו." + }, + "option": { + "definitionId": { + "label": "ווידג׳ט מותאם אישית" + }, + "refreshInterval": { + "label": "", + "description": "" + } + }, + "noDefinition": "", + "definitionNotFound": "ווידג׳ט מותאם אישית אינו זמין", + "migrationRequired": "ווידג׳ט מותאם אישית מדור קודם זה נשמר, אך יש להעבירו ל-Custom JSX v2 דרך ניהול הווידג׳טים המותאמים אישית לפני שניתן יהיה להפעילו.", + "manageMigration": "פתח ניהול וידג׳טים מותאמים אישית", + "contactAdmin": "פנה למנהל מערכת.", + "configurationNeedsRepair": "אפשרויות הווידג׳ט השתנו. ערוך את הווידג׳ט כדי לתקן את התצורה שלו.", + "removeFromBoard": "הסר מהלוח", + "editModePending": "שמור את הלוח כדי לטעון את הווידג׳ט.", + "picker": { + "group": "ווידג׳טים מסוג Custom JSX", + "empty": "לא נמצאו ווידג׳טים מותאמים אישית", + "preview": "תצוגה מקדימה", + "sources": "{count, plural, one {# מקור} two {# מקורות} other {# מקורות}}", + "requests": "{count, plural, one {# בקשה} two {# בקשות} other {# בקשות}}", + "migrationRequired": "נדרשת העברה", + "migrationDescription": "ווידג׳ט v1 זה שהוצב עדיין אינו יכול לפעול. העתק את ההנחיה המצונזרת שלו ל-LLM, ולאחר מכן הדבק ב-Homarr את תגובת ה-JSON הבודדת.", + "manageMigration": "פתח ניהול וידג׳טים מותאמים אישית", + "contactAdmin": "פנה למנהל מערכת." + }, + "configuration": { + "needsAttention": "נדרשת תשומת לב לתצורה: {message}", + "advancedOptions": "אפשרויות מתקדמות", + "invalidJson": "JSON לא חוקי" } }, "beszelSystemTable": { "name": "", "description": "", "option": { - "statusFilter": { - "label": "" - }, "sortBy": { "label": "" }, "sortDirection": { "label": "" - }, - "showCpu": { - "label": "" - }, - "showMemory": { - "label": "" - }, - "showDisk": { - "label": "" - }, - "showGpu": { - "label": "" - }, - "showLoadAvg": { - "label": "" - }, - "showNet": { - "label": "" - }, - "showTemp": { - "label": "" - }, - "showBattery": { - "label": "" - }, - "showServices": { - "label": "" - }, - "showUptime": { - "label": "" - }, - "showAgent": { - "label": "" - }, - "columnOrder": { - "label": "" - }, - "columnWidths": { - "label": "" } }, - "noRecords": "", "error": { - "internalServerError": "", "layoutSaveTitle": "", "layoutSaveMessage": "" - }, - "column": { - "system": "", - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" } }, "beszelSystemGrid": { "name": "", - "description": "", - "option": { - "statusFilter": { - "label": "" - }, - "showCpu": { - "label": "" - }, - "showMemory": { - "label": "" - }, - "showDisk": { - "label": "" - }, - "showGpu": { - "label": "" - }, - "showLoadAvg": { - "label": "" - }, - "showNet": { - "label": "" - }, - "showTemp": { - "label": "" - }, - "showBattery": { - "label": "" - }, - "showServices": { - "label": "" - }, - "showUptime": { - "label": "" - }, - "showAgent": { - "label": "" - } - }, - "error": { - "internalServerError": "" - }, - "empty": { - "noSystems": "" - }, - "metric": { - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" - } + "description": "" }, "beszelAlerts": { "name": "", @@ -3857,11 +5073,12 @@ } }, "empty": "", - "error": { - "internalServerError": "" - }, "history": "", "resolved": "", + "alertDescription": { + "statusDuration": "מושבת במשך {minutes} דקות", + "threshold": "חורג מ-{value} במשך {minutes} דקות" + }, "status": { "triggered": "", "ok": "" @@ -3908,16 +5125,16 @@ "noSystems": "" }, "error": { - "internalServerError": "", "liveConnectionFailed": "", "switchToHistorical": "", - "systemNotFound": "" + "systemNotFound": "", + "selectionSaveTitle": "לא ניתן לשמור את הבחירה", + "selectionSaveMessage": "לא ניתן לשמור את בחירת המערכת או פרק הזמן. נסה שוב." }, "chart": { "cpu": { "title": "", - "subtitle": "", - "series": "" + "subtitle": "" }, "memory": { "title": "", @@ -3932,7 +5149,7 @@ }, "diskIO": { "title": "", - "subtitle": "", + "subtitle": "תעבורה לפי מערכת קבצים", "read": "", "write": "" }, @@ -3959,39 +5176,550 @@ "title": "", "subtitle": "" } + }, + "period": { + "live": "חי", + "oneHour": "שעה אחת", + "twelveHours": "12 שעות", + "oneDay": "24 שעות", + "oneWeek": "שבוע אחד", + "thirtyDays": "30 ימים" } }, - "wud": { - "name": "וואטס אפ דוקר", - "description": "הצג כמה מהמכולות הנצפות עם עדכונים זמינים.", - "title": "What's Up Docker", - "monitored": "מנוטר", - "updatesAvailable": "{count, plural, one {# עדכון זמין} two {# עדכונים זמינים} many {# עדכונים זמינים} other {# עדכונים זמינים}}", - "updateAvailable": "עדכון זמין", - "openReleaseNotes": "פתח הערות שחרור", + "assistant": { + "name": "עוזר", + "description": "נהל שיחת עוזר מלאה ישירות בלוח שלך.", + "unavailable": { + "title": "העוזר אינו זמין", + "description": "התחבר ובקש ממנהל מערכת להגדיר את העוזר מלוח הניהול." + }, + "compact": { + "title": "עוזר", + "description": "שנה את גודל הווידג׳ט כדי לשוחח כאן, או פתח את השיחה המלאה.", + "open": "פתח עוזר", + "openTitle": "העוזר פתוח בחלונית הצדדית", + "openDescription": "השיחה נשארת בממשק פעיל אחד.", + "returnToWidget": "החזר את השיחה לווידג׳ט זה", + "otherWidgetTitle": "העוזר פעיל בווידג׳ט אחר", + "otherWidgetDescription": "רק ממשק שיחה אחד נשאר פעיל בכל פעם.", + "useHere": "השתמש בעוזר בווידג׳ט זה" + } + }, + "beszel": { + "error": { + "internalServerError": "לא ניתן להתחבר ל-Beszel. בדוק את הגדרות האינטגרציה." + }, + "empty": { + "noSystems": "לא נמצאו מערכות" + }, + "options": { + "statusFilter": { + "label": "מסנן מצב" + }, + "showCpu": { + "label": "הצג מעבד" + }, + "showMemory": { + "label": "הצג זיכרון" + }, + "showDisk": { + "label": "הצג דיסק" + }, + "showGpu": { + "label": "הצג GPU" + }, + "showLoadAvg": { + "label": "הצג ממוצע עומס" + }, + "showNet": { + "label": "הצג רשת" + }, + "showTemp": { + "label": "הצג טמפרטורה" + }, + "showBattery": { + "label": "הצג סוללה" + }, + "showServices": { + "label": "הצג שירותים" + }, + "showUptime": { + "label": "הצג זמן פעילות" + }, + "showAgent": { + "label": "הצג גרסת סוכן" + } + }, + "metric": { + "system": "מערכת", + "source": "אינטגרציה", + "hostname": "שם מארח", + "cpuModel": "דגם מעבד", + "cores": "ליבות", + "memoryTotal": "סך הזיכרון", + "memory": "זיכרון", + "disk": "דיסק", + "loadAvg": "ממוצע עומס", + "net": "רשת", + "temp": "טמפ׳", + "battery": "סוללה", + "uptime": "זמן ריצה", + "agent": "סוכן" + } + }, + "llamacpp": { + "name": "llama.cpp", + "description": "הצג את מצב הבריאות, המודל הטעון ומהירות היצירה של שרת llama.cpp המקומי שלך.", + "title": "llama.cpp", + "status": { + "unhealthy": "לא בריא ({status})" + }, + "idle": "ממתין", + "speedTooltip": { + "current": "מהירות יצירה נוכחית", + "average": "מהירות יצירה ממוצעת מאז ההפעלה", + "request": "מהירות ממוצעת מאז תחילת הבקשה" + }, + "busy": "{count, plural, one {# בקשה פועלת} two {# בקשות פועלות} other {# בקשות פועלות}}", + "modelInfo": { + "context": "הקשר", + "size": "גודל קובץ", + "parameters": "פרמטרים", + "model": "מודל", + "quantization": "כימות" + }, + "stats": { + "tokensProcessed": "אסימונים שעובדו", + "contextUsage": "שימוש בהקשר / KV", + "cacheHitRate": "שיעור פגיעות מטמון ההנחיה", + "tokensGenerated": "אסימונים שנוצרו" + }, + "error": { + "unreachable": "לא ניתן להגיע ל-llama-server" + }, + "unit": { + "speed": "{value} טוקנים/שנייה", + "parameters": "{value}B", + "none": "—", + "speedShort": "טוקנים/שנייה" + }, "option": { "showTitle": { "label": "הצג כותרת" }, - "showRing": { - "label": "הצג טבעת עדכון" + "showModelInfo": { + "label": "הצג פרטי מודל" }, - "layout": { - "label": "פריסה", + "showContextUsage": { + "label": "הצג שימוש בהקשר" + }, + "showCacheHitRate": { + "label": "הצג שיעור פגיעות מטמון" + }, + "showSpeedStats": { + "label": "הצג נתוני מהירות" + }, + "showRequests": { + "label": "הצג עומס בקשות" + }, + "showTokenStats": { + "label": "הצג סיכומי טוקנים" + }, + "showSpeculative": { + "label": "הצג פענוח ספקולטיבי" + } + }, + "advanced": { + "promptSpeed": "מהירות הנחיה", + "avgSpeed": "יצירה ממוצעת", + "requests": "בקשות", + "deferred": "מושהה", + "slots": "{processing}/{total} משבצות עסוקות", + "speculative": "פענוח ספקולטיבי", + "avgPrompt": "הנחיה ממוצעת", + "specDrafts": "טיוטות ספקולטיביות", + "specAccepted": "טוקנים ספקולטיביים שהתקבלו", + "specDraftTokens": "טוקנים של טיוטה ספקולטיבית" + } + }, + "stats": { + "name": "סטָטִיסטִיקָה", + "description": "שלב נתונים מהאינטגרציות שלך בווידג׳ט אחד הניתן להגדרה.", + "configure": "הגדר מדדים", + "refresh": "רענן סטטיסטיקות", + "empty": "פתח את הגדרות הווידג׳ט, בחר אינטגרציות ולאחר מכן הוסף מדדים.", + "editorHelp": "הוסף מדדים מהאינטגרציות שנבחרו לווידג׳ט זה. השינויים נשמרים בלוח המחוונים שלך.", + "source": "אינטגרציה", + "metric": "מדד", + "noMetrics": "אין סטטיסטיקות זמינות לאינטגרציה זו", + "add": "הוסף מדד", + "label": "תווית מותאמת אישית", + "hidden": "מוסתר", + "compact": "מספרים מצומצמים", + "moveUp": "הזזה למעלה", + "moveDown": "הזזה למטה", + "remove": "הסר מדד", + "loading": "טוען…", + "unavailable": "לא זמין", + "refreshFailed": "הרענון נכשל — מוצגים נתונים שמורים", + "stale": "נתונים שמורים — רענן כדי לעדכן", + "table": { + "value": "ערך", + "status": "מצב" + }, + "option": { + "table": { + "label": "תצוגת טבלה" + }, + "rows": { + "label": "שורות מצומצמות" + }, + "showIcon": { + "label": "הצג סמל מקור" + }, + "spacing": { + "label": "ריווח", "option": { - "horizontal": { - "label": "אופקי" + "xs": { + "label": "מצומצם" }, - "vertical": { - "label": "אנכי" + "sm": { + "label": "נוח" + }, + "md": { + "label": "מרווח" } } }, - "showUpdateList": { - "label": "הצג רשימת עדכוני מכולות", - "description": "מפרט כל מכולה מנוטרת שיש עדכון תמונה זמין עבורה" + "entries": { + "label": "מדדים" + }, + "plain": { + "label": "הסר רקעי כרטיסים" } - } + }, + "fetchFailed": "לא ניתן לקבל את הסטטיסטיקות", + "viewOptions": "התאם אישית תצוגה זו", + "moreMetrics": "{count} נוספים בתצוגה המתקדמת", + "localHelp": "הפריסה, העיצוב והנראות חלים רק על תצוגה זו. הגדרות הלוח המשותפות נשארות ללא שינוי.", + "plain": "הסר רקעי כרטיסים", + "resetView": "אפס תצוגה", + "allHidden": "כל המדדים מוסתרים בתצוגה זו. השתמש בהתאמה אישית של תצוגה זו כדי לשחזר אותם." + }, + "wazuh": { + "target": { + "api": "API של שרת Wazuh", + "indexer": "אינדקסר Wazuh", + "wazuh": "Wazuh" + }, + "severity": { + "low": "נמוכה", + "medium": "בינוני", + "high": "גבוהה", + "critical": "קריטית" + }, + "error": { + "unauthorized": { + "title": "{target} דחה את פרטי ההתחברות", + "description": "בדוק את שם המשתמש והסיסמה השמורים באינטגרציית Wazuh. ה-API של השרת (פורט 55000) והאינדקסר (פורט 9200) משתמשים במשתמשים נפרדים." + }, + "certificate": { + "title": "האישור של {target} אינו מהימן", + "description": "Wazuh משתמש כברירת מחדל באישור בחתימה עצמית. הפעל את \"בדוק חיבור\" באינטגרציה ואשר את האישור, או הוסף את ה-CA שלך תחת הגדרות → אישורים." + }, + "unreachable": { + "title": "לא ניתן להגיע אל {target}", + "description": "המארח דחה או ניתק את החיבור. בדוק את ה-URL, הפורט וחומת האש. בהתקנת ברירת מחדל משולבת, האינדקסר מאזין רק ב-localhost." + }, + "timeout": { + "title": "תם הזמן הקצוב עבור {target}", + "description": "לא התקבלה תגובה בתוך 15 שניות. ייתכן שהשירות עמוס או שהכתובת שגויה." + }, + "status": { + "title": "{target} החזיר שגיאה", + "description": "הבקשה נכשלה עם קוד מצב HTTP {status}." + }, + "invalidResponse": { + "title": "תגובה בלתי צפויה מ-{target}", + "description": "ודא שה-URL מצביע ל-API של שרת Wazuh או לאינדקסר, ולא ללוח המחוונים." + }, + "indexerRequired": { + "title": "נדרשים פרטי התחברות לאינדקסר Wazuh", + "description": "התראות, נקודות תורפה ואירועי שלמות קבצים נקראים מאינדקסר Wazuh. הוסף כתובת URL, שם משתמש וסיסמה של האינדקסר לאינטגרציה." + }, + "unknown": { + "title": "לא ניתן לטעון נתונים מ-{target}", + "description": "בדוק את יומני Homarr לקבלת פרטים." + } + }, + "range": { + "1h": "שעה אחת", + "24h": "24 שעות", + "7d": "7 ימים", + "30d": "30 ימים" + }, + "levelTooltip": "רמת כלל {level} ({severity})" + }, + "wazuhAgents": { + "name": "סוכני Wazuh", + "description": "רשימה ניתנת למיון של סוכני Wazuh עם מצב, מערכת הפעלה, גרסה וחיבור אחרון", + "option": { + "statusFilter": { + "label": "הצג סוכנים" + }, + "sortBy": { + "label": "מיין לפי" + }, + "showVersion": { + "label": "הצג עמודת גרסת Wazuh" + }, + "showGroups": { + "label": "הצג עמודת קבוצות" + } + }, + "title": "סוכנים", + "total": "{count} סוכנים", + "status": { + "active": "פעיל", + "disconnected": "מנותק", + "neverConnected": "מעולם לא התחבר", + "pending": "ממתין" + }, + "statusLabel": { + "active": "פעיל", + "disconnected": "מנותק", + "never_connected": "מעולם לא התחבר", + "pending": "ממתין", + "unknown": "לא ידוע" + }, + "live": "חי", + "snapshot": "תמונת מצב בת {age}", + "snapshotHint": "נקרא מתמונת מצב של סוכני לוח המחוונים של Wazuh (wazuh-monitoring) שנוצרה ב-{time}. הוסף פרטי API של השרת לקבלת נתונים חיים.", + "staleSnapshot": "תמונת המצב של הסוכן מ-{time} אינה עדכנית. בדוק שמשימת ניטור לוח המחוונים של Wazuh פועלת, או הוסף פרטי API של השרת.", + "noDisconnected": "כל הסוכנים מחוברים", + "empty": "אין סוכנים התואמים למסנן זה", + "column": { + "status": "מצב", + "name": "שם המשימה", + "ip": "כתובת IP", + "os": "מערכת הפעלה", + "version": "גרסה", + "lastKeepAlive": "חיבור פעיל", + "groups": "קבוצות" + }, + "outdated": "ישן יותר מגרסת הסוכן החדשה ביותר ({version})" + }, + "wazuhAlerts": { + "name": "הזנת התראות Wazuh", + "description": "התראות Wazuh אחרונות עם רמה, טכניקות MITRE ATT&CK, סוכן וכתובת IP מקורית", + "option": { + "minLevel": { + "label": "רמת כלל מינימלית", + "description": "רמות Wazuh: 0–6 נמוכה, 7–11 בינונית, 12–14 גבוהה, 15+ קריטית" + }, + "hours": { + "label": "חלון זמן (שעות)" + }, + "limit": { + "label": "מספר התראות" + }, + "showMitre": { + "label": "הצג טכניקות MITRE ATT&CK" + }, + "showAgent": { + "label": "הצג סוכן" + }, + "showSourceIp": { + "label": "הצג כתובת IP מקורית" + }, + "showRuleId": { + "label": "הצג מזהה כלל" + } + }, + "title": "התראות · רמה {level}+ · {hours} שעות", + "empty": "אין התראות ברמה זו. הכול שקט.", + "rule": "כלל {id}", + "openInDashboard": "פתח התראה זו בלוח המחוונים של Wazuh" + }, + "wazuhSummary": { + "name": "חומרת התראות Wazuh", + "description": "פירוט חומרת התראות עם מגמה לעומת התקופה הקודמת", + "option": { + "range": { + "label": "טווח זמן" + }, + "showTrend": { + "label": "הצג מגמה לעומת התקופה הקודמת" + }, + "showFooter": { + "label": "הצג כותרת תחתונה" + } + }, + "title": "חומרת התראות · {range}", + "alerts": "התראות", + "none": "אין התראות", + "trend": { + "new": "חדש", + "tooltip": "תקופה קודמת: {previous}" + }, + "previous": "{range} קודמים: {count}", + "maxLevel": "רמה מרבית {level}", + "health": "תקינות האינדקסר: {status}", + "manager": "מנהל {version}" + }, + "wazuhTimeline": { + "name": "ציר זמן של התראות Wazuh", + "description": "תרשים מוערם של התראות Wazuh לאורך זמן לפי חומרה", + "option": { + "range": { + "label": "טווח זמן" + }, + "interval": { + "label": "מרווח" + }, + "chartType": { + "label": "סוג תרשים" + }, + "yScale": { + "label": "קנה מידה של ציר Y", + "description": "שורש ריבועי משאיר התראות גבוהות וקריטיות גלויות לצד אלפי התראות נמוכות" + }, + "minLevel": { + "label": "רמת כלל מינימלית" + }, + "showLegend": { + "label": "הצג מקרא עם סיכומים" + } + }, + "title": "ציר זמן של התראות · {range}", + "total": "{count} התראות", + "interval": "לכל {interval}" + }, + "wazuhTopList": { + "name": "רשימה מובילה של Wazuh", + "description": "כללים, סוכנים, כתובות IP מקוריות או טקטיקות וטכניקות MITRE ATT&CK מובילים לפי מספר התראות", + "option": { + "kind": { + "label": "דירוג" + }, + "range": { + "label": "טווח זמן" + }, + "limit": { + "label": "מספר רשומות" + }, + "minLevel": { + "label": "רמת כלל מינימלית" + }, + "showBars": { + "label": "הצג עמודות" + } + }, + "title": { + "rules": "כללים מובילים · {range}", + "agents": "סוכנים מובילים · {range}", + "sourceIps": "כתובות IP מקוריות מובילות · {range}", + "mitreTactics": "טקטיקות MITRE · {range}", + "mitreTechniques": "טכניקות MITRE · {range}" + }, + "empty": { + "rules": "אין התראות בתקופה זו", + "agents": "אין התראות בתקופה זו", + "sourceIps": "אין התראות עם כתובת IP מקורית בתקופה זו", + "mitreTactics": "אין התראות שמופו ל-MITRE ATT&CK בתקופה זו", + "mitreTechniques": "אין התראות שמופו ל-MITRE ATT&CK בתקופה זו" + }, + "totalTooltip": "{count} התראות תואמות", + "private": "רשת LAN", + "public": "ציבורי", + "agents": "נראה אצל {count} סוכנים", + "others": "עוד {count} התראות ברשומות אחרות" + }, + "wazuhVulnerabilities": { + "name": "נקודות תורפה ב-Wazuh", + "description": "ספירות נקודות תורפה, CVE מובילים והסוכנים הפגיעים ביותר", + "option": { + "cveOrder": { + "label": "דרג CVE לפי" + }, + "minSeverity": { + "label": "חומרת CVE" + }, + "cveLimit": { + "label": "מספר CVE" + }, + "agentLimit": { + "label": "מספר סוכנים" + }, + "showAgents": { + "label": "הצג את הסוכנים הפגיעים ביותר" + } + }, + "title": "נקודות תורפה", + "topCves": "CVE מובילים", + "score": "ציון", + "agentsShort": "סוכנים", + "topAgents": "הסוכנים הפגיעים ביותר", + "criticalHigh": "קריטי / גבוה", + "totalTooltip": "{count} ממצאים אצל {agents} סוכנים", + "affected": "{count} סוכנים", + "empty": "לא זוהו נקודות תורפה", + "distribution": "התפלגות חומרה. {unscored} ממצאים ללא ציון אינם מוצגים.", + "worst": "החמור ביותר: {id} ({score}) אצל {agents} סוכנים" + }, + "wazuhFim": { + "name": "שלמות קבצים ב-Wazuh", + "description": "אירועי ניטור שלמות קבצים אחרונים (syscheck)", + "option": { + "range": { + "label": "טווח זמן" + }, + "event": { + "label": "אירועים" + }, + "limit": { + "label": "מספר אירועים" + }, + "includeRegistry": { + "label": "כלול אירועי רישום Windows" + } + }, + "title": "שלמות קבצים · {range}", + "event": { + "added": "נוסף בתאריך", + "modified": "שונה", + "deleted": "נמחק", + "unknown": "השתנה" + }, + "empty": "אין אירועי שלמות קבצים בתקופה זו", + "user": "על ידי {user}", + "registry": "רישום" + }, + "wazuhAuthFailures": { + "name": "כשלי אימות ב-Wazuh", + "description": "כניסות כושלות והתראות של מתקפות כוח גס לכל סוכן, עם תרשימי מגמה לפי שעה", + "option": { + "hours": { + "label": "חלון זמן (שעות)" + }, + "limit": { + "label": "מספר סוכנים" + }, + "showSourceIps": { + "label": "הצג כתובות IP מקוריות מובילות" + } + }, + "title": "כשלי אימות · {hours} שעות", + "seriesTooltip": "כל הסוכנים במהלך {hours} השעות האחרונות", + "peak": "שיא {count}/מקטע", + "empty": "אין כניסות כושלות בתקופה זו", + "failed": "כניסות כושלות", + "failedHint": "כשלי אימות יחידים (sshd, PAM, כניסת Windows, משתמשים לא חוקיים)", + "bruteForce": "כוח גס", + "bruteForceHint": "כללי כוח גס מתואמים (מספר כשלים בפרק זמן קצר, MITRE T1110)", + "sourceIps": "כתובות IP מקוריות", + "ipTooltip": "{ip}: {count} כשלים", + "bruteForceCount": "{count} מתקפות כוח גס" } }, "widgetPreview": { @@ -4004,7 +5732,76 @@ } }, "board": { + "emptyState": { + "title": "בנה את התצוגה הראשונה שלך", + "description": "הוסף ווידג׳ט או אפליקציה, או חבר שירות והשתמש בנתונים שלו בלוח זה.", + "addWidget": "הוסף ווידג׳ט", + "addApp": "הוסף אפליקציה", + "connectService": "חבר שירות" + }, + "setupChecklist": { + "title": "הפוך את הלוח הזה לשימושי", + "description": "המשך מהמקום שבו עצרת. ההתקדמות מבוססת על התוכן שכבר נמצא בלוח זה.", + "collapse": "כווץ רשימת הגדרות", + "dismiss": "", + "resume": "המשך הגדרה ({completed}/{total})", + "progress": "התקדמות הגדרת הלוח", + "step": { + "content": { + "label": "הוסף תוכן שימושי", + "description": "בחר ווידג׳ט והגדר אותו לפני הצבתו." + }, + "app": { + "label": "הצמד אפליקציה", + "description": "השאר שירות או כלי במרחק לחיצה אחת מהלוח הזה." + }, + "service": { + "label": "חבר שירות", + "description": "פתח נתונים חיים ופעולות לווידג׳טים תואמים.", + "permissionDescription": "מנהל מערכת יכול לחבר שירות כדי לפתוח נתונים חיים.", + "action": "חבר" + } + } + }, "action": { + "addContent": "הוסף תוכן ללוח", + "settings": "הגדרות הלוח", + "switch": "החלף לוח", + "switcher": { + "title": "החלף לוח", + "search": { + "empty": "אין לוחות התואמים ל-\"{search}\"." + }, + "results": "לוחות זמינים", + "preview": "תצוגה מקדימה של {name} עם {count} פריטים", + "currentHidden": "לוח נוכחי: {name}", + "keyboard": { + "navigate": "ניווט", + "open": "פתח", + "instructions": "הקלד כדי לסנן לוחות. השתמש במקשי החצים כדי לעבור בין התוצאות וב-Enter כדי לפתוח לוח." + }, + "empty": { + "title": "אין לוחות אחרים", + "description": "אין לוחות אחרים שאליהם יש לך גישה." + }, + "error": "לא ניתן לטעון את הלוחות." + }, + "create": { + "availability": { + "checking": "בודק זמינות…", + "available": "{name} זמין" + }, + "notification": { + "success": { + "title": "הלוח נוצר", + "message": "הלוח {name} נוצר" + }, + "error": { + "title": "לא ניתן ליצור לוח", + "message": "לא ניתן ליצור את הלוח {name}" + } + } + }, "duplicate": { "title": "שכפול לוח", "message": "פעולה זו תשכפל את הלוח {name} עם כל התוכן שלו. אם ווידג'טים מתייחסים לאינטגרציות שאינך מורשה להשתמש בהן, הם יוסרו.", @@ -4020,14 +5817,19 @@ } }, "edit": { + "enter": "ערוך לוח", + "save": "שמור לוח", + "exit": "צא ממצב עריכה", "notification": { "success": { - "title": "השינויים הוחלו בהצלחה", "message": "הלוח נשמר בהצלחה" }, "error": { - "title": "לא ניתן להחיל שינויים", "message": "לא ניתן היה לשמור את הלוח" + }, + "loadError": { + "title": "לא ניתן להתחיל בעריכה", + "message": "לא ניתן לטעון את עורך הלוח. לוח המחוונים שלך עדיין זמין במצב תצוגה." } }, "confirmLeave": { @@ -4035,62 +5837,6 @@ "message": "יש לך שינויים שלא נשמרו, האם אתה בטוח שברצונך לעזוב?" } }, - "oldImport": { - "label": "יבוא מ- homarr לפני 1.0.0", - "notification": { - "success": { - "title": "הייבוא הצליח", - "message": "הלוח יובא בהצלחה" - }, - "error": { - "title": "הייבוא נכשל", - "message": "לא ניתן לייבא את הלוח, בדוק את לוגים לפרטים נוספים" - } - }, - "form": { - "file": { - "label": "בחר קובץ JSON", - "invalidError": "קובץ תצורה לא חוקי" - }, - "apps": { - "label": "אפליקציות", - "avoidDuplicates": { - "label": "הימנע מכפילויות", - "description": "מתעלם מאפליקציות שבהן כבר קיימת אפליקציה עם אותה כתובת רשת" - }, - "onlyImportApps": { - "label": "ייבוא רק אפליקציות", - "description": "רק מוסיף את האפליקציות, יש ליצור מחדש את הלוח באופן ידני" - } - }, - "name": { - "label": "שם הלוח" - }, - "screenSize": { - "label": "גודל מסך", - "description": "בגרסאות שלפני 1.0 היו קיימים שלושה מצבים שונים, כך שניתן היה לבחור את כמות העמודות עבור כל גודל מסך.", - "option": { - "sm": "קטן", - "md": "בינוני", - "lg": "גדול" - } - }, - "sidebarBehavior": { - "label": "התנהגות סרגל הצד", - "description": "סרגלי צד הוסרו ב- 1.0, אתה יכול לבחור מה צריך לקרות עם הפריטים שבתוכם.", - "option": { - "lastSection": { - "label": "החלק האחרון", - "description": "סרגל צד יוצג מתחת לקטע האחרון" - }, - "removeItems": { - "label": "הסרת פריטים", - "description": "פריטים הכלולים בסרגל הצד יוסרו" - } - } - } - } - }, "quickCreateApp": { "modal": { "title": "צור אפליקציה תוך כדי תנועה", @@ -4098,6 +5844,12 @@ } } }, + "landmark": { + "canvas": "משטח לוח המחוונים", + "leftRail": "מסילה שמאלית של לוח המחוונים", + "rightRail": "מסילה ימנית של לוח המחוונים", + "items": "פריטי לוח המחוונים" + }, "field": { "pageTitle": { "label": "כותרת העמוד" @@ -4167,7 +5919,8 @@ } }, "primaryColor": { - "label": "צבע ראשי" + "label": "צבע ראשי", + "locked": "מנהל המערכת שלך שומר על צבע המותג של המופע בכל לוח." }, "secondaryColor": { "label": "צבע משני" @@ -4207,9 +5960,6 @@ "xl": "גדול מאוד" } }, - "name": { - "label": "שם" - }, "isPublic": { "label": "ציבורי", "description": "לוחות ציבוריים נגישים לכולם, גם ללא חשבון." @@ -4229,9 +5979,44 @@ "title": "פריסה", "responsive": { "title": "פריסות רספונסיביות", + "description": "כל פריסה שומרת על מיקומי וגודלי הווידג׳טים שלה. Mobile ו-Base זמינות תמיד; הוסף פריסות מותאמות אישית בכל נקודת שבירה נוספת.", "action": { "add": "הוסף פריסה" } + }, + "role": { + "mobile": "מכשיר נייד", + "base": "בסיס", + "custom": "מותאם אישית" + }, + "custom": { + "defaultName": "פריסה מותאמת אישית" + }, + "mobile": { + "breakpointDescription": "Mobile משמשת תמיד מ-0px ועד נקודת שבירת הפריסה הבאה." + }, + "preview": { + "columns": "עמודות", + "empty": "פריסה זו ריקה", + "dynamicSection": "מקטע דינמי", + "editorWidthLabel": "{layoutName} · {width}px" + }, + "reset": { + "action": "אפס מ-Base", + "confirm": { + "title": "לאפס את {layoutName}?", + "message": "פעולה זו מחליפה כל מיקום וגודל שנשמרו בפריסה זו בפריסה חדשה שנוצרה מ-Base. לא ניתן לבטל פעולה זו." + } + }, + "edit": { + "action": "עריכת פריסה", + "saveAndEdit": "שמירה ועריכה", + "save": "שמירת פריסה", + "cancel": { + "action": "ביטול עריכת הפריסה", + "title": "לבטל את שינויי הפריסה?", + "message": "השינויים שלא נשמרו בפריסה זו יבוטלו." + } } }, "background": { @@ -4268,10 +6053,7 @@ "rename": { "label": "שנה את שם הלוח", "description": "שינוי השם ישבור כל קישור ללוח זה.", - "button": "שנה שם", - "modal": { - "title": "שנה את שם הלוח" - } + "button": "שנה שם" }, "visibility": { "label": "שנה את נראות הלוח", @@ -4295,9 +6077,7 @@ } }, "delete": { - "label": "מחיקת לוח זה", "description": "ברגע שהלוח נמחק, אין דרך חזרה. אנא וודא/י זאת בוודאות.", - "button": "מחיקת לוח זה", "confirm": { "title": "מחיקת לוח", "description": "האם את/ה בטוח/ה שברצונך למחוק לוח זה? הלוח ותוכנו יימחקו לצמיתות." @@ -4342,28 +6122,41 @@ }, "layout": { "field": { - "name": { - "label": "שם" - }, "columnCount": { "label": "ספירת עמודות" }, "breakpoint": { "label": "נקודת עצירה", "description": "הפריסה תשמש בכל המסכים הגדולים מנקודת העצירה הזו עד לנקודת העצירה הגדולה הבאה." + }, + "gutters": { + "label": "סרגלי צד קבועים", + "description": "שמור עד שלוש עמודות בלוח המחוונים בכל צד. אזור הקנבס הנותר יסתדר מחדש באופן אוטומטי.", + "left": { + "label": "סרגל צד שמאלי", + "description": "השאר אזור זה גלוי בזמן הגלילה בלוח המחוונים.", + "thumbLabel": "רוחב סרגל הצד השמאלי" + }, + "right": { + "label": "סרגל צד ימני", + "description": "השאר אזור זה גלוי בזמן הגלילה בלוח המחוונים.", + "thumbLabel": "רוחב סרגל הצד הימני" + }, + "width": { + "label": "רוחב בעמודות" + }, + "preview": { + "label": "תצוגה מקדימה של פריסת לוח המחוונים" + } } } }, "management": { "metaTitle": "ניהול", - "title": { - "morning": "בוקר טוב, {username}", - "afternoon": "צהריים טובים, {username}", - "evening": "ערב טוב, {username}" - }, "notFound": { "title": "לא נמצא", - "text": "לא ניתן לאתר את המשאב המבוקש" + "text": "לא ניתן לאתר את המשאב המבוקש", + "backToHome": "חזרה לדף הבית של הניהול" }, "error": { "title": "", @@ -4372,19 +6165,10 @@ }, "navbar": { "items": { - "workshop": "Workshop", "home": "מסך הבית", - "boards": "לוחות", - "apps": "אפליקציות", - "integrations": "אינטגרציות", - "searchEngies": "מנועי חיפוש", - "medias": "מדיה", "users": { - "label": "משתמשים", "items": { - "manage": "ניהול", - "invites": "הזמנות", - "groups": "קבוצות" + "manage": "ניהול" } }, "tools": { @@ -4392,10 +6176,7 @@ "items": { "docker": "דוקר", "kubernetes": "Kubernetes", - "logs": "קובצי לוג", "api": "ממשק API", - "certificates": "אישורי אבטחה", - "tasks": "משימות", "backup": "" } }, @@ -4409,21 +6190,12 @@ "sourceCode": "קוד מקור" } }, - "about": "אודות" + "about": "אודות", + "assistant": "מסייע" } }, "page": { "home": { - "statistic": { - "board": "לוחות", - "user": "משתמשים", - "invite": "הזמנות", - "integration": "אינטגרציות", - "app": "אפליקציות", - "group": "קבוצות", - "searchEngine": "מנועי חיפוש", - "media": "מדיה" - }, "statisticLabel": { "boards": "לוחות", "resources": "מקורות", @@ -4461,13 +6233,8 @@ "tooltip": "לוח זה יופיע כלוח הנייד שלך" } }, - "duplicate": { - "label": "שכפול לוח" - }, "delete": { - "label": "מחיקה לצמיתות", "confirm": { - "title": "מחיקת לוח", "description": "האם את/ה בטוח/ה שברצונך למחוק את הלוח {name}?" } } @@ -4476,28 +6243,82 @@ "public": "הלוח הזה ציבורי", "private": "הלוח הזה פרטי" }, - "noResults": { - "title": "" + "preview": { + "label": "תצוגה מקדימה של הפריסה עבור {name}, עם {count} פריטים", + "unknownCreator": "יוצר לא ידוע" }, - "modal": { - "createBoard": { - "field": { - "name": { - "label": "שם" - } - } - } + "noResults": { + "title": "", + "description": "צור לוח כדי לסדר את האפליקציות והווידג'טים שלך במקום אחד." } }, "media": { "includeFromAllUsers": "כלול מדיה מכל המשתמשים" }, "user": { - "back": "חזרה למשתמשים", "fieldsDisabledExternalProvider": "שדות מסוימים מושבתים מכיוון שהם מנוהלים על ידי ספק אימות חיצוני.", "setting": { "general": { "title": "כללי", + "header": { + "title": "סטודיו כותרת", + "badge": "אישי", + "description": "גרור פקדים לכל מקום בשורה. שמאל, מרכז וימין נשארים קבועים בזמן שהפקדים נעים סביבם.", + "device": { + "desktop": "מחשב שולחני", + "mobile": "מכשיר נייד" + }, + "zones": { + "left": "שמאל", + "center": "מרכז", + "right": "ימין" + }, + "action": { + "hide": "הסתרת הכותרת", + "show": "הצגת הכותרת", + "configure": "הזז או הגדר את {item}", + "remove": "הסר את {item}", + "dropIntoZone": "העבר למקטע {zone}" + }, + "preview": { + "board": "תצוגה מקדימה של לוח המחוונים עבור {name}", + "empty": "אין פריסת לוח מחוונים זמינה" + }, + "available": { + "title": "פקדים זמינים", + "description": "הוסף פקד ולאחר מכן גרור את הכפתור המלא שלו למיקום הרצוי למעלה.", + "requiredAlways": "פקד זה נדרש, אך ניתן להעביר אותו לכל מקום בכותרת.", + "allAdded": "כל הפקדים המובנים כבר נמצאים בכותרת שלך.", + "add": "הוסף {item}", + "boardShortcut": "קיצור דרך ללוח", + "chooseBoard": "בחירת לוח" + }, + "configuration": { + "description": "פקד זה נשאר באותו גודל כמו בכותרת הפעילה.", + "searchDisplay": { + "input": "סרגל חיפוש", + "icon": "סמל בלבד" + }, + "logoDisplay": { + "logo": "לוגו בלבד", + "logoAndText": "לוגו + טקסט" + } + }, + "items": { + "logo": "לוגו", + "search": "חיפוש", + "home": "לוח בית", + "boardSwitcher": "לוחות", + "assistant": "מסייע", + "docker": "דוקר", + "boardEdit": "עריכת לוח", + "boardSettings": "הגדרות לוח", + "settings": "ההגדרות שלך", + "themeToggle": "החלפת ערכת נושא", + "user": "חשבון", + "boardUnavailable": "הלוח אינו זמין" + } + }, "item": { "language": "שפה ואיזור", "board": { @@ -4531,14 +6352,10 @@ }, "security": { "title": "אבטחה" - }, - "board": { - "title": "לוחות" } }, "list": { - "metaTitle": "ניהול משתמשים", - "title": "משתמשים" + "metaTitle": "ניהול משתמשים" }, "edit": { "metaTitle": "עריכת משתמש {username}" @@ -4592,9 +6409,6 @@ } }, "field": { - "id": { - "label": "מספר מזהה" - }, "creator": { "label": "יוצר" }, @@ -4618,10 +6432,7 @@ }, "setting": { "title": "הגדרות", - "alert": "הגדרות קבוצה מסודרות לפי סדר הקבוצות ברשימה. ההגדרות העליונות מחליפות את ההגדרות התחתונות.", - "board": { - "title": "לוחות" - } + "alert": "הגדרות קבוצה מסודרות לפי סדר הקבוצות ברשימה. ההגדרות העליונות מחליפות את ההגדרות התחתונות." }, "members": { "title": "חברים", @@ -4629,10 +6440,7 @@ "notFound": "לא נמצא חברים בקבוצה" }, "permissions": { - "title": "הרשאות", - "form": { - "unsavedChanges": "ישנם שינויים שלא נשמרו!" - } + "title": "הרשאות" } } }, @@ -4641,12 +6449,10 @@ "notification": { "success": { "message": "ההגדרות נשמרו בהצלחה" - }, - "error": { - "message": "נכשל בשמירת הגדרות" } }, "section": { + "analyticsDocumentation": "ראה בדיוק אילו נתוני ניתוח Homarr אוסף", "analytics": { "title": "ניתוחים", "general": { @@ -4675,7 +6481,6 @@ } }, "board": { - "title": "לוחות", "homeBoard": { "label": "לוח בית גלובלי", "mobileLabel": "לוח גלובלי למכשיר נייד", @@ -4694,7 +6499,6 @@ } }, "user": { - "title": "משתמשים", "enableGravatar": { "label": "הפעל Gravatar", "description": "מציג אווטר מ-Libravatar/Gravatar כברירת מחדל כשאין אווטר מותאם אישית וקיים דוא\"ל" @@ -4710,12 +6514,86 @@ "appearance": { "title": "מראה", "defaultColorScheme": { - "label": "סכמת צבעים ברירת מחדל", + "label": "סכמת צבעים ברירת מחדל" + } + }, + "branding": { + "title": "מיתוג המופע", + "groups": { + "identity": "זהות", + "appearance": "מראה", + "customCss": "CSS מותאם אישית", + "authentication": "אימות" + }, + "identity": { + "description": "לוגו האפליקציה הוא הסמל הגדול יותר המשמש בתוך האפליקציה, בדפי הכניסה ובאפליקציות מותקנות. סמל הדפדפן (favicon) הוא הריבוע הקטן המשמש בכרטיסיות ובסימניות; כאשר הוא ריק, נעשה שימוש בלוגו האפליקציה." + }, + "appName": { + "label": "שם האפליקציה" + }, + "greeting": { + "label": "ברכה מותאמת אישית" + }, + "logo": { + "label": "לוגו האפליקציה", + "placeholder": "/logo/logo.png" + }, + "favicon": { + "label": "סמל הדפדפן (favicon)", + "placeholder": "משתמש בלוגו האפליקציה" + }, + "primaryColor": { + "label": "צבע ראשי" + }, + "secondaryColor": { + "label": "צבע משני" + }, + "lockPrimaryColor": { + "label": "שמור צבע זה בכל לוח", + "description": "מונע מצבעי הלוח להחליף את צבע ההדגשה של האפליקציה." + }, + "signInBackground": { + "label": "רקע האימות", + "placeholder": "https://example.com/background.jpg" + }, + "signInOverlay": { + "label": "שכבת רקע" + }, + "defaultRadius": { + "label": "סגנון פינות", "options": { - "auto": "", - "light": "בהיר", - "dark": "כהה" + "xs": "הדוק", + "sm": "עדין", + "md": "מאוזן", + "lg": "מעוגל", + "xl": "רך" } + }, + "customCss": { + "label": "CSS גלובלי מותאם אישית", + "description": "מוחל על כל דף. CSS מותאם אישית של לוח יכול לעקוף אותו." + }, + "authVisibility": { + "description": "בחר מה יופיע בכל דף אימות.", + "appName": "שם האפליקציה", + "logo": "לוגו האפליקציה", + "greeting": "ברכה" + }, + "summary": { + "title": "מיתוג נוכחי", + "cornerStyle": "סגנון פינות", + "palette": "פלטה", + "backgroundConfigured": "רקע מותאם אישית · שכבת על של {overlay}%", + "backgroundDefault": "רקע ברירת מחדל", + "greetingConfigured": "ברכה מותאמת אישית", + "greetingDefault": "ברכת ברירת מחדל", + "boardColorLocked": "צבע הלוח נעול", + "boardColorFlexible": "צבעי לוח מותרים", + "appName": "שם המשימה", + "logo": "לוגו", + "greeting": "ברכה", + "on": "פעיל", + "off": "כבוי" } }, "culture": { @@ -4723,12 +6601,177 @@ "defaultLocale": { "label": "שפת ברירת מחדל" } + }, + "assistant": { + "loading": "טוען את תצורת המסייע", + "title": "מסייע", + "description": "חבר נקודת קצה תואמת OpenAI למסייע ברמת המופע.", + "security": { + "description": "מפתחות API וערכי כותרות נוספים מוצפנים במסד הנתונים של Homarr. הם לעולם אינם מוחזרים לדפדפנים. בקשות למודלים נשלחות ישירות משרת Homarr לנקודת הקצה שהוגדרה." + }, + "overview": { + "connectionReady": "החיבור מוכן", + "unsavedChanges": "שינויים שלא נשמרו", + "setupRequired": "נדרשת הגדרה", + "disabled": "מושבת", + "noModel": "לא נבחר מודל" + }, + "connection": { + "endpointTitle": "ספק ונקודת קצה", + "description": "בחר ערכה מוכנה או התחבר לכל שירות שמממש את ממשק ה־Chat Completions של OpenAI.", + "save": "שמירת חיבור הספק" + }, + "credentials": { + "title": "פרטי התחברות", + "description": "הוסף את הסודות שנקודת הקצה זקוקה להם. הערכים המאוחסנים נשארים מוצפנים ולא ניתן לקרוא אותם בחזרה.", + "required": "מפתח נדרש", + "optional": "מפתח אופציונלי", + "workshop": "כניסה ל־GitHub לכל משתמש" + }, + "provider": { + "title": "ספק", + "groups": { + "free": "חינם עם Homarr", + "hosted": "ספקים מתארחים", + "local": "ספקים מקומיים", + "custom": "מותאם אישית" + }, + "options": { + "homarr": { + "description": "מספר מוגבל של שימושים במסייע חינמי בכל יום, במימון צוות Homarr. היכנס דרך הסדנה הקהילתית כדי להשתמש במכסה שלך." + }, + "openrouter": { + "description": "ניתוב מודלים מתארח עם קטלוג גדול של מודלים התומכים בכלים." + }, + "openai": { + "description": "Chat Completions של OpenAI דרך נקודת הקצה הרשמית של ה־API." + }, + "anthropic": { + "description": "Claude דרך נקודת התאימות של Anthropic ל־OpenAI SDK." + }, + "google-gemini": { + "description": "Gemini דרך נקודת ה־API התואמת ל־OpenAI של Google." + }, + "xai": { + "description": "מודלי Grok דרך ה־API התואם ל־OpenAI של xAI." + }, + "groq": { + "description": "הסקה מתארחת ומהירה דרך ה־API התואם ל־OpenAI של Groq." + }, + "mistral": { + "description": "מודלי Mistral דרך ה־API הרשמי." + }, + "deepseek": { + "description": "מודלי DeepSeek דרך ה־API התואם ל־OpenAI שלו." + }, + "together": { + "description": "מודלים פתוחים מתארחים דרך ה־API התואם ל־OpenAI של Together." + }, + "ollama": { + "description": "שרת Ollama מקומי או רשת המשתמש ב־API התואם ל־OpenAI שלו." + }, + "lm-studio": { + "description": "שרת LM Studio מקומי עם תאימות ל־OpenAI מופעלת." + }, + "llama-cpp": { + "description": "שרת llama.cpp מקומי או רשת המשתמש ב־API התואם ל־OpenAI שלו." + }, + "custom": { + "label": "נקודת קצה מותאמת אישית", + "description": "כל נקודת קצה אחרת התואמת ל־Chat Completions של OpenAI." + } + }, + "homarrAuth": { + "title": "שימושים יומיים חינמיים במסייע כלולים", + "description": "אין צורך במפתח API. צוות Homarr מממן מספר מוגבל של שימושים במסייע בכל יום. היכנס דרך הסדנה הקהילתית כדי לשמור את המכסה שלך בנפרד." + } + }, + "baseUrl": { + "title": "כתובת בסיס של API", + "description": "כלול את קידומת ה־API, בדרך כלל ‎/v1. במכולות, localhost מתייחס למכולת Homarr." + }, + "apiKey": { + "title": "מפתח API", + "required": "נדרש על ידי ספק זה. הערך מוצפן וניתן לכתיבה בלבד.", + "optional": "אופציונלי עבור נקודות קצה מקומיות. השאר ריק כאשר השירות אינו דורש אימות bearer.", + "placeholder": "הזן מפתח API", + "savedTitle": "מפתח API מוצפן נשמר", + "savedDescription": "Homarr יכול להשתמש במפתח זה, אך אינו יכול להציג או לשחזר את ערכו.", + "remove": "הסר מפתח API שמור", + "removeFlow": { + "title": "להסיר את מפתח ה־API השמור?", + "description": "ספק זה דורש מפתח API. הסרתו עלולה לעצור את גילוי המודלים ואת תגובות המסייע עד לשמירת מפתח אחר.", + "optionalDescription": "נקודת הקצה תפסיק לקבל אימות bearer לאחר הסרת מפתח זה. ודא שהיא מקבלת בקשות ללא אימות או משתמשת בכותרת שמורה אחרת.", + "cancel": "השאר את המפתח השמור", + "confirm": "הסר מפתח API" + } + }, + "headers": { + "title": "כותרות בקשה נוספות", + "description": "כותרות אימות או ניתוב אופציונליות. ערכי הכותרות מוצפנים וניתנים לכתיבה בלבד.", + "add": "הוסף כותרת", + "name": "שם הכותרת", + "value": "ערך הכותרת", + "valuePlaceholder": "ערך סודי או ערך ניתוב", + "remove": "הסר כותרת", + "configured": "כותרות מוצפנות נוספות מוגדרות. הוספת כותרות מחליפה את כל הקבוצה המאוחסנת.", + "empty": "לא נשמרו כותרות נוספות עבור ספק זה.", + "savedBadge": "הכותרות נשמרו", + "pendingRemoval": "הסרה ממתינה", + "clear": "הסר כותרות שמורות בעת השמירה", + "keep": "השאר כותרות שמורות" + }, + "model": { + "title": "מודל", + "description": "בחר מודל שהתגלה או הזן מזהה מודל מדויק של נקודת הקצה.", + "placeholder": "מזהה מודל", + "refresh": "רענן מודלים", + "chooseModel": "בחר את המודל שישמש לשיחות חדשות.", + "discoveryPath": "נתיב גילוי מודלים", + "discoveryPathDescription": "מצורף לכתובת הבסיס של ה־API. השאר ריק כדי להשבית גילוי ולהשתמש במזהה מודל ידני.", + "manual": "הזן מזהה מודל ידנית או שמור את החיבור כדי לגלות מודלים.", + "manualFallback": "הגילוי אינו זמין. עדיין ניתן להזין מזהה מודל ידנית.", + "saveConnectionFirst": "שמור את חיבור הספק לפני בחירת מודל.", + "discovering": "מרענן את המודלים הזמינים מספק זה…", + "discovered": "{count, plural, one {נמצא מודל #. התמיכה בכלים תלויה בנקודת הקצה ובמודל שנבחרו.} two {נמצאו שני מודלים. התמיכה בכלים תלויה בנקודת הקצה ובמודל שנבחרו.} other {נמצאו # מודלים. התמיכה בכלים תלויה בנקודת הקצה ובמודל שנבחרו.}}", + "discoveryFailed": "גילוי המודל לא הושלם", + "context": "חלון הקשר של {count}", + "toolsConfirmed": "כלים שהספק פרסם", + "toolsUnknown": "אימות תמיכת הכלים" + }, + "serverTools": { + "title": "כלי שרת", + "webSearch": { + "label": "חיפוש באינטרנט", + "description": "אפשר למודל לחפש באינטרנט בזמן אמת דרך OpenRouter כאשר בקשה זקוקה למידע עדכני. השימוש בחיפוש מחויב בנפרד על ידי OpenRouter.", + "proxyDescription": "שלח את כלי שרת חיפוש האינטרנט של OpenRouter לנקודת הקצה הזו. הפעל אפשרות זו רק כאשר נקודת הקצה המותאמת אישית מעבירה את הפורמט של כלי השרתים של OpenRouter, כגון פרוקסי Homarr Router.", + "limit": "המודל מחליט מתי לחפש, עם מגבלה של 3 חיפושים ו־5 תוצאות לחיפוש עבור כל בקשה." + } + }, + "enabled": { + "label": "הפעלת המסייע", + "description": "מציג את העוזר לכל המשתמשים המחוברים. ההרשאות הקיימות ב-Homarr עדיין חלות על כל קריאה לכלי פנימי." + }, + "save": "שמירת המסייע", + "notification": { + "connectionSaved": { + "title": "חיבור הספק נשמר", + "message": "נקודת הקצה ופרטי הכניסה המוצפנים מוכנים לבחירת מודל.", + "credentialsCleared": "נקודת הקצה השתנתה, ולכן פרטי הכניסה הקודמים נמחקו. הוסף פרטי כניסה ליעד החדש, אם נדרש." + }, + "saved": { + "title": "הגדרות המסייע נשמרו", + "message": "המודל החדש והגדרות הזמינות פעילות." + }, + "error": { + "title": "לא ניתן לשמור את הגדרות המסייע" + } + } } } }, "tool": { "tasks": { - "title": "משימות", "status": { "idle": "ממתין", "running": "פועל", @@ -4746,6 +6789,11 @@ "label": "פינגים" } }, + "action": { + "run": "הפעל את {name} עכשיו", + "enable": "הפעל את {name}", + "disable": "השבת את {name}" + }, "interval": { "seconds": "כל {interval, plural, =1 {second} other {# seconds}}", "minutes": "כל {interval, plural, =1 {minute} other {# minutes}}", @@ -4761,13 +6809,7 @@ } } }, - "settings": { - "title": "הגדרות משימה עבור {jobName}" - }, "field": { - "name": { - "label": "שם" - }, "interval": { "label": "מרווח זמן לתזמון" }, @@ -4781,11 +6823,6 @@ "table": { "search": "חפש {count} משימות..." }, - "action": { - "refresh": { - "label": "רענן" - } - }, "refresh": { "success": { "message": "המשימות רעננו בהצלחה" @@ -4819,7 +6856,6 @@ } }, "api": { - "title": "ממשק API", "modal": { "createApiToken": { "title": "נוצר אסימון API", @@ -4845,7 +6881,6 @@ }, "table": { "header": { - "id": "מספר מזהה", "createdBy": "נוצר על ידי", "actions": "פעולות" } @@ -4901,43 +6936,12 @@ "availableTools": { "title": "", "description": "", - "columnType": "", - "columnName": "", - "columnDescription": "" - }, - "troubleshooting": { - "title": "", - "missingHeader": { - "title": "", - "description": "" - }, - "invalidFormat": { - "title": "", - "description": "" - }, - "invalidKey": { - "title": "", - "description": "" - }, - "connectionRefused": { - "title": "", - "description": "" - }, - "toolsNotAppearing": { - "title": "", - "description": "" + "filteredDescription": "{count} כלים תואמים בקטגוריות המורחבות.", + "search": "חיפוש בכלים", + "noResults": { + "title": "אין כלים התואמים לחיפוש זה", + "description": "אין כלי MCP התואם ל־\"{search}\". נסה מרחב שמות, שם כלי או תיאור." } - }, - "copy": "", - "oneClick": { - "title": "", - "subtitle": "", - "vsCode": "", - "cursor": "", - "copyUrl": "", - "copied": "", - "copyHint": "", - "manualConfig": "" } } } @@ -4954,79 +6958,35 @@ "title": "", "warningTitle": "", "warningBody": "", - "typePrompt": "", - "submit": "", - "cancel": "" + "submit": "" } }, "import": { "title": "", - "description": "", - "warning": "", - "dropzone": { - "title": "", - "description": "" - }, - "changeFile": "", - "button": "", - "success": { - "title": "", - "message": "" - }, - "error": "" - }, - "preview": { - "title": "", - "exported": "", - "loading": "", - "errorTitle": "", - "entity": "", - "count": "", - "boards": "", - "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" - }, - "analyzeError": "", - "invalidMissingMetadata": "", - "invalidMissingDb": "" + "description": "" }, "restore": { "dropzone": { "title": "", - "description": "" + "description": "מקבל קובצי ‎.zip מגיבוי SQLite של Homarr (מקסימום {maxSize})" }, "analyzing": "", "changeFile": "", "continueToRestore": "", - "tryAgain": "", "analysisError": "", "preview": { "title": "", "exported": "", "entity": "", "count": "", - "boards": "", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "item": "" }, "migrationsApplied": "", "migrationsAppliedPlural": "", "migrationsOlderVersion": "", "migrationsOlderVersionPlural": "", "migrationsUpToDate": "", - "upToDate": "", "migrationsPending": "" }, "migration": { @@ -5037,21 +6997,21 @@ "title": "", "warningTitle": "", "warningBody": "", - "typePrompt": "", - "cancel": "", "submit": "" }, "progress": { "title": "", - "extracting": "", - "migrating": "", - "encrypting": "", - "swapping": "", - "restarting": "" + "restarting": "", + "relogin": "שחזור מסד הנתונים ביטל את ההפעלה הנוכחית שלך. Homarr יעביר אותך לדף ההתחברות כאשר השרת יהיה מוכן." }, "complete": { - "title": "", - "message": "" + "title": "השחזור הושלם", + "message": "מסד הנתונים שוחזר. ההפעלה הקודמת שלך בוטלה, לכן התחבר שוב כדי לראות את הלוח ששוחזר.", + "button": "היכנס עכשיו" + }, + "timeout": { + "title": "השרת לא חזר לפעול", + "message": "שחזור מסד הנתונים הסתיים, אך Homarr לא חזר להיות מוכן. נסה שוב את בדיקת החיבור או רענן את הדף ידנית." }, "failed": { "title": "" @@ -5059,6 +7019,9 @@ "invalidMissingMetadata": "", "invalidMissingDb": "", "analyzeError": "" + }, + "confirm": { + "typePrompt": "הקלד \"{phrase}\" כדי להמשיך" } } }, @@ -5093,7 +7056,11 @@ "toggleBoardEdit": "הפעל/י מצב עריכת לוח", "toggleColorScheme": "החלפת מצב בהיר/כהה", "saveNotebook": "שמירת מחברת (רק בתוך ווידג'ט המחברת)", - "openSpotlight": "פתח חיפוש" + "openSpotlight": "פתח חיפוש", + "openSpotlightApps": "פתיחת חיפוש האפליקציות", + "openSpotlightAssistant": "פתיחת מצב המסייע", + "openSpotlightPreferences": "פתיחת מצב ההעדפות", + "openAssistant": "פתיחת המסייע" }, "note": "טיפ: Mod מתייחס גם למקש Ctrl וגם למקש ⌘ ב-macOS" } @@ -5103,6 +7070,63 @@ }, "docker": { "title": "מיכלים", + "reconciliation": { + "title": "מסייע הגדרת Docker", + "suggestions": "{count, plural, =0 {אין הצעות} one {הצעה אחת} two {שתי הצעות} other {# הצעות}}", + "attention": "{count} דורשים תשומת לב", + "endpointUnavailable": "לא ניתן היה לבדוק שירותים מסוימים מכיוון שנקודות הקצה הבאות אינן זמינות: {names}", + "empty": "לא נמצאו שירותי Docker גלויים.", + "emptyFilter": "אין שירותים התואמים לתצוגה זו.", + "ambiguous": "יותר מפריט קיים אחד עשוי להתאים לשירות הזה. Homarr לא יבחר פריט באופן אוטומטי.", + "filter": { + "attention": "דורש תשומת לב", + "represented": "כבר הוגדר", + "all": "הכול" + }, + "state": { + "newRecognized": "מוכן לחיבור", + "newApp": "שירות חדש", + "represented": "כבר מיוצג", + "linked": "מקושר", + "moved": "הכתובת השתנתה" + }, + "url": { + "manual": "הזן כתובת ידנית" + }, + "health": { + "layer": { + "docker": "דוקר", + "integrationConfiguration": "אינטגרציה", + "authentication": "אימות", + "apiRequest": "ממשק API", + "appRepresentation": "אפליקציה", + "widgetConfiguration": "ווידג'ט", + "widgetQuery": "שאילתת ווידג'ט" + }, + "status": { + "available": "זמין", + "configured": "מוגדר", + "linked": "מקושר", + "missing": "חסר", + "changed": "השתנה", + "unused": "לא בשימוש", + "notApplicable": "לא רלוונטי", + "notObserved": "לא נצפה" + } + }, + "action": { + "review": "סקירה", + "dismiss": "התעלם", + "restoreDismissed": "שחזור שנדחה ({count})", + "setupIntegration": "הגדרת אינטגרציה", + "reviewIntegration": "סקירת אינטגרציה", + "viewRepresentation": "הצג הגדרה" + }, + "loadError": { + "title": "לא ניתן לטעון את מסייע הגדרת Docker", + "message": "פרטי שירותי Docker אינם זמינים. נסה שוב מבלי לעזוב את הדף הזה." + } + }, "table": { "updated": "עודכן ב- {when}", "refresh": { @@ -5115,9 +7139,6 @@ "totalMemory": "" }, "field": { - "name": { - "label": "שם" - }, "state": { "label": "מצב", "option": { @@ -5131,9 +7152,6 @@ } }, "stats": { - "cpu": { - "label": "מעבד" - }, "memory": { "label": "זיכרון" } @@ -5196,8 +7214,11 @@ } }, "remove": { - "label": "הסר", "confirm": "", + "confirmation": { + "title": "{count, plural, one {להסיר מכולה אחת?} two {להסיר שתי מכולות?} other {להסיר # מכולות?}}", + "message": "{count, plural, one {פעולה זו תסיר לצמיתות מכולה אחת: {names}} two {פעולה זו תסיר לצמיתות שתי מכולות: {names}} other {פעולה זו תסיר לצמיתות # מכולות: {names}}}" + }, "notification": { "success": { "title": "הקונטיינרים הוסרו", @@ -5209,8 +7230,13 @@ } } }, + "result": { + "failure": { + "title": "פעולות מסוימות על המכולות נכשלו", + "message": "{total, plural, one {{failed} מתוך פעולה אחת נכשלה: {names}} two {{failed} מתוך שתי פעולות נכשלו: {names}} other {{failed} מתוך # פעולות נכשלו: {names}}}" + } + }, "refresh": { - "label": "רענון", "notification": { "success": { "title": "הקונטיינרים התרעננו", @@ -5241,18 +7267,33 @@ }, "error": { "internalServerError": "נכשל בקבלת קונטיינרי דוקר", + "endpointUnavailable": "{count, plural, one {נקודת קצה אחת של Docker אינה זמינה: {names}} two {שתי נקודות קצה של Docker אינן זמינות: {names}} other {# נקודות קצה של Docker אינן זמינות: {names}}}", "noColumns": "" } }, "kubernetes": { + "context": { + "label": "הקשר Kubernetes", + "loadError": { + "title": "לא ניתן לטעון הקשרי Kubernetes", + "message": "פרטי ההקשר אינם זמינים. נסה שוב מבלי לעזוב את הדף הזה." + }, + "status": { + "available": "זמין", + "degraded": "המדדים אינם זמינים", + "unavailable": "לא זמין" + }, + "unavailable": "לא ניתן להגיע להקשר Kubernetes זה. בחר הקשר אחר או ודא את פרטי הכניסה ואת נקודת הקצה שלו.", + "metricsUnavailable": "ניתן להגיע להקשר הזה, אך Metrics Server אינו זמין. המלאי נשאר זמין ללא נתוני CPU וזיכרון בזמן אמת." + }, "cluster": { "title": "לוח המחוונים של אשכול", "label": "אשכול", "providers": "ספקים", "version": "גרסה", - "architecture": "ארכיטקטורה", "capacity": { "title": "קיבולת", + "metricsUnavailable": "Metrics Server אינו זמין. המלאי והקיבולת השמורה עדיין גלויים, אך לא ניתן להציג את השימוש ב-CPU ובזיכרון בזמן אמת.", "resource": { "reserved": "שמור", "used": "בשימוש" @@ -5271,38 +7312,10 @@ } }, "nodes": { - "label": "קונטיינרים", "field": { - "name": { - "label": "שם" - }, - "state": { - "label": "מצב", - "option": { - "ready": "מוכן", - "NotReady": "לא מוכן" - } - }, - "cpu": { - "label": "מעבד" - }, - "memory": { - "label": "זכרון פנימי" - }, - "pods": { - "label": "תרמילים" - }, - "operatingSystem": { - "label": "מערכת הפעלה" - }, - "architecture": { - "label": "ארכיטקטורה" - }, + "metricsUnavailable": "לא זמין", "kubernetesVersion": { "label": "גרסת Kubernetes" - }, - "creationTimestamp": { - "label": "נוצר" } }, "table": { @@ -5310,43 +7323,17 @@ } }, "namespaces": { - "label": "מרחב שמות", - "field": { - "name": { - "label": "שם" - }, - "state": { - "label": "מצב", - "option": { - "active": "פעיל", - "terminating": "מסתיים" - } - }, - "creationTimestamp": { - "label": "נוצר" - } - }, "table": { "search": "חפש ב-{count} מרחבי שמות" } }, "ingresses": { - "label": "כרטיסים", "field": { - "name": { - "label": "שם" - }, - "namespace": { - "label": "מרחב שמות" - }, "className": { "label": "שם קלאס" }, "rulesAndPaths": { "label": "כללים ונתיבים" - }, - "creationTimestamp": { - "label": "נוצר" } }, "table": { @@ -5354,17 +7341,7 @@ } }, "services": { - "label": "שירותים", "field": { - "name": { - "label": "שם" - }, - "namespace": { - "label": "מרחב שמות" - }, - "type": { - "label": "סוג" - }, "ports": { "label": "יציאות" }, @@ -5373,9 +7350,6 @@ }, "clusterIP": { "label": "כתובת אשכול" - }, - "creationTimestamp": { - "label": "נוצר" } }, "table": { @@ -5383,25 +7357,12 @@ } }, "pods": { - "label": "תרמילים", "field": { - "name": { - "label": "שם" - }, - "namespace": { - "label": "מרחב שמות" - }, "image": { "label": "תמונה" }, "applicationType": { "label": "סוג יישום" - }, - "status": { - "label": "מצב" - }, - "creationTimestamp": { - "label": "נוצר" } }, "table": { @@ -5409,51 +7370,17 @@ } }, "secrets": { - "label": "נתוני גישה", - "field": { - "name": { - "label": "שם" - }, - "namespace": { - "label": "מרחב שמות" - }, - "type": { - "label": "סוג" - }, - "creationTimestamp": { - "label": "נוצר" - } - }, "table": { "search": "חפש {count} נתוני גישה" } }, "configmaps": { - "label": "configMaps", - "field": { - "name": { - "label": "שם" - }, - "namespace": { - "label": "מרחב שמות" - }, - "creationTimestamp": { - "label": "נוצר" - } - }, "table": { "search": "חפש {count} configMaps" } }, "volumes": { - "label": "כרכים", "field": { - "name": { - "label": "שם" - }, - "namespace": { - "label": "מרחב שמות" - }, "accessModes": { "label": "מצבי גישה" }, @@ -5468,12 +7395,6 @@ }, "volumeName": { "label": "שם כרך" - }, - "status": { - "label": "מצב" - }, - "creationTimestamp": { - "label": "נוצר" } }, "table": { @@ -5482,6 +7403,29 @@ }, "error": { "internalServerError": "אחזור נתוני Kubernetes נכשל" + }, + "field": { + "name": { + "label": "שם המשימה" + }, + "namespace": { + "label": "מרחב שמות" + }, + "creationTimestamp": { + "label": "נוצר" + }, + "state": { + "label": "מצב המשימה" + }, + "status": { + "label": "מצב" + }, + "type": { + "label": "סוג לקוח הורדה" + }, + "architecture": { + "label": "ארכיטקטורה" + } } }, "permission": { @@ -5515,71 +7459,27 @@ }, "navigationStructure": { "manage": { - "workshop": { - "label": "Workshop" - }, "label": "ניהול", - "boards": { - "label": "לוחות" - }, - "integrations": { - "label": "אינטגרציות", + "custom-widgets": { "edit": { - "label": "עריכה" - }, - "new": { - "label": "חדש" - } - }, - "search-engines": { - "label": "מנועי חיפוש", - "new": { - "label": "חדש" - }, - "edit": { - "label": "עריכה" - } - }, - "medias": { - "label": "מדיה" - }, - "apps": { - "label": "אפליקציות", - "new": { - "label": "חדש" - }, - "edit": { - "label": "עריכה" - } - }, - "users": { - "label": "משתמשים", - "create": { - "label": "צור" - }, - "general": "כללי", - "security": "אבטחה", - "board": "לוחות", - "groups": { - "label": "קבוצות" - }, - "invites": { - "label": "הזמנות" - } - }, - "tools": { - "label": "כלים", - "tasks": { - "label": "משימות" - }, - "docker": { - "label": "דוקר", - "logs": { + "flow": { "label": "" } }, + "workshop": { + "label": "סדנה" + }, + "publish": { + "label": "פרסם בסדנה" + } + }, + "users": { + "general": "כללי", + "security": "אבטחה" + }, + "tools": { + "label": "כלים", "kubernetes": { - "label": "Kubernetes", "nodes": { "label": "צמתים" }, @@ -5605,11 +7505,7 @@ "label": "כוננים" } }, - "logs": { - "label": "קבצי לוג" - }, "certificates": { - "label": "אישורי אבטחה", "hostnames": { "label": "שמות מארחים" } @@ -5620,12 +7516,60 @@ }, "about": { "label": "אודות" + }, + "assistant": { + "label": "מסייע" } } }, "search": { "placeholder": "חפש משהו", "nothingFound": "לא נמצאו תוצאות", + "modePicker": { + "search": { + "label": "חיפוש", + "placeholder": "חפש אפליקציות, לוחות, דפים, פקודות והעדפות" + }, + "apps": { + "label": "אפליקציות", + "placeholder": "חפש אפליקציות, לוחות ואינטגרציות" + }, + "command": { + "label": "פקודות", + "placeholder": "חפש פעולות ופקודות" + }, + "preferences": { + "label": "העדפות", + "placeholder": "חיפוש ושינוי העדפות" + }, + "assistant": { + "label": "מסייע", + "placeholder": "שאל את המסייע" + }, + "external": { + "label": "אינטרנט", + "placeholder": "חיפוש באמצעות מנוע חיפוש חיצוני" + }, + "media": { + "label": "מדיה", + "placeholder": "חפש סרט או סדרה", + "fallback": "חפש במדיה את \"{query}\"" + }, + "userGroup": { + "label": "אנשים", + "placeholder": "חפש משתמשים וקבוצות" + }, + "continueWith": "המשך באמצעות", + "dialogAriaLabel": "תפריט פקודות {mode}", + "navigationLabel": "מצבי חיפוש", + "modeAriaLabel": "מצב {mode}", + "resultsAriaLabel": "תוצאות {mode}", + "footer": { + "navigate": "ניווט", + "open": "פתיחה", + "close": "סגור" + } + }, "error": { "fetch": "ארעה שגיאה בעת איסוף נתונים" }, @@ -5634,7 +7578,6 @@ "help": "חיפוש אפליקציות, אינטגרציות או לוחות", "group": { "app": { - "title": "אפליקציות", "children": { "action": { "open": { @@ -5650,7 +7593,6 @@ } }, "board": { - "title": "לוחות", "children": { "action": { "open": { @@ -5670,9 +7612,6 @@ "title": "בחירת פעולה עבור הלוח" } } - }, - "integration": { - "title": "אינטגרציות" } } }, @@ -5701,9 +7640,6 @@ "newBoard": { "label": "יצירת לוח חדש" }, - "importBoard": { - "label": "ייבוא לוח" - }, "newApp": { "label": "יצירת אפליקציה חדשה" }, @@ -5773,7 +7709,6 @@ } }, "defaultSearchEngineId": { - "label": "", "children": { "detail": { "title": "" @@ -5781,7 +7716,6 @@ } }, "openSearchInNewTab": { - "label": "", "children": { "detail": { "title": "" @@ -5789,7 +7723,6 @@ } }, "ddgBangs": { - "label": "", "children": { "detail": { "title": "" @@ -5804,6 +7737,13 @@ } } }, + "byteUnitSystem": { + "children": { + "detail": { + "title": "בחר את יחידות גודל הנתונים שלך" + } + } + }, "homeBoardId": { "label": "", "children": { @@ -5821,7 +7761,6 @@ } }, "pingIconsEnabled": { - "label": "", "children": { "detail": { "title": "" @@ -5829,7 +7768,6 @@ } }, "enableRightClickOnWidgets": { - "label": "", "children": { "detail": { "title": "" @@ -5857,6 +7795,7 @@ "description": "", "disabled": { "noIntegration": "", + "signInRequired": "היכנס כדי לחפש אינטגרציות של בקשות מדיה.", "scoped": "" } } @@ -5873,7 +7812,6 @@ "help": "שימוש במנוע חיפוש חיצוני", "group": { "searchEngine": { - "title": "מנועי חיפוש", "tipDdgBangs": "", "bang": { "searchWithQuery": "", @@ -5924,20 +7862,6 @@ "group": { "mode": { "title": "מצבים" - }, - "help": { - "title": "עזרה", - "option": { - "documentation": { - "label": "תיעוד" - }, - "submitIssue": { - "label": "שליחת בעיה" - }, - "discord": { - "label": "קהילת דיסקורד" - } - } } } }, @@ -5949,9 +7873,10 @@ "other": { "label": "חיפוש באמצעות מנוע חיפוש אחר" }, - "no-default": { - "label": "אין מנוע חיפוש ברירת מחדל", - "description": "הגדרת מנוע חיפוש ברירת מחדל בהעדפות" + "no-engines": { + "label": "לא הוגדרו מנועי חיפוש", + "descriptionCreate": "הוסף מנוע חיפוש כדי לחפש מתפריט הפקודות", + "descriptionUnavailable": "בקש ממנהל מערכת להגדיר מנוע חיפוש" }, "search": { "label": "חיפוש {query} עם {name}" @@ -6031,7 +7956,6 @@ "help": "חיפוש משתמשים או קבוצות", "group": { "user": { - "title": "משתמשים", "children": { "action": { "detail": { @@ -6044,7 +7968,6 @@ } }, "group": { - "title": "קבוצות", "children": { "action": { "detail": { @@ -6068,9 +7991,6 @@ "engine": { "search": "חיפוש מנוע חיפוש", "field": { - "name": { - "label": "שם" - }, "short": { "label": "קצר" }, @@ -6083,12 +8003,19 @@ }, "page": { "list": { - "title": "מנועי חיפוש", + "ariaLabel": "מנועי חיפוש מוגדרים", "noResults": { "title": "עדיין אין מנוע חיפוש", - "action": "צור את מנוע החיפוש הראשון שלך" + "description": "מנועי חיפוש מאפשרים ל-Spotlight לשלוח שאילתה לאתר או לשירות מחובר.", + "action": "צור את מנוע החיפוש הראשון שלך", + "filteredTitle": "אין מנועי חיפוש התואמים לחיפוש שלך", + "filteredDescription": "אף מנוע חיפוש לא תואם ל-\"{search}\". נסה שם או כתובת URL אחרים." }, - "interactive": "אינטראקטיבי, עושה שימוש באינטגרציה" + "interactive": "אינטראקטיבי, עושה שימוש באינטגרציה", + "type": { + "generic": "תבנית כתובת URL", + "fromIntegration": "אינטגרציה" + } }, "create": { "title": "מנוע חיפוש חדש", @@ -6107,11 +8034,9 @@ "title": "עריכת מנוע חיפוש", "notification": { "success": { - "title": "השינויים הוחלו בהצלחה", "message": "מנוע החיפוש נשמר בהצלחה" }, "error": { - "title": "לא ניתן להחיל שינויים", "message": "לא היה ניתן לשמור את מנוע החיפוש" } }, @@ -6250,6 +8175,10 @@ } }, "log": { + "context": { + "widgetError": "הווידג'ט דיווח על שגיאה בסביבות זמן זה", + "expiredWidgetError": "יומנים סביב שגיאת הווידג'ט הזו אינם נשמרים עוד" + }, "level": { "option": { "debug": "ניפוי באגים", @@ -6261,7 +8190,6 @@ }, "onboardingTour": { "learnMore": "", - "next": "", "prev": "", "done": "", "skip": "", @@ -6288,7 +8216,7 @@ }, "integrationsList": { "title": "", - "description": "" + "description": "אלה השירותים המחוברים ל-Homarr. כל פרטי הכניסה מוצפנים בעת האחסון." }, "integrationsCreate": { "title": "", @@ -6325,5 +8253,359 @@ "description": "" } } + }, + "metadata": { + "description": "לוח מחוונים באירוח עצמי עבור מחסנית *arr וכל מעבדת הבית שלך. משתלב עם יותר מ־50 שירותים, ווידג'טים בזמן אמת וללא קובצי תצורה.", + "dashboardTitle": "לוח המחוונים של {appName}" + }, + "assistant": { + "title": "מסייע", + "open": "פתיחת המסייע", + "close": "סגירת המסייע", + "minimize": "מזעור המסייע", + "spotlight": "שאל את המסייע", + "spotlightDescription": "הקלד ושלח בקשה בלי לצאת מתפריט הפקודות.", + "spotlightPrompt": { + "title": "שאל את המסייע", + "description": "הקלד בקשה למעלה. Enter שולח אותה ברקע.", + "send": "שלח בקשה", + "empty": "הקלד בקשה למעלה" + }, + "unavailable": { + "checking": "בודק אם המסייע זמין…", + "error": "לא ניתן לבדוק את זמינות המסייע. נסה שוב.", + "notConfigured": "מנהל מערכת חייב להגדיר ולהפעיל תחילה את המסייע.", + "signIn": "היכנס כדי להשתמש במסייע." + }, + "newConversation": "שיחה חדשה", + "conversations": "שיחות", + "conversationActions": "פעולות שיחה", + "searchConversations": "חיפוש שיחות", + "noMatchingConversations": "אין שיחות תואמות", + "moreActions": "פעולות תגובה נוספות", + "renameConversation": { + "action": "שינוי שם", + "label": "שם השיחה", + "save": "שמירת השם", + "failedTitle": "לא ניתן לשנות את שם השיחה", + "failedDescription": "Homarr לא הצליח לשנות את שם השיחה הזו. נסה שוב." + }, + "deleteConversation": { + "title": "למחוק את השיחה?", + "description": "“{title}” וההודעות שלה יימחקו לצמיתות.", + "failedTitle": "לא ניתן למחוק את השיחה", + "failedDescription": "Homarr לא הצליח למחוק את השיחה הזו. נסה שוב." + }, + "closeHistory": "סגור היסטוריית שיחות", + "openHistory": "פתח היסטוריית שיחות", + "emptyTitle": "במה אוכל לעזור?", + "emptyDescription": "שאל על הגדרת Homarr שלך, בדוק נתוני מופע בזמן אמת או אשר פעולות כשאתה רוצה שאבצע שינוי.", + "suggestions": { + "health": { + "label": "בדיקת תקינות השירותים", + "prompt": "בדוק את האינטגרציות שלי וסכם כל דבר שדורש תשומת לב." + }, + "explore": { + "label": "חקור את Homarr שלי", + "prompt": "הראה לי במה ניתן לצפות ולנהל במופע Homarr הזה." + }, + "media": { + "label": "מצא מדיה לבקשה", + "prompt": "עזור לי למצוא סרט או סדרה לבקשה." + }, + "style": { + "label": "שיפור לוח מחוונים", + "prompt": "עזור לי לשפר את המראה של לוח או את ה-CSS המותאם אישית שלו. הצג קודם את הלוחות שלי, ולאחר מכן שמור על ההגדרות הנוכחיות בזמן ביצוע השינוי." + }, + "designWidget": { + "label": "עיצוב ווידג'ט", + "prompt": "צור והתקן ווידג'ט מותאם אישית עבור " + } + }, + "composerPlaceholder": "שאל את המסייע…", + "runtime": { + "model": "מודל", + "searchModels": "חיפוש מודלים", + "noModels": "אין מודלים זמינים", + "otherModels": "מודלים אחרים", + "imageInput": "מקבל קלט תמונה", + "thinking": "מצב חשיבה", + "reasoning": { + "auto": "אוטומטי", + "none": "כבוי", + "minimal": "מינימלי", + "low": "נמוך", + "medium": "בינוני", + "high": "גבוה" + } + }, + "providerQuota": { + "title": "ספק Homarr", + "communityWorkshop": "הסדנה הקהילתית", + "dailyAllowance": "מכסת בקשות יומית", + "remainingLabel": "נותרו {remaining} מתוך {limit} בקשות לספק Homarr", + "loading": "טוען את מכסת ספק Homarr", + "signInRequired": "נדרשת כניסה לסדנה עבור ספק Homarr", + "signInDescription": "התחבר באמצעות GitHub דרך הסדנה הקהילתית כדי לקבל את המכסה היומית הנפרדת שלך.", + "exhaustedDescription": "מכסת הספק של Homarr נוצלה להיום. היא מתאפסת בחצות לפי UTC.", + "unavailableDescription": "התחבר לסדנה או המתן לאיפוס מכסת הספק של Homarr.", + "signIn": "כניסה באמצעות GitHub", + "signInError": "ההתחברות ל-GitHub נכשלה. נסה שוב בעוד רגע.", + "loadError": "לא ניתן היה לטעון את מכסת הספק של Homarr.", + "reset": "מתאפס {relative} בשעה ", + "toolCalls": "כל בקשה למודל וכל קריאה שהושלמה לכלי צורכות בקשה אחת.", + "retry": "טען מחדש את המכסה", + "level": { + "ok": "אישור", + "warning": "אזהרה", + "bad": "נמוך", + "dead": "בשימוש" + } + }, + "stop": "עצירת התגובה", + "send": "שלח הודעה", + "copy": "העתק תגובה", + "copyMessage": "העתק הודעה", + "editMessage": "ערוך הודעה", + "updateMessage": "עדכון הודעה", + "regenerate": "יצירת תגובה מחדש", + "helpful": "מועיל", + "notHelpful": "לא מועיל", + "readAloud": "הקרא את התגובה", + "stopReading": "הפסק הקראת תגובה", + "feedbackError": "לא ניתן היה לשמור את המשוב שלך. נסה שוב.", + "exportMarkdown": "ייצוא כ־Markdown", + "exportConversation": { + "action": "ייצא את השיחה כ-Markdown", + "failedTitle": "לא ניתן היה לייצא את השיחה", + "failedDescription": "Homarr לא הצליח לטעון את השיחה הזו. נסה שוב." + }, + "reasoning": "חושב", + "previousResponse": "תגובה קודמת", + "nextResponse": "תגובה הבאה", + "removeAttachment": "הסר קובץ מצורף", + "downloadFile": "הורד את {name}", + "attachedImage": "תמונה מצורפת", + "externalImageBlocked": "תמונה חיצונית נחסמה מטעמי פרטיות", + "image": { + "loading": "טוען תמונה", + "failed": "לא ניתן לטעון תמונה זו.", + "retry": "נסה את התמונה שוב" + }, + "quoteSelection": "ציטוט", + "dismissQuote": "הסר ציטוט", + "attachments": { + "add": "צרף תמונה או מסמך", + "errorTitle": "לא ניתן להוסיף את הקובץ המצורף", + "imageUnsupported": "המודל שנבחר אינו תומך בקלט תמונה." + }, + "mentions": { + "menu": "הוסף הקשר של Homarr", + "context": "הקשר", + "app": "אפליקציות", + "integration": "אינטגרציות", + "board": "לוחות", + "widget": "ווידג'טים", + "tools": "כלים זמינים" + }, + "markdown": { + "diagram": "תרשים", + "renderingDiagram": "מרנדר תרשים…", + "diagramUnavailable": "לא ניתן להציג את התרשים." + }, + "commands": { + "menu": "פקודות המסייע", + "health": "הכן בדיקת תקינות שירות", + "explore": "הכן סקירה של מופע Homarr זה", + "media": "הכן חיפוש מדיה", + "style": "הכן שינוי מראה לוח או CSS מותאם אישית", + "designWidget": "הכן בניית ווידג'ט מותאם אישית באמצעות הנחיה אחת" + }, + "usage": { + "tokens": "טוקנים", + "contextWindow": "חלון הקשר", + "requestDetails": "פרטי הבקשה", + "used": "השלב האחרון", + "remaining": "נותר", + "capacity": "קיבולת", + "input": "קלט", + "output": "פלט", + "cached": "קלט במטמון", + "cacheWrite": "כתיבה למטמון", + "reasoning": "הסקה", + "inputShort": "נכנס", + "outputShort": "יוצא", + "cachedShort": "במטמון", + "reasoningShort": "הסקה", + "firstOutput": "פלט ראשון", + "homarrTiming": "Homarr צפה", + "endToEnd": "מקצה לקצה", + "observedThroughput": "תפוקה שנצפתה", + "providerTiming": "דווח על ידי הספק", + "loadingProviderDetails": "טוען פרטי יצירה…", + "providerDetailsPending": "OpenRouter עדיין מעבד פרטים מסוימים של ההפקה. פתח מחדש כדי לנסות שוב.", + "providerLatency": "השהיית הספק", + "generationTime": "זמן יצירה", + "moderationLatency": "בקרה", + "providerThroughput": "תפוקת הספק", + "fallbacks": "חלופות", + "fallbackLatency": "השהיית חלופה", + "cacheDiscount": "הנחת מטמון", + "normalizedTokens": "קלט / פלט מנורמל של OpenRouter", + "byok": "הביאו מפתח משלכם (BYOK)", + "cost": "עלות", + "reported": "דווח על ידי הספק", + "estimated": "מוערך לפי תמחור המודל", + "upstreamCost": "הסקה במעלה הזרם", + "webSearches": "חיפושים באינטרנט", + "finishReason": "סיבת סיום", + "notReported": "לא דווח", + "agentSteps": "שלבי סוכן", + "step": "שלב {number}", + "generation": "יצירה" + }, + "toolInput": "קלט", + "toolOutput": "פלט", + "toolActivity": { + "iconSearch": "מחפש סמלים של “{query}”", + "iconBrowse": "מעיין בסמלים הזמינים" + }, + "toolNavigation": { + "openPreview": "פתיחת תצוגה מקדימה", + "openWidget": "פתיחת ווידג'ט" + }, + "webSearch": { + "title": "חיפוש באינטרנט", + "completed": "OpenRouter חיפש באינטרנט בזמן אמת עבור תשובה זו.", + "searches": "{count, plural, one {חיפוש אחד} two {שני חיפושים} other {# חיפושים}}", + "sources": "{count, plural, one {מקור אחד} two {שני מקורות} other {# מקורות}}" + }, + "responseError": { + "title": "המסייע לא הצליח לסיים", + "description": "נסה שוב. אם הבעיה נמשכת, בקש ממנהל מערכת לוודא את נקודת הקצה של המודל שהוגדרה." + }, + "toolPreparationError": { + "title": "לא ניתן להכין בקשה זו", + "description": "המודל נעצר לפני שסיפק פרטים מלאים. נסה שוב את התשובה או תאר מחדש את הבקשה. לא בוצע שינוי." + }, + "busy": { + "title": "המסייע כבר עובד", + "description": "המתן לתשובה הנוכחית או פתח אותה כדי לעצור את ההרצה." + }, + "pendingAction": { + "answerTitle": "נדרשת תשובה", + "answerFallback": "בחר תשובה כדי להמשיך", + "formTitle": "סקירת פרטי האפליקציה", + "boardFormTitle": "סקירת שינויי הלוח", + "review": "סקירה", + "sendBlocked": "פתור את הבקשה הממתינה לפני השליחה" + }, + "activity": { + "thinking": "המסייע חושב", + "working": "עובד על הבקשה שלך", + "ready": "התגובה מוכנה", + "completed": "פתח את התגובה", + "approval": "נדרש אישור", + "failed": "המסייע דורש תשומת לב", + "expand": "פתח את תגובת המסייע", + "dismiss": "התעלם מפעילות המסייע" + }, + "scrollToLatest": "גלול לחדש ביותר", + "refresh": { + "action": "רענן את התצוגה הנוכחית", + "working": "מרענן את התצוגה הנוכחית", + "completeTitle": "התצוגה רועננה", + "completeDescription": "נתוני Homarr הגלויים נטענו מחדש.", + "failedTitle": "לא ניתן לרענן את התצוגה", + "failedDescription": "ייתכן שהשינוי עדיין נשמר. נסה שוב את פעולת הרענון." + }, + "askUser": { + "preparing": "מכין שאלה", + "answered": "התשובה שלך", + "other": "אחר", + "otherLabel": "התשובה שלך", + "otherPlaceholder": "הקלד תשובה אחרת…", + "submit": "שלח תשובה", + "cancelOther": "בטל תשובה אחרת", + "optionKind": { + "affirmative": "אשר", + "negative": "דחה", + "alternative": "אפשרות", + "custom": "מותאם אישית" + } + }, + "configureApp": { + "title": "סקירת פרטי האפליקציה", + "description": "בחר סמל מקומי והתאם כל דבר לפני שהמסייע יבקש אישור יצירה.", + "preparing": "מכין את פרטי האפליקציה", + "continue": "השתמש בפרטים אלה", + "ready": "פרטי האפליקציה מוכנים", + "automaticContinue": "שימוש אוטומטי בפרטי האפליקציה האלה" + }, + "configureBoardSettings": { + "title": "סקירת שינויי הלוח", + "loading": "טוען את הגדרות הלוח הנוכחיות", + "loadErrorTitle": "לא ניתן לטעון את הגדרות הלוח", + "loadErrorDescription": "ייתכן שהלוח כבר אינו קיים, או שאין לך הרשאה לשנות אותו.", + "proposedCount": "המסייע הציע {count} שדות", + "changeCount": "{count} שינויים מוכנים", + "ready": "שינויי הלוח מוכנים", + "cancelled": "הגדרות הלוח הנוכחיות נשמרו", + "noChanges": "שום הגדרה לא תשתנה", + "keepCurrent": "השאר את ההגדרות הנוכחיות", + "continue": "המשך לאישור", + "automaticContinue": "אישור אוטומטי של השינויים המוצעים בלוח", + "resetAll": "אפס את כל השינויים", + "tabs": { + "css": "CSS מותאם אישית", + "appearance": "מראה", + "background": "רקע", + "general": "כללי" + }, + "cssDescription": "ערוך את גיליון הסגנונות המלא. כללים קיימים נשמרים אלא אם הוסרו כאן.", + "cssCharacters": "{count} מתוך 16384 תווים", + "copyCss": "העתק CSS", + "copied": "הועתק", + "restoreCss": "שחזר CSS נוכחי", + "remoteCssTitle": "CSS זה טוען משאב מרוחק", + "remoteCssDescription": "גיליונות סגנון מיובאים וכתובות URL מרוחקות יוצרים קשר עם שרת אחר בעת טעינת הלוח. בדוק אותם לפני ההמשך." + }, + "configureWidget": { + "title": "סקירת ווידג'ט", + "preparing": "מכין את הגדרות הווידג'ט", + "review": "סקירת ווידג'ט ואינטגרציות", + "ready": "תצורת הווידג'ט מוכנה", + "cancelled": "הווידג'ט לא נוסף", + "automaticContinue": "אישור אוטומטי של תצורת הווידג'ט המוצעת", + "definitionLoadErrorTitle": "לא ניתן לטעון את הגדרות הווידג'ט", + "definitionLoadErrorDescription": "Homarr לא הצליח לטעון את הגדרות הווידג'ט הזה. נסה שוב.", + "loadErrorTitle": "לא ניתן לטעון אינטגרציות", + "loadErrorDescription": "Homarr לא הצליח לטעון את האינטגרציות הזמינות עבור הווידג'ט הזה.", + "noIntegrationTitle": "נדרשת אינטגרציה תואמת", + "noIntegrationDescription": "הגדר אינטגרציה הנתמכת על ידי הווידג'ט הזה לפני הוספתו ללוח המחוונים.", + "connectIntegration": "חבר שירות", + "manageIntegrations": "ניהול אינטגרציות", + "skip": "אל תוסיף", + "errorTitle": "לא ניתן להכין את הגדרות הווידג'ט", + "errorDescription": "המודל לא סיפק תצורת ווידג'ט מלאה. לא נוסף ווידג'ט." + }, + "approvalRequired": "נדרש אישור", + "complete": "הושלם", + "denied": "נדחה", + "failed": "נכשל", + "working": "עובד", + "approvalDescription": "סקור את השינוי הזה לפני הפעלתו.", + "approveAndRun": "אשר והפעל", + "deny": "דחה", + "autoApproval": { + "label": "אישורים אוטומטיים", + "composerLabel": "אשר עבורי", + "title": "אישורים אוטומטיים", + "description": "הכן טפסים באופן אוטומטי ואשר שינויים מוגנים עבור השיחה הזו. שאלות עדיין ממתינות לתשובתך, וההרשאות שלך ב-Homarr עדיין חלות. אפשרות זו נכבית בעת מעבר בין שיחות.", + "enable": "הפעל עבור שיחה זו", + "disable": "כבה אישורים אוטומטיים", + "enabled": "אישורים אוטומטיים פעילים", + "approving": "מאשר באופן אוטומטי" + } } } diff --git a/packages/translation/src/lang/hr.json b/packages/translation/src/lang/hr.json index 7e325a61a..2b1b37a0f 100644 --- a/packages/translation/src/lang/hr.json +++ b/packages/translation/src/lang/hr.json @@ -1,156 +1,246 @@ { "init": { - "step": { - "start": { - "title": "Dobro došli u Homarr", - "subtitle": "Započnimo s postavljanjem vaše instance Homarra.", - "description": "Za početak odaberite kako želite postaviti svoju instancu Homarra.", - "action": { - "scratch": "Započni ispočetka", - "importOldmarr": "Uvezi iz Homarra prije verzije 1.0", - "restoreSqlite": "Vrati iz SQLite sigurnosne kopije", - "restoreSqliteDescription": "Prenesite cjelovitu SQLite sigurnosnu kopiju baze podataka iz prethodne Homarr instance. To će vratiti sve ploče, korisnike, aplikacije, integracije i postavke.", - "backToOptions": "← Natrag na opcije postavljanja" + "studio": { + "navigationLabel": "Odjeljci uvodnog postavljanja", + "back": "Natrag", + "buildBoard": "Izradi moju ploču", + "common": { + "unknownError": "Nešto nije u redu. Vaši su odabiri i dalje ovdje; pokušajte ponovno." + }, + "claim": { + "checking": "Osiguravanje ove sesije uvođenja…", + "checkingTitle": "Priprema sigurnog postavljanja", + "lockedTitle": "Postavljanje je otvoreno u drugom pregledniku", + "lockedDescription": "Nastavite tamo ili pričekajte da njezina sigurna sesija prvog pokretanja istekne prije ponovnog pokušaja.", + "signInTitle": "Potrebna je prijava administratora", + "signInDescription": "Administrator već postoji. Prijavite se kako biste nastavili postavljanje bez izlaganja vjerodajnica ili pristupa uslugama.", + "signIn": "Prijavi se i nastavi", + "errorTitle": "Postavljanje se nije moglo osigurati", + "errorDescription": "Ponovno učitajte stranicu kako biste pokušali ponovno pokrenuti sigurnu sesiju prvog pokretanja." + }, + "navigation": { + "essentials": "Osnove", + "discover": "Istraži", + "connect": "Poveži", + "board": "Ploča", + "extend": "Proširi", + "review": "Pregledaj" + }, + "welcome": { + "title": "Dobro došli kući.", + "description": "Dobro došli u Homarr v{version}. Provest ćemo vas kroz osnove i pomoći vam da izradite svoju prvu ploču.", + "start": "Započni", + "restore": "Vrati sigurnosnu kopiju", + "restoreTitle": "Vrati iz sigurnosne kopije", + "restoreDescription": "Potpuna sigurnosna kopija SQLitea vraća ploče, osobe, aplikacije, integracije i postavke. Homarr je provjerava prije zamjene bilo čega.", + "errorTitle": "Postavljanje nije moglo započeti", + "errorDescription": "Vaši su odabiri za postavljanje i dalje ovdje. Pokušajte ponovno ili ponovno učitajte stranicu ako se problem nastavi." + }, + "account": { + "title": "Izradite svoj administratorski račun", + "description": "Navedite vjerodajnice za svog administratorskog korisnika.", + "username": "Korisničko ime administratora", + "passwordHint": "Obavezna je samo minimalna duljina od 8 znakova. Ostale provjere jačine lozinke samo su prijedlozi.", + "create": "Izradi administratora", + "errorTitle": "Administrator nije mogao biti izrađen", + "recoveryTitle": "Administratorski račun je izrađen", + "recoveryDescription": "Automatska prijava nije dovršena. Prijavite se vjerodajnicama administratora koje ste upravo izradili kako biste nastavili postavljanje.", + "recoveryAction": "Prijavi se i nastavi", + "unknownError": "Administrator nije mogao biti izrađen." + }, + "externalGroup": { + "title": "Povežite svoju administratorsku grupu", + "description": "Upotrijebite točan naziv grupe koji šalje LDAP ili OIDC. Članovi te grupe dobit će administratorski pristup.", + "name": "Vanjska administratorska grupa", + "nameDescription": "Razlikuje velika i mala slova te se mora podudarati s vašim pružateljem identiteta.", + "continue": "Spremi grupu i nastavi", + "errorTitle": "Grupa nije mogla biti spremljena", + "unknownError": "Administratorska grupa nije mogla biti spremljena." + }, + "essentials": { + "title": "Započnite s poznatim zadanim postavkama", + "description": "Postavite jezik i izgled koje će svi prvo vidjeti, a zatim navedite Homarru obrazac adrese koji upotrebljavaju vaše usluge.", + "language": "Zadani jezik", + "theme": "Zadana tema", + "themeAuto": "Sustav", + "themeLight": "Svijetla", + "themeDark": "Tamna", + "serverOriginHelp": "Homarr upotrebljava ovu adresu za unaprijed ispunjavanje otkrivenih URL-ova usluga. I dalje možete pojedinačno urediti svaku uslugu.", + "serverDescription": "Ovo je prečac, a ne ograničenje. Svaka otkrivena usluga i dalje se može uređivati.", + "serverOrigin": "Domena, IP adresa ili putanja obrnutog proxyja", + "serverOriginDescription": "Primjeri: home.lan, 192.168.1.10 ili https://home.example.com/services. U nastavku odaberite kako će se svaka usluga dodavati.", + "analytics": "Dijeli anonimnu analitiku proizvoda", + "analyticsDescription": "Pomaže Homarru poboljšati pouzdanost značajki. Ne šalju se vjerodajnice usluga ni sadržaj nadzorne ploče." + }, + "discover": { + "title": "Pogledajte čemu ova instalacija zapravo može pristupiti", + "description": "Homarr provjerava dostupne mogućnosti. Nedostajući Dockerov socket ili Kubernetesov kontekst nikada ne blokiraju ručno postavljanje.", + "database": "Baza podataka", + "docker": "Docker i kompatibilni socketi", + "kubernetes": "Kubernetes", + "assistantWorkshop": "Pomoćnik i Radionica", + "found": "Pronađeno integracija: {integrations}, kao i dodatnih aplikacija: {apps}", + "retryKubernetes": "Ponovno provjeri Kubernetes", + "retryWorkshop": "Ponovno provjeri Radionicu", + "unknownVersion": "nepoznata verzija", + "kubernetesAvailable": "Povezano s Kubernetesom {version}", + "kubernetesDisabled": "Nije omogućeno; nastavite s Dockerom ili ručnim uslugama", + "kubernetesUnavailable": "Kubernetes je omogućen, ali mu se iz ovog Homarr procesa ne može pristupiti", + "workshopAvailable": "Zajednička Radionica i hostane usluge Pomoćnika dostupne su", + "workshopUnavailable": "Lokalni i prilagođeni pružatelji Pomoćnika i dalje su dostupni", + "partialTitle": "Neki se izvori nisu mogli skenirati", + "partialDescription": "Rezultati s dostupnih hostova su zadržani. Provjerite dozvole za socket ili ručno dodajte usluge u sljedećem odjeljku.", + "status": { + "checking": "Provjera dostupnosti…", + "available": "Dostupno", + "partial": "Djelomično dostupno", + "empty": "Dostupno, ali nema odgovarajućih pokrenutih usluga", + "disabled": "Onemogućeno konfiguracijom poslužitelja", + "unavailable": "Nedostupno iz ovog Homarr procesa" } }, - "import": { - "title": "Uvoz podataka", - "subtitle": "Možete uvesti podatke iz postojeće instance Homarra.", - "dropzone": { - "title": "Povucite ZIP datoteku ovdje ili kliknite za pregled", - "description": "Preneseni ZIP obradit će se i moći ćete odabrati što želite uvesti" + "connect": { + "title": "Povežite ono što ploču čini korisnom", + "description": "Odaberite više usluga odjednom. Dockerove oznake imaju prednost, podudaranje slika popunjava praznine, a svaki URL i vjerodajnica mogu se pregledati.", + "discoveredIntegrations": "Otkrivene instance integracija ({count})", + "detectedIntegrationLabel": "Uvezi {name}, otkriveno kao {kind}", + "detectedAppLabel": "Uvezi otkrivenu aplikaciju {name}", + "otherIntegrations": "Dodaj drugu integraciju", + "configureIntegrations": "Konfiguriraj integracije", + "discoveredApps": "Otkrivene aplikacije ({count})", + "appAddressRequired": "Dodajte adresu za {name} ili je uklonite iz odabira.", + "empty": "Nema odabranih integracija. Homarr će i dalje izraditi korisnu početnu ploču s općim widgetima.", + "dockerSource": "Docker", + "manualSource": "Ručno", + "url": "URL usluge", + "noCredentials": "Nema vjerodajnica", + "noCredentialsDescription": "Ova integracija ne treba vjerodajnice.", + "credentialMethod": "Način upotrebe vjerodajnica", + "getApiKey": "Otvori postavke API ključa za ovu uslugu", + "openGuide": "Otvori Homarrjev vodič za postavljanje ove usluge", + "testConnection": "Testiraj vezu", + "testSuccess": "Veza radi", + "testSuccessDescription": "Homarr se povezao s trenutačnom adresom i vjerodajnicama.", + "testError": "Veza nije uspjela", + "testErrorDescription": "Provjerite adresu usluge i vjerodajnice, a zatim pokušajte ponovno.", + "needsConfiguration": "Zahtijeva konfiguraciju", + "tested": "Veza je testirana", + "testFailed": "Testiranje veze nije uspjelo", + "incompleteConfirmation": "Nedovršene integracije bit će preskočene. Želite li nastaviti bez njih?" + }, + "board": { + "title": "Oblikujte ploču prije izrade", + "description": "Homarr stvara zaštićene mobilne i osnovne rasporede, a zatim postavlja aplikacije i kompatibilne widgete iz odabranih usluga.", + "target": "Ploča za konfiguriranje", + "targetDescription": "Odaberite točno postojeću ploču koju ova postavka treba ažurirati.", + "targetPlaceholder": "Odaberite ploču", + "targetRequired": "Odaberite ploču za konfiguriranje prije nastavka.", + "name": "Naziv ploče", + "nameDescription": "Upotrebljava se u URL-u ploče; dopuštena su samo slova, brojevi, crtice i podvlake.", + "nameRequired": "Unesite naziv ploče prije nastavka.", + "primaryColor": "Primarna boja", + "secondaryColor": "Sekundarna boja", + "resetColors": "Poništi boje", + "radius": "Polumjer kutova widgeta", + "radiusOptions": { + "xs": "Usko", + "sm": "Suptilno", + "md": "Uravnoteženo", + "lg": "Zaobljeno", + "xl": "Blago" }, - "fileInfo": { - "action": { - "change": "Promijeni datoteku" - } + "columns": "Stupci ploče", + "columnsDescription": "Stupci definiraju vodoravnu mrežu koja se upotrebljava za određivanje veličine i položaja stavki. 12 je dovoljno za većinu korisnika.", + "columnCount": "{count, plural, one {# stupac} few {# stupca} other {# stupaca}}", + "leftSidebar": "Lijeva bočna traka", + "rightSidebar": "Desna bočna traka", + "previewLabel": "Pregled prvog rasporeda ploče uživo" + }, + "extend": { + "title": "Napredne značajke", + "tabsLabel": "Postavljanje pomoćnika, radionice i MCP-a", + "assistant": "Pomoćnik", + "workshop": "Radionica", + "assistantSetup": { + "loginTitle": "Potrebna je prijava administratora", + "loginDescription": "Ključevi pružatelja usluga i pristup modelima povlašteni su. Dovršite postavljanje, prijavite se i Homarr će izravno otvoriti konfiguraciju pomoćnika.", + "loginAction": "Prijavite se za konfiguriranje pomoćnika" }, - "importSettings": { - "title": "Postavke uvoza", - "description": "Konfiguriraj ponašanje uvoza" + "workshopSetup": { + "title": "Homarr radionica", + "description": "Pregledajte prilagođene widgete zajednice, provjerite njihove zatražene mogućnosti, instalirajte ih i objavite vlastiti rad bez kopiranja koda između poslužitelja.", + "available": "Dostupno", + "checking": "Provjera…", + "unavailable": "Nedostupno", + "discoverTitle": "Otkrijte", + "discoverDescription": "Pronađite widgete izrađene za stvarne samostalno hostane tijekove rada.", + "installTitle": "Pregledajte i instalirajte", + "installDescription": "Pregledajte metapodatke i konfiguraciju prije dodavanja bilo čega.", + "publishTitle": "Dijelite", + "publishDescription": "Objavite widgete za ponovnu upotrebu u zajednici.", + "browse": "Pregledaj radionicu" }, - "boardSelection": { - "title": "Pronađene ploče: {count}", - "description": "Odaberite sve ploče s veličinom koju želite uvesti", - "action": { - "selectAll": "Odaberi sve", - "unselectAll": "Poništi odabir svega" - } - }, - "summary": { - "title": "Sažetak uvoza", - "description": "U sažetku u nastavku možete vidjeti što će se uvesti", - "action": { - "import": "Potvrdi uvoz i nastavi" - }, - "entities": { - "apps": "aplikacije", - "boards": "Daske", - "integrations": "Integracije", - "credentialUsers": "Korisnici vjerodajnica" - } - }, - "tokenModal": { - "title": "Unesite uvozni token", - "field": { - "token": { - "label": "Znak", - "description": "Unesite prikazani uvozni token iz svoje prethodne instance Homarra" - } - }, - "notification": { - "error": { - "title": "Neispravan token", - "message": "Token koji ste unijeli nije valjan" - } - } + "mcpSetup": { + "title": "Homarr MCP", + "description": "Povežite Claude, Codex ili drugog MCP klijenta s Homarrovim tipiziranim alatima. API ključevi omogućuju izričit opoziv pristupa.", + "endpoint": "Streamable HTTP krajnja točka", + "keyTitle": "Kopirajte ovaj ključ sada", + "keyDescription": "Radi sigurnosti Homarr više ne može prikazati ovaj API ključ.", + "copyKey": "Kopiraj API ključ", + "createKey": "Izradi MCP API ključ", + "errorTitle": "MCP API ključ nije moguće izraditi", + "loginRequired": "Nakon postavljanja prijavite se kao administrator kako biste izradili API ključ.", + "configuration": "Konfiguracija klijenta", + "copy": "Kopiraj konfiguraciju", + "copied": "Kopirano", + "advanced": "Otvori MCP alate, dopuštenja i pojedinosti postavljanja" } }, - "user": { - "title": "Admin korisnik", - "subtitle": "Navedite vjerodajnice za svoj administratorski korisnički račun.", - "notification": { - "success": { - "title": "Korisnik je stvoren", - "message": "Korisnik je uspješno stvoren" - }, - "error": { - "title": "Stvaranje korisnika nije uspjelo" - } - } - }, - "group": { - "title": "Vanjska grupa", - "subtitle": "Navedite grupu koja će se koristiti za vanjske korisnike.", - "form": { - "name": { - "label": "Naziv grupe", - "description": "Naziv mora odgovarati administratorskoj grupi vanjskog pružatelja usluge" - } - } - }, - "settings": { - "title": "Postavke", - "subtitle": "Konfigurirajte postavke poslužitelja." - }, - "integrations": { - "title": "Integracije", - "subtitle": "Odaberite usluge koje koristite.", - "description": "Odaberite integracije koje želite povezati. Automatski ćemo postaviti vašu ploču s odgovarajućim widgetima.", - "action": { - "continue": "Nastavi", - "skip": "Preskoči za sada" - }, - "configure": { - "progress": "{current} od {total}", - "skip": "Preskoči ovu integraciju", - "finishing": "Postavljanje vaše ploče...", - "error": { - "title": "Postavljanje nije uspjelo", - "message": "Nešto je pošlo po zlu prilikom postavljanja vaše ploče. Pokušajte ponovno." - }, - "helpers": { - "tooltip": "Pomagači URL-a", - "description": "Ovi pomagači pokušavaju pogoditi URL za vaše usluge. Ako ne radi, samo ručno upišite adresu." - } - }, - "urlTemplate": { - "label": "Osnovni URL", - "placeholder": "homelab.local ili 192.168.1.1", - "hint": "Unesite svoju osnovnu domenu ili IP za automatsko popunjavanje URL-ova integracija", - "warning": "Postavljanjem osnovnog URL-a sada automatski će ispuniti sve URL-ove integracija, uštedjet ćete vrijeme tijekom postavljanja", - "preview": "npr. {example}", - "mode": { - "subdomain": "Poddomena", - "hostPort": "Računalo:Port" - } - }, - "docker": { - "detected": "Docker je otkrio {count} usluga", - "detectedBreakdown": "{integrations} integracija · {apps} aplikacija", - "summary": "Homarr je otkrio {apps} aplikacija, {integrations} od kojih imaju ugrađene integracije", - "appBadge": "Aplikacija", - "appSectionLabel": "Aplikacije za dodavanje na ploču ({count} odabrano)", - "scanning": "Skeniranje Dockera...", - "scanningDescription": "Traženje pokrenutih kontejnera na vašem sustavu" + "review": { + "title": "Jedna ploča prilagođena vašim uslugama", + "description": "Homarr provjerava nespremljene veze, uvozi odabrane aplikacije, primjenjuje izgled i rasporede, a zatim otvara točnu ploču koju je konfigurirao.", + "board": "Prva ploča", + "columns": "Stupci ploče", + "columnsValue": "{count, plural, one {# stupac} few {# stupca} other {# stupaca}}", + "sidebars": "Bočne trake", + "sidebarsValue": "{count, plural, =0 {Nema} one {# bočna traka} few {# bočne trake} other {# bočnih traka}}", + "layouts": "Responzivni rasporedi", + "layoutsValue": "Mobilni + osnovni", + "integrations": "Integracije", + "integrationsValue": "{count, plural, =0 {Ništa nije odabrano} one {# integracija} few {# integracije} other {# integracija}}", + "apps": "Pločice aplikacija", + "appsValue": "{count, plural, =0 {Samo početne aplikacije} one {# pločica aplikacije} few {# pločice aplikacije} other {# pločica aplikacija}}", + "language": "Jezik", + "theme": "Tema", + "themeAuto": "Postavke sustava", + "themeLight": "Svijetla", + "themeDark": "Tamna", + "colors": "Boje ploče", + "radius": "Polumjer widgeta", + "automaticTitle": "Što će Homarr izraditi", + "automaticDescription": "Kompatibilni widgeti, ikone, poveznice aplikacija, odnosi integracija i responzivni položaj preuzimaju se iz zajedničkog Homarr kataloga. Svaki rezultat možete naknadno urediti.", + "dockerWarningTitle": "Neke su se Docker oznake promijenile tijekom postavljanja", + "dockerWarningDescription": "{count, plural, one {# odabrani Docker rezultat nije moguće primijeniti jer se njegova usluga promijenila, ciljala je drugu ploču ili je njezin widget bio nekompatibilan} few {# odabrana Docker rezultata nije moguće primijeniti jer su se njihove usluge promijenile, ciljale su druge ploče ili su njihovi widgeti bili nekompatibilni} other {# odabranih Docker rezultata nije moguće primijeniti jer su se njihove usluge promijenile, ciljale su druge ploče ili su njihovi widgeti bili nekompatibilni}}.", + "errorTitle": "Ploču nije moguće izraditi", + "progress": { + "applying": "Provjera veza i izrada ploče", + "done": "Vaša je ploča spremna" } }, "finish": { - "title": "Dovrši postavljanje", - "subtitle": "Spremni ste za početak!", - "description": "Uspješno ste dovršili postupak postavljanja. Sada možete početi koristiti Homarr. Odaberite sljedeću radnju:", - "action": { - "goToBoard": "Idi na ploču {name}", - "createBoard": "Stvori svoju prvu ploču", - "inviteUser": "Pozovi druge korisnike", - "docs": "Pročitaj dokumentaciju" - } + "title": "Vaša je prva ploča spremna.", + "description": "Homarr je povezao odabrane dijelove, a ostalo je ostavio uredivim. Sada otvorite ploču; kratki obilazak proizvoda može vam pokazati način uređivanja, widgete, rasporede i pretraživanje.", + "openBoard": "Otvori moju ploču", + "manageTitle": "Upravljati", + "manageDescription": "Doradite aplikacije, integracije, ploče, korisnike i postavke poslužitelja.", + "workshopTitle": "Radionica", + "workshopDescription": "Otkrijte i instalirajte prilagođene widgete zajednice.", + "docsTitle": "Upoznajte Homarr", + "docsDescription": "Pročitajte usmjerene vodiče za ploče, widgete, integracije i alate." } - }, - "backToStart": "Natrag na početak" + } }, "user": { - "title": "Korisnici", "name": "Korisnik", "page": { "login": { @@ -159,12 +249,10 @@ }, "invite": { "title": "Pridružite se Homarru", + "titleWithAppName": "Pridruži se aplikaciji {appName}", "subtitle": "Dobro došli u Homarr! Kreirajte svoj račun", + "subtitleWithAppName": "Dobro došli u {appName}! Izradite svoj račun", "description": "Pozvani ste od strane {username}" - }, - "init": { - "title": "Nova instalacija Homarra", - "subtitle": "Kreirajte početnog administratorskog korisnika" } }, "field": { @@ -192,12 +280,17 @@ "previousPassword": { "label": "Prethodna lozinka" }, - "homeBoard": { - "label": "Početna ploča" - }, "pingIconsEnabled": { "label": "Koristi ikone za pingove" }, + "byteUnitSystem": { + "label": "Jedinice veličine podataka", + "description": "Odaberite kako Homarr prikazuje veličine bajtova i brzine prijenosa bajtova. Brzine bitova uvijek upotrebljavaju decimalne jedinice.", + "options": { + "binary": "Binarno", + "decimal": "Decimalno" + } + }, "enableRightClickOnWidgets": { "label": "Omogući desni klik na widgetima", "description": "Prikaži Homarrov kontekstni izbornik pri desnom kliku na widget. Onemogućite ovu opciju za upotrebu zadanog izbornika preglednika (npr. \"Otvori poveznicu u novoj kartici\")." @@ -247,7 +340,6 @@ } } }, - "create": "Stvori korisnika", "changePassword": { "label": "Promijeni lozinku", "notification": { @@ -259,56 +351,6 @@ } } }, - "changeHomeBoard": { - "notification": { - "success": { - "message": "Početna ploča uspješno promijenjena" - }, - "error": { - "message": "Nije moguće promijeniti početnu ploču" - } - } - }, - "changeSearchPreferences": { - "notification": { - "success": { - "message": "Postavke pretraživanja uspješno su promijenjene" - }, - "error": { - "message": "Nije moguće promijeniti postavke pretraživanja" - } - } - }, - "changeFirstDayOfWeek": { - "notification": { - "success": { - "message": "Prvi dan tjedna uspješno promijenjen" - }, - "error": { - "message": "Nije moguće promijeniti prvi dan tjedna" - } - } - }, - "changePingIconsEnabled": { - "notification": { - "success": { - "message": "Ikone pinga uspješno prebačene" - }, - "error": { - "message": "Nije moguće prebaciti ikone pinga" - } - } - }, - "changeDdgBangs": { - "notification": { - "success": { - "message": "DuckDuckGo prečaci uspješno uključeni/isključeni" - }, - "error": { - "message": "Ne mogu uključiti/isključiti DuckDuckGo prečace" - } - } - }, "manageAvatar": { "changeImage": { "label": "Promijeni sliku", @@ -338,16 +380,6 @@ } } }, - "editProfile": { - "notification": { - "success": { - "message": "Profil uspješno ažuriran" - }, - "error": { - "message": "Nije moguće ažurirati profil" - } - } - }, "delete": { "label": "Trajno izbriši korisnika", "description": "Briše ovog korisnika uključujući njegove postavke. Neće izbrisati nijednu ploču. Korisnik neće biti obaviješten.", @@ -356,18 +388,13 @@ "select": { "label": "Odaberi korisnika", "notFound": "Korisnik nije pronađen" - }, - "transfer": { - "label": "Odaberi novog vlasnika" } } }, "group": { - "title": "Grupe", "name": "Grupa", "search": "Pronađi grupu", "field": { - "name": "Naziv", "members": "Članovi", "homeBoard": { "label": "Početna ploča", @@ -388,6 +415,19 @@ } } }, + "custom-widget": { + "title": "Prilagođeni widgeti", + "item": { + "manage": { + "label": "Upravljanje prilagođenim widgetima", + "description": "Omogućite članovima izradu, uređivanje i brisanje definicija prilagođenih widgeta" + }, + "secret-write": { + "label": "Konfiguriranje tajni prilagođenih widgeta", + "description": "Omogućite članovima i njihovim API ključevima postavljanje šifriranih vjerodajnica prilagođenih widgeta" + } + } + }, "app": { "title": "aplikacije", "item": { @@ -493,6 +533,35 @@ "description": "Dopusti članovima upravljanje i brisanje bilo koje tražilice" } } + }, + "matrix": { + "none": "Bez pristupa", + "impliedHint": "Dodjeljuje i: {permissions}", + "grantedViaAdmin": "Administratori ovo već imaju. Postavite Administratora na „Bez pristupa” kako biste zasebno konfigurirali ovu stavku.", + "preset": { + "label": "Unaprijed definirane postavke", + "viewer": "Pregledavatelj", + "viewerDescription": "Samo za čitanje: pregled ploča i medija te upotreba postojećih aplikacija i integracija.", + "editor": "Uređivač", + "editorDescription": "Svakodnevno upravljanje: izrada i uređivanje ploča, aplikacija, integracija i tražilica.", + "admin": "Administrator", + "adminDescription": "Neograničen pristup svakoj značajci i postavci, uključujući upravljanje korisnicima.", + "custom": "Prilagođeno" + }, + "effective": { + "title": "Djelotvorna dopuštenja", + "description": "Potpuni, deduplicirani skup radnji koje članovi ove grupe mogu izvršiti, uključujući neizravno dodijeljena dopuštenja.", + "empty": "Nisu odabrana dopuštenja" + }, + "noneDescription": "Članovi nemaju pristup ovom području.", + "level": { + "view": "Pregled", + "use": "Upotreba", + "interact": "Interakcija", + "modify": "Izmjena", + "full": "Potpuno" + }, + "capabilityIncluded": "Već uključeno u „{level}”" } }, "memberNotice": { @@ -607,21 +676,24 @@ "search": "Pronađi aplikaciju", "page": { "list": { - "title": "aplikacije", + "ariaLabel": "Konfigurirane aplikacije", "noResults": { "title": "Još nema aplikacija", - "action": "Kreirajte svoju prvu aplikaciju" + "description": "Aplikacije su poveznice na usluge i alate koje želite na svojim pločama.", + "action": "Kreirajte svoju prvu aplikaciju", + "filteredTitle": "Nijedna aplikacija ne odgovara vašem pretraživanju", + "filteredDescription": "Nijedna aplikacija ne odgovara izrazu „{search}”. Pokušajte s drugim nazivom ili URL-om.", + "createOnlyTitle": "Možete dodavati samo aplikacije", + "createOnlyDescription": "Vaša vam dopuštenja omogućuju izradu aplikacija, ali ne i pregled postojećih. Zatražite od administratora pristup upravljanju aplikacijama kako biste vidjeli potpuni popis." } }, "create": { "title": "Nova aplikacija", "notification": { "success": { - "title": "Kreiranje uspješno", "message": "Aplikacija je uspješno kreirana" }, "error": { - "title": "Kreiranje nije uspjelo", "message": "Aplikaciju nije moguće kreirati" } } @@ -630,11 +702,9 @@ "title": "Uredi aplikaciju", "notification": { "success": { - "title": "Promjene uspješno primijenjene", "message": "Aplikacija je uspješno spremljena" }, "error": { - "title": "Nije moguće primijeniti promjene", "message": "Aplikaciju nije moguće spremiti" } } @@ -644,26 +714,18 @@ "message": "Jeste li sigurni da želite izbrisati aplikaciju {name}?", "notification": { "success": { - "title": "Brisanje uspješno", "message": "Aplikacija je uspješno izbrisana" }, "error": { - "title": "Brisanje nije uspjelo", "message": "Nije moguće izbrisati aplikaciju" } } } }, "field": { - "name": { - "label": "Naziv" - }, "description": { "label": "Opis" }, - "url": { - "label": "URL" - }, "useDifferentUrlForPing": { "checkbox": { "label": "Koristi drugi URL za ping", @@ -678,34 +740,582 @@ "search": "Pretraži aplikaciju", "noResults": "Nema rezultata", "action": "Odaberi {app}", - "title": "Odaberite aplikaciju za dodavanje na ovu ploču" + "title": "Odaberite aplikaciju za dodavanje na ovu ploču", + "toggle": "Kliknite za odabir", + "selected": "Odabrano", + "multiple": "Dodaj {count}", + "selectedCount": "{count, plural, one {# odabrano} few {# odabrana} other {# odabranih}}", + "appsSelected": "{count, plural, one {# odabrana aplikacija} few {# odabrane aplikacije} other {# odabranih aplikacija}}", + "selectMultiple": "Odaberi više", + "cancelMultiple": "Izađi iz višestrukog odabira", + "customApplication": "Prilagođena aplikacija", + "application": "Aplikacija" }, "create": { "title": "Stvori novu aplikaciju", "description": "Stvori novu aplikaciju ", "action": "Otvori stvaranje aplikacije" + } + } + }, + "tips": { + "dismiss": "Zatvori savjet", + "multiSelectApps": "Savjet: držite Ctrl / ⌘ za odabir više aplikacija odjednom" + }, + "customWidget": { + "secretEntry": { + "title": "Konfiguriraj API izvor", + "description": "Potvrdite URL poslužitelja i unesite vjerodajnice. Homarr šifrira tajne vrijednosti i nikad ih ne vraća agentu koji ih zatraži.", + "loading": "Učitavanje sigurnog zahtjeva…", + "applying": "Primjena ove konfiguracije… Ostavite ovu stranicu otvorenom.", + "saved": "API izvor je konfiguriran. Možete zatvoriti ovu stranicu.", + "unavailable": "Zahtjev nije dostupan", + "saveError": "Nije moguće konfigurirati API izvor", + "source": "API izvor: {name}", + "baseUrl": "URL poslužitelja", + "networkScope": "Mrežni pristup", + "save": "Spremi API konfiguraciju", + "expires": "Ovaj jednokratni zahtjev istječe u {time}." + }, + "page": { + "list": { + "noResults": "Još nema prilagođenih widgeta. Izradite svoj prvi!", + "noDescription": "Nema opisa", + "enabled": "Omogućeno", + "disabled": "Onemogućeno", + "disabledDescription": "Ovaj widget ostaje konfiguriran, ali neće se učitati ni na jednoj ploči.", + "requestCount": "{count, plural, one {# zahtjev} few {# zahtjeva} other {# zahtjeva}}", + "invalidDefinition": "Nevažeća definicija", + "migrationRequired": "Potrebna je migracija", + "migrationInstructions": "Otvorite Radnje za kopiranje ili izvoz izvorne definicije v1 radi ručne ponovne izrade. Možete upotrijebiti i migracijski upit s LLM-om. Postojeći položaji na pločama nastavit će raditi nakon migracije.", + "missingCredentials": "{count, plural, one {Nedostaje vjerodajnica} few {Nedostaju # vjerodajnice} other {Nedostaje # vjerodajnica}}", + "missingCredentialsDescription": "{count, plural, one {Ovom widgetu još uvijek nedostaje jedna vjerodajnica.} few {Ovom widgetu još uvijek nedostaju # vjerodajnice.} other {Ovom widgetu još uvijek nedostaje # vjerodajnica.}} Odaberite ovu oznaku za konfiguriranje URL-a i šifriranih vrijednosti." }, - "add": "Dodaj aplikaciju" + "create": { + "title": "Izradi prilagođeni widget", + "subtitle": "Definirajte API URL, autentifikaciju i način prikaza podataka odgovora." + }, + "tabs": { + "ariaLabel": "Odjeljci prilagođenih widgeta", + "installed": "Instalirano", + "workshop": "Radionica" + } + }, + "action": { + "pasteImportHint": "Zalijepite potpuni JSON prilagođenog widgeta pomoću Ctrl+V ili Command+V", + "delete": "Izbriši prilagođeni widget", + "deleteConfirm": "Jeste li sigurni da želite izbrisati \"{name}\"? Ova se radnja ne može poništiti.", + "export": "Izvezi", + "duplicate": "Dupliciraj", + "aiPrompt": "Dizajniraj pomoću umjetne inteligencije", + "copyAiPrompt": "Kopiraj AI upit", + "enable": "Omogući", + "disable": "Onemogući", + "menu": "Radnje", + "downloadSkill": "Pregledaj vještinu prilagođenog widgeta", + "publishWorkshop": "Objavi u radionici", + "migrate": "Migriraj prilagođeni widget", + "configureSources": "Konfiguriraj izvore", + "copyLegacyDefinition": "Kopiraj izvorni sadržaj widgeta", + "exportLegacyDefinition": "Izvezi izvorni sadržaj widgeta", + "copyMigrationPrompt": "Kopiraj migracijski upit za LLM", + "pasteMigration": "Zalijepi migrirani widget", + "importMigration": "Uvezi migriranu JSON datoteku" + }, + "sourceSetupDialog": { + "title": "Konfiguriraj izvore widgeta", + "description": "Pregledajte s čime se ovaj widget povezuje i dodajte ili zamijenite njegove šifrirane vjerodajnice.", + "credentialsRequired": "Zahtjevi neće uspjeti dok se ne dodaju potrebne vjerodajnice.", + "save": "Spremi konfiguraciju" + }, + "field": { + "description": "Opis" + }, + "editor": { + "errorBoundary": { + "title": "Nešto nije u redu" + }, + "action": { + "components": "Komponente", + "format": "Oblikuj", + "insertStarter": "Umetni početni sadržaj", + "redo": "Ponovi", + "copied": "Kopirano", + "schema": "Shema" + }, + "reference": { + "minimal": "Minimalni primjer", + "full": "Potpuni primjer" + }, + "componentReference": { + "search": "Pretraži komponente", + "empty": "Nema odgovarajućih komponenti", + "count": "Dostupno je {count, number} komponenti" + }, + "status": { + "errors": "{count, number} pogrešaka", + "warnings": "{count, number} upozorenja", + "ready": "Nisu pronađeni problemi", + "position": "Redak {line, number}, stupac {column, number}", + "characters": "{count, number} znakova", + "charactersWithLimit": "{count, number} / {limit, number}" + }, + "diagnostics": { + "title": "Dijagnostika predloška", + "line": "Redak {line, number}", + "ast": "{value}", + "bindingTypeConflict": "Ulaz „{value}” dijele kontrole s nekompatibilnim vrstama vrijednosti.", + "runtimeBindingTypeConflict": "Ulaz „{value}” vezan je i kao {firstType} i kao {secondType}.", + "dynamicRequestId": "Potreban je doslovni requestId. Dinamički ID-ovi zahtjeva nisu prihvaćeni.", + "dynamicInputBinding": "Za bind je potreban doslovni naziv ulaza.", + "inlineRequestProps": "Mrežne komponente prihvaćaju requestId i params; svojstva inline URL-a, metode, zaglavlja i tijela nisu dopuštena.", + "invalidRequestManifest": "Imenovani zahtjevi moraju biti valjana mapa zahtjeva. {value}", + "missingRequestId": "Ova mrežna komponenta zahtijeva doslovni requestId.", + "templateEmpty": "Unesite JSX predložak.", + "templateTooLong": "Predložak premašuje ograničenje od 50.000 znakova.", + "unknownRequest": "Ne postoji imenovani zahtjev s ID-om „{value}”." + } + }, + "workbench": { + "configure": "Konfiguriraj", + "sectionNavigation": "Odjeljci prilagođenog widgeta", + "widgetPreview": "Pretpregled widgeta", + "generalInformation": "Opće informacije", + "invalidWidget": "Nevažeći widget", + "section": { + "general": "Općenito", + "sources": "API izvori", + "requests": "Zahtjevi", + "options": "Mogućnosti", + "jsx": "JSX", + "preview": "Pretpregled" + }, + "status": { + "unsaved": "Nespremljene promjene", + "invalid": "Zahtijeva pažnju", + "ready": "Spremno" + }, + "saveError": { + "title": "Widget nije spremljen", + "description": "Ispravite ove pogreške provjere valjanosti i pokušajte ponovno spremiti.", + "more": "U radnom okruženju prikazano je još pogrešaka: +{count}.", + "errors": "Pogreške provjere valjanosti", + "copy": "Kopiraj pogreške", + "copied": "Pogreške su kopirane" + }, + "action": { + "preview": "Testiraj i pregledaj", + "previewLoading": "Testiranje zahtjeva" + }, + "requests": { + "title": "Imenovani upiti i radnje", + "label": "Zahtjevi", + "description": "Upiti učitavaju podatke, a radnje se pokreću tek nakon korisničke interakcije. Bilo koja HTTP metoda valjana je za obje vrste." + }, + "options": { + "title": "Mogućnosti widgeta" + }, + "builder": { + "advancedManifest": "Napredni neobrađeni manifest", + "advancedJson": "Napredni JSON manifesta", + "manifestFilename": "widget.json", + "request": "Zahtjev {count, number}", + "requestId": "ID zahtjeva", + "type": "Vrsta klijenta za preuzimanje", + "method": "Metoda", + "source": "API izvor", + "run": "Pokreni", + "runLoad": "Pri učitavanju widgeta", + "runManual": "Iz SubFetcha", + "permission": "Dozvola", + "path": "Putanja", + "pathDescription": "Upotrijebite '{option:name}' za mogućnosti widgeta i '{param:name}' za vrijednosti poziva.", + "requestDetails": "Upit, tijelo i ponašanje", + "queryValues": "Vrijednosti upita", + "queryKey": "Ključ upita", + "queryKeyInvalid": "Upotrijebite jedinstveni ID koji počinje slovom i sadrži samo slova, brojke, - ili _.", + "valueSource": "Izvor vrijednosti", + "literal": "Doslovna vrijednost", + "widgetOption": "Mogućnost widgeta", + "invocationParameter": "Parametar poziva", + "option": "Mogućnost", + "parameterName": "Naziv parametra", + "value": "Vrijednost", + "removeQueryValue": "Ukloni vrijednost upita", + "addQueryValue": "Dodaj vrijednost upita", + "jsonBody": "JSON tijelo", + "jsonBodyDescription": "Neobavezno. Umetnite reference $option i $param na bilo kojoj dubini.", + "insertOptionReference": "Umetni referencu na mogućnost", + "insertParameterReference": "Umetni referencu na parametar", + "confirmation": "Poruka potvrde", + "invalidation": "Osvježi nakon uspjeha", + "invalidationDescription": "ID-ovi upita odvojeni zarezima", + "noAuth": "Pošalji bez provjere autentičnosti izvora", + "moveRequestUp": "Pomakni zahtjev gore", + "moveRequestDown": "Pomakni zahtjev dolje", + "removeRequest": "Ukloni zahtjev", + "addRequest": "Dodaj zahtjev", + "optionName": "Naziv mogućnosti", + "label": "Oznaka", + "control": "Kontrola", + "description": "Opis", + "default": "Zadano", + "optionDetails": "Ograničenja i dinamički izbori", + "minimum": "Minimum", + "maximum": "Maksimum", + "step": "Korak", + "choiceLabel": "Oznaka izbora", + "choiceValue": "Vrijednost izbora", + "newChoice": "Novi izbor", + "addChoice": "Dodaj izbor", + "removeChoice": "Ukloni izbor", + "choicesRequest": "Učitaj izbore iz zahtjeva", + "itemsPath": "Putanja stavki", + "itemsPathPlaceholder": "stavke (neobavezno)", + "valuePath": "Putanja vrijednosti", + "labelPath": "Putanja oznake", + "group": "Grupa", + "advancedOption": "Napredna mogućnost", + "moveOptionUp": "Pomakni mogućnost gore", + "moveOptionDown": "Pomakni mogućnost dolje", + "removeOption": "Ukloni mogućnost", + "addOption": "Dodaj mogućnost", + "invalidJson": "Nevažeći JSON", + "invalidWidget": "Nevažeći widget" + }, + "jsx": { + "title": "JSX predložak", + "label": "Predložak" + }, + "sources": { + "title": "API izvori i vjerodajnice", + "newName": "API {count, number}", + "duplicateSourceId": "ID-ovi API izvora moraju biti jedinstveni.", + "credentialRemoved": "Vjerodajnica uklonjena", + "credentialRemovedDescription": "Spremljena vrijednost je izbrisana.", + "primary": "Primarni API", + "id": "ID izvora", + "name": "Naziv posla", + "baseUrl": "Osnovni URL", + "baseUrlError": { + "invalid": "Unesite potpun URL.", + "protocol": "Upotrijebite HTTP ili HTTPS URL.", + "credentials": "Uklonite korisničko ime i lozinku iz ovog URL-a. Umjesto toga konfigurirajte vjerodajnice u nastavku.", + "queryOrFragment": "Uklonite upitni niz ili fragment iz ovog osnovnog URL-a. Dodajte vrijednosti upita imenovanom zahtjevu." + }, + "networkScope": "Mrežni pristup", + "authentication": "Provjera autentičnosti", + "headerName": "Naziv zaglavlja", + "queryParameter": "Parametar upita", + "configured": "Konfigurirano — unesite zamjenu", + "clear": "Vedro", + "remove": "Ukloni izvor i njegove zahtjeve", + "advanced": "Napredno", + "add": "Dodaj drugi API izvor", + "sourceType": "Integracija", + "manualSource": "HTTP API", + "existingIntegration": "Postojeća integracija", + "integrationType": "Vrsta integracije", + "selectIntegration": "Konfigurirana integracija", + "noIntegrations": "Nema dostupnih odgovarajućih integracija", + "integrationUnavailable": "Odabrana integracija više nije dostupna. Odaberite drugu integraciju.", + "integrationDescription": "Upotrebljava spremljeni URL i vjerodajnice integracije. Promjene se primjenjuju automatski. Za pokretanje zahtjeva potreban je potpuni pristup integraciji." + }, + "ai": { + "title": "Izradite ili popravite uz bilo koji AI", + "description": "Najprije dodajte URL dokumentacije API-ja ako ga imate. Za popravke po mogućnosti pokrenite pretpregled. Kopirajte upit u bilo koji AI; može zatražiti podatke koji nedostaju. Ovdje zalijepite njegov konačni JSON.", + "request": "Što bi ovaj widget trebao raditi?", + "documentationUrl": "URL dokumentacije API-ja (neobavezno)", + "paste": "Zalijepi", + "response": "Odgovor AI-ja", + "manualCopyDescription": "Pristup međuspremniku nije dostupan. Odaberite upit u nastavku i ručno ga kopirajte.", + "manualPasteDescription": "Pristup međuspremniku nije dostupan ili je potrebno ispraviti kopirani odgovor. Ovdje zalijepite JSON odgovor AI-ja.", + "selectAll": "Odaberi sve", + "loadResponse": "Učitaj odgovor", + "loaded": "Widget je učitan u uređivač", + "invalidResponse": "Međuspremnik ne sadrži valjani v2 widget", + "invalidResponseDetail": "Odgovor umjetne inteligencije nije valjan: {message}" + }, + "preview": { + "invalid": "Ispravite pogreške provjere valjanosti da biste pregledali ovaj widget.", + "fixtureError": "Pogreška testnih podataka pretpregleda", + "requestData": "Podaci zahtjeva", + "status": { + "idle": "Zahtjevi nisu testirani", + "loading": "Testiranje zahtjeva", + "success": "Svi zahtjevi učitavanja uspješno su završeni", + "error": "Jedan ili više zahtjeva učitavanja nije uspjelo" + }, + "result": { + "loading": { + "title": "Testiranje API zahtjeva", + "description": "Homarr izrađuje sesiju pretpregleda i učitava podatke widgeta." + }, + "success": { + "title": "Pretpregled je spreman", + "description": "{succeeded, plural, =0 {Ovaj widget nema zahtjeva učitavanja.} one {# zahtjev učitavanja uspješno je završen.} few {# zahtjeva učitavanja uspješno je završeno.} other {# zahtjeva učitavanja uspješno je završeno.}} Otvorite Podatke da biste pregledali odgovor." + }, + "error": { + "title": "Pretpregled je dovršen s pogreškama zahtjeva", + "description": "{succeeded, number} uspješno, {failed, number} neuspješno. Otvorite Podatke za detalje odgovora i pogrešaka." + } + }, + "instanceOptions": "Mogućnosti instance", + "liveActions": "Pokreni radnje prema konfiguriranom API-ju", + "liveActionsDescription": "Isključeno je sigurna simulacija. Uključivanje utječe na stvarnu uslugu.", + "noActions": "Nisu definirane radnje.", + "containedFailures": "Pogreške tijekom izvođenja zadržavaju se unutar ovog widgeta. Dnevnici zahtjeva nikad ne sadrže tajne vrijednosti.", + "validation": { + "title": "Provjera valjanosti", + "ready": "Definicija widgeta je valjana." + }, + "accessibility": { + "title": "Provjere pristupačnosti", + "ready": "Nisu otkriveni uobičajeni propusti pristupačnosti.", + "pending": "Provjere pristupačnosti pokrenut će se kada definicija widgeta bude valjana.", + "imageAlt": "Dodajte alt tekst svakoj slici; prazan alt upotrijebite samo za ukrasne slike.", + "actionIconLabel": "Dodajte aria-label ili title svakoj ActionIcon komponenti.", + "inputLabel": "Dodajte vidljivu oznaku ili pristupačni naziv svakom unosu." + }, + "journal": "Dnevnik zahtjeva s uklonjenim tajnim podacima", + "actionParameters": "Parametri radnje (JSON)", + "invalidParameters": "Upotrijebite deklarirane vrste parametara string, number i boolean.", + "runDestructive": "Pokreni destruktivnu radnju", + "runAction": "Pokreni radnju", + "deleteConfirmation": "Ova radnja pretpregleda mijenja udaljene podatke putem konfiguriranog API-ja.", + "simulated": "Radnja simulirana", + "httpStatus": "HTTP {status, number}", + "tab": { + "widget": "Widget", + "data": "Podaci", + "options": "Mogućnosti", + "state": "Stanje posla", + "actions": "Kontrole", + "diagnostics": "Dijagnostika" + }, + "size": { + "compact": "Kompaktno", + "standard": "Standardno", + "wide": "Široko" + }, + "fixture": { + "live": "Uživo", + "loading": "Učitavanje", + "empty": "Isprazni", + "error": "Pogreška" + } + } + }, + "preview": { + "request": { + "permission": { + "view": "Prikaz", + "modify": "Izmjena", + "full": "Potpuno" + } + } + }, + "notification": { + "created": "Widget \"{name}\" uspješno je izrađen.", + "updated": "Widget \"{name}\" uspješno je ažuriran.", + "deleted": "Widget \"{name}\" je izbrisan.", + "imported": "Widget je uspješno uvezen.", + "migrated": "Naslijeđeni widget uspješno je migriran. Postojeći smještaji na ploči sada upotrebljavaju definiciju v2.", + "migrationError": "Migracija naslijeđenog widgeta nije uspjela. Provjerite upotrebljava li datoteka shemu homarr-custom-widget-v2.", + "legacyDefinitionCopied": "Izvorni sadržaj widgeta kopiran je. Spremljene vrijednosti vjerodajnica nisu uključene.", + "legacyDefinitionCopyError": "Kopiranje izvornog sadržaja widgeta nije uspjelo.", + "migrationPromptCopied": "Kopiran je upit za migraciju s uklonjenim tajnim podacima. Zalijepite ga u LLM, kopirajte njegov jedini JSON odgovor, a zatim odaberite Ovdje zalijepi migrirani widget.", + "migrationPromptCopyError": "Kopiranje upita za migraciju nije uspjelo.", + "sourcesConfigured": "Izvori i vjerodajnice widgeta spremljeni su.", + "sourceConfigurationError": "Konfiguriranje izvora widgeta nije uspjelo.", + "aiPromptCopiedWithCount": "AI upit kopiran je u međuspremnik ({count, number} znakova).", + "aiPromptCopyError": "Kopiranje upita u međuspremnik nije uspjelo. Vaš preglednik možda ne podržava ovu značajku.", + "aiPromptSent": "Upit je poslan. Možete nastaviti uređivati dok pomoćnik radi u pozadini.", + "updateError": "Ažuriranje widgeta nije uspjelo. Promjene nisu spremljene.", + "importError": "Uvoz widgeta nije uspio. Provjerite je li datoteka valjani JSON izvoz prilagođenog widgeta.", + "exportError": "Izvoz widgeta nije uspio.", + "duplicated": "Widget \"{name}\" je dupliciran.", + "duplicateError": "Dupliciranje widgeta nije uspjelo.", + "toggleError": "Promjena statusa widgeta nije uspjela.", + "deleteError": "Brisanje widgeta nije uspjelo.", + "previewError": "Dohvaćanje pretpregleda nije uspjelo. Provjerite URL i pokušajte ponovno." + }, + "importReview": { + "title": "Pregled uvoza prilagođenog widgeta", + "description": "Prije uvoza provjerite s čime se ovaj widget povezuje i kakav pristup ploči zahtijevaju njegove kontrole.", + "migrationTitle": "Pregled migrirane zamjene v2", + "migrationDescription": "Pregledajte i potvrdite ovu generiranu definiciju v2. Potvrdom se atomski zamjenjuje sačuvani zapis v1, a postojeći smještaji na ploči ostaju povezani s istim ID-om widgeta.", + "fileLabel": "Odaberite JSON datoteku prilagođenog widgeta", + "name": "Naziv posla", + "origin": "Osnovno podrijetlo", + "authentication": "Provjera autentičnosti", + "networkScope": "Opseg mreže", + "methods": "HTTP metode", + "permissions": "Potrebne dozvole ploče", + "sourceSetup": { + "title": "Konfiguriraj API izvore", + "description": "Potvrdite s čime se ovaj widget povezuje i dodajte vjerodajnice. Privatni i loopback URL-ovi specifični su za vašu instalaciju Homarr-a.", + "suggestedUrl": "Predloženi URL", + "confirmUrl": "Potvrđujem da je ovaj URL poslužitelja ispravan za moju instalaciju Homarr-a", + "ready": "URL je spreman", + "needsUrl": "Potvrdi URL", + "credentialsMissing": "Vjerodajnice nedostaju", + "credentialsOptional": "Možete instalirati bez vjerodajnica i konfigurirati ih poslije, ali zahtjevi neće uspjeti dok ih ne dodate." + }, + "actionWarning": { + "title": "Ovaj widget može mijenjati udaljene podatke", + "description": "Nakon uvoza pregledajte svaku imenovanu radnju, naslijeđenu vjerodajnicu i destruktivnu potvrdu. Tajne nisu uključene u datoteku." + }, + "cancel": "Odustani od uvoza", + "confirm": "Uvezi widget", + "confirmMigration": "Potvrdi zamjenu v2" + }, + "secret": { + "apiKey": "API ključ ili token", + "username": "Korisničko ime", + "password": "Lozinka", + "savedPlaceholder": "••••••• (spremljeno, ostavite prazno za zadržavanje)" + } + }, + "workshop": { + "title": "Radionica", + "browseWorkshop": "Pregledaj radionicu", + "openCommunity": "Otvori radionicu", + "openOnWorkshop": "Otvori {title} na web-mjestu radionice", + "back": "Natrag na radionicu", + "search": "Pretraži widgete", + "searchCss": "Pretraži CSS teme", + "sort": "Razvrstaj", + "sortTop": "Najbolje ocijenjeno", + "sortNewest": "Najnovije", + "listAriaLabel": "Widgeti radionice", + "listAriaLabelCss": "CSS teme radionice", + "empty": "Nijedan widget ne odgovara ovoj pretrazi.", + "emptyDescription": "Widgeti zajednice objavljeni u radionici prikazuju se ovdje.", + "emptyFilteredTitle": "Nijedan widget ne odgovara ovoj pretrazi", + "emptyFilteredDescription": "Nijedan widget radionice ne odgovara izrazu „{search}”.", + "emptyCss": "Nijedna CSS tema ne odgovara ovoj pretrazi.", + "unavailableTitle": "Čini se da radionica Homarr nije dostupna", + "unavailable": "Usluga zajednice možda je privremeno nedostupna. Pokušajte ponovno za trenutak. To ne utječe na instalirane widgete.", + "loadError": "Ovaj unos nije moguće učitati.", + "noDescription": "Nema opisa", + "author": "autor: {name}", + "communityMember": "Član zajednice", + "outdated": "Zastarjelo", + "outdatedWarning": "Autor je ovaj unos označio kao zastarjeli. Pažljivo ga pregledajte prije uvoza.", + "score": "Rezultat: {count, number}", + "upvote": "Glasaj za", + "downvote": "Glasaj protiv", + "voteError": "Glas nije moguće spremiti.", + "signIn": "Prijava putem GitHuba", + "signInError": "Prijava putem GitHuba nije uspjela. Provjerite je li OAuth pružatelj radionice konfiguriran i jesu li skočni prozori dopušteni.", + "signOut": "Odjavi se", + "signInHint": "Prijavite se za glasanje ili prijavu. Za instalaciju nije potreban račun radionice.", + "securityNotice": "Widgeti radionice mogu pozivati svoje deklarirane API izvore i izvršavati deklarirane radnje s vjerodajnicama koje konfigurirate lokalno. Tajne se nikad ne uključuju.", + "securityNoticeCss": "CSS zajednice može promijeniti izgled i upotrebljivost ploče. Pregledajte ga prije uvoza; ništa se ne sprema dok ne spremite postavke ploče.", + "install": "Instaliraj", + "installReviewTitle": "Pregled prije instalacije", + "installError": "Ovaj widget nije moguće instalirati", + "installErrorDescription": "Unos radionice nije valjani Custom JSX v2 widget.", + "useCss": "Uvezi CSS", + "importCss": "Uvezi CSS iz radionice", + "importCssConfirm": "Zamijeniti trenutni prilagođeni CSS s „{title}”? Ništa se ne sprema dok ne spremite postavke ploče.", + "screenshotAlt": "Snimka zaslona {title}, {count, number}", + "screenshotViewer": "Preglednik snimki zaslona za {title}", + "screenshotsLabel": "Snimke zaslona za {title}", + "zoomScreenshot": "Prikaži punu veličinu", + "previousScreenshot": "Prethodna snimka zaslona", + "nextScreenshot": "Sljedeća snimka zaslona", + "showScreenshotThumbnails": "Prikaži minijature snimki zaslona", + "hideScreenshotThumbnails": "Sakrij minijature snimki zaslona", + "closeScreenshotViewer": "Zatvori preglednik snimki zaslona", + "technicalDetails": "Tehnički detalji", + "sourceCode": "Unos radionice", + "export": "Izvezi", + "report": "Prijavi", + "reportTitle": "Prijavi unos", + "reportReason": "Razlog", + "reportExplanation": "Što bi moderatori radionice trebali znati?", + "reportSend": "Pošalji prijavu", + "reportSent": "Prijava poslana", + "reportSentDescription": "Moderatori radionice sada mogu pregledati ovaj unos.", + "reportCount": "{count, plural, one {# prijava} few {# prijave} other {# prijava}}", + "reportWarning": "{count, plural, one {Ovaj unos ima # otvorenu prijavu zajednice.} few {Ovaj unos ima # otvorene prijave zajednice.} other {Ovaj unos ima # otvorenih prijava zajednice.}} I dalje ga je moguće instalirati, ali najprije biste trebali pregledati njegov sadržaj.", + "reportVisibility": "Detalji prijave vidljivi su samo autoru ovog unosa i administratorima radionice.", + "reportCategory": { + "outdated": "Zastarjelo ili više ne radi", + "malicious": "Zlonamjerno", + "spam": "Neželjeni sadržaj", + "copyright": "Autorska prava", + "inappropriate": "Neprimjereno", + "other": "Ostalo" + }, + "publish": { + "title": "Objavi u radionici", + "introTitle": "Podijeli ovaj widget sa zajednicom", + "introDescription": "Homarr izvozi kopiju trenutačnog widgeta bez vjerodajnica. Dodajte jasne detalje unosa kako bi korisnici znali čemu služi prije instalacije.", + "listingDetails": "Unos radionice", + "listingDetailsDescription": "Ovi se detalji javno prikazuju uz izvezenu definiciju widgeta.", + "success": "Objavljeno odmah. Članovi zajednice sada mogu instalirati i prijaviti ovaj widget.", + "successTitle": "Vaš widget je aktivan", + "manageDescription": "Otvorite unos da biste ažurirali njegove podatke, pregledali prijave, označili ga kao zastarjeli ili ga izbrisali. Upravljanje unosom obavlja se izravno na web-mjestu radionice.", + "viewSubmission": "Prikaži i upravljaj unosom", + "done": "Gotovo", + "signInHint": "Prijavite se za objavu pod svojim identitetom radionice.", + "titleField": "Naslov", + "descriptionField": "Opis", + "screenshots": "Snimke zaslona", + "screenshotsDescription": "Do pet PNG, JPEG ili WebP slika", + "screenshotsPlaceholder": "Odaberite snimke zaslona", + "invalidScreenshot": "Upotrebljavajte PNG, JPEG ili WebP slike veličine najviše {maxSize} svaka.", + "privateSourceWarning": "Ovaj widget sadržava privatne izvorne URL-ove za: {sources}. Prije objavljivanja zamijenite osobne hostove ili IP adrese sigurnim rezerviranim mjestima usluga.", + "reviewSourcesTitle": "Pregledaj privatne URL-ove izvora", + "privateSourceConfirmation": "Pregledao/la sam ove URL-ove izvora i oni ne otkrivaju detalje privatne infrastrukture", + "action": "Objavi sada", + "publicationNote": "Objava je trenutačna. Nakon toga možete upravljati unosom u radionici.", + "definitionChanged": "Widget se promijenio tijekom pripreme objave. Ponovno pregledajte njegove privatne URL-ove izvora i pokušajte ponovno.", + "error": "Objava nije uspjela" } }, "integration": { + "completion": { + "modalTitle": "Usluga je spremna", + "title": "{name} je povezan", + "description": "Veza je prošla test. Odaberite što će se sljedeće prikazati na ovoj ploči.", + "connectionReady": "Veza s uslugom je spremna", + "appReady": "Prečac aplikacije je spreman", + "compatibleWidgets": "{count, plural, =0 {Nema kompatibilnih widgeta} one {# kompatibilni widget} few {# kompatibilna widgeta} other {# kompatibilnih widgeta}} dostupno", + "chooseWidget": "Odaberi widget", + "recipes": { + "title": "Preporučeno za ovu ploču", + "description": "Na temelju povezanih usluga i widgeta koji se već nalaze na ovoj ploči.", + "newConnectionReason": "Sada dostupno putem {integration}", + "existingConnectionReason": "Radi s uslugom koju ste već povezali", + "dismiss": "Odbaci preporuke za ovu uslugu na ovoj ploči" + } + }, "page": { "list": { - "title": "Integracije", + "ariaLabel": "Konfigurirane integracije", "search": "Pretraži integracije", + "scopedNote": "Prikazuju se samo integracije kojima smijete upravljati.", "noResults": { - "title": "Još nema integracija" + "title": "Još nema integracija", + "description": "Povežite uslugu da biste upotrebljavali njezine podatke i radnje u Homarr widgetima.", + "action": "Izradite prvu integraciju", + "filteredTitle": "Nijedna integracija ne odgovara vašoj pretrazi", + "filteredDescription": "Nijedna integracija ne odgovara izrazu „{search}”. Pokušajte s drugim nazivom, vrstom ili URL-om.", + "createOnlyTitle": "Možete samo dodavati integracije", + "createOnlyDescription": "Vaše vam dozvole omogućuju izradu integracija, ali ne i upravljanje postojećima. Zatražite od administratora pristup onima koje trebate." } }, "create": { "title": "Nova {name} integracija", "notification": { "success": { - "title": "Kreiranje uspješno", "message": "Integracija je uspješno kreirana" }, "error": { - "title": "Kreiranje nije uspjelo", "message": "Integraciju nije moguće kreirati" } }, @@ -729,11 +1339,9 @@ "title": "Uredi {name} integraciju", "notification": { "success": { - "title": "Promjene uspješno primijenjene", "message": "Integracija je uspješno spremljena" }, "error": { - "title": "Nije moguće primijeniti promjene", "message": "Integraciju nije moguće spremiti" } }, @@ -750,23 +1358,15 @@ "message": "Jeste li sigurni da želite izbrisati integraciju {name}?", "notification": { "success": { - "title": "Brisanje uspješno", "message": "Integracija je uspješno izbrisana" }, "error": { - "title": "Brisanje nije uspjelo", "message": "Nije moguće izbrisati integraciju" } } } }, "field": { - "name": { - "label": "Naziv" - }, - "url": { - "label": "URL" - }, "attemptSearchEngineCreation": { "label": "Stvori tražilicu", "description": "Integracija \"{kind}\" može se koristiti s tražilicama. Označite ovo za automatsku konfiguraciju tražilice." @@ -778,6 +1378,10 @@ "label": "Stvori aplikaciju", "description": "Stvorite aplikaciju s istim nazivom i ikonom kao integracija. Ostavite polje u nastavku praznim da biste aplikaciju stvorili s URL-om integracije." }, + "linkApp": { + "label": "Poveži postojeću aplikaciju", + "description": "Povežite ovu integraciju s aplikacijom koju već možete upotrebljavati." + }, "appHref": { "placeholder": "Prilagođeni URL" }, @@ -791,7 +1395,11 @@ "grid": { "widgetCount": "{count} widgeta", "noWidgets": "Nema widgeta", - "detected": "Otkriveno putem Dockera" + "detected": "Otkriveno putem Dockera", + "connected": "{count, plural, one {# povezana} few {# povezane} other {# povezanih}}", + "tiedWidgets": "Povezani widgeti", + "more": "+{count} više", + "loadError": "Integracije nije moguće učitati. Pokušajte ponovno prije stvaranja nove veze." }, "category": { "dnsHole": "DNS", @@ -822,7 +1430,10 @@ "analytics": "Analitika", "vpn": "VPN", "mediaLibrary": "Medijska biblioteka", - "uptimeMonitoring": "Nadzor dostupnosti" + "uptimeMonitoring": "Nadzor dostupnosti", + "beszel": "Beszel", + "systemMonitoring": "Nadzor sustava", + "security": "Sigurnost" }, "testConnection": { "action": { @@ -1107,6 +1718,22 @@ "slug": { "label": "Slug stranice statusa", "newLabel": "Novi slug stranice statusa" + }, + "wazuhIndexerUrl": { + "label": "URL indeksatora", + "newLabel": "Novi URL indeksatora" + }, + "wazuhIndexerUsername": { + "label": "Korisničko ime indeksatora", + "newLabel": "Novo korisničko ime indeksatora" + }, + "wazuhIndexerPassword": { + "label": "Lozinka indeksatora", + "newLabel": "Nova lozinka indeksatora" + }, + "wazuhDashboardUrl": { + "label": "URL nadzorne ploče (neobavezno)", + "newLabel": "Novi URL nadzorne ploče" } } }, @@ -1115,54 +1742,19 @@ "interact": "Interakcija s integracijama", "full": "Potpuni pristup integracijama" }, - "audiobookshelf": { - "name": "Audiobookshelf", - "description": "Samostalno hostirani poslužitelj audioknjiga i podcasta" - }, - "navidrome": { - "name": "Navidrome", - "description": "Samostalno hostirani poslužitelj za streaming glazbe s kompatibilnošću sa Subsonic API-jem" - }, - "uptimeKuma": { - "name": "Uptime Kuma", - "description": "Samostalno hostirani nadzor dostupnosti s javnim stranicama statusa", - "secret": { - "slug": { - "description": "Slug vaše javne stranice statusa. Ako nije postavljen, zadana je vrijednost \"default\"." - }, - "apiKey": { - "description": "Neobavezni API ključ za autentificirani pristup /metrics ruti" - } - } - }, - "traefik": { - "name": "Traefik", - "description": "Obrnuti proxy i raspodjelnik opterećenja izvorno za oblak" - }, - "paperlessNgx": { - "name": "Paperless-ngx", - "description": "Sustav za upravljanje dokumentima za arhiviranje i organiziranje skeniranih dokumenata" - }, - "patchmon": { - "name": "PatchMon", - "description": "Upravljanje zakrpama i nadzor Linux računala" - }, - "bazarr": { - "name": "Bazarr", - "description": "Prateća aplikacija za Sonarr i Radarr koja upravlja titlovima i preuzima ih" - }, - "wud": { - "name": "What's Up Docker", - "description": "Pratite koji od vaših Docker kontejnera imaju dostupna ažuriranja slika" + "llamacpp": { + "name": "llama.cpp", + "description": "Nadzirite lokalni llama.cpp llama-server: stanje, model i metrike generiranja" } }, "media": { "plural": "Mediji", "search": "Pronađi medij", "field": { - "name": "Naziv", + "preview": "Pretpregled", "size": "Veličina", - "creator": "Stvoritelj" + "creator": "Stvoritelj", + "actions": "Kontrole" }, "action": { "upload": { @@ -1190,10 +1782,12 @@ } }, "copy": { - "label": "Kopiraj URL" + "label": "Kopiraj URL", + "labelNamed": "Kopiraj URL za {name}" }, "open": { - "label": "Otvori medije" + "label": "Otvori medije", + "labelNamed": "Otvori {name}" } }, "noResults": { @@ -1208,7 +1802,6 @@ "add": "Dodaj", "apply": "Primijeni", "backToOverview": "Natrag na pregled", - "skip": "Preskoči", "change": "Promijeni", "create": "Stvoriti", "createAnother": "Stvori i počni ispočetka", @@ -1231,16 +1824,31 @@ "tryAgain": "Pokušaj ponovno", "loading": "Učitavanje", "show": "Prikaži", - "hide": "Sakrij" + "hide": "Sakrij", + "undo": "Poništi", + "editNamed": "Uredi {name}", + "deleteNamed": "Izbriši {name}", + "clearSearch": "Izbriši pretragu", + "copy": "Kopiraj", + "copied": "Kopirano", + "refresh": "Osvježi" + }, + "pagination": { + "pageOf": "Stranica {page} od {totalPages}" }, "here": "ovdje", + "serviceUrlTemplate": { + "serverTitle": "Uobičajena adresa poslužitelja", + "urlModeLabel": "Uzorak adrese usluge", + "hostPort": "Isti host, različiti portovi", + "subdomain": "Jedna poddomena po usluzi", + "path": "Jedna putanja po usluzi" + }, "iconPicker": { "label": "URL ikone", + "description": "Pretražite biblioteku, zalijepite URL slike ili prenesite datoteku.", "header": "Upišite naziv ili objekte za filtriranje ikona... Homarr će pretražiti {countIcons} ikona za vas", "headerLoading": "Pretražite slike po nazivu", - "noResults": "Nijedna ikona ne odgovara izrazu \"{search}\".", - "error": "Učitavanje ikona nije uspjelo.", - "description": "Pretražite biblioteku, zalijepite URL slike ili prenesite datoteku.", "clear": "Očisti sliku", "uploadImage": "Prenesi sliku", "results": "Rezultati pretraživanja slika", @@ -1249,7 +1857,9 @@ "otherImages": "Ostale slike", "urlLoading": "Provjera slike…", "urlReady": "Slika je spremna za upotrebu", - "urlError": "Ova se slika nije mogla učitati. Provjerite URL i pokušajte ponovno." + "urlError": "Ova se slika nije mogla učitati. Provjerite URL i pokušajte ponovno.", + "noResults": "Nijedna ikona ne odgovara izrazu \"{search}\".", + "error": "Učitavanje ikona nije uspjelo." }, "colorScheme": { "options": { @@ -1261,7 +1871,6 @@ "information": { "min": "Min", "max": "Maks", - "days": "Dani", "hours": "Sati", "minutes": "Minute" }, @@ -1298,16 +1907,16 @@ }, "userAvatar": { "menu": { - "switchToDarkMode": "Prebaci na tamni način", - "switchToLightMode": "Prebaci na svijetli način", + "open": "Otvori izbornik korisničkog avatara", "management": "Upravljanje", - "docker": "Docker", "preferences": "Vaše preferencije", "logout": "Odjava", "login": "Prijaviti se", "homeBoard": "Vaša početna ploča", - "loggedOut": "Odjavljeni", - "updateAvailable": "Dostupna ažuriranja: {tag} ({countUpdates})" + "updateAvailable": "Dostupna ažuriranja: {tag} ({countUpdates})", + "assistant": "Pomoćnik", + "assistantThinking": "Razmišljanje", + "modifier": "Izmjena" } }, "dangerZone": "Opasna zona", @@ -1355,13 +1964,66 @@ "kilometersPerHour": "km/h", "milesPerHour": "mph" } + }, + "widgetQuery": { + "loading": "Učitavanje podataka widgeta" + }, + "total": "Ukupno", + "filesystemUsage": "{count, plural, one {Prikaži upotrebu za # datotečni sustav} few {Prikaži upotrebu za # datotečna sustava} other {Prikaži upotrebu za # datotečnih sustava}}", + "field": { + "name": "Naziv posla" + }, + "label": { + "new": "Novo" + }, + "entity": { + "apps": "aplikacije", + "boards": "Daske", + "certificates": "Certifikati", + "customWidgets": "Prilagođeni widgeti", + "groups": "Grupe", + "integrations": "Integracije", + "invites": "poziva", + "logs": "Zapisi", + "media": "Mediji", + "searchEngines": "Tražilice", + "tasks": "Zadaci", + "users": "Korisnici" } }, "section": { - "dynamic": { + "option": { + "showLabel": { + "label": "Prikaži oznaku", + "description": "Prikaži oznaku spremnika iznad njegova sadržaja." + }, + "collapsible": { + "label": "Dopusti sažimanje", + "description": "Omogućite gledateljima proširivanje i sažimanje ovog spremnika." + }, + "showOpenAll": { + "label": "Prikaži radnju za otvaranje svega", + "description": "Prikaži radnju koja otvara svaku aplikaciju u ovom spremniku u novim karticama." + }, + "scrollable": { + "label": "Pomicanje", + "description": "Zadrži ovaj spremnik na postavljenoj veličini i pomiči njegov sadržaj umjesto da ga povećavaš kako bi mu odgovarao." + } + }, + "action": { + "openAllInNewTabsFor": "Otvori sve aplikacije u odjeljku {name} na karticama" + }, + "openAllInNewTabs": { + "title": "Otvori sve u karticama", + "text": "Neki preglednici mogu iz sigurnosnih razloga blokirati masovno otvaranje kartica. Homarr nije mogao otvoriti sve prozore jer je preglednik blokirao ovu radnju. Dopustite opciju „Otvori skočne prozore” i pokušajte ponovno." + }, + "container": { + "untitled": "Spremnik bez naslova", "action": { - "create": "Nova dinamička sekcija", - "remove": "Ukloni dinamičku sekciju" + "create": "Novi spremnik", + "remove": "Ukloni spremnik", + "expand": "Proširi", + "collapse": "Sažmi" }, "option": { "title": { @@ -1375,55 +2037,12 @@ } }, "remove": { - "title": "Ukloni dinamičku sekciju", - "message": "Jeste li sigurni da želite ukloniti ovu dinamičku sekciju? Stavke će biti premještene na isto mjesto u nadređenoj sekciji." - } - }, - "category": { - "field": { - "name": { - "label": "Naziv" - } - }, - "action": { - "create": "Nova kategorija", - "edit": "Preimenuj kategoriju", - "remove": "Ukloni kategoriju", - "moveUp": "Pomakni se gore", - "moveDown": "Pomicati prema dolje", - "createAbove": "Nova kategorija iznad", - "createBelow": "Nova kategorija ispod", - "openAllInNewTabs": "Otvori sve u karticama" - }, - "create": { - "title": "Nova kategorija", - "submit": "Dodaj kategoriju" - }, - "remove": { - "title": "Ukloni kategoriju", - "message": "Jeste li sigurni da želite ukloniti kategoriju {name}?" - }, - "edit": { - "title": "Preimenuj kategoriju", - "submit": "Preimenuj kategoriju" - }, - "menu": { - "label": { - "create": "Nova kategorija", - "changePosition": "Promijenjen položaj", - "settings": "Postavke" - } - }, - "openAllInNewTabs": { - "title": "Otvori sve u karticama", - "text": "Neki preglednici mogu blokirati skupno otvaranje kartica iz sigurnosnih razloga. Homarr nije uspio otvoriti sve prozore jer je preglednik blokirao tu radnju. Dopustite \"Otvaranje skočnih prozora\" i pokušajte ponovno." + "message": "Ukloniti ovaj spremnik? Njegov sadržaj premjestit će se u okolno područje." } } }, "item": { "action": { - "create": "Nova stavka", - "import": "Uvezi stavku", "edit": "Uredi stavku", "moveResize": "Premjesti / promijeni veličinu stavke", "duplicate": "Dupliciraj stavku", @@ -1432,7 +2051,7 @@ "menu": { "label": { "settings": "Postavke", - "refresh": "Osvježi", + "settingsFor": "Postavke za {name}", "options": "Opcije", "actions": "Radnje" }, @@ -1441,21 +2060,96 @@ "error": "Pogreška", "loading": "Učitavanje", "idle": "Neaktivno" + }, + "notification": { + "saveError": { + "title": "Widget nije moguće spremiti", + "message": "Promjene widgeta vraćene su na prethodno stanje" + } } }, "create": { "title": "Odaberite stavku za dodavanje", "search": "Filtriraj stavke", - "addToBoard": "Dodaj na ploču" + "addToBoard": "Dodaj na ploču", + "addAtPosition": "Dodaj stavku ovdje", + "destination": { + "label": "Dodaj u", + "description": "Odaberite gdje bi se widget trebao pojaviti. I dalje ga možete premjestiti poslije.", + "mainCanvas": "Glavno platno", + "leftRail": "Lijeva traka", + "rightRail": "Desna traka" + }, + "connectionStatus": { + "ready": "Spremno", + "needsSetup": "Potrebno postavljanje", + "noConnectionRequired": "Veza nije potrebna" + }, + "customWidget": "Prilagođeni widget", + "standalone": "Samostalan", + "missingIntegration": { + "title": "Najprije povežite uslugu", + "noPermission": "Ovaj widget zahtijeva kompatibilnu vezu s uslugom. Zatražite od administratora da je poveže, a zatim pokušajte ponovno." + }, + "notification": { + "success": { + "title": "Widget je dodan", + "message": "{name} je dodan na ovu ploču.", + "relocatedMessage": "{name} je dodan u {destination} jer odabrano odredište nije bilo dostupno." + }, + "error": { + "title": "Stavku nije moguće dodati", + "message": "Stavku nije moguće dodati na ovu ploču" + } + } + }, + "selection": { + "summary": "{count, plural, one {# odabrana stavka} few {# odabrane stavke} other {# odabranih stavki}}", + "selected": "{count, plural, one {# odabrano} few {# odabrane} other {# odabranih}}", + "copy": "Kopiraj", + "copied": "{count, plural, one {# stavka kopirana je u međuspremnik} few {# stavke kopirane su u međuspremnik} other {# stavki kopirano je u međuspremnik}}", + "copyError": "Odabrane stavke nije moguće kopirati. Vaš preglednik možda ne dopušta pristup međuspremniku.", + "paste": "Zalijepi", + "pasteShortcut": "Zalijepite kopirane stavke ovdje (Ctrl / ⌘ + V)", + "pasted": "{count, plural, one {# stavka zalijepljena} few {# stavke zalijepljene} other {# stavki zalijepljeno}}", + "pasteError": "Međuspremnik nije moguće pročitati. Vaš preglednik možda ne dopušta pristup međuspremniku.", + "pasteInvalid": "Međuspremnik ne sadrži valjane stavke Homarr ploče.", + "pasteUnavailable": "Kopirane stavke ne mogu stati na ovu ploču.", + "removed": "{count, plural, one {# stavka uklonjena} few {# stavke uklonjene} other {# stavki uklonjeno}}", + "move": "Premjesti", + "moveTo": "Premjesti odabrane stavke", + "delete": "Obriši", + "clear": "Izbriši odabir", + "clearShortcut": "Izbriši odabir (Escape)", + "saveErrorTitle": "Stavke nije moguće ažurirati", + "saveErrorMessage": "Promjene nije moguće spremiti. Ploča je osvježena.", + "moveUnavailableTitle": "Odabrane stavke nije moguće premjestiti", + "moveUnavailableMessage": "Odredište nema dovoljno prostora za cijeli odabir." }, "moveResize": { "title": "Premjesti / promijeni veličinu stavke", + "entryLabel": "{name}, stupac {column}, redak {row}", + "target": { + "numbered": "{name}, odredište {index}", + "located": "{name}, {location}, odredište {index}" + }, + "keyboard": { + "instructions": "Pritisnite Enter ili razmaknicu za početak uređivanja tipkovnicom. Upotrijebite tipke sa strelicama za pomicanje, Shift sa strelicama za promjenu veličine, a Escape za prekid.", + "started": "Uređivanje tipkovnicom započeto. Upotrijebite tipke sa strelicama za pomicanje, Shift sa strelicama za promjenu veličine, a Escape za prekid.", + "stopped": "Uređivanje tipkovnicom zaustavljeno.", + "boundary": "Ta promjena ne stane u ovaj odjeljak." + }, "field": { + "section": { + "label": "Odjeljak ili traka" + }, "width": { - "label": "Širina" + "label": "Širina", + "shortLabel": "Š" }, "height": { - "label": "Visina" + "label": "Visina", + "shortLabel": "V" }, "xOffset": { "label": "X pomak" @@ -1469,18 +2163,36 @@ "title": "Uredi stavku", "tab": { "widget": "Uredi widget", - "app": "Uredi aplikaciju" + "app": "Uredi aplikaciju", + "integration": "Uredi integraciju" }, "app": { "propagationNotice": "Promjene ove aplikacije primijenit će se svugdje gdje se koristi na svim pločama." }, + "integration": { + "action": "Uredi vezu", + "description": "Testirajte ili popravite odabranu vezu bez napuštanja ovog widgeta.", + "editLabel": "Uredi integraciju {name}", + "fullAccessRequired": "Potreban je potpuni pristup", + "propagationNotice": "Promjene ove integracije primjenjuju se svugdje gdje se ona upotrebljava. Veza se testira prije spremanja.", + "loading": "Učitavanje integracije", + "loadError": "Ovu integraciju nije moguće učitati. Pokušajte ponovno prije promjene njezinih postavki veze." + }, + "preview": { + "integrationRequired": "Odaberite vezu za pretpregled ovog widgeta.", + "size": "Veličina datoteke" + }, + "settings": { + "label": "Postavke widgeta" + }, "advancedOptions": { "label": "Napredne opcije", "title": "Napredne opcije stavke" }, "field": { "integrations": { - "label": "Integracije" + "label": "Integracije", + "removeLabel": "Ukloni integraciju {name}" }, "title": { "label": "Naslov" @@ -1494,17 +2206,18 @@ } }, "remove": { - "title": "Ukloni stavku", "message": "Jeste li sigurni da želite ukloniti ovu stavku?" + }, + "advancedFocus": { + "open": "Otvori napredni prikaz", + "close": "Zatvori napredni prikaz", + "label": "Napredni prikaz widgeta {widget}" } }, "widget": { "integrationSelect": { "configureIntegrationFirst": "Najprije povežite integraciju", - "loading": "Učitavanje...", - "placeholder": "Odaberite opciju", - "noResults": "Nije pronađen nijedan rezultat", - "loadError": "Učitavanje opcija nije uspjelo" + "placeholder": "Odaberite opciju" }, "app": { "name": "Aplikacija", @@ -1513,9 +2226,6 @@ "appId": { "label": "Odaberi aplikaciju" }, - "openInNewTab": { - "label": "Otvori u novoj kartici" - }, "showTitle": { "label": "Prikaži naziv aplikacije" }, @@ -1523,11 +2233,8 @@ "label": "Omogući provjeru stanja" }, "layout": { - "label": "Raspored", "option": { - "row": "Vodoravno", "row-reverse": "Vodoravno (obrnuto)", - "column": "Okomito", "column-reverse": "Okomito (obrnuto)" } }, @@ -1552,23 +2259,60 @@ "name": "Oznake", "description": "Prikazuje više poveznica aplikacija", "option": { - "title": { - "label": "Naslov" + "showTitle": { + "label": "Prikaži naslov widgeta" + }, + "titleSize": { + "label": "Veličina naslova widgeta (px)" }, "layout": { "label": "Raspored", "option": { - "row": { - "label": "Horizontalno" - }, - "column": { - "label": "Okomito" - }, - "grid": { - "label": "Mreža" + "adaptive": { + "label": "Prilagodljivo" }, "gridHorizontal": { "label": "Vodoravna mreža" + }, + "icons": { + "label": "Ikone" + } + } + }, + "variant": { + "label": "Izgled", + "option": { + "soft": { + "label": "Blago" + }, + "filled": { + "label": "Ispunjeno" + }, + "outline": { + "label": "Obris" + }, + "plain": { + "label": "Obično" + } + } + }, + "spacing": { + "label": "Razmak kartica", + "option": { + "xs": { + "label": "Vrlo malo" + }, + "sm": { + "label": "Mali" + }, + "md": { + "label": "Srednji" + }, + "lg": { + "label": "velika" + }, + "xl": { + "label": "Vrlo veliko" } } }, @@ -1581,17 +2325,28 @@ "hideHostname": { "label": "Sakrij nazive hostova" }, - "openNewTab": { - "label": "Otvori u novoj kartici" - }, "withBorder": { "label": "Prikaži obrub" }, + "grow": { + "label": "Proširi kartice da ispune redak" + }, + "customUrls": { + "label": "Prilagođene poveznice" + }, "items": { "label": "Oznake", - "add": "Dodaj oznaku" + "remove": "Ukloni oznaku", + "apps": { + "label": "Dodaj oznake", + "description": "Zalijepite URL-ove ili pronađite postojeće aplikacije. Povucite oznake u nastavku da biste ih promijenili redoslijed.", + "placeholder": "Zalijepi URL-ove ili pretraži aplikacije", + "addUrl": "Dodaj ovaj URL", + "hint": "Pritisnite Enter za dodavanje URL-a. Zalijepite URL-ove odvojene zarezima ili URL-ove u zasebnim recima da biste dodali više njih." + } } - } + }, + "empty": "Dodajte URL ili aplikaciju u postavkama widgeta" }, "archiveTeamWarrior": { "name": "ArchiveTeam Warrior", @@ -1600,33 +2355,61 @@ "showBroadcastMessage": { "label": "Prikaži emitirane poruke" } + }, + "noProjectSelected": "Nijedan projekt nije odabran", + "runnerStatus": "Izvršitelj: {status}", + "projectId": "Projekt: {id}", + "sessionReceived": "Sesija primljena: {value}", + "sessionSent": "Sesija poslana: {value}", + "sessionId": "Sesija: {id}", + "startedAt": "Pokrenuto {date}", + "emptyItems": "U ovoj snimci nema aktivnih ni nedavnih poslova", + "metric": { + "running": "U radu", + "completed": "Gotovo", + "failed": "Neuspjelo", + "canceled": "Otkazano", + "download": "Preuzimanje", + "upload": "Slanje" + }, + "status": { + "running": "U radu", + "completed": "Završeno", + "failed": "Neuspjelo", + "canceled": "Otkazano", + "stopped": "Zaustavljeno", + "idle": "Neaktivno", + "unknown": "Nepoznato" + } + }, + "wud": { + "name": "What's Up Docker", + "description": "Prikaži koliko praćenih kontejnera ima dostupna ažuriranja.", + "title": "What's Up Docker", + "monitored": "Praćeno", + "updatesAvailable": "{count, plural, one {# dostupno ažuriranje} few {# dostupna ažuriranja} other {# dostupnih ažuriranja}}", + "updateAvailable": "Dostupno ažuriranje", + "openReleaseNotes": "Otvori bilješke o izdanju", + "option": { + "showRing": { + "label": "Prikaži prsten ažuriranja" + }, + "showUpdateList": { + "label": "Prikaži popis ažuriranja kontejnera", + "description": "Nabraja svaki nadzirani kontejner za koji je dostupno ažuriranje slike" + } } }, "dnsHoleSummary": { "name": "Sažetak DNS rupe", "description": "Prikazuje sažetak vaše DNS rupe", "option": { - "layout": { - "label": "Raspored", - "option": { - "row": { - "label": "Horizontalno" - }, - "column": { - "label": "Okomito" - }, - "grid": { - "label": "Mreža" - } - } - }, "usePiHoleColors": { "label": "Koristi Pi-Hole boje" } }, "error": { - "internalServerError": "Neuspješno dohvaćanje sažetka DNS rupe", - "integrationsDisconnected": "Nema dostupnih podataka, sve integracije su isključene" + "internalServerError": "Neuspješno dohvaćanje sažetka DNS rupe" }, "data": { "adsBlockedToday": "Blokirano danas", @@ -1634,32 +2417,24 @@ "dnsQueriesToday": "Upiti danas", "domainsBeingBlocked": "Domene na popisu za blokiranje" }, - "domainsTooltip": "Zbog više integracija Homarr ne može izračunati točan broj blokiranih domena" + "domainsTooltip": "Zbog više integracija Homarr ne može izračunati točan broj blokiranih domena", + "status": { + "enabled": "Omogućeno", + "disabled": "Onemogućeno", + "unknown": "Nepoznato" + } }, "dnsHoleControls": { "name": "Kontrole DNS rupe", "description": "Upravljajte PiHole ili AdGuard iz svoje nadzorne ploče", "option": { - "layout": { - "label": "Raspored", - "option": { - "row": { - "label": "Horizontalno" - }, - "column": { - "label": "Okomito" - }, - "grid": { - "label": "Mreža" - } - } - }, "showToggleAllButtons": { "label": "Prikaži gumbe za uključivanje/isključivanje svih" } }, "error": { - "internalServerError": "Neuspješno upravljanje DNS rupom" + "internalServerError": "Neuspješno upravljanje DNS rupom", + "bulkActionsFailed": "{count, plural, one {# radnja nije uspjela} few {# radnje nisu uspjele} other {# radnji nije uspjelo}}" }, "controls": { "enableAll": "Omogući sve", @@ -1670,8 +2445,6 @@ "disabled": "Onemogućeno", "processing": "Obrada", "disconnected": "Prekinuta veza", - "hours": "Sati", - "minutes": "Minute", "unlimited": "Ostavite prazno za neograničeno" } }, @@ -1683,16 +2456,10 @@ "label": "Prilagođeni prikaz naslova/grada", "description": "Prikažite prilagođeni naslov ili naziv grada/države na vrhu sata." }, - "customTitle": { - "label": "Naslov" - }, "is24HourFormat": { "label": "24-satni format", "description": "Koristite 24-satni format umjesto 12-satnog formata" }, - "showSeconds": { - "label": "Prikaži sekunde" - }, "useCustomTimezone": { "label": "Koristi fiksnu vremensku zonu" }, @@ -1711,29 +2478,295 @@ "label": "Prilagođeni format vremena", "description": "Koristi ISO 8601 za oblikovanje vremena (time će se nadjačati ostale mogućnosti)" }, - "customDateFormat": { - "label": "Prilagođeni format datuma", - "description": "Koristi ISO 8601 za oblikovanje datuma (time će se nadjačati ostale mogućnosti)" - }, "showWeather": { "label": "Prikaži vremensku prognozu", "description": "Prikaži malu animiranu ikonu vremena i temperaturu u kutu kartice" }, - "weatherLocation": { - "label": "Lokacija vremenske prognoze" - }, "isWeatherFormatFahrenheit": { "label": "Upotrijebi Fahrenheit" + }, + "animateWeatherIcon": { + "label": "Animiraj vremensku ikonu", + "description": "Animira vremensku ikonu. Prema zadanim je postavkama onemogućeno i uvijek je onemogućeno kada se zatraži smanjeno kretanje." + }, + "colorWeatherByDayNight": { + "label": "Oboji vremensku ikonu prema danu/noći", + "description": "Oboji vremensku ikonu i temperaturu bojom dana ili bojom noći, ovisno o tome je li na odabranoj lokaciji trenutačno dan ili noć." + }, + "dayWeatherColor": { + "label": "Boja dana" + }, + "nightWeatherColor": { + "label": "Boja noći" + }, + "worldClockCities": { + "label": "Gradovi svjetskog sata", + "description": "Dodaj i poredaj do šest gradova za napredni prikaz." } + }, + "timezoneList": { + "timezone": "Vremenska zona", + "cityLabel": "Oznaka grada", + "searchPlaceholder": "Pretraži vremenske zone", + "noResults": "Nisu pronađene vremenske zone", + "unsupportedOption": "Nije podržano: {timeZone}", + "add": "Dodaj grad", + "remove": "Ukloni {city}", + "reorder": "Promijeni redoslijed za {city}", + "limit": "Konfigurirano gradova: {count} od {maximum}" + }, + "worldClock": { + "primary": "Primarni sat", + "local": "Lokalno vrijeme", + "today": "Danas", + "tomorrow": "Sutra", + "yesterday": "Jučer", + "noSecondaryCities": "Dodaj gradove u opcijama widgeta kako bi ih ovdje usporedio.", + "unsupportedPrimaryTitle": "Primarna vremenska zona nije dostupna", + "unsupportedPrimary": "{timeZone} nije podržan u ovom pregledniku. Prikazuje se UTC kao jasno označena pričuvna vrijednost.", + "unsupportedTimeZone": "Nepodržana vremenska zona: {timeZone}", + "accessibleTime": "{city}: {time}, {date}, {timeZone}", + "advancedLabel": "Napredni svjetski sat", + "cities": "Svjetski satovi", + "cityCount": "{count} vremenskih zona", + "timeBarLabel": "Položaj doba dana u 24-satnom formatu za {city}", + "dayProgress": "{percent}% proteklo · preostaje {hours} h {minutes} min", + "phaseLegend": "Legenda doba dana", + "tick": { + "midnight": "00", + "morning": "06", + "noon": "12", + "evening": "18", + "end": "24" + }, + "phaseRange": { + "night": "00–05 · 21–24", + "dawn": "05–08", + "day": "08–18", + "dusk": "18–21" + }, + "phase": { + "night": "Noć", + "dawn": "Zora", + "day": "Dan", + "dusk": "Sumrak" + } + } + }, + "airQuality": { + "name": "Kvaliteta zraka i UV", + "description": "Prikazuje kvalitetu zraka, ultraljubičasti indeks, onečišćivače i pelud za određenu lokaciju.", + "option": { + "location": { + "label": "Lokacija kvalitete zraka" + }, + "aqiStandard": { + "label": "Standard AQI-ja", + "options": { + "auto": "Automatski prema lokalizaciji", + "european": "Europski AQI", + "us": "Američki AQI" + } + }, + "showUv": { + "label": "Prikaži UV indeks" + }, + "showPollutants": { + "label": "Prikaži koncentracije onečišćivača" + }, + "showPollen": { + "label": "Prikaži koncentracije peludi" + } + }, + "category": { + "good": "Dobra", + "fair": "Zadovoljavajuća", + "moderate": "Umjerena", + "unhealthySensitive": "Nezdravo za osjetljive skupine", + "unhealthy": "Nezdravo", + "poor": "Loša", + "veryPoor": "Vrlo loša", + "veryUnhealthy": "Vrlo nezdrava", + "extremelyPoor": "Izrazito loša", + "hazardous": "Opasna", + "unknown": "Nema očitanja AQI-ja" + }, + "uv": { + "label": "UV indeks", + "category": { + "low": "Nizak", + "moderate": "Umjeren", + "high": "Visok", + "veryHigh": "Vrlo visok", + "extreme": "Ekstreman", + "unknown": "Nema očitanja" + } + }, + "dominantPollutant": "Dominantni onečišćivač", + "aqiLabel": "AQI", + "strongestPollen": "Najviše peludi", + "unit": { + "concentration": "{value} µg/m³", + "pollen": "{value} graina/m³" + }, + "pollutant": { + "pm2_5": "PM2,5", + "pm10": "PM10", + "ozone": "Ozon", + "nitrogenDioxide": "Dušikov dioksid", + "sulphurDioxide": "Sumporov dioksid", + "carbonMonoxide": "Ugljikov monoksid" + }, + "pollen": { + "alder": "Joha", + "birch": "Breza", + "grass": "Trava", + "mugwort": "Pelini", + "olive": "Maslina", + "ragweed": "Ambrozija" + }, + "compact": { + "sixHourTrend": "Trend AQI-ja za sljedećih šest sati" + }, + "advanced": { + "observedAt": "Ažurirano u {time}", + "next24Hours": "Sljedeća 24 sata", + "pollutants": "Koncentracije onečišćivača", + "pollen": "Koncentracije peludi", + "sevenDayForecast": "Maksimalna prognoza za 7 dana", + "aqiValue": "AQI {value}", + "uvValue": "UV {value}", + "uvShort": "UV {value}", + "noForecast": "Podaci prognoze nisu dostupni" + } + }, + "countdown": { + "name": "Odbrojavanja", + "description": "Prati nadolazeće događaje i godišnjice koje se ponavljaju.", + "option": { + "events": { + "label": "Događaji", + "description": "Dodaj i poredaj do 20 jednokratnih ili godišnjih odbrojavanja. Datumi se unose u odabranoj vremenskoj zoni." + }, + "showProgress": { + "label": "Prikaži napredak" + }, + "showSeconds": { + "label": "Prikaži sekunde", + "description": "Sekunde ostaju vidljive za svaki nadolazeći događaj." + } + }, + "dateTimeEventList": { + "newEvent": "Novi događaj", + "add": "Dodaj događaj", + "remove": "Ukloni {event}", + "reorder": "Promijeni redoslijed za {event}", + "eventLabel": "Oznaka događaja", + "timezone": "Vremenska zona", + "unsupportedOption": "Nije podržano: {timeZone}", + "recurrence": "Ponavlja se", + "recurrenceOption": { + "none": "Ne ponavlja se", + "yearly": "Svake godine" + }, + "target": "Datum i vrijeme događaja", + "trackProgress": "Prati napredak od početnog datuma", + "start": "Početni datum i vrijeme napretka", + "confirmDateTime": "Potvrdi datum i vrijeme", + "limit": "Konfigurirano događaja: {count} od {maximum}" + }, + "empty": { + "title": "Još nema odbrojavanja", + "description": "Dodaj događaj u opcijama widgeta kako bi započeo odbrojavanje." + }, + "completed": "Završeno", + "yearly": "Godišnje", + "progress": "Napredak događaja", + "upcoming": "Nadolazeći", + "completedEvents": "Dovršeni događaji", + "invalid": { + "title": "Neki se događaji ne mogu prikazati", + "description": "{count, plural, one {Jedan događaj ima nevažeći datum ili nepodržanu vremensku zonu.} few {# događaja imaju nevažeći datum ili nepodržanu vremensku zonu.} other {# događaja ima nevažeći datum ili nepodržanu vremensku zonu.}}", + "value": "Nedostupno" + }, + "alert": { + "notifications": "Obavijesti preglednika", + "permissionDenied": "Obavijesti su blokirane u ovom pregledniku.", + "reached": "Odbrojavanje je dosegnulo cilj." + } + }, + "timer": { + "name": "Mjerač vremena / Pomodoro", + "description": "Pokreće jednostavan mjerač vremena ili prilagodljivi slijed Pomodoro.", + "option": { + "mode": { + "label": "Način rada", + "options": { + "timer": "Mjerač vremena", + "pomodoro": "Pomodoro" + } + }, + "timerMinutes": { + "label": "Minute mjerača vremena" + }, + "focusMinutes": { + "label": "Minute fokusa" + }, + "shortBreakMinutes": { + "label": "Minute kratke pauze" + }, + "longBreakMinutes": { + "label": "Minute duge pauze" + }, + "sessionsBeforeLongBreak": { + "label": "Sesije fokusa prije duge pauze" + }, + "autoStartBreaks": { + "label": "Automatski započni pauze" + }, + "autoStartFocus": { + "label": "Automatski započni sesije fokusa" + } + }, + "phase": { + "timer": "Mjerač vremena", + "focus": "Fokus", + "shortBreak": "Kratka pauza", + "longBreak": "Duga pauza" + }, + "action": { + "start": "Pokreni", + "pause": "Pauziraj", + "reset": "Poništi" + }, + "attention": { + "timerComplete": "Mjerač vremena dovršen", + "phaseReady": "{phase} spremno" + }, + "progress": "Napredak mjerača vremena: {progress}%", + "compact": { + "completedFocus": "{count, plural, =0 {Nema dovršenih sesija fokusa} one {# dovršena sesija fokusa} few {# dovršene sesije fokusa} other {# dovršenih sesija fokusa}}" + }, + "alert": { + "title": "Mjerač vremena dovršen", + "completed": "{phase} dovršeno." + }, + "advanced": { + "sequence": "Slijed Pomodoro", + "focusSession": "Fokusiraj {session}", + "settings": "Trajne postavke", + "settingsHint": "Upotrijebi kontekstni izbornik widgeta za uređivanje ovih postavki ploče.", + "localAlerts": "Lokalna upozorenja", + "notifications": "Obavijesti preglednika", + "sound": "Zvukovi mjerača vremena", + "localAlertsHint": "Zvukovi mjerača vremena prema zadanim su postavkama omogućeni. Zvukovi i obavijesti primjenjuju se samo na ovaj widget u ovom pregledniku.", + "notificationsDenied": "Obavijesti su blokirane u ovom pregledniku." } }, "minecraftServerStatus": { "name": "Stanje Minecraft poslužitelja", "description": "Prikazuje stanje Minecraft poslužitelja", "option": { - "title": { - "label": "Naslov" - }, "domain": { "label": "Adresa poslužitelja" }, @@ -1753,11 +2786,21 @@ "noStation": "Nijedna stanica nije odabrana", "option": { "baseUrl": { - "label": "URL usluge Search.ch" + "label": "URL usluge Search.ch", + "description": "Prilagođeni URL-ovi moraju se razriješiti u javnu IP adresu. Privatni i lokalni hostovi nisu dopušteni." }, "station": { - "label": "Stanica" + "label": "Stanica", + "placeholder": "Pretraži stanicu" } + }, + "error": { + "customSourceUnavailable": "Izvor voznog reda nije dostupan. Provjeri razrješava li se njegov URL u javnu IP adresu.", + "stationSearch": "Nije moguće pretražiti stanice. Provjeri prilagođeni URL i svoj pristup ploči." + }, + "warning": { + "stale": "Raspored nije moguće osvježiti. Prikazuju se polasci posljednji put ažurirani u {time}.", + "staleCompact": "Zastarjeli podaci" } }, "notebook": { @@ -1789,6 +2832,9 @@ "directionRtl": "Postavi smjer teksta zdesna nalijevo", "blockquote": "Blok citat", "horizontalLine": "Vodoravna crta", + "details": "Uključi/isključi sažimljivi odjeljak", + "expandDetails": "Proširi sažimljivi odjeljak", + "collapseDetails": "Sažmi sažimljivi odjeljak", "bulletList": "Popis s grafičkim oznakama", "orderedList": "Numerirani popis", "checkList": "Popis za provjeru", @@ -1797,16 +2843,20 @@ "link": "Poveznica", "unlink": "Ukloni poveznicu", "image": "Ugradi sliku", - "addTable": "Dodaj tablicu", + "insertTable": "Umetni tablicu", + "insertTableSize": "Umetni tablicu veličine {columns} × {rows}", "deleteTable": "Izbriši tablicu", "colorCell": "Boja ćelije", - "mergeCell": "Prebaci spajanje ćelija", + "mergeCells": "Spoji ćelije", + "splitCell": "Podijeli ćeliju", "addColumnLeft": "Dodaj stupac prije", "addColumnRight": "Dodaj stupac poslije", "deleteColumn": "Izbriši stupac", "addRowTop": "Dodaj red prije", "addRowBelow": "Dodaj red poslije", - "deleteRow": "Izbriši red" + "deleteRow": "Izbriši red", + "toggleHeaderRow": "Uključi/isključi redak zaglavlja", + "toggleHeaderColumn": "Uključi/isključi stupac zaglavlja" }, "align": { "left": "Lijevo", @@ -1817,8 +2867,6 @@ "clearColor": "Očisti boju", "source": "Izvor", "widthPlaceholder": "Vrijednost u % ili pikselima", - "columns": "Stupci", - "rows": "Redovi", "width": "Širina", "height": "Visina" }, @@ -1830,7 +2878,9 @@ "discard": "Odbaci promjene", "keepEditing": "Nastavi uređivati" } - } + }, + "saveFailed": "Nije moguće spremiti bilješku", + "documentStats": "{words, plural, one {# riječ} few {# riječi} other {# riječi}} · {characters, plural, one {# znak} few {# znaka} other {# znakova}}" }, "anchorNote": { "name": "Bilješka Anchor", @@ -1839,9 +2889,6 @@ "noteId": { "label": "Bilješka" }, - "showTitle": { - "label": "Prikaži naslov" - }, "showUpdatedAt": { "label": "Prikaži vrijeme posljednjeg ažuriranja" } @@ -1851,14 +2898,20 @@ "notFound": "Bilješka nije pronađena", "noNotes": "Nisu pronađene bilješke", "integrationRequired": "Najprije odaberite integraciju Anchor", - "updatedAt": "Ažurirano {date}", "untitled": "Bez naslova", - "edit": "Uredi", - "save": "Spremi", - "cancel": "Otkaži", "readOnlyViewer": "Imate pristup ovoj bilješci kao preglednik. Uređivanje je onemogućeno.", "saveForbidden": "Nemate dopuštenje za uređivanje ove bilješke.", - "saveFailed": "Spremanje ove bilješke nije uspjelo. Pokušajte ponovno." + "saveFailed": "Spremanje ove bilješke nije uspjelo. Pokušajte ponovno.", + "createdAt": "Izrađeno {date}", + "permission": { + "owner": "Vlasnik", + "editor": "Uređivač", + "viewer": "Preglednik" + }, + "status": { + "pinned": "Prikvačeno", + "archived": "Arhivirano" + } }, "iframe": { "name": "iFrame", @@ -1917,6 +2970,25 @@ "clickable": { "label": "Klikabilno" } + }, + "state": { + "on": "Uključeno", + "off": "Isključeno", + "unavailable": "Nedostupno", + "unknown": "Nepoznato" + }, + "advanced": { + "entityId": "ID entiteta: {id}", + "lastChanged": "Promijenjeno {date}", + "attribute": { + "unit": "Jedinica", + "deviceClass": "Klasa uređaja", + "icon": "Ikona" + } + }, + "error": { + "loadFailed": "Nije moguće učitati entitet", + "toggleFailed": "Nije moguće ažurirati entitet" } }, "smartHome-executeAutomation": { @@ -1932,11 +3004,31 @@ }, "spotlightAction": { "run": "Pokreni {name}" + }, + "advanced": { + "lastExecuted": "Posljednje pokretanje u {time}", + "automationId": "ID automatizacije: {id}", + "ready": "Spremno za pokretanje", + "noPermission": "Nemaš dopuštenje za pokretanje ove automatizacije" + }, + "status": { + "running": "Automatizacija se pokreće", + "success": "Automatizacija je dovršena" + }, + "error": { + "executeFailed": "Nije moguće pokrenuti automatizaciju" } }, "stockPrice": { "name": "Cijena dionice", "description": "Prikazuje trenutačnu cijenu dionice tvrtke", + "advanced": { + "currentPrice": "Trenutačna cijena", + "previousClose": "Prethodno zatvaranje", + "changePercentage": "Promjena (%)", + "minimum": "Minimum", + "maximum": "Maksimum" + }, "option": { "stock": { "label": "Simbol dionice" @@ -2007,6 +3099,10 @@ "label": "1 mjesec" } } + }, + "showDetails": { + "label": "Prikaži pojedinosti", + "description": "Prikaži naziv, promjenu i vremenski raspon u sažetom prikazu. Isključi za prikaz samo simbola i cijene." } } }, @@ -2034,6 +3130,13 @@ "showUnmonitored": { "label": "Prikaži stavke bez nadzora" } + }, + "advanced": { + "previousMonth": "Prikaži prethodni mjesec", + "nextMonth": "Prikaži sljedeći mjesec", + "eventCount": "{count, plural, one {# događaj} few {# događaja} other {# događaja}}", + "loading": "Učitavanje događaja kalendara...", + "noEvents": "Nema događaja u ovom mjesecu" } }, "weather": { @@ -2046,16 +3149,18 @@ "disableTemperatureDecimals": { "label": "Onemogući decimale temperature" }, + "animateIcons": { + "label": "Animiraj vremenske ikone" + }, + "showHumidity": { + "label": "Prikaži vlažnost" + }, "showCurrentWindSpeed": { - "label": "Prikaži trenutačnu brzinu vjetra", - "description": "Samo za trenutačno vrijeme" + "label": "Prikaži trenutačnu brzinu vjetra" }, "useImperialSpeed": { "label": "Koristi mph za brzinu vjetra" }, - "location": { - "label": "Lokacija vremenske prognoze" - }, "showCity": { "label": "Prikaži grad" }, @@ -2065,13 +3170,10 @@ "forecastDayCount": { "label": "Broj dana prognoze", "description": "Kad widget nije dovoljno širok, prikazuje se manje dana" - }, - "dateFormat": { - "label": "Format datuma", - "description": "Kako bi datum trebao izgledati" } }, "currentWindSpeed": "{currentWindSpeed} {unit}", + "disabled": "Podaci o vremenu nisu dostupni jer su odlazne veze onemogućene", "dailyForecast": { "sunrise": "Izlazak", "sunset": "Zalazak", @@ -2094,6 +3196,47 @@ "thunderstorm": "Grmljavinska oluja", "thunderstormWithHail": "Grmljavinska oluja s tučom", "unknown": "Nepoznato" + }, + "details": "Prikaži pojedinosti o vremenu", + "detailsFor": "Prikaži pojedinosti vremena za {date}", + "advanced": { + "forecast": "Prognoza za 7 dana", + "hourlyForecast": "Sljedeća 24 sata", + "day": "Dan", + "time": "Vrijeme", + "conditions": "Vremenski uvjeti", + "temperature": "Temperatura", + "feelsLike": "Osjećaj: {temperature}", + "feelsLikeLabel": "Osjećaj temperature", + "feelsLikeRange": "Osjećaj: {maximum} / {minimum}", + "highLow": "Najviša {maximum} · najniža {minimum}", + "observedAt": "Ažurirano u {time}", + "humidity": "Vlažnost", + "averageHumidity": "Prosječna vlažnost: {humidity}%", + "currentHumidity": "Trenutačna vlažnost", + "wind": "Vjetar / udari ({unit})", + "currentWind": "Trenutačni vjetar / udari", + "windValue": "{speed} / {gusts} {unit}", + "windDetail": "Maks. vjetar / udari: {speed} / {gusts} {unit}", + "nextHourPrecipitation": "Oborine u sljedećem satu", + "precipitationChance": "Vjerojatnost oborina", + "precipitationValue": "{probability}% · {amount} mm", + "precipitationDetail": "Oborine: {probability}% · {amount} mm", + "todayUv": "Današnji maksimalni UV indeks", + "uvIndex": "Maks. UV indeks: {value}", + "daylight": "Dnevna svjetlost: {duration}", + "hourlyTooltip": "Osjećaj {feelsLike}{temperatureUnit} · {amount} mm · vlažnost {humidity}% · vjetar {speed} {speedUnit}", + "hourlyTooltipWithoutHumidity": "Osjećaj {feelsLike}{temperatureUnit} · {amount} mm · vjetar {speed} {speedUnit}", + "detailLabel": { + "feelsLike": "Osjećaj temperature", + "precipitation": "Oborine", + "humidity": "Prosječna vlažnost", + "wind": "Maksimalni vjetar / udari", + "uv": "Maksimalni UV indeks", + "daylight": "Dnevno svjetlo" + }, + "sun": "Izlazak / zalazak sunca", + "noForecast": "Podaci prognoze nisu dostupni" } }, "indexerManager": { @@ -2106,8 +3249,15 @@ }, "title": "Upravitelj indeksera", "testAll": "Testiraj sve", + "status": { + "healthy": "Zdravo", + "unhealthy": "Nezdravo", + "disabled": "Onemogućeno", + "unknown": "Stanje nije dostupno" + }, "error": { - "internalServerError": "Neuspješno dohvaćanje statusa indeksera" + "internalServerError": "Neuspješno dohvaćanje statusa indeksera", + "testAll": "Test indeksera nije uspio. Pokušaj ponovno." } }, "healthMonitoring": { @@ -2136,11 +3286,6 @@ "fileSystem": { "label": "Prikaži informacije o datotečnom sustavu" }, - "visibleStorageVolumes": { - "label": "Vidljivi volumeni pohrane", - "description": "Dostupno samo kada su sve odabrane integracije Synology. Ostavite prazno za prikaz svih otkrivenih volumena pohrane.", - "placeholder": "Odaberite volumene pohrane" - }, "defaultTab": { "label": "Zadana kartica" }, @@ -2163,17 +3308,27 @@ "minutes": "{count} minute", "used": "Iskorišteno", "available": "Dostupno", - "lastSeen": "Zadnje ažuriranje statusa: {lastSeen}" + "lastSeen": "Zadnje ažuriranje statusa: {lastSeen}", + "updatesAvailable": "{count, plural, one {Dostupno je ažuriranje} few {Dostupna su # ažuriranja} other {Dostupno je # ažuriranja}}", + "rebootRequired": "Potrebno je ponovno pokretanje", + "rebootNotRequired": "Ponovno pokretanje nije potrebno" + }, + "smartStatus": { + "attributesWithinThresholds": "SMART: atributi su unutar pragova", + "attributesFailed": "SMART: {attributes} nije uspjelo", + "noCriticalWarning": "SMART: SSD nije prijavio upozorenje", + "criticalWarning": "SMART: SSD je prijavio kritično upozorenje" + }, + "gauge": { + "cpuUsage": "Upotreba CPU-a", + "cpuTemperature": "Temperatura CPU-a", + "memoryUsage": "Upotreba memorije", + "gpuUsage": "Upotreba GPU-a za {name}" }, - "memory": {}, "error": { "internalServerError": "Neuspješno dohvaćanje statusa zdravlja" }, "cluster": { - "summary": { - "cpu": "CPU", - "memory": "RAM" - }, "resource": { "node": { "name": "Čvorovi" @@ -2209,8 +3364,6 @@ "table": { "header": { "name": "Naziv", - "cpu": "CPU", - "memory": "RAM", "node": "Čvor" } } @@ -2220,33 +3373,29 @@ "name": "Dockerova statistika", "description": "Statistika vaših spremnika (ovaj widget može se dodati samo s administratorskim ovlastima)", "option": { - "columns": { - "label": "Stupci za prikaz" + "endpointIds": { + "label": "Docker okruženja", + "description": "Ostavi prazno za prikaz spremnika iz svih Docker okruženja", + "placeholder": "Sva Docker okruženja" }, - "enableRowSorting": { - "label": "Omogući sortiranje stavki" + "containerFilter": { + "label": "Spremnici za filtriranje" + }, + "filterIsWhitelist": { + "label": "Filtriraj kao popis dopuštenih" }, "defaultSort": { - "label": "Stupac prema kojem se zadano sortira", "option": { "name": "Naziv", "state": "Stanje", "cpuUsage": "Upotreba CPU-a", "memoryUsage": "Upotreba memorije" } - }, - "descendingDefaultSort": { - "label": "Obrni sortiranje" - }, - "columnOrder": { - "label": "Redoslijed stupaca" - }, - "columnWidths": { - "label": "Širine stupaca" } }, "error": { "internalServerError": "Dohvaćanje statistike spremnika nije uspjelo", + "endpointsUnavailable": "Docker krajnje točke nisu dostupne", "layoutSaveTitle": "Raspored tablice nije spremljen", "layoutSaveMessage": "Raspored Docker tablice nije moguće spremiti. Pokušajte ponovno pomaknuti ili promijeniti veličinu stupca." }, @@ -2255,7 +3404,6 @@ } }, "coolify": { - "name": "Coolify", "description": "Pregled vaše instance Coolifyja s poslužiteljima i aplikacijama", "option": { "showServers": { @@ -2281,17 +3429,49 @@ "internalServerError": "Neuspješno dohvaćanje podataka iz Coolifyja" }, "server": { - "buildServer": "Izgradi" + "buildServer": "Izgradi", + "resourceCounts": "{applications, plural, one {# aplikacija} few {# aplikacije} other {# aplikacija}} / {services, plural, one {# usluga} few {# usluge} other {# usluga}}", + "reachability": "Dostupnost", + "usability": "Upotrebljivost" + }, + "source": { + "url": "Izvor: {url}", + "unavailable": "{source}: nedostupno" }, "instances": { "title": "Instance" + }, + "action": { + "openResource": "Otvori {name}", + "openLogs": "Otvori zapisnike za {name}", + "showIp": "Prikaži IP adresu", + "hideIp": "Sakrij IP adresu" + }, + "status": { + "running": "U radu", + "stopped": "Zaustavljeno", + "exited": "Izašlo", + "starting": "Pokretanje", + "restarting": "Ponovno pokretanje", + "unknown": "Nepoznato", + "online": "Na mreži", + "offline": "Izvan mreže", + "reachable": "Dostupno", + "unreachable": "Nedostupno", + "usable": "Upotrebljivo", + "unusable": "Neupotrebljivo" } }, "vpn": { "name": "VPN", "description": "Pregled vaših VPN veza", "serviceUnavailable": "VPN nije dostupan", - "option": {} + "status": { + "running": "U radu", + "notRunning": "Ne radi", + "unavailable": "Nedostupno", + "vpn": "VPN: {status}" + } }, "ups": { "name": "UPS uređaj", @@ -2318,14 +3498,19 @@ "runtime": "Vrijeme rada", "load": "Opterećenje", "input": "Ulaz", - "output": "Izlaz" + "output": "Izlaz", + "batteryVoltage": "Napon baterije", + "power": "Snaga", + "temperature": "Temperatura", + "manufacturer": "Proizvođač", + "model": "Model", + "serial": "Serijski broj" }, "error": { "internalServerError": "Neuspješno dohvaćanje UPS podataka" } }, "tracearr": { - "name": "Tracearr", "description": "Napredni nadzor medijskog poslužitelja s detaljnim podacima o streamovima i transkodiranju", "option": { "showStreams": { @@ -2413,10 +3598,7 @@ "label": "Događaj", "description": "Prikaži ukupne pojave određenog događaja", "placeholder": "Odaberite događaj", - "loading": "Učitavanje događaja...", - "noEvents": "Nije pronađen nijedan događaj", - "none": "Nema događaja", - "configureWebsiteFirst": "Prvo odaberite web mjesto za učitavanje događaja" + "none": "Nema događaja" }, "chartType": { "label": "Vrsta grafikona", @@ -2447,26 +3629,21 @@ "eventNames": { "label": "Događaji", "description": "Odaberite jedan ili više događaja za grafikon", - "placeholder": "Odaberite događaje...", - "loading": "Učitavanje događaja...", - "noEvents": "Nije pronađen nijedan događaj", - "configureWebsiteFirst": "Prvo odaberite web mjesto za učitavanje događaja" + "placeholder": "Odaberite događaje..." }, "topCount": { "label": "Stavke za prikaz", "description": "Broj najboljih stavki za prikaz (maks. 500)" + }, + "events": { + "loading": "Učitavanje događaja...", + "noEvents": "Nisu pronađeni događaji", + "configureWebsiteFirst": "Najprije odaberi web-stranicu za učitavanje događaja" } }, "event": { - "occurrences": "događaja", "label": "događaja" }, - "topPages": { - "direct": "Izravno" - }, - "topReferrers": { - "direct": "Izravno" - }, "events": { "selectPrompt": "Odaberite događaje za grafikon" }, @@ -2475,6 +3652,9 @@ "noWebsite": "Nije konfigurirano web mjesto", "noData": "Nema dostupnih podataka", "internalServerError": "Neuspješno dohvaćanje podataka iz Umamija" + }, + "top": { + "direct": "Izravno" } }, "common": { @@ -2502,7 +3682,8 @@ }, "integration": { "noData": "Nije pronađena integracija", - "description": "Kliknite za stvaranje nove integracije" + "description": "Kliknite za stvaranje nove integracije", + "manage": "Upravljaj integracijama" }, "app": { "noData": "Nijedna aplikacija nije pronađena", @@ -2513,7 +3694,61 @@ "noIntegration": "Nijedna integracija nije odabrana", "noData": "Nema dostupnih podataka integracije" }, - "option": {} + "integrationDisconnected": "Nema dostupnih podataka, sve su integracije odspojene", + "updatedAt": "Ažurirano {date}", + "title": { + "label": "Naslov" + }, + "openInNewTab": { + "label": "Otvori u novoj kartici" + }, + "showTitle": { + "label": "Prikaži naslov" + }, + "weatherLocation": { + "label": "Lokacija vremenske prognoze" + }, + "layout": { + "label": "Raspored", + "option": { + "horizontal": "Horizontalno", + "vertical": "Okomito", + "grid": "Mreža" + } + }, + "select": { + "loading": "Učitavanje...", + "loadError": "Učitavanje opcija nije uspjelo" + }, + "dateFormat": { + "label": "Format datuma", + "description": "Kako bi datum trebao izgledati" + }, + "visibleStorageVolumes": { + "label": "Vidljivi spremišni volumeni", + "description": "Dostupno samo kada je svaka odabrana integracija OpenMediaVault ili Synology. Ostavite prazno za prikaz svih otkrivenih spremišnih volumena.", + "placeholder": "Odaberite spremišne volumene" + }, + "tableOptions": { + "columns": { + "label": "Stupci za prikaz" + }, + "columnOrder": { + "label": "Redoslijed stupaca" + }, + "columnWidths": { + "label": "Širine stupaca" + }, + "enableRowSorting": { + "label": "Omogući sortiranje stavki" + }, + "defaultSort": { + "label": "Stupac prema kojem se zadano sortira" + }, + "invertSorting": { + "label": "Obrni sortiranje" + } + } }, "video": { "name": "Video prijenos", @@ -2572,6 +3807,7 @@ "transcoding": "Transkodiranje", "paused": "Pauzirano", "remaining": "Preostalo je {minutes} min", + "seasonEpisode": "S{season} E{episode}", "metadata": { "title": "Statistike za znalce", "video": { @@ -2589,11 +3825,16 @@ "resolution": "Razlučivost", "target": "Ciljni kodek" } - } + }, + "unknownUser": "Nepoznati korisnik" + }, + "summary": { + "sessions": "{count, plural, one {# sesija} few {# sesije} other {# sesija}}", + "playing": "{count} se reproducira", + "transcoding": "{count} se transkodira" } }, "paperlessNgx": { - "name": "Paperless-ngx", "description": "Pregled vaše arhive dokumenata Paperless-ngx", "documentsTotal": "Ukupno dokumenata", "documentsInbox": "Ulazna pošta", @@ -2637,6 +3878,192 @@ "internalServerError": "Neuspješno dohvaćanje podataka iz Paperless-ngx" } }, + "patchmon": { + "description": "Pregled stanja zakrpa računala iz PatchMona", + "title": "PatchMon statistika", + "totalHosts": "Ukupno računala", + "hostsNeedingUpdates": "Potrebna ažuriranja", + "securityUpdates": "Sigurnosna ažuriranja", + "upToDateHosts": "Ažurirana računala", + "hostsWithSecurityUpdates": "Računala sa sigurnosnim ažuriranjima", + "recentUpdates24h": "Ažuriranja (24 h)", + "totalOutdatedPackages": "Zastarjeli paketi", + "totalRepos": "Repozitoriji", + "osDistribution": "Distribucija OS-a", + "compliance": "Usklađenost zakrpa", + "complianceRatio": "{upToDate} / {total}", + "lastUpdated": "Ažurirano {time}", + "option": { + "showTotalHosts": { + "label": "Prikaži ukupan broj računala", + "description": "Prikaži ukupan broj nadziranih računala" + }, + "showHostsNeedingUpdates": { + "label": "Prikaži računala kojima su potrebna ažuriranja", + "description": "Prikaži računala s barem jednim zastarjelim paketom" + }, + "showSecurityUpdates": { + "label": "Prikaži sigurnosna ažuriranja", + "description": "Prikaži ukupan broj dostupnih sigurnosnih ažuriranja" + }, + "showUpToDateHosts": { + "label": "Prikaži ažurirana računala", + "description": "Prikaži računala bez zastarjelih paketa" + }, + "showHostsWithSecurityUpdates": { + "label": "Prikaži računala sa sigurnosnim ažuriranjima", + "description": "Prikaži računala kojima su potrebne sigurnosne zakrpe" + }, + "showRecentUpdates24h": { + "label": "Prikaži nedavna ažuriranja (24 h)", + "description": "Prikaži broj ažuriranja primijenjenih u posljednja 24 sata" + }, + "showTotalOutdatedPackages": { + "label": "Prikaži zastarjele pakete", + "description": "Prikaži ukupan broj zastarjelih paketa na svim računalima" + }, + "showTotalRepos": { + "label": "Prikaži repozitorije", + "description": "Prikaži broj aktivnih nadziranih repozitorija" + }, + "enableThresholdColors": { + "label": "Omogući boje pragova", + "description": "Oboji statističke vrijednosti zelenom, žutom ili crvenom bojom na temelju unaprijed postavljenih razina ozbiljnosti" + }, + "useCustomThresholds": { + "label": "Napredni pragovi", + "description": "Prilagodite pragove upozorenja i kritične pragove po statistici koristeći apsolutne brojeve ili postotke ukupnog broja računala" + }, + "thresholdMode": { + "option": { + "absolute": "Apsolutni broj", + "percent": "Postotak ukupnog broja računala" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "Način praga za potrebna ažuriranja", + "description": "Usporedite broj potrebnih ažuriranja kao apsolutnu vrijednost ili postotak ukupnog broja računala" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "Prag upozorenja za potrebna ažuriranja" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "Kritični prag za potrebna ažuriranja" + }, + "securityUpdatesThresholdMode": { + "label": "Način praga za sigurnosna ažuriranja", + "description": "Usporedite broj sigurnosnih ažuriranja kao apsolutnu vrijednost ili postotak ukupnog broja računala" + }, + "securityUpdatesWarningAt": { + "label": "Prag upozorenja za sigurnosna ažuriranja" + }, + "securityUpdatesCriticalAt": { + "label": "Kritični prag za sigurnosna ažuriranja" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "Način praga za računala sa sigurnosnim ažuriranjima", + "description": "Usporedite broj računala kao apsolutnu vrijednost ili postotak ukupnog broja računala" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "Prag upozorenja za računala sa sigurnosnim ažuriranjima" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "Kritični prag za računala sa sigurnosnim ažuriranjima" + }, + "upToDateHostsThresholdMode": { + "label": "Način praga za ažurirana računala", + "description": "Usporedite broj ažuriranih računala kao apsolutnu vrijednost ili postotak ukupnog broja računala" + }, + "upToDateHostsWarningAt": { + "label": "Prag upozorenja za ažurirana računala", + "description": "Prikaži žutu boju kada je vrijednost na ili iznad ovog praga, ali ispod potpune pokrivenosti" + }, + "upToDateHostsCriticalAt": { + "label": "Kritični prag za ažurirana računala", + "description": "Prikaži crvenu boju kada vrijednost padne ispod ovog praga" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "Način praga za zastarjele pakete", + "description": "Usporedite broj zastarjelih paketa kao apsolutnu vrijednost ili postotak ukupnog broja računala" + }, + "totalOutdatedPackagesWarningAt": { + "label": "Prag upozorenja za zastarjele pakete" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "Kritični prag za zastarjele pakete" + }, + "showOsDistribution": { + "label": "Prikaži distribuciju OS-a", + "description": "Prikaži raščlambu nadziranih računala prema operacijskom sustavu" + }, + "osDistributionLimit": { + "label": "Ograničenje distribucije OS-a", + "description": "Maksimalan broj operacijskih sustava za prikaz", + "option": { + "3": "Najviše 3", + "5": "Najviše 5", + "10": "Najviše 10", + "all": "Sve" + } + }, + "showOsVersion": { + "label": "Prikaži verziju OS-a", + "description": "Dodaj verziju OS-a svakoj oznaci distribucije kada je dostupna" + }, + "showComplianceHero": { + "label": "Prikaži sažetak usklađenosti", + "description": "Prikaži prsten usklađenosti koji pokazuje postotak ažuriranih računala" + }, + "osDisplayMode": { + "label": "Način prikaza OS-a", + "description": "Odaberite način prikaza distribucije operacijskog sustava", + "option": { + "bars": "Vodoravne trake", + "donut": "Kružni grafikon" + } + }, + "threshold": { + "warningAt": { + "description": "Unesite žutu boju kada vrijednost dosegne ovaj prag" + }, + "criticalAt": { + "description": "Unesite crvenu boju kada vrijednost dosegne ovaj prag" + } + } + }, + "error": { + "internalServerError": "Neuspješno dohvaćanje podataka iz PatchMona" + } + }, + "bazarr": { + "description": "Pregled nedostajućih titlova i stanja ispravnosti vaše instance Bazarra", + "episodes": "Nedostajuće epizode", + "movies": "Nedostajući filmovi", + "providers": "Problemi s pružateljima", + "status": "Problemi sa stanjem ispravnosti", + "announcements": "Obavijesti", + "option": { + "showMissingEpisodes": { + "label": "Prikaži nedostajuće epizode", + "description": "Prikaži broj epizoda kojima nedostaju titlovi" + }, + "showMissingMovies": { + "label": "Prikaži nedostajuće filmove", + "description": "Prikaži broj filmova kojima nedostaju titlovi" + }, + "showProviderIssues": { + "label": "Prikaži probleme s pružateljima", + "description": "Prikaži broj pružatelja titlova s problemima" + }, + "showHealthIssues": { + "label": "Prikaži probleme sa stanjem ispravnosti", + "description": "Prikaži broj problema sa stanjem ispravnosti Bazarra" + } + }, + "error": { + "internalServerError": "Neuspješno dohvaćanje podataka iz Bazarra" + } + }, "immich-serverStats": { "name": "Statistika poslužitelja Immicha", "description": "Informacije o vašoj instanci Immicha", @@ -2661,7 +4088,8 @@ "users": "Korisnici", "photos": "Fotografije", "videos": "Videozapisi", - "storage": "Iskorištena pohrana" + "storage": "Iskorištena pohrana", + "albumLimit": "Najveći albumi (prikazuje se do {count})" }, "immich-albumCarousel": { "name": "Immich album", @@ -2685,24 +4113,21 @@ } }, "description": "Prezentacija fotografija iz Immich albuma ili cijele biblioteke", - "noPhotos": "Nisu pronađene fotografije" + "noPhotos": "Nisu pronađene fotografije", + "albumPhoto": "Fotografija albuma", + "actions": { + "previousPhoto": "Prethodna fotografija", + "nextPhoto": "Sljedeća fotografija", + "pauseSlideshow": "Pauziraj prezentaciju", + "resumeSlideshow": "Nastavi prezentaciju", + "toggleSlideshow": "Pauziraj ili nastavi prezentaciju", + "photo": "Fotografija {number}" + } }, "downloads": { "name": "Klijent za preuzimanje", "description": "Omogućuje vam pregled i upravljanje preuzimanjima s Torrent i Usenet klijenata.", "option": { - "columns": { - "label": "Stupci za prikaz" - }, - "enableRowSorting": { - "label": "Omogući sortiranje stavki" - }, - "defaultSort": { - "label": "Stupac koji se prema zadanim postavkama koristi za sortiranje" - }, - "descendingDefaultSort": { - "label": "Obrni sortiranje" - }, "showCompletedUsenet": { "label": "Prikaži usenet stavke označene kao dovršene" }, @@ -2727,12 +4152,6 @@ "limitPerIntegration": { "label": "Ograniči stavke po integraciji", "description": "Time se ograničava broj prikazanih stavki po integraciji, a ne globalno" - }, - "columnOrder": { - "label": "Redoslijed stupaca" - }, - "columnWidths": { - "label": "Širine stupaca" } }, "errors": { @@ -2763,7 +4182,7 @@ "detailsTitle": "Trenutačni indeks unutar klijenta" }, "id": { - "columnTitle": "ID", + "columnTitle": "ID stavke", "detailsTitle": "ID stavke" }, "integration": { @@ -2893,6 +4312,10 @@ "mediaRequests-requestList": { "name": "Popis zahtjeva za medije", "description": "Pregledajte popis svih zahtjeva za medijima s vaše instance Overseerr ili Jellyseerr", + "empty": { + "title": "Još nema zahtjeva za medije", + "description": "Potražite film ili seriju da biste započeli zahtjev." + }, "option": { "linksTargetNewTab": { "label": "Otvori veze u novoj kartici" @@ -2926,12 +4349,16 @@ "failed": "Neuspjelo", "completed": "Dovršeno" }, + "unknown": "Nepoznato", "toBeDetermined": "TBD" }, "mediaRequests-requestStats": { "name": "Statistika zahtjeva za medije", "description": "Statistika o vašim zahtjevima za medijima", - "option": {}, + "empty": { + "title": "Još nema aktivnosti zahtjeva", + "description": "Statistika će se prikazati nakon prvog zahtjeva za medije." + }, "titles": { "stats": { "main": "Medijska statistika", @@ -2941,8 +4368,7 @@ "declined": "Već odbijeno", "available": "Već dostupno", "tv": "TV zahtjevi", - "movie": "Zahtjevi za Filmovima", - "total": "Ukupno" + "movie": "Zahtjevi za Filmovima" }, "users": { "main": "Najbolji korisnici", @@ -2968,7 +4394,6 @@ }, "currentIndex": "{start}–{end} od {total}", "healthCheck": { - "title": "Provjera stanja", "queued": "U redu", "status": { "healthy": "Ispravno", @@ -2977,38 +4402,63 @@ }, "panel": { "statistics": { - "empty": "Isprazni", - "transcodes": "Transkodiranja", - "transcodesCount": "Transkodiranja", - "healthChecksCount": "Provjere stanja", "filesCount": "Datoteke", "savedSpace": "Ušteđeni prostor", - "healthChecks": "Provjere stanja", "videoCodecs": "Kodeci", "videoContainers": "Spremnici", "videoResolutions": "Razlučivosti" }, "workers": { - "empty": "Isprazni", "table": { - "file": "Dat.", "eta": "", - "progress": "Napredak", - "transcode": "Transkodiranje", - "healthCheck": "Provjera stanja" + "progress": "Napredak" } }, "queue": { - "empty": "Isprazni", "table": { - "file": "Dat.", - "size": "Veličina", - "transcode": "Transkodiranje", - "healthCheck": "Provjera stanja" + "size": "Veličina" } + }, + "common": { + "empty": "Isprazni", + "file": "Datoteka", + "healthCheck": "Provjera stanja", + "transcode": "Transkodiraj", + "transcodes": "Transkodiranja", + "healthChecks": "Provjere stanja" } } }, + "mediaMissing": { + "name": "Nedostajući i stavljeni mediji u red čekanja", + "description": "Prikazuje nedostajuće filmove i epizode te filmove i epizode u redu čekanja iz Radarra i Sonarra", + "option": { + "showMissing": { + "label": "Prikaži nedostajuće stavke" + }, + "showQueued": { + "label": "Prikaži stavke u redu čekanja" + }, + "pageSize": { + "label": "Stavke po stranici" + } + }, + "tab": { + "missing": "Nedostaje", + "queued": "U redu čekanja" + }, + "type": { + "movie": "Film", + "episode": "Epizoda", + "book": "Knjiga" + }, + "empty": { + "missing": "Nema nedostajućih stavki", + "queued": "Nema stavki u redu čekanja", + "noTabsEnabled": "Omogućite barem jednu karticu u postavkama widgeta" + }, + "timeLeft": "Preostalo vrijeme" + }, "rssFeed": { "name": "RSS kanali", "description": "Pratite i prikazujte jedan ili više općih RSS, ATOM ili JSON kanala", @@ -3031,6 +4481,13 @@ "showPosterImage": { "label": "Prikaži sliku plakata" } + }, + "error": { + "allFeedsFailed": "Nije moguće učitati RSS izvore. Provjerite URL-ove izvora i pokušajte ponovno." + }, + "warning": { + "partial": "{count, plural, one {# RSS kanal nije moguće učitati} few {# RSS kanala nije moguće učitati} other {# RSS kanala nije moguće učitati}}", + "stale": "RSS izvori nisu se mogli osvježiti. Prikazuju se prethodno učitani unosi." } }, "releases": { @@ -3106,17 +4563,8 @@ "label": "Regularni izraz" } }, - "edit": { - "label": "Uredi" - }, "editForm": { - "title": "Uredi repozitorij", - "cancel": { - "label": "Otkaži" - }, - "confirm": { - "label": "Potvrdi" - } + "title": "Uredi repozitorij" }, "importForm": { "title": "Uvezi iz Dockera" @@ -3133,8 +4581,7 @@ "label": "Tokeni pružatelja", "token": "Znak", "configured": "Token je konfiguriran", - "notConfigured": "Token nije postavljen", - "save": "Spremi" + "notConfigured": "Token nije postavljen" } } }, @@ -3161,17 +4608,32 @@ "noProviderResponse": "Nema odgovora pružatelja", "unexpected": "Neočekivana pogreška pružatelja" } - } + }, + "expandDetails": "Prikaži pojedinosti za {name}", + "collapseDetails": "Sakrij pojedinosti za {name}" }, "networkControllerSummary": { - "option": {}, - "card": { - "vpn": { - "countConnected": "Povezano: {count}" + "advanced": { + "updated": "Ažurirano", + "metric": { + "latency": "Latencija", + "ping": "Odaziv", + "uptime": "Vrijeme rada", + "users": "Korisnici", + "guests": "Gosti" } }, + "card": { + "vpn": { + "countConnected": "{count, plural, one {# povezan} few {# povezana} other {# povezanih}}", + "label": "VPN" + }, + "wan": "WAN", + "web": "Web", + "wifi": "Wi-Fi", + "lan": "LAN" + }, "error": { - "integrationsDisconnected": "Podaci nisu dostupni, sve su integracije odspojene", "unknownContentOption": "Nepoznata mogućnost sadržaja za widget sažetka mrežnog kontrolera: " }, "name": "Sažetak mrežnog kontrolera", @@ -3208,7 +4670,6 @@ } }, "error": { - "integrationsDisconnected": "Podaci nisu dostupni, sve su integracije odspojene", "unknownContentOption": "Nepoznata mogućnost sadržaja za widget stanja mreže: " }, "name": "Stanje mreže", @@ -3238,7 +4699,6 @@ "versiontitle": "Verzije", "cputitle": "Upotreba CPU-a", "memorytitle": "Upotreba memorije", - "cpu": "CPU", "memory": "Memorija", "interfaces": { "name": "naziv", @@ -3246,6 +4706,16 @@ "recv": "Primljeno", "title": "Mrežna sučelja" } + }, + "empty": { + "noInterfaces": "Još nema podataka o mrežnim sučeljima" + }, + "versionUnknown": "Nepoznata verzija", + "metricAccessible": "{metric}: {value}%, {status}", + "status": { + "normal": "Normalno", + "warning": "Upozorenje", + "critical": "Kritično" } }, "notifications": { @@ -3255,8 +4725,21 @@ "option": { "hideLogos": { "label": "Sakrij logotipe" + }, + "messageFormat": { + "label": "Format poruke", + "option": { + "auto": "Automatski", + "plain": "Običan tekst", + "markdown": "Markdown", + "html": "HTML" + } } - } + }, + "openService": "Otvori uslugu obavijesti", + "deleteNotification": "Izbriši obavijest iz Gotifyja", + "deleteFailed": "Obavijest nije moguće izbrisati", + "deleteFailedMessage": "Obavijest nije moguće izbrisati. Pokušajte ponovno." }, "speedtestTracker": { "name": "Speedtest Tracker", @@ -3298,7 +4781,6 @@ } }, "uptimeKuma": { - "name": "Uptime Kuma", "description": "Pratite statistiku dostupnosti sa svoje stranice statusa Uptime Kuma", "option": { "showAverageUptime": { @@ -3335,8 +4817,58 @@ }, "error": { "internalServerError": "Neuspješno dohvaćanje podataka o dostupnosti" + }, + "status": { + "up": "Ukupno poslano", + "down": "Brzina preuzimanja", + "paused": "Pauzirano" } }, + "traefik": { + "description": "Pregled Traefikovih usmjerivača, usluga, međuprograme i ulaznih točaka", + "option": { + "showTcp": { + "label": "Prikaži TCP" + }, + "showUdp": { + "label": "Prikaži UDP" + }, + "showEntryPoints": { + "label": "Prikaži ulazne točke" + } + }, + "instances": "Traefikove instance", + "versionUnknown": "Verzija nije poznata", + "summary": { + "routers": "Usmjerivači", + "entryPoints": "Ulazne točke" + }, + "resource": { + "routers": "Usmjerivači", + "middlewares": "Međuprogrami" + }, + "status": { + "healthy": "Ispravno", + "errors": "{count} pogrešaka", + "warnings": "{count} upozorenja" + }, + "error": { + "internalServerError": "Neuspješno dohvaćanje podataka iz Traefika" + }, + "resourceType": { + "router": "Usmjerivač", + "service": "Usluga", + "middleware": "Međuprogram" + }, + "resourceStatus": { + "enabled": "Omogućeno", + "disabled": "Onemogućeno", + "warning": "Upozorenje", + "error": "Pogreška", + "unknown": "Nepoznato" + }, + "failedEndpoint": "Neuspjelo: {endpoint}" + }, "audioStats": { "name": "Audio statistika", "description": "Statistika biblioteke i reprodukcije iz Navidromea ili Audiobookshelfa", @@ -3401,9 +4933,7 @@ "label": "Vidljivi grafikoni", "description": "Odaberite grafikone koje želite prikazati.", "option": { - "cpu": "CPU", "memory": "Memorija", - "gpu": "GPU", "network": "Mreža" } }, @@ -3418,12 +4948,11 @@ } }, "card": { - "cpu": "CPU", "memory": "MEM", - "gpu": "GPU", "network": "MREŽA", "up": "GORE", - "down": "DOLJE" + "down": "DOLJE", + "memoryTooltip": "{used} / {available} ({percent}%)" } }, "systemDisks": { @@ -3449,151 +4978,88 @@ }, "showBackgroundBar": { "label": "Prikaži traku upotrebe u pozadini" - }, - "visibleStorageVolumes": { - "label": "Vidljivi volumeni pohrane", - "description": "Dostupno samo kada su sve odabrane integracije Synology. Ostavite prazno za prikaz svih otkrivenih volumena pohrane.", - "placeholder": "Odaberite volumene pohrane" } }, "status": { - "unhealthy": "Nezdravo" + "unhealthy": "Nezdravo", + "smart": "SMART", + "free": "{percentage}% slobodno" + } + }, + "customApi": { + "name": "Prilagođeni widget", + "description": "Prikazuje konfiguriranu prilagođenu JSX definiciju.", + "customJsx": { + "noTemplate": "Nije konfiguriran JSX predložak.", + "templateWarnings": "{count} upozorenja predloška:", + "requestIdRequired": "Ova mrežna kontrola zahtijeva imenovani requestId.", + "unsavedPreview": "Pokrenite početni test zahtjeva u uređivaču prije testiranja imenovanih zahtjeva.", + "invalidParams": "Parametri zahtjeva nisu valjani.", + "loading": "Učitavanje zahtjeva…", + "loadRequest": "Učitaj zahtjev", + "requestFailed": "Zahtjev nije uspio.", + "retry": "Ponovi zahtjev", + "actionCompleted": "Radnja je uspješno dovršena.", + "actionSimulated": "Radnja je simulirana; zahtjev nije poslan.", + "actionsDisabledEditMode": "Radnje su onemogućene dok je ploča u načinu uređivanja.", + "widgetItemUnavailable": "Ova stavka widgeta nije dostupna.", + "toggle": "Uključi/isključi", + "copied": "Kopirano", + "confirmDelete": "Potvrdite ovu destruktivnu radnju." + }, + "option": { + "definitionId": { + "label": "Prilagođeni widget" + }, + "refreshInterval": { + "label": "Interval osvježavanja", + "description": "Koliko često ponovno dohvaćati podatke iz API-ja (u sekundama)" + } + }, + "noDefinition": "Nije odabrana nijedna definicija", + "definitionNotFound": "Prilagođeni widget nije dostupan", + "migrationRequired": "Ovaj naslijeđeni prilagođeni widget je sačuvan, ali ga je potrebno migrirati na Custom JSX v2 u odjeljku Upravljanje prilagođenim widgetima prije pokretanja.", + "manageMigration": "Otvori Upravljanje prilagođenim widgetima", + "contactAdmin": "Obratite se administratoru.", + "configurationNeedsRepair": "Opcije ovog widgeta su promijenjene. Uredite widget da biste popravili njegovu konfiguraciju.", + "removeFromBoard": "Ukloni s ploče", + "editModePending": "Spremite ploču da biste učitali ovaj widget.", + "picker": { + "group": "Prilagođeni JSX widgeti", + "empty": "Nisu pronađeni prilagođeni widgeti", + "preview": "Pregled", + "sources": "{count, plural, one {# izvor} few {# izvora} other {# izvora}}", + "requests": "{count, plural, one {# zahtjev} few {# zahtjeva} other {# zahtjeva}}", + "migrationRequired": "Potrebna migracija", + "migrationDescription": "Ovaj postavljeni widget v1 još se ne može pokrenuti. Kopirajte njegov pročišćeni upit u LLM, a zatim zalijepite jedan JSON odgovor u Homarr.", + "manageMigration": "Otvori Upravljanje prilagođenim widgetima", + "contactAdmin": "Obratite se administratoru." + }, + "configuration": { + "needsAttention": "Konfiguracija zahtijeva pažnju: {message}", + "advancedOptions": "Napredne mogućnosti", + "invalidJson": "Nevažeći JSON" } }, "beszelSystemTable": { "name": "Beszel sustavi (tablica)", "description": "Tablični prikaz svih Beszel nadziranih sustava s sortabilnim stupcima i indikatorima statusa", "option": { - "statusFilter": { - "label": "Filtar statusa" - }, "sortBy": { "label": "Sortiraj po" }, "sortDirection": { "label": "Smjer sortiranja" - }, - "showCpu": { - "label": "Prikaži CPU" - }, - "showMemory": { - "label": "Prikaži memoriju" - }, - "showDisk": { - "label": "Prikaži disk" - }, - "showGpu": { - "label": "Prikaži GPU" - }, - "showLoadAvg": { - "label": "Prikaži prosječno opterećenje" - }, - "showNet": { - "label": "Prikaži mrežu" - }, - "showTemp": { - "label": "Prikaži temperaturu" - }, - "showBattery": { - "label": "Prikaži bateriju" - }, - "showServices": { - "label": "Prikaži usluge" - }, - "showUptime": { - "label": "Prikaži vrijeme rada" - }, - "showAgent": { - "label": "Prikaži verziju agenta" - }, - "columnOrder": { - "label": "Redoslijed stupaca" - }, - "columnWidths": { - "label": "Širine stupaca" } }, - "noRecords": "Nisu pronađeni sustavi", "error": { - "internalServerError": "Povezivanje s Beszelom nije moguće. Provjerite postavke integracije.", "layoutSaveTitle": "Nije moguće spremiti raspored tablice", "layoutSaveMessage": "Redoslijed ili širine stupaca nisu se mogli spremiti. Pokušajte ponovno." - }, - "column": { - "system": "Sustav", - "cpu": "Procesor", - "memory": "Memorija", - "disk": "Pohrana", - "gpu": "Grafički procesor", - "loadAvg": "Prosječno opterećenje", - "net": "Mreža", - "temp": "Temperatura", - "battery": "Baterija", - "services": "Usluge", - "uptime": "Vrijeme rada", - "agent": "Agent" } }, "beszelSystemGrid": { "name": "Beszel sustavi (mreža)", - "description": "Prikaz kartice mreže svih Beszel nadziranih sustava s metrikama u stvarnom vremenu", - "option": { - "statusFilter": { - "label": "Filtar statusa" - }, - "showCpu": { - "label": "Prikaži CPU" - }, - "showMemory": { - "label": "Prikaži memoriju" - }, - "showDisk": { - "label": "Prikaži disk" - }, - "showGpu": { - "label": "Prikaži GPU" - }, - "showLoadAvg": { - "label": "Prikaži prosječno opterećenje" - }, - "showNet": { - "label": "Prikaži mrežu" - }, - "showTemp": { - "label": "Prikaži temperaturu" - }, - "showBattery": { - "label": "Prikaži bateriju" - }, - "showServices": { - "label": "Prikaži usluge" - }, - "showUptime": { - "label": "Prikaži vrijeme rada" - }, - "showAgent": { - "label": "Prikaži verziju agenta" - } - }, - "error": { - "internalServerError": "Povezivanje s Beszelom nije moguće. Provjerite postavke integracije." - }, - "empty": { - "noSystems": "Nisu pronađeni sustavi" - }, - "metric": { - "cpu": "CPU", - "memory": "Memorija", - "disk": "Disk", - "gpu": "GPU", - "loadAvg": "Prosj. opterećenje", - "net": "Mreža", - "temp": "Temp", - "battery": "Baterija", - "services": "Usluge", - "uptime": "Vrijeme rada", - "agent": "Agent" - } + "description": "Prikaz kartice mreže svih Beszel nadziranih sustava s metrikama u stvarnom vremenu" }, "beszelAlerts": { "name": "Beszel upozorenja", @@ -3607,11 +5073,12 @@ } }, "empty": "Nema konfiguriranih upozorenja", - "error": { - "internalServerError": "Povezivanje s Beszelom nije moguće. Provjerite postavke integracije." - }, "history": "Povijest", "resolved": "Riješeno", + "alertDescription": { + "statusDuration": "Nedostupno {minutes} min", + "threshold": "Premašuje {value} tijekom {minutes} min" + }, "status": { "triggered": "Aktivirano", "ok": "U redu" @@ -3658,16 +5125,16 @@ "noSystems": "Nisu pronađeni sustavi" }, "error": { - "internalServerError": "Povezivanje s Beszelom nije moguće. Provjerite postavke integracije.", "liveConnectionFailed": "Veza uživo nije uspjela. Vaša instanca Beszela možda ne podržava streaming u stvarnom vremenu.", "switchToHistorical": "Prijeđi na povijesni prikaz", - "systemNotFound": "Odabrani sustav nije pronađen. Odaberite drugi sustav." + "systemNotFound": "Odabrani sustav nije pronađen. Odaberite drugi sustav.", + "selectionSaveTitle": "Odabir nije moguće spremiti", + "selectionSaveMessage": "Odabir sustava ili vremenskog razdoblja nije moguće spremiti. Pokušajte ponovno." }, "chart": { "cpu": { "title": "Upotreba CPU-a", - "subtitle": "Prosječna iskorištenost CPU-a na razini cijelog sustava", - "series": "CPU" + "subtitle": "Prosječna iskorištenost CPU-a na razini cijelog sustava" }, "memory": { "title": "Upotreba memorije", @@ -3709,289 +5176,550 @@ "title": "Docker mrežni I/O", "subtitle": "Mrežni promet Docker spremnika" } + }, + "period": { + "live": "Uživo", + "oneHour": "1 h", + "twelveHours": "12 h", + "oneDay": "24 h", + "oneWeek": "1 tjedan", + "thirtyDays": "30 dana" } }, - "patchmon": { - "name": "PatchMon", - "description": "Pregled stanja zakrpa računala iz PatchMona", - "title": "PatchMon statistika", - "totalHosts": "Ukupno računala", - "hostsNeedingUpdates": "Potrebna ažuriranja", - "securityUpdates": "Sigurnosna ažuriranja", - "upToDateHosts": "Ažurirana računala", - "hostsWithSecurityUpdates": "Računala sa sigurnosnim ažuriranjima", - "recentUpdates24h": "Ažuriranja (24 h)", - "totalOutdatedPackages": "Zastarjeli paketi", - "totalRepos": "Repozitoriji", - "osDistribution": "Distribucija OS-a", - "compliance": "Usklađenost zakrpa", - "complianceRatio": "{upToDate} / {total}", - "lastUpdated": "Ažurirano {time}", - "option": { - "showTotalHosts": { - "label": "Prikaži ukupan broj računala", - "description": "Prikaži ukupan broj nadziranih računala" - }, - "showHostsNeedingUpdates": { - "label": "Prikaži računala kojima su potrebna ažuriranja", - "description": "Prikaži računala s barem jednim zastarjelim paketom" - }, - "showSecurityUpdates": { - "label": "Prikaži sigurnosna ažuriranja", - "description": "Prikaži ukupan broj dostupnih sigurnosnih ažuriranja" - }, - "showUpToDateHosts": { - "label": "Prikaži ažurirana računala", - "description": "Prikaži računala bez zastarjelih paketa" - }, - "showHostsWithSecurityUpdates": { - "label": "Prikaži računala sa sigurnosnim ažuriranjima", - "description": "Prikaži računala kojima su potrebne sigurnosne zakrpe" - }, - "showRecentUpdates24h": { - "label": "Prikaži nedavna ažuriranja (24 h)", - "description": "Prikaži broj ažuriranja primijenjenih u posljednja 24 sata" - }, - "showTotalOutdatedPackages": { - "label": "Prikaži zastarjele pakete", - "description": "Prikaži ukupan broj zastarjelih paketa na svim računalima" - }, - "showTotalRepos": { - "label": "Prikaži repozitorije", - "description": "Prikaži broj aktivnih nadziranih repozitorija" - }, - "enableThresholdColors": { - "label": "Omogući boje pragova", - "description": "Oboji statističke vrijednosti zelenom, žutom ili crvenom bojom na temelju unaprijed postavljenih razina ozbiljnosti" - }, - "useCustomThresholds": { - "label": "Napredni pragovi", - "description": "Prilagodite pragove upozorenja i kritične pragove po statistici koristeći apsolutne brojeve ili postotke ukupnog broja računala" - }, - "thresholdMode": { - "option": { - "absolute": "Apsolutni broj", - "percent": "Postotak ukupnog broja računala" - } - }, - "hostsNeedingUpdatesThresholdMode": { - "label": "Način praga za potrebna ažuriranja", - "description": "Usporedite broj potrebnih ažuriranja kao apsolutnu vrijednost ili postotak ukupnog broja računala" - }, - "hostsNeedingUpdatesWarningAt": { - "label": "Prag upozorenja za potrebna ažuriranja", - "description": "Prikaži žutu boju kada vrijednost dosegne ovaj prag" - }, - "hostsNeedingUpdatesCriticalAt": { - "label": "Kritični prag za potrebna ažuriranja", - "description": "Prikaži crvenu boju kada vrijednost dosegne ovaj prag" - }, - "securityUpdatesThresholdMode": { - "label": "Način praga za sigurnosna ažuriranja", - "description": "Usporedite broj sigurnosnih ažuriranja kao apsolutnu vrijednost ili postotak ukupnog broja računala" - }, - "securityUpdatesWarningAt": { - "label": "Prag upozorenja za sigurnosna ažuriranja", - "description": "Prikaži žutu boju kada vrijednost dosegne ovaj prag" - }, - "securityUpdatesCriticalAt": { - "label": "Kritični prag za sigurnosna ažuriranja", - "description": "Prikaži crvenu boju kada vrijednost dosegne ovaj prag" - }, - "hostsWithSecurityUpdatesThresholdMode": { - "label": "Način praga za računala sa sigurnosnim ažuriranjima", - "description": "Usporedite broj računala kao apsolutnu vrijednost ili postotak ukupnog broja računala" - }, - "hostsWithSecurityUpdatesWarningAt": { - "label": "Prag upozorenja za računala sa sigurnosnim ažuriranjima", - "description": "Prikaži žutu boju kada vrijednost dosegne ovaj prag" - }, - "hostsWithSecurityUpdatesCriticalAt": { - "label": "Kritični prag za računala sa sigurnosnim ažuriranjima", - "description": "Prikaži crvenu boju kada vrijednost dosegne ovaj prag" - }, - "upToDateHostsThresholdMode": { - "label": "Način praga za ažurirana računala", - "description": "Usporedite broj ažuriranih računala kao apsolutnu vrijednost ili postotak ukupnog broja računala" - }, - "upToDateHostsWarningAt": { - "label": "Prag upozorenja za ažurirana računala", - "description": "Prikaži žutu boju kada je vrijednost na ili iznad ovog praga, ali ispod potpune pokrivenosti" - }, - "upToDateHostsCriticalAt": { - "label": "Kritični prag za ažurirana računala", - "description": "Prikaži crvenu boju kada vrijednost padne ispod ovog praga" - }, - "totalOutdatedPackagesThresholdMode": { - "label": "Način praga za zastarjele pakete", - "description": "Usporedite broj zastarjelih paketa kao apsolutnu vrijednost ili postotak ukupnog broja računala" - }, - "totalOutdatedPackagesWarningAt": { - "label": "Prag upozorenja za zastarjele pakete", - "description": "Prikaži žutu boju kada vrijednost dosegne ovaj prag" - }, - "totalOutdatedPackagesCriticalAt": { - "label": "Kritični prag za zastarjele pakete", - "description": "Prikaži crvenu boju kada vrijednost dosegne ovaj prag" - }, - "showOsDistribution": { - "label": "Prikaži distribuciju OS-a", - "description": "Prikaži raščlambu nadziranih računala prema operacijskom sustavu" - }, - "osDistributionLimit": { - "label": "Ograničenje distribucije OS-a", - "description": "Maksimalan broj operacijskih sustava za prikaz", - "option": { - "3": "Najviše 3", - "5": "Najviše 5", - "10": "Najviše 10", - "all": "Sve" - } - }, - "showOsVersion": { - "label": "Prikaži verziju OS-a", - "description": "Dodaj verziju OS-a svakoj oznaci distribucije kada je dostupna" - }, - "showComplianceHero": { - "label": "Prikaži sažetak usklađenosti", - "description": "Prikaži prsten usklađenosti koji pokazuje postotak ažuriranih računala" - }, - "osDisplayMode": { - "label": "Način prikaza OS-a", - "description": "Odaberite način prikaza distribucije operacijskog sustava", - "option": { - "bars": "Vodoravne trake", - "donut": "Kružni grafikon" - } - } + "assistant": { + "name": "Asistent", + "description": "Vodite potpuni razgovor s asistentom izravno na svojoj ploči.", + "unavailable": { + "title": "Asistent nije dostupan", + "description": "Prijavite se i zatražite od administratora da konfigurira Asistenta na upravljačkoj ploči." }, + "compact": { + "title": "Asistent", + "description": "Proširite ovaj widget za razgovor ovdje ili otvorite cijeli razgovor.", + "open": "Otvori asistenta", + "openTitle": "Asistent je otvoren na bočnoj ploči", + "openDescription": "Razgovor ostaje na jednoj aktivnoj površini.", + "returnToWidget": "Vrati razgovor u ovaj widget", + "otherWidgetTitle": "Asistent je aktivan u drugom widgetu", + "otherWidgetDescription": "Istodobno ostaje aktivna samo jedna površina razgovora.", + "useHere": "Upotrijebi asistenta u ovom widgetu" + } + }, + "beszel": { "error": { - "internalServerError": "Neuspješno dohvaćanje podataka iz PatchMona" - } - }, - "bazarr": { - "name": "Bazarr", - "description": "Pregled nedostajućih titlova i stanja ispravnosti vaše instance Bazarra", - "episodes": "Nedostajuće epizode", - "movies": "Nedostajući filmovi", - "providers": "Problemi s pružateljima", - "status": "Problemi sa stanjem ispravnosti", - "option": { - "showMissingEpisodes": { - "label": "Prikaži nedostajuće epizode", - "description": "Prikaži broj epizoda kojima nedostaju titlovi" - }, - "showMissingMovies": { - "label": "Prikaži nedostajuće filmove", - "description": "Prikaži broj filmova kojima nedostaju titlovi" - }, - "showProviderIssues": { - "label": "Prikaži probleme s pružateljima", - "description": "Prikaži broj pružatelja titlova s problemima" - }, - "showHealthIssues": { - "label": "Prikaži probleme sa stanjem ispravnosti", - "description": "Prikaži broj problema sa stanjem ispravnosti Bazarra" - } - }, - "error": { - "internalServerError": "Neuspješno dohvaćanje podataka iz Bazarra" - } - }, - "mediaMissing": { - "name": "Nedostajući i stavljeni mediji u red čekanja", - "description": "Prikazuje nedostajuće filmove i epizode te filmove i epizode u redu čekanja iz Radarra i Sonarra", - "option": { - "showMissing": { - "label": "Prikaži nedostajuće stavke" - }, - "showQueued": { - "label": "Prikaži stavke u redu čekanja" - }, - "pageSize": { - "label": "Stavke po stranici" - } - }, - "tab": { - "missing": "Nedostaje", - "queued": "U redu čekanja" - }, - "type": { - "movie": "Film", - "episode": "Epizoda" + "internalServerError": "Nije moguće povezati se s Beszelom. Provjerite postavke integracije." }, "empty": { - "missing": "Nema nedostajućih stavki", - "queued": "Nema stavki u redu čekanja", - "noTabsEnabled": "Omogućite barem jednu karticu u postavkama widgeta" + "noSystems": "Nisu pronađeni sustavi" }, - "timeLeft": "Preostalo vrijeme" - }, - "traefik": { - "name": "Traefik", - "description": "Pregled Traefikovih usmjerivača, usluga, međuprograme i ulaznih točaka", - "option": { - "showTcp": { - "label": "Prikaži TCP" + "options": { + "statusFilter": { + "label": "Filtar statusa" }, - "showUdp": { - "label": "Prikaži UDP" + "showCpu": { + "label": "Prikaži CPU" }, - "showEntryPoints": { - "label": "Prikaži ulazne točke" + "showMemory": { + "label": "Prikaži memoriju" + }, + "showDisk": { + "label": "Prikaži disk" + }, + "showGpu": { + "label": "Prikaži GPU" + }, + "showLoadAvg": { + "label": "Prikaži prosječno opterećenje" + }, + "showNet": { + "label": "Prikaži mrežu" + }, + "showTemp": { + "label": "Prikaži temperaturu" + }, + "showBattery": { + "label": "Prikaži bateriju" + }, + "showServices": { + "label": "Prikaži usluge" + }, + "showUptime": { + "label": "Prikaži vrijeme rada" + }, + "showAgent": { + "label": "Prikaži verziju agenta" } }, - "instances": "Traefikove instance", - "versionUnknown": "Verzija nije poznata", - "summary": { - "routers": "Usmjerivači", - "entryPoints": "Ulazne točke" - }, - "resource": { - "routers": "Usmjerivači", - "services": "Usluge", - "middlewares": "Međuprogrami" - }, - "status": { - "healthy": "Ispravno", - "errors": "{count} pogrešaka", - "warnings": "{count} upozorenja" - }, - "error": { - "internalServerError": "Neuspješno dohvaćanje podataka iz Traefika" + "metric": { + "system": "Sustav", + "source": "Integracija", + "hostname": "Naziv računala", + "cpuModel": "Model CPU-a", + "cores": "Jezgre", + "memoryTotal": "Ukupna memorija", + "memory": "Memorija", + "disk": "Disk", + "loadAvg": "Prosj. opterećenje", + "net": "Mreža", + "temp": "Temperatura", + "battery": "Baterija", + "uptime": "Vrijeme rada", + "agent": "Agent" } }, - "wud": { - "name": "What's Up Docker", - "description": "Prikaži koliko praćenih kontejnera ima dostupna ažuriranja.", - "title": "What's Up Docker", - "monitored": "Praćeno", - "updatesAvailable": "{count, plural, one {# dostupno ažuriranje} few {# dostupna ažuriranja} other {# dostupnih ažuriranja}}", - "updateAvailable": "Dostupno ažuriranje", - "openReleaseNotes": "Otvori bilješke o izdanju", + "llamacpp": { + "name": "llama.cpp", + "description": "Prikažite stanje, učitani model i brzinu generiranja lokalnog llama.cpp poslužitelja.", + "title": "llama.cpp", + "status": { + "unhealthy": "Nezdravo ({status})" + }, + "idle": "Neaktivno", + "speedTooltip": { + "current": "Trenutna brzina generiranja", + "average": "Prosječna brzina generiranja od pokretanja", + "request": "Prosječna brzina od početka ovog zahtjeva" + }, + "busy": "{count, plural, one {# zahtjev u tijeku} few {# zahtjeva u tijeku} other {# zahtjeva u tijeku}}", + "modelInfo": { + "context": "Kontekst", + "size": "Veličina datoteke", + "parameters": "Parametri", + "model": "Model", + "quantization": "Kvantizacija" + }, + "stats": { + "tokensProcessed": "Obrađeni tokeni", + "contextUsage": "Korištenje konteksta / KV-a", + "cacheHitRate": "Stopa pogodaka predmemorije upita", + "tokensGenerated": "Generirani tokeni" + }, + "error": { + "unreachable": "llama-server nije dostupan" + }, + "unit": { + "speed": "{value} t/s", + "parameters": "{value}B", + "none": "—", + "speedShort": "t/s" + }, "option": { "showTitle": { "label": "Prikaži naslov" }, - "showRing": { - "label": "Prikaži prsten ažuriranja" + "showModelInfo": { + "label": "Prikaži informacije o modelu" }, - "layout": { - "label": "Raspored", + "showContextUsage": { + "label": "Prikaži korištenje konteksta" + }, + "showCacheHitRate": { + "label": "Prikaži stopu pogodaka predmemorije" + }, + "showSpeedStats": { + "label": "Prikaži statistiku brzine" + }, + "showRequests": { + "label": "Prikaži opterećenje zahtjevima" + }, + "showTokenStats": { + "label": "Prikaži ukupne brojeve tokena" + }, + "showSpeculative": { + "label": "Prikaži spekulativno dekodiranje" + } + }, + "advanced": { + "promptSpeed": "Brzina upita", + "avgSpeed": "Prosječno generiranje", + "requests": "Zahtjevi", + "deferred": "Odgođeno", + "slots": "{processing}/{total} zauzetih utora", + "speculative": "Spekulativno dekodiranje", + "avgPrompt": "Prosječni upit", + "specDrafts": "Spekulativni nacrti", + "specAccepted": "Prihvaćeni spekulativni tokeni", + "specDraftTokens": "Tokeni spekulativnih nacrta" + } + }, + "stats": { + "name": "Statistika", + "description": "Kombinirajte statistiku svojih integracija u jednom podesivom widgetu.", + "configure": "Konfiguriraj metrike", + "refresh": "Osvježi statistiku", + "empty": "Otvorite postavke widgeta, odaberite integracije i zatim dodajte metrike.", + "editorHelp": "Dodajte metrike iz integracija odabranih za ovaj widget. Promjene se spremaju s nadzornom pločom.", + "source": "Integracija", + "metric": "Metrika", + "noMetrics": "Nema dostupne statistike za ovu integraciju", + "add": "Dodaj metriku", + "label": "Prilagođena oznaka", + "hidden": "Skriveno", + "compact": "Kompaktni brojevi", + "moveUp": "Pomakni se gore", + "moveDown": "Pomicati prema dolje", + "remove": "Ukloni metriku", + "loading": "Učitavanje…", + "unavailable": "Nedostupno", + "refreshFailed": "Osvježavanje nije uspjelo — prikazuju se spremljeni podaci", + "stale": "Spremljeni podaci — osvježite za ažuriranje", + "table": { + "value": "Vrijednost", + "status": "Stanje" + }, + "option": { + "table": { + "label": "Tablični prikaz" + }, + "rows": { + "label": "Kompaktni retci" + }, + "showIcon": { + "label": "Prikaži ikonu izvora" + }, + "spacing": { + "label": "Razmak", "option": { - "horizontal": { - "label": "Horizontalno" + "xs": { + "label": "Kompaktno" }, - "vertical": { - "label": "Okomito" + "sm": { + "label": "Udobno" + }, + "md": { + "label": "Prostrano" } } }, - "showUpdateList": { - "label": "Prikaži popis ažuriranja kontejnera", - "description": "Nabraja svaki nadzirani kontejner za koji je dostupno ažuriranje slike" + "entries": { + "label": "Metrike" + }, + "plain": { + "label": "Ukloni pozadine kartica" } - } + }, + "fetchFailed": "Statistiku nije moguće dohvatiti", + "viewOptions": "Prilagodi ovaj prikaz", + "moreMetrics": "Još {count} mjernih podataka u naprednom prikazu", + "localHelp": "Izgled, oblikovanje i vidljivost primjenjuju se samo na ovaj prikaz. Zajedničke postavke ploče ostaju iste.", + "plain": "Ukloni pozadine kartica", + "resetView": "Poništi prikaz", + "allHidden": "Sve su metrike skrivene u ovom prikazu. Upotrijebite opciju Prilagodi ovaj prikaz da biste ih vratili." + }, + "wazuh": { + "target": { + "api": "Wazuh poslužiteljski API", + "indexer": "Wazuh indeksator", + "wazuh": "Wazuh" + }, + "severity": { + "low": "Nisko", + "medium": "Srednji", + "high": "Visoko", + "critical": "Kritično" + }, + "error": { + "unauthorized": { + "title": "{target} je odbio vjerodajnice", + "description": "Provjerite korisničko ime i lozinku spremljene u Wazuh integraciji. Poslužiteljski API (ulaz 55000) i indeksator (ulaz 9200) koriste odvojene korisnike." + }, + "certificate": { + "title": "Certifikat za {target} nije pouzdan", + "description": "Wazuh prema zadanim postavkama koristi samopotpisani certifikat. Pokrenite „Testiraj vezu” na integraciji i vjerujte certifikatu ili dodajte svoj CA u Postavke → Certifikati." + }, + "unreachable": { + "title": "Nije moguće dosegnuti {target}", + "description": "Domaćin je odbio ili prekinuo vezu. Provjerite URL, ulaz i vatrozid. Indeksator prema zadanim postavkama sluša samo na localhostu u instalaciji sve-u-jednom." + }, + "timeout": { + "title": "Isteklo je vrijeme za {target}", + "description": "Nema odgovora u roku od 15 sekundi. Usluga je možda preopterećena ili je adresa pogrešna." + }, + "status": { + "title": "{target} je vratio pogrešku", + "description": "Zahtjev nije uspio s HTTP statusom {status}." + }, + "invalidResponse": { + "title": "Neočekivani odgovor od {target}", + "description": "Provjerite pokazuje li URL na Wazuh poslužiteljski API ili indeksator, a ne na nadzornu ploču." + }, + "indexerRequired": { + "title": "Potrebne su vjerodajnice za Wazuh indeksator", + "description": "Upozorenja, ranjivosti i događaji cjelovitosti datoteka čitaju se iz Wazuh indeksatora. Dodajte URL indeksatora, korisničko ime i lozinku u integraciju." + }, + "unknown": { + "title": "Nije moguće učitati podatke iz {target}", + "description": "Za pojedinosti provjerite Homarr zapisnike." + } + }, + "range": { + "1h": "1 h", + "24h": "24 h", + "7d": "7 dana", + "30d": "30 dana" + }, + "levelTooltip": "Razina pravila {level} ({severity})" + }, + "wazuhAgents": { + "name": "Wazuh agenti", + "description": "Sortirajući popis Wazuh agenata sa statusom, operacijskim sustavom, verzijom i vremenom posljednjeg održavanja veze", + "option": { + "statusFilter": { + "label": "Prikaži agente" + }, + "sortBy": { + "label": "Sortiraj prema" + }, + "showVersion": { + "label": "Prikaži stupac verzije Wazuha" + }, + "showGroups": { + "label": "Prikaži stupac grupa" + } + }, + "title": "Agenti", + "total": "{count} agenata", + "status": { + "active": "Aktivno", + "disconnected": "Odspojeno", + "neverConnected": "Nikad povezano", + "pending": "Na čekanju" + }, + "statusLabel": { + "active": "Aktivno", + "disconnected": "Odspojeno", + "never_connected": "Nikad povezano", + "pending": "Na čekanju", + "unknown": "Nepoznato" + }, + "live": "Uživo", + "snapshot": "Snimka je stara {age}", + "snapshotHint": "Pročitano iz snimke agenata nadzorne ploče Wazuh (wazuh-monitoring), snimljene u {time}. Dodajte vjerodajnice API-ja poslužitelja za podatke uživo.", + "staleSnapshot": "Snimka agenata iz {time} zastarjela je. Provjerite radi li posao nadzora nadzorne ploče Wazuh ili dodajte vjerodajnice API-ja poslužitelja.", + "noDisconnected": "Svi su agenti povezani", + "empty": "Nijedan agent ne odgovara ovom filtru", + "column": { + "status": "Stanje", + "name": "Naziv posla", + "ip": "IP", + "os": "OS", + "version": "Verzija", + "lastKeepAlive": "Održavanje veze", + "groups": "Grupe" + }, + "outdated": "Starije od najnovije verzije agenta ({version})" + }, + "wazuhAlerts": { + "name": "Izvor Wazuhovih upozorenja", + "description": "Nedavna Wazuhova upozorenja s razinom, tehnikama MITRE ATT&CK, agentom i izvornom IP adresom", + "option": { + "minLevel": { + "label": "Minimalna razina pravila", + "description": "Razine Wazuha: 0–6 niska, 7–11 srednja, 12–14 visoka, 15+ kritična" + }, + "hours": { + "label": "Vremenski prozor (sati)" + }, + "limit": { + "label": "Broj upozorenja" + }, + "showMitre": { + "label": "Prikaži tehnike MITRE ATT&CK" + }, + "showAgent": { + "label": "Prikaži agenta" + }, + "showSourceIp": { + "label": "Prikaži izvornu IP adresu" + }, + "showRuleId": { + "label": "Prikaži ID pravila" + } + }, + "title": "Upozorenja · razina {level}+ · {hours} h", + "empty": "Nema upozorenja na ovoj razini. Sve je mirno.", + "rule": "Pravilo {id}", + "openInDashboard": "Otvori ovo upozorenje na Wazuhovoj nadzornoj ploči" + }, + "wazuhSummary": { + "name": "Ozbiljnost Wazuhovih upozorenja", + "description": "Pregled ozbiljnosti upozorenja s trendom u odnosu na prethodno razdoblje", + "option": { + "range": { + "label": "Vremenski raspon" + }, + "showTrend": { + "label": "Prikaži trend u odnosu na prethodno razdoblje" + }, + "showFooter": { + "label": "Prikaži podnožje" + } + }, + "title": "Ozbiljnost upozorenja · {range}", + "alerts": "upozorenja", + "none": "Nema upozorenja", + "trend": { + "new": "novo", + "tooltip": "Prethodno razdoblje: {previous}" + }, + "previous": "Prethodno {range}: {count}", + "maxLevel": "Maks. razina {level}", + "health": "Stanje indeksatora: {status}", + "manager": "Upravitelj {version}" + }, + "wazuhTimeline": { + "name": "Vremenska crta Wazuhovih upozorenja", + "description": "Složeni grafikon Wazuhovih upozorenja tijekom vremena prema ozbiljnosti", + "option": { + "range": { + "label": "Vremenski raspon" + }, + "interval": { + "label": "Interval" + }, + "chartType": { + "label": "Vrsta grafikona" + }, + "yScale": { + "label": "Mjerilo osi Y", + "description": "Kvadratni korijen održava visoka i kritična upozorenja vidljivima uz tisuće niskih" + }, + "minLevel": { + "label": "Minimalna razina pravila" + }, + "showLegend": { + "label": "Prikaži legendu s ukupnim vrijednostima" + } + }, + "title": "Vremenska crta upozorenja · {range}", + "total": "{count} upozorenja", + "interval": "po {interval}" + }, + "wazuhTopList": { + "name": "Wazuhov popis najčešćih", + "description": "Najčešća pravila, agenti, izvorne IP adrese ili MITRE ATT&CK taktike i tehnike prema broju upozorenja", + "option": { + "kind": { + "label": "Rang" + }, + "range": { + "label": "Vremenski raspon" + }, + "limit": { + "label": "Broj unosa" + }, + "minLevel": { + "label": "Minimalna razina pravila" + }, + "showBars": { + "label": "Prikaži trake" + } + }, + "title": { + "rules": "Najčešća pravila · {range}", + "agents": "Najčešći agenti · {range}", + "sourceIps": "Najčešće izvorne IP adrese · {range}", + "mitreTactics": "MITRE taktike · {range}", + "mitreTechniques": "MITRE tehnike · {range}" + }, + "empty": { + "rules": "Nema upozorenja u ovom razdoblju", + "agents": "Nema upozorenja u ovom razdoblju", + "sourceIps": "Nema upozorenja s izvornom IP adresom u ovom razdoblju", + "mitreTactics": "Nema upozorenja mapiranih na MITRE ATT&CK u ovom razdoblju", + "mitreTechniques": "Nema upozorenja mapiranih na MITRE ATT&CK u ovom razdoblju" + }, + "totalTooltip": "{count} podudarajućih upozorenja", + "private": "LAN", + "public": "Javno", + "agents": "Viđeno na {count} agenata", + "others": "Još {count} upozorenja u drugim unosima" + }, + "wazuhVulnerabilities": { + "name": "Wazuh ranjivosti", + "description": "Broj ranjivosti, najčešći CVE-ovi i najranjiviji agenti", + "option": { + "cveOrder": { + "label": "Rangiraj CVE-ove prema" + }, + "minSeverity": { + "label": "Ozbiljnost CVE-a" + }, + "cveLimit": { + "label": "Broj CVE-ova" + }, + "agentLimit": { + "label": "Broj agenata" + }, + "showAgents": { + "label": "Prikaži najranjivije agente" + } + }, + "title": "Ranjivosti", + "topCves": "Najčešći CVE-ovi", + "score": "Bodovi", + "agentsShort": "Agenti", + "topAgents": "Najranjiviji agenti", + "criticalHigh": "Kritično / Visoko", + "totalTooltip": "{count} nalaza na {agents} agenata", + "affected": "{count} agenata", + "empty": "Nisu otkrivene ranjivosti", + "distribution": "Raspodjela ozbiljnosti. {unscored} nalaza bez bodova nije prikazano.", + "worst": "Najgore: {id} ({score}) na {agents} agenata" + }, + "wazuhFim": { + "name": "Wazuh cjelovitost datoteka", + "description": "Nedavni događaji nadzora cjelovitosti datoteka (syscheck)", + "option": { + "range": { + "label": "Vremenski raspon" + }, + "event": { + "label": "Događaji" + }, + "limit": { + "label": "Broj događaja" + }, + "includeRegistry": { + "label": "Uključi događaje registra sustava Windows" + } + }, + "title": "Cjelovitost datoteka · {range}", + "event": { + "added": "Datum dodavanja", + "modified": "Izmijenjeno", + "deleted": "Izbrisano", + "unknown": "Promijenjeno" + }, + "empty": "Nema događaja cjelovitosti datoteka u ovom razdoblju", + "user": "od korisnika {user}", + "registry": "Registar" + }, + "wazuhAuthFailures": { + "name": "Neuspjele Wazuh provjere autentičnosti", + "description": "Neuspjele prijave i upozorenja na pokušaje grubom silom po agentu s grafikonima po satima", + "option": { + "hours": { + "label": "Vremenski prozor (sati)" + }, + "limit": { + "label": "Broj agenata" + }, + "showSourceIps": { + "label": "Prikaži najčešće izvorne IP adrese" + } + }, + "title": "Neuspjele provjere autentičnosti · {hours} h", + "seriesTooltip": "Svi agenti tijekom posljednjih {hours} h", + "peak": "Vrh: {count}/skupini", + "empty": "Nema neuspjelih prijava u ovom razdoblju", + "failed": "Neuspjele prijave", + "failedHint": "Pojedinačne neuspjele provjere autentičnosti (sshd, PAM, prijava u sustav Windows, nevažeći korisnici)", + "bruteForce": "Gruba sila", + "bruteForceHint": "Korelirana pravila grube sile (više neuspjeha u kratkom razdoblju, MITRE T1110)", + "sourceIps": "Izvorne IP adrese", + "ipTooltip": "{ip}: {count} neuspjeha", + "bruteForceCount": "{count} napada grubom silom" } }, "widgetPreview": { @@ -4004,7 +5732,76 @@ } }, "board": { + "emptyState": { + "title": "Izradite svoj prvi prikaz", + "description": "Dodajte widget ili aplikaciju, povežite uslugu i upotrijebite njezine podatke na ovoj ploči.", + "addWidget": "Dodaj widget", + "addApp": "Dodaj aplikaciju", + "connectService": "Poveži uslugu" + }, + "setupChecklist": { + "title": "Učinite ovu ploču korisnom", + "description": "Nastavite gdje ste stali. Napredak prati sadržaj koji se već nalazi na ovoj ploči.", + "collapse": "Sažmi kontrolni popis za postavljanje", + "dismiss": "", + "resume": "Nastavi postavljanje ({completed}/{total})", + "progress": "Napredak postavljanja ploče", + "step": { + "content": { + "label": "Dodaj koristan sadržaj.", + "description": "Odaberite widget i konfigurirajte ga prije postavljanja." + }, + "app": { + "label": "Prikvači aplikaciju", + "description": "Držite uslugu ili alat na ovoj ploči udaljenim jednim klikom." + }, + "service": { + "label": "Poveži uslugu", + "description": "Otključajte podatke uživo i radnje za kompatibilne widgete.", + "permissionDescription": "Administrator može povezati uslugu kako bi otključao podatke uživo.", + "action": "Poveži" + } + } + }, "action": { + "addContent": "Dodaj sadržaj ploče", + "settings": "Postavke ploče", + "switch": "Promijeni ploču", + "switcher": { + "title": "Promijeni ploču", + "search": { + "empty": "Nijedna ploča ne odgovara izrazu \"{search}\"." + }, + "results": "Dostupne ploče", + "preview": "Pregled ploče {name} s {count} stavki", + "currentHidden": "Trenutačna ploča: {name}", + "keyboard": { + "navigate": "Navigacija", + "open": "Otvori", + "instructions": "Upišite tekst za filtriranje ploča. Tipkama sa strelicama prolazite kroz rezultate, a tipkom Enter otvarate ploču." + }, + "empty": { + "title": "Nema drugih ploča", + "description": "Nema drugih ploča kojima možete pristupiti." + }, + "error": "Ploče nije moguće učitati." + }, + "create": { + "availability": { + "checking": "Provjera dostupnosti…", + "available": "{name} je dostupan" + }, + "notification": { + "success": { + "title": "Ploča je kreirana", + "message": "Ploča {name} je kreirana" + }, + "error": { + "title": "Nije moguće kreirati ploču", + "message": "Ploču {name} nije moguće kreirati" + } + } + }, "duplicate": { "title": "Dupliciraj ploču", "message": "Time će se duplicirati ploča {name} sa svim njezinim sadržajem. Ako se widgeti pozivaju na integracije koje ne smijete koristiti, one će biti uklonjene.", @@ -4020,14 +5817,19 @@ } }, "edit": { + "enter": "Uredi ploču", + "save": "Spremi ploču", + "exit": "Izađi iz načina uređivanja", "notification": { "success": { - "title": "Promjene su uspješno primijenjene", "message": "Ploča je uspješno spremljena" }, "error": { - "title": "Nije moguće primijeniti promjene", "message": "Ploču nije moguće spremiti" + }, + "loadError": { + "title": "Nije moguće pokrenuti uređivanje", + "message": "Uređivač ploče nije moguće učitati. Nadzorna ploča i dalje je dostupna u načinu prikaza." } }, "confirmLeave": { @@ -4035,62 +5837,6 @@ "message": "Imate nespremljene promjene, jeste li sigurni da želite otići?" } }, - "oldImport": { - "label": "Uvoz iz homarr prije 1.0.0", - "notification": { - "success": { - "title": "Uvoz uspješan", - "message": "Ploča je uspješno uvezena" - }, - "error": { - "title": "Uvoz nije uspio", - "message": "Ploču nije bilo moguće uvesti, provjerite zapise za više detalja" - } - }, - "form": { - "file": { - "label": "Odaberite JSON datoteku", - "invalidError": "Nevažeća konfiguracijska datoteka" - }, - "apps": { - "label": "aplikacije", - "avoidDuplicates": { - "label": "Izbjegni duplikate", - "description": "Zanemaruje aplikacije kod kojih već postoji aplikacija s istim href-om" - }, - "onlyImportApps": { - "label": "Uvezi samo aplikacije", - "description": "Dodaje samo aplikacije, ploču treba ručno rekreirati" - } - }, - "name": { - "label": "Naziv ploče" - }, - "screenSize": { - "label": "Veličina zaslona", - "description": "U verzijama prije 1.0 postojala su tri različita načina rada, pa ste mogli odabrati broj stupaca za svaku veličinu zaslona.", - "option": { - "sm": "Mali", - "md": "Srednji", - "lg": "velika" - } - }, - "sidebarBehavior": { - "label": "Ponašanje bočne trake", - "description": "Bočne trake su uklonjene u 1.0, možete odabrati što bi se trebalo dogoditi sa stavkama unutar njih.", - "option": { - "lastSection": { - "label": "Posljednji odjeljak", - "description": "Bočna traka će biti prikazana ispod posljednjeg odjeljka" - }, - "removeItems": { - "label": "Ukloni stavke", - "description": "Stavke unutar bočne trake bit će uklonjene" - } - } - } - } - }, "quickCreateApp": { "modal": { "title": "Stvori aplikaciju u hodu", @@ -4098,6 +5844,12 @@ } } }, + "landmark": { + "canvas": "Platno nadzorne ploče", + "leftRail": "Lijeva traka nadzorne ploče", + "rightRail": "Desna traka nadzorne ploče", + "items": "Stavke nadzorne ploče" + }, "field": { "pageTitle": { "label": "Naslov stranice" @@ -4167,7 +5919,8 @@ } }, "primaryColor": { - "label": "Primarna boja" + "label": "Primarna boja", + "locked": "Administrator zadržava boju robne marke instance na svakoj ploči." }, "secondaryColor": { "label": "Sekundarna boja" @@ -4207,9 +5960,6 @@ "xl": "Vrlo velika" } }, - "name": { - "label": "Naziv" - }, "isPublic": { "label": "Javno", "description": "Javne ploče su dostupne svima, čak i bez računa." @@ -4229,9 +5979,44 @@ "title": "Raspored", "responsive": { "title": "Responzivni rasporedi", + "description": "Svaki raspored ima vlastite položaje i veličine widgeta. Mobilni i osnovni raspored uvijek su dostupni; dodajte prilagođene rasporede na bilo kojoj dodatnoj prijelomnoj točki.", "action": { "add": "Dodaj raspored" } + }, + "role": { + "mobile": "Mobilni", + "base": "Osnovni", + "custom": "Prilagođeni" + }, + "custom": { + "defaultName": "Prilagođeni raspored" + }, + "mobile": { + "breakpointDescription": "Mobilni raspored uvijek se koristi od 0 px do sljedeće prijelomne točke rasporeda." + }, + "preview": { + "columns": "stupci", + "empty": "Ovaj je raspored prazan", + "dynamicSection": "Dinamički odjeljak", + "editorWidthLabel": "{layoutName} · {width} px" + }, + "reset": { + "action": "Vrati iz osnovnog rasporeda", + "confirm": { + "title": "Vrati {layoutName}?", + "message": "Time će se svaki spremljeni položaj i veličina u ovom rasporedu zamijeniti novim rasporedom generiranim iz osnovnog rasporeda. Ovu radnju nije moguće poništiti." + } + }, + "edit": { + "action": "Uredi raspored", + "saveAndEdit": "Spremi i uredi", + "save": "Spremi raspored", + "cancel": { + "action": "Otkaži uređivanje rasporeda", + "title": "Odbaciti promjene rasporeda?", + "message": "Nespremljene promjene ovog rasporeda bit će odbačene." + } } }, "background": { @@ -4268,10 +6053,7 @@ "rename": { "label": "Preimenuj ploču", "description": "Promjena naziva prekinut će sve poveznice na ovu ploču.", - "button": "Promijeni naziv", - "modal": { - "title": "Preimenuj ploču" - } + "button": "Promijeni naziv" }, "visibility": { "label": "Promijeni vidljivost ploče", @@ -4295,9 +6077,7 @@ } }, "delete": { - "label": "Izbriši ovu ploču", "description": "Jednom kad izbrišete ploču, nema povratka. Budite sigurni.", - "button": "Izbriši ovu ploču", "confirm": { "title": "Izbriši ploču", "description": "Jeste li sigurni da želite izbrisati ovu ploču? To će trajno izbrisati ploču i sav njezin sadržaj." @@ -4342,28 +6122,41 @@ }, "layout": { "field": { - "name": { - "label": "Naziv" - }, "columnCount": { "label": "Broj stupaca" }, "breakpoint": { "label": "Prijelomna točka", "description": "Raspored će se koristiti na svim zaslonima većima od ove prijelomne točke do sljedeće veće prijelomne točke." + }, + "gutters": { + "label": "Fiksne bočne trake", + "description": "Rezervirajte do tri stupca nadzorne ploče sa svake strane. Preostalo platno automatski se preraspoređuje.", + "left": { + "label": "Lijeva bočna traka", + "description": "Ovo područje ostaje vidljivo dok se nadzorna ploča pomiče.", + "thumbLabel": "Širina lijeve bočne trake" + }, + "right": { + "label": "Desna bočna traka", + "description": "Ovo područje ostaje vidljivo dok se nadzorna ploča pomiče.", + "thumbLabel": "Širina desne bočne trake" + }, + "width": { + "label": "Širina u stupcima" + }, + "preview": { + "label": "Pregled rasporeda nadzorne ploče" + } } } }, "management": { "metaTitle": "Upravljanje", - "title": { - "morning": "Dobro jutro, {username}", - "afternoon": "Dobar dan, {username}", - "evening": "Dobra večer, {username}" - }, "notFound": { "title": "Nije pronađeno", - "text": "Nije moguće pronaći traženi resurs" + "text": "Nije moguće pronaći traženi resurs", + "backToHome": "Natrag na početnu stranicu upravljanja" }, "error": { "title": "Učitavanje ove stranice nije uspjelo", @@ -4372,19 +6165,10 @@ }, "navbar": { "items": { - "workshop": "Workshop", "home": "Dom", - "boards": "Daske", - "apps": "aplikacije", - "integrations": "Integracije", - "searchEngies": "Tražilice", - "medias": "Mediji", "users": { - "label": "Korisnici", "items": { - "manage": "Upravljati", - "invites": "poziva", - "groups": "Grupe" + "manage": "Upravljati" } }, "tools": { @@ -4392,10 +6176,7 @@ "items": { "docker": "Docker", "kubernetes": "Kubernetes", - "logs": "Zapisi", "api": "API i MCP", - "certificates": "Certifikati", - "tasks": "Zadaci", "backup": "Sigurnosna kopija" } }, @@ -4409,21 +6190,12 @@ "sourceCode": "Izvorni kod" } }, - "about": "O aplikaciji" + "about": "O aplikaciji", + "assistant": "Asistent" } }, "page": { "home": { - "statistic": { - "board": "Daske", - "user": "Korisnici", - "invite": "poziva", - "integration": "Integracije", - "app": "aplikacije", - "group": "Grupe", - "searchEngine": "Tražilice", - "media": "Mediji" - }, "statisticLabel": { "boards": "Daske", "resources": "Resursi", @@ -4461,13 +6233,8 @@ "tooltip": "Ova će se ploča prikazivati kao vaša mobilna ploča" } }, - "duplicate": { - "label": "Dupliciraj ploču" - }, "delete": { - "label": "Izbriši trajno", "confirm": { - "title": "Izbriši ploču", "description": "Jeste li sigurni da želite izbrisati {name} ploču?" } } @@ -4476,28 +6243,82 @@ "public": "Ova ploča je javna", "private": "Ova ploča je privatna" }, - "noResults": { - "title": "Još nema ploča" + "preview": { + "label": "Pregled rasporeda za {name} s {count} stavki", + "unknownCreator": "Nepoznati autor" }, - "modal": { - "createBoard": { - "field": { - "name": { - "label": "Naziv" - } - } - } + "noResults": { + "title": "Još nema ploča", + "description": "Kreirajte ploču za organiziranje aplikacija i widgeta na jednom mjestu." } }, "media": { "includeFromAllUsers": "Uključi medije svih korisnika" }, "user": { - "back": "Natrag na korisnike", "fieldsDisabledExternalProvider": "Određena polja su onemogućena jer njima upravlja vanjski pružatelj autentifikacije.", "setting": { "general": { "title": "Općenito", + "header": { + "title": "Uređivač zaglavlja", + "badge": "Osobno", + "description": "Povucite kontrole bilo gdje u retku. Lijeva, središnja i desna ostaju fiksne dok se kontrole pomiču oko njih.", + "device": { + "desktop": "Računalo", + "mobile": "Mobilni" + }, + "zones": { + "left": "Lijevo", + "center": "Sredina", + "right": "Pravo" + }, + "action": { + "hide": "Sakrij zaglavlje", + "show": "Prikaži zaglavlje", + "configure": "Premjesti ili konfiguriraj {item}", + "remove": "Ukloni {item}", + "dropIntoZone": "Premjesti u odjeljak {zone}" + }, + "preview": { + "board": "Pregled nadzorne ploče za {name}", + "empty": "Nijedan raspored nadzorne ploče nije dostupan" + }, + "available": { + "title": "Dostupne kontrole", + "description": "Dodajte kontrolu, a zatim povucite cijeli gumb na željeno mjesto iznad.", + "requiredAlways": "Ova je kontrola obavezna, ali možete je premjestiti bilo gdje u zaglavlju.", + "allAdded": "Sve ugrađene kontrole već su u vašem zaglavlju.", + "add": "Dodaj {item}", + "boardShortcut": "Prečac ploče", + "chooseBoard": "Odaberite ploču" + }, + "configuration": { + "description": "Ova kontrola ostaje iste veličine kao u zaglavlju uživo.", + "searchDisplay": { + "input": "Traka za pretraživanje", + "icon": "Samo ikona" + }, + "logoDisplay": { + "logo": "Samo logotip", + "logoAndText": "Logotip + tekst" + } + }, + "items": { + "logo": "Logotip", + "search": "traži", + "home": "Početna ploča", + "boardSwitcher": "Daske", + "assistant": "Asistent", + "docker": "Docker", + "boardEdit": "Uredi ploču", + "boardSettings": "Postavke ploče", + "settings": "Vaše postavke", + "themeToggle": "Promijeni temu", + "user": "Račun", + "boardUnavailable": "Ploča nije dostupna" + } + }, "item": { "language": "Jezik i regija", "board": { @@ -4531,14 +6352,10 @@ }, "security": { "title": "Sigurnost" - }, - "board": { - "title": "Daske" } }, "list": { - "metaTitle": "Upravljanje korisnicima", - "title": "Korisnici" + "metaTitle": "Upravljanje korisnicima" }, "edit": { "metaTitle": "Uredi korisnika {username}" @@ -4592,9 +6409,6 @@ } }, "field": { - "id": { - "label": "iskaznica" - }, "creator": { "label": "Stvoritelj" }, @@ -4618,10 +6432,7 @@ }, "setting": { "title": "Postavke", - "alert": "Postavke grupa određene su redoslijedom grupa na popisu. Gornje postavke nadjačavaju donje.", - "board": { - "title": "Ploče" - } + "alert": "Postavke grupa određene su redoslijedom grupa na popisu. Gornje postavke nadjačavaju donje." }, "members": { "title": "Članovi", @@ -4629,10 +6440,7 @@ "notFound": "Nema pronađenih članova" }, "permissions": { - "title": "Dopuštenja", - "form": { - "unsavedChanges": "Imate nespremljene promjene!" - } + "title": "Dopuštenja" } } }, @@ -4641,12 +6449,10 @@ "notification": { "success": { "message": "Postavke su uspješno spremljene" - }, - "error": { - "message": "Spremanje postavki nije uspjelo" } }, "section": { + "analyticsDocumentation": "Pogledajte točno koje analitičke podatke Homarr prikuplja", "analytics": { "title": "Analitika", "general": { @@ -4675,7 +6481,6 @@ } }, "board": { - "title": "Daske", "homeBoard": { "label": "Globalna početna ploča", "mobileLabel": "Globalna mobilna ploča", @@ -4694,7 +6499,6 @@ } }, "user": { - "title": "Korisnici", "enableGravatar": { "label": "Omogući Gravatar", "description": "Vraća se na korisničke avatare iz usluga Libravatar/Gravatar kada nije postavljen prilagođeni avatar i konfigurirana je e-pošta" @@ -4710,12 +6514,86 @@ "appearance": { "title": "Izgled", "defaultColorScheme": { - "label": "Zadana shema boja", + "label": "Zadana shema boja" + } + }, + "branding": { + "title": "Brendiranje instance", + "groups": { + "identity": "Identitet", + "appearance": "Izgled", + "customCss": "Prilagođeni CSS", + "authentication": "Provjera autentičnosti" + }, + "identity": { + "description": "Logotip aplikacije veća je oznaka koja se koristi unutar aplikacije, na stranicama za prijavu i u instaliranim aplikacijama. Ikona preglednika (favicon) mali je kvadrat koji se koristi na karticama i u oznakama; kada je prazna, koristi se logotip aplikacije." + }, + "appName": { + "label": "Naziv aplikacije" + }, + "greeting": { + "label": "Prilagođeni pozdrav" + }, + "logo": { + "label": "Logotip aplikacije", + "placeholder": "/logo/logo.png" + }, + "favicon": { + "label": "Ikona preglednika (favicon)", + "placeholder": "Koristi logotip aplikacije" + }, + "primaryColor": { + "label": "Primarna boja" + }, + "secondaryColor": { + "label": "Sekundarna boja" + }, + "lockPrimaryColor": { + "label": "Zadrži ovu boju na svakoj ploči", + "description": "Sprječava da boje ploče zamijene naglašenu boju aplikacije." + }, + "signInBackground": { + "label": "Pozadina provjere autentičnosti", + "placeholder": "https://example.com/background.jpg" + }, + "signInOverlay": { + "label": "Prekrivanje pozadine" + }, + "defaultRadius": { + "label": "Stil kutova", "options": { - "auto": "Automatski", - "light": "Svijetla", - "dark": "Tamna" + "xs": "Uski", + "sm": "Suptilno", + "md": "Uravnoteženi", + "lg": "Zaobljeni", + "xl": "Blagi" } + }, + "customCss": { + "label": "Globalni prilagođeni CSS", + "description": "Primjenjuje se na svaku stranicu. Prilagođeni CSS ploče može ga nadjačati." + }, + "authVisibility": { + "description": "Odaberite što će se prikazivati na svakoj stranici za provjeru autentičnosti.", + "appName": "Naziv aplikacije", + "logo": "Logotip aplikacije", + "greeting": "Pozdrav" + }, + "summary": { + "title": "Trenutačno brendiranje", + "cornerStyle": "Stil kutova", + "palette": "Paleta", + "backgroundConfigured": "Prilagođena pozadina · prekrivanje {overlay} %", + "backgroundDefault": "Zadana pozadina", + "greetingConfigured": "Prilagođeni pozdrav", + "greetingDefault": "Zadani pozdrav", + "boardColorLocked": "Boja ploče zaključana", + "boardColorFlexible": "Boje ploče dopuštene", + "appName": "Naziv posla", + "logo": "Logotip", + "greeting": "Pozdrav", + "on": "Uključeno", + "off": "Isključeno" } }, "culture": { @@ -4723,12 +6601,177 @@ "defaultLocale": { "label": "Zadani jezik" } + }, + "assistant": { + "loading": "Učitavanje konfiguracije asistenta", + "title": "Asistent", + "description": "Povežite krajnju točku modela kompatibilnu s OpenAI-jem za asistenta na razini instance.", + "security": { + "description": "API ključevi i dodatne vrijednosti zaglavlja šifrirani su u bazi podataka Homarr. Nikad se ne vraćaju preglednicima. Zahtjevi modela šalju se izravno s poslužitelja Homarr na konfiguriranu krajnju točku." + }, + "overview": { + "connectionReady": "Veza je spremna", + "unsavedChanges": "Nespremljene promjene", + "setupRequired": "Potrebno postavljanje", + "disabled": "Onemogućeno", + "noModel": "Nijedan model nije odabran" + }, + "connection": { + "endpointTitle": "Pružatelj i krajnja točka", + "description": "Odaberite unaprijed postavljenu opciju ili povežite bilo koju uslugu koja implementira OpenAI Chat Completions API.", + "save": "Spremi vezu s pružateljem" + }, + "credentials": { + "title": "Vjerodajnice", + "description": "Dodajte tajne koje ova krajnja točka zahtijeva. Spremljene vrijednosti ostaju šifrirane i nije ih moguće ponovno pročitati.", + "required": "Ključ je obavezan", + "optional": "Ključ nije obavezan", + "workshop": "GitHub prijava po korisniku" + }, + "provider": { + "title": "Davatelj", + "groups": { + "free": "Besplatno uz Homarr", + "hosted": "Udomljeni pružatelji", + "local": "Lokalni pružatelji", + "custom": "Prilagođeno" + }, + "options": { + "homarr": { + "description": "Ograničen broj korištenja asistenta svakog je dana besplatan, a plaća ga tim Homarr. Prijavite se putem Community Workshopa kako biste iskoristili svoju kvotu." + }, + "openrouter": { + "description": "Usmjeravanje udomljenih modela s velikim katalogom modela koji podržavaju alate." + }, + "openai": { + "description": "OpenAI Chat Completions putem službene API krajnje točke." + }, + "anthropic": { + "description": "Claude putem krajnje točke Anthropic SDK-a kompatibilne s OpenAI-jem." + }, + "google-gemini": { + "description": "Gemini putem Googleove API krajnje točke kompatibilne s OpenAI-jem." + }, + "xai": { + "description": "Grok modeli putem API-ja xAI kompatibilnog s OpenAI-jem." + }, + "groq": { + "description": "Brzo udomljeno izvođenje putem API-ja Groq kompatibilnog s OpenAI-jem." + }, + "mistral": { + "description": "Mistral modeli putem službenog API-ja." + }, + "deepseek": { + "description": "DeepSeek modeli putem njegova API-ja kompatibilnog s OpenAI-jem." + }, + "together": { + "description": "Udomljeni otvoreni modeli putem API-ja Together kompatibilnog s OpenAI-jem." + }, + "ollama": { + "description": "Lokalni ili mrežni poslužitelj Ollama koji koristi API kompatibilan s OpenAI-jem." + }, + "lm-studio": { + "description": "Lokalni poslužitelj LM Studio s omogućenom kompatibilnošću s OpenAI-jem." + }, + "llama-cpp": { + "description": "Lokalni ili mrežni poslužitelj llama.cpp koji koristi API kompatibilan s OpenAI-jem." + }, + "custom": { + "label": "Prilagođena krajnja točka", + "description": "Bilo koja druga krajnja točka kompatibilna s OpenAI Chat Completionsom." + } + }, + "homarrAuth": { + "title": "Uključeno besplatno dnevno korištenje asistenta", + "description": "API ključ nije potreban. Tim Homarr svakog dana pokriva ograničen broj korištenja asistenta za vas. Prijavite se putem Community Workshopa kako biste kvotu zadržali odvojenom." + } + }, + "baseUrl": { + "title": "Osnovni URL API-ja", + "description": "Uključite prefiks API-ja, obično /v1. U spremnicima localhost se odnosi na spremnik Homarr." + }, + "apiKey": { + "title": "API ključ", + "required": "Ovaj ga pružatelj zahtijeva. Vrijednost je šifrirana i moguće ju je samo zapisivati.", + "optional": "Neobavezno za lokalne krajnje točke. Ostavite prazno kada usluga ne zahtijeva provjeru autentičnosti nositelja.", + "placeholder": "Unesite API ključ", + "savedTitle": "Šifrirani API ključ spremljen", + "savedDescription": "Homarr može koristiti ovaj ključ, ali ne može prikazati ni vratiti njegovu vrijednost.", + "remove": "Ukloni spremljeni API ključ", + "removeFlow": { + "title": "Ukloniti spremljeni API ključ?", + "description": "Ovaj pružatelj zahtijeva API ključ. Njegovo uklanjanje može zaustaviti otkrivanje modela i odgovore asistenta dok se ne spremi drugi ključ.", + "optionalDescription": "Krajnja točka prestat će primati provjeru autentičnosti nositelja nakon uklanjanja ovog ključa. Potvrdite da prihvaća neautorizirane zahtjeve ili koristi drugo spremljeno zaglavlje.", + "cancel": "Zadrži spremljeni ključ", + "confirm": "Ukloni API ključ" + } + }, + "headers": { + "title": "Dodatna zaglavlja zahtjeva", + "description": "Neobavezna zaglavlja za provjeru autentičnosti ili usmjeravanje. Vrijednosti zaglavlja šifrirane su i moguće ih je samo zapisivati.", + "add": "Dodaj zaglavlje", + "name": "Naziv zaglavlja", + "value": "Vrijednost zaglavlja", + "valuePlaceholder": "Tajna vrijednost ili vrijednost usmjeravanja", + "remove": "Ukloni zaglavlje", + "configured": "Konfigurirana su dodatna šifrirana zaglavlja. Dodavanje zaglavlja zamjenjuje cijeli spremljeni skup.", + "empty": "Za ovog pružatelja nisu spremljena dodatna zaglavlja.", + "savedBadge": "Zaglavlja spremljena", + "pendingRemoval": "Uklanjanje na čekanju", + "clear": "Ukloni spremljena zaglavlja prilikom spremanja", + "keep": "Zadrži spremljena zaglavlja" + }, + "model": { + "title": "Model", + "description": "Odaberite otkriveni model ili unesite točan ID modela krajnje točke.", + "placeholder": "ID modela", + "refresh": "Osvježi modele", + "chooseModel": "Odaberite model koji će se koristiti za nove razgovore.", + "discoveryPath": "Putanja otkrivanja modela", + "discoveryPathDescription": "Dodaje se osnovnom URL-u API-ja. Ostavite prazno kako biste onemogućili otkrivanje i koristili ručni ID modela.", + "manual": "Ručno unesite ID modela ili spremite vezu kako biste otkrili modele.", + "manualFallback": "Otkrivanje nije dostupno. I dalje možete ručno unijeti ID modela.", + "saveConnectionFirst": "Spremite vezu s pružateljem prije odabira modela.", + "discovering": "Osvježavanje modela dostupnih od ovog pružatelja…", + "discovered": "{count, plural, one {Otkriven je # model. Podrška za alate ovisi o odabranoj krajnjoj točki i modelu.} few {Otkrivena su # modela. Podrška za alate ovisi o odabranoj krajnjoj točki i modelu.} other {Otkriveno je # modela. Podrška za alate ovisi o odabranoj krajnjoj točki i modelu.}}", + "discoveryFailed": "Otkrivanje modela nije dovršeno", + "context": "{count} kontekstni prozor", + "toolsConfirmed": "Oglašeni alati", + "toolsUnknown": "Provjeri podršku za alate" + }, + "serverTools": { + "title": "Alati poslužitelja", + "webSearch": { + "label": "Web-pretraživanje", + "description": "Dopustite modelu pretraživanje weba uživo putem OpenRoutera kada zahtjev zahtijeva aktualne informacije. Korištenje pretraživanja OpenRouter naplaćuje zasebno.", + "proxyDescription": "Pošaljite alat poslužitelja za web-pretraživanje OpenRoutera ovoj krajnjoj točki. Omogućite ovo samo kada prilagođena krajnja točka prosljeđuje format alata poslužitelja OpenRouter, primjerice proxy Homarr Routera.", + "limit": "Model odlučuje kada će pretraživati, uz ograničenje od 3 pretraživanja i 5 rezultata po pretraživanju za svaki zahtjev." + } + }, + "enabled": { + "label": "Omogući asistenta", + "description": "Prikazuje asistenta svim prijavljenim korisnicima. Postojeća dopuštenja Homarra i dalje se primjenjuju na svaki poziv internog alata." + }, + "save": "Spremi asistenta", + "notification": { + "connectionSaved": { + "title": "Veza s pružateljem spremljena", + "message": "Krajnja točka i šifrirane vjerodajnice spremne su za odabir modela.", + "credentialsCleared": "Krajnja točka promijenjena je pa su prethodne vjerodajnice izbrisane. Ako je potrebno, dodajte vjerodajnice za novo odredište." + }, + "saved": { + "title": "Postavke asistenta spremljene", + "message": "Novi model i postavke dostupnosti aktivni su." + }, + "error": { + "title": "Postavke asistenta nije moguće spremiti" + } + } } } }, "tool": { "tasks": { - "title": "Zadaci", "status": { "idle": "Neaktivan", "running": "U radu", @@ -4746,6 +6789,11 @@ "label": "Pingovi" } }, + "action": { + "run": "Pokreni {name} sada", + "enable": "Omogući {name}", + "disable": "Onemogući {name}" + }, "interval": { "seconds": "Svakih {interval, plural, =1 {sekundu} one {sekundu} few {# sekunde} other {# sekundi}}", "minutes": "Svake {interval, plural, =1 {minute} one {minute} few {# minute} other {# minuta}}", @@ -4761,13 +6809,7 @@ } } }, - "settings": { - "title": "Postavke zadatka za {jobName}" - }, "field": { - "name": { - "label": "Naziv" - }, "interval": { "label": "Interval rasporeda" }, @@ -4781,11 +6823,6 @@ "table": { "search": "Pretraži {count} zadataka..." }, - "action": { - "refresh": { - "label": "Osvježi" - } - }, "refresh": { "success": { "message": "Zadaci su uspješno osvježeni" @@ -4819,7 +6856,6 @@ } }, "api": { - "title": "API", "modal": { "createApiToken": { "title": "API token je stvoren", @@ -4845,7 +6881,6 @@ }, "table": { "header": { - "id": "iskaznica", "createdBy": "Stvorio", "actions": "Radnje" } @@ -4901,43 +6936,12 @@ "availableTools": { "title": "Dostupni alati", "description": "Dostupno je {count} alata. Proširite kategoriju da biste vidjeli pojedinačne alate i njihove opise.", - "columnType": "Vrsta", - "columnName": "Alat", - "columnDescription": "Opis" - }, - "troubleshooting": { - "title": "Rješavanje problema", - "missingHeader": { - "title": "\"Nedostaje zaglavlje ApiKey\"", - "description": "Vaš klijent ne šalje zaglavlje {header}. Provjerite je li odjeljak {section} u MCP konfiguraciji ispravan. Neki klijenti zahtijevaju ponovno pokretanje nakon promjena konfiguracije." - }, - "invalidFormat": { - "title": "\"Nevažeći format ApiKeya\"", - "description": "Provjerite jeste li kopirali cijeli API ključ, a ne samo njegov dio." - }, - "invalidKey": { - "title": "\"Nevažeći API ključ\"", - "description": "ID ključa nije pronađen ili je token pogrešan. API ključevi mogu se vidjeti samo jednom, prilikom izrade. Ako ste ga izgubili, izbrišite stari ključ i izradite novi." - }, - "connectionRefused": { - "title": "Veza odbijena / istek vremena", - "description": "Provjerite je li URL dostupan iz vašeg AI klijenta. Ako Homarr radi iza obrnutog proxyja ili u Dockeru, upotrijebite vanjski URL (ne {localhost}). Provjerite je li priključak ispravan (zadano: 7575 za Docker)." - }, - "toolsNotAppearing": { - "title": "Alati se ne prikazuju", - "description": "Neki alati zahtijevaju konfiguriranje određenih integracija (npr. Docker, Overseerr). Popis alata ovisi o tome što je dostupno u vašoj instanci Homarr." + "filteredDescription": "{count} odgovarajućih alata u proširenim kategorijama.", + "search": "Pretraži alate", + "noResults": { + "title": "Nijedan alat ne odgovara ovom pretraživanju", + "description": "Nijedan MCP alat ne odgovara izrazu \"{search}\". Isprobajte prostor imena, naziv alata ili opis." } - }, - "copy": "Kopiraj", - "oneClick": { - "title": "Instaliraj jednim klikom", - "subtitle": "Upotrebljava OAuth — autentificirajte se u pregledniku pri prvoj upotrebi", - "vsCode": "Instaliraj u VS Code", - "cursor": "Instaliraj u Cursor", - "copyUrl": "Kopiraj MCP URL", - "copied": "Kopirano!", - "copyHint": "Za ChatGPT, Claude Code ili bilo koji MCP klijent", - "manualConfig": "Ručna konfiguracija" } } } @@ -4954,47 +6958,12 @@ "title": "Izvoz osjetljivih podataka", "warningTitle": "Ovaj izvoz sadrži vašu cijelu bazu podataka.", "warningBody": "Sigurnosna kopija uključuje sve korisnike, integracijske tajne (šifrirane), API ključeve, konfiguracije ploča i podatke aplikacija. Pohranite izvezenu datoteku na sigurno i nemojte je dijeliti.", - "typePrompt": "Upišite \"{phrase}\" za nastavak", - "submit": "Izvoz baze podataka", - "cancel": "Otkaži" + "submit": "Izvoz baze podataka" } }, "import": { "title": "Vraćanje baze podataka", - "description": "Prenesite prethodno izvezenu ZIP sigurnosnu kopiju za vraćanje vaše baze podataka. To će zamijeniti cijelu vašu bazu podataka. Ako je sigurnosna kopija stvorena s drugim ključem za enkripciju, tajne će se automatski ponovno šifrirati.", - "warning": "Vraćanje sigurnosne kopije potpuno će zamijeniti vašu trenutnu bazu podataka i ponovno pokrenuti aplikaciju. Ova radnja se ne može poništiti.", - "dropzone": { - "title": "Ovdje ispustite svoju ZIP sigurnosnu kopiju ili kliknite za pregled", - "description": "Prihvaćaju se samo .zip datoteke iz Homarr SQLite sigurnosne kopije" - }, - "changeFile": "Promijeni datoteku", - "button": "Vraćanje baze podataka", - "success": { - "title": "Vraćanje dovršeno", - "message": "Baza podataka je uspješno vraćena. Aplikacija se ponovno pokreće..." - }, - "error": "Uvoz nije uspio" - }, - "preview": { - "title": "Sadržaj sigurnosne kopije", - "exported": "Izvezeno {date}", - "loading": "Analiziranje datoteke sigurnosne kopije...", - "errorTitle": "Pogreška pregleda", - "entity": "Entitet", - "count": "Broj", - "boards": "Daske", - "entities": { - "board": "Daske", - "user": "Korisnici", - "app": "Aplikacije", - "integration": "Integracije", - "item": "Widgeti", - "media": "Mediji", - "search_engine": "Tražilice" - }, - "analyzeError": "Neuspješna analiza datoteke sigurnosne kopije", - "invalidMissingMetadata": "Neispravna sigurnosna kopija: nedostaje metadata.json", - "invalidMissingDb": "Neispravna sigurnosna kopija: nedostaje db.sqlite" + "description": "Prenesite prethodno izvezenu ZIP sigurnosnu kopiju za vraćanje vaše baze podataka. To će zamijeniti cijelu vašu bazu podataka. Ako je sigurnosna kopija stvorena s drugim ključem za enkripciju, tajne će se automatski ponovno šifrirati." }, "restore": { "dropzone": { @@ -5004,29 +6973,20 @@ "analyzing": "Analiziranje sigurnosne kopije...", "changeFile": "Promijeni datoteku", "continueToRestore": "Nastavi na vraćanje", - "tryAgain": "Pokušaj ponovno", "analysisError": "Pogreška analize", "preview": { "title": "Sadržaj sigurnosne kopije", "exported": "Izvezeno {date}", "entity": "Entitet", "count": "Broj", - "boards": "Daske", "entities": { - "board": "Daske", - "user": "Korisnici", - "app": "Aplikacije", - "integration": "Integracije", - "item": "Widgeti", - "media": "Mediji", - "search_engine": "Tražilice" + "item": "Widgeti" }, "migrationsApplied": "{count} migracija primijenjena", "migrationsAppliedPlural": "{count} migracija primijenjeno", "migrationsOlderVersion": "Ova sigurnosna kopija je iz starije Homarr verzije. {count} migracija sheme je primijenjena za ažuriranje.", "migrationsOlderVersionPlural": "Ova sigurnosna kopija je iz starije Homarr verzije. {count} migracije sheme su primijenjene za ažuriranje.", "migrationsUpToDate": "Shema baze podataka je ažurirana ({count} migracija primijenjeno)", - "upToDate": "Ažurirano", "migrationsPending": "{count} na čekanju" }, "migration": { @@ -5037,21 +6997,21 @@ "title": "Destruktivna radnja", "warningTitle": "Ovo će trajno zamijeniti cijelu vašu bazu podataka.", "warningBody": "Sve trenutne ploče, korisnici, aplikacije, integracije, postavke i sesije bit će izgubljeni. Ova radnja se ne može poništiti. Aplikacija će se ponovno pokrenuti nakon vraćanja.", - "typePrompt": "Upišite \"{phrase}\" za nastavak", - "cancel": "Otkaži", "submit": "Vraćanje baze podataka" }, "progress": { "title": "Vraćanje baze podataka...", - "extracting": "Raspakiravanje arhive sigurnosne kopije", - "migrating": "Primjena migracija baze podataka", - "encrypting": "Ponovno šifriranje integracijskih tajni", - "swapping": "Zamjena datoteke baze podataka", - "restarting": "Ponovno pokretanje poslužitelja" + "restarting": "Ponovno pokretanje poslužitelja", + "relogin": "Vraćanje baze podataka poništilo je vašu trenutačnu sesiju. Homarr će vas preusmjeriti na prijavu kada poslužitelj bude spreman." }, "complete": { "title": "Vraćanje dovršeno", - "message": "Baza podataka je uspješno vraćena. Poslužitelj se ponovno pokreće — osvježite stranicu za nekoliko sekundi." + "message": "Baza podataka je uspješno vraćena. Poslužitelj se ponovno pokreće — osvježite stranicu za nekoliko sekundi.", + "button": "Prijavi se sada" + }, + "timeout": { + "title": "Poslužitelj se nije vratio na mrežu", + "message": "Vraćanje baze podataka završeno je, ali Homarr ponovno nije postao spreman. Ponovno pokušajte provjeru veze ili ručno osvježite ovu stranicu." }, "failed": { "title": "Vraćanje nije uspjelo" @@ -5059,6 +7019,9 @@ "invalidMissingMetadata": "Neispravna sigurnosna kopija: nedostaje metadata.json", "invalidMissingDb": "Neispravna sigurnosna kopija: nedostaje db.sqlite", "analyzeError": "Neuspješna analiza sigurnosne kopije" + }, + "confirm": { + "typePrompt": "Upišite \"{phrase}\" za nastavak" } } }, @@ -5093,7 +7056,11 @@ "toggleBoardEdit": "Uredi ploču", "toggleColorScheme": "Uključi/isključi svijetli/tamni način", "saveNotebook": "Spremi bilježnicu (samo unutar widgeta bilježnice)", - "openSpotlight": "Otvori tražilicu" + "openSpotlight": "Otvori tražilicu", + "openSpotlightApps": "Otvori pretraživanje aplikacija", + "openSpotlightAssistant": "Otvori način rada asistenta", + "openSpotlightPreferences": "Otvori način rada postavki", + "openAssistant": "Otvori asistenta" }, "note": "Savjet: Mod označava i tipku Ctrl i tipku ⌘ na sustavu macOS" } @@ -5103,6 +7070,63 @@ }, "docker": { "title": "Kontejneri", + "reconciliation": { + "title": "Asistirano postavljanje Dockera", + "suggestions": "{count, plural, =0 {Nema prijedloga} one {# prijedlog} few {# prijedloga} other {# prijedloga}}", + "attention": "{count} zahtijeva pažnju", + "endpointUnavailable": "Neke usluge nije moguće provjeriti jer ove krajnje točke nisu dostupne: {names}", + "empty": "Nisu pronađene vidljive Docker usluge.", + "emptyFilter": "Nijedna usluga ne odgovara ovom prikazu.", + "ambiguous": "Više od jedne postojeće stavke moglo bi odgovarati ovoj usluzi. Homarr neće automatski odabrati nijednu.", + "filter": { + "attention": "Zahtijeva pažnju", + "represented": "Već postavljeno", + "all": "Sve" + }, + "state": { + "newRecognized": "Spremno za povezivanje", + "newApp": "Nova usluga", + "represented": "Već predstavljeno", + "linked": "Povezano", + "moved": "Adresa promijenjena" + }, + "url": { + "manual": "Ručno unesite adresu" + }, + "health": { + "layer": { + "docker": "Docker", + "integrationConfiguration": "Integracija", + "authentication": "Provjera autentičnosti", + "apiRequest": "API", + "appRepresentation": "Aplikacija", + "widgetConfiguration": "Element", + "widgetQuery": "Upit widgeta" + }, + "status": { + "available": "Dostupno", + "configured": "Konfigurirano", + "linked": "Povezano", + "missing": "Nedostaje", + "changed": "Promijenjeno", + "unused": "Nije u upotrebi", + "notApplicable": "Nije primjenjivo", + "notObserved": "Nije opaženo" + } + }, + "action": { + "review": "Pregledaj", + "dismiss": "Odbaci", + "restoreDismissed": "Vrati odbačeno ({count})", + "setupIntegration": "Postavi integraciju", + "reviewIntegration": "Pregledaj integraciju", + "viewRepresentation": "Prikaži postavljanje" + }, + "loadError": { + "title": "Pomoćnik za postavljanje Dockera nije moguće učitati", + "message": "Informacije o Docker usluzi nisu dostupne. Pokušajte ponovno bez napuštanja ove stranice." + } + }, "table": { "updated": "Ažurirano {when}", "refresh": { @@ -5115,9 +7139,6 @@ "totalMemory": "Ukupna memorija: {memory}" }, "field": { - "name": { - "label": "Naziv" - }, "state": { "label": "Stanje", "option": { @@ -5131,9 +7152,6 @@ } }, "stats": { - "cpu": { - "label": "CPU" - }, "memory": { "label": "Memorija" } @@ -5196,8 +7214,11 @@ } }, "remove": { - "label": "Ukloni", "confirm": "Kliknite ponovno za trajno uklanjanje", + "confirmation": { + "title": "{count, plural, one {Ukloniti # spremnik?} few {Ukloniti # spremnika?} other {Ukloniti # spremnika?}}", + "message": "{count, plural, one {Ovim se trajno uklanja # spremnik: {names}} few {Ovim se trajno uklanjaju # spremnika: {names}} other {Ovim se trajno uklanja # spremnika: {names}}}" + }, "notification": { "success": { "title": "Kontejneri su uklonjeni", @@ -5209,8 +7230,13 @@ } } }, + "result": { + "failure": { + "title": "Neke radnje nad spremnicima nisu uspjele", + "message": "{total, plural, one {{failed} od # radnje nije uspjela: {names}} few {{failed} od # radnje nisu uspjele: {names}} other {{failed} od # radnji nije uspjelo: {names}}}" + } + }, "refresh": { - "label": "Osvježi", "notification": { "success": { "title": "Kontejneri su osvježeni", @@ -5241,18 +7267,33 @@ }, "error": { "internalServerError": "Dohvaćanje Dockerovih spremnika nije uspjelo", + "endpointUnavailable": "{count, plural, one {# Docker krajnja točka nije dostupna: {names}} few {# Docker krajnje točke nisu dostupne: {names}} other {# Docker krajnjih točaka nije dostupno: {names}}}", "noColumns": "Odaberite barem jedan stupac u postavkama widgeta" } }, "kubernetes": { + "context": { + "label": "Kontekst Kubernetesa", + "loadError": { + "title": "Kontekste Kubernetesa nije moguće učitati", + "message": "Informacije o kontekstu nisu dostupne. Pokušajte ponovno bez napuštanja ove stranice." + }, + "status": { + "available": "Dostupno", + "degraded": "Mjerni podaci nisu dostupni", + "unavailable": "Nedostupno" + }, + "unavailable": "Ovaj kontekst Kubernetesa nije moguće dosegnuti. Odaberite drugi kontekst ili provjerite njegove vjerodajnice i krajnju točku.", + "metricsUnavailable": "Ovaj je kontekst dostupan, ali Metrics Server nije dostupan. Inventar ostaje dostupan bez trenutačne upotrebe CPU-a i memorije." + }, "cluster": { "title": "Nadzorna ploča klastera", "label": "Klaster", "providers": "Pružatelji", "version": "Verzija", - "architecture": "Arhitektura", "capacity": { "title": "Kapacitet", + "metricsUnavailable": "Metrics Server nije dostupan. Inventar i rezervirani kapacitet ostaju vidljivi, ali nije moguće prikazati trenutačnu upotrebu CPU-a i memorije.", "resource": { "reserved": "Rezervirano", "used": "Utroš." @@ -5271,38 +7312,10 @@ } }, "nodes": { - "label": "Čvorovi", "field": { - "name": { - "label": "Naziv" - }, - "state": { - "label": "Stanje", - "option": { - "ready": "Spreman", - "NotReady": "Nije spreman" - } - }, - "cpu": { - "label": "CPU" - }, - "memory": { - "label": "RAM" - }, - "pods": { - "label": "Podovi" - }, - "operatingSystem": { - "label": "OS" - }, - "architecture": { - "label": "Arhitektura" - }, + "metricsUnavailable": "Nedostupno", "kubernetesVersion": { "label": "Verzija Kubernetesa" - }, - "creationTimestamp": { - "label": "Stvoreno" } }, "table": { @@ -5310,43 +7323,17 @@ } }, "namespaces": { - "label": "Imenski prostori", - "field": { - "name": { - "label": "Naziv" - }, - "state": { - "label": "Stanje", - "option": { - "active": "Aktivno", - "terminating": "Prekidanje" - } - }, - "creationTimestamp": { - "label": "Stvoreno" - } - }, "table": { "search": "Pretraži {count} imenskih prostora" } }, "ingresses": { - "label": "Ingressi", "field": { - "name": { - "label": "Naziv" - }, - "namespace": { - "label": "Imenski prostor" - }, "className": { "label": "Naziv klase" }, "rulesAndPaths": { "label": "Pravila i putanje" - }, - "creationTimestamp": { - "label": "Stvoreno" } }, "table": { @@ -5354,17 +7341,7 @@ } }, "services": { - "label": "Usluge", "field": { - "name": { - "label": "Naziv" - }, - "namespace": { - "label": "Imenski prostor" - }, - "type": { - "label": "Vrsta" - }, "ports": { "label": "Portovi" }, @@ -5373,9 +7350,6 @@ }, "clusterIP": { "label": "IP klastera" - }, - "creationTimestamp": { - "label": "Stvoreno" } }, "table": { @@ -5383,25 +7357,12 @@ } }, "pods": { - "label": "Podovi", "field": { - "name": { - "label": "Naziv" - }, - "namespace": { - "label": "Imenski prostor" - }, "image": { "label": "Slika" }, "applicationType": { "label": "Vrsta aplikacije" - }, - "status": { - "label": "Stanje" - }, - "creationTimestamp": { - "label": "Stvoreno" } }, "table": { @@ -5409,51 +7370,17 @@ } }, "secrets": { - "label": "Tajne", - "field": { - "name": { - "label": "Naziv" - }, - "namespace": { - "label": "imenski prostor" - }, - "type": { - "label": "vrsta" - }, - "creationTimestamp": { - "label": "Stvoreno" - } - }, "table": { "search": "Pretraži {count} tajni" } }, "configmaps": { - "label": "ConfigMapovi", - "field": { - "name": { - "label": "Naziv" - }, - "namespace": { - "label": "imenski prostor" - }, - "creationTimestamp": { - "label": "Stvoreno" - } - }, "table": { "search": "Pretraži {count} ConfigMapova" } }, "volumes": { - "label": "Svesci", "field": { - "name": { - "label": "Naziv" - }, - "namespace": { - "label": "Imenski prostor" - }, "accessModes": { "label": "Načini pristupa" }, @@ -5468,12 +7395,6 @@ }, "volumeName": { "label": "Naziv sveska" - }, - "status": { - "label": "Stanje" - }, - "creationTimestamp": { - "label": "Stvoreno" } }, "table": { @@ -5482,6 +7403,29 @@ }, "error": { "internalServerError": "Dohvaćanje Kubernetesovih podataka nije uspjelo" + }, + "field": { + "name": { + "label": "Naziv posla" + }, + "namespace": { + "label": "Prostor imena" + }, + "creationTimestamp": { + "label": "Kreirano" + }, + "state": { + "label": "Stanje posla" + }, + "status": { + "label": "Stanje" + }, + "type": { + "label": "Vrsta klijenta za preuzimanje" + }, + "architecture": { + "label": "Arhitektura" + } } }, "permission": { @@ -5515,71 +7459,27 @@ }, "navigationStructure": { "manage": { - "workshop": { - "label": "Workshop" - }, "label": "Upravljati", - "boards": { - "label": "Daske" - }, - "integrations": { - "label": "Integracije", + "custom-widgets": { "edit": { - "label": "Uredi" + "flow": { + "label": "Tijek" + } }, - "new": { - "label": "Novi" - } - }, - "search-engines": { - "label": "Tražilice", - "new": { - "label": "Novi" + "workshop": { + "label": "Radionica" }, - "edit": { - "label": "Uredi" - } - }, - "medias": { - "label": "Mediji" - }, - "apps": { - "label": "aplikacije", - "new": { - "label": "Novi" - }, - "edit": { - "label": "Uredi" + "publish": { + "label": "Objavi u radionici" } }, "users": { - "label": "Korisnici", - "create": { - "label": "Stvoriti" - }, "general": "Općenito", - "security": "Sigurnost", - "board": "Daske", - "groups": { - "label": "Grupe" - }, - "invites": { - "label": "poziva" - } + "security": "Sigurnost" }, "tools": { "label": "Alati", - "tasks": { - "label": "Zadaci" - }, - "docker": { - "label": "Docker", - "logs": { - "label": "Zapisi" - } - }, "kubernetes": { - "label": "Kubernetes", "nodes": { "label": "Čvorovi" }, @@ -5605,11 +7505,7 @@ "label": "Svesci" } }, - "logs": { - "label": "Zapisi" - }, "certificates": { - "label": "Certifikati", "hostnames": { "label": "Nazivi hostova" } @@ -5620,12 +7516,60 @@ }, "about": { "label": "O aplikaciji" + }, + "assistant": { + "label": "Pomoćnik" } } }, "search": { "placeholder": "Pretraži bilo što", "nothingFound": "Ništa nije pronađeno", + "modePicker": { + "search": { + "label": "traži", + "placeholder": "Pretražite aplikacije, nadzorne ploče, stranice, naredbe i postavke" + }, + "apps": { + "label": "aplikacije", + "placeholder": "Pretražite aplikacije, nadzorne ploče i integracije" + }, + "command": { + "label": "Naredbe", + "placeholder": "Pretražite radnje i naredbe" + }, + "preferences": { + "label": "Postavke", + "placeholder": "Pretražite i promijenite postavke" + }, + "assistant": { + "label": "Pomoćnik", + "placeholder": "Pitajte pomoćnika" + }, + "external": { + "label": "Internet", + "placeholder": "Pretražite pomoću vanjske tražilice" + }, + "media": { + "label": "Mediji", + "placeholder": "Pretražite film ili emisiju", + "fallback": "Pretražite medije za „{query}”" + }, + "userGroup": { + "label": "Osobe", + "placeholder": "Pretražite korisnike i grupe" + }, + "continueWith": "Nastavi s", + "dialogAriaLabel": "Izbornik naredbi za način rada {mode}", + "navigationLabel": "Načini pretraživanja", + "modeAriaLabel": "Način rada {mode}", + "resultsAriaLabel": "Rezultati za {mode}", + "footer": { + "navigate": "Navigacija", + "open": "Otvori", + "close": "Zatvori" + } + }, "error": { "fetch": "Došlo je do pogreške prilikom dohvaćanja podataka" }, @@ -5634,7 +7578,6 @@ "help": "Pretraži aplikacije, integracije ili ploče", "group": { "app": { - "title": "aplikacije", "children": { "action": { "open": { @@ -5650,7 +7593,6 @@ } }, "board": { - "title": "Daske", "children": { "action": { "open": { @@ -5670,9 +7612,6 @@ "title": "Odaberite radnju za ploču" } } - }, - "integration": { - "title": "Integracije" } } }, @@ -5701,9 +7640,6 @@ "newBoard": { "label": "Stvori novu ploču" }, - "importBoard": { - "label": "Uvezi ploču" - }, "newApp": { "label": "Stvori novu aplikaciju" }, @@ -5773,7 +7709,6 @@ } }, "defaultSearchEngineId": { - "label": "Zadana tražilica", "children": { "detail": { "title": "Odaberite zadanu tražilicu" @@ -5781,7 +7716,6 @@ } }, "openSearchInNewTab": { - "label": "Otvori rezultate pretraživanja u novoj kartici", "children": { "detail": { "title": "Otvori rezultate pretraživanja u novoj kartici" @@ -5789,7 +7723,6 @@ } }, "ddgBangs": { - "label": "Omogući DuckDuckGo prečace", "children": { "detail": { "title": "Omogući DuckDuckGo prečace" @@ -5804,6 +7737,13 @@ } } }, + "byteUnitSystem": { + "children": { + "detail": { + "title": "Odaberite jedinice za veličinu podataka" + } + } + }, "homeBoardId": { "label": "Početna ploča", "children": { @@ -5821,7 +7761,6 @@ } }, "pingIconsEnabled": { - "label": "Koristi ikone za pingove", "children": { "detail": { "title": "Koristi ikone za pingove" @@ -5829,7 +7768,6 @@ } }, "enableRightClickOnWidgets": { - "label": "Omogući desni klik na widgetima", "children": { "detail": { "title": "Omogući desni klik na widgetima" @@ -5857,6 +7795,7 @@ "description": "Počnite tipkati za pretraživanje integracija za zahtjeve za medije", "disabled": { "noIntegration": "Dodajte integraciju Overseerr, Jellyseerr ili Seerr za omogućavanje pretraživanja medija.", + "signInRequired": "Prijavite se za pretraživanje integracija za medijske zahtjeve.", "scoped": "Ovaj widget nema dostupnu integraciju za zahtjeve za medije." } } @@ -5873,7 +7812,6 @@ "help": "Koristi vanjsku tražilicu", "group": { "searchEngine": { - "title": "Tražilice", "tipDdgBangs": "Savjet: Ovdje možete koristiti i bilo koji DuckDuckGo prečac, npr. !nešto", "bang": { "searchWithQuery": "Pretraži \"{query}\" pomoću {label}", @@ -5924,20 +7862,6 @@ "group": { "mode": { "title": "Načini" - }, - "help": { - "title": "Pomozite", - "option": { - "documentation": { - "label": "Dokumentacija" - }, - "submitIssue": { - "label": "Pošalji prijavu problema" - }, - "discord": { - "label": "Nesloga u zajednici" - } - } } } }, @@ -5949,9 +7873,10 @@ "other": { "label": "Pretraži drugom tražilicom" }, - "no-default": { - "label": "Nema zadane tražilice", - "description": "Postavite zadanu tražilicu u postavkama" + "no-engines": { + "label": "Nisu konfigurirane tražilice", + "descriptionCreate": "Dodajte tražilicu za pretraživanje iz izbornika naredbi", + "descriptionUnavailable": "Zamolite administratora da konfigurira tražilicu" }, "search": { "label": "Pretraži \"{query}\" pomoću tražilice {name}" @@ -6031,7 +7956,6 @@ "help": "Pretraži korisnike ili grupe", "group": { "user": { - "title": "Korisnici", "children": { "action": { "detail": { @@ -6044,7 +7968,6 @@ } }, "group": { - "title": "Grupe", "children": { "action": { "detail": { @@ -6068,9 +7991,6 @@ "engine": { "search": "Pronađi tražilicu", "field": { - "name": { - "label": "Naziv" - }, "short": { "label": "Kratko" }, @@ -6083,12 +8003,19 @@ }, "page": { "list": { - "title": "Tražilice", + "ariaLabel": "Konfigurirane tražilice", "noResults": { "title": "Još nema tražilica", - "action": "Stvorite svoju prvu tražilicu" + "description": "Tražilice omogućuju usluzi Spotlight slanje upita web-mjestu ili povezanoj usluzi.", + "action": "Stvorite svoju prvu tražilicu", + "filteredTitle": "Nijedna tražilica ne odgovara vašem pretraživanju", + "filteredDescription": "Nijedna tražilica ne odgovara „{search}”. Pokušajte s drugim nazivom ili URL-om." }, - "interactive": "Interaktivno, koristi integraciju" + "interactive": "Interaktivno, koristi integraciju", + "type": { + "generic": "Predložak URL-a", + "fromIntegration": "Integracija" + } }, "create": { "title": "Nova tražilica", @@ -6107,11 +8034,9 @@ "title": "Uredi tražilicu", "notification": { "success": { - "title": "Promjene su uspješno primijenjene", "message": "Tražilica je uspješno spremljena" }, "error": { - "title": "Nije moguće primijeniti promjene", "message": "Tražilicu nije moguće spremiti" } }, @@ -6250,6 +8175,10 @@ } }, "log": { + "context": { + "widgetError": "Widget je u to vrijeme prijavio pogrešku", + "expiredWidgetError": "Zapisnici povezani s ovom pogreškom widgeta više se ne čuvaju" + }, "level": { "option": { "debug": "Otklanj.", @@ -6261,7 +8190,6 @@ }, "onboardingTour": { "learnMore": "Pročitajte dokumentaciju", - "next": "Sljedeći", "prev": "Natrag", "done": "Gotovo", "skip": "Preskoči vodič", @@ -6325,5 +8253,359 @@ "description": "Promijenite shemu boja, jezik, početnu ploču i preferencije. Odavde također možete otići u upravljačko područje." } } + }, + "metadata": { + "description": "Nadzorna ploča na vlastitom poslužitelju za *arr skup i cijeli vaš kućni laboratorij. Integrira se s više od 50 usluga, widgetima u stvarnom vremenu i ne zahtijeva konfiguracijske datoteke.", + "dashboardTitle": "Nadzorna ploča {appName}" + }, + "assistant": { + "title": "Pomoćnik", + "open": "Otvori pomoćnika", + "close": "Zatvori pomoćnika", + "minimize": "Minimiziraj pomoćnika", + "spotlight": "Pitaj pomoćnika", + "spotlightDescription": "Upišite i pošaljite upit bez napuštanja izbornika naredbi.", + "spotlightPrompt": { + "title": "Pitaj pomoćnika", + "description": "Upišite upit iznad. Tipkom Enter šaljete ga u pozadini.", + "send": "Pošalji upit", + "empty": "Upišite upit iznad" + }, + "unavailable": { + "checking": "Provjera dostupnosti pomoćnika…", + "error": "Dostupnost pomoćnika nije moguće provjeriti. Pokušajte ponovno.", + "notConfigured": "Administrator najprije mora konfigurirati i omogućiti pomoćnika.", + "signIn": "Prijavite se da biste upotrebljavali pomoćnika." + }, + "newConversation": "Novi razgovor", + "conversations": "Razgovori", + "conversationActions": "Radnje razgovora", + "searchConversations": "Pretraži razgovore", + "noMatchingConversations": "Nema odgovarajućih razgovora", + "moreActions": "Više radnji odgovora", + "renameConversation": { + "action": "Preimenuj", + "label": "Naziv razgovora", + "save": "Spremi naziv", + "failedTitle": "Razgovor nije moguće preimenovati", + "failedDescription": "Homarr nije mogao preimenovati ovaj razgovor. Pokušajte ponovno." + }, + "deleteConversation": { + "title": "Izbrisati razgovor?", + "description": "„{title}” i njegove poruke bit će trajno izbrisani.", + "failedTitle": "Razgovor nije moguće izbrisati", + "failedDescription": "Homarr nije mogao izbrisati ovaj razgovor. Pokušajte ponovno." + }, + "closeHistory": "Zatvori povijest razgovora", + "openHistory": "Otvori povijest razgovora", + "emptyTitle": "Kako vam mogu pomoći?", + "emptyDescription": "Pitajte o svom postavljanju Homarra, pregledajte podatke instance uživo ili odobrite radnje kada želite da izvršim promjenu.", + "suggestions": { + "health": { + "label": "Provjeri stanje usluga", + "prompt": "Provjerite svoje integracije i sažmite sve što zahtijeva pažnju." + }, + "explore": { + "label": "Istraži moj Homarr", + "prompt": "Pokaži mi što mogu pregledavati i upravljati u ovoj instanci Homarra." + }, + "media": { + "label": "Pronađi medij za zahtjev", + "prompt": "Pomozi mi pronaći film ili seriju za zahtjev." + }, + "style": { + "label": "Poboljšaj nadzornu ploču", + "prompt": "Pomozi mi poboljšati izgled ploče ili prilagođeni CSS. Najprije mi pokaži ploče, a zatim sačuvaj moje trenutne postavke dok unosimo promjenu." + }, + "designWidget": { + "label": "Dizajniraj widget", + "prompt": "Izradi i instaliraj prilagođeni widget za " + } + }, + "composerPlaceholder": "Pitaj pomoćnika…", + "runtime": { + "model": "Model", + "searchModels": "Pretraži modele", + "noModels": "Nema dostupnih modela", + "otherModels": "Drugi modeli", + "imageInput": "Prihvaća slikovni unos", + "thinking": "Način razmišljanja", + "reasoning": { + "auto": "Automatski", + "none": "Isključeno", + "minimal": "Minimalno", + "low": "Nisko", + "medium": "Srednji", + "high": "Visoko" + } + }, + "providerQuota": { + "title": "Pružatelj Homarr", + "communityWorkshop": "Radionica zajednice", + "dailyAllowance": "Dnevno ograničenje zahtjeva", + "remainingLabel": "Preostalo je {remaining} od {limit} zahtjeva pružatelja Homarr", + "loading": "Učitavanje ograničenja pružatelja Homarr", + "signInRequired": "Za pružatelja Homarr potrebna je prijava u radionicu", + "signInDescription": "Prijavite se GitHubom putem radionice zajednice kako biste primili zasebno dnevno ograničenje.", + "exhaustedDescription": "Današnje ograničenje pružatelja Homarr iskorišteno je. Ponovno se postavlja u ponoć UTC-a.", + "unavailableDescription": "Prijavite se u radionicu ili pričekajte da se ograničenje pružatelja Homarr ponovno postavi.", + "signIn": "Prijava GitHubom", + "signInError": "Prijava GitHubom nije uspjela. Pokušajte ponovno za trenutak.", + "loadError": "Ograničenje pružatelja Homarr nije moguće učitati.", + "reset": "Ponovno se postavlja {relative} u ", + "toolCalls": "Svaki zahtjev modela i svaki dovršeni poziv alata troše jedan zahtjev.", + "retry": "Ponovno učitaj ograničenje", + "level": { + "ok": "U redu", + "warning": "Upozorenje", + "bad": "Nisko", + "dead": "Iskorišteno" + } + }, + "stop": "Zaustavi odgovor", + "send": "Pošalji poruku", + "copy": "Kopiraj odgovor", + "copyMessage": "Kopiraj poruku", + "editMessage": "Uredi poruku", + "updateMessage": "Ažuriraj poruku", + "regenerate": "Ponovno generiraj odgovor", + "helpful": "Korisno", + "notHelpful": "Nije korisno", + "readAloud": "Pročitaj odgovor naglas", + "stopReading": "Zaustavi čitanje odgovora", + "feedbackError": "Vaše povratne informacije nije moguće spremiti. Pokušajte ponovno.", + "exportMarkdown": "Izvezi kao Markdown", + "exportConversation": { + "action": "Izvezi razgovor kao Markdown", + "failedTitle": "Razgovor nije moguće izvesti", + "failedDescription": "Homarr nije mogao učitati ovaj razgovor. Pokušajte ponovno." + }, + "reasoning": "Razmišljanje", + "previousResponse": "Prethodni odgovor", + "nextResponse": "Sljedeći odgovor", + "removeAttachment": "Ukloni privitak", + "downloadFile": "Preuzmi {name}", + "attachedImage": "Priložena slika", + "externalImageBlocked": "Vanjska slika blokirana radi privatnosti", + "image": { + "loading": "Učitavanje slike", + "failed": "Ovu sliku nije moguće učitati.", + "retry": "Pokušaj ponovno učitati sliku" + }, + "quoteSelection": "Citat", + "dismissQuote": "Ukloni citat", + "attachments": { + "add": "Priložite sliku ili dokument", + "errorTitle": "Privitak nije moguće dodati", + "imageUnsupported": "Odabrani model ne podržava slikovni unos." + }, + "mentions": { + "menu": "Dodaj Homarrov kontekst", + "context": "Kontekst", + "app": "aplikacije", + "integration": "Integracije", + "board": "Daske", + "widget": "Widgeti", + "tools": "Dostupni alati" + }, + "markdown": { + "diagram": "Dijagram", + "renderingDiagram": "Iscrtavanje dijagrama…", + "diagramUnavailable": "Ovaj dijagram nije moguće iscrtati." + }, + "commands": { + "menu": "Naredbe pomoćnika", + "health": "Pripremi provjeru stanja usluge", + "explore": "Pripremi pregled ove instance Homarra", + "media": "Pripremi pretraživanje medija", + "style": "Pripremi promjenu izgleda ploče ili prilagođenog CSS-a", + "designWidget": "Pripremi izradu prilagođenog widgeta iz jednog upita" + }, + "usage": { + "tokens": "tokeni", + "contextWindow": "Kontekstni prozor", + "requestDetails": "Pojedinosti zahtjeva", + "used": "Najnoviji korak", + "remaining": "Preostalo", + "capacity": "Kapacitet", + "input": "Ulaz", + "output": "Izlaz", + "cached": "Predmemorirani unos", + "cacheWrite": "Zapis predmemorije", + "reasoning": "Razmišljanje", + "inputShort": "ulaz", + "outputShort": "izlaz", + "cachedShort": "predmemorirano", + "reasoningShort": "razmišljanje", + "firstOutput": "Prvi izlaz", + "homarrTiming": "Homarr opaženo", + "endToEnd": "Od početka do kraja", + "observedThroughput": "Opažena propusnost", + "providerTiming": "Prijavio pružatelj", + "loadingProviderDetails": "Učitavanje pojedinosti generiranja…", + "providerDetailsPending": "OpenRouter još obrađuje neke pojedinosti generiranja. Ponovno otvorite za pokušaj.", + "providerLatency": "Latencija pružatelja", + "generationTime": "Vrijeme generiranja", + "moderationLatency": "Moderiranje", + "providerThroughput": "Propusnost pružatelja", + "fallbacks": "Pričuvne mogućnosti", + "fallbackLatency": "Latencija pričuvne mogućnosti", + "cacheDiscount": "Popust predmemorije", + "normalizedTokens": "Normalizirani ulazni/izlazni tokeni OpenRoutera", + "byok": "BYOK", + "cost": "Trošak", + "reported": "Prijavio pružatelj", + "estimated": "Procijenjeno prema cijenama modela", + "upstreamCost": "Zaključivanje uzvodno", + "webSearches": "Web-pretraživanja", + "finishReason": "Razlog završetka", + "notReported": "Nije prijavljeno", + "agentSteps": "Koraci agenta", + "step": "Korak {number}", + "generation": "Generiranje" + }, + "toolInput": "Ulaz", + "toolOutput": "Izlaz", + "toolActivity": { + "iconSearch": "Traženje ikona za „{query}”", + "iconBrowse": "Pregled dostupnih ikona" + }, + "toolNavigation": { + "openPreview": "Otvori pretpregled", + "openWidget": "Otvori widget" + }, + "webSearch": { + "title": "Pretraživanje weba", + "completed": "OpenRouter je za ovaj odgovor pretražio web uživo.", + "searches": "{count, plural, one {# pretraga} few {# pretrage} other {# pretraga}}", + "sources": "{count, plural, one {# izvor} few {# izvora} other {# izvora}}" + }, + "responseError": { + "title": "Asistent nije mogao dovršiti radnju", + "description": "Pokušajte ponovno. Ako se problem nastavi, zatražite od administratora da provjeri konfiguriranu krajnju točku modela." + }, + "toolPreparationError": { + "title": "Ovaj zahtjev nije moguće pripremiti", + "description": "Model se zaustavio prije nego što je pružio potpune pojedinosti. Ponovite odgovor ili ponovno opišite zahtjev. Nije izvršena nikakva promjena." + }, + "busy": { + "title": "Asistent već radi", + "description": "Pričekajte trenutni odgovor ili ga otvorite kako biste zaustavili izvođenje." + }, + "pendingAction": { + "answerTitle": "Potreban je odgovor", + "answerFallback": "Odaberite odgovor za nastavak", + "formTitle": "Pregled pojedinosti aplikacije", + "boardFormTitle": "Pregled promjena ploče", + "review": "Pregledaj", + "sendBlocked": "Riješite zahtjev na čekanju prije slanja" + }, + "activity": { + "thinking": "Asistent razmišlja", + "working": "Rad na vašem upitu", + "ready": "Odgovor je spreman", + "completed": "Otvori odgovor", + "approval": "Potrebno odobrenje", + "failed": "Asistent treba vašu pažnju", + "expand": "Otvori odgovor asistenta", + "dismiss": "Odbaci aktivnost asistenta" + }, + "scrollToLatest": "Pomakni se na najnovije", + "refresh": { + "action": "Osvježi trenutni prikaz", + "working": "Osvježavanje trenutnog prikaza", + "completeTitle": "Prikaz je osvježen", + "completeDescription": "Vidljivi podaci Homarra ponovno su učitani.", + "failedTitle": "Prikaz nije moguće osvježiti", + "failedDescription": "Promjena je možda ipak spremljena. Ponovno pokušajte osvježiti prikaz." + }, + "askUser": { + "preparing": "Priprema pitanja", + "answered": "Vaš odgovor", + "other": "Ostalo", + "otherLabel": "Vaš odgovor", + "otherPlaceholder": "Upišite drugi odgovor…", + "submit": "Pošalji odgovor", + "cancelOther": "Otkaži drugi odgovor", + "optionKind": { + "affirmative": "Potvrdi", + "negative": "Odbij", + "alternative": "Mogućnost", + "custom": "Prilagođeno" + } + }, + "configureApp": { + "title": "Pregled pojedinosti aplikacije", + "description": "Odaberite lokalnu ikonu i prilagodite sve prije nego što asistent zatraži odobrenje za izradu.", + "preparing": "Priprema pojedinosti aplikacije", + "continue": "Upotrijebi ove pojedinosti", + "ready": "Pojedinosti aplikacije spremne", + "automaticContinue": "Automatska upotreba ovih pojedinosti aplikacije" + }, + "configureBoardSettings": { + "title": "Pregled promjena ploče", + "loading": "Učitavanje trenutačnih postavki ploče", + "loadErrorTitle": "Postavke ploče nije moguće učitati", + "loadErrorDescription": "Ploča možda više ne postoji ili nemate dozvolu za njezinu izmjenu.", + "proposedCount": "Pomoćnik je predložio {count} polja", + "changeCount": "{count} promjena spremno", + "ready": "Promjene ploče spremne", + "cancelled": "Zadržane su trenutačne postavke ploče", + "noChanges": "Postavke se neće promijeniti", + "keepCurrent": "Zadrži trenutačne postavke", + "continue": "Nastavi na odobrenje", + "automaticContinue": "Automatsko prihvaćanje predloženih promjena ploče", + "resetAll": "Poništi sve promjene", + "tabs": { + "css": "Prilagođeni CSS", + "appearance": "Izgled", + "background": "Pozadina", + "general": "Općenito" + }, + "cssDescription": "Uredite cijeli stilski predložak. Postojeća se pravila zadržavaju osim ako ih ovdje uklonite.", + "cssCharacters": "{count} od 16384 znakova", + "copyCss": "Kopiraj CSS", + "copied": "Kopirano", + "restoreCss": "Vrati trenutačni CSS", + "remoteCssTitle": "Ovaj CSS učitava udaljeni resurs", + "remoteCssDescription": "Uvezeni stilski predlošci i udaljeni URL-ovi povezuju se s drugim poslužiteljem pri učitavanju ploče. Pregledajte ih prije nastavka." + }, + "configureWidget": { + "title": "Pregled widgeta", + "preparing": "Priprema postavki widgeta", + "review": "Pregled widgeta i integracija", + "ready": "Konfiguracija widgeta spremna", + "cancelled": "Widget nije dodan", + "automaticContinue": "Automatsko prihvaćanje predložene konfiguracije widgeta", + "definitionLoadErrorTitle": "Postavke widgeta nije moguće učitati", + "definitionLoadErrorDescription": "Homarr nije mogao učitati postavke ovog widgeta. Pokušajte ponovno.", + "loadErrorTitle": "Integracije nije moguće učitati", + "loadErrorDescription": "Homarr nije mogao učitati integracije dostupne za ovaj widget.", + "noIntegrationTitle": "Potrebna je kompatibilna integracija", + "noIntegrationDescription": "Konfigurirajte integraciju koju ovaj widget podržava prije nego što ga dodate na nadzornu ploču.", + "connectIntegration": "Poveži uslugu", + "manageIntegrations": "Upravljaj integracijama", + "skip": "Nemoj dodati", + "errorTitle": "Postavke widgeta nije moguće pripremiti", + "errorDescription": "Model nije pružio potpunu konfiguraciju widgeta. Widget nije dodan." + }, + "approvalRequired": "Potrebno odobrenje", + "complete": "Dovršeno", + "denied": "Odbijeno", + "failed": "Neuspjelo", + "working": "U tijeku", + "approvalDescription": "Pregledajte ovu promjenu prije njezina izvođenja.", + "approveAndRun": "Odobri i pokreni", + "deny": "Odbij", + "autoApproval": { + "label": "Automatska odobrenja", + "composerLabel": "Odobri umjesto mene", + "title": "Automatska odobrenja", + "description": "Automatski pripremite obrasce i odobrite zaštićene promjene za ovaj razgovor. Pitanja i dalje čekaju vaš odgovor, a vaše Homarr dozvole i dalje vrijede. Ova se opcija isključuje kada promijenite razgovor.", + "enable": "Omogući za ovaj razgovor", + "disable": "Isključi automatska odobrenja", + "enabled": "Automatska odobrenja su uključena", + "approving": "Automatsko odobravanje" + } } } diff --git a/packages/translation/src/lang/hu.json b/packages/translation/src/lang/hu.json index cbd666b48..564813a37 100644 --- a/packages/translation/src/lang/hu.json +++ b/packages/translation/src/lang/hu.json @@ -1,156 +1,246 @@ { "init": { - "step": { - "start": { - "title": "Üdvözöljük a Homarrban", - "subtitle": "Kezdjük el a Homarr-példány beállítását.", - "description": "A kezdéshez válassza ki, hogyan szeretné beállítani a Homarr-példányt.", - "action": { - "scratch": "Kezdjük a legelejétől", - "importOldmarr": "Importálás Homarr 1.0 előtti verzióból", - "restoreSqlite": "Visszaállítás SQLite-mentésből", - "restoreSqliteDescription": "Tölts fel egy korábbi Homarr-példányból származó teljes SQLite-adatbázis-mentést. Ezzel visszaállítod az összes táblát, felhasználót, alkalmazást, integrációt és beállítást.", - "backToOptions": "← Vissza a beállítási lehetőségekhez" + "studio": { + "navigationLabel": "Bevezetési szakaszok", + "back": "Vissza", + "buildBoard": "Tábla létrehozása", + "common": { + "unknownError": "Hiba történt. A választásai továbbra is megvannak; próbálja újra." + }, + "claim": { + "checking": "A beállítási munkamenet biztonságossá tétele…", + "checkingTitle": "Biztonságos beállítás előkészítése", + "lockedTitle": "A beállítás egy másik böngészőben van megnyitva", + "lockedDescription": "Folytassa ott, vagy várja meg a biztonságos első indítási munkamenet lejártát, mielőtt újra próbálkozna.", + "signInTitle": "Rendszergazdai bejelentkezés szükséges", + "signInDescription": "Már létezik rendszergazda. Jelentkezzen be a beállítás folytatásához anélkül, hogy hitelesítő adatok vagy szolgáltatáshoz való hozzáférés kerülne napvilágra.", + "signIn": "Bejelentkezés és folytatás", + "errorTitle": "A beállítást nem sikerült biztonságossá tenni", + "errorDescription": "Töltse újra az oldalt a biztonságos első indítási munkamenet újrapróbálásához." + }, + "navigation": { + "essentials": "Alapvető beállítások", + "discover": "Felfedezés", + "connect": "Csatlakozás", + "board": "Tábla", + "extend": "Bővítés", + "review": "Áttekintés" + }, + "welcome": { + "title": "Üdv itthon.", + "description": "Üdvözli a Homarr v{version}. Végigvezetjük az alapvető beállításokon, és segítünk létrehozni az első tábláját.", + "start": "Kezdés", + "restore": "Biztonsági mentés visszaállítása", + "restoreTitle": "Visszaállítás biztonsági mentésből", + "restoreDescription": "A teljes SQLite-mentés visszaállítja a táblákat, személyeket, alkalmazásokat, integrációkat és beállításokat. A Homarr ellenőrzi a mentést, mielőtt bármit lecserélne.", + "errorTitle": "A beállítást nem sikerült elindítani", + "errorDescription": "A beállítási választásai továbbra is megvannak. Próbálja újra, vagy töltse újra az oldalt, ha a probléma továbbra is fennáll." + }, + "account": { + "title": "Rendszergazda létrehozása", + "description": "Add meg a rendszergazdai felhasználó hitelesítő adatait.", + "username": "Rendszergazdai felhasználónév", + "passwordHint": "Csak a legalább 8 karakteres hosszúság kötelező. A többi jelszóerősségi ellenőrzés csak javaslat.", + "create": "Rendszergazda létrehozása", + "errorTitle": "A rendszergazdát nem sikerült létrehozni", + "recoveryTitle": "A rendszergazdai fiók létrejött", + "recoveryDescription": "Az automatikus bejelentkezés nem fejeződött be. A beállítás folytatásához jelentkezzen be az imént létrehozott rendszergazdai hitelesítő adatokkal.", + "recoveryAction": "Bejelentkezés és folytatás", + "unknownError": "A rendszergazdát nem sikerült létrehozni." + }, + "externalGroup": { + "title": "Rendszergazdai csoport csatlakoztatása", + "description": "Használja az LDAP vagy OIDC által küldött pontos csoportnevet. A csoport tagjai rendszergazdai hozzáférést kapnak.", + "name": "Külső rendszergazdai csoport", + "nameDescription": "A név megkülönbözteti a kis- és nagybetűket, és meg kell egyeznie az identitásszolgáltatónál megadott névvel.", + "continue": "Csoport mentése és folytatás", + "errorTitle": "A csoportot nem sikerült menteni", + "unknownError": "A rendszergazdai csoportot nem sikerült menteni." + }, + "essentials": { + "title": "Kezdés ismerős alapértékekkel", + "description": "Állítsa be a mindenki által először látott nyelvet és megjelenést, majd adja meg a szolgáltatások által használt címformátumot a Homarr számára.", + "language": "Alapértelmezett nyelv", + "theme": "Alapértelmezett téma", + "themeAuto": "Rendszer", + "themeLight": "Világos", + "themeDark": "Sötét", + "serverOriginHelp": "A Homarr ezt a címet használja az észlelt szolgáltatás-URL-ek előzetes kitöltéséhez. Minden szolgáltatás külön is szerkeszthető.", + "serverDescription": "Ez egy parancsikon, nem korlátozás. Minden észlelt szolgáltatás továbbra is szerkeszthető.", + "serverOrigin": "Domain, IP-cím vagy fordított proxy elérési útja", + "serverOriginDescription": "Példák: home.lan, 192.168.1.10 vagy https://home.example.com/services. Az alábbiakban válassza ki, hogyan legyen hozzáfűzve az egyes szolgáltatásokhoz.", + "analytics": "Névtelen termékanalitika megosztása", + "analyticsDescription": "Segít a Homarrnak javítani a funkciók megbízhatóságát. Nem kerülnek elküldésre szolgáltatási hitelesítő adatok vagy irányítópulttartalmak." + }, + "discover": { + "title": "Nézze meg, mihez férhet hozzá ténylegesen ez a telepítés", + "description": "A Homarr helyben ellenőrzi a képességeket. A hiányzó Docker-szoftvercsatorna vagy Kubernetes-környezet soha nem akadályozza a kézi beállítást.", + "database": "Adatbázis", + "docker": "Docker- és kompatibilis szoftvercsatornák", + "kubernetes": "Kubernetes", + "assistantWorkshop": "Asszisztens és műhely", + "found": "{integrations} integráció és {apps} további alkalmazás található", + "retryKubernetes": "Kubernetes újbóli ellenőrzése", + "retryWorkshop": "A műhely újbóli ellenőrzése", + "unknownVersion": "ismeretlen verzió", + "kubernetesAvailable": "Kapcsolódva a Kuberneteshez: {version}", + "kubernetesDisabled": "Nincs engedélyezve; folytassa Dockerrel vagy kézi szolgáltatásokkal", + "kubernetesUnavailable": "A Kubernetes engedélyezve van, de ebből a Homarr-folyamatból nem érhető el", + "workshopAvailable": "A közösségi műhely és a hosztolt Asszisztens-szolgáltatások elérhetők", + "workshopUnavailable": "A helyi és egyéni Asszisztens-szolgáltatók továbbra is elérhetők", + "partialTitle": "Néhány forrást nem sikerült átvizsgálni", + "partialDescription": "Az elérhető gépekről származó eredményeket megtartottuk. Ellenőrizze a szoftvercsatorna-engedélyeket, vagy adja hozzá kézzel a szolgáltatásokat a következő szakaszban.", + "status": { + "checking": "Elérhetőség ellenőrzése…", + "available": "Elérhető", + "partial": "Részben elérhető", + "empty": "Elérhető, de nem találhatók egyező futó szolgáltatások", + "disabled": "A szerverkonfiguráció letiltotta", + "unavailable": "Ebből a Homarr-folyamatból nem érhető el" } }, - "import": { - "title": "Importálás", - "subtitle": "Importálhat adatokat egy meglévő Homarr-példányból.", - "dropzone": { - "title": "Húzza ide a zip fájlt, vagy kattintson a böngészéshez", - "description": "A feltöltött zip fájlt feldolgozzuk, és kiválaszthatja, hogy mit szeretne importálni" + "connect": { + "title": "Csatlakoztassa, amitől hasznos lesz a tábla", + "description": "Válasszon ki egyszerre több szolgáltatást. A Docker-címkék elsőbbséget élveznek, a lemezkép-egyezés kitölti a hiányokat, és minden URL, valamint hitelesítő adat ellenőrizhető marad.", + "discoveredIntegrations": "Észlelt integrációpéldányok ({count})", + "detectedIntegrationLabel": "{name} importálása, észlelt típus: {kind}", + "detectedAppLabel": "Észlelt {name} alkalmazás importálása", + "otherIntegrations": "Újabb integráció hozzáadása", + "configureIntegrations": "Integrációk konfigurálása", + "discoveredApps": "Észlelt alkalmazások ({count})", + "appAddressRequired": "Adjon meg címet {name} számára, vagy távolítsa el a kijelölésből.", + "empty": "Nincs kiválasztott integráció. A Homarr így is létrehoz egy hasznos kezdőtáblát általános widgetekkel.", + "dockerSource": "Docker", + "manualSource": "Kézi", + "url": "Szolgáltatás URL-je", + "noCredentials": "Nincsenek hitelesítő adatok", + "noCredentialsDescription": "Ehhez az integrációhoz nincs szükség hitelesítő adatokra.", + "credentialMethod": "Hitelesítési mód", + "getApiKey": "Nyissa meg a szolgáltatás API-kulcsának beállításait", + "openGuide": "Nyissa meg a Homarr beállítási útmutatóját ehhez a szolgáltatáshoz", + "testConnection": "Kapcsolat tesztelése", + "testSuccess": "A kapcsolat működik", + "testSuccessDescription": "A Homarr a jelenlegi címmel és hitelesítő adatokkal csatlakozott.", + "testError": "Sikertelen kapcsolódás", + "testErrorDescription": "Ellenőrizze a szolgáltatás címét és a hitelesítő adatokat, majd próbálja újra.", + "needsConfiguration": "Konfigurációra vár", + "tested": "A kapcsolat tesztelve", + "testFailed": "Kapcsolat tesztelése sikertelen", + "incompleteConfirmation": "A befejezetlen integrációk ki lesznek hagyva. Folytatja nélkülük?" + }, + "board": { + "title": "Alakítsa ki a táblát, mielőtt létrehoznánk", + "description": "A Homarr létrehozza a védett Mobil és Alap elrendezéseket, majd elhelyezi a kiválasztott szolgáltatások alkalmazásait és kompatibilis widgetjeit.", + "target": "Konfigurálandó tábla", + "targetDescription": "Válassza ki azt a meglévő táblát, amelyet ez a beállítás frissítsen.", + "targetPlaceholder": "Válasszon táblát", + "targetRequired": "A folytatás előtt válassza ki a konfigurálandó táblát.", + "name": "Tábla neve", + "nameDescription": "A tábla URL-címében használatos; csak betűk, számok, kötőjelek és aláhúzásjelek engedélyezettek.", + "nameRequired": "A folytatás előtt adja meg a tábla nevét.", + "primaryColor": "Elsődleges szín", + "secondaryColor": "Másodlagos szín", + "resetColors": "Színek alaphelyzetbe állítása", + "radius": "Widgetek sarokkerekítése", + "radiusOptions": { + "xs": "Szoros", + "sm": "Finom", + "md": "Kiegyensúlyozott", + "lg": "Lekerekített", + "xl": "Lágy" }, - "fileInfo": { - "action": { - "change": "Fájl módosítása" - } + "columns": "Tábla oszlopai", + "columnsDescription": "Az oszlopok határozzák meg az elemek méretezéséhez és elhelyezéséhez használt vízszintes rácsot. A legtöbb felhasználónak 12 elegendő.", + "columnCount": "{count, plural, one {# oszlop} other {# oszlop}}", + "leftSidebar": "Bal oldalsáv", + "rightSidebar": "Jobb oldalsáv", + "previewLabel": "Az első táblaelrendezés élő előnézete" + }, + "extend": { + "title": "Speciális funkciók", + "tabsLabel": "Asszisztens, Workshop és MCP beállítása", + "assistant": "Asszisztens", + "workshop": "Műhely", + "assistantSetup": { + "loginTitle": "Rendszergazdai bejelentkezés szükséges", + "loginDescription": "A szolgáltatói kulcsok és a modellekhez való hozzáférés privilegizált. Fejezze be a beállítást, jelentkezzen be, és a Homarr közvetlenül megnyitja az Asszisztens konfigurációját.", + "loginAction": "Jelentkezzen be az Asszisztens beállításához" }, - "importSettings": { - "title": "Beállítások importálása", - "description": "Az importálási viselkedés konfigurálása" + "workshopSetup": { + "title": "Homarr Műhely", + "description": "Böngésszen a közösség egyéni widgetjei között, tekintse át a kért képességeiket, telepítse őket, és tegye közzé saját munkáját anélkül, hogy kódot másolna a szerverek között.", + "available": "Elérhető", + "checking": "Ellenőrzés…", + "unavailable": "Nem érhető el", + "discoverTitle": "Felfedezés", + "discoverDescription": "Találjon valódi, saját üzemeltetésű munkafolyamatokhoz készült widgeteket.", + "installTitle": "Áttekintés és telepítés", + "installDescription": "Tekintse át a metaadatokat és a konfigurációt, mielőtt bármit hozzáadna.", + "publishTitle": "Megosztás", + "publishDescription": "Tegyen közzé újrahasznosítható widgeteket a közösség számára.", + "browse": "Workshop böngészése" }, - "boardSelection": { - "title": "Talált {count} táblák", - "description": "Válaszd ki az importálni kívánt táblákat és azok méretét", - "action": { - "selectAll": "Összes kijelölése", - "unselectAll": "Kijelölés megszüntetése" - } - }, - "summary": { - "title": "Importálás összegzése", - "description": "Az alábbi összefoglalóban láthatja, hogy mi lesz importálva", - "action": { - "import": "Importálás megerősítése és folytatás" - }, - "entities": { - "apps": "Alkalmazások", - "boards": "Táblák", - "integrations": "Integrációk", - "credentialUsers": "Hitelesített felhasználók" - } - }, - "tokenModal": { - "title": "Importálási token megadása", - "field": { - "token": { - "label": "Token", - "description": "Írd be az előző Homarr-példányban megjelenített importálási tokent" - } - }, - "notification": { - "error": { - "title": "Érvénytelen token", - "message": "A megadott token érvénytelen" - } - } + "mcpSetup": { + "title": "Homarr MCP", + "description": "Csatlakoztassa a Claude-ot, a Codexet vagy egy másik MCP-klienst a Homarr típusos eszközeihez. Az API-kulcsok egyértelművé és visszavonhatóvá teszik a hozzáférést.", + "endpoint": "Streamelhető HTTP-végpont", + "keyTitle": "Másolja ki most ezt a kulcsot", + "keyDescription": "Biztonsági okokból a Homarr ezt az API-kulcsot később nem tudja újra megjeleníteni.", + "copyKey": "API-kulcs másolása", + "createKey": "MCP API-kulcs létrehozása", + "errorTitle": "Az MCP API-kulcsot nem sikerült létrehozni", + "loginRequired": "A beállítás után jelentkezzen be rendszergazdaként API-kulcs létrehozásához.", + "configuration": "Klienskonfiguráció", + "copy": "Konfiguráció másolása", + "copied": "Másolva", + "advanced": "MCP-eszközök, jogosultságok és beállítás részleteinek megnyitása" } }, - "user": { - "title": "Admin felhasználó", - "subtitle": "Add meg a rendszergazdai felhasználó hitelesítő adatait.", - "notification": { - "success": { - "title": "Létrejött a felhasználó", - "message": "A felhasználót sikeresen létrehoztuk" - }, - "error": { - "title": "A felhasználó létrehozása sikertelen" - } - } - }, - "group": { - "title": "Külső csoport", - "subtitle": "Add meg a külső felhasználókhoz használandó csoportot.", - "form": { - "name": { - "label": "Csoportnév", - "description": "A névnek meg kell egyeznie a külső szolgáltató admin csoportjával" - } - } - }, - "settings": { - "title": "Beállítások", - "subtitle": "Szerver beállítások konfigurálása." - }, - "integrations": { - "title": "Integrációk", - "subtitle": "Válaszd ki a használt szolgáltatásokat.", - "description": "Válaszd ki a csatlakoztatni kívánt integrációkat. Automatikusan beállítjuk az irányítópultot a megfelelő widgetekkel.", - "action": { - "continue": "Folytatás", - "skip": "Kihagyás most" - }, - "configure": { - "progress": "{current} / {total}", - "skip": "Integráció kihagyása", - "finishing": "Irányítópult beállítása...", - "error": { - "title": "A beállítás sikertelen", - "message": "Hiba történt az irányítópult beállítása közben. Próbáld újra." - }, - "helpers": { - "tooltip": "URL segítők", - "description": "Ezek a segítők megpróbálják kitalálni a szolgáltatásaid URL-jét. Ha nem működik, írd be manuálisan a címet." - } - }, - "urlTemplate": { - "label": "Alap URL", - "placeholder": "homelab.local vagy 192.168.1.1", - "hint": "Add meg az alaptartományt vagy IP-címet az integrációs URL-ek automatikus kitöltéséhez", - "warning": "Az alap URL megadásával most automatikusan kitöltődik az összes integrációs URL, időt takarítva meg a beállítás során", - "preview": "pl. {example}", - "mode": { - "subdomain": "Aldomain", - "hostPort": "Hoszt:Port" - } - }, - "docker": { - "detected": "A Docker {count} szolgáltatást észlelt", - "detectedBreakdown": "{integrations} integráció · {apps} alkalmazás", - "summary": "A Homarr {apps} alkalmazást észlelt, ebből {integrations} beépített integrációval rendelkezik", - "appBadge": "Alkalmazás", - "appSectionLabel": "Irányítópultra adandó alkalmazások ({count} kiválasztva)", - "scanning": "Docker szkennelése...", - "scanningDescription": "Futó konténerek keresése a rendszeren" + "review": { + "title": "Egy tábla, a szolgáltatásai köré építve", + "description": "A Homarr teszteli a nem mentett kapcsolatokat, importálja a kiválasztott alkalmazásokat, alkalmazza a megjelenést és az elrendezéseket, majd megnyitja a pontosan beállított táblát.", + "board": "Első tábla", + "columns": "Tábla oszlopai", + "columnsValue": "{count, plural, one {# oszlop} other {# oszlop}}", + "sidebars": "Oldalsávok", + "sidebarsValue": "{count, plural, =0 {Nincs} one {# oldalsáv} other {# oldalsáv}}", + "layouts": "Reszponzív elrendezések", + "layoutsValue": "Mobil + alap", + "integrations": "Integrációk", + "integrationsValue": "{count, plural, =0 {Nincs kiválasztva} one {# integráció} other {# integráció}}", + "apps": "Alkalmazáscsempék", + "appsValue": "{count, plural, =0 {Csak kezdőalkalmazások} one {# alkalmazáscsempe} other {# alkalmazáscsempe}}", + "language": "Nyelv", + "theme": "Téma", + "themeAuto": "Rendszerbeállítás", + "themeLight": "Világos", + "themeDark": "Sötét", + "colors": "Tábla színei", + "radius": "Widget sarokkerekítése", + "automaticTitle": "Amit a Homarr létrehoz", + "automaticDescription": "A kompatibilis widgetek, ikonok, alkalmazáshivatkozások, integrációs kapcsolatok és a reszponzív elhelyezés a megosztott Homarr-katalógusból származik. Később minden eredményt szerkeszthet.", + "dockerWarningTitle": "Néhány Docker-címke megváltozott a beállítás során", + "dockerWarningDescription": "{count, plural, one {# kiválasztott Docker-eredményt nem sikerült alkalmazni, mert a szolgáltatása megváltozott, másik táblára irányult, vagy a widgetje nem volt kompatibilis} other {# kiválasztott Docker-eredményt nem sikerült alkalmazni, mert a szolgáltatásaik megváltoztak, másik táblára irányultak, vagy a widgetjeik nem voltak kompatibilisek}}.", + "errorTitle": "A táblát nem sikerült létrehozni", + "progress": { + "applying": "Kapcsolatok tesztelése és a tábla létrehozása", + "done": "A tábla elkészült" } }, "finish": { - "title": "Beállítás befejezése", - "subtitle": "Készen állsz!", - "description": "Sikeresen befejezte a beállítási folyamatot. Most már használhatja a Homarr-t. Válassza ki a következő műveletet:", - "action": { - "goToBoard": "Tovább a {name} oldalra", - "createBoard": "Az első tábla létrehozása", - "inviteUser": "Más felhasználók meghívása", - "docs": "Olvassa el a dokumentációt" - } + "title": "Az első tábla elkészült.", + "description": "A Homarr összekapcsolta a kiválasztott elemeket, a többit pedig szerkeszthetőként hagyta. Nyissa meg most a táblát; a rövid alkalmazáson belüli bemutató megmutathatja a szerkesztési módot, a widgeteket, az elrendezéseket és a keresést.", + "openBoard": "Saját táblám megnyitása", + "manageTitle": "Kezelés", + "manageDescription": "Alkalmazások, integrációk, táblák, felhasználók és szerverbeállítások finomhangolása.", + "workshopTitle": "Műhely", + "workshopDescription": "Fedezze fel és telepítse a közösség egyéni widgetjeit.", + "docsTitle": "Ismerje meg a Homarrt", + "docsDescription": "Olvassa el a táblákról, widgetekről, integrációkról és eszközökről szóló célzott útmutatókat." } - }, - "backToStart": "Vissza a starthoz" + } }, "user": { - "title": "Felhasználók", "name": "Felhasználó", "page": { "login": { @@ -159,12 +249,10 @@ }, "invite": { "title": "Csatlakozz Homarrhoz", + "titleWithAppName": "Csatlakozás ehhez: {appName}", "subtitle": "Üdvözöljük a Homarrban! Kérjük, hozza létre fiókját", + "subtitleWithAppName": "Üdvözöljük {appName} alkalmazásában! Kérjük, hozza létre a fiókját.", "description": "{username} meghívott" - }, - "init": { - "title": "Új Homarr telepítés", - "subtitle": "Hozd létre a kezdeti rendszergazdai felhasználót" } }, "field": { @@ -192,12 +280,17 @@ "previousPassword": { "label": "Előző jelszó" }, - "homeBoard": { - "label": "Főoldal" - }, "pingIconsEnabled": { "label": "Ikonok használata a pingekhez" }, + "byteUnitSystem": { + "label": "Adatméret-egységek", + "description": "Válassza ki, hogyan jelenítse meg a Homarr a bájtban megadott méreteket és sebességeket. A bitsebességek mindig decimális egységeket használnak.", + "options": { + "binary": "Bináris", + "decimal": "Decimális" + } + }, "enableRightClickOnWidgets": { "label": "A jobb egérgomb használatának engedélyezése a widgeteken", "description": "A Homarr helyi menüjének megjelenítése, amikor a jobb egérgombbal kattintasz egy widgetre. Kapcsold ki, ha a böngésző alapértelmezett menüjét szeretnéd használni (például „Hivatkozás megnyitása új lapon”)." @@ -247,7 +340,6 @@ } } }, - "create": "Felhasználó létrehozása", "changePassword": { "label": "Jelszó módosítása", "notification": { @@ -259,56 +351,6 @@ } } }, - "changeHomeBoard": { - "notification": { - "success": { - "message": "A kezdőlap sikeresen cserélve" - }, - "error": { - "message": "A kezdőlap cseréje nem lehetséges" - } - } - }, - "changeSearchPreferences": { - "notification": { - "success": { - "message": "A keresési beállítások sikeresen megváltoztak" - }, - "error": { - "message": "A keresési beállításokat nem sikerült megváltoztatni" - } - } - }, - "changeFirstDayOfWeek": { - "notification": { - "success": { - "message": "A hét első napja sikeresen megváltozott" - }, - "error": { - "message": "A hét első napja nem módosítható" - } - } - }, - "changePingIconsEnabled": { - "notification": { - "success": { - "message": "A ping ikonok sikeresen váltakoztak" - }, - "error": { - "message": "Nem lehet ping ikonokat megváltoztatni" - } - } - }, - "changeDdgBangs": { - "notification": { - "success": { - "message": "DuckDuckGo parancsok sikeresen bekapcsolódott" - }, - "error": { - "message": "DuckDuckGo parancsokkat nem sikerült bekapcsolni" - } - } - }, "manageAvatar": { "changeImage": { "label": "Képcsere", @@ -338,16 +380,6 @@ } } }, - "editProfile": { - "notification": { - "success": { - "message": "A profil sikeresen frissítve" - }, - "error": { - "message": "Nem sikerült frissíteni a profilt" - } - } - }, "delete": { "label": "Felhasználó végleges törlése", "description": "Törli ezt a felhasználót, beleértve a beállításait. Nem töröl egyetlen táblát sem. A felhasználó nem kap értesítést.", @@ -356,18 +388,13 @@ "select": { "label": "Felhasználó kiválasztása", "notFound": "Felhasználó nem található" - }, - "transfer": { - "label": "Válassz új tulajdonost" } } }, "group": { - "title": "Csoportok", "name": "Csoport", "search": "Csoport keresése", "field": { - "name": "Név", "members": "Tagok", "homeBoard": { "label": "Főoldal", @@ -388,6 +415,19 @@ } } }, + "custom-widget": { + "title": "Egyéni widgetek", + "item": { + "manage": { + "label": "Egyéni widgetek kezelése", + "description": "Lehetővé teszi a tagok számára egyéni widgetdefiníciók létrehozását, szerkesztését és törlését" + }, + "secret-write": { + "label": "Egyéni widgettitkok konfigurálása", + "description": "Lehetővé teszi a tagok és API-kulcsaik számára titkosított egyéni widget-hitelesítő adatok beállítását" + } + } + }, "app": { "title": "Alkalmazások", "item": { @@ -493,6 +533,35 @@ "description": "Lehetővé teszi a tagoknak, hogy kezeljék és töröljék a keresőmotorokat" } } + }, + "matrix": { + "none": "Nincs hozzáférés", + "impliedHint": "Ezt is megadja: {permissions}", + "grantedViaAdmin": "A rendszergazdák már rendelkeznek ezzel. Állítsa a Rendszergazda értékét „Nincs hozzáférés” értékre a külön konfiguráláshoz.", + "preset": { + "label": "Előbeállítások", + "viewer": "Megtekintő", + "viewerDescription": "Csak olvasás: táblák és médiák megtekintése, valamint a már létező alkalmazások és integrációk használata.", + "editor": "Szerkesztő", + "editorDescription": "Mindennapi kezelés: táblák, alkalmazások, integrációk és keresőmotorok létrehozása és szerkesztése.", + "admin": "Adminisztrátor", + "adminDescription": "Korlátozás nélküli hozzáférés minden funkcióhoz és beállításhoz, beleértve a felhasználókezelést is.", + "custom": "Egyéni" + }, + "effective": { + "title": "Tényleges jogosultságok", + "description": "A csoport tagjai által végrehajtható műveletek teljes, ismétlődésmentes halmaza, beleértve a közvetetten megadott jogosultságokat is.", + "empty": "Nincs kiválasztott jogosultság" + }, + "noneDescription": "A tagok nem férnek hozzá ehhez a területhez.", + "level": { + "view": "Megtekintés", + "use": "Használat", + "interact": "Interakció", + "modify": "Módosítás", + "full": "Teljes" + }, + "capabilityIncluded": "Már szerepel ebben: „{level}”" } }, "memberNotice": { @@ -607,21 +676,24 @@ "search": "Alkalmazás megtalálása", "page": { "list": { - "title": "Alkalmazások", + "ariaLabel": "Konfigurált alkalmazások", "noResults": { "title": "Még nincsenek alkalmazások", - "action": "Első alkalmazás létrehozása" + "description": "Az alkalmazások az Ön tábláin használni kívánt szolgáltatásokra és eszközökre mutató hivatkozások.", + "action": "Első alkalmazás létrehozása", + "filteredTitle": "A keresésnek megfelelő alkalmazás nem található", + "filteredDescription": "Nincs a „{search}” kifejezésnek megfelelő alkalmazás. Próbáljon másik nevet vagy URL-címet.", + "createOnlyTitle": "Csak alkalmazásokat adhat hozzá", + "createOnlyDescription": "A jogosultságai lehetővé teszik alkalmazások létrehozását, de a meglévők böngészését nem. A teljes lista megtekintéséhez kérjen alkalmazáskezelési hozzáférést egy rendszergazdától." } }, "create": { "title": "Új alkalmazás", "notification": { "success": { - "title": "Sikeres létrehozás", "message": "Az alkalmazás sikeresen létrejött" }, "error": { - "title": "A létrehozás nem sikerült", "message": "Az alkalmazást nem sikerült létrehozni" } } @@ -630,11 +702,9 @@ "title": "Alkalmazás szerkesztése", "notification": { "success": { - "title": "A módosítások sikeresen alkalmazva", "message": "Az alkalmazás sikeresen mentve" }, "error": { - "title": "Nem sikerült alkalmazni a változtatásokat", "message": "Az alkalmazást nem sikerült menteni" } } @@ -644,26 +714,18 @@ "message": "Biztosan törölni szeretnéd a(z) {name} alkalmazást?", "notification": { "success": { - "title": "Sikeres törlés", "message": "Az alkalmazás sikeresen törölve" }, "error": { - "title": "Törlés sikertelen", "message": "Nem lehet törölni az alkalmazást" } } } }, "field": { - "name": { - "label": "Név" - }, "description": { "label": "Leírás" }, - "url": { - "label": "Url" - }, "useDifferentUrlForPing": { "checkbox": { "label": "Más URL használata a ping-hez", @@ -678,34 +740,582 @@ "search": "Alkalmazás keresése", "noResults": "Nincs találat", "action": "Kiválasztás {app}", - "title": "Válassz egy, a táblához hozzáadni kívánt alkalmazást" + "title": "Válassz egy, a táblához hozzáadni kívánt alkalmazást", + "toggle": "Kattintson a kiválasztáshoz", + "selected": "Kiválasztva", + "multiple": "Hozzáad {count}", + "selectedCount": "{count, plural, one {# kiválasztva} other {# kiválasztva}}", + "appsSelected": "{count, plural, one {# alkalmazás kiválasztva} other {# alkalmazás kiválasztva}}", + "selectMultiple": "Több kiválasztása", + "cancelMultiple": "Többes kijelölés bezárása", + "customApplication": "Egyéni alkalmazás", + "application": "Alkalmazás" }, "create": { "title": "Új alkalmazás készítése", "description": "Új alkalmazás létrehozása ", "action": "Alkalmazás készítő megnyitása" + } + } + }, + "tips": { + "dismiss": "Tipp elvetése", + "multiSelectApps": "Tipp: tartsa lenyomva a Ctrl / ⌘ billentyűt több alkalmazás egyidejű kiválasztásához" + }, + "customWidget": { + "secretEntry": { + "title": "API-forrás konfigurálása", + "description": "Erősítse meg a szerver URL-címét, és adja meg a hitelesítő adatokat. A titkos értékeket a Homarr titkosítja, és soha nem küldi vissza a kérést indító ügynöknek.", + "loading": "Biztonságos kérés betöltése…", + "applying": "A konfiguráció alkalmazása… Hagyja nyitva ezt az oldalt.", + "saved": "Az API-forrás konfigurálva. Bezárhatja ezt az oldalt.", + "unavailable": "A kérés nem érhető el", + "saveError": "Az API-forrás konfigurálása sikertelen", + "source": "API-forrás: {name}", + "baseUrl": "Szerver URL-címe", + "networkScope": "Hálózati hozzáférés", + "save": "API-konfiguráció mentése", + "expires": "Ez az egyszeri kérés ekkor jár le: {time}." + }, + "page": { + "list": { + "noResults": "Még nincsenek egyéni widgetek. Hozd létre az elsőt!", + "noDescription": "Nincs leírás", + "enabled": "Engedélyezve", + "disabled": "Letiltva", + "disabledDescription": "Ez a widget konfigurálva marad, de egyetlen táblán sem töltődik be.", + "requestCount": "{count, plural, one {# kérés} other {# kérés}}", + "invalidDefinition": "Érvénytelen definíció", + "migrationRequired": "Migrálás szükséges", + "migrationInstructions": "Nyissa meg a Műveletek menüt az eredeti v1-definíció másolásához vagy exportálásához, majd hozza létre újra manuálisan. A migrálási kérést LLM-mel is használhatja. A meglévő táblaelhelyezések a migrálás után is működnek.", + "missingCredentials": "{count, plural, one {Hiányzó hitelesítő adat} other {# hiányzó hitelesítő adat}}", + "missingCredentialsDescription": "{count, plural, one {Ennek a widgetnek még egy hitelesítő adatra van szüksége.} other {Ennek a widgetnek még # hitelesítő adatra van szüksége.}} A jelvény kiválasztásával beállíthatja az URL-t és a titkosított értékeket." }, - "add": "Alkalmazás hozzáadása" + "create": { + "title": "Egyéni widget létrehozása", + "subtitle": "Adj meg egy API URL-t, hitelesítést, és hogy hogyan jelenjenek meg a válaszadatok." + }, + "tabs": { + "ariaLabel": "Egyéni widgetszakaszok", + "installed": "Telepítve", + "workshop": "Műhely" + } + }, + "action": { + "pasteImportHint": "Illesszen be egy teljes egyéni widget-JSON-t a Ctrl+V vagy a Command+V billentyűkombinációval", + "delete": "Egyéni widget törlése", + "deleteConfirm": "Biztosan törölni szeretnéd \"{name}\" widgetet? Ez a művelet nem vonható vissza.", + "export": "Exportálás", + "duplicate": "Duplikálás", + "aiPrompt": "Tervezés MI-vel", + "copyAiPrompt": "AI-utasítás másolása", + "enable": "Engedélyezés", + "disable": "Letiltás", + "menu": "Műveletek", + "downloadSkill": "Egyéni widget képességeinek megtekintése", + "publishWorkshop": "Közzététel a Workshopban", + "migrate": "Egyéni widget migrálása", + "configureSources": "Források konfigurálása", + "copyLegacyDefinition": "Eredeti widgettartalom másolása", + "exportLegacyDefinition": "Eredeti widgettartalom exportálása", + "copyMigrationPrompt": "LLM-migrálási kérés másolása", + "pasteMigration": "Migrált widget beillesztése", + "importMigration": "Migrált JSON-fájl importálása" + }, + "sourceSetupDialog": { + "title": "Widgetforrások konfigurálása", + "description": "Tekintse át, hová csatlakozik ez a widget, és adja hozzá vagy cserélje le a titkosított hitelesítő adatait.", + "credentialsRequired": "A kérések sikertelenek lesznek, amíg hozzá nem adja a szükséges hitelesítő adatokat.", + "save": "Konfiguráció mentése" + }, + "field": { + "description": "Leírás" + }, + "editor": { + "errorBoundary": { + "title": "Valami hiba történt" + }, + "action": { + "components": "Komponensek", + "format": "Formázás", + "insertStarter": "Kezdőelem beszúrása", + "redo": "Újra végrehajtás", + "copied": "Másolva", + "schema": "Séma" + }, + "reference": { + "minimal": "Minimális példa", + "full": "Teljes példa" + }, + "componentReference": { + "search": "Komponensek keresése", + "empty": "Nincs egyező komponens", + "count": "{count, number} elérhető komponens" + }, + "status": { + "errors": "{count, number} hiba", + "warnings": "{count, number} figyelmeztetés", + "ready": "Nem található probléma", + "position": "Sor: {line, number}, oszlop: {column, number}", + "characters": "{count, number} karakter", + "charactersWithLimit": "{count, number} / {limit, number}" + }, + "diagnostics": { + "title": "Sablondiagnosztika", + "line": "{line, number}. sor", + "ast": "{value}", + "bindingTypeConflict": "A „{value}” bemenetet inkompatibilis értéktípusú vezérlők osztják meg.", + "runtimeBindingTypeConflict": "A „{value}” bemenet {firstType} és {secondType} típusként is hozzá van rendelve.", + "dynamicRequestId": "Literális requestId szükséges. Dinamikus kérésazonosítók nem fogadhatók el.", + "dynamicInputBinding": "A bind művelethez literális bemeneti név szükséges.", + "inlineRequestProps": "A hálózati komponensek requestId és params értéket fogadnak el; a beágyazott URL-, metódus-, fejléc- és törzspropsok blokkolva vannak.", + "invalidRequestManifest": "A névvel ellátott kéréseknek érvényes kérési térképnek kell lenniük. {value}", + "missingRequestId": "Ehhez a hálózati komponenshez literális requestId szükséges.", + "templateEmpty": "Adjon meg egy JSX-sablont.", + "templateTooLong": "A sablon meghaladja az 50 000 karakteres korlátot.", + "unknownRequest": "Nem létezik „{value}” azonosítójú névvel ellátott kérés." + } + }, + "workbench": { + "configure": "Konfigurálás", + "sectionNavigation": "Egyéni widgetszakaszok", + "widgetPreview": "Widget előnézete", + "generalInformation": "Általános információk", + "invalidWidget": "Érvénytelen widget", + "section": { + "general": "Általános", + "sources": "API-források", + "requests": "Kérelmek", + "options": "Beállítások", + "jsx": "JSX", + "preview": "Előnézet" + }, + "status": { + "unsaved": "Mentetlen változtatások", + "invalid": "Figyelmet igényel", + "ready": "Kész" + }, + "saveError": { + "title": "A widget nem lett mentve", + "description": "Javítsa ki ezeket az ellenőrzési hibákat, majd mentse újra.", + "more": "+{count} további hiba látható a munkaterületen.", + "errors": "Ellenőrzési hibák", + "copy": "Hibák másolása", + "copied": "A hibák másolva" + }, + "action": { + "preview": "Tesztelés és előnézet", + "previewLoading": "Kérések tesztelése" + }, + "requests": { + "title": "Elnevezett lekérdezések és műveletek", + "label": "Kérelmek", + "description": "A lekérdezések adatokat töltenek be; a műveletek csak a felhasználó interakciója után futnak le. Mindkét típushoz bármely HTTP-metódus használható." + }, + "options": { + "title": "Widgetbeállítások" + }, + "builder": { + "advancedManifest": "Speciális nyers jegyzék", + "advancedJson": "Speciális jegyzék-JSON", + "manifestFilename": "widget.json", + "request": "{count, number}. kérés", + "requestId": "Kérésazonosító", + "type": "Letöltőkliens típusa", + "method": "Metódus", + "source": "API-forrás", + "run": "Futtatás", + "runLoad": "A widget betöltésekor", + "runManual": "A SubFetchből", + "permission": "Jogosultság", + "path": "Útvonal", + "pathDescription": "A widgetbeállításokhoz használd az „{option:name}”, a meghívási értékekhez pedig a „{param:name}” formátumot.", + "requestDetails": "Lekérdezés, törzs és viselkedés", + "queryValues": "Lekérdezési értékek", + "queryKey": "Lekérdezési kulcs", + "queryKeyInvalid": "Használjon egy egyedi azonosítót, amely betűvel kezdődik, és csak betűket, számokat, - vagy _ karaktert tartalmaz.", + "valueSource": "Érték forrása", + "literal": "Literális", + "widgetOption": "Widgetbeállítás", + "invocationParameter": "Meghívási paraméter", + "option": "Beállítás", + "parameterName": "Paraméternév", + "value": "Érték", + "removeQueryValue": "Lekérdezési érték eltávolítása", + "addQueryValue": "Lekérdezési érték hozzáadása", + "jsonBody": "JSON-törzs", + "jsonBodyDescription": "Opcionális. Szúrjon be $option és $param hivatkozásokat tetszőleges mélységben.", + "insertOptionReference": "Beállításhivatkozás beszúrása", + "insertParameterReference": "Paraméterhivatkozás beszúrása", + "confirmation": "Megerősítő üzenet", + "invalidation": "Frissítés siker után", + "invalidationDescription": "Vesszővel elválasztott lekérdezésazonosítók", + "noAuth": "Küldés forráshitelesítés nélkül", + "moveRequestUp": "Kérés feljebb mozgatása", + "moveRequestDown": "Kérés lejjebb mozgatása", + "removeRequest": "Kérés eltávolítása", + "addRequest": "Kérés hozzáadása", + "optionName": "Beállítás neve", + "label": "Címke", + "control": "Vezérlő", + "description": "Leírás", + "default": "Alapértelmezett", + "optionDetails": "Korlátozások és dinamikus választási lehetőségek", + "minimum": "Alsó határ", + "maximum": "Felső határ", + "step": "Lépésköz", + "choiceLabel": "Választási címke", + "choiceValue": "Választási érték", + "newChoice": "Új választási lehetőség", + "addChoice": "Választási lehetőség hozzáadása", + "removeChoice": "Választási lehetőség eltávolítása", + "choicesRequest": "Választási lehetőségek betöltése kérésből", + "itemsPath": "Elemek útvonala", + "itemsPathPlaceholder": "elemek (opcionális)", + "valuePath": "Érték útvonala", + "labelPath": "Címke útvonala", + "group": "Csoport", + "advancedOption": "Speciális beállítás", + "moveOptionUp": "Beállítás feljebb mozgatása", + "moveOptionDown": "Beállítás lejjebb mozgatása", + "removeOption": "Beállítás eltávolítása", + "addOption": "Beállítás hozzáadása", + "invalidJson": "Hibás JSON", + "invalidWidget": "Érvénytelen widget" + }, + "jsx": { + "title": "JSX-sablon", + "label": "Sablon" + }, + "sources": { + "title": "API-források és hitelesítő adatok", + "newName": "API {count, number}", + "duplicateSourceId": "Az API-források azonosítóinak egyedieknek kell lenniük.", + "credentialRemoved": "Hitelesítő adat eltávolítva", + "credentialRemovedDescription": "A tárolt érték törölve.", + "primary": "Elsődleges API", + "id": "Forrásazonosító", + "name": "Folyamat neve", + "baseUrl": "Alap URL", + "baseUrlError": { + "invalid": "Adjon meg teljes URL-címet.", + "protocol": "HTTP- vagy HTTPS-URL-címet használjon.", + "credentials": "Távolítsa el a felhasználónevet és a jelszót ebből az URL-címből. Ehelyett alább konfigurálja a hitelesítő adatokat.", + "queryOrFragment": "Távolítsa el a lekérdezési karakterláncot vagy a töredéket ebből az alap URL-címből. Adja hozzá a lekérdezési értékeket egy elnevezett kéréshez." + }, + "networkScope": "Hálózati hozzáférés", + "authentication": "Hitelesítés", + "headerName": "Fejléc neve", + "queryParameter": "Lekérdezési paraméter", + "configured": "Konfigurálva — adjon meg egy cserét", + "clear": "Tiszta", + "remove": "Forrás és kéréseinek eltávolítása", + "advanced": "Speciális", + "add": "Újabb API-forrás hozzáadása", + "sourceType": "Integráció", + "manualSource": "HTTP API", + "existingIntegration": "Meglévő integráció", + "integrationType": "Integráció típusa", + "selectIntegration": "Konfigurált integráció", + "noIntegrations": "Nincs elérhető egyező integráció", + "integrationUnavailable": "A kiválasztott integráció már nem érhető el. Válasszon másik integrációt.", + "integrationDescription": "A mentett integrációs URL-t és hitelesítő adatokat használja. A módosítások automatikusan érvényesülnek. A kérések futtatásához teljes integrációs hozzáférés szükséges." + }, + "ai": { + "title": "Létrehozás vagy javítás bármely MI-vel", + "description": "Először adjon meg egy API-dokumentációs URL-t, ha rendelkezik ilyennel. Javításokhoz lehetőség szerint futtassa az előnézetet. Másolja a kérést bármely MI-be; az hiányzó részleteket kérhet. Illessze be a végső JSON-t ide.", + "request": "Mit kell tennie ennek a widgetnek?", + "documentationUrl": "API-dokumentáció URL-címe (opcionális)", + "paste": "Beillesztés", + "response": "MI-válasz", + "manualCopyDescription": "A vágólaphoz való hozzáférés nem érhető el. Jelölje ki az alábbi kérést, és másolja ki manuálisan.", + "manualPasteDescription": "A vágólaphoz való hozzáférés nem érhető el, vagy a másolt választ javítani kell. Illessze be ide az MI JSON-válaszát.", + "selectAll": "Összes kijelölése", + "loadResponse": "Válasz betöltése", + "loaded": "A widget betöltődött a szerkesztőbe", + "invalidResponse": "A vágólap nem tartalmaz érvényes v2-widgetet", + "invalidResponseDetail": "Az AI-válasz érvénytelen: {message}" + }, + "preview": { + "invalid": "A widget előnézetéhez javítsd az érvényesítési hibákat.", + "fixtureError": "Előnézeti fixture-hiba", + "requestData": "Adatok lekérése", + "status": { + "idle": "A kérések tesztelése még nem történt meg", + "loading": "Kérések tesztelése", + "success": "Minden betöltési kérés sikeres volt", + "error": "Egy vagy több betöltési kérés sikertelen volt" + }, + "result": { + "loading": { + "title": "API-kérések tesztelése", + "description": "A Homarr előnézeti munkamenetet hoz létre, és betölti a widget adatait." + }, + "success": { + "title": "Az előnézet kész", + "description": "{succeeded, plural, =0 {Ennek a widgetnek nincsenek betöltési kérései.} one {# betöltési kérés sikeres volt.} other {# betöltési kérés sikeres volt.}} Nyisd meg az Adatokat a válasz megtekintéséhez." + }, + "error": { + "title": "Az előnézet kérési hibákkal fejeződött be", + "description": "{succeeded, number} sikeres és {failed, number} sikertelen. Nyisd meg az Adatokat a válasz és a hibák részleteinek megtekintéséhez." + } + }, + "instanceOptions": "Példánybeállítások", + "liveActions": "Műveletek futtatása a beállított API-n", + "liveActionsDescription": "A kikapcsolt állapot biztonságos szimuláció. Bekapcsolása hatással van a tényleges szolgáltatásra.", + "noActions": "Nincsenek definiált műveletek.", + "containedFailures": "A futásidejű hibák ezen a widgeten belül maradnak. A kérések naplói soha nem tartalmaznak titkos értékeket.", + "validation": { + "title": "Érvényesítés", + "ready": "A widgetdefiníció érvényes." + }, + "accessibility": { + "title": "Akadálymentességi ellenőrzések", + "ready": "Nem találhatók gyakori akadálymentességi hiányosságok.", + "pending": "Az akadálymentességi ellenőrzések akkor futnak le, ha a widgetdefiníció érvényes.", + "imageAlt": "Adj alt szöveget minden Image elemhez; üres alt értéket csak dekoratív képekhez használj.", + "actionIconLabel": "Adj aria-label vagy title attribútumot minden ActionIcon elemhez.", + "inputLabel": "Adj látható címkét vagy akadálymentes nevet minden beviteli mezőhöz." + }, + "journal": "Redaktált kérési napló", + "actionParameters": "Műveletparaméterek (JSON)", + "invalidParameters": "Használd a deklarált string, number és boolean paramétertípusokat.", + "runDestructive": "Megsemmisítő művelet futtatása", + "runAction": "Művelet futtatása", + "deleteConfirmation": "Ez az előnézeti művelet a beállított API-n keresztül módosítja a távoli adatokat.", + "simulated": "A művelet szimulálva", + "httpStatus": "HTTP {status, number}", + "tab": { + "widget": "Widget", + "data": "Adatok", + "options": "Beállítások", + "state": "A feladat állapota", + "actions": "Vezérlők", + "diagnostics": "Diagnosztika" + }, + "size": { + "compact": "Kompakt", + "standard": "Normál", + "wide": "Széles" + }, + "fixture": { + "live": "Élő", + "loading": "Betöltés", + "empty": "Üres", + "error": "Hiba" + } + } + }, + "preview": { + "request": { + "permission": { + "view": "Megtekintés", + "modify": "Módosítás", + "full": "Teljes" + } + } + }, + "notification": { + "created": "\"{name}\" widget sikeresen létrehozva.", + "updated": "\"{name}\" widget sikeresen frissítve.", + "deleted": "\"{name}\" widget törölve.", + "imported": "A widget importálása sikerült.", + "migrated": "A régi widget sikeresen át lett telepítve. A meglévő táblán lévő elhelyezések most a v2-definíciót használják.", + "migrationError": "Nem sikerült áttelepíteni a régi widgetet. Győződj meg róla, hogy a fájl a homarr-custom-widget-v2 sémát használja.", + "legacyDefinitionCopied": "Az eredeti widgettartalom másolva. A tárolt hitelesítőadat-értékek nem szerepelnek benne.", + "legacyDefinitionCopyError": "Nem sikerült lemásolni az eredeti widgettartalmat.", + "migrationPromptCopied": "Egy redaktált áttelepítési kérés lett a vágólapra másolva. Illeszd be egy LLM-be, másold ki az egyetlen JSON-válaszát, majd válaszd az Áttelepített widget beillesztése ide lehetőséget.", + "migrationPromptCopyError": "Nem sikerült lemásolni az áttelepítési kérést.", + "sourcesConfigured": "A widgetforrások és a hitelesítő adatok mentve.", + "sourceConfigurationError": "Nem sikerült beállítani a widgetforrásokat.", + "aiPromptCopiedWithCount": "Az MI-kérés a vágólapra másolva ({count, number} karakter).", + "aiPromptCopyError": "Az utasítást nem sikerült a vágólapra másolni. Lehet, hogy a böngésződ nem támogatja ezt a funkciót.", + "aiPromptSent": "A kérés elküldve. Folytathatod a szerkesztést, amíg az asszisztens a háttérben dolgozik.", + "updateError": "A widget frissítése sikertelen. A módosításaid nem lettek mentve.", + "importError": "A widget importálása sikertelen. Ellenőrizd, hogy a fájl érvényes egyéni widget JSON export-e.", + "exportError": "A widget exportálása sikertelen.", + "duplicated": "\"{name}\" widget duplikálva.", + "duplicateError": "A widget duplikálása sikertelen.", + "toggleError": "A widget állapotának átkapcsolása sikertelen.", + "deleteError": "A widget törlése sikertelen.", + "previewError": "Az előnézet lekérése sikertelen. Ellenőrizd az URL-t és próbáld újra." + }, + "importReview": { + "title": "Egyéni widget importálásának áttekintése", + "description": "Importálás előtt ellenőrizd, hogy a widget hová csatlakozik, és a vezérlői milyen táblahozzáférést igényelnek.", + "migrationTitle": "Az áttelepített v2-helyettesítő áttekintése", + "migrationDescription": "Tekintsd át és erősítsd meg ezt a létrehozott v2-definíciót. A megerősítés atomikusan lecseréli a megőrzött v1-rekordot, miközben a meglévő táblán lévő elhelyezések ugyanahhoz a widgetazonosítóhoz kapcsolva maradnak.", + "fileLabel": "Egyéni widget JSON-fájljának kiválasztása", + "name": "Folyamat neve", + "origin": "Alapértelmezett eredet", + "authentication": "Hitelesítés", + "networkScope": "Hálózati hatókör", + "methods": "HTTP-metódusok", + "permissions": "Szükséges táblahozzáférések", + "sourceSetup": { + "title": "API-források beállítása", + "description": "Erősítsd meg, hogy a widget hová csatlakozik, és add meg a hitelesítő adatokat. A privát és loopback URL-ek kifejezetten a Homarr-telepítésedhez tartoznak.", + "suggestedUrl": "Javasolt URL", + "confirmUrl": "Megerősítem, hogy ez a szerver-URL helyes a Homarr-telepítésemhez", + "ready": "Az URL kész", + "needsUrl": "URL megerősítése", + "credentialsMissing": "Hiányzó hitelesítő adatok", + "credentialsOptional": "Hitelesítő adatok nélkül is telepítheted, és később is beállíthatod őket, de a kérések sikertelenek lesznek, amíg hozzá nem adod ezeket." + }, + "actionWarning": { + "title": "Ez a widget módosíthatja a távoli adatokat", + "description": "Importálás után tekints át minden megnevezett műveletet, örökölt hitelesítő adatot és megsemmisítő műveletet megerősítő beállítást. A titkok nem szerepelnek a fájlban." + }, + "cancel": "Importálás megszakítása", + "confirm": "Widget importálása", + "confirmMigration": "A v2-helyettesítő megerősítése" + }, + "secret": { + "apiKey": "API-kulcs vagy token", + "username": "Felhasználónév", + "password": "Jelszó", + "savedPlaceholder": "••••••• (mentve, üresen hagyva megtartja)" + } + }, + "workshop": { + "title": "Műhely", + "browseWorkshop": "Műhely böngészése", + "openCommunity": "Műhely megnyitása", + "openOnWorkshop": "{title} megnyitása a Műhely webhelyén", + "back": "Vissza a Műhelyhez", + "search": "Widgetek keresése", + "searchCss": "CSS-témák keresése", + "sort": "Rendezés", + "sortTop": "Legjobb értékelésű", + "sortNewest": "Legújabb", + "listAriaLabel": "Műhelywidgetek", + "listAriaLabelCss": "Műhely-CSS-témák", + "empty": "Egy widget sem felel meg a keresésnek.", + "emptyDescription": "A közösség által közzétett widgetek itt jelennek meg a Műhelyben.", + "emptyFilteredTitle": "Egy widget sem felel meg a keresésnek", + "emptyFilteredDescription": "Egyetlen Műhely-widget sem felel meg ennek: \"{search}\".", + "emptyCss": "Egy CSS-téma sem felel meg a keresésnek.", + "unavailableTitle": "A Homarr Műhely jelenleg nem érhető el", + "unavailable": "A közösségi szolgáltatás átmenetileg nem működhet. Próbáld újra egy pillanat múlva. A telepített widgeteket ez nem érinti.", + "loadError": "Ezt a beküldést nem sikerült betölteni.", + "noDescription": "Nincs leírás", + "author": "{name} készítette", + "communityMember": "Közösségi tag", + "outdated": "Elavult", + "outdatedWarning": "A szerző ezt a beküldést elavultként jelölte meg. Importálás előtt alaposan tekintsd át.", + "score": "Pontszám: {count, number}", + "upvote": "Pozitív szavazat", + "downvote": "Negatív szavazat", + "voteError": "A szavazatot nem sikerült menteni.", + "signIn": "Bejelentkezés GitHubbal", + "signInError": "A GitHub-bejelentkezés sikertelen. Ellenőrizd, hogy a Műhely OAuth-szolgáltatója be van-e állítva, és engedélyezve vannak-e a felugró ablakok.", + "signOut": "Kijelentkezés", + "signInHint": "A szavazáshoz vagy a jelentéshez jelentkezz be. A telepítéshez nincs szükség Műhely-fiókra.", + "securityNotice": "A Műhely widgetjei meghívhatják a deklarált API-forrásaikat, és az általad helyben beállított hitelesítő adatokkal deklarált műveleteket hajthatnak végre. A titkok soha nem kerülnek bele.", + "securityNoticeCss": "A közösségi CSS módosíthatja egy tábla megjelenését és használhatóságát. Importálás előtt tekintsd át; semmi sem kerül mentésre a táblabeállítások mentéséig.", + "install": "Telepítés", + "installReviewTitle": "Áttekintés telepítés előtt", + "installError": "Ez a widget nem telepíthető", + "installErrorDescription": "A Műhely-beküldés nem érvényes Custom JSX v2-widget.", + "useCss": "CSS importálása", + "importCss": "CSS importálása a Műhelyből", + "importCssConfirm": "Lecseréled a jelenlegi egyéni CSS-t erre: \"{title}\"? Semmi sem kerül mentésre a táblabeállítások mentéséig.", + "screenshotAlt": "{title} képernyőképe {count, number}", + "screenshotViewer": "{title} képernyőképnézegetője", + "screenshotsLabel": "{title} képernyőképei", + "zoomScreenshot": "Teljes méret megtekintése", + "previousScreenshot": "Előző képernyőkép", + "nextScreenshot": "Következő képernyőkép", + "showScreenshotThumbnails": "Képernyőkép-bélyegképek megjelenítése", + "hideScreenshotThumbnails": "Képernyőkép-bélyegképek elrejtése", + "closeScreenshotViewer": "Képernyőképnézegető bezárása", + "technicalDetails": "Technikai részletek", + "sourceCode": "Műhelybejegyzés", + "export": "Exportálás", + "report": "Jelentés", + "reportTitle": "Beküldés jelentése", + "reportReason": "Indok", + "reportExplanation": "Mit kell tudniuk a Műhely moderátorainak?", + "reportSend": "Jelentés küldése", + "reportSent": "A jelentés elküldve", + "reportSentDescription": "A Műhely moderátorai most már áttekinthetik ezt a beküldést.", + "reportCount": "{count, plural, one {# jelentés} other {# jelentés}}", + "reportWarning": "{count, plural, one {Ehhez a beküldéshez # nyitott közösségi jelentés tartozik.} other {Ehhez a beküldéshez # nyitott közösségi jelentés tartozik.}} Továbbra is telepíthető, de előbb tekintsd át a tartalmát.", + "reportVisibility": "A jelentés részletei csak a beküldés szerzője és a Műhely rendszergazdái számára láthatók.", + "reportCategory": { + "outdated": "Elavult vagy már nem működik", + "malicious": "Kártékony", + "spam": "Spam", + "copyright": "Szerzői jog", + "inappropriate": "Nem megfelelő", + "other": "Egyéb" + }, + "publish": { + "title": "Közzététel a Műhelyben", + "introTitle": "Oszd meg ezt a widgetet a közösséggel", + "introDescription": "A Homarr hitelesítő adatok nélküli másolatot exportál a jelenlegi widgetről. Adj egyértelmű adatokat a listázáshoz, hogy a felhasználók telepítés előtt tudják, mire szolgál.", + "listingDetails": "Műhely-listázás", + "listingDetailsDescription": "Ezek az adatok nyilvánosan megjelennek az exportált widgetdefiníció mellett.", + "success": "Azonnal közzétéve. A közösség tagjai most már telepíthetik és jelenthetik ezt a widgetet.", + "successTitle": "A widgeted elérhető", + "manageDescription": "Nyisd meg a beküldést a listázás frissítéséhez, a jelentések áttekintéséhez, elavultként való megjelöléséhez vagy törléséhez. A beküldések kezelése közvetlenül a Műhely webhelyén történik.", + "viewSubmission": "Beküldés megtekintése és kezelése", + "done": "Kész", + "signInHint": "Jelentkezz be a Műhely-identitásod alatt történő közzétételhez.", + "titleField": "Cím", + "descriptionField": "Leírás", + "screenshots": "Képernyőképek", + "screenshotsDescription": "Legfeljebb öt PNG-, JPEG- vagy WebP-kép", + "screenshotsPlaceholder": "Képernyőképek kiválasztása", + "invalidScreenshot": "PNG-, JPEG- vagy WebP-képeket használj, amelyek mérete egyenként legfeljebb {maxSize}.", + "privateSourceWarning": "Ez a widget privát forrás-URL-eket tartalmaz ehhez: {sources}. Közzététel előtt cseréld le a személyes gazdagépeket vagy IP-címeket biztonságos szolgáltatás-helyőrzőkre.", + "reviewSourcesTitle": "Privát forrás-URL-ek áttekintése", + "privateSourceConfirmation": "Áttekintettem ezeket a forrás-URL-eket, és nem fednek fel privát infrastruktúrarészleteket", + "action": "Közzététel most", + "publicationNote": "A közzététel azonnali. A beküldést ezt követően a Műhelyben kezelheted.", + "definitionChanged": "A widget megváltozott a közzététel előkészítése közben. Tekintsd át újra a privát forrás-URL-eket, majd próbáld újra.", + "error": "A közzététel sikertelen" } }, "integration": { + "completion": { + "modalTitle": "A szolgáltatás kész", + "title": "{name} csatlakoztatva", + "description": "A kapcsolat tesztje sikeres volt. Válaszd ki, mit szeretnél ezután megjeleníteni ezen a táblán.", + "connectionReady": "A szolgáltatás kapcsolata kész", + "appReady": "Az alkalmazás parancsikonja kész", + "compatibleWidgets": "{count, plural, =0 {Nincs kompatibilis widget} one {# kompatibilis widget} other {# kompatibilis widget}} érhető el", + "chooseWidget": "Widget kiválasztása", + "recipes": { + "title": "Ehhez a táblához ajánlott", + "description": "A csatlakoztatott szolgáltatások és a táblán már meglévő widgetek alapján.", + "newConnectionReason": "Mostantól elérhető ezen keresztül: {integration}", + "existingConnectionReason": "Egy már csatlakoztatott szolgáltatással működik", + "dismiss": "A szolgáltatáshoz tartozó ajánlások elvetése ezen a táblán" + } + }, "page": { "list": { - "title": "Integrációk", + "ariaLabel": "Beállított integrációk", "search": "Integrációk közötti keresés", + "scopedNote": "Csak a kezelésükre jogosult integrációk jelennek meg.", "noResults": { - "title": "Még nincsenek integrációk" + "title": "Még nincsenek integrációk", + "description": "Csatlakoztass egy szolgáltatást, hogy adatait és műveleteit a Homarr widgetjeiben használhasd.", + "action": "Első integráció létrehozása", + "filteredTitle": "Egyetlen integráció sem felel meg a keresésnek", + "filteredDescription": "Egyetlen integráció sem felel meg ennek: \"{search}\". Próbálj másik nevet, típust vagy URL-t.", + "createOnlyTitle": "Csak integrációkat adhatsz hozzá", + "createOnlyDescription": "Az engedélyeid lehetővé teszik integrációk létrehozását, de a meglévők kezelését nem. Kérj hozzáférést egy rendszergazdától azokhoz, amelyekre szükséged van." } }, "create": { "title": "Új {name} integráció", "notification": { "success": { - "title": "Sikeres létrehozás", "message": "Az integráció sikeresen létrejött" }, "error": { - "title": "A létrehozás nem sikerült", "message": "Az integráció nem hozható létre" } }, @@ -729,11 +1339,9 @@ "title": "A {name} integráció szerkesztése", "notification": { "success": { - "title": "A módosítások sikeresen alkalmazva", "message": "Az integráció sikeresen mentve" }, "error": { - "title": "Nem sikerült alkalmazni a változtatásokat", "message": "Az integrációt nem sikerült menteni" } }, @@ -750,23 +1358,15 @@ "message": "Biztosan törölni szeretnéd a(z) {name} integrációt?", "notification": { "success": { - "title": "Sikeres törlés", "message": "Az integráció sikeresen törölve" }, "error": { - "title": "Törlés sikertelen", "message": "Az integráció nem törölhető" } } } }, "field": { - "name": { - "label": "Név" - }, - "url": { - "label": "Url" - }, "attemptSearchEngineCreation": { "label": "Keresőmotor létrehozása", "description": "A(z) „{kind}” integráció keresőmotorokkal is használható. Jelöld be ezt a lehetőséget a keresőmotor automatikus beállításához." @@ -778,6 +1378,10 @@ "label": "Alkalmazás létrehozása", "description": "Hozzon létre egy alkalmazást, amelynek ugyanaz a neve és ikonja van, mint az integrációnak. Hagyja üresen az alábbi beviteli mezőt, hogy az alkalmazás az integrációs URL-lel jöjjön létre." }, + "linkApp": { + "label": "Meglévő alkalmazás összekapcsolása", + "description": "Csatlakoztasd ezt az integrációt egy már használható alkalmazáshoz." + }, "appHref": { "placeholder": "Egyéni alkalmazás URL" }, @@ -791,7 +1395,11 @@ "grid": { "widgetCount": "{count} widget", "noWidgets": "Nincsenek widgetek", - "detected": "Docker-en keresztül észlelve" + "detected": "Docker-en keresztül észlelve", + "connected": "{count, plural, one {# csatlakoztatva} other {# csatlakoztatva}}", + "tiedWidgets": "Kapcsolt widgetek", + "more": "+{count} további", + "loadError": "Az integrációkat nem sikerült betölteni. Új kapcsolat létrehozása előtt próbáld újra." }, "category": { "dnsHole": "DNS", @@ -822,7 +1430,10 @@ "analytics": "Analitika", "vpn": "VPN", "mediaLibrary": "Médiatár", - "uptimeMonitoring": "Üzemidő Figyelés" + "uptimeMonitoring": "Üzemidő Figyelés", + "beszel": "Beszel", + "systemMonitoring": "Rendszerfelügyelet", + "security": "Biztonság" }, "testConnection": { "action": { @@ -1107,6 +1718,22 @@ "slug": { "label": "Állapotoldal slug", "newLabel": "Új állapotoldal slug" + }, + "wazuhIndexerUrl": { + "label": "Indexer URL-je", + "newLabel": "Új indexer-URL" + }, + "wazuhIndexerUsername": { + "label": "Indexer-felhasználónév", + "newLabel": "Új indexer-felhasználónév" + }, + "wazuhIndexerPassword": { + "label": "Indexer-jelszó", + "newLabel": "Új indexer-jelszó" + }, + "wazuhDashboardUrl": { + "label": "Irányítópult URL-je (nem kötelező)", + "newLabel": "Új irányítópult-URL" } } }, @@ -1115,54 +1742,19 @@ "interact": "Interakció az integrációkkal", "full": "Teljes integrációs hozzáférés" }, - "audiobookshelf": { - "name": "Audiobookshelf", - "description": "Self-hosted hangoskönyv és podcast szerver" - }, - "navidrome": { - "name": "Navidrome", - "description": "Self-hosted zenei stream szerver Subsonic API kompatibilitással" - }, - "uptimeKuma": { - "name": "Uptime Kuma", - "description": "Self-hosted üzemidő figyelés nyilvános állapotoldalakkal", - "secret": { - "slug": { - "description": "A nyilvános állapotoldal slug-ja. Alapértelmezés szerint \"default\", ha nincs beállítva." - }, - "apiKey": { - "description": "Megadható API-kulcs a hitelesített /metrics hozzáféréshez" - } - } - }, - "traefik": { - "name": "Traefik", - "description": "Felhőnatív fordított proxy és terheléselosztó" - }, - "paperlessNgx": { - "name": "Paperless-ngx", - "description": "Dokumentumkezelő rendszer beolvasott dokumentumok archiválására és rendszerezésére" - }, - "patchmon": { - "name": "PatchMon", - "description": "Linux-gépek javításkezelése és felügyelete" - }, - "bazarr": { - "name": "Bazarr", - "description": "A Sonarr és a Radarr kiegészítő alkalmazása feliratok kezeléséhez és letöltéséhez" - }, - "wud": { - "name": "What's Up Docker", - "description": "Figyelje, hogy mely Docker-konténereihez érhetők el lemezképfrissítések" + "llamacpp": { + "name": "llama.cpp", + "description": "Helyi llama.cpp llama-server figyelése: állapot, modell- és generálási metrikák" } }, "media": { "plural": "Média", "search": "Média keresése", "field": { - "name": "Név", + "preview": "Előnézet", "size": "Méret", - "creator": "Létrehozó" + "creator": "Létrehozó", + "actions": "Vezérlők" }, "action": { "upload": { @@ -1190,10 +1782,12 @@ } }, "copy": { - "label": "URL másolása" + "label": "URL másolása", + "labelNamed": "URL másolása ehhez: {name}" }, "open": { - "label": "Média megnyitása" + "label": "Média megnyitása", + "labelNamed": "{name} megnyitása" } }, "noResults": { @@ -1208,7 +1802,6 @@ "add": "Hozzáadás", "apply": "Alkalmaz", "backToOverview": "Vissza az áttekintéshez", - "skip": "Kihagyás", "change": "Módosít", "create": "Létrehozás", "createAnother": "Újrakezdés", @@ -1231,16 +1824,31 @@ "tryAgain": "Próbáld újra", "loading": "Töltés", "show": "Mutat", - "hide": "Elrejt" + "hide": "Elrejt", + "undo": "Visszavonás", + "editNamed": "{name} szerkesztése", + "deleteNamed": "{name} törlése", + "clearSearch": "Keresés törlése", + "copy": "Másolás", + "copied": "Másolva", + "refresh": "Frissítés" + }, + "pagination": { + "pageOf": "{page}/{totalPages}. oldal" }, "here": "itt", + "serviceUrlTemplate": { + "serverTitle": "Szokásos szervercím", + "urlModeLabel": "Szolgáltatáscím mintája", + "hostPort": "Azonos gazdagép, eltérő portok", + "subdomain": "Szolgáltatásonként egy aldomain", + "path": "Szolgáltatásonként egy útvonal" + }, "iconPicker": { "label": "Ikonhivatkozás", + "description": "Kereshet a könyvtárban, beilleszthet egy kép URL-t, vagy feltölthet egy fájlt.", "header": "Írjon be nevet vagy objektumokat az ikonok szűréséhez... A Homarr a {countIcons} ikonok között keres", "headerLoading": "Keresés képek neve alapján", - "noResults": "Nincs a(z) „{search}” keresésnek megfelelő ikon.", - "error": "Az ikonok betöltése nem sikerült.", - "description": "Kereshet a könyvtárban, beilleszthet egy kép URL-t, vagy feltölthet egy fájlt.", "clear": "Kép törlése", "uploadImage": "Kép feltöltése", "results": "Képkeresés eredményei", @@ -1249,7 +1857,9 @@ "otherImages": "Egyéb képek", "urlLoading": "Kép ellenőrzése…", "urlReady": "A kép használatra kész.", - "urlError": "A kép nem tölthető be. Ellenőrizd az URL-t, majd próbáld újra." + "urlError": "A kép nem tölthető be. Ellenőrizd az URL-t, majd próbáld újra.", + "noResults": "Nincs a(z) „{search}” keresésnek megfelelő ikon.", + "error": "Az ikonok betöltése nem sikerült." }, "colorScheme": { "options": { @@ -1261,7 +1871,6 @@ "information": { "min": "Legalább", "max": "Legfeljebb", - "days": "Nap", "hours": "Óra", "minutes": "Perc" }, @@ -1298,16 +1907,16 @@ }, "userAvatar": { "menu": { - "switchToDarkMode": "Váltás sötét módba", - "switchToLightMode": "Váltás világos módra", + "open": "Fiókmenü megnyitása", "management": "Kezelés", - "docker": "Docker", "preferences": "Saját preferenciák", "logout": "Kijelentkezés", "login": "Bejelentkezés", "homeBoard": "A saját kezdőlapod", - "loggedOut": "Kijelentkezett", - "updateAvailable": "{countUpdates} frissítés elérhető: {tag}" + "updateAvailable": "{countUpdates} frissítés elérhető: {tag}", + "assistant": "Asszisztens", + "assistantThinking": "Gondolkodás", + "modifier": "Módosító" } }, "dangerZone": "Veszélyzóna", @@ -1355,13 +1964,66 @@ "kilometersPerHour": "km/óra", "milesPerHour": "mph" } + }, + "widgetQuery": { + "loading": "Widgetadatok betöltése" + }, + "total": "Összesen", + "filesystemUsage": "{count, plural, one {Használat megjelenítése ehhez: # fájlrendszer} other {Használat megjelenítése ehhez: # fájlrendszer}}", + "field": { + "name": "Folyamat neve" + }, + "label": { + "new": "Új" + }, + "entity": { + "apps": "Alkalmazások", + "boards": "Táblák", + "certificates": "Tanúsítványok", + "customWidgets": "Egyéni widgetek", + "groups": "Csoportok", + "integrations": "Integrációk", + "invites": "Meghívók", + "logs": "Naplók", + "media": "Média", + "searchEngines": "Keresőmotorok", + "tasks": "Feladatok", + "users": "Felhasználók" } }, "section": { - "dynamic": { + "option": { + "showLabel": { + "label": "Címke megjelenítése", + "description": "A tároló címkéjének megjelenítése a tartalma fölött." + }, + "collapsible": { + "label": "Összecsukás engedélyezése", + "description": "Lehetővé teszi a megtekintőknek ennek a tárolónak a kibontását és összecsukását." + }, + "showOpenAll": { + "label": "Az összes megnyitása művelet megjelenítése", + "description": "Olyan művelet megjelenítése, amely a tároló minden alkalmazását új lapokon nyitja meg." + }, + "scrollable": { + "label": "Görgethető", + "description": "A tároló maradjon a beállított méretű, és a tartalma görgethető legyen ahelyett, hogy a tartalomhoz igazodva növekedne." + } + }, + "action": { + "openAllInNewTabsFor": "{name} összes alkalmazásának megnyitása lapokon" + }, + "openAllInNewTabs": { + "title": "Mindet lapokban megnyitni", + "text": "Egyes böngészők biztonsági okokból letilthatják több lap egyidejű megnyitását. A Homarr nem tudta megnyitni az összes lapot, mert a böngésződ letiltotta a műveletet. Engedélyezd az előugró ablakokat, majd próbáld újra." + }, + "container": { + "untitled": "Névtelen tároló", "action": { - "create": "Új dinamikus szakasz", - "remove": "A dinamikus szakasz eltávolítása" + "create": "Új tároló", + "remove": "Tároló eltávolítása", + "expand": "Kibontás", + "collapse": "Összecsukás" }, "option": { "title": { @@ -1375,55 +2037,12 @@ } }, "remove": { - "title": "Dinamikus szakasz eltávolítása", - "message": "Biztosan el szeretnéd távolítani ezt a dinamikus szakaszt? Az elemek a szülőszakasz azonos helyére kerülnek." - } - }, - "category": { - "field": { - "name": { - "label": "Név" - } - }, - "action": { - "create": "Új kategória", - "edit": "Kategória átnevezése", - "remove": "Kategória eltávolítása", - "moveUp": "Felfelé mozgatás", - "moveDown": "Mozgatás le", - "createAbove": "Új kategória fent", - "createBelow": "Új kategória alább", - "openAllInNewTabs": "Mindet lapokban megnyitni" - }, - "create": { - "title": "Új kategória", - "submit": "Kategória hozzáadása" - }, - "remove": { - "title": "Kategória eltávolítása", - "message": "Biztosan el szeretnéd távolítani a(z) {name} kategóriát?" - }, - "edit": { - "title": "Kategória átnevezése", - "submit": "Kategória átnevezése" - }, - "menu": { - "label": { - "create": "Új kategória", - "changePosition": "Pozíció módosítása", - "settings": "Beállítások" - } - }, - "openAllInNewTabs": { - "title": "Mindet lapokban megnyitni", - "text": "Egyes böngészők biztonsági okokból letilthatják több lap egyidejű megnyitását. A Homarr nem tudta megnyitni az összes lapot, mert a böngésződ letiltotta a műveletet. Engedélyezd az előugró ablakokat, majd próbáld újra." + "message": "Eltávolítod ezt a tárolót? A tartalma a környező területre kerül." } } }, "item": { "action": { - "create": "Új elem", - "import": "Elemek importálása", "edit": "Elem szerkesztése", "moveResize": "Elem áthelyezése / átméretezése", "duplicate": "Elem másolása", @@ -1432,7 +2051,7 @@ "menu": { "label": { "settings": "Beállítások", - "refresh": "Frissítés", + "settingsFor": "Beállítások ehhez: {name}", "options": "Beállítások", "actions": "Műveletek" }, @@ -1441,21 +2060,96 @@ "error": "Hiba", "loading": "Betöltés", "idle": "Tétlen" + }, + "notification": { + "saveError": { + "title": "Nem sikerült menteni a widgetet", + "message": "A widget módosításai vissza lettek állítva" + } } }, "create": { "title": "Válaszd ki a hozzáadandó elemet", "search": "Elemek szűrése", - "addToBoard": "Hozzáadás a táblához" + "addToBoard": "Hozzáadás a táblához", + "addAtPosition": "Elem hozzáadása ide", + "destination": { + "label": "Hozzáadás ide", + "description": "Válaszd ki, hol jelenjen meg a widget. Később továbbra is áthelyezheted.", + "mainCanvas": "Fő vászon", + "leftRail": "Bal oldali sáv", + "rightRail": "Jobb oldali sáv" + }, + "connectionStatus": { + "ready": "Kész", + "needsSetup": "Beállítás szükséges", + "noConnectionRequired": "Nincs szükség kapcsolatra" + }, + "customWidget": "Egyéni widget", + "standalone": "Önálló", + "missingIntegration": { + "title": "Előbb csatlakoztass egy szolgáltatást", + "noPermission": "Ehhez a widgethez kompatibilis szolgáltatáskapcsolat szükséges. Kérj meg egy rendszergazdát egy kapcsolat létrehozására, majd próbáld újra." + }, + "notification": { + "success": { + "title": "Widget hozzáadva", + "message": "{name} hozzá lett adva ehhez a táblához.", + "relocatedMessage": "{name} ide lett hozzáadva: {destination}, mert a kiválasztott cél nem volt elérhető." + }, + "error": { + "title": "Nem sikerült hozzáadni az elemet", + "message": "Az elemet nem sikerült hozzáadni ehhez a táblához" + } + } + }, + "selection": { + "summary": "{count, plural, one {# kiválasztott elem} other {# kiválasztott elem}}", + "selected": "{count, plural, one {# kiválasztva} other {# kiválasztva}}", + "copy": "Másolás", + "copied": "{count, plural, one {# elem a vágólapra másolva} other {# elem a vágólapra másolva}}", + "copyError": "A kiválasztott elemeket nem sikerült másolni. Lehet, hogy a böngésződ nem engedélyezi a vágólap elérését.", + "paste": "Beillesztés", + "pasteShortcut": "Másolt elemek beillesztése ide (Ctrl / ⌘ + V)", + "pasted": "{count, plural, one {# elem beillesztve} other {# elem beillesztve}}", + "pasteError": "A vágólap nem olvasható. Lehet, hogy a böngésződ nem engedélyezi a vágólap elérését.", + "pasteInvalid": "A vágólap nem tartalmaz érvényes Homarr-táblaelemeket.", + "pasteUnavailable": "A másolt elemek nem férnek el ezen a táblán.", + "removed": "{count, plural, one {# elem eltávolítva} other {# elem eltávolítva}}", + "move": "Áthelyezés", + "moveTo": "Kiválasztott elemek áthelyezése", + "delete": "Törlés", + "clear": "Kijelölés törlése", + "clearShortcut": "Kijelölés törlése (Escape)", + "saveErrorTitle": "Nem sikerült frissíteni az elemeket", + "saveErrorMessage": "A módosításokat nem sikerült menteni. A tábla frissítve lett.", + "moveUnavailableTitle": "Nem sikerült áthelyezni a kiválasztott elemeket", + "moveUnavailableMessage": "A célterületen nincs elég hely a teljes kijelölés számára." }, "moveResize": { "title": "Elem áthelyezése / átméretezése", + "entryLabel": "{name}, {column}. oszlop, {row}. sor", + "target": { + "numbered": "{name}, {index}. cél", + "located": "{name}, {location}, {index}. cél" + }, + "keyboard": { + "instructions": "A billentyűzetes szerkesztés megkezdéséhez nyomd meg az Enter vagy a Szóköz billentyűt. A nyílbillentyűkkel mozgathatsz, a Shift és a nyílbillentyűk együttesével átméretezhetsz, az Escape billentyűvel pedig leállíthatod a műveletet.", + "started": "A billentyűzetes szerkesztés elindult. A nyílbillentyűkkel mozgathatsz, a Shift és a nyílbillentyűk együttesével átméretezhetsz, az Escape billentyűvel pedig leállíthatod a műveletet.", + "stopped": "A billentyűzetes szerkesztés leállt.", + "boundary": "Ez a módosítás nem fér el ebben a szakaszban." + }, "field": { + "section": { + "label": "Szakasz vagy sáv" + }, "width": { - "label": "Szélesség" + "label": "Szélesség", + "shortLabel": "Szélesség" }, "height": { - "label": "Magasság" + "label": "Magasság", + "shortLabel": "Magasság" }, "xOffset": { "label": "X eltolás" @@ -1469,18 +2163,36 @@ "title": "Elem szerkesztése", "tab": { "widget": "Widget szerkesztése", - "app": "Alkalmazás szerkesztése" + "app": "Alkalmazás szerkesztése", + "integration": "Integráció szerkesztése" }, "app": { "propagationNotice": "Az alkalmazás módosításai mindenhol érvénybe lépnek, ahol használva van az összes irányítópulton." }, + "integration": { + "action": "Kapcsolat szerkesztése", + "description": "A kiválasztott kapcsolat tesztelése vagy javítása a widget elhagyása nélkül.", + "editLabel": "A {name} integráció szerkesztése", + "fullAccessRequired": "Teljes hozzáférés szükséges", + "propagationNotice": "Az integráció módosításai mindenhol érvényesek, ahol használják. A kapcsolat mentés előtt tesztelve lesz.", + "loading": "Integráció betöltése", + "loadError": "Ezt az integrációt nem sikerült betölteni. A kapcsolatbeállítások módosítása előtt próbáld újra." + }, + "preview": { + "integrationRequired": "Válassz ki egy kapcsolatot a widget előnézetéhez.", + "size": "Fájl mérete" + }, + "settings": { + "label": "Widgetbeállítások" + }, "advancedOptions": { "label": "Haladó beállítások", "title": "Speciális tételbeállítások" }, "field": { "integrations": { - "label": "Integrációk" + "label": "Integrációk", + "removeLabel": "{name} integráció eltávolítása" }, "title": { "label": "Cím" @@ -1494,17 +2206,18 @@ } }, "remove": { - "title": "Elem eltávolítása", "message": "Biztosan eltávolítod ezt az elemet?" + }, + "advancedFocus": { + "open": "Speciális nézet megnyitása", + "close": "Speciális nézet bezárása", + "label": "{widget} speciális nézete" } }, "widget": { "integrationSelect": { "configureIntegrationFirst": "Előbb csatlakoztass egy integrációt", - "loading": "Betöltés…", - "placeholder": "Válassz egy lehetőséget", - "noResults": "Nincs találat", - "loadError": "A lehetőségek betöltése nem sikerült" + "placeholder": "Válassz egy lehetőséget" }, "app": { "name": "Alkalmazás", @@ -1513,9 +2226,6 @@ "appId": { "label": "Alkalmazás" }, - "openInNewTab": { - "label": "Megnyitás új lapon" - }, "showTitle": { "label": "Alkalmazás nevének megjelenítése" }, @@ -1523,11 +2233,8 @@ "label": "Egyszerű ping engedélyezése" }, "layout": { - "label": "Elrendezés", "option": { - "row": "Vízszintes", "row-reverse": "Vízszintes (fordított)", - "column": "Függőleges", "column-reverse": "Függőleges (fordított)" } }, @@ -1552,23 +2259,60 @@ "name": "Könyjelzők", "description": "Több alkalmazáshivatkozást jelenít meg", "option": { - "title": { - "label": "Cím" + "showTitle": { + "label": "Widgetcím megjelenítése" + }, + "titleSize": { + "label": "Widgetcím mérete (px)" }, "layout": { "label": "Elrendezés", "option": { - "row": { - "label": "Vízszintes" - }, - "column": { - "label": "Függőleges" - }, - "grid": { - "label": "Rács" + "adaptive": { + "label": "Adaptív" }, "gridHorizontal": { "label": "Vízszintes rács" + }, + "icons": { + "label": "Ikonok" + } + } + }, + "variant": { + "label": "Megjelenés", + "option": { + "soft": { + "label": "Lágy" + }, + "filled": { + "label": "Kitöltött" + }, + "outline": { + "label": "Körvonal" + }, + "plain": { + "label": "Egyszerű" + } + } + }, + "spacing": { + "label": "Kártyák közötti térköz", + "option": { + "xs": { + "label": "Extra kicsi" + }, + "sm": { + "label": "Kicsi" + }, + "md": { + "label": "Közepes" + }, + "lg": { + "label": "Nagy" + }, + "xl": { + "label": "Extra nagy" } } }, @@ -1581,17 +2325,28 @@ "hideHostname": { "label": "A gazdagépnevek elrejtése" }, - "openNewTab": { - "label": "Megnyitás új lapon" - }, "withBorder": { "label": "Szegély mutatása" }, + "grow": { + "label": "Kártyák kibővítése a sor kitöltéséhez" + }, + "customUrls": { + "label": "Egyéni hivatkozások" + }, "items": { "label": "Könyjelzők", - "add": "Könyvjelző hozzáadása" + "remove": "Könyvjelző eltávolítása", + "apps": { + "label": "Könyvjelzők hozzáadása", + "description": "Illesszen be URL-eket, vagy keressen meglévő alkalmazásokat. Az alábbi könyvjelzők húzásával módosíthatja a sorrendjüket.", + "placeholder": "Illesszen be URL-eket, vagy keressen alkalmazásokat", + "addUrl": "URL hozzáadása", + "hint": "URL hozzáadásához nyomja meg az Enter billentyűt. Több URL hozzáadásához illesszen be vesszővel elválasztott vagy soronként egy URL-t." + } } - } + }, + "empty": "Adjon hozzá egy URL-t vagy alkalmazást a widget beállításaiban" }, "archiveTeamWarrior": { "name": "ArchiveTeam Warrior", @@ -1600,33 +2355,61 @@ "showBroadcastMessage": { "label": "Közlemények megjelenítése" } + }, + "noProjectSelected": "Nincs kiválasztva projekt", + "runnerStatus": "Futtató: {status}", + "projectId": "Projekt: {id}", + "sessionReceived": "Munkamenet fogadva: {value}", + "sessionSent": "Munkamenet elküldve: {value}", + "sessionId": "Munkamenet: {id}", + "startedAt": "Elindítva: {date}", + "emptyItems": "Ebben a pillanatképben nincsenek aktív vagy legutóbbi feladatok", + "metric": { + "running": "Fut", + "completed": "Kész", + "failed": "Sikertelen", + "canceled": "Megszakítva", + "download": "Letöltés", + "upload": "Feltöltés" + }, + "status": { + "running": "Fut", + "completed": "Befejezett", + "failed": "Sikertelen", + "canceled": "Megszakítva", + "stopped": "Leállítva", + "idle": "Tétlen", + "unknown": "Ismeretlen" + } + }, + "wud": { + "name": "What's Up Docker", + "description": "Megmutatja, hány figyelt konténerhez érhető el frissítés.", + "title": "What's Up Docker", + "monitored": "Figyelt", + "updatesAvailable": "{count, plural, one {# frissítés érhető el} other {# frissítés érhető el}}", + "updateAvailable": "Frissítés érhető el", + "openReleaseNotes": "Kiadási megjegyzések megnyitása", + "option": { + "showRing": { + "label": "Frissítési gyűrű megjelenítése" + }, + "showUpdateList": { + "label": "A konténerfrissítések listájának megjelenítése", + "description": "Felsorolja az összes figyelt konténert, amelyhez elérhető képfrissítés." + } } }, "dnsHoleSummary": { "name": "DNS Blokkoló Összefoglaló", "description": "Megjeleníti a DNS Blokkoló összefoglalóját", "option": { - "layout": { - "label": "Elrendezés", - "option": { - "row": { - "label": "Vízszintes" - }, - "column": { - "label": "Függőleges" - }, - "grid": { - "label": "Rács" - } - } - }, "usePiHoleColors": { "label": "Használjon Pi-Hole színeket" } }, "error": { - "internalServerError": "Nem sikerült lekérni a DNS Hole összefoglalóját", - "integrationsDisconnected": "Nem állnak rendelkezésre adatok, minden integráció megszakadt" + "internalServerError": "Nem sikerült lekérni a DNS Hole összefoglalóját" }, "data": { "adsBlockedToday": "Mai blokkolások", @@ -1634,32 +2417,24 @@ "dnsQueriesToday": "Mai lekérdezések", "domainsBeingBlocked": "Domainek a tiltólistán" }, - "domainsTooltip": "A számos integráció miatt a Homarr nem tudja kiszámítani a blokkolt domainek pontos számát" + "domainsTooltip": "A számos integráció miatt a Homarr nem tudja kiszámítani a blokkolt domainek pontos számát", + "status": { + "enabled": "Engedélyezve", + "disabled": "Letiltva", + "unknown": "Ismeretlen" + } }, "dnsHoleControls": { "name": "DNS blokkolók ellenőrzése", "description": "A PiHole vagy az AdGuard vezérlése a műszerfalról", "option": { - "layout": { - "label": "Elrendezés", - "option": { - "row": { - "label": "Vízszintes" - }, - "column": { - "label": "Függőleges" - }, - "grid": { - "label": "Rács" - } - } - }, "showToggleAllButtons": { "label": "Összes gomb megjelenítése" } }, "error": { - "internalServerError": "Nem sikerült vezérelni a DNS Blokkolót" + "internalServerError": "Nem sikerült vezérelni a DNS Blokkolót", + "bulkActionsFailed": "{count, plural, one {# művelet sikertelen} other {# művelet sikertelen}}" }, "controls": { "enableAll": "Az összes engedélyezése", @@ -1670,8 +2445,6 @@ "disabled": "Letiltva", "processing": "Feldolgozás", "disconnected": "Szétkapcsolt", - "hours": "Óra", - "minutes": "Perc", "unlimited": "Hagyja üresen a korlátlanhoz" } }, @@ -1683,16 +2456,10 @@ "label": "Egyedi cím/város megjelenítése", "description": "Mutasson egy egyéni címet vagy a város/ország nevét az óra tetején." }, - "customTitle": { - "label": "Cím" - }, "is24HourFormat": { "label": "24 órás formátum", "description": "12 órás formátum helyett 24 órás formátumot használjon" }, - "showSeconds": { - "label": "Másodpercek kijelzése" - }, "useCustomTimezone": { "label": "Használjon rögzített időzónát" }, @@ -1711,29 +2478,295 @@ "label": "Egyéni időformátum", "description": "Az idő formázásához használd az ISO 8601 szabványt (ez felülírja a többi beállítást)" }, - "customDateFormat": { - "label": "Egyedi dátumformátum", - "description": "A dátum formázásához használd az ISO 8601 szabványt (ez felülírja a többi beállítást)" - }, "showWeather": { "label": "Időjárás megjelenítése", "description": "Kis animált időjárásikon és a hőmérséklet megjelenítése a kártya sarkában" }, - "weatherLocation": { - "label": "Időjárási helyszín" - }, "isWeatherFormatFahrenheit": { "label": "Fahrenheit használata" + }, + "animateWeatherIcon": { + "label": "Időjárásikon animálása", + "description": "Az időjárásikon animálása. Alapértelmezés szerint ki van kapcsolva, és csökkentett mozgás kérése esetén mindig ki van kapcsolva." + }, + "colorWeatherByDayNight": { + "label": "Időjárás színezése napszak szerint", + "description": "Az időjárásikont és a hőmérsékletet nappali vagy éjszakai színnel színezi annak alapján, hogy a kiválasztott helyen éppen nappal vagy éjszaka van-e." + }, + "dayWeatherColor": { + "label": "Nappali szín" + }, + "nightWeatherColor": { + "label": "Éjszakai szín" + }, + "worldClockCities": { + "label": "Világóra városai", + "description": "Haladó nézethez legfeljebb hat várost adhat hozzá, és rendezheti őket." } + }, + "timezoneList": { + "timezone": "Időzóna", + "cityLabel": "Város címkéje", + "searchPlaceholder": "Időzónák keresése", + "noResults": "Nem található időzóna", + "unsupportedOption": "Nem támogatott: {timeZone}", + "add": "Város hozzáadása", + "remove": "{city} eltávolítása", + "reorder": "{city} átrendezése", + "limit": "{count} / {maximum} város beállítva" + }, + "worldClock": { + "primary": "Elsődleges óra", + "local": "Helyi idő", + "today": "Ma", + "tomorrow": "Holnap", + "yesterday": "Tegnap", + "noSecondaryCities": "Adjon hozzá városokat a widget beállításaiban az összehasonlításhoz.", + "unsupportedPrimaryTitle": "Az elsődleges óra nem érhető el", + "unsupportedPrimary": "A(z) {timeZone} időzónát ez a böngésző nem támogatja. Egyértelműen megjelölt tartalékként az UTC jelenik meg.", + "unsupportedTimeZone": "Nem támogatott időzóna: {timeZone}", + "accessibleTime": "{city}: {time}, {date}, {timeZone}", + "advancedLabel": "Haladó világóra", + "cities": "Világórák", + "cityCount": "{count} időzóna", + "timeBarLabel": "A nap 24 órás időbeli helyzete: {city}", + "dayProgress": "{percent}% eltelt · {hours} óra {minutes} perc van hátra", + "phaseLegend": "A napszakok jelmagyarázata", + "tick": { + "midnight": "00", + "morning": "06", + "noon": "12", + "evening": "18", + "end": "24" + }, + "phaseRange": { + "night": "00–05 · 21–24", + "dawn": "05–08", + "day": "08–18", + "dusk": "18–21" + }, + "phase": { + "night": "Éjszaka", + "dawn": "Hajnal", + "day": "Nappal", + "dusk": "Alkonyat" + } + } + }, + "airQuality": { + "name": "Levegőminőség és UV", + "description": "Megjeleníti egy hely levegőminőségét, ultraibolya-indexét, szennyezőanyagait és pollenkoncentrációját.", + "option": { + "location": { + "label": "Levegőminőség helye" + }, + "aqiStandard": { + "label": "AQI-szabvány", + "options": { + "auto": "Automatikus a területi beállítás szerint", + "european": "Európai AQI", + "us": "Amerikai AQI" + } + }, + "showUv": { + "label": "UV-index megjelenítése" + }, + "showPollutants": { + "label": "Szennyezőanyag-koncentrációk megjelenítése" + }, + "showPollen": { + "label": "Pollenkoncentrációk megjelenítése" + } + }, + "category": { + "good": "Jó", + "fair": "Megfelelő", + "moderate": "Mérsékelt", + "unhealthySensitive": "Érzékeny csoportok számára egészségtelen", + "unhealthy": "Hibás", + "poor": "Rossz", + "veryPoor": "Nagyon rossz", + "veryUnhealthy": "Nagyon egészségtelen", + "extremelyPoor": "Rendkívül rossz", + "hazardous": "Veszélyes", + "unknown": "Nincs AQI-érték" + }, + "uv": { + "label": "UV-index", + "category": { + "low": "Alacsony", + "moderate": "Mérsékelt", + "high": "Magas", + "veryHigh": "Nagyon magas", + "extreme": "Szélsőséges", + "unknown": "Nincs érték" + } + }, + "dominantPollutant": "Domináns szennyezőanyag", + "aqiLabel": "Levegőminőségi index (AQI)", + "strongestPollen": "Legmagasabb pollenszint", + "unit": { + "concentration": "{value} µg/m³", + "pollen": "{value} szem/m³" + }, + "pollutant": { + "pm2_5": "PM2,5", + "pm10": "PM10-részecskék", + "ozone": "Ózon", + "nitrogenDioxide": "Nitrogén-dioxid", + "sulphurDioxide": "Kén-dioxid", + "carbonMonoxide": "Szén-monoxid" + }, + "pollen": { + "alder": "Éger", + "birch": "Nyír", + "grass": "Fű", + "mugwort": "Fekete üröm", + "olive": "Olajfa", + "ragweed": "Parlagfű" + }, + "compact": { + "sixHourTrend": "AQI-trend a következő hat órára" + }, + "advanced": { + "observedAt": "Frissítve: {time}", + "next24Hours": "Következő 24 óra", + "pollutants": "Szennyezőanyag-koncentrációk", + "pollen": "Pollenkoncentrációk", + "sevenDayForecast": "7 napos maximális előrejelzés", + "aqiValue": "AQI: {value}", + "uvValue": "UV: {value}", + "uvShort": "UV: {value}", + "noForecast": "Nincs elérhető előrejelzési adat" + } + }, + "countdown": { + "name": "Visszaszámlálások", + "description": "Közelgő eseményeket és ismétlődő évfordulókat követ.", + "option": { + "events": { + "label": "Események", + "description": "Legfeljebb 20 egyszeri vagy éves visszaszámlálás hozzáadása és rendezése. A dátumok a kiválasztott időzónában adhatók meg." + }, + "showProgress": { + "label": "Folyamat megjelenítése" + }, + "showSeconds": { + "label": "Másodpercek megjelenítése", + "description": "A másodpercek minden közelgő eseménynél láthatók maradnak." + } + }, + "dateTimeEventList": { + "newEvent": "Új esemény", + "add": "Esemény hozzáadása", + "remove": "{event} eltávolítása", + "reorder": "{event} átrendezése", + "eventLabel": "Esemény címkéje", + "timezone": "Időzóna", + "unsupportedOption": "Nem támogatott: {timeZone}", + "recurrence": "Ismétlődés", + "recurrenceOption": { + "none": "Nem ismétlődik", + "yearly": "Évente" + }, + "target": "Esemény dátuma és időpontja", + "trackProgress": "Folyamat követése kezdődátumtól", + "start": "A folyamat kezdő dátuma és időpontja", + "confirmDateTime": "Dátum és időpont megerősítése", + "limit": "{count} / {maximum} esemény beállítva" + }, + "empty": { + "title": "Még nincsenek visszaszámlálások", + "description": "A visszaszámlálás megkezdéséhez adj hozzá egy eseményt a widget beállításaiban." + }, + "completed": "Befejezett", + "yearly": "Éves", + "progress": "Esemény folyamata", + "upcoming": "Közelgő", + "completedEvents": "Befejezett események", + "invalid": { + "title": "Néhány esemény nem jeleníthető meg", + "description": "{count, plural, one {Egy esemény dátuma érvénytelen vagy az időzónája nem támogatott.} other {# esemény dátuma érvénytelen vagy az időzónája nem támogatott.}}", + "value": "Nem érhető el" + }, + "alert": { + "notifications": "Böngészőértesítések", + "permissionDenied": "Az értesítések le vannak tiltva ebben a böngészőben.", + "reached": "A visszaszámlálás elérte a célját." + } + }, + "timer": { + "name": "Időzítő / Pomodoro", + "description": "Egyszerű időzítőt vagy beállítható Pomodoro-sorozatot futtat.", + "option": { + "mode": { + "label": "Mód", + "options": { + "timer": "Időzítő", + "pomodoro": "Pomodoro" + } + }, + "timerMinutes": { + "label": "Időzítő percei" + }, + "focusMinutes": { + "label": "Fókuszpercek" + }, + "shortBreakMinutes": { + "label": "Rövid szünet percei" + }, + "longBreakMinutes": { + "label": "Hosszú szünet percei" + }, + "sessionsBeforeLongBreak": { + "label": "Fókuszidőszakok hosszú szünet előtt" + }, + "autoStartBreaks": { + "label": "Szünetek automatikus indítása" + }, + "autoStartFocus": { + "label": "Fókuszidőszakok automatikus indítása" + } + }, + "phase": { + "timer": "Időzítő", + "focus": "Fókusz", + "shortBreak": "Rövid szünet", + "longBreak": "Hosszú szünet" + }, + "action": { + "start": "Indítás", + "pause": "Szüneteltetés", + "reset": "Visszaállítás" + }, + "attention": { + "timerComplete": "Az időzítő lejárt", + "phaseReady": "{phase} kész" + }, + "progress": "Időzítő folyamata: {progress}%", + "compact": { + "completedFocus": "{count, plural, =0 {Nem fejeződött be fókuszidőszak} one {# fókuszidőszak befejeződött} other {# fókuszidőszak befejeződött}}" + }, + "alert": { + "title": "Az időzítő lejárt", + "completed": "{phase} befejeződött." + }, + "advanced": { + "sequence": "Pomodoro-sorozat", + "focusSession": "{session}. fókuszidőszak", + "settings": "Állandó beállítások", + "settingsHint": "Ezen a táblán a widget helyi menüjével szerkesztheted ezeket a beállításokat.", + "localAlerts": "Helyi riasztások", + "notifications": "Böngészőértesítések", + "sound": "Időzítőhangok", + "localAlertsHint": "Az értesítések le vannak tiltva ebben a böngészőben.", + "notificationsDenied": "Az értesítések le vannak tiltva ebben a böngészőben." } }, "minecraftServerStatus": { "name": "Minecraft szerver állapota", "description": "Megjeleníti a Minecraft-szerver állapotát", "option": { - "title": { - "label": "Cím" - }, "domain": { "label": "Szerver cím" }, @@ -1753,11 +2786,21 @@ "noStation": "Nincs kiválasztott állomás", "option": { "baseUrl": { - "label": "Search.ch URL" + "label": "Search.ch URL", + "description": "Az egyéni URL-eknek nyilvános IP-címre kell mutatniuk. A privát és helyi gépek elutasításra kerülnek." }, "station": { - "label": "Állomás" + "label": "Állomás", + "placeholder": "Állomás keresése" } + }, + "error": { + "customSourceUnavailable": "A menetrend forrása nem érhető el. Ellenőrizd, hogy az URL-je nyilvános IP-címre oldódik-e fel.", + "stationSearch": "Nem sikerült állomásokat keresni. Ellenőrizd az egyéni URL-t és a táblához való hozzáférésedet." + }, + "warning": { + "stale": "A menetrendet nem sikerült frissíteni. Az indulások utolsó frissítése: {time}.", + "staleCompact": "Elavult adatok" } }, "notebook": { @@ -1789,6 +2832,9 @@ "directionRtl": "Szövegirány beállítása jobbról balra", "blockquote": "Idézet", "horizontalLine": "Vízszintes vonal", + "details": "Összecsukható szakasz be- és kikapcsolása", + "expandDetails": "Összecsukható szakasz kibontása", + "collapseDetails": "Összecsukható szakasz összecsukása", "bulletList": "Lista", "orderedList": "Sorkizárt", "checkList": "Jelölőnégyzetes lista", @@ -1797,16 +2843,20 @@ "link": "Hivatkozás", "unlink": "Hivatkozás eltávolítása", "image": "Kép beágyazása", - "addTable": "Táblázat hozzáadása", + "insertTable": "Táblázat beszúrása", + "insertTableSize": "{columns} × {rows} méretű táblázat beszúrása", "deleteTable": "Táblázat törlése", "colorCell": "Színes cella", - "mergeCell": "Cellák egyesítése", + "mergeCells": "Cellák egyesítése", + "splitCell": "Cella felosztása", "addColumnLeft": "Oszlop hozzáadása előtte", "addColumnRight": "Oszlop hozzáadása utána", "deleteColumn": "Oszlop törlése", "addRowTop": "Sor hozzáadása előtte", "addRowBelow": "Sor hozzáadása utána", - "deleteRow": "Sor törlése" + "deleteRow": "Sor törlése", + "toggleHeaderRow": "Fejlécsor be- és kikapcsolása", + "toggleHeaderColumn": "Fejléccel rendelkező oszlop be- és kikapcsolása" }, "align": { "left": "Bal", @@ -1817,8 +2867,6 @@ "clearColor": "Szín törlése", "source": "Forrás", "widthPlaceholder": "Érték %-ban vagy képpontban", - "columns": "Oszlopok", - "rows": "Sorok", "width": "Szélesség", "height": "Magasság" }, @@ -1830,7 +2878,9 @@ "discard": "Változtatások elvetése", "keepEditing": "Szerkesztés folytatása" } - } + }, + "saveFailed": "Nem sikerült menteni a jegyzetet", + "documentStats": "{words, plural, one {# szó} other {# szó}} · {characters, plural, one {# karakter} other {# karakter}}" }, "anchorNote": { "name": "Anchor Note", @@ -1839,9 +2889,6 @@ "noteId": { "label": "Jegyzet" }, - "showTitle": { - "label": "Cím megjelenítése" - }, "showUpdatedAt": { "label": "Utolsó frissítés megjelenítése" } @@ -1851,14 +2898,20 @@ "notFound": "Jegyzet nem található", "noNotes": "Nem található jegyzet", "integrationRequired": "Először válasszon ki egy Anchor-integrációt", - "updatedAt": "Frissítve: {date}", "untitled": "Névtelen", - "edit": "Szerkesztés", - "save": "Mentés", - "cancel": "Mégse", "readOnlyViewer": "Ehhez a jegyzethez olvasói hozzáférésed van. A szerkesztés le van tiltva.", "saveForbidden": "Nincs jogosultságod a jegyzet szerkesztéséhez.", - "saveFailed": "Nem sikerült menteni a jegyzetet. Próbáld újra." + "saveFailed": "Nem sikerült menteni a jegyzetet. Próbáld újra.", + "createdAt": "Létrehozva: {date}", + "permission": { + "owner": "Tulajdonos", + "editor": "Szerkesztő", + "viewer": "Megtekintő" + }, + "status": { + "pinned": "Kitűzve", + "archived": "Archiválva" + } }, "iframe": { "name": "Beágyazott keret (iFrame)", @@ -1917,6 +2970,25 @@ "clickable": { "label": "Kattintható" } + }, + "state": { + "on": "Be", + "off": "Ki", + "unavailable": "Nem érhető el", + "unknown": "Ismeretlen" + }, + "advanced": { + "entityId": "Egységazonosító: {id}", + "lastChanged": "Módosítva: {date}", + "attribute": { + "unit": "Mértékegység", + "deviceClass": "Eszközosztály", + "icon": "Ikon" + } + }, + "error": { + "loadFailed": "Nem sikerült betölteni az egységet", + "toggleFailed": "Nem sikerült frissíteni az egységet" } }, "smartHome-executeAutomation": { @@ -1932,11 +3004,31 @@ }, "spotlightAction": { "run": "Futtasd a {name} parancsot" + }, + "advanced": { + "lastExecuted": "Utolsó futtatás: {time}", + "automationId": "Automatizálási azonosító: {id}", + "ready": "Futtatásra kész", + "noPermission": "Nincs engedélyed az automatizálás futtatására" + }, + "status": { + "running": "Automatizálás futtatása", + "success": "Az automatizálás befejeződött" + }, + "error": { + "executeFailed": "Nem sikerült futtatni az automatizálást" } }, "stockPrice": { "name": "Részvényár", "description": "Megjeleníti egy vállalat aktuális részvényárfolyamát", + "advanced": { + "currentPrice": "Aktuális ár", + "previousClose": "Előző záróár", + "changePercentage": "Változás (%)", + "minimum": "Minimum", + "maximum": "Maximum" + }, "option": { "stock": { "label": "Tőzsdei szimbólumok" @@ -2007,6 +3099,10 @@ "label": "1 hónap" } } + }, + "showDetails": { + "label": "Részletek megjelenítése", + "description": "A kompakt nézetben megjeleníti a nevet, a változást és az időtartományt. Kikapcsolva csak a szimbólum és az ár látható." } } }, @@ -2034,6 +3130,13 @@ "showUnmonitored": { "label": "Nem ellenőrzött megjelenítés" } + }, + "advanced": { + "previousMonth": "Előző hónap megjelenítése", + "nextMonth": "Következő hónap megjelenítése", + "eventCount": "{count, plural, one {# esemény} other {# esemény}}", + "loading": "Naptáresemények betöltése...", + "noEvents": "Ebben a hónapban nincsenek események" } }, "weather": { @@ -2046,16 +3149,18 @@ "disableTemperatureDecimals": { "label": "Hőmérséklet tizedesjegyének kikapcsolása" }, + "animateIcons": { + "label": "Időjárásikonok animálása" + }, + "showHumidity": { + "label": "Páratartalom megjelenítése" + }, "showCurrentWindSpeed": { - "label": "Aktuális szélsebesség megjelenítése", - "description": "Csak az aktuális időjárásról" + "label": "Aktuális szélsebesség megjelenítése" }, "useImperialSpeed": { "label": "Szélsebesség mph-ban" }, - "location": { - "label": "Időjárás helye" - }, "showCity": { "label": "Város megjelenítése" }, @@ -2065,13 +3170,10 @@ "forecastDayCount": { "label": "Előrejelzés napjainak száma", "description": "Ha a widget nem elég széles, kevesebb nap jelenik meg" - }, - "dateFormat": { - "label": "Dátum formátum", - "description": "Hogyan nézzen ki a dátum" } }, "currentWindSpeed": "{currentWindSpeed} {unit}", + "disabled": "Az időjárási adatok nem érhetők el, mert a kimenő kapcsolatok le vannak tiltva", "dailyForecast": { "sunrise": "Napkelte", "sunset": "Naplemente", @@ -2094,6 +3196,47 @@ "thunderstorm": "Vihar", "thunderstormWithHail": "Zivatar jégesővel", "unknown": "Ismeretlen" + }, + "details": "Időjárási részletek megjelenítése", + "detailsFor": "Időjárási részletek megjelenítése ehhez: {date}", + "advanced": { + "forecast": "7 napos előrejelzés", + "hourlyForecast": "Következő 24 óra", + "day": "Nap", + "time": "Idő", + "conditions": "Időjárási körülmények", + "temperature": "Hőmérséklet", + "feelsLike": "Hőérzet: {temperature}", + "feelsLikeLabel": "Hőérzet", + "feelsLikeRange": "Hőérzet: {maximum} / {minimum}", + "highLow": "Maximum {maximum} · minimum {minimum}", + "observedAt": "Frissítve: {time}", + "humidity": "Páratartalom", + "averageHumidity": "Átlagos páratartalom: {humidity}%", + "currentHumidity": "Aktuális páratartalom", + "wind": "Szél / széllökések ({unit})", + "currentWind": "Aktuális szél / széllökések", + "windValue": "{speed} / {gusts} {unit}", + "windDetail": "Maximális szél / széllökések: {speed} / {gusts} {unit}", + "nextHourPrecipitation": "Csapadék a következő órában", + "precipitationChance": "Csapadék valószínűsége", + "precipitationValue": "{probability}% · {amount} mm", + "precipitationDetail": "Csapadék: {probability}% · {amount} mm", + "todayUv": "Mai maximális UV-index", + "uvIndex": "Maximális UV-index: {value}", + "daylight": "Nappali világosság: {duration}", + "hourlyTooltip": "Hőérzet: {feelsLike}{temperatureUnit} · {amount} mm · {humidity}% páratartalom · {speed} {speedUnit} szél", + "hourlyTooltipWithoutHumidity": "Hőérzet: {feelsLike}{temperatureUnit} · {amount} mm · {speed} {speedUnit} szél", + "detailLabel": { + "feelsLike": "Hőérzet", + "precipitation": "Csapadék", + "humidity": "Átlagos páratartalom", + "wind": "Maximális szél / széllökések", + "uv": "Maximális UV-index", + "daylight": "Nappali világosság" + }, + "sun": "Napkelte / napnyugta", + "noForecast": "Nincs elérhető előrejelzési adat" } }, "indexerManager": { @@ -2106,8 +3249,15 @@ }, "title": "Indexelő menedzser", "testAll": "Teszteld az összeset", + "status": { + "healthy": "Rendben", + "unhealthy": "Hibás", + "disabled": "Letiltva", + "unknown": "Az állapot nem érhető el" + }, "error": { - "internalServerError": "Nem sikerült lekérni az indexelők állapotát" + "internalServerError": "Nem sikerült lekérni az indexelők állapotát", + "testAll": "Az indexelő tesztje sikertelen. Próbáld újra." } }, "healthMonitoring": { @@ -2136,11 +3286,6 @@ "fileSystem": { "label": "Fájlrendszer-információk megjelenítése" }, - "visibleStorageVolumes": { - "label": "Látható tárolókötetek", - "description": "Csak akkor érhető el, ha minden kiválasztott integráció Synology-integráció. Hagyd üresen, ha az összes észlelt tárolókötetet szeretnéd megjeleníteni.", - "placeholder": "Válassz tárolóköteteket" - }, "defaultTab": { "label": "Alapértelmezett fül" }, @@ -2163,17 +3308,27 @@ "minutes": "{count} perc", "used": "Használt", "available": "Elérhető", - "lastSeen": "Utolsó állapotfrissítés: {lastSeen}" + "lastSeen": "Utolsó állapotfrissítés: {lastSeen}", + "updatesAvailable": "{count, plural, one {# frissítés érhető el} other {# frissítés érhető el}}", + "rebootRequired": "Újraindítás szükséges", + "rebootNotRequired": "Nincs szükség újraindításra" + }, + "smartStatus": { + "attributesWithinThresholds": "SMART: az attribútumok a küszöbértékeken belül vannak", + "attributesFailed": "SMART: {attributes} sikertelen", + "noCriticalWarning": "SMART: az SSD nem jelzett kritikus figyelmeztetést", + "criticalWarning": "SMART: az SSD kritikus figyelmeztetést jelzett" + }, + "gauge": { + "cpuUsage": "CPU használat", + "cpuTemperature": "CPU-hőmérséklet", + "memoryUsage": "Memória használat", + "gpuUsage": "{name} GPU-használata" }, - "memory": {}, "error": { "internalServerError": "Nem sikerült lekérni az állapotot" }, "cluster": { - "summary": { - "cpu": "Processzor", - "memory": "Memória" - }, "resource": { "node": { "name": "Node-ok" @@ -2209,8 +3364,6 @@ "table": { "header": { "name": "Név", - "cpu": "CPU", - "memory": "Memória", "node": "Gép" } } @@ -2220,33 +3373,29 @@ "name": "Docker statisztika", "description": "A konténereid statisztikái (Ezt a widgetet csak rendszergazdai jogosultsággal lehet hozzáadni)", "option": { - "columns": { - "label": "Megjelenítendő oszlopok" + "endpointIds": { + "label": "Docker-környezetek", + "description": "Hagyd üresen, ha minden Docker-környezet konténereit meg szeretnéd jeleníteni", + "placeholder": "Minden Docker-környezet" }, - "enableRowSorting": { - "label": "Az elemek rendezésének engedélyezése" + "containerFilter": { + "label": "Szűrendő konténerek" + }, + "filterIsWhitelist": { + "label": "Szűrés fehérlistával" }, "defaultSort": { - "label": "Alapértelmezés szerint rendezéshez használt oszlop", "option": { "name": "Név", "state": "Állapot", "cpuUsage": "CPU használat", "memoryUsage": "Memória használat" } - }, - "descendingDefaultSort": { - "label": "Fordított rendezés" - }, - "columnOrder": { - "label": "Oszlopsorrend" - }, - "columnWidths": { - "label": "Oszlopszélességek" } }, "error": { "internalServerError": "A konténerek statisztikáinak lekérése sikertelen", + "endpointsUnavailable": "A Docker-végpontok nem érhetők el", "layoutSaveTitle": "A táblázat elrendezése nincs mentve", "layoutSaveMessage": "A Docker-táblázat elrendezését nem sikerült menteni. Próbáld újra áthelyezni vagy átméretezni az oszlopot." }, @@ -2255,7 +3404,6 @@ } }, "coolify": { - "name": "Coolify", "description": "A Coolify-példány áttekintése a szerverekkel és alkalmazásokkal", "option": { "showServers": { @@ -2281,17 +3429,49 @@ "internalServerError": "A Coolify-adatok letöltése nem sikerült" }, "server": { - "buildServer": "Build" + "buildServer": "Build", + "resourceCounts": "{applications, plural, one {# alkalmazás} other {# alkalmazás}} / {services, plural, one {# szolgáltatás} other {# szolgáltatás}}", + "reachability": "Elérhetőség", + "usability": "Használhatóság" + }, + "source": { + "url": "Forrás: {url}", + "unavailable": "{source}: nem érhető el" }, "instances": { "title": "Példányok" + }, + "action": { + "openResource": "{name} megnyitása", + "openLogs": "{name} naplóinak megnyitása", + "showIp": "IP-cím megjelenítése", + "hideIp": "IP-cím elrejtése" + }, + "status": { + "running": "Fut", + "stopped": "Leállítva", + "exited": "Kilépett", + "starting": "Indítás", + "restarting": "Újraindítás", + "unknown": "Ismeretlen", + "online": "Elérhető", + "offline": "Nem elérhető", + "reachable": "Elérhető", + "unreachable": "Nem érhető el", + "usable": "Használható", + "unusable": "Nem használható" } }, "vpn": { "name": "VPN", "description": "VPN-kapcsolataid áttekintése", "serviceUnavailable": "A VPN nem érhető el", - "option": {} + "status": { + "running": "Fut", + "notRunning": "Nem fut", + "unavailable": "Nem érhető el", + "vpn": "VPN: {status}" + } }, "ups": { "name": "UPS", @@ -2318,14 +3498,19 @@ "runtime": "Üzemidő", "load": "Terhelés", "input": "Bemenet", - "output": "Kimenet" + "output": "Kimenet", + "batteryVoltage": "Akkumulátorfeszültség", + "power": "Teljesítmény", + "temperature": "Hőmérséklet", + "manufacturer": "Gyártó", + "model": "Modell", + "serial": "Sorozatszám" }, "error": { "internalServerError": "Nem sikerült lekérni az UPS adatokat" } }, "tracearr": { - "name": "Tracearr", "description": "Továbbfejlesztett médiaszerver-felügyelet részletes adatfolyam- és átkódolási adatokkal", "option": { "showStreams": { @@ -2413,10 +3598,7 @@ "label": "Esemény", "description": "Egy adott esemény összes előfordulásának megjelenítése", "placeholder": "Válassz eseményt", - "loading": "Események betöltése...", - "noEvents": "Nem található esemény", - "none": "Nincs esemény", - "configureWebsiteFirst": "Az események betöltéséhez először válassz webhelyet" + "none": "Nincs esemény" }, "chartType": { "label": "Diagramtípus", @@ -2447,26 +3629,21 @@ "eventNames": { "label": "Események", "description": "Válassz egy vagy több, a diagramon megjelenítendő eseményt", - "placeholder": "Események kiválasztása...", - "loading": "Események betöltése...", - "noEvents": "Nem található esemény", - "configureWebsiteFirst": "Az események betöltéséhez először válassz webhelyet" + "placeholder": "Események kiválasztása..." }, "topCount": { "label": "Megjelenítendő elemek", "description": "Megjelenítendő legnépszerűbb elemek száma (max. 500)" + }, + "events": { + "loading": "Események betöltése...", + "noEvents": "Nem található esemény", + "configureWebsiteFirst": "Az események betöltéséhez először válassz webhelyet" } }, "event": { - "occurrences": "események", "label": "események" }, - "topPages": { - "direct": "Közvetlen" - }, - "topReferrers": { - "direct": "Közvetlen" - }, "events": { "selectPrompt": "Válaszd ki a diagramon megjelenítendő eseményeket" }, @@ -2475,6 +3652,9 @@ "noWebsite": "Nincs beállított webhely", "noData": "Nincs elérhető adat", "internalServerError": "Umami-adatok letöltése nem sikerült" + }, + "top": { + "direct": "Közvetlen" } }, "common": { @@ -2502,7 +3682,8 @@ }, "integration": { "noData": "Nem találtam integrációt", - "description": "Új integráció létrehozásához kattints " + "description": "Új integráció létrehozásához kattints ", + "manage": "Integrációk kezelése" }, "app": { "noData": "Nem található alkalmazás", @@ -2513,7 +3694,61 @@ "noIntegration": "Nincs kiválasztva integráció", "noData": "Nincs elérhető integrációs adat" }, - "option": {} + "integrationDisconnected": "Nincs elérhető adat, az összes integráció le van választva", + "updatedAt": "Frissítve: {date}", + "title": { + "label": "Cím" + }, + "openInNewTab": { + "label": "Megnyitás új lapon" + }, + "showTitle": { + "label": "Cím megjelenítése" + }, + "weatherLocation": { + "label": "Időjárási helyszín" + }, + "layout": { + "label": "Elrendezés", + "option": { + "horizontal": "Vízszintes", + "vertical": "Függőleges", + "grid": "Rács" + } + }, + "select": { + "loading": "Betöltés…", + "loadError": "A lehetőségek betöltése nem sikerült" + }, + "dateFormat": { + "label": "Dátum formátum", + "description": "Hogyan nézzen ki a dátum" + }, + "visibleStorageVolumes": { + "label": "Látható tárolókötetek", + "description": "Csak akkor érhető el, ha minden kiválasztott integráció OpenMediaVault vagy Synology. Hagyd üresen az összes észlelt tárolókötet megjelenítéséhez.", + "placeholder": "Válassz tárolóköteteket" + }, + "tableOptions": { + "columns": { + "label": "Megjelenítendő oszlopok" + }, + "columnOrder": { + "label": "Oszlopsorrend" + }, + "columnWidths": { + "label": "Oszlopszélességek" + }, + "enableRowSorting": { + "label": "Elemek rendezésének engedélyezése" + }, + "defaultSort": { + "label": "Alapértelmezés szerint rendezéshez használt oszlop" + }, + "invertSorting": { + "label": "Fordított rendezés" + } + } }, "video": { "name": "Videófolyam", @@ -2572,6 +3807,7 @@ "transcoding": "Átkódolás", "paused": "Szüneteltetve", "remaining": "{minutes} perc van hátra", + "seasonEpisode": "S{season} E{episode}", "metadata": { "title": "Statisztikák a rajongóknak", "video": { @@ -2589,11 +3825,16 @@ "resolution": "Felbontás", "target": "Cél kódoló" } - } + }, + "unknownUser": "Ismeretlen felhasználó" + }, + "summary": { + "sessions": "{count, plural, one {# munkamenet} other {# munkamenet}}", + "playing": "{count} lejátszás alatt", + "transcoding": "{count} átkódolás alatt" } }, "paperlessNgx": { - "name": "Paperless-ngx", "description": "A Paperless-ngx dokumentumarchívum áttekintése", "documentsTotal": "Összes dokumentum", "documentsInbox": "Bejövő", @@ -2637,6 +3878,192 @@ "internalServerError": "A Paperless-ngx adatok letöltése nem sikerült" } }, + "patchmon": { + "description": "A gépek javítási állapotának áttekintése a PatchMonból", + "title": "PatchMon-statisztikák", + "totalHosts": "Összes gép", + "hostsNeedingUpdates": "Frissítést igénylő gépek", + "securityUpdates": "Biztonsági frissítések", + "upToDateHosts": "Naprakész gépek", + "hostsWithSecurityUpdates": "Biztonsági frissítést igénylő gépek", + "recentUpdates24h": "Frissítések (24 óra)", + "totalOutdatedPackages": "Elavult csomagok", + "totalRepos": "Szoftvertárolók", + "osDistribution": "Operációs rendszerek megoszlása", + "compliance": "Frissítési megfelelőség", + "complianceRatio": "{upToDate} / {total}", + "lastUpdated": "Frissítve: {time}", + "option": { + "showTotalHosts": { + "label": "Gépek számának megjelenítése", + "description": "A felügyelt gépek számának megjelenítése" + }, + "showHostsNeedingUpdates": { + "label": "Frissítést igénylő gépek megjelenítése", + "description": "A legalább egy elavult csomaggal rendelkező gépek megjelenítése" + }, + "showSecurityUpdates": { + "label": "Biztonsági frissítések megjelenítése", + "description": "Az elérhető biztonsági frissítések számának megjelenítése" + }, + "showUpToDateHosts": { + "label": "Naprakész gépek megjelenítése", + "description": "Az elavult csomag nélküli gépek megjelenítése" + }, + "showHostsWithSecurityUpdates": { + "label": "Biztonsági frissítést igénylő gépek megjelenítése", + "description": "A biztonsági javítást igénylő gépek megjelenítése" + }, + "showRecentUpdates24h": { + "label": "Legutóbbi frissítések megjelenítése (24 óra)", + "description": "Az elmúlt 24 órában alkalmazott frissítések számának megjelenítése" + }, + "showTotalOutdatedPackages": { + "label": "Elavult csomagok megjelenítése", + "description": "Az elavult csomagok teljes számának megjelenítése az összes gépen" + }, + "showTotalRepos": { + "label": "Szoftvertárolók megjelenítése", + "description": "A felügyelt aktív szoftvertárolók számának megjelenítése" + }, + "enableThresholdColors": { + "label": "Küszöbérték szerinti színezés engedélyezése", + "description": "A statisztikai értékek színezése zöldre, sárgára vagy pirosra a súlyossági beállítások alapján" + }, + "useCustomThresholds": { + "label": "Speciális küszöbértékek", + "description": "A figyelmeztetési és kritikus küszöbértékek testreszabása statisztikánként, abszolút számmal vagy az összes gép százalékában" + }, + "thresholdMode": { + "option": { + "absolute": "Abszolút szám", + "percent": "Az összes gép százaléka" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "Frissítést igénylő gépek küszöbértékének módja", + "description": "A frissítést igénylő gépek számának összehasonlítása abszolút értékként vagy az összes gép százalékában" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "Frissítési igény figyelmeztetési küszöbértéke" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "Frissítési igény kritikus küszöbértéke" + }, + "securityUpdatesThresholdMode": { + "label": "Biztonsági frissítések küszöbértékének módja", + "description": "A biztonsági frissítések számának összehasonlítása abszolút értékként vagy az összes gép százalékában" + }, + "securityUpdatesWarningAt": { + "label": "Biztonsági frissítések figyelmeztetési küszöbértéke" + }, + "securityUpdatesCriticalAt": { + "label": "Biztonsági frissítések kritikus küszöbértéke" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "Biztonsági frissítést igénylő gépek küszöbértékének módja", + "description": "A gépek számának összehasonlítása abszolút értékként vagy az összes gép százalékában" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "Biztonsági frissítést igénylő gépek figyelmeztetési küszöbértéke" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "Biztonsági frissítést igénylő gépek kritikus küszöbértéke" + }, + "upToDateHostsThresholdMode": { + "label": "Naprakész gépek küszöbértékének módja", + "description": "A naprakész gépek számának összehasonlítása abszolút értékként vagy az összes gép százalékában" + }, + "upToDateHostsWarningAt": { + "label": "Naprakész gépek figyelmeztetési küszöbértéke", + "description": "Az érték sárgára vált, ha eléri vagy meghaladja ezt a küszöböt, de még nincs teljes lefedettség" + }, + "upToDateHostsCriticalAt": { + "label": "Naprakész gépek kritikus küszöbértéke", + "description": "Az érték pirosra vált, ha e küszöb alá esik" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "Elavult csomagok küszöbértékének módja", + "description": "Az elavult csomagok számának összehasonlítása abszolút értékként vagy az összes gép százalékában" + }, + "totalOutdatedPackagesWarningAt": { + "label": "Elavult csomagok figyelmeztetési küszöbértéke" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "Elavult csomagok kritikus küszöbértéke" + }, + "showOsDistribution": { + "label": "Operációs rendszerek megoszlásának megjelenítése", + "description": "A felügyelt gépek operációs rendszer szerinti bontásának megjelenítése" + }, + "osDistributionLimit": { + "label": "Megjelenített operációs rendszerek száma", + "description": "A megjelenítendő operációs rendszerek legnagyobb száma", + "option": { + "3": "3 leggyakoribb", + "5": "5 leggyakoribb", + "10": "10 leggyakoribb", + "all": "Összes" + } + }, + "showOsVersion": { + "label": "Operációs rendszer verziójának megjelenítése", + "description": "Az operációsrendszer-verzió hozzáadása az egyes címkékhez, ha elérhető" + }, + "showComplianceHero": { + "label": "Kiemelt megfelelőségi mutató megjelenítése", + "description": "A naprakész gépek százalékát jelző megfelelőségi gyűrű megjelenítése" + }, + "osDisplayMode": { + "label": "Operációs rendszer megjelenítési módja", + "description": "Válaszd ki az operációs rendszerek megoszlásának megjelenítési módját", + "option": { + "bars": "Vízszintes sávok", + "donut": "Gyűrűdiagram" + } + }, + "threshold": { + "warningAt": { + "description": "Az érték sárgára vált e küszöb elérésekor" + }, + "criticalAt": { + "description": "Az érték pirosra vált e küszöb elérésekor" + } + } + }, + "error": { + "internalServerError": "A PatchMon-adatok lekérése nem sikerült" + } + }, + "bazarr": { + "description": "A hiányzó feliratok és az állapot áttekintése a Bazarr-példányodból", + "episodes": "Hiányzó epizódok", + "movies": "Hiányzó filmek", + "providers": "Szolgáltatói problémák", + "status": "Állapotproblémák", + "announcements": "Közlemények", + "option": { + "showMissingEpisodes": { + "label": "Hiányzó epizódok megjelenítése", + "description": "A hiányzó felirattal rendelkező epizódok számának megjelenítése" + }, + "showMissingMovies": { + "label": "Hiányzó filmek megjelenítése", + "description": "A hiányzó felirattal rendelkező filmek számának megjelenítése" + }, + "showProviderIssues": { + "label": "Szolgáltatói problémák megjelenítése", + "description": "A problémás feliratszolgáltatók számának megjelenítése" + }, + "showHealthIssues": { + "label": "Állapotproblémák megjelenítése", + "description": "A Bazarr állapotproblémáinak számának megjelenítése" + } + }, + "error": { + "internalServerError": "A Bazarr-adatok lekérése nem sikerült" + } + }, "immich-serverStats": { "name": "Immich szerver statisztikák", "description": "Információk az Immich-példányodról", @@ -2661,7 +4088,8 @@ "users": "Felhasználók", "photos": "Fotók", "videos": "Videók", - "storage": "Felhasznált tárhely" + "storage": "Felhasznált tárhely", + "albumLimit": "Legnagyobb albumok (legfeljebb {count} jelenik meg)" }, "immich-albumCarousel": { "name": "Immich-album", @@ -2685,24 +4113,21 @@ } }, "description": "Képek diavetítése az Immich-albumodból", - "noPhotos": "Ebben az albumban nincs fénykép" + "noPhotos": "Ebben az albumban nincs fénykép", + "albumPhoto": "Albumbeli fénykép", + "actions": { + "previousPhoto": "Előző fénykép", + "nextPhoto": "Következő fénykép", + "pauseSlideshow": "Diavetítés szüneteltetése", + "resumeSlideshow": "Diavetítés folytatása", + "toggleSlideshow": "Diavetítés szüneteltetése vagy folytatása", + "photo": "{number}. fénykép" + } }, "downloads": { "name": "Kliens letöltése", "description": "Lehetővé teszi a Torrent- és Usenet-kliensből származó letöltések megtekintését és kezelését.", "option": { - "columns": { - "label": "Megjelenítendő oszlopok" - }, - "enableRowSorting": { - "label": "Elemek rendezésének engedélyezése" - }, - "defaultSort": { - "label": "Alapértelmezés szerint rendezéshez használt oszlop" - }, - "descendingDefaultSort": { - "label": "Fordított rendezés" - }, "showCompletedUsenet": { "label": "Mutassa a befejezettként megjelölt Usenet bejegyzéseket" }, @@ -2727,12 +4152,6 @@ "limitPerIntegration": { "label": "Elemek száma integrációnként", "description": "Ez az egyes integrációkhoz tartozó elemek számát korlátozza, nem pedig általánosan" - }, - "columnOrder": { - "label": "Oszlopsorrend" - }, - "columnWidths": { - "label": "Oszlopszélességek" } }, "errors": { @@ -2893,6 +4312,10 @@ "mediaRequests-requestList": { "name": "Médiakérések listája", "description": "Az Overseerr vagy Jellyseerr példány összes médiakérelmének listájának megtekintése", + "empty": { + "title": "Még nincsenek médiakérések", + "description": "A kérés megkezdéséhez keress egy filmet vagy műsort." + }, "option": { "linksTargetNewTab": { "label": "Linkek megnyitása új fülön" @@ -2926,12 +4349,16 @@ "failed": "Sikertelen", "completed": "Befejezett" }, + "unknown": "Ismeretlen", "toBeDetermined": "Később" }, "mediaRequests-requestStats": { "name": "Médiakérések állapota", "description": "A médiakéréseid statisztikái", - "option": {}, + "empty": { + "title": "Még nincs kérési tevékenység", + "description": "A statisztikák az első médiakérés után jelennek meg." + }, "titles": { "stats": { "main": "Média statisztikák", @@ -2941,8 +4368,7 @@ "declined": "Már elutasították", "available": "Már elérhető", "tv": "TV kérések", - "movie": "Filmkérések", - "total": "Összesen" + "movie": "Filmkérések" }, "users": { "main": "Legnépszerűbb felhasználók", @@ -2968,7 +4394,6 @@ }, "currentIndex": "{total} / {start}–{end}", "healthCheck": { - "title": "Állapotfelmérés", "queued": "Sorban áll", "status": { "healthy": "Egészséges", @@ -2977,38 +4402,63 @@ }, "panel": { "statistics": { - "empty": "Üres", - "transcodes": "Átkódolás", - "transcodesCount": "Átkódolás", - "healthChecksCount": "Állapotfelmérések", "filesCount": "Fájlok", "savedSpace": "Megtakarított tárhely", - "healthChecks": "Állapotfelmérések", "videoCodecs": "Kodekek", "videoContainers": "Tartály", "videoResolutions": "Felbontás" }, "workers": { - "empty": "Üres", "table": { - "file": "Fájl", "eta": "Hátralévő idő", - "progress": "Folyamat", - "transcode": "Átkódolás", - "healthCheck": "Állapotfelmérés" + "progress": "Folyamat" } }, "queue": { - "empty": "Üres", "table": { - "file": "Fájl", - "size": "Méret", - "transcode": "Átkódolás", - "healthCheck": "Állapotfelmérés" + "size": "Méret" } + }, + "common": { + "empty": "Üres", + "file": "Fájl", + "healthCheck": "Állapotfelmérés", + "transcode": "Átkódolás", + "transcodes": "Átkódolás", + "healthChecks": "Állapotfelmérések" } } }, + "mediaMissing": { + "name": "Hiányzó és várólistán lévő média", + "description": "A Radarr és a Sonarr hiányzó és várólistán lévő filmjeinek és epizódjainak megjelenítése", + "option": { + "showMissing": { + "label": "Hiányzó elemek megjelenítése" + }, + "showQueued": { + "label": "Várólistán lévő elemek megjelenítése" + }, + "pageSize": { + "label": "Oldalankénti elemek száma" + } + }, + "tab": { + "missing": "Hiányzó", + "queued": "Várólistán" + }, + "type": { + "movie": "Film", + "episode": "Epizód", + "book": "Könyv" + }, + "empty": { + "missing": "Nincs hiányzó elem", + "queued": "Nincs várólistán lévő elem", + "noTabsEnabled": "Engedélyezz legalább egy lapot a widget beállításaiban" + }, + "timeLeft": "Hátralévő idő" + }, "rssFeed": { "name": "RSS feedek", "description": "Egy vagy több általános RSS-, ATOM- vagy JSON-hírcsatorna figyelése és megjelenítése", @@ -3031,6 +4481,13 @@ "showPosterImage": { "label": "Plakátkép megjelenítése" } + }, + "error": { + "allFeedsFailed": "Nem sikerült betölteni az RSS-hírcsatornákat. Ellenőrizd a hírcsatornák URL-jeit, majd próbáld újra." + }, + "warning": { + "partial": "{count, plural, one {# RSS-hírcsatornát nem sikerült betölteni} other {# RSS-hírcsatornát nem sikerült betölteni}}", + "stale": "Az RSS-hírcsatornákat nem sikerült frissíteni. A korábban betöltött elemek jelennek meg." } }, "releases": { @@ -3106,17 +4563,8 @@ "label": "Reguláris kifejezés" } }, - "edit": { - "label": "Szerkesztés" - }, "editForm": { - "title": "Gyűjtemény Szerkesztése", - "cancel": { - "label": "Mégse" - }, - "confirm": { - "label": "Megerősít" - } + "title": "Gyűjtemény Szerkesztése" }, "importForm": { "title": "Importálás a Docker-ből" @@ -3133,8 +4581,7 @@ "label": "Szolgáltatói tokenek", "token": "Token", "configured": "Token beállítva", - "notConfigured": "Nincs beállítva token", - "save": "Mentés" + "notConfigured": "Nincs beállítva token" } } }, @@ -3161,17 +4608,32 @@ "noProviderResponse": "Nincs válasz a szolgáltatótól", "unexpected": "Váratlan szolgáltatói hiba" } - } + }, + "expandDetails": "{name} részleteinek megjelenítése", + "collapseDetails": "{name} részleteinek elrejtése" }, "networkControllerSummary": { - "option": {}, - "card": { - "vpn": { - "countConnected": "{count} csatlakoztatva" + "advanced": { + "updated": "Frissítve", + "metric": { + "latency": "Késleltetés", + "ping": "Válaszidő", + "uptime": "Üzemidő", + "users": "Felhasználók", + "guests": "Vendégek" } }, + "card": { + "vpn": { + "countConnected": "{count, plural, one {# kapcsolódva} other {# kapcsolódva}}", + "label": "VPN" + }, + "wan": "WAN-hálózat", + "web": "Web", + "wifi": "Wi-Fi", + "lan": "LAN-hálózat" + }, "error": { - "integrationsDisconnected": "Nincs elérhető adat, az összes integráció le van választva", "unknownContentOption": "Ismeretlen tartalmi beállítás a hálózati vezérlő összefoglaló widgetnél: " }, "name": "Hálózati vezérlő összefoglaló", @@ -3208,7 +4670,6 @@ } }, "error": { - "integrationsDisconnected": "Nincs elérhető adat, az összes integráció le van választva", "unknownContentOption": "A hálózati állapot-widget ismeretlen tartalmi beállítása: " }, "name": "Hálózat állapota", @@ -3238,7 +4699,6 @@ "versiontitle": "Verziók", "cputitle": "CPU használat", "memorytitle": "Memória használat", - "cpu": "CPU", "memory": "Memória", "interfaces": { "name": "név", @@ -3246,6 +4706,16 @@ "recv": "Kézbesített", "title": "Hálózati interfészek" } + }, + "empty": { + "noInterfaces": "Még nincs hálózati interfészadat" + }, + "versionUnknown": "Ismeretlen verzió", + "metricAccessible": "{metric}: {value}%, {status}", + "status": { + "normal": "Normál", + "warning": "Figyelmeztetés", + "critical": "Kritikus" } }, "notifications": { @@ -3255,8 +4725,21 @@ "option": { "hideLogos": { "label": "Logók elrejtése" + }, + "messageFormat": { + "label": "Üzenetformátum", + "option": { + "auto": "Automatikus", + "plain": "Egyszerű szöveg", + "markdown": "Markdown", + "html": "HTML" + } } - } + }, + "openService": "Értesítési szolgáltatás megnyitása", + "deleteNotification": "Értesítés törlése a Gotifyból", + "deleteFailed": "Nem sikerült törölni az értesítést", + "deleteFailedMessage": "Az értesítést nem sikerült törölni. Próbáld újra." }, "speedtestTracker": { "name": "Hálózatsebesség Monitorozó", @@ -3298,7 +4781,6 @@ } }, "uptimeKuma": { - "name": "Uptime Kuma", "description": "Az Uptime Kuma állapotoldal üzemidő-statisztikáinak figyelése", "option": { "showAverageUptime": { @@ -3335,8 +4817,58 @@ }, "error": { "internalServerError": "Az üzemidőadatok letöltése nem sikerült" + }, + "status": { + "up": "Teljesen fönn", + "down": "Letöltési sebesség", + "paused": "Szüneteltetve" } }, + "traefik": { + "description": "A Traefik útválasztóinak, szolgáltatásainak, köztes rétegeinek és belépési pontjainak áttekintése", + "option": { + "showTcp": { + "label": "TCP megjelenítése" + }, + "showUdp": { + "label": "UDP megjelenítése" + }, + "showEntryPoints": { + "label": "Belépési pontok megjelenítése" + } + }, + "instances": "Traefik-példányok", + "versionUnknown": "Ismeretlen verzió", + "summary": { + "routers": "Útválasztók", + "entryPoints": "Belépési pontok" + }, + "resource": { + "routers": "Útválasztók", + "middlewares": "Köztes rétegek" + }, + "status": { + "healthy": "Rendben", + "errors": "{count} hiba", + "warnings": "{count} figyelmeztetés" + }, + "error": { + "internalServerError": "A Traefik-adatok lekérése nem sikerült" + }, + "resourceType": { + "router": "Útválasztó", + "service": "Szolgáltatás", + "middleware": "Köztes réteg" + }, + "resourceStatus": { + "enabled": "Engedélyezve", + "disabled": "Letiltva", + "warning": "Figyelmeztetés", + "error": "Hiba", + "unknown": "Ismeretlen" + }, + "failedEndpoint": "Sikertelen: {endpoint}" + }, "audioStats": { "name": "Audió statisztikák", "description": "Könyvtári és lejátszási statisztikák Navidrome-ból vagy Audiobookshelf-ből", @@ -3401,9 +4933,7 @@ "label": "Látható diagramok", "description": "Válaszd ki a megjelenítendő diagramokat.", "option": { - "cpu": "CPU", "memory": "Memória", - "gpu": "GPU", "network": "Hálózat" } }, @@ -3418,12 +4948,11 @@ } }, "card": { - "cpu": "CPU", "memory": "RAM", - "gpu": "GPU", "network": "Háló", "up": "FÖNN", - "down": "LENN" + "down": "LENN", + "memoryTooltip": "{used} / {available} ({percent}%)" } }, "systemDisks": { @@ -3449,151 +4978,88 @@ }, "showBackgroundBar": { "label": "Háttérhasználati sáv megjelenítése" - }, - "visibleStorageVolumes": { - "label": "Látható tárolókötetek", - "description": "Csak akkor érhető el, ha minden kiválasztott integráció Synology-integráció. Hagyd üresen, ha az összes észlelt tárolókötetet szeretnéd megjeleníteni.", - "placeholder": "Válassz tárolóköteteket" } }, "status": { - "unhealthy": "Hibás" + "unhealthy": "Hibás", + "smart": "SMART", + "free": "{percentage}% szabad" + } + }, + "customApi": { + "name": "Egyéni widget", + "description": "Beállított egyéni JSX-definíció megjelenítése.", + "customJsx": { + "noTemplate": "Nincs JSX-sablon beállítva.", + "templateWarnings": "{count} sablonfigyelmeztetés:", + "requestIdRequired": "Ehhez a hálózati vezérlőhöz meg kell adni egy elnevezett requestId-t.", + "unsavedPreview": "Az elnevezett kérések tesztelése előtt futtasd a kezdeti kérés tesztjét a szerkesztőben.", + "invalidParams": "A kérés paraméterei érvénytelenek.", + "loading": "Kérés betöltése...", + "loadRequest": "Kérés betöltése", + "requestFailed": "A kérés sikertelen.", + "retry": "Kérés újrapróbálása", + "actionCompleted": "A művelet sikeresen befejeződött.", + "actionSimulated": "A művelet szimulálva lett; nem történt kérésküldés.", + "actionsDisabledEditMode": "A műveletek le vannak tiltva, amíg a tábla szerkesztési módban van.", + "widgetItemUnavailable": "Ez a widgetelem nem érhető el.", + "toggle": "Be- és kikapcsolás", + "copied": "Másolva", + "confirmDelete": "Erősítsd meg ezt a végleges műveletet." + }, + "option": { + "definitionId": { + "label": "Egyéni widget" + }, + "refreshInterval": { + "label": "Frissítési időköz", + "description": "Milyen gyakran kérje le újra az adatokat az API-tól (másodpercben)" + } + }, + "noDefinition": "Nincs definíció kiválasztva", + "definitionNotFound": "Az egyéni widget nem érhető el", + "migrationRequired": "Ez a régi egyéni widget megmaradt, de futtatás előtt át kell migrálni az Egyéni JSX v2-re az Egyéni widgetek kezelése oldalon.", + "manageMigration": "Egyéni widgetek kezelése megnyitása", + "contactAdmin": "Lépj kapcsolatba egy rendszergazdával.", + "configurationNeedsRepair": "A widget beállításai megváltoztak. A konfiguráció javításához szerkeszd a widgetet.", + "removeFromBoard": "Eltávolítás a tábláról", + "editModePending": "A widget betöltéséhez mentsd a táblát.", + "picker": { + "group": "Egyéni JSX-widgetek", + "empty": "Nem találhatók egyéni widgetek", + "preview": "Előnézet", + "sources": "{count, plural, one {# forrás} other {# forrás}}", + "requests": "{count, plural, one {# kérés} other {# kérés}}", + "migrationRequired": "Migrálás szükséges", + "migrationDescription": "Ez az elhelyezett v1-widget még nem futtatható. Másold a kitakart promptot egy LLM-be, majd illeszd be az egyetlen JSON-választ a Homarrba.", + "manageMigration": "Egyéni widgetek kezelése megnyitása", + "contactAdmin": "Lépj kapcsolatba egy rendszergazdával." + }, + "configuration": { + "needsAttention": "A konfiguráció figyelmet igényel: {message}", + "advancedOptions": "Haladó beállítások", + "invalidJson": "Hibás JSON" } }, "beszelSystemTable": { "name": "Beszel Rendszerek (Táblázat)", "description": "Az összes Beszel által figyelt rendszer táblázatos nézete rendezhető oszlopokkal és állapotjelzőkkel", "option": { - "statusFilter": { - "label": "Állapotszűrő" - }, "sortBy": { "label": "Rendezés alapja" }, "sortDirection": { "label": "Rendezés iránya" - }, - "showCpu": { - "label": "CPU mutatása" - }, - "showMemory": { - "label": "Memória mutatása" - }, - "showDisk": { - "label": "Lemez mutatása" - }, - "showGpu": { - "label": "GPU mutatása" - }, - "showLoadAvg": { - "label": "Terhelési átlag mutatása" - }, - "showNet": { - "label": "Hálózat mutatása" - }, - "showTemp": { - "label": "Hőmérséklet mutatása" - }, - "showBattery": { - "label": "Akkumulátor mutatása" - }, - "showServices": { - "label": "Szolgáltatások mutatása" - }, - "showUptime": { - "label": "Üzemidő mutatása" - }, - "showAgent": { - "label": "Agentverzió megjelenítése" - }, - "columnOrder": { - "label": "Oszlopsorrend" - }, - "columnWidths": { - "label": "Oszlopszélességek" } }, - "noRecords": "Nincsenek rendszerek", "error": { - "internalServerError": "Nem sikerült kapcsolódni a Beszelhez. Ellenőrizd az integráció beállításait.", "layoutSaveTitle": "Nem sikerült menteni a táblázatelrendezést", "layoutSaveMessage": "Az oszlopsorrendet vagy az oszlopszélességeket nem sikerült menteni. Próbáld újra." - }, - "column": { - "system": "Rendszer", - "cpu": "CPU", - "memory": "Memória", - "disk": "Lemez", - "gpu": "GPU", - "loadAvg": "Terhelési átlag", - "net": "Hálózat", - "temp": "Hőm", - "battery": "Akk", - "services": "Szolgáltatások", - "uptime": "Üzemidő", - "agent": "Agent" } }, "beszelSystemGrid": { "name": "Beszel Rendszerek (Rács)", - "description": "A Beszel által figyelt rendszerek kártyás rács nézete valós idejű metrikákkal", - "option": { - "statusFilter": { - "label": "Állapotszűrő" - }, - "showCpu": { - "label": "CPU mutatása" - }, - "showMemory": { - "label": "Memória mutatása" - }, - "showDisk": { - "label": "Lemez mutatása" - }, - "showGpu": { - "label": "GPU mutatása" - }, - "showLoadAvg": { - "label": "Terhelési átlag mutatása" - }, - "showNet": { - "label": "Hálózat mutatása" - }, - "showTemp": { - "label": "Hőmérséklet mutatása" - }, - "showBattery": { - "label": "Akkumulátor mutatása" - }, - "showServices": { - "label": "Szolgáltatások mutatása" - }, - "showUptime": { - "label": "Üzemidő mutatása" - }, - "showAgent": { - "label": "Agentverzió megjelenítése" - } - }, - "error": { - "internalServerError": "Nem sikerült kapcsolódni a Beszelhez. Ellenőrizd az integráció beállításait." - }, - "empty": { - "noSystems": "Nem található rendszer" - }, - "metric": { - "cpu": "CPU", - "memory": "Memória", - "disk": "Lemez", - "gpu": "GPU", - "loadAvg": "Terhelési átlag", - "net": "Hálózat", - "temp": "Hőm", - "battery": "Akk", - "services": "Szolgáltatások", - "uptime": "Üzemidő", - "agent": "Agent" - } + "description": "A Beszel által figyelt rendszerek kártyás rács nézete valós idejű metrikákkal" }, "beszelAlerts": { "name": "Beszel Riasztások", @@ -3607,11 +5073,12 @@ } }, "empty": "Nincsenek riasztások konfigurálva", - "error": { - "internalServerError": "Nem sikerült kapcsolódni a Beszelhez. Ellenőrizd az integráció beállításait." - }, "history": "Előzmények", "resolved": "Megoldva", + "alertDescription": { + "statusDuration": "Leállás időtartama: {minutes} perc", + "threshold": "A megadott {value} értéket {minutes} percig meghaladja" + }, "status": { "triggered": "Kiváltva", "ok": "OK" @@ -3658,16 +5125,16 @@ "noSystems": "Nem található rendszer" }, "error": { - "internalServerError": "Nem sikerült kapcsolódni a Beszelhez. Ellenőrizd az integráció beállításait.", "liveConnectionFailed": "Az élő kapcsolat nem sikerült. Lehet, hogy a Beszel-példányod nem támogatja a valós idejű adatfolyamot.", "switchToHistorical": "Váltás előzménynézetre", - "systemNotFound": "A kiválasztott rendszer nem található. Válassz másik rendszert." + "systemNotFound": "A kiválasztott rendszer nem található. Válassz másik rendszert.", + "selectionSaveTitle": "Nem sikerült menteni a kiválasztást", + "selectionSaveMessage": "A rendszer vagy az időszak kiválasztását nem sikerült menteni. Próbáld újra." }, "chart": { "cpu": { "title": "CPU Használat", - "subtitle": "Átlagos rendszerszintű CPU kihasználtság", - "series": "CPU" + "subtitle": "Átlagos rendszerszintű CPU kihasználtság" }, "memory": { "title": "Memória Használat", @@ -3709,289 +5176,550 @@ "title": "Docker Hálózati I/O", "subtitle": "A Docker konténerek hálózati forgalma" } + }, + "period": { + "live": "Élő", + "oneHour": "1 óra", + "twelveHours": "12 óra", + "oneDay": "24 óra", + "oneWeek": "1 hét", + "thirtyDays": "30 nap" } }, - "patchmon": { - "name": "PatchMon", - "description": "A gépek javítási állapotának áttekintése a PatchMonból", - "title": "PatchMon-statisztikák", - "totalHosts": "Összes gép", - "hostsNeedingUpdates": "Frissítést igénylő gépek", - "securityUpdates": "Biztonsági frissítések", - "upToDateHosts": "Naprakész gépek", - "hostsWithSecurityUpdates": "Biztonsági frissítést igénylő gépek", - "recentUpdates24h": "Frissítések (24 óra)", - "totalOutdatedPackages": "Elavult csomagok", - "totalRepos": "Szoftvertárolók", - "osDistribution": "Operációs rendszerek megoszlása", - "compliance": "Frissítési megfelelőség", - "complianceRatio": "{upToDate} / {total}", - "lastUpdated": "Frissítve: {time}", - "option": { - "showTotalHosts": { - "label": "Gépek számának megjelenítése", - "description": "A felügyelt gépek számának megjelenítése" - }, - "showHostsNeedingUpdates": { - "label": "Frissítést igénylő gépek megjelenítése", - "description": "A legalább egy elavult csomaggal rendelkező gépek megjelenítése" - }, - "showSecurityUpdates": { - "label": "Biztonsági frissítések megjelenítése", - "description": "Az elérhető biztonsági frissítések számának megjelenítése" - }, - "showUpToDateHosts": { - "label": "Naprakész gépek megjelenítése", - "description": "Az elavult csomag nélküli gépek megjelenítése" - }, - "showHostsWithSecurityUpdates": { - "label": "Biztonsági frissítést igénylő gépek megjelenítése", - "description": "A biztonsági javítást igénylő gépek megjelenítése" - }, - "showRecentUpdates24h": { - "label": "Legutóbbi frissítések megjelenítése (24 óra)", - "description": "Az elmúlt 24 órában alkalmazott frissítések számának megjelenítése" - }, - "showTotalOutdatedPackages": { - "label": "Elavult csomagok megjelenítése", - "description": "Az elavult csomagok teljes számának megjelenítése az összes gépen" - }, - "showTotalRepos": { - "label": "Szoftvertárolók megjelenítése", - "description": "A felügyelt aktív szoftvertárolók számának megjelenítése" - }, - "enableThresholdColors": { - "label": "Küszöbérték szerinti színezés engedélyezése", - "description": "A statisztikai értékek színezése zöldre, sárgára vagy pirosra a súlyossági beállítások alapján" - }, - "useCustomThresholds": { - "label": "Speciális küszöbértékek", - "description": "A figyelmeztetési és kritikus küszöbértékek testreszabása statisztikánként, abszolút számmal vagy az összes gép százalékában" - }, - "thresholdMode": { - "option": { - "absolute": "Abszolút szám", - "percent": "Az összes gép százaléka" - } - }, - "hostsNeedingUpdatesThresholdMode": { - "label": "Frissítést igénylő gépek küszöbértékének módja", - "description": "A frissítést igénylő gépek számának összehasonlítása abszolút értékként vagy az összes gép százalékában" - }, - "hostsNeedingUpdatesWarningAt": { - "label": "Frissítési igény figyelmeztetési küszöbértéke", - "description": "Az érték sárgára vált e küszöb elérésekor" - }, - "hostsNeedingUpdatesCriticalAt": { - "label": "Frissítési igény kritikus küszöbértéke", - "description": "Az érték pirosra vált e küszöb elérésekor" - }, - "securityUpdatesThresholdMode": { - "label": "Biztonsági frissítések küszöbértékének módja", - "description": "A biztonsági frissítések számának összehasonlítása abszolút értékként vagy az összes gép százalékában" - }, - "securityUpdatesWarningAt": { - "label": "Biztonsági frissítések figyelmeztetési küszöbértéke", - "description": "Az érték sárgára vált e küszöb elérésekor" - }, - "securityUpdatesCriticalAt": { - "label": "Biztonsági frissítések kritikus küszöbértéke", - "description": "Az érték pirosra vált e küszöb elérésekor" - }, - "hostsWithSecurityUpdatesThresholdMode": { - "label": "Biztonsági frissítést igénylő gépek küszöbértékének módja", - "description": "A gépek számának összehasonlítása abszolút értékként vagy az összes gép százalékában" - }, - "hostsWithSecurityUpdatesWarningAt": { - "label": "Biztonsági frissítést igénylő gépek figyelmeztetési küszöbértéke", - "description": "Az érték sárgára vált e küszöb elérésekor" - }, - "hostsWithSecurityUpdatesCriticalAt": { - "label": "Biztonsági frissítést igénylő gépek kritikus küszöbértéke", - "description": "Az érték pirosra vált e küszöb elérésekor" - }, - "upToDateHostsThresholdMode": { - "label": "Naprakész gépek küszöbértékének módja", - "description": "A naprakész gépek számának összehasonlítása abszolút értékként vagy az összes gép százalékában" - }, - "upToDateHostsWarningAt": { - "label": "Naprakész gépek figyelmeztetési küszöbértéke", - "description": "Az érték sárgára vált, ha eléri vagy meghaladja ezt a küszöböt, de még nincs teljes lefedettség" - }, - "upToDateHostsCriticalAt": { - "label": "Naprakész gépek kritikus küszöbértéke", - "description": "Az érték pirosra vált, ha e küszöb alá esik" - }, - "totalOutdatedPackagesThresholdMode": { - "label": "Elavult csomagok küszöbértékének módja", - "description": "Az elavult csomagok számának összehasonlítása abszolút értékként vagy az összes gép százalékában" - }, - "totalOutdatedPackagesWarningAt": { - "label": "Elavult csomagok figyelmeztetési küszöbértéke", - "description": "Az érték sárgára vált e küszöb elérésekor" - }, - "totalOutdatedPackagesCriticalAt": { - "label": "Elavult csomagok kritikus küszöbértéke", - "description": "Az érték pirosra vált e küszöb elérésekor" - }, - "showOsDistribution": { - "label": "Operációs rendszerek megoszlásának megjelenítése", - "description": "A felügyelt gépek operációs rendszer szerinti bontásának megjelenítése" - }, - "osDistributionLimit": { - "label": "Megjelenített operációs rendszerek száma", - "description": "A megjelenítendő operációs rendszerek legnagyobb száma", - "option": { - "3": "3 leggyakoribb", - "5": "5 leggyakoribb", - "10": "10 leggyakoribb", - "all": "Összes" - } - }, - "showOsVersion": { - "label": "Operációs rendszer verziójának megjelenítése", - "description": "Az operációsrendszer-verzió hozzáadása az egyes címkékhez, ha elérhető" - }, - "showComplianceHero": { - "label": "Kiemelt megfelelőségi mutató megjelenítése", - "description": "A naprakész gépek százalékát jelző megfelelőségi gyűrű megjelenítése" - }, - "osDisplayMode": { - "label": "Operációs rendszer megjelenítési módja", - "description": "Válaszd ki az operációs rendszerek megoszlásának megjelenítési módját", - "option": { - "bars": "Vízszintes sávok", - "donut": "Gyűrűdiagram" - } - } + "assistant": { + "name": "Asszisztens", + "description": "Teljes asszisztensbeszélgetés közvetlenül a tábládon.", + "unavailable": { + "title": "Az asszisztens nem érhető el", + "description": "Jelentkezz be, és kérj meg egy rendszergazdát, hogy a kezelőpanelen állítsa be az asszisztenst." }, + "compact": { + "title": "Asszisztens", + "description": "Méretezd át ezt a widgetet a beszélgetéshez, vagy nyisd meg a teljes beszélgetést.", + "open": "Asszisztens megnyitása", + "openTitle": "Az asszisztens az oldalsó panelen van megnyitva", + "openDescription": "A beszélgetés egyetlen aktív felületen marad.", + "returnToWidget": "Beszélgetés visszahelyezése ebbe a widgetbe", + "otherWidgetTitle": "Az asszisztens egy másik widgetben aktív", + "otherWidgetDescription": "Egyszerre csak egy beszélgetési felület marad aktív.", + "useHere": "Az asszisztens használata ebben a widgetben" + } + }, + "beszel": { "error": { - "internalServerError": "A PatchMon-adatok lekérése nem sikerült" - } - }, - "bazarr": { - "name": "Bazarr", - "description": "A hiányzó feliratok és az állapot áttekintése a Bazarr-példányodból", - "episodes": "Hiányzó epizódok", - "movies": "Hiányzó filmek", - "providers": "Szolgáltatói problémák", - "status": "Állapotproblémák", - "option": { - "showMissingEpisodes": { - "label": "Hiányzó epizódok megjelenítése", - "description": "A hiányzó felirattal rendelkező epizódok számának megjelenítése" - }, - "showMissingMovies": { - "label": "Hiányzó filmek megjelenítése", - "description": "A hiányzó felirattal rendelkező filmek számának megjelenítése" - }, - "showProviderIssues": { - "label": "Szolgáltatói problémák megjelenítése", - "description": "A problémás feliratszolgáltatók számának megjelenítése" - }, - "showHealthIssues": { - "label": "Állapotproblémák megjelenítése", - "description": "A Bazarr állapotproblémáinak számának megjelenítése" - } - }, - "error": { - "internalServerError": "A Bazarr-adatok lekérése nem sikerült" - } - }, - "mediaMissing": { - "name": "Hiányzó és várólistán lévő média", - "description": "A Radarr és a Sonarr hiányzó és várólistán lévő filmjeinek és epizódjainak megjelenítése", - "option": { - "showMissing": { - "label": "Hiányzó elemek megjelenítése" - }, - "showQueued": { - "label": "Várólistán lévő elemek megjelenítése" - }, - "pageSize": { - "label": "Oldalankénti elemek száma" - } - }, - "tab": { - "missing": "Hiányzó", - "queued": "Várólistán" - }, - "type": { - "movie": "Film", - "episode": "Epizód" + "internalServerError": "Nem sikerült kapcsolódni a Beszelhez. Ellenőrizd az integráció beállításait." }, "empty": { - "missing": "Nincs hiányzó elem", - "queued": "Nincs várólistán lévő elem", - "noTabsEnabled": "Engedélyezz legalább egy lapot a widget beállításaiban" + "noSystems": "Nem található rendszer" }, - "timeLeft": "Hátralévő idő" - }, - "traefik": { - "name": "Traefik", - "description": "A Traefik útválasztóinak, szolgáltatásainak, köztes rétegeinek és belépési pontjainak áttekintése", - "option": { - "showTcp": { - "label": "TCP megjelenítése" + "options": { + "statusFilter": { + "label": "Állapotszűrő" }, - "showUdp": { - "label": "UDP megjelenítése" + "showCpu": { + "label": "CPU megjelenítése" }, - "showEntryPoints": { - "label": "Belépési pontok megjelenítése" + "showMemory": { + "label": "Memória megjelenítése" + }, + "showDisk": { + "label": "Lemez megjelenítése" + }, + "showGpu": { + "label": "GPU megjelenítése" + }, + "showLoadAvg": { + "label": "Terhelési átlag megjelenítése" + }, + "showNet": { + "label": "Hálózat megjelenítése" + }, + "showTemp": { + "label": "Hőmérséklet megjelenítése" + }, + "showBattery": { + "label": "Akkumulátor megjelenítése" + }, + "showServices": { + "label": "Szolgáltatások megjelenítése" + }, + "showUptime": { + "label": "Üzemidő megjelenítése" + }, + "showAgent": { + "label": "Agentverzió megjelenítése" } }, - "instances": "Traefik-példányok", - "versionUnknown": "Ismeretlen verzió", - "summary": { - "routers": "Útválasztók", - "entryPoints": "Belépési pontok" - }, - "resource": { - "routers": "Útválasztók", - "services": "Szolgáltatások", - "middlewares": "Köztes rétegek" - }, - "status": { - "healthy": "Rendben", - "errors": "{count} hiba", - "warnings": "{count} figyelmeztetés" - }, - "error": { - "internalServerError": "A Traefik-adatok lekérése nem sikerült" + "metric": { + "system": "Rendszer", + "source": "Integráció", + "hostname": "Gazdagépnév", + "cpuModel": "CPU-modell", + "cores": "Mag", + "memoryTotal": "Teljes memória", + "memory": "Memória", + "disk": "Lemez", + "loadAvg": "Terhelési átlag", + "net": "Hálózat", + "temp": "Hőmérséklet", + "battery": "Akkumulátor", + "uptime": "Üzemidő", + "agent": "Ügynök" } }, - "wud": { - "name": "What's Up Docker", - "description": "Megmutatja, hány figyelt konténerhez érhető el frissítés.", - "title": "What's Up Docker", - "monitored": "Figyelt", - "updatesAvailable": "{count, plural, one {# frissítés érhető el} other {# frissítés érhető el}}", - "updateAvailable": "Frissítés érhető el", - "openReleaseNotes": "Kiadási megjegyzések megnyitása", + "llamacpp": { + "name": "llama.cpp", + "description": "A helyi llama.cpp-szerver állapotának, betöltött modelljének és generálási sebességének megjelenítése.", + "title": "llama.cpp", + "status": { + "unhealthy": "Nem megfelelő állapot ({status})" + }, + "idle": "Tétlen", + "speedTooltip": { + "current": "Aktuális generálási sebesség", + "average": "Átlagos generálási sebesség az indítás óta", + "request": "Átlagos sebesség a kérés indítása óta" + }, + "busy": "{count, plural, one {# kérés fut} other {# kérés fut}}", + "modelInfo": { + "context": "Környezet", + "size": "Fájlméret", + "parameters": "Paraméterek", + "model": "Modell", + "quantization": "Kvantálás" + }, + "stats": { + "tokensProcessed": "Feldolgozott tokenek", + "contextUsage": "Környezet / KV-használat", + "cacheHitRate": "Prompt-gyorsítótár találati aránya", + "tokensGenerated": "Generált tokenek" + }, + "error": { + "unreachable": "A llama-server nem érhető el" + }, + "unit": { + "speed": "{value} token/s", + "parameters": "{value}B", + "none": "—", + "speedShort": "token/s" + }, "option": { "showTitle": { "label": "Cím megjelenítése" }, - "showRing": { - "label": "Frissítési gyűrű megjelenítése" + "showModelInfo": { + "label": "Modellinformációk megjelenítése" }, - "layout": { - "label": "Elrendezés", + "showContextUsage": { + "label": "Környezethasználat megjelenítése" + }, + "showCacheHitRate": { + "label": "Gyorsítótár-találati arány megjelenítése" + }, + "showSpeedStats": { + "label": "Sebességstatisztikák megjelenítése" + }, + "showRequests": { + "label": "Kérésterhelés megjelenítése" + }, + "showTokenStats": { + "label": "Tokenösszesítések megjelenítése" + }, + "showSpeculative": { + "label": "Spekulatív dekódolás megjelenítése" + } + }, + "advanced": { + "promptSpeed": "Promptsebesség", + "avgSpeed": "Átlagos generálás", + "requests": "Kérelmek", + "deferred": "Elhalasztva", + "slots": "{processing}/{total} foglalt hely", + "speculative": "Spekulatív dekódolás", + "avgPrompt": "Átlagos prompt", + "specDrafts": "Spekulatív vázlatok", + "specAccepted": "Elfogadott spekulatív tokenek", + "specDraftTokens": "Spekulatív vázlattokenek" + } + }, + "stats": { + "name": "Statisztikák", + "description": "Integrációid statisztikáinak egyesítése egyetlen beállítható widgetben.", + "configure": "Metrikák beállítása", + "refresh": "Statisztikák frissítése", + "empty": "Nyisd meg a widget beállításait, válaszd ki az integrációkat, majd adj hozzá metrikákat.", + "editorHelp": "Adj hozzá metrikákat a widgethez kiválasztott integrációkból. A módosításokat a rendszer a műszerfallal együtt menti.", + "source": "Integráció", + "metric": "Metrika", + "noMetrics": "Ehhez az integrációhoz nem érhetők el statisztikák", + "add": "Metrika hozzáadása", + "label": "Egyéni címke", + "hidden": "Rejtett", + "compact": "Tömör számok", + "moveUp": "Felfelé mozgatás", + "moveDown": "Mozgatás le", + "remove": "Metrika eltávolítása", + "loading": "Betöltés…", + "unavailable": "Nem érhető el", + "refreshFailed": "A frissítés sikertelen — mentett adatok jelennek meg", + "stale": "Mentett adatok — frissítsd a frissítéshez", + "table": { + "value": "Érték", + "status": "Állapot" + }, + "option": { + "table": { + "label": "Táblázatos nézet" + }, + "rows": { + "label": "Tömör sorok" + }, + "showIcon": { + "label": "Forrásikon megjelenítése" + }, + "spacing": { + "label": "Térköz", "option": { - "horizontal": { - "label": "Vízszintes" + "xs": { + "label": "Tömör" }, - "vertical": { - "label": "Függőleges" + "sm": { + "label": "Kényelmes" + }, + "md": { + "label": "Tágas" } } }, - "showUpdateList": { - "label": "A konténerfrissítések listájának megjelenítése", - "description": "Felsorolja az összes figyelt konténert, amelyhez elérhető képfrissítés." + "entries": { + "label": "Metrikák" + }, + "plain": { + "label": "Kártyahátterek eltávolítása" } - } + }, + "fetchFailed": "Nem sikerült lekérni a statisztikákat", + "viewOptions": "Nézet testreszabása", + "moreMetrics": "{count} további a speciális nézetben", + "localHelp": "Az elrendezés, a formázás és a láthatóság csak erre a nézetre vonatkozik. A megosztott táblabeállítások változatlanok maradnak.", + "plain": "Kártyahátterek eltávolítása", + "resetView": "Nézet visszaállítása", + "allHidden": "Ebben a nézetben minden metrika rejtve van. A visszaállításukhoz használd a Nézet testreszabása lehetőséget." + }, + "wazuh": { + "target": { + "api": "Wazuh-szerver API", + "indexer": "Wazuh-indexelő", + "wazuh": "Wazuh" + }, + "severity": { + "low": "Alacsony", + "medium": "Közepes", + "high": "Magas", + "critical": "Kritikus" + }, + "error": { + "unauthorized": { + "title": "{target} elutasította a hitelesítő adatokat", + "description": "Ellenőrizd a Wazuh-integrációban mentett felhasználónevet és jelszót. A szerver API-ja (55000-es port) és az indexelő (9200-as port) külön felhasználókat használ." + }, + "certificate": { + "title": "{target} tanúsítványa nem megbízható", + "description": "A Wazuh alapértelmezés szerint önaláírt tanúsítványt használ. Futtasd a „Kapcsolat tesztelése” műveletet az integráción, és bízz meg a tanúsítványban, vagy add hozzá a hitelesítésszolgáltatót a Beállítások → Tanúsítványok alatt." + }, + "unreachable": { + "title": "Nem lehet elérni: {target}", + "description": "A gép elutasította vagy megszakította a kapcsolatot. Ellenőrizd az URL-t, a portot és a tűzfalat. Alapértelmezett, minden egyben telepítés esetén az indexelő csak a localhoston figyel." + }, + "timeout": { + "title": "{target} kapcsolata időtúllépést szenvedett", + "description": "15 másodpercen belül nem érkezett válasz. Lehet, hogy a szolgáltatás túlterhelt, vagy hibás a cím." + }, + "status": { + "title": "{target} hibát adott vissza", + "description": "A kérés HTTP-állapota: {status}." + }, + "invalidResponse": { + "title": "Váratlan válasz ettől: {target}", + "description": "Ellenőrizd, hogy az URL a Wazuh szerver API-jára vagy indexelőjére, ne pedig a műszerfalra mutat-e." + }, + "indexerRequired": { + "title": "Wazuh-indexelői hitelesítő adatok szükségesek", + "description": "A riasztások, a biztonsági rések és a fájlintegritási események a Wazuh-indexelőből olvashatók. Adj hozzá indexelő-URL-t, felhasználónevet és jelszót az integrációhoz." + }, + "unknown": { + "title": "Nem sikerült adatokat betölteni innen: {target}", + "description": "A részletekért ellenőrizd a Homarr naplóit." + } + }, + "range": { + "1h": "1 óra", + "24h": "24 óra", + "7d": "7 nap", + "30d": "30 nap" + }, + "levelTooltip": "{level}. szabályszint ({severity})" + }, + "wazuhAgents": { + "name": "Wazuh-ügynökök", + "description": "Rendezhető Wazuh-ügynöklista állapottal, operációs rendszerrel, verzióval és utolsó életjelzéssel", + "option": { + "statusFilter": { + "label": "Ügynökök megjelenítése" + }, + "sortBy": { + "label": "Rendezés szempontja" + }, + "showVersion": { + "label": "Wazuh-verzió oszlopának megjelenítése" + }, + "showGroups": { + "label": "Csoportok oszlopának megjelenítése" + } + }, + "title": "Ügynökök", + "total": "{count} ügynök", + "status": { + "active": "Aktív", + "disconnected": "Szétkapcsolt", + "neverConnected": "Soha nem csatlakozott", + "pending": "Függőben" + }, + "statusLabel": { + "active": "Aktív", + "disconnected": "Szétkapcsolt", + "never_connected": "Soha nem csatlakozott", + "pending": "Függőben", + "unknown": "Ismeretlen" + }, + "live": "Élő", + "snapshot": "{age} régi pillanatkép", + "snapshotHint": "A Wazuh-műszerfal {time} időpontban készült ügynökpillanatképéből (wazuh-monitoring) olvasva. Élő adatokhoz adj meg szerver-API-hitelesítő adatokat.", + "staleSnapshot": "A {time} időpontban készült ügynökpillanatkép elavult. Ellenőrizd, hogy fut-e a Wazuh-műszerfal figyelési feladata, vagy adj meg szerver-API-hitelesítő adatokat.", + "noDisconnected": "Minden ügynök csatlakoztatva van", + "empty": "Egyetlen ügynök sem felel meg ennek a szűrőnek", + "column": { + "status": "Állapot", + "name": "Folyamat neve", + "ip": "IP-cím", + "os": "Operációs rendszer", + "version": "Verzió", + "lastKeepAlive": "Életjelzés", + "groups": "Csoportok" + }, + "outdated": "Régebbi, mint a legújabb ügynökverzió ({version})" + }, + "wazuhAlerts": { + "name": "Wazuh-riasztások hírcsatornája", + "description": "Legutóbbi Wazuh-riasztások szinttel, MITRE ATT&CK-technikákkal, ügynökkel és forrás-IP-címmel", + "option": { + "minLevel": { + "label": "Minimális szabályszint", + "description": "Wazuh-szintek: 0–6 alacsony, 7–11 közepes, 12–14 magas, 15+ kritikus" + }, + "hours": { + "label": "Időablak (óra)" + }, + "limit": { + "label": "Riasztások száma" + }, + "showMitre": { + "label": "MITRE ATT&CK-technikák megjelenítése" + }, + "showAgent": { + "label": "Ügynök megjelenítése" + }, + "showSourceIp": { + "label": "Riasztások · {level}+ szint · {hours} óra" + }, + "showRuleId": { + "label": "Szabályazonosító megjelenítése" + } + }, + "title": "Riasztások · {level}+ szint · {hours} óra", + "empty": "Ezen a szinten nincsenek riasztások. Minden rendben.", + "rule": "{id}. szabály", + "openInDashboard": "Riasztás megnyitása a Wazuh-műszerfalon" + }, + "wazuhSummary": { + "name": "Wazuh-riasztások súlyossága", + "description": "Riasztások súlyosság szerinti bontása az előző időszakhoz viszonyított trenddel", + "option": { + "range": { + "label": "Időtartomány" + }, + "showTrend": { + "label": "Trend megjelenítése az előző időszakhoz képest" + }, + "showFooter": { + "label": "Lábléc megjelenítése" + } + }, + "title": "Riasztások súlyossága · {range}", + "alerts": "riasztás", + "none": "Nincsenek riasztások", + "trend": { + "new": "új", + "tooltip": "Előző időszak: {previous}" + }, + "previous": "Előző {range}: {count}", + "maxLevel": "Legmagasabb szint: {level}", + "health": "Indexelő állapota: {status}", + "manager": "Kezelő: {version}" + }, + "wazuhTimeline": { + "name": "Wazuh-riasztások idővonala", + "description": "Wazuh-riasztások időbeli halmozott diagramja súlyosság szerint", + "option": { + "range": { + "label": "Időtartomány" + }, + "interval": { + "label": "Időköz" + }, + "chartType": { + "label": "Diagramtípus" + }, + "yScale": { + "label": "Y tengely skálája", + "description": "A négyzetgyök-skála láthatóvá teszi a magas és kritikus riasztásokat a több ezer alacsony mellett" + }, + "minLevel": { + "label": "Minimális szabályszint" + }, + "showLegend": { + "label": "Jelmagyarázat megjelenítése összesítésekkel" + } + }, + "title": "Riasztások idővonala · {range}", + "total": "{count} riasztás", + "interval": "{interval} időnként" + }, + "wazuhTopList": { + "name": "Wazuh toplistája", + "description": "Top szabályok, ügynökök, forrás-IP-k vagy MITRE ATT&CK-taktikák és -technikák a riasztások száma szerint", + "option": { + "kind": { + "label": "Rangsorolás" + }, + "range": { + "label": "Időtartomány" + }, + "limit": { + "label": "Bejegyzések száma" + }, + "minLevel": { + "label": "Minimális szabályszint" + }, + "showBars": { + "label": "Sávok megjelenítése" + } + }, + "title": { + "rules": "Top szabályok · {range}", + "agents": "Top ügynökök · {range}", + "sourceIps": "Top forrás-IP-k · {range}", + "mitreTactics": "MITRE-taktikák · {range}", + "mitreTechniques": "MITRE-technikák · {range}" + }, + "empty": { + "rules": "Ebben az időszakban nincsenek riasztások", + "agents": "Ebben az időszakban nincsenek riasztások", + "sourceIps": "Ebben az időszakban nincsenek forrás-IP-vel rendelkező riasztások", + "mitreTactics": "Ebben az időszakban nincsenek MITRE ATT&CK-hoz rendelt riasztások", + "mitreTechniques": "Ebben az időszakban nincsenek MITRE ATT&CK-hoz rendelt riasztások" + }, + "totalTooltip": "{count} egyező riasztás", + "private": "LAN", + "public": "Nyilvános", + "agents": "{count} ügynökön észlelve", + "others": "{count} további riasztás más bejegyzésekben" + }, + "wazuhVulnerabilities": { + "name": "Wazuh-biztonsági rések", + "description": "Biztonsági rések száma, legfontosabb CVE-k és leginkább sérülékeny ügynökök", + "option": { + "cveOrder": { + "label": "CVE-k rangsorolása szempont szerint" + }, + "minSeverity": { + "label": "CVE-k súlyossága" + }, + "cveLimit": { + "label": "CVE-k száma" + }, + "agentLimit": { + "label": "Ügynökök száma" + }, + "showAgents": { + "label": "Leginkább sérülékeny ügynökök megjelenítése" + } + }, + "title": "Biztonsági rések", + "topCves": "Legfontosabb CVE-k", + "score": "Pontszám", + "agentsShort": "Ügynökök", + "topAgents": "Leginkább sérülékeny ügynökök", + "criticalHigh": "Kritikus / magas", + "totalTooltip": "{count} találat {agents} ügynökön", + "affected": "{count} ügynök", + "empty": "Nem találhatók biztonsági rések", + "distribution": "Súlyossági eloszlás. A pontszám nélküli {unscored} találat nem jelenik meg.", + "worst": "Legrosszabb: {id} ({score}) {agents} ügynökön" + }, + "wazuhFim": { + "name": "Wazuh-fájlintegritás", + "description": "Legutóbbi fájlintegritás-figyelési (syscheck) események", + "option": { + "range": { + "label": "Időtartomány" + }, + "event": { + "label": "Események" + }, + "limit": { + "label": "Események száma" + }, + "includeRegistry": { + "label": "Windows rendszerleíró adatbázis-eseményeinek felvétele" + } + }, + "title": "Fájlintegritás · {range}", + "event": { + "added": "Hozzáadás dátuma", + "modified": "Módosítva", + "deleted": "Törölve", + "unknown": "Módosult" + }, + "empty": "Ebben az időszakban nincsenek fájlintegritási események", + "user": "{user} által", + "registry": "Rendszerleíró adatbázis" + }, + "wazuhAuthFailures": { + "name": "Wazuh-hitelesítési hibák", + "description": "Sikertelen bejelentkezések és brute force riasztások ügynökönként, óránkénti grafikonokkal", + "option": { + "hours": { + "label": "Időablak (óra)" + }, + "limit": { + "label": "Ügynökök száma" + }, + "showSourceIps": { + "label": "Top forrás-IP-k megjelenítése" + } + }, + "title": "Hitelesítési hibák · {hours} óra", + "seriesTooltip": "Minden ügynök az elmúlt {hours} órában", + "peak": "Csúcs: {count}/csoport", + "empty": "Ebben az időszakban nincsenek sikertelen bejelentkezések", + "failed": "Sikertelen bejelentkezések", + "failedHint": "Egyedi hitelesítési hibák (sshd, PAM, Windows-bejelentkezés, érvénytelen felhasználók)", + "bruteForce": "Brute force támadás", + "bruteForceHint": "Összefüggő brute force szabályok (rövid időn belüli többszörös hibák, MITRE T1110)", + "sourceIps": "Forrás-IP-k", + "ipTooltip": "{ip}: {count} sikertelen kísérlet", + "bruteForceCount": "{count} brute force kísérlet" } }, "widgetPreview": { @@ -4004,7 +5732,76 @@ } }, "board": { + "emptyState": { + "title": "Építsd fel az első nézetedet", + "description": "Adj hozzá widgetet vagy alkalmazást, vagy csatlakoztass egy szolgáltatást, és használd annak adatait ezen a táblán.", + "addWidget": "Widget hozzáadása", + "addApp": "Alkalmazás hozzáadása", + "connectService": "Szolgáltatás csatlakoztatása" + }, + "setupChecklist": { + "title": "Tedd hasznossá ezt a táblát", + "description": "Folytasd ott, ahol abbahagytad. A haladás az ezen a táblán már meglévő tartalmat követi.", + "collapse": "Beállítási ellenőrzőlista összecsukása", + "dismiss": "", + "resume": "Beállítás folytatása ({completed}/{total})", + "progress": "Táblabeállítás folyamata", + "step": { + "content": { + "label": "Hasznos tartalom hozzáadása", + "description": "Válassz ki egy widgetet, és állítsd be, mielőtt elhelyezed." + }, + "app": { + "label": "Alkalmazás kitűzése", + "description": "Tarts elérhető közelségben egy szolgáltatást vagy eszközt erről a tábláról." + }, + "service": { + "label": "Szolgáltatás csatlakoztatása", + "description": "Kompatibilis widgetekhez tartozó élő adatok és műveletek feloldása.", + "permissionDescription": "A szolgáltatás élő adatainak feloldásához egy rendszergazdának kell csatlakoztatnia azt.", + "action": "Csatlakoztatás" + } + } + }, "action": { + "addContent": "Tábla tartalmának hozzáadása", + "settings": "Táblabeállítások", + "switch": "Tábla váltása", + "switcher": { + "title": "Tábla váltása", + "search": { + "empty": "A „{search}” keresésnek megfelelő tábla nincs." + }, + "results": "Elérhető táblák", + "preview": "{name} előnézete {count} elemmel", + "currentHidden": "Aktuális tábla: {name}", + "keyboard": { + "navigate": "Navigálás", + "open": "Megnyitás", + "instructions": "Gépelj a táblák szűréséhez. A nyílbillentyűkkel lépkedhetsz a találatok között, az Enter billentyűvel pedig megnyithatsz egy táblát." + }, + "empty": { + "title": "Nincsenek más táblák", + "description": "Nincs más tábla, amelyhez hozzáférhetnél." + }, + "error": "A táblákat nem sikerült betölteni." + }, + "create": { + "availability": { + "checking": "Elérhetőség ellenőrzése…", + "available": "{name} elérhető" + }, + "notification": { + "success": { + "title": "Tábla létrehozva", + "message": "A {name} tábla létrejött" + }, + "error": { + "title": "Nem sikerült létrehozni a táblát", + "message": "A {name} táblát nem sikerült létrehozni" + } + } + }, "duplicate": { "title": "Tábla másolása", "message": "Ezzel a {name} tábla teljes tartalmával együtt duplikálódik. Ha a widgetek olyan integrációkra hivatkoznak, amelyek használata nem engedélyezett, azok eltávolításra kerülnek.", @@ -4020,14 +5817,19 @@ } }, "edit": { + "enter": "Tábla szerkesztése", + "save": "Tábla mentése", + "exit": "Kilépés a szerkesztési módból", "notification": { "success": { - "title": "A módosítások sikeresen alkalmazva", "message": "A tábla sikeresen elmentve" }, "error": { - "title": "Nem sikerült alkalmazni a változtatásokat", "message": "A táblát nem sikerült elmenteni" + }, + "loadError": { + "title": "Nem sikerült elindítani a szerkesztést", + "message": "A táblaszerkesztőt nem sikerült betölteni. A műszerfal továbbra is elérhető megtekintési módban." } }, "confirmLeave": { @@ -4035,62 +5837,6 @@ "message": "Mentetlen módosításaid vannak. Biztosan elhagyod az oldalt?" } }, - "oldImport": { - "label": "Importálás a homarr 1.0.0 előtti verzióból", - "notification": { - "success": { - "title": "Sikeres importálás", - "message": "A tábla sikeresen importálva" - }, - "error": { - "title": "Importálás nem sikerült", - "message": "Táblát nem sikerült importálni; további részletekért nézd meg a naplófájlokat" - } - }, - "form": { - "file": { - "label": "JSON fájl kiválasztása", - "invalidError": "Érvénytelen konfigurációs fájl" - }, - "apps": { - "label": "Alkalmazások", - "avoidDuplicates": { - "label": "Kerülje az ismétlődéseket", - "description": "Nem veszi figyelembe azokat az alkalmazásokat, amelyeknél már létezik azonos href-vel rendelkező alkalmazás" - }, - "onlyImportApps": { - "label": "Csak alkalmazások importálása", - "description": "Csak az alkalmazásokat importálja; a táblát kézzel kell újra létrehozni." - } - }, - "name": { - "label": "Tábla neve" - }, - "screenSize": { - "label": "Képernyő méret", - "description": "Az 1.0 előtti verziókban három különböző mód létezett, így minden képernyőmérethez be tudtad állítani az oszlopok számát.", - "option": { - "sm": "Kicsi", - "md": "Közepes", - "lg": "Nagy" - } - }, - "sidebarBehavior": { - "label": "Oldalsáv viselkedés", - "description": "Az 1.0 verzióban az oldalsávok el lettek távolítva, kiválaszthatod, mi történjen a bennük lévő elemekkel.", - "option": { - "lastSection": { - "label": "Utolsó szakasz", - "description": "Az oldalsáv az utolsó szakasz alatt jelenik meg" - }, - "removeItems": { - "label": "Elemek eltávolítása", - "description": "Az oldalsávban lévő elemek el lesznek távolítva" - } - } - } - } - }, "quickCreateApp": { "modal": { "title": "Alkalmazás létrehozása rögtön", @@ -4098,6 +5844,12 @@ } } }, + "landmark": { + "canvas": "Műszerfal vászna", + "leftRail": "Műszerfal bal oldali sávja", + "rightRail": "Műszerfal jobb oldali sávja", + "items": "Műszerfalelemek" + }, "field": { "pageTitle": { "label": "Oldal cím" @@ -4167,7 +5919,8 @@ } }, "primaryColor": { - "label": "Elsődleges szín" + "label": "Elsődleges szín", + "locked": "A rendszergazda minden táblán megtartja a példány márkaszínét." }, "secondaryColor": { "label": "Másodlagos szín" @@ -4207,9 +5960,6 @@ "xl": "Nagyon nagy" } }, - "name": { - "label": "Név" - }, "isPublic": { "label": "Nyilvános", "description": "A nyilvános táblák mindenki számára elérhetők, akár regisztráció nélkül is." @@ -4229,9 +5979,44 @@ "title": "Elrendezés", "responsive": { "title": "Reszponzív elrendezések", + "description": "Minden elrendezés saját widgetpozíciókat és -méreteket tartalmaz. A Mobil és az Alap mindig elérhető; egyéni elrendezéseket további töréspontokon adhatsz hozzá.", "action": { "add": "Elrendezés hozzáadása" } + }, + "role": { + "mobile": "Mobil", + "base": "Alap", + "custom": "Egyéni" + }, + "custom": { + "defaultName": "Egyéni elrendezés" + }, + "mobile": { + "breakpointDescription": "A Mobil elrendezés mindig 0 képponttól a következő elrendezési töréspontig használatos." + }, + "preview": { + "columns": "oszlopok", + "empty": "Ez az elrendezés üres", + "dynamicSection": "Dinamikus szakasz", + "editorWidthLabel": "{layoutName} · {width}px" + }, + "reset": { + "action": "Visszaállítás az Alapból", + "confirm": { + "title": "Visszaállítod ezt: {layoutName}?", + "message": "Ez minden mentett pozíciót és méretet lecserél ebben az elrendezésben az Alapból létrehozott új elrendezésre. Ez nem vonható vissza." + } + }, + "edit": { + "action": "Elrendezés szerkesztése", + "saveAndEdit": "Mentés és szerkesztés", + "save": "Elrendezés mentése", + "cancel": { + "action": "Elrendezés szerkesztésének megszakítása", + "title": "Elveti az elrendezés módosításait?", + "message": "Az elrendezés nem mentett módosításai elvesznek." + } } }, "background": { @@ -4268,10 +6053,7 @@ "rename": { "label": "Tábla átnevezése", "description": "A név megváltoztatása megszakítja a táblára mutató összes hivatkozást.", - "button": "Név módosítása", - "modal": { - "title": "Tábla átnevezése" - } + "button": "Név módosítása" }, "visibility": { "label": "Tábla láthatóságának módosítása", @@ -4295,9 +6077,7 @@ } }, "delete": { - "label": "Tábla törlése", "description": "A tábla törlése nem vonható vissza. Biztosan folytatod?", - "button": "Tábla törlése", "confirm": { "title": "Tábla törlése", "description": "Biztosan törölni szeretnéd ezt a táblát? Ez véglegesen törli a táblát és annak összes tartalmát." @@ -4342,28 +6122,41 @@ }, "layout": { "field": { - "name": { - "label": "Név" - }, "columnCount": { "label": "Oszlopok száma" }, "breakpoint": { "label": "Töréspont", "description": "Az elrendezés minden olyan képernyőn használva lesz, amely nagyobb ennél a töréspontnál, a következő nagyobb töréspontig." + }, + "gutters": { + "label": "Rögzített oldalsávok", + "description": "Mindkét oldalon legfeljebb három irányítópult-oszlopot foglalhat le. A fennmaradó vászon automatikusan átrendeződik.", + "left": { + "label": "Bal oldalsáv", + "description": "Az irányítópult görgetése közben ez a terület látható marad.", + "thumbLabel": "Bal oldalsáv szélessége" + }, + "right": { + "label": "Jobb oldalsáv", + "description": "Az irányítópult görgetése közben ez a terület látható marad.", + "thumbLabel": "Jobb oldalsáv szélessége" + }, + "width": { + "label": "Szélesség oszlopokban" + }, + "preview": { + "label": "Irányítópult-elrendezés előnézete" + } } } }, "management": { "metaTitle": "Kezelés", - "title": { - "morning": "Jó reggelt, {username}", - "afternoon": "Jó napot, {username}", - "evening": "Jó estét, {username}" - }, "notFound": { "title": "Nem található", - "text": "A kért erőforrás nem található" + "text": "A kért erőforrás nem található", + "backToHome": "Vissza a kezelőfelület kezdőlapjára" }, "error": { "title": "Az oldal nem tölthető be", @@ -4372,19 +6165,10 @@ }, "navbar": { "items": { - "workshop": "Workshop", "home": "Nyitólap", - "boards": "Táblák", - "apps": "Alkalmazások", - "integrations": "Integrációk", - "searchEngies": "Keresőmotorok", - "medias": "Média", "users": { - "label": "Felhasználók", "items": { - "manage": "Kezelés", - "invites": "Meghívók", - "groups": "Csoportok" + "manage": "Kezelés" } }, "tools": { @@ -4392,10 +6176,7 @@ "items": { "docker": "Docker", "kubernetes": "Kubernetes", - "logs": "Naplók", "api": "API & MCP", - "certificates": "Tanúsítványok", - "tasks": "Feladatok", "backup": "Biztonsági mentés" } }, @@ -4409,21 +6190,12 @@ "sourceCode": "Forráskód" } }, - "about": "Névjegy" + "about": "Névjegy", + "assistant": "Asszisztens" } }, "page": { "home": { - "statistic": { - "board": "Táblák", - "user": "Felhasználók", - "invite": "Meghívók", - "integration": "Integrációk", - "app": "Alkalmazások", - "group": "Csoportok", - "searchEngine": "Keresőmotorok", - "media": "Médiák" - }, "statisticLabel": { "boards": "Táblák", "resources": "Erőforrások", @@ -4461,13 +6233,8 @@ "tooltip": "Ez a tábla jelenik meg mobil táblaként" } }, - "duplicate": { - "label": "Tábla másolása" - }, "delete": { - "label": "Végleges törlés", "confirm": { - "title": "Tábla törlése", "description": "Biztosan törölni szeretnéd a {name} táblát?" } } @@ -4476,28 +6243,82 @@ "public": "Ez a tábla nyilvános", "private": "Ez a tábla privát" }, - "noResults": { - "title": "Még nincsenek táblák" + "preview": { + "label": "{name} elrendezésének előnézete {count} elemmel", + "unknownCreator": "Ismeretlen létrehozó" }, - "modal": { - "createBoard": { - "field": { - "name": { - "label": "Név" - } - } - } + "noResults": { + "title": "Még nincsenek táblák", + "description": "Hozzon létre egy táblát, hogy alkalmazásait és widgetjeit egy helyen rendezhesse el." } }, "media": { "includeFromAllUsers": "Minden felhasználó médiájának szerepeltetése" }, "user": { - "back": "Vissza a felhasználókhoz", "fieldsDisabledExternalProvider": "Bizonyos mezők le vannak tiltva, mert külső hitelesítési szolgáltató kezeli őket.", "setting": { "general": { "title": "Általános", + "header": { + "title": "Fejlécstúdió", + "badge": "Személyes", + "description": "Húzza a vezérlőket bárhová a sorban. A Bal, a Közép és a Jobb rögzített marad, miközben a vezérlők körülöttük mozognak.", + "device": { + "desktop": "Asztali számítógép", + "mobile": "Mobil" + }, + "zones": { + "left": "Bal", + "center": "Középre", + "right": "Jobb" + }, + "action": { + "hide": "Fejléc elrejtése", + "show": "Fejléc megjelenítése", + "configure": "{item} áthelyezése vagy beállítása", + "remove": "{item} eltávolítása", + "dropIntoZone": "Áthelyezés a {zone} szakaszba" + }, + "preview": { + "board": "{name} irányítópultjának előnézete", + "empty": "Nem érhető el irányítópult-elrendezés" + }, + "available": { + "title": "Elérhető vezérlők", + "description": "Adjon hozzá egy vezérlőt, majd húzza a teljes gombját a fenti helyre.", + "requiredAlways": "Ez a vezérlő kötelező, de bárhová áthelyezheti a fejlécben.", + "allAdded": "Minden beépített vezérlő már a fejlécben van.", + "add": "Hozzáad {item}", + "boardShortcut": "Tábla parancsikonja", + "chooseBoard": "Tábla kiválasztása" + }, + "configuration": { + "description": "Ez a vezérlő ugyanakkora marad, mint az élő fejlécben.", + "searchDisplay": { + "input": "Keresősáv", + "icon": "Csak ikon" + }, + "logoDisplay": { + "logo": "Csak logó", + "logoAndText": "Logó + szöveg" + } + }, + "items": { + "logo": "Logó", + "search": "Keresés", + "home": "Főoldal", + "boardSwitcher": "Táblák", + "assistant": "Asszisztens", + "docker": "Docker", + "boardEdit": "Tábla szerkesztése", + "boardSettings": "Tábla beállításai", + "settings": "Saját beállítások", + "themeToggle": "Téma váltása", + "user": "Fiók", + "boardUnavailable": "A tábla nem érhető el" + } + }, "item": { "language": "Nyelv és régió", "board": { @@ -4531,14 +6352,10 @@ }, "security": { "title": "Biztonság" - }, - "board": { - "title": "Táblák" } }, "list": { - "metaTitle": "Felhasználók kezelése", - "title": "Felhasználók" + "metaTitle": "Felhasználók kezelése" }, "edit": { "metaTitle": "{username} felhasználó szerkesztése" @@ -4592,9 +6409,6 @@ } }, "field": { - "id": { - "label": "Azonosító" - }, "creator": { "label": "Létrehozó" }, @@ -4618,10 +6432,7 @@ }, "setting": { "title": "Beállítások", - "alert": "A csoportbeállítások prioritását a csoportok listában lévő sorrendje határozza meg. A felül lévő beállítások felülírják az alul lévő beállításokat.", - "board": { - "title": "Táblák" - } + "alert": "A csoportbeállítások prioritását a csoportok listában lévő sorrendje határozza meg. A felül lévő beállítások felülírják az alul lévő beállításokat." }, "members": { "title": "Tagok", @@ -4629,10 +6440,7 @@ "notFound": "Nincsenek tagok" }, "permissions": { - "title": "Engedélyek", - "form": { - "unsavedChanges": "Nem mentett módosításaid vannak!" - } + "title": "Engedélyek" } } }, @@ -4641,12 +6449,10 @@ "notification": { "success": { "message": "A beállítások mentése sikeres" - }, - "error": { - "message": "Nem sikerült menteni a beállításokat" } }, "section": { + "analyticsDocumentation": "Pontosan megtekintheti, milyen elemzési adatokat gyűjt a Homarr", "analytics": { "title": "Analitika", "general": { @@ -4675,7 +6481,6 @@ } }, "board": { - "title": "Táblák", "homeBoard": { "label": "Globális kezdőlap tábla", "mobileLabel": "Globális mobil tábla", @@ -4694,7 +6499,6 @@ } }, "user": { - "title": "Felhasználók", "enableGravatar": { "label": "Gravatar engedélyezése", "description": "Visszaesik a Libravatar/Gravatar felhasználói avatarokra, ha nincs egyéni avatar beállítva és az e-mail konfigurálva van" @@ -4710,12 +6514,86 @@ "appearance": { "title": "Megjelenés", "defaultColorScheme": { - "label": "Alapértelmezett színséma", + "label": "Alapértelmezett színséma" + } + }, + "branding": { + "title": "Példány márkajelzése", + "groups": { + "identity": "Identitás", + "appearance": "Megjelenés", + "customCss": "Egyéni CSS", + "authentication": "Hitelesítés" + }, + "identity": { + "description": "Az alkalmazás logója az alkalmazáson belül, a bejelentkezési oldalakon és a telepített alkalmazásokban használt nagyobb jelzés. A böngészőikon (favicon) a lapokon és a könyvjelzőkben használt kis négyzet; ha üres, az alkalmazás logóját használja." + }, + "appName": { + "label": "Alkalmazás neve" + }, + "greeting": { + "label": "Egyéni üdvözlés" + }, + "logo": { + "label": "Alkalmazás logója", + "placeholder": "/logo/logo.png" + }, + "favicon": { + "label": "Böngészőikon (favicon)", + "placeholder": "Az alkalmazás logóját használja" + }, + "primaryColor": { + "label": "Elsődleges szín" + }, + "secondaryColor": { + "label": "Másodlagos kiemelőszín" + }, + "lockPrimaryColor": { + "label": "Ezt a színt használja minden táblán", + "description": "Megakadályozza, hogy a táblák színei lecseréljék az alkalmazás kiemelőszínét." + }, + "signInBackground": { + "label": "Hitelesítési háttér", + "placeholder": "https://example.com/background.jpg" + }, + "signInOverlay": { + "label": "Háttérfedvény" + }, + "defaultRadius": { + "label": "Sarokstílus", "options": { - "auto": "Automatikus", - "light": "Világos", - "dark": "Sötét" + "xs": "Szoros", + "sm": "Finom", + "md": "Kiegyensúlyozott", + "lg": "Lekerekített", + "xl": "Lágy" } + }, + "customCss": { + "label": "Globális egyéni CSS", + "description": "Minden oldalra alkalmazva. A tábla egyéni CSS-e felülírhatja." + }, + "authVisibility": { + "description": "Válassza ki, mi jelenjen meg minden hitelesítési oldalon.", + "appName": "Alkalmazás neve", + "logo": "Alkalmazás logója", + "greeting": "Üdvözlés" + }, + "summary": { + "title": "Jelenlegi márkajelzés", + "cornerStyle": "Sarokstílus", + "palette": "Paletta", + "backgroundConfigured": "Egyéni háttér · {overlay}% fedvény", + "backgroundDefault": "Alapértelmezett háttér", + "greetingConfigured": "Egyéni üdvözlés", + "greetingDefault": "Alapértelmezett üdvözlés", + "boardColorLocked": "A tábla színe zárolva", + "boardColorFlexible": "A táblák színei engedélyezve", + "appName": "Folyamat neve", + "logo": "Logó", + "greeting": "Üdvözlés", + "on": "Be", + "off": "Ki" } }, "culture": { @@ -4723,12 +6601,177 @@ "defaultLocale": { "label": "Alapértelmezett nyelv" } + }, + "assistant": { + "loading": "Az asszisztens beállításának betöltése", + "title": "Asszisztens", + "description": "Csatlakoztasson egy OpenAI-kompatibilis modellvégpontot a példányszintű asszisztenshez.", + "security": { + "description": "Az API-kulcsok és a további fejlécértékek titkosítva vannak a Homarr-adatbázisban. A böngészők soha nem kapják vissza ezeket. A modellkéréseket a Homarr-szerver közvetlenül a beállított végpontra küldi." + }, + "overview": { + "connectionReady": "A kapcsolat kész", + "unsavedChanges": "Mentetlen változtatások", + "setupRequired": "Beállítás szükséges", + "disabled": "Letiltva", + "noModel": "Nincs kiválasztott modell" + }, + "connection": { + "endpointTitle": "Szolgáltató és végpont", + "description": "Válasszon egy előbeállítást, vagy csatlakoztasson bármely, az OpenAI Chat Completions API-t megvalósító szolgáltatást.", + "save": "Szolgáltatói kapcsolat mentése" + }, + "credentials": { + "title": "Hitelesítő adatok", + "description": "Adja meg a végpont által igényelt titkos adatokat. A tárolt értékek titkosítva maradnak, és nem olvashatók vissza.", + "required": "Kulcs szükséges", + "optional": "Kulcs opcionális", + "workshop": "Felhasználónkénti GitHub-bejelentkezés" + }, + "provider": { + "title": "Szolgáltató", + "groups": { + "free": "Ingyenes a Homarral", + "hosted": "Hosztolt szolgáltatók", + "local": "Helyi szolgáltatók", + "custom": "Egyéni" + }, + "options": { + "homarr": { + "description": "Naponta korlátozott számú asszisztenshasználat ingyenes, amelyet a Homarr csapata finanszíroz. Jelentkezzen be a Community Workshopba a keret használatához." + }, + "openrouter": { + "description": "Hosztolt modellútválasztás nagy, eszközöket támogató modellkatalógussal." + }, + "openai": { + "description": "OpenAI Chat Completions a hivatalos API-végponton keresztül." + }, + "anthropic": { + "description": "Claude az Anthropic OpenAI SDK-kompatibilis végpontján keresztül." + }, + "google-gemini": { + "description": "Gemini a Google OpenAI-kompatibilis API-végpontján keresztül." + }, + "xai": { + "description": "Grok-modellek az xAI OpenAI-kompatibilis API-ján keresztül." + }, + "groq": { + "description": "Gyors hosztolt következtetés a Groq OpenAI-kompatibilis API-ján keresztül." + }, + "mistral": { + "description": "Mistral-modellek a hivatalos API-n keresztül." + }, + "deepseek": { + "description": "DeepSeek-modellek az OpenAI-kompatibilis API-ján keresztül." + }, + "together": { + "description": "Hosztolt nyílt modellek a Together OpenAI-kompatibilis API-ján keresztül." + }, + "ollama": { + "description": "Helyi vagy hálózati Ollama-szerver az OpenAI-kompatibilis API-jával." + }, + "lm-studio": { + "description": "Helyi LM Studio-szerver engedélyezett OpenAI-kompatibilitással." + }, + "llama-cpp": { + "description": "Helyi vagy hálózati llama.cpp-szerver az OpenAI-kompatibilis API-jával." + }, + "custom": { + "label": "Egyéni végpont", + "description": "Bármely más, az OpenAI Chat Completions szolgáltatással kompatibilis végpont." + } + }, + "homarrAuth": { + "title": "A napi ingyenes asszisztenshasználatot tartalmazza", + "description": "Nincs szükség API-kulcsra. A Homarr csapata naponta korlátozott számú asszisztenshasználatot biztosít Önnek. Jelentkezzen be a Community Workshopba, hogy a kerete külön legyen kezelve." + } + }, + "baseUrl": { + "title": "API-alap-URL", + "description": "Tartalmazza az API-előtagot, általában a /v1 értéket. Konténerekben a localhost a Homarr-konténerre hivatkozik." + }, + "apiKey": { + "title": "API-kulcs", + "required": "Ennél a szolgáltatónál kötelező. Az érték titkosítva van, és csak írható.", + "optional": "Helyi végpontoknál nem kötelező. Hagyja üresen, ha a szolgáltatás nem igényel bearer-hitelesítést.", + "placeholder": "Adjon meg egy API-kulcsot", + "savedTitle": "Titkosított API-kulcs mentve", + "savedDescription": "A Homarr használhatja ezt a kulcsot, de nem tudja megjeleníteni vagy helyreállítani az értékét.", + "remove": "Mentett API-kulcs eltávolítása", + "removeFlow": { + "title": "Eltávolítja a mentett API-kulcsot?", + "description": "Ehhez a szolgáltatóhoz API-kulcs szükséges. Az eltávolítása leállíthatja a modellek felderítését és az asszisztens válaszait, amíg másik kulcsot nem ment.", + "optionalDescription": "A kulcs eltávolítása után a végpont nem kap többé bearer-hitelesítést. Győződjön meg róla, hogy elfogad hitelesítés nélküli kéréseket, vagy másik mentett fejlécet használ.", + "cancel": "Mentett kulcs megtartása", + "confirm": "API-kulcs eltávolítása" + } + }, + "headers": { + "title": "További kérésfejlécek", + "description": "Opcionális hitelesítési vagy útválasztási fejlécek. A fejlécértékek titkosítva vannak, és csak írhatók.", + "add": "Fejléc hozzáadása", + "name": "Fejléc neve", + "value": "Fejlécérték", + "valuePlaceholder": "Titkos vagy útválasztási érték", + "remove": "Fejléc eltávolítása", + "configured": "További titkosított fejlécek vannak beállítva. Fejlécek hozzáadásakor a teljes mentett készlet lecserélődik.", + "empty": "Ehhez a szolgáltatóhoz nincsenek további mentett fejlécek.", + "savedBadge": "Fejlécek mentve", + "pendingRemoval": "Eltávolítás függőben", + "clear": "Mentett fejlécek eltávolítása mentéskor", + "keep": "Mentett fejlécek megtartása" + }, + "model": { + "title": "Modell", + "description": "Válasszon egy felderített modellt, vagy adja meg egy végpont pontos modellazonosítóját.", + "placeholder": "Modellazonosító", + "refresh": "Modellek frissítése", + "chooseModel": "Válassza ki az új beszélgetésekhez használt modellt.", + "discoveryPath": "Modellfelderítési útvonal", + "discoveryPathDescription": "Az API alap-URL-jéhez lesz hozzáfűzve. Hagyja üresen a felderítés letiltásához és manuális modellazonosító használatához.", + "manual": "Adjon meg manuálisan egy modellazonosítót, vagy mentse a kapcsolatot a modellek felderítéséhez.", + "manualFallback": "A felderítés nem érhető el. Ettől még manuálisan megadhat egy modellazonosítót.", + "saveConnectionFirst": "A modell kiválasztása előtt mentse a szolgáltatói kapcsolatot.", + "discovering": "A szolgáltatótól elérhető modellek frissítése…", + "discovered": "{count, plural, one {# modell felderítve. Az eszköztámogatás a kiválasztott végponttól és modelltől függ.} other {# modell felderítve. Az eszköztámogatás a kiválasztott végponttól és modelltől függ.}}", + "discoveryFailed": "A modellfelderítés nem fejeződött be", + "context": "{count} kontextusablak", + "toolsConfirmed": "Meghirdetett eszközök", + "toolsUnknown": "Eszköztámogatás ellenőrzése" + }, + "serverTools": { + "title": "Szervereszközök", + "webSearch": { + "label": "Webes keresés", + "description": "Engedélyezi, hogy a modell az OpenRouteren keresztül az élő weben keressen, amikor a kéréshez aktuális információkra van szükség. A keresés használatát az OpenRouter külön számlázza.", + "proxyDescription": "Az OpenRouter webes keresési szervereszközének elküldése erre a végpontra. Csak akkor engedélyezze, ha az egyéni végpont továbbítja az OpenRouter szervereszköz-formátumát, például egy Homarr Router-proxy esetén.", + "limit": "A modell dönti el, mikor keressen; kérésenként legfeljebb 3 keresés és keresésenként 5 találat engedélyezett." + } + }, + "enabled": { + "label": "Asszisztens engedélyezése", + "description": "Megjeleníti az asszisztenst minden bejelentkezett felhasználónak. A meglévő Homarr-jogosultságok továbbra is érvényesek minden belső eszközhívásra." + }, + "save": "Asszisztens mentése", + "notification": { + "connectionSaved": { + "title": "A szolgáltatói kapcsolat mentve", + "message": "A végpont és a titkosított hitelesítő adatok készen állnak a modell kiválasztására.", + "credentialsCleared": "A végpont megváltozott, ezért a korábbi hitelesítő adatok törlődtek. Szükség esetén adjon meg hitelesítő adatokat az új célhoz." + }, + "saved": { + "title": "Az asszisztens beállításai mentve", + "message": "Az új modell- és elérhetőségi beállítások aktívak." + }, + "error": { + "title": "Az asszisztens beállításait nem sikerült menteni" + } + } } } }, "tool": { "tasks": { - "title": "Feladatok", "status": { "idle": "Tétlen", "running": "Fut", @@ -4746,6 +6789,11 @@ "label": "Pingek" } }, + "action": { + "run": "{name} futtatása most", + "enable": "{name} engedélyezése", + "disable": "{name} letiltása" + }, "interval": { "seconds": "Minden {interval, plural, =1 {másodperc} other {# másodperc}}", "minutes": "Minden {interval, plural, =1 {perc} other {# perc}}", @@ -4761,13 +6809,7 @@ } } }, - "settings": { - "title": "Feladatbeállítások a {jobName} számára" - }, "field": { - "name": { - "label": "Név" - }, "interval": { "label": "Ütemezési időköz" }, @@ -4781,11 +6823,6 @@ "table": { "search": "Keresés {count} feladat között..." }, - "action": { - "refresh": { - "label": "Frissítés" - } - }, "refresh": { "success": { "message": "Feladatok sikeresen frissítve" @@ -4819,7 +6856,6 @@ } }, "api": { - "title": "API", "modal": { "createApiToken": { "title": "API token létrehozva", @@ -4845,7 +6881,6 @@ }, "table": { "header": { - "id": "Azonosító", "createdBy": "Létrehozta", "actions": "Műveletek" } @@ -4901,43 +6936,12 @@ "availableTools": { "title": "Elérhető eszközök", "description": "{count} eszköz érhető el. Nyiss meg egy kategóriát az egyes eszközök és leírásaik megtekintéséhez.", - "columnType": "Típus", - "columnName": "Eszköz", - "columnDescription": "Leírás" - }, - "troubleshooting": { - "title": "Hibaelhárítás", - "missingHeader": { - "title": "„Hiányzó ApiKey fejléc”", - "description": "A kliens nem küldi a {header} fejlécet. Ellenőrizd, hogy a {section} szakasz helyes-e az MCP konfigurációban. Néhány kliens újraindítást igényel a konfigurációs módosítások után." - }, - "invalidFormat": { - "title": "„Érvénytelen ApiKey formátum”", - "description": "Ellenőrizd, hogy a teljes API-kulcsot másoltad-e ki, ne csak egy részét." - }, - "invalidKey": { - "title": "„Érvénytelen API-kulcs”", - "description": "A kulcsazonosító nem található, vagy a token hibás. Az API-kulcsok csak a létrehozáskor tekinthetők meg egyszer. Ha elvesztetted, töröld a régit, és hozz létre egy újat." - }, - "connectionRefused": { - "title": "A kapcsolat elutasítva / időtúllépés", - "description": "Ellenőrizd, hogy az URL elérhető-e az AI kliensből. Ha a Homarr fordított proxy vagy Docker mögött fut, használd a külső URL-t (ne a {localhost}-ot). Ellenőrizd a portot (alapértelmezett: 7575 Docker esetén)." - }, - "toolsNotAppearing": { - "title": "Eszközök nem jelennek meg", - "description": "Néhány eszköz specifikus integrációk beállítását igényli (pl. Docker, Overseerr). Az eszközlista a Homarr példányon elérhető függvényeitől függ." + "filteredDescription": "{count} egyező eszköz a kibővített kategóriákban.", + "search": "Eszközök keresése", + "noResults": { + "title": "Egyetlen eszköz sem felel meg a keresésnek", + "description": "Egyetlen MCP-eszköz sem egyezik ezzel: \"{search}\". Próbálkozzon névtérrel, eszköznévvel vagy leírással." } - }, - "copy": "Másolás", - "oneClick": { - "title": "Egy kattintásos telepítés", - "subtitle": "OAuth-ot használ – első használatkor hitelesítés a böngészőben", - "vsCode": "Telepítés VS Code-ban", - "cursor": "Telepítés Cursor-ban", - "copyUrl": "MCP URL másolása", - "copied": "Másolva!", - "copyHint": "ChatGPT-hez, Claude Code-hoz vagy bármely MCP klienshez", - "manualConfig": "Kézi konfiguráció" } } } @@ -4954,47 +6958,12 @@ "title": "Érzékeny adatok exportálása", "warningTitle": "Ez az export tartalmazza a teljes adatbázist.", "warningBody": "A biztonsági mentés az összes felhasználót, a titkosított integrációs titkokat, az API-kulcsokat, a táblák beállításait és az alkalmazásadatokat is tartalmazza. Tárold biztonságos helyen az exportált fájlt, és ne oszd meg másokkal.", - "typePrompt": "Írd be, hogy \"{phrase}\" a folytatáshoz", - "submit": "Adatbázis exportálása", - "cancel": "Mégse" + "submit": "Adatbázis exportálása" } }, "import": { "title": "Adatbázis visszaállítása", - "description": "Tölts fel egy korábban exportált biztonsági mentés ZIP-et az adatbázis visszaállításához. Ez a teljes adatbázist lecseréli. Ha a biztonsági mentés más titkosítási kulccsal készült, a titkok automatikusan újratitkosításra kerülnek.", - "warning": "A biztonsági mentés visszaállítása teljesen lecseréli a jelenlegi adatbázist és újraindítja az alkalmazást. Ez a művelet nem vonható vissza.", - "dropzone": { - "title": "Húzd ide a biztonsági mentés ZIP fájlt, vagy kattints a böngészéshez", - "description": "Csak Homarr SQLite biztonsági mentésből származó .zip fájlok fogadhatók el" - }, - "changeFile": "Fájl módosítása", - "button": "Adatbázis visszaállítása", - "success": { - "title": "Visszaállítás kész", - "message": "Az adatbázis sikeresen visszaállítva. Az alkalmazás újraindul..." - }, - "error": "Az importálás sikertelen" - }, - "preview": { - "title": "Biztonsági mentés tartalma", - "exported": "Exportálva: {date}", - "loading": "Biztonsági mentés fájl elemzése...", - "errorTitle": "Előnézeti hiba", - "entity": "Entitás", - "count": "Darab", - "boards": "Táblák", - "entities": { - "board": "Táblák", - "user": "Felhasználók", - "app": "Alkalmazások", - "integration": "Integrációk", - "item": "Widgetek", - "media": "Média", - "search_engine": "Keresőmotorok" - }, - "analyzeError": "Nem sikerült elemezni a biztonsági mentés fájlt", - "invalidMissingMetadata": "Érvénytelen biztonsági mentés: hiányzó metadata.json", - "invalidMissingDb": "Érvénytelen biztonsági mentés: hiányzó db.sqlite" + "description": "Tölts fel egy korábban exportált biztonsági mentés ZIP-et az adatbázis visszaállításához. Ez a teljes adatbázist lecseréli. Ha a biztonsági mentés más titkosítási kulccsal készült, a titkok automatikusan újratitkosításra kerülnek." }, "restore": { "dropzone": { @@ -5004,29 +6973,20 @@ "analyzing": "Biztonsági mentés elemzése...", "changeFile": "Fájl módosítása", "continueToRestore": "Folytatás a visszaállításhoz", - "tryAgain": "Próbáld újra", "analysisError": "Elemzési hiba", "preview": { "title": "Biztonsági mentés tartalma", "exported": "Exportálva: {date}", "entity": "Entitás", "count": "Darab", - "boards": "Táblák", "entities": { - "board": "Táblák", - "user": "Felhasználók", - "app": "Alkalmazások", - "integration": "Integrációk", - "item": "Widgetek", - "media": "Média", - "search_engine": "Keresőmotorok" + "item": "Widgetek" }, "migrationsApplied": "{count} migráció alkalmazva", "migrationsAppliedPlural": "{count} migráció alkalmazva", "migrationsOlderVersion": "Ez a biztonsági mentés egy régebbi Homarr-verzióból származik. A rendszer {count} sémamigrációt alkalmazott a frissítéséhez.", "migrationsOlderVersionPlural": "Ez a biztonsági mentés egy régebbi Homarr-verzióból származik. A rendszer {count} sémamigrációt alkalmazott a frissítéséhez.", "migrationsUpToDate": "Az adatbázis séma naprakész ({count} migráció alkalmazva)", - "upToDate": "Naprakész", "migrationsPending": "{count} függőben" }, "migration": { @@ -5037,21 +6997,21 @@ "title": "Megsemmisítő művelet", "warningTitle": "Ez véglegesen lecseréli a teljes adatbázist.", "warningBody": "Az összes jelenlegi tábla, felhasználó, alkalmazás, integráció, beállítás és munkamenet elvész. Ez a művelet nem vonható vissza. Az alkalmazás újraindul a visszaállítás után.", - "typePrompt": "Írd be, hogy \"{phrase}\" a folytatáshoz", - "cancel": "Mégse", "submit": "Adatbázis visszaállítása" }, "progress": { "title": "Adatbázis visszaállítása...", - "extracting": "Biztonsági mentés archívum kibontása", - "migrating": "Adatbázis migrációk alkalmazása", - "encrypting": "Integrációs titkok újratitkosítása", - "swapping": "Adatbázis fájl cseréje", - "restarting": "Szerver újraindítása" + "restarting": "Szerver újraindítása", + "relogin": "Az adatbázis visszaállítása érvénytelenítette a jelenlegi munkamenetet. A Homarr a szerver készen állásakor a bejelentkezési oldalra irányítja." }, "complete": { "title": "Visszaállítás kész", - "message": "Az adatbázis sikeresen visszaállítva. A szerver újraindul – kérlek frissítsd az oldalt néhány másodperc múlva." + "message": "Az adatbázis sikeresen visszaállítva. A szerver újraindul – kérlek frissítsd az oldalt néhány másodperc múlva.", + "button": "Bejelentkezés most" + }, + "timeout": { + "title": "A szerver nem állt újra online", + "message": "Az adatbázis visszaállítása befejeződött, de a Homarr nem vált ismét elérhetővé. Próbálja újra a kapcsolati ellenőrzést, vagy frissítse manuálisan ezt az oldalt." }, "failed": { "title": "Visszaállítás sikertelen" @@ -5059,6 +7019,9 @@ "invalidMissingMetadata": "Érvénytelen biztonsági mentés: hiányzó metadata.json", "invalidMissingDb": "Érvénytelen biztonsági mentés: hiányzó db.sqlite", "analyzeError": "Nem sikerült elemezni a biztonsági mentést" + }, + "confirm": { + "typePrompt": "A folytatáshoz írja be ezt: \"{phrase}\"" } } }, @@ -5093,7 +7056,11 @@ "toggleBoardEdit": "Tábla szerkesztő mód be/ki kapcsolása", "toggleColorScheme": "Világos/sötét mód váltása", "saveNotebook": "Jegyzetfüzet mentése (csak a jegyzetfüzet widgetben)", - "openSpotlight": "Keresés megnyitása" + "openSpotlight": "Keresés megnyitása", + "openSpotlightApps": "Alkalmazáskeresés megnyitása", + "openSpotlightAssistant": "Asszisztens mód megnyitása", + "openSpotlightPreferences": "Beállítási mód megnyitása", + "openAssistant": "Asszisztens megnyitása" }, "note": "Tipp: A Mod a Ctrl billentyűt és a macOS-en a ⌘ billentyűt jelenti" } @@ -5103,6 +7070,63 @@ }, "docker": { "title": "Tartály", + "reconciliation": { + "title": "Docker-beállítási asszisztens", + "suggestions": "{count, plural, =0 {Nincs javaslat} one {# javaslat} other {# javaslat}}", + "attention": "{count} figyelmet igényel", + "endpointUnavailable": "Egyes szolgáltatásokat nem sikerült ellenőrizni, mert ezek a végpontok nem érhetők el: {names}", + "empty": "Nem találhatók látható Docker-szolgáltatások.", + "emptyFilter": "Egyetlen szolgáltatás sem felel meg ennek a nézetnek.", + "ambiguous": "Egynél több meglévő elem felelhet meg ennek a szolgáltatásnak. A Homarr nem választ automatikusan.", + "filter": { + "attention": "Figyelmet igényel", + "represented": "Már beállítva", + "all": "Összes" + }, + "state": { + "newRecognized": "Csatlakozásra kész", + "newApp": "Új szolgáltatás", + "represented": "Már képviselve", + "linked": "Összekapcsolva", + "moved": "A cím megváltozott" + }, + "url": { + "manual": "Cím megadása kézzel" + }, + "health": { + "layer": { + "docker": "Docker", + "integrationConfiguration": "Integráció", + "authentication": "Hitelesítés", + "apiRequest": "API", + "appRepresentation": "Alkalmazás", + "widgetConfiguration": "Widget", + "widgetQuery": "Widgetlekérdezés" + }, + "status": { + "available": "Elérhető", + "configured": "Beállítva", + "linked": "Kapcsolva", + "missing": "Hiányzó", + "changed": "Módosítva", + "unused": "Nincs használatban", + "notApplicable": "Nem alkalmazható", + "notObserved": "Nem észlelt" + } + }, + "action": { + "review": "Ellenőrzés", + "dismiss": "Elvetés", + "restoreDismissed": "Elvetettek visszaállítása ({count})", + "setupIntegration": "Integráció beállítása", + "reviewIntegration": "Integráció ellenőrzése", + "viewRepresentation": "Beállítás megtekintése" + }, + "loadError": { + "title": "A Docker-beállítási asszisztens nem tölthető be", + "message": "A Docker-szolgáltatás adatai nem érhetők el. Próbálja újra az oldal elhagyása nélkül." + } + }, "table": { "updated": "Frissítve: {when}", "refresh": { @@ -5115,9 +7139,6 @@ "totalMemory": "Teljes memória: {memory}" }, "field": { - "name": { - "label": "Név" - }, "state": { "label": "Állapot", "option": { @@ -5131,9 +7152,6 @@ } }, "stats": { - "cpu": { - "label": "CPU" - }, "memory": { "label": "Memória" } @@ -5196,8 +7214,11 @@ } }, "remove": { - "label": "Eltávolítás", "confirm": "Kattints újra a végleges eltávolításhoz", + "confirmation": { + "title": "{count, plural, one {Eltávolítja az # konténert?} other {Eltávolítja az # konténert?}}", + "message": "{count, plural, one {Ez véglegesen eltávolítja az # konténert: {names}} other {Ez véglegesen eltávolítja az # konténert: {names}}}" + }, "notification": { "success": { "title": "Konténerek eltávolítva", @@ -5209,8 +7230,13 @@ } } }, + "result": { + "failure": { + "title": "Egyes tárolóműveletek sikertelenek", + "message": "{total, plural, one {{failed} / # művelet sikertelen: {names}} other {{failed} / # művelet sikertelen: {names}}}" + } + }, "refresh": { - "label": "Frissítés", "notification": { "success": { "title": "Konténerek frissítve", @@ -5241,18 +7267,33 @@ }, "error": { "internalServerError": "Nem sikerült lekérni a Docker konténereket", + "endpointUnavailable": "{count, plural, one {# Docker-végpont nem érhető el: {names}} other {# Docker-végpont nem érhető el: {names}}}", "noColumns": "Válassz legalább egy oszlopot a widget beállításaiban" } }, "kubernetes": { + "context": { + "label": "Kubernetes-kontextus", + "loadError": { + "title": "A Kubernetes-kontextusok nem tölthetők be", + "message": "A környezeti információk nem érhetők el. Próbálja újra az oldal elhagyása nélkül." + }, + "status": { + "available": "Elérhető", + "degraded": "A metrikák nem érhetők el", + "unavailable": "Nem érhető el" + }, + "unavailable": "Ez a Kubernetes-környezet nem érhető el. Válasszon másik környezetet, vagy ellenőrizze a hitelesítő adatait és a végpontot.", + "metricsUnavailable": "Ez a környezet elérhető, de a Metrics Server nem érhető el. A leltár élő CPU- és memóriahasználat nélkül is elérhető marad." + }, "cluster": { "title": "Klaszter műszerfal", "label": "Klaszter", "providers": "Szolgáltatók", "version": "Verzió", - "architecture": "Architektúra", "capacity": { "title": "Kapacitás", + "metricsUnavailable": "A Metrics Server nem érhető el. A leltár és a fenntartott kapacitás továbbra is látható, de az élő CPU- és memóriahasználat nem jeleníthető meg.", "resource": { "reserved": "Fenntartva", "used": "Használt" @@ -5271,38 +7312,10 @@ } }, "nodes": { - "label": "Csomópontok", "field": { - "name": { - "label": "Név" - }, - "state": { - "label": "Állapot", - "option": { - "ready": "Kész", - "NotReady": "Nem kész" - } - }, - "cpu": { - "label": "CPU" - }, - "memory": { - "label": "RAM" - }, - "pods": { - "label": "Podok" - }, - "operatingSystem": { - "label": "Operációs rendszer" - }, - "architecture": { - "label": "Architektúra" - }, + "metricsUnavailable": "Nem érhető el", "kubernetesVersion": { "label": "Kubernetes verzió" - }, - "creationTimestamp": { - "label": "Létrehozva" } }, "table": { @@ -5310,43 +7323,17 @@ } }, "namespaces": { - "label": "Névterek", - "field": { - "name": { - "label": "Név" - }, - "state": { - "label": "Állapot", - "option": { - "active": "Aktív", - "terminating": "Megszüntetés alatt" - } - }, - "creationTimestamp": { - "label": "Létrehozva" - } - }, "table": { "search": "{count} névtér keresése" } }, "ingresses": { - "label": "Bejövő forgalmak", "field": { - "name": { - "label": "Név" - }, - "namespace": { - "label": "Névtér" - }, "className": { "label": "Osztálynév" }, "rulesAndPaths": { "label": "Szabályok és útvonalak" - }, - "creationTimestamp": { - "label": "Létrehozva" } }, "table": { @@ -5354,17 +7341,7 @@ } }, "services": { - "label": "Szolgáltatások", "field": { - "name": { - "label": "Név" - }, - "namespace": { - "label": "Névtér" - }, - "type": { - "label": "Típus" - }, "ports": { "label": "Portok" }, @@ -5373,9 +7350,6 @@ }, "clusterIP": { "label": "Klaszter IP" - }, - "creationTimestamp": { - "label": "Létrehozva" } }, "table": { @@ -5383,25 +7357,12 @@ } }, "pods": { - "label": "Podok", "field": { - "name": { - "label": "Név" - }, - "namespace": { - "label": "Névtér" - }, "image": { "label": "Kép" }, "applicationType": { "label": "Alkalmazás típusa" - }, - "status": { - "label": "Állapot" - }, - "creationTimestamp": { - "label": "Létrehozva" } }, "table": { @@ -5409,51 +7370,17 @@ } }, "secrets": { - "label": "Titkok", - "field": { - "name": { - "label": "Név" - }, - "namespace": { - "label": "névtér" - }, - "type": { - "label": "típus" - }, - "creationTimestamp": { - "label": "Létrehozva" - } - }, "table": { "search": "{count} titok keresése" } }, "configmaps": { - "label": "ConfigMap-ek", - "field": { - "name": { - "label": "Név" - }, - "namespace": { - "label": "névtér" - }, - "creationTimestamp": { - "label": "Létrehozva" - } - }, "table": { "search": "Keresés {count} ConfigMap között" } }, "volumes": { - "label": "Kötetek", "field": { - "name": { - "label": "Név" - }, - "namespace": { - "label": "Névtér" - }, "accessModes": { "label": "Elérési módok" }, @@ -5468,12 +7395,6 @@ }, "volumeName": { "label": "Kötet neve" - }, - "status": { - "label": "Állapot" - }, - "creationTimestamp": { - "label": "Létrehozva" } }, "table": { @@ -5482,6 +7403,29 @@ }, "error": { "internalServerError": "A Kubernetes adatok lekérése nem sikerült" + }, + "field": { + "name": { + "label": "Folyamat neve" + }, + "namespace": { + "label": "Névtér" + }, + "creationTimestamp": { + "label": "Létrehozva" + }, + "state": { + "label": "A feladat állapota" + }, + "status": { + "label": "Állapot" + }, + "type": { + "label": "Letöltőkliens típusa" + }, + "architecture": { + "label": "Architektúra" + } } }, "permission": { @@ -5515,71 +7459,27 @@ }, "navigationStructure": { "manage": { - "workshop": { - "label": "Workshop" - }, "label": "Kezelés", - "boards": { - "label": "Táblák" - }, - "integrations": { - "label": "Integrációk", + "custom-widgets": { "edit": { - "label": "Szerkesztés" + "flow": { + "label": "Folyamat" + } }, - "new": { - "label": "Új" - } - }, - "search-engines": { - "label": "Keresőmotorok", - "new": { - "label": "Új" + "workshop": { + "label": "Műhely" }, - "edit": { - "label": "Szerkesztés" - } - }, - "medias": { - "label": "Média" - }, - "apps": { - "label": "Alkalmazások", - "new": { - "label": "Új" - }, - "edit": { - "label": "Szerkesztés" + "publish": { + "label": "Közzététel a Workshopban" } }, "users": { - "label": "Felhasználók", - "create": { - "label": "Létrehozás" - }, "general": "Általános", - "security": "Biztonság", - "board": "Táblák", - "groups": { - "label": "Csoportok" - }, - "invites": { - "label": "Meghívók" - } + "security": "Biztonság" }, "tools": { "label": "Eszközök", - "tasks": { - "label": "Feladatok" - }, - "docker": { - "label": "Docker", - "logs": { - "label": "Naplók" - } - }, "kubernetes": { - "label": "Kubernetes", "nodes": { "label": "Node-ok" }, @@ -5605,11 +7505,7 @@ "label": "Kötetek" } }, - "logs": { - "label": "Naplók" - }, "certificates": { - "label": "Tanúsítványok", "hostnames": { "label": "Gazdagépnevek" } @@ -5620,12 +7516,60 @@ }, "about": { "label": "Névjegy" + }, + "assistant": { + "label": "Asszisztens" } } }, "search": { "placeholder": "Keresés bármire", "nothingFound": "Nincs találat", + "modePicker": { + "search": { + "label": "Keresés", + "placeholder": "Alkalmazások, táblák, oldalak, parancsok és beállítások keresése" + }, + "apps": { + "label": "Alkalmazások", + "placeholder": "Alkalmazások, táblák és integrációk keresése" + }, + "command": { + "label": "Parancsok", + "placeholder": "Műveletek és parancsok keresése" + }, + "preferences": { + "label": "Beállítások", + "placeholder": "Beállítások keresése és módosítása" + }, + "assistant": { + "label": "Asszisztens", + "placeholder": "Kérdezze meg az asszisztenst" + }, + "external": { + "label": "Web", + "placeholder": "Keresés külső keresőmotorral" + }, + "media": { + "label": "Média", + "placeholder": "Film vagy műsor keresése", + "fallback": "Média keresése erre: \"{query}\"" + }, + "userGroup": { + "label": "Személyek", + "placeholder": "Felhasználók és csoportok keresése" + }, + "continueWith": "Folytatás ezzel", + "dialogAriaLabel": "{mode} parancsmenü", + "navigationLabel": "Keresési módok", + "modeAriaLabel": "{mode} mód", + "resultsAriaLabel": "{mode} találatai", + "footer": { + "navigate": "Navigálás", + "open": "Megnyitás", + "close": "Bezárás" + } + }, "error": { "fetch": "Hiba történt az adatok lekérése közben" }, @@ -5634,7 +7578,6 @@ "help": "Keresés alkalmazásokra, integrációkra vagy táblákra", "group": { "app": { - "title": "Alkalmazások", "children": { "action": { "open": { @@ -5650,7 +7593,6 @@ } }, "board": { - "title": "Táblák", "children": { "action": { "open": { @@ -5670,9 +7612,6 @@ "title": "Válassz egy műveletet a táblához" } } - }, - "integration": { - "title": "Integrációk" } } }, @@ -5701,9 +7640,6 @@ "newBoard": { "label": "Új tábla létrehozása" }, - "importBoard": { - "label": "Tábla importálása" - }, "newApp": { "label": "Új alkalmazás létrehozása" }, @@ -5773,7 +7709,6 @@ } }, "defaultSearchEngineId": { - "label": "Alapértelmezett keresőmotor", "children": { "detail": { "title": "Válaszd ki az alapértelmezett keresőmotort" @@ -5781,7 +7716,6 @@ } }, "openSearchInNewTab": { - "label": "Keresési eredmények megnyitása új lapon", "children": { "detail": { "title": "Keresési eredmények megnyitása új lapon" @@ -5789,7 +7723,6 @@ } }, "ddgBangs": { - "label": "DuckDuckGo bang parancsok engedélyezése", "children": { "detail": { "title": "DuckDuckGo bang parancsok engedélyezése" @@ -5804,6 +7737,13 @@ } } }, + "byteUnitSystem": { + "children": { + "detail": { + "title": "Adatméret-egységek kiválasztása" + } + } + }, "homeBoardId": { "label": "Kezdőlap", "children": { @@ -5821,7 +7761,6 @@ } }, "pingIconsEnabled": { - "label": "Ikonok használata a pingekhez", "children": { "detail": { "title": "Ikonok használata a pingekhez" @@ -5829,7 +7768,6 @@ } }, "enableRightClickOnWidgets": { - "label": "A jobb egérgomb használatának engedélyezése a widgeteken", "children": { "detail": { "title": "A jobb egérgomb használatának engedélyezése a widgeteken" @@ -5857,6 +7795,7 @@ "description": "Kezdj el gépelni a médiakérési integrációid kereséséhez", "disabled": { "noIntegration": "Adj hozzá egy Overseerr, Jellyseerr vagy Seerr integrációt a médiakeresés engedélyezéséhez.", + "signInRequired": "Jelentkezzen be a médiakeresési kérések integrációinak használatához.", "scoped": "Ennek a widgetnek nincs elérhető médiakérési integrációja." } } @@ -5873,7 +7812,6 @@ "help": "Külső keresőmotor használata", "group": { "searchEngine": { - "title": "Keresőmotorok", "tipDdgBangs": "Tipp: Itt bármilyen DuckDuckGo bang parancsot is használhatsz, pl. !valami", "bang": { "searchWithQuery": "\"{query}\" keresése {label} segítségével", @@ -5924,20 +7862,6 @@ "group": { "mode": { "title": "Módok" - }, - "help": { - "title": "Segítség", - "option": { - "documentation": { - "label": "Dokumentáció" - }, - "submitIssue": { - "label": "Hiba bejelentése" - }, - "discord": { - "label": "Discord-szerverünk" - } - } } } }, @@ -5949,9 +7873,10 @@ "other": { "label": "Keresés másik keresőmotorral" }, - "no-default": { - "label": "Nincs alapértelmezett keresőmotor", - "description": "Állíts be egy alapértelmezett keresőmotort a beállításokban" + "no-engines": { + "label": "Nincsenek beállítva keresőmotorok", + "descriptionCreate": "Adjon hozzá egy keresőmotort a parancsmenüből való kereséshez", + "descriptionUnavailable": "Kérje meg a rendszergazdát egy keresőmotor beállítására" }, "search": { "label": "Keresés \"{query}\" kifejezésre a {name} segítségével" @@ -6031,7 +7956,6 @@ "help": "Keresés felhasználókra vagy csoportokra", "group": { "user": { - "title": "Felhasználók", "children": { "action": { "detail": { @@ -6044,7 +7968,6 @@ } }, "group": { - "title": "Csoportok", "children": { "action": { "detail": { @@ -6068,9 +7991,6 @@ "engine": { "search": "Keresőmotor keresése", "field": { - "name": { - "label": "Név" - }, "short": { "label": "Rövid" }, @@ -6083,12 +8003,19 @@ }, "page": { "list": { - "title": "Keresőmotorok", + "ariaLabel": "Beállított keresőmotorok", "noResults": { "title": "Még nincsenek keresőmotorok", - "action": "Hozd létre az első keresőmotorodat" + "description": "A keresőmotorok lehetővé teszik, hogy a Spotlight lekérdezést küldjön egy webhelynek vagy csatlakoztatott szolgáltatásnak.", + "action": "Hozd létre az első keresőmotorodat", + "filteredTitle": "Egyetlen keresőmotor sem felel meg a keresésnek", + "filteredDescription": "Egyetlen keresőmotor sem egyezik ezzel: \"{search}\". Próbáljon más nevet vagy URL-t." }, - "interactive": "Interaktív, integrációt használ" + "interactive": "Interaktív, integrációt használ", + "type": { + "generic": "URL-sablon", + "fromIntegration": "Integráció" + } }, "create": { "title": "Új keresőmotor", @@ -6107,11 +8034,9 @@ "title": "Keresőmotor szerkesztése", "notification": { "success": { - "title": "A módosítások sikeresen alkalmazva", "message": "A keresőmotor sikeresen mentve lett" }, "error": { - "title": "Nem sikerült alkalmazni a változtatásokat", "message": "A keresőmotort nem sikerült menteni" } }, @@ -6250,6 +8175,10 @@ } }, "log": { + "context": { + "widgetError": "A widget ekkoriban hibát jelzett", + "expiredWidgetError": "A widget hibája körüli naplók már nem állnak rendelkezésre" + }, "level": { "option": { "debug": "Hibakeresés", @@ -6261,7 +8190,6 @@ }, "onboardingTour": { "learnMore": "Dokumentáció olvasása", - "next": "Következő", "prev": "Vissza", "done": "Kész", "skip": "Túra kihagyása", @@ -6325,5 +8253,359 @@ "description": "Itt válthatsz színsémát, nyelvet, kezdőlapot és preferenciákat. Innen a kezelőfelületre is ugorhatsz." } } + }, + "metadata": { + "description": "Önhosztolt irányítópult az *arr-csomaghoz és az egész otthoni laborhoz. Több mint 50 szolgáltatással, valós idejű widgetekkel és konfigurációs fájlok nélkül.", + "dashboardTitle": "{appName} irányítópult" + }, + "assistant": { + "title": "Asszisztens", + "open": "Asszisztens megnyitása", + "close": "Asszisztens bezárása", + "minimize": "Asszisztens minimalizálása", + "spotlight": "Kérdezze meg az asszisztenst", + "spotlightDescription": "Írjon be és küldjön el egy kérést a parancsmenü elhagyása nélkül.", + "spotlightPrompt": { + "title": "Kérdezze az asszisztenst", + "description": "Írjon be fent egy kérést. Az Enter a háttérben küldi el.", + "send": "Kérés küldése", + "empty": "Írjon be fent egy kérést" + }, + "unavailable": { + "checking": "Az asszisztens elérhetőségének ellenőrzése…", + "error": "Nem sikerült ellenőrizni az asszisztens elérhetőségét. Próbálja újra.", + "notConfigured": "Előbb egy rendszergazdának kell beállítania és engedélyeznie az asszisztenst.", + "signIn": "Jelentkezzen be az asszisztens használatához." + }, + "newConversation": "Új beszélgetés", + "conversations": "Beszélgetések", + "conversationActions": "Beszélgetési műveletek", + "searchConversations": "Beszélgetések keresése", + "noMatchingConversations": "Nincs egyező beszélgetés", + "moreActions": "További válaszműveletek", + "renameConversation": { + "action": "Átnevezés", + "label": "Beszélgetés neve", + "save": "Név mentése", + "failedTitle": "A beszélgetés átnevezése sikertelen", + "failedDescription": "A Homarr nem tudta átnevezni ezt a beszélgetést. Próbálja újra." + }, + "deleteConversation": { + "title": "Törli a beszélgetést?", + "description": "„{title}” és üzenetei véglegesen törlődnek.", + "failedTitle": "A beszélgetés törlése sikertelen", + "failedDescription": "A Homarr nem tudta törölni ezt a beszélgetést. Próbálja újra." + }, + "closeHistory": "Beszélgetési előzmények bezárása", + "openHistory": "Beszélgetési előzmények megnyitása", + "emptyTitle": "Miben segíthetek?", + "emptyDescription": "Kérdezzen a Homarr-beállításáról, vizsgálja meg az éles példány adatait, vagy hagyja jóvá a műveleteket, amikor módosítást szeretne végrehajtatni velem.", + "suggestions": { + "health": { + "label": "Szolgáltatás állapotának ellenőrzése", + "prompt": "Ellenőrizze az integrációimat, és foglalja össze, mi igényel figyelmet." + }, + "explore": { + "label": "Homarr felfedezése", + "prompt": "Mutassa meg, mit tekinthetek meg és kezelhetek ebben a Homarr-példányban." + }, + "media": { + "label": "Kérhető média keresése", + "prompt": "Segítsen megtalálni egy filmet vagy sorozatot, amelyet kérhetek." + }, + "style": { + "label": "Irányítópult javítása", + "prompt": "Segítsen javítani egy tábla megjelenését vagy egyéni CSS-ét. Először mutassa meg a tábláimat, majd őrizze meg a jelenlegi beállításaimat a módosítás során." + }, + "designWidget": { + "label": "Widget tervezése", + "prompt": "Egyéni widget létrehozása és telepítése " + } + }, + "composerPlaceholder": "Kérdezze meg az asszisztenst…", + "runtime": { + "model": "Modell", + "searchModels": "Modellek keresése", + "noModels": "Nincs elérhető modell", + "otherModels": "Egyéb modellek", + "imageInput": "Képbemenetet fogad", + "thinking": "Gondolkodási mód", + "reasoning": { + "auto": "Automatikus", + "none": "Ki", + "minimal": "Minimális", + "low": "Alacsony", + "medium": "Közepes", + "high": "Magas" + } + }, + "providerQuota": { + "title": "Homarr-szolgáltató", + "communityWorkshop": "Közösségi műhely", + "dailyAllowance": "Napi kéréskeret", + "remainingLabel": "{remaining} / {limit} Homarr-szolgáltatói kérés maradt", + "loading": "A Homarr-szolgáltatói keret betöltése", + "signInRequired": "A Homarr-szolgáltató használatához be kell jelentkezni a Workshopba", + "signInDescription": "Jelentkezzen be GitHub-fiókjával a Community Workshopon keresztül, hogy megkapja külön napi keretét.", + "exhaustedDescription": "A Homarr-szolgáltatói kerete mára elfogyott. Éjfélkor (UTC szerint) visszaáll.", + "unavailableDescription": "Jelentkezzen be a Workshopba, vagy várja meg a Homarr-szolgáltatói keret visszaállítását.", + "signIn": "Bejelentkezés GitHubbal", + "signInError": "A GitHub-bejelentkezés sikertelen. Próbálja újra egy kis idő múlva.", + "loadError": "A Homarr-szolgáltatói keretet nem sikerült betölteni.", + "reset": "Visszaállítás {relative} múlva, ekkor: ", + "toolCalls": "Minden modellkérés és befejezett eszközhívás egy kérést használ fel.", + "retry": "Keret újratöltése", + "level": { + "ok": "OK", + "warning": "Figyelmeztetés", + "bad": "Alacsony", + "dead": "Használt" + } + }, + "stop": "Válasz leállítása", + "send": "Üzenet küldése", + "copy": "Válasz másolása", + "copyMessage": "Üzenet másolása", + "editMessage": "Üzenet szerkesztése", + "updateMessage": "Üzenet frissítése", + "regenerate": "Válasz újragenerálása", + "helpful": "Hasznos", + "notHelpful": "Nem hasznos", + "readAloud": "Válasz felolvasása", + "stopReading": "Válasz felolvasásának leállítása", + "feedbackError": "A visszajelzést nem sikerült menteni. Próbálja újra.", + "exportMarkdown": "Exportálás Markdownként", + "exportConversation": { + "action": "Beszélgetés exportálása Markdownként", + "failedTitle": "A beszélgetést nem sikerült exportálni", + "failedDescription": "A Homarr nem tudta betölteni ezt a beszélgetést. Próbálja újra." + }, + "reasoning": "Gondolkodás", + "previousResponse": "Előző válasz", + "nextResponse": "Következő válasz", + "removeAttachment": "Melléklet eltávolítása", + "downloadFile": "{name} letöltése", + "attachedImage": "Csatolt kép", + "externalImageBlocked": "Külső kép letiltva adatvédelmi okokból", + "image": { + "loading": "Kép betöltése", + "failed": "Ezt a képet nem sikerült betölteni.", + "retry": "Kép újrapróbálása" + }, + "quoteSelection": "Idézet", + "dismissQuote": "Idézet eltávolítása", + "attachments": { + "add": "Kép vagy dokumentum csatolása", + "errorTitle": "A mellékletet nem sikerült hozzáadni", + "imageUnsupported": "A kiválasztott modell nem támogatja a képbemenetet." + }, + "mentions": { + "menu": "Homarr-környezet hozzáadása", + "context": "Kontextus", + "app": "Alkalmazások", + "integration": "Integrációk", + "board": "Táblák", + "widget": "Widgetek", + "tools": "Elérhető eszközök" + }, + "markdown": { + "diagram": "Diagram", + "renderingDiagram": "Diagram megjelenítése…", + "diagramUnavailable": "Ezt a diagramot nem sikerült megjeleníteni." + }, + "commands": { + "menu": "Asszisztensparancsok", + "health": "Szolgáltatásállapot-ellenőrzés előkészítése", + "explore": "A Homarr-példány áttekintésének előkészítése", + "media": "Médiakeresés előkészítése", + "style": "Tábla megjelenésének vagy egyéni CSS-módosításának előkészítése", + "designWidget": "Egykéréses egyéni widget összeállításának előkészítése" + }, + "usage": { + "tokens": "tokenek", + "contextWindow": "Kontextusablak", + "requestDetails": "Kérés részletei", + "used": "Legutóbbi lépés", + "remaining": "Hátralévő", + "capacity": "Kapacitás", + "input": "Bemenet", + "output": "Kimenet", + "cached": "Gyorsítótárazott bemenet", + "cacheWrite": "Gyorsítótár írása", + "reasoning": "Következtetés", + "inputShort": "be", + "outputShort": "ki", + "cachedShort": "gyorsítótárazva", + "reasoningShort": "következtetés", + "firstOutput": "Első kimenet", + "homarrTiming": "Homarr által észlelve", + "endToEnd": "Végponttól végpontig", + "observedThroughput": "Észlelt átviteli sebesség", + "providerTiming": "A szolgáltató jelentése szerint", + "loadingProviderDetails": "Generálási részletek betöltése…", + "providerDetailsPending": "Az OpenRouter még feldolgoz néhány generálási részletet. Nyissa meg újra az újrapróbáláshoz.", + "providerLatency": "Szolgáltatói késleltetés", + "generationTime": "Generálási idő", + "moderationLatency": "Moderálás", + "providerThroughput": "Szolgáltatói átviteli sebesség", + "fallbacks": "Tartalékok", + "fallbackLatency": "Tartalék késleltetése", + "cacheDiscount": "Gyorsítótárkedvezmény", + "normalizedTokens": "OpenRouter által normalizált bemenet / kimenet", + "byok": "BYOK", + "cost": "Költség", + "reported": "A szolgáltató jelentése szerint", + "estimated": "Modellár alapján becsülve", + "upstreamCost": "Felsőbb szintű következtetés", + "webSearches": "Webes keresések", + "finishReason": "Befejezés oka", + "notReported": "Nincs jelentve", + "agentSteps": "Ügynöklépések", + "step": "{number}. lépés", + "generation": "Generálás" + }, + "toolInput": "Bemenet", + "toolOutput": "Kimenet", + "toolActivity": { + "iconSearch": "„{query}” ikonok keresése", + "iconBrowse": "Elérhető ikonok böngészése" + }, + "toolNavigation": { + "openPreview": "Előnézet megnyitása", + "openWidget": "Widget megnyitása" + }, + "webSearch": { + "title": "Webes keresés", + "completed": "Az OpenRouter az élő weben keresett ehhez a válaszhoz.", + "searches": "{count, plural, one {# keresés} other {# keresés}}", + "sources": "{count, plural, one {# forrás} other {# forrás}}" + }, + "responseError": { + "title": "Az asszisztens nem tudta befejezni", + "description": "Próbálja újra. Ha a probléma továbbra is fennáll, kérje meg a rendszergazdát a beállított modellvégpont ellenőrzésére." + }, + "toolPreparationError": { + "title": "A kérést nem sikerült előkészíteni", + "description": "A modell leállt, mielőtt teljes részleteket adott volna. Próbálja újra a választ, vagy írja le újra a kérést. Nem történt módosítás." + }, + "busy": { + "title": "Az asszisztens már dolgozik", + "description": "Várja meg a jelenlegi választ, vagy nyissa meg a futtatás leállításához." + }, + "pendingAction": { + "answerTitle": "Válasz szükséges", + "answerFallback": "A folytatáshoz válasszon egy választ", + "formTitle": "Alkalmazás részleteinek ellenőrzése", + "boardFormTitle": "Tábla módosításainak áttekintése", + "review": "Ellenőrzés", + "sendBlocked": "Küldés előtt oldja fel a függőben lévő kérést" + }, + "activity": { + "thinking": "Az asszisztens gondolkodik", + "working": "A kérés feldolgozása folyamatban", + "ready": "A válasz kész", + "completed": "Válasz megnyitása", + "approval": "Jóváhagyás szükséges", + "failed": "Az asszisztens figyelmet igényel", + "expand": "Asszisztens válaszának megnyitása", + "dismiss": "Asszisztens tevékenységének bezárása" + }, + "scrollToLatest": "Ugrás a legújabbhoz", + "refresh": { + "action": "Jelenlegi nézet frissítése", + "working": "Jelenlegi nézet frissítése", + "completeTitle": "A nézet frissítve", + "completeDescription": "A látható Homarr-adatok újratöltve.", + "failedTitle": "A nézetet nem sikerült frissíteni", + "failedDescription": "Lehet, hogy a módosítás még mentés alatt van. Próbálja újra a frissítési műveletet." + }, + "askUser": { + "preparing": "Kérdés előkészítése", + "answered": "Az Ön válasza", + "other": "Egyéb", + "otherLabel": "Az Ön válasza", + "otherPlaceholder": "Írjon be egy másik választ…", + "submit": "Válasz küldése", + "cancelOther": "Másik válasz megszakítása", + "optionKind": { + "affirmative": "Megerősít", + "negative": "Elutasítás", + "alternative": "Lehetőség", + "custom": "Egyéni" + } + }, + "configureApp": { + "title": "Alkalmazás részleteinek ellenőrzése", + "description": "Válasszon egy helyi ikont, és módosítson bármit, mielőtt az asszisztens létrehozási jóváhagyást kér.", + "preparing": "Alkalmazás részleteinek előkészítése", + "continue": "Ezeknek a részleteknek a használata", + "ready": "Az alkalmazás részletei készen állnak", + "automaticContinue": "Ezeknek az alkalmazásadatoknak az automatikus használata" + }, + "configureBoardSettings": { + "title": "Táblamódosítások ellenőrzése", + "loading": "Jelenlegi táblabeállítások betöltése", + "loadErrorTitle": "A táblabeállításokat nem sikerült betölteni", + "loadErrorDescription": "Lehet, hogy a tábla már nem létezik, vagy nincs jogosultsága a módosításához.", + "proposedCount": "Az asszisztens {count} mezőt javasolt", + "changeCount": "{count} módosítás kész", + "ready": "A táblamódosítások készen állnak", + "cancelled": "A jelenlegi táblabeállítások megtartva", + "noChanges": "A beállítások nem változnak", + "keepCurrent": "Jelenlegi beállítások megtartása", + "continue": "Tovább a jóváhagyáshoz", + "automaticContinue": "A javasolt táblamódosítások automatikus elfogadása", + "resetAll": "Minden módosítás visszaállítása", + "tabs": { + "css": "Egyéni CSS", + "appearance": "Megjelenés", + "background": "Háttér", + "general": "Általános" + }, + "cssDescription": "A teljes stíluslap szerkesztése. A meglévő szabályok megmaradnak, hacsak itt el nem távolítja őket.", + "cssCharacters": "{count} / 16384 karakter", + "copyCss": "CSS másolása", + "copied": "Másolva", + "restoreCss": "Jelenlegi CSS visszaállítása", + "remoteCssTitle": "Ez a CSS távoli erőforrást tölt be", + "remoteCssDescription": "Az importált stíluslapok és távoli URL-ek egy másik szerverhez csatlakoznak a tábla betöltésekor. Tekintse át őket a folytatás előtt." + }, + "configureWidget": { + "title": "Widget ellenőrzése", + "preparing": "Widgetbeállítások előkészítése", + "review": "Widget és integrációk áttekintése", + "ready": "A widget beállítása kész", + "cancelled": "A widget nem lett hozzáadva", + "automaticContinue": "A javasolt widgetkonfiguráció automatikus elfogadása", + "definitionLoadErrorTitle": "A widgetbeállításokat nem sikerült betölteni", + "definitionLoadErrorDescription": "A Homarr nem tudta betölteni ennek a widgetnek a beállításait. Próbálja újra.", + "loadErrorTitle": "Az integrációkat nem sikerült betölteni", + "loadErrorDescription": "A Homarr nem tudta betölteni az ehhez a widgethez elérhető integrációkat.", + "noIntegrationTitle": "Kompatibilis integráció szükséges", + "noIntegrationDescription": "A műszerfalhoz való hozzáadás előtt állítson be egy, a widget által támogatott integrációt.", + "connectIntegration": "Szolgáltatás csatlakoztatása", + "manageIntegrations": "Integrációk kezelése", + "skip": "Ne adja hozzá", + "errorTitle": "A widgetbeállításokat nem sikerült előkészíteni", + "errorDescription": "A modell nem adott teljes widgetkonfigurációt. Nem történt widget-hozzáadás." + }, + "approvalRequired": "Jóváhagyás szükséges", + "complete": "Kész", + "denied": "Megtagadva", + "failed": "Sikertelen", + "working": "Folyamatban", + "approvalDescription": "Tekintse át ezt a módosítást a futtatás előtt.", + "approveAndRun": "Jóváhagyás és futtatás", + "deny": "Elutasítás", + "autoApproval": { + "label": "Automatikus jóváhagyások", + "composerLabel": "Jóváhagyás helyettem", + "title": "Automatikus jóváhagyások", + "description": "Űrlapok automatikus előkészítése és védett módosítások jóváhagyása ehhez a beszélgetéshez. A kérdések továbbra is az Ön válaszára várnak, és Homarr-jogosultságai továbbra is érvényesek. Ez kikapcsol, amikor beszélgetést vált.", + "enable": "Engedélyezés ehhez a beszélgetéshez", + "disable": "Automatikus jóváhagyások kikapcsolása", + "enabled": "Az automatikus jóváhagyások be vannak kapcsolva", + "approving": "Automatikus jóváhagyás" + } } } diff --git a/packages/translation/src/lang/it.json b/packages/translation/src/lang/it.json index f4313570f..0eef63bbb 100644 --- a/packages/translation/src/lang/it.json +++ b/packages/translation/src/lang/it.json @@ -1,156 +1,246 @@ { "init": { - "step": { - "start": { - "title": "Ti diamo il benvenuto su Homarr", - "subtitle": "Iniziamo con la creazione della tua istanza di Homarr.", - "description": "Per iniziare, seleziona come vuoi configurare la tua istanza di Homarr.", - "action": { - "scratch": "Inizia da zero", - "importOldmarr": "Importa da Homarr prima della 1.0", - "restoreSqlite": "Ripristina da backup SQLite", - "restoreSqliteDescription": "Carica un backup completo del database SQLite da una precedente istanza di Homarr. Questo ripristinerà tutte le board, gli utenti, le app, le integrazioni e le impostazioni.", - "backToOptions": "← Torna alle opzioni di configurazione" + "studio": { + "navigationLabel": "Sezioni di onboarding", + "back": "Indietro", + "buildBoard": "Costruisci la mia board", + "common": { + "unknownError": "Qualcosa è andato storto. Le tue scelte sono ancora qui; riprova." + }, + "claim": { + "checking": "Protezione di questa sessione di onboarding…", + "checkingTitle": "Preparazione configurazione sicura", + "lockedTitle": "La configurazione è aperta in un altro browser", + "lockedDescription": "Continuare lì, o attendere che la sua sessione di prima esecuzione sicura scada prima di riprovare.", + "signInTitle": "Accesso amministratore richiesto", + "signInDescription": "Esiste già un amministratore. Accedi per riprendere la configurazione senza esporre credenziali o accesso al servizio.", + "signIn": "Accedi e riprendi", + "errorTitle": "L'impostazione non può essere protetta", + "errorDescription": "Ricarica la pagina per riprovare la prima sessione sicura." + }, + "navigation": { + "essentials": "Fondamentali", + "discover": "Scopri", + "connect": "Connetti", + "board": "Board", + "extend": "Estendi", + "review": "Revisione" + }, + "welcome": { + "title": "Benvenuto a casa.", + "description": "Benvenuto in Homarr v{version}. Ti guideremo attraverso gli elementi essenziali e ti aiuteremo a costruire la tua prima scheda.", + "start": "Per iniziare", + "restore": "Ripristina backup", + "restoreTitle": "Ripristina da backup", + "restoreDescription": "Un backup SQLite completo ripristina schede, persone, applicazioni, integrazioni e impostazioni. Homarr lo convalida prima di sostituire qualsiasi cosa.", + "errorTitle": "L'impostazione non può essere avviata", + "errorDescription": "Le tue scelte di configurazione sono ancora qui. Riprova o ricarica la pagina se continua." + }, + "account": { + "title": "Crea il tuo amministratore", + "description": "Specifica le credenziali per l'amministratore.", + "username": "Nome utente amministratore", + "passwordHint": "È richiesto solo il minimo di 8 caratteri. Gli altri controlli di forza password sono suggerimenti.", + "create": "Crea amministratore", + "errorTitle": "L'amministratore non può essere creato", + "recoveryTitle": "Account amministratore creato", + "recoveryDescription": "L'accesso automatico non è stato completato. Accedi con le credenziali di amministratore appena create per continuare la configurazione.", + "recoveryAction": "Accedi e continua", + "unknownError": "L'amministratore non può essere creato." + }, + "externalGroup": { + "title": "Connetti il tuo gruppo amministratore", + "description": "Usa il nome esatto del gruppo inviato da LDAP o OIDC. I membri di questo gruppo ricevono l'accesso all'amministratore.", + "name": "Gruppo amministratore esterno", + "nameDescription": "Questo è sensibile alle maiuscole e deve corrispondere al tuo provider di identità.", + "continue": "Salva gruppo e continua", + "errorTitle": "Il gruppo non può essere salvato", + "unknownError": "Il gruppo amministratore non può essere salvato." + }, + "essentials": { + "title": "Inizia con predefiniti familiari", + "description": "Impostare la lingua e l'aspetto che tutti vedono prima, quindi dare Homarr il modello di indirizzo utilizzato dai vostri servizi.", + "language": "Lingua predefinita", + "theme": "Tema predefinito", + "themeAuto": "Sistema", + "themeLight": "Chiaro", + "themeDark": "Scuro", + "serverOriginHelp": "Homarr utilizza questo indirizzo per precompilare gli URL di servizio rilevati. È comunque possibile modificare ogni servizio individualmente.", + "serverDescription": "Questa è una scorciatoia, non una restrizione. Ogni servizio rilevato rimane modificabile.", + "serverOrigin": "Percorso del dominio, IP o proxy inverso", + "serverOriginDescription": "Esempi: home.lan, 192.168.1.10, o https://home.example.com/services. Scegli come ogni servizio è aggiunto qui sotto.", + "analytics": "Condividi l'analisi anonima dei prodotti", + "analyticsDescription": "Aiuta Homarr a migliorare l'affidabilità delle funzionalità. Non vengono inviate credenziali di servizio o contenuti della dashboard." + }, + "discover": { + "title": "Scopri cosa può effettivamente raggiungere questa installazione", + "description": "Homarr controlla le funzionalità sul posto. Un socket Docker mancante o contesto Kubernetes non blocca mai una configurazione manuale.", + "database": "Database", + "docker": "Docker e socket compatibili", + "kubernetes": "Kubernetes", + "assistantWorkshop": "Assistente e Workshop", + "found": "Trovate integrazioni {integrations} e applicazioni aggiuntive {apps}", + "retryKubernetes": "Controlla di nuovo Kubernetes", + "retryWorkshop": "Controlla nuovamente l'officina", + "unknownVersion": "versione sconosciuta", + "kubernetesAvailable": "Connesso a Kubernetes {version}", + "kubernetesDisabled": "Non abilitato; continuare con Docker o servizi manuali", + "kubernetesUnavailable": "Kubernetes è abilitato ma non può essere raggiunto da questo processo Homarr", + "workshopAvailable": "Workshop della Comunità e servizi assistenti ospitati sono raggiungibili", + "workshopUnavailable": "I provider assistenti locali e personalizzati rimangono disponibili", + "partialTitle": "Alcune sorgenti non possono essere scansionate", + "partialDescription": "I risultati degli host raggiungibili sono mantenuti. Controlla i permessi del socket o aggiungi i servizi manualmente nella prossima sezione.", + "status": { + "checking": "Verifica disponibilità…", + "available": "Disponibile", + "partial": "Parzialmente disponibile", + "empty": "Raggiungibile, nessun servizio in esecuzione corrispondente", + "disabled": "Disabilitato dalla configurazione del server", + "unavailable": "Non disponibile da questo processo Homarr" } }, - "import": { - "title": "Importa dati", - "subtitle": "Puoi importare dati da un'istanza Homarr esistente.", - "dropzone": { - "title": "Trascina il file zip qui o fai clic per sfogliare", - "description": "Lo zip caricato sarà elaborato e sarai in grado di selezionare quello che vuoi importare" + "connect": { + "title": "Collega ciò che rende utile la scheda", + "description": "Seleziona diversi servizi contemporaneamente. Le etichette Docker hanno la priorità, l'immagine corrispondente colma le lacune, e ogni URL e credenziali rimane recensibile.", + "discoveredIntegrations": "Istanze di integrazione rilevate ({count})", + "detectedIntegrationLabel": "Importa {name}, rilevato come {kind}", + "detectedAppLabel": "Importa l'app rilevata {name}", + "otherIntegrations": "Aggiungi un'altra integrazione", + "configureIntegrations": "Configurare le integrazioni", + "discoveredApps": "Applicazioni rilevate ({count})", + "appAddressRequired": "Aggiungi un indirizzo per {name}o rimuovilo dalla selezione.", + "empty": "Nessuna integrazione selezionata. Homarr creerà ancora un utile pannello di partenza con widget generali.", + "dockerSource": "Docker", + "manualSource": "Manuale", + "url": "Url Del Servizio", + "noCredentials": "Nessuna credenziale", + "noCredentialsDescription": "Questa integrazione non ha bisogno di credenziali.", + "credentialMethod": "Metodo di credenziali", + "getApiKey": "Apri le impostazioni della chiave API per questo servizio", + "openGuide": "Apri la guida di installazione di Homar per questo servizio", + "testConnection": "Verifica connessione", + "testSuccess": "Lavori di connessione", + "testSuccessDescription": "Homarr collegato con l'indirizzo e le credenziali correnti.", + "testError": "Connessione fallita", + "testErrorDescription": "Controllare l'indirizzo e le credenziali del servizio, quindi riprovare.", + "needsConfiguration": "Richiede configurazione", + "tested": "Connessione testata", + "testFailed": "Test di connessione fallito", + "incompleteConfirmation": "Le integrazioni non terminate verranno saltate. Continuare senza di loro?" + }, + "board": { + "title": "Forma la scheda prima che sia costruita", + "description": "Homarr crea layout mobili e base protetti, quindi posiziona app e widget compatibili dai servizi selezionati.", + "target": "Scheda da configurare", + "targetDescription": "Scegli l'esatta scheda esistente che questa configurazione dovrebbe aggiornare.", + "targetPlaceholder": "Seleziona una scheda", + "targetRequired": "Selezionare la scheda da configurare prima di continuare.", + "name": "Nome della board", + "nameDescription": "Usato solo nell'URL della scheda; lettere, numeri, trattini e trattini.", + "nameRequired": "Inserisci il nome di una scheda prima di continuare.", + "primaryColor": "Colore primario", + "secondaryColor": "Colore secondario", + "resetColors": "Ripristina colori", + "radius": "Raggio angolo widget", + "radiusOptions": { + "xs": "Stretta", + "sm": "Tenue", + "md": "Bilanciato", + "lg": "Arrotondato", + "xl": "Morbido" }, - "fileInfo": { - "action": { - "change": "Cambia file" - } + "columns": "Colonne scheda", + "columnsDescription": "Le colonne definiscono la griglia orizzontale usata per dimensionare e posizionare gli oggetti. 12 è un sacco per la maggior parte delle persone.", + "columnCount": "{count, plural, one {# colonna} other {# colonne}}", + "leftSidebar": "Left sidebar", + "rightSidebar": "Barra laterale destra", + "previewLabel": "Anteprima live del layout della prima scheda" + }, + "extend": { + "title": "Funzioni avanzate", + "tabsLabel": "Configurazione Assistente, Workshop e MCP", + "assistant": "Assistente", + "workshop": "Workshop", + "assistantSetup": { + "loginTitle": "Accesso amministratore richiesto", + "loginDescription": "Le chiavi del provider e il modello di accesso sono privilegiati. Finisci la configurazione, accedi e Homarr aprirà direttamente la configurazione dell'assistente.", + "loginAction": "Accedi per configurare l'Assistente" }, - "importSettings": { - "title": "Importa impostazioni", - "description": "Configura le azioni d'importazione" + "workshopSetup": { + "title": "Homarr Workshop", + "description": "Sfoglia la community Widget personalizzati, ispeziona le funzionalità richieste, installale e pubblica il tuo lavoro senza copiare il codice tra i server.", + "available": "Disponibile", + "checking": "Controllo…", + "unavailable": "Unavailable", + "discoverTitle": "Scopri", + "discoverDescription": "Trova i widget costruiti per i veri flussi di lavoro self-hosted.", + "installTitle": "Rivedi e installa", + "installDescription": "Vedere metadati e configurazione prima di aggiungere qualsiasi cosa.", + "publishTitle": "Condividi", + "publishDescription": "Pubblica i widget riutilizzabili alla comunità.", + "browse": "Sfoglia Workshop" }, - "boardSelection": { - "title": "Trovate {count} board", - "description": "Scegli tutte le board con la dimensione che vuoi importare", - "action": { - "selectAll": "Seleziona tutto", - "unselectAll": "Deseleziona tutto" - } - }, - "summary": { - "title": "Riepilogo", - "description": "Nel riepilogo sottostante puoi vedere cosa verrà importato", - "action": { - "import": "Conferma importazione e continua" - }, - "entities": { - "apps": "Applicazioni", - "boards": "Board", - "integrations": "Integrazioni", - "credentialUsers": "Credential users" - } - }, - "tokenModal": { - "title": "Inserisci il token d'importazione", - "field": { - "token": { - "label": "Token", - "description": "Inserisci il token d'importazione mostrato dalla tua precedente istanza homarr" - } - }, - "notification": { - "error": { - "title": "Token non valido", - "message": "Token inserito non valido" - } - } + "mcpSetup": { + "title": "Homarr MCP", + "description": "Collega Claude, Codex o un altro client MCP agli strumenti digitati da Homarr. Le chiavi API mantengono l'accesso esplicito e revocabile.", + "endpoint": "Endpoint HTTP Streamable", + "keyTitle": "Copia questa chiave ora", + "keyDescription": "Per sicurezza, Homarr non può mostrare nuovamente questa chiave API.", + "copyKey": "Copia chiave API", + "createKey": "Crea una chiave API MCP", + "errorTitle": "Impossibile creare la chiave API MCP", + "loginRequired": "Accedi come amministratore dopo la configurazione per creare una chiave API.", + "configuration": "Configurazione client", + "copy": "Copia configurazione", + "copied": "Copiato", + "advanced": "Apri strumenti MCP, permessi e dettagli di configurazione" } }, - "user": { - "title": "Amministratore", - "subtitle": "Specifica le credenziali per l'amministratore.", - "notification": { - "success": { - "title": "Utente creato", - "message": "L'utente è stato creato correttamente" - }, - "error": { - "title": "Creazione dell'utente non riuscita" - } - } - }, - "group": { - "title": "Gruppo esterno", - "subtitle": "Specifica il gruppo da utilizzare per gli utenti esterni.", - "form": { - "name": { - "label": "Nome gruppo", - "description": "Il nome deve corrispondere al gruppo admin del provider esterno" - } - } - }, - "settings": { - "title": "Impostazioni", - "subtitle": "Configura le impostazioni del server." - }, - "integrations": { - "title": "Integrazioni", - "subtitle": "Seleziona i servizi che utilizzi.", - "description": "Scegli le integrazioni che desideri connettere. Configureremo automaticamente la tua dashboard con i widget corrispondenti.", - "action": { - "continue": "Continua", - "skip": "Salta per ora" - }, - "configure": { - "progress": "{current} di {total}", - "skip": "Salta questa integrazione", - "finishing": "Configurazione della tua dashboard in corso...", - "error": { - "title": "Configurazione non riuscita", - "message": "Qualcosa è andato storto durante la configurazione della tua dashboard. Riprova." - }, - "helpers": { - "tooltip": "Helper URL", - "description": "Questi helper cercano di indovinare l'URL dei tuoi servizi. Se non funziona, inserisci l'indirizzo manualmente." - } - }, - "urlTemplate": { - "label": "Url di base", - "placeholder": "homelab.local o 192.168.1.1", - "hint": "Inserisci il tuo dominio di base o IP per compilare automaticamente gli URL delle integrazioni", - "warning": "Impostando ora il tuo URL di base verrai aiutato a compilare automaticamente tutti gli URL delle integrazioni, risparmiando tempo durante la configurazione", - "preview": "es. {example}", - "mode": { - "subdomain": "Sottodominio", - "hostPort": "Host:Porta" - } - }, - "docker": { - "detected": "Docker ha rilevato {count} servizi", - "detectedBreakdown": "{integrations} integrazioni · {apps} app", - "summary": "Homarr ha rilevato {apps} app, {integrations} delle quali hanno integrazioni integrate", - "appBadge": "App", - "appSectionLabel": "App da aggiungere alla dashboard ({count} selezionate)", - "scanning": "Scansione Docker...", - "scanningDescription": "Ricerca di container in esecuzione sul sistema in corso" + "review": { + "title": "Una scheda, costruita attorno ai tuoi servizi", + "description": "Homarr verifica connessioni non salvate, importa le app selezionate, applica l'aspetto e i layout, quindi apre la scheda esatta configurata.", + "board": "Prima scheda", + "columns": "Colonne scheda", + "columnsValue": "{count, plural, one {# colonna} other {# colonne}}", + "sidebars": "Barre Laterali", + "sidebarsValue": "{count, plural, =0 {None} one {# sidebar} other {# sidebars}}", + "layouts": "Layout responsive", + "layoutsValue": "Cellulare + Base", + "integrations": "Integrazioni", + "integrationsValue": "{count, plural, =0 {Nessuno ha selezionato} one {# integrazione} other {# integrazioni}}", + "apps": "Tile app", + "appsValue": "{count, plural, =0 {Solo le app di avvio} one {# tile dell'app} other {# tile dell'app}}", + "language": "Lingua", + "theme": "Tema", + "themeAuto": "Preferenze di sistema", + "themeLight": "Chiaro", + "themeDark": "Scuro", + "colors": "Colori della tavola", + "radius": "Raggio del widget", + "automaticTitle": "Cosa creerà Homarr", + "automaticDescription": "Widget compatibili, icone, link app, relazioni di integrazione e posizionamento reattivo provengono dal catalogo Homarr condiviso. È possibile modificare ogni risultato più tardi.", + "dockerWarningTitle": "Alcune etichette Docker sono cambiate durante la configurazione", + "dockerWarningDescription": "{count, plural, one {# il risultato Docker selezionato non può essere applicato perché il suo servizio è cambiato, preso di mira un'altra scheda, o il suo widget è incompatibile} other {# i risultati Docker selezionati non possono essere applicati perché i servizi sono cambiati, mirati a un'altra scheda, o i loro widget erano incompatibili}}.", + "errorTitle": "La scheda non può essere costruita", + "progress": { + "applying": "Testare le connessioni e costruire la tua scheda", + "done": "La tua scheda è pronta" } }, "finish": { - "title": "Termina configurazione", - "subtitle": "È tutto pronto per iniziare!", - "description": "Hai completato con successo la configurazione. Ora puoi iniziare a usare Homarr. Seleziona la prossima azione:", - "action": { - "goToBoard": "Vai alla board: {name}", - "createBoard": "Crea la tua prima board", - "inviteUser": "Invita altri utenti", - "docs": "Leggi la documentazione" - } + "title": "La tua prima scheda è pronta.", + "description": "Homarr ha collegato i pezzi selezionati e mantenuto il resto modificabile. Aprire la scheda ora; il breve tour in-product può mostrare la modalità di modifica, widget, layout e ricerca.", + "openBoard": "Apri la mia scheda", + "manageTitle": "Gestisci", + "manageDescription": "Ottimizzare le applicazioni, integrazioni, schede, utenti e impostazioni del server.", + "workshopTitle": "Workshop", + "workshopDescription": "Scopri e installa la community Widget personalizzati.", + "docsTitle": "Impara Homarr", + "docsDescription": "Leggi le guide mirate per schede, widget, integrazioni e strumenti." } - }, - "backToStart": "Torna all'inizio" + } }, "user": { - "title": "Utenti", "name": "Utente", "page": { "login": { @@ -159,12 +249,10 @@ }, "invite": { "title": "Unisciti ad Homarr", + "titleWithAppName": "Entra In {appName}", "subtitle": "Ti diamo il benvenuto su Homarr! Crea il tuo account", + "subtitleWithAppName": "Benvenuto in {appName}! Crea il tuo account", "description": "Hai ricevuto un invito da {username}" - }, - "init": { - "title": "Nuova installazione di Homarr", - "subtitle": "Crea l'utenza amministrativa iniziale" } }, "field": { @@ -192,12 +280,17 @@ "previousPassword": { "label": "Password precedente" }, - "homeBoard": { - "label": "Home board" - }, "pingIconsEnabled": { "label": "Usa le icone per i ping" }, + "byteUnitSystem": { + "label": "Unità di dimensione dati", + "description": "Scegli come Homarr visualizza le dimensioni dei byte e i tassi di byte. I tassi di bit usano sempre le unità decimali.", + "options": { + "binary": "Binario", + "decimal": "Decimale" + } + }, "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\")." @@ -247,7 +340,6 @@ } } }, - "create": "Crea utente", "changePassword": { "label": "Cambia password", "notification": { @@ -259,56 +351,6 @@ } } }, - "changeHomeBoard": { - "notification": { - "success": { - "message": "Home board modificata con successo" - }, - "error": { - "message": "Impossibile cambiare la home board" - } - } - }, - "changeSearchPreferences": { - "notification": { - "success": { - "message": "Preferenze di ricerca modificate con successo" - }, - "error": { - "message": "Impossibile modificare le preferenze di ricerca" - } - } - }, - "changeFirstDayOfWeek": { - "notification": { - "success": { - "message": "Primo giorno della settimana cambiato" - }, - "error": { - "message": "Impossibile modificare il primo giorno della settimana" - } - } - }, - "changePingIconsEnabled": { - "notification": { - "success": { - "message": "Icone ping modificate con successo" - }, - "error": { - "message": "Impossibile attivare o disattivare le icone di ping" - } - } - }, - "changeDdgBangs": { - "notification": { - "success": { - "message": "DuckDuckGo bangs attivato con successo" - }, - "error": { - "message": "Impossibile attivare i bangs DuckDuckGo" - } - } - }, "manageAvatar": { "changeImage": { "label": "Cambia immagine", @@ -338,16 +380,6 @@ } } }, - "editProfile": { - "notification": { - "success": { - "message": "Profilo aggiornato" - }, - "error": { - "message": "Impossibile aggiornare il profilo" - } - } - }, "delete": { "label": "Elimina utente definitivamente", "description": "Elimina questo utente, comprese le sue preferenze. Non eliminerà nessuna board. L'utente non verrà avvisato.", @@ -356,18 +388,13 @@ "select": { "label": "Seleziona utente", "notFound": "Nessun utente trovato" - }, - "transfer": { - "label": "Seleziona nuovo proprietario" } } }, "group": { - "title": "Gruppi", "name": "Gruppo", "search": "Trova un gruppo", "field": { - "name": "Nome", "members": "Membri", "homeBoard": { "label": "Home board", @@ -388,6 +415,19 @@ } } }, + "custom-widget": { + "title": "Custom widgets", + "item": { + "manage": { + "label": "Gestisci widget personalizzati", + "description": "Consenti ai membri di creare, modificare ed eliminare le definizioni di widget personalizzati" + }, + "secret-write": { + "label": "Configura segreti widget personalizzati", + "description": "Consenti ai membri e alle loro chiavi API di impostare le credenziali del widget personalizzato crittografato" + } + } + }, "app": { "title": "Applicazioni", "item": { @@ -493,6 +533,35 @@ "description": "Consenti ai membri di gestire ed eliminare qualsiasi motore di ricerca" } } + }, + "matrix": { + "none": "Nessun accesso", + "impliedHint": "Contributi anche: {permissions}", + "grantedViaAdmin": "Gli amministratori hanno già questo. Impostare l'amministratore a “Nessun accesso” per configurarlo separatamente.", + "preset": { + "label": "Predefiniti", + "viewer": "Visualizzatore", + "viewerDescription": "Solo lettura: visualizzare schede e media, utilizzare applicazioni e integrazioni che già esistono.", + "editor": "Editor", + "editorDescription": "Gestione giornaliera: creare e modificare schede, applicazioni, integrazioni e motori di ricerca.", + "admin": "Amministratore", + "adminDescription": "Accesso illimitato a tutte le funzionalità e impostazioni, compresa la gestione degli utenti.", + "custom": "Personalizzato" + }, + "effective": { + "title": "Autorizzazioni efficaci", + "description": "I membri di questo gruppo possono eseguire il set di azioni completo, de-duplicato, comprese le autorizzazioni concesse indirettamente.", + "empty": "Nessun permesso selezionato" + }, + "noneDescription": "I membri non hanno accesso a questa zona.", + "level": { + "view": "Vista", + "use": "Usa", + "interact": "Interagisci", + "modify": "Modifica", + "full": "Pieno" + }, + "capabilityIncluded": "Già incluso in “{level}”" } }, "memberNotice": { @@ -607,21 +676,24 @@ "search": "Trova un'app", "page": { "list": { - "title": "Applicazioni", + "ariaLabel": "Applicazioni configurate", "noResults": { "title": "Non ci sono ancora app", - "action": "Crea la tua prima app" + "description": "Le app sono link ai servizi e agli strumenti che vuoi sulle tue schede.", + "action": "Crea la tua prima app", + "filteredTitle": "Nessuna app corrisponde alla tua ricerca", + "filteredDescription": "Nessuna app corrisponde a \"{search}\". Prova un altro nome o URL.", + "createOnlyTitle": "Puoi aggiungere solo app", + "createOnlyDescription": "I tuoi permessi ti permettono di creare app ma non di sfogliare quelle esistenti. Chiedi a un amministratore di accedere alla gestione delle app per vedere l'elenco completo." } }, "create": { "title": "Nuova app", "notification": { "success": { - "title": "Creazione riuscita", "message": "App creata" }, "error": { - "title": "Creazione fallita", "message": "Impossibile creare l'app" } } @@ -630,11 +702,9 @@ "title": "Modifica app", "notification": { "success": { - "title": "Modifiche applicate", "message": "App salvata" }, "error": { - "title": "Impossibile applicare le modifiche", "message": "Impossibile salvare l'app" } } @@ -644,26 +714,18 @@ "message": "Hai la certezza di voler eliminare l'app {name}?", "notification": { "success": { - "title": "Eliminato", "message": "App eliminata" }, "error": { - "title": "Eliminazione non riuscita", "message": "Impossibile eliminare l'app" } } } }, "field": { - "name": { - "label": "Nome" - }, "description": { "label": "Descrizione" }, - "url": { - "label": "Url" - }, "useDifferentUrlForPing": { "checkbox": { "label": "Usa un URL diverso per il ping", @@ -678,58 +740,397 @@ "search": "Cerca un'app", "noResults": "Nessun risultato", "action": "Seleziona {app}", - "title": "Seleziona un'app da aggiungere a questa board" + "title": "Seleziona un'app da aggiungere a questa board", + "toggle": "Clicca per selezionare", + "selected": "Selezionato", + "multiple": "Aggiungi {count}", + "selectedCount": "{count, plural, one {# selezionato} other {# selezionato}}", + "appsSelected": "{count, plural, one {# app selezionata} other {# app selezionate}}", + "selectMultiple": "Seleziona più", + "cancelMultiple": "Esci dalla selezione multipla", + "customApplication": "Applicazione personalizzata", + "application": "Applicazione" }, "create": { "title": "Crea una nuova app", "description": "Crea una nuova app ", "action": "Apri creazione app" - }, - "add": "Aggiungi un'app" + } } }, + "tips": { + "dismiss": "Chiudi suggerimento", + "multiSelectApps": "Mancia: Tieni premuto Ctrl / per selezionare più applicazioni contemporaneamente" + }, "customWidget": { + "secretEntry": { + "title": "Configura sorgente API", + "description": "Conferma l'URL del server e inserisci le credenziali. I valori segreti vengono crittografati da Homarr e non vengono mai restituiti all'agente richiedente.", + "loading": "Caricamento richiesta sicura…", + "applying": "Applicazione di questa configurazione… Mantieni aperta questa pagina.", + "saved": "Sorgente API configurata. Puoi chiudere questa pagina.", + "unavailable": "Richiesta non disponibile", + "saveError": "Impossibile configurare la sorgente API", + "source": "Origine API: {name}", + "baseUrl": "Url Del Server", + "networkScope": "Accesso alla rete", + "save": "Salva configurazione API", + "expires": "Questa richiesta una tantum scade a {time}." + }, "page": { "list": { - "title": "Widget Personalizzati", "noResults": "Ancora nessun widget personalizzato. Crea il primo!", - "loading": "Caricamento..." + "noDescription": "Nessuna descrizione", + "enabled": "Abilitato", + "disabled": "Disabilitato", + "disabledDescription": "Questo widget rimane configurato ma non verrà caricato su nessuna scheda.", + "requestCount": "{count, plural, one {# richiesta} other {# richieste}}", + "invalidDefinition": "Definizione non valida", + "migrationRequired": "Migrazione richiesta", + "migrationInstructions": "Apri Azioni per copiare o esportare la definizione v1 originale per il ricreazione manuale. È inoltre possibile utilizzare il prompt di migrazione con un LLM. I posizionamenti della scheda esistente continuano a lavorare dopo la migrazione.", + "missingCredentials": "{count, plural, one {Credenziali mancanti} other {# credenziali mancanti}}", + "missingCredentialsDescription": "{count, plural, one {Questo widget ha ancora bisogno di una credenziale.} other {Questo widget ha ancora bisogno di # credenziali.}} Seleziona questo badge per configurare l'URL e i valori crittografati." }, "create": { "title": "Crea Widget Personalizzato", "subtitle": "Definisci un URL API, l'autenticazione e come visualizzare i dati di risposta." }, - "edit": { - "title": "Modifica Widget Personalizzato" + "tabs": { + "ariaLabel": "Sezioni widget personalizzate", + "installed": "Installato", + "workshop": "Workshop" } }, "action": { - "create": "Crea", - "import": "Importa", - "save": "Salva", + "pasteImportHint": "Incolla un widget JSON completamente personalizzato con Ctrl+V o Comando +V", "delete": "Elimina Widget Personalizzato", "deleteConfirm": "Sei sicuro di voler eliminare \"{name}\"? Questa azione non può essere annullata.", "export": "Esporta", - "edit": "Modifica", "duplicate": "Duplica", + "aiPrompt": "Design con IA", "copyAiPrompt": "Copia prompt IA", "enable": "Abilita", "disable": "Disabilita", - "menu": "Azioni" + "menu": "Azioni", + "downloadSkill": "Visualizza Abilità Widget Personalizzato", + "publishWorkshop": "Pubblica in Workshop", + "migrate": "Migra Widget Personalizzato", + "configureSources": "Configura sorgenti", + "copyLegacyDefinition": "Copia il contenuto originale del widget", + "exportLegacyDefinition": "Esporta contenuto originale del widget", + "copyMigrationPrompt": "Copia prompt di migrazione LLM", + "pasteMigration": "Incolla widget migrato", + "importMigration": "Importa file JSON migrato" + }, + "sourceSetupDialog": { + "title": "Configura fonti widget", + "description": "Controlla dove questo widget si connette e aggiunge o sostituisce le sue credenziali crittografate.", + "credentialsRequired": "Le richieste falliranno fino all'aggiunta delle credenziali richieste.", + "save": "Salva configurazione" }, "field": { - "name": "Nome", - "description": "Descrizione", - "iconUrl": "URL Icona" + "description": "Descrizione" + }, + "editor": { + "errorBoundary": { + "title": "Qualcosa è andato storto" + }, + "action": { + "components": "Componenti", + "format": "Formato", + "insertStarter": "Insert starter", + "redo": "Ripeti", + "copied": "Copiato", + "schema": "Schema" + }, + "reference": { + "minimal": "Esempio minimo", + "full": "Esempio completo" + }, + "componentReference": { + "search": "Cerca componenti", + "empty": "Nessun componente corrispondente", + "count": "{count, number} componenti disponibili" + }, + "status": { + "errors": "{count, number} errori", + "warnings": "{count, number} avvisi", + "ready": "Nessun problema trovato", + "position": "Ln {line, number}, Col {column, number}", + "characters": "{count, number} caratteri", + "charactersWithLimit": "{count, number} / {limit, number}" + }, + "diagnostics": { + "title": "Diagnostica dei modelli", + "line": "Riga {line, number}", + "ast": "{value}", + "bindingTypeConflict": "L'input \"{value}\" è condiviso dai controlli con tipi di valori incompatibili.", + "runtimeBindingTypeConflict": "L'input \"{value}\" è legato sia come {firstType} che come {secondType}.", + "dynamicRequestId": "È richiesto un requestId letterale. Gli ID della richiesta dinamica non sono accettati.", + "dynamicInputBinding": "Un nome di input letterale è richiesto per il bind.", + "inlineRequestProps": "I componenti di rete accettano requestId e param; URL in linea, metodo, intestazione e body props sono bloccati.", + "invalidRequestManifest": "Le richieste con nome devono essere una mappa di richiesta valida. {value}", + "missingRequestId": "Questo componente di rete richiede un requestId letterale.", + "templateEmpty": "Inserisci un modello JSX.", + "templateTooLong": "Il modello supera il limite di 50.000 caratteri.", + "unknownRequest": "Nessuna richiesta con nome con ID \"{value}\" esiste." + } + }, + "workbench": { + "configure": "Configura", + "sectionNavigation": "Sezioni widget personalizzate", + "widgetPreview": "Anteprima widget", + "generalInformation": "Informazioni generali", + "invalidWidget": "Widget non valido", + "section": { + "general": "Generale", + "sources": "Fonti API", + "requests": "Richieste", + "options": "Opzioni", + "jsx": "JSX", + "preview": "Anteprima" + }, + "status": { + "unsaved": "Modifiche non salvate", + "invalid": "Richiede attenzione", + "ready": "Pronto" + }, + "saveError": { + "title": "Il widget non è stato salvato", + "description": "Correggi questi errori di convalida e salva di nuovo.", + "more": "+{count} altri errori sono mostrati nel banco di lavoro.", + "errors": "Errori di convalida", + "copy": "Copia errori", + "copied": "Errori copiati" + }, + "action": { + "preview": "Prova e anteprima", + "previewLoading": "Richieste di prova" + }, + "requests": { + "title": "Interrogazioni e azioni con nome", + "label": "Richieste", + "description": "Le query caricano dati; le azioni vengono eseguite solo dopo l'interazione dell'utente. Qualsiasi metodo HTTP è valido per entrambi i tipi." + }, + "options": { + "title": "Opzioni widget" + }, + "builder": { + "advancedManifest": "Manifesto grezzo avanzato", + "advancedJson": "Manifesto avanzato JSON", + "manifestFilename": "widget.json", + "request": "Richiesta {count, number}", + "requestId": "Richiedi Id", + "type": "Scarica tipo client", + "method": "Metodo", + "source": "Sorgente API", + "run": "Esegui", + "runLoad": "Quando il widget viene caricato", + "runManual": "Da Subfetch", + "permission": "Permessi", + "path": "Percorso", + "pathDescription": "Usa '{option:name}' per le opzioni del widget e '{param:name}' per i valori di invocazione.", + "requestDetails": "Interrogazione, corpo e comportamento", + "queryValues": "Valori query", + "queryKey": "Chiave di interrogazione", + "queryKeyInvalid": "Usare un ID univoco che inizia con una lettera e contiene solo lettere, numeri, - o _.", + "valueSource": "Sorgente del valore", + "literal": "Letterale", + "widgetOption": "Opzione widget", + "invocationParameter": "Parametro di invenzione", + "option": "Opzione", + "parameterName": "Nome del parametro", + "value": "Valore", + "removeQueryValue": "Rimuovi valore query", + "addQueryValue": "Aggiungi valore query", + "jsonBody": "Corpo JSON", + "jsonBodyDescription": "Facoltativo. Inserisci riferimenti a $option e $param a qualsiasi livello di annidamento.", + "insertOptionReference": "Inserire il riferimento all'opzione", + "insertParameterReference": "Inserisci riferimento al parametro", + "confirmation": "Messaggio di conferma", + "invalidation": "Aggiorna dopo il successo", + "invalidationDescription": "Id query separate da virgole", + "noAuth": "Invia senza autenticazione sorgente", + "moveRequestUp": "Sposta la richiesta su", + "moveRequestDown": "Sposta la richiesta giù", + "removeRequest": "Rimuovi richiesta", + "addRequest": "Aggiungi richiesta", + "optionName": "Nome opzione", + "label": "Etichetta", + "control": "Controllo", + "description": "Descrizione", + "default": "Predefinito", + "optionDetails": "Vincoli e scelte dinamiche", + "minimum": "Minimo", + "maximum": "Massimo", + "step": "Passo", + "choiceLabel": "Etichetta scelta", + "choiceValue": "Valore di scelta", + "newChoice": "Nuova scelta", + "addChoice": "Aggiungi scelta", + "removeChoice": "Rimuovi scelta", + "choicesRequest": "Carica le scelte dalla richiesta", + "itemsPath": "Percorso elementi", + "itemsPathPlaceholder": "elementi (facoltativo)", + "valuePath": "Percorso valore", + "labelPath": "Percorso dell'etichetta", + "group": "Gruppo", + "advancedOption": "Opzione avanzata", + "moveOptionUp": "Sposta l'opzione in alto", + "moveOptionDown": "Sposta opzione in basso", + "removeOption": "Rimuovi opzione", + "addOption": "Aggiungi opzione", + "invalidJson": "JSON non valido", + "invalidWidget": "Widget non valido" + }, + "jsx": { + "title": "Modello JSX", + "label": "Modello" + }, + "sources": { + "title": "Fonti e credenziali API", + "newName": "API {count, number}", + "duplicateSourceId": "Gli ID sorgente API devono essere unici.", + "credentialRemoved": "Credenziale rimosso", + "credentialRemovedDescription": "Il valore memorizzato è stato eliminato.", + "primary": "API Primaria", + "id": "Id Sorgente", + "name": "Nome del job", + "baseUrl": "Url di base", + "baseUrlError": { + "invalid": "Inserisci un URL completo.", + "protocol": "Usa un URL HTTP o HTTPS.", + "credentials": "Rimuovi il nome utente e la password da questo URL. Configura le credenziali qui sotto.", + "queryOrFragment": "Rimuove la stringa di query o il frammento da questo URL di base. Aggiungi valori di query a una richiesta con nome." + }, + "networkScope": "Accesso alla rete", + "authentication": "Autenticazione", + "headerName": "Nome intestazione", + "queryParameter": "Parametro dell'interrogazione", + "configured": "Configurato — Inserire una sostituzione", + "clear": "Sereno", + "remove": "Rimuovi sorgente e le sue richieste", + "advanced": "Avanzate", + "add": "Aggiungi un'altra sorgente API", + "sourceType": "Integrazione", + "manualSource": "HTTP API", + "existingIntegration": "Integrazione esistente", + "integrationType": "Tipo di integrazione", + "selectIntegration": "Integrazione configurata", + "noIntegrations": "Nessuna integrazione corrispondente disponibile", + "integrationUnavailable": "L'integrazione selezionata non è più disponibile. Seleziona un'altra integrazione.", + "integrationDescription": "Utilizza l'URL di integrazione salvato e le credenziali. Le modifiche si applicano automaticamente. È necessario l'accesso completo all'integrazione per eseguire le richieste." + }, + "ai": { + "title": "Crea o correggi con qualsiasi IA", + "description": "Aggiungi prima un URL di API docs se ne hai uno. Per le correzioni, esegui l'Anteprima se possibile. Copia il prompt in qualsiasi AI; può chiedere i dettagli mancanti. Incolla il suo JSON finale qui.", + "request": "Cosa dovrebbe fare questo widget?", + "documentationUrl": "URL documentazione API (opzionale)", + "paste": "Incolla", + "response": "Risposta AI", + "manualCopyDescription": "Accesso agli appunti non disponibile. Selezionare il prompt qui sotto e copiarlo manualmente.", + "manualPasteDescription": "L'accesso agli appunti non è disponibile o la risposta copiata necessita di correzione. Incolla la risposta JSON dell'IA qui.", + "selectAll": "Seleziona tutto", + "loadResponse": "Risposta di carico", + "loaded": "Widget caricato nell'editor", + "invalidResponse": "Gli appunti non contengono un widget v2 valido", + "invalidResponseDetail": "La risposta AI non è valida: {message}" + }, + "preview": { + "invalid": "Correggi gli errori di convalida per visualizzare in anteprima questo widget.", + "fixtureError": "Errore di anteprima fixture", + "requestData": "Richiedi dati", + "status": { + "idle": "Le richieste non sono state testate", + "loading": "Richieste di prova", + "success": "Tutte le richieste di caricamento sono riuscite", + "error": "Una o più richieste di caricamento fallite" + }, + "result": { + "loading": { + "title": "Testare le richieste API", + "description": "Homarr sta creando una sessione di anteprima e caricando i dati del widget." + }, + "success": { + "title": "Anteprima pronta", + "description": "{succeeded, plural, =0 {Questo widget non ha richieste di caricamento.} one {# richiesta di caricamento è riuscita.} other {# richieste di caricamento sono riuscite.}} Apri dati per ispezionare la risposta." + }, + "error": { + "title": "Anteprima completata con errori di richiesta", + "description": "{succeeded, number} successo e {failed, number} fallito. Apri i dati per la risposta e i dettagli dell'errore." + } + }, + "instanceOptions": "Opzioni istanza", + "liveActions": "Esegui azioni contro le API configurate", + "liveActionsDescription": "Disattivata è una simulazione sicura. Attivare questo effetto influisce sul servizio reale.", + "noActions": "Nessuna azione è definita.", + "containedFailures": "I fallimenti di esecuzione sono contenuti all'interno di questo widget. Richiedi riviste non includono mai valori segreti.", + "validation": { + "title": "Convalida", + "ready": "La definizione del widget è valida." + }, + "accessibility": { + "title": "Controlli di accessibilità", + "ready": "Nessuna omissione comune di accessibilità rilevata.", + "pending": "I controlli di accessibilità verranno eseguiti quando la definizione del widget è valida.", + "imageAlt": "Aggiungi testo alt ad ogni immagine, usando un alt vuoto solo per le immagini decorative.", + "actionIconLabel": "Aggiungi un'etichetta o un titolo ad ogni ActionIcon.", + "inputLabel": "Aggiungi un'etichetta visibile o un nome accessibile ad ogni input." + }, + "journal": "Diario di richiesta modificato", + "actionParameters": "Parametri di azione (JSON)", + "invalidParameters": "Utilizzare i tipi di parametri booleani e di stringa, numero e booleano.", + "runDestructive": "Esegui azione distruttiva", + "runAction": "Esegui azione", + "deleteConfirmation": "Questa azione di anteprima cambia i dati remoti attraverso l'API configurata.", + "simulated": "Azione simulata", + "httpStatus": "HTTP {status, number}", + "tab": { + "widget": "Widget", + "data": "Dati", + "options": "Opzioni", + "state": "Stato job", + "actions": "Controlli", + "diagnostics": "Diagnostica" + }, + "size": { + "compact": "Compatto", + "standard": "Standard", + "wide": "Ampia" + }, + "fixture": { + "live": "Live", + "loading": "Caricamento", + "empty": "Vuoto", + "error": "Errore" + } + } + }, + "preview": { + "request": { + "permission": { + "view": "Vista", + "modify": "Modifica", + "full": "Pieno" + } + } }, "notification": { "created": "Widget \"{name}\" creato con successo.", "updated": "Widget \"{name}\" aggiornato con successo.", "deleted": "Widget \"{name}\" eliminato.", "imported": "Widget importato con successo.", - "aiPromptCopied": "Prompt IA copiato negli appunti", + "migrated": "Il widget legacy è migrato con successo. I posizionamenti della scheda esistenti ora usano la definizione v2.", + "migrationError": "Migrazione del widget eredità non riuscita. Assicurati che il file utilizzi lo schema homarr-custom-widget-v2.", + "legacyDefinitionCopied": "Il contenuto originale del widget è stato copiato. I valori delle credenziali memorizzati non sono inclusi.", + "legacyDefinitionCopyError": "Impossibile copiare il contenuto originale del widget.", + "migrationPromptCopied": "È stato copiato un prompt di migrazione redatto. Incollalo in un LLM, copia la sua singola risposta JSON, quindi scegli Incolla il widget migrato qui.", + "migrationPromptCopyError": "Impossibile copiare il prompt di migrazione.", + "sourcesConfigured": "Sorgenti del widget e credenziali salvate.", + "sourceConfigurationError": "Configurazione delle fonti del widget non riuscita.", + "aiPromptCopiedWithCount": "prompt AI copiato negli appunti ({count, number} caratteri).", "aiPromptCopyError": "Impossibile copiare il prompt negli appunti. Il tuo browser potrebbe non supportare questa funzione.", - "createError": "Impossibile creare il widget. Verifica che l'endpoint dell'API sia raggiungibile.", + "aiPromptSent": "Avverte l'invio. È possibile continuare a modificare mentre l'assistente funziona in background.", "updateError": "Impossibile aggiornare il widget. Le modifiche non sono state salvate.", "importError": "Impossibile importare il widget. Assicurati che il file sia un'esportazione JSON valida di un widget personalizzato.", "exportError": "Impossibile esportare il widget.", @@ -737,29 +1138,184 @@ "duplicateError": "Impossibile duplicare il widget.", "toggleError": "Impossibile cambiare lo stato del widget.", "deleteError": "Impossibile eliminare il widget.", - "previewError": "Impossibile recuperare l'anteprima. Controlla l'URL e riprova.", - "executed": "Azione eseguita con successo.", - "executeError": "Azione non riuscita: {error}" + "previewError": "Impossibile recuperare l'anteprima. Controlla l'URL e riprova." + }, + "importReview": { + "title": "Revisione importazione widget personalizzato", + "description": "Controlla dove questo widget si connette e quale scheda di accesso richiede i suoi controlli prima di importarlo.", + "migrationTitle": "Revisione sostituzione v2 migrata", + "migrationDescription": "Rivedi e conferma questa definizione v2 generata. Confermare atomicamente sostituisce il record v1 conservato mantenendo i posizionamenti della scheda esistenti collegati allo stesso ID del widget.", + "fileLabel": "Scegli un file JSON del widget personalizzato", + "name": "Nome del job", + "origin": "Origine di base", + "authentication": "Autenticazione", + "networkScope": "Ambito di rete", + "methods": "Metodi HTTP", + "permissions": "Autorizzazioni di bordo richieste", + "sourceSetup": { + "title": "Configura sorgenti API", + "description": "Conferma dove questo widget si connette e aggiungi credenziali. Gli URL privati e di loopback sono specifici per la tua installazione di Homarr.", + "suggestedUrl": "Url Suggerito", + "confirmUrl": "Confermo che questo URL del server è corretto per la mia installazione di Homarr", + "ready": "URL pronto", + "needsUrl": "Conferma URL", + "credentialsMissing": "Credenziali mancanti", + "credentialsOptional": "È possibile installare senza credenziali e configurarle più tardi, ma le richieste falliranno fino a quando non saranno aggiunte." + }, + "actionWarning": { + "title": "Questo widget può cambiare i dati remoti", + "description": "Controlla ogni azione nominata, le credenziali ereditate e la conferma distruttiva dopo l'importazione. I segreti non sono inclusi nel file." + }, + "cancel": "Annulla importazione", + "confirm": "Importa widget", + "confirmMigration": "Conferma sostituzione v2" + }, + "secret": { + "apiKey": "Chiave API o token", + "username": "Nome utente", + "password": "Password", + "savedPlaceholder": "••••••• (salvato, lascia vuoto per mantenere)" + } + }, + "workshop": { + "title": "Workshop", + "browseWorkshop": "Sfoglia Workshop", + "openCommunity": "Apri Workshop", + "openOnWorkshop": "Apri {title} sul sito web del Workshop", + "back": "Torna al Workshop", + "search": "Widget di ricerca", + "searchCss": "Cerca temi CSS", + "sort": "Ordina", + "sortTop": "Top rated", + "sortNewest": "Più Recenti", + "listAriaLabel": "Widget officina", + "listAriaLabelCss": "Workshop temi CSS", + "empty": "Nessun widget corrisponde a questa ricerca.", + "emptyDescription": "I widget della comunità pubblicati nel Workshop appaiono qui.", + "emptyFilteredTitle": "Nessun widget corrisponde a questa ricerca", + "emptyFilteredDescription": "Nessun widget Workshop corrisponde a \"{search}\".", + "emptyCss": "Nessun tema CSS corrisponde a questa ricerca.", + "unavailableTitle": "Homarr Workshop sembra non essere disponibile", + "unavailable": "Il servizio della community potrebbe essere temporaneamente inattivo. Riprova tra un attimo. I widget installati non sono influenzati.", + "loadError": "Questa richiesta non può essere caricata.", + "noDescription": "Nessuna descrizione", + "author": "di {name}", + "communityMember": "Membro della Comunità", + "outdated": "Andato", + "outdatedWarning": "L'autore ha contrassegnato questo invio come obsoleto. Rivedere attentamente prima di importare.", + "score": "Punteggio: {count, number}", + "upvote": "Upvote", + "downvote": "Downvote", + "voteError": "La votazione non può essere salvata.", + "signIn": "Accedi con GitHub", + "signInError": "Accesso a GitHub non riuscito. Verificare che il provider OAuth di Workshop sia configurato e che i popup siano consentiti.", + "signOut": "Esci", + "signInHint": "Accedi per votare o segnalare. L'installazione non richiede un account Workshop.", + "securityNotice": "I widget Workshop possono chiamare le loro sorgenti API dichiarate ed eseguire azioni dichiarate con credenziali configurate localmente. I segreti non sono mai inclusi.", + "securityNoticeCss": "Il CSS della comunità può cambiare l'aspetto e l'usabilità di una scheda. Revisiona prima dell'importazione; nulla viene salvato fino a quando non si salvano le impostazioni della scheda.", + "install": "Installa", + "installReviewTitle": "Revisione prima dell'installazione", + "installError": "Questo widget non può essere installato", + "installErrorDescription": "L'invio dell'officina non è un widget JSX v2 personalizzato valido.", + "useCss": "Import CSS", + "importCss": "Importa CSS da Workshop", + "importCssConfirm": "Sostituire l'attuale CSS personalizzato con \"{title}\"? Niente viene salvato finché non si salvano le impostazioni della scheda.", + "screenshotAlt": "{title} screenshot {count, number}", + "screenshotViewer": "Visualizzatore di screenshot di {title}", + "screenshotsLabel": "Screenshot di {title}", + "zoomScreenshot": "Visualizza dimensione completa", + "previousScreenshot": "Schermata precedente", + "nextScreenshot": "Prossima schermata", + "showScreenshotThumbnails": "Mostra miniature screenshot", + "hideScreenshotThumbnails": "Nascondi miniature screenshot", + "closeScreenshotViewer": "Chiudi visualizzatore screenshot", + "technicalDetails": "Dettagli tecnici", + "sourceCode": "Ingresso officina", + "export": "Esporta", + "report": "Segnala", + "reportTitle": "Invia report", + "reportReason": "Motivo", + "reportExplanation": "Cosa dovrebbero sapere i moderatori del Workshop?", + "reportSend": "Invia report", + "reportSent": "Report inviato", + "reportSentDescription": "I moderatori del workshop possono ora rivedere questo invio.", + "reportCount": "{count, plural, one {# report} other {# reports}}", + "reportWarning": "{count, plural, one {Questo invio ha # report della comunità aperta} other {Questo invio ha # report della comunità aperta.}} Rimane installabile, ma dovresti prima rivedere il suo contenuto.", + "reportVisibility": "I dettagli del report sono visibili solo agli amministratori dell'autore e del Workshop di questa missione.", + "reportCategory": { + "outdated": "Andato o non più funzionante", + "malicious": "Maligno", + "spam": "Spam", + "copyright": "Copyright", + "inappropriate": "Inappropriato", + "other": "Altro" + }, + "publish": { + "title": "Pubblica in Workshop", + "introTitle": "Condividi questo widget con la comunità", + "introDescription": "Homarr esporta una copia priva di credenziali del widget corrente. Aggiungi dettagli di elenco chiaro in modo che le persone sappiano cosa fa prima di installarlo.", + "listingDetails": "Elenco workshop", + "listingDetailsDescription": "Questi dettagli appaiono pubblicamente accanto alla definizione del widget esportato.", + "success": "Pubblicato immediatamente. I membri della Comunità possono ora installare e segnalare questo widget.", + "successTitle": "Il tuo widget è in diretta", + "manageDescription": "Aprire la sottomissione per aggiornare il suo elenco, i rapporti di revisione, contrassegnarlo o eliminarlo. La gestione della sottomissione viene gestita direttamente sul sito Web di Workshop.", + "viewSubmission": "Visualizza e gestisci l'invio", + "done": "Fatto", + "signInHint": "Accedi per pubblicare sotto la tua identità Workshop.", + "titleField": "Titolo", + "descriptionField": "Descrizione", + "screenshots": "Screenshot", + "screenshotsDescription": "Fino a cinque immagini PNG, JPEG o WebP", + "screenshotsPlaceholder": "Scegli screenshot", + "invalidScreenshot": "Utilizzare immagini PNG, JPEG o WebP non più grandi di {maxSize} ciascuna.", + "privateSourceWarning": "Questo widget contiene URL di origine privata per: {sources}. Sostituire host personali o indirizzi IP con segnaposto di servizio sicuro prima della pubblicazione.", + "reviewSourcesTitle": "Revisione URL sorgente privata", + "privateSourceConfirmation": "Ho esaminato questi URL di origine e non espongono i dettagli dell'infrastruttura privata", + "action": "Pubblica ora", + "publicationNote": "La pubblicazione è immediata. È possibile gestire l'invio in seguito al Workshop.", + "definitionChanged": "Il widget è cambiato mentre la pubblicazione è in fase di preparazione. Rivedere nuovamente gli URL di origine privata, quindi riprovare.", + "error": "Pubblicazione fallita" } }, "integration": { + "completion": { + "modalTitle": "Servizio pronto", + "title": "{name} è connesso", + "description": "La connessione ha superato il test. Scegli cosa mostrare su questa scheda successiva.", + "connectionReady": "La connessione al servizio è pronta", + "appReady": "Il collegamento all'app è pronto", + "compatibleWidgets": "{count, plural, =0 {Nessun widget compatibile} one {# widget compatibile} other {# widget compatibili}} disponibile", + "chooseWidget": "Scegli widget", + "recipes": { + "title": "Consigliato per questa scheda", + "description": "Basato su servizi e widget connessi già in questa scheda.", + "newConnectionReason": "Ora disponibile attraverso {integration}", + "existingConnectionReason": "Funziona con un servizio già connesso", + "dismiss": "Ignora le raccomandazioni per questo servizio in questo consiglio" + } + }, "page": { "list": { - "title": "Integrazioni", + "ariaLabel": "Integrazioni configurate", "search": "Cerca integrazioni", + "scopedNote": "Mostrando solo le integrazioni che puoi gestire.", "noResults": { - "title": "Non ci sono ancora integrazioni" + "title": "Non ci sono ancora integrazioni", + "description": "Collega un servizio per utilizzare i suoi dati e le sue azioni nei widget Homarr.", + "action": "Crea la tua prima integrazione", + "filteredTitle": "Nessuna integrazione corrisponde alla tua ricerca", + "filteredDescription": "Nessuna integrazione corrisponde a \"{search}\". Prova un altro nome, tipo o URL.", + "createOnlyTitle": "È possibile aggiungere solo integrazioni", + "createOnlyDescription": "I tuoi permessi ti permettono di creare integrazioni ma non di gestire quelle esistenti. Chiedi a un amministratore di accedere a quelle di cui hai bisogno." } }, "create": { "title": "Nuova integrazione di {name}", "notification": { "success": { - "title": "Creazione riuscita", "message": "L'integrazione è stata creata con successo" }, "error": { - "title": "Creazione fallita", "message": "Non è stato possibile creare l'integrazione" } }, @@ -783,11 +1339,9 @@ "title": "Modifica integrazione {name}", "notification": { "success": { - "title": "Modifiche applicate", "message": "L'integrazione è stata salvata correttamente" }, "error": { - "title": "Impossibile applicare le modifiche", "message": "Non è stato possibile salvare l'integrazione" } }, @@ -804,23 +1358,15 @@ "message": "Hai la certezza di voler eliminare l'integrazione {name}?", "notification": { "success": { - "title": "Eliminato", "message": "L'integrazione è stata eliminata correttamente" }, "error": { - "title": "Eliminazione non riuscita", "message": "Impossibile eliminare l'integrazione" } } } }, "field": { - "name": { - "label": "Nome" - }, - "url": { - "label": "Url" - }, "attemptSearchEngineCreation": { "label": "Crea Motore Di Ricerca", "description": "Integrazione \"{kind}\" può essere utilizzato con i motori di ricerca. Selezionare questa opzione per configurare automaticamente il motore di ricerca." @@ -832,6 +1378,10 @@ "label": "Crea app", "description": "Crea un'app con lo stesso nome ed icona dell'integrazione. Lasciare vuoto il campo di input qui sotto per creare l'applicazione con l'URL di integrazione." }, + "linkApp": { + "label": "Collega un'app esistente", + "description": "Collega questa integrazione ad un'app che puoi già utilizzare." + }, "appHref": { "placeholder": "URL app personalizzata" }, @@ -845,7 +1395,11 @@ "grid": { "widgetCount": "{count} widgets", "noWidgets": "Nessun widget", - "detected": "Rilevato tramite Docker" + "detected": "Rilevato tramite Docker", + "connected": "{count, plural, one {# connesso} other {# connesso}}", + "tiedWidgets": "Widget collegati", + "more": "+{count} in più", + "loadError": "Le integrazioni non possono essere caricate. Riprova prima di creare una nuova connessione." }, "category": { "dnsHole": "DNS", @@ -876,7 +1430,10 @@ "analytics": "Analytics", "vpn": "VPN", "mediaLibrary": "Media Library", - "uptimeMonitoring": "Uptime Monitoring" + "uptimeMonitoring": "Uptime Monitoring", + "beszel": "Beszel", + "systemMonitoring": "Monitoraggio Del Sistema", + "security": "Sicurezza" }, "testConnection": { "action": { @@ -1161,6 +1718,22 @@ "slug": { "label": "Status page slug", "newLabel": "New status page slug" + }, + "wazuhIndexerUrl": { + "label": "Url Indicizzatore", + "newLabel": "Nuovo URL indicizzatore" + }, + "wazuhIndexerUsername": { + "label": "Nome utente indicizzatore", + "newLabel": "Nuovo nome utente indicizzatore" + }, + "wazuhIndexerPassword": { + "label": "Password indicizzatore", + "newLabel": "Nuova password indicizzatore" + }, + "wazuhDashboardUrl": { + "label": "Url Dashboard (opzionale)", + "newLabel": "Nuovo URL dashboard" } } }, @@ -1169,54 +1742,19 @@ "interact": "Interagire con le integrazioni", "full": "Accesso completo integrativo" }, - "audiobookshelf": { - "name": "Audiobookshelf", - "description": "Server self-hosted per audiolibri e podcast" - }, - "navidrome": { - "name": "Navidrome", - "description": "Server self-hosted di streaming musicale con compatibilità API Subsonic" - }, - "uptimeKuma": { - "name": "Uptime Kuma", - "description": "Monitoraggio uptime self-hosted con pagine di stato pubbliche", - "secret": { - "slug": { - "description": "Lo slug della tua pagina di stato pubblica. Il valore predefinito è \"default\" se non impostato." - }, - "apiKey": { - "description": "Chiave API opzionale per l'accesso autenticato a /metrics" - } - } - }, - "traefik": { - "name": "Traefik", - "description": "Cloud-native reverse proxy e bilanciatore del carico" - }, - "paperlessNgx": { - "name": "Paperless-ngx", - "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" - }, - "wud": { - "name": "Cos'è Il Docker", - "description": "Monitora quali dei tuoi contenitori Docker sono disponibili aggiornamenti delle immagini" + "llamacpp": { + "name": "llama.cpp", + "description": "Monitora un locale llama.cpp llama-server: salute, modelli e metriche di generazione" } }, "media": { "plural": "Media", "search": "Trova un media", "field": { - "name": "Nome", + "preview": "Anteprima", "size": "Dimensione", - "creator": "Creatore" + "creator": "Creatore", + "actions": "Controlli" }, "action": { "upload": { @@ -1244,10 +1782,12 @@ } }, "copy": { - "label": "Copia URL" + "label": "Copia URL", + "labelNamed": "Copia URL per {name}" }, "open": { - "label": "Apri media" + "label": "Apri media", + "labelNamed": "Apri {name}" } }, "noResults": { @@ -1262,7 +1802,6 @@ "add": "Aggiungi", "apply": "Applica", "backToOverview": "Torna alla panoramica", - "skip": "Salta", "change": "Cambia", "create": "Crea", "createAnother": "Crea e ricomincia", @@ -1285,16 +1824,31 @@ "tryAgain": "Riprova", "loading": "Caricamento", "show": "Visualizza", - "hide": "Nascondi" + "hide": "Nascondi", + "undo": "Annulla", + "editNamed": "Modifica {name}", + "deleteNamed": "Elimina {name}", + "clearSearch": "Cancella ricerca", + "copy": "Copia", + "copied": "Copiato", + "refresh": "Aggiorna" + }, + "pagination": { + "pageOf": "Pagina {page} di {totalPages}" }, "here": "qui", + "serviceUrlTemplate": { + "serverTitle": "Indirizzo abituale del server", + "urlModeLabel": "Modello indirizzo servizio", + "hostPort": "Stesso host, porte diverse", + "subdomain": "Un sottodominio per servizio", + "path": "Un percorso per servizio" + }, "iconPicker": { "label": "Icona URL", + "description": "Cerca nella libreria, incolla un URL di immagine, o carica un file.", "header": "Digita il nome o gli oggetti da filtrare per le icone... Homarr cercherà tra le icone {countIcons} per te", "headerLoading": "Digita per cercare icone", - "noResults": "Nessuna icona corrisponde a \"{search}\".", - "error": "Impossibile caricare le icone.", - "description": "Cerca nella libreria, incolla un URL di immagine, o carica un file.", "clear": "Cancella immagine", "uploadImage": "Carica immagine", "results": "Risultati della ricerca immagini", @@ -1303,7 +1857,9 @@ "otherImages": "Altre immagini", "urlLoading": "Controllo immagine…", "urlReady": "L'immagine è pronta per l'uso", - "urlError": "Questa immagine non può essere caricata. Controlla l'URL e riprova." + "urlError": "Questa immagine non può essere caricata. Controlla l'URL e riprova.", + "noResults": "Nessuna icona corrisponde a \"{search}\".", + "error": "Impossibile caricare le icone." }, "colorScheme": { "options": { @@ -1315,7 +1871,6 @@ "information": { "min": "Min", "max": "Max", - "days": "Giorni", "hours": "Ore", "minutes": "Minuti" }, @@ -1352,16 +1907,16 @@ }, "userAvatar": { "menu": { - "switchToDarkMode": "Passa alla modalità scura", - "switchToLightMode": "Passa al tema chiaro", + "open": "Apri menu account", "management": "Gestione", - "docker": "Docker", "preferences": "Le tue impostazioni", "logout": "Disconnettiti", "login": "Accedi", "homeBoard": "La tua home board", - "loggedOut": "Disconnesso", - "updateAvailable": "{countUpdates} aggiornamenti disponibili: {tag}" + "updateAvailable": "{countUpdates} aggiornamenti disponibili: {tag}", + "assistant": "Assistente", + "assistantThinking": "Pensare", + "modifier": "Mod" } }, "dangerZone": "Zona pericolosa", @@ -1409,13 +1964,66 @@ "kilometersPerHour": "km/h", "milesPerHour": "mph" } + }, + "widgetQuery": { + "loading": "Caricamento dati widget" + }, + "total": "Totale", + "filesystemUsage": "{count, plural, one {Mostra utilizzo per # filesystem} other {Mostra utilizzo per # filesystem}}", + "field": { + "name": "Nome del job" + }, + "label": { + "new": "Nuovo" + }, + "entity": { + "apps": "App", + "boards": "Board", + "certificates": "Certificati", + "customWidgets": "Custom widgets", + "groups": "Gruppi", + "integrations": "Integrazioni", + "invites": "Inviti", + "logs": "Log", + "media": "Media", + "searchEngines": "Motori di ricerca", + "tasks": "Attività", + "users": "Utenti" } }, "section": { - "dynamic": { + "option": { + "showLabel": { + "label": "Mostra etichetta", + "description": "Mostra l'etichetta del contenitore sopra il suo contenuto." + }, + "collapsible": { + "label": "Permetti collasso", + "description": "Permetti agli spettatori di espandere e collassare questo contenitore." + }, + "showOpenAll": { + "label": "Mostra azione open-all", + "description": "Mostra un'azione che apre ogni app in questo contenitore in nuove schede." + }, + "scrollable": { + "label": "Scorribile", + "description": "Mantenere questo contenitore alla sua dimensione impostata e scorrere il suo contenuto invece di crescere per adattarsi a loro." + } + }, + "action": { + "openAllInNewTabsFor": "Apri tutte le app in {name} nelle schede" + }, + "openAllInNewTabs": { + "title": "Apri tutto in schede", + "text": "Alcuni browser potrebbero bloccare l'apertura multipla delle schede per motivi di sicurezza. Homarr non è riuscito ad aprire tutte le finestre perché il browser ha bloccato questa azione. Consenti l'apertura di finestre pop-up e riprova." + }, + "container": { + "untitled": "Contenitore senza titolo", "action": { - "create": "Nuova sezione dinamica", - "remove": "Rimuovi sezione dinamica" + "create": "Nuovo contenitore", + "remove": "Rimuovi contenitore", + "expand": "Espandi", + "collapse": "Comprimi" }, "option": { "title": { @@ -1429,55 +2037,12 @@ } }, "remove": { - "title": "Rimuovi sezione dinamica", - "message": "Vuoi davvero rimuovere questa sezione dinamica? Gli elementi verranno spostati nella stessa posizione nella sezione padre." - } - }, - "category": { - "field": { - "name": { - "label": "Nome" - } - }, - "action": { - "create": "Nuova categoria", - "edit": "Rinomina categoria", - "remove": "Rimuovi categoria", - "moveUp": "Sposta in alto", - "moveDown": "Sposta in basso", - "createAbove": "Nuova categoria sopra", - "createBelow": "Nuova categoria sotto", - "openAllInNewTabs": "Apri tutto in schede" - }, - "create": { - "title": "Nuova categoria", - "submit": "Aggiungi categoria" - }, - "remove": { - "title": "Rimuovi categoria", - "message": "Sei sicuro di voler rimuovere la categoria {name}?" - }, - "edit": { - "title": "Rinomina categoria", - "submit": "Rinomina categoria" - }, - "menu": { - "label": { - "create": "Nuova categoria", - "changePosition": "Cambia posizione", - "settings": "Impostazioni" - } - }, - "openAllInNewTabs": { - "title": "Apri tutto in schede", - "text": "Alcuni browser potrebbero bloccare l'apertura multipla delle schede per motivi di sicurezza. Homarr non è riuscito ad aprire tutte le finestre perché il browser ha bloccato questa azione. Consenti l'apertura di finestre pop-up e riprova." + "message": "Rimuovere questo contenitore? Il suo contenuto si sposterà nell'area circostante." } } }, "item": { "action": { - "create": "Nuovo elemento", - "import": "Importa elemento", "edit": "Modifica elemento", "moveResize": "Sposta / ridimensiona elemento", "duplicate": "Duplica elemento", @@ -1486,7 +2051,7 @@ "menu": { "label": { "settings": "Impostazioni", - "refresh": "Aggiorna", + "settingsFor": "Impostazioni per {name}", "options": "Opzioni", "actions": "Azioni" }, @@ -1495,21 +2060,96 @@ "error": "Errore", "loading": "Caricamento", "idle": "Inattivo" + }, + "notification": { + "saveError": { + "title": "Impossibile salvare il widget", + "message": "Le modifiche del widget sono state rotolate indietro" + } } }, "create": { "title": "Scegli elemento da aggiungere", "search": "Filtra elementi", - "addToBoard": "Aggiungi alla board" + "addToBoard": "Aggiungi alla board", + "addAtPosition": "Aggiungi elemento qui", + "destination": { + "label": "Aggiungi a", + "description": "Scegli dove dovrebbe apparire il widget. Puoi comunque spostarlo più tardi.", + "mainCanvas": "Tela principale", + "leftRail": "Corrimano sinistro", + "rightRail": "Ferrovia destra" + }, + "connectionStatus": { + "ready": "Pronto", + "needsSetup": "Necessita configurazione", + "noConnectionRequired": "Nessuna connessione richiesta" + }, + "customWidget": "API Personalizzata", + "standalone": "Standalone", + "missingIntegration": { + "title": "Prima connetti un servizio", + "noPermission": "Questo widget ha bisogno di una connessione al servizio compatibile. Chiedi all'amministratore di connetterne una, quindi riprova." + }, + "notification": { + "success": { + "title": "Widget aggiunto", + "message": "{name} è stato aggiunto a questa scheda.", + "relocatedMessage": "{name} è stato aggiunto ad {destination} perché la destinazione selezionata non era disponibile." + }, + "error": { + "title": "Impossibile aggiungere l'elemento", + "message": "L'elemento non può essere aggiunto a questa scheda" + } + } + }, + "selection": { + "summary": "{count, plural, one {# elemento selezionato} other {# elementi selezionati}}", + "selected": "{count, plural, one {# selezionato} other {# selezionato}}", + "copy": "Copia", + "copied": "{count, plural, one {# oggetto copiato negli appunti} other {# elementi copiati negli appunti}}", + "copyError": "Gli elementi selezionati non possono essere copiati. Il tuo browser potrebbe non consentire l'accesso agli appunti.", + "paste": "Incolla", + "pasteShortcut": "Incolla qui gli elementi copiati (Ctrl / + V)", + "pasted": "{count, plural, one {# oggetto incollato} other {# elementi incollati}}", + "pasteError": "Gli appunti non possono essere letti. Il browser potrebbe non consentire l'accesso agli appunti.", + "pasteInvalid": "Gli appunti non contengono elementi Homarr validi", + "pasteUnavailable": "Gli oggetti copiati non si adattano a questa scheda.", + "removed": "{count, plural, one {# elemento rimosso} other {# elementi rimossi}}", + "move": "Sposta", + "moveTo": "Sposta gli elementi selezionati", + "delete": "Elimina", + "clear": "Cancella selezione", + "clearShortcut": "Cancella selezione (Escape)", + "saveErrorTitle": "Impossibile aggiornare gli elementi", + "saveErrorMessage": "Le modifiche non possono essere salvate. La scheda è stata aggiornata.", + "moveUnavailableTitle": "Impossibile spostare gli elementi selezionati", + "moveUnavailableMessage": "La destinazione non ha abbastanza spazio per tutta la selezione." }, "moveResize": { "title": "Sposta / ridimensiona elemento", + "entryLabel": "{name}, colonna {column}, riga {row}", + "target": { + "numbered": "{name}, destinazione {index}", + "located": "{name}, {location}, destinazione {index}" + }, + "keyboard": { + "instructions": "Premere entrare o spazio per avviare la modifica della tastiera. Utilizzare i tasti freccia per spostare, spostare più tasti freccia per ridimensionare e Fuggire per fermarsi.", + "started": "Modifica della tastiera iniziata. Utilizzare i tasti freccia per spostarsi, Maiusc più tasti freccia per ridimensionare ed Escape per fermarsi.", + "stopped": "Modifica della tastiera interrotta.", + "boundary": "Questo cambiamento non si inserisce in questa sezione." + }, "field": { + "section": { + "label": "Sezione o rotaia" + }, "width": { - "label": "Larghezza" + "label": "Larghezza", + "shortLabel": "W" }, "height": { - "label": "Altezza" + "label": "Altezza", + "shortLabel": "H" }, "xOffset": { "label": "Scostamento X" @@ -1523,18 +2163,36 @@ "title": "Modifica elemento", "tab": { "widget": "Modifica widget", - "app": "Modifica app" + "app": "Modifica app", + "integration": "Modifica integrazione" }, "app": { "propagationNotice": "Le modifiche apportate a questa app verranno applicate ovunque venga utilizzata in tutte le dashboard." }, + "integration": { + "action": "Modifica connessione", + "description": "Verifica o ripara una connessione selezionata senza lasciare questo widget.", + "editLabel": "Modifica integrazione {name}", + "fullAccessRequired": "Accesso completo richiesto", + "propagationNotice": "Le modifiche a questa integrazione si applicano ovunque si utilizzi. La connessione viene testata prima di essere salvata.", + "loading": "Caricamento integrazione", + "loadError": "Questa integrazione non può essere caricata. Riprova prima di cambiare le impostazioni di connessione." + }, + "preview": { + "integrationRequired": "Scegli una connessione per visualizzare in anteprima questo widget.", + "size": "Dimensione del file" + }, + "settings": { + "label": "Impostazioni widget" + }, "advancedOptions": { "label": "Opzioni avanzate", "title": "Opzioni avanzate degli elementi" }, "field": { "integrations": { - "label": "Integrazioni" + "label": "Integrazioni", + "removeLabel": "Rimuovi integrazione {name}" }, "title": { "label": "Titolo" @@ -1548,17 +2206,18 @@ } }, "remove": { - "title": "Rimuovi elemento", "message": "Sei sicuro di voler rimuovere questo elemento?" + }, + "advancedFocus": { + "open": "Apri vista avanzata", + "close": "Chiudi vista avanzata", + "label": "{widget} vista avanzata" } }, "widget": { "integrationSelect": { "configureIntegrationFirst": "Connetti prima un'integrazione", - "loading": "Caricamento...", - "placeholder": "Seleziona un'opzione", - "noResults": "Nessun risultato trovato", - "loadError": "Impossibile caricare le opzioni" + "placeholder": "Seleziona un'opzione" }, "app": { "name": "App", @@ -1567,9 +2226,6 @@ "appId": { "label": "Scegli app" }, - "openInNewTab": { - "label": "Apri in una nuova scheda" - }, "showTitle": { "label": "Mostra nome app" }, @@ -1577,11 +2233,8 @@ "label": "Abilita controllo stato" }, "layout": { - "label": "Layout", "option": { - "row": "Orizzontale", "row-reverse": "Orizzontale (invertito)", - "column": "Verticale", "column-reverse": "Verticale (invertito)" } }, @@ -1606,23 +2259,60 @@ "name": "Segnalibri", "description": "Visualizza più link di app", "option": { - "title": { - "label": "Titolo" + "showTitle": { + "label": "Mostra titolo widget" + }, + "titleSize": { + "label": "Dimensione del titolo del widget (px)" }, "layout": { "label": "Layout", "option": { - "row": { - "label": "Orizzontale" - }, - "column": { - "label": "Verticale" - }, - "grid": { - "label": "Griglia" + "adaptive": { + "label": "Adattivo" }, "gridHorizontal": { "label": "Griglia orizzontale" + }, + "icons": { + "label": "Icone" + } + } + }, + "variant": { + "label": "Aspetto", + "option": { + "soft": { + "label": "Morbido" + }, + "filled": { + "label": "Riempito" + }, + "outline": { + "label": "Contorno" + }, + "plain": { + "label": "Semplice" + } + } + }, + "spacing": { + "label": "Spaziatura carte", + "option": { + "xs": { + "label": "Molto piccolo" + }, + "sm": { + "label": "Piccolo" + }, + "md": { + "label": "Medio" + }, + "lg": { + "label": "Grande" + }, + "xl": { + "label": "Molto grande" } } }, @@ -1635,17 +2325,28 @@ "hideHostname": { "label": "Nascondi nomi host" }, - "openNewTab": { - "label": "Apri in una nuova scheda" - }, "withBorder": { "label": "Mostra bordo" }, + "grow": { + "label": "Espandi le carte per riempire la riga" + }, + "customUrls": { + "label": "Collegamenti personalizzati" + }, "items": { "label": "Segnalibri", - "add": "Aggiungi segnalibro" + "remove": "Rimuovi segnalibro", + "apps": { + "label": "Aggiungi segnalibri", + "description": "Incolla URL o trova applicazioni esistenti. Trascina i segnalibri qui sotto per riordinarli.", + "placeholder": "Incolla URL o cerca app", + "addUrl": "Aggiungi questo URL", + "hint": "Premere Invio per aggiungere un URL. Incollare URL separati da virgole o uno-per-line per aggiungere diversi." + } } - } + }, + "empty": "Aggiungi un URL o un'app nelle impostazioni del widget" }, "archiveTeamWarrior": { "name": "ArchiveTeam Warrior", @@ -1654,33 +2355,61 @@ "showBroadcastMessage": { "label": "Mostra messaggi broadcast" } + }, + "noProjectSelected": "Nessun progetto selezionato", + "runnerStatus": "Runner: {status}", + "projectId": "Progetto: {id}", + "sessionReceived": "Sessione ricevuta: {value}", + "sessionSent": "Sessione inviata: {value}", + "sessionId": "Sessione: {id}", + "startedAt": "Iniziato {date}", + "emptyItems": "Nessun lavoro attivo o recente in questa istantanea", + "metric": { + "running": "In esecuzione", + "completed": "Fatto", + "failed": "Non riuscito", + "canceled": "Annullato", + "download": "Download", + "upload": "Upload" + }, + "status": { + "running": "In esecuzione", + "completed": "Completato", + "failed": "Non riuscito", + "canceled": "Annullato", + "stopped": "Fermato", + "idle": "Inattivo", + "unknown": "Sconosciuto" + } + }, + "wud": { + "name": "Cos'è Il Docker", + "description": "Mostra quanti contenitori visti hanno aggiornamenti disponibili.", + "title": "Cos'è Il Docker", + "monitored": "Monitorato", + "updatesAvailable": "{count, plural, one {# aggiornamento disponibile} other {# aggiornamenti disponibili}}", + "updateAvailable": "Aggiornamento disponibile", + "openReleaseNotes": "Apri note di rilascio", + "option": { + "showRing": { + "label": "Mostra anello di aggiornamento" + }, + "showUpdateList": { + "label": "Mostra elenco aggiornamenti container", + "description": "Elenca ogni contenitore monitorato che ha un aggiornamento dell'immagine disponibile" + } } }, "dnsHoleSummary": { "name": "Riepilogo del filtraggio DNS", "description": "Mostra il riepilogo del tuo filtro DNS", "option": { - "layout": { - "label": "Layout", - "option": { - "row": { - "label": "Orizzontale" - }, - "column": { - "label": "Verticale" - }, - "grid": { - "label": "Griglia" - } - } - }, "usePiHoleColors": { "label": "Usa colori Pi-Hole" } }, "error": { - "internalServerError": "Impossibile recuperare il riepilogo del filtro DNS", - "integrationsDisconnected": "Nessun dato disponibile, tutte le integrazioni disconnesse" + "internalServerError": "Impossibile recuperare il riepilogo del filtro DNS" }, "data": { "adsBlockedToday": "Bloccati oggi", @@ -1688,32 +2417,24 @@ "dnsQueriesToday": "Query di oggi", "domainsBeingBlocked": "Domini in blocklist" }, - "domainsTooltip": "A causa di più integrazioni, Homarr non può calcolare il numero esatto di domini bloccati" + "domainsTooltip": "A causa di più integrazioni, Homarr non può calcolare il numero esatto di domini bloccati", + "status": { + "enabled": "Abilitato", + "disabled": "Disabilitato", + "unknown": "Sconosciuto" + } }, "dnsHoleControls": { "name": "Controlli del filtro DNS", "description": "Controlla PiHole o AdGuard dalla tua dashboard", "option": { - "layout": { - "label": "Layout", - "option": { - "row": { - "label": "Orizzontale" - }, - "column": { - "label": "Verticale" - }, - "grid": { - "label": "Griglia" - } - } - }, "showToggleAllButtons": { "label": "Mostra tutti i pulsanti di attivazione/disattivazione" } }, "error": { - "internalServerError": "Impossibile controllare il DNS Hole" + "internalServerError": "Impossibile controllare il DNS Hole", + "bulkActionsFailed": "{count, plural, one {# azione fallita} other {# azioni fallite}}" }, "controls": { "enableAll": "Abilita tutto", @@ -1724,8 +2445,6 @@ "disabled": "Disattivato", "processing": "In lavorazione", "disconnected": "Disconnesso", - "hours": "Ore", - "minutes": "Minuti", "unlimited": "Lascia vuoto per illimitate" } }, @@ -1737,16 +2456,10 @@ "label": "Titolo personalizzato/Visualizzazione della città", "description": "Mostra un titolo personalizzato o il nome della città/paese sopra l'orologio." }, - "customTitle": { - "label": "Titolo" - }, "is24HourFormat": { "label": "Formato di 24 ore", "description": "Utilizza il formato 24 ore invece di 12 ore" }, - "showSeconds": { - "label": "Mostra i secondi" - }, "useCustomTimezone": { "label": "Usa un fuso orario fisso" }, @@ -1765,29 +2478,295 @@ "label": "Formato orario personalizzato", "description": "Usa ISO 8601 per formattare l'ora (questo sovrascriverà altre opzioni)" }, - "customDateFormat": { - "label": "Formato data personalizzato", - "description": "Usa ISO 8601 per formattare la data (questo sovrascriverà altre opzioni)" - }, "showWeather": { "label": "Mostra meteo", "description": "Mostra una piccola icona animata del meteo e la temperatura nell'angolo della scheda" }, - "weatherLocation": { - "label": "Località meteo" - }, "isWeatherFormatFahrenheit": { "label": "Usa Fahrenheit" + }, + "animateWeatherIcon": { + "label": "Icona meteo animata", + "description": "Animare l'icona meteo. Disabilitato per impostazione predefinita e sempre disabilitato quando è richiesto un movimento ridotto." + }, + "colorWeatherByDayNight": { + "label": "Colore meteo per giorno/notte", + "description": "Tinta l'icona meteo e la temperatura con un colore giorno o un colore notturno, in base al fatto che sia attualmente giorno o notte nella posizione scelta." + }, + "dayWeatherColor": { + "label": "Colore giorno" + }, + "nightWeatherColor": { + "label": "Colore notte" + }, + "worldClockCities": { + "label": "Città del mondo orologio", + "description": "Aggiungi e ordina fino a sei città per una vista avanzata." } + }, + "timezoneList": { + "timezone": "Fuso orario", + "cityLabel": "Etichetta della città", + "searchPlaceholder": "Cerca fusi orari", + "noResults": "Nessun fuso orario trovato", + "unsupportedOption": "Non Supportato: {timeZone}", + "add": "Aggiungi città", + "remove": "Rimuovi {city}", + "reorder": "Riordina {city}", + "limit": "{count} di {maximum} città configurate" + }, + "worldClock": { + "primary": "Orologio primario", + "local": "Ora locale", + "today": "Oggi", + "tomorrow": "Domani", + "yesterday": "Ieri", + "noSecondaryCities": "Aggiungi le città nelle opzioni del widget per confrontarle qui.", + "unsupportedPrimaryTitle": "Fuso orario primario non è disponibile", + "unsupportedPrimary": "{timeZone} non è supportato in questo browser. Mostrando UTC come ripiego chiaramente contrassegnato.", + "unsupportedTimeZone": "Timezone non supportato: {timeZone}", + "accessibleTime": "{city}: {time}, {date}, {timeZone}", + "advancedLabel": "Orologio mondo avanzato", + "cities": "Orologi mondiali", + "cityCount": "{count} timezones", + "timeBarLabel": "Posizione 24 ore su 24 per {city}", + "dayProgress": "{percent}% trascorso · {hours}h {minutes}m rimanenti", + "phaseLegend": "Leggenda del giorno", + "tick": { + "midnight": "00", + "morning": "06", + "noon": "12", + "evening": "18", + "end": "24" + }, + "phaseRange": { + "night": "00–05 · 21–24", + "dawn": "05–08", + "day": "08–18", + "dusk": "18–21" + }, + "phase": { + "night": "Notte", + "dawn": "Alba", + "day": "Giorno", + "dusk": "Crepuscolo" + } + } + }, + "airQuality": { + "name": "Qualità Dell'Aria E Uv", + "description": "Visualizza la qualità dell'aria, l'indice ultravioletto, gli inquinanti e il polline per una posizione.", + "option": { + "location": { + "label": "Posizione della qualità dell'aria" + }, + "aqiStandard": { + "label": "Standard AQI", + "options": { + "auto": "Automatico per la localizzazione", + "european": "AQI Europeo", + "us": "US AQI" + } + }, + "showUv": { + "label": "Mostra indice UV" + }, + "showPollutants": { + "label": "Mostra le concentrazioni di inquinanti" + }, + "showPollen": { + "label": "Mostra le concentrazioni di polline" + } + }, + "category": { + "good": "Buono", + "fair": "Equo", + "moderate": "Moderato", + "unhealthySensitive": "Non sano per gruppi sensibili", + "unhealthy": "Compromesso", + "poor": "Povero", + "veryPoor": "Molto povero", + "veryUnhealthy": "Molto malsano", + "extremelyPoor": "Estremamente povero", + "hazardous": "Pericoloso", + "unknown": "Nessuna lettura AQI" + }, + "uv": { + "label": "Indice UV", + "category": { + "low": "Basso", + "moderate": "Moderato", + "high": "Alto", + "veryHigh": "Molto alto", + "extreme": "Estremo", + "unknown": "Nessuna lettura" + } + }, + "dominantPollutant": "Dominant pollutant", + "aqiLabel": "AQI", + "strongestPollen": "Polline più alto", + "unit": { + "concentration": "{value} μg/m3", + "pollen": "{value} cereali/m3" + }, + "pollutant": { + "pm2_5": "PM2,5", + "pm10": "PM10", + "ozone": "Ozono", + "nitrogenDioxide": "Biossido di azoto", + "sulphurDioxide": "Sulphur dioxide", + "carbonMonoxide": "Monossido di carbonio" + }, + "pollen": { + "alder": "Alder", + "birch": "Betulla", + "grass": "Erba", + "mugwort": "Mangwort", + "olive": "Olive", + "ragweed": "Ragweed" + }, + "compact": { + "sixHourTrend": "Tendenza AQI per le prossime sei ore" + }, + "advanced": { + "observedAt": "Aggiornato all' {time}", + "next24Hours": "Prossime 24 ore", + "pollutants": "Concentrazioni di inquinanti", + "pollen": "Concentrazioni di polline", + "sevenDayForecast": "Previsione massima di 7 giorni", + "aqiValue": "AQI {value}", + "uvValue": "Uv {value}", + "uvShort": "Uv {value}", + "noForecast": "Nessun dato di previsione disponibile" + } + }, + "countdown": { + "name": "Conto Alla Rovescia", + "description": "Traccia i prossimi eventi e anniversari ricorrenti.", + "option": { + "events": { + "label": "Eventi", + "description": "Aggiungi e ordina fino a 20 conti annuali o una volta. Le date sono inserite nel fuso orario selezionato." + }, + "showProgress": { + "label": "Mostra progressi" + }, + "showSeconds": { + "label": "Mostra secondi", + "description": "Mantieni i secondi visibili per ogni evento imminente." + } + }, + "dateTimeEventList": { + "newEvent": "Nuovo evento", + "add": "Aggiungi evento", + "remove": "Rimuovi {event}", + "reorder": "Riordina {event}", + "eventLabel": "Etichetta evento", + "timezone": "Fuso orario", + "unsupportedOption": "Non Supportato: {timeZone}", + "recurrence": "Ripeti", + "recurrenceOption": { + "none": "Non si ripete", + "yearly": "Ogni anno" + }, + "target": "Data e ora dell'evento", + "trackProgress": "Traccia l'avanzamento da una data di inizio", + "start": "Data e ora di inizio avanzamento", + "confirmDateTime": "Conferma data e ora", + "limit": "{count} di {maximum} eventi configurati" + }, + "empty": { + "title": "Ancora nessun conto alla rovescia", + "description": "Aggiungi un evento nelle opzioni del widget per iniziare a contare giù." + }, + "completed": "Completato", + "yearly": "Annuale", + "progress": "Progresso evento", + "upcoming": "Prossimi", + "completedEvents": "Eventi completati", + "invalid": { + "title": "Alcuni eventi non possono essere visualizzati", + "description": "{count, plural, one {Un evento ha una data non valida o un fuso orario non supportato.} other {# eventi hanno una data non valida o un fuso orario non supportato.}}", + "value": "Unavailable" + }, + "alert": { + "notifications": "Notifiche browser", + "permissionDenied": "Le notifiche sono bloccate in questo browser.", + "reached": "Il conto alla rovescia ha raggiunto il suo obiettivo." + } + }, + "timer": { + "name": "Timer / Pomodoro", + "description": "Esegue un semplice timer o una sequenza configurabile Pomodoro.", + "option": { + "mode": { + "label": "Modalità", + "options": { + "timer": "Timer", + "pomodoro": "Pomodoro" + } + }, + "timerMinutes": { + "label": "Minuti timer" + }, + "focusMinutes": { + "label": "Focus minuti" + }, + "shortBreakMinutes": { + "label": "Minuti di pausa brevi" + }, + "longBreakMinutes": { + "label": "Minuti di pausa lunga" + }, + "sessionsBeforeLongBreak": { + "label": "Focus sessioni prima di una lunga pausa" + }, + "autoStartBreaks": { + "label": "Avvia automaticamente le pause" + }, + "autoStartFocus": { + "label": "Avvia automaticamente le sessioni di messa a fuoco" + } + }, + "phase": { + "timer": "Timer", + "focus": "Focus", + "shortBreak": "Breve pausa", + "longBreak": "Pausa lunga" + }, + "action": { + "start": "Avvia", + "pause": "Pausa", + "reset": "Reset" + }, + "attention": { + "timerComplete": "Timer complete", + "phaseReady": "{phase} pronto" + }, + "progress": "Avanzamento del timer: {progress}%", + "compact": { + "completedFocus": "{count, plural, =0 {Nessuna sessione di messa a fuoco completata} one {# sessione di messa a fuoco completata} other {# sessioni di messa a fuoco completate}}" + }, + "alert": { + "title": "Timer complete", + "completed": "{phase} completato." + }, + "advanced": { + "sequence": "Pomodoro sequence", + "focusSession": "Focus {session}", + "settings": "Impostazioni permanenti", + "settingsHint": "Usa il menu contestuale del widget per modificare queste impostazioni della scheda.", + "localAlerts": "Avvisi locali", + "notifications": "Notifiche browser", + "sound": "Suoni timer", + "localAlertsHint": "I suoni del timer sono abilitati per impostazione predefinita. I suoni e le notifiche si applicano solo a questo widget in questo browser.", + "notificationsDenied": "Le notifiche sono bloccate in questo browser." } }, "minecraftServerStatus": { "name": "Stato Server Minecraft", "description": "Visualizza lo stato di un server Minecraft", "option": { - "title": { - "label": "Titolo" - }, "domain": { "label": "Indirizzo del server" }, @@ -1807,11 +2786,21 @@ "noStation": "Nessuna stazione selezionata", "option": { "baseUrl": { - "label": "Url Search.ch" + "label": "Url Search.ch", + "description": "Gli URL personalizzati devono essere risolti in un indirizzo IP pubblico. Gli host privati e locali sono respinti." }, "station": { - "label": "Stazione" + "label": "Stazione", + "placeholder": "Cerca una stazione" } + }, + "error": { + "customSourceUnavailable": "La sorgente dell'orario non è disponibile. Verificare che il suo URL si risolva in un indirizzo IP pubblico.", + "stationSearch": "Impossibile cercare le stazioni. Controlla l'URL personalizzato e l'accesso al tuo tabellone." + }, + "warning": { + "stale": "L'orario non può essere aggiornato. Visualizzazione partenze aggiornate l'ultima volta su {time}.", + "staleCompact": "Dati temporanei" } }, "notebook": { @@ -1843,6 +2832,9 @@ "directionRtl": "Imposta la direzione del testo da destra a destra", "blockquote": "Citazione", "horizontalLine": "Linea orizzontale", + "details": "Attiva/disattiva sezione comprimibile", + "expandDetails": "Espandi sezione pieghevole", + "collapseDetails": "Riduci la sezione pieghevole", "bulletList": "Elenco puntato", "orderedList": "Elenco ordinato", "checkList": "Checklist", @@ -1851,16 +2843,20 @@ "link": "Link", "unlink": "Elimina link", "image": "Incorpora immagine", - "addTable": "Aggiungi tabella", + "insertTable": "Inserisci tabella", + "insertTableSize": "Inserisci una tabella {columns} × {rows}", "deleteTable": "Elimina tabella", "colorCell": "Colora Cella", - "mergeCell": "Attiva/disattiva unione celle", + "mergeCells": "Unisci celle", + "splitCell": "Dividi cella", "addColumnLeft": "Aggiungi colonna prima", "addColumnRight": "Aggiungi colonna dopo", "deleteColumn": "Elimina colonna", "addRowTop": "Aggiungi riga prima", "addRowBelow": "Aggiungi riga dopo", - "deleteRow": "Elimina riga" + "deleteRow": "Elimina riga", + "toggleHeaderRow": "Attiva/Disattiva riga di intestazione", + "toggleHeaderColumn": "Attiva/disattiva colonna intestazione" }, "align": { "left": "Sinistra", @@ -1871,8 +2867,6 @@ "clearColor": "Rimuovi colore", "source": "Fonte", "widthPlaceholder": "Valore in % o pixel", - "columns": "Colonne", - "rows": "Righe", "width": "Larghezza", "height": "Altezza" }, @@ -1884,7 +2878,9 @@ "discard": "Annulla modifiche", "keepEditing": "Continua a modificare" } - } + }, + "saveFailed": "Impossibile salvare la nota", + "documentStats": "{words, plural, one {# parola} other {# parole}} · {characters, plural, one {# carattere} other {# caratteri}}" }, "anchorNote": { "name": "Ancora Nota", @@ -1893,9 +2889,6 @@ "noteId": { "label": "Nota" }, - "showTitle": { - "label": "Mostra titolo" - }, "showUpdatedAt": { "label": "Mostra ultimo aggiornamento" } @@ -1905,14 +2898,20 @@ "notFound": "Nota non trovata", "noNotes": "Nessuna nota trovata", "integrationRequired": "Seleziona prima l'integrazione di Anchor", - "updatedAt": "Aggiornato {date}", "untitled": "Senza titolo", - "edit": "Modifica", - "save": "Salva", - "cancel": "Annulla", "readOnlyViewer": "Hai accesso in modalità visualizzazione a questa nota. La modifica è disabilitata.", "saveForbidden": "Non hai i permessi per modificare questa nota.", - "saveFailed": "Impossibile salvare questa nota. Per favore, riprova." + "saveFailed": "Impossibile salvare questa nota. Per favore, riprova.", + "createdAt": "Creato {date}", + "permission": { + "owner": "Proprietario", + "editor": "Editor", + "viewer": "Visualizzatore" + }, + "status": { + "pinned": "Bloccato", + "archived": "Archiviato" + } }, "iframe": { "name": "iFrame", @@ -1971,6 +2970,25 @@ "clickable": { "label": "Cliccabile" } + }, + "state": { + "on": "Acceso", + "off": "Off", + "unavailable": "Unavailable", + "unknown": "Sconosciuto" + }, + "advanced": { + "entityId": "ID Entità: {id}", + "lastChanged": "Modificato {date}", + "attribute": { + "unit": "Unità", + "deviceClass": "Classe dispositivo", + "icon": "Icona" + } + }, + "error": { + "loadFailed": "Impossibile caricare l'entità", + "toggleFailed": "Impossibile aggiornare l'entità" } }, "smartHome-executeAutomation": { @@ -1986,11 +3004,31 @@ }, "spotlightAction": { "run": "Avvia {name}" + }, + "advanced": { + "lastExecuted": "Ultima esecuzione il {time}", + "automationId": "Id Automazione: {id}", + "ready": "Pronto per l'esecuzione", + "noPermission": "Nessun permesso per eseguire questa automazione" + }, + "status": { + "running": "Automazione in esecuzione", + "success": "Automazione completata" + }, + "error": { + "executeFailed": "Impossibile eseguire l'automazione" } }, "stockPrice": { "name": "Prezzo delle azioni", "description": "Visualizza il prezzo attuale delle azioni di una società", + "advanced": { + "currentPrice": "Prezzo corrente", + "previousClose": "Chiusura precedente", + "changePercentage": "Variazione (%)", + "minimum": "Minimo", + "maximum": "Massimo" + }, "option": { "stock": { "label": "Simbolo azionario" @@ -2061,6 +3099,10 @@ "label": "1 mese" } } + }, + "showDetails": { + "label": "Mostra dettagli", + "description": "Mostra il nome, il cambiamento e l'intervallo di tempo nella vista compatta. Disattiva solo per il simbolo e il prezzo." } } }, @@ -2088,6 +3130,13 @@ "showUnmonitored": { "label": "Mostra non monitorato" } + }, + "advanced": { + "previousMonth": "Mostra mese precedente", + "nextMonth": "Mostra il mese successivo", + "eventCount": "{count, plural, one {# evento} other {# eventi}}", + "loading": "Caricamento eventi calendario...", + "noEvents": "Nessun evento in questo mese" } }, "weather": { @@ -2100,16 +3149,18 @@ "disableTemperatureDecimals": { "label": "Disabilita decimali della temperatura" }, + "animateIcons": { + "label": "Animare le icone meteo" + }, + "showHumidity": { + "label": "Mostra umidità" + }, "showCurrentWindSpeed": { - "label": "Mostra la velocità attuale del vento", - "description": "Solo sul meteo corrente" + "label": "Mostra la velocità attuale del vento" }, "useImperialSpeed": { "label": "Usa mph per la velocità del vento" }, - "location": { - "label": "Località meteo" - }, "showCity": { "label": "Mostra città" }, @@ -2119,13 +3170,10 @@ "forecastDayCount": { "label": "Numero di giorni di previsione", "description": "Quando il widget non è sufficientemente ampio, vengono mostrati meno giorni" - }, - "dateFormat": { - "label": "Formato data", - "description": "Come dovrebbe apparire la data" } }, "currentWindSpeed": "{currentWindSpeed} {unit}", + "disabled": "I dati meteo non sono disponibili perché le connessioni in uscita sono disabilitate", "dailyForecast": { "sunrise": "Alba", "sunset": "Tramonto", @@ -2148,6 +3196,47 @@ "thunderstorm": "Temporale", "thunderstormWithHail": "Temporale con grandine", "unknown": "Sconosciuto" + }, + "details": "Mostra dettagli meteo", + "detailsFor": "Mostra dettagli meteo per {date}", + "advanced": { + "forecast": "Previsioni di 7 giorni", + "hourlyForecast": "Prossime 24 ore", + "day": "Giorno", + "time": "Tempo", + "conditions": "Condizioni", + "temperature": "Temperatura", + "feelsLike": "Si sente come {temperature}", + "feelsLikeLabel": "Si sente come", + "feelsLikeRange": "Sembra {maximum} / {minimum}", + "highLow": "Alto {maximum} · basso {minimum}", + "observedAt": "Aggiornato all' {time}", + "humidity": "Umidità", + "averageHumidity": "Umidità media: {humidity}%", + "currentHumidity": "Umidità attuale", + "wind": "Vento / raffiche ({unit})", + "currentWind": "Vento attuale / raffiche", + "windValue": "{speed} / {gusts} {unit}", + "windDetail": "Vento massimo / raffiche: {speed} / {gusts} {unit}", + "nextHourPrecipitation": "Precipitazioni prossima ora", + "precipitationChance": "Precipitazioni possibilità", + "precipitationValue": "{probability}% · {amount} mm", + "precipitationDetail": "Precipitazione: {probability}% · {amount} mm", + "todayUv": "Indice UV massimo di oggi", + "uvIndex": "Indice UV massimo: {value}", + "daylight": "Luce Giornale: {duration}", + "hourlyTooltip": "Si sente come {feelsLike}{temperatureUnit} · {amount} mm · {humidity}% umidità · {speed} {speedUnit} vento", + "hourlyTooltipWithoutHumidity": "Si sente come {feelsLike}{temperatureUnit} · {amount} mm · {speed} {speedUnit} vento", + "detailLabel": { + "feelsLike": "Si sente come", + "precipitation": "Precipitazioni", + "humidity": "Umidità media", + "wind": "Vento massimo / raffiche", + "uv": "Indice UV massimo", + "daylight": "Daylight" + }, + "sun": "Alba / tramonto", + "noForecast": "Nessun dato di previsione disponibile" } }, "indexerManager": { @@ -2160,8 +3249,15 @@ }, "title": "Index manager", "testAll": "Prova tutto", + "status": { + "healthy": "Normale funzionamento", + "unhealthy": "Compromesso", + "disabled": "Disabilitato", + "unknown": "Salute non disponibile" + }, "error": { - "internalServerError": "Impossibile recuperare lo stato degli indicizzatori" + "internalServerError": "Impossibile recuperare lo stato degli indicizzatori", + "testAll": "Il test dell'indicizzatore non è riuscito. Riprova." } }, "healthMonitoring": { @@ -2190,11 +3286,6 @@ "fileSystem": { "label": "Mostra Informazioni Filesystem" }, - "visibleStorageVolumes": { - "label": "Volumi di archiviazione visibili", - "description": "Disponibile solo se tutte le integrazioni selezionate sono Synology. Lasciare vuoto per visualizzare tutti i volumi di archiviazione rilevati.", - "placeholder": "Selezionare volumi di archiviazione" - }, "defaultTab": { "label": "Scheda predefinita" }, @@ -2217,17 +3308,27 @@ "minutes": "{count} minuti", "used": "Usato", "available": "Disponibile", - "lastSeen": "Ultimo aggiornamento dello stato: {lastSeen}" + "lastSeen": "Ultimo aggiornamento dello stato: {lastSeen}", + "updatesAvailable": "{count, plural, one {# aggiornamento disponibile} other {# aggiornamenti disponibili}}", + "rebootRequired": "Riavvio richiesto", + "rebootNotRequired": "Nessun riavvio richiesto" + }, + "smartStatus": { + "attributesWithinThresholds": "SMART: attributi entro le soglie", + "attributesFailed": "SMART: {attributes} fallito", + "noCriticalWarning": "SMART: nessun avviso segnalato da SSD", + "criticalWarning": "SMART: avviso critico segnalato da SSD" + }, + "gauge": { + "cpuUsage": "Uso della CPU", + "cpuTemperature": "Temperatura CPU", + "memoryUsage": "Uso della memoria", + "gpuUsage": "Utilizzo della GPU {name}" }, - "memory": {}, "error": { "internalServerError": "Impossibile recuperare lo stato di salute" }, "cluster": { - "summary": { - "cpu": "CPU", - "memory": "RAM" - }, "resource": { "node": { "name": "Nodi" @@ -2263,8 +3364,6 @@ "table": { "header": { "name": "Nome", - "cpu": "CPU", - "memory": "RAM", "node": "Nodo" } } @@ -2274,33 +3373,29 @@ "name": "Statistiche del docker", "description": "Statistiche dei tuoi contenitori (questo widget può essere aggiunto solo con privilegi di amministratore)", "option": { - "columns": { - "label": "Colonne da mostrare" + "endpointIds": { + "label": "Ambienti docker", + "description": "Lascia vuoto per mostrare i contenitori di ogni ambiente Docker", + "placeholder": "Tutti gli ambienti Docker" }, - "enableRowSorting": { - "label": "Abilita l'ordinamento degli elementi" + "containerFilter": { + "label": "Contenitori da filtrare" + }, + "filterIsWhitelist": { + "label": "Filtra come whitelist" }, "defaultSort": { - "label": "Colonna utilizzata per l'ordinamento predefinito", "option": { "name": "Nome", "state": "Stato", "cpuUsage": "Uso della CPU", "memoryUsage": "Uso della memoria" } - }, - "descendingDefaultSort": { - "label": "Inverti ordinamento" - }, - "columnOrder": { - "label": "Ordine delle colonne" - }, - "columnWidths": { - "label": "Larghezza delle colonne" } }, "error": { "internalServerError": "Recupero statistiche container non riuscito", + "endpointsUnavailable": "Gli endpoint docker non sono disponibili", "layoutSaveTitle": "Layout della tabella non salvato", "layoutSaveMessage": "Impossibile salvare il layout della tabella Docker. Prova a spostare o ridimensionare nuovamente la colonna." }, @@ -2309,7 +3404,6 @@ } }, "coolify": { - "name": "Coolify", "description": "Panoramica della tua istanza Coolify con server e applicazioni", "option": { "showServers": { @@ -2335,17 +3429,49 @@ "internalServerError": "Impossibile recuperare i dati Coolify" }, "server": { - "buildServer": "Build" + "buildServer": "Build", + "resourceCounts": "{applications, plural, one {# app} other {# app}} / {services, plural, one {# servizio} other {# servizi}}", + "reachability": "Raggiungibilità", + "usability": "Utilizzabilità" + }, + "source": { + "url": "Fonte: {url}", + "unavailable": "{source}: unavailable" }, "instances": { "title": "Istanze" + }, + "action": { + "openResource": "Apri {name}", + "openLogs": "Apri log {name}", + "showIp": "Mostra indirizzo IP", + "hideIp": "Nascondi indirizzo IP" + }, + "status": { + "running": "In esecuzione", + "stopped": "Fermato", + "exited": "Uscito", + "starting": "Avvio", + "restarting": "Riavvio in corso", + "unknown": "Sconosciuto", + "online": "Online", + "offline": "Offline", + "reachable": "Raggiungibile", + "unreachable": "Inraggiungibile", + "usable": "Utilizzabile", + "unusable": "Inutilizzabile" } }, "vpn": { "name": "VPN", "description": "Panoramica delle tue connessioni VPN", "serviceUnavailable": "VPN non disponibile", - "option": {} + "status": { + "running": "In esecuzione", + "notRunning": "Non in esecuzione", + "unavailable": "Unavailable", + "vpn": "VPN: {status}" + } }, "ups": { "name": "UPS", @@ -2372,14 +3498,19 @@ "runtime": "Runtime", "load": "Carica", "input": "Input", - "output": "Output" + "output": "Output", + "batteryVoltage": "Tensione batteria", + "power": "Potenza", + "temperature": "Temperatura", + "manufacturer": "Produttore", + "model": "Modello", + "serial": "Seriale" }, "error": { "internalServerError": "Recupero dati UPS non riuscito" } }, "tracearr": { - "name": "Tracearr", "description": "Monitoraggio avanzato del server multimediale con dati dettagliati su streaming e transcodifica", "option": { "showStreams": { @@ -2467,10 +3598,7 @@ "label": "Evento", "description": "Mostra le occorrenze totali di un evento specifico", "placeholder": "Seleziona un evento", - "loading": "Caricamento eventi...", - "noEvents": "Nessun evento trovato", - "none": "Nessun evento", - "configureWebsiteFirst": "Seleziona un sito web prima di caricare gli eventi" + "none": "Nessun evento" }, "chartType": { "label": "Tipo di grafico", @@ -2501,26 +3629,21 @@ "eventNames": { "label": "Eventi", "description": "Scegli uno o più eventi per il grafico", - "placeholder": "Seleziona eventi...", - "loading": "Caricamento eventi...", - "noEvents": "Nessun evento trovato", - "configureWebsiteFirst": "Seleziona prima un sito web per caricare gli eventi" + "placeholder": "Seleziona eventi..." }, "topCount": { "label": "Elementi da mostrare", "description": "Numero di elementi principali da visualizzare (max 500)" + }, + "events": { + "loading": "Caricamento eventi...", + "noEvents": "Nessun evento trovato", + "configureWebsiteFirst": "Seleziona un sito web prima di caricare gli eventi" } }, "event": { - "occurrences": "eventi", "label": "eventi" }, - "topPages": { - "direct": "Diretto" - }, - "topReferrers": { - "direct": "Diretto" - }, "events": { "selectPrompt": "Seleziona gli eventi per il grafico" }, @@ -2529,6 +3652,9 @@ "noWebsite": "Nessun sito web configurato", "noData": "Nessun dato disponibile", "internalServerError": "Recupero dati Umami fallito" + }, + "top": { + "direct": "Diretto" } }, "common": { @@ -2556,7 +3682,8 @@ }, "integration": { "noData": "Nessuna integrazione trovata", - "description": "Fare clic su per creare una nuova integrazione" + "description": "Fare clic su per creare una nuova integrazione", + "manage": "Gestisci integrazioni" }, "app": { "noData": "Nessuna app trovata", @@ -2567,7 +3694,61 @@ "noIntegration": "Nessuna integrazione selezionata", "noData": "Nessun dato di integrazione disponibile" }, - "option": {} + "integrationDisconnected": "Nessun dato disponibile, tutte le integrazioni sono disconnesse", + "updatedAt": "Aggiornato {date}", + "title": { + "label": "Titolo" + }, + "openInNewTab": { + "label": "Apri in una nuova scheda" + }, + "showTitle": { + "label": "Mostra titolo" + }, + "weatherLocation": { + "label": "Località meteo" + }, + "layout": { + "label": "Layout", + "option": { + "horizontal": "Orizzontale", + "vertical": "Verticale", + "grid": "Griglia" + } + }, + "select": { + "loading": "Caricamento...", + "loadError": "Impossibile caricare le opzioni" + }, + "dateFormat": { + "label": "Formato data", + "description": "Come dovrebbe apparire la data" + }, + "visibleStorageVolumes": { + "label": "Volumi di archiviazione visibili", + "description": "Disponibile solo quando ogni integrazione selezionata è OpenMediaVault o Synology. Lasciare vuoto per mostrare tutti i volumi di archiviazione rilevati.", + "placeholder": "Selezionare volumi di archiviazione" + }, + "tableOptions": { + "columns": { + "label": "Colonne da mostrare" + }, + "columnOrder": { + "label": "Ordine delle colonne" + }, + "columnWidths": { + "label": "Larghezza delle colonne" + }, + "enableRowSorting": { + "label": "Abilita l'ordinamento degli elementi" + }, + "defaultSort": { + "label": "Colonna utilizzata per l'ordinamento predefinito" + }, + "invertSorting": { + "label": "Inverti ordinamento" + } + } }, "video": { "name": "Stream Video", @@ -2626,6 +3807,7 @@ "transcoding": "Transcodifica", "paused": "In pausa", "remaining": "{minutes} min rimanenti", + "seasonEpisode": "S{season} E{episode}", "metadata": { "title": "Statistiche per nerd", "video": { @@ -2643,11 +3825,16 @@ "resolution": "Risoluzione", "target": "Codec di destinazione" } - } + }, + "unknownUser": "Utente sconosciuto" + }, + "summary": { + "sessions": "{count, plural, one {# sessione} other {# sessioni}}", + "playing": "{count} in riproduzione", + "transcoding": "{count} transcodificazioni" } }, "paperlessNgx": { - "name": "Paperless-ngx", "description": "Panoramica del tuo archivio documenti Paperless-ngx", "documentsTotal": "Documenti Totali", "documentsInbox": "In arrivo", @@ -2692,7 +3879,6 @@ } }, "patchmon": { - "name": "PatchMon", "description": "Panoramica dello stato delle patch host da PatchMon", "title": "Statistiche PatchMon", "totalHosts": "Host Totali", @@ -2759,36 +3945,30 @@ "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" + "label": "Soglia di avviso aggiornamenti richiesti" }, "hostsNeedingUpdatesCriticalAt": { - "label": "Soglia critica aggiornamenti richiesti", - "description": "Inserisci il rosso quando il valore raggiunge questa soglia" + "label": "Soglia critica aggiornamenti richiesti" }, "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" + "label": "Soglia di avviso aggiornamenti di sicurezza" }, "securityUpdatesCriticalAt": { - "label": "Soglia critica aggiornamenti di sicurezza", - "description": "Inserisci il rosso quando il valore raggiunge questa soglia" + "label": "Soglia critica aggiornamenti di sicurezza" }, "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" + "label": "Soglia di avviso host con aggiornamenti di sicurezza" }, "hostsWithSecurityUpdatesCriticalAt": { - "label": "Soglia critica host con aggiornamenti di sicurezza", - "description": "Inserisci il rosso quando il valore raggiunge questa soglia" + "label": "Soglia critica host con aggiornamenti di sicurezza" }, "upToDateHostsThresholdMode": { "label": "Modalità soglia host aggiornati", @@ -2807,12 +3987,10 @@ "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" + "label": "Soglia di avviso pacchetti obsoleti" }, "totalOutdatedPackagesCriticalAt": { - "label": "Soglia critica pacchetti obsoleti", - "description": "Inserisci il rosso quando il valore raggiunge questa soglia" + "label": "Soglia critica pacchetti obsoleti" }, "showOsDistribution": { "label": "Mostra distribuzione OS", @@ -2843,6 +4021,14 @@ "bars": "Barre orizzontali", "donut": "Grafico a ciambella" } + }, + "threshold": { + "warningAt": { + "description": "Inserisci il giallo quando il valore raggiunge questa soglia" + }, + "criticalAt": { + "description": "Inserisci il rosso quando il valore raggiunge questa soglia" + } } }, "error": { @@ -2850,12 +4036,12 @@ } }, "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", + "announcements": "Annunci", "option": { "showMissingEpisodes": { "label": "Mostra episodi mancanti", @@ -2902,7 +4088,8 @@ "users": "Utenti", "photos": "Foto", "videos": "Video", - "storage": "Spazio utilizzato" + "storage": "Spazio utilizzato", + "albumLimit": "Album più grandi (fino a {count} mostrato)" }, "immich-albumCarousel": { "name": "Album Immich", @@ -2926,24 +4113,21 @@ } }, "description": "Presentazione delle immagini nel tuo album Immich", - "noPhotos": "Nessuna foto in questo album" + "noPhotos": "Nessuna foto in questo album", + "albumPhoto": "Foto album", + "actions": { + "previousPhoto": "Foto precedente", + "nextPhoto": "Foto successiva", + "pauseSlideshow": "Pause slideshow", + "resumeSlideshow": "Riprendi diapositive", + "toggleSlideshow": "Pausa o riprendi la presentazione", + "photo": "Foto {number}" + } }, "downloads": { "name": "Scarica Client", "description": "Ti consente di visualizzare e gestire i tuoi download dai client Torrent e Usenet.", "option": { - "columns": { - "label": "Colonne da mostrare" - }, - "enableRowSorting": { - "label": "Abilita ordinamento elementi" - }, - "defaultSort": { - "label": "Colonna usata per l'ordinamento predefinito" - }, - "descendingDefaultSort": { - "label": "Inverti ordinamento" - }, "showCompletedUsenet": { "label": "Mostra le voci Usenet contrassegnate come completate" }, @@ -2968,12 +4152,6 @@ "limitPerIntegration": { "label": "Limite elementi per integrazione", "description": "Ciò limiterà il numero di elementi mostrati per integrazione, non globalmente" - }, - "columnOrder": { - "label": "Ordine delle colonne" - }, - "columnWidths": { - "label": "Larghezza delle colonne" } }, "errors": { @@ -3134,6 +4312,10 @@ "mediaRequests-requestList": { "name": "Elenco Richieste Media", "description": "Visualizza un elenco di tutte le richieste media dalla tua istanza Overseerr o Jellyseerr", + "empty": { + "title": "Ancora nessuna richiesta multimediale", + "description": "Cerca un film o mostra per iniziare una richiesta." + }, "option": { "linksTargetNewTab": { "label": "Apri i link in nuova scheda" @@ -3167,12 +4349,16 @@ "failed": "Non riuscito", "completed": "Completato" }, + "unknown": "Sconosciuto", "toBeDetermined": "TBD" }, "mediaRequests-requestStats": { "name": "Statistiche Richiesta Media", "description": "Statistiche sulle richieste dei media", - "option": {}, + "empty": { + "title": "Ancora nessuna richiesta di attività", + "description": "Le statistiche appariranno dopo la prima richiesta multimediale." + }, "titles": { "stats": { "main": "Statistiche Media", @@ -3182,8 +4368,7 @@ "declined": "Già rifiutato", "available": "Già Disponibile", "tv": "Richieste TV", - "movie": "Richieste film", - "total": "Totale" + "movie": "Richieste film" }, "users": { "main": "Top Utenti", @@ -3209,7 +4394,6 @@ }, "currentIndex": "{start}-{end} di {total}", "healthCheck": { - "title": "Controllo integrità", "queued": "In coda", "status": { "healthy": "Normale funzionamento", @@ -3218,35 +4402,30 @@ }, "panel": { "statistics": { - "empty": "Vuoto", - "transcodes": "Transcodifiche", - "transcodesCount": "Transcodifiche", - "healthChecksCount": "Controlli integrità", "filesCount": "File", "savedSpace": "Spazio salvato", - "healthChecks": "Controlli integrità", "videoCodecs": "Codec", "videoContainers": "Containers", "videoResolutions": "Risoluzioni" }, "workers": { - "empty": "Vuoto", "table": { - "file": "File", "eta": "ETA", - "progress": "Avanzamento", - "transcode": "Transcodifica", - "healthCheck": "Controllo integrità" + "progress": "Avanzamento" } }, "queue": { - "empty": "Vuoto", "table": { - "file": "File", - "size": "Dimensione", - "transcode": "Transcodifica", - "healthCheck": "Controllo integrità" + "size": "Dimensione" } + }, + "common": { + "empty": "Vuoto", + "file": "File", + "healthCheck": "Controllo integrità", + "transcode": "Transcodifica", + "transcodes": "Transcodifiche", + "healthChecks": "Controlli integrità" } } }, @@ -3270,7 +4449,8 @@ }, "type": { "movie": "Film", - "episode": "Episodio" + "episode": "Episodio", + "book": "Libro" }, "empty": { "missing": "Nessun elemento mancante", @@ -3301,6 +4481,13 @@ "showPosterImage": { "label": "Mostra immagine poster" } + }, + "error": { + "allFeedsFailed": "Impossibile caricare i feed RSS. Controlla gli URL del feed e riprova." + }, + "warning": { + "partial": "{count, plural, one {# feed RSS non può essere caricato} other {# feed RSS non può essere caricato}}", + "stale": "I feed RSS non possono essere aggiornati. Mostrando le voci precedentemente caricate." } }, "releases": { @@ -3376,17 +4563,8 @@ "label": "Espressione regolare" } }, - "edit": { - "label": "Modifica" - }, "editForm": { - "title": "Modifica Repository", - "cancel": { - "label": "Annulla" - }, - "confirm": { - "label": "Conferma" - } + "title": "Modifica Repository" }, "importForm": { "title": "Importa da Docker" @@ -3403,8 +4581,7 @@ "label": "Token Provider", "token": "Token", "configured": "Token configurato", - "notConfigured": "Nessun token impostato", - "save": "Salva" + "notConfigured": "Nessun token impostato" } } }, @@ -3431,17 +4608,32 @@ "noProviderResponse": "Nessuna risposta dal provider", "unexpected": "Errore provider inaspettato" } - } + }, + "expandDetails": "Mostra dettagli per {name}", + "collapseDetails": "Nascondi dettagli per {name}" }, "networkControllerSummary": { - "option": {}, - "card": { - "vpn": { - "countConnected": "{count} connesso" + "advanced": { + "updated": "Aggiornato", + "metric": { + "latency": "Latenza", + "ping": "Ping", + "uptime": "Uptime", + "users": "Utenti", + "guests": "Ospiti" } }, + "card": { + "vpn": { + "countConnected": "{count, plural, one {# connesso} other {# connesso}}", + "label": "VPN" + }, + "wan": "WAN", + "web": "Web", + "wifi": "Wi-Fi", + "lan": "LAN" + }, "error": { - "integrationsDisconnected": "Nessun dato disponibile, tutte le integrazioni disconnesse", "unknownContentOption": "Opzione contenuto sconosciuto per il widget di riepilogo del controller di rete: " }, "name": "Riepilogo Controller Di Rete", @@ -3478,7 +4670,6 @@ } }, "error": { - "integrationsDisconnected": "Nessun dato disponibile, tutte le integrazioni sono disconnesse", "unknownContentOption": "Opzione contenuto sconosciuto per il widget stato rete: " }, "name": "Stato della rete", @@ -3508,7 +4699,6 @@ "versiontitle": "Versioni", "cputitle": "Uso della CPU", "memorytitle": "Memoria utilizzata", - "cpu": "CPU", "memory": "Memoria", "interfaces": { "name": "nome", @@ -3516,6 +4706,16 @@ "recv": "Ricevuto", "title": "Interfacce di Rete" } + }, + "empty": { + "noInterfaces": "Ancora nessun dato di interfaccia di rete" + }, + "versionUnknown": "Versione sconosciuta", + "metricAccessible": "{metric}: {value}%, {status}", + "status": { + "normal": "Normale", + "warning": "Attenzione", + "critical": "Critico" } }, "notifications": { @@ -3525,8 +4725,21 @@ "option": { "hideLogos": { "label": "Nascondi loghi" + }, + "messageFormat": { + "label": "Formato messaggio", + "option": { + "auto": "Automatico", + "plain": "Testo semplice", + "markdown": "Markdown", + "html": "HTML" + } } - } + }, + "openService": "Apri servizio di notifica", + "deleteNotification": "Elimina notifica da Gotify", + "deleteFailed": "Impossibile eliminare la notifica", + "deleteFailedMessage": "La notifica non può essere eliminata. Riprova." }, "speedtestTracker": { "name": "SpeedTest Tracker", @@ -3568,7 +4781,6 @@ } }, "uptimeKuma": { - "name": "Uptime Kuma", "description": "Monitora le statistiche di uptime dalla tua pagina di stato Uptime Kuma", "option": { "showAverageUptime": { @@ -3605,10 +4817,14 @@ }, "error": { "internalServerError": "Impossibile recuperare i dati di uptime" + }, + "status": { + "up": "Totale operativo", + "down": "Velocità Di Download", + "paused": "In pausa" } }, "traefik": { - "name": "Traefik", "description": "Panoramica dei router, dei servizi, dei middleware e dei punti di ingresso di Traefik", "option": { "showTcp": { @@ -3629,7 +4845,6 @@ }, "resource": { "routers": "Routers", - "services": "Servizi", "middlewares": "Middleware" }, "status": { @@ -3639,7 +4854,20 @@ }, "error": { "internalServerError": "Recupero dei dati Traefik non riuscito" - } + }, + "resourceType": { + "router": "Router", + "service": "Servizio", + "middleware": "Middleware" + }, + "resourceStatus": { + "enabled": "Abilitato", + "disabled": "Disabilitato", + "warning": "Attenzione", + "error": "Errore", + "unknown": "Sconosciuto" + }, + "failedEndpoint": "Fallito: {endpoint}" }, "audioStats": { "name": "Statistiche audio", @@ -3705,9 +4933,7 @@ "label": "Grafici visibili", "description": "Seleziona i grafici che vuoi essere visibili.", "option": { - "cpu": "CPU", "memory": "Memoria", - "gpu": "GPU", "network": "Rete" } }, @@ -3722,12 +4948,11 @@ } }, "card": { - "cpu": "CPU", "memory": "MEM", - "gpu": "GPU", "network": "NET", "up": "SU", - "down": "DOWN" + "down": "DOWN", + "memoryTooltip": "{used} / {available} ({percent}%)" } }, "systemDisks": { @@ -3753,20 +4978,35 @@ }, "showBackgroundBar": { "label": "Mostra barra di utilizzo in background" - }, - "visibleStorageVolumes": { - "label": "Volumi di archiviazione visibili", - "description": "Disponibile solo se tutte le integrazioni selezionate sono Synology. Lasciare vuoto per visualizzare tutti i volumi di archiviazione rilevati.", - "placeholder": "Selezionare volumi di archiviazione" } }, "status": { - "unhealthy": "Compromesso" + "unhealthy": "Compromesso", + "smart": "SMART", + "free": "{percentage}% gratis" } }, "customApi": { "name": "API Personalizzata", "description": "Visualizza dati da qualsiasi API esterna con configurazione personalizzata.", + "customJsx": { + "noTemplate": "Nessun modello JSX è configurato.", + "templateWarnings": "{count} template warnings:", + "requestIdRequired": "Questo controllo di rete richiede un requestId.", + "unsavedPreview": "Eseguire il test di richiesta iniziale nell'editor prima di testare le richieste con nome.", + "invalidParams": "I parametri della richiesta non sono validi.", + "loading": "Caricamento richiesta...", + "loadRequest": "Carica richiesta", + "requestFailed": "Richiesta non riuscita.", + "retry": "Riprova richiesta", + "actionCompleted": "Azione completata con successo.", + "actionSimulated": "Azione simulata; nessuna richiesta è stata inviata.", + "actionsDisabledEditMode": "Le azioni sono disabilitate mentre la scheda è in modalità modifica.", + "widgetItemUnavailable": "Questo elemento widget non è disponibile.", + "toggle": "Attiva/disattiva", + "copied": "Copiato", + "confirmDelete": "Confermare questa azione distruttiva." + }, "option": { "definitionId": { "label": "ID Definizione" @@ -3777,142 +5017,49 @@ } }, "noDefinition": "Nessuna definizione selezionata", - "definitionNotFound": "Definizione del widget non trovata. Potrebbe essere stata eliminata." + "definitionNotFound": "Definizione del widget non trovata. Potrebbe essere stata eliminata.", + "migrationRequired": "Questo widget personalizzato è conservato, ma deve essere migrato in JSX v2 personalizzato da Gestisci widget personalizzati prima che possa essere eseguito.", + "manageMigration": "Apri Gestisci widget personalizzati", + "contactAdmin": "Contattare un amministratore.", + "configurationNeedsRepair": "Le opzioni di questo widget sono cambiate. Modifica il widget per ripararne la configurazione.", + "removeFromBoard": "Rimuovi dalla scheda", + "editModePending": "Salva la scheda per caricare questo widget.", + "picker": { + "group": "Widget JSX personalizzati", + "empty": "Nessun widget personalizzato trovato", + "preview": "Anteprima", + "sources": "{count, plural, one {# sorgente} other {# sorgenti}}", + "requests": "{count, plural, one {# richiesta} other {# richieste}}", + "migrationRequired": "Migrazione richiesta", + "migrationDescription": "Questo widget v1 non può ancora essere eseguito. Copiare il suo prompt redatto in un LLM, quindi incollare la risposta JSON singola in Homarr.", + "manageMigration": "Apri Gestisci widget personalizzati", + "contactAdmin": "Contattare un amministratore." + }, + "configuration": { + "needsAttention": "La configurazione richiede attenzione: {message}", + "advancedOptions": "Opzioni avanzate", + "invalidJson": "JSON non valido" + } }, "beszelSystemTable": { "name": "Sistemi Beszel (Tabella)", "description": "Vista tabellare di tutti i sistemi monitorati da Beszel con colonne ordinabili e indicatori di stato", "option": { - "statusFilter": { - "label": "Filtro stato" - }, "sortBy": { "label": "Ordina per" }, "sortDirection": { "label": "Direzione ordinamento" - }, - "showCpu": { - "label": "Mostra CPU" - }, - "showMemory": { - "label": "Mostra memoria" - }, - "showDisk": { - "label": "Mostra disco" - }, - "showGpu": { - "label": "Mostra GPU" - }, - "showLoadAvg": { - "label": "Mostra carico medio" - }, - "showNet": { - "label": "Mostra rete" - }, - "showTemp": { - "label": "Mostra temperatura" - }, - "showBattery": { - "label": "Mostra batteria" - }, - "showServices": { - "label": "Mostra servizi" - }, - "showUptime": { - "label": "Mostra uptime" - }, - "showAgent": { - "label": "Mostra versione agente" - }, - "columnOrder": { - "label": "Ordine delle colonne" - }, - "columnWidths": { - "label": "Larghezza delle colonne" } }, - "noRecords": "Nessun sistema trovato", "error": { - "internalServerError": "Impossibile connettersi a Beszel. Controlla le tue impostazioni di integrazione.", "layoutSaveTitle": "Impossibile salvare il layout della tabella", "layoutSaveMessage": "Impossibile salvare l'ordine o la larghezza delle colonne. Riprova." - }, - "column": { - "system": "Sistema", - "cpu": "CPU", - "memory": "Memoria", - "disk": "Disco", - "gpu": "GPU", - "loadAvg": "Carico Medio", - "net": "Rete", - "temp": "Temp", - "battery": "Bat", - "services": "Servizi", - "uptime": "Uptime", - "agent": "Agente" } }, "beszelSystemGrid": { "name": "Sistemi Beszel (Griglia)", - "description": "Vista a griglia di card di tutti i sistemi monitorati da Beszel con metriche in tempo reale", - "option": { - "statusFilter": { - "label": "Filtro stato" - }, - "showCpu": { - "label": "Mostra CPU" - }, - "showMemory": { - "label": "Mostra memoria" - }, - "showDisk": { - "label": "Mostra disco" - }, - "showGpu": { - "label": "Mostra GPU" - }, - "showLoadAvg": { - "label": "Mostra carico medio" - }, - "showNet": { - "label": "Mostra rete" - }, - "showTemp": { - "label": "Mostra temperatura" - }, - "showBattery": { - "label": "Mostra batteria" - }, - "showServices": { - "label": "Mostra servizi" - }, - "showUptime": { - "label": "Mostra uptime" - }, - "showAgent": { - "label": "Mostra versione agente" - } - }, - "error": { - "internalServerError": "Impossibile connettersi a Beszel. Controlla le tue impostazioni di integrazione." - }, - "empty": { - "noSystems": "Nessun sistema trovato" - }, - "metric": { - "cpu": "CPU", - "memory": "Memoria", - "disk": "Disco", - "gpu": "GPU", - "loadAvg": "Carico Medio", - "net": "Rete", - "temp": "Temp", - "battery": "Bat", - "services": "Servizi", - "uptime": "Uptime", - "agent": "Agente" - } + "description": "Vista a griglia di card di tutti i sistemi monitorati da Beszel con metriche in tempo reale" }, "beszelAlerts": { "name": "Avvisi Beszel", @@ -3926,11 +5073,12 @@ } }, "empty": "Nessun avviso configurato", - "error": { - "internalServerError": "Impossibile connettersi a Beszel. Controlla le tue impostazioni di integrazione." - }, "history": "Cronologia", "resolved": "Risolto", + "alertDescription": { + "statusDuration": "Giù per {minutes} min", + "threshold": "Exceeds {value} over {minutes} min" + }, "status": { "triggered": "Attivato", "ok": "OK" @@ -3977,16 +5125,16 @@ "noSystems": "Nessun sistema trovato" }, "error": { - "internalServerError": "Impossibile connettersi a Beszel. Controlla le tue impostazioni di integrazione.", "liveConnectionFailed": "Connessione Live non riuscita. L'istanza di Beszel potrebbe non supportare lo streaming in tempo reale.", "switchToHistorical": "Passa alla visualizzazione storica", - "systemNotFound": "Il sistema selezionato non è stato trovato. Scegli un sistema diverso." + "systemNotFound": "Il sistema selezionato non è stato trovato. Scegli un sistema diverso.", + "selectionSaveTitle": "Impossibile salvare la selezione", + "selectionSaveMessage": "Impossibile salvare la selezione del sistema o del periodo di tempo. Riprova." }, "chart": { "cpu": { "title": "Utilizzo CPU", - "subtitle": "Utilizzo medio della CPU a livello di sistema", - "series": "CPU" + "subtitle": "Utilizzo medio della CPU a livello di sistema" }, "memory": { "title": "Utilizzo Memoria", @@ -4028,39 +5176,550 @@ "title": "I/O Rete Docker", "subtitle": "Traffico di rete dei container docker" } + }, + "period": { + "live": "Live", + "oneHour": "1h", + "twelveHours": "12h", + "oneDay": "24h", + "oneWeek": "1w", + "thirtyDays": "30d" } }, - "wud": { - "name": "Cos'è Il Docker", - "description": "Mostra quanti contenitori visti hanno aggiornamenti disponibili.", - "title": "Cos'è Il Docker", - "monitored": "Monitorato", - "updatesAvailable": "{count, plural, one {# aggiornamento disponibile} other {# aggiornamenti disponibili}}", - "updateAvailable": "Aggiornamento disponibile", - "openReleaseNotes": "Apri note di rilascio", + "assistant": { + "name": "Assistente", + "description": "Avere una conversazione assistente completa direttamente sul vostro tavolo.", + "unavailable": { + "title": "Assistente non disponibile", + "description": "Accedi e chiedi all'amministratore di configurare l'Assistente dal pannello di gestione." + }, + "compact": { + "title": "Assistente", + "description": "Ridimensiona questo widget in chat o apri la conversazione completa.", + "open": "Apri assistente", + "openTitle": "Assistente aperto nel pannello laterale", + "openDescription": "La conversazione rimane in una superficie attiva.", + "returnToWidget": "Restituisce la conversazione a questo widget", + "otherWidgetTitle": "Assistente attivo in un altro widget", + "otherWidgetDescription": "Solo una superficie di conversazione rimane attiva alla volta.", + "useHere": "Usa l'assistente in questo widget" + } + }, + "beszel": { + "error": { + "internalServerError": "Impossibile connettersi a Beszel. Controlla le tue impostazioni di integrazione." + }, + "empty": { + "noSystems": "Nessun sistema trovato" + }, + "options": { + "statusFilter": { + "label": "Filtro stato" + }, + "showCpu": { + "label": "Mostra CPU" + }, + "showMemory": { + "label": "Mostra memoria" + }, + "showDisk": { + "label": "Mostra disco" + }, + "showGpu": { + "label": "Mostra GPU" + }, + "showLoadAvg": { + "label": "Mostra carico medio" + }, + "showNet": { + "label": "Mostra rete" + }, + "showTemp": { + "label": "Mostra temperatura" + }, + "showBattery": { + "label": "Mostra batteria" + }, + "showServices": { + "label": "Mostra servizi" + }, + "showUptime": { + "label": "Mostra uptime" + }, + "showAgent": { + "label": "Mostra versione agente" + } + }, + "metric": { + "system": "Sistema", + "source": "Integrazione", + "hostname": "Nome host", + "cpuModel": "Modello CPU", + "cores": "Core", + "memoryTotal": "Memoria totale", + "memory": "Memoria", + "disk": "Disco", + "loadAvg": "Carico Medio", + "net": "Rete", + "temp": "Temp", + "battery": "Bat", + "uptime": "Uptime", + "agent": "Agente" + } + }, + "llamacpp": { + "name": "llama.cpp", + "description": "Mostra la salute, il modello caricato e la velocità di generazione del tuo server locale llama.cpp.", + "title": "llama.cpp", + "status": { + "unhealthy": "Non Sano ({status})" + }, + "idle": "Inattivo", + "speedTooltip": { + "current": "Velocità di generazione corrente", + "average": "Velocità media di generazione dall'avvio", + "request": "Velocità media dall'inizio di questa richiesta" + }, + "busy": "{count, plural, one {# richiesta in esecuzione} other {# richieste in esecuzione}}", + "modelInfo": { + "context": "Contesto", + "size": "Dimensione file", + "parameters": "Parametri", + "model": "Modello", + "quantization": "Quantizzazione" + }, + "stats": { + "tokensProcessed": "Token elaborati", + "contextUsage": "Uso contestuale / KV", + "cacheHitRate": "Avverte il tasso di hit della cache", + "tokensGenerated": "Token generati" + }, + "error": { + "unreachable": "llama-server non è raggiungibile" + }, + "unit": { + "speed": "{value} t/s", + "parameters": "{value}B", + "none": "—", + "speedShort": "t/s" + }, "option": { "showTitle": { "label": "Mostra titolo" }, - "showRing": { - "label": "Mostra anello di aggiornamento" + "showModelInfo": { + "label": "Mostra informazioni modello" }, - "layout": { - "label": "Layout", + "showContextUsage": { + "label": "Mostra utilizzo contestuale" + }, + "showCacheHitRate": { + "label": "Mostra tasso di hit della cache" + }, + "showSpeedStats": { + "label": "Mostra statistiche di velocità" + }, + "showRequests": { + "label": "Mostra carico richiesta" + }, + "showTokenStats": { + "label": "Mostra totali token" + }, + "showSpeculative": { + "label": "Mostra decodifica speculativa" + } + }, + "advanced": { + "promptSpeed": "Avvisa velocità", + "avgSpeed": "Generazione media", + "requests": "Richieste", + "deferred": "Differito", + "slots": "{processing}/{total} slot occupati", + "speculative": "Decodifica speculativa", + "avgPrompt": "Richiesta media", + "specDrafts": "Bozze specifiche", + "specAccepted": "Spec. token accettati", + "specDraftTokens": "Spec. bozze di gettoni" + } + }, + "stats": { + "name": "Statistiche", + "description": "Combina le statistiche dalle tue integrazioni in un widget configurabile.", + "configure": "Configura metriche", + "refresh": "Aggiorna statistiche", + "empty": "Aprire le impostazioni del widget, selezionare le integrazioni, quindi aggiungere le metriche.", + "editorHelp": "Aggiungi metriche dalle integrazioni selezionate per questo widget. Le modifiche sono salvate con la tua dashboard.", + "source": "Integrazione", + "metric": "Metrico", + "noMetrics": "Nessuna statistica disponibile per questa integrazione", + "add": "Aggiungi metrica", + "label": "Etichetta personalizzata", + "hidden": "Nascosto", + "compact": "Numeri compatti", + "moveUp": "Sposta in alto", + "moveDown": "Sposta in basso", + "remove": "Rimuovi metrica", + "loading": "Caricamento…", + "unavailable": "Unavailable", + "refreshFailed": "Aggiornamento non riuscito — mostra i dati salvati", + "stale": "Dati salvati — aggiorna per aggiornare", + "table": { + "value": "Valore", + "status": "Stato" + }, + "option": { + "table": { + "label": "Vista tabella" + }, + "rows": { + "label": "Righe compatte" + }, + "showIcon": { + "label": "Mostra icona sorgente" + }, + "spacing": { + "label": "Spaziatura", "option": { - "horizontal": { - "label": "Orizzontale" + "xs": { + "label": "Compatto" }, - "vertical": { - "label": "Verticale" + "sm": { + "label": "Confortevole" + }, + "md": { + "label": "Spazioso" } } }, - "showUpdateList": { - "label": "Mostra elenco aggiornamenti container", - "description": "Elenca ogni contenitore monitorato che ha un aggiornamento dell'immagine disponibile" + "entries": { + "label": "Metriche" + }, + "plain": { + "label": "Rimuovi sfondi carta" } - } + }, + "fetchFailed": "Impossibile recuperare le statistiche", + "viewOptions": "Personalizza questa vista", + "moreMetrics": "{count} in vista avanzata", + "localHelp": "Layout, formattazione e visibilità si applicano solo a questa vista. Le impostazioni della scheda condivisa rimangono invariate.", + "plain": "Rimuovi sfondi carta", + "resetView": "Reimposta vista", + "allHidden": "Tutte le metriche sono nascoste in questa vista. Usa Personalizza questa vista per ripristinarle." + }, + "wazuh": { + "target": { + "api": "API server Wazuh", + "indexer": "Indicatore di Wazuh", + "wazuh": "Wazuh" + }, + "severity": { + "low": "Basso", + "medium": "Medio", + "high": "Alto", + "critical": "Critico" + }, + "error": { + "unauthorized": { + "title": "{target} ha rifiutato le credenziali", + "description": "Controlla il nome utente e la password salvati sull'integrazione di Wazuh. L'API del server (porta 55000) e l'indicizzatore (porta 9200) usano utenti separati." + }, + "certificate": { + "title": "Il certificato {target} non è attendibile", + "description": "Wazuh utilizza un certificato autofirmato per impostazione predefinita. Eseguire \"Verifica connessione\" sull'integrazione e fidarsi del certificato, o aggiungere la propria CA in Impostazioni → Certificati." + }, + "unreachable": { + "title": "Impossibile raggiungere {target}", + "description": "L'host ha rifiutato o eliminato la connessione. Controlla l'URL, la porta e il firewall. L'indicizzatore ascolta solo su localhost in un'installazione all-in-one predefinita." + }, + "timeout": { + "title": "{target} scaduto", + "description": "Nessuna risposta entro 15 secondi. Il servizio potrebbe essere sovraccaricato o l'indirizzo potrebbe essere errato." + }, + "status": { + "title": "{target} ha restituito un errore", + "description": "Richiesta fallita con stato HTTP {status}." + }, + "invalidResponse": { + "title": "Risposta inattesa da {target}", + "description": "Verificare che l'URL punti all'API o all'indicizzatore del server Wazuh e non alla dashboard." + }, + "indexerRequired": { + "title": "Sono richieste credenziali indicizzatore Wazuh", + "description": "Gli avvisi, le vulnerabilità e gli eventi di integrità dei file sono letti dall'indicizzatore Wazuh. Aggiungi un URL indicizzatore, nome utente e password all'integrazione." + }, + "unknown": { + "title": "Impossibile caricare i dati da {target}", + "description": "Controlla i log di Homarr per i dettagli." + } + }, + "range": { + "1h": "1h", + "24h": "24h", + "7d": "7d", + "30d": "30d" + }, + "levelTooltip": "Regola livello {level} ({severity})" + }, + "wazuhAgents": { + "name": "Agenti di Wazuh", + "description": "Lista ordinabile di agenti Wazuh con stato, OS, versione e ultima keepalive", + "option": { + "statusFilter": { + "label": "Mostra agenti" + }, + "sortBy": { + "label": "Ordina per" + }, + "showVersion": { + "label": "Mostra colonna versione Wazuh" + }, + "showGroups": { + "label": "Mostra colonna gruppi" + } + }, + "title": "Agenti", + "total": "{count} agenti", + "status": { + "active": "Attivo", + "disconnected": "Disconnesso", + "neverConnected": "Mai connesso", + "pending": "In sospeso" + }, + "statusLabel": { + "active": "Attivo", + "disconnected": "Disconnesso", + "never_connected": "Mai connesso", + "pending": "In sospeso", + "unknown": "Sconosciuto" + }, + "live": "Live", + "snapshot": "Snapshot {age} vecchio", + "snapshotHint": "Leggi dallo snapshot agente di Wazuh (wazuh-monitoring) scattato su {time}. Aggiungi credenziali API del server per i dati live.", + "staleSnapshot": "L'istantanea dell'agente da {time} è obsoleta. Controllare che il processo di monitoraggio della dashboard di Wazuh sia in esecuzione, o aggiungere credenziali API del server.", + "noDisconnected": "Tutti gli agenti sono connessi", + "empty": "Nessun agente corrisponde a questo filtro", + "column": { + "status": "Stato", + "name": "Nome del job", + "ip": "IP", + "os": "OS", + "version": "Versione", + "lastKeepAlive": "Mantenimento", + "groups": "Gruppi" + }, + "outdated": "Più vecchio della versione più recente dell' agente ({version})" + }, + "wazuhAlerts": { + "name": "Feed avvisi Wazuh", + "description": "Recenti avvisi Wazuh con livello, tecniche MITRE ATT&CK, agente e IP sorgente", + "option": { + "minLevel": { + "label": "Livello minimo regola", + "description": "Livelli Wazuh: 0-6 bassi, 7-11 medio, 12-14 alti, 15+ critico" + }, + "hours": { + "label": "Finestra temporale (ore)" + }, + "limit": { + "label": "Numero di segnalazioni" + }, + "showMitre": { + "label": "Show MITRE ATT&CK techniques" + }, + "showAgent": { + "label": "Mostra agente" + }, + "showSourceIp": { + "label": "Mostra IP sorgente" + }, + "showRuleId": { + "label": "Mostra ID regola" + } + }, + "title": "Avvisi · livello {level}+ · {hours}h", + "empty": "Nessun avviso a questo livello. Tutto tranquillo.", + "rule": "Regola {id}", + "openInDashboard": "Apri questo avviso nella dashboard di Wazuh" + }, + "wazuhSummary": { + "name": "Gravità di allarme Wazuh", + "description": "Disaggregazione della gravità dell’allerta con una tendenza rispetto al periodo precedente", + "option": { + "range": { + "label": "Intervallo di tempo" + }, + "showTrend": { + "label": "Mostra la tendenza rispetto al periodo precedente" + }, + "showFooter": { + "label": "Mostra piè di pagina" + } + }, + "title": "Gravità di allerta · {range}", + "alerts": "avvisi", + "none": "Nessun avviso", + "trend": { + "new": "nuovo", + "tooltip": "Periodo precedente: {previous}" + }, + "previous": "Precedente {range}: {count}", + "maxLevel": "Livello massimo {level}", + "health": "Salute dell'indicizzatore: {status}", + "manager": "Manager {version}" + }, + "wazuhTimeline": { + "name": "Wazuh alerts timeline", + "description": "Grafico impilato degli avvisi Wazuh nel tempo per gravità", + "option": { + "range": { + "label": "Intervallo di tempo" + }, + "interval": { + "label": "Intervallo" + }, + "chartType": { + "label": "Tipo di grafico" + }, + "yScale": { + "label": "Scala asse Y", + "description": "La radice quadrata mantiene gli avvisi alti e critici visibili accanto a migliaia di quelli bassi" + }, + "minLevel": { + "label": "Livello minimo regola" + }, + "showLegend": { + "label": "Mostra legenda con i totali" + } + }, + "title": "Avvisi timeline · {range}", + "total": "{count} avvisi", + "interval": "per {interval}" + }, + "wazuhTopList": { + "name": "Wazuh top list", + "description": "Regole principali, agenti, IP di origine o tattiche e tecniche di MITRE ATT&CK per numero di allerta", + "option": { + "kind": { + "label": "Rango" + }, + "range": { + "label": "Intervallo di tempo" + }, + "limit": { + "label": "Numero di voci" + }, + "minLevel": { + "label": "Livello minimo regola" + }, + "showBars": { + "label": "Mostra barre" + } + }, + "title": { + "rules": "Regole top · {range}", + "agents": "Top agent · {range}", + "sourceIps": "Ip di origine superiore · {range}", + "mitreTactics": "Tattiche MITRE · {range}", + "mitreTechniques": "MITRE techniques · {range}" + }, + "empty": { + "rules": "Nessun avviso in questo periodo", + "agents": "Nessun avviso in questo periodo", + "sourceIps": "Nessun avviso con un IP sorgente in questo periodo", + "mitreTactics": "Nessun avviso mappato a MITRE ATT&CK in questo periodo", + "mitreTechniques": "Nessun avviso mappato a MITRE ATT&CK in questo periodo" + }, + "totalTooltip": "{count} corrispondenti avvisi", + "private": "LAN", + "public": "Pubblico", + "agents": "Visto su agenti {count}", + "others": "{count} altri avvisi in altre voci" + }, + "wazuhVulnerabilities": { + "name": "vulnerabilità di Wazuh", + "description": "Conteggio vulnerabilità, CVE di punta e agenti più vulnerabili", + "option": { + "cveOrder": { + "label": "Classifica CVE di" + }, + "minSeverity": { + "label": "Gravità del CVE" + }, + "cveLimit": { + "label": "Numero di CVE" + }, + "agentLimit": { + "label": "Numero di agenti" + }, + "showAgents": { + "label": "Mostra gli agenti più vulnerabili" + } + }, + "title": "Vulnerabilità", + "topCves": "Cvs Migliori", + "score": "Punteggio", + "agentsShort": "Agenti", + "topAgents": "Agenti più vulnerabili", + "criticalHigh": "Critico / Alto", + "totalTooltip": "{count} rilevamenti su {agents} agenti", + "affected": "{count} agenti", + "empty": "Nessuna vulnerabilità rilevata", + "distribution": "Distribuzione della gravità. I {unscored} rilevamenti senza un punteggio non vengono mostrati.", + "worst": "Peggio: {id} ({score}) su agenti {agents}" + }, + "wazuhFim": { + "name": "Integrità file Wazuh", + "description": "Monitoraggio dell'integrità dei file recenti (syscheck)", + "option": { + "range": { + "label": "Intervallo di tempo" + }, + "event": { + "label": "Eventi" + }, + "limit": { + "label": "Numero di eventi" + }, + "includeRegistry": { + "label": "Includi eventi del Registro di sistema di Windows" + } + }, + "title": "Integrità del file · {range}", + "event": { + "added": "Aggiunto in data", + "modified": "Modificato", + "deleted": "Eliminato", + "unknown": "Modificato" + }, + "empty": "Nessun evento di integrità file in questo periodo", + "user": "di {user}", + "registry": "Registro" + }, + "wazuhAuthFailures": { + "name": "Autenticazione Wazuh fallita", + "description": "Accessi falliti e avvisi brute-force per agente con scintille orarie", + "option": { + "hours": { + "label": "Finestra temporale (ore)" + }, + "limit": { + "label": "Numero di agenti" + }, + "showSourceIps": { + "label": "Mostra IP di origine superiore" + } + }, + "title": "Auth falliti · {hours}h", + "seriesTooltip": "Tutti gli agenti nell'ultimo {hours}h", + "peak": "Picco {count}/bucket", + "empty": "Nessun login fallito in questo periodo", + "failed": "Login fallito", + "failedHint": "Errore di autenticazione singolo (sshd, PAM, accesso di Windows, utenti non validi)", + "bruteForce": "Forza bruta", + "bruteForceHint": "Regole di forza brutale correlate (fallimenti multipli in un breve periodo, MITRE T1110)", + "sourceIps": "IP Sorgenti", + "ipTooltip": "{ip}: {count} fallimenti", + "bruteForceCount": "Forza bruta {count}" } }, "widgetPreview": { @@ -4073,7 +5732,76 @@ } }, "board": { + "emptyState": { + "title": "Costruisci la tua prima vista", + "description": "Aggiungi un widget o un'app, o connetti un servizio e utilizza i suoi dati in questa scheda.", + "addWidget": "Aggiungi widget", + "addApp": "Aggiungi app", + "connectService": "Connetti servizio" + }, + "setupChecklist": { + "title": "Rendi utile questa scheda", + "description": "Pick up where you left off. Progress follow the content already on this board.", + "collapse": "Comprimi la lista di controllo delle impostazioni", + "dismiss": "Ignora la lista di controllo delle impostazioni", + "resume": "Continua la configurazione ({completed}/{total})", + "progress": "Progresso configurazione scheda", + "step": { + "content": { + "label": "Aggiungi contenuto utile", + "description": "Scegliere un widget e configurarlo prima che sia posizionato." + }, + "app": { + "label": "Aggiungi un'app", + "description": "Mantieni un servizio o uno strumento un clic lontano da questa scheda." + }, + "service": { + "label": "Collega un servizio", + "description": "Sblocca dati live e azioni per widget compatibili.", + "permissionDescription": "Un amministratore può collegare un servizio per sbloccare i dati dal vivo.", + "action": "Connetti" + } + } + }, "action": { + "addContent": "Aggiungi contenuto della scheda", + "settings": "Impostazioni scheda", + "switch": "Cambia scheda", + "switcher": { + "title": "Cambia scheda", + "search": { + "empty": "Nessuna scheda corrispondente \"{search}\"." + }, + "results": "Schede disponibili", + "preview": "Anteprima di {name} con elementi {count}", + "currentHidden": "Scheda corrente: {name}", + "keyboard": { + "navigate": "Navigate", + "open": "Apri", + "instructions": "Digitare per filtrare le schede. Usare i tasti freccia per spostarsi attraverso i risultati e Invio per aprire una scheda." + }, + "empty": { + "title": "Nessuna altra scheda", + "description": "Non ci sono altre schede a cui puoi accedere." + }, + "error": "Impossibile caricare le schede." + }, + "create": { + "availability": { + "checking": "Verifica disponibilità…", + "available": "{name} è disponibile" + }, + "notification": { + "success": { + "title": "Tavola creata", + "message": "La scheda {name} è stata creata" + }, + "error": { + "title": "Impossibile creare la scheda", + "message": "Impossibile creare la scheda {name}" + } + } + }, "duplicate": { "title": "Duplicare board", "message": "Questo duplicerà la board {name} con tutto il suo contenuto. Se le integrazioni di riferimento dei widget, che non hai il permesso di usare, saranno rimosse.", @@ -4089,14 +5817,19 @@ } }, "edit": { + "enter": "Modifica scheda", + "save": "Salva scheda", + "exit": "Esci dalla modalità di modifica", "notification": { "success": { - "title": "Modifiche applicate con successo", "message": "La board è stata salvata con successo" }, "error": { - "title": "Impossibile applicare le modifiche", "message": "La board non può essere salvata" + }, + "loadError": { + "title": "Impossibile avviare la modifica", + "message": "L'editor di schede non può essere caricato. La tua dashboard è ancora disponibile in modalità di visualizzazione." } }, "confirmLeave": { @@ -4104,62 +5837,6 @@ "message": "Ci sono modifiche non salvate. Vuoi davvero uscire?" } }, - "oldImport": { - "label": "Importa da homarr prima della versione 1.0.0", - "notification": { - "success": { - "title": "Importazione conclusa con successo", - "message": "La board è stata importata con successo" - }, - "error": { - "title": "Impossibile importare", - "message": "La board non può essere importata, controlla i log per ulteriori dettagli" - } - }, - "form": { - "file": { - "label": "Seleziona file JSON", - "invalidError": "File di configurazione non valido" - }, - "apps": { - "label": "Applicazioni", - "avoidDuplicates": { - "label": "Evita i duplicati", - "description": "Ignora le app in cui esiste già un'app con lo stesso href" - }, - "onlyImportApps": { - "label": "Importa solo app", - "description": "Aggiunge solo le app, il board deve essere ricreato manualmente" - } - }, - "name": { - "label": "Nome della board" - }, - "screenSize": { - "label": "Dimensione dello schermo", - "description": "Nelle versioni precedenti alla 1.0 esistevano tre modalità diverse, per cui era possibile scegliere il numero di colonne per ogni dimensione dello schermo.", - "option": { - "sm": "Piccolo", - "md": "Medio", - "lg": "Grande" - } - }, - "sidebarBehavior": { - "label": "Comportamento barra laterale", - "description": "Le barre laterali sono state rimosse nella versione 1.0, ora è possibile selezionare cosa fare con gli elementi al loro interno.", - "option": { - "lastSection": { - "label": "Ultima sezione", - "description": "La barra laterale verrà visualizzata sotto l'ultima sezione" - }, - "removeItems": { - "label": "Rimuovi elementi", - "description": "Gli elementi contenuti nella barra laterale verranno rimossi" - } - } - } - } - }, "quickCreateApp": { "modal": { "title": "Crea app al volo", @@ -4167,6 +5844,12 @@ } } }, + "landmark": { + "canvas": "Tela pannello impostazioni", + "leftRail": "Banco dashboard sinistro", + "rightRail": "Banco dashboard destro", + "items": "Elementi dashboard" + }, "field": { "pageTitle": { "label": "Titolo della pagina" @@ -4236,7 +5919,8 @@ } }, "primaryColor": { - "label": "Colore primario" + "label": "Colore primario", + "locked": "Il tuo amministratore mantiene il colore del marchio dell'istanza su ogni scheda." }, "secondaryColor": { "label": "Colore secondario" @@ -4276,9 +5960,6 @@ "xl": "Molto grande" } }, - "name": { - "label": "Nome" - }, "isPublic": { "label": "Pubblico", "description": "Le board pubbliche sono accessibili a tutti, anche senza un account." @@ -4298,9 +5979,44 @@ "title": "Layout", "responsive": { "title": "Layout responsive", + "description": "Ogni disposizione mantiene le proprie posizioni e dimensioni dei widget. Mobile e Base sono sempre disponibili; aggiungi layout personalizzati in qualsiasi punto di interruzione aggiuntivo.", "action": { "add": "Aggiungi layout" } + }, + "role": { + "mobile": "Mobile", + "base": "Base", + "custom": "Personalizzato" + }, + "custom": { + "defaultName": "Layout personalizzato" + }, + "mobile": { + "breakpointDescription": "Mobile è sempre utilizzato da 0px fino al prossimo breakpoint di layout." + }, + "preview": { + "columns": "colonne", + "empty": "Questo layout è vuoto", + "dynamicSection": "Sezione dinamica", + "editorWidthLabel": "{layoutName} · {width}px" + }, + "reset": { + "action": "Ripristina dalla base", + "confirm": { + "title": "Reset {layoutName}?", + "message": "Sostituisce ogni posizione e dimensione salvata in questo layout con un nuovo layout generato dalla Base. Questo non può essere annullato." + } + }, + "edit": { + "action": "Modifica layout", + "saveAndEdit": "Salva e modifica", + "save": "Salva layout", + "cancel": { + "action": "Annulla modifica layout", + "title": "Scartare le modifiche del layout?", + "message": "Le modifiche non salvate a questo layout verranno scartate." + } } }, "background": { @@ -4337,10 +6053,7 @@ "rename": { "label": "Rinomina board", "description": "Cambiando il nome si interromperanno tutti i link a questa board.", - "button": "Cambia nome", - "modal": { - "title": "Rinomina board" - } + "button": "Cambia nome" }, "visibility": { "label": "Cambia visibilità della board", @@ -4364,9 +6077,7 @@ } }, "delete": { - "label": "Elimina questa board", "description": "Una volta eliminata una board, non è più possibile tornare indietro. Per favore, sii certo.", - "button": "Elimina questa board", "confirm": { "title": "Elimina board", "description": "Vuoi davvero eliminare questa board? Questa operazione eliminerà definitivamente la board e tutti i suoi contenuti." @@ -4411,28 +6122,41 @@ }, "layout": { "field": { - "name": { - "label": "Name" - }, "columnCount": { "label": "Numero di colonne" }, "breakpoint": { "label": "Breakpoint", "description": "Il layout verrà utilizzato su tutti gli schermi più grandi di questo breakpoint fino al breakpoint più grande successivo." + }, + "gutters": { + "label": "Barre laterali fisse", + "description": "Riserva fino a tre colonne del cruscotto su entrambi i lati. La superficie rimanente si riflette automaticamente.", + "left": { + "label": "Left sidebar", + "description": "Mantieni questa area visibile mentre il cruscotto scorre", + "thumbLabel": "Left sidebar width" + }, + "right": { + "label": "Barra laterale destra", + "description": "Mantieni questa area visibile mentre il cruscotto scorre", + "thumbLabel": "Larghezza barra laterale destra" + }, + "width": { + "label": "Larghezza in colonne" + }, + "preview": { + "label": "Anteprima layout pannello impostazioni" + } } } }, "management": { "metaTitle": "Gestione", - "title": { - "morning": "Buongiorno, {username}", - "afternoon": "Buon pomeriggio, {username}", - "evening": "Buona sera, {username}" - }, "notFound": { "title": "Non trovato", - "text": "Impossibile trovare la risorsa richiesta" + "text": "Impossibile trovare la risorsa richiesta", + "backToHome": "Torna alla casa di gestione" }, "error": { "title": "Questa pagina non può essere caricata", @@ -4441,20 +6165,10 @@ }, "navbar": { "items": { - "workshop": "Workshop", "home": "Home", - "boards": "Board", - "apps": "Applicazioni", - "integrations": "Integrazioni", - "customWidgets": "Custom Widgets", - "searchEngies": "Motori di ricerca", - "medias": "Media", "users": { - "label": "Utenti", "items": { - "manage": "Gestisci", - "invites": "Inviti", - "groups": "Gruppi" + "manage": "Gestisci" } }, "tools": { @@ -4462,10 +6176,7 @@ "items": { "docker": "Docker", "kubernetes": "Kubernetes", - "logs": "Log", "api": "API", - "certificates": "Certificati", - "tasks": "Attività", "backup": "Backup" } }, @@ -4479,21 +6190,12 @@ "sourceCode": "Codice sorgente" } }, - "about": "Info" + "about": "Info", + "assistant": "Assistente" } }, "page": { "home": { - "statistic": { - "board": "Board", - "user": "Utenti", - "invite": "Inviti", - "integration": "Integrazioni", - "app": "Applicazioni", - "group": "Gruppi", - "searchEngine": "Motori di ricerca", - "media": "Media" - }, "statisticLabel": { "boards": "Board", "resources": "Risorse", @@ -4531,13 +6233,8 @@ "tooltip": "Questa board verrà visualizzata come la tua board mobile" } }, - "duplicate": { - "label": "Duplica board" - }, "delete": { - "label": "Elimina definitivamente", "confirm": { - "title": "Elimina board", "description": "Sei sicuro di voler eliminare la board {name}?" } } @@ -4546,28 +6243,82 @@ "public": "Questa board è pubblica", "private": "Questa board è privata" }, - "noResults": { - "title": "Ancora nessuna board" + "preview": { + "label": "Anteprima del layout per {name}, con elementi {count}", + "unknownCreator": "Creatore sconosciuto" }, - "modal": { - "createBoard": { - "field": { - "name": { - "label": "Nome" - } - } - } + "noResults": { + "title": "Ancora nessuna board", + "description": "Crea una scheda per organizzare le tue app e widget in un unico posto." } }, "media": { "includeFromAllUsers": "Includi media da tutti gli utenti" }, "user": { - "back": "Torna agli utenti", "fieldsDisabledExternalProvider": "Alcuni campi sono disabilitati perché gestiti da un provider di autenticazione esterno.", "setting": { "general": { "title": "Generale", + "header": { + "title": "Studio intestazione", + "badge": "Personale", + "description": "Trascina i controlli in qualsiasi punto della riga. Sinistra, Centro e Destra rimangono fissi mentre i controlli si spostano intorno a loro.", + "device": { + "desktop": "Desktop", + "mobile": "Mobile" + }, + "zones": { + "left": "Sinistra", + "center": "Centro", + "right": "Destra" + }, + "action": { + "hide": "Nascondi l'intestazione", + "show": "Mostra l'intestazione", + "configure": "Sposta o configura {item}", + "remove": "Rimuovi {item}", + "dropIntoZone": "Sposta nella sezione {zone}" + }, + "preview": { + "board": "Anteprima pannello impostazioni per {name}", + "empty": "Nessun layout dashboard disponibile" + }, + "available": { + "title": "Controlli disponibili", + "description": "Aggiungi un controllo, quindi trascina il suo pulsante completo in posizione sopra.", + "requiredAlways": "Questo controllo è necessario, ma è possibile spostarlo ovunque nell'intestazione.", + "allAdded": "Ogni controllo integrato è già nella tua intestazione.", + "add": "Aggiungi {item}", + "boardShortcut": "Scorciatoia scheda", + "chooseBoard": "Scegli una scheda" + }, + "configuration": { + "description": "Questo controllo rimane la stessa dimensione di cui ha bisogno nell'intestazione live.", + "searchDisplay": { + "input": "Barra di ricerca", + "icon": "Solo icona" + }, + "logoDisplay": { + "logo": "Solo logo", + "logoAndText": "Logo + testo" + } + }, + "items": { + "logo": "Logo", + "search": "Cerca", + "home": "Home board", + "boardSwitcher": "Board", + "assistant": "Assistente", + "docker": "Docker", + "boardEdit": "Modifica scheda", + "boardSettings": "Impostazioni scheda", + "settings": "Le tue impostazioni", + "themeToggle": "Attiva/Disattiva tema", + "user": "Account", + "boardUnavailable": "Tavola non disponibile" + } + }, "item": { "language": "Lingua & Regione", "board": { @@ -4601,14 +6352,10 @@ }, "security": { "title": "Sicurezza" - }, - "board": { - "title": "Board" } }, "list": { - "metaTitle": "Gestisci utenti", - "title": "Utenti" + "metaTitle": "Gestisci utenti" }, "edit": { "metaTitle": "Modifica utente {username}" @@ -4662,9 +6409,6 @@ } }, "field": { - "id": { - "label": "ID" - }, "creator": { "label": "Creatore" }, @@ -4688,10 +6432,7 @@ }, "setting": { "title": "Impostazioni", - "alert": "Le impostazioni dei gruppi sono ordinate in base all'ordine dei gruppi nell'elenco. Le impostazioni in alto sovrascrivono quelle in basso.", - "board": { - "title": "Board" - } + "alert": "Le impostazioni dei gruppi sono ordinate in base all'ordine dei gruppi nell'elenco. Le impostazioni in alto sovrascrivono quelle in basso." }, "members": { "title": "Membri", @@ -4699,10 +6440,7 @@ "notFound": "Nessun membro trovato" }, "permissions": { - "title": "Permessi", - "form": { - "unsavedChanges": "Ci sono modifiche non salvate!" - } + "title": "Permessi" } } }, @@ -4711,12 +6449,10 @@ "notification": { "success": { "message": "Impostazioni salvate correttamente" - }, - "error": { - "message": "Impossibile salvare le impostazioni" } }, "section": { + "analyticsDocumentation": "Vedere esattamente ciò che i dati di analisi Homarr raccoglie", "analytics": { "title": "Analytics", "general": { @@ -4745,7 +6481,6 @@ } }, "board": { - "title": "Board", "homeBoard": { "label": "Home board globale", "mobileLabel": "Board mobile globale", @@ -4764,7 +6499,6 @@ } }, "user": { - "title": "Utenti", "enableGravatar": { "label": "Abilita Gravatar", "description": "Torna agli avatar degli utenti da Libravatar/Gravatar quando non è impostato alcun avatar personalizzato e viene configurata un'email" @@ -4780,12 +6514,86 @@ "appearance": { "title": "Aspetto", "defaultColorScheme": { - "label": "Schema colore predefinito", + "label": "Schema colore predefinito" + } + }, + "branding": { + "title": "Branding dell'istanza", + "groups": { + "identity": "Identità", + "appearance": "Aspetto", + "customCss": "Custom CSS", + "authentication": "Autenticazione" + }, + "identity": { + "description": "Il logo dell'applicazione è il segno più grande usato all'interno dell'app, sulle pagine di accesso e per le applicazioni installate. L'icona del browser (favicon) è il piccolo quadrato usato nelle schede e nei segnalibri; quando è vuoto, ritorna al logo dell'applicazione." + }, + "appName": { + "label": "Nome dell'applicazione" + }, + "greeting": { + "label": "Saluto personalizzato" + }, + "logo": { + "label": "Logo applicazione", + "placeholder": "/logo/logo.png" + }, + "favicon": { + "label": "Icona del browser (favicon)", + "placeholder": "Usa il logo dell'applicazione" + }, + "primaryColor": { + "label": "Colore primario" + }, + "secondaryColor": { + "label": "Accento secondario" + }, + "lockPrimaryColor": { + "label": "Mantieni questo colore su ogni scheda", + "description": "Impedisce ai colori della scheda di sostituire l’accento dell’applicazione." + }, + "signInBackground": { + "label": "Sfondo autenticazione", + "placeholder": "https://example.com/background.jpg" + }, + "signInOverlay": { + "label": "Sovrapposizione sfondo" + }, + "defaultRadius": { + "label": "Stile angolo", "options": { - "auto": "Automatico", - "light": "Chiaro", - "dark": "Scuro" + "xs": "Stretta", + "sm": "Tenue", + "md": "Bilanciato", + "lg": "Arrotondato", + "xl": "Morbido" } + }, + "customCss": { + "label": "Css personalizzato globale", + "description": "Applicato a ogni pagina. Il CSS personalizzato della scheda può sovrascriverlo." + }, + "authVisibility": { + "description": "Scegli quello che appare in ogni pagina di autenticazione.", + "appName": "Nome dell'applicazione", + "logo": "Logo applicazione", + "greeting": "Saluto" + }, + "summary": { + "title": "Marchio attuale", + "cornerStyle": "Stile angolo", + "palette": "Palette", + "backgroundConfigured": "Sfondo personalizzato · {overlay}% sovrapposizione", + "backgroundDefault": "Sfondo predefinito", + "greetingConfigured": "Saluto personalizzato", + "greetingDefault": "Saluto predefinito", + "boardColorLocked": "Colore scheda bloccato", + "boardColorFlexible": "Colori scheda consentiti", + "appName": "Nome del job", + "logo": "Logo", + "greeting": "Saluto", + "on": "Acceso", + "off": "Off" } }, "culture": { @@ -4793,12 +6601,177 @@ "defaultLocale": { "label": "Lingua predefinita" } + }, + "assistant": { + "loading": "Caricamento configurazione assistente", + "title": "Assistente", + "description": "Collegare un endpoint modello compatibile con OpenAI per l'assistente a livello di istanza.", + "security": { + "description": "Le chiavi API e i valori di intestazione aggiuntivi vengono crittografati nel database Homarr. Non vengono mai restituiti ai browser. Le richieste di modelli vengono inviate dal server Homarr direttamente all'endpoint configurato." + }, + "overview": { + "connectionReady": "Connessione pronta", + "unsavedChanges": "Modifiche non salvate", + "setupRequired": "Impostazione richiesta", + "disabled": "Disabilitato", + "noModel": "Nessun modello selezionato" + }, + "connection": { + "endpointTitle": "Provider e endpoint", + "description": "Scegliere un preset o collegare qualsiasi servizio che implementa l'API di completamento chat OpenAI.", + "save": "Salva connessione provider" + }, + "credentials": { + "title": "Credenziali", + "description": "Aggiungi i segreti di cui ha bisogno l'endpoint. I valori memorizzati rimangono cifrati e non possono essere letti.", + "required": "Chiave richiesta", + "optional": "Chiave opzionale", + "workshop": "Accesso GitHub per-utente" + }, + "provider": { + "title": "Provider", + "groups": { + "free": "Gratis con Homarr", + "hosted": "Provider ospitati", + "local": "Provider locali", + "custom": "Personalizzato" + }, + "options": { + "homarr": { + "description": "Un numero limitato di utilizzi assistenti sono gratuiti ogni giorno, pagati dal team di Homarr. Accedi con il Workshop della Comunità per utilizzare la tua indennità." + }, + "openrouter": { + "description": "Hosted model routing con un grande catalogo di modelli in grado di utensili." + }, + "openai": { + "description": "Completamenti chat OpenAI attraverso l'endpoint API ufficiale." + }, + "anthropic": { + "description": "Claude attraverso l'endpoint di compatibilità OpenAI SDK di Anthropic." + }, + "google-gemini": { + "description": "Gemini attraverso l'endpoint API OpenAI di Google." + }, + "xai": { + "description": "Modelli Grok attraverso l'API OpenAI compatibile con xAI." + }, + "groq": { + "description": "Incidenza ospitata veloce attraverso l'API OpenAI di Groq." + }, + "mistral": { + "description": "Modelli Mistral attraverso l'API ufficiale." + }, + "deepseek": { + "description": "DeepSeek modelli attraverso la sua API compatibile con OpenAI." + }, + "together": { + "description": "Ha ospitato i modelli aperti attraverso l'API OpenAI-compatibile di Together." + }, + "ollama": { + "description": "Un server Ollama locale o di rete che utilizza la sua API compatibile con OpenAI." + }, + "lm-studio": { + "description": "Un server locale di LM Studio con compatibilità OpenAI abilitata." + }, + "llama-cpp": { + "description": "Un server locale o di rete llama.cpp utilizzando la sua API compatibile con OpenAI." + }, + "custom": { + "label": "Endpoint personalizzato", + "description": "Qualsiasi altro endpoint compatibile con i Completamenti Chat OpenAI." + } + }, + "homarrAuth": { + "title": "Uso gratuito giornaliero dell'Assistente incluso", + "description": "Non è necessaria alcuna chiave API. Il team di Homarr copre un numero limitato di utilizzi per te ogni giorno. Accedi con il Workshop della Comunità per mantenere la tua indennità separata." + } + }, + "baseUrl": { + "title": "API base URL", + "description": "Includi il prefisso API, di solito /v1. Nei contenitori, localhost si riferisce al contenitore Homarr." + }, + "apiKey": { + "title": "Chiave API", + "required": "Richiesto da questo provider. Il valore è cifrato e in sola scrittura.", + "optional": "Facoltativo per gli endpoint locali. Lascialo vuoto quando il servizio non richiede l'autenticazione del portatore.", + "placeholder": "Inserisci una chiave API", + "savedTitle": "Chiave API cifrata salvata", + "savedDescription": "Homarr può usare questa chiave, ma non può visualizzare o recuperare il suo valore.", + "remove": "Rimuovi chiave API salvata", + "removeFlow": { + "title": "Rimuovere la chiave API salvata?", + "description": "Questo provider richiede una chiave API. La rimozione può fermare la scoperta del modello e le risposte assistenti fino a quando non viene salvata un'altra chiave.", + "optionalDescription": "L'endpoint interromperà la ricezione dell'autenticazione al portatore dopo che questa chiave è stata rimossa. Confermare che accetta richieste non autenticate o utilizza un'altra intestazione memorizzata.", + "cancel": "Mantieni la chiave salvata", + "confirm": "Rimuovi chiave API" + } + }, + "headers": { + "title": "Intestazioni aggiuntive della richiesta", + "description": "Intestazioni opzionali di autenticazione o routing. I valori dell'intestazione sono crittografati e di sola scrittura.", + "add": "Aggiungi intestazione", + "name": "Nome intestazione", + "value": "Valore intestazione", + "valuePlaceholder": "Valore segreto o routing", + "remove": "Rimuovi intestazione", + "configured": "Sono configurate intestazioni cifrate aggiuntive. L'aggiunta di intestazioni sostituisce il set completo memorizzato.", + "empty": "Nessuna intestazione aggiuntiva è memorizzata per questo provider.", + "savedBadge": "Intestazioni salvate", + "pendingRemoval": "Rimozione in sospeso", + "clear": "Rimuovi le intestazioni memorizzate durante il salvataggio", + "keep": "Mantieni le intestazioni memorizzate" + }, + "model": { + "title": "Modello", + "description": "Selezionare un modello scoperto o inserire un ID di modello di endpoint esatto.", + "placeholder": "ID Modello", + "refresh": "Aggiorna modelli", + "chooseModel": "Scegli il modello usato per le nuove conversazioni.", + "discoveryPath": "Percorso di scoperta del modello", + "discoveryPathDescription": "In allegato all'URL di base API. Lasciare vuoto per disabilitare la scoperta e utilizzare un ID modello manuale.", + "manual": "Inserisci un modello ID manualmente o salva la connessione per scoprire i modelli.", + "manualFallback": "Discovery non è disponibile. Puoi ancora inserire un ID modello manualmente.", + "saveConnectionFirst": "Salva la connessione provider prima di scegliere un modello.", + "discovering": "Aggiornamento dei modelli disponibili da questo provider…", + "discovered": "{count, plural, one {Scoperto # modello. Il supporto dello strumento dipende dall'endpoint e dal modello selezionati.} other {Scoperto # modelli. Il supporto dello strumento dipende dall'endpoint e dal modello selezionati.}}", + "discoveryFailed": "La scoperta del modello non è stata completata", + "context": "Finestra contestuale {count}", + "toolsConfirmed": "Strumenti pubblicizzati", + "toolsUnknown": "Verifica supporto strumento" + }, + "serverTools": { + "title": "Strumenti server", + "webSearch": { + "label": "Ricerca web", + "description": "Consenti al modello di cercare il web in diretta attraverso OpenRouter quando una richiesta richiede informazioni correnti. L'utilizzo della ricerca viene addebitato separatamente da OpenRouter.", + "proxyDescription": "Invia lo strumento del server di ricerca web di OpenRouter a questo endpoint. Abilitarlo solo quando l'endpoint personalizzato inoltra il formato degli strumenti server OpenRouter, come un proxy Router Homarr.", + "limit": "Il modello decide quando cercare, con un limite di 3 ricerche e 5 risultati per ricerca per ogni richiesta." + } + }, + "enabled": { + "label": "Abilita Assistente", + "description": "Mostra l'assistente a tutti gli utenti firmati. Le autorizzazioni Homarr esistenti continuano ad applicarsi ad ogni chiamata interna di strumenti." + }, + "save": "Salva assistente", + "notification": { + "connectionSaved": { + "title": "Connessione provider salvata", + "message": "L'endpoint e le credenziali crittografate sono pronte per la selezione del modello.", + "credentialsCleared": "Il punto finale è cambiato, quindi le credenziali precedenti sono state cancellate. Aggiungi credenziali per la nuova destinazione, se necessario." + }, + "saved": { + "title": "Impostazioni assistente salvate", + "message": "Il nuovo modello e le impostazioni di disponibilità sono attive." + }, + "error": { + "title": "Le impostazioni dell'assistente non possono essere salvate" + } + } } } }, "tool": { "tasks": { - "title": "Attività", "status": { "idle": "Inattivo", "running": "In esecuzione", @@ -4816,6 +6789,11 @@ "label": "Ping" } }, + "action": { + "run": "Avvia {name} ora", + "enable": "Abilita {name}", + "disable": "Disabilita {name}" + }, "interval": { "seconds": "Ogni {interval, plural, one {}=1 {secondo} other {# secondi}}", "minutes": "Ogni {interval, plural, one {}=1 {minuto} other {# minuti}}", @@ -4831,13 +6809,7 @@ } } }, - "settings": { - "title": "Impostazioni attività per {jobName}" - }, "field": { - "name": { - "label": "Nome" - }, "interval": { "label": "Intervallo di pianificazione" }, @@ -4851,11 +6823,6 @@ "table": { "search": "Cerca {count} attività..." }, - "action": { - "refresh": { - "label": "Aggiorna" - } - }, "refresh": { "success": { "message": "Attività aggiornate con successo" @@ -4889,7 +6856,6 @@ } }, "api": { - "title": "API", "modal": { "createApiToken": { "title": "Token API creato", @@ -4915,7 +6881,6 @@ }, "table": { "header": { - "id": "ID", "createdBy": "Creato da", "actions": "Azioni" } @@ -4971,43 +6936,12 @@ "availableTools": { "title": "Strumenti Disponibili", "description": "{count} strumenti disponibili. Espandi una categoria per vedere i singoli strumenti e le loro descrizioni.", - "columnType": "Tipo", - "columnName": "Strumento", - "columnDescription": "Descrizione" - }, - "troubleshooting": { - "title": "Risoluzione dei problemi", - "missingHeader": { - "title": "\"Missing ApiKey header\"", - "description": "Il tuo client non sta inviando l'header {header}. Verifica che la sezione {section} nella configurazione MCP sia corretta. Alcuni client richiedono il riavvio dopo le modifiche alla configurazione." - }, - "invalidFormat": { - "title": "\"Invalid ApiKey format\"", - "description": "Assicurati di aver copiato l'intera chiave API, non solo una parte." - }, - "invalidKey": { - "title": "\"Invalid API key\"", - "description": "L'ID della chiave non è stato trovato o il token è errato. Le chiavi API possono essere visualizzate solo una volta al momento della creazione. Se l'hai persa, elimina la vecchia chiave e creane una nuova." - }, - "connectionRefused": { - "title": "Connessione rifiutata / timeout", - "description": "Assicurati che l'URL sia raggiungibile dal tuo client IA. Se Homarr è in esecuzione dietro un reverse proxy o in Docker, usa l'URL esterno (non {localhost}). Verifica che la porta sia corretta (predefinita: 7575 per Docker)." - }, - "toolsNotAppearing": { - "title": "Gli strumenti non vengono visualizzati", - "description": "Alcuni strumenti richiedono che vengano configurate integrazioni specifiche (ad es. Docker, Overseerr). L'elenco degli strumenti dipende da ciò che è disponibile nella tua istanza Homarr." + "filteredDescription": "{count} strumenti di corrispondenza tra le categorie estese.", + "search": "Strumenti di ricerca", + "noResults": { + "title": "Nessun strumento corrisponde a questa ricerca", + "description": "Nessuno strumento MCP corrisponde a \"{search}\". Prova uno spazio dei nomi, un nome o una descrizione." } - }, - "copy": "Copia", - "oneClick": { - "title": "Installa con un Clic", - "subtitle": "Usa OAuth: autenticati nel tuo browser al primo utilizzo", - "vsCode": "Installa in VS Code", - "cursor": "Installa in Cursor", - "copyUrl": "Copia URL MCP", - "copied": "Copiato!", - "copyHint": "Per ChatGPT, Claude Code o qualsiasi client MCP", - "manualConfig": "Configurazione Manuale" } } } @@ -5024,47 +6958,12 @@ "title": "Esportazione di dati sensibili", "warningTitle": "Questa esportazione contiene l'intero database.", "warningBody": "Il backup include tutti gli utenti, i segreti delle integrazioni (crittografati), le chiavi API, le configurazioni delle board e i dati delle app. Conserva il file esportato in modo sicuro e non condividerlo.", - "typePrompt": "Digita \"{phrase}\" per continuare", - "submit": "Esporta Database", - "cancel": "Annulla" + "submit": "Esporta Database" } }, "import": { "title": "Ripristina Database", - "description": "Carica un file ZIP di backup precedentemente esportato per ripristinare il tuo database. Questo sostituirà l'intero database. Se il backup è stato creato con una chiave di crittografia diversa, i segreti verranno automaticamente ri-crittografati.", - "warning": "Il ripristino di un backup sostituirà completamente il database attuale e riavvierà l'applicazione. Questa azione non può essere annullata.", - "dropzone": { - "title": "Rilascia qui il tuo ZIP di backup o fai clic per sfogliare", - "description": "Sono accettati solo file .zip provenienti da un backup SQLite di Homarr" - }, - "changeFile": "Cambia file", - "button": "Ripristina Database", - "success": { - "title": "Ripristino Completato", - "message": "Il database è stato ripristinato con successo. L'applicazione si sta riavviando..." - }, - "error": "Importazione non riuscita" - }, - "preview": { - "title": "Contenuto del Backup", - "exported": "Esportato il {date}", - "loading": "Analisi del file di backup in corso...", - "errorTitle": "Errore di Anteprima", - "entity": "Entità", - "count": "Conteggio", - "boards": "Board", - "entities": { - "board": "Board", - "user": "Utenti", - "app": "App", - "integration": "Integrazioni", - "item": "Widget", - "media": "Media", - "search_engine": "Motori di Ricerca" - }, - "analyzeError": "Impossibile analizzare il file di backup", - "invalidMissingMetadata": "Backup non valido: metadata.json mancante", - "invalidMissingDb": "Backup non valido: db.sqlite mancante" + "description": "Carica un file ZIP di backup precedentemente esportato per ripristinare il tuo database. Questo sostituirà l'intero database. Se il backup è stato creato con una chiave di crittografia diversa, i segreti verranno automaticamente ri-crittografati." }, "restore": { "dropzone": { @@ -5074,29 +6973,20 @@ "analyzing": "Analisi del backup in corso...", "changeFile": "Cambia file", "continueToRestore": "Continua con il ripristino", - "tryAgain": "Riprova", "analysisError": "Errore di Analisi", "preview": { "title": "Contenuto del Backup", "exported": "Esportato il {date}", "entity": "Entità", "count": "Conteggio", - "boards": "Board", "entities": { - "board": "Board", - "user": "Utenti", - "app": "App", - "integration": "Integrazioni", - "item": "Widget", - "media": "Media", - "search_engine": "Motori di Ricerca" + "item": "Widget" }, "migrationsApplied": "{count} migrazione applicata", "migrationsAppliedPlural": "{count} migrazioni applicate", "migrationsOlderVersion": "Questo backup proviene da una versione precedente di Homarr. È stata applicata {count} migrazione dello schema per aggiornarlo.", "migrationsOlderVersionPlural": "Questo backup proviene da una versione precedente di Homarr. Sono state applicate {count} migrazioni dello schema per aggiornarlo.", "migrationsUpToDate": "Lo schema del database è aggiornato ({count} migrazioni applicate)", - "upToDate": "Aggiornato", "migrationsPending": "{count} in sospeso" }, "migration": { @@ -5107,21 +6997,21 @@ "title": "Azione distruttiva", "warningTitle": "Questa azione sostituirà definitivamente l'intero database.", "warningBody": "Tutte le board, gli utenti, le app, le integrazioni, le impostazioni e le sessioni attuali verranno perse. Questa azione non può essere annullata. L'applicazione si riavvierà dopo il ripristino.", - "typePrompt": "Digita \"{phrase}\" per continuare", - "cancel": "Annulla", "submit": "Ripristina Database" }, "progress": { "title": "Ripristino del database in corso...", - "extracting": "Estrazione dell'archivio di backup", - "migrating": "Applicazione delle migrazioni del database", - "encrypting": "Ri-crittografia dei segreti delle integrazioni", - "swapping": "Sostituzione del file del database", - "restarting": "Riavvio del server" + "restarting": "Riavvio del server", + "relogin": "Ripristino del database invalidato della sessione corrente. Homarr ti invierà per accedere quando il server è pronto." }, "complete": { "title": "Ripristino Completato", - "message": "Il database è stato ripristinato con successo. Il server si sta riavviando, aggiorna la pagina in pochi secondi." + "message": "Il database è stato ripristinato con successo. Il server si sta riavviando, aggiorna la pagina in pochi secondi.", + "button": "Accedi ora" + }, + "timeout": { + "title": "Il server non è tornato online", + "message": "Il ripristino del database è terminato, ma Homarr non è tornato di nuovo. Riprova il controllo della connessione o aggiorna manualmente questa pagina." }, "failed": { "title": "Ripristino Non Riuscito" @@ -5129,6 +7019,9 @@ "invalidMissingMetadata": "Backup non valido: metadata.json mancante", "invalidMissingDb": "Backup non valido: db.sqlite mancante", "analyzeError": "Impossibile analizzare il backup" + }, + "confirm": { + "typePrompt": "Digita \"{phrase}\" per continuare" } } }, @@ -5163,7 +7056,11 @@ "toggleBoardEdit": "Attiva la modalità di modifica della board", "toggleColorScheme": "Attiva tema chiaro/scuro", "saveNotebook": "Salva notebook (solo nel widget notebook)", - "openSpotlight": "Apri ricerca" + "openSpotlight": "Apri ricerca", + "openSpotlightApps": "Apri ricerca app", + "openSpotlightAssistant": "Apri la modalità Assistente", + "openSpotlightPreferences": "Apri modalità preferenze", + "openAssistant": "Apri Assistente" }, "note": "Suggerimento: 'Mod' si riferisce sia al tasto Ctrl che al tasto ⌘ su macOS" } @@ -5173,6 +7070,63 @@ }, "docker": { "title": "Containers", + "reconciliation": { + "title": "Configurazione Docker assistita", + "suggestions": "{count, plural, =0 {Nessun suggerimento} one {# suggerimento} other {# suggerimenti}}", + "attention": "{count} ha bisogno di attenzione", + "endpointUnavailable": "Alcuni servizi non possono essere controllati perché questi endpoint non sono disponibili: {names}", + "empty": "Non sono stati trovati servizi Docker visibili.", + "emptyFilter": "Nessun servizio corrisponde a questa vista.", + "ambiguous": "Più di un elemento esistente potrebbe corrispondere a questo servizio. Homarr non ne sceglierà uno automaticamente.", + "filter": { + "attention": "Richiede attenzione", + "represented": "Già configurato", + "all": "Tutto" + }, + "state": { + "newRecognized": "Pronto per la connessione", + "newApp": "Nuovo servizio", + "represented": "Già rappresentato", + "linked": "Collegato", + "moved": "Indirizzo modificato" + }, + "url": { + "manual": "Inserisci un indirizzo manualmente" + }, + "health": { + "layer": { + "docker": "Docker", + "integrationConfiguration": "Integrazione", + "authentication": "Autenticazione", + "apiRequest": "API", + "appRepresentation": "App", + "widgetConfiguration": "Widget", + "widgetQuery": "Interrogazione widget" + }, + "status": { + "available": "Disponibile", + "configured": "Configurato", + "linked": "Collegato", + "missing": "Mancanti", + "changed": "Modificato", + "unused": "Non utilizzato", + "notApplicable": "Non applicabile", + "notObserved": "Non osservato" + } + }, + "action": { + "review": "Revisione", + "dismiss": "Ignora", + "restoreDismissed": "Ripristino annullato ({count})", + "setupIntegration": "Impostare l'integrazione", + "reviewIntegration": "Revisione integrazione", + "viewRepresentation": "Visualizza configurazione" + }, + "loadError": { + "title": "L'assistente di configurazione docker non può essere caricato", + "message": "Informazioni sul servizio docker non disponibili. Riprova senza lasciare questa pagina." + } + }, "table": { "updated": "Aggiornato {when}", "refresh": { @@ -5185,9 +7139,6 @@ "totalMemory": "Mem Totale: {memory}" }, "field": { - "name": { - "label": "Nome" - }, "state": { "label": "Stato", "option": { @@ -5201,9 +7152,6 @@ } }, "stats": { - "cpu": { - "label": "CPU" - }, "memory": { "label": "Memoria" } @@ -5266,8 +7214,11 @@ } }, "remove": { - "label": "Rimuovi", "confirm": "Fare clic di nuovo per rimuovere definitivamente", + "confirmation": { + "title": "{count, plural, one {Rimuovere # contenitore?} other {Rimuovere # contenitori?}}", + "message": "{count, plural, one {Questo rimuove definitivamente # contenitore: {names}} other {Questo rimuove permanentemente # contenitori: {names}}}" + }, "notification": { "success": { "title": "Containers rimossi", @@ -5279,8 +7230,13 @@ } } }, + "result": { + "failure": { + "title": "Alcune azioni del contenitore non sono riuscite", + "message": "{total, plural, one {{failed} di # azione fallita: {names}} other {{failed} di # azioni fallite: {names}}}" + } + }, "refresh": { - "label": "Aggiorna", "notification": { "success": { "title": "Containers aggiornati", @@ -5311,18 +7267,33 @@ }, "error": { "internalServerError": "Recupero dei container Docker non riuscito", + "endpointUnavailable": "{count, plural, one {# Endpoint Docker non disponibile: {names}} other {# Endpoint Docker non disponibili: {names}}}", "noColumns": "Seleziona almeno una colonna nelle impostazioni dei widget" } }, "kubernetes": { + "context": { + "label": "Contesto di Kubernetes", + "loadError": { + "title": "I contesti di Kubernetes non possono essere caricati", + "message": "Informazioni contestuali non disponibili. Riprova senza lasciare questa pagina." + }, + "status": { + "available": "Disponibile", + "degraded": "Metrics unavailable", + "unavailable": "Unavailable" + }, + "unavailable": "Questo contesto di Kubernetes non può essere raggiunto. Seleziona un altro contesto o verifica le sue credenziali e il suo punto finale.", + "metricsUnavailable": "Questo contesto è raggiungibile, ma il Server Metrics non è disponibile. L'inventario rimane disponibile senza l'uso di CPU e memoria dal vivo." + }, "cluster": { "title": "Dashboard Cluster", "label": "Cluster", "providers": "Providers", "version": "Versione", - "architecture": "Architettura", "capacity": { "title": "Capacità", + "metricsUnavailable": "Il server delle metriche non è disponibile. L'inventario e la capacità riservata rimangono visibili, ma l'utilizzo della CPU e della memoria live non può essere mostrato.", "resource": { "reserved": "Riservato", "used": "Usato" @@ -5341,38 +7312,10 @@ } }, "nodes": { - "label": "Nodi", "field": { - "name": { - "label": "Nome" - }, - "state": { - "label": "Stato", - "option": { - "ready": "Pronto", - "NotReady": "Non pronto" - } - }, - "cpu": { - "label": "CPU" - }, - "memory": { - "label": "RAM" - }, - "pods": { - "label": "Pods" - }, - "operatingSystem": { - "label": "OS" - }, - "architecture": { - "label": "Architettura" - }, + "metricsUnavailable": "Unavailable", "kubernetesVersion": { "label": "Versione di Kubernetes" - }, - "creationTimestamp": { - "label": "Creato" } }, "table": { @@ -5380,43 +7323,17 @@ } }, "namespaces": { - "label": "Spazi dei nomi", - "field": { - "name": { - "label": "Nome" - }, - "state": { - "label": "Stato", - "option": { - "active": "Attivo", - "terminating": "Terminare" - } - }, - "creationTimestamp": { - "label": "Creato" - } - }, "table": { "search": "Cerca {count} spazi dei nomi" } }, "ingresses": { - "label": "Ingressi", "field": { - "name": { - "label": "Nome" - }, - "namespace": { - "label": "Spazio dei nomi" - }, "className": { "label": "Nome classe" }, "rulesAndPaths": { "label": "Regole & percorsi" - }, - "creationTimestamp": { - "label": "Creato" } }, "table": { @@ -5424,17 +7341,7 @@ } }, "services": { - "label": "Servizi", "field": { - "name": { - "label": "Nome" - }, - "namespace": { - "label": "Spazio del nome" - }, - "type": { - "label": "Tipo" - }, "ports": { "label": "Porte" }, @@ -5443,9 +7350,6 @@ }, "clusterIP": { "label": "IP Cluster" - }, - "creationTimestamp": { - "label": "Creato" } }, "table": { @@ -5453,25 +7357,12 @@ } }, "pods": { - "label": "Pods", "field": { - "name": { - "label": "Nome" - }, - "namespace": { - "label": "Spazio del nome" - }, "image": { "label": "Immagine" }, "applicationType": { "label": "Tipo di Applicazione" - }, - "status": { - "label": "Stato" - }, - "creationTimestamp": { - "label": "Creato" } }, "table": { @@ -5479,51 +7370,17 @@ } }, "secrets": { - "label": "Secrets", - "field": { - "name": { - "label": "Nome" - }, - "namespace": { - "label": "spazio del nome" - }, - "type": { - "label": "tipo" - }, - "creationTimestamp": { - "label": "Creato" - } - }, "table": { "search": "Cerca {count} segreti" } }, "configmaps": { - "label": "ConfigMaps", - "field": { - "name": { - "label": "Nome" - }, - "namespace": { - "label": "namespace" - }, - "creationTimestamp": { - "label": "Creato" - } - }, "table": { "search": "Cerca {count} ConfigMaps" } }, "volumes": { - "label": "Volumi", "field": { - "name": { - "label": "Nome" - }, - "namespace": { - "label": "Namespace" - }, "accessModes": { "label": "Modalità Di Accesso" }, @@ -5538,12 +7395,6 @@ }, "volumeName": { "label": "Nome Volume" - }, - "status": { - "label": "Stato" - }, - "creationTimestamp": { - "label": "Creato" } }, "table": { @@ -5552,6 +7403,29 @@ }, "error": { "internalServerError": "Recupero dei dati di Kubernetes non riuscito" + }, + "field": { + "name": { + "label": "Nome del job" + }, + "namespace": { + "label": "Namespace" + }, + "creationTimestamp": { + "label": "Creato" + }, + "state": { + "label": "Stato job" + }, + "status": { + "label": "Stato" + }, + "type": { + "label": "Scarica tipo client" + }, + "architecture": { + "label": "Architettura" + } } }, "permission": { @@ -5585,83 +7459,27 @@ }, "navigationStructure": { "manage": { - "workshop": { - "label": "Workshop" - }, "label": "Gestisci", - "boards": { - "label": "Board" - }, - "integrations": { - "label": "Integrazioni", - "edit": { - "label": "Modifica" - }, - "new": { - "label": "Nuovo" - } - }, - "search-engines": { - "label": "Motori di ricerca", - "new": { - "label": "Nuovo" - }, - "edit": { - "label": "Modifica" - } - }, - "medias": { - "label": "Media" - }, - "apps": { - "label": "Applicazioni", - "new": { - "label": "Nuovo" - }, - "edit": { - "label": "Modifica" - } - }, "custom-widgets": { - "label": "Custom widgets", - "new": { - "label": "Nuovo" - }, "edit": { - "label": "Modifica", "flow": { "label": "Flusso" } + }, + "workshop": { + "label": "Workshop" + }, + "publish": { + "label": "Pubblica in Workshop" } }, "users": { - "label": "Utenti", - "create": { - "label": "Crea" - }, "general": "Generale", - "security": "Sicurezza", - "board": "Board", - "groups": { - "label": "Gruppi" - }, - "invites": { - "label": "Inviti" - } + "security": "Sicurezza" }, "tools": { "label": "Strumenti", - "tasks": { - "label": "Attività" - }, - "docker": { - "label": "Docker", - "logs": { - "label": "Log" - } - }, "kubernetes": { - "label": "Kubernetes", "nodes": { "label": "Nodi" }, @@ -5687,11 +7505,7 @@ "label": "Volumi" } }, - "logs": { - "label": "Log" - }, "certificates": { - "label": "Certificati", "hostnames": { "label": "Nomi Host" } @@ -5702,12 +7516,60 @@ }, "about": { "label": "Info" + }, + "assistant": { + "label": "Assistente" } } }, "search": { "placeholder": "Cerca qualcosa", "nothingFound": "Nessun risultato trovato", + "modePicker": { + "search": { + "label": "Cerca", + "placeholder": "Cerca app, schede, pagine, comandi e preferenze" + }, + "apps": { + "label": "App", + "placeholder": "Cerca app, schede e integrazioni" + }, + "command": { + "label": "Comandi", + "placeholder": "Cerca azioni e comandi" + }, + "preferences": { + "label": "Preferenze", + "placeholder": "Cerca e cambia preferenze" + }, + "assistant": { + "label": "Assistente", + "placeholder": "Chiedi Assistente" + }, + "external": { + "label": "Web", + "placeholder": "Cerca con un motore di ricerca esterno" + }, + "media": { + "label": "Media", + "placeholder": "Cerca un film o uno spettacolo", + "fallback": "Cerca media per \"{query}\"" + }, + "userGroup": { + "label": "Persone", + "placeholder": "Cerca utenti e gruppi" + }, + "continueWith": "Continua con", + "dialogAriaLabel": "Menu comando {mode}", + "navigationLabel": "Modalità di ricerca", + "modeAriaLabel": "Modalità {mode}", + "resultsAriaLabel": "{mode} risultati", + "footer": { + "navigate": "Navigate", + "open": "Apri", + "close": "Chiudi" + } + }, "error": { "fetch": "Si è verificato un errore durante il recupero dei dati" }, @@ -5716,7 +7578,6 @@ "help": "Cerca app, integrazioni o board", "group": { "app": { - "title": "Applicazioni", "children": { "action": { "open": { @@ -5732,7 +7593,6 @@ } }, "board": { - "title": "Board", "children": { "action": { "open": { @@ -5752,9 +7612,6 @@ "title": "Seleziona un'azione per la board" } } - }, - "integration": { - "title": "Integrazioni" } } }, @@ -5783,9 +7640,6 @@ "newBoard": { "label": "Crea una nuova board" }, - "importBoard": { - "label": "Importa una board" - }, "newApp": { "label": "Crea una nuova app" }, @@ -5855,7 +7709,6 @@ } }, "defaultSearchEngineId": { - "label": "Motore di ricerca predefinito", "children": { "detail": { "title": "Seleziona il tuo motore di ricerca predefinito" @@ -5863,7 +7716,6 @@ } }, "openSearchInNewTab": { - "label": "Apri risultati di ricerca in una nuova scheda", "children": { "detail": { "title": "Apri risultati di ricerca in una nuova scheda" @@ -5871,7 +7723,6 @@ } }, "ddgBangs": { - "label": "Abilita bangs DuckDuckGo", "children": { "detail": { "title": "Abilita bangs DuckDuckGo" @@ -5886,6 +7737,13 @@ } } }, + "byteUnitSystem": { + "children": { + "detail": { + "title": "Seleziona le tue unità di dimensione dati" + } + } + }, "homeBoardId": { "label": "Home board", "children": { @@ -5903,7 +7761,6 @@ } }, "pingIconsEnabled": { - "label": "Usa le icone per i ping", "children": { "detail": { "title": "Usa le icone per i ping" @@ -5911,7 +7768,6 @@ } }, "enableRightClickOnWidgets": { - "label": "Abilita clic destro sui widget", "children": { "detail": { "title": "Abilita clic destro sui widget" @@ -5939,6 +7795,7 @@ "description": "Inizia a digitare per cercare le integrazioni delle tue richieste multimediali", "disabled": { "noIntegration": "Aggiungi un'integrazione con Overseerr, Jellyseerr o Seerr per abilitare la ricerca dei contenuti multimediali.", + "signInRequired": "Accedi per cercare le integrazioni delle richieste multimediali.", "scoped": "Questo widget non ha un'integrazione di richiesta media accessibile." } } @@ -5955,7 +7812,6 @@ "help": "Utilizza un motore di ricerca esterno", "group": { "searchEngine": { - "title": "Motori di ricerca", "tipDdgBangs": "Suggerimento: puoi usare anche i bang di DuckDuckGo, ad esempio !qualcosa", "bang": { "searchWithQuery": "Cerca \"{query}\" con {label}", @@ -6006,20 +7862,6 @@ "group": { "mode": { "title": "Modalità" - }, - "help": { - "title": "Aiuto", - "option": { - "documentation": { - "label": "Documentazione" - }, - "submitIssue": { - "label": "Segnala un problema" - }, - "discord": { - "label": "Community Discord" - } - } } } }, @@ -6031,9 +7873,10 @@ "other": { "label": "Cerca con un altro motore di ricerca" }, - "no-default": { - "label": "Nessun motore di ricerca predefinito", - "description": "Imposta un motore di ricerca predefinito nelle preferenze" + "no-engines": { + "label": "Nessun motore di ricerca configurato", + "descriptionCreate": "Aggiungi un motore di ricerca per cercare dal menu dei comandi", + "descriptionUnavailable": "Chiedi all'amministratore di configurare un motore di ricerca" }, "search": { "label": "Cerca \"{query}\" con {name}" @@ -6113,7 +7956,6 @@ "help": "Cerca per utenti o gruppi", "group": { "user": { - "title": "Utenti", "children": { "action": { "detail": { @@ -6126,7 +7968,6 @@ } }, "group": { - "title": "Gruppi", "children": { "action": { "detail": { @@ -6150,9 +7991,6 @@ "engine": { "search": "Trova un motore di ricerca", "field": { - "name": { - "label": "Nome" - }, "short": { "label": "Corto" }, @@ -6165,12 +8003,19 @@ }, "page": { "list": { - "title": "Motori di ricerca", + "ariaLabel": "Motori di ricerca configurati", "noResults": { "title": "Non ci sono ancora motori di ricerca", - "action": "Crea il tuo primo motore di ricerca" + "description": "I motori di ricerca lasciano Spotlight inviare una domanda a un sito o servizio connesso.", + "action": "Crea il tuo primo motore di ricerca", + "filteredTitle": "Nessun motore di ricerca corrisponde alla tua ricerca", + "filteredDescription": "Nessun motore di ricerca corrisponde \"{search}\". Prova un altro nome o URL." }, - "interactive": "Interattivo, utilizza un'integrazione" + "interactive": "Interattivo, utilizza un'integrazione", + "type": { + "generic": "Modello URL", + "fromIntegration": "Integrazione" + } }, "create": { "title": "Nuovo motore ricerca", @@ -6189,11 +8034,9 @@ "title": "Modifica motore di ricerca", "notification": { "success": { - "title": "Modifiche applicate con successo", "message": "Il motore di ricerca è stato salvato correttamente" }, "error": { - "title": "Impossibile applicare le modifiche", "message": "Il motore di ricerca non può essere salvato" } }, @@ -6332,6 +8175,10 @@ } }, "log": { + "context": { + "widgetError": "Widget ha segnalato un errore intorno a questa volta", + "expiredWidgetError": "I registri intorno a questo errore del widget non sono più mantenuti" + }, "level": { "option": { "debug": "Debug", @@ -6343,7 +8190,6 @@ }, "onboardingTour": { "learnMore": "Leggi la documentazione", - "next": "Avanti", "prev": "Indietro", "done": "Fatto", "skip": "Salta tour", @@ -6407,5 +8253,359 @@ "description": "Cambia la combinazione di colori, la lingua, la bacheca principale e le tue preferenze. Da qui puoi anche passare all'area di gestione." } } + }, + "metadata": { + "description": "Un cruscotto autoospitato per lo stack *arr e tutta la tua homelab. Si integra con oltre 50 servizi, widget in tempo reale, senza file di configurazione.", + "dashboardTitle": "Dashboard {appName}" + }, + "assistant": { + "title": "Assistente", + "open": "Apri Assistente", + "close": "Chiudi assistente", + "minimize": "Minimizza assistente", + "spotlight": "Chiedi Assistente", + "spotlightDescription": "Digita e invia un prompt senza lasciare il menu dei comandi.", + "spotlightPrompt": { + "title": "Chiedi Assistente", + "description": "Digita un prompt sopra. Inseriscilo in background.", + "send": "Invia prompt", + "empty": "Digita un prompt sopra" + }, + "unavailable": { + "checking": "Verifica se l'assistente è disponibile…", + "error": "La disponibilità dell'assistente non può essere controllata. Riprova.", + "notConfigured": "Un amministratore deve prima configurare e abilitare l'assistente.", + "signIn": "Accedi per usare Assistente." + }, + "newConversation": "Nuova conversazione", + "conversations": "Conversazioni", + "conversationActions": "Azioni di conversazione", + "searchConversations": "Cerca conversazioni", + "noMatchingConversations": "Nessuna conversazione corrispondente", + "moreActions": "Altre azioni di risposta", + "renameConversation": { + "action": "Rinomina", + "label": "Nome conversazione", + "save": "Salva nome", + "failedTitle": "La conversazione non può essere rinominata", + "failedDescription": "Homarr non può rinominare questa conversazione. Riprova." + }, + "deleteConversation": { + "title": "Eliminare la conversazione?", + "description": "“{title}” e i suoi messaggi verranno eliminati definitivamente.", + "failedTitle": "La conversazione non può essere eliminata", + "failedDescription": "Homarr non può eliminare questa conversazione. Riprova." + }, + "closeHistory": "Chiudi cronologia conversazioni", + "openHistory": "Apri cronologia conversazioni", + "emptyTitle": "Con cosa posso aiutare?", + "emptyDescription": "Chiedi informazioni sulla tua configurazione di Homarr, ispeziona i dati dell'istanza in tempo reale o approva le azioni quando vuoi che effettui una modifica.", + "suggestions": { + "health": { + "label": "Controlla lo stato di salute del servizio", + "prompt": "Controllare le mie integrazioni e riassumere tutto ciò che ha bisogno di attenzione." + }, + "explore": { + "label": "Esplora il mio Homarr", + "prompt": "Mostrami cosa posso vedere e gestire in questa istanza di Homarr." + }, + "media": { + "label": "Trova file multimediali da richiedere", + "prompt": "Aiutami a trovare un film o una serie da richiedere." + }, + "style": { + "label": "Migliora una dashboard", + "prompt": "Aiutami a migliorare l'aspetto di una scheda o il CSS personalizzato. Mostrami prima le mie schede, quindi preserva le impostazioni correnti mentre approviamo la modifica." + }, + "designWidget": { + "label": "Progetta un widget", + "prompt": "Crea e installa un widget personalizzato per " + } + }, + "composerPlaceholder": "Chiedi Assistente…", + "runtime": { + "model": "Modello", + "searchModels": "Cerca modelli", + "noModels": "Nessun modello disponibile", + "otherModels": "Altri modelli", + "imageInput": "Accetta input immagine", + "thinking": "Modalità di pensiero", + "reasoning": { + "auto": "Automatico", + "none": "Off", + "minimal": "Minimo", + "low": "Basso", + "medium": "Medio", + "high": "Alto" + } + }, + "providerQuota": { + "title": "Provider di Homarr", + "communityWorkshop": "Workshop Della Comunità", + "dailyAllowance": "Indennità richiesta giornaliera", + "remainingLabel": "{remaining} di {limit} richieste del provider Homarr rimanenti", + "loading": "Caricamento indennità provider Homarr", + "signInRequired": "Accesso all'officina richiesto per il provider Homarr", + "signInDescription": "Accedi con GitHub attraverso il Workshop della Comunità per ricevere la tua indennità giornaliera separata.", + "exhaustedDescription": "La tua quota provider di Homarr è utilizzata per oggi. Si reimposta a mezzanotte UTC.", + "unavailableDescription": "Accedi al Workshop o attendi che la tua indennità provider di Homarr si reimposti.", + "signIn": "Accedi con GitHub", + "signInError": "Accesso a GitHub fallito. Riprova tra un attimo.", + "loadError": "L'indennità del fornitore di Homarr non può essere caricata.", + "reset": "Si reimposta {relative} alle ", + "toolCalls": "Ogni richiesta di modello e chiamata di strumento completata utilizza una richiesta.", + "retry": "Ricarica indennità", + "level": { + "ok": "OK", + "warning": "Attenzione", + "bad": "Basso", + "dead": "Usata" + } + }, + "stop": "Interrompi risposta", + "send": "Invia messaggio", + "copy": "Copia risposta", + "copyMessage": "Copia messaggio", + "editMessage": "Modifica messaggio", + "updateMessage": "Aggiorna messaggio", + "regenerate": "Rigenera la risposta", + "helpful": "Utile", + "notHelpful": "Non utile", + "readAloud": "Leggi la risposta ad alta voce", + "stopReading": "Interrompi la risposta di lettura", + "feedbackError": "Il tuo feedback non può essere salvato. Riprova.", + "exportMarkdown": "Esporta come Markdown", + "exportConversation": { + "action": "Esporta conversazione come Markdown", + "failedTitle": "Impossibile esportare la conversazione", + "failedDescription": "Homarr non può caricare questa conversazione. Riprova." + }, + "reasoning": "Pensare", + "previousResponse": "Risposta precedente", + "nextResponse": "Risposta successiva", + "removeAttachment": "Rimuovi allegato", + "downloadFile": "Scarica {name}", + "attachedImage": "Immagine allegata", + "externalImageBlocked": "Immagine esterna bloccata per privacy", + "image": { + "loading": "Caricamento immagine", + "failed": "Questa immagine non può essere caricata.", + "retry": "Riprova nuovamente l'immagine" + }, + "quoteSelection": "Preventivo", + "dismissQuote": "Rimuovi preventivo", + "attachments": { + "add": "Allega un'immagine o un documento", + "errorTitle": "Impossibile aggiungere l'allegato", + "imageUnsupported": "Il modello selezionato non supporta l'input dell'immagine." + }, + "mentions": { + "menu": "Aggiungi contesto Homarr", + "context": "Contesto", + "app": "App", + "integration": "Integrazioni", + "board": "Board", + "widget": "Widget", + "tools": "Strumenti disponibili" + }, + "markdown": { + "diagram": "Diagramma", + "renderingDiagram": "Diagramma di rendering…", + "diagramUnavailable": "Questo diagramma non può essere visualizzato." + }, + "commands": { + "menu": "Comandi assistenti", + "health": "Preparare un controllo servizio-salute", + "explore": "Prepara una panoramica di questa istanza di Homarr", + "media": "Prepara una ricerca multimediale", + "style": "Prepara un aspetto tabellone o un cambiamento CSS personalizzato", + "designWidget": "Prepara una generazione di widget personalizzati a un prompt" + }, + "usage": { + "tokens": "token", + "contextWindow": "Finestra contestuale", + "requestDetails": "Dettagli della richiesta", + "used": "Ultimo passo", + "remaining": "Rimanente", + "capacity": "Capacità", + "input": "Input", + "output": "Output", + "cached": "Input in cache", + "cacheWrite": "Scrittura cache", + "reasoning": "Motivazione", + "inputShort": "in", + "outputShort": "out", + "cachedShort": "cache", + "reasoningShort": "ragionamento", + "firstOutput": "Primo output", + "homarrTiming": "Homarr osservato", + "endToEnd": "Fine alla fine", + "observedThroughput": "throughput osservato", + "providerTiming": "Fornitore segnalato", + "loadingProviderDetails": "Caricamento dettagli generazione…", + "providerDetailsPending": "OpenRouter sta ancora elaborando alcuni dettagli della generazione. Riapri per riprovare.", + "providerLatency": "Latenza del fornitore", + "generationTime": "Tempo di generazione", + "moderationLatency": "Moderazione", + "providerThroughput": "throughput del provider", + "fallbacks": "Fallbacks", + "fallbackLatency": "Latenza di caduta", + "cacheDiscount": "Sconto cache", + "normalizedTokens": "OpenRouter normalizzato in ingresso/uscita", + "byok": "BYOK", + "cost": "Costo", + "reported": "Segnalato dal provider", + "estimated": "Stima del prezzo del modello", + "upstreamCost": "Incidenza a monte", + "webSearches": "Ricerche web", + "finishReason": "Motivo del completamento", + "notReported": "Non segnalato", + "agentSteps": "Gradini dell'agente", + "step": "Passo {number}", + "generation": "Generazione" + }, + "toolInput": "Input", + "toolOutput": "Output", + "toolActivity": { + "iconSearch": "Cercando le icone «{query}»", + "iconBrowse": "Esplorazione icone disponibili" + }, + "toolNavigation": { + "openPreview": "Apri anteprima", + "openWidget": "Apri widget" + }, + "webSearch": { + "title": "Ricerca web", + "completed": "OpenRouter ha cercato il live web per questa risposta.", + "searches": "{count, plural, one {# cerca} other {# cerca}}", + "sources": "{count, plural, one {# sorgente} other {# sorgenti}}" + }, + "responseError": { + "title": "L'assistente non può finire", + "description": "Riprova. Se il problema continua, chiedi all'amministratore di verificare l'endpoint del modello configurato." + }, + "toolPreparationError": { + "title": "Questa richiesta non può essere preparata", + "description": "Il modello si è fermato prima di fornire dettagli completi. Riprova la risposta o descrivi nuovamente la richiesta. Non è stata apportata alcuna modifica." + }, + "busy": { + "title": "L'assistente sta già lavorando", + "description": "Attendere la risposta corrente o aprirla per fermare l'esecuzione." + }, + "pendingAction": { + "answerTitle": "Risposta necessaria", + "answerFallback": "Scegli una risposta per continuare", + "formTitle": "Rivedi dettagli app", + "boardFormTitle": "Revisione modifiche scheda", + "review": "Revisione", + "sendBlocked": "Risolvi la richiesta in sospeso prima di inviare" + }, + "activity": { + "thinking": "Assistente sta pensando", + "working": "Lavorare sul tuo prompt", + "ready": "Risposta pronta", + "completed": "Apri la risposta", + "approval": "Approvazione necessaria", + "failed": "Assistente richiede attenzione", + "expand": "Apri la risposta dell'assistente", + "dismiss": "Ignora attività assistente" + }, + "scrollToLatest": "Scorri fino all'ultimo", + "refresh": { + "action": "Aggiorna la vista corrente", + "working": "Aggiornamento della vista corrente", + "completeTitle": "Visualizza aggiornato", + "completeDescription": "I dati visibili di Homarr sono stati ricaricati.", + "failedTitle": "La vista non può essere aggiornata", + "failedDescription": "La modifica può ancora essere salvata. Riprova l'azione di aggiornamento." + }, + "askUser": { + "preparing": "Preparazione della domanda", + "answered": "La tua risposta", + "other": "Altro", + "otherLabel": "La tua risposta", + "otherPlaceholder": "Digita un'altra risposta…", + "submit": "Invia risposta", + "cancelOther": "Annulla altra risposta", + "optionKind": { + "affirmative": "Conferma", + "negative": "Rifiuta", + "alternative": "Opzione", + "custom": "Personalizzato" + } + }, + "configureApp": { + "title": "Rivedi dettagli app", + "description": "Scegliere un'icona locale e regolare qualsiasi cosa prima che l'assistente richieda l'approvazione della creazione.", + "preparing": "Preparazione dettagli app", + "continue": "Usa questi dettagli", + "ready": "Dettagli app pronti", + "automaticContinue": "Utilizzando questi dettagli dell'app automaticamente" + }, + "configureBoardSettings": { + "title": "Revisione modifiche scheda", + "loading": "Caricamento impostazioni della scheda corrente", + "loadErrorTitle": "Impossibile caricare le impostazioni della scheda", + "loadErrorDescription": "La scheda potrebbe non esistere più, o potresti non avere il permesso di modificarla.", + "proposedCount": "Assistente proposto campi {count}", + "changeCount": "{count} modifiche pronte", + "ready": "Modifiche scheda pronte", + "cancelled": "Impostazioni scheda corrente mantenute", + "noChanges": "Nessuna impostazione cambierà", + "keepCurrent": "Mantieni le impostazioni correnti", + "continue": "Continua ad approvare", + "automaticContinue": "Accettare automaticamente le modifiche proposte dal comitato", + "resetAll": "Reimposta tutte le modifiche", + "tabs": { + "css": "Custom CSS", + "appearance": "Aspetto", + "background": "Background", + "general": "Generale" + }, + "cssDescription": "Modifica il foglio di stile completo. Le regole esistenti sono mantenute a meno che non vengano rimosse qui.", + "cssCharacters": "{count} di 16384 caratteri", + "copyCss": "Copy CSS", + "copied": "Copiato", + "restoreCss": "Restore current CSS", + "remoteCssTitle": "Questo CSS carica una risorsa remota", + "remoteCssDescription": "I fogli di stile importati e gli URL remoti contattano un altro server quando la scheda si carica. Controllali prima di continuare." + }, + "configureWidget": { + "title": "Controlla widget", + "preparing": "Preparazione impostazioni widget", + "review": "Revisione widget e integrazioni", + "ready": "Configurazione widget pronta", + "cancelled": "Il widget non è stato aggiunto", + "automaticContinue": "Accettare automaticamente la configurazione del widget proposto", + "definitionLoadErrorTitle": "Impossibile caricare le impostazioni del widget", + "definitionLoadErrorDescription": "Homarr non può caricare le impostazioni di questo widget. Riprova.", + "loadErrorTitle": "Le integrazioni non possono essere caricate", + "loadErrorDescription": "Homarr non può caricare le integrazioni disponibili per questo widget.", + "noIntegrationTitle": "È necessaria un'integrazione compatibile", + "noIntegrationDescription": "Configura un'integrazione supportata da questo widget prima di aggiungerlo alla dashboard.", + "connectIntegration": "Connetti servizio", + "manageIntegrations": "Gestisci integrazioni", + "skip": "Non aggiungere", + "errorTitle": "Le impostazioni del widget non possono essere preparate", + "errorDescription": "Il modello non ha fornito una configurazione completa del widget. Nessun widget è stato aggiunto." + }, + "approvalRequired": "Omologazione richiesta", + "complete": "Complete", + "denied": "Negato", + "failed": "Non riuscito", + "working": "Lavorare", + "approvalDescription": "Rivedere questa modifica prima di eseguire.", + "approveAndRun": "Approva ed esegui", + "deny": "Nega", + "autoApproval": { + "label": "Approvazioni automatiche", + "composerLabel": "Approva per me", + "title": "Approvazioni automatiche", + "description": "Prepara automaticamente i moduli e approva le modifiche protette per questa conversazione. Le domande sono ancora in attesa della tua risposta e le tue autorizzazioni Homarr sono ancora valide. Questo si spegne quando cambi conversazione.", + "enable": "Abilita per questa conversazione", + "disable": "Disattiva approvazioni automatiche", + "enabled": "Le approvazioni automatiche sono attivate", + "approving": "Approvazione automatica" + } } } diff --git a/packages/translation/src/lang/ja.json b/packages/translation/src/lang/ja.json index 0881e82d8..3616aeb4f 100644 --- a/packages/translation/src/lang/ja.json +++ b/packages/translation/src/lang/ja.json @@ -1,156 +1,246 @@ { "init": { - "step": { - "start": { - "title": "Homarrへようこそ", - "subtitle": "Homarrインスタンスの設定を始めましょう。", - "description": "始めるには、Homarrインスタンスの設定方法を選択してください。", - "action": { - "scratch": "自分でゼロから作成", - "importOldmarr": "1.0 より前の Homarr からインポート", - "restoreSqlite": "", - "restoreSqliteDescription": "", - "backToOptions": "" + "studio": { + "navigationLabel": "初期登録セクション", + "back": "戻る", + "buildBoard": "ボードを作る", + "common": { + "unknownError": "問題が発生しました。あなたの選択はまだここにあります。もう一度やり直してください。" + }, + "claim": { + "checking": "このオンボーディングセッションを保護しています…", + "checkingTitle": "安全なセットアップを準備中", + "lockedTitle": "別のブラウザでセットアップを開いています", + "lockedDescription": "そこで続けるか、セキュリティで保護された最初の実行セッションが再試行する前に期限切れになるのを待ちます。", + "signInTitle": "管理者のサインインが必要です", + "signInDescription": "管理者は既に存在します。ログインして資格情報またはサービスアクセスを公開せずにセットアップを再開してください。", + "signIn": "サインインして再開する", + "errorTitle": "セットアップを保護できませんでした", + "errorDescription": "ページを再読み込みして、セキュアな最初の実行セッションを再試行してください。" + }, + "navigation": { + "essentials": "エッセンシャル", + "discover": "Discover", + "connect": "接続する", + "board": "ボード", + "extend": "拡張", + "review": "レビュー" + }, + "welcome": { + "title": "お帰り。", + "description": "Homarr v{version}へようこそ。必需品をご案内し、最初のボードの構築をお手伝いします。", + "start": "始めよう", + "restore": "バックアップを復元", + "restoreTitle": "バックアップから復元", + "restoreDescription": "フルSQLiteバックアップはボード、人、アプリ、統合、設定を復元します。Homarrは何かを置き換える前にそれを検証します。", + "errorTitle": "セットアップを開始できませんでした", + "errorDescription": "セットアップの選択肢はまだここにあります。再試行するか、続行する場合はページを再読み込みしてください。" + }, + "account": { + "title": "管理者を作成", + "description": "管理者ユーザーの認証情報を指定します。", + "username": "管理者のユーザー名", + "passwordHint": "8 文字以上の最小文字のみが必要です。その他のパスワード強度チェックは提案されます。", + "create": "管理者を作成", + "errorTitle": "管理者を作成できませんでした", + "recoveryTitle": "管理者アカウントが作成されました", + "recoveryDescription": "自動サインインが完了しませんでした。セットアップを続行するには、作成した管理者資格情報でサインインしてください。", + "recoveryAction": "サインインして続ける", + "unknownError": "管理者を作成できませんでした。" + }, + "externalGroup": { + "title": "管理者グループに接続", + "description": "LDAPまたはOIDCによって送信された正確なグループ名を使用してください。このグループのメンバーは管理者アクセスを受け取ります。", + "name": "外部管理者グループ", + "nameDescription": "これは大文字と小文字を区別し、IDプロバイダーと一致する必要があります。", + "continue": "グループを保存して続ける", + "errorTitle": "グループを保存できませんでした", + "unknownError": "管理者グループを保存できませんでした。" + }, + "essentials": { + "title": "使い慣れたデフォルトから開始", + "description": "誰もが最初に見る言語と外観を設定し、次にサービスで使用されるアドレスパターンをHomarrに与えます。", + "language": "デフォルトの言語", + "theme": "デフォルトのテーマ", + "themeAuto": "システム", + "themeLight": "ライト", + "themeDark": "ダーク", + "serverOriginHelp": "Homarrは検出されたサービスURLを予め入力するためにこのアドレスを使用します。あなたは個別にすべてのサービスを編集することができます。", + "serverDescription": "これはショートカットであり、制限ではありません。検出されたすべてのサービスは編集可能です。", + "serverOrigin": "ドメイン、IP、またはリバースプロキシ パス", + "serverOriginDescription": "例: home.lan, 192.168.1.10 または https://home.example.com/services 各サービスの追加方法を選択してください。", + "analytics": "匿名の製品分析を共有", + "analyticsDescription": "Homarrが機能の信頼性を向上させるのに役立ちます。サービス資格情報やダッシュボードコンテンツが送信されません。" + }, + "discover": { + "title": "このインストールが実際にどのようなものになるかご覧ください", + "description": "Homarrは機能を確認します。DockerソケットまたはKubernetesコンテキストがないと、手動でのセットアップがブロックされることはありません。", + "database": "データベース", + "docker": "Dockerと互換性のあるソケット", + "kubernetes": "Kubernetes", + "assistantWorkshop": "アシスタントとワークショップ", + "found": "{integrations} 統合と {apps} 追加アプリが見つかりました", + "retryKubernetes": "Kubernetes を再度チェック", + "retryWorkshop": "ワークショップを再度確認", + "unknownVersion": "不明なバージョン", + "kubernetesAvailable": "Kubernetes {version} に接続", + "kubernetesDisabled": "有効になっていません。Dockerまたは手動サービスを継続してください", + "kubernetesUnavailable": "Kubernetesは有効になっていますが、このHomarrプロセスからアクセスできません", + "workshopAvailable": "コミュニティワークショップおよびホストされているアシスタントサービスにアクセスできます", + "workshopUnavailable": "ローカルおよびカスタムアシスタントプロバイダは引き続き利用可能です", + "partialTitle": "いくつかのソースをスキャンできませんでした", + "partialDescription": "到達可能なホストからの結果は保持されます。ソケットの権限を確認するか、次のセクションで手動でサービスを追加してください。", + "status": { + "checking": "利用可能か確認しています…", + "available": "利用可能", + "partial": "一部利用可能", + "empty": "到達可能、一致する実行中のサービスがありません", + "disabled": "サーバー設定により無効", + "unavailable": "このHomarrプロセスから利用できません" } }, - "import": { - "title": "データのインポート", - "subtitle": "既存のHomarrインスタンスからデータをインポートできます。", - "dropzone": { - "title": "ここにzipファイルをドラッグするか、クリックして参照してください", - "description": "アップロードされたzipファイルは処理され、インポートするものを選択することができます" + "connect": { + "title": "ボードを役に立たせるものを接続する", + "description": "複数のサービスを一度に選択します。Docker ラベルは優先順位を取る、イメージマッチングの約定のギャップがあり、すべての URL と資格情報はレビュー可能です。", + "discoveredIntegrations": "検出された統合インスタンス ({count})", + "detectedIntegrationLabel": "{name}をインポートします。 {kind} として検出されました", + "detectedAppLabel": "検出されたアプリ {name}をインポート", + "otherIntegrations": "別の連携を追加", + "configureIntegrations": "連携を設定する", + "discoveredApps": "検出されたアプリ ({count})", + "appAddressRequired": "{name}のアドレスを追加するか、選択から削除してください。", + "empty": "連携機能が選択されていません。Homarrは一般的なウィジェットを持つ便利なスターターボードを作成します。", + "dockerSource": "Docker", + "manualSource": "マニュアル", + "url": "サービスURL", + "noCredentials": "資格情報なし", + "noCredentialsDescription": "この統合には資格情報は必要ありません。", + "credentialMethod": "認証方法", + "getApiKey": "このサービスのAPIキー設定を開く", + "openGuide": "このサービスのセットアップガイドを開く", + "testConnection": "接続をテスト", + "testSuccess": "接続が機能します", + "testSuccessDescription": "Homarrは現在のアドレスと資格情報に接続されています。", + "testError": "接続失敗", + "testErrorDescription": "サービスアドレスと資格情報を確認し、もう一度やり直してください。", + "needsConfiguration": "設定が必要です", + "tested": "接続がテストされました", + "testFailed": "接続テストに失敗しました", + "incompleteConfirmation": "未完了の連携はスキップされます。連携せずに続行しますか?" + }, + "board": { + "title": "基板が構築される前に形成します。", + "description": "Homarrは保護されたモバイルとベースのレイアウトを作成し、選択したサービスからアプリや互換性のあるウィジェットを配置します。", + "target": "設定するボード", + "targetDescription": "このセットアップが更新される正確な既存のボードを選択します。", + "targetPlaceholder": "ボードを選択", + "targetRequired": "続行する前に設定するボードを選択します。", + "name": "ボード名", + "nameDescription": "掲示板のURL、文字、数字、ダッシュ、アンダースコアのみで使用されます。", + "nameRequired": "続行する前にボード名を入力してください。", + "primaryColor": "原色", + "secondaryColor": "セカンダリーカラー", + "resetColors": "色をリセット", + "radius": "ウィジェットの角の半径", + "radiusOptions": { + "xs": "タイトな", + "sm": "Subtle", + "md": "バランス", + "lg": "四捨五入済み", + "xl": "ソフト" }, - "fileInfo": { - "action": { - "change": "ファイルを変更する" - } + "columns": "ボードの列", + "columnsDescription": "列は、アイテムのサイズと位置を決める水平グリッドを定義します。12 はほとんどの人に十分です。", + "columnCount": "{count, plural, one {#カラム} other {#カラム}}", + "leftSidebar": "Left sidebar", + "rightSidebar": "右サイドバー", + "previewLabel": "最初のボードレイアウトのライブプレビュー" + }, + "extend": { + "title": "高度な機能", + "tabsLabel": "アシスタント、ワークショップ、MCP のセットアップ", + "assistant": "アシスタント", + "workshop": "ワークショップ", + "assistantSetup": { + "loginTitle": "管理者のサインインが必要です", + "loginDescription": "プロバイダーのキーとモデルへのアクセス権は付与されます。セットアップを終了し、サインインを完了すると、Homarrはアシスタントの設定を直接開きます。", + "loginAction": "ログインしてアシスタントを設定する" }, - "importSettings": { - "title": "設定をインポート", - "description": "インポートの動作を設定" + "workshopSetup": { + "title": "Homarrワークショップ", + "description": "コミュニティのブラウズカスタムウィジェット、要求された機能を調べ、それらをインストールし、サーバー間でコードをコピーせずに独自の作業を公開します。", + "available": "利用可能", + "checking": "確認中…", + "unavailable": "Unavailable", + "discoverTitle": "Discover", + "discoverDescription": "実際の自己ホストワークフロー用に構築されたウィジェットを見つけます。", + "installTitle": "レビューとインストール", + "installDescription": "何かを追加する前にメタデータと設定を参照してください。", + "publishTitle": "共有", + "publishDescription": "再利用可能なウィジェットをコミュニティに公開します。", + "browse": "ワークショップを閲覧する" }, - "boardSelection": { - "title": "{count} 個のボードを見つけました", - "description": "インポートしたいサイズのボードをすべて選択してください", - "action": { - "selectAll": "すべてを選択", - "unselectAll": "すべて選択解除" - } - }, - "summary": { - "title": "インポート結果", - "description": "以下のサマリーで、インポートする内容を確認できます", - "action": { - "import": "インポートを確認して続ける" - }, - "entities": { - "apps": "アプリ", - "boards": "ボード", - "integrations": "連携機能", - "credentialUsers": "認証情報ユーザー" - } - }, - "tokenModal": { - "title": "インポートトークンを入力してください", - "field": { - "token": { - "label": "トークン", - "description": "以前のhomarrインスタンスから表示されたインポートトークンを入力してください" - } - }, - "notification": { - "error": { - "title": "無効なトークン", - "message": "入力されたトークンは無効です" - } - } + "mcpSetup": { + "title": "Homarr MCP", + "description": "Claude、Codex、または他のMCPクライアントをHomarrの型付けツールに接続します。APIキーは明示的かつ取り消し可能なアクセスを維持します。", + "endpoint": "Streamable HTTP エンドポイント", + "keyTitle": "このキーを今すぐコピー", + "keyDescription": "セキュリティのため、HomarrはこのAPIキーを再び表示できません。", + "copyKey": "API キーをコピー", + "createKey": "MCP API キーを作成", + "errorTitle": "MCP API キーを作成できませんでした", + "loginRequired": "セットアップ後に管理者としてサインインしてAPIキーを作成します。", + "configuration": "クライアント設定", + "copy": "設定をコピー", + "copied": "コピーしました", + "advanced": "MCP ツール、権限、およびセットアップの詳細を開く" } }, - "user": { - "title": "管理者ユーザー", - "subtitle": "管理者ユーザーの認証情報を指定します。", - "notification": { - "success": { - "title": "ユーザーが作成されました", - "message": "ユーザーが正常に作成されました" - }, - "error": { - "title": "ユーザーの作成に失敗しました" - } - } - }, - "group": { - "title": "外部グループ", - "subtitle": "外部ユーザーに使用するグループを指定します。", - "form": { - "name": { - "label": "グループ名", - "description": "名前は外部プロバイダの管理者グループと一致する必要があります" - } - } - }, - "settings": { - "title": "設定", - "subtitle": "サーバーの設定。" - }, - "integrations": { - "title": "", - "subtitle": "", - "description": "", - "action": { - "continue": "", - "skip": "" - }, - "configure": { - "progress": "", - "skip": "", - "finishing": "", - "error": { - "title": "", - "message": "" - }, - "helpers": { - "tooltip": "", - "description": "" - } - }, - "urlTemplate": { - "label": "", - "placeholder": "", - "hint": "", - "warning": "", - "preview": "", - "mode": { - "subdomain": "", - "hostPort": "" - } - }, - "docker": { - "detected": "", - "detectedBreakdown": "", - "summary": "", - "appBadge": "", - "appSectionLabel": "", - "scanning": "", - "scanningDescription": "" + "review": { + "title": "サービスの周りに設置されたボードが1つあります", + "description": "Homarrは保存されていない接続をテストし、選択したアプリケーションをインポートし、外観とレイアウトを適用し、構成された正確なボードを開きます。", + "board": "最初のボード", + "columns": "ボードの列", + "columnsValue": "{count, plural, one {#カラム} other {#カラム}}", + "sidebars": "サイドバー", + "sidebarsValue": "{count, plural, =0 {None} one {# sidebar} other {# sidebars}}", + "layouts": "レスポンシブなレイアウト", + "layoutsValue": "モバイル + ベース", + "integrations": "連携機能", + "integrationsValue": "{count, plural, =0 {選択されていない} one {# integrations} other {# integrations}}", + "apps": "アプリタイル", + "appsValue": "{count, plural, =0 {スターターアプリのみ} one {# アプリタイル} other {# アプリタイル}}", + "language": "言語", + "theme": "テーマ", + "themeAuto": "システム設定", + "themeLight": "ライト", + "themeDark": "ダーク", + "colors": "ボードの色", + "radius": "ウィジェットの半径", + "automaticTitle": "Homarrが作成するもの", + "automaticDescription": "互換性のあるウィジェット、アイコン、アプリリンク、統合リレーションシップ、レスポンシブ配置は、共有されたHomarrカタログから提供されています。後ですべての結果を編集できます。", + "dockerWarningTitle": "セットアップ中にいくつかの Docker ラベルが変更されました", + "dockerWarningDescription": "{count, plural, one {# 選択した Docker 結果は、サービスが変更され、別のボードをターゲットにしたり、ウィジェットが互換性がないため適用できませんでした} other {# 選択された Docker 結果は、サービスが変更され、別のボードをターゲットにしたり、ウィジェットが互換性がないため、適用できませんでした}}", + "errorTitle": "ボードを構築できませんでした", + "progress": { + "applying": "接続をテストし、ボードを構築する", + "done": "ボードの準備ができました" } }, "finish": { - "title": "設定終了", - "subtitle": "準備ができています!", - "description": "セットアッププロセスが正常に完了しました。今すぐHomarrの使用を開始できます。次のアクションを選択してください:", - "action": { - "goToBoard": "{name} ボードへ移動", - "createBoard": "あなたの最初のボードを作成する", - "inviteUser": "他のユーザーを招待する", - "docs": "ドキュメントを読む" - } + "title": "最初のボードの準備ができました。", + "description": "Homarrは選択したピースを接続し、残りを編集可能にしました。 今すぐボードを開きます; ショートインプロダクトツアーでは、編集モード、ウィジェット、レイアウト、検索を表示できます。", + "openBoard": "ボードを開く", + "manageTitle": "管理", + "manageDescription": "アプリ、統合、ボード、ユーザー、サーバーの設定を微調整します。", + "workshopTitle": "ワークショップ", + "workshopDescription": "コミュニティのカスタムウィジェットを見つけてインストールします。", + "docsTitle": "Homarrを学ぶ", + "docsDescription": "ボード、ウィジェット、統合、ツールのフォーカスされたガイドをお読みください。" } - }, - "backToStart": "最初に戻る" + } }, "user": { - "title": "ユーザー", "name": "ユーザー", "page": { "login": { @@ -159,12 +249,10 @@ }, "invite": { "title": "Homarrに参加", + "titleWithAppName": "{appName} に参加", "subtitle": "Homarrへようこそ!アカウントを作成してください", + "subtitleWithAppName": "{appName}へようこそ!アカウントを作成してください", "description": "あなたは {username} に招待されました" - }, - "init": { - "title": "新しいHomarrのインストール", - "subtitle": "最初の管理者ユーザーを作成してください" } }, "field": { @@ -192,12 +280,17 @@ "previousPassword": { "label": "以前のパスワード" }, - "homeBoard": { - "label": "ホームボード" - }, "pingIconsEnabled": { "label": "Pingにアイコンを使う" }, + "byteUnitSystem": { + "label": "データサイズの単位", + "description": "Homarrがバイトサイズとバイトレートを表示する方法を選択します。ビットレートは常に10進数を使用します。", + "options": { + "binary": "バイナリ", + "decimal": "小数点以下桁数" + } + }, "enableRightClickOnWidgets": { "label": "", "description": "" @@ -247,7 +340,6 @@ } } }, - "create": "ユーザーを作成する", "changePassword": { "label": "パスワードの変更", "notification": { @@ -259,56 +351,6 @@ } } }, - "changeHomeBoard": { - "notification": { - "success": { - "message": "ホームボードは正常に変更されました" - }, - "error": { - "message": "ホームボードを変更することができません" - } - } - }, - "changeSearchPreferences": { - "notification": { - "success": { - "message": "検索設定は正常に変更されました" - }, - "error": { - "message": "検索設定を変更することができません" - } - } - }, - "changeFirstDayOfWeek": { - "notification": { - "success": { - "message": "週の最初の日は、正常に変更されました" - }, - "error": { - "message": "週の最初の日を変更することができません" - } - } - }, - "changePingIconsEnabled": { - "notification": { - "success": { - "message": "Pingアイコンの切り替えに成功しました" - }, - "error": { - "message": "Pingアイコンを切り替えることができません" - } - } - }, - "changeDdgBangs": { - "notification": { - "success": { - "message": "" - }, - "error": { - "message": "" - } - } - }, "manageAvatar": { "changeImage": { "label": "画像を変更", @@ -338,16 +380,6 @@ } } }, - "editProfile": { - "notification": { - "success": { - "message": "プロファイルが正常に更新されました" - }, - "error": { - "message": "プロファイルを更新できません" - } - } - }, "delete": { "label": "ユーザーを恒久的に削除", "description": "ユーザー設定を含むこのユーザーを削除します。ボードは削除されません。ユーザーには通知されません。", @@ -356,18 +388,13 @@ "select": { "label": "ユーザーを選択", "notFound": "ユーザーが見つかりません" - }, - "transfer": { - "label": "新しいオーナーを選択" } } }, "group": { - "title": "グループ", "name": "グループ", "search": "グループを探す", "field": { - "name": "名称", "members": "メンバー", "homeBoard": { "label": "ホームボード", @@ -388,6 +415,19 @@ } } }, + "custom-widget": { + "title": "カスタム ウィジェット", + "item": { + "manage": { + "label": "カスタム ウィジェットの管理", + "description": "メンバーにカスタム ウィジェットの定義の作成、編集、削除を許可する" + }, + "secret-write": { + "label": "カスタム ウィジェットのシークレットを設定", + "description": "メンバーとそのAPIキーが暗号化されたカスタムウィジェットの資格情報を設定できるようにする" + } + } + }, "app": { "title": "アプリ", "item": { @@ -493,6 +533,35 @@ "description": "メンバーに任意の検索エンジンの管理と削除を許可する" } } + }, + "matrix": { + "none": "アクセスできません", + "impliedHint": "付与: {permissions}", + "grantedViaAdmin": "管理者はすでにこれを持っています。管理者を「アクセスできません」に設定すると個別に設定できます。", + "preset": { + "label": "プリセット", + "viewer": "ビューアー", + "viewerDescription": "読み取り専用: ボードとメディアを表示し、既存のアプリと統合を使用します。", + "editor": "エディター", + "editorDescription": "日々の管理:ボード、アプリ、統合、検索エンジンの作成と編集。", + "admin": "管理者", + "adminDescription": "ユーザー管理を含むすべての機能と設定への無制限のアクセス。", + "custom": "カスタム" + }, + "effective": { + "title": "有効な権限", + "description": "間接的に付与された権限を含め、このグループのメンバーが実行することができます。", + "empty": "権限が選択されていません" + }, + "noneDescription": "メンバーはこのエリアにアクセスできません。", + "level": { + "view": "表示", + "use": "使用", + "interact": "相互作用", + "modify": "変更", + "full": "フル" + }, + "capabilityIncluded": "既に「{level}」に含まれています" } }, "memberNotice": { @@ -607,21 +676,24 @@ "search": "アプリを探す", "page": { "list": { - "title": "アプリ", + "ariaLabel": "設定されたアプリ", "noResults": { "title": "アプリは、まだありません", - "action": "最初のアプリを作成する" + "description": "アプリは、ボードに必要なサービスやツールへのリンクです。", + "action": "最初のアプリを作成する", + "filteredTitle": "検索条件に一致するアプリはありません", + "filteredDescription": "\"{search}\" に一致するアプリはありません。別の名前または URL をお試しください。", + "createOnlyTitle": "アプリのみを追加できます", + "createOnlyDescription": "権限によりアプリを作成できますが、既存の権限は参照できません。管理者にアプリ管理権限を問い合わせて、完全な一覧を表示してください。" } }, "create": { "title": "アプリを新規作成", "notification": { "success": { - "title": "作成成功", "message": "アプリが正常に作成されました" }, "error": { - "title": "作成失敗", "message": "アプリを作成できませんでした" } } @@ -630,11 +702,9 @@ "title": "アプリを編集", "notification": { "success": { - "title": "変更は正常に適用されました", "message": "アプリは正常に保存されました" }, "error": { - "title": "変更を適用できません", "message": "アプリを保存できませんでした" } } @@ -644,26 +714,18 @@ "message": "アプリ {name} を削除してもよろしいですか?", "notification": { "success": { - "title": "削除成功", "message": "アプリが正常に削除されました" }, "error": { - "title": "削除失敗", "message": "アプリを削除できませんでした" } } } }, "field": { - "name": { - "label": "名称" - }, "description": { "label": "説明" }, - "url": { - "label": "URL" - }, "useDifferentUrlForPing": { "checkbox": { "label": "ping に 別の URL を使用する", @@ -678,34 +740,582 @@ "search": "アプリを探す", "noResults": "検索結果はありません", "action": "{app} を選択", - "title": "このボードに追加するアプリを選択" + "title": "このボードに追加するアプリを選択", + "toggle": "クリックして選択", + "selected": "選択済み", + "multiple": "{count} を追加", + "selectedCount": "{count, plural, one {# selected} other {# selected}}", + "appsSelected": "{count, plural, other {# 個のアプリを選択中}}", + "selectMultiple": "複数を選択", + "cancelMultiple": "複数選択を終了", + "customApplication": "カスタム アプリケーション", + "application": "アプリケーション" }, "create": { "title": "新しいアプリを作成", "description": "新しいアプリを作成する", "action": "アプリの作成を開く" + } + } + }, + "tips": { + "dismiss": "チップを閉じる", + "multiSelectApps": "ヒント:複数のアプリを同時に選択するにはCtrl / ⌘を押します。" + }, + "customWidget": { + "secretEntry": { + "title": "API ソースの設定", + "description": "サーバーのURLを確認して資格情報を入力してください。シークレットの値はHomarrによって暗号化され、要求しているエージェントに返されることはありません。", + "loading": "安全なリクエストを読み込み中…", + "applying": "この設定を適用中…このページを開いたままにしてください。", + "saved": "API ソースが設定されています。このページを閉じることができます。", + "unavailable": "リクエストは利用できません", + "saveError": "API ソースを設定できません", + "source": "API ソース: {name}", + "baseUrl": "サーバー URL", + "networkScope": "ネットワークアクセス", + "save": "API設定を保存", + "expires": "この一回限りのリクエストは {time} に期限が切れます。" + }, + "page": { + "list": { + "noResults": "", + "noDescription": "説明がありません", + "enabled": "有効", + "disabled": "無効", + "disabledDescription": "このウィジェットは設定されたままですが、ボードに読み込まれません。", + "requestCount": "{count, plural, one {# request} other {# requests}}", + "invalidDefinition": "無効な定義", + "migrationRequired": "移行が必要です", + "migrationInstructions": "format@@0を開いて、手動レクリエーションのオリジナルの v1 定義をコピーまたはエクスポートします。 また、LLM とともに移行プロンプトを使用することもできます。移行後も既存のボード配置が機能し続けます。", + "missingCredentials": "{count, plural, one {クレデンシャルが} other {# クレデンシャルが}}", + "missingCredentialsDescription": "{count, plural, one {このウィジェットにはまだ1つの資格情報が必要です。} other {このウィジェットにはまだ#の資格情報が必要です。}} URLと暗号化された値を設定するには、このバッジを選択してください。" }, - "add": "アプリを追加する" + "create": { + "title": "", + "subtitle": "" + }, + "tabs": { + "ariaLabel": "カスタム ウィジェットセクション", + "installed": "インストール済み", + "workshop": "ワークショップ" + } + }, + "action": { + "pasteImportHint": "Ctrl+V または Command+V を使用して完全なカスタム ウィジェット JSON を貼り付け", + "delete": "", + "deleteConfirm": "", + "export": "", + "duplicate": "", + "aiPrompt": "AIによるデザイン", + "copyAiPrompt": "", + "enable": "", + "disable": "", + "menu": "", + "downloadSkill": "カスタムウィジェットスキルを表示", + "publishWorkshop": "ワークショップに公開", + "migrate": "カスタムウィジェットの移行", + "configureSources": "ソースの設定", + "copyLegacyDefinition": "元のウィジェットのコンテンツをコピー", + "exportLegacyDefinition": "元のウィジェットのコンテンツをエクスポート", + "copyMigrationPrompt": "LLM移行プロンプトをコピー", + "pasteMigration": "移行したウィジェットを貼り付け", + "importMigration": "移行済みの JSON ファイルをインポート" + }, + "sourceSetupDialog": { + "title": "ウィジェットのソースを設定", + "description": "このウィジェットが接続されている場所を確認し、暗号化された資格情報を追加または置き換えます。", + "credentialsRequired": "要求された資格情報が追加されるまでリクエストは失敗します。", + "save": "設定を保存" + }, + "field": { + "description": "" + }, + "editor": { + "errorBoundary": { + "title": "問題が発生しました" + }, + "action": { + "components": "コンポーネント", + "format": "書式", + "insertStarter": "Insert starter", + "redo": "Redo", + "copied": "コピーしました", + "schema": "スキーマ" + }, + "reference": { + "minimal": "最小限の例", + "full": "完全な例" + }, + "componentReference": { + "search": "コンポーネントを検索", + "empty": "一致するコンポーネントがありません", + "count": "{count, number} コンポーネントが利用可能です" + }, + "status": { + "errors": "{count, number} エラー", + "warnings": "{count, number} 警告", + "ready": "問題は見つかりませんでした", + "position": "Ln {line, number}, Col {column, number}", + "characters": "{count, number} 文字", + "charactersWithLimit": "{count, number} / {limit, number}" + }, + "diagnostics": { + "title": "テンプレートの診断", + "line": "ライン {line, number}", + "ast": "{value}", + "bindingTypeConflict": "入力 \"{value}\" は互換性のない値タイプのコントロールで共有されます。", + "runtimeBindingTypeConflict": "入力 \"{value}\" は {firstType} と {secondType} の両方として結合されます。", + "dynamicRequestId": "リテラルリクエストIDが必要です。ダイナミックリクエストIDは受け付けられません。", + "dynamicInputBinding": "bindにはリテラル入力名が必要です。", + "inlineRequestProps": "ネットワーク コンポーネントは requestId とパラメータを受け付けます。インライン URL、メソッド、ヘッダー、および body props はブロックされます。", + "invalidRequestManifest": "名前付きリクエストは有効なリクエストマップでなければなりません。 {value}", + "missingRequestId": "このネットワークコンポーネントにはリテラルの requestId が必要です。", + "templateEmpty": "JSX テンプレートを入力します。", + "templateTooLong": "テンプレートは 50,000 文字制限を超えています。", + "unknownRequest": "ID \"{value}\" の名前付きリクエストは存在しません。" + } + }, + "workbench": { + "configure": "設定", + "sectionNavigation": "カスタム ウィジェットセクション", + "widgetPreview": "ウィジェットのプレビュー", + "generalInformation": "一般情報", + "invalidWidget": "無効なウィジェット", + "section": { + "general": "一般", + "sources": "API ソース", + "requests": "リクエスト", + "options": "オプション", + "jsx": "JSX", + "preview": "プレビュー" + }, + "status": { + "unsaved": "変動が保存されていません", + "invalid": "注意が必要です", + "ready": "準備完了" + }, + "saveError": { + "title": "ウィジェットは保存されませんでした", + "description": "これらの検証エラーを修正し、再度保存します。", + "more": "+{count} のエラーがワークベンチに表示されます。", + "errors": "検証エラー", + "copy": "エラーをコピー", + "copied": "エラーがコピーされました" + }, + "action": { + "preview": "テストとプレビュー", + "previewLoading": "要求をテスト中" + }, + "requests": { + "title": "名前付きクエリとアクション", + "label": "リクエスト", + "description": "クエリはデータをロードします。アクションはユーザーが操作した後にのみ実行されます。任意の HTTP メソッドはどちらの種類でも有効です。" + }, + "options": { + "title": "ウィジェットのオプション" + }, + "builder": { + "advancedManifest": "高度な生マニフェストを作成", + "advancedJson": "高度なマニフェストJSON", + "manifestFilename": "widget.json", + "request": "リクエスト {count, number}", + "requestId": "要求ID", + "type": "ダウンロードクライアントの種類", + "method": "方法", + "source": "API ソース", + "run": "実行", + "runLoad": "ウィジェットがロードされたとき", + "runManual": "SubFetch から", + "permission": "権限", + "path": "パス", + "pathDescription": "ウィジェットのオプションには '{option:name}' を、呼び出し値には '{param:name}' を使用します。", + "requestDetails": "クエリ、身体、行動", + "queryValues": "クエリ値", + "queryKey": "クエリキー", + "queryKeyInvalid": "文字で始まり、文字、数字または_のみを含む一意のIDを使用してください。", + "valueSource": "Value source", + "literal": "リテラル", + "widgetOption": "ウィジェットオプション", + "invocationParameter": "呼び出しパラメータ", + "option": "Option", + "parameterName": "パラメーター名", + "value": "値", + "removeQueryValue": "クエリの値を削除", + "addQueryValue": "クエリの値を追加", + "jsonBody": "JSON 本文", + "jsonBodyDescription": "任意です。 $option と $param の参照を任意の深さに挿入します。", + "insertOptionReference": "オプション参照の挿入", + "insertParameterReference": "パラメータ参照を挿入", + "confirmation": "確認メッセージ", + "invalidation": "成功後に更新", + "invalidationDescription": "カンマ区切りのクエリ ID", + "noAuth": "ソース認証なしで送信", + "moveRequestUp": "上へ移動", + "moveRequestDown": "リクエストを下に移動", + "removeRequest": "リクエストを削除", + "addRequest": "リクエストを追加", + "optionName": "オプション名", + "label": "ラベル", + "control": "コントロール", + "description": "説明", + "default": "デフォルト", + "optionDetails": "制約と動的選択", + "minimum": "最小", + "maximum": "最大値", + "step": "Step", + "choiceLabel": "選択ラベル", + "choiceValue": "選択値", + "newChoice": "新しい選択", + "addChoice": "選択肢を追加", + "removeChoice": "選択肢を削除", + "choicesRequest": "リクエストから選択肢を読み込む", + "itemsPath": "アイテムのパス", + "itemsPathPlaceholder": "項目 (オプション)", + "valuePath": "値のパス", + "labelPath": "ラベルのパス", + "group": "グループ", + "advancedOption": "高度なオプション", + "moveOptionUp": "オプションを上に移動", + "moveOptionDown": "オプションを下に移動", + "removeOption": "オプションを削除", + "addOption": "オプションを追加", + "invalidJson": "不正な JSON", + "invalidWidget": "無効なウィジェット" + }, + "jsx": { + "title": "JSX テンプレート", + "label": "テンプレート" + }, + "sources": { + "title": "API ソースと資格情報", + "newName": "API {count, number}", + "duplicateSourceId": "API ソース ID は一意である必要があります。", + "credentialRemoved": "認証情報を削除しました", + "credentialRemovedDescription": "格納された値が削除されました。", + "primary": "プライマリAPI", + "id": "ソースID", + "name": "ジョブ名", + "baseUrl": "ベースURL", + "baseUrlError": { + "invalid": "完全な URL を入力してください。", + "protocol": "HTTP または HTTPS の URL を使用します。", + "credentials": "このURLからユーザー名とパスワードを削除します。代わりに以下の資格情報を設定してください。", + "queryOrFragment": "このベース URL からクエリ文字列またはフラグメントを削除します。名前付きリクエストにクエリ値を追加します。" + }, + "networkScope": "ネットワークアクセス", + "authentication": "認証", + "headerName": "ヘッダー名", + "queryParameter": "クエリパラメータ", + "configured": "設定 — 置き換えを入力", + "clear": "晴れ", + "remove": "ソースとそのリクエストを削除", + "advanced": "高度な設定", + "add": "別の API ソースを追加", + "sourceType": "連携機能", + "manualSource": "HTTP API", + "existingIntegration": "既存の統合", + "integrationType": "連携タイプ", + "selectIntegration": "設定された統合", + "noIntegrations": "一致するインテグレーションはありません", + "integrationUnavailable": "選択したインテグレーションは利用できません。別のインテグレーションを選択してください。", + "integrationDescription": "保存されたインテグレーションURLと資格情報を使用します。変更は自動的に適用されます。リクエストを実行するには完全なインテグレーションアクセスが必要です。" + }, + "ai": { + "title": "任意のAIで作成または修正する", + "description": "API ドキュメントの URL を最初に追加します。修正については、可能な場合はプレビューを実行してください。 プロンプトを任意のAIにコピーします。詳細を確認することができます。最後のJSONをここに貼り付けてください。", + "request": "このウィジェットは何をすべきですか?", + "documentationUrl": "API ドキュメント URL (オプション)", + "paste": "貼り付け", + "response": "AI応答", + "manualCopyDescription": "クリップボードへのアクセスは利用できません。以下のプロンプトを選択し、手動でコピーしてください。", + "manualPasteDescription": "クリップボードへのアクセスが利用できないか、コピーされた応答に修正が必要です。ここにAIのJSON応答を貼り付けます。", + "selectAll": "すべてを選択", + "loadResponse": "負荷応答", + "loaded": "ウィジェットをエディタに読み込んでいます", + "invalidResponse": "クリップボードに有効なv2ウィジェットが含まれていません", + "invalidResponseDetail": "AI応答が無効です: {message}" + }, + "preview": { + "invalid": "このウィジェットをプレビューするために検証エラーを修正しました。", + "fixtureError": "フィクスチャーのプレビューエラー", + "requestData": "データを要求する", + "status": { + "idle": "リクエストはテストされていません", + "loading": "要求をテスト中", + "success": "すべての負荷要求に成功しました", + "error": "1つ以上の負荷要求に失敗しました" + }, + "result": { + "loading": { + "title": "APIリクエストのテスト", + "description": "Homarrはプレビューセッションを作成し、ウィジェットデータをロードしています。" + }, + "success": { + "title": "プレビュー準備完了", + "description": "{succeeded, plural, =0 {このウィジェットには読み込みリクエストがありません!} one {# 読み込みリクエストは成功しました!} other {# 読み込みリクエストは成功しました。}} 読み込みデータを開いてレスポンスを調べます。" + }, + "error": { + "title": "プレビューはリクエストエラーで完了しました", + "description": "{succeeded, number} が成功し、 {failed, number} が失敗しました。応答とエラーの詳細のオープンデータ。" + } + }, + "instanceOptions": "インスタンスオプション", + "liveActions": "設定された API に対してアクションを実行する", + "liveActionsDescription": "オフは安全なシミュレーションです。オンにすると実際のサービスに影響します。", + "noActions": "アクションが定義されていません。", + "containedFailures": "ランタイム失敗はウィジェット内に含まれています。リクエストジャーナルにシークレット値は含まれていません。", + "validation": { + "title": "検証", + "ready": "ウィジェットの定義は有効です。" + }, + "accessibility": { + "title": "アクセシビリティチェック", + "ready": "一般的なアクセシビリティの省略は検出されません。", + "pending": "ウィジェットの定義が有効な場合、アクセシビリティチェックが実行されます。", + "imageAlt": "すべての画像に代替テキストを追加するには、装飾画像にのみ空の代替テキストを使用します。", + "actionIconLabel": "すべてのActionIconにaria-labelまたはタイトルを追加します。", + "inputLabel": "表示ラベルまたはアクセス可能な名前をすべて入力に追加します。" + }, + "journal": "編集されたリクエスト雑誌", + "actionParameters": "アクションパラメータ (JSON)", + "invalidParameters": "宣言された文字列、数値、およびブールパラメータ型を使用します。", + "runDestructive": "破壊行為を実行", + "runAction": "実行アクション", + "deleteConfirmation": "このプレビューアクションは、設定された API を介してリモートデータを変更します。", + "simulated": "シミュレートされたアクション", + "httpStatus": "HTTP {status, number}", + "tab": { + "widget": "ウィジェット", + "data": "データ", + "options": "オプション", + "state": "作業状態", + "actions": "操作", + "diagnostics": "診断" + }, + "size": { + "compact": "コンパクト化", + "standard": "標準", + "wide": "幅広い順" + }, + "fixture": { + "live": "ライブ", + "loading": "読み込み中", + "empty": "空", + "error": "エラー" + } + } + }, + "preview": { + "request": { + "permission": { + "view": "表示", + "modify": "変更", + "full": "フル" + } + } + }, + "notification": { + "created": "", + "updated": "", + "deleted": "", + "imported": "", + "migrated": "レガシーウィジェットは正常に移行されました。既存のボード配置ではv2定義が使用されるようになりました。", + "migrationError": "レガシーウィジェットの移行に失敗しました。ファイルが homarr-custom-widget-v2 スキーマを使用していることを確認してください。", + "legacyDefinitionCopied": "元のウィジェットのコンテンツがコピーされました。格納された資格情報値は含まれません。", + "legacyDefinitionCopyError": "元のウィジェットのコンテンツのコピーに失敗しました。", + "migrationPromptCopied": "編集されたマイグレーションプロンプトがコピーされました。LLMに貼り付け、JSONレスポンスをコピーし、ここにPaste migratedウィジェットを選択します。", + "migrationPromptCopyError": "移行プロンプトのコピーに失敗しました。", + "sourcesConfigured": "ウィジェットのソースと資格情報を保存しました。", + "sourceConfigurationError": "ウィジェット ソースの設定に失敗しました。", + "aiPromptCopiedWithCount": "AIプロンプトをクリップボードにコピーしました({count, number}文字)。", + "aiPromptCopyError": "", + "aiPromptSent": "プロンプトが送信されました。アシスタントがバックグラウンドで動作しながら編集を続けることができます。", + "updateError": "", + "importError": "", + "exportError": "", + "duplicated": "", + "duplicateError": "", + "toggleError": "", + "deleteError": "", + "previewError": "" + }, + "importReview": { + "title": "カスタム ウィジェットのインポートを確認", + "description": "このウィジェットが接続されている場所と、インポートする前に必要なコントロールにアクセスするボードを確認します。", + "migrationTitle": "Review migrated v2 replacement", + "migrationDescription": "この生成されたv2定義を確認します。既存のボード配置を同じウィジェット IDにリンクしたまま保存されたv1レコードをアトミックに置き換えることを確認します。", + "fileLabel": "カスタム ウィジェット JSON ファイルを選択します。", + "name": "ジョブ名", + "origin": "基底元", + "authentication": "認証", + "networkScope": "ネットワークの範囲", + "methods": "HTTPメソッド", + "permissions": "必要なボード権限", + "sourceSetup": { + "title": "API ソースの設定", + "description": "このウィジェットがどこに接続しているかを確認し、資格情報を追加します。プライベートURLとループバックURLは、Homarrインストールに固有です。", + "suggestedUrl": "おすすめの URL", + "confirmUrl": "このサーバーのURLがHomarrのインストールに正しいことを確認します。", + "ready": "URL 準備完了", + "needsUrl": "URLを確認", + "credentialsMissing": "資格情報がありません", + "credentialsOptional": "資格情報なしでインストールし、後で設定することができますが、リクエストは追加されるまで失敗します。" + }, + "actionWarning": { + "title": "このウィジェットはリモートデータを変更できます", + "description": "すべての名前付きアクション、継承された資格情報、インポート後の破壊的な確認を確認します。秘密はファイルに含まれません。" + }, + "cancel": "インポートをキャンセル", + "confirm": "ウィジェットをインポート", + "confirmMigration": "v2の交換を確認する" + }, + "secret": { + "apiKey": "API キーまたはトークン", + "username": "", + "password": "", + "savedPlaceholder": "" + } + }, + "workshop": { + "title": "ワークショップ", + "browseWorkshop": "ワークショップを閲覧する", + "openCommunity": "ワークショップを開く", + "openOnWorkshop": "ワークショップのウェブサイトで {title} を開く", + "back": "ワークショップに戻る", + "search": "ウィジェットを検索", + "searchCss": "CSS テーマを検索", + "sort": "並べ替え", + "sortTop": "上位評価", + "sortNewest": "最新", + "listAriaLabel": "ワークショップウィジェット", + "listAriaLabelCss": "ワークショップの CSS テーマ", + "empty": "検索条件に一致するウィジェットがありません。", + "emptyDescription": "ワークショップに公開されたコミュニティウィジェットがここに表示されます。", + "emptyFilteredTitle": "検索条件に一致するウィジェットがありません", + "emptyFilteredDescription": "ワークショップウィジェットが \"{search}\" に一致しません。", + "emptyCss": "この検索に一致するCSSテーマがありません。", + "unavailableTitle": "Homarrワークショップは利用できないようです", + "unavailable": "コミュニティサービスが一時的にダウンしている可能性があります。しばらくしてからもう一度お試しください。インストールされているウィジェットは影響を受けません。", + "loadError": "この提出物を読み込めませんでした。", + "noDescription": "説明がありません", + "author": "作成者: {name}", + "communityMember": "コミュニティメンバー", + "outdated": "古い順", + "outdatedWarning": "著者はこの提出物を古くなっているとマークしました.インポートする前に注意深く確認してください.", + "score": "スコア: {count, number}", + "upvote": "Upvote", + "downvote": "Downvote", + "voteError": "投票を保存できませんでした。", + "signIn": "GitHub でサインイン", + "signInError": "GitHub のサインインに失敗しました。Workshop OAuth プロバイダーが設定されていることとポップアップが許可されていることを確認してください。", + "signOut": "サインアウト", + "signInHint": "投票またはレポートするにはサインインしてください。インストールにはワークショップアカウントは必要ありません。", + "securityNotice": "ワークショップウィジェットは宣言されたAPIソースを呼び出したり、ローカルで設定した資格情報を使用して宣言されたアクションを実行することができます。秘密は含まれません。", + "securityNoticeCss": "コミュニティ CSS はボードの外観と使いやすさを変更できます。インポートする前に確認してください。ボードの設定を保存するまで何も保存されません。", + "install": "インストール", + "installReviewTitle": "インストールする前にレビュー", + "installError": "このウィジェットはインストールできません", + "installErrorDescription": "ワークショップの提出は有効なカスタム JSX v2 ウィジェットではありません。", + "useCss": "Import CSS", + "importCss": "ワークショップからCSSをインポート", + "importCssConfirm": "現在のカスタム CSS を \"{title}\" に置き換えますか?ボードの設定を保存するまで何も保存されません。", + "screenshotAlt": "{title}のスクリーンショット {count, number}", + "screenshotViewer": "{title} スクリーンショットビューアー", + "screenshotsLabel": "{title} スクリーン ショット", + "zoomScreenshot": "フルサイズを表示", + "previousScreenshot": "以前のスクリーンショット", + "nextScreenshot": "次のスクリーンショット", + "showScreenshotThumbnails": "スクリーンショットのサムネイルを表示", + "hideScreenshotThumbnails": "スクリーンショットのサムネイルを非表示", + "closeScreenshotViewer": "スクリーンショットビューアを閉じる", + "technicalDetails": "技術的な詳細", + "sourceCode": "ワークショップのエントリ", + "export": "エクスポート", + "report": "レポート", + "reportTitle": "提出を報告", + "reportReason": "理由:", + "reportExplanation": "ワークショップのモデレータは何を知っているべきですか?", + "reportSend": "レポートを送信", + "reportSent": "レポートが送信されました", + "reportSentDescription": "ワークショップモデレータがこの提出物を確認できるようになりました。", + "reportCount": "{count, plural, one {# reports} other {# reports}}", + "reportWarning": "{count, plural, one {この提出物には # 個のオープンなコミュニティレポートがあります!} other {この提出物には # 個のオープンなコミュニティレポートがあります。}} インストール可能ですが、最初にコンテンツを確認する必要があります。", + "reportVisibility": "レポートの詳細は、この提出物の著者およびワークショップ管理者にのみ表示されます。", + "reportCategory": { + "outdated": "古いまたは動作していません", + "malicious": "悪意のある", + "spam": "スパム", + "copyright": "著作権", + "inappropriate": "不適切です", + "other": "その他" + }, + "publish": { + "title": "ワークショップに公開", + "introTitle": "このウィジェットをコミュニティと共有", + "introDescription": "Homarrは現在のウィジェットの資格情報なしコピーをエクスポートします。インストールする前にリストの詳細を知るように明確なリストの詳細を追加します。", + "listingDetails": "ワークショップ一覧", + "listingDetailsDescription": "これらの詳細は、エクスポートされたウィジェット定義と一緒に公開されます。", + "success": "すぐに公開されました。コミュニティメンバーがこのウィジェットをインストールして報告できるようになりました。", + "successTitle": "ウィジェットが稼働しています", + "manageDescription": "提出物を開いて、リスティングを更新したり、レポートを確認したり、古いマークを付けたり、削除したりすることができます。提出物の管理は、Workshop の Web サイトで直接処理されます。", + "viewSubmission": "提出物の表示と管理", + "done": "完了", + "signInHint": "ワークショップIDで公開するにはサインインしてください。", + "titleField": "タイトル", + "descriptionField": "説明", + "screenshots": "スクリーンショット", + "screenshotsDescription": "最大 5 つの PNG、JPEG、または WebP 画像", + "screenshotsPlaceholder": "スクリーンショットを選択", + "invalidScreenshot": "PNG、JPEG、またはWebPイメージをそれぞれ {maxSize} 以下で使用してください。", + "privateSourceWarning": "このウィジェットには、 {sources}以下のプライベートソースURLが含まれています。公開する前に、個人ホストまたはIPアドレスを安全なサービスプレースホルダに置き換えてください。", + "reviewSourcesTitle": "プライベートソースURLを確認する", + "privateSourceConfirmation": "これらのソースURLを確認し、プライベートインフラストラクチャの詳細を公開していません", + "action": "今すぐ公開", + "publicationNote": "公開はすぐに開始されます。後でワークショップで提出を管理できます。", + "definitionChanged": "パブリケーションの準備中にウィジェットが変更されました。再度プライベートソース URL を確認してから再試行してください。", + "error": "公開に失敗しました" } }, "integration": { + "completion": { + "modalTitle": "サービス準備完了", + "title": "{name} が接続されています", + "description": "接続はテストに合格しました。次にこのボードに表示するものを選択してください。", + "connectionReady": "サービス接続の準備ができました", + "appReady": "アプリのショートカットの準備ができました", + "compatibleWidgets": "{count, plural, =0 {互換性のあるウィジェットはありません} one {# 互換ウィジェット} other {# 互換ウィジェット}}", + "chooseWidget": "ウィジェットを選択", + "recipes": { + "title": "このボードにお勧めします", + "description": "すでにこのボード上の接続されたサービスとウィジェットに基づいています。", + "newConnectionReason": "{integration} 経由で利用可能になりました", + "existingConnectionReason": "すでに接続しているサービスで動作します", + "dismiss": "このサービスのおすすめをこのボードで却下する" + } + }, "page": { "list": { - "title": "連携機能", + "ariaLabel": "設定された統合", "search": "連携機能を検索", + "scopedNote": "管理することが許可されている統合のみを表示します。", "noResults": { - "title": "連携機能は、まだありません" + "title": "連携機能は、まだありません", + "description": "Homarrウィジェットでデータとアクションを使用するためにサービスを接続します。", + "action": "最初の連携を作成する", + "filteredTitle": "検索条件に一致するインテグレーションがありません", + "filteredDescription": "\"{search}\" に一致する統合はありません。別の名前、タイプ、またはURLをお試しください。", + "createOnlyTitle": "連携のみを追加できます", + "createOnlyDescription": "権限により連携を作成できますが、既存の権限は管理できません。必要な権限へのアクセスを管理者に依頼してください。" } }, "create": { "title": "新しい {name} 連携機能", "notification": { "success": { - "title": "作成完了", "message": "連携機能が正常に作成されました" }, "error": { - "title": "作成失敗", "message": "連携機能を作成できません" } }, @@ -729,11 +1339,9 @@ "title": "{name} 連携機能を編集", "notification": { "success": { - "title": "変更の適用成功", "message": "連携機能が正常に作成されました" }, "error": { - "title": "変更の適用失敗", "message": "連携機能を保存できません" } }, @@ -750,23 +1358,15 @@ "message": "連携機能 {name} を削除してもよろしいですか?", "notification": { "success": { - "title": "削除成功", "message": "連携機能は正常に削除されました" }, "error": { - "title": "削除失敗", "message": "連携機能の削除ができませんでした" } } } }, "field": { - "name": { - "label": "名称" - }, - "url": { - "label": "URL" - }, "attemptSearchEngineCreation": { "label": "検索エンジンを作成", "description": "連携機能 \"{kind}\" は、検索エンジンで使用できます。検索エンジンを自動的に設定するには、これにチェックを入れてください。" @@ -778,6 +1378,10 @@ "label": "アプリの作成", "description": "連携機能と同じ名前とアイコンを持つアプリを作成します。 アプリケーションを作成するには、以下の入力フィールドを空のままにしてください。" }, + "linkApp": { + "label": "既存のアプリをリンク", + "description": "この連携機能を既に使用できるアプリに接続します。" + }, "appHref": { "placeholder": "カスタムアプリ URL" }, @@ -791,7 +1395,11 @@ "grid": { "widgetCount": "", "noWidgets": "", - "detected": "" + "detected": "", + "connected": "{count, plural, one {# connected} other {# connected}}", + "tiedWidgets": "タイドウィジェット", + "more": "+{count} 以上", + "loadError": "連携機能をロードできませんでした。新しい接続を作成する前にもう一度お試しください。" }, "category": { "dnsHole": "", @@ -822,7 +1430,10 @@ "analytics": "", "vpn": "", "mediaLibrary": "", - "uptimeMonitoring": "" + "uptimeMonitoring": "", + "beszel": "Beszel", + "systemMonitoring": "システム監視", + "security": "セキュリティ" }, "testConnection": { "action": { @@ -1107,6 +1718,22 @@ "slug": { "label": "", "newLabel": "" + }, + "wazuhIndexerUrl": { + "label": "インデクサURL", + "newLabel": "新しいインデクサURL" + }, + "wazuhIndexerUsername": { + "label": "インデクサのユーザー名", + "newLabel": "新しいインデクサーユーザー名" + }, + "wazuhIndexerPassword": { + "label": "インデクサのパスワード", + "newLabel": "新しいインデクサーのパスワード" + }, + "wazuhDashboardUrl": { + "label": "ダッシュボード URL (オプション)", + "newLabel": "新しいダッシュボード URL" } } }, @@ -1115,54 +1742,19 @@ "interact": "連携機能とやりとりする", "full": "完全な連携機能アクセス" }, - "audiobookshelf": { - "name": "", - "description": "" - }, - "navidrome": { - "name": "", - "description": "" - }, - "uptimeKuma": { - "name": "", - "description": "", - "secret": { - "slug": { - "description": "" - }, - "apiKey": { - "description": "" - } - } - }, - "traefik": { - "name": "", - "description": "" - }, - "paperlessNgx": { - "name": "", - "description": "" - }, - "patchmon": { - "name": "", - "description": "" - }, - "bazarr": { - "name": "", - "description": "" - }, - "wud": { - "name": "What's Up Docker", - "description": "どのDockerコンテナがイメージアップデートを利用できるかを監視します" + "llamacpp": { + "name": "llama.cpp", + "description": "ローカルのllama.cpp llama-serverを監視: ヘルス、モデル、および生成メトリック" } }, "media": { "plural": "メディア", "search": "メディアを探す", "field": { - "name": "名称", + "preview": "プレビュー", "size": "サイズ", - "creator": "作成者" + "creator": "作成者", + "actions": "操作" }, "action": { "upload": { @@ -1190,10 +1782,12 @@ } }, "copy": { - "label": "URL をコピーする" + "label": "URL をコピーする", + "labelNamed": "{name} の URL をコピー" }, "open": { - "label": "メディアを開く" + "label": "メディアを開く", + "labelNamed": "{name} を開く" } }, "noResults": { @@ -1208,7 +1802,6 @@ "add": "追加", "apply": "適用", "backToOverview": "概要に戻る", - "skip": "", "change": "変更する", "create": "作成", "createAnother": "作成・新規入力", @@ -1231,16 +1824,31 @@ "tryAgain": "リトライ", "loading": "読み込み中", "show": "", - "hide": "" + "hide": "", + "undo": "元に戻す", + "editNamed": "{name} を編集", + "deleteNamed": "{name} を削除", + "clearSearch": "検索をクリア", + "copy": "コピー", + "copied": "コピーしました", + "refresh": "更新" + }, + "pagination": { + "pageOf": "ページ {page} / {totalPages}" }, "here": "こちら", + "serviceUrlTemplate": { + "serverTitle": "通常のサーバーアドレス", + "urlModeLabel": "サービスアドレスパターン", + "hostPort": "同じホスト、異なるポート", + "subdomain": "サービスごとに1つのサブドメイン", + "path": "サービスごとに1つのパス" + }, "iconPicker": { "label": "アイコン URL", + "description": "ライブラリを検索し、画像の URL を貼り付けるか、ファイルをアップロードします。", "header": "{countIcons} 画像を名前で検索", "headerLoading": "名前で画像を検索", - "noResults": "", - "error": "", - "description": "ライブラリを検索し、画像の URL を貼り付けるか、ファイルをアップロードします。", "clear": "画像をクリア", "uploadImage": "画像をアップロード", "results": "画像検索結果", @@ -1249,7 +1857,9 @@ "otherImages": "その他の画像", "urlLoading": "画像を確認中…", "urlReady": "画像を使用する準備ができました", - "urlError": "この画像を読み込めませんでした。URLを確認して再度お試し下さい。" + "urlError": "この画像を読み込めませんでした。URLを確認して再度お試し下さい。", + "noResults": "", + "error": "" }, "colorScheme": { "options": { @@ -1261,7 +1871,6 @@ "information": { "min": "最小", "max": "最大", - "days": "日数", "hours": "時間", "minutes": "分" }, @@ -1298,16 +1907,16 @@ }, "userAvatar": { "menu": { - "switchToDarkMode": "ダークモードに切り替え", - "switchToLightMode": "ライトモードに切り替え", + "open": "アカウントメニューを開く", "management": "管理", - "docker": "", "preferences": "個人設定", "logout": "ログアウト", "login": "ログイン", "homeBoard": "あなたのホーム ボード", - "loggedOut": "ログアウトしました", - "updateAvailable": "{countUpdates} 個のアップデート利用可能: {tag}" + "updateAvailable": "{countUpdates} 個のアップデート利用可能: {tag}", + "assistant": "アシスタント", + "assistantThinking": "考え", + "modifier": "Mod" } }, "dangerZone": "危険な操作", @@ -1355,13 +1964,66 @@ "kilometersPerHour": "km/h", "milesPerHour": "mph" } + }, + "widgetQuery": { + "loading": "ウィジェットのデータを読み込み中" + }, + "total": "合計", + "filesystemUsage": "{count, plural, one {# ファイルシステムの使用状況を表示} other {# ファイルシステムの使用状況を表示}}", + "field": { + "name": "ジョブ名" + }, + "label": { + "new": "新規作成" + }, + "entity": { + "apps": "アプリケーション", + "boards": "ボード", + "certificates": "証明書", + "customWidgets": "カスタム ウィジェット", + "groups": "グループ", + "integrations": "連携機能", + "invites": "招待", + "logs": "ログ", + "media": "メディア", + "searchEngines": "検索エンジン", + "tasks": "タスク", + "users": "ユーザー" } }, "section": { - "dynamic": { + "option": { + "showLabel": { + "label": "ラベルを表示", + "description": "内容の上にコンテナラベルを表示します。" + }, + "collapsible": { + "label": "折りたたみを許可", + "description": "視聴者がこのコンテナを展開し、折りたたむようにします。" + }, + "showOpenAll": { + "label": "開いているすべてのアクションを表示", + "description": "このコンテナ内のすべてのアプリを新しいタブで開くアクションを表示します。" + }, + "scrollable": { + "label": "スクロール可能", + "description": "このコンテナをセットサイズに保ち、サイズに合うように成長するのではなく、内容をスクロールします。" + } + }, + "action": { + "openAllInNewTabsFor": "すべてのアプリをタブで {name} で開く" + }, + "openAllInNewTabs": { + "title": "すべてのタブを開く", + "text": "一部のブラウザーはセキュリティ上の理由からタブの一括開封をブロックすることがあります。 あなたのブラウザがこの操作をブロックしたため、Homarr はすべてのウィンドウを開くことができませんでした。「ポップアップウィンドウを開く」を許可して再試行してください。" + }, + "container": { + "untitled": "無題のコンテナ", "action": { - "create": "新しいダイナミックセクション", - "remove": "ダイナミックセクションを削除する" + "create": "新しいコンテナ", + "remove": "コンテナを削除", + "expand": "展開", + "collapse": "折りたたむ" }, "option": { "title": { @@ -1375,55 +2037,12 @@ } }, "remove": { - "title": "ダイナミックセクションの削除", - "message": "この動的セクションを削除してもよろしいですか?アイテムは親セクションの同じ場所に移動されます。" - } - }, - "category": { - "field": { - "name": { - "label": "名称" - } - }, - "action": { - "create": "新しいカテゴリー", - "edit": "カテゴリー名の変更", - "remove": "カテゴリーを削除", - "moveUp": "上に移動", - "moveDown": "下へ移動", - "createAbove": "上に新しいカテゴリー", - "createBelow": "下に新しいカテゴリ", - "openAllInNewTabs": "すべてのタブを開く" - }, - "create": { - "title": "新しいカテゴリー", - "submit": "カテゴリーを追加" - }, - "remove": { - "title": "カテゴリーの削除", - "message": "カテゴリー {name} を削除してもよろしいですか?" - }, - "edit": { - "title": "カテゴリー名変更", - "submit": "カテゴリー名を変更" - }, - "menu": { - "label": { - "create": "新しいカテゴリー", - "changePosition": "ポジションを変更する", - "settings": "" - } - }, - "openAllInNewTabs": { - "title": "すべてのタブを開く", - "text": "一部のブラウザーはセキュリティ上の理由からタブの一括開封をブロックすることがあります。 あなたのブラウザがこの操作をブロックしたため、Homarr はすべてのウィンドウを開くことができませんでした。「ポップアップウィンドウを開く」を許可して再試行してください。" + "message": "このコンテナを削除しますか?その内容は周囲に移動します。" } } }, "item": { "action": { - "create": "新しいアイテム", - "import": "アイテムをインポート", "edit": "アイテムを編集", "moveResize": "アイテムを移動/サイズ変更", "duplicate": "アイテムを複製", @@ -1432,7 +2051,7 @@ "menu": { "label": { "settings": "設定", - "refresh": "", + "settingsFor": "{name} の設定", "options": "", "actions": "" }, @@ -1441,21 +2060,96 @@ "error": "", "loading": "", "idle": "" + }, + "notification": { + "saveError": { + "title": "ウィジェットを保存できません", + "message": "ウィジェットの変更がロールバックされました" + } } }, "create": { "title": "追加するアイテムを選択", "search": "アイテムをフィルタする", - "addToBoard": "ボードに追加" + "addToBoard": "ボードに追加", + "addAtPosition": "ここにアイテムを追加", + "destination": { + "label": "追加先", + "description": "ウィジェットを表示する場所を選択します。後で移動できます。", + "mainCanvas": "メインキャンバス(キャンバス)", + "leftRail": "レール(左)", + "rightRail": "Right rail" + }, + "connectionStatus": { + "ready": "準備完了", + "needsSetup": "セットアップが必要", + "noConnectionRequired": "接続は必要ありません" + }, + "customWidget": "カスタム ウィジェット", + "standalone": "スタンドアロン版", + "missingIntegration": { + "title": "サービスを最初に接続する", + "noPermission": "このウィジェットには互換性のあるサービス接続が必要です。管理者に接続を依頼して、もう一度お試しください。" + }, + "notification": { + "success": { + "title": "ウィジェットが追加されました", + "message": "{name} がこのボードに追加されました。", + "relocatedMessage": "選択した宛先が利用できなかったため、{name} が {destination} に追加されました。" + }, + "error": { + "title": "アイテムを追加できません", + "message": "このアイテムはこのボードに追加できませんでした" + } + } + }, + "selection": { + "summary": "{count, plural, one {# selected item} other {# selected item}}", + "selected": "{count, plural, one {# selected} other {# selected}}", + "copy": "コピー", + "copied": "{count, plural, other {# 件の項目をクリップボードにコピーしました}}", + "copyError": "選択したアイテムをコピーできませんでした。お使いのブラウザはクリップボードへのアクセスを許可していない可能性があります。", + "paste": "貼り付け", + "pasteShortcut": "コピーした項目をここに貼り付けます (Ctrl / ⌘+ V)", + "pasted": "{count, plural, other {# 件の項目を貼り付けました}}", + "pasteError": "クリップボードを読み取ることができませんでした。ブラウザがクリップボードへのアクセスを許可していない可能性があります。", + "pasteInvalid": "クリップボードに有効なHomarrボードアイテムが含まれていません。", + "pasteUnavailable": "コピーされたアイテムはこのボードに収まりません。", + "removed": "{count, plural, other {# 件の項目を削除しました}}", + "move": "移動", + "moveTo": "選択したアイテムを移動", + "delete": "削除", + "clear": "選択をクリア", + "clearShortcut": "選択をクリア (エスケープ)", + "saveErrorTitle": "アイテムを更新できません", + "saveErrorMessage": "変更を保存できませんでした。ボードが更新されました。", + "moveUnavailableTitle": "選択したアイテムを移動できません", + "moveUnavailableMessage": "宛先には、選択範囲全体のための十分なスペースがありません。" }, "moveResize": { "title": "アイテムの移動/サイズ変更", + "entryLabel": "{name}, 列 {column}, 行 {row}", + "target": { + "numbered": "{name}, 宛先 {index}", + "located": "{name}, {location}, 宛先 {index}" + }, + "keyboard": { + "instructions": "Enterキーまたはスペースを押してキーボード編集を開始します。移動するには矢印キー、サイズ変更するにはShift+矢印キー、および停止するにはエスケープを使用します。", + "started": "キーボード編集を開始しました。移動するには矢印キー、サイズ変更するにはShift+矢印キー、停止するにはエスケープキーを使用してください。", + "stopped": "キーボードの編集が停止しました。", + "boundary": "この変更は、このセクション内には適用されません。" + }, "field": { + "section": { + "label": "セクションまたは鉄道" + }, "width": { - "label": "幅" + "label": "幅", + "shortLabel": "W" }, "height": { - "label": "高さ" + "label": "高さ", + "shortLabel": "H" }, "xOffset": { "label": "X オフセット" @@ -1469,18 +2163,36 @@ "title": "アイテムの編集", "tab": { "widget": "", - "app": "" + "app": "", + "integration": "連携を編集" }, "app": { "propagationNotice": "" }, + "integration": { + "action": "コネクションを編集", + "description": "このウィジェットから離れることなく、選択した接続をテストまたは修復します。", + "editLabel": "{name} 連携機能を編集", + "fullAccessRequired": "フルアクセスが必要です", + "propagationNotice": "この統合への変更は、使用されるすべての場所に適用されます。接続は保存される前にテストされます。", + "loading": "連携機能を読み込み中", + "loadError": "このインテグレーションを読み込めませんでした。接続設定を変更する前にもう一度お試しください。" + }, + "preview": { + "integrationRequired": "このウィジェットをプレビューするための接続を選択してください。", + "size": "ファイルサイズ" + }, + "settings": { + "label": "ウィジェットの設定" + }, "advancedOptions": { "label": "高度な設定", "title": "高度なアイテムオプション" }, "field": { "integrations": { - "label": "連携機能" + "label": "連携機能", + "removeLabel": "{name} インテグレーションを削除" }, "title": { "label": "タイトル" @@ -1494,17 +2206,18 @@ } }, "remove": { - "title": "アイテム削除", "message": "このアイテムを削除してもよろしいですか?" + }, + "advancedFocus": { + "open": "詳細表示を開く", + "close": "詳細ビューを閉じる", + "label": "{widget} の高度な表示" } }, "widget": { "integrationSelect": { "configureIntegrationFirst": "", - "loading": "", - "placeholder": "", - "noResults": "", - "loadError": "" + "placeholder": "" }, "app": { "name": "アプリ", @@ -1513,9 +2226,6 @@ "appId": { "label": "アプリを選択" }, - "openInNewTab": { - "label": "新しいタブで開く" - }, "showTitle": { "label": "アプリ名を表示" }, @@ -1523,11 +2233,8 @@ "label": "ステータスチェックを有効にする" }, "layout": { - "label": "レイアウト", "option": { - "row": "水平方向", "row-reverse": "水平方向(反転)", - "column": "垂直方向", "column-reverse": "垂直方向(反転)" } }, @@ -1552,23 +2259,60 @@ "name": "ブックマーク", "description": "複数のアプリリンクを表示します", "option": { - "title": { - "label": "タイトル" + "showTitle": { + "label": "ウィジェットのタイトルを表示" + }, + "titleSize": { + "label": "ウィジェットのタイトルサイズ (px)" }, "layout": { "label": "レイアウト", "option": { - "row": { - "label": "水平" - }, - "column": { - "label": "垂直" - }, - "grid": { - "label": "グリッド" + "adaptive": { + "label": "Adaptive" }, "gridHorizontal": { "label": "グリッドは水平方向" + }, + "icons": { + "label": "アイコン" + } + } + }, + "variant": { + "label": "外観", + "option": { + "soft": { + "label": "ソフト" + }, + "filled": { + "label": "塗りつぶし" + }, + "outline": { + "label": "概要" + }, + "plain": { + "label": "Plain" + } + } + }, + "spacing": { + "label": "カードの間隔", + "option": { + "xs": { + "label": "極小" + }, + "sm": { + "label": "小さい" + }, + "md": { + "label": "中間" + }, + "lg": { + "label": "大きい" + }, + "xl": { + "label": "特大" } } }, @@ -1581,17 +2325,28 @@ "hideHostname": { "label": "ホスト名を非表示" }, - "openNewTab": { - "label": "新しいタブで開く" - }, "withBorder": { "label": "" }, + "grow": { + "label": "行を埋めるためにカードを展開します" + }, + "customUrls": { + "label": "カスタムリンク" + }, "items": { "label": "ブックマーク", - "add": "ブックマークに追加" + "remove": "ブックマークを削除", + "apps": { + "label": "ブックマークを追加", + "description": "URLを貼り付けるか、既存のアプリを見つけます。下のブックマークをドラッグして並べ替えます。", + "placeholder": "URLを貼り付けるか、アプリを検索", + "addUrl": "このURLを追加", + "hint": "URLを追加するにはEnterキーを押します。カンマ区切りまたは1行あたりのURLを貼り付けて、いくつかのURLを追加します。" + } } - } + }, + "empty": "ウィジェットの設定で URL または App を追加する" }, "archiveTeamWarrior": { "name": "", @@ -1600,33 +2355,61 @@ "showBroadcastMessage": { "label": "" } + }, + "noProjectSelected": "プロジェクトが選択されていません", + "runnerStatus": "Runner: {status}", + "projectId": "プロジェクト: {id}", + "sessionReceived": "受信したセッション: {value}", + "sessionSent": "セッション送信: {value}", + "sessionId": "セッション: {id}", + "startedAt": "{date} を開始しました", + "emptyItems": "このスナップショットにはアクティブなジョブまたは最近のジョブがありません", + "metric": { + "running": "実行中", + "completed": "完了", + "failed": "失敗", + "canceled": "キャンセルしました", + "download": "ダウンロード", + "upload": "アップロード" + }, + "status": { + "running": "実行中", + "completed": "完了", + "failed": "失敗", + "canceled": "キャンセルしました", + "stopped": "停止しました", + "idle": "アイドル", + "unknown": "不明" + } + }, + "wud": { + "name": "What's Up Docker", + "description": "利用可能な更新があるコンテナの数を表示します。", + "title": "What's Up Docker", + "monitored": "監視中", + "updatesAvailable": "{count, plural, one {# アップデートが} other {# アップデートが}}", + "updateAvailable": "アップデートがあります", + "openReleaseNotes": "リリースノートを開く", + "option": { + "showRing": { + "label": "更新の着信音を表示" + }, + "showUpdateList": { + "label": "コンテナ更新リストを表示", + "description": "利用可能な画像の更新がある各監視対象のコンテナを一覧表示します" + } } }, "dnsHoleSummary": { "name": "DNS Hole 概要", "description": "DNS Hole の概要を表示します", "option": { - "layout": { - "label": "レイアウト", - "option": { - "row": { - "label": "水平" - }, - "column": { - "label": "垂直" - }, - "grid": { - "label": "グリッド" - } - } - }, "usePiHoleColors": { "label": "Pi-Hole の色を使用" } }, "error": { - "internalServerError": "DNS Hole Summary の取得に失敗しました", - "integrationsDisconnected": "利用可能なデータがありません。すべての連携機能が切断されました" + "internalServerError": "DNS Hole Summary の取得に失敗しました" }, "data": { "adsBlockedToday": "今日のブロック", @@ -1634,32 +2417,24 @@ "dnsQueriesToday": "今日のクエリ", "domainsBeingBlocked": "ブロックリストにあるドメイン" }, - "domainsTooltip": "複数の連携機能により、Homarr はブロックされているドメインの正確な数を計算できません" + "domainsTooltip": "複数の連携機能により、Homarr はブロックされているドメインの正確な数を計算できません", + "status": { + "enabled": "有効", + "disabled": "無効", + "unknown": "不明" + } }, "dnsHoleControls": { "name": "DNS Hole の 制御", "description": "ダッシュボードから PiHole または AdGuard をコントロールする", "option": { - "layout": { - "label": "レイアウト", - "option": { - "row": { - "label": "水平" - }, - "column": { - "label": "垂直" - }, - "grid": { - "label": "グリッド" - } - } - }, "showToggleAllButtons": { "label": "すべてのボタンを表示" } }, "error": { - "internalServerError": "DNS Hole の 制御に失敗しました" + "internalServerError": "DNS Hole の 制御に失敗しました", + "bulkActionsFailed": "{count, plural, one {# アクション} other {# アクション failed}}" }, "controls": { "enableAll": "すべて有効", @@ -1670,8 +2445,6 @@ "disabled": "無効", "processing": "処理中", "disconnected": "切断されました", - "hours": "時間", - "minutes": "分", "unlimited": "無制限にする場合は、空白のままにしてください" } }, @@ -1683,16 +2456,10 @@ "label": "都市名部にカスタム表示", "description": "時計の上にカスタムタイトルまたは都市/国の名前を表示します。" }, - "customTitle": { - "label": "タイトル" - }, "is24HourFormat": { "label": "24 時間表示", "description": "12 時間形式の代わりに 24 時間形式を使用します" }, - "showSeconds": { - "label": "秒を表示" - }, "useCustomTimezone": { "label": "固定のタイムゾーンを使用" }, @@ -1711,29 +2478,295 @@ "label": "時間の書式をカスタマイズ", "description": "時刻の書式に ISO-8601を使用します(これは他のオプションを上書きします)" }, - "customDateFormat": { - "label": "日付の書式をカスタマイズ", - "description": "日付の書式に ISO-8601を使用します(これは他のオプションを上書きします)" - }, "showWeather": { "label": "", "description": "" }, - "weatherLocation": { - "label": "" - }, "isWeatherFormatFahrenheit": { "label": "" + }, + "animateWeatherIcon": { + "label": "天気アイコンのアニメーション", + "description": "天気アイコンをアニメーション化します。デフォルトでは無効になっており、動きを減らす必要がある場合は常に無効になります。" + }, + "colorWeatherByDayNight": { + "label": "昼/夜で天気を色", + "description": "天気アイコンと気温を昼の色または夜の色で色分けします 選択された場所で昼間か夜間かに基づいています" + }, + "dayWeatherColor": { + "label": "日中の色" + }, + "nightWeatherColor": { + "label": "夜の色" + }, + "worldClockCities": { + "label": "世界の時計都市", + "description": "上級者向けに最大6都市まで追加および注文します。" } + }, + "timezoneList": { + "timezone": "タイムゾーン", + "cityLabel": "市区町村ラベル", + "searchPlaceholder": "タイムゾーンを検索", + "noResults": "タイムゾーンが見つかりません", + "unsupportedOption": "サポートされていない: {timeZone}", + "add": "都市を追加", + "remove": "{city} を削除", + "reorder": "{city} を再注文", + "limit": "{count} / {maximum} 都市が設定されました" + }, + "worldClock": { + "primary": "プライマリー時計", + "local": "現地時間", + "today": "今日", + "tomorrow": "明日", + "yesterday": "昨日", + "noSecondaryCities": "ここでそれらを比較するためにウィジェットオプションに都市を追加します。", + "unsupportedPrimaryTitle": "プライマリタイムゾーンは利用できません", + "unsupportedPrimary": "{timeZone} はこのブラウザではサポートされていません。明確にマークされたフォールバックとしてUTCを表示しています。", + "unsupportedTimeZone": "サポートされていないタイムゾーン: {timeZone}", + "accessibleTime": "{city}: {time}, {date}, {timeZone}", + "advancedLabel": "高度な世界の時計", + "cities": "世界時計", + "cityCount": "{count} timezones", + "timeBarLabel": "{city}の24時間時間体制の位置", + "dayProgress": "{percent}%が経過しました · {hours}h {minutes}m", + "phaseLegend": "時間帯の凡例です", + "tick": { + "midnight": "00", + "morning": "06", + "noon": "12", + "evening": "18", + "end": "24" + }, + "phaseRange": { + "night": "00–05 · 21–24", + "dawn": "05–08", + "day": "08–18", + "dusk": "18–21" + }, + "phase": { + "night": "夜", + "dawn": "Dawn", + "day": "日", + "dusk": "夕暮れ" + } + } + }, + "airQuality": { + "name": "空気の質と紫外線値", + "description": "場所のための空気質、紫外線指標、汚染物質と花粉を表示します。", + "option": { + "location": { + "label": "空気質の場所" + }, + "aqiStandard": { + "label": "AQI標準", + "options": { + "auto": "ロケールの自動設定", + "european": "ヨーロッパ産AQI", + "us": "アメリカ AQI" + } + }, + "showUv": { + "label": "UV指数を表示" + }, + "showPollutants": { + "label": "汚染物質濃度を表示" + }, + "showPollen": { + "label": "花粉濃度を表示" + } + }, + "category": { + "good": "良い", + "fair": "公平な", + "moderate": "モデレート", + "unhealthySensitive": "敏感なグループには健康でない", + "unhealthy": "異常", + "poor": "悪い", + "veryPoor": "非常に悪い", + "veryUnhealthy": "非常に不健康です", + "extremelyPoor": "極貧状態", + "hazardous": "", + "unknown": "AQI読み込みがありません" + }, + "uv": { + "label": "UVインデックス", + "category": { + "low": "低い", + "moderate": "モデレート", + "high": "高い", + "veryHigh": "非常に高い", + "extreme": "極端な", + "unknown": "読書なし" + } + }, + "dominantPollutant": "Dominant pollutant", + "aqiLabel": "AQI", + "strongestPollen": "最高の花粉format@@0", + "unit": { + "concentration": "{value} μg/m3", + "pollen": "{value} グレイン/m3" + }, + "pollutant": { + "pm2_5": "PM2.5", + "pm10": "PM10", + "ozone": "オゾーン", + "nitrogenDioxide": "二酸化窒素(二酸化窒素)", + "sulphurDioxide": "Sulphur dioxide", + "carbonMonoxide": "一酸化炭素(一酸化炭素)" + }, + "pollen": { + "alder": "Alder", + "birch": "シラカバ語", + "grass": "草", + "mugwort": "マグウォルト", + "olive": "オリーブ", + "ragweed": "レイジウド語" + }, + "compact": { + "sixHourTrend": "次の6時間のAQIトレンド" + }, + "advanced": { + "observedAt": "{time} に更新", + "next24Hours": "次の24時間", + "pollutants": "汚染物質濃度:", + "pollen": "花粉濃度:", + "sevenDayForecast": "7日間の最大予測", + "aqiValue": "AQI {value}", + "uvValue": "UV {value}", + "uvShort": "UV {value}", + "noForecast": "利用可能な予測データがありません" + } + }, + "countdown": { + "name": "Countdowns", + "description": "今後のイベントや定期的な記念日を追跡します。", + "option": { + "events": { + "label": "イベント", + "description": "最大20回のワンタイムカウントダウンまたは年間カウントダウンを追加して注文します。日付は選択したタイムゾーンに入力されます。" + }, + "showProgress": { + "label": "進行状況を表示" + }, + "showSeconds": { + "label": "秒を表示", + "description": "今後のイベントごとに秒数を表示します。" + } + }, + "dateTimeEventList": { + "newEvent": "新しいイベント", + "add": "イベントを追加", + "remove": "{event} を削除", + "reorder": "{event} を再注文", + "eventLabel": "イベントラベル", + "timezone": "タイムゾーン", + "unsupportedOption": "サポートされていない: {timeZone}", + "recurrence": "繰り返し", + "recurrenceOption": { + "none": "繰り返さない", + "yearly": "毎年" + }, + "target": "イベントの日時", + "trackProgress": "開始日から進捗状況を追跡", + "start": "進行状況の開始日時", + "confirmDateTime": "日付と時刻を確認", + "limit": "{count} の {maximum} イベントが設定されています" + }, + "empty": { + "title": "カウントダウンはまだありません", + "description": "ウィジェットオプションにイベントを追加してカウントダウンを開始します。" + }, + "completed": "完了", + "yearly": "年ごと", + "progress": "イベントの進捗状況", + "upcoming": "近日公開", + "completedEvents": "完了したイベント", + "invalid": { + "title": "いくつかのイベントを表示できません", + "description": "{count, plural, one {1つのイベントに無効な日付またはサポートされていないタイムゾーンがあります。} other {# events have an invalid date or unsupported timezone.}}", + "value": "Unavailable" + }, + "alert": { + "notifications": "ブラウザの通知", + "permissionDenied": "通知はこのブラウザでブロックされています。", + "reached": "カウントダウンが目標に達しました。" + } + }, + "timer": { + "name": "Timer / Pomodoro", + "description": "シンプルなタイマーまたは設定可能なポモドーロシーケンスを実行します。", + "option": { + "mode": { + "label": "モード", + "options": { + "timer": "タイマー", + "pomodoro": "Pomodoro" + } + }, + "timerMinutes": { + "label": "タイマー時間" + }, + "focusMinutes": { + "label": "分をフォーカス" + }, + "shortBreakMinutes": { + "label": "短い休憩時間" + }, + "longBreakMinutes": { + "label": "長い休憩時間" + }, + "sessionsBeforeLongBreak": { + "label": "長い休憩時間の前にセッションにフォーカス" + }, + "autoStartBreaks": { + "label": "自動的にブレークを開始" + }, + "autoStartFocus": { + "label": "自動的にフォーカスセッションを開始" + } + }, + "phase": { + "timer": "タイマー", + "focus": "フォーカス", + "shortBreak": "短い休憩時間", + "longBreak": "長い休憩時間" + }, + "action": { + "start": "開始", + "pause": "一時停止", + "reset": "Reset" + }, + "attention": { + "timerComplete": "Timer complete", + "phaseReady": "{phase} 準備完了" + }, + "progress": "タイマーの進行状況: {progress}%", + "compact": { + "completedFocus": "{count, plural, =0 {フォーカスセッションが完了していません} one {# フォーカスセッションが完了しました} other {# フォーカスセッションが完了しました}}" + }, + "alert": { + "title": "Timer complete", + "completed": "{phase} が完了しました。" + }, + "advanced": { + "sequence": "Pomodoro sequence", + "focusSession": "フォーカス {session}", + "settings": "永続設定", + "settingsHint": "ウィジェットのコンテキストメニューを使用して、これらのボード設定を編集します。", + "localAlerts": "ローカルアラート", + "notifications": "ブラウザの通知", + "sound": "タイマーの音", + "localAlertsHint": "タイマーサウンドはデフォルトで有効になっています。サウンドと通知はこのブラウザーでこのウィジェットにのみ適用されます。", + "notificationsDenied": "通知はこのブラウザでブロックされています。" } }, "minecraftServerStatus": { "name": "Minecraft サーバーステータス", "description": "Minecraft サーバーのステータスを表示します", "option": { - "title": { - "label": "タイトル" - }, "domain": { "label": "サーバーアドレス" }, @@ -1753,11 +2786,21 @@ "noStation": "駅が選択されていません", "option": { "baseUrl": { - "label": "" + "label": "", + "description": "カスタムURLはパブリックIPアドレスに解決する必要があります。プライベートホストとローカルホストは拒否されます。" }, "station": { - "label": "駅" + "label": "駅", + "placeholder": "ステーションを検索" } + }, + "error": { + "customSourceUnavailable": "時刻表ソースが利用できません。URLがパブリックIPアドレスに解決されていることを確認してください。", + "stationSearch": "ステーションを検索できません。カスタム URL とボードへのアクセスを確認してください。" + }, + "warning": { + "stale": "時刻表を更新できませんでした。 {time} で最後に更新された出発を表示しています。", + "staleCompact": "古いデータ" } }, "notebook": { @@ -1789,6 +2832,9 @@ "directionRtl": "", "blockquote": "引用", "horizontalLine": "水平線", + "details": "折りたたみ可能なセクションを切り替える", + "expandDetails": "折りたたみ可能なセクションを展開", + "collapseDetails": "折りたたみ可能なセクションを閉じる", "bulletList": "箇条書きリスト", "orderedList": "順序付きリスト", "checkList": "チェックリスト", @@ -1797,16 +2843,20 @@ "link": "リンク", "unlink": "リンクを削除", "image": "画像を埋め込む", - "addTable": "テーブルを追加", + "insertTable": "テーブルを挿入", + "insertTableSize": "{columns} × {rows} テーブルを挿入", "deleteTable": "テーブルを削除", "colorCell": "色付きテキスト", - "mergeCell": "セル結合の切り替え", + "mergeCells": "セルを結合", + "splitCell": "セルの分割", "addColumnLeft": "前に列を追加", "addColumnRight": "後に列を追加", "deleteColumn": "列を削除", "addRowTop": "前に行を追加", "addRowBelow": "後に行を追加", - "deleteRow": "行の削除" + "deleteRow": "行の削除", + "toggleHeaderRow": "ヘッダー行の切り替え", + "toggleHeaderColumn": "ヘッダーカラムの切り替え" }, "align": { "left": "左寄せ", @@ -1817,8 +2867,6 @@ "clearColor": "色を消去", "source": "ソース", "widthPlaceholder": "% またはピクセル単位の値", - "columns": "列数", - "rows": "行数", "width": "幅", "height": "高さ" }, @@ -1830,7 +2878,9 @@ "discard": "変更を破棄", "keepEditing": "編集を続ける" } - } + }, + "saveFailed": "メモを保存できません", + "documentStats": "{words, plural, one {# 単語} other {# 単語}} · {characters, plural, one {# 文字} other {# 文字}}" }, "anchorNote": { "name": "アンカーノート", @@ -1839,9 +2889,6 @@ "noteId": { "label": "ノート" }, - "showTitle": { - "label": "タイトルを表示" - }, "showUpdatedAt": { "label": "最終更新を表示" } @@ -1851,14 +2898,20 @@ "notFound": "ノートが見つかりません", "noNotes": "ノートがありません", "integrationRequired": "アンカー統合を最初に選択してください", - "updatedAt": "{date} に更新しました", "untitled": "タイトルなし", - "edit": "編集", - "save": "保存", - "cancel": "キャンセル", "readOnlyViewer": "このノートを閲覧することができます。編集は無効になっています", "saveForbidden": "このノートを編集する権限がありません。", - "saveFailed": "このノートを保存できませんでした。もう一度やり直してください。" + "saveFailed": "このノートを保存できませんでした。もう一度やり直してください。", + "createdAt": "作成された {date}", + "permission": { + "owner": "所有者", + "editor": "エディター", + "viewer": "ビューアー" + }, + "status": { + "pinned": "ピン留めしました", + "archived": "アーカイブ済み" + } }, "iframe": { "name": "iFrame", @@ -1917,6 +2970,25 @@ "clickable": { "label": "クリック可能" } + }, + "state": { + "on": "オン", + "off": "オフ", + "unavailable": "Unavailable", + "unknown": "不明" + }, + "advanced": { + "entityId": "エンティティID: {id}", + "lastChanged": "{date} が変更されました", + "attribute": { + "unit": "単位", + "deviceClass": "デバイスクラス", + "icon": "アイコン" + } + }, + "error": { + "loadFailed": "エンティティを読み込めません", + "toggleFailed": "エンティティを更新できません" } }, "smartHome-executeAutomation": { @@ -1932,11 +3004,31 @@ }, "spotlightAction": { "run": "{name} を実行" + }, + "advanced": { + "lastExecuted": "最終実行日時 {time}", + "automationId": "自動化ID: {id}", + "ready": "実行する準備ができました", + "noPermission": "このオートメーションを実行する権限がありません" + }, + "status": { + "running": "自動実行", + "success": "自動化完了" + }, + "error": { + "executeFailed": "オートメーションを実行できません" } }, "stockPrice": { "name": "株価", "description": "会社の現在の株価を表示します", + "advanced": { + "currentPrice": "現在の価格", + "previousClose": "前の閉じる", + "changePercentage": "変更 (%)", + "minimum": "最小", + "maximum": "最大値" + }, "option": { "stock": { "label": "株式銘柄" @@ -2007,6 +3099,10 @@ "label": "1 ヵ月" } } + }, + "showDetails": { + "label": "詳細を表示", + "description": "コンパクトビューで名前、変更、および時間範囲を表示します。シンボルと価格だけをオフにします。" } } }, @@ -2034,6 +3130,13 @@ "showUnmonitored": { "label": "監視されていない状態で表示" } + }, + "advanced": { + "previousMonth": "前の月を表示", + "nextMonth": "次の月を表示", + "eventCount": "{count, plural, one {# イベント} other {# イベント}}", + "loading": "カレンダーイベントを読み込み中...", + "noEvents": "今月の予定はありません" } }, "weather": { @@ -2046,16 +3149,18 @@ "disableTemperatureDecimals": { "label": "温度の小数点以下を無効にする" }, + "animateIcons": { + "label": "天気アイコンのアニメーション" + }, + "showHumidity": { + "label": "湿度を表示" + }, "showCurrentWindSpeed": { - "label": "現在の風速を表示", - "description": "現在の天気のみ表示" + "label": "現在の風速を表示" }, "useImperialSpeed": { "label": "風速にmphを使用する" }, - "location": { - "label": "天候の場所" - }, "showCity": { "label": "都市名を表示" }, @@ -2065,13 +3170,10 @@ "forecastDayCount": { "label": "天気予報の日数", "description": "ウィジェットの幅が十分でない場合、より少ない日数が表示されます" - }, - "dateFormat": { - "label": "日付の形式", - "description": "日付がどのように見えるか" } }, "currentWindSpeed": "時速 {currentWindSpeed} {unit}", + "disabled": "データ通信が無効になっているため天気データは利用できません", "dailyForecast": { "sunrise": "日出", "sunset": "日没", @@ -2094,6 +3196,47 @@ "thunderstorm": "雷雨", "thunderstormWithHail": "雹を伴う雷雨", "unknown": "不明" + }, + "details": "天気の詳細を表示", + "detailsFor": "{date} の天気の詳細を表示", + "advanced": { + "forecast": "7日間の予測", + "hourlyForecast": "次の24時間", + "day": "日", + "time": "時刻", + "conditions": "条件", + "temperature": "温度", + "feelsLike": "{temperature} のような感じ", + "feelsLikeLabel": "以下のような感じ", + "feelsLikeRange": "次のような感じ: {maximum} / {minimum}", + "highLow": "High {maximum} · low {minimum}", + "observedAt": "{time} に更新", + "humidity": "Humidity", + "averageHumidity": "平均湿度: {humidity}%", + "currentHumidity": "電流 modify", + "wind": "風 ({unit})", + "currentWind": "現在の風 / 突風時", + "windValue": "{speed} / {gusts} {unit}", + "windDetail": "最大風速/突風: {speed} / {gusts} {unit}", + "nextHourPrecipitation": "降水量", + "precipitationChance": "降水の確率", + "precipitationValue": "{probability}% · {amount} mm", + "precipitationDetail": "降水量: {probability}% · {amount} mm", + "todayUv": "今日の最大UVインデックス", + "uvIndex": "最大UV指数: {value}", + "daylight": "昼間照明: {duration}", + "hourlyTooltip": "{feelsLike}{temperatureUnit} ・ {amount} mm・ {humidity}% 湿度・ {speed} {speedUnit} 風", + "hourlyTooltipWithoutHumidity": "{feelsLike}{temperatureUnit} ・ {amount} mm・ {speed} {speedUnit} 風", + "detailLabel": { + "feelsLike": "以下のような感じ", + "precipitation": "", + "humidity": "平均", + "wind": "最大風 / 突風の最大", + "uv": "最大UVインデックス", + "daylight": "Daylight" + }, + "sun": "日の出/日没", + "noForecast": "利用可能な予測データがありません" } }, "indexerManager": { @@ -2106,8 +3249,15 @@ }, "title": "インデクサーマネージャー", "testAll": "すべてのテスト", + "status": { + "healthy": "正常", + "unhealthy": "異常", + "disabled": "無効", + "unknown": "ヘルスが利用できません" + }, "error": { - "internalServerError": "インデクサーのステータスの取得に失敗しました" + "internalServerError": "インデクサーのステータスの取得に失敗しました", + "testAll": "インデクサのテストに失敗しました。もう一度やり直してください。" } }, "healthMonitoring": { @@ -2136,11 +3286,6 @@ "fileSystem": { "label": "ファイルシステム情報を表示" }, - "visibleStorageVolumes": { - "label": "", - "description": "", - "placeholder": "" - }, "defaultTab": { "label": "デフォルトのタブ" }, @@ -2163,17 +3308,27 @@ "minutes": "{count} 分", "used": "使用中", "available": "利用可能", - "lastSeen": "最終ステータス更新: {lastSeen}" + "lastSeen": "最終ステータス更新: {lastSeen}", + "updatesAvailable": "{count, plural, one {# アップデートが} other {# アップデートが}}", + "rebootRequired": "再起動が必要です", + "rebootNotRequired": "再起動は必要ありません" + }, + "smartStatus": { + "attributesWithinThresholds": "SMART: しきい値内の属性", + "attributesFailed": "SMART: {attributes} に失敗しました", + "noCriticalWarning": "SMART: SSDによって報告された警告なし", + "criticalWarning": "SMART: SSDによって報告された致命的な警告" + }, + "gauge": { + "cpuUsage": "CPU 使用率", + "cpuTemperature": "CPU温度", + "memoryUsage": "メモリ使用量", + "gpuUsage": "{name} GPU 使用率" }, - "memory": {}, "error": { "internalServerError": "ヘルスステータスの取得に失敗しました" }, "cluster": { - "summary": { - "cpu": "CPU", - "memory": "RAM" - }, "resource": { "node": { "name": "Nodes" @@ -2209,8 +3364,6 @@ "table": { "header": { "name": "名称", - "cpu": "CPU", - "memory": "RAM", "node": "Node" } } @@ -2220,33 +3373,29 @@ "name": "Dockerのステータス", "description": "あなたのコンテナの統計(このウィジェットは管理者権限でのみ追加できます)", "option": { - "columns": { - "label": "" + "endpointIds": { + "label": "Docker 環境", + "description": "すべての Docker 環境からコンテナを表示するには空のままにしてください", + "placeholder": "すべての Docker 環境" }, - "enableRowSorting": { - "label": "アイテムの並び替えを有効にする" + "containerFilter": { + "label": "フィルタするコンテナ" + }, + "filterIsWhitelist": { + "label": "ホワイトリストとしてフィルター" }, "defaultSort": { - "label": "デフォルトで並び替えに使用される列", "option": { "name": "名称", "state": "状態", "cpuUsage": "CPU 使用率", "memoryUsage": "メモリ使用量" } - }, - "descendingDefaultSort": { - "label": "並び替えを反転" - }, - "columnOrder": { - "label": "" - }, - "columnWidths": { - "label": "" } }, "error": { "internalServerError": "コンテナステータスの取得に失敗しました", + "endpointsUnavailable": "Docker エンドポイントは利用できません", "layoutSaveTitle": "", "layoutSaveMessage": "" }, @@ -2255,7 +3404,6 @@ } }, "coolify": { - "name": "Coolify", "description": "サーバーとアプリケーションを使用した Coolify インスタンスの概要", "option": { "showServers": { @@ -2281,17 +3429,49 @@ "internalServerError": "Coolify データの取得に失敗しました" }, "server": { - "buildServer": "ビルド" + "buildServer": "ビルド", + "resourceCounts": "{applications, plural, one {#アプリ} other {#アプリ}} / {services, plural, one {# サービス} other {# サービス}}", + "reachability": "到達性", + "usability": "使いやすさ" + }, + "source": { + "url": "ソース: {url}", + "unavailable": "{source}: unavailable" }, "instances": { "title": "インスタンス" + }, + "action": { + "openResource": "{name} を開く", + "openLogs": "{name} ログを開く", + "showIp": "IPアドレスを表示", + "hideIp": "IP アドレスを隠す" + }, + "status": { + "running": "実行中", + "stopped": "停止しました", + "exited": "終了", + "starting": "開始", + "restarting": "再起動中", + "unknown": "不明", + "online": "オンライン", + "offline": "オフライン", + "reachable": "到達可能", + "unreachable": "到達不可", + "usable": "使用可能", + "unusable": "使用不可" } }, "vpn": { "name": "", "description": "", "serviceUnavailable": "", - "option": {} + "status": { + "running": "実行中", + "notRunning": "実行していません", + "unavailable": "Unavailable", + "vpn": "VPN: {status}" + } }, "ups": { "name": "", @@ -2318,14 +3498,19 @@ "runtime": "", "load": "", "input": "", - "output": "" + "output": "", + "batteryVoltage": "バッテリー電圧", + "power": "パワー", + "temperature": "温度", + "manufacturer": "メーカー", + "model": "モデル", + "serial": "シリアル番号" }, "error": { "internalServerError": "" } }, "tracearr": { - "name": "Tracearr", "description": "詳細なストリームとトランスコーディングデータによるメディアサーバーのモニタリングの強化", "option": { "showStreams": { @@ -2413,10 +3598,7 @@ "label": "", "description": "", "placeholder": "", - "loading": "", - "noEvents": "", - "none": "", - "configureWebsiteFirst": "" + "none": "" }, "chartType": { "label": "", @@ -2447,26 +3629,21 @@ "eventNames": { "label": "", "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "configureWebsiteFirst": "" + "placeholder": "" }, "topCount": { "label": "", "description": "" + }, + "events": { + "loading": "イベントを読み込み中...", + "noEvents": "予定が見つかりません", + "configureWebsiteFirst": "イベントをロードするウェブサイトを選択してください" } }, "event": { - "occurrences": "", "label": "" }, - "topPages": { - "direct": "" - }, - "topReferrers": { - "direct": "" - }, "events": { "selectPrompt": "" }, @@ -2475,6 +3652,9 @@ "noWebsite": "", "noData": "", "internalServerError": "" + }, + "top": { + "direct": "Direct" } }, "common": { @@ -2502,7 +3682,8 @@ }, "integration": { "noData": "連携機能が見つかりません", - "description": " をクリックして新しい連携機能を作成する" + "description": " をクリックして新しい連携機能を作成する", + "manage": "連携機能の管理" }, "app": { "noData": "アプリが見つかりません", @@ -2513,7 +3694,61 @@ "noIntegration": "連携機能が選択されていません", "noData": "利用可能な連携機能のデータがありません" }, - "option": {} + "integrationDisconnected": "利用可能なデータがありません。すべての連携機能が切断されました", + "updatedAt": "{date} に更新しました", + "title": { + "label": "タイトル" + }, + "openInNewTab": { + "label": "新しいタブで開く" + }, + "showTitle": { + "label": "タイトルを表示" + }, + "weatherLocation": { + "label": "天候の場所" + }, + "layout": { + "label": "レイアウト", + "option": { + "horizontal": "水平方向", + "vertical": "垂直方向", + "grid": "グリッド" + } + }, + "select": { + "loading": "読み込み中...", + "loadError": "オプションの読み込みに失敗しました" + }, + "dateFormat": { + "label": "日付の形式", + "description": "日付がどのように見えるか" + }, + "visibleStorageVolumes": { + "label": "ストレージの表示音量", + "description": "選択されたすべての統合がOpenMediaVaultまたはSynologyである場合にのみ利用できます。すべての検出されたストレージボリュームを表示するには空のままにしてください。", + "placeholder": "ストレージボリュームを選択" + }, + "tableOptions": { + "columns": { + "label": "表示する列" + }, + "columnOrder": { + "label": "列の順序" + }, + "columnWidths": { + "label": "列の幅" + }, + "enableRowSorting": { + "label": "アイテムの並び替えを有効にする" + }, + "defaultSort": { + "label": "デフォルトで並び替えに使用される列" + }, + "invertSorting": { + "label": "並び替えを反転" + } + } }, "video": { "name": "ビデオストリーム", @@ -2572,6 +3807,7 @@ "transcoding": "", "paused": "", "remaining": "", + "seasonEpisode": "S{season} E{episode}", "metadata": { "title": "詳細統計情報", "video": { @@ -2589,11 +3825,16 @@ "resolution": "対応詳細", "target": "ターゲットコーデック" } - } + }, + "unknownUser": "不明なユーザー" + }, + "summary": { + "sessions": "{count, plural, one {# session} other {# sessions}}", + "playing": "{count} 再生中", + "transcoding": "{count} トランスコード" } }, "paperlessNgx": { - "name": "", "description": "", "documentsTotal": "", "documentsInbox": "", @@ -2638,7 +3879,6 @@ } }, "patchmon": { - "name": "", "description": "", "title": "", "totalHosts": "", @@ -2705,36 +3945,30 @@ "description": "" }, "hostsNeedingUpdatesWarningAt": { - "label": "", - "description": "" + "label": "" }, "hostsNeedingUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "" }, "securityUpdatesThresholdMode": { "label": "", "description": "" }, "securityUpdatesWarningAt": { - "label": "", - "description": "" + "label": "" }, "securityUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "" }, "hostsWithSecurityUpdatesThresholdMode": { "label": "", "description": "" }, "hostsWithSecurityUpdatesWarningAt": { - "label": "", - "description": "" + "label": "" }, "hostsWithSecurityUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "" }, "upToDateHostsThresholdMode": { "label": "", @@ -2753,12 +3987,10 @@ "description": "" }, "totalOutdatedPackagesWarningAt": { - "label": "", - "description": "" + "label": "" }, "totalOutdatedPackagesCriticalAt": { - "label": "", - "description": "" + "label": "" }, "showOsDistribution": { "label": "", @@ -2789,6 +4021,14 @@ "bars": "", "donut": "" } + }, + "threshold": { + "warningAt": { + "description": "このしきい値に達したときに黄色を入力してください" + }, + "criticalAt": { + "description": "このしきい値に達したときに赤を入力してください" + } } }, "error": { @@ -2796,12 +4036,12 @@ } }, "bazarr": { - "name": "", "description": "", "episodes": "", "movies": "", "providers": "", "status": "", + "announcements": "お知らせ", "option": { "showMissingEpisodes": { "label": "", @@ -2848,7 +4088,8 @@ "users": "ユーザー", "photos": "写真", "videos": "動画", - "storage": "ストレージ使用量" + "storage": "ストレージ使用量", + "albumLimit": "最大のアルバム( {count} まで)" }, "immich-albumCarousel": { "name": "Immich アルバム", @@ -2872,24 +4113,21 @@ } }, "description": "Immichアルバムの写真のスライド", - "noPhotos": "このアルバムには写真がありません" + "noPhotos": "このアルバムには写真がありません", + "albumPhoto": "アルバムの写真", + "actions": { + "previousPhoto": "前の写真", + "nextPhoto": "次の写真", + "pauseSlideshow": "Pause slideshow", + "resumeSlideshow": "スライドショーを再開", + "toggleSlideshow": "スライドショーを一時停止または再開", + "photo": "写真 {number}" + } }, "downloads": { "name": "クライアントをダウンロード", "description": "Torrent クライアントと Usenet クライアントの両方から、ダウンロードを表示および管理できます。", "option": { - "columns": { - "label": "表示する列" - }, - "enableRowSorting": { - "label": "アイテムの並べ替えを有効にする" - }, - "defaultSort": { - "label": "デフォルトで並べ替えに使用される列" - }, - "descendingDefaultSort": { - "label": "並べ替えを反転" - }, "showCompletedUsenet": { "label": "完了とマークされた使用済みの項目を表示" }, @@ -2914,12 +4152,6 @@ "limitPerIntegration": { "label": "連携機能ごとに項目を制限", "description": "これは、連携機能ごとに表示されるアイテム数を制限します。グローバルではありません" - }, - "columnOrder": { - "label": "" - }, - "columnWidths": { - "label": "" } }, "errors": { @@ -2951,7 +4183,7 @@ }, "id": { "columnTitle": "Id", - "detailsTitle": "" + "detailsTitle": "Id" }, "integration": { "columnTitle": "連携機能" @@ -3080,6 +4312,10 @@ "mediaRequests-requestList": { "name": "メディアリクエストリスト", "description": "Overseerr または Jellyseerr からの全てのメディアリクエストのリストを見る", + "empty": { + "title": "メディアリクエストはまだありません", + "description": "リクエストを開始するには、ムービーまたはショーを検索します。" + }, "option": { "linksTargetNewTab": { "label": "リンクを新しいタブで開く" @@ -3113,12 +4349,16 @@ "failed": "失敗", "completed": "完了" }, + "unknown": "不明", "toBeDetermined": "未確定" }, "mediaRequests-requestStats": { "name": "メディアリクエストの統計", "description": "メディアリクエストに関する統計", - "option": {}, + "empty": { + "title": "まだリクエストアクティビティがありません", + "description": "統計は最初のメディアリクエストの後に表示されます。" + }, "titles": { "stats": { "main": "メディア統計", @@ -3128,8 +4368,7 @@ "declined": "拒否済みです", "available": "利用可能", "tv": "テレビのリクエスト", - "movie": "映画のリクエスト", - "total": "合計" + "movie": "映画のリクエスト" }, "users": { "main": "トップユーザー", @@ -3155,7 +4394,6 @@ }, "currentIndex": "全 {total} 中 {start} ~ {end}", "healthCheck": { - "title": "ヘルスチェック", "queued": "処理待ち", "status": { "healthy": "正常", @@ -3164,41 +4402,36 @@ }, "panel": { "statistics": { - "empty": "空", - "transcodes": "トランスコード", - "transcodesCount": "トランスコード回数", - "healthChecksCount": "ヘルスチェック回数", "filesCount": "ファイル数", "savedSpace": "保存されたスペース", - "healthChecks": "ヘルスチェック", "videoCodecs": "コーデック", "videoContainers": "コンテナ", "videoResolutions": "解像度" }, "workers": { - "empty": "空", "table": { - "file": "ファイル", "eta": "残り時間", - "progress": "進捗状況", - "transcode": "トランスコード", - "healthCheck": "ヘルスチェック" + "progress": "進捗状況" } }, "queue": { - "empty": "空", "table": { - "file": "ファイル", - "size": "サイズ", - "transcode": "トランスコード", - "healthCheck": "ヘルスチェック" + "size": "サイズ" } + }, + "common": { + "empty": "空", + "file": "ファイル", + "healthCheck": "ヘルスチェック", + "transcode": "トランスコード", + "transcodes": "トランスコード", + "healthChecks": "ヘルスチェック" } } }, "mediaMissing": { "name": "", - "description": "", + "description": "{radarr}、 {sonarr} 、 {bindery} の欠落とキューに入れられた映画、エピソード、本を表示します", "option": { "showMissing": { "label": "" @@ -3216,7 +4449,8 @@ }, "type": { "movie": "", - "episode": "" + "episode": "", + "book": "本" }, "empty": { "missing": "", @@ -3247,6 +4481,13 @@ "showPosterImage": { "label": "ポスターの画像を表示" } + }, + "error": { + "allFeedsFailed": "RSSフィードを読み込むことができません。フィードURLを確認して再度お試し下さい。" + }, + "warning": { + "partial": "{count, plural, one {# RSS フィードを読み込めませんでした} other {# RSS フィードを}}", + "stale": "RSSフィードを更新できませんでした。以前に読み込まれたエントリを表示しています。" } }, "releases": { @@ -3322,17 +4563,8 @@ "label": "正規表現" } }, - "edit": { - "label": "編集" - }, "editForm": { - "title": "リポジトリの編集", - "cancel": { - "label": "キャンセル" - }, - "confirm": { - "label": "確認" - } + "title": "リポジトリの編集" }, "importForm": { "title": "Docker からインポート" @@ -3349,8 +4581,7 @@ "label": "", "token": "", "configured": "", - "notConfigured": "", - "save": "" + "notConfigured": "" } } }, @@ -3377,17 +4608,32 @@ "noProviderResponse": "プロバイダーからの応答がありません", "unexpected": "" } - } + }, + "expandDetails": "{name} の詳細を表示", + "collapseDetails": "{name} の詳細を隠す" }, "networkControllerSummary": { - "option": {}, - "card": { - "vpn": { - "countConnected": "{count} 接続済み" + "advanced": { + "updated": "更新日時", + "metric": { + "latency": "レイテンシー", + "ping": "Ping", + "uptime": "稼働時間", + "users": "ユーザー", + "guests": "ゲスト" } }, + "card": { + "vpn": { + "countConnected": "{count, plural, one {# connected} other {# connected}}", + "label": "VPN" + }, + "wan": "WAN", + "web": "ウェブ", + "wifi": "Wi-Fi", + "lan": "LAN" + }, "error": { - "integrationsDisconnected": "利用可能なデータがありません。すべての連携機能が切断されました", "unknownContentOption": "ネットワークコントローラサマリーウィジェットの不明なコンテンツオプション: " }, "name": "ネットワークコントローラーの概要", @@ -3424,7 +4670,6 @@ } }, "error": { - "integrationsDisconnected": "利用可能なデータがありません。すべての連携機能が切断されました", "unknownContentOption": "ネットワークステータスサマリーウィジェットの不明なコンテンツオプション: " }, "name": "ネットワークの状態", @@ -3454,7 +4699,6 @@ "versiontitle": "バージョン", "cputitle": "CPU 使用率", "memorytitle": "メモリ使用率", - "cpu": "CPU", "memory": "メモリ", "interfaces": { "name": "名称", @@ -3462,6 +4706,16 @@ "recv": "受信", "title": "ネットワークインターフェース" } + }, + "empty": { + "noInterfaces": "ネットワークインターフェースデータがまだありません" + }, + "versionUnknown": "不明なバージョン", + "metricAccessible": "{metric}: {value}%, {status}", + "status": { + "normal": "標準", + "warning": "警告", + "critical": "Critical" } }, "notifications": { @@ -3471,8 +4725,21 @@ "option": { "hideLogos": { "label": "" + }, + "messageFormat": { + "label": "メッセージの形式", + "option": { + "auto": "自動", + "plain": "プレーンテキスト", + "markdown": "Markdown", + "html": "HTML" + } } - } + }, + "openService": "通知サービスを開く", + "deleteNotification": "Goティフィスから通知を削除", + "deleteFailed": "通知を削除できませんでした", + "deleteFailedMessage": "通知を削除できませんでした。もう一度やり直してください。" }, "speedtestTracker": { "name": "スピードテストトラッカー", @@ -3514,7 +4781,6 @@ } }, "uptimeKuma": { - "name": "", "description": "", "option": { "showAverageUptime": { @@ -3551,10 +4817,14 @@ }, "error": { "internalServerError": "" + }, + "status": { + "up": "合計アップ", + "down": "ダウンロード速度", + "paused": "一時停止" } }, "traefik": { - "name": "", "description": "", "option": { "showTcp": { @@ -3575,7 +4845,6 @@ }, "resource": { "routers": "", - "services": "", "middlewares": "" }, "status": { @@ -3585,7 +4854,20 @@ }, "error": { "internalServerError": "" - } + }, + "resourceType": { + "router": "Router", + "service": "サービス", + "middleware": "ミドルウェア" + }, + "resourceStatus": { + "enabled": "有効", + "disabled": "無効", + "warning": "警告", + "error": "エラー", + "unknown": "不明" + }, + "failedEndpoint": "失敗: {endpoint}" }, "audioStats": { "name": "", @@ -3651,9 +4933,7 @@ "label": "グラフの表示", "description": "表示するグラフを選択します。", "option": { - "cpu": "CPU", "memory": "メモリ", - "gpu": "GPU", "network": "ネットワーク" } }, @@ -3668,12 +4948,11 @@ } }, "card": { - "cpu": "CPU", "memory": "MEM", - "gpu": "GPU", "network": "NET", "up": "UP", - "down": "DOWN" + "down": "DOWN", + "memoryTooltip": "{used} / {available} ({percent}%)" } }, "systemDisks": { @@ -3699,151 +4978,88 @@ }, "showBackgroundBar": { "label": "バックグラウンドの使用状況バーを表示" - }, - "visibleStorageVolumes": { - "label": "", - "description": "", - "placeholder": "" } }, "status": { - "unhealthy": "異常" + "unhealthy": "異常", + "smart": "SMART", + "free": "{percentage}%無料" + } + }, + "customApi": { + "name": "カスタム ウィジェット", + "description": "設定されたカスタム JSX 定義をレンダリングします。", + "customJsx": { + "noTemplate": "JSX テンプレートが構成されていません。", + "templateWarnings": "{count} テンプレート警告:", + "requestIdRequired": "このネットワーク制御には requestId という名前が必要です。", + "unsavedPreview": "名前付きリクエストをテストする前に、エディタで最初のリクエストテストを実行します。", + "invalidParams": "要求パラメータが無効です。", + "loading": "リクエストを読み込んでいます...", + "loadRequest": "リクエストを読み込む", + "requestFailed": "リクエストに失敗しました。", + "retry": "リクエストを再試行", + "actionCompleted": "アクションが正常に完了しました。", + "actionSimulated": "アクションシミュレートされました。リクエストは送信されませんでした。", + "actionsDisabledEditMode": "ボードが編集モードになっている間はアクションは無効になります。", + "widgetItemUnavailable": "このウィジェットアイテムは利用できません。", + "toggle": "切り替え", + "copied": "コピーしました", + "confirmDelete": "この破壊的な行動を確認してください。" + }, + "option": { + "definitionId": { + "label": "カスタム ウィジェット" + }, + "refreshInterval": { + "label": "", + "description": "" + } + }, + "noDefinition": "", + "definitionNotFound": "カスタム ウィジェットは利用できません", + "migrationRequired": "このレガシーのカスタムウィジェットは保存されますが、実行する前に、カスタムウィジェットの管理からカスタム JSX v2 に移行する必要があります。", + "manageMigration": "カスタム ウィジェットの管理を開く", + "contactAdmin": "管理者に連絡してください。", + "configurationNeedsRepair": "このウィジェットのオプションが変更されました。ウィジェットを編集して設定を修復します。", + "removeFromBoard": "ボードから削除", + "editModePending": "このウィジェットをロードするためにボードを保存します。", + "picker": { + "group": "カスタム JSX ウィジェット", + "empty": "カスタム ウィジェットが見つかりません", + "preview": "プレビュー", + "sources": "{count, plural, one {# source} other {# source}}", + "requests": "{count, plural, one {# request} other {# requests}}", + "migrationRequired": "移行が必要です", + "migrationDescription": "この配置されたv1ウィジェットはまだ実行できません。編集されたプロンプトをLLMにコピーしてから、単一のJSONレスポンスをHomarrに貼り付けます。", + "manageMigration": "カスタム ウィジェットの管理を開く", + "contactAdmin": "管理者に連絡してください。" + }, + "configuration": { + "needsAttention": "設定は注意が必要です: {message}", + "advancedOptions": "高度な設定", + "invalidJson": "不正な JSON" } }, "beszelSystemTable": { "name": "", "description": "", "option": { - "statusFilter": { - "label": "" - }, "sortBy": { "label": "" }, "sortDirection": { "label": "" - }, - "showCpu": { - "label": "" - }, - "showMemory": { - "label": "" - }, - "showDisk": { - "label": "" - }, - "showGpu": { - "label": "" - }, - "showLoadAvg": { - "label": "" - }, - "showNet": { - "label": "" - }, - "showTemp": { - "label": "" - }, - "showBattery": { - "label": "" - }, - "showServices": { - "label": "" - }, - "showUptime": { - "label": "" - }, - "showAgent": { - "label": "" - }, - "columnOrder": { - "label": "" - }, - "columnWidths": { - "label": "" } }, - "noRecords": "", "error": { - "internalServerError": "", "layoutSaveTitle": "", "layoutSaveMessage": "" - }, - "column": { - "system": "", - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" } }, "beszelSystemGrid": { "name": "", - "description": "", - "option": { - "statusFilter": { - "label": "" - }, - "showCpu": { - "label": "" - }, - "showMemory": { - "label": "" - }, - "showDisk": { - "label": "" - }, - "showGpu": { - "label": "" - }, - "showLoadAvg": { - "label": "" - }, - "showNet": { - "label": "" - }, - "showTemp": { - "label": "" - }, - "showBattery": { - "label": "" - }, - "showServices": { - "label": "" - }, - "showUptime": { - "label": "" - }, - "showAgent": { - "label": "" - } - }, - "error": { - "internalServerError": "" - }, - "empty": { - "noSystems": "" - }, - "metric": { - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" - } + "description": "" }, "beszelAlerts": { "name": "", @@ -3857,11 +5073,12 @@ } }, "empty": "", - "error": { - "internalServerError": "" - }, "history": "", "resolved": "", + "alertDescription": { + "statusDuration": "{minutes} 分間ダウン", + "threshold": "{value} が {minutes} 分を超えています" + }, "status": { "triggered": "", "ok": "" @@ -3908,16 +5125,16 @@ "noSystems": "" }, "error": { - "internalServerError": "", "liveConnectionFailed": "", "switchToHistorical": "", - "systemNotFound": "" + "systemNotFound": "", + "selectionSaveTitle": "選択を保存できません", + "selectionSaveMessage": "システムまたは期間選択を保存できませんでした。もう一度やり直してください。" }, "chart": { "cpu": { "title": "", - "subtitle": "", - "series": "" + "subtitle": "" }, "memory": { "title": "", @@ -3932,7 +5149,7 @@ }, "diskIO": { "title": "", - "subtitle": "", + "subtitle": "ファイルシステムでのThroughput", "read": "", "write": "" }, @@ -3959,39 +5176,550 @@ "title": "", "subtitle": "" } + }, + "period": { + "live": "ライブ", + "oneHour": "1時間", + "twelveHours": "12時間", + "oneDay": "24時間", + "oneWeek": "1W", + "thirtyDays": "30日" } }, - "wud": { - "name": "What's Up Docker", - "description": "利用可能な更新があるコンテナの数を表示します。", - "title": "What's Up Docker", - "monitored": "監視中", - "updatesAvailable": "{count, plural, one {# アップデートが} other {# アップデートが}}", - "updateAvailable": "アップデートがあります", - "openReleaseNotes": "リリースノートを開く", + "assistant": { + "name": "アシスタント", + "description": "あなたのボードに直接完全なアシスタントの会話を持っています。", + "unavailable": { + "title": "アシスタントが利用できません", + "description": "サインインし、管理者に管理パネルからアシスタントを設定するよう依頼します。" + }, + "compact": { + "title": "アシスタント", + "description": "ここでチャットするにはウィジェットのサイズを変更するか、会話全体を開きます。", + "open": "アシスタントを開く", + "openTitle": "アシスタントをサイドパネルで開く", + "openDescription": "会話は一つのアクティブな表面に留まります。", + "returnToWidget": "会話をこのウィジェットに戻す", + "otherWidgetTitle": "別のウィジェットでアシスタントを有効にする", + "otherWidgetDescription": "一度にアクティブな会話サーフェスは 1 つだけです。", + "useHere": "このウィジェットでアシスタントを使用する" + } + }, + "beszel": { + "error": { + "internalServerError": "Beszel に接続できません。統合設定を確認してください。" + }, + "empty": { + "noSystems": "システムが見つかりません" + }, + "options": { + "statusFilter": { + "label": "ステータスフィルター" + }, + "showCpu": { + "label": "CPU を表示" + }, + "showMemory": { + "label": "メモリを表示" + }, + "showDisk": { + "label": "ディスクを表示" + }, + "showGpu": { + "label": "GPU を表示" + }, + "showLoadAvg": { + "label": "負荷平均を表示" + }, + "showNet": { + "label": "ネットワークを表示" + }, + "showTemp": { + "label": "温度を表示" + }, + "showBattery": { + "label": "バッテリーを表示" + }, + "showServices": { + "label": "サービスを表示" + }, + "showUptime": { + "label": "稼働時間を表示" + }, + "showAgent": { + "label": "エージェントのバージョンを表示" + } + }, + "metric": { + "system": "システム", + "source": "連携機能", + "hostname": "ホスト名", + "cpuModel": "CPUモデル", + "cores": "コア", + "memoryTotal": "メモリの合計", + "memory": "メモリ", + "disk": "ディスク", + "loadAvg": "平均を読み込む", + "net": "Net", + "temp": "Temp", + "battery": "バット語", + "uptime": "稼働時間", + "agent": "エージェント" + } + }, + "llamacpp": { + "name": "llama.cpp", + "description": "ローカルllama.cpp サーバーのヘルス、ロードされたモデル、生成速度を表示します。", + "title": "llama.cpp", + "status": { + "unhealthy": "健康でない ({status})" + }, + "idle": "アイドル", + "speedTooltip": { + "current": "現在の生成速度", + "average": "起動後の平均生成速度", + "request": "このリクエスト開始からの平均速度" + }, + "busy": "{count, plural, one {# request running} other {# requests running}}", + "modelInfo": { + "context": "コンテキスト", + "size": "ファイルのサイズ", + "parameters": "パラメータ", + "model": "モデル", + "quantization": "量子化" + }, + "stats": { + "tokensProcessed": "処理されたトークン", + "contextUsage": "コンテキスト / KV の使用", + "cacheHitRate": "キャッシュのヒット率", + "tokensGenerated": "生成されたトークン" + }, + "error": { + "unreachable": "llama-server is not reachable" + }, + "unit": { + "speed": "{value} トークン/秒", + "parameters": "{value}B", + "none": "—", + "speedShort": "t/s" + }, "option": { "showTitle": { "label": "タイトルを表示" }, - "showRing": { - "label": "更新の着信音を表示" + "showModelInfo": { + "label": "モデル情報を表示" }, - "layout": { - "label": "レイアウト", + "showContextUsage": { + "label": "コンテキストの使用状況を表示" + }, + "showCacheHitRate": { + "label": "キャッシュのヒット率を表示" + }, + "showSpeedStats": { + "label": "速度統計を表示" + }, + "showRequests": { + "label": "リクエストの読み込みを表示" + }, + "showTokenStats": { + "label": "トークンの合計を表示" + }, + "showSpeculative": { + "label": "投機的デコードを表示" + } + }, + "advanced": { + "promptSpeed": "プロンプト速度", + "avgSpeed": "平均生成", + "requests": "リクエスト", + "deferred": "遅延しました", + "slots": "{processing}/{total} スロットがビジーです", + "speculative": "投機的デコード", + "avgPrompt": "Avg prompt", + "specDrafts": "Spec. drafts", + "specAccepted": "Spec. accepted tokens", + "specDraftTokens": "Spec. 下書きトークン" + } + }, + "stats": { + "name": "統計", + "description": "統合の統計情報を 1 つの設定可能なウィジェットにまとめます。", + "configure": "メトリクスを設定", + "refresh": "統計情報を更新", + "empty": "ウィジェットの設定を開き、連携を選択し、メトリクスを追加します。", + "editorHelp": "このウィジェットで選択された統合からメトリックを追加します。変更はダッシュボードに保存されます。", + "source": "連携機能", + "metric": "メトリック", + "noMetrics": "この統合に利用可能な統計情報がありません", + "add": "メトリックを追加", + "label": "カスタムラベル", + "hidden": "非表示", + "compact": "コンパクトな数値", + "moveUp": "上に移動", + "moveDown": "下へ移動", + "remove": "メトリックを削除", + "loading": "読み込み中…", + "unavailable": "Unavailable", + "refreshFailed": "更新に失敗しました — 保存したデータを表示しています", + "stale": "保存されたデータ — 更新するには更新", + "table": { + "value": "値", + "status": "ステータス" + }, + "option": { + "table": { + "label": "テーブルビュー" + }, + "rows": { + "label": "コンパクトな行" + }, + "showIcon": { + "label": "ソースアイコンを表示" + }, + "spacing": { + "label": "間隔", "option": { - "horizontal": { - "label": "水平方向" + "xs": { + "label": "コンパクト化" }, - "vertical": { - "label": "垂直方向" + "sm": { + "label": "快適さ" + }, + "md": { + "label": "Spacious" } } }, - "showUpdateList": { - "label": "コンテナ更新リストを表示", - "description": "利用可能な画像の更新がある各監視対象のコンテナを一覧表示します" + "entries": { + "label": "メトリック" + }, + "plain": { + "label": "カードの背景を削除" } - } + }, + "fetchFailed": "統計情報を取得できません", + "viewOptions": "このビューをカスタマイズ", + "moreMetrics": "{count} さらに詳細表示する", + "localHelp": "レイアウト、書式設定、表示はこのビューにのみ適用されます。共有ボードの設定は同じです。", + "plain": "カードの背景を削除", + "resetView": "表示をリセット", + "allHidden": "すべてのメトリックはこのビューで非表示になります。このビューをカスタマイズして復元します。" + }, + "wazuh": { + "target": { + "api": "Wazuh server API", + "indexer": "Wazuh indexer", + "wazuh": "Wazuh" + }, + "severity": { + "low": "低い", + "medium": "中間", + "high": "高い", + "critical": "Critical" + }, + "error": { + "unauthorized": { + "title": "{target} は資格情報を拒否しました", + "description": "Wazuh統合に保存されているユーザー名とパスワードを確認してください。サーバーAPI(ポート 55000)とインデクサ(ポート 9200)は別々のユーザーを使用します。" + }, + "certificate": { + "title": "{target} 証明書は信頼されていません", + "description": "Wazuh はデフォルトで自己署名証明書を使用します。統合で「テスト接続」を実行し、証明書を信頼するか、format@@0 → format@@1 で認証局を追加します。" + }, + "unreachable": { + "title": "{target} に到達できません", + "description": "ホストが接続を拒否または削除しました。URL、ポート、ファイアウォールを確認してください。インデクサーはデフォルトのオールインワンインストールでローカルホストのみリッスンします。" + }, + "timeout": { + "title": "{target} がタイムアウトしました", + "description": "15秒以内に応答がありません。サービスがオーバーロードされているか、アドレスが間違っている可能性があります。" + }, + "status": { + "title": "{target} がエラーを返しました", + "description": "The request failed with HTTP status {status}." + }, + "invalidResponse": { + "title": "{target} からの予期しない応答", + "description": "URLがWazuhサーバーAPIまたはインデクサーを指していることを確認してください。" + }, + "indexerRequired": { + "title": "Wazuh indexer credentials required", + "description": "警告、脆弱性、ファイルの整合性イベントは Wazuh インデクサーから読み込まれます。統合にインデクサー URL 、ユーザー名、パスワードを追加します。" + }, + "unknown": { + "title": "{target} からデータを読み込めませんでした", + "description": "詳細については、Homarrログを確認してください。" + } + }, + "range": { + "1h": "1時間", + "24h": "24時間", + "7d": "7d", + "30d": "30日" + }, + "levelTooltip": "ルールレベル {level} ({severity})" + }, + "wazuhAgents": { + "name": "Wazuhエージェント", + "description": "ステータス、OS、バージョン、最後のキープアライブを持つWazuhエージェントのソート可能なリスト", + "option": { + "statusFilter": { + "label": "エージェントを表示" + }, + "sortBy": { + "label": "並び替え" + }, + "showVersion": { + "label": "Wazuh バージョンの列を表示" + }, + "showGroups": { + "label": "グループの列を表示" + } + }, + "title": "エージェント", + "total": "{count} エージェント", + "status": { + "active": "活動中", + "disconnected": "切断されました", + "neverConnected": "接続していません", + "pending": "保留中" + }, + "statusLabel": { + "active": "活動中", + "disconnected": "切断されました", + "never_connected": "接続していません", + "pending": "保留中", + "unknown": "不明" + }, + "live": "ライブ", + "snapshot": "スナップショット {age} 古い", + "snapshotHint": "{time}で取得されたWazuh ダッシュボードのエージェントスナップショット(wazuh-monitoring)を参照してください。", + "staleSnapshot": "エージェントの {time} スナップショットが古くなっています。Wazuh ダッシュボードのモニタリングジョブが実行されていることを確認するか、サーバーの API 資格情報を追加してください。", + "noDisconnected": "すべてのエージェントが接続されています", + "empty": "このフィルターに一致するエージェントはありません", + "column": { + "status": "ステータス", + "name": "ジョブ名", + "ip": "IP", + "os": "OS", + "version": "バージョン", + "lastKeepAlive": "Keepliving", + "groups": "グループ" + }, + "outdated": "最新のエージェントバージョンより古い ({version})" + }, + "wazuhAlerts": { + "name": "Wazuh アラートのフィード", + "description": "最近の Wazuh アラートレベル、MITRE ATT&CK テクニック、エージェント、IP ソース", + "option": { + "minLevel": { + "label": "最小ルールレベル", + "description": "Wazuh レベル: 0-6 low, 7-11 medium, 12-14 high, 15 + critical" + }, + "hours": { + "label": "時間ウィンドウ (時間)" + }, + "limit": { + "label": "アラートの数" + }, + "showMitre": { + "label": "Show MITRE ATT&CK techniques" + }, + "showAgent": { + "label": "エージェントの表示" + }, + "showSourceIp": { + "label": "送信元IPを表示" + }, + "showRuleId": { + "label": "ルールIDを表示" + } + }, + "title": "アラート・レベル {level}+ {hours}時間", + "empty": "このレベルでは警告はありません。静かに。", + "rule": "ルール {id}", + "openInDashboard": "Wazuhダッシュボードでこのアラートを開く" + }, + "wazuhSummary": { + "name": "Wazuh アラートの重要度", + "description": "前回の傾向を伴う深刻度の内訳を警告する", + "option": { + "range": { + "label": "時間範囲" + }, + "showTrend": { + "label": "前の期間に対するトレンドを表示" + }, + "showFooter": { + "label": "フッターを表示" + } + }, + "title": "アラートの重要度・ {range}", + "alerts": "アラート", + "none": "アラートはありません", + "trend": { + "new": "新規作成", + "tooltip": "前の期間: {previous}" + }, + "previous": "前の {range}: {count}", + "maxLevel": "最大レベル {level}", + "health": "インデクサの状態: {status}", + "manager": "マネージャー {version}" + }, + "wazuhTimeline": { + "name": "Wazuh alerts timeline", + "description": "Wazuhアラートの重大度ごとの積み上げチャート", + "option": { + "range": { + "label": "時間範囲" + }, + "interval": { + "label": "間隔" + }, + "chartType": { + "label": "グラフの種類" + }, + "yScale": { + "label": "Y軸スケール", + "description": "平方根は、数千の低いものに次いで高度および重大なアラートを表示します。" + }, + "minLevel": { + "label": "最小ルールレベル" + }, + "showLegend": { + "label": "合計で凡例を表示" + } + }, + "title": "アラートタイムライン・ {range}", + "total": "{count} アラート", + "interval": "{interval} ごと" + }, + "wazuhTopList": { + "name": "Wazuh Top list", + "description": "トップルール、エージェント、ソースIPまたはMITRE ATT&CK戦術とアラート カウント", + "option": { + "kind": { + "label": "ランク" + }, + "range": { + "label": "時間範囲" + }, + "limit": { + "label": "Number of entries" + }, + "minLevel": { + "label": "最小ルールレベル" + }, + "showBars": { + "label": "バーを表示" + } + }, + "title": { + "rules": "トップルール · {range}", + "agents": "トップエージェント · {range}", + "sourceIps": "トップソース IP · {range}", + "mitreTactics": "MITRE戦術・ {range}", + "mitreTechniques": "MITRE techniques · {range}" + }, + "empty": { + "rules": "この期間にアラートはありません", + "agents": "この期間にアラートはありません", + "sourceIps": "この期間中に送信元IPのアラートはありません", + "mitreTactics": "この期間にMITRE ATT&CKにマップされたアラートはありません", + "mitreTechniques": "この期間にMITRE ATT&CKにマップされたアラートはありません" + }, + "totalTooltip": "{count} マッチングアラート", + "private": "LAN", + "public": "公開", + "agents": "{count} エージェントを見る", + "others": "{count} 件以上の他のエントリのアラート" + }, + "wazuhVulnerabilities": { + "name": "Wazuh の脆弱性", + "description": "脆弱性は、CVEと最も脆弱なエージェントに数えられます", + "option": { + "cveOrder": { + "label": "CVEs をランク付けする" + }, + "minSeverity": { + "label": "CVEの重要度" + }, + "cveLimit": { + "label": "CVE数" + }, + "agentLimit": { + "label": "エージェントの数" + }, + "showAgents": { + "label": "脆弱なエージェントを表示する" + } + }, + "title": "脆弱性", + "topCves": "上位CVEs", + "score": "スコア", + "agentsShort": "エージェント", + "topAgents": "最も脆弱なエージェント", + "criticalHigh": "クリティカル/高", + "totalTooltip": "{count} エージェントの {agents} に関する調査結果。", + "affected": "{count} エージェント", + "empty": "脆弱性は検出されませんでした", + "distribution": "重度分布。スコアがない場合、 {unscored} の結果は表示されません。", + "worst": "最悪: {id}({score})、{agents}台のエージェント" + }, + "wazuhFim": { + "name": "Wazuh ファイルの整合性", + "description": "最近のファイルの整合性監視 (syscheck) イベント", + "option": { + "range": { + "label": "時間範囲" + }, + "event": { + "label": "イベント" + }, + "limit": { + "label": "イベント数" + }, + "includeRegistry": { + "label": "Windowsレジストリイベントを含める" + } + }, + "title": "ファイルの整合性・ {range}", + "event": { + "added": "追加された日", + "modified": "修正されました", + "deleted": "削除済", + "unknown": "変更済み" + }, + "empty": "この期間内にファイルの整合性イベントはありません", + "user": "作成者: {user}", + "registry": "Registry" + }, + "wazuhAuthFailures": { + "name": "Wazuh 認証失敗", + "description": "失敗したログインとエージェントごとのブルートフォースアラート(時間ごとの輝線)。", + "option": { + "hours": { + "label": "時間ウィンドウ (時間)" + }, + "limit": { + "label": "エージェントの数" + }, + "showSourceIps": { + "label": "トップのソースIPを表示" + } + }, + "title": "認証失敗 · {hours}時間", + "seriesTooltip": "{hours}h以上のすべてのエージェント", + "peak": "ピーク {count}/bucket", + "empty": "この期間に失敗したログインはありません", + "failed": "ログイン失敗", + "failedHint": "シングル認証に失敗しました(sshd、PAM、Windowsログオン、無効なユーザー)", + "bruteForce": "ブルート力", + "bruteForceHint": "相関するブルートフォースルール (短期間で複数の失敗、MITRE T1110)", + "sourceIps": "送信元IP", + "ipTooltip": "{ip}: {count} 失敗", + "bruteForceCount": "{count} ブルート力" } }, "widgetPreview": { @@ -4004,7 +5732,76 @@ } }, "board": { + "emptyState": { + "title": "最初のビューを作成", + "description": "ウィジェットまたはアプリを追加するか、サービスを接続してこのボードにデータを使用します。", + "addWidget": "ウィジェットを追加", + "addApp": "アプリを追加", + "connectService": "サービスに接続" + }, + "setupChecklist": { + "title": "このボードを便利にする", + "description": "中断した場所をピックアップします。進行状況はすでにこのボード上のコンテンツに従います。", + "collapse": "セットアップチェックリストを閉じる", + "dismiss": "セットアップチェックリストを閉じる", + "resume": "セットアップを続ける ({completed}/{total})", + "progress": "ボードセットアップの進捗状況", + "step": { + "content": { + "label": "便利なコンテンツを追加", + "description": "ウィジェットを選択し、設定する前に設定します。" + }, + "app": { + "label": "アプリをピン留めする", + "description": "このボードからワンクリックでサービスやツールを維持します。" + }, + "service": { + "label": "サービスに接続", + "description": "互換性のあるウィジェットのライブデータとアクションのロックを解除します。", + "permissionDescription": "管理者はサービスを接続してライブデータのロックを解除できます。", + "action": "接続する" + } + } + }, "action": { + "addContent": "ボードコンテンツを追加", + "settings": "ボードの設定", + "switch": "ボードを切り替える", + "switcher": { + "title": "ボードを切り替える", + "search": { + "empty": "\"{search}\" に一致するボードはありません。" + }, + "results": "利用可能なボード", + "preview": "{name} と {count} アイテムのプレビュー", + "currentHidden": "現在のボード: {name}", + "keyboard": { + "navigate": "Navigate", + "open": "開く", + "instructions": "ボードをフィルタリングするには、矢印キーを使用して結果を移動し、Enterキーを使用してボードを開きます。" + }, + "empty": { + "title": "他のボードはありません", + "description": "あなたがアクセスできる他のボードはありません。" + }, + "error": "ボードをロードできませんでした。" + }, + "create": { + "availability": { + "checking": "利用可能か確認中…", + "available": "{name} が利用可能です" + }, + "notification": { + "success": { + "title": "ボードが作成されました", + "message": "ボード {name} が作成されました" + }, + "error": { + "title": "ボードを作成できません", + "message": "Board {name} could not be created" + } + } + }, "duplicate": { "title": "ボードを複製する", "message": "これにより、ボード {name} はすべてのコンテンツと共に複製されます。ウィジェットが使用許可のない連携機能を参照している場合には、削除されます。", @@ -4020,14 +5817,19 @@ } }, "edit": { + "enter": "ボードを編集", + "save": "ボードを保存", + "exit": "編集モードを終了", "notification": { "success": { - "title": "変更は正常に適用されました", "message": "ボードは正常に保存されました" }, "error": { - "title": "変更を適用できません", "message": "ボードを保存できませんでした" + }, + "loadError": { + "title": "編集を開始できません", + "message": "ボードエディタを読み込めませんでした。ダッシュボードはまだ表示モードで利用できます。" } }, "confirmLeave": { @@ -4035,62 +5837,6 @@ "message": "保存されていない変更があります。このページから移動してもいいですか?" } }, - "oldImport": { - "label": "1.0.0 より前の Homarr からインポート", - "notification": { - "success": { - "title": "インポート成功", - "message": "ボードは、正常にインポートされました" - }, - "error": { - "title": "インポート失敗", - "message": "ボードをインポートできませんでした。詳細はログを確認してください" - } - }, - "form": { - "file": { - "label": "JSON ファイルを選択", - "invalidError": "無効な設定ファイルです" - }, - "apps": { - "label": "アプリ", - "avoidDuplicates": { - "label": "重複の回避", - "description": "同じ href を持つアプリが既に存在するアプリを無視します" - }, - "onlyImportApps": { - "label": "アプリのみインポート", - "description": "アプリのみを追加します。ボードを手動で再作成する必要があります" - } - }, - "name": { - "label": "ボード名" - }, - "screenSize": { - "label": "画面サイズ", - "description": "1.0 以前のバージョンでは、3種類のモードが存在するため、画面サイズごとに列数を選択することができました。", - "option": { - "sm": "小", - "md": "中", - "lg": "大" - } - }, - "sidebarBehavior": { - "label": "サイドバーの動作", - "description": "サイドバーは 1.0 で削除され、内部のアイテムで何が起こるかを選択できます。", - "option": { - "lastSection": { - "label": "最後のセクション", - "description": "最後のセクションの下に、サイドバーが表示されます" - }, - "removeItems": { - "label": "アイテムを削除", - "description": "サイドバーに含まれるアイテムは、削除されます" - } - } - } - } - }, "quickCreateApp": { "modal": { "title": "即座にアプリを作成", @@ -4098,6 +5844,12 @@ } } }, + "landmark": { + "canvas": "ダッシュボードのキャンバス", + "leftRail": "左のダッシュボードレール", + "rightRail": "右のダッシュボードレール", + "items": "ダッシュボードアイテム" + }, "field": { "pageTitle": { "label": "ページタイトル" @@ -4167,7 +5919,8 @@ } }, "primaryColor": { - "label": "原色" + "label": "原色", + "locked": "管理者はインスタンスのブランドカラーをすべてのボードに保持します。" }, "secondaryColor": { "label": "セカンダリーカラー" @@ -4207,9 +5960,6 @@ "xl": "とても大きい" } }, - "name": { - "label": "名称" - }, "isPublic": { "label": "公開", "description": "公開ボードは、アカウントがなくても誰でもアクセスできます。" @@ -4229,9 +5979,44 @@ "title": "レイアウト", "responsive": { "title": "レスポンシブなレイアウト", + "description": "各レイアウトは、独自のウィジェットの位置とサイズを保持します。Mobile と Base は常に利用可能で、任意の追加ブレークポイントにカスタムレイアウトを追加します。", "action": { "add": "レイアウトを追加する" } + }, + "role": { + "mobile": "モバイル", + "base": "Base", + "custom": "カスタム" + }, + "custom": { + "defaultName": "カスタムレイアウト" + }, + "mobile": { + "breakpointDescription": "モバイルは常に次のレイアウトブレークポイントまで0pxから使用されます。" + }, + "preview": { + "columns": "列数", + "empty": "このレイアウトは空です", + "dynamicSection": "動的セクション", + "editorWidthLabel": "{layoutName} · {width}px" + }, + "reset": { + "action": "基地からリセット", + "confirm": { + "title": "Reset {layoutName}?", + "message": "レイアウトに保存されているすべての位置とサイズをベースから生成された新しいレイアウトに置き換えます。元に戻すことはできません。" + } + }, + "edit": { + "action": "レイアウトを編集", + "saveAndEdit": "保存して編集", + "save": "レイアウトを保存", + "cancel": { + "action": "レイアウト編集をキャンセル", + "title": "レイアウト変更を破棄しますか?", + "message": "このレイアウトに保存していない変更は破棄されます。" + } } }, "background": { @@ -4268,10 +6053,7 @@ "rename": { "label": "ボード名を変更する", "description": "名前を変更すると、このボードへのリンクが壊れます。", - "button": "名前を変更する", - "modal": { - "title": "ボード名の変更" - } + "button": "名前を変更する" }, "visibility": { "label": "ボードの表示を変更する", @@ -4295,9 +6077,7 @@ } }, "delete": { - "label": "このボードを削除", "description": "ボードを削除すると、元に戻すことはできません。確認してください。", - "button": "このボードを削除する", "confirm": { "title": "ボードの削除", "description": "このボードを削除してもよろしいですか?これにより、ボードとそのコンテンツは完全に削除されます。" @@ -4342,28 +6122,41 @@ }, "layout": { "field": { - "name": { - "label": "名前" - }, "columnCount": { "label": "列の数" }, "breakpoint": { "label": "ブレークポイント", "description": "レイアウトは、次の大きなブレークポイントまで、このブレークポイントより大きいすべての画面で使用されます。" + }, + "gutters": { + "label": "固定サイドバー", + "description": "両側に最大3つのダッシュボード列を予約します。残りのキャンバスは自動的にリフローします。", + "left": { + "label": "Left sidebar", + "description": "ダッシュボードがスクロールしている間は、この領域を表示します。", + "thumbLabel": "Left sidebar width" + }, + "right": { + "label": "右サイドバー", + "description": "ダッシュボードがスクロールしている間は、この領域を表示します。", + "thumbLabel": "右サイドバーの幅" + }, + "width": { + "label": "列の幅" + }, + "preview": { + "label": "ダッシュボードレイアウトのプレビュー" + } } } }, "management": { "metaTitle": "管理", - "title": { - "morning": "おはようございます、 {username}", - "afternoon": "こんにちは、 {username}", - "evening": "こんばんは、 {username}" - }, "notFound": { "title": "見つかりません", - "text": "要求されたリソースが見つかりませんでした" + "text": "要求されたリソースが見つかりませんでした", + "backToHome": "管理ホームに戻る" }, "error": { "title": "", @@ -4372,19 +6165,10 @@ }, "navbar": { "items": { - "workshop": "Workshop", "home": "ホーム", - "boards": "ボード", - "apps": "アプリ", - "integrations": "連携機能", - "searchEngies": "検索エンジン", - "medias": "メディア", "users": { - "label": "ユーザー", "items": { - "manage": "管理", - "invites": "招待", - "groups": "グループ" + "manage": "管理" } }, "tools": { @@ -4392,10 +6176,7 @@ "items": { "docker": "Docker", "kubernetes": "Kubernetes", - "logs": "ログ", "api": "API", - "certificates": "証明書", - "tasks": "タスク", "backup": "" } }, @@ -4409,21 +6190,12 @@ "sourceCode": "ソースコード" } }, - "about": "このアプリについて" + "about": "このアプリについて", + "assistant": "アシスタント" } }, "page": { "home": { - "statistic": { - "board": "ボード", - "user": "ユーザー", - "invite": "招待", - "integration": "連携機能", - "app": "アプリ", - "group": "グループ", - "searchEngine": "検索エンジン", - "media": "メディア" - }, "statisticLabel": { "boards": "ボード", "resources": "リソース", @@ -4461,13 +6233,8 @@ "tooltip": "このボードは、あなたのモバイルボードとして表示されます" } }, - "duplicate": { - "label": "ボードを複製する" - }, "delete": { - "label": "永久削除", "confirm": { - "title": "ボードの削除", "description": "{name} ボードを削除してもよろしいですか?" } } @@ -4476,28 +6243,82 @@ "public": "このボードは公開中です", "private": "このボードは非公開です" }, - "noResults": { - "title": "" + "preview": { + "label": "{name}のレイアウトプレビュー ( {count} アイテム)", + "unknownCreator": "不明なクリエイター" }, - "modal": { - "createBoard": { - "field": { - "name": { - "label": "名称" - } - } - } + "noResults": { + "title": "", + "description": "アプリやウィジェットを一箇所に並べ替えるボードを作成します。" } }, "media": { "includeFromAllUsers": "すべてのユーザーのメディアを含める" }, "user": { - "back": "ユーザーへ戻る", "fieldsDisabledExternalProvider": "外部認証プロバイダーによって管理されているため、特定のフィールドは無効になります。", "setting": { "general": { "title": "一般", + "header": { + "title": "ヘッダースタジオ", + "badge": "個人用", + "description": "行内の任意の場所でコントロールをドラッグします。左、中央、右のいずれかでコントロールが移動します。", + "device": { + "desktop": "デスクトップ", + "mobile": "モバイル" + }, + "zones": { + "left": "左寄せ", + "center": "中央寄せ", + "right": "右寄せ" + }, + "action": { + "hide": "ヘッダーを隠す", + "show": "ヘッダーを表示", + "configure": "{item} を移動または設定", + "remove": "{item} を削除", + "dropIntoZone": "{zone} セクションに移動" + }, + "preview": { + "board": "{name} のダッシュボードプレビュー", + "empty": "ダッシュボードレイアウトが利用できません" + }, + "available": { + "title": "利用可能なコントロール", + "description": "コントロールを追加し、そのボタンを上の位置にドラッグします。", + "requiredAlways": "このコントロールは必須ですが、ヘッダーの任意の場所に移動できます。", + "allAdded": "すべての組み込み制御は、すでにヘッダーにあります。", + "add": "{item} を追加", + "boardShortcut": "ボードショートカット", + "chooseBoard": "ボードを選択" + }, + "configuration": { + "description": "このコントロールは、ライブヘッダーと同じサイズを維持します。", + "searchDisplay": { + "input": "検索バー", + "icon": "アイコンのみ" + }, + "logoDisplay": { + "logo": "ロゴのみ", + "logoAndText": "ロゴ + テキスト" + } + }, + "items": { + "logo": "ロゴ", + "search": "検索", + "home": "ホームボード", + "boardSwitcher": "ボード", + "assistant": "アシスタント", + "docker": "Docker", + "boardEdit": "ボードを編集", + "boardSettings": "ボードの設定", + "settings": "設定", + "themeToggle": "テーマの切り替え", + "user": "アカウント", + "boardUnavailable": "ボードが利用できません" + } + }, "item": { "language": "言語と地域", "board": { @@ -4531,14 +6352,10 @@ }, "security": { "title": "セキュリティ" - }, - "board": { - "title": "ボード" } }, "list": { - "metaTitle": "ユーザー管理", - "title": "ユーザー" + "metaTitle": "ユーザー管理" }, "edit": { "metaTitle": "ユーザー {username} を編集" @@ -4592,9 +6409,6 @@ } }, "field": { - "id": { - "label": "ID" - }, "creator": { "label": "作成者" }, @@ -4618,10 +6432,7 @@ }, "setting": { "title": "設定", - "alert": "グループ設定は、リスト内のグループの順序によって優先されます。上部の設定は、下部の設定を上書きします。", - "board": { - "title": "ボード" - } + "alert": "グループ設定は、リスト内のグループの順序によって優先されます。上部の設定は、下部の設定を上書きします。" }, "members": { "title": "メンバー", @@ -4629,10 +6440,7 @@ "notFound": "メンバーが見つかりません" }, "permissions": { - "title": "権限", - "form": { - "unsavedChanges": "保存していない変更があります!" - } + "title": "権限" } } }, @@ -4641,12 +6449,10 @@ "notification": { "success": { "message": "設定の保存が完了しました" - }, - "error": { - "message": "設定の保存に失敗しました" } }, "section": { + "analyticsDocumentation": "Homarrが収集する分析データを正確に見る", "analytics": { "title": "統計情報", "general": { @@ -4675,7 +6481,6 @@ } }, "board": { - "title": "ボード", "homeBoard": { "label": "グローバルホームボード", "mobileLabel": "グローバルモバイルボード", @@ -4694,7 +6499,6 @@ } }, "user": { - "title": "ユーザー", "enableGravatar": { "label": "Gravatar を有効化", "description": "カスタムアバターが設定されておらず、メールが設定されている場合は、Libavatar/Gravatarからユーザーのアバターにフォールバックします" @@ -4710,12 +6514,86 @@ "appearance": { "title": "外観", "defaultColorScheme": { - "label": "既定の配色設定", + "label": "既定の配色設定" + } + }, + "branding": { + "title": "インスタンスのブランド", + "groups": { + "identity": "Identity", + "appearance": "外観", + "customCss": "Custom CSS", + "authentication": "認証" + }, + "identity": { + "description": "アプリのロゴは、アプリ内で使用される大きなマーク、サインインページで使用されるマーク、インストールされているアプリで使用されます。 ブラウザのアイコン(favicon)は、タブやブックマークに使用される小さな四角形で、空白の場合はアプリケーションのロゴに戻ります。" + }, + "appName": { + "label": "アプリケーション名" + }, + "greeting": { + "label": "カスタムグリーティングの設定" + }, + "logo": { + "label": "アプリのロゴ", + "placeholder": "/logo/logo.png" + }, + "favicon": { + "label": "ブラウザアイコン (favicon)", + "placeholder": "アプリのロゴを使用" + }, + "primaryColor": { + "label": "原色" + }, + "secondaryColor": { + "label": "セカンダリアクセントformat@@0" + }, + "lockPrimaryColor": { + "label": "すべてのボードにこの色を表示する", + "description": "基板の色がアプリケーションアクセントの置き換えを防ぎます。" + }, + "signInBackground": { + "label": "認証の背景", + "placeholder": "https://example.com/background.jpg" + }, + "signInOverlay": { + "label": "背景をオーバーレイする" + }, + "defaultRadius": { + "label": "角のスタイル", "options": { - "auto": "", - "light": "ライト", - "dark": "ダーク" + "xs": "タイトな", + "sm": "Subtle", + "md": "バランス", + "lg": "四捨五入済み", + "xl": "ソフト" } + }, + "customCss": { + "label": "グローバルカスタム CSS", + "description": "すべてのページに適用されます。ボードのカスタムCSSはそれを上書きできます。" + }, + "authVisibility": { + "description": "すべての認証ページに表示される内容を選択します。", + "appName": "アプリケーション名", + "logo": "アプリのロゴ", + "greeting": "あいさつ中" + }, + "summary": { + "title": "現在のブランド", + "cornerStyle": "角のスタイル", + "palette": "Palette", + "backgroundConfigured": "カスタム背景・ {overlay}%オーバーレイ表示", + "backgroundDefault": "既定の背景", + "greetingConfigured": "カスタムグリーティングの設定", + "greetingDefault": "既定の挨拶:", + "boardColorLocked": "盤の色がロックされています", + "boardColorFlexible": "ボードの色を許可する", + "appName": "ジョブ名", + "logo": "ロゴ", + "greeting": "あいさつ中", + "on": "オン", + "off": "オフ" } }, "culture": { @@ -4723,12 +6601,177 @@ "defaultLocale": { "label": "デフォルトの言語" } + }, + "assistant": { + "loading": "アシスタント設定を読み込み中", + "title": "アシスタント", + "description": "インスタンス全体のアシスタントの OpenAI 互換のモデル エンドポイントを接続します。", + "security": { + "description": "API キーと追加のヘッダー値は、Homarr データベースで暗号化されます。これらはブラウザには返されません。 モデル要求は、Homarrサーバから直接、設定されたエンドポイントに送信されます。" + }, + "overview": { + "connectionReady": "接続準備完了", + "unsavedChanges": "変動が保存されていません", + "setupRequired": "セットアップが必要", + "disabled": "無効", + "noModel": "モデルが選択されていません" + }, + "connection": { + "endpointTitle": "プロバイダーとエンドポイント", + "description": "OpenAIチャットコンプリーション APIを実装するサービスをプリセットまたは接続します。", + "save": "プロバイダの接続を保存" + }, + "credentials": { + "title": "資格情報", + "description": "このエンドポイントが必要とするシークレットを追加します。保存された値は暗号化されたままであり、読み返すことはできません。", + "required": "キーが必要です", + "optional": "キーは省略可能です", + "workshop": "ユーザ毎のGitHubサインイン" + }, + "provider": { + "title": "プロバイダー", + "groups": { + "free": "Homarrで無料", + "hosted": "ホストされたプロバイダー", + "local": "ローカルプロバイダー", + "custom": "カスタム" + }, + "options": { + "homarr": { + "description": "限られた数のアシスタントの使用は、Homarrチームによって支払われる毎日無料です。 コミュニティワークショップでサインインして手当を使用してください。" + }, + "openrouter": { + "description": "ツール対応の大型モデルカタログを備えたホスト型モデルルーティング。" + }, + "openai": { + "description": "OpenAI チャットの完了 公式APIエンドポイントを通じて。" + }, + "anthropic": { + "description": "AnthropicのOpenAI SDK互換エンドポイントをご覧ください。" + }, + "google-gemini": { + "description": "ジェミニはGoogleのOpenAI対応APIエンドポイントを介して。" + }, + "xai": { + "description": "xAIのOpenAI対応APIを介してGrokモデル。" + }, + "groq": { + "description": "GroqのOpenAI互換APIを通じた高速ホスト推論。" + }, + "mistral": { + "description": "公式APIを介してミストラルモデル。" + }, + "deepseek": { + "description": "DeepSeek モデルは OpenAI 互換の API を使用しています。" + }, + "together": { + "description": "共にオープンモデルをホストすることで、共にオープンAIと互換性のあるAPIを実現しました。" + }, + "ollama": { + "description": "OpenAI対応のAPIを使用するローカルまたはネットワークOllamaサーバー。" + }, + "lm-studio": { + "description": "OpenAI対応を有効にしたLMスタジオローカルサーバー。" + }, + "llama-cpp": { + "description": "ローカルまたはネットワーク llama.cpp サーバーは、OpenAI 互換の API を使用しています。" + }, + "custom": { + "label": "カスタムエンドポイント", + "description": "OpenAI Chat Completionsと互換性のあるその他のエンドポイント。" + } + }, + "homarrAuth": { + "title": "無料デイリーアシスタントの使用が含まれています", + "description": "APIキーは必要ありません。Homarrチームは毎日限られた数のアシスタントをカバーしています。 コミュニティワークショップでサインインして、小遣いを別々にしてください。" + } + }, + "baseUrl": { + "title": "API ベース URL", + "description": "APIプレフィックス(通常 /v1)を含めます。コンテナでは、localhostはHomarrコンテナを参照します。" + }, + "apiKey": { + "title": "API キー", + "required": "このプロバイダが必要です。値は暗号化され、書き込みのみです。", + "optional": "ローカルエンドポイントに対して任意です。サービスにベアラー認証が必要ない場合は空白のままにしてください。", + "placeholder": "API キーを入力", + "savedTitle": "暗号化された API キーが保存されました", + "savedDescription": "Homarrはこのキーを使用できますが、値を表示または回復することはできません。", + "remove": "保存された API キーを削除", + "removeFlow": { + "title": "保存した API キーを削除しますか?", + "description": "このプロバイダはAPIキーを必要とします。削除すると、別のキーが保存されるまでモデルの検出やアシスタント応答を停止することができます。", + "optionalDescription": "この鍵が削除されると、エンドポイントはベアラー認証の受信を停止します。認証されていないリクエストを受け付けるか、別の保存されたヘッダーを使用することを確認します。", + "cancel": "保存されたキーを保持", + "confirm": "API キーを削除" + } + }, + "headers": { + "title": "追加のリクエストヘッダー", + "description": "オプションの認証またはルーティングヘッダー。ヘッダーの値は暗号化され、書き込みのみです。", + "add": "ヘッダーを追加", + "name": "ヘッダー名", + "value": "ヘッダーの値", + "valuePlaceholder": "シークレットまたはルーティング値", + "remove": "ヘッダーを削除", + "configured": "追加の暗号化されたヘッダが設定されています。ヘッダを追加すると、保存されたセット全体が置き換えられます。", + "empty": "このプロバイダには追加のヘッダーは保存されていません。", + "savedBadge": "ヘッダーを保存しました", + "pendingRemoval": "保留中の削除", + "clear": "保存時にストアドヘッダーを削除", + "keep": "保存されているヘッダーを保持" + }, + "model": { + "title": "モデル", + "description": "検出されたモデルを選択するか、エンドポイントモデル ID を入力します。", + "placeholder": "モデル ID", + "refresh": "モデルを更新", + "chooseModel": "新しい会話に使用するモデルを選択します。", + "discoveryPath": "モデルの検出パス", + "discoveryPathDescription": "APIベースURLに追加されました。空白の場合は検出を無効にし、手動モデル ID を使用します。", + "manual": "モデル ID を手動で入力するか、モデルを検出するために接続を保存します。", + "manualFallback": "ディスカバリーは利用できません。モデルIDを手動で入力することができます。", + "saveConnectionFirst": "モデルを選択する前にプロバイダ接続を保存します。", + "discovering": "このプロバイダーで利用可能なモデルを更新中…", + "discovered": "{count, plural, one {#モデルを発見しました。ツールのサポートは選択したエンドポイントとモデルに依存します。} other {#モデルを発見しました。ツールのサポートは選択したエンドポイントとモデルに依存します。}}", + "discoveryFailed": "モデルの検出が完了しませんでした", + "context": "{count} コンテキスト ウィンドウ", + "toolsConfirmed": "宣伝されたツール", + "toolsUnknown": "ツールのサポートを確認" + }, + "serverTools": { + "title": "サーバーツール", + "webSearch": { + "label": "ウェブ検索", + "description": "リクエストに現在の情報が必要な場合、OpenRouter経由でライブWebを検索できるようにします。検索の使用法はOpenRouterによって別々に請求されます。", + "proxyDescription": "OpenRouterのWeb検索サーバーツールをこのエンドポイントに送信します。 カスタムエンドポイントがHomarrルータプロキシなどのOpenRouterサーバツールフォーマットを転送する場合にのみこれを有効にします。", + "limit": "モデルでは、リクエストごとに3件、1件につき5件の検索結果が出ます。" + } + }, + "enabled": { + "label": "アシスタントを有効にする", + "description": "サインイン済みのすべてのユーザーにアシスタントを表示します。既存のHomarr権限はすべての内部ツールコールに適用されます。" + }, + "save": "アシスタントを保存", + "notification": { + "connectionSaved": { + "title": "プロバイダーの接続が保存されました", + "message": "エンドポイントと暗号化された資格情報は、モデル選択の準備ができています。", + "credentialsCleared": "エンドポイントが変更されたため、以前の資格情報がクリアされました。必要に応じて新しい宛先の資格情報を追加してください。" + }, + "saved": { + "title": "アシスタント設定を保存しました", + "message": "新しいモデルと可用性の設定がアクティブです。" + }, + "error": { + "title": "アシスタント設定を保存できませんでした" + } + } } } }, "tool": { "tasks": { - "title": "タスク", "status": { "idle": "アイドル", "running": "実行中", @@ -4746,6 +6789,11 @@ "label": "Pings" } }, + "action": { + "run": "{name} を今すぐ実行", + "enable": "{name} を有効にする", + "disable": "{name} を無効にする" + }, "interval": { "seconds": "{interval, plural, =1 {秒} other {# 秒}}周期", "minutes": "{interval, plural, =1 {分} other {# 分}}周期", @@ -4761,13 +6809,7 @@ } } }, - "settings": { - "title": "{jobName} の タスク設定" - }, "field": { - "name": { - "label": "名称" - }, "interval": { "label": "スケジュール間隔" }, @@ -4781,11 +6823,6 @@ "table": { "search": "{count} のタスクを検索..." }, - "action": { - "refresh": { - "label": "更新" - } - }, "refresh": { "success": { "message": "タスクは正常に更新されました" @@ -4819,7 +6856,6 @@ } }, "api": { - "title": "API", "modal": { "createApiToken": { "title": "APIトークンが作成されました", @@ -4845,7 +6881,6 @@ }, "table": { "header": { - "id": "ID", "createdBy": "作成者", "actions": "アクション" } @@ -4901,43 +6936,12 @@ "availableTools": { "title": "", "description": "", - "columnType": "", - "columnName": "", - "columnDescription": "" - }, - "troubleshooting": { - "title": "", - "missingHeader": { - "title": "", - "description": "" - }, - "invalidFormat": { - "title": "", - "description": "" - }, - "invalidKey": { - "title": "", - "description": "" - }, - "connectionRefused": { - "title": "", - "description": "" - }, - "toolsNotAppearing": { - "title": "", - "description": "" + "filteredDescription": "拡張されたカテゴリ間の{count} マッチングツール。", + "search": "検索ツール", + "noResults": { + "title": "この検索に一致するツールはありません。", + "description": "MCP ツールが \"{search}\" と一致しません。名前空間、ツール名、または説明を試してください。" } - }, - "copy": "", - "oneClick": { - "title": "", - "subtitle": "", - "vsCode": "", - "cursor": "", - "copyUrl": "", - "copied": "", - "copyHint": "", - "manualConfig": "" } } } @@ -4954,79 +6958,35 @@ "title": "", "warningTitle": "", "warningBody": "", - "typePrompt": "", - "submit": "", - "cancel": "" + "submit": "" } }, "import": { "title": "", - "description": "", - "warning": "", - "dropzone": { - "title": "", - "description": "" - }, - "changeFile": "", - "button": "", - "success": { - "title": "", - "message": "" - }, - "error": "" - }, - "preview": { - "title": "", - "exported": "", - "loading": "", - "errorTitle": "", - "entity": "", - "count": "", - "boards": "", - "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" - }, - "analyzeError": "", - "invalidMissingMetadata": "", - "invalidMissingDb": "" + "description": "" }, "restore": { "dropzone": { "title": "", - "description": "" + "description": "Homarr SQLite バックアップから .zip ファイルを受け入れます (最大 {maxSize})" }, "analyzing": "", "changeFile": "", "continueToRestore": "", - "tryAgain": "", "analysisError": "", "preview": { "title": "", "exported": "", "entity": "", "count": "", - "boards": "", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "item": "" }, "migrationsApplied": "", "migrationsAppliedPlural": "", "migrationsOlderVersion": "", "migrationsOlderVersionPlural": "", "migrationsUpToDate": "", - "upToDate": "", "migrationsPending": "" }, "migration": { @@ -5037,21 +6997,21 @@ "title": "", "warningTitle": "", "warningBody": "", - "typePrompt": "", - "cancel": "", "submit": "" }, "progress": { "title": "", - "extracting": "", - "migrating": "", - "encrypting": "", - "swapping": "", - "restarting": "" + "restarting": "", + "relogin": "データベースを復元すると、現在のセッションが無効になりました。サーバーの準備ができたら、Homarrからサインインするように送信されます。" }, "complete": { - "title": "", - "message": "" + "title": "Restore complete", + "message": "データベースが復元されました。以前のセッションが無効になったため、もう一度サインインして復元されたボードを表示してください。", + "button": "今すぐサインイン" + }, + "timeout": { + "title": "サーバーがオンラインに戻ってきませんでした", + "message": "データベースの復元は完了しましたが、Homarrは再び準備ができませんでした。接続を確認するか、手動でこのページを更新してください。" }, "failed": { "title": "" @@ -5059,6 +7019,9 @@ "invalidMissingMetadata": "", "invalidMissingDb": "", "analyzeError": "" + }, + "confirm": { + "typePrompt": "続行するには \"{phrase}\" と入力してください" } } }, @@ -5093,7 +7056,11 @@ "toggleBoardEdit": "ボード編集モードの切り替え", "toggleColorScheme": "ライト/ダークモードの切り替え", "saveNotebook": "ノートブックを保存 (ノートブックウィジェット内のみ)", - "openSpotlight": "検索を開く" + "openSpotlight": "検索を開く", + "openSpotlightApps": "アプリ検索を開く", + "openSpotlightAssistant": "アシスタントモードを開く", + "openSpotlightPreferences": "設定モードを開く", + "openAssistant": "オープンアシスタント" }, "note": "ヒント:CtrlキーとMacOSの⌘キーの両方を参照します" } @@ -5103,6 +7070,63 @@ }, "docker": { "title": "コンテナ", + "reconciliation": { + "title": "Assisted Docker セットアップ", + "suggestions": "{count, plural, =0 {候補はありません} one {# 候補はありません} other {# 候補は}}", + "attention": "{count} は注意が必要です", + "endpointUnavailable": "これらのエンドポイントが利用できないため、一部のサービスをチェックできませんでした: {names}", + "empty": "表示 Docker サービスが見つかりませんでした。", + "emptyFilter": "このビューに一致するサービスはありません。", + "ambiguous": "複数の既存のアイテムがこのサービスに一致する可能性があります。Homarrは自動的に一つを選択しません。", + "filter": { + "attention": "注意が必要です", + "represented": "既に設定されています", + "all": "すべて" + }, + "state": { + "newRecognized": "接続の準備ができました", + "newApp": "新しいサービス", + "represented": "既に表現されています", + "linked": "リンク", + "moved": "住所が変更されました" + }, + "url": { + "manual": "住所を手動で入力してください" + }, + "health": { + "layer": { + "docker": "Docker", + "integrationConfiguration": "連携機能", + "authentication": "認証", + "apiRequest": "API", + "appRepresentation": "アプリ", + "widgetConfiguration": "ウィジェット", + "widgetQuery": "ウィジェットのクエリ" + }, + "status": { + "available": "利用可能", + "configured": "設定済み", + "linked": "リンク", + "missing": "見つかりません", + "changed": "変更済み", + "unused": "未使用", + "notApplicable": "該当なし", + "notObserved": "観察されていません" + } + }, + "action": { + "review": "レビュー", + "dismiss": "却下する", + "restoreDismissed": "却下された復元({count})", + "setupIntegration": "連携のセットアップ", + "reviewIntegration": "統合を確認", + "viewRepresentation": "セットアップを表示" + }, + "loadError": { + "title": "Dockerセットアップアシスタントをロードできませんでした", + "message": "Docker サービス情報は利用できません。このページを離れないでもう一度お試しください。" + } + }, "table": { "updated": "{when} に更新しました", "refresh": { @@ -5115,9 +7139,6 @@ "totalMemory": "" }, "field": { - "name": { - "label": "名称" - }, "state": { "label": "状態", "option": { @@ -5131,9 +7152,6 @@ } }, "stats": { - "cpu": { - "label": "CPU" - }, "memory": { "label": "メモリ" } @@ -5196,8 +7214,11 @@ } }, "remove": { - "label": "削除", "confirm": "", + "confirmation": { + "title": "{count, plural, one {#コンテナを削除しますか?} other {コンテナを削除しますか?}}", + "message": "{count, plural, one {#個のコンテナを完全に削除します: {names}} other {これにより#個のコンテナが永久に削除されます: {names}}}" + }, "notification": { "success": { "title": "コンテナー削除", @@ -5209,8 +7230,13 @@ } } }, + "result": { + "failure": { + "title": "いくつかのコンテナアクションが失敗しました", + "message": "{total, plural, one {{failed} の # アクション: {names}} other {{failed} アクションの {names}}}" + } + }, "refresh": { - "label": "更新する", "notification": { "success": { "title": "コンテナを更新しました", @@ -5241,18 +7267,33 @@ }, "error": { "internalServerError": "Docker コンテナの取得に失敗しました", + "endpointUnavailable": "{count, plural, one {# Dockerエンドポイントは利用できません: {names}} other {# Docker エンドポイントは利用できません: {names}}}", "noColumns": "" } }, "kubernetes": { + "context": { + "label": "Kubernetes のコンテキスト", + "loadError": { + "title": "Kubernetes コンテキストを読み込めませんでした", + "message": "コンテキスト情報は利用できません。このページに移動せずにもう一度お試しください。" + }, + "status": { + "available": "利用可能", + "degraded": "Metrics unavailable", + "unavailable": "Unavailable" + }, + "unavailable": "この Kubernetes コンテキストに到達できません。別のコンテキストを選択するか、認証情報とエンドポイントを確認してください。", + "metricsUnavailable": "このコンテキストに到達することはできますが、メトリックサーバーは利用できません。インベントリはCPUとメモリを使用せずに使用できます。" + }, "cluster": { "title": "クラスターダッシュボード", "label": "クラスター", "providers": "プロバイダー", "version": "バージョン", - "architecture": "アーキテクチャ", "capacity": { "title": "容量", + "metricsUnavailable": "メトリクスサーバーは利用できません。在庫と予約容量は表示されたままですが、ライブCPUとメモリ使用量は表示できません。", "resource": { "reserved": "予約済", "used": "使用中" @@ -5271,38 +7312,10 @@ } }, "nodes": { - "label": "ノード", "field": { - "name": { - "label": "名前" - }, - "state": { - "label": "状態", - "option": { - "ready": "準備完了", - "NotReady": "準備未完了" - } - }, - "cpu": { - "label": "CPU" - }, - "memory": { - "label": "RAM" - }, - "pods": { - "label": "Pods" - }, - "operatingSystem": { - "label": "OS" - }, - "architecture": { - "label": "アーキテクチャ" - }, + "metricsUnavailable": "Unavailable", "kubernetesVersion": { "label": "Kubernetes バージョン" - }, - "creationTimestamp": { - "label": "作成日" } }, "table": { @@ -5310,43 +7323,17 @@ } }, "namespaces": { - "label": "ネームスペース", - "field": { - "name": { - "label": "名前" - }, - "state": { - "label": "状態", - "option": { - "active": "活動中", - "terminating": "終了中" - } - }, - "creationTimestamp": { - "label": "作成日" - } - }, "table": { "search": "{count} 個のネームスペースを検索" } }, "ingresses": { - "label": "Ingress", "field": { - "name": { - "label": "名前" - }, - "namespace": { - "label": "ネームスペース" - }, "className": { "label": "クラス名" }, "rulesAndPaths": { "label": "ルールとパス" - }, - "creationTimestamp": { - "label": "作成日" } }, "table": { @@ -5354,17 +7341,7 @@ } }, "services": { - "label": "サービス", "field": { - "name": { - "label": "名前" - }, - "namespace": { - "label": "ネームスペース" - }, - "type": { - "label": "種類" - }, "ports": { "label": "ポート" }, @@ -5373,9 +7350,6 @@ }, "clusterIP": { "label": "クラスター IP" - }, - "creationTimestamp": { - "label": "作成日" } }, "table": { @@ -5383,25 +7357,12 @@ } }, "pods": { - "label": "Pods", "field": { - "name": { - "label": "名前" - }, - "namespace": { - "label": "ネームスペース" - }, "image": { "label": "イメージ" }, "applicationType": { "label": "アプリケーションタイプ" - }, - "status": { - "label": "状態" - }, - "creationTimestamp": { - "label": "作成日" } }, "table": { @@ -5409,51 +7370,17 @@ } }, "secrets": { - "label": "シークレット", - "field": { - "name": { - "label": "名前" - }, - "namespace": { - "label": "ネームスペース" - }, - "type": { - "label": "種類" - }, - "creationTimestamp": { - "label": "作成日" - } - }, "table": { "search": "{count} 個のシークレットを検索" } }, "configmaps": { - "label": "ConfigMaps", - "field": { - "name": { - "label": "名前" - }, - "namespace": { - "label": "ネームスペース" - }, - "creationTimestamp": { - "label": "作成日" - } - }, "table": { "search": "{count} 個の ConfigMap から検索" } }, "volumes": { - "label": "ボリューム", "field": { - "name": { - "label": "名前" - }, - "namespace": { - "label": "ネームスペース" - }, "accessModes": { "label": "アクセスモード" }, @@ -5468,12 +7395,6 @@ }, "volumeName": { "label": "ボリューム名" - }, - "status": { - "label": "状態" - }, - "creationTimestamp": { - "label": "作成日" } }, "table": { @@ -5482,6 +7403,29 @@ }, "error": { "internalServerError": "Kubernetes データの取得に失敗しました" + }, + "field": { + "name": { + "label": "ジョブ名" + }, + "namespace": { + "label": "ネームスペース" + }, + "creationTimestamp": { + "label": "作成日" + }, + "state": { + "label": "作業状態" + }, + "status": { + "label": "ステータス" + }, + "type": { + "label": "ダウンロードクライアントの種類" + }, + "architecture": { + "label": "アーキテクチャ" + } } }, "permission": { @@ -5515,71 +7459,27 @@ }, "navigationStructure": { "manage": { - "workshop": { - "label": "Workshop" - }, "label": "管理", - "boards": { - "label": "ボード" - }, - "integrations": { - "label": "連携機能", + "custom-widgets": { "edit": { - "label": "編集" - }, - "new": { - "label": "New" - } - }, - "search-engines": { - "label": "検索エンジン", - "new": { - "label": "New" - }, - "edit": { - "label": "編集" - } - }, - "medias": { - "label": "メディア" - }, - "apps": { - "label": "アプリ", - "new": { - "label": "New" - }, - "edit": { - "label": "編集" - } - }, - "users": { - "label": "ユーザー", - "create": { - "label": "作成" - }, - "general": "一般", - "security": "セキュリティ", - "board": "ボード", - "groups": { - "label": "グループ" - }, - "invites": { - "label": "招待" - } - }, - "tools": { - "label": "ツール", - "tasks": { - "label": "タスク" - }, - "docker": { - "label": "Docker", - "logs": { + "flow": { "label": "" } }, + "workshop": { + "label": "ワークショップ" + }, + "publish": { + "label": "ワークショップに公開" + } + }, + "users": { + "general": "一般", + "security": "セキュリティ" + }, + "tools": { + "label": "ツール", "kubernetes": { - "label": "Kubernetes", "nodes": { "label": "ノード" }, @@ -5605,11 +7505,7 @@ "label": "ボリューム" } }, - "logs": { - "label": "ログ" - }, "certificates": { - "label": "証明書", "hostnames": { "label": "ホスト名" } @@ -5620,12 +7516,60 @@ }, "about": { "label": "このアプリについて" + }, + "assistant": { + "label": "アシスタント" } } }, "search": { "placeholder": "何でも検索", "nothingFound": "何も見つかりませんでした", + "modePicker": { + "search": { + "label": "検索", + "placeholder": "アプリ、ボード、ページ、コマンド、設定を検索" + }, + "apps": { + "label": "アプリケーション", + "placeholder": "アプリ、ボード、統合を検索" + }, + "command": { + "label": "マーク", + "placeholder": "アクションとコマンドを検索" + }, + "preferences": { + "label": "設定", + "placeholder": "設定の検索と変更" + }, + "assistant": { + "label": "アシスタント", + "placeholder": "アシスタントに聞く" + }, + "external": { + "label": "ウェブ", + "placeholder": "外部検索エンジンで検索" + }, + "media": { + "label": "メディア", + "placeholder": "ムービーまたはショーを検索", + "fallback": "\"{query}\" のメディアを検索" + }, + "userGroup": { + "label": "人", + "placeholder": "ユーザーとグループを検索" + }, + "continueWith": "次で続ける", + "dialogAriaLabel": "{mode} コマンドメニュー", + "navigationLabel": "検索モード", + "modeAriaLabel": "{mode} モード", + "resultsAriaLabel": "{mode} 結果", + "footer": { + "navigate": "Navigate", + "open": "開く", + "close": "閉じる" + } + }, "error": { "fetch": "データの取得中にエラーが発生しました" }, @@ -5634,7 +7578,6 @@ "help": "アプリ、連携機能、またはボードを検索", "group": { "app": { - "title": "アプリ", "children": { "action": { "open": { @@ -5650,7 +7593,6 @@ } }, "board": { - "title": "ボード", "children": { "action": { "open": { @@ -5670,9 +7612,6 @@ "title": "ボードのアクションを選択" } } - }, - "integration": { - "title": "連携" } } }, @@ -5701,9 +7640,6 @@ "newBoard": { "label": "新しいボードを作成する" }, - "importBoard": { - "label": "ボードをインポート" - }, "newApp": { "label": "新しいアプリを作成する" }, @@ -5773,7 +7709,6 @@ } }, "defaultSearchEngineId": { - "label": "", "children": { "detail": { "title": "" @@ -5781,7 +7716,6 @@ } }, "openSearchInNewTab": { - "label": "", "children": { "detail": { "title": "" @@ -5789,7 +7723,6 @@ } }, "ddgBangs": { - "label": "", "children": { "detail": { "title": "" @@ -5804,6 +7737,13 @@ } } }, + "byteUnitSystem": { + "children": { + "detail": { + "title": "データサイズの単位を選択" + } + } + }, "homeBoardId": { "label": "", "children": { @@ -5821,7 +7761,6 @@ } }, "pingIconsEnabled": { - "label": "", "children": { "detail": { "title": "" @@ -5829,7 +7768,6 @@ } }, "enableRightClickOnWidgets": { - "label": "", "children": { "detail": { "title": "" @@ -5857,6 +7795,7 @@ "description": "", "disabled": { "noIntegration": "", + "signInRequired": "メディアリクエストの統合を検索するにはサインインしてください。", "scoped": "" } } @@ -5873,7 +7812,6 @@ "help": "外部検索エンジンを使用", "group": { "searchEngine": { - "title": "検索エンジン", "tipDdgBangs": "", "bang": { "searchWithQuery": "", @@ -5924,20 +7862,6 @@ "group": { "mode": { "title": "モード" - }, - "help": { - "title": "ヘルプ", - "option": { - "documentation": { - "label": "ドキュメンテーション" - }, - "submitIssue": { - "label": "問題を送信する" - }, - "discord": { - "label": "コミュニティ・ディスコード" - } - } } } }, @@ -5949,9 +7873,10 @@ "other": { "label": "他の検索エンジンで検索する" }, - "no-default": { - "label": "デフォルトの検索エンジンはありません", - "description": "設定でデフォルトの検索エンジンを設定" + "no-engines": { + "label": "検索エンジンが設定されていません", + "descriptionCreate": "コマンドメニューから検索する検索エンジンを追加", + "descriptionUnavailable": "管理者に検索エンジンの設定を依頼する" }, "search": { "label": "\"{query}\" を {name} で検索" @@ -6031,7 +7956,6 @@ "help": "ユーザーまたはグループの検索", "group": { "user": { - "title": "ユーザー", "children": { "action": { "detail": { @@ -6044,7 +7968,6 @@ } }, "group": { - "title": "グループ", "children": { "action": { "detail": { @@ -6068,9 +7991,6 @@ "engine": { "search": "検索エンジンを探す", "field": { - "name": { - "label": "名称" - }, "short": { "label": "略称" }, @@ -6083,12 +8003,19 @@ }, "page": { "list": { - "title": "検索エンジン", + "ariaLabel": "設定された検索エンジン", "noResults": { "title": "まだ検索エンジンはありません", - "action": "最初の検索エンジンを作成する" + "description": "検索エンジンでは、Spotlightはサイトまたは接続されたサービスにクエリを送信できます。", + "action": "最初の検索エンジンを作成する", + "filteredTitle": "検索エンジンが一致しません", + "filteredDescription": "検索エンジンが一致しません \"{search}\". 別の名前またはURLをお試しください。" }, - "interactive": "インタラクティブ、連携機能を使用" + "interactive": "インタラクティブ、連携機能を使用", + "type": { + "generic": "URL テンプレート", + "fromIntegration": "連携機能" + } }, "create": { "title": "新しい検索エンジン", @@ -6107,11 +8034,9 @@ "title": "検索エンジンの編集", "notification": { "success": { - "title": "変更は正常に適用されました", "message": "検索エンジンは正常に保存されました" }, "error": { - "title": "変更の適用失敗", "message": "検索エンジンを保存できませんでした" } }, @@ -6250,6 +8175,10 @@ } }, "log": { + "context": { + "widgetError": "ウィジェットがこの時間帯にエラーを報告しました", + "expiredWidgetError": "このウィジェットのエラーの周りのログは保持されなくなりました" + }, "level": { "option": { "debug": "デバッグ", @@ -6261,7 +8190,6 @@ }, "onboardingTour": { "learnMore": "", - "next": "", "prev": "", "done": "", "skip": "", @@ -6288,7 +8216,7 @@ }, "integrationsList": { "title": "", - "description": "" + "description": "これらは、Homarrに接続されたサービスです。すべての資格情報は、残りの時に暗号化されます。" }, "integrationsCreate": { "title": "", @@ -6325,5 +8253,359 @@ "description": "" } } + }, + "metadata": { + "description": "*arrスタックとホームラブ全体のセルフホスト型ダッシュボード。50以上のサービス、リアルタイムウィジェット、設定ファイルなしと統合できます。", + "dashboardTitle": "{appName} ダッシュボード" + }, + "assistant": { + "title": "アシスタント", + "open": "オープンアシスタント", + "close": "アシスタントを閉じる", + "minimize": "アシスタントを最小化する", + "spotlight": "アシスタントに聞く", + "spotlightDescription": "コマンドメニューを離れずにプロンプトを入力して送信します。", + "spotlightPrompt": { + "title": "アシスタントに聞く", + "description": "上にプロンプトを入力します。入力してバックグラウンドで送信します。", + "send": "プロンプトの送信", + "empty": "上にプロンプトを入力してください" + }, + "unavailable": { + "checking": "アシスタントが利用可能か確認中…", + "error": "アシスタントの空き状況を確認できませんでした。もう一度お試しください。", + "notConfigured": "管理者は最初にアシスタントを設定して有効にする必要があります。", + "signIn": "アシスタントを使用するにはサインインしてください。" + }, + "newConversation": "新しい会話", + "conversations": "会話", + "conversationActions": "会話アクション", + "searchConversations": "会話を検索", + "noMatchingConversations": "一致する会話がありません", + "moreActions": "より多くのレスポンスアクション", + "renameConversation": { + "action": "名前の変更", + "label": "会話名", + "save": "名前を保存", + "failedTitle": "会話の名前を変更できませんでした", + "failedDescription": "Homarrはこの会話の名前を変更できませんでした。もう一度やり直してください。" + }, + "deleteConversation": { + "title": "会話を削除しますか?", + "description": "“{title}” とそのメッセージは完全に削除されます。", + "failedTitle": "会話を削除できませんでした", + "failedDescription": "Homarrはこの会話を削除できませんでした。もう一度やり直してください。" + }, + "closeHistory": "会話履歴を閉じる", + "openHistory": "会話履歴を開く", + "emptyTitle": "何をお手伝いできますか?", + "emptyDescription": "Homarrのセットアップについて質問したり、ライブインスタンスのデータを調べたり、変更を行いたいときにアクションを承認したりします。", + "suggestions": { + "health": { + "label": "サービスの健康状態を確認", + "prompt": "私の統合を確認し、注意が必要なものをまとめてください。" + }, + "explore": { + "label": "私のHomarrを探索", + "prompt": "このHomarrインスタンスで何を表示し、管理できるかを表示します。" + }, + "media": { + "label": "リクエストするメディアを検索", + "prompt": "リクエストする映画やシリーズを見つけるのを手伝ってください。" + }, + "style": { + "label": "ダッシュボードを改善", + "prompt": "ボードの外観またはカスタムCSSを改善するのに役立ちます。最初にボードを表示してから、変更を行っている間、現在の設定を保存してください。" + }, + "designWidget": { + "label": "ウィジェットをデザイン", + "prompt": "カスタムウィジェットの作成とインストール " + } + }, + "composerPlaceholder": "アシスタントに質問…", + "runtime": { + "model": "モデル", + "searchModels": "モデルを検索", + "noModels": "利用可能なモデルがありません", + "otherModels": "その他のモデル", + "imageInput": "画像の入力を受け入れます", + "thinking": "思考モード", + "reasoning": { + "auto": "自動", + "none": "オフ", + "minimal": "最小", + "low": "低い", + "medium": "中間", + "high": "高い" + } + }, + "providerQuota": { + "title": "Homarr プロバイダー", + "communityWorkshop": "コミュニティワークショップ", + "dailyAllowance": "デイリーリクエスト手当日", + "remainingLabel": "{remaining} / {limit} Homarr プロバイダーのリクエストが残っています", + "loading": "Homarrプロバイダの手当を読み込み中", + "signInRequired": "Homarrプロバイダにはワークショップのサインインが必要です", + "signInDescription": "コミュニティワークショップを通じてGitHubにサインインして、別々の毎日の手当を受け取りましょう。", + "exhaustedDescription": "あなたのHomarrプロバイダの手当は、今日のために使用されます。それは深夜UTCにリセットされます。", + "unavailableDescription": "ワークショップにサインインするか、Homarrプロバイダーの許可がリセットされるのを待ちます。", + "signIn": "GitHub でサインイン", + "signInError": "GitHub のサインインに失敗しました。しばらくしてからもう一度お試しください。", + "loadError": "Homarrプロバイダの手当を読み込めませんでした。", + "reset": "{relative} を にリセット", + "toolCalls": "各モデル要求と完了したツールコールは、1つのリクエストを使用します。", + "retry": "再読み込み手当額", + "level": { + "ok": "成功", + "warning": "警告", + "bad": "低い", + "dead": "使用中" + } + }, + "stop": "応答を停止する", + "send": "メッセージを送信", + "copy": "応答をコピー", + "copyMessage": "メッセージをコピー", + "editMessage": "メッセージの編集", + "updateMessage": "メッセージの更新", + "regenerate": "レスポンスを再生成", + "helpful": "役に立つもの", + "notHelpful": "役に立たない", + "readAloud": "読み上げ応答", + "stopReading": "応答の読み込みを停止する", + "feedbackError": "フィードバックを保存できませんでした。もう一度お試しください。", + "exportMarkdown": "マークダウンとしてエクスポート", + "exportConversation": { + "action": "会話をマークダウンとしてエクスポート", + "failedTitle": "会話をエクスポートできませんでした", + "failedDescription": "Homarrはこの会話を読み込むことができませんでした。もう一度お試しください。" + }, + "reasoning": "考え", + "previousResponse": "前の応答", + "nextResponse": "次の応答", + "removeAttachment": "添付ファイルを削除", + "downloadFile": "{name} をダウンロード", + "attachedImage": "添付された画像", + "externalImageBlocked": "外部画像がプライバシーのためブロックされています", + "image": { + "loading": "画像を読み込み中", + "failed": "この画像を読み込めませんでした。", + "retry": "画像をもう一度お試しください" + }, + "quoteSelection": "引用", + "dismissQuote": "見積もりを削除", + "attachments": { + "add": "画像またはドキュメントを添付", + "errorTitle": "添付ファイルを追加できませんでした", + "imageUnsupported": "選択されたモデルは画像入力をサポートしていません。" + }, + "mentions": { + "menu": "Homarrコンテキストを追加", + "context": "コンテキスト", + "app": "アプリケーション", + "integration": "連携機能", + "board": "ボード", + "widget": "ウィジェット", + "tools": "利用可能なツール" + }, + "markdown": { + "diagram": "図", + "renderingDiagram": "図をレンダリング中…", + "diagramUnavailable": "このダイアグラムをレンダリングできませんでした。" + }, + "commands": { + "menu": "アシスタントコマンド", + "health": "サービスヘルスチェックを準備する", + "explore": "この Homarr インスタンスの概要を準備する", + "media": "メディア検索の準備", + "style": "ボードの外観またはカスタム CSS 変更を準備します", + "designWidget": "プロンプト1つのカスタムウィジェットビルドを準備する" + }, + "usage": { + "tokens": "トークン", + "contextWindow": "コンテキスト ウィンドウ", + "requestDetails": "要求の詳細", + "used": "最新のステップ", + "remaining": "残り", + "capacity": "容量", + "input": "Input", + "output": "出力", + "cached": "キャッシュされた入力", + "cacheWrite": "キャッシュの書き込み", + "reasoning": "理由", + "inputShort": "in", + "outputShort": "アウト", + "cachedShort": "キャッシュ", + "reasoningShort": "理由", + "firstOutput": "最初の出力", + "homarrTiming": "Homarrが観察されました", + "endToEnd": "End to end", + "observedThroughput": "観察されたスループット。", + "providerTiming": "プロバイダーが報告されました", + "loadingProviderDetails": "生成の詳細を読み込み中…", + "providerDetailsPending": "OpenRouterはまだいくつかの世代の詳細を処理しています。再試行してください。", + "providerLatency": "プロバイダーのレイテンシ", + "generationTime": "生成時間", + "moderationLatency": "モデレーション", + "providerThroughput": "プロバイダーのスループット。", + "fallbacks": "フォールバック", + "fallbackLatency": "フォールバックレイテンシー", + "cacheDiscount": "キャッシュ割引", + "normalizedTokens": "OpenRouter正規化された入力 / 出力", + "byok": "BYOK", + "cost": "コスト", + "reported": "プロバイダによって報告されました", + "estimated": "モデル価格からの推定値", + "upstreamCost": "上流推論(上流)", + "webSearches": "ウェブ検索", + "finishReason": "理由を完了", + "notReported": "報告されていない", + "agentSteps": "エージェントのステップ", + "step": "手順 {number}", + "generation": "生成" + }, + "toolInput": "Input", + "toolOutput": "出力", + "toolActivity": { + "iconSearch": "“{query}”アイコンを探しています", + "iconBrowse": "利用可能なアイコンを参照" + }, + "toolNavigation": { + "openPreview": "プレビューを開く", + "openWidget": "ウィジェットを開く" + }, + "webSearch": { + "title": "ウェブ検索", + "completed": "OpenRouterはこの応答をライブWebで検索しました。", + "searches": "{count, plural, one {# search} other {# searches}}", + "sources": "{count, plural, one {# source} other {# source}}" + }, + "responseError": { + "title": "アシスタントを終了できませんでした", + "description": "もう一度やり直してください。問題が解決しない場合は、管理者に設定されたモデルのエンドポイントを確認するよう依頼してください。" + }, + "toolPreparationError": { + "title": "このリクエストは準備できませんでした", + "description": "完全な詳細を提供する前にモデルが停止しました。レスポンスを再試行するか、リクエストを再記述してください。変更はありません。" + }, + "busy": { + "title": "アシスタントはすでに動作しています", + "description": "現在の応答を待ち、または実行を停止するために開きます。" + }, + "pendingAction": { + "answerTitle": "回答が必要", + "answerFallback": "続行する回答を選択してください", + "formTitle": "アプリの詳細を確認", + "boardFormTitle": "ボードの変更を確認する", + "review": "レビュー", + "sendBlocked": "送信前に保留中のリクエストを解決する" + }, + "activity": { + "thinking": "アシスタントが考えています", + "working": "プロンプトで作業中", + "ready": "対応準備完了", + "completed": "応答を開く", + "approval": "承認が必要です", + "failed": "アシスタントには注意が必要です", + "expand": "アシスタント応答を開く", + "dismiss": "アシスタントアクティビティを閉じる" + }, + "scrollToLatest": "最新情報までスクロール", + "refresh": { + "action": "現在のビューを更新", + "working": "現在のビューを更新中", + "completeTitle": "更新を表示", + "completeDescription": "表示されるHomarrデータが再読み込みされました。", + "failedTitle": "ビューを更新できませんでした", + "failedDescription": "変更はまだ保存されます。リフレッシュ操作をもう一度お試しください。" + }, + "askUser": { + "preparing": "質問を準備中", + "answered": "あなたの回答", + "other": "その他", + "otherLabel": "あなたの回答", + "otherPlaceholder": "別の回答を入力…", + "submit": "回答を送信", + "cancelOther": "他の回答をキャンセル", + "optionKind": { + "affirmative": "確認", + "negative": "同意しない", + "alternative": "Option", + "custom": "カスタム" + } + }, + "configureApp": { + "title": "アプリの詳細を確認", + "description": "ローカルアイコンを選択し、アシスタントが作成の承認を要求する前に調整します。", + "preparing": "アプリの詳細を準備中", + "continue": "これらの詳細を使用する", + "ready": "アプリの詳細の準備ができました", + "automaticContinue": "これらのアプリの詳細を自動的に使用する" + }, + "configureBoardSettings": { + "title": "ボードの変更を確認する", + "loading": "現在のボード設定を読み込んでいます", + "loadErrorTitle": "ボードの設定を読み込めませんでした", + "loadErrorDescription": "ボードが存在しないか、変更する権限がない可能性があります。", + "proposedCount": "アシスタントが {count} フィールドを提案しました", + "changeCount": "{count} 変更の準備ができました", + "ready": "ボードの変更の準備ができました", + "cancelled": "現在のボードの設定を保持しました", + "noChanges": "設定は変更されません", + "keepCurrent": "現在の設定を保持", + "continue": "承認を続ける", + "automaticContinue": "提案されたボードの変更を自動的に承認する", + "resetAll": "すべての変更をリセット", + "tabs": { + "css": "Custom CSS", + "appearance": "外観", + "background": "背景", + "general": "一般" + }, + "cssDescription": "完全なスタイルシートを編集します。既存のルールは、ここで削除されない限り保持されます。", + "cssCharacters": "16384文字中{count}", + "copyCss": "Copy CSS", + "copied": "コピーしました", + "restoreCss": "Restore current CSS", + "remoteCssTitle": "このCSSはリモートリソースを読み込みます", + "remoteCssDescription": "インポートされたスタイルシートとリモート URL ボードがロードされると、別のサーバーに接続します。続行する前に確認してください。" + }, + "configureWidget": { + "title": "ウィジェットを確認", + "preparing": "ウィジェットの設定を準備中", + "review": "ウィジェットと連携を確認する", + "ready": "ウィジェットの設定の準備ができました", + "cancelled": "ウィジェットは追加されませんでした", + "automaticContinue": "提案されたウィジェット設定を自動的に承認する", + "definitionLoadErrorTitle": "ウィジェットの設定を読み込めませんでした", + "definitionLoadErrorDescription": "Homarr could not load this widget's settings. Try again.", + "loadErrorTitle": "連携機能を読み込めませんでした", + "loadErrorDescription": "Homarrはこのウィジェットで利用可能な統合をロードできませんでした。", + "noIntegrationTitle": "互換性のある統合が必要です", + "noIntegrationDescription": "ダッシュボードに追加する前に、このウィジェットでサポートされているインテグレーションを設定します。", + "connectIntegration": "サービスに接続", + "manageIntegrations": "連携機能の管理", + "skip": "追加しない", + "errorTitle": "ウィジェットの設定を準備できませんでした", + "errorDescription": "モデルは完全なウィジェットの設定を提供していません。ウィジェットが追加されませんでした。" + }, + "approvalRequired": "承認が必要です", + "complete": "Complete", + "denied": "拒否しました", + "failed": "失敗", + "working": "作業中", + "approvalDescription": "実行する前にこの変更を確認します。", + "approveAndRun": "承認して実行する", + "deny": "拒否", + "autoApproval": { + "label": "自動承認", + "composerLabel": "承認してください", + "title": "自動承認", + "description": "この会話のフォームを自動的に準備し、保護された変更を承認します。 質問はまだ回答を待っています。あなたが会話を切り替えると、あなたのHomarrの権限が適用されます。", + "enable": "この会話を有効にする", + "disable": "自動承認をオフにする", + "enabled": "自動承認がオンになっています", + "approving": "自動的に承認中" + } } } diff --git a/packages/translation/src/lang/ko.json b/packages/translation/src/lang/ko.json index dc5e29f08..c85f5c302 100644 --- a/packages/translation/src/lang/ko.json +++ b/packages/translation/src/lang/ko.json @@ -1,156 +1,246 @@ { "init": { - "step": { - "start": { - "title": "Homarr에 오신 것을 환영합니다", - "subtitle": "Homarr 인스턴스 설정을 시작합니다.", - "description": "시작하기 전에, Homarr 인스턴스를 어떻게 설정할지 선택해주세요.", - "action": { - "scratch": "처음부터 시작하기", - "importOldmarr": "1.0 이전의 Homarr에서 불러오기", - "restoreSqlite": "SQLite 백업 복원", - "restoreSqliteDescription": "이전 Homarr 인스턴스로부터 전체 SQLite 데이터베이스 백업을 업로드합니다. 모든 보드, 사용자, 앱, 통합 및 설정이 복원됩니다.", - "backToOptions": "← 설정 옵션으로 돌아가기" + "studio": { + "navigationLabel": "온보딩 섹션", + "back": "뒤로", + "buildBoard": "보드 만들기", + "common": { + "unknownError": "문제가 발생했습니다. 선택한 내용은 그대로 있으니 다시 시도해 보세요." + }, + "claim": { + "checking": "이 온보딩 세션을 보호하는 중…", + "checkingTitle": "안전한 설정 준비 중", + "lockedTitle": "다른 브라우저에서 설정이 열려 있습니다", + "lockedDescription": "해당 브라우저에서 계속하거나, 보안 최초 실행 세션이 만료될 때까지 기다린 후 다시 시도하세요.", + "signInTitle": "관리자 로그인 필요", + "signInDescription": "이미 관리자가 존재합니다. 자격 증명이나 서비스 액세스를 노출하지 않고 설정을 계속하려면 로그인하세요.", + "signIn": "로그인하고 계속하기", + "errorTitle": "설정을 보호하지 못했습니다", + "errorDescription": "보안 최초 실행 세션을 다시 시도하려면 페이지를 새로 고침하세요." + }, + "navigation": { + "essentials": "필수 설정", + "discover": "탐색", + "connect": "연결", + "board": "보드", + "extend": "확장", + "review": "리뷰" + }, + "welcome": { + "title": "홈에 오신 것을 환영합니다.", + "description": "Homarr v{version}에 오신 것을 환영합니다. 필수 설정을 안내하고 첫 번째 보드를 만들 수 있도록 도와드리겠습니다.", + "start": "시작하기", + "restore": "백업 복원", + "restoreTitle": "백업에서 복원", + "restoreDescription": "전체 SQLite 백업을 복원하면 보드, 사용자, 앱, 통합 및 설정이 복원됩니다. Homarr는 기존 항목을 교체하기 전에 백업을 검증합니다.", + "errorTitle": "설정을 시작하지 못했습니다", + "errorDescription": "설정 선택 내용은 그대로 있습니다. 다시 시도하거나, 문제가 계속되면 페이지를 새로 고침하세요." + }, + "account": { + "title": "관리자 계정 만들기", + "description": "관리자의 계정 정보를 설정해주세요.", + "username": "관리자 사용자 이름", + "passwordHint": "최소 8자만 필수입니다. 그 외의 비밀번호 강도 검사는 권장 사항입니다.", + "create": "관리자 만들기", + "errorTitle": "관리자를 만들지 못했습니다", + "recoveryTitle": "관리자 계정이 생성되었습니다", + "recoveryDescription": "자동 로그인이 완료되지 않았습니다. 방금 만든 관리자 자격 증명으로 로그인하여 설정을 계속하세요.", + "recoveryAction": "로그인하고 계속하기", + "unknownError": "관리자를 만들지 못했습니다." + }, + "externalGroup": { + "title": "관리자 그룹 연결", + "description": "LDAP 또는 OIDC에서 전송한 정확한 그룹 이름을 사용하세요. 이 그룹의 구성원에게 관리자 액세스 권한이 부여됩니다.", + "name": "외부 관리자 그룹", + "nameDescription": "대소문자를 구분하며 ID 공급자와 일치해야 합니다.", + "continue": "그룹 저장하고 계속하기", + "errorTitle": "그룹을 저장하지 못했습니다", + "unknownError": "관리자 그룹을 저장하지 못했습니다." + }, + "essentials": { + "title": "익숙한 기본값으로 시작하기", + "description": "모두가 처음 보게 될 언어와 화면 모양을 설정한 다음, 서비스에서 사용하는 주소 패턴을 Homarr에 알려주세요.", + "language": "기본 언어", + "theme": "기본 테마", + "themeAuto": "시스템", + "themeLight": "라이트", + "themeDark": "다크", + "serverOriginHelp": "Homarr는 이 주소를 사용하여 감지된 서비스 URL을 미리 입력합니다. 각 서비스를 개별적으로 계속 편집할 수 있습니다.", + "serverDescription": "이는 제한이 아닌 바로 가기입니다. 감지된 모든 서비스를 계속 편집할 수 있습니다.", + "serverOrigin": "도메인, IP 또는 역방향 프록시 경로", + "serverOriginDescription": "예: home.lan, 192.168.1.10 또는 https://home.example.com/services. 아래에서 각 서비스를 추가할 방식을 선택하세요.", + "analytics": "익명 제품 분석 공유", + "analyticsDescription": "Homarr가 기능의 안정성을 개선하는 데 도움이 됩니다. 서비스 자격 증명이나 대시보드 콘텐츠는 전송되지 않습니다." + }, + "discover": { + "title": "이 설치 환경에서 실제로 액세스할 수 있는 항목 확인", + "description": "Homarr는 현재 환경에서 기능을 확인합니다. Docker 소켓 또는 Kubernetes 컨텍스트가 없어도 수동 설정은 차단되지 않습니다.", + "database": "데이터베이스", + "docker": "Docker 및 호환 소켓", + "kubernetes": "Kubernetes", + "assistantWorkshop": "Assistant 및 Workshop", + "found": "통합 {integrations}개와 추가 앱 {apps}개를 찾았습니다", + "retryKubernetes": "Kubernetes 다시 확인", + "retryWorkshop": "Workshop 다시 확인", + "unknownVersion": "알 수 없는 버전", + "kubernetesAvailable": "Kubernetes {version}에 연결됨", + "kubernetesDisabled": "활성화되지 않음. Docker 또는 수동 서비스로 계속하세요", + "kubernetesUnavailable": "Kubernetes가 활성화되어 있지만 이 Homarr 프로세스에서 액세스할 수 없습니다", + "workshopAvailable": "Community Workshop 및 호스팅된 Assistant 서비스에 액세스할 수 있습니다", + "workshopUnavailable": "로컬 및 사용자 지정 Assistant 공급자는 계속 사용할 수 있습니다", + "partialTitle": "일부 소스를 스캔하지 못했습니다", + "partialDescription": "액세스 가능한 호스트의 결과는 유지됩니다. 소켓 권한을 확인하거나 다음 섹션에서 서비스를 수동으로 추가하세요.", + "status": { + "checking": "사용 가능 여부 확인 중…", + "available": "사용 가능", + "partial": "부분적으로 사용 가능", + "empty": "연결할 수 있지만 일치하는 실행 중인 서비스가 없음", + "disabled": "서버 설정에 의해 비활성화됨", + "unavailable": "이 Homarr 프로세스에서 사용할 수 없음" } }, - "import": { - "title": "데이터 불러오기", - "subtitle": "기존 Homarr 인스턴스에서 데이터를 불러올 수 있습니다.", - "dropzone": { - "title": "zip 파일 드롭 또는 클릭해서 찾아보기", - "description": "업로드된 zip이 처리되어 가져올 항목을 선택할 수 있습니다" + "connect": { + "title": "보드를 유용하게 만들어 줄 항목 연결", + "description": "여러 서비스를 한 번에 선택하세요. Docker 레이블이 우선 적용되고, 이미지 매칭으로 누락된 항목을 채우며, 모든 URL과 자격 증명을 검토할 수 있습니다.", + "discoveredIntegrations": "감지된 통합 인스턴스({count})", + "detectedIntegrationLabel": "{name} 가져오기, 유형 {kind}로 감지됨", + "detectedAppLabel": "감지된 앱 {name} 가져오기", + "otherIntegrations": "다른 통합 추가", + "configureIntegrations": "통합 구성", + "discoveredApps": "감지된 앱({count})", + "appAddressRequired": "{name}의 주소를 추가하거나 선택 항목에서 삭제하세요.", + "empty": "선택한 통합이 없습니다. Homarr는 일반 위젯으로 유용한 시작 보드를 계속 만듭니다.", + "dockerSource": "Docker", + "manualSource": "수동", + "url": "서비스 URL", + "noCredentials": "자격 증명 없음", + "noCredentialsDescription": "이 통합에는 자격 증명이 필요하지 않습니다.", + "credentialMethod": "자격 증명 방식", + "getApiKey": "이 서비스의 API 키 설정 열기", + "openGuide": "이 서비스에 대한 Homarr 설정 가이드 열기", + "testConnection": "연결 테스트", + "testSuccess": "연결됨", + "testSuccessDescription": "현재 주소와 자격 증명으로 Homarr가 연결되었습니다.", + "testError": "연결 실패", + "testErrorDescription": "서비스 주소와 자격 증명을 확인한 후 다시 시도하세요.", + "needsConfiguration": "설정 필요", + "tested": "연결 테스트 완료", + "testFailed": "연결 테스트 실패", + "incompleteConfirmation": "완료되지 않은 통합 기능은 건너뜁니다. 해당 기능 없이 계속하시겠습니까?" + }, + "board": { + "title": "생성 전에 보드 구성", + "description": "Homarr는 보호된 Mobile 및 Base 레이아웃을 생성한 다음, 선택한 서비스의 앱과 호환되는 위젯을 배치합니다.", + "target": "구성할 보드", + "targetDescription": "이 설정으로 업데이트할 기존 보드를 정확히 선택하세요.", + "targetPlaceholder": "보드 선택", + "targetRequired": "계속하기 전에 구성할 보드를 선택하세요.", + "name": "보드 이름", + "nameDescription": "보드 URL에 사용되며, 문자, 숫자, 대시 및 밑줄만 사용할 수 있습니다.", + "nameRequired": "계속하기 전에 보드 이름을 입력하세요.", + "primaryColor": "기본 색상", + "secondaryColor": "보조 색상", + "resetColors": "색상 초기화", + "radius": "위젯 모서리 반경", + "radiusOptions": { + "xs": "좁게", + "sm": "은은하게", + "md": "균형 있게", + "lg": "둥글게", + "xl": "부드럽게" }, - "fileInfo": { - "action": { - "change": "파일 변경" - } + "columns": "보드 열 개수", + "columnsDescription": "열은 항목의 크기와 위치를 지정하는 가로 그리드를 정의합니다. 대부분의 경우 12개면 충분합니다.", + "columnCount": "{count, plural, other {#개 열}}", + "leftSidebar": "왼쪽 사이드바", + "rightSidebar": "오른쪽 사이드바", + "previewLabel": "첫 번째 보드 레이아웃 실시간 미리보기" + }, + "extend": { + "title": "고급 기능", + "tabsLabel": "Assistant, Workshop 및 MCP 설정", + "assistant": "어시스턴트", + "workshop": "워크숍", + "assistantSetup": { + "loginTitle": "관리자 로그인 필요", + "loginDescription": "제공업체 키와 모델 액세스는 권한이 필요합니다. 설정을 완료하고 로그인하면 Homarr가 Assistant 설정을 바로 엽니다.", + "loginAction": "로그인하여 Assistant 구성" }, - "importSettings": { - "title": "설정 불러오기", - "description": "가져오기 동작 설정" + "workshopSetup": { + "title": "Homarr 워크숍", + "description": "커뮤니티 Custom Widget을 둘러보고, 요청된 기능을 확인하고, 설치하세요. 서버 간에 코드를 복사하지 않고 직접 만든 작업을 게시할 수도 있습니다.", + "available": "사용 가능", + "checking": "확인 중…", + "unavailable": "사용할 수 없음", + "discoverTitle": "탐색", + "discoverDescription": "실제 셀프 호스팅 작업 흐름에 맞게 만들어진 위젯을 찾아보세요.", + "installTitle": "검토 및 설치", + "installDescription": "무엇이든 추가하기 전에 메타데이터와 구성을 확인하세요.", + "publishTitle": "공유", + "publishDescription": "재사용 가능한 위젯을 커뮤니티에 게시하세요.", + "browse": "Workshop 탐색" }, - "boardSelection": { - "title": "{count}개의 보드 찾음", - "description": "가져올 보드의 크기를 모두 선택", - "action": { - "selectAll": "모두 선택", - "unselectAll": "모두 선택 해제" - } - }, - "summary": { - "title": "불러오기 요약", - "description": "아래 요약에서 가져올 항목을 확인할 수 있습니다", - "action": { - "import": "가져오기 확인 및 계속 진행" - }, - "entities": { - "apps": "앱", - "boards": "보드", - "integrations": "통합", - "credentialUsers": "자격 증명 사용자" - } - }, - "tokenModal": { - "title": "가져오기 토큰 입력", - "field": { - "token": { - "label": "토큰", - "description": "이전 Homarr 인스턴스에서 표시된 가져오기 토큰 입력" - } - }, - "notification": { - "error": { - "title": "유효하지 않은 토큰", - "message": "입력한 토큰이 유효하지 않습니다" - } - } + "mcpSetup": { + "title": "Homarr MCP", + "description": "Claude, Codex 또는 다른 MCP 클라이언트를 Homarr의 타입 지정 도구에 연결하세요. API 키를 사용하면 액세스를 명시적으로 관리하고 취소할 수 있습니다.", + "endpoint": "스트리밍 가능한 HTTP 엔드포인트", + "keyTitle": "지금 이 키 복사", + "keyDescription": "보안을 위해 Homarr는 이 API 키를 다시 표시할 수 없습니다.", + "copyKey": "API 키 복사", + "createKey": "MCP API 키 생성", + "errorTitle": "MCP API 키를 생성할 수 없습니다", + "loginRequired": "설정 후 관리자로 로그인하여 API 키를 생성하세요.", + "configuration": "클라이언트 설정", + "copy": "구성 복사", + "copied": "복사됨", + "advanced": "MCP 도구, 권한 및 설정 세부 정보 열기" } }, - "user": { - "title": "관리자", - "subtitle": "관리자의 계정 정보를 설정해주세요.", - "notification": { - "success": { - "title": "계정 생성됨", - "message": "계정이 성공적으로 생성되었습니다" - }, - "error": { - "title": "계정 생성 실패" - } - } - }, - "group": { - "title": "외부 그룹", - "subtitle": "외부 사용자가 사용할 그룹을 지정합니다.", - "form": { - "name": { - "label": "그룹 이름", - "description": "이름은 외부 제공자의 관리자 그룹과 일치해야 합니다" - } - } - }, - "settings": { - "title": "설정", - "subtitle": "서버 설정하기." - }, - "integrations": { - "title": "통합", - "subtitle": "사용할 서비스를 선택합니다.", - "description": "연결하려는 통합을 선택하십시오. 일치하는 위젯으로 대시보드를 자동 설정합니다.", - "action": { - "continue": "계속", - "skip": "지금은 건너뛰기" - }, - "configure": { - "progress": "{total}개 중 {current}개", - "skip": "이 통합 건너뛰기", - "finishing": "대시보드 설정 중...", - "error": { - "title": "설치 실패", - "message": "대시보드를 설정하는 중 문제가 발생했습니다. 다시 시도해 주십시오." - }, - "helpers": { - "tooltip": "URL 도우미", - "description": "서비스 URL을 추측합니다. 작동하지 않을 경우, 주소를 직접 입력해 주십시오." - } - }, - "urlTemplate": { - "label": "기본 URL", - "placeholder": "homelab.local 또는 192.168.1.1", - "hint": "기본 도메인 또는 IP를 입력하여 통합 URL 자동 채우기", - "warning": "지금 기본 URL을 설정하면 모든 통합 URL이 자동으로 채워져 설정 시간을 아낄 수 있습니다", - "preview": "예) {example}", - "mode": { - "subdomain": "서브도메인", - "hostPort": "호스트:포트" - } - }, - "docker": { - "detected": "{count}개 docker 서비스 감지", - "detectedBreakdown": "통합 {integrations}개, 앱 {apps}개", - "summary": "Homarr가 {apps}개 앱을 감지했으며, 그 중 {integrations}개는 통합 기능이 내장되어 있습니다", - "appBadge": "앱", - "appSectionLabel": "대시보드에 추가할 앱 ({count}개 선택)", - "scanning": "Docker 스캔 중...", - "scanningDescription": "시스템에서 실행 중인 컨테이너 찾기" + "review": { + "title": "서비스 중심으로 구성된 하나의 보드", + "description": "Homarr는 저장하지 않은 연결을 테스트하고, 선택한 앱을 가져오고, 모양과 레이아웃을 적용한 다음 구성한 정확한 보드를 엽니다.", + "board": "첫 번째 보드", + "columns": "보드 열 개수", + "columnsValue": "{count, plural, other {#개 열}}", + "sidebars": "사이드바", + "sidebarsValue": "{count, plural, =0 {없음} other {사이드바 #개}}", + "layouts": "반응형 레이아웃", + "layoutsValue": "모바일 + 기본", + "integrations": "통합", + "integrationsValue": "{count, plural, =0 {선택 항목 없음} other {통합 #개 선택}}", + "apps": "앱 타일", + "appsValue": "{count, plural, =0 {시작 앱만} other {앱 타일 #개}}", + "language": "언어", + "theme": "테마", + "themeAuto": "시스템 설정", + "themeLight": "라이트", + "themeDark": "다크", + "colors": "보드 색상", + "radius": "위젯 반경", + "automaticTitle": "Homarr가 생성하는 항목", + "automaticDescription": "호환되는 위젯, 아이콘, 앱 링크, 통합 관계 및 반응형 배치는 공유 Homarr 카탈로그에서 제공됩니다. 모든 결과는 나중에 편집할 수 있습니다.", + "dockerWarningTitle": "설정 중 일부 Docker 레이블이 변경됨", + "dockerWarningDescription": "{count, plural, other {선택한 Docker 결과 #개를 적용할 수 없습니다. 서비스가 변경되었거나 다른 보드를 대상으로 지정되었거나 위젯이 호환되지 않습니다.}}.", + "errorTitle": "보드를 만들 수 없음", + "progress": { + "applying": "연결을 테스트하고 보드를 만드는 중", + "done": "보드가 준비되었습니다" } }, "finish": { - "title": "설정 완료", - "subtitle": "모든 준비가 끝났습니다!", - "description": "설정 과정을 성공적으로 완료했습니다. 이제 Homarr을 사용할 수 있습니다. 다음 작업을 선택해주세요:", - "action": { - "goToBoard": "{name} 보드로 가기", - "createBoard": "첫 번째 보드 만들기", - "inviteUser": "다른 사용자 초대하기", - "docs": "문서 읽기" - } + "title": "첫 번째 보드가 준비되었습니다.", + "description": "Homarr는 선택한 항목을 연결하고 나머지는 편집 가능한 상태로 유지했습니다. 지금 보드를 열면 간단한 제품 내 둘러보기를 통해 편집 모드, 위젯, 레이아웃 및 검색 기능을 확인할 수 있습니다.", + "openBoard": "내 보드 열기", + "manageTitle": "관리", + "manageDescription": "앱, 통합, 보드, 사용자 및 서버 설정을 세부 조정하세요.", + "workshopTitle": "워크숍", + "workshopDescription": "커뮤니티 Custom Widget을 찾아 설치하세요.", + "docsTitle": "Homarr 알아보기", + "docsDescription": "보드, 위젯, 통합 및 도구에 대한 맞춤 가이드를 읽어보세요." } - }, - "backToStart": "시작으로 돌아가기" + } }, "user": { - "title": "사용자", "name": "사용자", "page": { "login": { @@ -159,12 +249,10 @@ }, "invite": { "title": "Homarr 참여하기", + "titleWithAppName": "{appName} 참여", "subtitle": "Homarr에 오신 것을 환영합니다! 계정을 생성해주세요", + "subtitleWithAppName": "{appName}에 오신 것을 환영합니다! 계정을 생성하세요", "description": "{username}가 초대했습니다" - }, - "init": { - "title": "새로운 Homarr 설치", - "subtitle": "초기 관리자 계정을 생성해주세요" } }, "field": { @@ -192,12 +280,17 @@ "previousPassword": { "label": "이전 패스워드" }, - "homeBoard": { - "label": "홈 보드" - }, "pingIconsEnabled": { "label": "핑에 아이콘 사용" }, + "byteUnitSystem": { + "label": "데이터 크기 단위", + "description": "Homarr에서 바이트 크기와 바이트 속도를 표시하는 방식을 선택하세요. 비트 전송률은 항상 십진 단위를 사용합니다.", + "options": { + "binary": "이진", + "decimal": "십진" + } + }, "enableRightClickOnWidgets": { "label": "위젯 우클릭 활성화", "description": "위젯을 마우스 오른쪽 버튼으로 클릭할 때 Homarr 컨텍스트 메뉴를 표시합니다. 브라우저의 기본 메뉴를 사용하려면 비활성화합니다 (예: \"새 탭에서 링크 열기\")." @@ -247,7 +340,6 @@ } } }, - "create": "사용자 만들기", "changePassword": { "label": "패스워드 변경", "notification": { @@ -259,56 +351,6 @@ } } }, - "changeHomeBoard": { - "notification": { - "success": { - "message": "홈 보드 변경 완료" - }, - "error": { - "message": "홈 보드를 변경할 수 없습니다" - } - } - }, - "changeSearchPreferences": { - "notification": { - "success": { - "message": "검색 설정 변경 완료" - }, - "error": { - "message": "검색 설정을 변경할 수 없습니다" - } - } - }, - "changeFirstDayOfWeek": { - "notification": { - "success": { - "message": "주 시작 요일 변경 완료" - }, - "error": { - "message": "주 시작 요일을 변경할 수 없습니다" - } - } - }, - "changePingIconsEnabled": { - "notification": { - "success": { - "message": "Ping 아이콘 전환 완료" - }, - "error": { - "message": "Ping 아이콘을 전환할 수 없습니다" - } - } - }, - "changeDdgBangs": { - "notification": { - "success": { - "message": "DuckDuckGo bangs 전환 완료" - }, - "error": { - "message": "DuckDuckGo bangs 전환 실패" - } - } - }, "manageAvatar": { "changeImage": { "label": "이미지 변경", @@ -338,16 +380,6 @@ } } }, - "editProfile": { - "notification": { - "success": { - "message": "프로필 업데이트 완료" - }, - "error": { - "message": "프로필을 업데이트할 수 없습니다" - } - } - }, "delete": { "label": "사용자 영원히 삭제", "description": "이 사용자와 설정을 삭제합니다. 보드는 삭제되지 않습니다. 사용자에게 알려지지 않습니다.", @@ -356,18 +388,13 @@ "select": { "label": "사용자 선택", "notFound": "사용자 찾을 수 없음" - }, - "transfer": { - "label": "새로운 소유자 선택하기" } } }, "group": { - "title": "그룹", "name": "그룹", "search": "그룹 찾기", "field": { - "name": "이름", "members": "멤버", "homeBoard": { "label": "홈 보드", @@ -388,6 +415,19 @@ } } }, + "custom-widget": { + "title": "사용자 지정 위젯", + "item": { + "manage": { + "label": "사용자 지정 위젯 관리", + "description": "멤버가 사용자 지정 위젯 정의를 생성, 편집 및 삭제할 수 있도록 허용" + }, + "secret-write": { + "label": "사용자 지정 위젯 보안 정보 구성", + "description": "멤버와 해당 API 키가 암호화된 사용자 지정 위젯 자격 증명을 설정할 수 있도록 허용" + } + } + }, "app": { "title": "앱", "item": { @@ -493,6 +533,35 @@ "description": "멤버가 모든 검색 엔진을 관리 및 삭제할 수 있도록 허용합니다" } } + }, + "matrix": { + "none": "액세스 권한 없음", + "impliedHint": "추가로 부여됨: {permissions}", + "grantedViaAdmin": "관리자에게 이미 이 권한이 있습니다. 별도로 구성하려면 관리자를 \"액세스 권한 없음\"으로 설정하세요.", + "preset": { + "label": "사전 설정", + "viewer": "뷰어", + "viewerDescription": "읽기 전용: 보드와 미디어를 보고, 이미 존재하는 앱과 통합을 사용할 수 있습니다.", + "editor": "편집자", + "editorDescription": "일상적인 관리: 보드, 앱, 통합 및 검색 엔진을 생성하고 편집할 수 있습니다.", + "admin": "관리자", + "adminDescription": "사용자 관리자를 포함하여 모든 기능과 설정에 제한 없이 액세스할 수 있습니다.", + "custom": "사용자 지정" + }, + "effective": { + "title": "유효 권한", + "description": "간접적으로 부여된 권한을 포함하여 이 그룹의 멤버가 수행할 수 있는 모든 작업을 중복 없이 표시합니다.", + "empty": "선택한 권한 없음" + }, + "noneDescription": "멤버는 이 영역에 액세스할 수 없습니다.", + "level": { + "view": "보기", + "use": "사용", + "interact": "상호 작용", + "modify": "수정", + "full": "전체" + }, + "capabilityIncluded": "이미 \"{level}\"에 포함됨" } }, "memberNotice": { @@ -607,21 +676,24 @@ "search": "앱 찾기", "page": { "list": { - "title": "앱", + "ariaLabel": "구성된 앱", "noResults": { "title": "아직 앱이 없습니다", - "action": "첫 번째 앱 만들기" + "description": "앱은 보드에 추가하려는 서비스와 도구로 연결되는 링크입니다.", + "action": "첫 번째 앱 만들기", + "filteredTitle": "검색과 일치하는 앱 없음", + "filteredDescription": "\"{search}\"와 일치하는 앱이 없습니다. 다른 이름이나 URL을 사용해 보세요.", + "createOnlyTitle": "앱만 추가할 수 있음", + "createOnlyDescription": "현재 권한으로는 앱을 생성할 수 있지만 기존 앱을 찾아볼 수는 없습니다. 전체 목록을 보려면 관리자에게 앱 관리 권한을 요청하세요." } }, "create": { "title": "새 앱", "notification": { "success": { - "title": "생성 완료", "message": "앱 생성이 완료되었습니다" }, "error": { - "title": "생성 실패", "message": "앱 생성에 실패했습니다" } } @@ -630,11 +702,9 @@ "title": "앱 편집", "notification": { "success": { - "title": "변경 사항 적용 완료", "message": "앱 설정 저장이 완료되었습니다" }, "error": { - "title": "변경 사항 적용 실패", "message": "앱 설정 저장에 실패했습니다" } } @@ -644,26 +714,18 @@ "message": "{name} 앱을 삭제하시겠습니까?", "notification": { "success": { - "title": "삭제 완료", "message": "앱 삭제가 완료되었습니다" }, "error": { - "title": "삭제 실패", "message": "앱을 삭제할 수 없습니다" } } } }, "field": { - "name": { - "label": "이름" - }, "description": { "label": "설명" }, - "url": { - "label": "URL" - }, "useDifferentUrlForPing": { "checkbox": { "label": "다른 URL을 ping에 사용", @@ -678,58 +740,397 @@ "search": "앱 검색", "noResults": "결과 없음", "action": "{app} 선택", - "title": "이 보드에 추가할 앱 선택" + "title": "이 보드에 추가할 앱 선택", + "toggle": "클릭하여 선택", + "selected": "선택됨", + "multiple": "{count} 추가", + "selectedCount": "{count, plural, other {#개 선택됨}}", + "appsSelected": "{count, plural, other {앱 #개 선택됨}}", + "selectMultiple": "여러 항목 선택", + "cancelMultiple": "다중 선택 종료", + "customApplication": "사용자 지정 애플리케이션", + "application": "애플리케이션" }, "create": { "title": "새 앱 생성", "description": "새 앱 생성 ", "action": "앱 생성 열기" - }, - "add": "앱 추가" + } } }, + "tips": { + "dismiss": "팁 닫기", + "multiSelectApps": "팁: Ctrl / ⌘ 키를 누른 채로 여러 앱을 한 번에 선택하세요" + }, "customWidget": { + "secretEntry": { + "title": "API 소스 구성", + "description": "서버 URL을 확인하고 자격 증명을 입력하세요. 보안 정보는 Homarr에서 암호화되며 요청 에이전트에 다시 반환되지 않습니다.", + "loading": "보안 요청을 불러오는 중…", + "applying": "이 구성을 적용하는 중… 이 페이지를 열어 두세요.", + "saved": "API 소스가 구성되었습니다. 이 페이지를 닫아도 됩니다.", + "unavailable": "요청을 사용할 수 없음", + "saveError": "API 소스를 구성할 수 없음", + "source": "API 소스: {name}", + "baseUrl": "서버 URL", + "networkScope": "네트워크 액세스", + "save": "API 구성 저장", + "expires": "이 일회성 요청은 {time}에 만료됩니다." + }, "page": { "list": { - "title": "사용자 지정 위젯", "noResults": "사용자 지정 위젯이 아직 없습니다. 첫 위젯을 만들어 보세요!", - "loading": "불러오는 중..." + "noDescription": "설명 없음", + "enabled": "활성화됨", + "disabled": "장애인", + "disabledDescription": "이 위젯은 구성된 상태로 유지되지만 어떤 보드에서도 로드되지 않습니다.", + "requestCount": "{count, plural, other {요청 #개}}", + "invalidDefinition": "유효하지 않은 정의", + "migrationRequired": "마이그레이션 필요", + "migrationInstructions": "작업 메뉴를 열어 수동으로 다시 만들 수 있도록 원본 v1 정의를 복사하거나 내보내세요. LLM과 함께 마이그레이션 프롬프트를 사용할 수도 있습니다. 마이그레이션 후에도 기존 보드 배치는 계속 작동합니다.", + "missingCredentials": "{count, plural, one {자격 증명 누락} other {자격 증명 #개 누락}}", + "missingCredentialsDescription": "{count, plural, one {이 위젯에는 자격 증명 하나가 더 필요합니다.} other {이 위젯에는 자격 증명 #개가 더 필요합니다.}} 이 배지를 선택하여 URL과 암호화된 값을 구성하세요." }, "create": { "title": "사용자 지정 위젯 생성", "subtitle": "API URL, 인증, 응답 데이터 표시 방식을 정의합니다." }, - "edit": { - "title": "사용자 지정 위젯 편집" + "tabs": { + "ariaLabel": "사용자 지정 위젯 섹션", + "installed": "설치됨", + "workshop": "워크숍" } }, "action": { - "create": "생성", - "import": "가져오기", - "save": "저장", + "pasteImportHint": "Ctrl+V 또는 Command+V를 사용하여 전체 사용자 지정 위젯 JSON 붙여넣기", "delete": "사용자 지정 위젯 삭제", "deleteConfirm": "\"{name}\"을(를) 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.", "export": "내보내기", - "edit": "편집", "duplicate": "복사", + "aiPrompt": "AI로 디자인", "copyAiPrompt": "AI 프롬프트 복사", "enable": "활성화", "disable": "비활성화", - "menu": "동작" + "menu": "동작", + "downloadSkill": "Custom Widget 스킬 보기", + "publishWorkshop": "Workshop에 게시", + "migrate": "Custom Widget 마이그레이션", + "configureSources": "소스 구성", + "copyLegacyDefinition": "원본 위젯 콘텐츠 복사", + "exportLegacyDefinition": "원본 위젯 콘텐츠 내보내기", + "copyMigrationPrompt": "LLM 마이그레이션 프롬프트 복사", + "pasteMigration": "마이그레이션된 위젯 붙여넣기", + "importMigration": "마이그레이션된 JSON 파일 가져오기" + }, + "sourceSetupDialog": { + "title": "위젯 소스 구성", + "description": "이 위젯이 연결되는 위치를 확인하고 암호화된 자격 증명을 추가하거나 교체하세요.", + "credentialsRequired": "필수 자격 증명을 추가할 때까지 요청이 실패합니다.", + "save": "구성 저장" }, "field": { - "name": "이름", - "description": "설명", - "iconUrl": "아이콘 URL" + "description": "설명" + }, + "editor": { + "errorBoundary": { + "title": "문제가 발생했습니다" + }, + "action": { + "components": "구성 요소", + "format": "서식", + "insertStarter": "시작 항목 삽입", + "redo": "다시 실행", + "copied": "복사됨", + "schema": "스키마" + }, + "reference": { + "minimal": "최소 예제", + "full": "전체 예제" + }, + "componentReference": { + "search": "구성 요소 검색", + "empty": "일치하는 구성 요소 없음", + "count": "사용 가능한 구성 요소 {count, number}개" + }, + "status": { + "errors": "오류 {count, number}개", + "warnings": "경고 {count, number}개", + "ready": "문제 없음", + "position": "{line, number}행, {column, number}열", + "characters": "문자 {count, number}개", + "charactersWithLimit": "{count, number} / {limit, number}" + }, + "diagnostics": { + "title": "템플릿 진단", + "line": "{line, number}행", + "ast": "{value}", + "bindingTypeConflict": "입력 \"{value}\"을 공유하는 컨트롤의 값 유형이 호환되지 않습니다.", + "runtimeBindingTypeConflict": "입력 \"{value}\"이 {firstType} 및 {secondType}으로 모두 바인딩되어 있습니다.", + "dynamicRequestId": "리터럴 requestId가 필요합니다. 동적 요청 ID는 허용되지 않습니다.", + "dynamicInputBinding": "bind에 리터럴 입력 이름이 필요합니다.", + "inlineRequestProps": "네트워크 구성 요소는 requestId와 params를 허용합니다. 인라인 URL, method, header 및 body 속성은 차단됩니다.", + "invalidRequestManifest": "이름이 지정된 요청은 유효한 요청 맵이어야 합니다. {value}", + "missingRequestId": "이 네트워크 구성 요소에는 리터럴 requestId가 필요합니다.", + "templateEmpty": "JSX 템플릿을 입력하세요.", + "templateTooLong": "템플릿이 50,000자 제한을 초과했습니다.", + "unknownRequest": "ID가 \"{value}\"인 이름이 지정된 요청이 없습니다." + } + }, + "workbench": { + "configure": "구성", + "sectionNavigation": "사용자 지정 위젯 섹션", + "widgetPreview": "위젯 미리보기", + "generalInformation": "일반 정보", + "invalidWidget": "유효하지 않은 위젯", + "section": { + "general": "일반", + "sources": "API 소스", + "requests": "요청", + "options": "옵션", + "jsx": "JSX", + "preview": "미리보기" + }, + "status": { + "unsaved": "저장되지 않은 변경 사항", + "invalid": "주의 필요", + "ready": "준비됨" + }, + "saveError": { + "title": "위젯이 저장되지 않음", + "description": "이 유효성 검사 오류를 수정한 후 다시 저장하세요.", + "more": "워크벤치에 오류가 {count}개 더 표시됩니다.", + "errors": "유효성 검사 오류", + "copy": "오류 복사", + "copied": "오류가 복사됨" + }, + "action": { + "preview": "테스트 및 미리보기", + "previewLoading": "요청 테스트 중" + }, + "requests": { + "title": "이름이 지정된 쿼리 및 작업", + "label": "요청", + "description": "쿼리는 데이터를 불러오고, 작업은 사용자 상호 작용 후에만 실행됩니다. 두 종류 모두 모든 HTTP 메서드를 사용할 수 있습니다." + }, + "options": { + "title": "위젯 옵션" + }, + "builder": { + "advancedManifest": "고급 원시 매니페스트", + "advancedJson": "고급 매니페스트 JSON", + "manifestFilename": "widget.json", + "request": "요청 {count, number}", + "requestId": "요청 ID", + "type": "다운로드 클라이언트 유형", + "method": "메서드", + "source": "API 소스", + "run": "실행", + "runLoad": "위젯이 로드될 때", + "runManual": "SubFetch에서", + "permission": "권한", + "path": "경로", + "pathDescription": "위젯 옵션에는 '{option:name}', 호출 값에는 '{param:name}'을 사용하세요.", + "requestDetails": "쿼리, 본문 및 동작", + "queryValues": "쿼리 값", + "queryKey": "쿼리 키", + "queryKeyInvalid": "문자로 시작하고 문자, 숫자, - 또는 _만 포함하는 고유 ID를 사용하세요.", + "valueSource": "값 소스", + "literal": "리터럴", + "widgetOption": "위젯 옵션", + "invocationParameter": "호출 매개변수", + "option": "옵션", + "parameterName": "매개변수 이름", + "value": "값", + "removeQueryValue": "쿼리 값 제거", + "addQueryValue": "쿼리 값 추가", + "jsonBody": "JSON 본문", + "jsonBodyDescription": "선택 사항입니다. 어느 깊이에서든 $option 및 $param 참조를 삽입할 수 있습니다.", + "insertOptionReference": "옵션 참조 삽입", + "insertParameterReference": "매개변수 참조 삽입", + "confirmation": "확인 메시지", + "invalidation": "성공 후 새로 고침", + "invalidationDescription": "쉼표로 구분된 쿼리 ID", + "noAuth": "소스 인증 없이 전송", + "moveRequestUp": "요청 위로 이동", + "moveRequestDown": "요청 아래로 이동", + "removeRequest": "요청 제거", + "addRequest": "요청 추가", + "optionName": "옵션 이름", + "label": "레이블", + "control": "컨트롤", + "description": "설명", + "default": "기본값", + "optionDetails": "제약 조건 및 동적 선택 항목", + "minimum": "최솟값", + "maximum": "최댓값", + "step": "단계", + "choiceLabel": "선택 항목 레이블", + "choiceValue": "선택 항목 값", + "newChoice": "새 선택 항목", + "addChoice": "선택 항목 추가", + "removeChoice": "선택 항목 제거", + "choicesRequest": "요청에서 선택 항목 로드", + "itemsPath": "항목 경로", + "itemsPathPlaceholder": "항목(선택 사항)", + "valuePath": "값 경로", + "labelPath": "레이블 경로", + "group": "그룹", + "advancedOption": "고급 옵션", + "moveOptionUp": "옵션 위로 이동", + "moveOptionDown": "옵션 아래로 이동", + "removeOption": "옵션 제거", + "addOption": "옵션 추가", + "invalidJson": "유효하지 않은 JSON", + "invalidWidget": "유효하지 않은 위젯" + }, + "jsx": { + "title": "JSX 템플릿", + "label": "템플릿" + }, + "sources": { + "title": "API 소스 및 자격 증명", + "newName": "API {count, number}", + "duplicateSourceId": "API 소스 ID는 고유해야 합니다.", + "credentialRemoved": "자격 증명 제거됨", + "credentialRemovedDescription": "저장된 값이 삭제되었습니다.", + "primary": "기본 API", + "id": "소스 ID", + "name": "작업 이름", + "baseUrl": "기본 URL", + "baseUrlError": { + "invalid": "완전한 URL을 입력하세요.", + "protocol": "HTTP 또는 HTTPS URL을 사용하세요.", + "credentials": "이 URL에서 사용자 이름과 비밀번호를 제거하세요. 대신 아래에서 자격 증명을 구성하세요.", + "queryOrFragment": "이 기본 URL에서 쿼리 문자열 또는 프래그먼트를 제거하세요. 이름이 지정된 요청에 쿼리 값을 추가하세요." + }, + "networkScope": "네트워크 액세스", + "authentication": "인증", + "headerName": "헤더 이름", + "queryParameter": "쿼리 매개변수", + "configured": "구성됨 — 교체 항목 입력", + "clear": "맑음", + "remove": "소스 및 해당 요청 제거", + "advanced": "고급", + "add": "다른 API 소스 추가", + "sourceType": "통합", + "manualSource": "HTTP API", + "existingIntegration": "기존 통합", + "integrationType": "통합 유형", + "selectIntegration": "구성된 통합", + "noIntegrations": "일치하는 통합을 사용할 수 없음", + "integrationUnavailable": "선택한 통합을 더 이상 사용할 수 없습니다. 다른 통합을 선택하세요.", + "integrationDescription": "저장된 통합 URL과 자격 증명을 사용합니다. 변경 사항은 자동으로 적용됩니다. 요청을 실행하려면 전체 통합 액세스 권한이 필요합니다." + }, + "ai": { + "title": "모든 AI로 생성 또는 수정", + "description": "API 문서 URL이 있다면 먼저 추가하세요. 수정하려면 가능하면 미리보기를 실행하세요. 프롬프트를 원하는 AI에 복사하면 누락된 세부 정보를 요청할 수 있습니다. 최종 JSON을 여기에 붙여넣으세요.", + "request": "이 위젯은 무엇을 해야 하나요?", + "documentationUrl": "API 문서 URL(선택 사항)", + "paste": "붙여넣기", + "response": "AI 응답", + "manualCopyDescription": "클립보드에 액세스할 수 없습니다. 아래 프롬프트를 선택하고 수동으로 복사하세요.", + "manualPasteDescription": "클립보드에 액세스할 수 없거나 복사한 응답을 수정해야 합니다. AI의 JSON 응답을 여기에 붙여넣으세요.", + "selectAll": "모두 선택", + "loadResponse": "응답 불러오기", + "loaded": "위젯이 편집기에 로드되었습니다", + "invalidResponse": "클립보드에 유효한 v2 위젯이 없습니다", + "invalidResponseDetail": "AI 응답이 유효하지 않습니다: {message}" + }, + "preview": { + "invalid": "이 위젯을 미리 보려면 유효성 검사 오류를 수정하세요.", + "fixtureError": "미리보기 픽스처 오류", + "requestData": "요청 데이터", + "status": { + "idle": "요청이 테스트되지 않았습니다", + "loading": "요청 테스트 중", + "success": "모든 로드 요청이 성공했습니다", + "error": "하나 이상의 로드 요청이 실패했습니다" + }, + "result": { + "loading": { + "title": "API 요청 테스트 중", + "description": "Homarr에서 미리보기 세션을 만들고 위젯 데이터를 로드하는 중입니다." + }, + "success": { + "title": "미리보기 준비 완료", + "description": "" + }, + "error": { + "title": "요청 오류와 함께 미리보기가 완료되었습니다", + "description": "성공 {succeeded, number}개, 실패 {failed, number}개입니다. 데이터를 열어 응답 및 오류 세부 정보를 확인하세요." + } + }, + "instanceOptions": "인스턴스 옵션", + "liveActions": "구성된 API에 대해 작업 실행", + "liveActionsDescription": "끔은 안전한 시뮬레이션입니다. 켜면 실제 서비스에 영향을 줍니다.", + "noActions": "정의된 작업이 없습니다.", + "containedFailures": "런타임 오류는 이 위젯 내부에서 처리됩니다. 요청 기록에는 보안 값이 포함되지 않습니다.", + "validation": { + "title": "유효성 검사", + "ready": "위젯 정의가 유효합니다." + }, + "accessibility": { + "title": "접근성 검사", + "ready": "일반적인 접근성 누락이 감지되지 않았습니다.", + "pending": "위젯 정의가 유효할 때 접근성 검사가 실행됩니다.", + "imageAlt": "모든 Image에 대체 텍스트를 추가하세요. 장식용 이미지에만 빈 alt를 사용하세요.", + "actionIconLabel": "모든 ActionIcon에 aria-label 또는 title을 추가하세요.", + "inputLabel": "모든 입력 필드에 표시 레이블 또는 접근 가능한 이름을 추가하세요." + }, + "journal": "민감 정보가 삭제된 요청 기록", + "actionParameters": "작업 매개변수(JSON)", + "invalidParameters": "선언된 문자열, 숫자 및 부울 매개변수 유형을 사용하세요.", + "runDestructive": "파괴적 작업 실행", + "runAction": "작업 실행", + "deleteConfirmation": "이 미리보기 작업은 구성된 API를 통해 원격 데이터를 변경합니다.", + "simulated": "작업이 시뮬레이션되었습니다", + "httpStatus": "HTTP {status, number}", + "tab": { + "widget": "위젯", + "data": "데이터", + "options": "옵션", + "state": "직업 상태", + "actions": "제어", + "diagnostics": "진단" + }, + "size": { + "compact": "간결", + "standard": "표준", + "wide": "넓게" + }, + "fixture": { + "live": "실시간", + "loading": "불러오는 중", + "empty": "비어 있음", + "error": "오류" + } + } + }, + "preview": { + "request": { + "permission": { + "view": "보기", + "modify": "수정", + "full": "전체" + } + } }, "notification": { "created": "\"{name}\" 위젯 생성 완료.", "updated": "\"{name}\" 위젯 업데이트 완료.", "deleted": "\"{name}\" 위젯 삭제 완료.", "imported": "위젯 가져오기 완료.", - "aiPromptCopied": "AI 프롬프트 클립보드에 복사됨", + "migrated": "레거시 위젯이 성공적으로 마이그레이션되었습니다. 기존 보드 배치에서 이제 v2 정의를 사용합니다.", + "migrationError": "레거시 위젯을 마이그레이션하지 못했습니다. 파일에서 homarr-custom-widget-v2 스키마를 사용하는지 확인하세요.", + "legacyDefinitionCopied": "원본 위젯 콘텐츠가 복사되었습니다. 저장된 자격 증명 값은 포함되지 않습니다.", + "legacyDefinitionCopyError": "원본 위젯 콘텐츠를 복사하지 못했습니다.", + "migrationPromptCopied": "민감 정보가 삭제된 마이그레이션 프롬프트가 복사되었습니다. LLM에 붙여넣고 단일 JSON 응답을 복사한 다음 '여기에 마이그레이션된 위젯 붙여넣기'를 선택하세요.", + "migrationPromptCopyError": "마이그레이션 프롬프트를 복사하지 못했습니다.", + "sourcesConfigured": "위젯 소스와 자격 증명이 저장되었습니다.", + "sourceConfigurationError": "위젯 소스를 구성하지 못했습니다.", + "aiPromptCopiedWithCount": "AI 프롬프트가 클립보드에 복사되었습니다({count, number}자).", "aiPromptCopyError": "프롬프트 클립보드 복사 실패. 브라우저에서 이 기능을 지원하지 않을 수도 있습니다.", - "createError": "위젯 생성 실패. API 엔드포인트에 도달할 수 있는지 확인해 보십시오.", + "aiPromptSent": "프롬프트가 전송되었습니다. 어시스턴트가 백그라운드에서 작업하는 동안 계속 편집할 수 있습니다.", "updateError": "위젯 업데이트 실패. 변경 사항이 저장되지 않습니다.", "importError": "위젯 가져오기 실패. 파일이 올바른 사용자 지정 위젯 JSON 내보내기 형식인지 확인해 주십시오.", "exportError": "위젯 내보내기 실패.", @@ -737,29 +1138,184 @@ "duplicateError": "위젯 복사 실패.", "toggleError": "위젯 상태 전환 실패.", "deleteError": "위젯 삭제 실패.", - "previewError": "미리보기 가져오기 실패. URL을 확인한 후 다시 시도해 주십시오.", - "executed": "작업 실행 완료.", - "executeError": "작업 실패: {error}" + "previewError": "미리보기 가져오기 실패. URL을 확인한 후 다시 시도해 주십시오." + }, + "importReview": { + "title": "사용자 지정 위젯 가져오기 검토", + "description": "가져오기 전에 이 위젯이 연결되는 위치와 컨트롤에 필요한 보드 액세스를 확인하세요.", + "migrationTitle": "마이그레이션된 v2 대체 항목 검토", + "migrationDescription": "생성된 v2 정의를 검토하고 확인하세요. 확인하면 보존된 v1 레코드가 원자적으로 대체되며, 기존 보드 배치는 동일한 위젯 ID에 연결된 상태로 유지됩니다.", + "fileLabel": "사용자 지정 위젯 JSON 파일 선택", + "name": "작업 이름", + "origin": "기본 출처", + "authentication": "인증", + "networkScope": "네트워크 범위", + "methods": "HTTP 메서드", + "permissions": "필요한 보드 권한", + "sourceSetup": { + "title": "API 소스 구성", + "description": "이 위젯이 연결되는 위치를 확인하고 자격 증명을 추가하세요. 비공개 및 루프백 URL은 Homarr 설치 환경에 따라 다릅니다.", + "suggestedUrl": "제안된 URL", + "confirmUrl": "이 서버 URL이 내 Homarr 설치 환경에 올바른지 확인합니다", + "ready": "URL 준비 완료", + "needsUrl": "URL 확인", + "credentialsMissing": "자격 증명 누락", + "credentialsOptional": "자격 증명 없이 설치한 후 나중에 구성할 수 있지만, 추가할 때까지 요청이 실패합니다." + }, + "actionWarning": { + "title": "이 위젯은 원격 데이터를 변경할 수 있습니다", + "description": "가져온 후 이름이 지정된 모든 작업, 상속된 자격 증명 및 파괴적 작업 확인을 검토하세요. 파일에는 비밀 정보가 포함되지 않습니다." + }, + "cancel": "가져오기 취소", + "confirm": "위젯 가져오기", + "confirmMigration": "v2 교체 확인" + }, + "secret": { + "apiKey": "API 키 또는 토큰", + "username": "사용자명", + "password": "비밀번호", + "savedPlaceholder": "••••••• (저장됨, 유지하려면 공백)" + } + }, + "workshop": { + "title": "워크숍", + "browseWorkshop": "워크숍 찾아보기", + "openCommunity": "워크숍 열기", + "openOnWorkshop": "워크숍 웹사이트에서 {title} 열기", + "back": "워크숍으로 돌아가기", + "search": "위젯 검색", + "searchCss": "CSS 테마 검색", + "sort": "정렬", + "sortTop": "평점순", + "sortNewest": "최신순", + "listAriaLabel": "워크숍 위젯", + "listAriaLabelCss": "워크숍 CSS 테마", + "empty": "이 검색과 일치하는 위젯이 없습니다.", + "emptyDescription": "워크숍에 게시된 커뮤니티 위젯이 여기에 표시됩니다.", + "emptyFilteredTitle": "이 검색과 일치하는 위젯이 없습니다", + "emptyFilteredDescription": "\"{search}\"와 일치하는 워크숍 위젯이 없습니다.", + "emptyCss": "이 검색과 일치하는 CSS 테마가 없습니다.", + "unavailableTitle": "Homarr 워크숍을 사용할 수 없는 것 같습니다", + "unavailable": "커뮤니티 서비스가 일시적으로 중단되었을 수 있습니다. 잠시 후 다시 시도하세요. 설치된 위젯에는 영향을 주지 않습니다.", + "loadError": "이 제출 항목을 로드할 수 없습니다.", + "noDescription": "설명 없음", + "author": "{name} 작성", + "communityMember": "커뮤니티 회원", + "outdated": "오래됨", + "outdatedWarning": "작성자가 이 제출 항목을 오래된 것으로 표시했습니다. 가져오기 전에 주의 깊게 검토하세요.", + "score": "점수: {count, number}", + "upvote": "추천", + "downvote": "비추천", + "voteError": "투표를 저장할 수 없습니다.", + "signIn": "GitHub로 로그인", + "signInError": "GitHub 로그인에 실패했습니다. 워크숍 OAuth 공급자가 구성되어 있고 팝업이 허용되는지 확인하세요.", + "signOut": "로그아웃", + "signInHint": "투표하거나 신고하려면 로그인하세요. 설치에는 워크숍 계정이 필요하지 않습니다.", + "securityNotice": "워크숍 위젯은 선언된 API 소스를 호출하고 로컬에서 구성한 자격 증명으로 선언된 작업을 수행할 수 있습니다. 비밀 정보는 절대 포함되지 않습니다.", + "securityNoticeCss": "커뮤니티 CSS는 보드의 모양과 사용성을 변경할 수 있습니다. 가져오기 전에 검토하세요. 보드 설정을 저장하기 전에는 아무것도 저장되지 않습니다.", + "install": "설치", + "installReviewTitle": "설치 전 검토", + "installError": "이 위젯은 설치할 수 없습니다", + "installErrorDescription": "워크숍 제출 항목이 유효한 Custom JSX v2 위젯이 아닙니다.", + "useCss": "CSS 가져오기", + "importCss": "워크숍에서 CSS 가져오기", + "importCssConfirm": "현재 사용자 지정 CSS를 \"{title}\"로 바꾸시겠습니까? 보드 설정을 저장하기 전에는 아무것도 저장되지 않습니다.", + "screenshotAlt": "{title} 스크린샷 {count, number}", + "screenshotViewer": "{title} 스크린샷 뷰어", + "screenshotsLabel": "{title} 스크린샷", + "zoomScreenshot": "전체 크기로 보기", + "previousScreenshot": "이전 스크린샷", + "nextScreenshot": "다음 스크린샷", + "showScreenshotThumbnails": "스크린샷 썸네일 표시", + "hideScreenshotThumbnails": "스크린샷 썸네일 숨기기", + "closeScreenshotViewer": "스크린샷 뷰어 닫기", + "technicalDetails": "기술 세부 정보", + "sourceCode": "워크숍 항목", + "export": "내보내기", + "report": "신고", + "reportTitle": "제출 항목 신고", + "reportReason": "이유", + "reportExplanation": "워크숍 중재자가 알아야 할 내용은 무엇인가요?", + "reportSend": "신고 보내기", + "reportSent": "신고 전송됨", + "reportSentDescription": "이제 워크숍 중재자가 이 제출 항목을 검토할 수 있습니다.", + "reportCount": "{count, plural, other {신고 #건}}", + "reportWarning": "{count, plural, other {이 제출 항목에는 공개 커뮤니티 신고가 #건 있습니다.}} 설치할 수는 있지만 먼저 콘텐츠를 검토해야 합니다.", + "reportVisibility": "신고 세부 정보는 이 제출 항목의 작성자와 워크숍 관리자에게만 표시됩니다.", + "reportCategory": { + "outdated": "오래되었거나 더 이상 작동하지 않음", + "malicious": "악성", + "spam": "스팸", + "copyright": "저작권", + "inappropriate": "부적절함", + "other": "기타" + }, + "publish": { + "title": "워크숍에 게시", + "introTitle": "이 위젯을 커뮤니티와 공유", + "introDescription": "Homarr에서 현재 위젯의 자격 증명 없는 복사본을 내보냅니다. 사람들이 설치하기 전에 위젯의 기능을 알 수 있도록 명확한 목록 세부 정보를 추가하세요.", + "listingDetails": "워크숍 목록", + "listingDetailsDescription": "이 세부 정보는 내보낸 위젯 정의와 함께 공개적으로 표시됩니다.", + "success": "즉시 게시되었습니다. 이제 커뮤니티 회원이 이 위젯을 설치하고 신고할 수 있습니다.", + "successTitle": "위젯이 게시되었습니다", + "manageDescription": "제출 항목을 열어 목록을 업데이트하고, 신고를 검토하고, 오래된 것으로 표시하거나 삭제하세요. 제출 항목 관리는 워크숍 웹사이트에서 직접 처리됩니다.", + "viewSubmission": "제출 항목 보기 및 관리", + "done": "완료", + "signInHint": "워크숍 계정으로 게시하려면 로그인하세요.", + "titleField": "제목", + "descriptionField": "설명", + "screenshots": "스크린샷", + "screenshotsDescription": "PNG, JPEG 또는 WebP 이미지 최대 5개", + "screenshotsPlaceholder": "스크린샷 선택", + "invalidScreenshot": "각각 {maxSize} 이하인 PNG, JPEG 또는 WebP 이미지를 사용하세요.", + "privateSourceWarning": "이 위젯에는 다음에 대한 비공개 소스 URL이 포함되어 있습니다: {sources}. 게시하기 전에 개인 호스트 또는 IP 주소를 안전한 서비스 자리 표시자로 바꾸세요.", + "reviewSourcesTitle": "비공개 소스 URL 검토", + "privateSourceConfirmation": "이 소스 URL을 검토했으며 비공개 인프라 세부 정보를 노출하지 않는다는 것을 확인합니다", + "action": "지금 게시", + "publicationNote": "게시가 즉시 진행됩니다. 이후 워크숍에서 제출 항목을 관리할 수 있습니다.", + "definitionChanged": "게시를 준비하는 동안 위젯이 변경되었습니다. 비공개 소스 URL을 다시 검토한 후 재시도하세요.", + "error": "게시 실패" } }, "integration": { + "completion": { + "modalTitle": "서비스 준비 완료", + "title": "{name} 연결됨", + "description": "연결 테스트를 통과했습니다. 다음으로 이 보드에 표시할 항목을 선택하세요.", + "connectionReady": "서비스 연결 준비 완료", + "appReady": "앱 바로 가기 준비 완료", + "compatibleWidgets": "", + "chooseWidget": "위젯 선택", + "recipes": { + "title": "이 보드에 권장", + "description": "연결된 서비스와 이 보드에 이미 있는 위젯을 기반으로 합니다.", + "newConnectionReason": "이제 {integration}을 통해 사용 가능", + "existingConnectionReason": "이미 연결한 서비스에서 작동", + "dismiss": "이 보드에서 이 서비스에 대한 추천 닫기" + } + }, "page": { "list": { - "title": "통합", + "ariaLabel": "구성된 통합", "search": "통합 검색", + "scopedNote": "관리 권한이 있는 통합만 표시합니다.", "noResults": { - "title": "아직 통합이 없습니다" + "title": "아직 통합이 없습니다", + "description": "Homarr 위젯에서 해당 서비스의 데이터와 작업을 사용하려면 서비스를 연결하세요.", + "action": "첫 번째 통합 만들기", + "filteredTitle": "검색과 일치하는 통합이 없습니다", + "filteredDescription": "\"{search}\"와 일치하는 통합이 없습니다. 다른 이름, 유형 또는 URL을 시도하세요.", + "createOnlyTitle": "통합만 추가할 수 있습니다", + "createOnlyDescription": "통합을 만들 수 있지만 기존 통합은 관리할 수 있는 권한이 없습니다. 필요한 통합에 액세스하려면 관리자에게 요청하세요." } }, "create": { "title": "새 {name} 통합", "notification": { "success": { - "title": "생성 완료", "message": "통합 생성 완료" }, "error": { - "title": "생성 실패", "message": "통합 생성에 실패했습니다" } }, @@ -783,11 +1339,9 @@ "title": "{name} 통합 편집", "notification": { "success": { - "title": "변경 사항 적용 완료", "message": "통합 저장 완료" }, "error": { - "title": "변경 사항을 적용할 수 없습니다", "message": "통합을 저장할 수 없었습니다" } }, @@ -804,23 +1358,15 @@ "message": "{name} 통합을 삭제하시겠습니까?", "notification": { "success": { - "title": "삭제 성공", "message": "통합 삭제 완료" }, "error": { - "title": "삭제 실패", "message": "통합을 삭제할 수 없습니다" } } } }, "field": { - "name": { - "label": "이름" - }, - "url": { - "label": "URL" - }, "attemptSearchEngineCreation": { "label": "검색 엔진 생성", "description": "\"{kind}\" 통합은 검색 엔진과 함께 사용할 수 있습니다. 검색 엔진을 자동 설정하려면 이 항목을 선택하십시오." @@ -832,6 +1378,10 @@ "label": "앱 생성", "description": "통합과 동일한 아이콘 및 이름을 가진 앱을 생성합니다. 아래 입력 필드를 비워두면 통합 URL이 있는 앱을 만들 수 있습니다." }, + "linkApp": { + "label": "기존 앱 연결", + "description": "이 통합을 이미 사용할 수 있는 앱에 연결하세요." + }, "appHref": { "placeholder": "커스텀 앱 URL" }, @@ -845,7 +1395,11 @@ "grid": { "widgetCount": "위젯 {count}개", "noWidgets": "위젯 없음", - "detected": "Docker에서 탐지됨" + "detected": "Docker에서 탐지됨", + "connected": "{count, plural, other {#개 연결됨}}", + "tiedWidgets": "연결된 위젯", + "more": "+{count}개 더 보기", + "loadError": "통합을 로드할 수 없습니다. 새 연결을 만들기 전에 다시 시도하세요." }, "category": { "dnsHole": "DNS", @@ -876,7 +1430,10 @@ "analytics": "분석", "vpn": "VPN", "mediaLibrary": "미디어 라이브러리", - "uptimeMonitoring": "업타임 모니터링" + "uptimeMonitoring": "업타임 모니터링", + "beszel": "Beszel", + "systemMonitoring": "시스템 모니터링", + "security": "보안" }, "testConnection": { "action": { @@ -1161,6 +1718,22 @@ "slug": { "label": "상태 페이지 슬러그", "newLabel": "새 상태 페이지 슬러그" + }, + "wazuhIndexerUrl": { + "label": "인덱서 URL", + "newLabel": "새 인덱서 URL" + }, + "wazuhIndexerUsername": { + "label": "인덱서 사용자 이름", + "newLabel": "새 인덱서 사용자 이름" + }, + "wazuhIndexerPassword": { + "label": "인덱서 비밀번호", + "newLabel": "새 인덱서 비밀번호" + }, + "wazuhDashboardUrl": { + "label": "대시보드 URL(선택 사항)", + "newLabel": "새 대시보드 URL" } } }, @@ -1169,54 +1742,19 @@ "interact": "통합과 상호작용", "full": "전체 통합 접근" }, - "audiobookshelf": { - "name": "Audiobookshelf", - "description": "셀프 호스팅 오디오북 및 팟캐스트 서버" - }, - "navidrome": { - "name": "Navidrome", - "description": "Subsonic API 호환성을 갖춘 셀프 호스팅 음악 스트리밍 서버" - }, - "uptimeKuma": { - "name": "Uptime Kuma", - "description": "공개 상태 페이지가 있는 셀프 호스팅 가동 시간 모니터링", - "secret": { - "slug": { - "description": "공개 상태 페이지의 슬러그입니다. 설정하지 않으면 기본값은 \"default\"입니다." - }, - "apiKey": { - "description": "인증된 /metrics 액세스를 위한 선택적 API 키" - } - } - }, - "traefik": { - "name": "Traefik", - "description": "클라우드 네이티브 리버스 프록시 및 로드 밸런서" - }, - "paperlessNgx": { - "name": "Paperless-ngx", - "description": "스캔된 문서를 보관하고 정리하는 문서 관리 시스템" - }, - "patchmon": { - "name": "PatchMon", - "description": "Linux 호스트용 패치 관리 및 모니터링" - }, - "bazarr": { - "name": "Bazarr", - "description": "Sonarr와 Radarr의 보조 애플리케이션으로, 자막을 관리하고 다운로드합니다" - }, - "wud": { - "name": "왓츠업 도커", - "description": "Docker 컨테이너 중 이미지 업데이트가 가능한 것을 모니터링합니다." + "llamacpp": { + "name": "llama.cpp", + "description": "로컬 llama.cpp llama-server 모니터링: 상태, 모델 및 생성 지표" } }, "media": { "plural": "미디어", "search": "미디어 찾기", "field": { - "name": "이름", + "preview": "미리보기", "size": "크기", - "creator": "크리에이터" + "creator": "크리에이터", + "actions": "제어" }, "action": { "upload": { @@ -1244,10 +1782,12 @@ } }, "copy": { - "label": "URL 복사" + "label": "URL 복사", + "labelNamed": "{name}의 URL 복사" }, "open": { - "label": "미디어 열기" + "label": "미디어 열기", + "labelNamed": "{name} 열기" } }, "noResults": { @@ -1262,7 +1802,6 @@ "add": "추가", "apply": "적용", "backToOverview": "개요로 돌아가기", - "skip": "건너뛰기", "change": "변경", "create": "만들기", "createAnother": "만들고 다시 시작", @@ -1285,16 +1824,31 @@ "tryAgain": "다시 시도", "loading": "불러오는 중", "show": "표시", - "hide": "숨기기" + "hide": "숨기기", + "undo": "실행 취소", + "editNamed": "{name} 편집", + "deleteNamed": "{name} 삭제", + "clearSearch": "검색 지우기", + "copy": "복사", + "copied": "복사됨", + "refresh": "새로고침" + }, + "pagination": { + "pageOf": "{totalPages}페이지 중 {page}페이지" }, "here": "여기", + "serviceUrlTemplate": { + "serverTitle": "일반적인 서버 주소", + "urlModeLabel": "서비스 주소 패턴", + "hostPort": "동일한 호스트, 다른 포트", + "subdomain": "서비스마다 하나의 하위 도메인", + "path": "서비스마다 하나의 경로" + }, "iconPicker": { "label": "아이콘 URL", + "description": "라이브러리에서 검색하거나, 이미지 URL을 붙여넣거나, 파일을 업로드하세요.", "header": "이름 또는 주제를 입력해 아이콘을 필터링하세요... Homarr가 {countIcons}에서 아이콘을 검색합니다", "headerLoading": "아이콘을 검색하려면 입력", - "noResults": "\"{search}\"에 일치하는 아이콘이 없습니다.", - "error": "아이콘을 불러올 수 없습니다.", - "description": "라이브러리에서 검색하거나, 이미지 URL을 붙여넣거나, 파일을 업로드하세요.", "clear": "이미지 지우기", "uploadImage": "이미지 업로드", "results": "이미지 검색 결과", @@ -1303,7 +1857,9 @@ "otherImages": "기타 이미지", "urlLoading": "이미지 확인 중…", "urlReady": "이미지 사용 준비 완료", - "urlError": "이 이미지는 불러올 수 없습니다. URL을 확인하고 다시 시도하십시오." + "urlError": "이 이미지는 불러올 수 없습니다. URL을 확인하고 다시 시도하십시오.", + "noResults": "\"{search}\"에 일치하는 아이콘이 없습니다.", + "error": "아이콘을 불러올 수 없습니다." }, "colorScheme": { "options": { @@ -1315,7 +1871,6 @@ "information": { "min": "최소", "max": "최대", - "days": "일", "hours": "시간", "minutes": "분" }, @@ -1352,16 +1907,16 @@ }, "userAvatar": { "menu": { - "switchToDarkMode": "다크 모드로 전환", - "switchToLightMode": "라이트 모드로 전환", + "open": "계정 메뉴 열기", "management": "관리", - "docker": "Docker", "preferences": "기본 설정", "logout": "로그아웃", "login": "로그인", "homeBoard": "당신의 홈 보드", - "loggedOut": "로그아웃됨", - "updateAvailable": "{countUpdates} 업데이트 가능: {tag}" + "updateAvailable": "{countUpdates} 업데이트 가능: {tag}", + "assistant": "어시스턴트", + "assistantThinking": "생각 중", + "modifier": "수정자" } }, "dangerZone": "위험한 설정", @@ -1409,13 +1964,66 @@ "kilometersPerHour": "km/h", "milesPerHour": "mph" } + }, + "widgetQuery": { + "loading": "위젯 데이터 로드 중" + }, + "total": "합계", + "filesystemUsage": "{count, plural, other {#개 파일 시스템의 사용량 표시}}", + "field": { + "name": "작업 이름" + }, + "label": { + "new": "신규" + }, + "entity": { + "apps": "앱", + "boards": "보드", + "certificates": "인증서", + "customWidgets": "사용자 지정 위젯", + "groups": "그룹", + "integrations": "통합", + "invites": "초대", + "logs": "로그", + "media": "미디어", + "searchEngines": "검색 엔진", + "tasks": "작업", + "users": "사용자" } }, "section": { - "dynamic": { + "option": { + "showLabel": { + "label": "레이블 표시", + "description": "컨테이너 콘텐츠 위에 컨테이너 레이블을 표시합니다." + }, + "collapsible": { + "label": "접기 허용", + "description": "보는 사람이 이 컨테이너를 펼치고 접을 수 있도록 합니다." + }, + "showOpenAll": { + "label": "모두 열기 작업 표시", + "description": "이 컨테이너의 모든 앱을 새 탭에서 여는 작업을 표시합니다." + }, + "scrollable": { + "label": "스크롤 가능", + "description": "이 컨테이너를 설정된 크기로 유지하고, 콘텐츠에 맞게 확장하는 대신 콘텐츠를 스크롤합니다." + } + }, + "action": { + "openAllInNewTabsFor": "{name}의 모든 앱을 탭에서 열기" + }, + "openAllInNewTabs": { + "title": "탭에서 모두 열기", + "text": "일부 브라우저는 보안상의 이유로 탭의 대량 열기를 차단할 수 있습니다. 브라우저가 이 작업을 차단했기 때문에 Homarr가 모든 창을 열지 못했습니다. \"팝업 창 열기\"를 허용한 후 다시 시도해 주십시오." + }, + "container": { + "untitled": "제목 없는 컨테이너", "action": { - "create": "새 동적 섹션", - "remove": "동적 섹션 제거" + "create": "새 컨테이너", + "remove": "컨테이너 제거", + "expand": "펼치기", + "collapse": "접기" }, "option": { "title": { @@ -1429,55 +2037,12 @@ } }, "remove": { - "title": "동적 섹션 제거", - "message": "이 동적 섹션을 제거하시겠습니까? 항목은 상위 섹션의 동일한 위치로 이동합니다." - } - }, - "category": { - "field": { - "name": { - "label": "이름" - } - }, - "action": { - "create": "새 카테고리", - "edit": "카테고리 이름 변경", - "remove": "카테고리 제거", - "moveUp": "위로 이동", - "moveDown": "아래로 이동", - "createAbove": "위에 새 카테고리 생성", - "createBelow": "아래 새 카테고리 생성", - "openAllInNewTabs": "탭에서 모두 열기" - }, - "create": { - "title": "새 카테고리", - "submit": "카테고리 추가" - }, - "remove": { - "title": "카테고리 제거", - "message": "{name} 카테고리를 제거하시겠습니까?" - }, - "edit": { - "title": "카테고리 이름 변경", - "submit": "카테고리 이름 변경" - }, - "menu": { - "label": { - "create": "새 카테고리", - "changePosition": "위치 변경", - "settings": "설정" - } - }, - "openAllInNewTabs": { - "title": "탭에서 모두 열기", - "text": "일부 브라우저는 보안상의 이유로 탭의 대량 열기를 차단할 수 있습니다. 브라우저가 이 작업을 차단했기 때문에 Homarr가 모든 창을 열지 못했습니다. \"팝업 창 열기\"를 허용한 후 다시 시도해 주십시오." + "message": "이 컨테이너를 제거하시겠습니까? 콘텐츠가 주변 영역으로 이동합니다." } } }, "item": { "action": { - "create": "새 항목", - "import": "항목 가져오기", "edit": "항목 편집", "moveResize": "항목 이동 / 크기변경", "duplicate": "항목 복사", @@ -1486,7 +2051,7 @@ "menu": { "label": { "settings": "설정", - "refresh": "새로고침", + "settingsFor": "{name} 설정", "options": "옵션", "actions": "동작" }, @@ -1495,21 +2060,96 @@ "error": "오류", "loading": "불러오는 중", "idle": "대기" + }, + "notification": { + "saveError": { + "title": "위젯을 저장할 수 없음", + "message": "위젯 변경 사항이 롤백되었습니다" + } } }, "create": { "title": "추가할 항목을 선택", "search": "아이템 필터", - "addToBoard": "보드에 추가" + "addToBoard": "보드에 추가", + "addAtPosition": "여기에 항목 추가", + "destination": { + "label": "추가 위치", + "description": "위젯을 표시할 위치를 선택하세요. 나중에 이동할 수 있습니다.", + "mainCanvas": "기본 캔버스", + "leftRail": "왼쪽 레일", + "rightRail": "오른쪽 레일" + }, + "connectionStatus": { + "ready": "준비됨", + "needsSetup": "설정 필요", + "noConnectionRequired": "연결 필요 없음" + }, + "customWidget": "사용자 지정 위젯", + "standalone": "독립 실행형", + "missingIntegration": { + "title": "먼저 서비스 연결", + "noPermission": "이 위젯에는 호환되는 서비스 연결이 필요합니다. 관리자에게 연결을 요청한 후 다시 시도하세요." + }, + "notification": { + "success": { + "title": "위젯 추가됨", + "message": "{name}이 이 보드에 추가되었습니다.", + "relocatedMessage": "선택한 위치를 사용할 수 없어 {name}이 {destination}에 추가되었습니다." + }, + "error": { + "title": "항목을 추가할 수 없음", + "message": "이 보드에 항목을 추가할 수 없습니다" + } + } + }, + "selection": { + "summary": "{count, plural, other {#개 항목 선택됨}}", + "selected": "{count, plural, other {#개 선택됨}}", + "copy": "복사", + "copied": "{count, plural, other {클립보드에 항목 #개 복사됨}}", + "copyError": "선택한 항목을 복사할 수 없습니다. 브라우저에서 클립보드 액세스를 허용하지 않을 수 있습니다.", + "paste": "붙여넣기", + "pasteShortcut": "여기에 복사한 항목 붙여넣기(Ctrl / ⌘ + V)", + "pasted": "{count, plural, other {항목 #개 붙여넣음}}", + "pasteError": "클립보드를 읽을 수 없습니다. 브라우저에서 클립보드 액세스를 허용하지 않을 수 있습니다.", + "pasteInvalid": "클립보드에 유효한 Homarr 보드 항목이 없습니다.", + "pasteUnavailable": "복사한 항목이 이 보드에 맞지 않습니다.", + "removed": "{count, plural, other {항목 #개 제거됨}}", + "move": "이동", + "moveTo": "선택한 항목 이동", + "delete": "삭제", + "clear": "선택 해제", + "clearShortcut": "선택 해제(Escape)", + "saveErrorTitle": "항목을 업데이트할 수 없음", + "saveErrorMessage": "변경 사항을 저장할 수 없습니다. 보드가 새로 고쳐졌습니다.", + "moveUnavailableTitle": "선택한 항목을 이동할 수 없음", + "moveUnavailableMessage": "대상에 선택한 항목 전체를 배치할 공간이 부족합니다." }, "moveResize": { "title": "항목 이동 / 크기변경", + "entryLabel": "{name}, 열 {column}, 행 {row}", + "target": { + "numbered": "{name}, 대상 {index}", + "located": "{name}, {location}, 대상 {index}" + }, + "keyboard": { + "instructions": "Enter 또는 Space를 눌러 키보드 편집을 시작하세요. 화살표 키로 이동하고 Shift와 화살표 키로 크기를 조정하며 Escape로 종료하세요.", + "started": "키보드 편집이 시작되었습니다. 화살표 키로 이동하고 Shift와 화살표 키로 크기를 조정하며 Escape로 종료하세요.", + "stopped": "키보드 편집이 중지되었습니다.", + "boundary": "이 변경 사항은 이 섹션 안에 배치할 수 없습니다." + }, "field": { + "section": { + "label": "섹션 또는 레일" + }, "width": { - "label": "너비" + "label": "너비", + "shortLabel": "너비" }, "height": { - "label": "높이" + "label": "높이", + "shortLabel": "높이" }, "xOffset": { "label": "X 오프셋" @@ -1523,18 +2163,36 @@ "title": "항목 편집", "tab": { "widget": "위젯 편집", - "app": "앱 편집" + "app": "앱 편집", + "integration": "통합 편집" }, "app": { "propagationNotice": "이 앱의 변경 사항은 전체 대시보드에 적용됩니다." }, + "integration": { + "action": "연결 편집", + "description": "이 위젯을 벗어나지 않고 선택한 연결을 테스트하거나 복구하세요.", + "editLabel": "{name} 통합 편집", + "fullAccessRequired": "전체 액세스 필요", + "propagationNotice": "이 통합에 대한 변경 사항은 사용되는 모든 곳에 적용됩니다. 저장하기 전에 연결이 테스트됩니다.", + "loading": "통합 로드 중", + "loadError": "이 통합을 로드할 수 없습니다. 연결 설정을 변경하기 전에 다시 시도하세요." + }, + "preview": { + "integrationRequired": "이 위젯을 미리 보려면 연결을 선택하세요.", + "size": "파일 크기" + }, + "settings": { + "label": "위젯 설정" + }, "advancedOptions": { "label": "고급 옵션", "title": "고급 항목 옵션" }, "field": { "integrations": { - "label": "통합" + "label": "통합", + "removeLabel": "{name} 통합 제거" }, "title": { "label": "제목" @@ -1548,17 +2206,18 @@ } }, "remove": { - "title": "항목 제거", "message": "이 항목을 제거하시겠습니까?" + }, + "advancedFocus": { + "open": "고급 보기 열기", + "close": "고급 보기 닫기", + "label": "{widget} 고급 보기" } }, "widget": { "integrationSelect": { "configureIntegrationFirst": "먼저 통합에 연결하십시오", - "loading": "불러오는 중...", - "placeholder": "옵션 선택", - "noResults": "결과 없음", - "loadError": "옵션 불러오기 실패" + "placeholder": "옵션 선택" }, "app": { "name": "앱", @@ -1567,9 +2226,6 @@ "appId": { "label": "앱 선택" }, - "openInNewTab": { - "label": "새 탭에서 열기" - }, "showTitle": { "label": "앱 이름 표시" }, @@ -1577,11 +2233,8 @@ "label": "상태 체크 활성화" }, "layout": { - "label": "레이아웃", "option": { - "row": "가로", "row-reverse": "가로(역방향)", - "column": "세로", "column-reverse": "세로(역방향)" } }, @@ -1606,23 +2259,60 @@ "name": "북마크", "description": "여러 앱 링크 표시", "option": { - "title": { - "label": "제목" + "showTitle": { + "label": "위젯 제목 표시" + }, + "titleSize": { + "label": "위젯 제목 크기(px)" }, "layout": { "label": "레이아웃", "option": { - "row": { - "label": "수평" - }, - "column": { - "label": "세로" - }, - "grid": { - "label": "그리드" + "adaptive": { + "label": "반응형" }, "gridHorizontal": { "label": "가로 그리드" + }, + "icons": { + "label": "아이콘" + } + } + }, + "variant": { + "label": "모양", + "option": { + "soft": { + "label": "부드럽게" + }, + "filled": { + "label": "채워짐" + }, + "outline": { + "label": "윤곽선" + }, + "plain": { + "label": "일반" + } + } + }, + "spacing": { + "label": "카드 간격", + "option": { + "xs": { + "label": "매우 작게" + }, + "sm": { + "label": "작게" + }, + "md": { + "label": "보통" + }, + "lg": { + "label": "크게" + }, + "xl": { + "label": "매우 크게" } } }, @@ -1635,17 +2325,28 @@ "hideHostname": { "label": "호스트네임 숨기기" }, - "openNewTab": { - "label": "새 탭에서 열기" - }, "withBorder": { "label": "테두리 표시" }, + "grow": { + "label": "행을 가득 채우도록 카드 확장" + }, + "customUrls": { + "label": "사용자 지정 링크" + }, "items": { "label": "북마크", - "add": "북마크 추가" + "remove": "북마크 제거", + "apps": { + "label": "북마크 추가", + "description": "URL을 붙여넣거나 기존 앱을 찾으세요. 아래의 북마크를 드래그하여 순서를 변경할 수 있습니다.", + "placeholder": "URL 붙여넣기 또는 앱 검색", + "addUrl": "이 URL 추가", + "hint": "Enter 키를 눌러 URL을 추가하세요. 여러 개를 추가하려면 쉼표로 구분하거나 한 줄에 하나씩 URL을 붙여넣으세요." + } } - } + }, + "empty": "위젯 설정에서 URL 또는 앱을 추가하세요" }, "archiveTeamWarrior": { "name": "ArchiveTeam Warrior", @@ -1654,33 +2355,61 @@ "showBroadcastMessage": { "label": "방송 메시지 표시" } + }, + "noProjectSelected": "선택된 프로젝트 없음", + "runnerStatus": "실행기: {status}", + "projectId": "프로젝트: {id}", + "sessionReceived": "세션 수신됨: {value}", + "sessionSent": "세션 전송됨: {value}", + "sessionId": "세션: {id}", + "startedAt": "{date}에 시작됨", + "emptyItems": "이 스냅샷에 활성 작업이나 최근 작업이 없습니다", + "metric": { + "running": "실행 중", + "completed": "완료", + "failed": "실패", + "canceled": "취소됨", + "download": "다운로드", + "upload": "업로드" + }, + "status": { + "running": "실행 중", + "completed": "완료", + "failed": "실패", + "canceled": "취소됨", + "stopped": "중지됨", + "idle": "대기", + "unknown": "알 수 없음" + } + }, + "wud": { + "name": "왓츠업 도커", + "description": "모니터링 중인 컨테이너에서 사용 가능한 업데이트 수를 표시합니다.", + "title": "What's Up Docker", + "monitored": "모니터링 중", + "updatesAvailable": "{count, plural, other {업데이트 #개 사용 가능}}", + "updateAvailable": "업데이트 사용 가능", + "openReleaseNotes": "릴리스 노트 열기", + "option": { + "showRing": { + "label": "업데이트 링 표시" + }, + "showUpdateList": { + "label": "컨테이너 업데이트 목록 표시", + "description": "이미지 업데이트가 있는 각 모니터링 컨테이너를 나열합니다." + } } }, "dnsHoleSummary": { "name": "DNS 홀 요약", "description": "DNS 홀의 요약을 표시합니다", "option": { - "layout": { - "label": "레이아웃", - "option": { - "row": { - "label": "수평" - }, - "column": { - "label": "세로" - }, - "grid": { - "label": "그리드" - } - } - }, "usePiHoleColors": { "label": "Pi-Hole 색상 사용" } }, "error": { - "internalServerError": "DNS 홀 요약을 가져오지 못했습니다", - "integrationsDisconnected": "데이터 없음, 모든 통합 연결 해제됨" + "internalServerError": "DNS 홀 요약을 가져오지 못했습니다" }, "data": { "adsBlockedToday": "오늘 차단됨", @@ -1688,32 +2417,24 @@ "dnsQueriesToday": "오늘 쿼리", "domainsBeingBlocked": "차단 목록의 도메인" }, - "domainsTooltip": "여러 통합으로 인해 Homarr가 차단된 도메인의 정확한 수를 계산할 수 없습니다" + "domainsTooltip": "여러 통합으로 인해 Homarr가 차단된 도메인의 정확한 수를 계산할 수 없습니다", + "status": { + "enabled": "활성화됨", + "disabled": "장애인", + "unknown": "알 수 없음" + } }, "dnsHoleControls": { "name": "DNS 홀 제어", "description": "대시보드에서 PiHole 또는 AdGuard를 제어하세요.", "option": { - "layout": { - "label": "레이아웃", - "option": { - "row": { - "label": "수평" - }, - "column": { - "label": "세로" - }, - "grid": { - "label": "그리드" - } - } - }, "showToggleAllButtons": { "label": "모두 토글 버튼 표시" } }, "error": { - "internalServerError": "DNS 홀 제어 실패" + "internalServerError": "DNS 홀 제어 실패", + "bulkActionsFailed": "{count, plural, other {#개 작업이 실패했습니다}}" }, "controls": { "enableAll": "모두 활성화", @@ -1724,8 +2445,6 @@ "disabled": "장애인", "processing": "처리 중", "disconnected": "연결 해제됨", - "hours": "시간", - "minutes": "분", "unlimited": "무제한으로 하려면 비워 두세요" } }, @@ -1737,16 +2456,10 @@ "label": "커스텀 제목/도시 표시", "description": "시계 위에 커스텀 제목 또는 도시/국가 이름 표시." }, - "customTitle": { - "label": "제목" - }, "is24HourFormat": { "label": "24시간 형식", "description": "12시간 형식 대신 24시간 형식 사용" }, - "showSeconds": { - "label": "초 단위 표시" - }, "useCustomTimezone": { "label": "고정 시간대 사용" }, @@ -1765,29 +2478,295 @@ "label": "커스텀 시간 형식", "description": "ISO 8601을 사용하여 시간 형식 지정 (다른 옵션 무시)" }, - "customDateFormat": { - "label": "커스텀 날짜 형식", - "description": "ISO 8601을 사용하여 날짜 형식 지정 (다른 옵션 무시)" - }, "showWeather": { "label": "날씨 표시", "description": "카드 모서리에 작은 애니메이션 날씨 아이콘과 온도를 표시합니다" }, - "weatherLocation": { - "label": "날씨 위치" - }, "isWeatherFormatFahrenheit": { "label": "화씨 사용" + }, + "animateWeatherIcon": { + "label": "날씨 아이콘 애니메이션", + "description": "날씨 아이콘에 애니메이션을 적용합니다. 기본적으로 비활성화되어 있으며 동작 감소가 요청된 경우 항상 비활성화됩니다." + }, + "colorWeatherByDayNight": { + "label": "낮/밤에 따라 날씨 색상 표시", + "description": "선택한 위치가 현재 낮인지 밤인지에 따라 날씨 아이콘과 기온을 낮 색상 또는 밤 색상으로 표시합니다." + }, + "dayWeatherColor": { + "label": "낮 색상" + }, + "nightWeatherColor": { + "label": "밤 색상" + }, + "worldClockCities": { + "label": "세계 시계 도시", + "description": "최대 6개 도시를 추가하고 순서를 지정하여 고급 보기에서 사용하세요." } + }, + "timezoneList": { + "timezone": "시간대", + "cityLabel": "도시 라벨", + "searchPlaceholder": "시간대 검색", + "noResults": "시간대를 찾을 수 없음", + "unsupportedOption": "지원되지 않음: {timeZone}", + "add": "도시 추가", + "remove": "{city} 제거", + "reorder": "{city} 순서 변경", + "limit": "{maximum}개 도시 중 {count}개 구성됨" + }, + "worldClock": { + "primary": "기본 시계", + "local": "현지 시간", + "today": "오늘", + "tomorrow": "내일", + "yesterday": "어제", + "noSecondaryCities": "여기에서 비교하려면 위젯 옵션에서 도시를 추가하세요.", + "unsupportedPrimaryTitle": "기본 시간대를 사용할 수 없음", + "unsupportedPrimary": "{timeZone}은 이 브라우저에서 지원되지 않습니다. 명확히 표시된 대체값으로 UTC를 표시합니다.", + "unsupportedTimeZone": "지원되지 않는 시간대: {timeZone}", + "accessibleTime": "{city}: {time}, {date}, {timeZone}", + "advancedLabel": "고급 세계 시계", + "cities": "세계 시계", + "cityCount": "시간대 {count}개", + "timeBarLabel": "{city}의 24시간 기준 현재 시각 위치", + "dayProgress": "{percent}% 경과 · {hours}시간 {minutes}분 남음", + "phaseLegend": "시간대 범례", + "tick": { + "midnight": "00", + "morning": "06", + "noon": "12", + "evening": "18", + "end": "24" + }, + "phaseRange": { + "night": "00–05 · 21–24", + "dawn": "05–08", + "day": "08–18", + "dusk": "18–21" + }, + "phase": { + "night": "밤", + "dawn": "새벽", + "day": "낮", + "dusk": "해질녘" + } + } + }, + "airQuality": { + "name": "대기질 및 자외선", + "description": "위치의 대기질, 자외선 지수, 오염 물질 및 꽃가루를 표시합니다.", + "option": { + "location": { + "label": "대기질 위치" + }, + "aqiStandard": { + "label": "대기질 지수 기준", + "options": { + "auto": "지역 설정에 따라 자동", + "european": "유럽 대기질 지수", + "us": "미국 대기질 지수" + } + }, + "showUv": { + "label": "자외선 지수 표시" + }, + "showPollutants": { + "label": "오염 물질 농도 표시" + }, + "showPollen": { + "label": "꽃가루 농도 표시" + } + }, + "category": { + "good": "좋음", + "fair": "양호", + "moderate": "보통", + "unhealthySensitive": "민감군에 유해", + "unhealthy": "비정상", + "poor": "나쁨", + "veryPoor": "매우 나쁨", + "veryUnhealthy": "매우 유해", + "extremelyPoor": "극도로 나쁨", + "hazardous": "위험", + "unknown": "대기질 지수 측정값 없음" + }, + "uv": { + "label": "자외선 지수", + "category": { + "low": "낮음", + "moderate": "보통", + "high": "높음", + "veryHigh": "매우 높음", + "extreme": "극심", + "unknown": "측정값 없음" + } + }, + "dominantPollutant": "주요 오염 물질", + "aqiLabel": "AQI", + "strongestPollen": "최고 꽃가루", + "unit": { + "concentration": "{value} µg/m³", + "pollen": "{value} grains/m³" + }, + "pollutant": { + "pm2_5": "PM2.5", + "pm10": "PM10", + "ozone": "오존", + "nitrogenDioxide": "이산화질소", + "sulphurDioxide": "이산화황", + "carbonMonoxide": "일산화탄소" + }, + "pollen": { + "alder": "오리나무", + "birch": "자작나무", + "grass": "잔디", + "mugwort": "쑥", + "olive": "올리브", + "ragweed": "돼지풀" + }, + "compact": { + "sixHourTrend": "향후 6시간 동안의 AQI 추이" + }, + "advanced": { + "observedAt": "{time}에 업데이트됨", + "next24Hours": "향후 24시간", + "pollutants": "오염 물질 농도", + "pollen": "꽃가루 농도", + "sevenDayForecast": "7일 최대 예보", + "aqiValue": "AQI {value}", + "uvValue": "UV {value}", + "uvShort": "UV {value}", + "noForecast": "사용 가능한 예보 데이터 없음" + } + }, + "countdown": { + "name": "카운트다운", + "description": "다가오는 이벤트와 반복되는 기념일을 추적합니다.", + "option": { + "events": { + "label": "이벤트", + "description": "일회성 또는 매년 반복되는 카운트다운을 최대 20개까지 추가하고 순서를 지정합니다. 날짜는 선택한 시간대에 입력됩니다." + }, + "showProgress": { + "label": "진행률 표시" + }, + "showSeconds": { + "label": "초 표시", + "description": "다가오는 모든 이벤트에 초를 계속 표시합니다." + } + }, + "dateTimeEventList": { + "newEvent": "새 이벤트", + "add": "이벤트 추가", + "remove": "{event} 제거", + "reorder": "{event} 순서 변경", + "eventLabel": "이벤트 레이블", + "timezone": "시간대", + "unsupportedOption": "지원되지 않음: {timeZone}", + "recurrence": "반복", + "recurrenceOption": { + "none": "반복하지 않음", + "yearly": "매년" + }, + "target": "이벤트 날짜 및 시간", + "trackProgress": "시작 날짜부터 진행률 추적", + "start": "진행률 시작 날짜 및 시간", + "confirmDateTime": "날짜 및 시간 확인", + "limit": "구성된 이벤트 {count}개/{maximum}개" + }, + "empty": { + "title": "아직 카운트다운 없음", + "description": "카운트다운을 시작하려면 위젯 옵션에서 이벤트를 추가하십시오." + }, + "completed": "완료", + "yearly": "매년", + "progress": "이벤트 진행률", + "upcoming": "예정", + "completedEvents": "완료된 이벤트", + "invalid": { + "title": "일부 이벤트를 표시할 수 없습니다", + "description": "{count, plural, other {날짜가 잘못되었거나 지원되지 않는 시간대인 이벤트가 #개 있습니다.}}", + "value": "사용할 수 없음" + }, + "alert": { + "notifications": "브라우저 알림", + "permissionDenied": "이 브라우저에서 알림이 차단되었습니다.", + "reached": "카운트다운이 목표에 도달했습니다." + } + }, + "timer": { + "name": "타이머 / 뽀모도로", + "description": "간단한 타이머 또는 구성 가능한 뽀모도로 시퀀스를 실행합니다.", + "option": { + "mode": { + "label": "모드", + "options": { + "timer": "타이머", + "pomodoro": "뽀모도로" + } + }, + "timerMinutes": { + "label": "타이머 분" + }, + "focusMinutes": { + "label": "집중 시간(분)" + }, + "shortBreakMinutes": { + "label": "짧은 휴식 시간(분)" + }, + "longBreakMinutes": { + "label": "긴 휴식 시간(분)" + }, + "sessionsBeforeLongBreak": { + "label": "긴 휴식 전 집중 세션 수" + }, + "autoStartBreaks": { + "label": "휴식 자동 시작" + }, + "autoStartFocus": { + "label": "집중 세션 자동 시작" + } + }, + "phase": { + "timer": "타이머", + "focus": "집중", + "shortBreak": "짧은 휴식", + "longBreak": "긴 휴식" + }, + "action": { + "start": "시작", + "pause": "일시 중지", + "reset": "초기화" + }, + "attention": { + "timerComplete": "타이머 완료", + "phaseReady": "{phase} 준비됨" + }, + "progress": "타이머 진행률: {progress}%", + "compact": { + "completedFocus": "{count, plural, =0 {완료된 집중 세션 없음} one {집중 세션 #개 완료} other {집중 세션 #개 완료}}" + }, + "alert": { + "title": "타이머 완료", + "completed": "{phase} 완료." + }, + "advanced": { + "sequence": "뽀모도로 시퀀스", + "focusSession": "집중 {session}", + "settings": "영구 설정", + "settingsHint": "위젯 컨텍스트 메뉴를 사용하여 이 보드 설정을 편집하십시오.", + "localAlerts": "로컬 알림", + "notifications": "브라우저 알림", + "sound": "타이머 소리", + "localAlertsHint": "타이머 소리는 기본적으로 활성화되어 있습니다. 소리와 알림은 이 브라우저의 이 위젯에만 적용됩니다.", + "notificationsDenied": "이 브라우저에서 알림이 차단되었습니다." } }, "minecraftServerStatus": { "name": "Minecraft 서버 상태", "description": "Minecraft 서버의 상태를 표시합니다", "option": { - "title": { - "label": "제목" - }, "domain": { "label": "서버 주소" }, @@ -1807,11 +2786,21 @@ "noStation": "선택한 역이 없습니다", "option": { "baseUrl": { - "label": "Search.ch URL" + "label": "Search.ch URL", + "description": "사용자 지정 URL은 공용 IP 주소로 확인되어야 합니다. 비공개 및 로컬 호스트는 거부됩니다." }, "station": { - "label": "역" + "label": "역", + "placeholder": "역 검색" } + }, + "error": { + "customSourceUnavailable": "시간표 소스를 사용할 수 없습니다. URL이 공용 IP 주소로 확인되는지 확인하십시오.", + "stationSearch": "역을 검색할 수 없습니다. 사용자 지정 URL과 보드 액세스를 확인하십시오." + }, + "warning": { + "stale": "시간표를 새로 고칠 수 없습니다. {time}에 마지막으로 업데이트된 출발 정보를 표시합니다.", + "staleCompact": "오래된 데이터" } }, "notebook": { @@ -1843,6 +2832,9 @@ "directionRtl": "텍스트 방향을 오른쪽에서 왼쪽으로 설정", "blockquote": "인용문", "horizontalLine": "가로선", + "details": "접을 수 있는 섹션 전환", + "expandDetails": "접을 수 있는 섹션 펼치기", + "collapseDetails": "접을 수 있는 섹션 접기", "bulletList": "글머리 기호 목록", "orderedList": "번호순 목록", "checkList": "체크리스트", @@ -1851,16 +2843,20 @@ "link": "링크", "unlink": "링크 제거", "image": "이미지 삽입", - "addTable": "표 추가", + "insertTable": "표 삽입", + "insertTableSize": "{columns} × {rows} 표 삽입", "deleteTable": "표 삭제", "colorCell": "셀 색상", - "mergeCell": "셀 병합 토글", + "mergeCells": "셀 병합", + "splitCell": "셀 분할", "addColumnLeft": "앞에 열 추가", "addColumnRight": "뒤에 열 추가", "deleteColumn": "열 삭제", "addRowTop": "앞 행 추가", "addRowBelow": "뒤 행 추가", - "deleteRow": "행 삭제" + "deleteRow": "행 삭제", + "toggleHeaderRow": "머리글 행 전환", + "toggleHeaderColumn": "머리글 열 전환" }, "align": { "left": "왼쪽", @@ -1871,8 +2867,6 @@ "clearColor": "색상 제거", "source": "소스", "widthPlaceholder": "% 또는 픽셀 값", - "columns": "열", - "rows": "행", "width": "너비", "height": "높이" }, @@ -1884,7 +2878,9 @@ "discard": "저장하지 않음", "keepEditing": "계속 편집" } - } + }, + "saveFailed": "메모를 저장할 수 없습니다", + "documentStats": "{words, plural, other {단어 #개}} · {characters, plural, other {문자 #개}}" }, "anchorNote": { "name": "Anchor 노트", @@ -1893,9 +2889,6 @@ "noteId": { "label": "노트" }, - "showTitle": { - "label": "제목 표시" - }, "showUpdatedAt": { "label": "마지막 업데이트 표시" } @@ -1905,14 +2898,20 @@ "notFound": "노트를 찾을 수 없습니다", "noNotes": "노트를 찾을 수 없습니다", "integrationRequired": "먼저 Anchor 통합을 선택하세요", - "updatedAt": "{date}에 업데이트됨", "untitled": "제목 없음", - "edit": "편집", - "save": "저장", - "cancel": "취소", "readOnlyViewer": "이 노트에 대한 뷰어 권한이 있습니다. 편집이 비활성화되었습니다.", "saveForbidden": "이 노트를 편집할 권한이 없습니다.", - "saveFailed": "이 노트를 저장하지 못했습니다. 다시 시도하세요." + "saveFailed": "이 노트를 저장하지 못했습니다. 다시 시도하세요.", + "createdAt": "{date}에 생성됨", + "permission": { + "owner": "소유자", + "editor": "편집자", + "viewer": "뷰어" + }, + "status": { + "pinned": "고정됨", + "archived": "보관됨" + } }, "iframe": { "name": "iFrame", @@ -1971,6 +2970,25 @@ "clickable": { "label": "클릭 가능" } + }, + "state": { + "on": "켜짐", + "off": "꺼짐", + "unavailable": "사용할 수 없음", + "unknown": "알 수 없음" + }, + "advanced": { + "entityId": "엔터티 ID: {id}", + "lastChanged": "{date}에 변경됨", + "attribute": { + "unit": "단위", + "deviceClass": "장치 클래스", + "icon": "아이콘" + } + }, + "error": { + "loadFailed": "엔터티를 불러올 수 없습니다", + "toggleFailed": "엔터티를 업데이트할 수 없습니다" } }, "smartHome-executeAutomation": { @@ -1986,11 +3004,31 @@ }, "spotlightAction": { "run": "{name} 실행" + }, + "advanced": { + "lastExecuted": "{time}에 마지막 실행", + "automationId": "자동화 ID: {id}", + "ready": "실행 준비됨", + "noPermission": "이 자동화를 실행할 권한이 없습니다" + }, + "status": { + "running": "자동화 실행 중", + "success": "자동화 완료" + }, + "error": { + "executeFailed": "자동화를 실행할 수 없습니다" } }, "stockPrice": { "name": "주가", "description": "회사의 현재 주가를 표시합니다", + "advanced": { + "currentPrice": "현재 가격", + "previousClose": "이전 종가", + "changePercentage": "변동률(%)", + "minimum": "최소", + "maximum": "최대" + }, "option": { "stock": { "label": "주식 심볼" @@ -2061,6 +3099,10 @@ "label": "1개월" } } + }, + "showDetails": { + "label": "세부 정보 표시", + "description": "간략 보기에서 이름, 변동 및 시간 범위를 표시합니다. 기호와 가격만 표시하려면 끄십시오." } } }, @@ -2088,6 +3130,13 @@ "showUnmonitored": { "label": "모니터링되지 않음 표시" } + }, + "advanced": { + "previousMonth": "이전 달 표시", + "nextMonth": "다음 달 표시", + "eventCount": "{count, plural, other {이벤트 #개}}", + "loading": "캘린더 이벤트 불러오는 중...", + "noEvents": "이번 달에 이벤트 없음" } }, "weather": { @@ -2100,16 +3149,18 @@ "disableTemperatureDecimals": { "label": "온도 소수점 비활성화" }, + "animateIcons": { + "label": "날씨 아이콘 애니메이션" + }, + "showHumidity": { + "label": "습도 표시" + }, "showCurrentWindSpeed": { - "label": "현재 풍속 표시", - "description": "현재 날씨 기준으로만 표시됩니다" + "label": "현재 풍속 표시" }, "useImperialSpeed": { "label": "mph 풍속 사용" }, - "location": { - "label": "날씨 위치" - }, "showCity": { "label": "도시 표시" }, @@ -2119,13 +3170,10 @@ "forecastDayCount": { "label": "예보 일수", "description": "위젯이 충분히 넓지 않으면 표시되는 일수가 줄어듭니다" - }, - "dateFormat": { - "label": "날짜 형식", - "description": "날짜를 표시하는 형식" } }, "currentWindSpeed": "{currentWindSpeed}{unit}", + "disabled": "외부 연결이 비활성화되어 날씨 데이터를 사용할 수 없습니다", "dailyForecast": { "sunrise": "일출", "sunset": "일몰", @@ -2148,6 +3196,47 @@ "thunderstorm": "뇌우", "thunderstormWithHail": "우박을 동반한 뇌우", "unknown": "알 수 없음" + }, + "details": "날씨 세부 정보 표시", + "detailsFor": "{date}의 날씨 세부 정보 표시", + "advanced": { + "forecast": "7일 예보", + "hourlyForecast": "향후 24시간", + "day": "일", + "time": "시간", + "conditions": "상태", + "temperature": "기온", + "feelsLike": "체감 {temperature}", + "feelsLikeLabel": "체감", + "feelsLikeRange": "체감: {maximum} / {minimum}", + "highLow": "최고 {maximum} · 최저 {minimum}", + "observedAt": "{time}에 업데이트됨", + "humidity": "습도", + "averageHumidity": "평균 습도: {humidity}%", + "currentHumidity": "현재 습도", + "wind": "풍속 / 돌풍({unit})", + "currentWind": "현재 풍속 / 돌풍", + "windValue": "{speed} / {gusts} {unit}", + "windDetail": "최대 풍속 / 돌풍: {speed} / {gusts} {unit}", + "nextHourPrecipitation": "다음 시간 강수량", + "precipitationChance": "강수 확률", + "precipitationValue": "{probability}% · {amount} mm", + "precipitationDetail": "강수량: {probability}% · {amount} mm", + "todayUv": "오늘의 최대 UV 지수", + "uvIndex": "최대 UV 지수: {value}", + "daylight": "일조 시간: {duration}", + "hourlyTooltip": "체감 {feelsLike}{temperatureUnit} · {amount} mm · 습도 {humidity}% · {speed} {speedUnit} 풍속", + "hourlyTooltipWithoutHumidity": "체감 {feelsLike}{temperatureUnit} · {amount} mm · {speed} {speedUnit} 풍속", + "detailLabel": { + "feelsLike": "체감", + "precipitation": "강수량", + "humidity": "평균 습도", + "wind": "최대 풍속 / 돌풍", + "uv": "최대 UV 지수", + "daylight": "일조 시간" + }, + "sun": "일출 / 일몰", + "noForecast": "사용 가능한 예보 데이터 없음" } }, "indexerManager": { @@ -2160,8 +3249,15 @@ }, "title": "인덱서 관리자", "testAll": "모두 테스트", + "status": { + "healthy": "정상", + "unhealthy": "비정상", + "disabled": "장애인", + "unknown": "상태를 확인할 수 없음" + }, "error": { - "internalServerError": "인덱서 상태를 가져오지 못했습니다" + "internalServerError": "인덱서 상태를 가져오지 못했습니다", + "testAll": "인덱서 테스트에 실패했습니다. 다시 시도하십시오." } }, "healthMonitoring": { @@ -2190,11 +3286,6 @@ "fileSystem": { "label": "파일시스템 정보 표시" }, - "visibleStorageVolumes": { - "label": "저장소 볼륨 표시", - "description": "선택한 모든 통합이 Synology일 때만 사용할 수 있습니다. 감지된 모든 저장소 볼륨을 표시하려면 비워두십시오.", - "placeholder": "저장소 볼륨 선택" - }, "defaultTab": { "label": "기본 탭" }, @@ -2217,17 +3308,27 @@ "minutes": "{count}분", "used": "사용중", "available": "사용 가능", - "lastSeen": "마지막 상태 업데이트: {lastSeen}" + "lastSeen": "마지막 상태 업데이트: {lastSeen}", + "updatesAvailable": "{count, plural, other {업데이트 가능 #개}}", + "rebootRequired": "재부팅 필요", + "rebootNotRequired": "재부팅 필요 없음" + }, + "smartStatus": { + "attributesWithinThresholds": "SMART: 특성이 임계값 이내입니다", + "attributesFailed": "SMART: 특성 {attributes}개 실패", + "noCriticalWarning": "SMART: SSD에서 경고가 보고되지 않음", + "criticalWarning": "SMART: SSD에서 심각한 경고가 보고됨" + }, + "gauge": { + "cpuUsage": "CPU 사용량", + "cpuTemperature": "CPU 온도", + "memoryUsage": "메모리 사용량", + "gpuUsage": "{name} GPU 사용량" }, - "memory": {}, "error": { "internalServerError": "상태 불러오기 실패" }, "cluster": { - "summary": { - "cpu": "CPU", - "memory": "RAM" - }, "resource": { "node": { "name": "노드" @@ -2263,8 +3364,6 @@ "table": { "header": { "name": "이름", - "cpu": "CPU", - "memory": "RAM", "node": "노드" } } @@ -2274,33 +3373,29 @@ "name": "Docker 상태", "description": "컨테이너 통계 (이 위젯은 관리자 권한으로만 추가할 수 있습니다)", "option": { - "columns": { - "label": "표시할 열" + "endpointIds": { + "label": "Docker 환경", + "description": "모든 Docker 환경의 컨테이너를 표시하려면 비워 두십시오", + "placeholder": "모든 Docker 환경" }, - "enableRowSorting": { - "label": "항목 정렬 활성화" + "containerFilter": { + "label": "필터링할 컨테이너" + }, + "filterIsWhitelist": { + "label": "화이트리스트로 필터링" }, "defaultSort": { - "label": "기본 정렬에 사용되는 열", "option": { "name": "이름", "state": "상태", "cpuUsage": "CPU 사용량", "memoryUsage": "메모리 사용량" } - }, - "descendingDefaultSort": { - "label": "역순 정렬" - }, - "columnOrder": { - "label": "열 순서" - }, - "columnWidths": { - "label": "열 너비" } }, "error": { "internalServerError": "컨테이너 상태 불러오기 실패", + "endpointsUnavailable": "Docker 엔드포인트를 사용할 수 없습니다", "layoutSaveTitle": "테이블 레이아웃이 저장되지 않았습니다", "layoutSaveMessage": "Docker 테이블 레이아웃을 저장할 수 없습니다. 열을 다시 이동하거나 크기를 조정해 보세요." }, @@ -2309,7 +3404,6 @@ } }, "coolify": { - "name": "Coolify", "description": "서버와 애플리케이션을 포함한 Coolify 인스턴스 개요", "option": { "showServers": { @@ -2335,17 +3429,49 @@ "internalServerError": "Coolify 데이터를 가져오지 못했습니다" }, "server": { - "buildServer": "빌드" + "buildServer": "빌드", + "resourceCounts": "{applications, plural, other {앱 #개}} / {services, plural, other {서비스 #개}}", + "reachability": "도달 가능성", + "usability": "사용 가능성" + }, + "source": { + "url": "소스: {url}", + "unavailable": "{source}: 사용할 수 없음" }, "instances": { "title": "인스턴스" + }, + "action": { + "openResource": "{name} 열기", + "openLogs": "{name} 로그 열기", + "showIp": "IP 주소 표시", + "hideIp": "IP 주소 숨기기" + }, + "status": { + "running": "실행 중", + "stopped": "중지됨", + "exited": "종료됨", + "starting": "시작 중", + "restarting": "다시 시작", + "unknown": "알 수 없음", + "online": "온라인", + "offline": "오프라인", + "reachable": "도달 가능", + "unreachable": "도달할 수 없음", + "usable": "사용 가능", + "unusable": "사용할 수 없음" } }, "vpn": { "name": "VPN", "description": "VPN 연결 개요", "serviceUnavailable": "VPN 연결되지 않음", - "option": {} + "status": { + "running": "실행 중", + "notRunning": "실행 중이 아님", + "unavailable": "사용할 수 없음", + "vpn": "VPN: {status}" + } }, "ups": { "name": "UPS", @@ -2372,14 +3498,19 @@ "runtime": "런타임", "load": "부하", "input": "입력", - "output": "출력" + "output": "출력", + "batteryVoltage": "배터리 전압", + "power": "전력", + "temperature": "온도", + "manufacturer": "제조업체", + "model": "모델", + "serial": "일련 번호" }, "error": { "internalServerError": "UPS 데이터를 가져오지 못함" } }, "tracearr": { - "name": "Tracearr", "description": "상세 스트림 및 트랜스코딩 데이터로 강화된 미디어 서버 모니터링", "option": { "showStreams": { @@ -2467,10 +3598,7 @@ "label": "이벤트", "description": "특정 이벤트의 총 발생 횟수 표시", "placeholder": "이벤트 선택", - "loading": "이벤트 로딩 중...", - "noEvents": "이벤트를 찾을 수 없음", - "none": "이벤트 없음", - "configureWebsiteFirst": "이벤트를 로드하려면 먼저 웹사이트를 선택하세요" + "none": "이벤트 없음" }, "chartType": { "label": "차트 유형", @@ -2501,26 +3629,21 @@ "eventNames": { "label": "이벤트", "description": "차트로 표시할 이벤트를 하나 이상 선택하세요", - "placeholder": "이벤트 선택...", - "loading": "이벤트 로딩 중...", - "noEvents": "이벤트를 찾을 수 없음", - "configureWebsiteFirst": "이벤트를 로드하려면 먼저 웹사이트를 선택하세요" + "placeholder": "이벤트 선택..." }, "topCount": { "label": "표시할 항목", "description": "표시할 상위 항목 수 (최대 500)" + }, + "events": { + "loading": "이벤트 불러오는 중...", + "noEvents": "이벤트를 찾을 수 없음", + "configureWebsiteFirst": "이벤트를 불러오려면 먼저 웹사이트를 선택하십시오" } }, "event": { - "occurrences": "이벤트", "label": "이벤트" }, - "topPages": { - "direct": "직접" - }, - "topReferrers": { - "direct": "직접" - }, "events": { "selectPrompt": "차트로 표시할 이벤트를 선택하세요" }, @@ -2529,6 +3652,9 @@ "noWebsite": "웹사이트가 구성되지 않음", "noData": "데이터 없음", "internalServerError": "Umami 데이터를 가져오지 못함" + }, + "top": { + "direct": "직접" } }, "common": { @@ -2556,7 +3682,8 @@ }, "integration": { "noData": "통합 없음", - "description": "새 통합을 생성하려면 클릭" + "description": "새 통합을 생성하려면 클릭", + "manage": "통합 관리" }, "app": { "noData": "앱 없음", @@ -2567,7 +3694,61 @@ "noIntegration": "선택한 통합 없음", "noData": "사용 가능한 통합 데이터 없음" }, - "option": {} + "integrationDisconnected": "사용 가능한 데이터가 없습니다. 모든 통합이 연결 해제되었습니다", + "updatedAt": "{date}에 업데이트됨", + "title": { + "label": "제목" + }, + "openInNewTab": { + "label": "새 탭에서 열기" + }, + "showTitle": { + "label": "제목 표시" + }, + "weatherLocation": { + "label": "날씨 위치" + }, + "layout": { + "label": "레이아웃", + "option": { + "horizontal": "가로", + "vertical": "세로", + "grid": "그리드" + } + }, + "select": { + "loading": "불러오는 중...", + "loadError": "옵션 불러오기 실패" + }, + "dateFormat": { + "label": "날짜 형식", + "description": "날짜를 표시하는 형식" + }, + "visibleStorageVolumes": { + "label": "저장소 볼륨 표시", + "description": "선택한 모든 통합이 OpenMediaVault 또는 Synology인 경우에만 사용할 수 있습니다. 감지된 모든 저장소 볼륨을 표시하려면 비워 두십시오.", + "placeholder": "저장소 볼륨 선택" + }, + "tableOptions": { + "columns": { + "label": "표시할 열" + }, + "columnOrder": { + "label": "열 순서" + }, + "columnWidths": { + "label": "열 너비" + }, + "enableRowSorting": { + "label": "항목 정렬 활성화" + }, + "defaultSort": { + "label": "정렬 기준 열 기본값" + }, + "invertSorting": { + "label": "역순 정렬" + } + } }, "video": { "name": "비디오 스트림", @@ -2626,6 +3807,7 @@ "transcoding": "트랜스코딩", "paused": "일시 중지됨", "remaining": "남은 시간 {minutes}분", + "seasonEpisode": "시즌 {season} 에피소드 {episode}", "metadata": { "title": "너드 통계", "video": { @@ -2643,11 +3825,16 @@ "resolution": "해상도", "target": "목표 코덱" } - } + }, + "unknownUser": "알 수 없는 사용자" + }, + "summary": { + "sessions": "{count, plural, other {세션 #개}}", + "playing": "{count}개 재생 중", + "transcoding": "{count}개 트랜스코딩 중" } }, "paperlessNgx": { - "name": "Paperless-ngx", "description": "Paperless-ngx 문서 아카이브 개요", "documentsTotal": "총 문서 수", "documentsInbox": "받은 편지함", @@ -2691,6 +3878,192 @@ "internalServerError": "Paperless-ngx 데이터를 가져오지 못함" } }, + "patchmon": { + "description": "PatchMon의 호스트 패치 상태 개요", + "title": "PatchMon 통계", + "totalHosts": "총 호스트", + "hostsNeedingUpdates": "업데이트 필요", + "securityUpdates": "보안 업데이트", + "upToDateHosts": "최신 상태의 호스트", + "hostsWithSecurityUpdates": "보안 업데이트가 필요한 호스트", + "recentUpdates24h": "업데이트 (24시간)", + "totalOutdatedPackages": "오래된 패키지", + "totalRepos": "저장소", + "osDistribution": "OS 배포판", + "compliance": "패치 준수", + "complianceRatio": "{upToDate} / {total}", + "lastUpdated": "{time} 업데이트됨", + "option": { + "showTotalHosts": { + "label": "총 호스트 표시", + "description": "모니터링되는 총 호스트 수 표시" + }, + "showHostsNeedingUpdates": { + "label": "업데이트가 필요한 호스트 표시", + "description": "하나 이상의 오래된 패키지가 있는 호스트 표시" + }, + "showSecurityUpdates": { + "label": "보안 업데이트 표시", + "description": "사용 가능한 총 보안 업데이트 수 표시" + }, + "showUpToDateHosts": { + "label": "최신 호스트 표시", + "description": "오래된 패키지가 없는 호스트 표시" + }, + "showHostsWithSecurityUpdates": { + "label": "보안 업데이트가 필요한 호스트 표시", + "description": "보안 패치가 필요한 호스트 표시" + }, + "showRecentUpdates24h": { + "label": "최근 업데이트 (24시간) 표시", + "description": "지난 24시간 동안 적용된 업데이트 수 표시" + }, + "showTotalOutdatedPackages": { + "label": "오래된 패키지 표시", + "description": "모든 호스트에서의 총 오래된 패키지 수 표시" + }, + "showTotalRepos": { + "label": "저장소 표시", + "description": "모니터링되는 활성 저장소 수 표시" + }, + "enableThresholdColors": { + "label": "임계값 색상 활성화", + "description": "심각도 사전 설정에 따라 통계 값을 녹색, 노란색 또는 빨간색으로 표시" + }, + "useCustomThresholds": { + "label": "고급 임계값", + "description": "절대 개수 또는 전체 호스트 대비 백분율을 사용하여 통계별 경고 및 위험 임계값 사용자 정의" + }, + "thresholdMode": { + "option": { + "absolute": "절대 개수", + "percent": "전체 호스트 대비 백분율" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "업데이트 필요 임계값 모드", + "description": "업데이트 필요 개수를 절대값 또는 전체 호스트 대비 백분율로 비교" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "업데이트 필요 경고 임계값" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "업데이트 필요 위험 임계값" + }, + "securityUpdatesThresholdMode": { + "label": "보안 업데이트 임계값 모드", + "description": "보안 업데이트 개수를 절대값 또는 전체 호스트 대비 백분율로 비교" + }, + "securityUpdatesWarningAt": { + "label": "보안 업데이트 경고 임계값" + }, + "securityUpdatesCriticalAt": { + "label": "보안 업데이트 위험 임계값" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "보안 업데이트가 있는 호스트 임계값 모드", + "description": "호스트 개수를 절대값 또는 전체 호스트 대비 백분율로 비교" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "보안 업데이트가 있는 호스트 경고 임계값" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "보안 업데이트가 있는 호스트 위험 임계값" + }, + "upToDateHostsThresholdMode": { + "label": "최신 호스트 임계값 모드", + "description": "최신 호스트 개수를 절대값 또는 전체 호스트 대비 백분율로 비교" + }, + "upToDateHostsWarningAt": { + "label": "최신 호스트 경고 임계값", + "description": "값이 이 임계값 이상이지만 전체 적용 범위 미만일 때 노란색으로 표시" + }, + "upToDateHostsCriticalAt": { + "label": "최신 호스트 위험 임계값", + "description": "값이 이 임계값 미만으로 떨어지면 빨간색으로 표시" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "오래된 패키지 임계값 모드", + "description": "오래된 패키지 개수를 절대값 또는 전체 호스트 대비 백분율로 비교" + }, + "totalOutdatedPackagesWarningAt": { + "label": "오래된 패키지 경고 임계값" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "오래된 패키지 위험 임계값" + }, + "showOsDistribution": { + "label": "OS 배포판 표시", + "description": "운영 체제별로 모니터링되는 호스트 분석 표시" + }, + "osDistributionLimit": { + "label": "OS 배포판 제한", + "description": "표시할 최대 운영 체제 수", + "option": { + "3": "상위 3개", + "5": "상위 5개", + "10": "상위 10개", + "all": "모두" + } + }, + "showOsVersion": { + "label": "OS 버전 표시", + "description": "사용 가능한 경우 각 배포판 레이블에 OS 버전 추가" + }, + "showComplianceHero": { + "label": "준수 상태 표시", + "description": "최신 호스트의 백분율을 표시하는 준수 링 표시" + }, + "osDisplayMode": { + "label": "OS 표시 모드", + "description": "운영 체제 배포판 표시 방법 선택", + "option": { + "bars": "가로 막대", + "donut": "도넛 차트" + } + }, + "threshold": { + "warningAt": { + "description": "값이 이 임계값에 도달하면 노란색으로 입력" + }, + "criticalAt": { + "description": "값이 이 임계값에 도달하면 빨간색으로 입력" + } + } + }, + "error": { + "internalServerError": "PatchMon 데이터를 가져오지 못했습니다" + } + }, + "bazarr": { + "description": "Bazarr 인스턴스의 누락된 자막 및 상태 개요", + "episodes": "누락된 에피소드", + "movies": "누락된 영화", + "providers": "제공자 문제", + "status": "상태 문제", + "announcements": "공지", + "option": { + "showMissingEpisodes": { + "label": "누락된 에피소드 표시", + "description": "누락된 자막이 있는 에피소드 수 표시" + }, + "showMissingMovies": { + "label": "누락된 영화 표시", + "description": "누락된 자막이 있는 영화 수 표시" + }, + "showProviderIssues": { + "label": "제공자 문제 표시", + "description": "문제가 있는 자막 제공자 수 표시" + }, + "showHealthIssues": { + "label": "상태 문제 표시", + "description": "Bazarr 상태 문제 수 표시" + } + }, + "error": { + "internalServerError": "Bazarr 데이터를 가져오지 못했습니다" + } + }, "immich-serverStats": { "name": "Immich 서버 정보", "description": "Immich 인스턴스에 대한 정보", @@ -2715,7 +4088,8 @@ "users": "사용자", "photos": "사진", "videos": "동영상", - "storage": "용량 사용" + "storage": "용량 사용", + "albumLimit": "가장 큰 앨범({count}개까지 표시)" }, "immich-albumCarousel": { "name": "Immich 앨범", @@ -2739,24 +4113,21 @@ } }, "description": "Immich 앨범 또는 전체 라이브러리의 사진 슬라이드쇼", - "noPhotos": "사진을 찾을 수 없습니다" + "noPhotos": "사진을 찾을 수 없습니다", + "albumPhoto": "앨범 사진", + "actions": { + "previousPhoto": "이전 사진", + "nextPhoto": "다음 사진", + "pauseSlideshow": "슬라이드쇼 일시 중지", + "resumeSlideshow": "슬라이드쇼 재개", + "toggleSlideshow": "슬라이드쇼 일시 중지 또는 재개", + "photo": "사진 {number}" + } }, "downloads": { "name": "다운로드 클라이언트", "description": "Torrent 및 Usenet 클라이언트 다운로드를 확인 및 관리할 수 있습니다.", "option": { - "columns": { - "label": "표시할 열" - }, - "enableRowSorting": { - "label": "항목 정렬 활성화" - }, - "defaultSort": { - "label": "정렬 기준 열 기본값" - }, - "descendingDefaultSort": { - "label": "역순 정렬" - }, "showCompletedUsenet": { "label": "완료된 usenet 항목 표시" }, @@ -2781,12 +4152,6 @@ "limitPerIntegration": { "label": "통합당 항목 수 제한", "description": "통합당 표시되는 항목 수를 제한하여 전체 항목이 표시되지 않습니다" - }, - "columnOrder": { - "label": "열 순서" - }, - "columnWidths": { - "label": "열 너비" } }, "errors": { @@ -2947,6 +4312,10 @@ "mediaRequests-requestList": { "name": "미디어 요청 목록", "description": "오버서 또는 젤리서 인스턴스의 모든 미디어 요청 목록 보기", + "empty": { + "title": "아직 미디어 요청 없음", + "description": "요청을 시작하려면 영화 또는 프로그램을 검색하십시오." + }, "option": { "linksTargetNewTab": { "label": "새 탭에서 링크 열기" @@ -2980,12 +4349,16 @@ "failed": "실패", "completed": "완료" }, + "unknown": "알 수 없음", "toBeDetermined": "미정" }, "mediaRequests-requestStats": { "name": "미디어 요청 통계", "description": "미디어 요청에 대한 통계", - "option": {}, + "empty": { + "title": "아직 요청 활동 없음", + "description": "첫 미디어 요청 후 통계가 표시됩니다." + }, "titles": { "stats": { "main": "미디어 통계", @@ -2995,8 +4368,7 @@ "declined": "이미 거절됨", "available": "이미 사용 가능", "tv": "TV 요청", - "movie": "영화 요청", - "total": "합계" + "movie": "영화 요청" }, "users": { "main": "상위 사용자", @@ -3022,7 +4394,6 @@ }, "currentIndex": "{total}개 중 {start}-{end}", "healthCheck": { - "title": "상태 확인", "queued": "대기 중", "status": { "healthy": "정상", @@ -3031,38 +4402,63 @@ }, "panel": { "statistics": { - "empty": "비어 있음", - "transcodes": "트랜스코드", - "transcodesCount": "트랜스코드", - "healthChecksCount": "상태 확인", "filesCount": "파일", "savedSpace": "절약된 공간", - "healthChecks": "상태 확인", "videoCodecs": "코덱", "videoContainers": "컨테이너", "videoResolutions": "해상도" }, "workers": { - "empty": "비어 있음", "table": { - "file": "파일", "eta": "남은 시간", - "progress": "진행률", - "transcode": "트랜스코드", - "healthCheck": "상태 확인" + "progress": "진행률" } }, "queue": { - "empty": "비어 있음", "table": { - "file": "파일", - "size": "크기", - "transcode": "트랜스코드", - "healthCheck": "상태 확인" + "size": "크기" } + }, + "common": { + "empty": "비어 있음", + "file": "파일", + "healthCheck": "상태 확인", + "transcode": "트랜스코딩", + "transcodes": "트랜스코딩", + "healthChecks": "상태 확인" } } }, + "mediaMissing": { + "name": "누락 및 대기 중인 미디어", + "description": "Radarr 및 Sonarr의 누락 및 대기 중인 영화와 에피소드 표시", + "option": { + "showMissing": { + "label": "누락된 항목 표시" + }, + "showQueued": { + "label": "대기 중인 항목 표시" + }, + "pageSize": { + "label": "페이지당 항목 수" + } + }, + "tab": { + "missing": "누락", + "queued": "대기 중" + }, + "type": { + "movie": "영화", + "episode": "에피소드", + "book": "도서" + }, + "empty": { + "missing": "누락된 항목 없음", + "queued": "대기 중인 항목 없음", + "noTabsEnabled": "위젯 설정에서 최소한 하나의 탭을 활성화하세요" + }, + "timeLeft": "남은 시간" + }, "rssFeed": { "name": "RSS 피드", "description": "하나 이상의 일반 RSS, ATOM 또는 JSON 피드를 모니터링하고 표시합니다", @@ -3085,6 +4481,13 @@ "showPosterImage": { "label": "포스터 이미지 표시" } + }, + "error": { + "allFeedsFailed": "RSS 피드를 불러올 수 없습니다. 피드 URL을 확인하고 다시 시도하십시오." + }, + "warning": { + "partial": "{count, plural, other {RSS 피드 #개를 불러올 수 없음}}", + "stale": "RSS 피드를 새로 고칠 수 없습니다. 이전에 불러온 항목을 표시합니다." } }, "releases": { @@ -3160,17 +4563,8 @@ "label": "정규 표현식" } }, - "edit": { - "label": "편집" - }, "editForm": { - "title": "저장소 편집", - "cancel": { - "label": "취소" - }, - "confirm": { - "label": "확인" - } + "title": "저장소 편집" }, "importForm": { "title": "Docker에서 가져오기" @@ -3187,8 +4581,7 @@ "label": "공급자 토큰", "token": "토큰", "configured": "토큰 구성됨", - "notConfigured": "토큰이 설정되지 않음", - "save": "저장" + "notConfigured": "토큰이 설정되지 않음" } } }, @@ -3215,17 +4608,32 @@ "noProviderResponse": "제공자로부터 응답이 없습니다", "unexpected": "예기치 않은 공급자 오류" } - } + }, + "expandDetails": "{name}의 세부 정보 표시", + "collapseDetails": "{name}의 세부 정보 숨기기" }, "networkControllerSummary": { - "option": {}, - "card": { - "vpn": { - "countConnected": "{count}개 연결" + "advanced": { + "updated": "업데이트됨", + "metric": { + "latency": "지연 시간", + "ping": "핑", + "uptime": "작동 시간", + "users": "사용자", + "guests": "게스트" } }, + "card": { + "vpn": { + "countConnected": "{count, plural, other {연결됨 #개}}", + "label": "VPN" + }, + "wan": "WAN", + "web": "웹", + "wifi": "Wi-Fi", + "lan": "LAN" + }, "error": { - "integrationsDisconnected": "데이터 없음, 모든 통합이 연결 해제됨", "unknownContentOption": "네트워크 컨트롤러 요약 위젯의 알 수 없는 콘텐츠 옵션: " }, "name": "네트워크 컨트롤러 요약", @@ -3262,7 +4670,6 @@ } }, "error": { - "integrationsDisconnected": "데이터 없음, 모든 통합이 연결 해제됨", "unknownContentOption": "네트워크 상태 위젯의 알 수 없는 콘텐츠 옵션: " }, "name": "네트워크 상태", @@ -3292,7 +4699,6 @@ "versiontitle": "버전", "cputitle": "CPU 사용량", "memorytitle": "메모리 사용량", - "cpu": "CPU", "memory": "메모리", "interfaces": { "name": "이름", @@ -3300,6 +4706,16 @@ "recv": "수신됨", "title": "네트워크 인터페이스" } + }, + "empty": { + "noInterfaces": "아직 네트워크 인터페이스 데이터 없음" + }, + "versionUnknown": "알 수 없는 버전", + "metricAccessible": "{metric}: {value}%, {status}", + "status": { + "normal": "정상", + "warning": "경고", + "critical": "심각" } }, "notifications": { @@ -3309,8 +4725,21 @@ "option": { "hideLogos": { "label": "로고 숨기기" + }, + "messageFormat": { + "label": "메시지 형식", + "option": { + "auto": "자동", + "plain": "일반 텍스트", + "markdown": "Markdown", + "html": "HTML" + } } - } + }, + "openService": "알림 서비스 열기", + "deleteNotification": "Gotify에서 알림 삭제", + "deleteFailed": "알림을 삭제할 수 없습니다", + "deleteFailedMessage": "알림을 삭제할 수 없습니다. 다시 시도하십시오." }, "speedtestTracker": { "name": "Speedtest Tracker", @@ -3352,7 +4781,6 @@ } }, "uptimeKuma": { - "name": "Uptime Kuma", "description": "Uptime Kuma 상태 페이지에서 업타임 통계를 모니터링합니다", "option": { "showAverageUptime": { @@ -3389,8 +4817,58 @@ }, "error": { "internalServerError": "가동 시간 데이터를 가져오지 못함" + }, + "status": { + "up": "총 업로드", + "down": "다운로드 속도", + "paused": "일시 중지됨" } }, + "traefik": { + "description": "Traefik 라우터, 서비스, 미들웨어 및 진입점 개요", + "option": { + "showTcp": { + "label": "TCP 표시" + }, + "showUdp": { + "label": "UDP 표시" + }, + "showEntryPoints": { + "label": "진입점 표시" + } + }, + "instances": "Traefik 인스턴스", + "versionUnknown": "버전 알 수 없음", + "summary": { + "routers": "라우터", + "entryPoints": "진입점" + }, + "resource": { + "routers": "라우터", + "middlewares": "미들웨어" + }, + "status": { + "healthy": "정상", + "errors": "{count}개 오류", + "warnings": "{count}개 경고" + }, + "error": { + "internalServerError": "Traefik 데이터를 가져오지 못함" + }, + "resourceType": { + "router": "라우터", + "service": "서비스", + "middleware": "미들웨어" + }, + "resourceStatus": { + "enabled": "활성화됨", + "disabled": "장애인", + "warning": "경고", + "error": "오류", + "unknown": "알 수 없음" + }, + "failedEndpoint": "실패: {endpoint}" + }, "audioStats": { "name": "오디오 정보", "description": "Navidrome 또는 Audiobookshelf의 라이브러리 및 재생 정보", @@ -3455,9 +4933,7 @@ "label": "표시할 차트", "description": "표시할 차트를 선택합니다.", "option": { - "cpu": "CPU", "memory": "메모리", - "gpu": "GPU", "network": "네트워크" } }, @@ -3472,12 +4948,11 @@ } }, "card": { - "cpu": "CPU", "memory": "메모리", - "gpu": "GPU", "network": "네트워크", "up": "업로드", - "down": "다운로드" + "down": "다운로드", + "memoryTooltip": "{used} / {available} ({percent}%)" } }, "systemDisks": { @@ -3503,151 +4978,88 @@ }, "showBackgroundBar": { "label": "백그라운드 사용량 바 표시" - }, - "visibleStorageVolumes": { - "label": "표시할 저장소 볼륨", - "description": "선택한 모든 통합이 Synology일 때만 사용할 수 있습니다. 감지된 모든 저장소 볼륨을 표시하려면 비워두십시오.", - "placeholder": "저장소 볼륨 선택" } }, "status": { - "unhealthy": "비정상" + "unhealthy": "비정상", + "smart": "SMART", + "free": "{percentage}% 여유" + } + }, + "customApi": { + "name": "사용자 지정 위젯", + "description": "구성된 사용자 지정 JSX 정의를 렌더링합니다.", + "customJsx": { + "noTemplate": "구성된 JSX 템플릿이 없습니다.", + "templateWarnings": "템플릿 경고 {count}개:", + "requestIdRequired": "이 네트워크 제어에는 이름이 지정된 requestId가 필요합니다.", + "unsavedPreview": "이름이 지정된 요청을 테스트하기 전에 편집기에서 초기 요청 테스트를 실행하십시오.", + "invalidParams": "요청 매개변수가 올바르지 않습니다.", + "loading": "요청 불러오는 중...", + "loadRequest": "요청 불러오기", + "requestFailed": "요청에 실패했습니다.", + "retry": "요청 재시도", + "actionCompleted": "작업이 성공적으로 완료되었습니다.", + "actionSimulated": "작업이 시뮬레이션되었습니다. 요청은 전송되지 않았습니다.", + "actionsDisabledEditMode": "보드가 편집 모드인 동안 작업이 비활성화됩니다.", + "widgetItemUnavailable": "이 위젯 항목은 사용할 수 없습니다.", + "toggle": "전환", + "copied": "복사됨", + "confirmDelete": "이 파괴적인 작업을 확인하십시오." + }, + "option": { + "definitionId": { + "label": "사용자 지정 위젯" + }, + "refreshInterval": { + "label": "새로고침 간격", + "description": "API에서 데이터를 다시 가져오는 빈도 (초 단위)" + } + }, + "noDefinition": "선택한 정의 없음", + "definitionNotFound": "사용자 지정 위젯을 사용할 수 없음", + "migrationRequired": "이 레거시 사용자 지정 위젯은 보존되지만 실행하려면 사용자 지정 위젯 관리에서 Custom JSX v2로 마이그레이션해야 합니다.", + "manageMigration": "사용자 지정 위젯 관리 열기", + "contactAdmin": "관리자에게 문의하십시오.", + "configurationNeedsRepair": "이 위젯의 옵션이 변경되었습니다. 위젯을 편집하여 구성을 복구하십시오.", + "removeFromBoard": "보드에서 제거", + "editModePending": "이 위젯을 불러오려면 보드를 저장하십시오.", + "picker": { + "group": "사용자 지정 JSX 위젯", + "empty": "사용자 지정 위젯을 찾을 수 없음", + "preview": "미리보기", + "sources": "{count, plural, other {소스 #개}}", + "requests": "{count, plural, other {요청 #개}}", + "migrationRequired": "마이그레이션 필요", + "migrationDescription": "배치된 v1 위젯은 아직 실행할 수 없습니다. 삭제된 프롬프트를 LLM에 복사한 다음 단일 JSON 응답을 Homarr에 붙여 넣으십시오.", + "manageMigration": "사용자 지정 위젯 관리 열기", + "contactAdmin": "관리자에게 문의하십시오." + }, + "configuration": { + "needsAttention": "구성에 주의가 필요합니다: {message}", + "advancedOptions": "고급 옵션", + "invalidJson": "유효하지 않은 JSON" } }, "beszelSystemTable": { "name": "Beszel 시스템 (표)", "description": "정렬 가능한 열과 상태 표시기가 있는 모든 Beszel 모니터링 시스템의 표 보기", "option": { - "statusFilter": { - "label": "상태 필터" - }, "sortBy": { "label": "정렬 기준" }, "sortDirection": { "label": "정렬 방향" - }, - "showCpu": { - "label": "CPU 표시" - }, - "showMemory": { - "label": "메모리 표시" - }, - "showDisk": { - "label": "디스크 표시" - }, - "showGpu": { - "label": "GPU 표시" - }, - "showLoadAvg": { - "label": "평균 부하 표시" - }, - "showNet": { - "label": "네트워크 표시" - }, - "showTemp": { - "label": "온도 표시" - }, - "showBattery": { - "label": "배터리 표시" - }, - "showServices": { - "label": "서비스 표시" - }, - "showUptime": { - "label": "가동 시간 표시" - }, - "showAgent": { - "label": "에이전트 버전 표시" - }, - "columnOrder": { - "label": "열 순서" - }, - "columnWidths": { - "label": "열 너비" } }, - "noRecords": "시스템을 찾을 수 없음", "error": { - "internalServerError": "Beszel에 연결할 수 없습니다. 통합 설정을 확인하십시오.", "layoutSaveTitle": "테이블 레이아웃을 저장할 수 없습니다", "layoutSaveMessage": "열 순서나 너비를 저장할 수 없습니다. 다시 시도해 주세요." - }, - "column": { - "system": "시스템", - "cpu": "CPU", - "memory": "메모리", - "disk": "디스크", - "gpu": "GPU", - "loadAvg": "평균 부하", - "net": "네트", - "temp": "온도", - "battery": "배터리", - "services": "서비스", - "uptime": "가동 시간", - "agent": "에이전트" } }, "beszelSystemGrid": { "name": "Beszel 시스템 (그리드)", - "description": "실시간 메트릭이 포함된 모든 Beszel 모니터링 시스템의 카드 그리드 보기", - "option": { - "statusFilter": { - "label": "상태 필터" - }, - "showCpu": { - "label": "CPU 표시" - }, - "showMemory": { - "label": "메모리 표시" - }, - "showDisk": { - "label": "디스크 표시" - }, - "showGpu": { - "label": "GPU 표시" - }, - "showLoadAvg": { - "label": "평균 부하 표시" - }, - "showNet": { - "label": "네트워크 표시" - }, - "showTemp": { - "label": "온도 표시" - }, - "showBattery": { - "label": "배터리 표시" - }, - "showServices": { - "label": "서비스 표시" - }, - "showUptime": { - "label": "가동 시간 표시" - }, - "showAgent": { - "label": "에이전트 버전 표시" - } - }, - "error": { - "internalServerError": "Beszel에 연결할 수 없습니다. 통합 설정을 확인하십시오." - }, - "empty": { - "noSystems": "시스템을 찾을 수 없음" - }, - "metric": { - "cpu": "CPU", - "memory": "메모리", - "disk": "디스크", - "gpu": "GPU", - "loadAvg": "평균 부하", - "net": "네트", - "temp": "온도", - "battery": "배터리", - "services": "서비스", - "uptime": "가동 시간", - "agent": "에이전트" - } + "description": "실시간 메트릭이 포함된 모든 Beszel 모니터링 시스템의 카드 그리드 보기" }, "beszelAlerts": { "name": "Beszel 알림", @@ -3661,11 +5073,12 @@ } }, "empty": "알림이 구성되지 않음", - "error": { - "internalServerError": "Beszel에 연결할 수 없습니다. 통합 설정을 확인하십시오." - }, "history": "기록", "resolved": "해결됨", + "alertDescription": { + "statusDuration": "{minutes}분 동안 중단됨", + "threshold": "{minutes}분 동안 {value} 초과" + }, "status": { "triggered": "트리거됨", "ok": "정상" @@ -3712,16 +5125,16 @@ "noSystems": "시스템을 찾을 수 없음" }, "error": { - "internalServerError": "Beszel에 연결할 수 없습니다. 통합 설정을 확인하십시오.", "liveConnectionFailed": "실시간 연결에 실패했습니다. Beszel 인스턴스가 실시간 스트리밍을 지원하지 않을 수 있습니다.", "switchToHistorical": "기록 보기로 전환", - "systemNotFound": "선택한 시스템을 찾을 수 없습니다. 다른 시스템을 선택하십시오." + "systemNotFound": "선택한 시스템을 찾을 수 없습니다. 다른 시스템을 선택하십시오.", + "selectionSaveTitle": "선택 항목을 저장할 수 없습니다", + "selectionSaveMessage": "시스템 또는 기간 선택을 저장할 수 없습니다. 다시 시도하십시오." }, "chart": { "cpu": { "title": "CPU 사용량", - "subtitle": "시스템 전체 평균 CPU 활용률", - "series": "CPU" + "subtitle": "시스템 전체 평균 CPU 활용률" }, "memory": { "title": "메모리 사용량", @@ -3763,289 +5176,550 @@ "title": "Docker 네트워크 I/O", "subtitle": "Docker 컨테이너의 네트워크 트래픽" } + }, + "period": { + "live": "실시간", + "oneHour": "1시간", + "twelveHours": "12시간", + "oneDay": "24시간", + "oneWeek": "1주", + "thirtyDays": "30일" } }, - "patchmon": { - "name": "PatchMon", - "description": "PatchMon의 호스트 패치 상태 개요", - "title": "PatchMon 통계", - "totalHosts": "총 호스트", - "hostsNeedingUpdates": "업데이트 필요", - "securityUpdates": "보안 업데이트", - "upToDateHosts": "최신 상태의 호스트", - "hostsWithSecurityUpdates": "보안 업데이트가 필요한 호스트", - "recentUpdates24h": "업데이트 (24시간)", - "totalOutdatedPackages": "오래된 패키지", - "totalRepos": "저장소", - "osDistribution": "OS 배포판", - "compliance": "패치 준수", - "complianceRatio": "{upToDate} / {total}", - "lastUpdated": "{time} 업데이트됨", - "option": { - "showTotalHosts": { - "label": "총 호스트 표시", - "description": "모니터링되는 총 호스트 수 표시" - }, - "showHostsNeedingUpdates": { - "label": "업데이트가 필요한 호스트 표시", - "description": "하나 이상의 오래된 패키지가 있는 호스트 표시" - }, - "showSecurityUpdates": { - "label": "보안 업데이트 표시", - "description": "사용 가능한 총 보안 업데이트 수 표시" - }, - "showUpToDateHosts": { - "label": "최신 호스트 표시", - "description": "오래된 패키지가 없는 호스트 표시" - }, - "showHostsWithSecurityUpdates": { - "label": "보안 업데이트가 필요한 호스트 표시", - "description": "보안 패치가 필요한 호스트 표시" - }, - "showRecentUpdates24h": { - "label": "최근 업데이트 (24시간) 표시", - "description": "지난 24시간 동안 적용된 업데이트 수 표시" - }, - "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": "OS 배포판 표시", - "description": "운영 체제별로 모니터링되는 호스트 분석 표시" - }, - "osDistributionLimit": { - "label": "OS 배포판 제한", - "description": "표시할 최대 운영 체제 수", - "option": { - "3": "상위 3개", - "5": "상위 5개", - "10": "상위 10개", - "all": "모두" - } - }, - "showOsVersion": { - "label": "OS 버전 표시", - "description": "사용 가능한 경우 각 배포판 레이블에 OS 버전 추가" - }, - "showComplianceHero": { - "label": "준수 상태 표시", - "description": "최신 호스트의 백분율을 표시하는 준수 링 표시" - }, - "osDisplayMode": { - "label": "OS 표시 모드", - "description": "운영 체제 배포판 표시 방법 선택", - "option": { - "bars": "가로 막대", - "donut": "도넛 차트" - } - } + "assistant": { + "name": "어시스턴트", + "description": "보드에서 바로 완전한 어시스턴트 대화를 진행합니다.", + "unavailable": { + "title": "어시스턴트를 사용할 수 없음", + "description": "로그인한 후 관리자에게 관리 패널에서 어시스턴트를 구성하도록 요청하십시오." }, + "compact": { + "title": "어시스턴트", + "description": "여기서 채팅하려면 이 위젯의 크기를 조정하거나 전체 대화를 여십시오.", + "open": "어시스턴트 열기", + "openTitle": "사이드 패널에서 어시스턴트 열림", + "openDescription": "대화는 하나의 활성 화면에 유지됩니다.", + "returnToWidget": "대화를 이 위젯으로 돌아오기", + "otherWidgetTitle": "다른 위젯에서 어시스턴트 활성화됨", + "otherWidgetDescription": "한 번에 하나의 대화 화면만 활성 상태로 유지됩니다.", + "useHere": "이 위젯에서 어시스턴트 사용" + } + }, + "beszel": { "error": { - "internalServerError": "PatchMon 데이터를 가져오지 못했습니다" - } - }, - "bazarr": { - "name": "Bazarr", - "description": "Bazarr 인스턴스의 누락된 자막 및 상태 개요", - "episodes": "누락된 에피소드", - "movies": "누락된 영화", - "providers": "제공자 문제", - "status": "상태 문제", - "option": { - "showMissingEpisodes": { - "label": "누락된 에피소드 표시", - "description": "누락된 자막이 있는 에피소드 수 표시" - }, - "showMissingMovies": { - "label": "누락된 영화 표시", - "description": "누락된 자막이 있는 영화 수 표시" - }, - "showProviderIssues": { - "label": "제공자 문제 표시", - "description": "문제가 있는 자막 제공자 수 표시" - }, - "showHealthIssues": { - "label": "상태 문제 표시", - "description": "Bazarr 상태 문제 수 표시" - } - }, - "error": { - "internalServerError": "Bazarr 데이터를 가져오지 못했습니다" - } - }, - "mediaMissing": { - "name": "누락 및 대기 중인 미디어", - "description": "Radarr 및 Sonarr의 누락 및 대기 중인 영화와 에피소드 표시", - "option": { - "showMissing": { - "label": "누락된 항목 표시" - }, - "showQueued": { - "label": "대기 중인 항목 표시" - }, - "pageSize": { - "label": "페이지당 항목 수" - } - }, - "tab": { - "missing": "누락", - "queued": "대기 중" - }, - "type": { - "movie": "영화", - "episode": "에피소드" + "internalServerError": "Beszel에 연결할 수 없습니다. 통합 설정을 확인하십시오." }, "empty": { - "missing": "누락된 항목 없음", - "queued": "대기 중인 항목 없음", - "noTabsEnabled": "위젯 설정에서 최소한 하나의 탭을 활성화하세요" + "noSystems": "시스템을 찾을 수 없음" }, - "timeLeft": "남은 시간" - }, - "traefik": { - "name": "Traefik", - "description": "Traefik 라우터, 서비스, 미들웨어 및 진입점 개요", - "option": { - "showTcp": { - "label": "TCP 표시" + "options": { + "statusFilter": { + "label": "상태 필터" }, - "showUdp": { - "label": "UDP 표시" + "showCpu": { + "label": "CPU 표시" }, - "showEntryPoints": { - "label": "진입점 표시" + "showMemory": { + "label": "메모리 표시" + }, + "showDisk": { + "label": "디스크 표시" + }, + "showGpu": { + "label": "GPU 표시" + }, + "showLoadAvg": { + "label": "평균 부하 표시" + }, + "showNet": { + "label": "네트워크 표시" + }, + "showTemp": { + "label": "온도 표시" + }, + "showBattery": { + "label": "배터리 표시" + }, + "showServices": { + "label": "서비스 표시" + }, + "showUptime": { + "label": "작동 시간 표시" + }, + "showAgent": { + "label": "에이전트 버전 표시" } }, - "instances": "Traefik 인스턴스", - "versionUnknown": "버전 알 수 없음", - "summary": { - "routers": "라우터", - "entryPoints": "진입점" - }, - "resource": { - "routers": "라우터", - "services": "서비스", - "middlewares": "미들웨어" - }, - "status": { - "healthy": "정상", - "errors": "{count}개 오류", - "warnings": "{count}개 경고" - }, - "error": { - "internalServerError": "Traefik 데이터를 가져오지 못함" + "metric": { + "system": "시스템", + "source": "통합", + "hostname": "호스트네임", + "cpuModel": "CPU 모델", + "cores": "코어", + "memoryTotal": "총 메모리", + "memory": "메모리", + "disk": "디스크", + "loadAvg": "평균 부하", + "net": "네트워크", + "temp": "온도", + "battery": "배터리", + "uptime": "작동 시간", + "agent": "에이전트" } }, - "wud": { - "name": "왓츠업 도커", - "description": "모니터링 중인 컨테이너에서 사용 가능한 업데이트 수를 표시합니다.", - "title": "What's Up Docker", - "monitored": "모니터링 중", - "updatesAvailable": "{count, plural, other {업데이트 #개 사용 가능}}", - "updateAvailable": "업데이트 사용 가능", - "openReleaseNotes": "릴리스 노트 열기", + "llamacpp": { + "name": "llama.cpp", + "description": "로컬 llama.cpp 서버의 상태, 로드된 모델 및 생성 속도를 표시합니다.", + "title": "llama.cpp", + "status": { + "unhealthy": "정상 아님({status})" + }, + "idle": "대기", + "speedTooltip": { + "current": "현재 생성 속도", + "average": "시작 이후 평균 생성 속도", + "request": "이 요청 시작 이후 평균 속도" + }, + "busy": "{count, plural, other {실행 중인 요청 #개}}", + "modelInfo": { + "context": "컨텍스트", + "size": "파일 크기", + "parameters": "매개변수", + "model": "모델", + "quantization": "양자화" + }, + "stats": { + "tokensProcessed": "처리된 토큰", + "contextUsage": "컨텍스트 / KV 사용량", + "cacheHitRate": "프롬프트 캐시 적중률", + "tokensGenerated": "생성된 토큰" + }, + "error": { + "unreachable": "llama-server에 연결할 수 없음" + }, + "unit": { + "speed": "{value} t/s", + "parameters": "{value}B", + "none": "—", + "speedShort": "t/s" + }, "option": { "showTitle": { "label": "제목 표시" }, - "showRing": { - "label": "업데이트 링 표시" + "showModelInfo": { + "label": "모델 정보 표시" }, - "layout": { - "label": "레이아웃", + "showContextUsage": { + "label": "컨텍스트 사용량 표시" + }, + "showCacheHitRate": { + "label": "캐시 적중률 표시" + }, + "showSpeedStats": { + "label": "속도 통계 표시" + }, + "showRequests": { + "label": "요청 부하 표시" + }, + "showTokenStats": { + "label": "토큰 합계 표시" + }, + "showSpeculative": { + "label": "추측 디코딩 표시" + } + }, + "advanced": { + "promptSpeed": "프롬프트 속도", + "avgSpeed": "평균 생성", + "requests": "요청", + "deferred": "지연됨", + "slots": "{processing}/{total} 슬롯 사용 중", + "speculative": "추측 디코딩", + "avgPrompt": "평균 프롬프트", + "specDrafts": "추측 초안", + "specAccepted": "추측 승인 토큰", + "specDraftTokens": "추측 초안 토큰" + } + }, + "stats": { + "name": "통계", + "description": "통합의 통계를 하나의 구성 가능한 위젯으로 결합합니다.", + "configure": "메트릭 구성", + "refresh": "통계 새로 고침", + "empty": "위젯 설정을 열고 통합을 선택한 다음 메트릭을 추가하십시오.", + "editorHelp": "이 위젯에 선택한 통합에서 메트릭을 추가합니다. 변경 사항은 대시보드와 함께 저장됩니다.", + "source": "통합", + "metric": "메트릭", + "noMetrics": "이 통합에 사용할 수 있는 통계 없음", + "add": "메트릭 추가", + "label": "사용자 지정 레이블", + "hidden": "숨김", + "compact": "간결한 숫자", + "moveUp": "위로 이동", + "moveDown": "아래로 이동", + "remove": "메트릭 제거", + "loading": "불러오는 중…", + "unavailable": "사용할 수 없음", + "refreshFailed": "새로 고침 실패 — 저장된 데이터 표시 중", + "stale": "저장된 데이터 — 업데이트하려면 새로 고침", + "table": { + "value": "값", + "status": "상태" + }, + "option": { + "table": { + "label": "표 보기" + }, + "rows": { + "label": "간결한 행" + }, + "showIcon": { + "label": "소스 아이콘 표시" + }, + "spacing": { + "label": "간격", "option": { - "horizontal": { - "label": "가로" + "xs": { + "label": "간결함" }, - "vertical": { - "label": "세로" + "sm": { + "label": "편안함" + }, + "md": { + "label": "넓게" } } }, - "showUpdateList": { - "label": "컨테이너 업데이트 목록 표시", - "description": "이미지 업데이트가 있는 각 모니터링 컨테이너를 나열합니다." + "entries": { + "label": "메트릭" + }, + "plain": { + "label": "카드 배경 제거" } - } + }, + "fetchFailed": "통계를 가져올 수 없습니다", + "viewOptions": "이 보기 사용자 지정", + "moreMetrics": "고급 보기에 {count}개 더 있음", + "localHelp": "레이아웃, 서식 및 표시 여부는 이 보기에만 적용됩니다. 공유 보드 설정은 변경되지 않습니다.", + "plain": "카드 배경 제거", + "resetView": "보기 초기화", + "allHidden": "이 보기에서는 모든 메트릭이 숨겨져 있습니다. 메트릭을 복원하려면 이 보기를 사용자 지정하십시오." + }, + "wazuh": { + "target": { + "api": "Wazuh 서버 API", + "indexer": "Wazuh 인덱서", + "wazuh": "Wazuh" + }, + "severity": { + "low": "낮음", + "medium": "보통", + "high": "높음", + "critical": "심각" + }, + "error": { + "unauthorized": { + "title": "{target}에서 자격 증명을 거부했습니다", + "description": "Wazuh 통합에 저장된 사용자 이름과 비밀번호를 확인하십시오. 서버 API(포트 55000)와 인덱서(포트 9200)는 별도의 사용자를 사용합니다." + }, + "certificate": { + "title": "{target} 인증서를 신뢰할 수 없습니다", + "description": "Wazuh는 기본적으로 자체 서명 인증서를 사용합니다. 통합에서 \"연결 테스트\"를 실행하여 인증서를 신뢰하거나 설정 → 인증서에서 CA를 추가하십시오." + }, + "unreachable": { + "title": "{target}에 연결할 수 없음", + "description": "호스트가 연결을 거부했거나 끊었습니다. URL, 포트 및 방화벽을 확인하십시오. 기본 올인원 설치에서는 인덱서가 localhost에서만 수신합니다." + }, + "timeout": { + "title": "{target} 시간 초과", + "description": "15초 이내에 응답이 없습니다. 서비스에 부하가 많거나 주소가 잘못되었을 수 있습니다." + }, + "status": { + "title": "{target}에서 오류 반환", + "description": "HTTP 상태 {status}로 요청에 실패했습니다." + }, + "invalidResponse": { + "title": "{target}의 예기치 않은 응답", + "description": "URL이 대시보드가 아닌 Wazuh 서버 API 또는 인덱서를 가리키는지 확인하십시오." + }, + "indexerRequired": { + "title": "Wazuh 인덱서 자격 증명 필요", + "description": "알림, 취약점 및 파일 무결성 이벤트는 Wazuh 인덱서에서 읽습니다. 통합에 인덱서 URL, 사용자 이름 및 비밀번호를 추가하십시오." + }, + "unknown": { + "title": "{target}에서 데이터를 불러올 수 없음", + "description": "자세한 내용은 Homarr 로그를 확인하십시오." + } + }, + "range": { + "1h": "1시간", + "24h": "24시간", + "7d": "7일", + "30d": "30일" + }, + "levelTooltip": "규칙 수준 {level}({severity})" + }, + "wazuhAgents": { + "name": "Wazuh 에이전트", + "description": "상태, OS, 버전 및 마지막 연결 유지 시간이 포함된 정렬 가능한 Wazuh 에이전트 목록", + "option": { + "statusFilter": { + "label": "에이전트 표시" + }, + "sortBy": { + "label": "정렬 기준" + }, + "showVersion": { + "label": "Wazuh 버전 열 표시" + }, + "showGroups": { + "label": "그룹 열 표시" + } + }, + "title": "에이전트", + "total": "에이전트 {count}개", + "status": { + "active": "활성", + "disconnected": "연결 해제됨", + "neverConnected": "연결된 적 없음", + "pending": "대기 중" + }, + "statusLabel": { + "active": "활성", + "disconnected": "연결 해제됨", + "never_connected": "연결된 적 없음", + "pending": "대기 중", + "unknown": "알 수 없음" + }, + "live": "실시간", + "snapshot": "{age} 오래된 스냅샷", + "snapshotHint": "{time}에 생성된 Wazuh 대시보드의 에이전트 스냅샷(wazuh-monitoring)에서 읽습니다. 실시간 데이터를 사용하려면 서버 API 자격 증명을 추가하십시오.", + "staleSnapshot": "{time}의 에이전트 스냅샷이 오래되었습니다. Wazuh 대시보드 모니터링 작업이 실행 중인지 확인하거나 서버 API 자격 증명을 추가하십시오.", + "noDisconnected": "모든 에이전트가 연결됨", + "empty": "이 필터와 일치하는 에이전트 없음", + "column": { + "status": "상태", + "name": "작업 이름", + "ip": "IP", + "os": "OS", + "version": "버전", + "lastKeepAlive": "연결 유지", + "groups": "그룹" + }, + "outdated": "최신 에이전트 버전({version})보다 오래됨" + }, + "wazuhAlerts": { + "name": "Wazuh 알림 피드", + "description": "수준, MITRE ATT&CK 기술, 에이전트 및 소스 IP가 포함된 최근 Wazuh 알림", + "option": { + "minLevel": { + "label": "최소 규칙 수준", + "description": "Wazuh 수준: 0~6 낮음, 7~11 중간, 12~14 높음, 15 이상 심각" + }, + "hours": { + "label": "시간 범위(시간)" + }, + "limit": { + "label": "알림 수" + }, + "showMitre": { + "label": "MITRE ATT&CK 기술 표시" + }, + "showAgent": { + "label": "에이전트 표시" + }, + "showSourceIp": { + "label": "소스 IP 표시" + }, + "showRuleId": { + "label": "규칙 ID 표시" + } + }, + "title": "알림 · 수준 {level}+ · {hours}시간", + "empty": "이 수준의 알림이 없습니다. 모두 정상입니다.", + "rule": "규칙 {id}", + "openInDashboard": "Wazuh 대시보드에서 이 알림 열기" + }, + "wazuhSummary": { + "name": "Wazuh 알림 심각도", + "description": "이전 기간과 비교한 추이가 포함된 알림 심각도 분석", + "option": { + "range": { + "label": "시간 범위" + }, + "showTrend": { + "label": "이전 기간과 비교한 추이 표시" + }, + "showFooter": { + "label": "바닥글 표시" + } + }, + "title": "알림 심각도 · {range}", + "alerts": "알림", + "none": "알림 없음", + "trend": { + "new": "신규", + "tooltip": "이전 기간: {previous}" + }, + "previous": "이전 {range}: {count}", + "maxLevel": "최대 수준 {level}", + "health": "인덱서 상태: {status}", + "manager": "관리자 {version}" + }, + "wazuhTimeline": { + "name": "Wazuh 알림 타임라인", + "description": "심각도별 시간 경과에 따른 Wazuh 알림 누적 차트", + "option": { + "range": { + "label": "시간 범위" + }, + "interval": { + "label": "간격" + }, + "chartType": { + "label": "차트 유형" + }, + "yScale": { + "label": "Y축 배율", + "description": "제곱근을 사용하면 수천 개의 낮은 알림 옆에 높은 알림과 심각한 알림을 표시할 수 있습니다" + }, + "minLevel": { + "label": "최소 규칙 수준" + }, + "showLegend": { + "label": "합계와 범례 표시" + } + }, + "title": "알림 타임라인 · {range}", + "total": "알림 {count}개", + "interval": "{interval}당" + }, + "wazuhTopList": { + "name": "Wazuh 상위 목록", + "description": "알림 수 기준 상위 규칙, 에이전트, 소스 IP 또는 MITRE ATT&CK 전술 및 기술", + "option": { + "kind": { + "label": "순위" + }, + "range": { + "label": "시간 범위" + }, + "limit": { + "label": "항목 수" + }, + "minLevel": { + "label": "최소 규칙 수준" + }, + "showBars": { + "label": "막대 표시" + } + }, + "title": { + "rules": "상위 규칙 · {range}", + "agents": "상위 에이전트 · {range}", + "sourceIps": "상위 소스 IP · {range}", + "mitreTactics": "MITRE 전술 · {range}", + "mitreTechniques": "MITRE 기술 · {range}" + }, + "empty": { + "rules": "이 기간에 알림 없음", + "agents": "이 기간에 알림 없음", + "sourceIps": "이 기간에 소스 IP가 있는 알림 없음", + "mitreTactics": "이 기간에 MITRE ATT&CK에 매핑된 알림 없음", + "mitreTechniques": "이 기간에 MITRE ATT&CK에 매핑된 알림 없음" + }, + "totalTooltip": "일치하는 알림 {count}개", + "private": "LAN", + "public": "공개", + "agents": "에이전트 {count}개에서 확인됨", + "others": "다른 항목에 알림 {count}개 더 있음" + }, + "wazuhVulnerabilities": { + "name": "Wazuh 취약점", + "description": "취약점 수, 상위 CVE 및 가장 취약한 에이전트", + "option": { + "cveOrder": { + "label": "CVE 순위 기준" + }, + "minSeverity": { + "label": "CVE 심각도" + }, + "cveLimit": { + "label": "CVE 수" + }, + "agentLimit": { + "label": "에이전트 수" + }, + "showAgents": { + "label": "가장 취약한 에이전트 표시" + } + }, + "title": "취약점", + "topCves": "상위 CVE", + "score": "점수", + "agentsShort": "에이전트", + "topAgents": "가장 취약한 에이전트", + "criticalHigh": "심각 / 높음", + "totalTooltip": "에이전트 {agents}개에서 발견 {count}개", + "affected": "에이전트 {count}개", + "empty": "감지된 취약점 없음", + "distribution": "심각도 분포입니다. 점수가 없는 {unscored}개의 발견 항목은 표시되지 않습니다.", + "worst": "최악: {agents}개 에이전트의 {id}({score})" + }, + "wazuhFim": { + "name": "Wazuh 파일 무결성", + "description": "최근 파일 무결성 모니터링(syscheck) 이벤트", + "option": { + "range": { + "label": "시간 범위" + }, + "event": { + "label": "이벤트" + }, + "limit": { + "label": "이벤트 수" + }, + "includeRegistry": { + "label": "Windows 레지스트리 이벤트 포함" + } + }, + "title": "파일 무결성 · {range}", + "event": { + "added": "추가된 날짜", + "modified": "수정됨", + "deleted": "삭제됨", + "unknown": "변경됨" + }, + "empty": "이 기간에 파일 무결성 이벤트 없음", + "user": "{user}에 의해", + "registry": "레지스트리" + }, + "wazuhAuthFailures": { + "name": "Wazuh 인증 실패", + "description": "시간별 스파크라인으로 에이전트별 로그인 실패 및 무차별 대입 알림 표시", + "option": { + "hours": { + "label": "시간 범위(시간)" + }, + "limit": { + "label": "에이전트 수" + }, + "showSourceIps": { + "label": "상위 소스 IP 표시" + } + }, + "title": "인증 실패 · {hours}시간", + "seriesTooltip": "지난 {hours}시간 동안의 모든 에이전트", + "peak": "최대 {count}/구간", + "empty": "이 기간에 로그인 실패 없음", + "failed": "로그인 실패", + "failedHint": "개별 인증 실패(sshd, PAM, Windows 로그온, 잘못된 사용자)", + "bruteForce": "무차별 대입", + "bruteForceHint": "연관된 무차별 대입 규칙(짧은 시간 내 여러 실패, MITRE T1110)", + "sourceIps": "소스 IP", + "ipTooltip": "{ip}: 실패 {count}회", + "bruteForceCount": "무차별 대입 {count}회" } }, "widgetPreview": { @@ -4058,7 +5732,76 @@ } }, "board": { + "emptyState": { + "title": "첫 화면 만들기", + "description": "위젯이나 앱을 추가하거나 서비스를 연결하여 이 보드에서 해당 데이터를 사용하십시오.", + "addWidget": "위젯 추가", + "addApp": "앱 추가", + "connectService": "서비스 연결" + }, + "setupChecklist": { + "title": "이 보드를 유용하게 만들기", + "description": "중단한 지점부터 계속합니다. 진행률은 이 보드에 이미 있는 콘텐츠를 따릅니다.", + "collapse": "설정 체크리스트 접기", + "dismiss": "", + "resume": "설정 계속({completed}/{total})", + "progress": "보드 설정 진행률", + "step": { + "content": { + "label": "유용한 콘텐츠 추가", + "description": "위젯을 선택하고 배치하기 전에 구성하십시오." + }, + "app": { + "label": "앱 고정", + "description": "이 보드에서 서비스나 도구를 한 번의 클릭으로 사용할 수 있도록 유지합니다." + }, + "service": { + "label": "서비스 연결", + "description": "호환되는 위젯의 실시간 데이터와 작업을 잠금 해제합니다.", + "permissionDescription": "관리자는 실시간 데이터를 사용하도록 서비스를 연결할 수 있습니다.", + "action": "연결" + } + } + }, "action": { + "addContent": "보드 콘텐츠 추가", + "settings": "보드 설정", + "switch": "보드 전환", + "switcher": { + "title": "보드 전환", + "search": { + "empty": "\"{search}\"와 일치하는 보드가 없습니다." + }, + "results": "사용 가능한 보드", + "preview": "항목 {count}개가 있는 {name} 미리보기", + "currentHidden": "현재 보드: {name}", + "keyboard": { + "navigate": "탐색", + "open": "열기", + "instructions": "입력하여 보드를 필터링하십시오. 화살표 키로 결과를 이동하고 Enter 키로 보드를 여십시오." + }, + "empty": { + "title": "다른 보드 없음", + "description": "액세스할 수 있는 다른 보드가 없습니다." + }, + "error": "보드를 불러올 수 없습니다." + }, + "create": { + "availability": { + "checking": "사용 가능 여부 확인 중…", + "available": "{name} 사용 가능" + }, + "notification": { + "success": { + "title": "보드 생성됨", + "message": "보드 {name}이 생성되었습니다" + }, + "error": { + "title": "보드를 생성할 수 없습니다", + "message": "보드 {name}을 생성할 수 없습니다" + } + } + }, "duplicate": { "title": "보드 복사", "message": "{name} 보드 및 모든 컨텐츠를 복사합니다. 사용할 수 없는 통합을 참조하는 위젯일 경우 제거됩니다.", @@ -4074,14 +5817,19 @@ } }, "edit": { + "enter": "보드 편집", + "save": "보드 저장", + "exit": "편집 모드 종료", "notification": { "success": { - "title": "변경 사항 적용 완료", "message": "보드 저장이 완료되었습니다" }, "error": { - "title": "변경 사항 적용 실패", "message": "보드를 저장할 수 없었습니다" + }, + "loadError": { + "title": "편집을 시작할 수 없습니다", + "message": "보드 편집기를 불러올 수 없습니다. 대시보드는 보기 모드에서 계속 사용할 수 있습니다." } }, "confirmLeave": { @@ -4089,62 +5837,6 @@ "message": "저장되지 않은 변경 사항이 있습니다. 나가시겠습니까?" } }, - "oldImport": { - "label": "1.0.0 이전의 Homarr에서 가져오기", - "notification": { - "success": { - "title": "가져오기 완료", - "message": "보드 가져오기가 완료되었습니다" - }, - "error": { - "title": "가져오기 실패", - "message": "보드를 가져올 수 없었습니다, 상세 내용은 로그를 확인해 주십시오" - } - }, - "form": { - "file": { - "label": "JSON 파일 선택", - "invalidError": "올바르지 않은 설정 파일" - }, - "apps": { - "label": "앱", - "avoidDuplicates": { - "label": "중복 방지", - "description": "동일한 href를 가진 앱에서는 가져오기 내용을 무시합니다" - }, - "onlyImportApps": { - "label": "앱만 가져오기", - "description": "앱만 추가합니다. 보드는 수동으로 다시 생성해야 합니다" - } - }, - "name": { - "label": "보드 이름" - }, - "screenSize": { - "label": "화면 크기", - "description": "1.0 이전 버전에서는 세 가지의 다른 모드가 존재했으므로 각 화면 크기에 맞는 열 수를 선택할 수 있었습니다.", - "option": { - "sm": "작음", - "md": "중간", - "lg": "큼" - } - }, - "sidebarBehavior": { - "label": "사이드바 행동", - "description": "사이드바는 1.0에서 제거되었으며, 그 안에 있던 항목을 어떻게 처리할지 선택할 수 있습니다.", - "option": { - "lastSection": { - "label": "마지막 섹션", - "description": "마지막 섹션 아래에 사이드바를 표시합니다" - }, - "removeItems": { - "label": "항목 제거", - "description": "사이드바 내에 있는 항목을 제거합니다" - } - } - } - } - }, "quickCreateApp": { "modal": { "title": "즉석 앱 생성", @@ -4152,6 +5844,12 @@ } } }, + "landmark": { + "canvas": "대시보드 캔버스", + "leftRail": "대시보드 왼쪽 레일", + "rightRail": "대시보드 오른쪽 레일", + "items": "대시보드 항목" + }, "field": { "pageTitle": { "label": "페이지 제목" @@ -4221,7 +5919,8 @@ } }, "primaryColor": { - "label": "기본 색상" + "label": "기본 색상", + "locked": "관리자가 모든 보드에서 인스턴스 브랜드 색상을 유지합니다." }, "secondaryColor": { "label": "보조 색상" @@ -4261,9 +5960,6 @@ "xl": "매우 크게" } }, - "name": { - "label": "이름" - }, "isPublic": { "label": "공개", "description": "공개 게시판은 계정이 없어도 누구나 접근할 수 있습니다." @@ -4283,9 +5979,44 @@ "title": "레이아웃", "responsive": { "title": "반응형 레이아웃", + "description": "각 레이아웃은 자체 위젯 위치와 크기를 유지합니다. 모바일 및 기본 레이아웃은 항상 사용할 수 있으며, 추가 중단점에서 사용자 지정 레이아웃을 추가할 수 있습니다.", "action": { "add": "레이아웃 추가" } + }, + "role": { + "mobile": "모바일", + "base": "기본", + "custom": "사용자 지정" + }, + "custom": { + "defaultName": "사용자 지정 레이아웃" + }, + "mobile": { + "breakpointDescription": "모바일은 0px부터 다음 레이아웃 중단점까지 항상 사용됩니다." + }, + "preview": { + "columns": "열", + "empty": "이 레이아웃은 비어 있습니다", + "dynamicSection": "동적 섹션", + "editorWidthLabel": "{layoutName} · {width}px" + }, + "reset": { + "action": "기본에서 초기화", + "confirm": { + "title": "{layoutName}을 초기화하시겠습니까?", + "message": "이 레이아웃의 저장된 모든 위치와 크기를 기본 레이아웃에서 새로 생성된 레이아웃으로 바꿉니다. 실행 취소할 수 없습니다." + } + }, + "edit": { + "action": "레이아웃 편집   },{", + "saveAndEdit": "저장하고 편집하기", + "save": "레이아웃 저장", + "cancel": { + "action": "레이아웃 편집 취소", + "title": "레이아웃 변경 사항을 취소하시겠습니까?", + "message": "이 레이아웃의 저장되지 않은 변경 사항이 취소됩니다." + } } }, "background": { @@ -4322,10 +6053,7 @@ "rename": { "label": "보드 이름 변경", "description": "이름을 변경하면 이 보드에 대한 링크가 끊어집니다.", - "button": "이름 변경", - "modal": { - "title": "보드 이름 변경" - } + "button": "이름 변경" }, "visibility": { "label": "보드 표시 변경", @@ -4349,9 +6077,7 @@ } }, "delete": { - "label": "이 보드 삭제", "description": "보드를 삭제하면 되돌릴 수 없습니다. 다시 한 번 확인해 주십시오.", - "button": "이 보드 삭제", "confirm": { "title": "게시판 삭제", "description": "이 보드를 삭제하시겠습니까? 보드 및 모든 컨텐츠가 영구적으로 삭제됩니다." @@ -4396,28 +6122,41 @@ }, "layout": { "field": { - "name": { - "label": "이름" - }, "columnCount": { "label": "열 개수" }, "breakpoint": { "label": "중단점", "description": "레이아웃은 이 중단점보다 크고 다음 중단점보다 작은 경우 사용됩니다." + }, + "gutters": { + "label": "고정 사이드바", + "description": "양쪽에 대시보드 열을 최대 세 개까지 예약합니다. 나머지 캔버스는 자동으로 재배치됩니다.", + "left": { + "label": "왼쪽 사이드바", + "description": "대시보드를 스크롤하는 동안 이 영역을 계속 표시합니다.", + "thumbLabel": "왼쪽 사이드바 너비" + }, + "right": { + "label": "오른쪽 사이드바", + "description": "대시보드를 스크롤하는 동안 이 영역을 계속 표시합니다.", + "thumbLabel": "오른쪽 사이드바 너비" + }, + "width": { + "label": "열 너비" + }, + "preview": { + "label": "대시보드 레이아웃 미리보기" + } } } }, "management": { "metaTitle": "관리", - "title": { - "morning": "좋은 아침입니다, {username}", - "afternoon": "좋은 오후입니다, {username}", - "evening": "좋은 저녁입니다, {username}" - }, "notFound": { "title": "찾을 수 없음", - "text": "요청한 리소스를 찾을 수 없습니다" + "text": "요청한 리소스를 찾을 수 없습니다", + "backToHome": "관리 홈으로 돌아가기" }, "error": { "title": "이 페이지를 로드할 수 없습니다", @@ -4426,19 +6165,10 @@ }, "navbar": { "items": { - "workshop": "Workshop", "home": "홈", - "boards": "보드", - "apps": "앱", - "integrations": "통합", - "searchEngies": "검색 엔진", - "medias": "미디어", "users": { - "label": "사용자", "items": { - "manage": "관리", - "invites": "초대", - "groups": "그룹" + "manage": "관리" } }, "tools": { @@ -4446,10 +6176,7 @@ "items": { "docker": "Docker", "kubernetes": "Kubernetes", - "logs": "로그", "api": "API 및 MCP", - "certificates": "인증서", - "tasks": "작업", "backup": "백업" } }, @@ -4463,21 +6190,12 @@ "sourceCode": "소스 코드" } }, - "about": "정보" + "about": "정보", + "assistant": "어시스턴트" } }, "page": { "home": { - "statistic": { - "board": "보드", - "user": "사용자", - "invite": "초대", - "integration": "통합", - "app": "앱", - "group": "그룹", - "searchEngine": "검색 엔진", - "media": "미디어" - }, "statisticLabel": { "boards": "보드", "resources": "리소스", @@ -4515,13 +6233,8 @@ "tooltip": "이 보드를 모바일 보드로 표시합니다" } }, - "duplicate": { - "label": "보드 복사" - }, "delete": { - "label": "영구 삭제", "confirm": { - "title": "게시판 삭제", "description": "{name} 보드를 삭제하시겠습니까?" } } @@ -4530,28 +6243,82 @@ "public": "이 보드는 공개 보드입니다", "private": "이 보드는 개인 보드입니다" }, - "noResults": { - "title": "아직 보드가 없습니다" + "preview": { + "label": "{name}의 레이아웃 미리보기, 항목 {count}개", + "unknownCreator": "알 수 없는 제작자" }, - "modal": { - "createBoard": { - "field": { - "name": { - "label": "이름" - } - } - } + "noResults": { + "title": "아직 보드가 없습니다", + "description": "앱과 위젯을 한곳에 배치할 보드를 만들어 보세요." } }, "media": { "includeFromAllUsers": "모든 사용자의 미디어 포함" }, "user": { - "back": "사용자로 돌아가기", "fieldsDisabledExternalProvider": "특정 필드는 외부 인증 제공자에 의해 관리되므로 비활성화됩니다.", "setting": { "general": { "title": "일반", + "header": { + "title": "헤더 스튜디오", + "badge": "개인", + "description": "행의 어디든 컨트롤을 끌어 놓으세요. 왼쪽, 가운데, 오른쪽은 고정된 상태로 컨트롤이 주변에서 이동합니다.", + "device": { + "desktop": "데스크톱", + "mobile": "모바일" + }, + "zones": { + "left": "왼쪽", + "center": "가운데", + "right": "오른쪽" + }, + "action": { + "hide": "헤더 숨기기", + "show": "헤더 표시", + "configure": "{item} 이동 또는 구성", + "remove": "{item} 제거", + "dropIntoZone": "{zone} 섹션으로 이동" + }, + "preview": { + "board": "{name}의 대시보드 미리보기", + "empty": "사용 가능한 대시보드 레이아웃이 없습니다" + }, + "available": { + "title": "사용 가능한 컨트롤", + "description": "컨트롤을 추가한 다음 위의 전체 버튼을 원하는 위치로 끌어 놓으세요.", + "requiredAlways": "이 컨트롤은 필수이지만 헤더의 어디든 이동할 수 있습니다.", + "allAdded": "모든 기본 제공 컨트롤이 이미 헤더에 있습니다.", + "add": "{item} 추가", + "boardShortcut": "보드 바로 가기", + "chooseBoard": "보드 선택" + }, + "configuration": { + "description": "이 컨트롤은 실제 헤더에서와 동일한 크기로 유지됩니다.", + "searchDisplay": { + "input": "검색창", + "icon": "아이콘만" + }, + "logoDisplay": { + "logo": "로고만", + "logoAndText": "로고 + 텍스트" + } + }, + "items": { + "logo": "로고", + "search": "검색", + "home": "홈 보드", + "boardSwitcher": "보드", + "assistant": "어시스턴트", + "docker": "Docker", + "boardEdit": "보드 편집", + "boardSettings": "보드 설정", + "settings": "내 설정", + "themeToggle": "테마 전환", + "user": "계정", + "boardUnavailable": "보드를 사용할 수 없음" + } + }, "item": { "language": "언어 & 지역", "board": { @@ -4585,14 +6352,10 @@ }, "security": { "title": "보안" - }, - "board": { - "title": "보드" } }, "list": { - "metaTitle": "사용자 관리", - "title": "사용자" + "metaTitle": "사용자 관리" }, "edit": { "metaTitle": "사용자 {username} 편집" @@ -4646,9 +6409,6 @@ } }, "field": { - "id": { - "label": "ID" - }, "creator": { "label": "크리에이터" }, @@ -4672,10 +6432,7 @@ }, "setting": { "title": "설정", - "alert": "그룹 설정은 목록의 그룹 순서에 따라 우선순위가 매겨집니다. 상위 설정은 하위 설정을 덮어씁니다.", - "board": { - "title": "보드" - } + "alert": "그룹 설정은 목록의 그룹 순서에 따라 우선순위가 매겨집니다. 상위 설정은 하위 설정을 덮어씁니다." }, "members": { "title": "멤버", @@ -4683,10 +6440,7 @@ "notFound": "멤버 없음" }, "permissions": { - "title": "권한", - "form": { - "unsavedChanges": "저장하지 않은 변경 사항이 있습니다!" - } + "title": "권한" } } }, @@ -4695,12 +6449,10 @@ "notification": { "success": { "message": "설정 저장 완료" - }, - "error": { - "message": "설정 저장 실패" } }, "section": { + "analyticsDocumentation": "Homarr가 수집하는 분석 데이터를 정확히 확인하세요", "analytics": { "title": "분석", "general": { @@ -4729,7 +6481,6 @@ } }, "board": { - "title": "보드", "homeBoard": { "label": "글로벌 홈 보드", "mobileLabel": "글로벌 모바일 보드", @@ -4748,7 +6499,6 @@ } }, "user": { - "title": "사용자", "enableGravatar": { "label": "Gravatar 활성화", "description": "사용자 지정 아바타가 설정되지 않고 이메일이 구성된 경우 Libravatar/Gravatar의 사용자 아바타로 대체됩니다" @@ -4764,12 +6514,86 @@ "appearance": { "title": "모양", "defaultColorScheme": { - "label": "기본 색상 구성표", + "label": "기본 색상 구성표" + } + }, + "branding": { + "title": "인스턴스 브랜딩", + "groups": { + "identity": "아이덴티티", + "appearance": "모양", + "customCss": "사용자 지정 CSS", + "authentication": "인증" + }, + "identity": { + "description": "애플리케이션 로고는 앱 내부, 로그인 페이지 및 설치된 앱에서 사용되는 큰 표시입니다. 브라우저 아이콘(favicon)은 탭과 북마크에 사용되는 작은 정사각형 아이콘이며, 비어 있으면 애플리케이션 로고로 대체됩니다." + }, + "appName": { + "label": "애플리케이션 이름" + }, + "greeting": { + "label": "사용자 지정 인사말" + }, + "logo": { + "label": "애플리케이션 로고", + "placeholder": "/logo/logo.png" + }, + "favicon": { + "label": "브라우저 아이콘(favicon)", + "placeholder": "애플리케이션 로고 사용" + }, + "primaryColor": { + "label": "기본 색상" + }, + "secondaryColor": { + "label": "보조 강조 색상" + }, + "lockPrimaryColor": { + "label": "모든 보드에서 이 색상 유지", + "description": "보드 색상이 애플리케이션 강조 색상을 대체하지 못하게 합니다." + }, + "signInBackground": { + "label": "인증 배경", + "placeholder": "https://example.com/background.jpg" + }, + "signInOverlay": { + "label": "배경 오버레이" + }, + "defaultRadius": { + "label": "모서리 스타일", "options": { - "auto": "자동", - "light": "라이트", - "dark": "다크" + "xs": "좁게", + "sm": "미세하게", + "md": "균형 있게", + "lg": "둥글게", + "xl": "부드럽게" } + }, + "customCss": { + "label": "전역 사용자 지정 CSS", + "description": "모든 페이지에 적용됩니다. 보드의 사용자 지정 CSS가 이를 재정의할 수 있습니다." + }, + "authVisibility": { + "description": "모든 인증 페이지에 표시할 항목을 선택하세요.", + "appName": "애플리케이션 이름", + "logo": "애플리케이션 로고", + "greeting": "인사말" + }, + "summary": { + "title": "현재 브랜딩", + "cornerStyle": "모서리 스타일", + "palette": "팔레트", + "backgroundConfigured": "사용자 지정 배경 · 오버레이 {overlay}%", + "backgroundDefault": "기본 배경", + "greetingConfigured": "사용자 지정 인사말", + "greetingDefault": "기본 인사말", + "boardColorLocked": "보드 색상 잠금", + "boardColorFlexible": "보드 색상 허용", + "appName": "작업 이름", + "logo": "로고", + "greeting": "인사말", + "on": "켜짐", + "off": "꺼짐" } }, "culture": { @@ -4777,12 +6601,177 @@ "defaultLocale": { "label": "기본 언어" } + }, + "assistant": { + "loading": "어시스턴트 구성 로드 중", + "title": "어시스턴트", + "description": "인스턴스 전체에서 사용할 어시스턴트에 OpenAI 호환 모델 엔드포인트를 연결하세요.", + "security": { + "description": "API 키와 추가 헤더 값은 Homarr 데이터베이스에서 암호화됩니다. 브라우저로 반환되지 않으며, 모델 요청은 Homarr 서버에서 구성된 엔드포인트로 직접 전송됩니다." + }, + "overview": { + "connectionReady": "연결 준비 완료", + "unsavedChanges": "저장되지 않은 변경 사항", + "setupRequired": "설정 필요", + "disabled": "장애인", + "noModel": "선택된 모델 없음" + }, + "connection": { + "endpointTitle": "공급자 및 엔드포인트", + "description": "사전 설정을 선택하거나 OpenAI Chat Completions API를 구현하는 서비스를 연결하세요.", + "save": "공급자 연결 저장" + }, + "credentials": { + "title": "자격 증명", + "description": "이 엔드포인트에 필요한 비밀 값을 추가하세요. 저장된 값은 암호화되어 다시 읽을 수 없습니다.", + "required": "키 필수", + "optional": "키 선택 사항", + "workshop": "사용자별 GitHub 로그인" + }, + "provider": { + "title": "공급자", + "groups": { + "free": "Homarr에서 무료", + "hosted": "호스팅된 공급자", + "local": "로컬 공급자", + "custom": "사용자 지정" + }, + "options": { + "homarr": { + "description": "매일 제한된 수의 어시스턴트 사용이 무료이며 Homarr 팀이 비용을 부담합니다. Community Workshop으로 로그인하여 할당량을 사용하세요." + }, + "openrouter": { + "description": "도구를 지원하는 대규모 모델 카탈로그를 통한 호스팅 모델 라우팅입니다." + }, + "openai": { + "description": "공식 API 엔드포인트를 통한 OpenAI Chat Completions입니다." + }, + "anthropic": { + "description": "Anthropic의 OpenAI SDK 호환 엔드포인트를 통한 Claude입니다." + }, + "google-gemini": { + "description": "Google의 OpenAI 호환 API 엔드포인트를 통한 Gemini입니다." + }, + "xai": { + "description": "xAI의 OpenAI 호환 API를 통한 Grok 모델입니다." + }, + "groq": { + "description": "Groq의 OpenAI 호환 API를 통한 빠른 호스팅 추론입니다." + }, + "mistral": { + "description": "공식 API를 통한 Mistral 모델입니다." + }, + "deepseek": { + "description": "DeepSeek의 OpenAI 호환 API를 통한 DeepSeek 모델입니다." + }, + "together": { + "description": "Together의 OpenAI 호환 API를 통한 호스팅 오픈 모델입니다." + }, + "ollama": { + "description": "OpenAI 호환 API를 사용하는 로컬 또는 네트워크 Ollama 서버입니다." + }, + "lm-studio": { + "description": "OpenAI 호환이 활성화된 LM Studio 로컬 서버입니다." + }, + "llama-cpp": { + "description": "OpenAI 호환 API를 사용하는 로컬 또는 네트워크 llama.cpp 서버입니다." + }, + "custom": { + "label": "사용자 지정 엔드포인트", + "description": "OpenAI Chat Completions와 호환되는 기타 모든 엔드포인트입니다." + } + }, + "homarrAuth": { + "title": "매일 제공되는 무료 어시스턴트 사용량", + "description": "API 키가 필요하지 않습니다. Homarr 팀이 매일 제한된 수의 어시스턴트 사용 비용을 부담합니다. Community Workshop으로 로그인하여 할당량을 별도로 유지하세요." + } + }, + "baseUrl": { + "title": "API 기본 URL", + "description": "일반적으로 /v1인 API 접두사를 포함하세요. 컨테이너에서 localhost는 Homarr 컨테이너를 가리킵니다." + }, + "apiKey": { + "title": "API 키", + "required": "이 공급자에 필요합니다. 값은 암호화되며 쓰기 전용입니다.", + "optional": "로컬 엔드포인트에는 선택 사항입니다. 서비스에 bearer 인증이 필요하지 않으면 비워 두세요.", + "placeholder": "API 키 입력", + "savedTitle": "암호화된 API 키 저장됨", + "savedDescription": "Homarr는 이 키를 사용할 수 있지만 값을 표시하거나 복구할 수 없습니다.", + "remove": "저장된 API 키 제거", + "removeFlow": { + "title": "저장된 API 키를 제거하시겠습니까?", + "description": "이 공급자에는 API 키가 필요합니다. 키를 제거하면 다른 키를 저장할 때까지 모델 검색과 어시스턴트 응답이 중단될 수 있습니다.", + "optionalDescription": "이 키를 제거하면 엔드포인트가 bearer 인증을 받지 않습니다. 인증되지 않은 요청을 허용하거나 저장된 다른 헤더를 사용하는지 확인하세요.", + "cancel": "저장된 키 유지", + "confirm": "API 키 제거" + } + }, + "headers": { + "title": "추가 요청 헤더", + "description": "선택적 인증 또는 라우팅 헤더입니다. 헤더 값은 암호화되며 쓰기 전용입니다.", + "add": "헤더 추가", + "name": "헤더 이름", + "value": "헤더 값", + "valuePlaceholder": "비밀 또는 라우팅 값", + "remove": "헤더 제거", + "configured": "추가 암호화 헤더가 구성되어 있습니다. 헤더를 추가하면 저장된 전체 집합이 대체됩니다.", + "empty": "이 공급자에 저장된 추가 헤더가 없습니다.", + "savedBadge": "헤더 저장됨", + "pendingRemoval": "제거 대기 중", + "clear": "저장 시 저장된 헤더 제거", + "keep": "저장된 헤더 유지" + }, + "model": { + "title": "모델", + "description": "검색된 모델을 선택하거나 정확한 엔드포인트 모델 ID를 입력하세요.", + "placeholder": "모델 ID", + "refresh": "모델 새로 고침", + "chooseModel": "새 대화에 사용할 모델을 선택하세요.", + "discoveryPath": "모델 검색 경로", + "discoveryPathDescription": "API 기본 URL에 추가됩니다. 검색을 비활성화하고 수동 모델 ID를 사용하려면 비워 두세요.", + "manual": "모델 ID를 수동으로 입력하거나 연결을 저장하여 모델을 검색하세요.", + "manualFallback": "검색을 사용할 수 없습니다. 모델 ID를 수동으로 입력할 수 있습니다.", + "saveConnectionFirst": "모델을 선택하기 전에 공급자 연결을 저장하세요.", + "discovering": "이 공급자에서 사용 가능한 모델을 새로 고치는 중…", + "discovered": "{count, plural, other {#개의 모델을 발견했습니다. 선택한 엔드포인트와 모델에 따라 도구 지원 여부가 달라집니다.}}", + "discoveryFailed": "모델 검색이 완료되지 않았습니다", + "context": "컨텍스트 창 {count}", + "toolsConfirmed": "광고된 도구", + "toolsUnknown": "도구 지원 확인" + }, + "serverTools": { + "title": "서버 도구", + "webSearch": { + "label": "웹 검색", + "description": "요청에 최신 정보가 필요할 때 OpenRouter를 통해 모델이 실시간 웹을 검색하도록 허용합니다. 검색 사용량은 OpenRouter에서 별도로 청구됩니다.", + "proxyDescription": "OpenRouter의 웹 검색 서버 도구를 이 엔드포인트로 보냅니다. 사용자 지정 엔드포인트가 Homarr Router 프록시와 같은 OpenRouter 서버 도구 형식을 전달하는 경우에만 활성화하세요.", + "limit": "모델이 검색 시점을 결정하며, 각 요청당 검색은 최대 3회, 검색당 결과는 5개로 제한됩니다." + } + }, + "enabled": { + "label": "어시스턴트 활성화", + "description": "로그인한 모든 사용자에게 어시스턴트를 표시합니다. 기존 Homarr 권한은 모든 내부 도구 호출에 계속 적용됩니다." + }, + "save": "어시스턴트 저장", + "notification": { + "connectionSaved": { + "title": "공급자 연결 저장됨", + "message": "엔드포인트와 암호화된 자격 증명을 모델 선택에 사용할 수 있습니다.", + "credentialsCleared": "엔드포인트가 변경되어 이전 자격 증명이 삭제되었습니다. 필요한 경우 새 대상의 자격 증명을 추가하세요." + }, + "saved": { + "title": "어시스턴트 설정 저장됨", + "message": "새 모델 및 사용 가능성 설정이 활성화되었습니다." + }, + "error": { + "title": "어시스턴트 설정을 저장할 수 없습니다" + } + } } } }, "tool": { "tasks": { - "title": "작업", "status": { "idle": "대기", "running": "실행 중", @@ -4800,6 +6789,11 @@ "label": "핑" } }, + "action": { + "run": "지금 {name} 실행", + "enable": "{name} 활성화", + "disable": "{name} 비활성화" + }, "interval": { "seconds": "매 {interval, plural, =1 {초} other {# 초}}", "minutes": "매 {interval, plural, =1 {분} other {# 분}}", @@ -4815,13 +6809,7 @@ } } }, - "settings": { - "title": "{jobName} 작업 설정" - }, "field": { - "name": { - "label": "이름" - }, "interval": { "label": "스케줄 간격" }, @@ -4835,11 +6823,6 @@ "table": { "search": "{count}개 작업 검색..." }, - "action": { - "refresh": { - "label": "새로고침" - } - }, "refresh": { "success": { "message": "작업 새로고침 완료" @@ -4873,7 +6856,6 @@ } }, "api": { - "title": "API", "modal": { "createApiToken": { "title": "API 토큰 생성됨", @@ -4899,7 +6881,6 @@ }, "table": { "header": { - "id": "ID", "createdBy": "생성자", "actions": "동작" } @@ -4955,43 +6936,12 @@ "availableTools": { "title": "사용 가능한 도구", "description": "{count}개의 도구를 사용할 수 있습니다. 카테고리를 확장하여 개별 도구와 설명을 확인하십시오.", - "columnType": "유형", - "columnName": "도구", - "columnDescription": "설명" - }, - "troubleshooting": { - "title": "문제 해결", - "missingHeader": { - "title": "\"ApiKey 헤더 누락\"", - "description": "클라이언트가 {header} 헤더를 보내지 않습니다. MCP 구성의 {section} 섹션이 올바른지 확인하십시오. 일부 클라이언트는 구성 변경 후 다시 시작해야 합니다." - }, - "invalidFormat": { - "title": "\"잘못된 ApiKey 형식\"", - "description": "API 키의 일부가 아닌 전체 API 키를 복사했는지 확인하십시오." - }, - "invalidKey": { - "title": "\"잘못된 API 키\"", - "description": "키 ID를 찾을 수 없거나 토큰이 잘못되었습니다. API 키는 생성할 때 한 번만 볼 수 있습니다. 분실한 경우 이전 키를 삭제하고 새 키를 만드십시오." - }, - "connectionRefused": { - "title": "연결 거부됨 / 시간 초과", - "description": "AI 클라이언트에서 URL에 연결할 수 있는지 확인하십시오. Homarr가 리버스 프록시 뒤 또는 Docker에서 실행되는 경우 외부 URL({localhost}가 아님)을 사용하십시오. 포트가 올바른지 확인하십시오(기본값: Docker의 경우 7575)." - }, - "toolsNotAppearing": { - "title": "도구가 나타나지 않음", - "description": "일부 도구는 특정 통합(예: Docker, Overseerr)이 구성되어야 합니다. 도구 목록은 Homarr 인스턴스에서 사용 가능한 항목에 따라 다릅니다." + "filteredDescription": "확장된 카테고리 전체에서 일치하는 도구 {count}개입니다.", + "search": "도구 검색", + "noResults": { + "title": "이 검색과 일치하는 도구가 없습니다", + "description": "\"{search}\"와 일치하는 MCP 도구가 없습니다. 네임스페이스, 도구 이름 또는 설명을 검색해 보세요." } - }, - "copy": "복사", - "oneClick": { - "title": "원클릭 설치", - "subtitle": "OAuth 사용 — 처음 사용할 때 브라우저에서 인증하세요", - "vsCode": "VS Code에 설치", - "cursor": "Cursor에 설치", - "copyUrl": "MCP URL 복사", - "copied": "복사됨!", - "copyHint": "ChatGPT, Claude Code 또는 모든 MCP 클라이언트용", - "manualConfig": "수동 구성" } } } @@ -5008,47 +6958,12 @@ "title": "민감한 데이터 내보내기", "warningTitle": "이 내보내기에는 전체 데이터베이스가 포함됩니다.", "warningBody": "백업에는 모든 사용자, 통합 시크릿(암호화됨), API 키, 보드 구성 및 앱 데이터가 포함됩니다. 내보낸 파일을 안전하게 보관하고 공유하지 마십시오.", - "typePrompt": "계속하려면 \"{phrase}\" 입력", - "submit": "데이터베이스 내보내기", - "cancel": "취소" + "submit": "데이터베이스 내보내기" } }, "import": { "title": "데이터베이스 복원", - "description": "이전에 내보낸 백업 ZIP을 업로드하여 데이터베이스를 복원합니다. 이 작업은 전체 데이터베이스를 대체합니다. 백업이 다른 암호화 키로 생성된 경우 시크릿이 자동으로 다시 암호화됩니다.", - "warning": "백업을 복원하면 현재 데이터베이스가 완전히 교체되고 애플리케이션이 다시 시작됩니다. 이 작업은 취소할 수 없습니다.", - "dropzone": { - "title": "백업 ZIP을 여기에 놓거나 클릭하여 탐색", - "description": "Homarr SQLite 백업에서는 .zip 파일만 허용됩니다" - }, - "changeFile": "파일 변경", - "button": "데이터베이스 복원", - "success": { - "title": "복원 완료", - "message": "데이터베이스 복원 완료. 앱이 재시작됩니다..." - }, - "error": "가져오기 실패" - }, - "preview": { - "title": "컨텐츠 백업", - "exported": "{date}에 내보냄", - "loading": "백업 파일 분석 중...", - "errorTitle": "미리보기 오류", - "entity": "엔티티", - "count": "수량", - "boards": "보드", - "entities": { - "board": "보드", - "user": "사용자", - "app": "앱", - "integration": "통합", - "item": "위젯", - "media": "미디어", - "search_engine": "검색 엔진" - }, - "analyzeError": "백업 파일 분석 실패", - "invalidMissingMetadata": "올바르지 않은 백업: metadata.json 없음", - "invalidMissingDb": "올바르지 않은 백업: db.sqlite 없음" + "description": "이전에 내보낸 백업 ZIP을 업로드하여 데이터베이스를 복원합니다. 이 작업은 전체 데이터베이스를 대체합니다. 백업이 다른 암호화 키로 생성된 경우 시크릿이 자동으로 다시 암호화됩니다." }, "restore": { "dropzone": { @@ -5058,29 +6973,20 @@ "analyzing": "백업 분석 중...", "changeFile": "파일 변경", "continueToRestore": "복원하려면 계속", - "tryAgain": "다시 시도", "analysisError": "분석 오류", "preview": { "title": "컨텐츠 백업", "exported": "{date}에 내보냄", "entity": "엔티티", "count": "수량", - "boards": "보드", "entities": { - "board": "보드", - "user": "사용자", - "app": "앱", - "integration": "통합", - "item": "위젯", - "media": "미디어", - "search_engine": "검색 엔진" + "item": "위젯" }, "migrationsApplied": "{count}개 마이그레이션 적용", "migrationsAppliedPlural": "{count}개 마이그레이션 적용", "migrationsOlderVersion": "이 백업은 이전 Homarr 버전에서 가져온 것입니다. {count}개의 스키마 마이그레이션이 최신 상태로 적용되었습니다.", "migrationsOlderVersionPlural": "이 백업은 이전 Homarr 버전에서 가져온 것입니다. {count}개의 스키마 마이그레이션이 최신 상태로 적용되었습니다.", "migrationsUpToDate": "데이터베이스 스키마가 최신 상태입니다({count}개 마이그레이션 적용)", - "upToDate": "최신", "migrationsPending": "{count}개 대기 중" }, "migration": { @@ -5091,21 +6997,21 @@ "title": "파괴적 작업", "warningTitle": "이 작업은 전체 데이터베이스를 영구적으로 대체합니다.", "warningBody": "현재의 모든 보드, 사용자, 앱, 통합, 설정 및 세션이 손실됩니다. 이 작업은 취소할 수 없습니다. 복원 후 애플리케이션이 다시 시작됩니다.", - "typePrompt": "계속하려면 \"{phrase}\" 입력", - "cancel": "취소", "submit": "데이터베이스 복원" }, "progress": { "title": "데이터베이스 복원 중...", - "extracting": "백업 아카이브 추출 중", - "migrating": "데이터베이스 마이그레이션 적용 중", - "encrypting": "통합 시크릿 재암호화 중", - "swapping": "데이터베이스 파일 교체 중", - "restarting": "서버 재시작 중" + "restarting": "서버 재시작 중", + "relogin": "데이터베이스를 복원하면 현재 세션이 무효화됩니다. 서버가 준비되면 Homarr가 로그인 화면으로 이동합니다." }, "complete": { "title": "복원 완료", - "message": "데이터베이스가 성공적으로 복원되었습니다. 서버가 다시 시작 중입니다 — 잠시 후 페이지를 새로고침하십시오." + "message": "데이터베이스가 성공적으로 복원되었습니다. 서버가 다시 시작 중입니다 — 잠시 후 페이지를 새로고침하십시오.", + "button": "지금 로그인" + }, + "timeout": { + "title": "서버가 다시 온라인 상태가 되지 않았습니다", + "message": "데이터베이스 복원이 완료되었지만 Homarr가 다시 준비되지 않았습니다. 연결 확인을 다시 시도하거나 이 페이지를 수동으로 새로 고침하세요." }, "failed": { "title": "복원 실패" @@ -5113,6 +7019,9 @@ "invalidMissingMetadata": "잘못된 백업: metadata.json 누락", "invalidMissingDb": "잘못된 백업: db.sqlite 누락", "analyzeError": "백업 분석 실패" + }, + "confirm": { + "typePrompt": "계속하려면 \"{phrase}\" 입력" } } }, @@ -5147,7 +7056,11 @@ "toggleBoardEdit": "보드 편집 모드 전환", "toggleColorScheme": "라이트/다크 모드 전환", "saveNotebook": "노트북 저장 (노트북 위젯 내에서만)", - "openSpotlight": "검색 열기" + "openSpotlight": "검색 열기", + "openSpotlightApps": "앱 검색 열기", + "openSpotlightAssistant": "어시스턴트 모드 열기", + "openSpotlightPreferences": "환경 설정 모드 열기", + "openAssistant": "어시스턴트 열기" }, "note": "팁: Mod는 Ctrl 키와 macOS의 ⌘ 키를 모두 의미합니다" } @@ -5157,6 +7070,63 @@ }, "docker": { "title": "컨테이너", + "reconciliation": { + "title": "Docker 설정 어시스턴트", + "suggestions": "", + "attention": "주의가 필요한 항목 {count}개", + "endpointUnavailable": "다음 엔드포인트를 사용할 수 없어 일부 서비스를 확인할 수 없습니다: {names}", + "empty": "표시할 수 있는 Docker 서비스를 찾지 못했습니다.", + "emptyFilter": "이 보기와 일치하는 서비스가 없습니다.", + "ambiguous": "이 서비스와 일치할 수 있는 기존 항목이 두 개 이상입니다. Homarr가 자동으로 선택하지 않습니다.", + "filter": { + "attention": "주의 필요", + "represented": "이미 설정됨", + "all": "모두" + }, + "state": { + "newRecognized": "연결 준비 완료", + "newApp": "새 서비스", + "represented": "이미 표시됨", + "linked": "연결됨", + "moved": "주소 변경됨" + }, + "url": { + "manual": "주소를 수동으로 입력" + }, + "health": { + "layer": { + "docker": "Docker", + "integrationConfiguration": "통합", + "authentication": "인증", + "apiRequest": "API", + "appRepresentation": "앱", + "widgetConfiguration": "위젯", + "widgetQuery": "위젯 쿼리" + }, + "status": { + "available": "사용 가능", + "configured": "구성됨", + "linked": "연결됨", + "missing": "누락됨", + "changed": "변경됨", + "unused": "사용되지 않음", + "notApplicable": "해당 없음", + "notObserved": "관찰되지 않음" + } + }, + "action": { + "review": "리뷰", + "dismiss": "해제", + "restoreDismissed": "해제된 항목 복원({count})", + "setupIntegration": "통합 설정", + "reviewIntegration": "통합 검토", + "viewRepresentation": "설정 보기" + }, + "loadError": { + "title": "Docker 설정 어시스턴트를 로드할 수 없습니다", + "message": "Docker 서비스 정보를 사용할 수 없습니다. 이 페이지를 벗어나지 않고 다시 시도하세요." + } + }, "table": { "updated": "{when} 업데이트됨", "refresh": { @@ -5169,9 +7139,6 @@ "totalMemory": "총 메모리: {memory}" }, "field": { - "name": { - "label": "이름" - }, "state": { "label": "상태", "option": { @@ -5185,9 +7152,6 @@ } }, "stats": { - "cpu": { - "label": "CPU" - }, "memory": { "label": "메모리" } @@ -5250,8 +7214,11 @@ } }, "remove": { - "label": "제거", "confirm": "영구적으로 제거하려면 다시 클릭하세요", + "confirmation": { + "title": "{count, plural, other {#개의 컨테이너를 삭제하시겠습니까?}}", + "message": "{count, plural, other {이 작업을 수행하면 다음 #개의 컨테이너가 영구적으로 삭제됩니다: {names}}}" + }, "notification": { "success": { "title": "컨테이너 제거됨", @@ -5263,8 +7230,13 @@ } } }, + "result": { + "failure": { + "title": "일부 컨테이너 작업이 실패했습니다", + "message": "{total, plural, other {전체 #개 작업 중 {failed}개 작업이 실패했습니다: {names}}}" + } + }, "refresh": { - "label": "새로고침", "notification": { "success": { "title": "컨테이너 새로 고침됨", @@ -5295,18 +7267,33 @@ }, "error": { "internalServerError": "Docker 컨테이너를 가져오지 못했습니다", + "endpointUnavailable": "{count, plural, other {#개의 Docker 엔드포인트를 사용할 수 없습니다: {names}}}", "noColumns": "위젯 설정에서 열을 하나 이상 선택하십시오" } }, "kubernetes": { + "context": { + "label": "Kubernetes 컨텍스트", + "loadError": { + "title": "Kubernetes 컨텍스트를 로드할 수 없습니다", + "message": "컨텍스트 정보를 사용할 수 없습니다. 이 페이지를 벗어나지 않고 다시 시도하세요." + }, + "status": { + "available": "사용 가능", + "degraded": "메트릭을 사용할 수 없음", + "unavailable": "사용할 수 없음" + }, + "unavailable": "이 Kubernetes 컨텍스트에 연결할 수 없습니다. 다른 컨텍스트를 선택하거나 자격 증명과 엔드포인트를 확인하세요.", + "metricsUnavailable": "이 컨텍스트에는 연결할 수 있지만 Metrics Server를 사용할 수 없습니다. 실시간 CPU 및 메모리 사용량 없이도 인벤토리를 확인할 수 있습니다." + }, "cluster": { "title": "클러스터 대시보드", "label": "클러스터", "providers": "공급자", "version": "버전", - "architecture": "아키텍처", "capacity": { "title": "용량", + "metricsUnavailable": "Metrics Server를 사용할 수 없습니다. 인벤토리와 예약된 용량은 계속 표시되지만 실시간 CPU 및 메모리 사용량은 표시할 수 없습니다.", "resource": { "reserved": "예약됨", "used": "사용 중" @@ -5325,38 +7312,10 @@ } }, "nodes": { - "label": "노드", "field": { - "name": { - "label": "이름" - }, - "state": { - "label": "상태", - "option": { - "ready": "준비됨", - "NotReady": "준비 안 됨" - } - }, - "cpu": { - "label": "CPU" - }, - "memory": { - "label": "RAM" - }, - "pods": { - "label": "파드" - }, - "operatingSystem": { - "label": "OS" - }, - "architecture": { - "label": "아키텍처" - }, + "metricsUnavailable": "사용할 수 없음", "kubernetesVersion": { "label": "Kubernetes 버전" - }, - "creationTimestamp": { - "label": "생성됨" } }, "table": { @@ -5364,43 +7323,17 @@ } }, "namespaces": { - "label": "네임스페이스", - "field": { - "name": { - "label": "이름" - }, - "state": { - "label": "상태", - "option": { - "active": "활성", - "terminating": "종료 중" - } - }, - "creationTimestamp": { - "label": "생성됨" - } - }, "table": { "search": "{count}개 네임스페이스 검색" } }, "ingresses": { - "label": "인그레스", "field": { - "name": { - "label": "이름" - }, - "namespace": { - "label": "네임스페이스" - }, "className": { "label": "클래스 이름" }, "rulesAndPaths": { "label": "규칙 및 경로" - }, - "creationTimestamp": { - "label": "생성됨" } }, "table": { @@ -5408,17 +7341,7 @@ } }, "services": { - "label": "서비스", "field": { - "name": { - "label": "이름" - }, - "namespace": { - "label": "네임스페이스" - }, - "type": { - "label": "유형" - }, "ports": { "label": "포트" }, @@ -5427,9 +7350,6 @@ }, "clusterIP": { "label": "클러스터 IP" - }, - "creationTimestamp": { - "label": "생성됨" } }, "table": { @@ -5437,25 +7357,12 @@ } }, "pods": { - "label": "파드", "field": { - "name": { - "label": "이름" - }, - "namespace": { - "label": "네임스페이스" - }, "image": { "label": "이미지" }, "applicationType": { "label": "애플리케이션 유형" - }, - "status": { - "label": "상태" - }, - "creationTimestamp": { - "label": "생성됨" } }, "table": { @@ -5463,51 +7370,17 @@ } }, "secrets": { - "label": "보안 비밀", - "field": { - "name": { - "label": "이름" - }, - "namespace": { - "label": "네임스페이스" - }, - "type": { - "label": "유형" - }, - "creationTimestamp": { - "label": "생성됨" - } - }, "table": { "search": "{count}개 시크릿 검색" } }, "configmaps": { - "label": "ConfigMaps", - "field": { - "name": { - "label": "이름" - }, - "namespace": { - "label": "네임스페이스" - }, - "creationTimestamp": { - "label": "생성됨" - } - }, "table": { "search": "{count}개 ConfigMap 검색" } }, "volumes": { - "label": "볼륨", "field": { - "name": { - "label": "이름" - }, - "namespace": { - "label": "네임스페이스" - }, "accessModes": { "label": "액세스 모드" }, @@ -5522,12 +7395,6 @@ }, "volumeName": { "label": "볼륨 이름" - }, - "status": { - "label": "상태" - }, - "creationTimestamp": { - "label": "생성됨" } }, "table": { @@ -5536,6 +7403,29 @@ }, "error": { "internalServerError": "Kubernetes 데이터를 가져오지 못했습니다" + }, + "field": { + "name": { + "label": "작업 이름" + }, + "namespace": { + "label": "네임스페이스" + }, + "creationTimestamp": { + "label": "생성됨" + }, + "state": { + "label": "직업 상태" + }, + "status": { + "label": "상태" + }, + "type": { + "label": "다운로드 클라이언트 유형" + }, + "architecture": { + "label": "아키텍처" + } } }, "permission": { @@ -5569,83 +7459,27 @@ }, "navigationStructure": { "manage": { - "workshop": { - "label": "Workshop" - }, "label": "관리", - "boards": { - "label": "보드" - }, - "integrations": { - "label": "통합", - "edit": { - "label": "수정" - }, - "new": { - "label": "신규" - } - }, - "search-engines": { - "label": "검색 엔진", - "new": { - "label": "신규" - }, - "edit": { - "label": "수정" - } - }, - "medias": { - "label": "미디어" - }, - "apps": { - "label": "앱", - "new": { - "label": "신규" - }, - "edit": { - "label": "수정" - } - }, "custom-widgets": { - "label": "사용자 지정 위젯", - "new": { - "label": "신규" - }, "edit": { - "label": "편집", "flow": { "label": "플로우" } + }, + "workshop": { + "label": "워크숍" + }, + "publish": { + "label": "Workshop에 게시" } }, "users": { - "label": "사용자", - "create": { - "label": "만들기" - }, "general": "일반", - "security": "보안", - "board": "보드", - "groups": { - "label": "그룹" - }, - "invites": { - "label": "초대" - } + "security": "보안" }, "tools": { "label": "도구", - "tasks": { - "label": "작업" - }, - "docker": { - "label": "Docker", - "logs": { - "label": "로그" - } - }, "kubernetes": { - "label": "Kubernetes", "nodes": { "label": "노드" }, @@ -5671,11 +7505,7 @@ "label": "볼륨" } }, - "logs": { - "label": "로그" - }, "certificates": { - "label": "인증서", "hostnames": { "label": "호스트네임" } @@ -5686,12 +7516,60 @@ }, "about": { "label": "정보" + }, + "assistant": { + "label": "어시스턴트" } } }, "search": { "placeholder": "무엇이든 검색", "nothingFound": "결과 없음", + "modePicker": { + "search": { + "label": "검색", + "placeholder": "앱, 보드, 페이지, 명령 및 환경 설정 검색" + }, + "apps": { + "label": "앱", + "placeholder": "앱, 보드 및 통합 검색" + }, + "command": { + "label": "명령", + "placeholder": "작업 및 명령 검색" + }, + "preferences": { + "label": "환경 설정", + "placeholder": "환경 설정 검색 및 변경" + }, + "assistant": { + "label": "어시스턴트", + "placeholder": "어시스턴트에게 질문" + }, + "external": { + "label": "웹", + "placeholder": "외부 검색 엔진으로 검색" + }, + "media": { + "label": "미디어", + "placeholder": "영화 또는 프로그램 검색", + "fallback": "\"{query}\" 미디어 검색" + }, + "userGroup": { + "label": "사용자", + "placeholder": "사용자 및 그룹 검색" + }, + "continueWith": "다음으로 계속", + "dialogAriaLabel": "{mode} 명령 메뉴", + "navigationLabel": "검색 모드", + "modeAriaLabel": "{mode} 모드", + "resultsAriaLabel": "{mode} 결과", + "footer": { + "navigate": "탐색", + "open": "열기", + "close": "닫기" + } + }, "error": { "fetch": "데이터를 가져오는 중 오류가 발생했습니다" }, @@ -5700,7 +7578,6 @@ "help": "앱, 통합, 보드 검색", "group": { "app": { - "title": "앱", "children": { "action": { "open": { @@ -5716,7 +7593,6 @@ } }, "board": { - "title": "보드", "children": { "action": { "open": { @@ -5736,9 +7612,6 @@ "title": "보드 동작 선택" } } - }, - "integration": { - "title": "통합" } } }, @@ -5767,9 +7640,6 @@ "newBoard": { "label": "새 보드 생성" }, - "importBoard": { - "label": "보드 가져오기" - }, "newApp": { "label": "새 앱 생성" }, @@ -5839,7 +7709,6 @@ } }, "defaultSearchEngineId": { - "label": "기본 검색 엔진", "children": { "detail": { "title": "기본 검색 엔진 선택" @@ -5847,7 +7716,6 @@ } }, "openSearchInNewTab": { - "label": "검색 결과를 새 탭에서 열기", "children": { "detail": { "title": "검색 결과를 새 탭에서 열기" @@ -5855,7 +7723,6 @@ } }, "ddgBangs": { - "label": "DuckDuckGo bangs 활성화", "children": { "detail": { "title": "DuckDuckGo bangs 활성화" @@ -5870,6 +7737,13 @@ } } }, + "byteUnitSystem": { + "children": { + "detail": { + "title": "데이터 크기 단위 선택" + } + } + }, "homeBoardId": { "label": "홈 보드", "children": { @@ -5887,7 +7761,6 @@ } }, "pingIconsEnabled": { - "label": "핑에 아이콘 사용", "children": { "detail": { "title": "핑에 아이콘 사용" @@ -5895,7 +7768,6 @@ } }, "enableRightClickOnWidgets": { - "label": "위젯 우클릭 활성화", "children": { "detail": { "title": "위젯 우클릭 활성화" @@ -5923,6 +7795,7 @@ "description": "미디어 요청 통합을 검색하려면 입력을 시작하세요", "disabled": { "noIntegration": "미디어 검색을 활성화하려면 Overseerr, Jellyseerr 또는 Seerr 통합을 추가하세요.", + "signInRequired": "미디어 요청 통합을 검색하려면 로그인하세요.", "scoped": "이 위젯에는 접근 가능한 미디어 요청 통합이 없습니다." } } @@ -5939,7 +7812,6 @@ "help": "외부 검색 엔진 사용", "group": { "searchEngine": { - "title": "검색 엔진", "tipDdgBangs": "팁: 여기에서 DuckDuckGo 뱅을 사용할 수도 있습니다 (예: !something)", "bang": { "searchWithQuery": "\"{query}\" 검색: {label}", @@ -5990,20 +7862,6 @@ "group": { "mode": { "title": "모드" - }, - "help": { - "title": "도움말", - "option": { - "documentation": { - "label": "문서" - }, - "submitIssue": { - "label": "문제 보고" - }, - "discord": { - "label": "커뮤니티 불화" - } - } } } }, @@ -6015,9 +7873,10 @@ "other": { "label": "다른 검색 엔진으로 검색" }, - "no-default": { - "label": "기본 검색 엔진 없음", - "description": "환경 설정에서 기본 검색 엔진 설정" + "no-engines": { + "label": "구성된 검색 엔진 없음", + "descriptionCreate": "명령 메뉴에서 검색하려면 검색 엔진을 추가하세요", + "descriptionUnavailable": "관리자에게 검색 엔진 구성을 요청하세요" }, "search": { "label": "\"{query}\"을 {name}으로 검색" @@ -6097,7 +7956,6 @@ "help": "사용자 또는 그룹 검색", "group": { "user": { - "title": "사용자", "children": { "action": { "detail": { @@ -6110,7 +7968,6 @@ } }, "group": { - "title": "그룹", "children": { "action": { "detail": { @@ -6134,9 +7991,6 @@ "engine": { "search": "검색 엔진 찾기", "field": { - "name": { - "label": "이름" - }, "short": { "label": "짧음" }, @@ -6149,12 +8003,19 @@ }, "page": { "list": { - "title": "검색 엔진", + "ariaLabel": "구성된 검색 엔진", "noResults": { "title": "아직 검색 엔진이 없습니다", - "action": "첫 검색 엔진을 생성" + "description": "검색 엔진을 사용하면 Spotlight에서 사이트 또는 연결된 서비스로 쿼리를 보낼 수 있습니다.", + "action": "첫 검색 엔진을 생성", + "filteredTitle": "검색과 일치하는 검색 엔진이 없습니다", + "filteredDescription": "\"{search}\"와 일치하는 검색 엔진이 없습니다. 다른 이름이나 URL을 사용해 보세요." }, - "interactive": "대화형, 통합 사용" + "interactive": "대화형, 통합 사용", + "type": { + "generic": "URL 템플릿", + "fromIntegration": "통합" + } }, "create": { "title": "새 검색 엔진", @@ -6173,11 +8034,9 @@ "title": "검색 엔진 편집", "notification": { "success": { - "title": "변경 사항 적용 완료", "message": "검색 엔진 저장 완료" }, "error": { - "title": "변경 사항 적용 실패", "message": "검색 엔진 저장에 실패했습니다" } }, @@ -6316,6 +8175,10 @@ } }, "log": { + "context": { + "widgetError": "이 시간대에 위젯에서 오류를 보고했습니다", + "expiredWidgetError": "이 위젯 오류와 관련된 로그는 더 이상 보존되지 않습니다" + }, "level": { "option": { "debug": "디버그", @@ -6327,7 +8190,6 @@ }, "onboardingTour": { "learnMore": "문서 읽기", - "next": "다음", "prev": "뒤로", "done": "완료", "skip": "투어 건너뛰기", @@ -6391,5 +8253,359 @@ "description": "색상 구성표, 언어, 홈 보드, 설정을 변경할 수 있습니다. 여기에서 관리 영역으로 이동할 수도 있습니다." } } + }, + "metadata": { + "description": "*arr 스택과 전체 홈랩을 위한 자체 호스팅 대시보드입니다. 50개 이상의 서비스, 실시간 위젯 및 구성 파일 없이 통합할 수 있습니다.", + "dashboardTitle": "{appName} 대시보드" + }, + "assistant": { + "title": "어시스턴트", + "open": "어시스턴트 열기", + "close": "어시스턴트 닫기", + "minimize": "어시스턴트 최소화", + "spotlight": "어시스턴트에게 질문", + "spotlightDescription": "명령 메뉴를 나가지 않고 프롬프트를 입력하고 전송합니다.", + "spotlightPrompt": { + "title": "어시스턴트에게 질문", + "description": "위에 프롬프트를 입력하세요. Enter 키를 누르면 백그라운드에서 전송됩니다.", + "send": "프롬프트 전송", + "empty": "위에 프롬프트를 입력하세요" + }, + "unavailable": { + "checking": "어시스턴트 사용 가능 여부 확인 중…", + "error": "어시스턴트 사용 가능 여부를 확인할 수 없습니다. 다시 시도하세요.", + "notConfigured": "관리자가 먼저 어시스턴트를 구성하고 활성화해야 합니다.", + "signIn": "어시스턴트를 사용하려면 로그인하세요." + }, + "newConversation": "새 대화", + "conversations": "대화", + "conversationActions": "대화 작업", + "searchConversations": "대화 검색", + "noMatchingConversations": "일치하는 대화 없음", + "moreActions": "추가 응답 작업", + "renameConversation": { + "action": "이름 변경", + "label": "대화 이름", + "save": "이름 저장", + "failedTitle": "대화 이름을 변경할 수 없습니다", + "failedDescription": "Homarr가 이 대화의 이름을 변경할 수 없습니다. 다시 시도하세요." + }, + "deleteConversation": { + "title": "대화를 삭제하시겠습니까?", + "description": "“{title}” 및 해당 메시지가 영구적으로 삭제됩니다.", + "failedTitle": "대화를 삭제할 수 없습니다", + "failedDescription": "Homarr가 이 대화를 삭제할 수 없습니다. 다시 시도하세요." + }, + "closeHistory": "대화 기록 닫기", + "openHistory": "대화 기록 열기", + "emptyTitle": "무엇을 도와드릴까요?", + "emptyDescription": "Homarr 설정에 대해 질문하고, 실시간 인스턴스 데이터를 확인하거나, 변경이 필요할 때 작업을 승인하세요.", + "suggestions": { + "health": { + "label": "서비스 상태 확인", + "prompt": "내 통합을 확인하고 주의가 필요한 항목을 요약해 주세요." + }, + "explore": { + "label": "내 Homarr 탐색", + "prompt": "이 Homarr 인스턴스에서 확인하고 관리할 수 있는 항목을 보여 주세요." + }, + "media": { + "label": "요청할 미디어 찾기", + "prompt": "요청할 영화나 시리즈를 찾는 데 도움을 주세요." + }, + "style": { + "label": "대시보드 개선", + "prompt": "보드의 모양이나 사용자 지정 CSS를 개선하는 데 도움을 주세요. 먼저 내 보드를 보여 주고, 현재 설정을 유지하면서 변경하세요." + }, + "designWidget": { + "label": "위젯 디자인", + "prompt": "다음 대상에 사용할 사용자 지정 위젯을 생성하고 설치합니다: " + } + }, + "composerPlaceholder": "어시스턴트에게 질문…", + "runtime": { + "model": "모델", + "searchModels": "모델 검색", + "noModels": "사용 가능한 모델 없음", + "otherModels": "기타 모델", + "imageInput": "이미지 입력 지원", + "thinking": "사고 모드", + "reasoning": { + "auto": "자동", + "none": "끔", + "minimal": "최소", + "low": "낮음", + "medium": "보통", + "high": "높음" + } + }, + "providerQuota": { + "title": "Homarr 공급자", + "communityWorkshop": "커뮤니티 워크숍", + "dailyAllowance": "일일 요청 할당량", + "remainingLabel": "남은 Homarr 공급자 요청: {remaining}/{limit}", + "loading": "Homarr 공급자 할당량 로드 중", + "signInRequired": "Homarr 공급자에 Workshop 로그인이 필요합니다", + "signInDescription": "Community Workshop을 통해 GitHub로 로그인하면 별도의 일일 할당량을 받을 수 있습니다.", + "exhaustedDescription": "오늘 Homarr 공급자 할당량을 모두 사용했습니다. UTC 자정에 재설정됩니다.", + "unavailableDescription": "Workshop에 로그인하거나 Homarr 공급자 할당량이 재설정될 때까지 기다리세요.", + "signIn": "GitHub로 로그인", + "signInError": "GitHub 로그인에 실패했습니다. 잠시 후 다시 시도하세요.", + "loadError": "Homarr 공급자 할당량을 로드할 수 없습니다.", + "reset": "{relative} 후 에 재설정", + "toolCalls": "각 모델 요청과 완료된 도구 호출은 요청 한 건으로 계산됩니다.", + "retry": "할당량 다시 로드", + "level": { + "ok": "확인", + "warning": "경고", + "bad": "낮음", + "dead": "사용중" + } + }, + "stop": "응답 중지", + "send": "메시지 전송", + "copy": "응답 복사", + "copyMessage": "메시지 복사", + "editMessage": "메시지 편집", + "updateMessage": "메시지 업데이트", + "regenerate": "응답 재생성", + "helpful": "도움이 됨", + "notHelpful": "도움이 되지 않음", + "readAloud": "응답 소리 내어 읽기", + "stopReading": "응답 읽기 중지", + "feedbackError": "피드백을 저장할 수 없습니다. 다시 시도하세요.", + "exportMarkdown": "Markdown으로 내보내기", + "exportConversation": { + "action": "대화를 Markdown으로 내보내기", + "failedTitle": "대화를 내보낼 수 없습니다", + "failedDescription": "Homarr가 이 대화를 로드할 수 없습니다. 다시 시도하세요." + }, + "reasoning": "사고 중", + "previousResponse": "이전 응답", + "nextResponse": "다음 응답", + "removeAttachment": "첨부 파일 제거", + "downloadFile": "{name} 다운로드", + "attachedImage": "첨부된 이미지", + "externalImageBlocked": "개인 정보 보호를 위해 외부 이미지가 차단됨", + "image": { + "loading": "이미지 로드 중", + "failed": "이 이미지를 로드할 수 없습니다.", + "retry": "이미지 다시 시도" + }, + "quoteSelection": "인용", + "dismissQuote": "인용 제거", + "attachments": { + "add": "이미지 또는 문서 첨부", + "errorTitle": "첨부 파일을 추가할 수 없습니다", + "imageUnsupported": "선택한 모델은 이미지 입력을 지원하지 않습니다." + }, + "mentions": { + "menu": "Homarr 컨텍스트 추가", + "context": "컨텍스트", + "app": "앱", + "integration": "통합", + "board": "보드", + "widget": "위젯", + "tools": "사용 가능한 도구" + }, + "markdown": { + "diagram": "다이어그램", + "renderingDiagram": "다이어그램 렌더링 중…", + "diagramUnavailable": "이 다이어그램을 렌더링할 수 없습니다." + }, + "commands": { + "menu": "어시스턴트 명령", + "health": "서비스 상태 확인 준비", + "explore": "이 Homarr 인스턴스 개요 준비", + "media": "미디어 검색 준비", + "style": "보드 모양 또는 사용자 지정 CSS 변경 준비", + "designWidget": "한 번의 프롬프트로 사용자 지정 위젯 빌드 준비" + }, + "usage": { + "tokens": "토큰", + "contextWindow": "컨텍스트 창", + "requestDetails": "요청 세부 정보", + "used": "최신 단계", + "remaining": "남은 항목", + "capacity": "용량", + "input": "입력", + "output": "출력", + "cached": "캐시된 입력", + "cacheWrite": "캐시 쓰기", + "reasoning": "추론", + "inputShort": "입력", + "outputShort": "출력", + "cachedShort": "캐시됨", + "reasoningShort": "추론", + "firstOutput": "첫 출력", + "homarrTiming": "Homarr 관측값", + "endToEnd": "종단 간", + "observedThroughput": "관측 처리량", + "providerTiming": "공급자 보고값", + "loadingProviderDetails": "생성 세부 정보 로드 중…", + "providerDetailsPending": "OpenRouter가 일부 생성 세부 정보를 아직 처리 중입니다. 다시 열어 재시도하세요.", + "providerLatency": "공급자 지연 시간", + "generationTime": "생성 시간", + "moderationLatency": "검토", + "providerThroughput": "공급자 처리량", + "fallbacks": "대체 경로", + "fallbackLatency": "대체 경로 지연 시간", + "cacheDiscount": "캐시 할인", + "normalizedTokens": "OpenRouter 정규화 입력 / 출력", + "byok": "자체 API 키 사용(BYOK)", + "cost": "비용", + "reported": "공급자 보고", + "estimated": "모델 가격으로 추정", + "upstreamCost": "상위 추론", + "webSearches": "웹 검색", + "finishReason": "종료 이유", + "notReported": "보고되지 않음", + "agentSteps": "에이전트 단계", + "step": "단계 {number}", + "generation": "생성" + }, + "toolInput": "입력", + "toolOutput": "출력", + "toolActivity": { + "iconSearch": "“{query}” 아이콘 찾는 중", + "iconBrowse": "사용 가능한 아이콘 탐색 중" + }, + "toolNavigation": { + "openPreview": "미리보기 열기", + "openWidget": "위젯 열기" + }, + "webSearch": { + "title": "웹 검색", + "completed": "OpenRouter가 이 응답을 위해 실시간 웹을 검색했습니다.", + "searches": "{count, plural, other {#개의 검색}}", + "sources": "{count, plural, other {#개의 소스}}" + }, + "responseError": { + "title": "어시스턴트가 완료하지 못했습니다", + "description": "다시 시도하세요. 문제가 계속되면 관리자에게 구성된 모델 엔드포인트를 확인해 달라고 요청하세요." + }, + "toolPreparationError": { + "title": "이 요청을 준비할 수 없습니다", + "description": "모델이 완전한 세부 정보를 제공하기 전에 중지되었습니다. 응답을 다시 시도하거나 요청을 다시 설명하세요. 변경된 사항은 없습니다." + }, + "busy": { + "title": "어시스턴트가 이미 작업 중입니다", + "description": "현재 응답이 완료될 때까지 기다리거나 응답을 열어 실행을 중지하세요." + }, + "pendingAction": { + "answerTitle": "답변 필요", + "answerFallback": "계속하려면 답변을 선택하세요", + "formTitle": "앱 세부 정보 검토", + "boardFormTitle": "보드 변경 사항 검토", + "review": "리뷰", + "sendBlocked": "전송하기 전에 보류 중인 요청을 해결하세요" + }, + "activity": { + "thinking": "어시스턴트가 생각 중입니다", + "working": "프롬프트 작업 중", + "ready": "응답 준비 완료", + "completed": "응답 열기", + "approval": "승인 필요", + "failed": "어시스턴트의 주의가 필요합니다", + "expand": "어시스턴트 응답 열기", + "dismiss": "어시스턴트 활동 닫기" + }, + "scrollToLatest": "최신 항목으로 스크롤", + "refresh": { + "action": "현재 보기 새로 고침", + "working": "현재 보기 새로 고치는 중", + "completeTitle": "보기 새로 고침 완료", + "completeDescription": "표시된 Homarr 데이터를 다시 로드했습니다.", + "failedTitle": "보기를 새로 고칠 수 없습니다", + "failedDescription": "변경 사항은 아직 저장되었을 수 있습니다. 새로 고침 작업을 다시 시도하세요." + }, + "askUser": { + "preparing": "질문 준비 중", + "answered": "내 답변", + "other": "기타", + "otherLabel": "내 답변", + "otherPlaceholder": "다른 답변 입력…", + "submit": "답변 전송", + "cancelOther": "다른 답변 취소", + "optionKind": { + "affirmative": "확인", + "negative": "거부", + "alternative": "옵션", + "custom": "사용자 지정" + } + }, + "configureApp": { + "title": "앱 세부 정보 검토", + "description": "어시스턴트가 생성 승인을 요청하기 전에 로컬 아이콘을 선택하고 필요한 항목을 조정하세요.", + "preparing": "앱 세부 정보 준비 중", + "continue": "이 세부 정보 사용", + "ready": "앱 세부 정보 준비 완료", + "automaticContinue": "이 앱 세부 정보를 자동으로 사용" + }, + "configureBoardSettings": { + "title": "보드 변경 사항 검토", + "loading": "현재 보드 설정 로드 중", + "loadErrorTitle": "보드 설정을 로드할 수 없습니다", + "loadErrorDescription": "보드가 더 이상 존재하지 않거나 수정 권한이 없을 수 있습니다.", + "proposedCount": "어시스턴트가 제안한 필드 {count}개", + "changeCount": "변경 사항 {count}개 준비됨", + "ready": "보드 변경 사항 준비 완료", + "cancelled": "현재 보드 설정 유지됨", + "noChanges": "변경되는 설정 없음", + "keepCurrent": "현재 설정 유지", + "continue": "승인으로 계속", + "automaticContinue": "제안된 보드 변경 사항을 자동으로 적용", + "resetAll": "모든 변경 사항 초기화", + "tabs": { + "css": "사용자 지정 CSS", + "appearance": "모양", + "background": "배경", + "general": "일반" + }, + "cssDescription": "전체 스타일시트를 편집합니다. 여기서 제거하지 않는 한 기존 규칙은 유지됩니다.", + "cssCharacters": "문자 {count}개 / 16384개", + "copyCss": "CSS 복사", + "copied": "복사됨", + "restoreCss": "현재 CSS 복원", + "remoteCssTitle": "이 CSS는 원격 리소스를 로드합니다", + "remoteCssDescription": "가져온 스타일시트와 원격 URL은 보드가 로드될 때 다른 서버에 연결합니다. 계속하기 전에 검토하세요." + }, + "configureWidget": { + "title": "위젯 검토", + "preparing": "위젯 설정 준비 중", + "review": "위젯 및 통합 검토", + "ready": "위젯 구성 준비 완료", + "cancelled": "위젯이 추가되지 않았습니다", + "automaticContinue": "제안된 위젯 구성을 자동으로 적용", + "definitionLoadErrorTitle": "위젯 설정을 로드할 수 없습니다", + "definitionLoadErrorDescription": "Homarr가 이 위젯의 설정을 로드할 수 없습니다. 다시 시도하세요.", + "loadErrorTitle": "통합을 로드할 수 없습니다", + "loadErrorDescription": "Homarr가 이 위젯에 사용할 수 있는 통합을 로드할 수 없습니다.", + "noIntegrationTitle": "호환되는 통합이 필요합니다", + "noIntegrationDescription": "대시보드에 추가하기 전에 이 위젯이 지원하는 통합을 구성하세요.", + "connectIntegration": "서비스 연결", + "manageIntegrations": "통합 관리", + "skip": "추가하지 않음", + "errorTitle": "위젯 설정을 준비할 수 없습니다", + "errorDescription": "모델이 완전한 위젯 구성을 제공하지 않았습니다. 위젯이 추가되지 않았습니다." + }, + "approvalRequired": "승인 필요", + "complete": "완료", + "denied": "거부됨", + "failed": "실패", + "working": "작업 중", + "approvalDescription": "실행하기 전에 이 변경 사항을 검토하세요.", + "approveAndRun": "승인하고 실행", + "deny": "거부", + "autoApproval": { + "label": "자동 승인", + "composerLabel": "나를 대신해 승인", + "title": "자동 승인", + "description": "이 대화에서 양식을 자동으로 준비하고 보호된 변경 사항을 승인합니다. 질문에는 계속 답변이 필요하며 Homarr 권한도 계속 적용됩니다. 대화를 전환하면 이 기능이 꺼집니다.", + "enable": "이 대화에 활성화", + "disable": "자동 승인 끄기", + "enabled": "자동 승인이 켜져 있음", + "approving": "자동 승인 중" + } } } diff --git a/packages/translation/src/lang/lt.json b/packages/translation/src/lang/lt.json index f380e5a70..0d2414ccc 100644 --- a/packages/translation/src/lang/lt.json +++ b/packages/translation/src/lang/lt.json @@ -1,156 +1,246 @@ { "init": { - "step": { - "start": { - "title": "Sveiki atvykę į Homarr", - "subtitle": "Pradėkime nustatyti jūsų Homarr egzempliorių.", - "description": "Norėdami pradėti, pasirinkite, kaip norite nustatyti savo Homarr egzempliorių.", - "action": { - "scratch": "Pradėti nuo pradžių", - "importOldmarr": "Importuoti iš ankstesnio nei 1.0 Homarr", - "restoreSqlite": "Atkurti iš SQLite atsarginės kopijos", - "restoreSqliteDescription": "Įkelkite pilną SQLite duomenų bazės atsarginę kopiją iš ankstesnio Homarr egzemplioriaus. Tai atkurs visas lentas, naudotojus, programėles, integracijas ir nustatymus.", - "backToOptions": "← Atgal į sąrankos parinktis" + "studio": { + "navigationLabel": "Pradinio nustatymo skiltys", + "back": "Atgal", + "buildBoard": "Sukurti mano lentą", + "common": { + "unknownError": "Kažkas nepavyko. Jūsų pasirinkimai išsaugoti; bandykite dar kartą." + }, + "claim": { + "checking": "Apsaugomas šis sąrankos seansas…", + "checkingTitle": "Ruošiama saugi sąranka", + "lockedTitle": "Sąranka atidaryta kitoje naršyklėje", + "lockedDescription": "Tęskite ten arba palaukite, kol baigs galioti jos saugus pirmojo paleidimo seansas, ir bandykite dar kartą.", + "signInTitle": "Reikalingas administratoriaus prisijungimas", + "signInDescription": "Administratorius jau yra. Prisijunkite, kad tęstumėte sąranką neatskleisdami kredencialų ar prieigos prie paslaugų.", + "signIn": "Prisijungti ir tęsti", + "errorTitle": "Nepavyko apsaugoti sąrankos", + "errorDescription": "Iš naujo įkelkite puslapį, kad bandytumėte dar kartą pradėti saugų pirmojo paleidimo seansą." + }, + "navigation": { + "essentials": "Pagrindiniai dalykai", + "discover": "Atrasti", + "connect": "Prisijungti", + "board": "Lenta", + "extend": "Išplėsti", + "review": "Peržiūrėti" + }, + "welcome": { + "title": "Sveiki sugrįžę.", + "description": "Sveiki prisijungę prie „Homarr“ v{version}. Supažindinsime jus su pagrindiniais dalykais ir padėsime sukurti pirmąją lentą.", + "start": "Pradėti", + "restore": "Atkurti atsarginę kopiją", + "restoreTitle": "Atkurti iš atsarginės kopijos", + "restoreDescription": "Visa SQLite atsarginė kopija atkuria lentas, žmones, programas, integracijas ir nustatymus. Prieš ką nors pakeisdama „Homarr“ ją patikrina.", + "errorTitle": "Nepavyko pradėti sąrankos", + "errorDescription": "Jūsų sąrankos pasirinkimai vis dar išsaugoti. Bandykite dar kartą arba, jei problema kartojasi, iš naujo įkelkite puslapį." + }, + "account": { + "title": "Sukurti administratorių", + "description": "Nurodykite administratoriaus naudotojo prisijungimo duomenis.", + "username": "Administratoriaus naudotojo vardas", + "passwordHint": "Reikia tik mažiausiai 8 simbolių. Kiti slaptažodžio stiprumo patikrinimai yra tik rekomendacijos.", + "create": "Sukurti administratorių", + "errorTitle": "Nepavyko sukurti administratoriaus", + "recoveryTitle": "Administratoriaus paskyra sukurta", + "recoveryDescription": "Automatinis prisijungimas nebuvo baigtas. Norėdami tęsti sąranką, prisijunkite naudodami ką tik sukurtus administratoriaus kredencialus.", + "recoveryAction": "Prisijungti ir tęsti", + "unknownError": "Nepavyko sukurti administratoriaus." + }, + "externalGroup": { + "title": "Prijungti administratorių grupę", + "description": "Naudokite tikslų grupės pavadinimą, siunčiamą per LDAP arba OIDC. Šios grupės nariams suteikiama administratoriaus prieiga.", + "name": "Išorinė administratorių grupė", + "nameDescription": "Skiriamosios didžiosios ir mažosios raidės; pavadinimas turi sutapti su jūsų tapatybės teikėjo pavadinimu.", + "continue": "Išsaugoti grupę ir tęsti", + "errorTitle": "Nepavyko išsaugoti grupės", + "unknownError": "Nepavyko išsaugoti administratorių grupės." + }, + "essentials": { + "title": "Pradėkite nuo įprastų numatytųjų nustatymų", + "description": "Nustatykite kalbą ir išvaizdą, kurią visi matys pirmiausia, tada nurodykite „Homarr“ jūsų paslaugų naudojamą adreso šabloną.", + "language": "Numatytoji kalba", + "theme": "Numatytoji tema", + "themeAuto": "Sistema", + "themeLight": "Šviesi", + "themeDark": "Tamsi", + "serverOriginHelp": "„Homarr“ naudoja šį adresą, kad iš anksto užpildytų aptiktų paslaugų URL. Visas paslaugas vis tiek galite redaguoti atskirai.", + "serverDescription": "Tai tik spartusis būdas, o ne apribojimas. Kiekvieną aptiktą paslaugą galima redaguoti.", + "serverOrigin": "Domenas, IP arba atvirkštinio tarpinio serverio kelias", + "serverOriginDescription": "Pavyzdžiai: home.lan, 192.168.1.10 arba https://home.example.com/services. Toliau pasirinkite, kaip bus pridedama kiekviena paslauga.", + "analytics": "Bendrinti anoniminę produkto analizę", + "analyticsDescription": "Padeda „Homarr“ gerinti funkcijų patikimumą. Nesiunčiami jokie paslaugų kredencialai ar skydelio turinys." + }, + "discover": { + "title": "Sužinokite, ką iš tikrųjų gali pasiekti šis diegimas", + "description": "„Homarr“ vietoje patikrina galimybes. Trūkstamas „Docker“ lizdas ar „Kubernetes“ kontekstas niekada neužblokuos rankinės sąrankos.", + "database": "Duomenų bazė", + "docker": "„Docker“ ir suderinami lizdai", + "kubernetes": "„Kubernetes“", + "assistantWorkshop": "Asistentas ir dirbtuvės", + "found": "Rastos {integrations} integracijos ir {apps} papildomos programos", + "retryKubernetes": "Dar kartą patikrinti „Kubernetes“", + "retryWorkshop": "Dar kartą patikrinti dirbtuves", + "unknownVersion": "nežinoma versija", + "kubernetesAvailable": "Prisijungta prie „Kubernetes“ {version}", + "kubernetesDisabled": "Neįjungta; tęskite naudodami „Docker“ arba rankines paslaugas", + "kubernetesUnavailable": "„Kubernetes“ įjungta, bet šis „Homarr“ procesas negali jos pasiekti", + "workshopAvailable": "Bendruomenės dirbtuvės ir priglobtos asistento paslaugos yra pasiekiamos", + "workshopUnavailable": "Vietiniai ir pasirinktiniai asistento teikėjai lieka pasiekiami", + "partialTitle": "Nepavyko nuskaityti kai kurių šaltinių", + "partialDescription": "Pasiekiamų serverių rezultatai išsaugoti. Patikrinkite lizdų leidimus arba kitoje skiltyje pridėkite paslaugas rankiniu būdu.", + "status": { + "checking": "Tikrinamas pasiekiamumas…", + "available": "Galima", + "partial": "Iš dalies pasiekiama", + "empty": "Pasiekiama, bet nerasta atitinkančių veikiančių paslaugų", + "disabled": "Išjungta serverio konfigūracijoje", + "unavailable": "Nepasiekiama iš šio „Homarr“ proceso" } }, - "import": { - "title": "Importuoti duomenis", - "subtitle": "Galite importuoti duomenis iš esamo Homarr egzemplioriaus.", - "dropzone": { - "title": "Nuvilkite ZIP failą čia arba spustelėkite, kad naršytumėte", - "description": "Įkeltas ZIP failas bus apdorotas ir galėsite pasirinkti, ką norite importuoti" + "connect": { + "title": "Prijunkite tai, kas daro lentą naudingą", + "description": "Pasirinkite kelias paslaugas vienu metu. „Docker“ etiketėms teikiama pirmenybė, spragas užpildo vaizdų atitiktis, o kiekvieną URL ir kredencialą galima peržiūrėti.", + "discoveredIntegrations": "Aptikti integracijų egzemplioriai ({count})", + "detectedIntegrationLabel": "Importuoti {name}, aptikta kaip {kind}", + "detectedAppLabel": "Importuoti aptiktą programą {name}", + "otherIntegrations": "Pridėti kitą integraciją", + "configureIntegrations": "Konfigūruoti integracijas", + "discoveredApps": "Aptiktos programos ({count})", + "appAddressRequired": "Pridėkite {name} adresą arba pašalinkite ją iš pasirinkimo.", + "empty": "Nepasirinkta jokių integracijų. „Homarr“ vis tiek sukurs naudingą pradinę lentą su bendrais valdikliais.", + "dockerSource": "„Docker“", + "manualSource": "Rankiniu būdu", + "url": "Paslaugos URL", + "noCredentials": "Kredencialų nėra", + "noCredentialsDescription": "Šiai integracijai kredencialų nereikia.", + "credentialMethod": "Kredencialų metodas", + "getApiKey": "Atidaryti šios paslaugos API rakto nustatymus", + "openGuide": "Atidaryti „Homarr“ šios paslaugos sąrankos vadovą", + "testConnection": "Tikrinti ryšį", + "testSuccess": "Ryšys veikia", + "testSuccessDescription": "„Homarr“ prisijungė naudodama dabartinį adresą ir kredencialus.", + "testError": "Ryšys nepavyko", + "testErrorDescription": "Patikrinkite paslaugos adresą ir kredencialus, tada bandykite dar kartą.", + "needsConfiguration": "Reikia sukonfigūruoti", + "tested": "Ryšys patikrintas", + "testFailed": "Ryšio patikrinti nepavyko", + "incompleteConfirmation": "Nebaigtos integracijos bus praleistos. Tęsti be jų?" + }, + "board": { + "title": "Suformuokite lentą prieš ją sukuriant", + "description": "„Homarr“ sukuria apsaugotus mobiliųjų įrenginių ir bazinį maketus, tada į juos įdeda jūsų pasirinktų paslaugų programas ir suderinamus valdiklius.", + "target": "Konfigūruojama lenta", + "targetDescription": "Pasirinkite tiksliai tą esamą lentą, kurią ši sąranka turėtų atnaujinti.", + "targetPlaceholder": "Pasirinkite lentą", + "targetRequired": "Prieš tęsdami pasirinkite konfigūruotiną lentą.", + "name": "Lentos pavadinimas", + "nameDescription": "Naudojama lentos URL; galima naudoti tik raides, skaičius, brūkšnelius ir apatinius brūkšnius.", + "nameRequired": "Prieš tęsdami įveskite lentos pavadinimą.", + "primaryColor": "Pagrindinė spalva", + "secondaryColor": "Antrinė spalva", + "resetColors": "Atkurti spalvas", + "radius": "Valdiklio kampų spindulys", + "radiusOptions": { + "xs": "Labai mažas", + "sm": "Subtilus", + "md": "Subalansuotas", + "lg": "Suapvalintas", + "xl": "Švelnus" }, - "fileInfo": { - "action": { - "change": "Pakeisti failą" - } + "columns": "Lentos stulpeliai", + "columnsDescription": "Stulpeliai apibrėžia horizontalų tinklelį, naudojamą elementų dydžiui ir padėčiai nustatyti. Daugumai naudotojų pakanka 12.", + "columnCount": "{count, plural, one {# stulpelis} few {# stulpeliai} many {# stulpelių} other {# stulpelio}}", + "leftSidebar": "Kairioji šoninė juosta", + "rightSidebar": "Dešinioji šoninė juosta", + "previewLabel": "Tiesioginė pirmosios lentos išdėstymo peržiūra" + }, + "extend": { + "title": "Išplėstinės funkcijos", + "tabsLabel": "Padėjėjo, dirbtuvių ir MCP sąranka", + "assistant": "Padėjėjas", + "workshop": "Dirbtuvės", + "assistantSetup": { + "loginTitle": "Reikia administratoriaus prisijungimo", + "loginDescription": "Teikėjų raktai ir prieiga prie modelių yra privilegijuoti. Užbaikite sąranką, prisijunkite, ir Homarr tiesiogiai atidarys Padėjėjo konfigūraciją.", + "loginAction": "Prisijungti ir sukonfigūruoti Padėjėją" }, - "importSettings": { - "title": "Importavimo nustatymai", - "description": "Sukonfigūruoti importavimo veikimą" + "workshopSetup": { + "title": "Homarr dirbtuvės", + "description": "Naršykite bendruomenės pasirinktinius valdiklius, peržiūrėkite jų prašomas galimybes, įdiekite juos ir skelbkite savo darbus nekopijuodami kodo tarp serverių.", + "available": "Galima", + "checking": "Tikrinama…", + "unavailable": "Nepasiekiama", + "discoverTitle": "Atrasti", + "discoverDescription": "Raskite valdiklius, sukurtus realioms savarankiškai priglobtoms darbo eigoms.", + "installTitle": "Peržiūrėti ir įdiegti", + "installDescription": "Prieš ką nors pridėdami peržiūrėkite metaduomenis ir konfigūraciją.", + "publishTitle": "Bendrinti", + "publishDescription": "Skelbkite pakartotinai naudojamus valdiklius bendruomenei.", + "browse": "Naršyti dirbtuves" }, - "boardSelection": { - "title": "Rasta lentų: {count}", - "description": "Pasirinkite visas norimo importuoti dydžio suvestines", - "action": { - "selectAll": "Pasirinkti visas", - "unselectAll": "Atšaukti visus" - } - }, - "summary": { - "title": "Importavimo suvestinė", - "description": "Toliau pateiktoje suvestinėje galite matyti, kas bus importuota", - "action": { - "import": "Patvirtinti importavimą ir tęsti" - }, - "entities": { - "apps": "Programėlės", - "boards": "Lentos", - "integrations": "Integracijos", - "credentialUsers": "Naudotojai su kredencialais" - } - }, - "tokenModal": { - "title": "Įvesti importavimo raktą", - "field": { - "token": { - "label": "Žetonas", - "description": "Įveskite ankstesniame Homarr egzemplioriuje rodomą importavimo raktą" - } - }, - "notification": { - "error": { - "title": "Neteisingas raktas", - "message": "Jūsų įvestas raktas yra neteisingas" - } - } + "mcpSetup": { + "title": "„Homarr“ MCP", + "description": "Prijunkite Claude, Codex ar kitą MCP klientą prie Homarr tipizuotų įrankių. API raktai užtikrina aiškiai apibrėžtą ir atšaukiamą prieigą.", + "endpoint": "Srautinio perdavimo HTTP galinis punktas", + "keyTitle": "Nukopijuokite šį raktą dabar", + "keyDescription": "Saugumo sumetimais Homarr daugiau nebegali rodyti šio API rakto.", + "copyKey": "Kopijuoti API raktą", + "createKey": "Sukurti MCP API raktą", + "errorTitle": "Nepavyko sukurti MCP API rakto", + "loginRequired": "Po sąrankos prisijunkite kaip administratorius, kad sukurtumėte API raktą.", + "configuration": "Kliento konfigūracija", + "copy": "Kopijuoti konfigūraciją", + "copied": "Nukopijuota", + "advanced": "Atidaryti MCP įrankius, leidimus ir sąrankos informaciją" } }, - "user": { - "title": "", - "subtitle": "Nurodykite administratoriaus naudotojo kredencialus.", - "notification": { - "success": { - "title": "Naudotojas sukurtas", - "message": "Naudotojas sėkmingai sukurtas" - }, - "error": { - "title": "Nepavyko sukurti naudotojo" - } - } - }, - "group": { - "title": "Išorinė grupė", - "subtitle": "Nurodykite grupę, kuri bus naudojama išoriniams naudotojams.", - "form": { - "name": { - "label": "Grupės vardas", - "description": "Pavadinimas turi sutapti su išorinio teikėjo administratorių grupės pavadinimu" - } - } - }, - "settings": { - "title": "Nustatymai", - "subtitle": "Sukonfigūruokite serverio nustatymus." - }, - "integrations": { - "title": "Integracijos", - "subtitle": "Pasirinkite naudojamas paslaugas.", - "description": "Pasirinkite integracijas, kurias norite prijungti. Automatiškai sukonfigūruosime jūsų valdymo skydelį su atitinkamais valdikliais.", - "action": { - "continue": "Tęsti", - "skip": "Kol kas praleisti" - }, - "configure": { - "progress": "{current} iš {total}", - "skip": "Praleisti šią integraciją", - "finishing": "Konfigūruojamas valdymo skydelis...", - "error": { - "title": "Sąranka nepavyko", - "message": "Kažkas nepavyko konfigūruojant valdymo skydelį. Bandykite dar kartą." - }, - "helpers": { - "tooltip": "URL pagalbininkai", - "description": "Šie pagalbininkai bando atspėti jūsų paslaugų URL. Jei nepavyksta, tiesiog įveskite adresą rankiniu būdu." - } - }, - "urlTemplate": { - "label": "Bazinis URL", - "placeholder": "homelab.local arba 192.168.1.1", - "hint": "Įveskite pagrindinį domeną ar IP, kad automatiškai užpildytumėte integracijų URL", - "warning": "Nustatę bazinį URL dabar, automatiškai užpildysite visus integracijų URL, taip sutaupydami laiko diegimo metu", - "preview": "pvz., {example}", - "mode": { - "subdomain": "Subdomenas", - "hostPort": "Mazgas:Prievadas" - } - }, - "docker": { - "detected": "Docker aptiko {count} paslaugas", - "detectedBreakdown": "{integrations} integracijų · {apps} programėlių", - "summary": "Homarr aptiko {apps} programėlių, iš kurių {integrations} turi integracijas", - "appBadge": "Programėlė", - "appSectionLabel": "Programėlės, pridedamos į valdymo skydelį (pasirinkta {count})", - "scanning": "Nuskaitomas Docker...", - "scanningDescription": "Ieškoma veikiančių konteinerių jūsų sistemoje" + "review": { + "title": "Viena lenta, sukurta jūsų paslaugoms", + "description": "Homarr patikrina neišsaugotus ryšius, importuoja pasirinktas programas, pritaiko išvaizdą ir išdėstymus, tada atidaro tiksliai sukonfigūruotą lentą.", + "board": "Pirmoji lenta", + "columns": "Lentos stulpeliai", + "columnsValue": "{count, plural, one {# stulpelis} few {# stulpeliai} many {# stulpelių} other {# stulpelio}}", + "sidebars": "Šoninės juostos", + "sidebarsValue": "{count, plural, =0 {Nėra} one {# šoninė juosta} few {# šoninės juostos} many {# šoninių juostų} other {# šoninės juostos}}", + "layouts": "Prisitaikantys išdėstymai", + "layoutsValue": "Mobilusis + bazinis", + "integrations": "Integracijos", + "integrationsValue": "{count, plural, =0 {Nepasirinkta nė viena} one {# integracija} few {# integracijos} many {# integracijų} other {# integracijos}}", + "apps": "Programų plytelės", + "appsValue": "{count, plural, =0 {Tik pradinės programos} one {# programos plytelė} few {# programos plytelės} many {# programų plytelių} other {# programos plytelės}}", + "language": "Kalba", + "theme": "Tema", + "themeAuto": "Sistemos nuostata", + "themeLight": "Šviesi", + "themeDark": "Tamsi", + "colors": "Lentos spalvos", + "radius": "Valdiklio kampų spindulys", + "automaticTitle": "Ką sukurs Homarr", + "automaticDescription": "Suderinami valdikliai, piktogramos, programų nuorodos, integracijų ryšiai ir prisitaikantis išdėstymas gaunami iš bendro Homarr katalogo. Vėliau galėsite redaguoti kiekvieną rezultatą.", + "dockerWarningTitle": "Sąrankos metu pasikeitė kai kurios Docker etiketės", + "dockerWarningDescription": "{count, plural, one {Nepavyko pritaikyti # pasirinkto Docker rezultato, nes pasikeitė jo paslauga, jis buvo skirtas kitai lentai arba jo valdiklis buvo nesuderinamas} few {Nepavyko pritaikyti # pasirinktų Docker rezultatų, nes pasikeitė paslaugos, jie buvo skirti kitai lentai arba jų valdikliai buvo nesuderinami} many {Nepavyko pritaikyti # pasirinktų Docker rezultatų, nes pasikeitė paslaugos, jie buvo skirti kitai lentai arba jų valdikliai buvo nesuderinami} other {Nepavyko pritaikyti # pasirinkto Docker rezultato, nes pasikeitė paslaugos, jie buvo skirti kitai lentai arba jų valdikliai buvo nesuderinami}}.", + "errorTitle": "Nepavyko sukurti lentos", + "progress": { + "applying": "Tikrinami ryšiai ir kuriama jūsų lenta", + "done": "Jūsų lenta paruošta" } }, "finish": { - "title": "Baigti nustatymą", - "subtitle": "Viskas paruošta!", - "description": "Sėkmingai baigėte nustatymo procesą. Dabar galite pradėti naudoti Homarr. Pasirinkite kitą veiksmą:", - "action": { - "goToBoard": "Eiti į {name} lentą", - "createBoard": "Sukurti pirmąją lentą", - "inviteUser": "Pakviesti kitus naudotojus", - "docs": "Skaityti dokumentaciją" - } + "title": "Jūsų pirmoji lenta paruošta.", + "description": "Homarr sujungė jūsų pasirinktas dalis, o likusias paliko redaguojamas. Dabar atidarykite lentą; trumpa produkto apžvalga parodys redagavimo režimą, valdiklius, išdėstymus ir paiešką.", + "openBoard": "Atidaryti mano lentą", + "manageTitle": "Valdyti", + "manageDescription": "Tiksliai sureguliuokite programas, integracijas, lentas, naudotojus ir serverio nuostatas.", + "workshopTitle": "Dirbtuvės", + "workshopDescription": "Atraskite ir įdiekite bendruomenės pasirinktinius valdiklius.", + "docsTitle": "Susipažinti su Homarr", + "docsDescription": "Skaitykite konkrečius vadovus apie lentas, valdiklius, integracijas ir įrankius." } - }, - "backToStart": "Grįžti į pradžią" + } }, "user": { - "title": "Vartotojai", "name": "Vartotojas", "page": { "login": { @@ -159,12 +249,10 @@ }, "invite": { "title": "Prisijungti prie Homarr", + "titleWithAppName": "Prisijungti prie {appName}", "subtitle": "Sveiki, čia Homarr! Prašome susikurti paskyrą", + "subtitleWithAppName": "Sveiki atvykę į {appName}! Sukurkite savo paskyrą", "description": "Jus pakvietė {username}" - }, - "init": { - "title": "Nauja Homarr instaliacija", - "subtitle": "Prašome sukurti pradinį administratorių" } }, "field": { @@ -192,12 +280,17 @@ "previousPassword": { "label": "Ankstesnis slaptažodis" }, - "homeBoard": { - "label": "Pagrindinė lenta" - }, "pingIconsEnabled": { "label": "Naudoti piktogramas pingams" }, + "byteUnitSystem": { + "label": "Duomenų dydžio vienetai", + "description": "Pasirinkite, kaip Homarr rodo baitų dydžius ir perdavimo spartą. Bitų sparta visada naudoja dešimtainius vienetus.", + "options": { + "binary": "Dvejetainė", + "decimal": "Dešimtainė" + } + }, "enableRightClickOnWidgets": { "label": "Įjungti valdiklių dešiniojo pelės mygtuko paspaudimą", "description": "Dešiniuoju pelės mygtuku spustelėjus valdiklį rodyti „Homarr“ kontekstinį meniu. Išjunkite, jei norite naudoti numatytąjį naršyklės meniu (pvz., „Atidaryti nuorodą naujame skirtuke“)." @@ -247,7 +340,6 @@ } } }, - "create": "Sukurti vartotoją", "changePassword": { "label": "Keisti slaptažodį", "notification": { @@ -259,56 +351,6 @@ } } }, - "changeHomeBoard": { - "notification": { - "success": { - "message": "Pagrindinė lenta sėkmingai pakeista" - }, - "error": { - "message": "Nepavyko pakeisti pagrindinės lentos" - } - } - }, - "changeSearchPreferences": { - "notification": { - "success": { - "message": "Paieškos nuostatos sėkmingai pakeistos" - }, - "error": { - "message": "Nepavyko pakeisti paieškos nuostatų" - } - } - }, - "changeFirstDayOfWeek": { - "notification": { - "success": { - "message": "Savaitės pirmoji diena sėkmingai pakeista" - }, - "error": { - "message": "Nepavyko pakeisti savaitės pirmosios dienos" - } - } - }, - "changePingIconsEnabled": { - "notification": { - "success": { - "message": "Ping piktogramos sėkmingai perjungtos" - }, - "error": { - "message": "Nepavyko perjungti ping piktogramų" - } - } - }, - "changeDdgBangs": { - "notification": { - "success": { - "message": "DuckDuckGo bangs perjungti sėkmingai" - }, - "error": { - "message": "Nepavyko perjungti DuckDuckGo bangs" - } - } - }, "manageAvatar": { "changeImage": { "label": "Keisti paveikslėlį", @@ -338,16 +380,6 @@ } } }, - "editProfile": { - "notification": { - "success": { - "message": "Profilis sėkmingai atnaujintas" - }, - "error": { - "message": "Nepavyko atnaujinti profilio" - } - } - }, "delete": { "label": "Pašalinti vartotoją visam laikui", "description": "Pašalina šį vartotoją kartu su jo nuostatomis. Lentos nebus ištrintos. Vartotojas nebus informuotas.", @@ -356,18 +388,13 @@ "select": { "label": "Pasirinkti vartotoją", "notFound": "Vartotojas nerastas" - }, - "transfer": { - "label": "Pasirinkti naują savininką" } } }, "group": { - "title": "Grupės", "name": "Grupė", "search": "Ieškoti grupės", "field": { - "name": "Pavadinimas", "members": "Nariai", "homeBoard": { "label": "Pagrindinė lenta", @@ -388,6 +415,19 @@ } } }, + "custom-widget": { + "title": "Pasirinktiniai valdikliai", + "item": { + "manage": { + "label": "Tvarkyti pasirinktinius valdiklius", + "description": "Leisti nariams kurti, redaguoti ir ištrinti pasirinktinių valdiklių apibrėžimus" + }, + "secret-write": { + "label": "Konfigūruoti pasirinktinių valdiklių paslaptis", + "description": "Leisti nariams ir jų API raktams nustatyti užšifruotus pasirinktinių valdiklių kredencialus" + } + } + }, "app": { "title": "Programėlės", "item": { @@ -493,6 +533,35 @@ "description": "Leisti nariams tvarkyti ir ištrinti bet kokią paieškos sistemą" } } + }, + "matrix": { + "none": "Prieigos nėra", + "impliedHint": "Taip pat suteikiama: {permissions}", + "grantedViaAdmin": "Administratoriai tai jau turi. Nustatykite administratoriaus prieigą į „Prieigos nėra“, kad sukonfigūruotumėte atskirai.", + "preset": { + "label": "Išankstiniai nustatymai", + "viewer": "Žiūrovas", + "viewerDescription": "Tik skaityti: peržiūrėti lentas ir mediją, naudoti jau esančias programas bei integracijas.", + "editor": "Redaktorius", + "editorDescription": "Kasdienis valdymas: kurti ir redaguoti lentas, programas, integracijas ir paieškos sistemas.", + "admin": "Administratorius", + "adminDescription": "Neribota prieiga prie kiekvienos funkcijos ir nuostatos, įskaitant naudotojų valdymą.", + "custom": "Pasirinktinis" + }, + "effective": { + "title": "Galiojantys leidimai", + "description": "Visas, be pasikartojimų sudarytas veiksmų rinkinys, kurį gali atlikti šios grupės nariai, įskaitant netiesiogiai suteiktus leidimus.", + "empty": "Nepasirinkta jokių leidimų" + }, + "noneDescription": "Nariai neturi prieigos prie šios srities.", + "level": { + "view": "Peržiūrėti", + "use": "Naudoti", + "interact": "Sąveikauti", + "modify": "Keisti", + "full": "Visos teisės" + }, + "capabilityIncluded": "Jau įtraukta į „{level}“" } }, "memberNotice": { @@ -607,21 +676,24 @@ "search": "Rasti programėlę", "page": { "list": { - "title": "Programėlės", + "ariaLabel": "Sukonfigūruotos programos", "noResults": { "title": "Kol kas programų nėra", - "action": "Sukurti pirmąją programą" + "description": "Programos yra nuorodos į paslaugas ir įrankius, kuriuos norite matyti savo lentose.", + "action": "Sukurti pirmąją programą", + "filteredTitle": "Nė viena programa neatitinka jūsų paieškos", + "filteredDescription": "Nė viena programa neatitinka „{search}“. Išbandykite kitą pavadinimą arba URL.", + "createOnlyTitle": "Galite tik pridėti programas", + "createOnlyDescription": "Jūsų leidimai leidžia kurti programas, bet neperžiūrėti esamų. Paprašykite administratoriaus suteikti programų valdymo prieigą, kad matytumėte visą sąrašą." } }, "create": { "title": "Nauja programa", "notification": { "success": { - "title": "Sukūrimas sėkmingas", "message": "Programa sėkmingai sukurta" }, "error": { - "title": "Sukūrimas nepavyko", "message": "Programos sukurti nepavyko" } } @@ -630,11 +702,9 @@ "title": "Redaguoti programą", "notification": { "success": { - "title": "Pakeitimai sėkmingai pritaikyti", "message": "Programa sėkmingai išsaugota" }, "error": { - "title": "Nepavyko pritaikyti pakeitimų", "message": "Programos išsaugoti nepavyko" } } @@ -644,26 +714,18 @@ "message": "Ar tikrai norite ištrinti programą {name}?", "notification": { "success": { - "title": "Ištrynimas sėkmingas", "message": "Programa sėkmingai ištrinta" }, "error": { - "title": "Ištrynimas nepavyko", "message": "Nepavyko ištrinti programos" } } } }, "field": { - "name": { - "label": "Pavadinimas" - }, "description": { "label": "Aprašymas" }, - "url": { - "label": "URL" - }, "useDifferentUrlForPing": { "checkbox": { "label": "Naudoti kitą URL būsenai tikrinti", @@ -678,34 +740,582 @@ "search": "Ieškoti programėlės", "noResults": "Rezultatų nėra", "action": "Pasirinkti {app}", - "title": "" + "title": "", + "toggle": "Spustelėkite, kad pasirinktumėte", + "selected": "Pasirinkta", + "multiple": "Pridėti {count}", + "selectedCount": "{count, plural, one {Pasirinkta #} few {Pasirinkti #} many {Pasirinkta #} other {Pasirinkta #}}", + "appsSelected": "{count, plural, one {Pasirinkta # programa} few {Pasirinktos # programos} many {Pasirinkta # programų} other {Pasirinkta # programų}}", + "selectMultiple": "Pasirinkti kelias", + "cancelMultiple": "Išeiti iš kelių pasirinkimo režimo", + "customApplication": "Pasirinktinė programa", + "application": "Programa" }, "create": { "title": "Sukurti naują programėlę", "description": "Sukurti naują programėlę ", "action": "Atidaryti programėlės kūrimą" + } + } + }, + "tips": { + "dismiss": "Uždaryti patarimą", + "multiSelectApps": "Patarimas: laikykite nuspaudę Ctrl / ⌘, kad vienu metu pasirinktumėte kelias programas" + }, + "customWidget": { + "secretEntry": { + "title": "Konfigūruoti API šaltinį", + "description": "Patvirtinkite serverio URL ir įveskite kredencialus. Homarr užšifruoja paslapčių reikšmes ir niekada jų negrąžina užklausą pateikusiam agentui.", + "loading": "Įkeliamas saugus prašymas…", + "applying": "Taikoma ši konfigūracija… Palikite šį puslapį atidarytą.", + "saved": "API šaltinis sukonfigūruotas. Galite uždaryti šį puslapį.", + "unavailable": "Prašymas nepasiekiamas", + "saveError": "Nepavyko sukonfigūruoti API šaltinio", + "source": "API šaltinis: {name}", + "baseUrl": "Serverio URL", + "networkScope": "Tinklo prieiga", + "save": "Išsaugoti API konfigūraciją", + "expires": "Šis vienkartinis prašymas baigs galioti {time}." + }, + "page": { + "list": { + "noResults": "Pasirinktinių valdiklių dar nėra. Sukurkite pirmąjį!", + "noDescription": "Aprašymo nėra", + "enabled": "Įjungta", + "disabled": "Išjungta", + "disabledDescription": "Šis valdiklis lieka sukonfigūruotas, bet nebus įkeltas jokioje lentoje.", + "requestCount": "{count, plural, one {# prašymas} few {# prašymai} many {# prašymų} other {# prašymo}}", + "invalidDefinition": "Netinkamas apibrėžimas", + "migrationRequired": "Reikia migruoti", + "migrationInstructions": "Atidarykite veiksmus, kad nukopijuotumėte arba eksportuotumėte pradinį v1 apibrėžimą ir atkurtumėte jį rankiniu būdu. Taip pat galite naudoti migravimo raginimą su LLM. Esamos vietos lentose po migravimo veiks toliau.", + "missingCredentials": "{count, plural, one {Trūksta kredencialo} few {Trūksta # kredencialų} many {Trūksta # kredencialų} other {Trūksta # kredencialo}}", + "missingCredentialsDescription": "{count, plural, one {Šiam valdikliui vis dar reikia vieno kredencialo.} few {Šiam valdikliui vis dar reikia # kredencialų.} many {Šiam valdikliui vis dar reikia # kredencialų.} other {Šiam valdikliui vis dar reikia # kredencialo.}} Pasirinkite šį ženklelį, kad sukonfigūruotumėte URL ir užšifruotas reikšmes." }, - "add": "" + "create": { + "title": "Sukurti pasirinktinį valdiklį", + "subtitle": "Apibrėžkite API URL, autentifikavimą ir atsakymo duomenų rodymo būdą." + }, + "tabs": { + "ariaLabel": "Pasirinktinių valdiklių skyriai", + "installed": "Įdiegta", + "workshop": "Dirbtuvės" + } + }, + "action": { + "pasteImportHint": "Įklijuokite visą pasirinktinio valdiklio JSON naudodami Ctrl+V arba Command+V", + "delete": "Ištrinti pasirinktinį valdiklį", + "deleteConfirm": "Ar tikrai norite ištrinti „{name}“? Šio veiksmo neįmanoma atšaukti.", + "export": "Eksportuoti", + "duplicate": "Dubliuoti", + "aiPrompt": "Kurti naudojant DI", + "copyAiPrompt": "Kopijuoti DI užklausą", + "enable": "Įjungti", + "disable": "Išjungti", + "menu": "Veiksmai", + "downloadSkill": "Peržiūrėti pasirinktinio valdiklio įgūdžius", + "publishWorkshop": "Skelbti dirbtuvėse", + "migrate": "Migruoti pasirinktinį valdiklį", + "configureSources": "Konfigūruoti šaltinius", + "copyLegacyDefinition": "Kopijuoti pradinį valdiklio turinį", + "exportLegacyDefinition": "Eksportuoti pradinį valdiklio turinį", + "copyMigrationPrompt": "Kopijuoti LLM migravimo raginimą", + "pasteMigration": "Įklijuoti perkeltą valdiklį", + "importMigration": "Importuoti perkeltą JSON failą" + }, + "sourceSetupDialog": { + "title": "Konfigūruoti valdiklio šaltinius", + "description": "Peržiūrėkite, prie ko jungiasi šis valdiklis, ir pridėkite arba pakeiskite jo užšifruotus kredencialus.", + "credentialsRequired": "Prašymai nepavyks, kol nebus pridėti reikiami kredencialai.", + "save": "Išsaugoti konfigūraciją" + }, + "field": { + "description": "Aprašymas" + }, + "editor": { + "errorBoundary": { + "title": "Kažkas nepavyko" + }, + "action": { + "components": "Komponentai", + "format": "Formatuoti", + "insertStarter": "Įterpti pradinį šabloną", + "redo": "Perdaryti", + "copied": "Nukopijuota", + "schema": "Schema" + }, + "reference": { + "minimal": "Minimalus pavyzdys", + "full": "Visas pavyzdys" + }, + "componentReference": { + "search": "Ieškoti komponentų", + "empty": "Atitinkančių komponentų nėra", + "count": "{count, number} komponentų galima naudoti" + }, + "status": { + "errors": "{count, number} klaidų", + "warnings": "{count, number} įspėjimų", + "ready": "Problemų nerasta", + "position": "Eil. {line, number}, stulp. {column, number}", + "characters": "{count, number} simbolių", + "charactersWithLimit": "{count, number} / {limit, number}" + }, + "diagnostics": { + "title": "Šablono diagnostika", + "line": "{line, number} eilutė", + "ast": "{value}", + "bindingTypeConflict": "Įvestį „{value}“ naudoja valdikliai su nesuderinamais reikšmių tipais.", + "runtimeBindingTypeConflict": "Įvestis „{value}“ susieta kaip {firstType} ir kaip {secondType}.", + "dynamicRequestId": "Reikalingas literalus requestId. Dinaminiai užklausų ID nepriimami.", + "dynamicInputBinding": "Susiejimui reikalingas literalus įvesties pavadinimas.", + "inlineRequestProps": "Tinklo komponentai priima requestId ir params; įterptosios URL, metodo, antraštės ir turinio savybės blokuojamos.", + "invalidRequestManifest": "Pavadintos užklausos turi būti tinkamas užklausų susiejimas. {value}", + "missingRequestId": "Šiam tinklo komponentui reikalingas literalus requestId.", + "templateEmpty": "Įveskite JSX šabloną.", + "templateTooLong": "Šablonas viršija 50 000 simbolių limitą.", + "unknownRequest": "Pavadinta užklausa su ID „{value}“ neegzistuoja." + } + }, + "workbench": { + "configure": "Konfigūruoti", + "sectionNavigation": "Pasirinktinių valdiklių skyriai", + "widgetPreview": "Valdiklio peržiūra", + "generalInformation": "Bendroji informacija", + "invalidWidget": "Netinkamas valdiklis", + "section": { + "general": "Bendras", + "sources": "API šaltiniai", + "requests": "Užklausos", + "options": "Parinktys", + "jsx": "JSX", + "preview": "Peržiūra" + }, + "status": { + "unsaved": "Neišsaugoti pakeitimai", + "invalid": "Reikia dėmesio", + "ready": "Paruošta" + }, + "saveError": { + "title": "Valdiklis neišsaugotas", + "description": "Ištaisykite šias tikrinimo klaidas ir išsaugokite dar kartą.", + "more": "Dar {count} klaidų rodoma darbastalyje.", + "errors": "Tikrinimo klaidos", + "copy": "Kopijuoti klaidas", + "copied": "Klaidos nukopijuotos" + }, + "action": { + "preview": "Išbandyti ir peržiūrėti", + "previewLoading": "Tikrinamos užklausos" + }, + "requests": { + "title": "Pavadintos užklausos ir veiksmai", + "label": "Užklausos", + "description": "Užklausos įkelia duomenis; veiksmai paleidžiami tik naudotojui sąveikaujant. Abiem atvejais galimas bet kuris HTTP metodas." + }, + "options": { + "title": "Valdiklio parinktys" + }, + "builder": { + "advancedManifest": "Išplėstinis neapdorotas manifestas", + "advancedJson": "Išplėstinis manifesto JSON", + "manifestFilename": "widget.json", + "request": "Užklausa {count, number}", + "requestId": "Užklausos ID", + "type": "Tipas", + "method": "Metodas", + "source": "API šaltinis", + "run": "Paleisti", + "runLoad": "Kai įkeliamas valdiklis", + "runManual": "Iš „SubFetch“", + "permission": "Leidimas", + "path": "Kelias", + "pathDescription": "Valdiklio parinktims naudokite „{option:name}“, o iškvietimo reikšmėms – „{param:name}“.", + "requestDetails": "Užklausa, turinys ir veikimas", + "queryValues": "Užklausos reikšmės", + "queryKey": "Užklausos raktas", + "queryKeyInvalid": "Naudokite unikalų ID, prasidedantį raide ir sudarytą tik iš raidžių, skaičių, - arba _.", + "valueSource": "Reikšmės šaltinis", + "literal": "Literalas", + "widgetOption": "Valdiklio parinktis", + "invocationParameter": "Iškvietimo parametras", + "option": "Parinktis", + "parameterName": "Parametro pavadinimas", + "value": "Reikšmė", + "removeQueryValue": "Pašalinti užklausos reikšmę", + "addQueryValue": "Pridėti užklausos reikšmę", + "jsonBody": "JSON turinys", + "jsonBodyDescription": "Pasirinktinai. Įterpkite $option ir $param nuorodas bet kuriame gylyje.", + "insertOptionReference": "Įterpti parinkties nuorodą", + "insertParameterReference": "Įterpti parametro nuorodą", + "confirmation": "Patvirtinimo pranešimas", + "invalidation": "Atnaujinti po sėkmės", + "invalidationDescription": "Kableliais atskirti užklausų ID", + "noAuth": "Siųsti be šaltinio autentifikavimo", + "moveRequestUp": "Perkelti užklausą aukštyn", + "moveRequestDown": "Perkelti užklausą žemyn", + "removeRequest": "Pašalinti užklausą", + "addRequest": "Pridėti užklausą", + "optionName": "Parinkties pavadinimas", + "label": "Etiketė", + "control": "Valdiklis", + "description": "Aprašas", + "default": "Numatytoji reikšmė", + "optionDetails": "Apribojimai ir dinaminiai pasirinkimai", + "minimum": "Mažiausia reikšmė", + "maximum": "Didžiausia reikšmė", + "step": "Žingsnis", + "choiceLabel": "Pasirinkimo etiketė", + "choiceValue": "Pasirinkimo reikšmė", + "newChoice": "Naujas pasirinkimas", + "addChoice": "Pridėti pasirinkimą", + "removeChoice": "Pašalinti pasirinkimą", + "choicesRequest": "Įkelti pasirinkimus iš užklausos", + "itemsPath": "Elementų kelias", + "itemsPathPlaceholder": "elementai (pasirinktinai)", + "valuePath": "Reikšmės kelias", + "labelPath": "Etiketės kelias", + "group": "Grupė", + "advancedOption": "Išplėstinė parinktis", + "moveOptionUp": "Perkelti parinktį aukštyn", + "moveOptionDown": "Perkelti parinktį žemyn", + "removeOption": "Pašalinti parinktį", + "addOption": "Pridėti parinktį", + "invalidJson": "Netinkamas JSON", + "invalidWidget": "Netinkamas valdiklis" + }, + "jsx": { + "title": "JSX šablonas", + "label": "Šablonas" + }, + "sources": { + "title": "API šaltiniai ir kredencialai", + "newName": "API Nr. {count, number}", + "duplicateSourceId": "API šaltinių ID turi būti unikalūs.", + "credentialRemoved": "Kredencialas pašalintas", + "credentialRemovedDescription": "Išsaugota reikšmė ištrinta.", + "primary": "Pagrindinė API", + "id": "Šaltinio ID", + "name": "Pavadinimas", + "baseUrl": "Bazinis URL", + "baseUrlError": { + "invalid": "Įveskite visą URL.", + "protocol": "Naudokite HTTP arba HTTPS URL.", + "credentials": "Pašalinkite naudotojo vardą ir slaptažodį iš šio URL. Vietoj to sukonfigūruokite kredencialus toliau.", + "queryOrFragment": "Pašalinkite užklausos eilutę arba fragmentą iš šio bazinio URL. Pridėkite užklausos reikšmes prie pavadintos užklausos." + }, + "networkScope": "Tinklo prieiga", + "authentication": "Autentifikavimas", + "headerName": "Antraštės pavadinimas", + "queryParameter": "Užklausos parametras", + "configured": "Sukonfigūruota — įveskite pakaitalą", + "clear": "Išvalyti", + "remove": "Pašalinti šaltinį ir jo užklausas", + "advanced": "Išplėstiniai", + "add": "Pridėti kitą API šaltinį", + "sourceType": "Integracija", + "manualSource": "HTTP API", + "existingIntegration": "Esama integracija", + "integrationType": "Integracijos tipas", + "selectIntegration": "Sukonfigūruota integracija", + "noIntegrations": "Nėra tinkamų integracijų", + "integrationUnavailable": "Pasirinkta integracija nebepasiekiama. Pasirinkite kitą integraciją.", + "integrationDescription": "Naudoja išsaugotą integracijos URL ir kredencialus. Pakeitimai pritaikomi automatiškai. Užklausoms vykdyti reikalinga visa integracijos prieiga." + }, + "ai": { + "title": "Kurti arba taisyti naudojant bet kurį DI", + "description": "Pirmiausia pridėkite API dokumentacijos URL, jei jį turite. Jei įmanoma, paleiskite peržiūrą. Nukopijuokite raginimą į bet kurį DI; jis gali paprašyti trūkstamos informacijos. Čia įklijuokite galutinį JSON.", + "request": "Ką turėtų daryti šis valdiklis?", + "documentationUrl": "API dokumentacijos URL (pasirinktinai)", + "paste": "Įklijuoti", + "response": "DI atsakymas", + "manualCopyDescription": "Iškarpinė nepasiekiama. Pasirinkite toliau pateiktą raginimą ir nukopijuokite jį rankiniu būdu.", + "manualPasteDescription": "Iškarpinė nepasiekiama arba nukopijuotą atsakymą reikia pataisyti. Įklijuokite DI JSON atsakymą čia.", + "selectAll": "Pasirinkti viską", + "loadResponse": "Įkelti atsakymą", + "loaded": "Valdiklis įkeltas į redaktorių", + "invalidResponse": "Iškarpinėje nėra tinkamo v2 valdiklio", + "invalidResponseDetail": "DI atsakymas netinkamas: {message}" + }, + "preview": { + "invalid": "Ištaisykite tikrinimo klaidas, kad galėtumėte peržiūrėti šį valdiklį.", + "fixtureError": "Peržiūros duomenų rinkinio klaida", + "requestData": "Užklausos duomenys", + "status": { + "idle": "Užklausos dar neišbandytos", + "loading": "Bandomos užklausos", + "success": "Visos įkėlimo užklausos įvykdytos sėkmingai", + "error": "Nepavyko įvykdyti vienos ar daugiau įkėlimo užklausų" + }, + "result": { + "loading": { + "title": "Bandomos API užklausos", + "description": "„Homarr“ kuria peržiūros seansą ir įkelia valdiklio duomenis." + }, + "success": { + "title": "Peržiūra paruošta", + "description": "{succeeded, plural, =0 {Šis valdiklis neturi įkėlimo užklausų.} one {# įkėlimo užklausa įvykdyta sėkmingai.} few {# įkėlimo užklausos įvykdytos sėkmingai.} many {# įkėlimo užklausų įvykdyta sėkmingai.} other {# įkėlimo užklausų įvykdyta sėkmingai.}} Atidarykite skiltį „Duomenys“, kad patikrintumėte atsakymą." + }, + "error": { + "title": "Peržiūra baigta su užklausų klaidomis", + "description": "Sėkmingai įvykdyta: {succeeded, number}; nepavyko: {failed, number}. Atidarykite skiltį „Duomenys“, kad peržiūrėtumėte atsakymą ir išsamią informaciją apie klaidas." + } + }, + "instanceOptions": "Egzemplioriaus parinktys", + "liveActions": "Vykdyti veiksmus pagal sukonfigūruotą API", + "liveActionsDescription": "Išjungta parinktis yra saugus modeliavimas. Ją įjungus bus paveikta tikroji paslauga.", + "noActions": "Veiksmų nenurodyta.", + "containedFailures": "Vykdymo klaidos apribojamos šiame valdiklyje. Užklausų žurnaluose niekada nėra slaptų reikšmių.", + "validation": { + "title": "Tikrinimas", + "ready": "Valdiklio apibrėžtis tinkama." + }, + "accessibility": { + "title": "Pritaikymo neįgaliesiems tikrinimai", + "ready": "Įprastų pritaikymo neįgaliesiems spragų nenustatyta.", + "pending": "Pritaikymo neįgaliesiems tikrinimai bus vykdomi, kai valdiklio apibrėžtis bus tinkama.", + "imageAlt": "Pridėkite kiekvienam „Image“ elementui alternatyvųjį tekstą; tuščią „alt“ naudokite tik dekoratyviniams vaizdams.", + "actionIconLabel": "Pridėkite kiekvienam „ActionIcon“ elementui „aria-label“ arba pavadinimą.", + "inputLabel": "Pridėkite kiekvienam įvesties laukui matomą etiketę arba prieinamą pavadinimą." + }, + "journal": "Redaguotas užklausų žurnalas", + "actionParameters": "Veiksmo parametrai (JSON)", + "invalidParameters": "Naudokite deklaruotus eilutės, skaičiaus ir loginio tipo parametrus.", + "runDestructive": "Vykdyti naikinamąjį veiksmą", + "runAction": "Vykdyti veiksmą", + "deleteConfirmation": "Šis peržiūros veiksmas pakeičia nuotolinius duomenis naudodamas sukonfigūruotą API.", + "simulated": "Veiksmas imituotas", + "httpStatus": "HTTP {status, number}", + "tab": { + "widget": "Valdiklis", + "data": "Duomenys", + "options": "Parinktys", + "state": "Užduoties būsena", + "actions": "Valdymas", + "diagnostics": "Diagnostika" + }, + "size": { + "compact": "Kompaktiškas", + "standard": "Standartinis", + "wide": "Platus" + }, + "fixture": { + "live": "Tiesioginis", + "loading": "Įkeliama", + "empty": "Tuščia", + "error": "Klaida" + } + } + }, + "preview": { + "request": { + "permission": { + "view": "Peržiūrėti", + "modify": "Keisti", + "full": "Visos" + } + } + }, + "notification": { + "created": "Valdiklis „{name}“ sėkmingai sukurtas.", + "updated": "Valdiklis „{name}“ sėkmingai atnaujintas.", + "deleted": "Valdiklis „{name}“ ištrintas.", + "imported": "Valdiklis sėkmingai importuotas.", + "migrated": "Senasis valdiklis sėkmingai perkeltas. Esamose lentos vietose dabar naudojama v2 apibrėžtis.", + "migrationError": "Nepavyko perkelti senojo valdiklio. Įsitikinkite, kad faile naudojama „homarr-custom-widget-v2“ schema.", + "legacyDefinitionCopied": "Pradinis valdiklio turinys nukopijuotas. Išsaugotos kredencialų reikšmės neįtrauktos.", + "legacyDefinitionCopyError": "Nepavyko nukopijuoti pradinio valdiklio turinio.", + "migrationPromptCopied": "Nukopijuotas redaguotas perkėlimo raginimas. Įklijuokite jį į LLM, nukopijuokite vienintelį JSON atsakymą, tada pasirinkite „Įklijuoti perkeltą valdiklį čia“.", + "migrationPromptCopyError": "Nepavyko nukopijuoti perkėlimo raginimo.", + "sourcesConfigured": "Valdiklio šaltiniai ir kredencialai išsaugoti.", + "sourceConfigurationError": "Nepavyko sukonfigūruoti valdiklio šaltinių.", + "aiPromptCopiedWithCount": "DI raginimas nukopijuotas į iškarpinę ({count, number} simbolių).", + "aiPromptCopyError": "Nepavyko nukopijuoti užklausos į iškarpinę. Jūsų naršyklė gali nepalaikyti šios funkcijos.", + "aiPromptSent": "Raginimas išsiųstas. Galite toliau redaguoti, kol asistentas dirba fone.", + "updateError": "Nepavyko atnaujinti valdiklio. Jūsų pakeitimai neišsaugoti.", + "importError": "Nepavyko importuoti valdiklio. Įsitikinkite, kad failas yra tinkamas pasirinktinio valdiklio JSON eksportas.", + "exportError": "Nepavyko eksportuoti valdiklio.", + "duplicated": "Valdiklis „{name}“ sudubliuotas.", + "duplicateError": "Nepavyko dubliuoti valdiklio.", + "toggleError": "Nepavyko perjungti valdiklio būsenos.", + "deleteError": "Nepavyko ištrinti valdiklio.", + "previewError": "Nepavyko gauti peržiūros. Patikrinkite URL ir bandykite dar kartą." + }, + "importReview": { + "title": "Pasirinktinio valdiklio importo peržiūra", + "description": "Prieš importuodami patikrinkite, prie ko jungiasi šis valdiklis ir kokios prieigos prie lentos reikia jo valdikliams.", + "migrationTitle": "Perkelto v2 pakaitalo peržiūra", + "migrationDescription": "Peržiūrėkite ir patvirtinkite šią sugeneruotą v2 apibrėžtį. Patvirtinus atomiškai pakeičiamas išsaugotas v1 įrašas, o esamos lentos vietos lieka susietos su tuo pačiu valdiklio ID.", + "fileLabel": "Pasirinkite pasirinktinio valdiklio JSON failą", + "name": "Užduoties pavadinimas", + "origin": "Pagrindinė kilmė", + "authentication": "Autentifikavimas", + "networkScope": "Tinklo aprėptis", + "methods": "HTTP metodai", + "permissions": "Reikalingi lentos leidimai", + "sourceSetup": { + "title": "Konfigūruoti API šaltinius", + "description": "Patvirtinkite, prie ko jungiasi šis valdiklis, ir pridėkite kredencialus. Privatūs bei grįžtamojo ryšio URL yra būdingi jūsų „Homarr“ dieginiui.", + "suggestedUrl": "Siūlomas URL", + "confirmUrl": "Patvirtinu, kad šis serverio URL yra tinkamas mano „Homarr“ dieginiui", + "ready": "URL paruoštas", + "needsUrl": "Patvirtinti URL", + "credentialsMissing": "Trūksta kredencialų", + "credentialsOptional": "Galite įdiegti be kredencialų ir sukonfigūruoti juos vėliau, tačiau užklausos nepavyks įvykdyti, kol jų nepridėsite." + }, + "actionWarning": { + "title": "Šis valdiklis gali keisti nuotolinius duomenis", + "description": "Po importo peržiūrėkite kiekvieną įvardytą veiksmą, paveldėtą kredencialą ir naikinamojo veiksmo patvirtinimą. Slapti duomenys į failą neįtraukiami." + }, + "cancel": "Atšaukti importą", + "confirm": "Importuoti valdiklį", + "confirmMigration": "Patvirtinti v2 pakeitimą" + }, + "secret": { + "apiKey": "API raktas arba prieigos raktas", + "username": "Naudotojo vardas", + "password": "Slaptažodis", + "savedPlaceholder": "••••••• (išsaugota, palikite tuščią, kad išlaikytumėte)" + } + }, + "workshop": { + "title": "Dirbtuvės", + "browseWorkshop": "Naršyti dirbtuves", + "openCommunity": "Atidaryti dirbtuves", + "openOnWorkshop": "Atidaryti „{title}“ dirbtuvių svetainėje", + "back": "Grįžti į dirbtuves", + "search": "Ieškoti valdiklių", + "searchCss": "Ieškoti CSS temų", + "sort": "Rikiuoti", + "sortTop": "Geriausiai įvertinti", + "sortNewest": "Naujausi", + "listAriaLabel": "Dirbtuvių valdikliai", + "listAriaLabelCss": "Dirbtuvių CSS temos", + "empty": "Šios paieškos neatitinkančių valdiklių nėra.", + "emptyDescription": "Čia rodomi bendruomenės dirbtuvėse paskelbti valdikliai.", + "emptyFilteredTitle": "Šios paieškos neatitinkančių valdiklių nėra", + "emptyFilteredDescription": "Nė vienas dirbtuvių valdiklis neatitinka „{search}“.", + "emptyCss": "Šios paieškos neatitinkančių CSS temų nėra.", + "unavailableTitle": "Panašu, kad „Homarr“ dirbtuvės nepasiekiamos", + "unavailable": "Bendruomenės paslauga gali būti laikinai nepasiekiama. Pabandykite dar kartą po akimirkos. Įdiegtiems valdikliams tai įtakos neturi.", + "loadError": "Nepavyko įkelti šio pateikto elemento.", + "noDescription": "Aprašo nėra", + "author": "pateikė {name}", + "communityMember": "Bendruomenės narys", + "outdated": "Pasenęs", + "outdatedWarning": "Autorius pažymėjo šį pateiktą elementą kaip pasenusį. Prieš importuodami atidžiai jį peržiūrėkite.", + "score": "Įvertis: {count, number}", + "upvote": "Balsuoti už", + "downvote": "Balsuoti prieš", + "voteError": "Nepavyko išsaugoti balso.", + "signIn": "Prisijungti naudojant „GitHub“", + "signInError": "Nepavyko prisijungti prie „GitHub“. Patikrinkite, ar sukonfigūruotas dirbtuvių OAuth teikėjas ir leidžiami iššokantieji langai.", + "signOut": "Atsijungti", + "signInHint": "Prisijunkite, kad galėtumėte balsuoti arba pranešti. Diegiant dirbtuvių paskyra nereikalinga.", + "securityNotice": "Dirbtuvių valdikliai gali iškviesti savo deklaruotus API šaltinius ir vykdyti deklaruotus veiksmus naudodami jūsų vietoje sukonfigūruotus kredencialus. Slapti duomenys niekada neįtraukiami.", + "securityNoticeCss": "Bendruomenės CSS gali pakeisti lentos išvaizdą ir naudojimo patogumą. Prieš importuodami jį peržiūrėkite; niekas neišsaugoma, kol neišsaugote lentos nustatymų.", + "install": "Įdiegti", + "installReviewTitle": "Peržiūrėkite prieš diegdami", + "installError": "Šio valdiklio įdiegti negalima", + "installErrorDescription": "Dirbtuvių pateiktas elementas nėra tinkamas pasirinktinis JSX v2 valdiklis.", + "useCss": "Importuoti CSS", + "importCss": "Importuoti CSS iš dirbtuvių", + "importCssConfirm": "Pakeisti dabartinį pasirinktinį CSS į „{title}“? Nieko neišsaugoma, kol neišsaugote lentos nustatymų.", + "screenshotAlt": "{title} ekrano kopija {count, number}", + "screenshotViewer": "„{title}“ ekrano kopijų peržiūros priemonė", + "screenshotsLabel": "„{title}“ ekrano kopijos", + "zoomScreenshot": "Peržiūrėti visu dydžiu", + "previousScreenshot": "Ankstesnė ekrano kopija", + "nextScreenshot": "Kita ekrano kopija", + "showScreenshotThumbnails": "Rodyti ekrano kopijų miniatiūras", + "hideScreenshotThumbnails": "Slėpti ekrano kopijų miniatiūras", + "closeScreenshotViewer": "Uždaryti ekrano kopijų peržiūros priemonę", + "technicalDetails": "Techninė informacija", + "sourceCode": "Dirbtuvių įrašas", + "export": "Eksportuoti", + "report": "Pranešti", + "reportTitle": "Pranešti apie pateiktą elementą", + "reportReason": "Priežastis", + "reportExplanation": "Ką turėtų žinoti dirbtuvių moderatoriai?", + "reportSend": "Siųsti pranešimą", + "reportSent": "Pranešimas išsiųstas", + "reportSentDescription": "Dirbtuvių moderatoriai dabar gali peržiūrėti šį pateiktą elementą.", + "reportCount": "{count, plural, one {# pranešimas} few {# pranešimai} many {# pranešimų} other {# pranešimai}}", + "reportWarning": "{count, plural, one {Šis pateiktas elementas turi # atvirą bendruomenės pranešimą.} few {Šis pateiktas elementas turi # atvirus bendruomenės pranešimus.} many {Šis pateiktas elementas turi # atvirų bendruomenės pranešimų.} other {Šis pateiktas elementas turi # atvirą bendruomenės pranešimą.}} Jį vis dar galima įdiegti, tačiau pirmiausia turėtumėte peržiūrėti jo turinį.", + "reportVisibility": "Išsamią pranešimo informaciją gali matyti tik šio pateikto elemento autorius ir dirbtuvių administratoriai.", + "reportCategory": { + "outdated": "Pasenęs arba nebeveikiantis", + "malicious": "Kenkėjiškas", + "spam": "Šlamštas", + "copyright": "Autorių teisės", + "inappropriate": "Netinkamas", + "other": "Kita" + }, + "publish": { + "title": "Skelbti dirbtuvėse", + "introTitle": "Bendrinti šį valdiklį su bendruomene", + "introDescription": "„Homarr“ eksportuoja dabartinio valdiklio kopiją be kredencialų. Pridėkite aiškią sąrašo informaciją, kad žmonės prieš diegdami žinotų, ką jis daro.", + "listingDetails": "Dirbtuvių sąrašas", + "listingDetailsDescription": "Ši informacija viešai rodoma kartu su eksportuota valdiklio apibrėžtimi.", + "success": "Paskelbta iš karto. Bendruomenės nariai dabar gali įdiegti šį valdiklį ir apie jį pranešti.", + "successTitle": "Jūsų valdiklis pasiekiamas", + "manageDescription": "Atidarykite pateiktą elementą, kad atnaujintumėte jo sąrašą, peržiūrėtumėte pranešimus, pažymėtumėte jį kaip pasenusį arba ištrintumėte. Pateiktų elementų valdymas vykdomas tiesiogiai dirbtuvių svetainėje.", + "viewSubmission": "Peržiūrėti ir valdyti pateiktą elementą", + "done": "Atlikta", + "signInHint": "Prisijunkite, kad skelbtumėte naudodami savo dirbtuvių tapatybę.", + "titleField": "Pavadinimas", + "descriptionField": "Aprašas", + "screenshots": "Ekrano kopijos", + "screenshotsDescription": "Iki penkių PNG, JPEG arba WebP vaizdų", + "screenshotsPlaceholder": "Pasirinkite ekrano kopijas", + "invalidScreenshot": "Naudokite PNG, JPEG arba WebP vaizdus, kurių kiekvienas neviršija {maxSize}.", + "privateSourceWarning": "Šiame valdiklyje yra privatūs šaltinių URL: {sources}. Prieš skelbdami asmeninius pagrindinius kompiuterius arba IP adresus pakeiskite saugiomis paslaugų vietos rezervavimo reikšmėmis.", + "reviewSourcesTitle": "Peržiūrėti privačius šaltinių URL", + "privateSourceConfirmation": "Peržiūrėjau šiuos šaltinių URL ir jie neatskleidžia privačios infrastruktūros informacijos", + "action": "Skelbti dabar", + "publicationNote": "Skelbiama iš karto. Vėliau galite valdyti pateiktą elementą dirbtuvėse.", + "definitionChanged": "Rengiant skelbti valdiklis pasikeitė. Dar kartą peržiūrėkite jo privačius šaltinių URL ir bandykite iš naujo.", + "error": "Nepavyko paskelbti" } }, "integration": { + "completion": { + "modalTitle": "Paslauga paruošta", + "title": "{name} prijungta", + "description": "Ryšio bandymas sėkmingas. Pasirinkite, ką toliau rodyti šioje lentoje.", + "connectionReady": "Paslaugos ryšys paruoštas", + "appReady": "Programos nuoroda paruošta", + "compatibleWidgets": "{count, plural, =0 {Suderinamų valdiklių nėra} one {Yra # suderinamas valdiklis} few {Yra # suderinami valdikliai} many {Yra # suderinamų valdiklių} other {Yra # suderinamų valdiklių}}", + "chooseWidget": "Pasirinkite valdiklį", + "recipes": { + "title": "Rekomenduojama šiai lentai", + "description": "Pagal jau prijungtas paslaugas ir šioje lentoje esančius valdiklius.", + "newConnectionReason": "Dabar pasiekiama per {integration}", + "existingConnectionReason": "Veikia su jau prijungta paslauga", + "dismiss": "Nerodyti šios paslaugos rekomendacijų šioje lentoje" + } + }, "page": { "list": { - "title": "Integracijos", + "ariaLabel": "Sukonfigūruotos integracijos", "search": "Ieškoti integracijų", + "scopedNote": "Rodomos tik tos integracijos, kurias jums leidžiama valdyti.", "noResults": { - "title": "Kol kas integracijų nėra" + "title": "Kol kas integracijų nėra", + "description": "Prijunkite paslaugą, kad galėtumėte naudoti jos duomenis ir veiksmus „Homarr“ valdikliuose.", + "action": "Sukurkite pirmą integraciją", + "filteredTitle": "Paiešką atitinkančių integracijų nėra", + "filteredDescription": "Integracijų, atitinkančių „{search}“, nėra. Pabandykite kitą pavadinimą, tipą arba URL.", + "createOnlyTitle": "Galite tik pridėti integracijas", + "createOnlyDescription": "Jūsų leidimai leidžia kurti integracijas, bet nevaldyti esamų. Paprašykite administratoriaus suteikti prieigą prie jums reikalingų integracijų." } }, "create": { "title": "Nauja {name} integracija", "notification": { "success": { - "title": "Sukūrimas sėkmingas", "message": "Integracija sėkmingai sukurta" }, "error": { - "title": "Sukūrimas nepavyko", "message": "Integracijos sukurti nepavyko" } }, @@ -729,11 +1339,9 @@ "title": "Redaguoti {name} integraciją", "notification": { "success": { - "title": "Pakeitimai sėkmingai pritaikyti", "message": "Integracija sėkmingai išsaugota" }, "error": { - "title": "Nepavyko pritaikyti pakeitimų", "message": "Integracijos išsaugoti nepavyko" } }, @@ -750,23 +1358,15 @@ "message": "Ar tikrai norite ištrinti integraciją {name}?", "notification": { "success": { - "title": "Ištrynimas sėkmingas", "message": "Integracija sėkmingai ištrinta" }, "error": { - "title": "Ištrynimas nepavyko", "message": "Nepavyko ištrinti integracijos" } } } }, "field": { - "name": { - "label": "Pavadinimas" - }, - "url": { - "label": "URL" - }, "attemptSearchEngineCreation": { "label": "Sukurti paieškos sistemą", "description": "Integracija „{kind}“ gali būti naudojama su paieškos varikliais. Pažymėkite, kad paieškos variklis būtų sukonfigūruotas automatiškai." @@ -778,6 +1378,10 @@ "label": "", "description": "Sukurkite programą tokiu pačiu pavadinimu ir piktograma kaip integracija. Jei toliau esantį įvesties lauką paliksite tuščią, programa bus sukurta naudojant integracijos URL." }, + "linkApp": { + "label": "Susieti esamą programą", + "description": "Prijunkite šią integraciją prie programos, kurią jau galite naudoti." + }, "appHref": { "placeholder": "" }, @@ -791,7 +1395,11 @@ "grid": { "widgetCount": "{count} valdikliai", "noWidgets": "Nėra valdiklių", - "detected": "Aptikta per Docker" + "detected": "Aptikta per Docker", + "connected": "{count, plural, one {# prijungta} few {# prijungtos} many {# prijungtų} other {# prijungta}}", + "tiedWidgets": "Susieti valdikliai", + "more": "+{count} daugiau", + "loadError": "Nepavyko įkelti integracijų. Prieš kurdami naują ryšį pabandykite dar kartą." }, "category": { "dnsHole": "DNS", @@ -822,7 +1430,10 @@ "analytics": "Analizė", "vpn": "VPN", "mediaLibrary": "Medijos biblioteka", - "uptimeMonitoring": "Veikimo stebėjimas" + "uptimeMonitoring": "Veikimo stebėjimas", + "beszel": "Beszel", + "systemMonitoring": "Sistemos stebėjimas", + "security": "Apsauga" }, "testConnection": { "action": { @@ -1107,6 +1718,22 @@ "slug": { "label": "Būsenos puslapio trumpinys", "newLabel": "Naujas būsenos puslapio trumpinys" + }, + "wazuhIndexerUrl": { + "label": "Indeksavimo URL", + "newLabel": "Naujas indeksavimo URL" + }, + "wazuhIndexerUsername": { + "label": "Indeksavimo naudotojo vardas", + "newLabel": "Naujas indeksavimo naudotojo vardas" + }, + "wazuhIndexerPassword": { + "label": "Indeksavimo slaptažodis", + "newLabel": "Naujas indeksavimo slaptažodis" + }, + "wazuhDashboardUrl": { + "label": "Valdymo skydelio URL (pasirinktinai)", + "newLabel": "Naujas valdymo skydelio URL" } } }, @@ -1115,54 +1742,19 @@ "interact": "Sąveikauti su integracijomis", "full": "Visiška integracijų prieiga" }, - "audiobookshelf": { - "name": "Audiobookshelf", - "description": "Savarankiškai talpinamas audioknygų ir tinklalaidžių serveris" - }, - "navidrome": { - "name": "Navidrome", - "description": "Savarankiškai talpinamas muzikos transliavimo serveris su Subsonic API suderinamumu" - }, - "uptimeKuma": { - "name": "Uptime Kuma", - "description": "Savarankiškai talpinamas veikimo stebėjimas su viešais būsenos puslapiais", - "secret": { - "slug": { - "description": "Jūsų viešo būsenos puslapio trumpinys. Jei nenustatyta, numatyta reikšmė \"default\"." - }, - "apiKey": { - "description": "Pasirinktinis API raktas autentifikuotai /metrics prieigai" - } - } - }, - "traefik": { - "name": "Traefik", - "description": "Debesies pagrindu veikiantis atvirkštinis tarpinis serveris ir apkrovos balansavimo priemonė" - }, - "paperlessNgx": { - "name": "Paperless-ngx", - "description": "Dokumentų valdymo sistema, skirta nuskaitytų dokumentų archyvavimui ir tvarkymui" - }, - "patchmon": { - "name": "PatchMon", - "description": "„Linux“ pagrindinių kompiuterių pataisų valdymas ir stebėjimas" - }, - "bazarr": { - "name": "Bazarr", - "description": "„Sonarr“ ir „Radarr“ papildoma programa, valdanti ir atsisiunčianti subtitrus" - }, - "wud": { - "name": "Kas naujo, Docker", - "description": "Stebėkite, kuriems jūsų Docker konteineriams yra prieinami atvaizdų naujinimai" + "llamacpp": { + "name": "llama.cpp", + "description": "Stebėkite vietinį „llama.cpp“ llama-server: būklės, modelio ir generavimo metrikas" } }, "media": { "plural": "Medijos", "search": "Ieškoti medijos", "field": { - "name": "Pavadinimas", + "preview": "Peržiūra", "size": "Dydis", - "creator": "Kūrėjas" + "creator": "Kūrėjas", + "actions": "Valdymas" }, "action": { "upload": { @@ -1190,10 +1782,12 @@ } }, "copy": { - "label": "Kopijuoti URL" + "label": "Kopijuoti URL", + "labelNamed": "Kopijuoti „{name}“ URL" }, "open": { - "label": "Atidaryti mediją" + "label": "Atidaryti mediją", + "labelNamed": "Atidaryti „{name}“" } }, "noResults": { @@ -1208,7 +1802,6 @@ "add": "Pridėti", "apply": "Taikyti", "backToOverview": "Atgal į apžvalgą", - "skip": "Praleisti", "change": "Keisti", "create": "Sukurti", "createAnother": "Sukurti ir pradėti iš naujo", @@ -1231,16 +1824,31 @@ "tryAgain": "Bandyti dar kartą", "loading": "Įkeliama", "show": "Rodyti", - "hide": "Slėpti" + "hide": "Slėpti", + "undo": "Anuliuoti", + "editNamed": "Redaguoti „{name}“", + "deleteNamed": "Ištrinti „{name}“", + "clearSearch": "Išvalyti paiešką", + "copy": "Kopijuoti", + "copied": "Nukopijuota", + "refresh": "Atnaujinti" + }, + "pagination": { + "pageOf": "{page} puslapis iš {totalPages}" }, "here": "čia", + "serviceUrlTemplate": { + "serverTitle": "Įprastas serverio adresas", + "urlModeLabel": "Paslaugos adreso šablonas", + "hostPort": "Tas pats pagrindinis kompiuteris, kiti prievadai", + "subdomain": "Po vieną padomenį kiekvienai paslaugai", + "path": "Po vieną kelią kiekvienai paslaugai" + }, "iconPicker": { "label": "Piktogramos URL", + "description": "Ieškokite bibliotekoje, įklijuokite paveikslėlio URL arba įkelkite failą.", "header": "Įveskite pavadinimą ar objektus, kad filtruoti piktogramas... Homarr ieškos per {countIcons} piktogramas", "headerLoading": "Ieškoti paveikslėlių pagal pavadinimą", - "noResults": "Nė viena piktograma neatitinka „{search}“.", - "error": "Nepavyko įkelti piktogramų.", - "description": "Ieškokite bibliotekoje, įklijuokite paveikslėlio URL arba įkelkite failą.", "clear": "Pašalinti paveikslėlį", "uploadImage": "Įkelti paveikslėlį", "results": "Vaizdų paieškos rezultatai", @@ -1249,7 +1857,9 @@ "otherImages": "Kiti vaizdai", "urlLoading": "Tikrinamas vaizdas…", "urlReady": "Vaizdas paruoštas naudoti", - "urlError": "Šio vaizdo nepavyko įkelti. Patikrinkite URL ir bandykite dar kartą." + "urlError": "Šio vaizdo nepavyko įkelti. Patikrinkite URL ir bandykite dar kartą.", + "noResults": "Nė viena piktograma neatitinka „{search}“.", + "error": "Nepavyko įkelti piktogramų." }, "colorScheme": { "options": { @@ -1261,7 +1871,6 @@ "information": { "min": "Min", "max": "Maks", - "days": "Dienos", "hours": "Valandos", "minutes": "Minutės" }, @@ -1298,16 +1907,16 @@ }, "userAvatar": { "menu": { - "switchToDarkMode": "Perjungti į tamsų režimą", - "switchToLightMode": "Perjungti į šviesų režimą", + "open": "Atidaryti naudotojo pseudoportreto meniu", "management": "Valdymas", - "docker": "Docker", "preferences": "Jūsų nuostatos", "logout": "Atsijungti", "login": "Prisijungti", "homeBoard": "Jūsų pagrindinė lenta", - "loggedOut": "Atsijungta", - "updateAvailable": "Galimi atnaujinimai: {countUpdates}: {tag}" + "updateAvailable": "Galimi atnaujinimai: {countUpdates}: {tag}", + "assistant": "Asistentas", + "assistantThinking": "Mąsto", + "modifier": "Modifikatorius" } }, "dangerZone": "Pavojinga zona", @@ -1355,75 +1964,85 @@ "kilometersPerHour": "km/h", "milesPerHour": "mph" } + }, + "widgetQuery": { + "loading": "Įkeliami valdiklio duomenys" + }, + "total": "Iš viso", + "filesystemUsage": "{count, plural, one {Rodyti # failų sistemos naudojimą} few {Rodyti # failų sistemų naudojimą} many {Rodyti # failų sistemų naudojimą} other {Rodyti # failų sistemų naudojimą}}", + "field": { + "name": "Užduoties pavadinimas" + }, + "label": { + "new": "Naujas" + }, + "entity": { + "apps": "Programėlės", + "boards": "Lentos", + "certificates": "Sertifikatai", + "customWidgets": "Pasirinktiniai valdikliai", + "groups": "Grupės", + "integrations": "Integracijos", + "invites": "Pakvietimai", + "logs": "Žurnalai", + "media": "Medija", + "searchEngines": "Paieškos sistemos", + "tasks": "Užduotys", + "users": "Vartotojai" } }, "section": { - "dynamic": { + "option": { + "showLabel": { + "label": "Rodyti etiketę", + "description": "Rodyti konteinerio etiketę virš jo turinio." + }, + "collapsible": { + "label": "Leisti sutraukti", + "description": "Leisti žiūrintiesiems išskleisti ir sutraukti šį konteinerį." + }, + "showOpenAll": { + "label": "Rodyti visų atidarymo veiksmą", + "description": "Rodyti veiksmą, kuris atidaro kiekvieną šiame konteineryje esančią programą naujuose skirtukuose." + }, + "scrollable": { + "label": "Slenkamas", + "description": "Išlaikyti nustatytą šio konteinerio dydį ir slinkti jo turinį, užuot didinus konteinerį pagal turinį." + } + }, + "action": { + "openAllInNewTabsFor": "Atidaryti visas „{name}“ programas skirtukuose" + }, + "openAllInNewTabs": { + "title": "Atidaryti viską skirtukuose", + "text": "Kai kurios naršyklės saugumo sumetimais gali blokuoti masinį skirtukų atidarymą. „Homarr“ nepavyko atidaryti visų langų, nes naršyklė užblokavo šį veiksmą. Leiskite parinktį „Atidaryti iššokančiuosius langus“ ir bandykite dar kartą." + }, + "container": { + "untitled": "Konteineris be pavadinimo", "action": { - "create": "Nauja dinaminė sekcija", - "remove": "Pašalinti dinaminę sekciją" + "create": "Naujas konteineris", + "remove": "Pašalinti konteinerį", + "expand": "Išskleisti", + "collapse": "Sutraukti" }, "option": { "title": { - "label": "Antraštė" + "label": "Pavadinimas" }, "customCssClasses": { "label": "Pasirinktinės CSS klasės" }, "borderColor": { - "label": "Kraštinės spalva" + "label": "Rėmelio spalva" } }, "remove": { - "title": "Pašalinti dinaminę sekciją", - "message": "Ar tikrai norite pašalinti šią dinaminę sekciją? Elementai bus perkelti į tą pačią vietą pirminėje sekcijoje." - } - }, - "category": { - "field": { - "name": { - "label": "Pavadinimas" - } - }, - "action": { - "create": "Nauja kategorija", - "edit": "Pervardyti kategoriją", - "remove": "Pašalinti kategoriją", - "moveUp": "Pakelti aukštyn", - "moveDown": "Perkelti žemyn", - "createAbove": "Nauja kategorija aukščiau", - "createBelow": "Nauja kategorija žemiau", - "openAllInNewTabs": "Atidaryti visus skirtukuose" - }, - "create": { - "title": "Nauja kategorija", - "submit": "Pridėti kategoriją" - }, - "remove": { - "title": "Pašalinti kategoriją", - "message": "Ar tikrai norite pašalinti kategoriją {name}?" - }, - "edit": { - "title": "Pervardyti kategoriją", - "submit": "Pervardyti kategoriją" - }, - "menu": { - "label": { - "create": "Nauja kategorija", - "changePosition": "Keisti poziciją", - "settings": "Nustatymai" - } - }, - "openAllInNewTabs": { - "title": "Atidaryti visus skirtukuose", - "text": "Kai kurios naršyklės saugumo sumetimais gali blokuoti masinį skirtukų atidarymą. „Homarr“ nepavyko atidaryti visų langų, nes jūsų naršyklė užblokavo šį veiksmą. Leiskite „Atidaryti iškylančiuosius langus“ ir bandykite dar kartą." + "message": "Pašalinti šį konteinerį? Jo turinys bus perkeltas į aplinkinę sritį." } } }, "item": { "action": { - "create": "Naujas elementas", - "import": "Importuoti elementą", "edit": "Redaguoti elementą", "moveResize": "Perkelti / keisti dydį", "duplicate": "Dubliuoti elementą", @@ -1432,7 +2051,7 @@ "menu": { "label": { "settings": "Nustatymai", - "refresh": "Atnaujinti", + "settingsFor": "„{name}“ nustatymai", "options": "Parinktys", "actions": "Veiksmai" }, @@ -1441,21 +2060,96 @@ "error": "Klaida", "loading": "Įkeliama", "idle": "Neaktyvu" + }, + "notification": { + "saveError": { + "title": "Nepavyko išsaugoti valdiklio", + "message": "Valdiklio pakeitimai atšaukti" + } } }, "create": { "title": "Pasirinkite elementą pridėti", "search": "Filtruoti elementus", - "addToBoard": "Pridėti prie lentos" + "addToBoard": "Pridėti prie lentos", + "addAtPosition": "Pridėti elementą čia", + "destination": { + "label": "Pridėti į", + "description": "Pasirinkite, kur turėtų būti rodomas valdiklis. Vėliau vis tiek galėsite jį perkelti.", + "mainCanvas": "Pagrindinė drobė", + "leftRail": "Kairysis skydelis", + "rightRail": "Dešinysis skydelis" + }, + "connectionStatus": { + "ready": "Paruošta", + "needsSetup": "Reikia sąrankos", + "noConnectionRequired": "Ryšys nereikalingas" + }, + "customWidget": "Pasirinktinis valdiklis", + "standalone": "Savarankiškas", + "missingIntegration": { + "title": "Pirmiausia prijunkite paslaugą", + "noPermission": "Šiam valdikliui reikalingas suderinamos paslaugos ryšys. Paprašykite administratoriaus jį prijungti ir bandykite dar kartą." + }, + "notification": { + "success": { + "title": "Valdiklis pridėtas", + "message": "{name} pridėta prie šios lentos.", + "relocatedMessage": "„{name}“ pridėta prie „{destination}“, nes pasirinkta paskirties vieta buvo nepasiekiama." + }, + "error": { + "title": "Nepavyko pridėti elemento", + "message": "Nepavyko pridėti elemento prie šios lentos" + } + } + }, + "selection": { + "summary": "{count, plural, one {Pasirinktas # elementas} few {Pasirinkti # elementai} many {Pasirinkta # elementų} other {Pasirinkta # elementų}}", + "selected": "{count, plural, one {Pasirinktas #} few {Pasirinkti #} many {Pasirinkta #} other {Pasirinkta #}}", + "copy": "Kopijuoti", + "copied": "{count, plural, one {# elementas nukopijuotas į iškarpinę} few {# elementai nukopijuoti į iškarpinę} many {# elementų nukopijuota į iškarpinę} other {# elementų nukopijuota į iškarpinę}}", + "copyError": "Nepavyko nukopijuoti pasirinktų elementų. Jūsų naršyklė gali neleisti pasiekti iškarpinės.", + "paste": "Įklijuoti", + "pasteShortcut": "Įklijuoti nukopijuotus elementus čia (Ctrl / ⌘ + V)", + "pasted": "{count, plural, one {Įklijuotas # elementas} few {Įklijuoti # elementai} many {Įklijuota # elementų} other {Įklijuota # elementų}}", + "pasteError": "Nepavyko perskaityti iškarpinės. Jūsų naršyklė gali neleisti pasiekti iškarpinės.", + "pasteInvalid": "Iškarpinėje nėra tinkamų „Homarr“ lentos elementų.", + "pasteUnavailable": "Nukopijuoti elementai netelpa šioje lentoje.", + "removed": "{count, plural, one {Pašalintas # elementas} few {Pašalinti # elementai} many {Pašalinta # elementų} other {Pašalinta # elementų}}", + "move": "Perkelti", + "moveTo": "Perkelti pasirinktus elementus", + "delete": "Ištrinti", + "clear": "Išvalyti pasirinkimą", + "clearShortcut": "Išvalyti pasirinkimą (Escape)", + "saveErrorTitle": "Nepavyko atnaujinti elementų", + "saveErrorMessage": "Nepavyko išsaugoti pakeitimų. Lenta atnaujinta.", + "moveUnavailableTitle": "Nepavyko perkelti pasirinktų elementų", + "moveUnavailableMessage": "Paskirties vietoje nepakanka vietos visam pasirinkimui." }, "moveResize": { "title": "Perkelti / keisti dydį", + "entryLabel": "{name}, stulpelis {column}, eilutė {row}", + "target": { + "numbered": "{name}, paskirties vieta {index}", + "located": "{name}, {location}, paskirties vieta {index}" + }, + "keyboard": { + "instructions": "Paspauskite Enter arba tarpo klavišą, kad pradėtumėte redaguoti klaviatūra. Rodyklių klavišais perkelkite, rodyklių klavišais su Shift keiskite dydį, o paspauskite Escape, kad baigtumėte.", + "started": "Redagavimas klaviatūra pradėtas. Rodyklių klavišais perkelkite, rodyklių klavišais su Shift keiskite dydį, o paspauskite Escape, kad baigtumėte.", + "stopped": "Redagavimas klaviatūra baigtas.", + "boundary": "Šis pakeitimas netelpa šioje sekcijoje." + }, "field": { + "section": { + "label": "Sekcija arba skydelis" + }, "width": { - "label": "Plotis" + "label": "Plotis", + "shortLabel": "P" }, "height": { - "label": "Aukštis" + "label": "Aukštis", + "shortLabel": "A" }, "xOffset": { "label": "X poslinkis" @@ -1469,18 +2163,36 @@ "title": "Redaguoti elementą", "tab": { "widget": "Redaguoti valdiklį", - "app": "Redaguoti programėlę" + "app": "Redaguoti programėlę", + "integration": "Redaguoti integraciją" }, "app": { "propagationNotice": "Šios programėlės pakeitimai bus taikomi visur, kur ji naudojama visose lentose." }, + "integration": { + "action": "Redaguoti ryšį", + "description": "Išbandykite arba pataisykite pasirinktą ryšį nepalikdami šio valdiklio.", + "editLabel": "Redaguoti „{name}“ integraciją", + "fullAccessRequired": "Reikalinga visiška prieiga", + "propagationNotice": "Šios integracijos pakeitimai taikomi visur, kur ji naudojama. Prieš išsaugant ryšys išbandomas.", + "loading": "Įkeliama integracija", + "loadError": "Nepavyko įkelti šios integracijos. Prieš keisdami jos ryšio nustatymus pabandykite dar kartą." + }, + "preview": { + "integrationRequired": "Pasirinkite ryšį, kad galėtumėte peržiūrėti šį valdiklį.", + "size": "Failo dydis" + }, + "settings": { + "label": "Valdiklio nustatymai" + }, "advancedOptions": { "label": "Išplėstinės parinktys", "title": "Išplėstinės elemento parinktys" }, "field": { "integrations": { - "label": "Integracijos" + "label": "Integracijos", + "removeLabel": "Pašalinti „{name}“ integraciją" }, "title": { "label": "Antraštė" @@ -1494,17 +2206,18 @@ } }, "remove": { - "title": "Pašalinti elementą", "message": "Ar tikrai norite pašalinti šį elementą?" + }, + "advancedFocus": { + "open": "Atidaryti išplėstinį rodinį", + "close": "Uždaryti išplėstinį rodinį", + "label": "Išplėstinis „{widget}“ rodinys" } }, "widget": { "integrationSelect": { "configureIntegrationFirst": "Pirmiausia prijunkite integraciją", - "loading": "Įkeliama...", - "placeholder": "Pasirinkite parinktį", - "noResults": "Rezultatų nerasta", - "loadError": "Nepavyko įkelti parinkčių" + "placeholder": "Pasirinkite parinktį" }, "app": { "name": "Programėlė", @@ -1513,9 +2226,6 @@ "appId": { "label": "Pasirinkite programėlę" }, - "openInNewTab": { - "label": "Atidaryti naujame skirtuke" - }, "showTitle": { "label": "Rodyti programėlės pavadinimą" }, @@ -1523,11 +2233,8 @@ "label": "Įjungti būsenos patikrą" }, "layout": { - "label": "Išdėstymas", "option": { - "row": "Horizontalus", "row-reverse": "Horizontalus (atvirkščiai)", - "column": "Vertikalus", "column-reverse": "Vertikalus (atvirkščiai)" } }, @@ -1552,23 +2259,60 @@ "name": "Žymės", "description": "Rodo kelias programėlių nuorodas", "option": { - "title": { - "label": "Pavadinimas" + "showTitle": { + "label": "Rodyti valdiklio pavadinimą" + }, + "titleSize": { + "label": "Valdiklio pavadinimo dydis (px)" }, "layout": { "label": "Išdėstymas", "option": { - "row": { - "label": "Horizontalus" - }, - "column": { - "label": "Vertikalus" - }, - "grid": { - "label": "Tinklelis" + "adaptive": { + "label": "Prisitaikantis" }, "gridHorizontal": { "label": "Horizontalus tinklelis" + }, + "icons": { + "label": "Piktogramos" + } + } + }, + "variant": { + "label": "Išvaizda", + "option": { + "soft": { + "label": "Švelnus" + }, + "filled": { + "label": "Užpildyta" + }, + "outline": { + "label": "Kontūras" + }, + "plain": { + "label": "Paprastas" + } + } + }, + "spacing": { + "label": "Kortelių tarpai", + "option": { + "xs": { + "label": "Itin maži" + }, + "sm": { + "label": "Mažas" + }, + "md": { + "label": "Vidutinis" + }, + "lg": { + "label": "Didelis" + }, + "xl": { + "label": "Itin dideli" } } }, @@ -1581,17 +2325,28 @@ "hideHostname": { "label": "Slėpti serverių vardus" }, - "openNewTab": { - "label": "Atidaryti naujame skirtuke" - }, "withBorder": { "label": "Rodyti rėmelį" }, + "grow": { + "label": "Išplėsti korteles, kad užpildytų eilutę" + }, + "customUrls": { + "label": "Tinkintos nuorodos" + }, "items": { "label": "Žymės", - "add": "Pridėti žymę" + "remove": "Pašalinti žymelę", + "apps": { + "label": "Pridėti žymeles", + "description": "Įklijuokite URL arba raskite esamas programėles. Norėdami pakeisti tvarką, nuvilkite žemiau esančias žymeles.", + "placeholder": "Įklijuokite URL arba ieškokite programėlių", + "addUrl": "Pridėti šį URL", + "hint": "Paspauskite „Enter“, kad pridėtumėte URL. Norėdami pridėti kelis URL, įklijuokite juos atskirtus kableliais arba po vieną eilutėje." + } } - } + }, + "empty": "Pridėkite URL arba programėlę valdiklio nustatymuose" }, "archiveTeamWarrior": { "name": "ArchiveTeam Warrior", @@ -1600,33 +2355,61 @@ "showBroadcastMessage": { "label": "Rodyti transliacijos pranešimus" } + }, + "noProjectSelected": "Nepasirinktas joks projektas", + "runnerStatus": "Vykdyklė: {status}", + "projectId": "Projektas: {id}", + "sessionReceived": "Gauta sesija: {value}", + "sessionSent": "Išsiųsta sesija: {value}", + "sessionId": "Sesija: {id}", + "startedAt": "Pradėta: {date}", + "emptyItems": "Šioje momentinėje kopijoje nėra aktyvių ar neseniai vykdytų užduočių", + "metric": { + "running": "Veikia", + "completed": "Baigta", + "failed": "Nepavyko", + "canceled": "Atšaukta", + "download": "Atsisiuntimas", + "upload": "Įkėlimas" + }, + "status": { + "running": "Veikia", + "completed": "Baigta", + "failed": "Nepavyko", + "canceled": "Atšaukta", + "stopped": "Sustabdyta", + "idle": "Neaktyvi", + "unknown": "Nežinoma" + } + }, + "wud": { + "name": "Kas naujo, Docker", + "description": "Rodo, kiek stebimų konteinerių turi prieinamų naujinimų.", + "title": "Kas naujo, Docker", + "monitored": "Stebimi", + "updatesAvailable": "{count, plural, one {# atnaujinimas prieinamas} few {# atnaujinimai prieinami} many {# atnaujinimų prieinama} other {# atnaujinimo prieinama}}", + "updateAvailable": "Galimas naujinimas", + "openReleaseNotes": "Atidaryti leidimo pastabas", + "option": { + "showRing": { + "label": "Rodyti naujinimo žiedą" + }, + "showUpdateList": { + "label": "Rodyti konteinerių naujinimų sąrašą", + "description": "Išvardija kiekvieną stebimą konteinerį, kuriam yra prieinamas atvaizdo naujinimas" + } } }, "dnsHoleSummary": { "name": "DNS skylės suvestinė", "description": "Rodo jūsų DNS skylės suvestinę", "option": { - "layout": { - "label": "Išdėstymas", - "option": { - "row": { - "label": "Horizontalus" - }, - "column": { - "label": "Vertikalus" - }, - "grid": { - "label": "Tinklelis" - } - } - }, "usePiHoleColors": { "label": "Naudoti Pi-Hole spalvas" } }, "error": { - "internalServerError": "Nepavyko gauti DNS skylės suvestinės", - "integrationsDisconnected": "Nėra duomenų, visos integracijos atjungtos" + "internalServerError": "Nepavyko gauti DNS skylės suvestinės" }, "data": { "adsBlockedToday": "Šiandien užblokuota", @@ -1634,32 +2417,24 @@ "dnsQueriesToday": "Užklausos šiandien", "domainsBeingBlocked": "Domenai blokavimo sąraše" }, - "domainsTooltip": "Dėl kelių integracijų „Homarr“ negali apskaičiuoti tikslaus blokuojamų domenų skaičiaus" + "domainsTooltip": "Dėl kelių integracijų „Homarr“ negali apskaičiuoti tikslaus blokuojamų domenų skaičiaus", + "status": { + "enabled": "Įjungta", + "disabled": "Išjungta", + "unknown": "Nežinoma" + } }, "dnsHoleControls": { "name": "DNS skylės valdymas", "description": "Valdykite PiHole arba AdGuard iš savo prietaisų skydelio", "option": { - "layout": { - "label": "Išdėstymas", - "option": { - "row": { - "label": "Horizontalus" - }, - "column": { - "label": "Vertikalus" - }, - "grid": { - "label": "Tinklelis" - } - } - }, "showToggleAllButtons": { "label": "Rodyti perjungimo visus mygtukus" } }, "error": { - "internalServerError": "Nepavyko valdyti DNS skylės" + "internalServerError": "Nepavyko valdyti DNS skylės", + "bulkActionsFailed": "{count, plural, one {Nepavyko atlikti # veiksmo} few {Nepavyko atlikti # veiksmų} many {Nepavyko atlikti # veiksmo} other {Nepavyko atlikti # veiksmų}}" }, "controls": { "enableAll": "Įjungti visus", @@ -1670,8 +2445,6 @@ "disabled": "Išjungta", "processing": "Apdorojama", "disconnected": "Atjungta", - "hours": "Valandos", - "minutes": "Minutės", "unlimited": "Palikite tuščią neribotam" } }, @@ -1683,16 +2456,10 @@ "label": "Individualus pavadinimas / miesto rodymas", "description": "Rodo individualų pavadinimą arba miesto/šalies pavadinimą virš laikrodžio." }, - "customTitle": { - "label": "Pavadinimas" - }, "is24HourFormat": { "label": "24 valandų formatas", "description": "Naudoti 24 valandų formatą vietoj 12 valandų" }, - "showSeconds": { - "label": "Rodyti sekundes" - }, "useCustomTimezone": { "label": "Naudoti fiksuotą laiko juostą" }, @@ -1711,29 +2478,295 @@ "label": "Pasirinktinis laiko formatas", "description": "Laikui formatuoti naudokite ISO 8601 (tai nepaisys kitų parinkčių)" }, - "customDateFormat": { - "label": "Pasirinktinis datos formatas", - "description": "Datai formatuoti naudokite ISO 8601 (tai nepaisys kitų parinkčių)" - }, "showWeather": { "label": "Rodyti orus", "description": "Kortelės kampe rodyti mažą animuotą orų piktogramą ir temperatūrą" }, - "weatherLocation": { - "label": "Orų vieta" - }, "isWeatherFormatFahrenheit": { "label": "Naudoti Farenheitą" + }, + "animateWeatherIcon": { + "label": "Animuoti orų piktogramą", + "description": "Animuoti orų piktogramą. Pagal numatytuosius nustatymus ši parinktis išjungta ir visada išjungiama, kai prašoma sumažinti animaciją." + }, + "colorWeatherByDayNight": { + "label": "Orų spalva pagal dieną ir naktį", + "description": "Nuspalvinti orų piktogramą ir temperatūrą dienos arba nakties spalva, atsižvelgiant į tai, ar pasirinktoje vietoje dabar diena, ar naktis." + }, + "dayWeatherColor": { + "label": "Dienos spalva" + }, + "nightWeatherColor": { + "label": "Nakties spalva" + }, + "worldClockCities": { + "label": "Pasaulio laikrodžio miestai", + "description": "Pridėkite ir išrikiuokite iki šešių miestų išplėstiniam rodiniui." } + }, + "timezoneList": { + "timezone": "Laiko juosta", + "cityLabel": "Miesto etiketė", + "searchPlaceholder": "Ieškoti laiko juostų", + "noResults": "Laiko juostų nerasta", + "unsupportedOption": "Nepalaikoma: {timeZone}", + "add": "Pridėti miestą", + "remove": "Pašalinti {city}", + "reorder": "Pakeisti {city} tvarką", + "limit": "Sukonfigūruota miestų: {count} iš {maximum}" + }, + "worldClock": { + "primary": "Pagrindinis laikrodis", + "local": "Vietinis laikas", + "today": "Šiandien", + "tomorrow": "Rytoj", + "yesterday": "Vakar", + "noSecondaryCities": "Pridėkite miestų valdiklio parinktyse, kad galėtumėte juos čia palyginti.", + "unsupportedPrimaryTitle": "Pagrindinė laiko juosta nepasiekiama", + "unsupportedPrimary": "Ši naršyklė nepalaiko {timeZone}. Rodomas UTC kaip aiškiai pažymėtas atsarginis variantas.", + "unsupportedTimeZone": "Nepalaikoma laiko juosta: {timeZone}", + "accessibleTime": "{city}: {time}, {date}, {timeZone}", + "advancedLabel": "Išplėstinis pasaulio laikrodis", + "cities": "Pasaulio laikrodžiai", + "cityCount": "Laiko juostų: {count}", + "timeBarLabel": "24 valandų paros laiko padėtis mieste {city}", + "dayProgress": "Praėjo {percent}% · liko {hours} val. {minutes} min.", + "phaseLegend": "Paros laiko paaiškinimas", + "tick": { + "midnight": "00", + "morning": "06", + "noon": "12", + "evening": "18", + "end": "24" + }, + "phaseRange": { + "night": "00–05 · 21–24", + "dawn": "05–08", + "day": "08–18", + "dusk": "18–21" + }, + "phase": { + "night": "Naktis", + "dawn": "Aušra", + "day": "Diena", + "dusk": "Saulėlydis" + } + } + }, + "airQuality": { + "name": "Oro kokybė ir UV", + "description": "Rodo vietovės oro kokybę, ultravioletinių spindulių indeksą, teršalus ir žiedadulkes.", + "option": { + "location": { + "label": "Oro kokybės vieta" + }, + "aqiStandard": { + "label": "Oro kokybės indekso standartas", + "options": { + "auto": "Automatiškai pagal lokalę", + "european": "Europos oro kokybės indeksas", + "us": "JAV oro kokybės indeksas" + } + }, + "showUv": { + "label": "Rodyti UV indeksą" + }, + "showPollutants": { + "label": "Rodyti teršalų koncentracijas" + }, + "showPollen": { + "label": "Rodyti žiedadulkių koncentracijas" + } + }, + "category": { + "good": "Gera", + "fair": "Patenkinama", + "moderate": "Vidutinė", + "unhealthySensitive": "Nesveika jautrioms grupėms", + "unhealthy": "Nesveika", + "poor": "Prasta", + "veryPoor": "Labai prasta", + "veryUnhealthy": "Labai nesveika", + "extremelyPoor": "Ypač prasta", + "hazardous": "Pavojinga", + "unknown": "Oro kokybės indeksas nenustatytas" + }, + "uv": { + "label": "UV indeksas", + "category": { + "low": "Žemas", + "moderate": "Vidutinis", + "high": "Aukštas", + "veryHigh": "Labai aukštas", + "extreme": "Ekstremalus", + "unknown": "Rodmuo nenustatytas" + } + }, + "dominantPollutant": "Vyraujantis teršalas", + "aqiLabel": "OKI", + "strongestPollen": "Daugiausia žiedadulkių", + "unit": { + "concentration": "{value} µg/m³", + "pollen": "{value} žiedadulkių grūdelių/m³" + }, + "pollutant": { + "pm2_5": "PM2,5", + "pm10": "KD10", + "ozone": "Ozonas", + "nitrogenDioxide": "Azoto dioksidas", + "sulphurDioxide": "Sieros dioksidas", + "carbonMonoxide": "Anglies monoksidas" + }, + "pollen": { + "alder": "Alksnis", + "birch": "Beržas", + "grass": "Žolė", + "mugwort": "Kietis", + "olive": "Alyvmedis", + "ragweed": "Ambrozija" + }, + "compact": { + "sixHourTrend": "OKI tendencija per ateinančias šešias valandas" + }, + "advanced": { + "observedAt": "Atnaujinta {time}", + "next24Hours": "Kitos 24 valandos", + "pollutants": "Teršalų koncentracijos", + "pollen": "Žiedadulkių koncentracijos", + "sevenDayForecast": "7 dienų didžiausios reikšmės prognozė", + "aqiValue": "OKI {value}", + "uvValue": "UV {value}", + "uvShort": "UV {value}", + "noForecast": "Prognozės duomenų nėra" + } + }, + "countdown": { + "name": "Atgalinis skaičiavimas", + "description": "Seka artėjančius įvykius ir pasikartojančias sukaktis.", + "option": { + "events": { + "label": "Įvykiai", + "description": "Pridėkite ir išrikiuokite iki 20 vienkartinių arba kasmetinių atgalinių skaičiavimų. Datos įvedamos pasirinktoje laiko juostoje." + }, + "showProgress": { + "label": "Rodyti eigą" + }, + "showSeconds": { + "label": "Rodyti sekundes", + "description": "Rodyti sekundes visuose artėjančiuose įvykiuose." + } + }, + "dateTimeEventList": { + "newEvent": "Naujas įvykis", + "add": "Pridėti įvykį", + "remove": "Pašalinti {event}", + "reorder": "Pertvarkyti {event}", + "eventLabel": "Įvykio etiketė", + "timezone": "Laiko juosta", + "unsupportedOption": "Nepalaikoma: {timeZone}", + "recurrence": "Kartojasi", + "recurrenceOption": { + "none": "Nesikartoja", + "yearly": "Kiekvienais metais" + }, + "target": "Įvykio data ir laikas", + "trackProgress": "Seka eigą nuo pradžios datos", + "start": "Eigos pradžios data ir laikas", + "confirmDateTime": "Patvirtinti datą ir laiką", + "limit": "Sukonfigūruota įvykių: {count} iš {maximum}" + }, + "empty": { + "title": "Atgalinių skaičiavimų dar nėra", + "description": "Norėdami pradėti skaičiuoti, valdiklio parinktyse pridėkite įvykį." + }, + "completed": "Baigta", + "yearly": "Kasmetinis", + "progress": "Įvykio eiga", + "upcoming": "Artėjantys", + "completedEvents": "Baigti įvykiai", + "invalid": { + "title": "Kai kurių įvykių rodyti negalima", + "description": "{count, plural, one {Vieno įvykio data netinkama arba laiko juosta nepalaikoma.} few {# įvykių datos netinkamos arba laiko juostos nepalaikomos.} many {# įvykių datos netinkamos arba laiko juostos nepalaikomos.} other {# įvykio datos netinkamos arba laiko juostos nepalaikomos.}}", + "value": "Nepasiekiama" + }, + "alert": { + "notifications": "Naršyklės pranešimai", + "permissionDenied": "Šioje naršyklėje pranešimai užblokuoti.", + "reached": "Atgalinis skaičiavimas pasiekė tikslą." + } + }, + "timer": { + "name": "Laikmatis / Pomodoro", + "description": "Paleidžia paprastą laikmatį arba konfigūruojamą Pomodoro seką.", + "option": { + "mode": { + "label": "Režimas", + "options": { + "timer": "Laikmatis", + "pomodoro": "Pomodoro" + } + }, + "timerMinutes": { + "label": "Laikmačio minutės" + }, + "focusMinutes": { + "label": "Susikaupimo minutės" + }, + "shortBreakMinutes": { + "label": "Trumposios pertraukos minutės" + }, + "longBreakMinutes": { + "label": "Ilgosios pertraukos minutės" + }, + "sessionsBeforeLongBreak": { + "label": "Susikaupimo sesijų prieš ilgąją pertrauką" + }, + "autoStartBreaks": { + "label": "Automatiškai pradėti pertraukas" + }, + "autoStartFocus": { + "label": "Automatiškai pradėti susikaupimo sesijas" + } + }, + "phase": { + "timer": "Laikmatis", + "focus": "Susikaupimas", + "shortBreak": "Trumpoji pertrauka", + "longBreak": "Ilgoji pertrauka" + }, + "action": { + "start": "Paleisti", + "pause": "Pristabdyti", + "reset": "Atkurti" + }, + "attention": { + "timerComplete": "Laikmatis baigtas", + "phaseReady": "{phase} paruošta" + }, + "progress": "Laikmačio eiga: {progress}%", + "compact": { + "completedFocus": "{count, plural, =0 {Užbaigtų susikaupimo sesijų nėra} one {Užbaigta # susikaupimo sesija} few {Užbaigtos # susikaupimo sesijos} many {Užbaigta # susikaupimo sesijų} other {Užbaigta # susikaupimo sesijų}}" + }, + "alert": { + "title": "Laikmatis baigtas", + "completed": "{phase} baigta." + }, + "advanced": { + "sequence": "Pomodoro seka", + "focusSession": "Susikaupimas {session}", + "settings": "Nuolatinės parinktys", + "settingsHint": "Norėdami redaguoti šias lentos parinktis, naudokite valdiklio kontekstinį meniu.", + "localAlerts": "Vietiniai įspėjimai", + "notifications": "Naršyklės pranešimai", + "sound": "Laikmačio garsai", + "localAlertsHint": "Laikmačio garsai įjungti pagal numatytuosius nustatymus. Garsai ir pranešimai taikomi tik šiam valdikliui šioje naršyklėje.", + "notificationsDenied": "Šioje naršyklėje pranešimai užblokuoti." } }, "minecraftServerStatus": { "name": "Minecraft serverio būsena", "description": "Rodo Minecraft serverio būseną", "option": { - "title": { - "label": "Antraštė" - }, "domain": { "label": "Serverio adresas" }, @@ -1753,11 +2786,21 @@ "noStation": "Stotis nepasirinkta", "option": { "baseUrl": { - "label": "Search.ch URL" + "label": "Search.ch URL", + "description": "Pasirinktiniai URL turi nurodyti viešą IP adresą. Privatūs ir vietiniai pagrindiniai kompiuteriai atmetami." }, "station": { - "label": "Stotis" + "label": "Stotis", + "placeholder": "Ieškoti stoties" } + }, + "error": { + "customSourceUnavailable": "Tvarkaraščio šaltinis nepasiekiamas. Patikrinkite, ar jo URL nurodo viešą IP adresą.", + "stationSearch": "Nepavyko ieškoti stočių. Patikrinkite pasirinktinį URL ir prieigą prie lentos." + }, + "warning": { + "stale": "Tvarkaraščio atnaujinti nepavyko. Rodomi išvykimai, paskutinį kartą atnaujinti {time}.", + "staleCompact": "Pasenę duomenys" } }, "notebook": { @@ -1789,6 +2832,9 @@ "directionRtl": "Nustatyti teksto kryptį iš dešinės į kairę", "blockquote": "Kabutės", "horizontalLine": "Horizontali linija", + "details": "Perjungti sutraukiamą sekciją", + "expandDetails": "Išskleisti sutraukiamą sekciją", + "collapseDetails": "Sutraukti sekciją", "bulletList": "Suženklintasis sąrašas", "orderedList": "Surikiuotas sąrašas", "checkList": "Sąrašas", @@ -1797,16 +2843,20 @@ "link": "Nuoroda", "unlink": "Pašalinti nuorodą", "image": "Įterpti paveikslėlį", - "addTable": "Pridėti lentelę", + "insertTable": "Įterpti lentelę", + "insertTableSize": "Įterpti {columns} × {rows} lentelę", "deleteTable": "Ištrinti lentelę", "colorCell": "Spalva", - "mergeCell": "Perjungti cell sujungimą", + "mergeCells": "Sujungti langelius", + "splitCell": "Skaidyti langelį", "addColumnLeft": "Pridėti stulpelį prieš", "addColumnRight": "Pridėti stulpelį po", "deleteColumn": "Naikinti stulpelį", "addRowTop": "Pridėti eilutę prieš", "addRowBelow": "Pridėti eilutę po", - "deleteRow": "Naikinti eilutę" + "deleteRow": "Naikinti eilutę", + "toggleHeaderRow": "Perjungti antraštės eilutę", + "toggleHeaderColumn": "Perjungti antraštės stulpelį" }, "align": { "left": "Kairėje", @@ -1817,8 +2867,6 @@ "clearColor": "Pašalinti spalvą", "source": "Šaltinis", "widthPlaceholder": "Vertė % arba pikseliais", - "columns": "Stulpeliai", - "rows": "Eilutės", "width": "Plotis", "height": "Aukštis" }, @@ -1830,7 +2878,9 @@ "discard": "Atmesti pakeitimus", "keepEditing": "Tęsti redagavimą" } - } + }, + "saveFailed": "Nepavyko išsaugoti pastabos", + "documentStats": "{words, plural, one {# žodis} few {# žodžiai} many {# žodžių} other {# žodžio}} · {characters, plural, one {# simbolis} few {# simboliai} many {# simbolių} other {# simbolio}}av" }, "anchorNote": { "name": "Anchor užrašas", @@ -1839,9 +2889,6 @@ "noteId": { "label": "Užrašas" }, - "showTitle": { - "label": "Rodyti pavadinimą" - }, "showUpdatedAt": { "label": "Rodyti paskutinį atnaujinimą" } @@ -1851,14 +2898,20 @@ "notFound": "Užrašas nerastas", "noNotes": "Užrašų nerasta", "integrationRequired": "Pirmiausia pasirinkite „Anchor“ integraciją", - "updatedAt": "Atnaujinta {date}", "untitled": "Be pavadinimo", - "edit": "Redaguoti", - "save": "Išsaugoti", - "cancel": "Atšaukti", "readOnlyViewer": "Turite tik peržiūros teisę į šį užrašą. Redaguoti negalima.", "saveForbidden": "Neturite teisės redaguoti šio užrašo.", - "saveFailed": "Nepavyko išsaugoti šio užrašo. Bandykite dar kartą." + "saveFailed": "Nepavyko išsaugoti šio užrašo. Bandykite dar kartą.", + "createdAt": "Sukurta {date}", + "permission": { + "owner": "Savininkas", + "editor": "Redaktorius", + "viewer": "Žiūrintysis" + }, + "status": { + "pinned": "Prisegta", + "archived": "Archyvuota" + } }, "iframe": { "name": "iFrame", @@ -1917,6 +2970,25 @@ "clickable": { "label": "Paspaudžiamas" } + }, + "state": { + "on": "Įjungta", + "off": "Išjungta", + "unavailable": "Nepasiekiama", + "unknown": "Nežinoma" + }, + "advanced": { + "entityId": "Objekto ID: {id}", + "lastChanged": "Pakeista {date}", + "attribute": { + "unit": "Vienetas", + "deviceClass": "Įrenginio klasė", + "icon": "Piktograma" + } + }, + "error": { + "loadFailed": "Nepavyko įkelti objekto", + "toggleFailed": "Nepavyko atnaujinti objekto" } }, "smartHome-executeAutomation": { @@ -1932,11 +3004,31 @@ }, "spotlightAction": { "run": "Vykdyti {name}" + }, + "advanced": { + "lastExecuted": "Paskutinį kartą paleista {time}", + "automationId": "Automatizavimo ID: {id}", + "ready": "Paruošta paleisti", + "noPermission": "Neturite leidimo paleisti šio automatizavimo" + }, + "status": { + "running": "Vykdomas automatizavimas", + "success": "Automatizavimas baigtas" + }, + "error": { + "executeFailed": "Nepavyko paleisti automatizavimo" } }, "stockPrice": { "name": "Akcijos kaina", "description": "Rodo dabartinę įmonės akcijų kainą", + "advanced": { + "currentPrice": "Dabartinė kaina", + "previousClose": "Ankstesnė uždarymo kaina", + "changePercentage": "Pokytis (%)", + "minimum": "Mažiausia reikšmė", + "maximum": "Didžiausia reikšmė" + }, "option": { "stock": { "label": "Akcijos simbolis" @@ -2007,6 +3099,10 @@ "label": "1 mėnuo" } } + }, + "showDetails": { + "label": "Rodyti išsamią informaciją", + "description": "Sutrauktame rodinyje rodyti pavadinimą, pokytį ir laikotarpį. Išjunkite, jei norite matyti tik simbolį ir kainą." } } }, @@ -2034,6 +3130,13 @@ "showUnmonitored": { "label": "Rodyti nestebimus" } + }, + "advanced": { + "previousMonth": "Rodyti ankstesnį mėnesį", + "nextMonth": "Rodyti kitą mėnesį", + "eventCount": "{count, plural, one {# įvykis} few {# įvykiai} many {# įvykių} other {# įvykio}}", + "loading": "Įkeliami kalendoriaus įvykiai...", + "noEvents": "Šį mėnesį įvykių nėra" } }, "weather": { @@ -2046,16 +3149,18 @@ "disableTemperatureDecimals": { "label": "Išjungti temperatūros dešimtaines dalis" }, + "animateIcons": { + "label": "Animuoti orų piktogramas" + }, + "showHumidity": { + "label": "Rodyti drėgmę" + }, "showCurrentWindSpeed": { - "label": "Rodyti dabartinį vėjo greitį", - "description": "Tik dabartiniam orui" + "label": "Rodyti dabartinį vėjo greitį" }, "useImperialSpeed": { "label": "Vėjo greičiui naudoti mph" }, - "location": { - "label": "Oro vieta" - }, "showCity": { "label": "Rodyti miestą" }, @@ -2065,13 +3170,10 @@ "forecastDayCount": { "label": "Prognozės dienų skaičius", "description": "Kai valdiklis nėra pakankamai platus, rodoma mažiau dienų" - }, - "dateFormat": { - "label": "Datos formatas", - "description": "Kaip turėtų atrodyti data" } }, "currentWindSpeed": "{currentWindSpeed} {unit}", + "disabled": "Orų duomenys nepasiekiami, nes išoriniai ryšiai išjungti", "dailyForecast": { "sunrise": "Saulėtekis", "sunset": "Saulėlydis", @@ -2094,6 +3196,47 @@ "thunderstorm": "Audra", "thunderstormWithHail": "Audra su kruša", "unknown": "Nežinoma" + }, + "details": "Rodyti išsamią orų informaciją", + "detailsFor": "Rodyti išsamią orų informaciją apie {date}", + "advanced": { + "forecast": "7 dienų prognozė", + "hourlyForecast": "Kitos 24 valandos", + "day": "Diena", + "time": "Laikas", + "conditions": "Sąlygos", + "temperature": "Temperatūra", + "feelsLike": "Jaučiamoji temperatūra {temperature}", + "feelsLikeLabel": "Jaučiamoji temperatūra", + "feelsLikeRange": "Jaučiamoji temperatūra: {maximum} / {minimum}", + "highLow": "Aukščiausia {maximum} · žemiausia {minimum}", + "observedAt": "Atnaujinta {time}", + "humidity": "Drėgmė", + "averageHumidity": "Vidutinė drėgmė: {humidity}%", + "currentHumidity": "Dabartinė drėgmė", + "wind": "Vėjas / gūsiai ({unit})", + "currentWind": "Dabartinis vėjas / gūsiai", + "windValue": "{speed} / {gusts} {unit}", + "windDetail": "Didžiausias vėjas / gūsiai: {speed} / {gusts} {unit}", + "nextHourPrecipitation": "Kitos valandos krituliai", + "precipitationChance": "Kritulių tikimybė", + "precipitationValue": "{probability}% · {amount} mm", + "precipitationDetail": "Krituliai: {probability}% · {amount} mm", + "todayUv": "Šiandienos didžiausias UV indeksas", + "uvIndex": "Didžiausias UV indeksas: {value}", + "daylight": "Šviesusis paros metas: {duration}", + "hourlyTooltip": "Jaučiasi kaip {feelsLike}{temperatureUnit} · {amount} mm · drėgmė {humidity}% · vėjas {speed} {speedUnit}", + "hourlyTooltipWithoutHumidity": "Jaučiasi kaip {feelsLike}{temperatureUnit} · {amount} mm · vėjas {speed} {speedUnit}", + "detailLabel": { + "feelsLike": "Jaučiamoji temperatūra", + "precipitation": "Krituliai", + "humidity": "Vidutinė drėgmė", + "wind": "Didžiausias vėjas / gūsiai", + "uv": "Didžiausias UV indeksas", + "daylight": "Šviesusis paros metas" + }, + "sun": "Saulėtekis / saulėlydis", + "noForecast": "Prognozės duomenų nėra" } }, "indexerManager": { @@ -2106,8 +3249,15 @@ }, "title": "Indeksavimo tvarkyklė", "testAll": "Išbandyk viską", + "status": { + "healthy": "Veikia tinkamai", + "unhealthy": "Veikia netinkamai", + "disabled": "Išjungta", + "unknown": "Būsenos duomenys nepasiekiami" + }, "error": { - "internalServerError": "Nepavyko gauti indeksatorių būsenos" + "internalServerError": "Nepavyko gauti indeksatorių būsenos", + "testAll": "Indeksatoriaus testas nepavyko. Bandykite dar kartą." } }, "healthMonitoring": { @@ -2136,11 +3286,6 @@ "fileSystem": { "label": "Rodyti failų sistemos informaciją" }, - "visibleStorageVolumes": { - "label": "Matomi saugyklos tomai", - "description": "Prieinama tik tada, kai visos pasirinktos integracijos yra „Synology“. Palikite tuščią, kad būtų rodomi visi aptikti saugyklos tomai.", - "placeholder": "Pasirinkite saugyklos tomus" - }, "defaultTab": { "label": "" }, @@ -2163,17 +3308,27 @@ "minutes": "{count} minutės", "used": "Naudojama", "available": "Galima", - "lastSeen": "Paskutinis būsenos atnaujinimas: {lastSeen}" + "lastSeen": "Paskutinis būsenos atnaujinimas: {lastSeen}", + "updatesAvailable": "{count, plural, one {Galimas # atnaujinimas} few {Galimi # atnaujinimai} many {Galimų atnaujinimų: #} other {Galima atnaujinimų: #}}", + "rebootRequired": "Reikia paleisti iš naujo", + "rebootNotRequired": "Paleisti iš naujo nereikia" + }, + "smartStatus": { + "attributesWithinThresholds": "SMART: atributai neviršija ribų", + "attributesFailed": "SMART: nepavyko patikrinti {attributes}", + "noCriticalWarning": "SMART: SSD nepranešė apie įspėjimus", + "criticalWarning": "SMART: SSD pranešė apie kritinį įspėjimą" + }, + "gauge": { + "cpuUsage": "CPU naudojimas", + "cpuTemperature": "CPU temperatūra", + "memoryUsage": "Atminties naudojimas", + "gpuUsage": "{name} GPU naudojimas" }, - "memory": {}, "error": { "internalServerError": "Nepavyko gauti sveikatos būsenos" }, "cluster": { - "summary": { - "cpu": "CPU", - "memory": "RAM" - }, "resource": { "node": { "name": "Mazgai" @@ -2209,8 +3364,6 @@ "table": { "header": { "name": "Vardas", - "cpu": "CPU", - "memory": "RAM", "node": "Mazgas" } } @@ -2220,33 +3373,29 @@ "name": "Docker statistika", "description": "Jūsų konteinerių statistika (šį valdiklį galima pridėti tik turint administratoriaus teises)", "option": { - "columns": { - "label": "Rodomi stulpeliai" + "endpointIds": { + "label": "Docker aplinkos", + "description": "Palikite tuščią, jei norite rodyti visų Docker aplinkų konteinerius", + "placeholder": "Visos Docker aplinkos" }, - "enableRowSorting": { - "label": "Įjungti elementų rikiavimą" + "containerFilter": { + "label": "Filtruotini konteineriai" + }, + "filterIsWhitelist": { + "label": "Filtruoti kaip leidžiamąjį sąrašą" }, "defaultSort": { - "label": "Numatytajam rikiavimui naudojamas stulpelis", "option": { "name": "Vardas", "state": "Būsena", "cpuUsage": "CPU naudojimas", "memoryUsage": "Atminties naudojimas" } - }, - "descendingDefaultSort": { - "label": "Apversti rikiavimą" - }, - "columnOrder": { - "label": "Stulpelių tvarka" - }, - "columnWidths": { - "label": "Stulpelių pločiai" } }, "error": { "internalServerError": "Nepavyko gauti konteinerių statistikos", + "endpointsUnavailable": "Docker galiniai taškai nepasiekiami", "layoutSaveTitle": "Lentelės išdėstymas neišsaugotas", "layoutSaveMessage": "„Docker“ lentelės išdėstymo nepavyko išsaugoti. Pabandykite dar kartą perkelti arba pakeisti stulpelio dydį." }, @@ -2255,7 +3404,6 @@ } }, "coolify": { - "name": "Coolify", "description": "Jūsų „Coolify“ egzemplioriaus serverių ir programėlių apžvalga", "option": { "showServers": { @@ -2281,17 +3429,49 @@ "internalServerError": "Nepavyko gauti „Coolify“ duomenų" }, "server": { - "buildServer": "Sukurti" + "buildServer": "Sukurti", + "resourceCounts": "{applications, plural, one {# programa} few {# programos} many {# programų} other {# programos}} / {services, plural, one {# paslauga} few {# paslaugos} many {# paslaugų} other {# paslaugos}}", + "reachability": "Pasiekiamumas", + "usability": "Naudojamumas" + }, + "source": { + "url": "Šaltinis: {url}", + "unavailable": "{source}: nepasiekiamas" }, "instances": { "title": "Egzemplioriai" + }, + "action": { + "openResource": "Atidaryti {name}", + "openLogs": "Atidaryti {name} žurnalus", + "showIp": "Rodyti IP adresą", + "hideIp": "Slėpti IP adresą" + }, + "status": { + "running": "Veikia", + "stopped": "Sustabdyta", + "exited": "Baigė darbą", + "starting": "Paleidžiama", + "restarting": "Paleidžiama iš naujo", + "unknown": "Nežinoma", + "online": "Prisijungęs", + "offline": "Atsijungęs", + "reachable": "Pasiekiamas", + "unreachable": "Nepasiekiamas", + "usable": "Naudojamas", + "unusable": "Nenaudojamas" } }, "vpn": { "name": "VPN", "description": "Jūsų VPN ryšių apžvalga", "serviceUnavailable": "VPN nepasiekiamas", - "option": {} + "status": { + "running": "Veikia", + "notRunning": "Neveikia", + "unavailable": "Nepasiekiama", + "vpn": "VPN: {status}" + } }, "ups": { "name": "UPS", @@ -2318,14 +3498,19 @@ "runtime": "Veikimo laikas", "load": "Apkrova", "input": "Įvestis", - "output": "Išvestis" + "output": "Išvestis", + "batteryVoltage": "Akumuliatoriaus įtampa", + "power": "Galia", + "temperature": "Temperatūra", + "manufacturer": "Gamintojas", + "model": "Modelis", + "serial": "Serijos numeris" }, "error": { "internalServerError": "Nepavyko gauti UPS duomenų" } }, "tracearr": { - "name": "Tracearr", "description": "Patobulintas medijos serverio stebėjimas su išsamiais srautinio perdavimo ir perkodavimo duomenimis", "option": { "showStreams": { @@ -2413,10 +3598,7 @@ "label": "Įvykis", "description": "Rodyti bendrą konkretaus įvykio pasikartojimų skaičių", "placeholder": "Pasirinkite įvykį", - "loading": "Įkeliami įvykiai...", - "noEvents": "Įvykių nerasta", - "none": "Nėra įvykio", - "configureWebsiteFirst": "Pirmiausia pasirinkite svetainę, kad įkeltumėte įvykius" + "none": "Nėra įvykio" }, "chartType": { "label": "Diagramos tipas", @@ -2447,26 +3629,21 @@ "eventNames": { "label": "Įvykiai", "description": "Pasirinkite vieną ar kelis įvykius diagramai", - "placeholder": "Pasirinkite įvykius...", - "loading": "Įkeliami įvykiai...", - "noEvents": "Įvykių nerasta", - "configureWebsiteFirst": "Pirmiausia pasirinkite svetainę, kad įkeltumėte įvykius" + "placeholder": "Pasirinkite įvykius..." }, "topCount": { "label": "Rodomi elementai", "description": "Rodomų populiariausių elementų skaičius (maks. 500)" + }, + "events": { + "loading": "Įkeliami įvykiai...", + "noEvents": "Įvykių nerasta", + "configureWebsiteFirst": "Pirmiausia pasirinkite svetainę, kad įkeltumėte įvykius" } }, "event": { - "occurrences": "įvykiai", "label": "įvykiai" }, - "topPages": { - "direct": "Tiesiogiai" - }, - "topReferrers": { - "direct": "Tiesiogiai" - }, "events": { "selectPrompt": "Pasirinkite įvykius diagramai" }, @@ -2475,6 +3652,9 @@ "noWebsite": "Svetainė nesukonfigūruota", "noData": "Nėra duomenų", "internalServerError": "Nepavyko gauti Umami duomenų" + }, + "top": { + "direct": "Tiesioginiai" } }, "common": { @@ -2502,7 +3682,8 @@ }, "integration": { "noData": "Integracija nerasta", - "description": "Spustelėkite , kad sukurtumėte naują integraciją" + "description": "Spustelėkite , kad sukurtumėte naują integraciją", + "manage": "Tvarkyti integracijas" }, "app": { "noData": "Programėlė nerasta", @@ -2513,7 +3694,61 @@ "noIntegration": "Nepasirinkta integracija", "noData": "Nėra integracijos duomenų" }, - "option": {} + "integrationDisconnected": "Duomenų nėra, visos integracijos atjungtos", + "updatedAt": "Atnaujinta {date}", + "title": { + "label": "Pavadinimas" + }, + "openInNewTab": { + "label": "Atidaryti naujame skirtuke" + }, + "showTitle": { + "label": "Rodyti pavadinimą" + }, + "weatherLocation": { + "label": "Orų vieta" + }, + "layout": { + "label": "Išdėstymas", + "option": { + "horizontal": "Horizontalus", + "vertical": "Vertikalus", + "grid": "Tinklelis" + } + }, + "select": { + "loading": "Įkeliama...", + "loadError": "Nepavyko įkelti parinkčių" + }, + "dateFormat": { + "label": "Datos formatas", + "description": "Kaip turi atrodyti data" + }, + "visibleStorageVolumes": { + "label": "Matomi saugyklos tomai", + "description": "Galima tik tada, kai kiekviena pasirinkta integracija yra OpenMediaVault arba Synology. Palikite tuščią, jei norite rodyti visus aptiktus saugyklos tomus.", + "placeholder": "Pasirinkite saugyklos tomus" + }, + "tableOptions": { + "columns": { + "label": "Rodomi stulpeliai" + }, + "columnOrder": { + "label": "Stulpelių tvarka" + }, + "columnWidths": { + "label": "Stulpelių pločiai" + }, + "enableRowSorting": { + "label": "Įjungti elementų rikiavimą" + }, + "defaultSort": { + "label": "Stulpelis, pagal kurį rikiuojama pagal numatytuosius nustatymus" + }, + "invertSorting": { + "label": "Apversti rikiavimą" + } + } }, "video": { "name": "Vaizdo srautas", @@ -2572,6 +3807,7 @@ "transcoding": "Perkodavimas", "paused": "Pristabdyta", "remaining": "Liko {minutes} min", + "seasonEpisode": "S{season} E{episode}", "metadata": { "title": "Išsami statistika", "video": { @@ -2589,11 +3825,16 @@ "resolution": "Raiška", "target": "Tikslinis kodekas" } - } + }, + "unknownUser": "Nežinomas naudotojas" + }, + "summary": { + "sessions": "{count, plural, one {# seansas} few {# seansai} many {# seansų} other {# seanso}}", + "playing": "Leidžiama: {count}", + "transcoding": "Perkoduojama: {count}" } }, "paperlessNgx": { - "name": "Paperless-ngx", "description": "Jūsų Paperless-ngx dokumentų archyvo apžvalga", "documentsTotal": "Iš viso dokumentų", "documentsInbox": "Gautieji", @@ -2637,6 +3878,192 @@ "internalServerError": "Nepavyko gauti Paperless-ngx duomenų" } }, + "patchmon": { + "description": "Pagrindinių kompiuterių pataisų būklės apžvalga iš „PatchMon“", + "title": "„PatchMon“ statistika", + "totalHosts": "Iš viso pagrindinių kompiuterių", + "hostsNeedingUpdates": "Reikia atnaujinimų", + "securityUpdates": "Saugumo atnaujinimai", + "upToDateHosts": "Atnaujinti pagrindiniai kompiuteriai", + "hostsWithSecurityUpdates": "Pagrindiniai kompiuteriai su saugumo atnaujinimais", + "recentUpdates24h": "Atnaujinimai (24 val.)", + "totalOutdatedPackages": "Pasenę paketai", + "totalRepos": "Saugyklos", + "osDistribution": "OS distribucija", + "compliance": "Pataisų atitiktis", + "complianceRatio": "{upToDate} / {total}", + "lastUpdated": "Atnaujinta {time}", + "option": { + "showTotalHosts": { + "label": "Rodyti visus pagrindinius kompiuterius", + "description": "Rodyti bendrą stebimų pagrindinių kompiuterių skaičių" + }, + "showHostsNeedingUpdates": { + "label": "Rodyti pagrindinius kompiuterius, kuriems reikia atnaujinimų", + "description": "Rodyti pagrindinius kompiuterius, turinčius bent vieną pasenusį paketą" + }, + "showSecurityUpdates": { + "label": "Rodyti saugumo atnaujinimus", + "description": "Rodyti bendrą prieinamų saugumo atnaujinimų skaičių" + }, + "showUpToDateHosts": { + "label": "Rodyti atnaujintus pagrindinius kompiuterius", + "description": "Rodyti pagrindinius kompiuterius, neturinčius pasenusių paketų" + }, + "showHostsWithSecurityUpdates": { + "label": "Rodyti pagrindinius kompiuterius su saugumo atnaujinimais", + "description": "Rodyti pagrindinius kompiuterius, kuriems reikia saugumo pataisų" + }, + "showRecentUpdates24h": { + "label": "Rodyti naujausius atnaujinimus (24 val.)", + "description": "Rodyti per pastarąsias 24 valandas pritaikytų atnaujinimų skaičių" + }, + "showTotalOutdatedPackages": { + "label": "Rodyti pasenusius paketus", + "description": "Rodyti bendrą pasenusių paketų skaičių visuose pagrindiniuose kompiuteriuose" + }, + "showTotalRepos": { + "label": "Rodyti saugyklas", + "description": "Rodyti stebimų aktyvių saugyklų skaičių" + }, + "enableThresholdColors": { + "label": "Įjungti slenkstines spalvas", + "description": "Spalvinti statistikos reikšmes žalia, geltona arba raudona pagal griežtumo išankstines nuostatas" + }, + "useCustomThresholds": { + "label": "Išplėstiniai slenksčiai", + "description": "Tinkinkite kiekvienos statistikos įspėjimo ir kritinius slenksčius naudodami absoliučius skaičius arba procentines visų pagrindinių kompiuterių dalis" + }, + "thresholdMode": { + "option": { + "absolute": "Absoliutus skaičius", + "percent": "Procentinė visų pagrindinių kompiuterių dalis" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "Atnaujinimų poreikio slenksčio režimas", + "description": "Palyginti atnaujinimų poreikio skaičių kaip absoliučią reikšmę arba procentinę visų pagrindinių kompiuterių dalį" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "Atnaujinimų poreikio įspėjimo slenkstis" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "Atnaujinimų poreikio kritinis slenkstis" + }, + "securityUpdatesThresholdMode": { + "label": "Saugumo atnaujinimų slenksčio režimas", + "description": "Palyginti saugumo atnaujinimų skaičių kaip absoliučią reikšmę arba procentinę visų pagrindinių kompiuterių dalį" + }, + "securityUpdatesWarningAt": { + "label": "Saugumo atnaujinimų įspėjimo slenkstis" + }, + "securityUpdatesCriticalAt": { + "label": "Saugumo atnaujinimų kritinis slenkstis" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "Pagrindinių kompiuterių su saugumo atnaujinimais slenksčio režimas", + "description": "Palyginti pagrindinių kompiuterių skaičių kaip absoliučią reikšmę arba procentinę visų pagrindinių kompiuterių dalį" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "Pagrindinių kompiuterių su saugumo atnaujinimais įspėjimo slenkstis" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "Pagrindinių kompiuterių su saugumo atnaujinimais kritinis slenkstis" + }, + "upToDateHostsThresholdMode": { + "label": "Atnaujintų pagrindinių kompiuterių slenksčio režimas", + "description": "Palyginti atnaujintų pagrindinių kompiuterių skaičių kaip absoliučią reikšmę arba procentinę visų pagrindinių kompiuterių dalį" + }, + "upToDateHostsWarningAt": { + "label": "Atnaujintų pagrindinių kompiuterių įspėjimo slenkstis", + "description": "Įjungti geltoną spalvą, kai reikšmė yra lygi arba didesnė už šį slenkstį, bet neapima visų pagrindinių kompiuterių" + }, + "upToDateHostsCriticalAt": { + "label": "Atnaujintų pagrindinių kompiuterių kritinis slenkstis", + "description": "Įjungti raudoną spalvą, kai reikšmė nukrenta žemiau šio slenksčio" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "Pasenusių paketų slenksčio režimas", + "description": "Palyginti pasenusių paketų skaičių kaip absoliučią reikšmę arba procentinę visų pagrindinių kompiuterių dalį" + }, + "totalOutdatedPackagesWarningAt": { + "label": "Pasenusių paketų įspėjimo slenkstis" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "Pasenusių paketų kritinis slenkstis" + }, + "showOsDistribution": { + "label": "Rodyti OS distribuciją", + "description": "Rodyti stebimų pagrindinių kompiuterių suskirstymą pagal operacinę sistemą" + }, + "osDistributionLimit": { + "label": "OS distribucijos riba", + "description": "Didžiausias rodomų operacinių sistemų skaičius", + "option": { + "3": "3 populiariausios", + "5": "5 populiariausios", + "10": "10 populiariausių", + "all": "Visos" + } + }, + "showOsVersion": { + "label": "Rodyti OS versiją", + "description": "Kai prieinama, prie kiekvienos distribucijos etiketės pridėti OS versiją" + }, + "showComplianceHero": { + "label": "Rodyti atitikties pagrindinį rodiklį", + "description": "Rodyti atitikties žiedą, nurodantį atnaujintų pagrindinių kompiuterių procentą" + }, + "osDisplayMode": { + "label": "OS rodymo režimas", + "description": "Pasirinkite, kaip rodyti operacinės sistemos distribuciją", + "option": { + "bars": "Horizontalios juostos", + "donut": "Žiedinė diagrama" + } + }, + "threshold": { + "warningAt": { + "description": "Įveskite geltoną būseną, kai reikšmė pasiekia šią ribą" + }, + "criticalAt": { + "description": "Įveskite raudoną būseną, kai reikšmė pasiekia šią ribą" + } + } + }, + "error": { + "internalServerError": "Nepavyko gauti „PatchMon“ duomenų" + } + }, + "bazarr": { + "description": "Trūkstamų subtitrų ir būklės iš „Bazarr“ egzemplioriaus apžvalga", + "episodes": "Trūkstami epizodai", + "movies": "Trūkstami filmai", + "providers": "Teikėjų problemos", + "status": "Būklės problemos", + "announcements": "Pranešimai", + "option": { + "showMissingEpisodes": { + "label": "Rodyti trūkstamus epizodus", + "description": "Rodyti epizodų, kuriems trūksta subtitrų, skaičių" + }, + "showMissingMovies": { + "label": "Rodyti trūkstamus filmus", + "description": "Rodyti filmų, kuriems trūksta subtitrų, skaičių" + }, + "showProviderIssues": { + "label": "Rodyti teikėjų problemas", + "description": "Rodyti subtitrų teikėjų, turinčių problemų, skaičių" + }, + "showHealthIssues": { + "label": "Rodyti būklės problemas", + "description": "Rodyti „Bazarr“ būklės problemų skaičių" + } + }, + "error": { + "internalServerError": "Nepavyko gauti „Bazarr“ duomenų" + } + }, "immich-serverStats": { "name": "„Immich“ serverio statistika", "description": "Informacija apie jūsų „Immich“ egzempliorių", @@ -2661,7 +4088,8 @@ "users": "Vartotojai", "photos": "Nuotraukos", "videos": "Vaizdo įrašai", - "storage": "Panaudota saugykla" + "storage": "Panaudota saugykla", + "albumLimit": "Didžiausi albumai (rodoma iki {count})" }, "immich-albumCarousel": { "name": "„Immich“ albumas", @@ -2685,24 +4113,21 @@ } }, "description": "Skaidrių demonstracija iš „Immich“ albumo arba visos bibliotekos", - "noPhotos": "Nuotraukų nerasta" + "noPhotos": "Nuotraukų nerasta", + "albumPhoto": "Albumo nuotrauka", + "actions": { + "previousPhoto": "Ankstesnė nuotrauka", + "nextPhoto": "Kita nuotrauka", + "pauseSlideshow": "Pristabdyti skaidrių demonstraciją", + "resumeSlideshow": "Tęsti skaidrių demonstraciją", + "toggleSlideshow": "Pristabdyti arba tęsti skaidrių demonstraciją", + "photo": "Nuotrauka {number}" + } }, "downloads": { "name": "Atsisiuntimų klientas", "description": "Leidžia peržiūrėti ir valdyti atsisiuntimus tiek iš Torrent, tiek Usenet klientų.", "option": { - "columns": { - "label": "Stulpeliai rodyti" - }, - "enableRowSorting": { - "label": "Įgalinti elementų rūšiavimą" - }, - "defaultSort": { - "label": "Stulpelis, naudojamas rūšiavimui pagal nutylėjimą" - }, - "descendingDefaultSort": { - "label": "Apversti rūšiavimą" - }, "showCompletedUsenet": { "label": "Rodyti usenet įrašus, pažymėtus kaip baigtus" }, @@ -2727,12 +4152,6 @@ "limitPerIntegration": { "label": "Elementų skaičiaus apribojimas integracijai", "description": "Tai apribos rodomų elementų skaičių kiekvienoje integracijoje, o ne visuotinai" - }, - "columnOrder": { - "label": "Stulpelių tvarka" - }, - "columnWidths": { - "label": "Stulpelių pločiai" } }, "errors": { @@ -2763,7 +4182,7 @@ "detailsTitle": "Dabartinis indeksas kliente" }, "id": { - "columnTitle": "ID", + "columnTitle": "Elemento ID", "detailsTitle": "Elemento ID" }, "integration": { @@ -2893,6 +4312,10 @@ "mediaRequests-requestList": { "name": "Medijos užklausų sąrašas", "description": "Peržiūrėkite visų medijų užklausų iš \"Overseerr\" arba \"Jellyseerr\" sąrašą", + "empty": { + "title": "Medijos užklausų dar nėra", + "description": "Norėdami pradėti užklausą, ieškokite filmo arba serialo." + }, "option": { "linksTargetNewTab": { "label": "Atidaryti naujame skirtuke" @@ -2926,12 +4349,16 @@ "failed": "Nepavyko", "completed": "Užbaigta" }, + "unknown": "Nežinoma", "toBeDetermined": "TBD" }, "mediaRequests-requestStats": { "name": "Medijos užklausų statistika", "description": "Statistikos apie jūsų medijų užklausas", - "option": {}, + "empty": { + "title": "Užklausų veiklos dar nėra", + "description": "Statistika bus rodoma po pirmosios medijos užklausos." + }, "titles": { "stats": { "main": "Medijų statistikos", @@ -2941,8 +4368,7 @@ "declined": "Jau atmesta", "available": "Jau prieinama", "tv": "TV užklausos", - "movie": "Filmų užklausos", - "total": "Iš viso" + "movie": "Filmų užklausos" }, "users": { "main": "Top vartotojai", @@ -2968,7 +4394,6 @@ }, "currentIndex": "{start}–{end} iš {total}", "healthCheck": { - "title": "Sveikatos patikra", "queued": "Eilėje", "status": { "healthy": "Sveika", @@ -2977,38 +4402,63 @@ }, "panel": { "statistics": { - "empty": "Tuščia", - "transcodes": "Perkodavimai", - "transcodesCount": "Perkodavimai", - "healthChecksCount": "Sveikatos patikros", "filesCount": "Failai", "savedSpace": "Sutaupyta vietos", - "healthChecks": "Sveikatos patikros", "videoCodecs": "Kodekai", "videoContainers": "Konteineriai", "videoResolutions": "Skiriamosios gebos" }, "workers": { - "empty": "Tuščia", "table": { - "file": "Failas", "eta": "Liko", - "progress": "Eiga", - "transcode": "Perkoduoti", - "healthCheck": "Sveikatos patikra" + "progress": "Eiga" } }, "queue": { - "empty": "Tuščia", "table": { - "file": "Failas", - "size": "Dydis", - "transcode": "Perkoduoti", - "healthCheck": "Sveikatos patikra" + "size": "Dydis" } + }, + "common": { + "empty": "Tuščia", + "file": "Failas", + "healthCheck": "Būklės patikra", + "transcode": "Perkoduoti", + "transcodes": "Perkodavimai", + "healthChecks": "Būklės patikros" } } }, + "mediaMissing": { + "name": "Trūkstama ir eilėje esanti medija", + "description": "Rodo trūkstamus ir eilėje esančius filmus bei epizodus iš „Radarr“ ir „Sonarr“", + "option": { + "showMissing": { + "label": "Rodyti trūkstamus elementus" + }, + "showQueued": { + "label": "Rodyti eilėje esančius elementus" + }, + "pageSize": { + "label": "Elementų puslapyje" + } + }, + "tab": { + "missing": "Trūkstama", + "queued": "Eilėje" + }, + "type": { + "movie": "Filmas", + "episode": "Epizodas", + "book": "Knyga" + }, + "empty": { + "missing": "Trūkstamų elementų nėra", + "queued": "Eilėje esančių elementų nėra", + "noTabsEnabled": "Valdiklio nuostatose įjunkite bent vieną kortelę" + }, + "timeLeft": "Liko laiko" + }, "rssFeed": { "name": "RSS srautai", "description": "Stebėti ir rodyti vieną ar daugiau bendrų RSS, ATOM arba JSON srautų", @@ -3031,6 +4481,13 @@ "showPosterImage": { "label": "Rodyti plakato vaizdą" } + }, + "error": { + "allFeedsFailed": "Nepavyko įkelti RSS sklaidos kanalų. Patikrinkite kanalų URL ir bandykite dar kartą." + }, + "warning": { + "partial": "{count, plural, one {Nepavyko įkelti # RSS sklaidos kanalo} few {Nepavyko įkelti # RSS sklaidos kanalų} many {Nepavyko įkelti # RSS sklaidos kanalų} other {Nepavyko įkelti # RSS sklaidos kanalų}}", + "stale": "RSS sklaidos kanalų atnaujinti nepavyko. Rodomi anksčiau įkelti įrašai." } }, "releases": { @@ -3106,17 +4563,8 @@ "label": "Reguliarioji išraiška" } }, - "edit": { - "label": "Taisyti" - }, "editForm": { - "title": "Redaguoti saugyklą", - "cancel": { - "label": "Atšaukti" - }, - "confirm": { - "label": "Patvirtinti" - } + "title": "Redaguoti saugyklą" }, "importForm": { "title": "Importuoti iš Docker" @@ -3133,8 +4581,7 @@ "label": "Teikėjo žetonai", "token": "Žetonas", "configured": "Žetonas sukonfigūruotas", - "notConfigured": "Žetonas nenustatytas", - "save": "Išsaugoti" + "notConfigured": "Žetonas nenustatytas" } } }, @@ -3161,17 +4608,32 @@ "noProviderResponse": "Teikėjas neatsakė", "unexpected": "Netikėta teikėjo klaida" } - } + }, + "expandDetails": "Rodyti {name} išsamią informaciją", + "collapseDetails": "Slėpti {name} išsamią informaciją" }, "networkControllerSummary": { - "option": {}, - "card": { - "vpn": { - "countConnected": "Prisijungę: {count}" + "advanced": { + "updated": "Atnaujinta", + "metric": { + "latency": "Delsa", + "ping": "Ryšio patikra", + "uptime": "Veikimo laikas", + "users": "Vartotojai", + "guests": "Svečiai" } }, + "card": { + "vpn": { + "countConnected": "{count, plural, one {# prisijungęs} few {# prisijungę} many {# prisijungusių} other {# prisijungę}}", + "label": "VPN" + }, + "wan": "WAN", + "web": "Žiniatinklis", + "wifi": "Wi-Fi", + "lan": "LAN" + }, "error": { - "integrationsDisconnected": "Duomenų nėra, visos integracijos atjungtos", "unknownContentOption": "Nežinoma tinklo valdiklio suvestinės valdiklio turinio parinktis: " }, "name": "Tinklo valdiklio suvestinė", @@ -3208,7 +4670,6 @@ } }, "error": { - "integrationsDisconnected": "Duomenų nėra, visos integracijos atjungtos", "unknownContentOption": "Nežinoma tinklo būsenos valdiklio turinio parinktis: " }, "name": "Tinklo būsena", @@ -3238,7 +4699,6 @@ "versiontitle": "Versijos", "cputitle": "CPU naudojimas", "memorytitle": "Atminties naudojimas", - "cpu": "CPU", "memory": "Atmintis", "interfaces": { "name": "vardas", @@ -3246,6 +4706,16 @@ "recv": "Gauta", "title": "Tinklo sąsajos" } + }, + "empty": { + "noInterfaces": "Tinklo sąsajų duomenų dar nėra" + }, + "versionUnknown": "Nežinoma versija", + "metricAccessible": "{metric}: {value} %, {status}", + "status": { + "normal": "Įprasta", + "warning": "Įspėjimas", + "critical": "Kritinė" } }, "notifications": { @@ -3255,8 +4725,21 @@ "option": { "hideLogos": { "label": "Slėpti logotipus" + }, + "messageFormat": { + "label": "Pranešimo formatas", + "option": { + "auto": "Automatinis", + "plain": "Paprastas tekstas", + "markdown": "Markdown", + "html": "HTML" + } } - } + }, + "openService": "Atidaryti pranešimų paslaugą", + "deleteNotification": "Ištrinti pranešimą iš Gotify", + "deleteFailed": "Nepavyko ištrinti pranešimo", + "deleteFailedMessage": "Pranešimo ištrinti nepavyko. Bandykite dar kartą." }, "speedtestTracker": { "name": "Speedtest Tracker", @@ -3298,7 +4781,6 @@ } }, "uptimeKuma": { - "name": "Uptime Kuma", "description": "Stebėkite veikimo statistiką iš savo Uptime Kuma būsenos puslapio", "option": { "showAverageUptime": { @@ -3335,8 +4817,58 @@ }, "error": { "internalServerError": "Nepavyko gauti veikimo duomenų" + }, + "status": { + "up": "Viso įkelta", + "down": "Atsisiuntimo greitis", + "paused": "Pristabdyta" } }, + "traefik": { + "description": "„Traefik“ maršrutizatorių, paslaugų, tarpinių programų ir įėjimo taškų apžvalga", + "option": { + "showTcp": { + "label": "Rodyti TCP" + }, + "showUdp": { + "label": "Rodyti UDP" + }, + "showEntryPoints": { + "label": "Rodyti įėjimo taškus" + } + }, + "instances": "„Traefik“ egzemplioriai", + "versionUnknown": "Versija nežinoma", + "summary": { + "routers": "Maršrutizatoriai", + "entryPoints": "Įėjimo taškai" + }, + "resource": { + "routers": "Maršrutizatoriai", + "middlewares": "Tarpinės programos" + }, + "status": { + "healthy": "Veikia tinkamai", + "errors": "Klaidų: {count}", + "warnings": "Įspėjimų: {count}" + }, + "error": { + "internalServerError": "Nepavyko gauti „Traefik“ duomenų" + }, + "resourceType": { + "router": "Maršrutizatorius", + "service": "Paslauga", + "middleware": "Tarpinė programinė įranga" + }, + "resourceStatus": { + "enabled": "Įjungta", + "disabled": "Išjungta", + "warning": "Įspėjimas", + "error": "Klaida", + "unknown": "Nežinoma" + }, + "failedEndpoint": "Nepavyko: {endpoint}" + }, "audioStats": { "name": "Garso statistika", "description": "Bibliotekos ir atkūrimo statistika iš Navidrome arba Audiobookshelf", @@ -3401,9 +4933,7 @@ "label": "Matomos diagramos", "description": "Pasirinkite diagramas, kurias norite matyti.", "option": { - "cpu": "CPU", "memory": "Atmintis", - "gpu": "GPU", "network": "Tinklas" } }, @@ -3418,12 +4948,11 @@ } }, "card": { - "cpu": "CPU", "memory": "ATM", - "gpu": "GPU", "network": "TINK", "up": "", - "down": "ŽEMYN" + "down": "ŽEMYN", + "memoryTooltip": "{used} / {available} ({percent}%)" } }, "systemDisks": { @@ -3449,151 +4978,88 @@ }, "showBackgroundBar": { "label": "Rodyti naudojimo juostą fone" - }, - "visibleStorageVolumes": { - "label": "Matomi saugyklos tomai", - "description": "Prieinama tik tada, kai visos pasirinktos integracijos yra „Synology“. Palikite tuščią, kad būtų rodomi visi aptikti saugyklos tomai.", - "placeholder": "Pasirinkite saugyklos tomus" } }, "status": { - "unhealthy": "Nesveika" + "unhealthy": "Nesveika", + "smart": "SMART", + "free": "Laisva: {percentage}%" + } + }, + "customApi": { + "name": "Pasirinktinis valdiklis", + "description": "Atvaizduoja sukonfigūruotą pasirinktinio JSX aprašą.", + "customJsx": { + "noTemplate": "JSX šablonas nesukonfigūruotas.", + "templateWarnings": "{count} šablono įspėjimai:", + "requestIdRequired": "Šiam tinklo valdikliui reikia pavadinto requestId.", + "unsavedPreview": "Prieš testuodami pavadintas užklausas, paleiskite pradinį užklausos testą redaktoriuje.", + "invalidParams": "Užklausos parametrai netinkami.", + "loading": "Įkeliama užklausa...", + "loadRequest": "Įkelti užklausą", + "requestFailed": "Užklausa nepavyko.", + "retry": "Bandyti užklausą dar kartą", + "actionCompleted": "Veiksmas sėkmingai atliktas.", + "actionSimulated": "Veiksmas imituotas; užklausa neišsiųsta.", + "actionsDisabledEditMode": "Veiksmai išjungti, kol lenta veikia redagavimo režimu.", + "widgetItemUnavailable": "Šis valdiklio elementas nepasiekiamas.", + "toggle": "Perjungti", + "copied": "Nukopijuota", + "confirmDelete": "Patvirtinkite šį negrįžtamą veiksmą." + }, + "option": { + "definitionId": { + "label": "Pasirinktinis valdiklis" + }, + "refreshInterval": { + "label": "Atnaujinimo intervalas", + "description": "Kaip dažnai iš naujo gauti duomenis iš API (sekundėmis)" + } + }, + "noDefinition": "Apibrėžimas nepasirinktas", + "definitionNotFound": "Pasirinktinis valdiklis nepasiekiamas", + "migrationRequired": "Šis senas pasirinktinis valdiklis išsaugotas, tačiau prieš paleidžiant jį reikia perkelti į Custom JSX v2 skiltyje „Tvarkyti pasirinktinius valdiklius“.", + "manageMigration": "Atidaryti pasirinktinių valdiklių tvarkymą", + "contactAdmin": "Susisiekite su administratoriumi.", + "configurationNeedsRepair": "Pasikeitė šio valdiklio parinktys. Redaguokite valdiklį, kad ištaisytumėte jo konfigūraciją.", + "removeFromBoard": "Pašalinti iš lentos", + "editModePending": "Išsaugokite lentą, kad įkeltumėte šį valdiklį.", + "picker": { + "group": "Pasirinktiniai JSX valdikliai", + "empty": "Pasirinktinių valdiklių nerasta", + "preview": "Peržiūra", + "sources": "{count, plural, one {# šaltinis} few {# šaltiniai} many {# šaltinių} other {# šaltinio}}", + "requests": "{count, plural, one {# užklausa} few {# užklausos} many {# užklausų} other {# užklausos}}", + "migrationRequired": "Reikia perkelti", + "migrationDescription": "Šis įkeltas v1 valdiklis dar negali veikti. Nukopijuokite jo pašalintą raginimą į LLM, tada įklijuokite vienintelį JSON atsakymą į Homarr.", + "manageMigration": "Atidaryti pasirinktinių valdiklių tvarkymą", + "contactAdmin": "Susisiekite su administratoriumi." + }, + "configuration": { + "needsAttention": "Konfigūracijai reikia dėmesio: {message}", + "advancedOptions": "Išplėstinės parinktys", + "invalidJson": "Netinkamas JSON" } }, "beszelSystemTable": { "name": "Beszel sistemos (lentelė)", "description": "Visų Beszel stebimų sistemų lentelės vaizdas su rūšiuojamais stulpeliais ir būsenos indikatoriais", "option": { - "statusFilter": { - "label": "Būsenos filtras" - }, "sortBy": { "label": "Rūšiuoti pagal" }, "sortDirection": { "label": "Rūšiavimo kryptis" - }, - "showCpu": { - "label": "Rodyti CPU" - }, - "showMemory": { - "label": "Rodyti atmintį" - }, - "showDisk": { - "label": "Rodyti diską" - }, - "showGpu": { - "label": "Rodyti GPU" - }, - "showLoadAvg": { - "label": "Rodyti apkrovos vidurkį" - }, - "showNet": { - "label": "Rodyti tinklą" - }, - "showTemp": { - "label": "Rodyti temperatūrą" - }, - "showBattery": { - "label": "Rodyti bateriją" - }, - "showServices": { - "label": "Rodyti paslaugas" - }, - "showUptime": { - "label": "Rodyti veikimo laiką" - }, - "showAgent": { - "label": "Rodyti agento versiją" - }, - "columnOrder": { - "label": "Stulpelių tvarka" - }, - "columnWidths": { - "label": "Stulpelių pločiai" } }, - "noRecords": "Sistemų nerasta", "error": { - "internalServerError": "Nepavyksta prisijungti prie „Beszel“. Patikrinkite integracijos nuostatas.", "layoutSaveTitle": "Nepavyksta išsaugoti lentelės išdėstymo", "layoutSaveMessage": "Stulpelių tvarkos arba pločių nepavyko išsaugoti. Bandykite dar kartą." - }, - "column": { - "system": "Sistema", - "cpu": "CPU", - "memory": "Atmintis", - "disk": "Diskas", - "gpu": "GPU", - "loadAvg": "Apkrovos vid", - "net": "Tinklas", - "temp": "Temp", - "battery": "Bat", - "services": "Paslaugos", - "uptime": "Veikimo laikas", - "agent": "Agentas" } }, "beszelSystemGrid": { "name": "Beszel sistemos (tinklelis)", - "description": "Visų Beszel stebimų sistemų kortelių tinklelio vaizdas su realaus laiko metrika", - "option": { - "statusFilter": { - "label": "Būsenos filtras" - }, - "showCpu": { - "label": "Rodyti CPU" - }, - "showMemory": { - "label": "Rodyti atmintį" - }, - "showDisk": { - "label": "Rodyti diską" - }, - "showGpu": { - "label": "Rodyti GPU" - }, - "showLoadAvg": { - "label": "Rodyti apkrovos vidurkį" - }, - "showNet": { - "label": "Rodyti tinklą" - }, - "showTemp": { - "label": "Rodyti temperatūrą" - }, - "showBattery": { - "label": "Rodyti bateriją" - }, - "showServices": { - "label": "Rodyti paslaugas" - }, - "showUptime": { - "label": "Rodyti veikimo laiką" - }, - "showAgent": { - "label": "Rodyti agento versiją" - } - }, - "error": { - "internalServerError": "Nepavyksta prisijungti prie „Beszel“. Patikrinkite integracijos nuostatas." - }, - "empty": { - "noSystems": "Sistemų nerasta" - }, - "metric": { - "cpu": "CPU", - "memory": "Atmintis", - "disk": "Diskas", - "gpu": "GPU", - "loadAvg": "Apkrovos vid", - "net": "Tinklas", - "temp": "Temp", - "battery": "Bat", - "services": "Paslaugos", - "uptime": "Veikimo laikas", - "agent": "Agentas" - } + "description": "Visų Beszel stebimų sistemų kortelių tinklelio vaizdas su realaus laiko metrika" }, "beszelAlerts": { "name": "Beszel įspėjimai", @@ -3607,11 +5073,12 @@ } }, "empty": "Nėra sukonfigūruotų įspėjimų", - "error": { - "internalServerError": "Nepavyksta prisijungti prie „Beszel“. Patikrinkite integracijos nuostatas." - }, "history": "Istorija", "resolved": "Išspręsta", + "alertDescription": { + "statusDuration": "Neveikia jau {minutes} min", + "threshold": "Viršija {value} per {minutes} min" + }, "status": { "triggered": "Suaktyvinta", "ok": "Gerai" @@ -3658,16 +5125,16 @@ "noSystems": "Sistemų nerasta" }, "error": { - "internalServerError": "Nepavyksta prisijungti prie „Beszel“. Patikrinkite integracijos nuostatas.", "liveConnectionFailed": "Nepavyko užmegzti tiesioginio ryšio. Jūsų „Beszel“ egzempliorius gali nepalaikyti srautinio perdavimo realiuoju laiku.", "switchToHistorical": "Perjungti į istorinį rodinį", - "systemNotFound": "Pasirinkta sistema nerasta. Pasirinkite kitą sistemą." + "systemNotFound": "Pasirinkta sistema nerasta. Pasirinkite kitą sistemą.", + "selectionSaveTitle": "Nepavyko išsaugoti pasirinkimo", + "selectionSaveMessage": "Nepavyko išsaugoti sistemos arba laikotarpio pasirinkimo. Bandykite dar kartą." }, "chart": { "cpu": { "title": "CPU naudojimas", - "subtitle": "Vidutinis visos sistemos CPU panaudojimas", - "series": "CPU" + "subtitle": "Vidutinis visos sistemos CPU panaudojimas" }, "memory": { "title": "Atminties naudojimas", @@ -3709,289 +5176,550 @@ "title": "Docker tinklo I/O", "subtitle": "Docker konteinerių tinklo srautas" } + }, + "period": { + "live": "Tiesiogiai", + "oneHour": "1 val", + "twelveHours": "12 val", + "oneDay": "24 val", + "oneWeek": "1 sav", + "thirtyDays": "30 d" } }, - "patchmon": { - "name": "PatchMon", - "description": "Pagrindinių kompiuterių pataisų būklės apžvalga iš „PatchMon“", - "title": "„PatchMon“ statistika", - "totalHosts": "Iš viso pagrindinių kompiuterių", - "hostsNeedingUpdates": "Reikia atnaujinimų", - "securityUpdates": "Saugumo atnaujinimai", - "upToDateHosts": "Atnaujinti pagrindiniai kompiuteriai", - "hostsWithSecurityUpdates": "Pagrindiniai kompiuteriai su saugumo atnaujinimais", - "recentUpdates24h": "Atnaujinimai (24 val.)", - "totalOutdatedPackages": "Pasenę paketai", - "totalRepos": "Saugyklos", - "osDistribution": "OS distribucija", - "compliance": "Pataisų atitiktis", - "complianceRatio": "{upToDate} / {total}", - "lastUpdated": "Atnaujinta {time}", - "option": { - "showTotalHosts": { - "label": "Rodyti visus pagrindinius kompiuterius", - "description": "Rodyti bendrą stebimų pagrindinių kompiuterių skaičių" - }, - "showHostsNeedingUpdates": { - "label": "Rodyti pagrindinius kompiuterius, kuriems reikia atnaujinimų", - "description": "Rodyti pagrindinius kompiuterius, turinčius bent vieną pasenusį paketą" - }, - "showSecurityUpdates": { - "label": "Rodyti saugumo atnaujinimus", - "description": "Rodyti bendrą prieinamų saugumo atnaujinimų skaičių" - }, - "showUpToDateHosts": { - "label": "Rodyti atnaujintus pagrindinius kompiuterius", - "description": "Rodyti pagrindinius kompiuterius, neturinčius pasenusių paketų" - }, - "showHostsWithSecurityUpdates": { - "label": "Rodyti pagrindinius kompiuterius su saugumo atnaujinimais", - "description": "Rodyti pagrindinius kompiuterius, kuriems reikia saugumo pataisų" - }, - "showRecentUpdates24h": { - "label": "Rodyti naujausius atnaujinimus (24 val.)", - "description": "Rodyti per pastarąsias 24 valandas pritaikytų atnaujinimų skaičių" - }, - "showTotalOutdatedPackages": { - "label": "Rodyti pasenusius paketus", - "description": "Rodyti bendrą pasenusių paketų skaičių visuose pagrindiniuose kompiuteriuose" - }, - "showTotalRepos": { - "label": "Rodyti saugyklas", - "description": "Rodyti stebimų aktyvių saugyklų skaičių" - }, - "enableThresholdColors": { - "label": "Įjungti slenkstines spalvas", - "description": "Spalvinti statistikos reikšmes žalia, geltona arba raudona pagal griežtumo išankstines nuostatas" - }, - "useCustomThresholds": { - "label": "Išplėstiniai slenksčiai", - "description": "Tinkinkite kiekvienos statistikos įspėjimo ir kritinius slenksčius naudodami absoliučius skaičius arba procentines visų pagrindinių kompiuterių dalis" - }, - "thresholdMode": { - "option": { - "absolute": "Absoliutus skaičius", - "percent": "Procentinė visų pagrindinių kompiuterių dalis" - } - }, - "hostsNeedingUpdatesThresholdMode": { - "label": "Atnaujinimų poreikio slenksčio režimas", - "description": "Palyginti atnaujinimų poreikio skaičių kaip absoliučią reikšmę arba procentinę visų pagrindinių kompiuterių dalį" - }, - "hostsNeedingUpdatesWarningAt": { - "label": "Atnaujinimų poreikio įspėjimo slenkstis", - "description": "Įjungti geltoną spalvą, kai reikšmė pasiekia šį slenkstį" - }, - "hostsNeedingUpdatesCriticalAt": { - "label": "Atnaujinimų poreikio kritinis slenkstis", - "description": "Įjungti raudoną spalvą, kai reikšmė pasiekia šį slenkstį" - }, - "securityUpdatesThresholdMode": { - "label": "Saugumo atnaujinimų slenksčio režimas", - "description": "Palyginti saugumo atnaujinimų skaičių kaip absoliučią reikšmę arba procentinę visų pagrindinių kompiuterių dalį" - }, - "securityUpdatesWarningAt": { - "label": "Saugumo atnaujinimų įspėjimo slenkstis", - "description": "Įjungti geltoną spalvą, kai reikšmė pasiekia šį slenkstį" - }, - "securityUpdatesCriticalAt": { - "label": "Saugumo atnaujinimų kritinis slenkstis", - "description": "Įjungti raudoną spalvą, kai reikšmė pasiekia šį slenkstį" - }, - "hostsWithSecurityUpdatesThresholdMode": { - "label": "Pagrindinių kompiuterių su saugumo atnaujinimais slenksčio režimas", - "description": "Palyginti pagrindinių kompiuterių skaičių kaip absoliučią reikšmę arba procentinę visų pagrindinių kompiuterių dalį" - }, - "hostsWithSecurityUpdatesWarningAt": { - "label": "Pagrindinių kompiuterių su saugumo atnaujinimais įspėjimo slenkstis", - "description": "Įjungti geltoną spalvą, kai reikšmė pasiekia šį slenkstį" - }, - "hostsWithSecurityUpdatesCriticalAt": { - "label": "Pagrindinių kompiuterių su saugumo atnaujinimais kritinis slenkstis", - "description": "Įjungti raudoną spalvą, kai reikšmė pasiekia šį slenkstį" - }, - "upToDateHostsThresholdMode": { - "label": "Atnaujintų pagrindinių kompiuterių slenksčio režimas", - "description": "Palyginti atnaujintų pagrindinių kompiuterių skaičių kaip absoliučią reikšmę arba procentinę visų pagrindinių kompiuterių dalį" - }, - "upToDateHostsWarningAt": { - "label": "Atnaujintų pagrindinių kompiuterių įspėjimo slenkstis", - "description": "Įjungti geltoną spalvą, kai reikšmė yra lygi arba didesnė už šį slenkstį, bet neapima visų pagrindinių kompiuterių" - }, - "upToDateHostsCriticalAt": { - "label": "Atnaujintų pagrindinių kompiuterių kritinis slenkstis", - "description": "Įjungti raudoną spalvą, kai reikšmė nukrenta žemiau šio slenksčio" - }, - "totalOutdatedPackagesThresholdMode": { - "label": "Pasenusių paketų slenksčio režimas", - "description": "Palyginti pasenusių paketų skaičių kaip absoliučią reikšmę arba procentinę visų pagrindinių kompiuterių dalį" - }, - "totalOutdatedPackagesWarningAt": { - "label": "Pasenusių paketų įspėjimo slenkstis", - "description": "Įjungti geltoną spalvą, kai reikšmė pasiekia šį slenkstį" - }, - "totalOutdatedPackagesCriticalAt": { - "label": "Pasenusių paketų kritinis slenkstis", - "description": "Įjungti raudoną spalvą, kai reikšmė pasiekia šį slenkstį" - }, - "showOsDistribution": { - "label": "Rodyti OS distribuciją", - "description": "Rodyti stebimų pagrindinių kompiuterių suskirstymą pagal operacinę sistemą" - }, - "osDistributionLimit": { - "label": "OS distribucijos riba", - "description": "Didžiausias rodomų operacinių sistemų skaičius", - "option": { - "3": "3 populiariausios", - "5": "5 populiariausios", - "10": "10 populiariausių", - "all": "Visos" - } - }, - "showOsVersion": { - "label": "Rodyti OS versiją", - "description": "Kai prieinama, prie kiekvienos distribucijos etiketės pridėti OS versiją" - }, - "showComplianceHero": { - "label": "Rodyti atitikties pagrindinį rodiklį", - "description": "Rodyti atitikties žiedą, nurodantį atnaujintų pagrindinių kompiuterių procentą" - }, - "osDisplayMode": { - "label": "OS rodymo režimas", - "description": "Pasirinkite, kaip rodyti operacinės sistemos distribuciją", - "option": { - "bars": "Horizontalios juostos", - "donut": "Žiedinė diagrama" - } - } + "assistant": { + "name": "Asistentas", + "description": "Užbaikite asistento pokalbį tiesiogiai lentoje.", + "unavailable": { + "title": "Asistentas nepasiekiamas", + "description": "Prisijunkite ir paprašykite administratoriaus valdymo skydelyje sukonfigūruoti asistentą." }, + "compact": { + "title": "Asistentas", + "description": "Pakeiskite šio valdiklio dydį, kad galėtumėte čia kalbėtis, arba atidarykite visą pokalbį.", + "open": "Atidaryti asistentą", + "openTitle": "Asistentas atidarytas šoniniame skydelyje", + "openDescription": "Pokalbis lieka viename aktyviame paviršiuje.", + "returnToWidget": "Grąžinti pokalbį į šį valdiklį", + "otherWidgetTitle": "Asistentas aktyvus kitame valdiklyje", + "otherWidgetDescription": "Vienu metu aktyvus lieka tik vienas pokalbio paviršius.", + "useHere": "Naudoti asistentą šiame valdiklyje" + } + }, + "beszel": { "error": { - "internalServerError": "Nepavyko gauti „PatchMon“ duomenų" - } - }, - "bazarr": { - "name": "Bazarr", - "description": "Trūkstamų subtitrų ir būklės iš „Bazarr“ egzemplioriaus apžvalga", - "episodes": "Trūkstami epizodai", - "movies": "Trūkstami filmai", - "providers": "Teikėjų problemos", - "status": "Būklės problemos", - "option": { - "showMissingEpisodes": { - "label": "Rodyti trūkstamus epizodus", - "description": "Rodyti epizodų, kuriems trūksta subtitrų, skaičių" - }, - "showMissingMovies": { - "label": "Rodyti trūkstamus filmus", - "description": "Rodyti filmų, kuriems trūksta subtitrų, skaičių" - }, - "showProviderIssues": { - "label": "Rodyti teikėjų problemas", - "description": "Rodyti subtitrų teikėjų, turinčių problemų, skaičių" - }, - "showHealthIssues": { - "label": "Rodyti būklės problemas", - "description": "Rodyti „Bazarr“ būklės problemų skaičių" - } - }, - "error": { - "internalServerError": "Nepavyko gauti „Bazarr“ duomenų" - } - }, - "mediaMissing": { - "name": "Trūkstama ir eilėje esanti medija", - "description": "Rodo trūkstamus ir eilėje esančius filmus bei epizodus iš „Radarr“ ir „Sonarr“", - "option": { - "showMissing": { - "label": "Rodyti trūkstamus elementus" - }, - "showQueued": { - "label": "Rodyti eilėje esančius elementus" - }, - "pageSize": { - "label": "Elementų puslapyje" - } - }, - "tab": { - "missing": "Trūkstama", - "queued": "Eilėje" - }, - "type": { - "movie": "Filmas", - "episode": "Epizodas" + "internalServerError": "Nepavyko prisijungti prie Beszel. Patikrinkite integracijos parinktis." }, "empty": { - "missing": "Trūkstamų elementų nėra", - "queued": "Eilėje esančių elementų nėra", - "noTabsEnabled": "Valdiklio nuostatose įjunkite bent vieną kortelę" + "noSystems": "Sistemų nerasta" }, - "timeLeft": "Liko laiko" - }, - "traefik": { - "name": "Traefik", - "description": "„Traefik“ maršrutizatorių, paslaugų, tarpinių programų ir įėjimo taškų apžvalga", - "option": { - "showTcp": { - "label": "Rodyti TCP" + "options": { + "statusFilter": { + "label": "Būsenos filtras" }, - "showUdp": { - "label": "Rodyti UDP" + "showCpu": { + "label": "Rodyti CPU" }, - "showEntryPoints": { - "label": "Rodyti įėjimo taškus" + "showMemory": { + "label": "Rodyti atmintį" + }, + "showDisk": { + "label": "Rodyti diską" + }, + "showGpu": { + "label": "Rodyti GPU" + }, + "showLoadAvg": { + "label": "Rodyti apkrovos vidurkį" + }, + "showNet": { + "label": "Rodyti tinklą" + }, + "showTemp": { + "label": "Rodyti temperatūrą" + }, + "showBattery": { + "label": "Rodyti akumuliatorių" + }, + "showServices": { + "label": "Rodyti paslaugas" + }, + "showUptime": { + "label": "Rodyti veikimo laiką" + }, + "showAgent": { + "label": "Rodyti agento versiją" } }, - "instances": "„Traefik“ egzemplioriai", - "versionUnknown": "Versija nežinoma", - "summary": { - "routers": "Maršrutizatoriai", - "entryPoints": "Įėjimo taškai" - }, - "resource": { - "routers": "Maršrutizatoriai", - "services": "Paslaugos", - "middlewares": "Tarpinės programos" - }, - "status": { - "healthy": "Veikia tinkamai", - "errors": "Klaidų: {count}", - "warnings": "Įspėjimų: {count}" - }, - "error": { - "internalServerError": "Nepavyko gauti „Traefik“ duomenų" + "metric": { + "system": "Sistema", + "source": "Integracija", + "hostname": "Pagrindinio kompiuterio vardas", + "cpuModel": "CPU modelis", + "cores": "Branduoliai", + "memoryTotal": "Visa atmintis", + "memory": "Atmintis", + "disk": "Diskas", + "loadAvg": "Apkrovos vidurkis", + "net": "Tinklas", + "temp": "Temperatūra", + "battery": "Akumuliatorius", + "uptime": "Veikimo laikas", + "agent": "Agentas" } }, - "wud": { - "name": "Kas naujo, Docker", - "description": "Rodo, kiek stebimų konteinerių turi prieinamų naujinimų.", - "title": "Kas naujo, Docker", - "monitored": "Stebimi", - "updatesAvailable": "{count, plural, one {# atnaujinimas prieinamas} few {# atnaujinimai prieinami} many {# atnaujinimų prieinama} other {# atnaujinimo prieinama}}", - "updateAvailable": "Galimas naujinimas", - "openReleaseNotes": "Atidaryti leidimo pastabas", + "llamacpp": { + "name": "llama.cpp", + "description": "Rodykite vietinio llama.cpp serverio būklę, įkeltą modelį ir generavimo spartą.", + "title": "llama.cpp", + "status": { + "unhealthy": "Veikia netinkamai ({status})" + }, + "idle": "Neaktyvus", + "speedTooltip": { + "current": "Dabartinė generavimo sparta", + "average": "Vidutinė generavimo sparta nuo paleidimo", + "request": "Vidutinė sparta nuo šios užklausos pradžios" + }, + "busy": "{count, plural, one {Vykdoma # užklausa} few {Vykdomos # užklausos} many {Vykdoma # užklausų} other {Vykdoma # užklausos}}", + "modelInfo": { + "context": "Kontekstas", + "size": "Failo dydis", + "parameters": "Parametrai", + "model": "Modelis", + "quantization": "Kvantavimas" + }, + "stats": { + "tokensProcessed": "Apdoroti žetonai", + "contextUsage": "Konteksto / KV naudojimas", + "cacheHitRate": "Pateikties podėlio pataikymo rodiklis", + "tokensGenerated": "Sugeneruoti žetonai" + }, + "error": { + "unreachable": "llama-server nepasiekiamas" + }, + "unit": { + "speed": "{value} t/s", + "parameters": "{value}B", + "none": "—", + "speedShort": "t/s" + }, "option": { "showTitle": { "label": "Rodyti pavadinimą" }, - "showRing": { - "label": "Rodyti naujinimo žiedą" + "showModelInfo": { + "label": "Rodyti modelio informaciją" }, - "layout": { - "label": "Išdėstymas", + "showContextUsage": { + "label": "Rodyti konteksto naudojimą" + }, + "showCacheHitRate": { + "label": "Rodyti podėlio pataikymo rodiklį" + }, + "showSpeedStats": { + "label": "Rodyti spartos statistiką" + }, + "showRequests": { + "label": "Rodyti užklausų apkrovą" + }, + "showTokenStats": { + "label": "Rodyti bendrą žetonų skaičių" + }, + "showSpeculative": { + "label": "Rodyti spekuliatyvųjį dekodavimą" + } + }, + "advanced": { + "promptSpeed": "Pateikties sparta", + "avgSpeed": "Vidutinė generavimo sparta", + "requests": "Užklausos", + "deferred": "Atidėtos", + "slots": "Užimti {processing}/{total} lizdai", + "speculative": "Spekuliatyvusis dekodavimas", + "avgPrompt": "Vidutinė pateiktis", + "specDrafts": "Spekuliatyvūs juodraščiai", + "specAccepted": "Spekuliatyviai priimti žetonai", + "specDraftTokens": "Spekuliatyvių juodraščių žetonai" + } + }, + "stats": { + "name": "Statistika", + "description": "Sujunkite savo integracijų statistiką viename konfigūruojamame valdiklyje.", + "configure": "Konfigūruoti metrikas", + "refresh": "Atnaujinti statistiką", + "empty": "Atidarykite valdiklio parinktis, pasirinkite integracijas ir pridėkite metrikas.", + "editorHelp": "Pridėkite metrikas iš šiam valdikliui pasirinktų integracijų. Pakeitimai išsaugomi kartu su jūsų valdymo skydeliu.", + "source": "Integracija", + "metric": "Metrika", + "noMetrics": "Šiai integracijai statistikos nėra", + "add": "Pridėti metriką", + "label": "Pasirinktinė etiketė", + "hidden": "Paslėpta", + "compact": "Sutraukti skaičius", + "moveUp": "Pakelti aukštyn", + "moveDown": "Perkelti žemyn", + "remove": "Pašalinti metriką", + "loading": "Įkeliama…", + "unavailable": "Nepasiekiama", + "refreshFailed": "Atnaujinti nepavyko — rodomi išsaugoti duomenys", + "stale": "Išsaugoti duomenys — atnaujinkite, kad atnaujintumėte", + "table": { + "value": "Reikšmė", + "status": "Būsena" + }, + "option": { + "table": { + "label": "Lentelės rodinys" + }, + "rows": { + "label": "Sutrauktos eilutės" + }, + "showIcon": { + "label": "Rodyti šaltinio piktogramą" + }, + "spacing": { + "label": "Tarpai", "option": { - "horizontal": { - "label": "Horizontalus" + "xs": { + "label": "Sutrauktas" }, - "vertical": { - "label": "Vertikalus" + "sm": { + "label": "Patogus" + }, + "md": { + "label": "Erdvus" } } }, - "showUpdateList": { - "label": "Rodyti konteinerių naujinimų sąrašą", - "description": "Išvardija kiekvieną stebimą konteinerį, kuriam yra prieinamas atvaizdo naujinimas" + "entries": { + "label": "Metrikos" + }, + "plain": { + "label": "Pašalinti kortelių fonus" } - } + }, + "fetchFailed": "Nepavyko gauti statistikos", + "viewOptions": "Tinkinti šį rodinį", + "moreMetrics": "Išplėstiniame rodinyje dar {count}", + "localHelp": "Išdėstymas, formatavimas ir matomumas taikomi tik šiam rodiniui. Bendrinamos lentos nustatymai lieka nepakitę.", + "plain": "Pašalinti kortelių fonus", + "resetView": "Atkurti rodinį", + "allHidden": "Šiame rodinyje visi metrikos duomenys paslėpti. Norėdami juos atkurti, pasirinkite „Tinkinti šį rodinį“." + }, + "wazuh": { + "target": { + "api": "Wazuh serverio API", + "indexer": "Wazuh indeksatorius", + "wazuh": "Wazuh" + }, + "severity": { + "low": "Žemas", + "medium": "Vidutinis", + "high": "Aukštas", + "critical": "Kritinis" + }, + "error": { + "unauthorized": { + "title": "{target} atmetė kredencialus", + "description": "Patikrinkite Wazuh integracijoje išsaugotą naudotojo vardą ir slaptažodį. Serverio API (55000 prievadas) ir indeksavimo priemonė (9200 prievadas) naudoja skirtingus naudotojus." + }, + "certificate": { + "title": "{target} sertifikatas nepatikimas", + "description": "Pagal numatytuosius nustatymus Wazuh naudoja savarankiškai pasirašytą sertifikatą. Integracijoje paleiskite „Tikrinti ryšį“ ir patvirtinkite sertifikatą arba skiltyje „Nustatymai → Sertifikatai“ pridėkite savo CA." + }, + "unreachable": { + "title": "Nepavyksta pasiekti {target}", + "description": "Pagrindinis kompiuteris atmetė arba nutraukė ryšį. Patikrinkite URL, prievadą ir užkardą. Pagal numatytuosius nustatymus indeksavimo priemonė viskas viename dieginyje klauso tik vietinio pagrindinio kompiuterio." + }, + "timeout": { + "title": "Baigėsi {target} skirtasis laikas", + "description": "Per 15 sekundžių nebuvo gautas atsakymas. Paslauga gali būti perkrauta arba adresas gali būti neteisingas." + }, + "status": { + "title": "{target} grąžino klaidą", + "description": "Užklausa nepavyko, HTTP būsena {status}." + }, + "invalidResponse": { + "title": "Netikėtas atsakymas iš {target}", + "description": "Patikrinkite, ar URL nurodo Wazuh serverio API arba indeksavimo priemonę, o ne valdymo skydą." + }, + "indexerRequired": { + "title": "Reikalingi Wazuh indeksatoriaus kredencialai", + "description": "Įspėjimai, pažeidžiamumai ir failų vientisumo įvykiai nuskaitomi iš Wazuh indeksavimo priemonės. Integracijoje pridėkite indeksavimo priemonės URL, naudotojo vardą ir slaptažodį." + }, + "unknown": { + "title": "Nepavyko įkelti duomenų iš {target}", + "description": "Išsamesnės informacijos ieškokite Homarr žurnaluose." + } + }, + "range": { + "1h": "1 val", + "24h": "24 val", + "7d": "7 d", + "30d": "30 d" + }, + "levelTooltip": "Taisyklės lygis {level} ({severity})" + }, + "wazuhAgents": { + "name": "Wazuh agentai", + "description": "Rikiuojamas Wazuh agentų sąrašas su būsena, OS, versija ir paskutiniu ryšiu", + "option": { + "statusFilter": { + "label": "Rodyti agentus" + }, + "sortBy": { + "label": "Rikiuoti pagal" + }, + "showVersion": { + "label": "Rodyti Wazuh versijos stulpelį" + }, + "showGroups": { + "label": "Rodyti grupių stulpelį" + } + }, + "title": "Agentai", + "total": "{count} agentai", + "status": { + "active": "Aktyvus", + "disconnected": "Atsijungęs", + "neverConnected": "Niekada neprisijungęs", + "pending": "Laukiama" + }, + "statusLabel": { + "active": "Aktyvus", + "disconnected": "Atsijungęs", + "never_connected": "Niekada neprisijungęs", + "pending": "Laukiama", + "unknown": "Nežinoma" + }, + "live": "Tiesiogiai", + "snapshot": "Momentinė kopija, sena {age}", + "snapshotHint": "Nuskaitoma iš Wazuh valdymo skydo agentų momentinės kopijos („wazuh-monitoring“), sukurtos {time}. Norėdami gauti tiesioginius duomenis, pridėkite serverio API kredencialus.", + "staleSnapshot": "Agentų momentinė kopija iš {time} yra pasenusi. Patikrinkite, ar veikia Wazuh valdymo skydo stebėjimo užduotis, arba pridėkite serverio API kredencialus.", + "noDisconnected": "Visi agentai prisijungę", + "empty": "Šio filtro neatitinka nė vienas agentas", + "column": { + "status": "Būsena", + "name": "Užduoties pavadinimas", + "ip": "IP", + "os": "OS", + "version": "Versija", + "lastKeepAlive": "Ryšys", + "groups": "Grupės" + }, + "outdated": "Senesnė nei naujausia agento versija ({version})" + }, + "wazuhAlerts": { + "name": "Wazuh įspėjimų sklaidos kanalas", + "description": "Naujausi Wazuh įspėjimai su lygiu, MITRE ATT&CK metodais, agentu ir šaltinio IP", + "option": { + "minLevel": { + "label": "Mažiausias taisyklės lygis", + "description": "Wazuh lygiai: 0–6 – žemas, 7–11 – vidutinis, 12–14 – aukštas, 15+ – kritinis" + }, + "hours": { + "label": "Laiko intervalas (valandomis)" + }, + "limit": { + "label": "Įspėjimų skaičius" + }, + "showMitre": { + "label": "Rodyti MITRE ATT&CK metodus" + }, + "showAgent": { + "label": "Rodyti agentą" + }, + "showSourceIp": { + "label": "Rodyti šaltinio IP" + }, + "showRuleId": { + "label": "Rodyti taisyklės ID" + } + }, + "title": "Įspėjimai · lygis {level}+ · {hours} val", + "empty": "Šiame lygyje įspėjimų nėra. Viskas ramu.", + "rule": "Taisyklė {id}", + "openInDashboard": "Atidaryti šį įspėjimą Wazuh valdymo skydelyje" + }, + "wazuhSummary": { + "name": "Wazuh įspėjimo svarba", + "description": "Įspėjimų svarbos suskirstymas su tendencija, palyginta su ankstesniu laikotarpiu", + "option": { + "range": { + "label": "Laikotarpis" + }, + "showTrend": { + "label": "Rodyti tendenciją, palygintą su ankstesniu laikotarpiu" + }, + "showFooter": { + "label": "Rodyti poraštę" + } + }, + "title": "Įspėjimų svarba · {range}", + "alerts": "įspėjimai", + "none": "Įspėjimų nėra", + "trend": { + "new": "nauji", + "tooltip": "Ankstesnis laikotarpis: {previous}" + }, + "previous": "Ankstesni {range}: {count}", + "maxLevel": "Didžiausias lygis {level}", + "health": "Indeksatoriaus būklė: {status}", + "manager": "Tvarkytuvė {version}" + }, + "wazuhTimeline": { + "name": "Wazuh įspėjimų laiko juosta", + "description": "Sluoksninė Wazuh įspėjimų diagrama pagal svarbą laikui bėgant", + "option": { + "range": { + "label": "Laikotarpis" + }, + "interval": { + "label": "Intervalas" + }, + "chartType": { + "label": "Diagramos tipas" + }, + "yScale": { + "label": "Y ašies mastelis", + "description": "Kvadratinė šaknis leidžia matyti aukšto ir kritinio lygio įspėjimus šalia tūkstančių žemo lygio įspėjimų" + }, + "minLevel": { + "label": "Mažiausias taisyklės lygis" + }, + "showLegend": { + "label": "Rodyti legendą su bendromis reikšmėmis" + } + }, + "title": "Įspėjimų laiko juosta · {range}", + "total": "{count} įspėjimai", + "interval": "kas {interval}" + }, + "wazuhTopList": { + "name": "Populiariausių Wazuh sąrašas", + "description": "Populiariausios taisyklės, agentai, šaltinio IP adresai arba MITRE ATT&CK taktikos ir metodai pagal įspėjimų skaičių", + "option": { + "kind": { + "label": "Reitinguoti" + }, + "range": { + "label": "Laikotarpis" + }, + "limit": { + "label": "Įrašų skaičius" + }, + "minLevel": { + "label": "Minimalus taisyklės lygis" + }, + "showBars": { + "label": "Rodyti juostas" + } + }, + "title": { + "rules": "Populiariausios taisyklės · {range}", + "agents": "Populiariausi agentai · {range}", + "sourceIps": "Populiariausi šaltinio IP adresai · {range}", + "mitreTactics": "MITRE taktikos · {range}", + "mitreTechniques": "MITRE metodai · {range}" + }, + "empty": { + "rules": "Šiuo laikotarpiu įspėjimų nėra", + "agents": "Šiuo laikotarpiu įspėjimų nėra", + "sourceIps": "Šiuo laikotarpiu nėra įspėjimų su šaltinio IP adresu", + "mitreTactics": "Šiuo laikotarpiu nėra įspėjimų, susietų su MITRE ATT&CK", + "mitreTechniques": "Šiuo laikotarpiu nėra įspėjimų, susietų su MITRE ATT&CK" + }, + "totalTooltip": "Atitinkančių įspėjimų: {count}", + "private": "LAN", + "public": "Vieša", + "agents": "Aptikta {count} agentuose", + "others": "Dar {count} įspėjimų kituose įrašuose" + }, + "wazuhVulnerabilities": { + "name": "Wazuh pažeidžiamumai", + "description": "Pažeidžiamumų skaičius, populiariausi CVE ir pažeidžiamiausi agentai", + "option": { + "cveOrder": { + "label": "Reitinguoti CVE pagal" + }, + "minSeverity": { + "label": "CVE pavojingumą" + }, + "cveLimit": { + "label": "CVE skaičius" + }, + "agentLimit": { + "label": "Agentų skaičius" + }, + "showAgents": { + "label": "Rodyti pažeidžiamiausius agentus" + } + }, + "title": "Pažeidžiamumai", + "topCves": "Populiariausi CVE", + "score": "Balas", + "agentsShort": "Agentai", + "topAgents": "Pažeidžiamiausi agentai", + "criticalHigh": "Kritiniai / aukšti", + "totalTooltip": "Radinių: {count}, agentų: {agents}", + "affected": "{count} agentų", + "empty": "Pažeidžiamumų neaptikta", + "distribution": "Pavojingumo pasiskirstymas. Nerodomi {unscored} radiniai be balo.", + "worst": "Blogiausias: {id} ({score}), agentų: {agents}" + }, + "wazuhFim": { + "name": "Wazuh failų vientisumas", + "description": "Naujausi failų vientisumo stebėjimo („syscheck“) įvykiai", + "option": { + "range": { + "label": "Laikotarpis" + }, + "event": { + "label": "Įvykiai" + }, + "limit": { + "label": "Įvykių skaičius" + }, + "includeRegistry": { + "label": "Įtraukti „Windows“ registro įvykius" + } + }, + "title": "Failų vientisumas · {range}", + "event": { + "added": "Pridėjimo data", + "modified": "Pakeistas", + "deleted": "Ištrintas", + "unknown": "Pakeistas" + }, + "empty": "Šiuo laikotarpiu failų vientisumo įvykių nėra", + "user": "naudotojas: {user}", + "registry": "Registras" + }, + "wazuhAuthFailures": { + "name": "Wazuh autentifikavimo klaidos", + "description": "Nesėkmingi prisijungimai ir grubios jėgos atakų įspėjimai pagal agentą su valandinėmis diagramomis", + "option": { + "hours": { + "label": "Laikotarpis (val.)" + }, + "limit": { + "label": "Agentų skaičius" + }, + "showSourceIps": { + "label": "Rodyti populiariausius šaltinio IP adresus" + } + }, + "title": "Autentifikavimo klaidos · {hours} val.", + "seriesTooltip": "Visi agentai per pastarąsias {hours} val.", + "peak": "Pikas: {count} / intervalą", + "empty": "Šiuo laikotarpiu nesėkmingų prisijungimų nėra", + "failed": "Nesėkmingi prisijungimai", + "failedHint": "Pavienės autentifikavimo klaidos (sshd, PAM, „Windows“ prisijungimas, negaliojantys naudotojai)", + "bruteForce": "Grubios jėgos ataka", + "bruteForceHint": "Susietos grubios jėgos atakų taisyklės (daug nesėkmingų bandymų per trumpą laiką, MITRE T1110)", + "sourceIps": "Šaltinio IP adresai", + "ipTooltip": "{ip}: {count} klaidų", + "bruteForceCount": "Grubios jėgos atakų: {count}" } }, "widgetPreview": { @@ -4004,7 +5732,76 @@ } }, "board": { + "emptyState": { + "title": "Sukurkite pirmąjį rodinį", + "description": "Pridėkite valdiklį arba programėlę, prijunkite paslaugą ir naudokite jos duomenis šioje lentoje.", + "addWidget": "Pridėti valdiklį", + "addApp": "Pridėti programėlę", + "connectService": "Prijungti paslaugą" + }, + "setupChecklist": { + "title": "Paverskite šią lentą naudinga", + "description": "Tęskite nuo ten, kur baigėte. Eiga priklauso nuo šioje lentoje jau esančio turinio.", + "collapse": "Sutraukti sąrankos kontrolinį sąrašą", + "dismiss": "", + "resume": "Tęsti sąranką ({completed}/{total})", + "progress": "Lentos sąrankos eiga", + "step": { + "content": { + "label": "Pridėti naudingą turinį", + "description": "Pasirinkite valdiklį ir sukonfigūruokite jį prieš įdėdami." + }, + "app": { + "label": "Prisegti programėlę", + "description": "Laikykite paslaugą ar įrankį pasiekiamą vienu spustelėjimu iš šios lentos." + }, + "service": { + "label": "Prijungti paslaugą", + "description": "Atrakinkite suderinamų valdiklių tiesioginius duomenis ir veiksmus.", + "permissionDescription": "Administratorius gali prijungti paslaugą ir įjungti tiesioginius duomenis.", + "action": "Prijungti" + } + } + }, "action": { + "addContent": "Pridėti lentos turinį", + "settings": "Lentos nustatymai", + "switch": "Perjungti lentą", + "switcher": { + "title": "Perjungti lentą", + "search": { + "empty": "Lentų, atitinkančių „{search}“, nėra." + }, + "results": "Prieinamos lentos", + "preview": "{name} peržiūra su {count} elementų", + "currentHidden": "Dabartinė lenta: {name}", + "keyboard": { + "navigate": "Naršyti", + "open": "Atidaryti", + "instructions": "Įveskite tekstą lentoms filtruoti. Rodyklių klavišais pereikite per rezultatus, o klavišu „Enter“ atidarykite lentą." + }, + "empty": { + "title": "Kitų lentų nėra", + "description": "Kitų lentų, kurias galėtumėte pasiekti, nėra." + }, + "error": "Nepavyko įkelti lentų." + }, + "create": { + "availability": { + "checking": "Tikrinamas prieinamumas…", + "available": "{name} prieinama" + }, + "notification": { + "success": { + "title": "Lenta sukurta", + "message": "Lenta „{name}“ sukurta" + }, + "error": { + "title": "Nepavyko sukurti lentos", + "message": "Nepavyko sukurti lentos „{name}“" + } + } + }, "duplicate": { "title": "Dubliuoti lentą", "message": "Bus sukurta suvestinės {name} kopija su visu jos turiniu. Jei valdikliai nurodo integracijas, kurių neleidžiama naudoti, jos bus pašalintos.", @@ -4020,14 +5817,19 @@ } }, "edit": { + "enter": "Redaguoti lentą", + "save": "Išsaugoti lentą", + "exit": "Išeiti iš redagavimo režimo", "notification": { "success": { - "title": "Pakeitimai pritaikyti sėkmingai", "message": "Lenta sėkmingai išsaugota" }, "error": { - "title": "Nepavyko pritaikyti pakeitimų", "message": "Lentos išsaugoti nepavyko" + }, + "loadError": { + "title": "Nepavyko pradėti redagavimo", + "message": "Nepavyko įkelti lentos redaktoriaus. Jūsų skydelis vis dar pasiekiamas peržiūros režimu." } }, "confirmLeave": { @@ -4035,62 +5837,6 @@ "message": "Turite neišsaugotų pakeitimų, ar tikrai norite išeiti?" } }, - "oldImport": { - "label": "Importuoti iš homarr prieš 1.0.0", - "notification": { - "success": { - "title": "Importavimas sėkmingas", - "message": "Lenta sėkmingai importuota" - }, - "error": { - "title": "Importavimas nepavyko", - "message": "Lentos importuoti nepavyko, patikrinkite žurnalus dėl išsamesnės informacijos" - } - }, - "form": { - "file": { - "label": "Pasirinkite JSON failą", - "invalidError": "Netinkamas konfigūracijos failas" - }, - "apps": { - "label": "Programėlės", - "avoidDuplicates": { - "label": "Vengti dublikatų", - "description": "Nepaiso programėlių, kai jau yra programėlė su tokiu pat href" - }, - "onlyImportApps": { - "label": "Importuoti tik programėles", - "description": "Prideda tik programėles, lentą reikia perkurti rankiniu būdu" - } - }, - "name": { - "label": "Lentos pavadinimas" - }, - "screenSize": { - "label": "Ekrano dydis", - "description": "Iki 1.0 versijos buvo trys skirtingi režimai, todėl galėjote pasirinkti stulpelių skaičių kiekvienam ekrano dydžiui", - "option": { - "sm": "Mažas", - "md": "Vidutinis", - "lg": "Didelis" - } - }, - "sidebarBehavior": { - "label": "Šoninės juostos elgsena", - "description": "Šoninės juostos buvo pašalintos 1.0, galite pasirinkti, kas turėtų nutikti su jose esančiais elementais.", - "option": { - "lastSection": { - "label": "Paskutinė sekcija", - "description": "Šoninė juosta bus rodoma po paskutine sekcija" - }, - "removeItems": { - "label": "Pašalinti elementus", - "description": "Elementai, esantys šoninėje juostoje, bus pašalinti" - } - } - } - } - }, "quickCreateApp": { "modal": { "title": "Sukurti programėlę skrydžio metu", @@ -4098,6 +5844,12 @@ } } }, + "landmark": { + "canvas": "Skydelio drobė", + "leftRail": "Kairioji skydelio juosta", + "rightRail": "Dešinioji skydelio juosta", + "items": "Skydelio elementai" + }, "field": { "pageTitle": { "label": "Puslapio pavadinimas" @@ -4167,7 +5919,8 @@ } }, "primaryColor": { - "label": "Pagrindinė spalva" + "label": "Pagrindinė spalva", + "locked": "Administratorius išlaiko egzemplioriaus prekės ženklo spalvą kiekvienoje lentoje." }, "secondaryColor": { "label": "Antrinė spalva" @@ -4207,9 +5960,6 @@ "xl": "Labai didelis" } }, - "name": { - "label": "Pavadinimas" - }, "isPublic": { "label": "Vieša", "description": "Viešos lentos yra prieinamos visiems, net ir be paskyros." @@ -4229,9 +5979,44 @@ "title": "Išdėstymas", "responsive": { "title": "Prisitaikantys išdėstymai", + "description": "Kiekvienas išdėstymas išsaugo savo valdiklių pozicijas ir dydžius. Mobilusis ir bazinis išdėstymai visada prieinami; pasirinktinius išdėstymus pridėkite ties bet kuriuo papildomu lūžio tašku.", "action": { "add": "Pridėti išdėstymą" } + }, + "role": { + "mobile": "Mobilusis", + "base": "Bazinis", + "custom": "Pasirinktinis" + }, + "custom": { + "defaultName": "Pasirinktinis išdėstymas" + }, + "mobile": { + "breakpointDescription": "Mobilusis išdėstymas visada naudojamas nuo 0 piks. iki kito išdėstymo lūžio taško." + }, + "preview": { + "columns": "stulpeliai", + "empty": "Šis išdėstymas tuščias", + "dynamicSection": "Dinaminė sekcija", + "editorWidthLabel": "{layoutName} · {width}px" + }, + "reset": { + "action": "Atkurti iš bazinio", + "confirm": { + "title": "Atkurti „{layoutName}“?", + "message": "Tai pakeis kiekvieną šiame išdėstyme išsaugotą poziciją ir dydį nauju išdėstymu, sugeneruotu iš bazinio. Šio veiksmo negalima atšaukti." + } + }, + "edit": { + "action": "Redaguoti išdėstymą", + "saveAndEdit": "Išsaugoti ir redaguoti", + "save": "Išsaugoti išdėstymą", + "cancel": { + "action": "Atšaukti išdėstymo redagavimą", + "title": "Atmesti išdėstymo pakeitimus?", + "message": "Neišsaugoti šio išdėstymo pakeitimai bus atmesti." + } } }, "background": { @@ -4268,10 +6053,7 @@ "rename": { "label": "Pervardyti lentą", "description": "Pakeitus pavadinimą, nutrūks visos nuorodos į šią lentą.", - "button": "Keisti pavadinimą", - "modal": { - "title": "Pervardyti lentą" - } + "button": "Keisti pavadinimą" }, "visibility": { "label": "Keisti lentos matomumą", @@ -4295,9 +6077,7 @@ } }, "delete": { - "label": "Ištrinti šią lentą", "description": "Ištrynus lentą, kelio atgal nėra. Prašome būti tikri.", - "button": "Ištrinti šią lentą", "confirm": { "title": "Ištrinti lentą", "description": "Ar tikrai norite ištrinti šią lentą? Tai visam laikui ištrins lentą ir visą jos turinį." @@ -4342,28 +6122,41 @@ }, "layout": { "field": { - "name": { - "label": "Vardas" - }, "columnCount": { "label": "Stulpelių skaičius" }, "breakpoint": { "label": "Lūžio taškas", "description": "Išdėstymas bus naudojamas visuose ekranuose, didesniuose už šį lūžio tašką, iki kito didesnio lūžio taško." + }, + "gutters": { + "label": "Fiksuotos šoninės juostos", + "description": "Rezervuokite iki trijų skydelio stulpelių kiekvienoje pusėje. Likusi drobė persirikiuos automatiškai.", + "left": { + "label": "Kairioji šoninė juosta", + "description": "Slinkstant skydeliui ši sritis liks matoma.", + "thumbLabel": "Kairiosios šoninės juostos plotis" + }, + "right": { + "label": "Dešinioji šoninė juosta", + "description": "Slinkstant skydeliui ši sritis liks matoma.", + "thumbLabel": "Dešiniosios šoninės juostos plotis" + }, + "width": { + "label": "Plotis stulpeliais" + }, + "preview": { + "label": "Skydelio išdėstymo peržiūra" + } } } }, "management": { "metaTitle": "Valdymas", - "title": { - "morning": "Labas rytas, {username}", - "afternoon": "Laba diena, {username}", - "evening": "Labas vakaras, {username}" - }, "notFound": { "title": "Nerasta", - "text": "Nepavyko rasti prašomo ištekliaus" + "text": "Nepavyko rasti prašomo ištekliaus", + "backToHome": "Grįžti į valdymo pradžią" }, "error": { "title": "Nepavyko įkelti šio puslapio", @@ -4372,19 +6165,10 @@ }, "navbar": { "items": { - "workshop": "Workshop", "home": "Pagrindinis", - "boards": "Lentos", - "apps": "Programėlės", - "integrations": "Integracijos", - "searchEngies": "Paieškos sistemos", - "medias": "Medijos", "users": { - "label": "Vartotojai", "items": { - "manage": "Valdyti", - "invites": "Pakvietimai", - "groups": "Grupės" + "manage": "Valdyti" } }, "tools": { @@ -4392,10 +6176,7 @@ "items": { "docker": "Docker", "kubernetes": "Kubernetes", - "logs": "Žurnalai", "api": "API ir MCP", - "certificates": "Sertifikatai", - "tasks": "Užduotys", "backup": "Atsarginė kopija" } }, @@ -4409,21 +6190,12 @@ "sourceCode": "Pirminis kodas" } }, - "about": "Apie" + "about": "Apie", + "assistant": "Asistentas" } }, "page": { "home": { - "statistic": { - "board": "Lentos", - "user": "Vartotojai", - "invite": "Pakvietimai", - "integration": "Integracijos", - "app": "Programėlės", - "group": "Grupės", - "searchEngine": "Paieškos sistemos", - "media": "Medijos" - }, "statisticLabel": { "boards": "Lentos", "resources": "Ištekliai", @@ -4461,13 +6233,8 @@ "tooltip": "Ši suvestinė bus rodoma kaip jūsų mobilioji suvestinė" } }, - "duplicate": { - "label": "Dubliuoti lentą" - }, "delete": { - "label": "Ištrinti visam laikui", "confirm": { - "title": "Ištrinti lentą", "description": "Ar tikrai norite ištrinti {name} lentą?" } } @@ -4476,28 +6243,82 @@ "public": "Ši lenta yra vieša", "private": "Ši lenta yra privati" }, - "noResults": { - "title": "Dar nėra lentų" + "preview": { + "label": "{name} išdėstymo peržiūra su {count} elementų", + "unknownCreator": "Nežinomas kūrėjas" }, - "modal": { - "createBoard": { - "field": { - "name": { - "label": "Pavadinimas" - } - } - } + "noResults": { + "title": "Dar nėra lentų", + "description": "Sukurkite lentą, kad vienoje vietoje išdėstytumėte savo programėles ir valdiklius." } }, "media": { "includeFromAllUsers": "Įtraukti mediją iš visų vartotojų" }, "user": { - "back": "Atgal į vartotojus", "fieldsDisabledExternalProvider": "Kai kurie laukai yra išjungti, nes juos valdo išorinis autentifikacijos teikėjas.", "setting": { "general": { "title": "Bendras", + "header": { + "title": "Antraštės studija", + "badge": "Asmeninis", + "description": "Vilkkite valdiklius bet kurioje eilutės vietoje. Kairė, centras ir dešinė lieka fiksuoti, o valdikliai juda aplink juos.", + "device": { + "desktop": "Stalinis kompiuteris", + "mobile": "Mobilusis" + }, + "zones": { + "left": "Kairėje", + "center": "Centras", + "right": "Dešinėje" + }, + "action": { + "hide": "Slėpti antraštę", + "show": "Rodyti antraštę", + "configure": "Perkelti arba konfigūruoti {item}", + "remove": "Pašalinti {item}", + "dropIntoZone": "Perkelti į sekciją „{zone}“" + }, + "preview": { + "board": "Skydelio „{name}“ peržiūra", + "empty": "Skydelio išdėstymas neprieinamas" + }, + "available": { + "title": "Prieinami valdikliai", + "description": "Pridėkite valdiklį, tada nutempkite visą jo mygtuką į vietą aukščiau.", + "requiredAlways": "Šis valdiklis būtinas, bet galite jį perkelti bet kurioje antraštės vietoje.", + "allAdded": "Visi integruoti valdikliai jau yra jūsų antraštėje.", + "add": "Pridėti {item}", + "boardShortcut": "Lentos nuoroda", + "chooseBoard": "Pasirinkti lentą" + }, + "configuration": { + "description": "Šis valdiklis išlaiko tokį patį dydį kaip veikiančioje antraštėje.", + "searchDisplay": { + "input": "Paieškos juosta", + "icon": "Tik piktograma" + }, + "logoDisplay": { + "logo": "Tik logotipas", + "logoAndText": "Logotipas + tekstas" + } + }, + "items": { + "logo": "Logotipas", + "search": "Ieškoti", + "home": "Pradžios lenta", + "boardSwitcher": "Lentos", + "assistant": "Asistentas", + "docker": "Docker", + "boardEdit": "Redaguoti lentą", + "boardSettings": "Lentos nustatymai", + "settings": "Jūsų nustatymai", + "themeToggle": "Perjungti temą", + "user": "Paskyra", + "boardUnavailable": "Lenta neprieinama" + } + }, "item": { "language": "Kalba ir regionas", "board": { @@ -4531,14 +6352,10 @@ }, "security": { "title": "Apsauga" - }, - "board": { - "title": "Lentos" } }, "list": { - "metaTitle": "Tvarkyti vartotojus", - "title": "Vartotojai" + "metaTitle": "Tvarkyti vartotojus" }, "edit": { "metaTitle": "Redaguoti vartotoją {username}" @@ -4592,9 +6409,6 @@ } }, "field": { - "id": { - "label": "ID" - }, "creator": { "label": "Kūrėjas" }, @@ -4618,10 +6432,7 @@ }, "setting": { "title": "Nustatymai", - "alert": "Grupių nuostatos taikomos pagal grupių tvarką sąraše. Viršuje esančios nuostatos perrašo apačioje esančias nuostatas.", - "board": { - "title": "Lentos" - } + "alert": "Grupių nuostatos taikomos pagal grupių tvarką sąraše. Viršuje esančios nuostatos perrašo apačioje esančias nuostatas." }, "members": { "title": "Nariai", @@ -4629,10 +6440,7 @@ "notFound": "Narių nerasta" }, "permissions": { - "title": "Leidimai", - "form": { - "unsavedChanges": "Turite neišsaugotų pakeitimų!" - } + "title": "Leidimai" } } }, @@ -4641,12 +6449,10 @@ "notification": { "success": { "message": "Nustatymai sėkmingai išsaugoti" - }, - "error": { - "message": "Nepavyko išsaugoti nustatymų" } }, "section": { + "analyticsDocumentation": "Peržiūrėkite, kokius analizės duomenis renka „Homarr“", "analytics": { "title": "Analizė", "general": { @@ -4675,7 +6481,6 @@ } }, "board": { - "title": "Lentos", "homeBoard": { "label": "Visuotinė pagrindinė lenta", "mobileLabel": "Visuotinė mobilioji lenta", @@ -4694,7 +6499,6 @@ } }, "user": { - "title": "", "enableGravatar": { "label": "Įjungti „Gravatar“", "description": "Jei nenustatytas pasirinktinis avataras ir sukonfigūruotas el. paštas, naudojamas avataras iš „Libravatar“ arba „Gravatar“" @@ -4710,12 +6514,86 @@ "appearance": { "title": "Išvaizda", "defaultColorScheme": { - "label": "Numatytoji spalvų schema", + "label": "Numatytoji spalvų schema" + } + }, + "branding": { + "title": "Egzemplioriaus prekės ženklas", + "groups": { + "identity": "Tapatybė", + "appearance": "Išvaizda", + "customCss": "Pasirinktinis CSS", + "authentication": "Autentifikavimas" + }, + "identity": { + "description": "Programėlės logotipas yra didesnis ženklas, naudojamas programėlėje, prisijungimo puslapiuose ir įdiegtose programėlėse. Naršyklės piktograma („favicon“) yra maža piktograma skirtukuose ir žymėse; jei ji tuščia, naudojamas programėlės logotipas." + }, + "appName": { + "label": "Programėlės pavadinimas" + }, + "greeting": { + "label": "Pasirinktinis pasisveikinimas" + }, + "logo": { + "label": "Programėlės logotipas", + "placeholder": "/logo/logo.png" + }, + "favicon": { + "label": "Naršyklės piktograma („favicon“)", + "placeholder": "Naudojamas programėlės logotipas" + }, + "primaryColor": { + "label": "Pagrindinė spalva" + }, + "secondaryColor": { + "label": "Antrinis akcentas" + }, + "lockPrimaryColor": { + "label": "Išlaikyti šią spalvą kiekvienoje lentoje", + "description": "Neleidžia lentos spalvoms pakeisti programėlės akcento." + }, + "signInBackground": { + "label": "Autentifikavimo fonas", + "placeholder": "https://example.com/background.jpg" + }, + "signInOverlay": { + "label": "Fono perdanga" + }, + "defaultRadius": { + "label": "Kampų stilius", "options": { - "auto": "Automatinis", - "light": "Šviesi", - "dark": "Tamsi" + "xs": "Glaudus", + "sm": "Subtilus", + "md": "Subalansuotas", + "lg": "Suapvalintas", + "xl": "Švelnus" } + }, + "customCss": { + "label": "Visuotinis pasirinktinis CSS", + "description": "Taikoma kiekviename puslapyje. Pasirinktinis lentos CSS gali tai pakeisti." + }, + "authVisibility": { + "description": "Pasirinkite, kas rodoma kiekviename autentifikavimo puslapyje.", + "appName": "Programėlės pavadinimas", + "logo": "Programėlės logotipas", + "greeting": "Pasisveikinimas" + }, + "summary": { + "title": "Dabartinis prekės ženklas", + "cornerStyle": "Kampų stilius", + "palette": "Paletė", + "backgroundConfigured": "Pasirinktinis fonas · {overlay}% perdanga", + "backgroundDefault": "Numatytasis fonas", + "greetingConfigured": "Pasirinktinis pasisveikinimas", + "greetingDefault": "Numatytasis pasisveikinimas", + "boardColorLocked": "Lentos spalva užrakinta", + "boardColorFlexible": "Lentos spalvas galima keisti", + "appName": "Užduoties pavadinimas", + "logo": "Logotipas", + "greeting": "Pasisveikinimas", + "on": "Įjungta", + "off": "Išjungta" } }, "culture": { @@ -4723,12 +6601,177 @@ "defaultLocale": { "label": "Numatytoji kalba" } + }, + "assistant": { + "loading": "Įkeliama asistento konfigūracija", + "title": "Asistentas", + "description": "Prijunkite su „OpenAI“ suderinamą modelio galinį tašką viso egzemplioriaus asistentui.", + "security": { + "description": "API raktai ir papildomos antraštės reikšmės „Homarr“ duomenų bazėje šifruojami. Jie niekada negrąžinami naršyklėms. Modelio užklausos siunčiamos tiesiai iš „Homarr“ serverio į sukonfigūruotą galinį tašką." + }, + "overview": { + "connectionReady": "Ryšys paruoštas", + "unsavedChanges": "Neišsaugoti pakeitimai", + "setupRequired": "Reikalinga sąranka", + "disabled": "Išjungta", + "noModel": "Modelis nepasirinktas" + }, + "connection": { + "endpointTitle": "Teikėjas ir galinis taškas", + "description": "Pasirinkite išankstinį nustatymą arba prijunkite bet kurią paslaugą, įgyvendinančią „OpenAI Chat Completions“ API.", + "save": "Išsaugoti teikėjo ryšį" + }, + "credentials": { + "title": "Prisijungimo duomenys", + "description": "Pridėkite šiam galiniam taškui reikalingas paslaptis. Išsaugotos reikšmės lieka užšifruotos ir negali būti perskaitytos.", + "required": "Raktas būtinas", + "optional": "Raktas pasirinktinis", + "workshop": "„GitHub“ prisijungimas kiekvienam naudotojui" + }, + "provider": { + "title": "Teikėjas", + "groups": { + "free": "Nemokamai su „Homarr“", + "hosted": "Priglobti teikėjai", + "local": "Vietiniai teikėjai", + "custom": "Pasirinktinis" + }, + "options": { + "homarr": { + "description": "Ribotas asistento naudojimo skaičius kasdien yra nemokamas, už jį moka „Homarr“ komanda. Prisijunkite prie bendruomenės dirbtuvių, kad galėtumėte naudotis savo limitu." + }, + "openrouter": { + "description": "Priglobtas modelių maršrutizavimas su dideliu modelių, palaikančių įrankius, katalogu." + }, + "openai": { + "description": "„OpenAI Chat Completions“ per oficialų API galinį tašką." + }, + "anthropic": { + "description": "„Claude“ per „Anthropic“ su „OpenAI“ SDK suderinamą galinį tašką." + }, + "google-gemini": { + "description": "„Gemini“ per su „OpenAI“ suderinamą „Google“ API galinį tašką." + }, + "xai": { + "description": "„Grok“ modeliai per su „OpenAI“ suderinamą „xAI“ API." + }, + "groq": { + "description": "Sparti priglobta išvada per su „OpenAI“ suderinamą „Groq“ API." + }, + "mistral": { + "description": "„Mistral“ modeliai per oficialią API." + }, + "deepseek": { + "description": "„DeepSeek“ modeliai per su „OpenAI“ suderinamą API." + }, + "together": { + "description": "Priglobti atvirieji modeliai per su „OpenAI“ suderinamą „Together“ API." + }, + "ollama": { + "description": "Vietinis arba tinklo „Ollama“ serveris, naudojantis su „OpenAI“ suderinamą API." + }, + "lm-studio": { + "description": "Vietinis „LM Studio“ serveris su įjungtu suderinamumu su „OpenAI“." + }, + "llama-cpp": { + "description": "Vietinis arba tinklo „llama.cpp“ serveris, naudojantis su „OpenAI“ suderinamą API." + }, + "custom": { + "label": "Pasirinktinis galinis taškas", + "description": "Bet kuris kitas su „OpenAI Chat Completions“ suderinamas galinis taškas." + } + }, + "homarrAuth": { + "title": "Įtrauktas kasdienis nemokamas asistento naudojimas", + "description": "API rakto nereikia. „Homarr“ komanda kasdien suteikia ribotą asistento naudojimą. Prisijunkite prie bendruomenės dirbtuvių, kad jūsų limitas būtų atskiras." + } + }, + "baseUrl": { + "title": "API bazinis URL", + "description": "Įtraukite API priešdėlį, paprastai /v1. Konteineriuose „localhost“ nurodo „Homarr“ konteinerį." + }, + "apiKey": { + "title": "API raktas", + "required": "Šis teikėjas jo reikalauja. Reikšmė užšifruota ir skirta tik rašyti.", + "optional": "Vietiniams galiniams taškams neprivaloma. Palikite tuščią, jei paslaugai nereikia nešiklio autentifikavimo.", + "placeholder": "Įveskite API raktą", + "savedTitle": "Užšifruotas API raktas išsaugotas", + "savedDescription": "„Homarr“ gali naudoti šį raktą, bet negali rodyti ar atkurti jo reikšmės.", + "remove": "Pašalinti išsaugotą API raktą", + "removeFlow": { + "title": "Pašalinti išsaugotą API raktą?", + "description": "Šiam teikėjui reikalingas API raktas. Jį pašalinus gali būti sustabdytas modelių aptikimas ir asistento atsakymai, kol bus išsaugotas kitas raktas.", + "optionalDescription": "Pašalinus šį raktą galinis taškas nebegaus nešiklio autentifikavimo. Įsitikinkite, kad jis priima neautentifikuotas užklausas arba naudoja kitą išsaugotą antraštę.", + "cancel": "Palikti išsaugotą raktą", + "confirm": "Pašalinti API raktą" + } + }, + "headers": { + "title": "Papildomos užklausų antraštės", + "description": "Pasirinktinės autentifikavimo arba maršrutizavimo antraštės. Antraščių reikšmės užšifruotos ir skirtos tik rašyti.", + "add": "Pridėti antraštę", + "name": "Antraštės pavadinimas", + "value": "Antraštės reikšmė", + "valuePlaceholder": "Slapta arba maršrutizavimo reikšmė", + "remove": "Pašalinti antraštę", + "configured": "Sukonfigūruotos papildomos užšifruotos antraštės. Pridėjus antraštes pakeičiamas visas išsaugotas rinkinys.", + "empty": "Šiam teikėjui nėra išsaugotų papildomų antraščių.", + "savedBadge": "Antraštės išsaugotos", + "pendingRemoval": "Laukiama pašalinimo", + "clear": "Išsaugotas antraštes pašalinti išsaugant", + "keep": "Palikti išsaugotas antraštes" + }, + "model": { + "title": "Modelis", + "description": "Pasirinkite aptiktą modelį arba įveskite tikslų galinio taško modelio ID.", + "placeholder": "Modelio ID", + "refresh": "Atnaujinti modelius", + "chooseModel": "Pasirinkite modelį, naudojamą naujiems pokalbiams.", + "discoveryPath": "Modelio aptikimo kelias", + "discoveryPathDescription": "Pridedamas prie API bazinio URL. Palikite tuščią, kad išjungtumėte aptikimą ir naudotumėte rankinį modelio ID.", + "manual": "Įveskite modelio ID rankiniu būdu arba išsaugokite ryšį, kad aptiktumėte modelius.", + "manualFallback": "Aptikimas neprieinamas. Vis tiek galite rankiniu būdu įvesti modelio ID.", + "saveConnectionFirst": "Prieš pasirinkdami modelį išsaugokite teikėjo ryšį.", + "discovering": "Atnaujinami šio teikėjo prieinami modeliai…", + "discovered": "{count, plural, one {Aptiktas # modelis. Įrankių palaikymas priklauso nuo pasirinkto galinio taško ir modelio.} few {Aptikti # modeliai. Įrankių palaikymas priklauso nuo pasirinkto galinio taško ir modelio.} many {Aptikta # modelių. Įrankių palaikymas priklauso nuo pasirinkto galinio taško ir modelio.} other {Aptikta # modelių. Įrankių palaikymas priklauso nuo pasirinkto galinio taško ir modelio.}}", + "discoveryFailed": "Modelio aptikimas nebaigtas", + "context": "{count} konteksto langas", + "toolsConfirmed": "Paskelbti įrankiai", + "toolsUnknown": "Patikrinti įrankių palaikymą" + }, + "serverTools": { + "title": "Serverio įrankiai", + "webSearch": { + "label": "Paieška internete", + "description": "Leisti modeliui ieškoti internete per „OpenRouter“, kai užklausai reikia naujausios informacijos. Už paiešką „OpenRouter“ taikomas atskiras mokestis.", + "proxyDescription": "Siųsti „OpenRouter“ internetinės paieškos serverio įrankį į šį galinį tašką. Įjunkite tik tada, kai pasirinktinis galinis taškas persiunčia „OpenRouter“ serverio įrankių formatą, pavyzdžiui, „Homarr Router“ tarpinį serverį.", + "limit": "Modelis nusprendžia, kada ieškoti; kiekvienai užklausai taikomas 3 paieškų ir 5 rezultatų vienoje paieškoje limitas." + } + }, + "enabled": { + "label": "Įjungti asistentą", + "description": "Rodo asistentą visiems prisijungusiems naudotojams. Esami „Homarr“ leidimai vis tiek taikomi kiekvienam vidinio įrankio iškvietimui." + }, + "save": "Išsaugoti asistentą", + "notification": { + "connectionSaved": { + "title": "Teikėjo ryšys išsaugotas", + "message": "Galinis taškas ir užšifruoti prisijungimo duomenys paruošti modelio pasirinkimui.", + "credentialsCleared": "Galinis taškas pakeistas, todėl ankstesni prisijungimo duomenys išvalyti. Jei reikia, pridėkite naujos paskirties prisijungimo duomenis." + }, + "saved": { + "title": "Asistento nustatymai išsaugoti", + "message": "Nauji modelio ir prieinamumo nustatymai aktyvūs." + }, + "error": { + "title": "Nepavyko išsaugoti asistento nustatymų" + } + } } } }, "tool": { "tasks": { - "title": "Užduotys", "status": { "idle": "Laukia", "running": "Veikia", @@ -4746,6 +6789,11 @@ "label": "Signalai" } }, + "action": { + "run": "Paleisti {name} dabar", + "enable": "Įjungti {name}", + "disable": "Išjungti {name}" + }, "interval": { "seconds": "Kas {interval, plural, =1 {sekundę} few {# sekundes} many {# sekundžių} other {# sekundės}}", "minutes": "Kas {interval, plural, =1 {minutę} few {# minutes} many {# minučių} other {# minutės}}", @@ -4761,13 +6809,7 @@ } } }, - "settings": { - "title": "Užduoties {jobName} nustatymai" - }, "field": { - "name": { - "label": "Vardas" - }, "interval": { "label": "Planavimo intervalas" }, @@ -4781,11 +6823,6 @@ "table": { "search": "Ieškoti tarp {count} užduočių..." }, - "action": { - "refresh": { - "label": "Atnaujinti" - } - }, "refresh": { "success": { "message": "Užduotys sėkmingai atnaujintos" @@ -4819,7 +6856,6 @@ } }, "api": { - "title": "API", "modal": { "createApiToken": { "title": "API prieigos raktas sukurtas", @@ -4845,7 +6881,6 @@ }, "table": { "header": { - "id": "ID", "createdBy": "Sukūrė", "actions": "Veiksmai" } @@ -4901,43 +6936,12 @@ "availableTools": { "title": "Prieinami įrankiai", "description": "Prieinami {count} įrankiai. Išskleiskite kategoriją, kad pamatytumėte atskirus įrankius ir jų aprašymus.", - "columnType": "Tipas", - "columnName": "Įrankis", - "columnDescription": "Aprašymas" - }, - "troubleshooting": { - "title": "Trikčių šalinimas", - "missingHeader": { - "title": "„Trūksta ApiKey antraštės“", - "description": "Jūsų klientas nesiunčia {header} antraštės. Patikrinkite, ar MCP konfigūracijos skiltis {section} yra teisinga. Pakeitus konfigūraciją kai kuriuos klientus reikia paleisti iš naujo." - }, - "invalidFormat": { - "title": "„Neteisingas ApiKey formatas“", - "description": "Įsitikinkite, kad nukopijavote visą API raktą, o ne tik jo dalį." - }, - "invalidKey": { - "title": "„Neteisingas API raktas“", - "description": "Rakto ID nerastas arba žetonas neteisingas. API raktą galima peržiūrėti tik vieną kartą jį sukūrus. Jei jį praradote, ištrinkite seną raktą ir sukurkite naują." - }, - "connectionRefused": { - "title": "Ryšys atmestas / baigėsi skirtasis laikas", - "description": "Įsitikinkite, kad URL pasiekiamas iš jūsų DI kliento. Jei „Homarr“ veikia už atvirkštinio tarpinio serverio arba „Docker“ aplinkoje, naudokite išorinį URL (ne {localhost}). Patikrinkite, ar prievadas teisingas („Docker“ numatytasis: 7575)." - }, - "toolsNotAppearing": { - "title": "Įrankiai nerodomi", - "description": "Kai kuriems įrankiams reikia sukonfigūruoti konkrečias integracijas (pvz., „Docker“, „Overseerr“). Įrankių sąrašas priklauso nuo to, kas prieinama jūsų „Homarr“ egzemplioriuje." + "filteredDescription": "Atitinkančių įrankių išplėstose kategorijose: {count}.", + "search": "Ieškoti įrankių", + "noResults": { + "title": "Šios paieškos neatitinkančių įrankių nėra", + "description": "MCP įrankių, atitinkančių „{search}“, nėra. Pabandykite vardų sritį, įrankio pavadinimą arba aprašą." } - }, - "copy": "Kopijuoti", - "oneClick": { - "title": "Įdiegti vienu spustelėjimu", - "subtitle": "Naudoja „OAuth“ — pirmą kartą naudodami autentifikuokitės naršyklėje", - "vsCode": "Įdiegti į „VS Code“", - "cursor": "Įdiegti į „Cursor“", - "copyUrl": "Kopijuoti MCP URL", - "copied": "Nukopijuota!", - "copyHint": "Skirta „ChatGPT“, „Claude Code“ arba bet kuriam MCP klientui", - "manualConfig": "Rankinė konfigūracija" } } } @@ -4954,47 +6958,12 @@ "title": "Jautrių duomenų eksportas", "warningTitle": "Šiame eksporte yra visa jūsų duomenų bazė.", "warningBody": "Atsarginėje kopijoje yra visi vartotojai, integracijos paslaptys (užšifruotos), API raktai, lentų konfigūracijos ir programos duomenys. Eksportuotą failą laikykite saugiai ir nesidalinkite juo.", - "typePrompt": "Įveskite \"{phrase}\", kad tęstumėte", - "submit": "Eksportuoti duomenų bazę", - "cancel": "Atšaukti" + "submit": "Eksportuoti duomenų bazę" } }, "import": { "title": "Atkurti duomenų bazę", - "description": "Įkelkite anksčiau eksportuotą atsarginės kopijos ZIP failą, kad atkurtumėte duomenų bazę. Tai pakeis visą jūsų duomenų bazę. Jei atsarginė kopija buvo sukurta naudojant kitą šifravimo raktą, paslaptys bus automatiškai peršifruotos.", - "warning": "Atkūrus atsarginę kopiją, visa dabartinė duomenų bazė bus pakeista ir programa bus paleista iš naujo. Šio veiksmo atšaukti negalima.", - "dropzone": { - "title": "Numeskite atsarginės kopijos ZIP failą čia arba spustelėkite, kad naršytumėte", - "description": "Priimami tik .zip failai iš Homarr SQLite atsarginės kopijos" - }, - "changeFile": "Pakeisti failą", - "button": "Atkurti duomenų bazę", - "success": { - "title": "Atkūrimas baigtas", - "message": "Duomenų bazė sėkmingai atkurta. Programa paleidžiama iš naujo..." - }, - "error": "Importavimas nepavyko" - }, - "preview": { - "title": "Atsarginės kopijos turinys", - "exported": "Eksportuota {date}", - "loading": "Analizuojamas atsarginės kopijos failas...", - "errorTitle": "Peržiūros klaida", - "entity": "Subjektas", - "count": "Skaičius", - "boards": "Lentos", - "entities": { - "board": "Lentos", - "user": "Vartotojai", - "app": "Programėlės", - "integration": "Integracijos", - "item": "Valdikliai", - "media": "Medija", - "search_engine": "Paieškos varikliai" - }, - "analyzeError": "Nepavyko analizuoti atsarginės kopijos failo", - "invalidMissingMetadata": "Netinkama atsarginė kopija: trūksta metadata.json", - "invalidMissingDb": "Netinkama atsarginė kopija: trūksta db.sqlite" + "description": "Įkelkite anksčiau eksportuotą atsarginės kopijos ZIP failą, kad atkurtumėte duomenų bazę. Tai pakeis visą jūsų duomenų bazę. Jei atsarginė kopija buvo sukurta naudojant kitą šifravimo raktą, paslaptys bus automatiškai peršifruotos." }, "restore": { "dropzone": { @@ -5004,29 +6973,20 @@ "analyzing": "Analizuojama atsarginė kopija...", "changeFile": "Pakeisti failą", "continueToRestore": "Tęsti atkūrimą", - "tryAgain": "Bandyti dar kartą", "analysisError": "Analizės klaida", "preview": { "title": "Atsarginės kopijos turinys", "exported": "Eksportuota {date}", "entity": "Subjektas", "count": "Skaičius", - "boards": "Lentos", "entities": { - "board": "Lentos", - "user": "Vartotojai", - "app": "Programėlės", - "integration": "Integracijos", - "item": "Valdikliai", - "media": "Medija", - "search_engine": "Paieškos varikliai" + "item": "Valdikliai" }, "migrationsApplied": "Pritaikyta {count} migracija", "migrationsAppliedPlural": "Pritaikytos {count} migracijos", "migrationsOlderVersion": "Ši atsarginė kopija buvo iš senesnės Homarr versijos. Buvo pritaikyta {count} schemos migracija, kad būtų atnaujinta.", "migrationsOlderVersionPlural": "Ši atsarginė kopija buvo iš senesnės Homarr versijos. Buvo pritaikytos {count} schemos migracijos, kad būtų atnaujinta.", "migrationsUpToDate": "Duomenų bazės schema atnaujinta ({count} pritaikytos migracijos)", - "upToDate": "Atnaujinta", "migrationsPending": "Laukia {count}" }, "migration": { @@ -5037,21 +6997,21 @@ "title": "Destruktyvus veiksmas", "warningTitle": "Tai visam laikui pakeis jūsų duomenų bazę.", "warningBody": "Visos esamos lentos, vartotojai, programėlės, integracijos, nustatymai ir sesijos bus prarasti. Šio veiksmo atšaukti negalima. Po atkūrimo programa bus paleista iš naujo.", - "typePrompt": "Įveskite \"{phrase}\", kad tęstumėte", - "cancel": "Atšaukti", "submit": "Atkurti duomenų bazę" }, "progress": { "title": "Atkuriama duomenų bazė...", - "extracting": "Išskleidžiamas atsarginės kopijos archyvas", - "migrating": "Taikomos duomenų bazės migracijos", - "encrypting": "Peršifruojamos integracijų paslaptys", - "swapping": "Keičiamas duomenų bazės failas", - "restarting": "Paleidžiamas serveris iš naujo" + "restarting": "Paleidžiamas serveris iš naujo", + "relogin": "Atkūrus duomenų bazę dabartinė sesija tapo negaliojanti. Kai serveris bus paruoštas, „Homarr“ nukreips jus prisijungti." }, "complete": { "title": "Atkūrimas baigtas", - "message": "Duomenų bazė sėkmingai atkurta. Serveris paleidžiamas iš naujo – po kelių sekundžių atnaujinkite puslapį." + "message": "Duomenų bazė sėkmingai atkurta. Serveris paleidžiamas iš naujo – po kelių sekundžių atnaujinkite puslapį.", + "button": "Prisijungti dabar" + }, + "timeout": { + "title": "Serveris vėl nepasiekiamas", + "message": "Duomenų bazės atkūrimas baigtas, bet „Homarr“ vėl nepasiruošė. Pakartokite ryšio patikrą arba rankiniu būdu atnaujinkite šį puslapį." }, "failed": { "title": "Atkūrimas nepavyko" @@ -5059,6 +7019,9 @@ "invalidMissingMetadata": "Netinkama atsarginė kopija: trūksta metadata.json", "invalidMissingDb": "Netinkama atsarginė kopija: trūksta db.sqlite", "analyzeError": "Nepavyko analizuoti atsarginės kopijos" + }, + "confirm": { + "typePrompt": "Įveskite „{phrase}“, kad tęstumėte" } } }, @@ -5093,7 +7056,11 @@ "toggleBoardEdit": "Perjungti lentos redagavimo režimą", "toggleColorScheme": "Perjungti šviesųjį / tamsųjį režimą", "saveNotebook": "Išsaugoti užrašinę (tik užrašinės valdiklyje)", - "openSpotlight": "Atidaryti paiešką" + "openSpotlight": "Atidaryti paiešką", + "openSpotlightApps": "Atidaryti programėlių paiešką", + "openSpotlightAssistant": "Atidaryti asistento režimą", + "openSpotlightPreferences": "Atidaryti nuostatų režimą", + "openAssistant": "Atidaryti asistentą" }, "note": "Patarimas: „Mod“ reiškia ir Ctrl, ir ⌘ klavišą sistemoje „macOS“" } @@ -5103,6 +7070,63 @@ }, "docker": { "title": "Konteineriai", + "reconciliation": { + "title": "„Docker“ sąrankos asistentas", + "suggestions": "{count, plural, =0 {Pasiūlymų nėra} one {# pasiūlymas} few {# pasiūlymai} many {# pasiūlymų} other {# pasiūlymų}}", + "attention": "Reikia dėmesio: {count}", + "endpointUnavailable": "Kai kurių paslaugų nepavyko patikrinti, nes šie galiniai taškai nepasiekiami: {names}", + "empty": "Matomų „Docker“ paslaugų nerasta.", + "emptyFilter": "Šio rodinio neatitinkančių paslaugų nėra.", + "ambiguous": "Šią paslaugą gali atitikti daugiau nei vienas esamas elementas. „Homarr“ automatiškai nepasirinks nė vieno.", + "filter": { + "attention": "Reikia dėmesio", + "represented": "Jau sukonfigūruota", + "all": "Visos" + }, + "state": { + "newRecognized": "Paruošta prijungti", + "newApp": "Nauja paslauga", + "represented": "Jau atvaizduota", + "linked": "Susieta", + "moved": "Adresas pakeistas" + }, + "url": { + "manual": "Įveskite adresą rankiniu būdu" + }, + "health": { + "layer": { + "docker": "Docker", + "integrationConfiguration": "Integracija", + "authentication": "Autentifikavimas", + "apiRequest": "API", + "appRepresentation": "Programėlė", + "widgetConfiguration": "Valdiklis", + "widgetQuery": "Valdiklio užklausa" + }, + "status": { + "available": "Galima", + "configured": "Sukonfigūruota", + "linked": "Susieta", + "missing": "Trūksta", + "changed": "Pakeista", + "unused": "Nenaudojama", + "notApplicable": "Netaikoma", + "notObserved": "Nestebima" + } + }, + "action": { + "review": "Peržiūrėti", + "dismiss": "Atmesti", + "restoreDismissed": "Atkurti atmestas ({count})", + "setupIntegration": "Nustatyti integraciją", + "reviewIntegration": "Peržiūrėti integraciją", + "viewRepresentation": "Peržiūrėti sąranką" + }, + "loadError": { + "title": "Nepavyko įkelti „Docker“ sąrankos asistento", + "message": "„Docker“ paslaugos informacija nepasiekiama. Pabandykite dar kartą neišeidami iš šio puslapio." + } + }, "table": { "updated": "Atnaujinta {when}", "refresh": { @@ -5115,9 +7139,6 @@ "totalMemory": "Bendra atmintis: {memory}" }, "field": { - "name": { - "label": "Pavadinimas" - }, "state": { "label": "Būsena", "option": { @@ -5131,9 +7152,6 @@ } }, "stats": { - "cpu": { - "label": "CPU" - }, "memory": { "label": "Atmintis" } @@ -5196,8 +7214,11 @@ } }, "remove": { - "label": "Pašalinti", "confirm": "Spustelėkite dar kartą, kad pašalintumėte visam laikui", + "confirmation": { + "title": "{count, plural, one {Pašalinti # konteinerį?} few {Pašalinti # konteinerius?} many {Pašalinti # konteinerių?} other {Pašalinti # konteinerių?}}", + "message": "{count, plural, one {Tai visam laikui pašalins # konteinerį: {names}} few {Tai visam laikui pašalins # konteinerius: {names}} many {Tai visam laikui pašalins # konteinerių: {names}} other {Tai visam laikui pašalins # konteinerių: {names}}}" + }, "notification": { "success": { "title": "Konteineriai pašalinti", @@ -5209,8 +7230,13 @@ } } }, + "result": { + "failure": { + "title": "Kai kurie konteinerių veiksmai nepavyko", + "message": "{total, plural, one {{failed} iš # veiksmo nepavyko: {names}} few {{failed} iš # veiksmų nepavyko: {names}} many {{failed} iš # veiksmų nepavyko: {names}} other {{failed} iš # veiksmų nepavyko: {names}}}" + } + }, "refresh": { - "label": "Atnaujinti", "notification": { "success": { "title": "Konteineriai atnaujinti", @@ -5241,18 +7267,33 @@ }, "error": { "internalServerError": "Nepavyko gauti Docker konteinerių", + "endpointUnavailable": "{count, plural, one {# „Docker“ galinis taškas nepasiekiamas: {names}} few {# „Docker“ galiniai taškai nepasiekiami: {names}} many {# „Docker“ galinių taškų nepasiekiama: {names}} other {# „Docker“ galinių taškų nepasiekiama: {names}}}", "noColumns": "Valdiklio nuostatose pasirinkite bent vieną stulpelį" } }, "kubernetes": { + "context": { + "label": "„Kubernetes“ kontekstas", + "loadError": { + "title": "Nepavyko įkelti „Kubernetes“ kontekstų", + "message": "Konteksto informacija nepasiekiama. Pabandykite dar kartą neišeidami iš šio puslapio." + }, + "status": { + "available": "Galima", + "degraded": "Metrikos nepasiekiamos", + "unavailable": "Nepasiekiama" + }, + "unavailable": "Šio „Kubernetes“ konteksto pasiekti nepavyksta. Pasirinkite kitą kontekstą arba patikrinkite jo prisijungimo duomenis ir galinį tašką.", + "metricsUnavailable": "Šis kontekstas pasiekiamas, bet „Metrics Server“ nepasiekiamas. Inventorius lieka prieinamas be tiesioginio procesoriaus ir atminties naudojimo." + }, "cluster": { "title": "Klasterio skydelis", "label": "Klasteris", "providers": "Teikėjai", "version": "Versija", - "architecture": "Architektūra", "capacity": { "title": "Talpa", + "metricsUnavailable": "„Metrics Server“ nepasiekiamas. Inventorius ir rezervuota talpa lieka matomi, tačiau tiesioginio procesoriaus ir atminties naudojimo rodyti negalima.", "resource": { "reserved": "Rezervuota", "used": "Naudota" @@ -5271,38 +7312,10 @@ } }, "nodes": { - "label": "Mazgai", "field": { - "name": { - "label": "Vardas" - }, - "state": { - "label": "Būsena", - "option": { - "ready": "Paruoštas", - "NotReady": "Neparuoštas" - } - }, - "cpu": { - "label": "CPU" - }, - "memory": { - "label": "RAM" - }, - "pods": { - "label": "Podai" - }, - "operatingSystem": { - "label": "OS" - }, - "architecture": { - "label": "Architektūra" - }, + "metricsUnavailable": "Nepasiekiama", "kubernetesVersion": { "label": "Kubernetes versija" - }, - "creationTimestamp": { - "label": "Sukurta" } }, "table": { @@ -5310,43 +7323,17 @@ } }, "namespaces": { - "label": "Vardų sritys", - "field": { - "name": { - "label": "Vardas" - }, - "state": { - "label": "Būsena", - "option": { - "active": "Aktyvi", - "terminating": "Baigiama" - } - }, - "creationTimestamp": { - "label": "Sukurta" - } - }, "table": { "search": "Ieškoti vardų sričių: {count}" } }, "ingresses": { - "label": "Ingressai", "field": { - "name": { - "label": "Vardas" - }, - "namespace": { - "label": "Vardų sritis" - }, "className": { "label": "Klasės vardas" }, "rulesAndPaths": { "label": "Taisyklės ir keliai" - }, - "creationTimestamp": { - "label": "Sukurta" } }, "table": { @@ -5354,17 +7341,7 @@ } }, "services": { - "label": "Paslaugos", "field": { - "name": { - "label": "Vardas" - }, - "namespace": { - "label": "Vardų sritis" - }, - "type": { - "label": "Tipas" - }, "ports": { "label": "Prievadai" }, @@ -5373,9 +7350,6 @@ }, "clusterIP": { "label": "Klasterio IP" - }, - "creationTimestamp": { - "label": "Sukurta" } }, "table": { @@ -5383,25 +7357,12 @@ } }, "pods": { - "label": "Podai", "field": { - "name": { - "label": "Vardas" - }, - "namespace": { - "label": "Vardų sritis" - }, "image": { "label": "Atvaizdas" }, "applicationType": { "label": "Programos tipas" - }, - "status": { - "label": "Būsena" - }, - "creationTimestamp": { - "label": "Sukurta" } }, "table": { @@ -5409,51 +7370,17 @@ } }, "secrets": { - "label": "Paslaptys", - "field": { - "name": { - "label": "Vardas" - }, - "namespace": { - "label": "vardų sritis" - }, - "type": { - "label": "tipas" - }, - "creationTimestamp": { - "label": "Sukurta" - } - }, "table": { "search": "Ieškoti slaptų raktų: {count}" } }, "configmaps": { - "label": "ConfigMaps", - "field": { - "name": { - "label": "Vardas" - }, - "namespace": { - "label": "vardų sritis" - }, - "creationTimestamp": { - "label": "Sukurta" - } - }, "table": { "search": "Ieškoti ConfigMap objektų: {count}" } }, "volumes": { - "label": "Tomai", "field": { - "name": { - "label": "Vardas" - }, - "namespace": { - "label": "Vardų sritis" - }, "accessModes": { "label": "Prieigos režimai" }, @@ -5468,12 +7395,6 @@ }, "volumeName": { "label": "Tomo pavadinimas" - }, - "status": { - "label": "Būsena" - }, - "creationTimestamp": { - "label": "Sukurta" } }, "table": { @@ -5482,6 +7403,29 @@ }, "error": { "internalServerError": "Nepavyko gauti Kubernetes duomenų" + }, + "field": { + "name": { + "label": "Užduoties pavadinimas" + }, + "namespace": { + "label": "Vardų sritis" + }, + "creationTimestamp": { + "label": "Sukurta" + }, + "state": { + "label": "Užduoties būsena" + }, + "status": { + "label": "Būsena" + }, + "type": { + "label": "Atsisiuntimo kliento tipas" + }, + "architecture": { + "label": "Architektūra" + } } }, "permission": { @@ -5515,71 +7459,27 @@ }, "navigationStructure": { "manage": { - "workshop": { - "label": "Workshop" - }, "label": "Valdyti", - "boards": { - "label": "Lentos" - }, - "integrations": { - "label": "Integracijos", + "custom-widgets": { "edit": { - "label": "Taisyti" + "flow": { + "label": "Srautas" + } }, - "new": { - "label": "Nauja" - } - }, - "search-engines": { - "label": "Paieškos sistemos", - "new": { - "label": "Nauja" + "workshop": { + "label": "Dirbtuvės" }, - "edit": { - "label": "Taisyti" - } - }, - "medias": { - "label": "Medijos" - }, - "apps": { - "label": "Programėlės", - "new": { - "label": "Nauja" - }, - "edit": { - "label": "Taisyti" + "publish": { + "label": "Skelbti dirbtuvėse" } }, "users": { - "label": "Vartotojai", - "create": { - "label": "Sukurti" - }, "general": "Bendras", - "security": "Apsauga", - "board": "Lentos", - "groups": { - "label": "Grupės" - }, - "invites": { - "label": "Pakvietimai" - } + "security": "Apsauga" }, "tools": { "label": "Įrankiai", - "tasks": { - "label": "Užduotys" - }, - "docker": { - "label": "Docker", - "logs": { - "label": "Žurnalai" - } - }, "kubernetes": { - "label": "Kubernetes", "nodes": { "label": "Mazgai" }, @@ -5605,11 +7505,7 @@ "label": "Tomai" } }, - "logs": { - "label": "" - }, "certificates": { - "label": "Sertifikatai", "hostnames": { "label": "" } @@ -5620,12 +7516,60 @@ }, "about": { "label": "Apie" + }, + "assistant": { + "label": "Asistentas" } } }, "search": { "placeholder": "Ieškoti bet ko", "nothingFound": "Nieko nerasta", + "modePicker": { + "search": { + "label": "Ieškoti", + "placeholder": "Ieškoti programėlių, lentų, puslapių, komandų ir nuostatų" + }, + "apps": { + "label": "Programėlės", + "placeholder": "Ieškoti programėlių, lentų ir integracijų" + }, + "command": { + "label": "Komandos", + "placeholder": "Ieškoti veiksmų ir komandų" + }, + "preferences": { + "label": "Nuostatos", + "placeholder": "Ieškoti ir keisti nuostatas" + }, + "assistant": { + "label": "Asistentas", + "placeholder": "Klausti asistento" + }, + "external": { + "label": "Žiniatinklis", + "placeholder": "Ieškoti naudojant išorinę paieškos sistemą" + }, + "media": { + "label": "Medija", + "placeholder": "Ieškoti filmo arba laidos", + "fallback": "Ieškoti medijos pagal „{query}“" + }, + "userGroup": { + "label": "Žmonės", + "placeholder": "Ieškoti naudotojų ir grupių" + }, + "continueWith": "Tęsti naudojant", + "dialogAriaLabel": "{mode} komandų meniu", + "navigationLabel": "Paieškos režimai", + "modeAriaLabel": "{mode} režimas", + "resultsAriaLabel": "{mode} rezultatai", + "footer": { + "navigate": "Naršyti", + "open": "Atidaryti", + "close": "Uždaryti" + } + }, "error": { "fetch": "Gaunant duomenis įvyko klaida" }, @@ -5634,7 +7578,6 @@ "help": "Ieškoti programėlių, integracijų ar lentų", "group": { "app": { - "title": "Programėlės", "children": { "action": { "open": { @@ -5650,7 +7593,6 @@ } }, "board": { - "title": "Lentos", "children": { "action": { "open": { @@ -5670,9 +7612,6 @@ "title": "Pasirinkite lentos veiksmą" } } - }, - "integration": { - "title": "Integracijos" } } }, @@ -5701,9 +7640,6 @@ "newBoard": { "label": "Sukurti naują lentą" }, - "importBoard": { - "label": "Importuoti lentą" - }, "newApp": { "label": "Sukurti naują programėlę" }, @@ -5773,7 +7709,6 @@ } }, "defaultSearchEngineId": { - "label": "Numatytoji paieškos sistema", "children": { "detail": { "title": "Pasirinkite numatytąją paieškos sistemą" @@ -5781,7 +7716,6 @@ } }, "openSearchInNewTab": { - "label": "Atidaryti paieškos rezultatus naujame skirtuke", "children": { "detail": { "title": "Atidaryti paieškos rezultatus naujame skirtuke" @@ -5789,7 +7723,6 @@ } }, "ddgBangs": { - "label": "Įjungti DuckDuckGo bangs", "children": { "detail": { "title": "Įjungti DuckDuckGo bangs" @@ -5804,6 +7737,13 @@ } } }, + "byteUnitSystem": { + "children": { + "detail": { + "title": "Pasirinkite duomenų dydžio vienetus" + } + } + }, "homeBoardId": { "label": "Pagrindinė lenta", "children": { @@ -5821,7 +7761,6 @@ } }, "pingIconsEnabled": { - "label": "Naudoti piktogramas ping'ams", "children": { "detail": { "title": "Naudoti piktogramas ping'ams" @@ -5829,7 +7768,6 @@ } }, "enableRightClickOnWidgets": { - "label": "Įjungti valdiklių dešiniojo pelės mygtuko paspaudimą", "children": { "detail": { "title": "Įjungti valdiklių dešiniojo pelės mygtuko paspaudimą" @@ -5857,6 +7795,7 @@ "description": "Pradėkite rašyti, norėdami ieškoti savo medijos užklausų integracijose", "disabled": { "noIntegration": "Pridėkite Overseerr, Jellyseerr arba Seerr integraciją, kad įgalintumėte medijos paiešką.", + "signInRequired": "Prisijunkite, kad galėtumėte ieškoti medijos užklausų integracijose.", "scoped": "Šis valdiklis neturi pasiekiamos medijos užklausų integracijos." } } @@ -5873,7 +7812,6 @@ "help": "Naudoti išorinę paieškos sistemą", "group": { "searchEngine": { - "title": "Paieškos sistemos", "tipDdgBangs": "Patarimas: čia taip pat galite naudoti bet kokius DuckDuckGo bangs, pvz., !something", "bang": { "searchWithQuery": "Ieškoti \"{query}\" naudojant {label}", @@ -5924,20 +7862,6 @@ "group": { "mode": { "title": "Režimai" - }, - "help": { - "title": "Pagalba", - "option": { - "documentation": { - "label": "Dokumentacija" - }, - "submitIssue": { - "label": "Pranešti apie problemą" - }, - "discord": { - "label": "Bendruomenės Discord" - } - } } } }, @@ -5949,9 +7873,10 @@ "other": { "label": "Ieškoti naudojant kitą paieškos sistemą" }, - "no-default": { - "label": "Nėra numatytosios paieškos sistemos", - "description": "Nustatykite numatytąją paieškos sistemą nuostatose" + "no-engines": { + "label": "Nesukonfigūruota nė viena paieškos sistema", + "descriptionCreate": "Pridėkite paieškos sistemą, kad galėtumėte ieškoti komandų meniu", + "descriptionUnavailable": "Paprašykite administratoriaus sukonfigūruoti paieškos sistemą" }, "search": { "label": "Ieškoti „{query}“ naudojant {name}" @@ -6031,7 +7956,6 @@ "help": "Ieškoti naudotojų arba grupių", "group": { "user": { - "title": "Vartotojai", "children": { "action": { "detail": { @@ -6044,7 +7968,6 @@ } }, "group": { - "title": "Grupės", "children": { "action": { "detail": { @@ -6068,9 +7991,6 @@ "engine": { "search": "Rasti paieškos sistemą", "field": { - "name": { - "label": "Pavadinimas" - }, "short": { "label": "Trumpas" }, @@ -6083,12 +8003,19 @@ }, "page": { "list": { - "title": "Paieškos sistemos", + "ariaLabel": "Sukonfigūruotos paieškos sistemos", "noResults": { "title": "Paieškos sistemų dar nėra", - "action": "Sukurkite pirmąją paieškos sistemą" + "description": "Paieškos sistemos leidžia „Spotlight“ siųsti užklausą svetainei arba prijungtai paslaugai.", + "action": "Sukurkite pirmąją paieškos sistemą", + "filteredTitle": "Jūsų paieškos neatitinkančių paieškos sistemų nėra", + "filteredDescription": "Paieškos sistemų, atitinkančių „{search}“, nėra. Pabandykite kitą pavadinimą arba URL." }, - "interactive": "Interaktyvi, naudoja integraciją" + "interactive": "Interaktyvi, naudoja integraciją", + "type": { + "generic": "URL šablonas", + "fromIntegration": "Integracija" + } }, "create": { "title": "Nauja paieškos sistema", @@ -6107,11 +8034,9 @@ "title": "Redaguoti paieškos sistemą", "notification": { "success": { - "title": "Pakeitimai sėkmingai pritaikyti", "message": "Paieškos sistema sėkmingai išsaugota" }, "error": { - "title": "Nepavyko pritaikyti pakeitimų", "message": "Paieškos sistemos nepavyko išsaugoti" } }, @@ -6250,6 +8175,10 @@ } }, "log": { + "context": { + "widgetError": "Valdiklis pranešė apie klaidą maždaug šiuo metu", + "expiredWidgetError": "Su šia valdiklio klaida susiję žurnalai nebesaugomi" + }, "level": { "option": { "debug": "Derinimas", @@ -6261,7 +8190,6 @@ }, "onboardingTour": { "learnMore": "Skaityti dokumentaciją", - "next": "Kitas", "prev": "Atgal", "done": "Baigta", "skip": "Praleisti mokymus", @@ -6325,5 +8253,359 @@ "description": "Keiskite spalvų schemą, kalbą, pagrindinę lentą ir nuostatas. Taip pat galite pereiti į valdymo sritį iš čia." } } + }, + "metadata": { + "description": "Savarankiškai priglobtas *arr rinkinio ir visos jūsų namų laboratorijos skydelis. Integruojamas su daugiau nei 50 paslaugų, realiojo laiko valdikliais, be konfigūracijos failų.", + "dashboardTitle": "{appName} skydelis" + }, + "assistant": { + "title": "Asistentas", + "open": "Atidaryti asistentą", + "close": "Uždaryti asistentą", + "minimize": "Sutraukti asistentą", + "spotlight": "Klausti asistento", + "spotlightDescription": "Įveskite ir išsiųskite užklausą neišeidami iš komandų meniu.", + "spotlightPrompt": { + "title": "Klausti asistento", + "description": "Įveskite užklausą aukščiau. Paspaudus „Enter“, ji bus išsiųsta fone.", + "send": "Siųsti užklausą", + "empty": "Įveskite užklausą aukščiau" + }, + "unavailable": { + "checking": "Tikrinama, ar asistentas prieinamas…", + "error": "Nepavyko patikrinti asistento prieinamumo. Pabandykite dar kartą.", + "notConfigured": "Administratorius pirmiausia turi sukonfigūruoti ir įjungti asistentą.", + "signIn": "Prisijunkite, kad galėtumėte naudoti asistentą." + }, + "newConversation": "Naujas pokalbis", + "conversations": "Pokalbiai", + "conversationActions": "Pokalbio veiksmai", + "searchConversations": "Ieškoti pokalbių", + "noMatchingConversations": "Atitinkančių pokalbių nėra", + "moreActions": "Daugiau atsakymo veiksmų", + "renameConversation": { + "action": "Pervadinti", + "label": "Pokalbio pavadinimas", + "save": "Išsaugoti pavadinimą", + "failedTitle": "Nepavyko pervadinti pokalbio", + "failedDescription": "„Homarr“ nepavyko pervadinti šio pokalbio. Pabandykite dar kartą." + }, + "deleteConversation": { + "title": "Ištrinti pokalbį?", + "description": "„{title}“ ir jo žinutės bus ištrinti visam laikui.", + "failedTitle": "Nepavyko ištrinti pokalbio", + "failedDescription": "„Homarr“ nepavyko ištrinti šio pokalbio. Pabandykite dar kartą." + }, + "closeHistory": "Uždaryti pokalbių istoriją", + "openHistory": "Atidaryti pokalbių istoriją", + "emptyTitle": "Kuo galiu padėti?", + "emptyDescription": "Klauskite apie „Homarr“ sąranką, tikrinkite tiesioginius egzemplioriaus duomenis arba patvirtinkite veiksmus, kai norite, kad atlikčiau pakeitimą.", + "suggestions": { + "health": { + "label": "Patikrinti paslaugos būklę", + "prompt": "Patikrinkite mano integracijas ir apibendrinkite, kam reikia dėmesio." + }, + "explore": { + "label": "Naršyti mano „Homarr“", + "prompt": "Parodykite, ką galiu peržiūrėti ir valdyti šiame „Homarr“ egzemplioriuje." + }, + "media": { + "label": "Rasti užsakytinos medijos", + "prompt": "Padėkite rasti filmą arba serialą, kurį galėčiau užsakyti." + }, + "style": { + "label": "Patobulinti skydelį", + "prompt": "Padėkite pagerinti lentos išvaizdą arba pasirinktinį CSS. Pirmiausia parodykite mano lentas, tada išsaugokite dabartinius nustatymus, kol atliksime pakeitimą." + }, + "designWidget": { + "label": "Sukurti valdiklį", + "prompt": "Sukurkite ir įdiekite pasirinktinį valdiklį, skirtą " + } + }, + "composerPlaceholder": "Klausti asistento…", + "runtime": { + "model": "Modelis", + "searchModels": "Ieškoti modelių", + "noModels": "Modelių nėra", + "otherModels": "Kiti modeliai", + "imageInput": "Priima vaizdo įvestį", + "thinking": "Mąstymo režimas", + "reasoning": { + "auto": "Automatinis", + "none": "Išjungta", + "minimal": "Minimalus", + "low": "Žemas", + "medium": "Vidutinis", + "high": "Aukštas" + } + }, + "providerQuota": { + "title": "„Homarr“ teikėjas", + "communityWorkshop": "Bendruomenės dirbtuvės", + "dailyAllowance": "Kasdienis užklausų limitas", + "remainingLabel": "Liko {remaining} iš {limit} „Homarr“ teikėjo užklausų", + "loading": "Įkeliamas „Homarr“ teikėjo limitas", + "signInRequired": "„Homarr“ teikėjui reikalingas prisijungimas prie dirbtuvių", + "signInDescription": "Prisijunkite naudodami „GitHub“ per bendruomenės dirbtuves, kad gautumėte atskirą kasdienį limitą.", + "exhaustedDescription": "Šiandienos „Homarr“ teikėjo limitas išnaudotas. Jis atkuriamas vidurnaktį UTC.", + "unavailableDescription": "Prisijunkite prie dirbtuvių arba palaukite, kol bus atkurtas „Homarr“ teikėjo limitas.", + "signIn": "Prisijungti naudojant „GitHub“", + "signInError": "Nepavyko prisijungti naudojant „GitHub“. Pabandykite dar kartą po akimirkos.", + "loadError": "Nepavyko įkelti „Homarr“ teikėjo limito.", + "reset": "Atkuriama {relative} ", + "toolCalls": "Kiekviena modelio užklausa ir užbaigtas įrankio iškvietimas naudoja vieną užklausą.", + "retry": "Iš naujo įkelti limitą", + "level": { + "ok": "Gerai", + "warning": "Įspėjimas", + "bad": "Žemas", + "dead": "Panaudota" + } + }, + "stop": "Stabdyti atsakymą", + "send": "Siųsti žinutę", + "copy": "Kopijuoti atsakymą", + "copyMessage": "Kopijuoti žinutę", + "editMessage": "Redaguoti žinutę", + "updateMessage": "Atnaujinti žinutę", + "regenerate": "Generuoti atsakymą iš naujo", + "helpful": "Naudinga", + "notHelpful": "Nenaudinga", + "readAloud": "Perskaityti atsakymą balsu", + "stopReading": "Sustabdyti atsakymo skaitymą", + "feedbackError": "Nepavyko išsaugoti jūsų atsiliepimo. Pabandykite dar kartą.", + "exportMarkdown": "Eksportuoti kaip „Markdown“", + "exportConversation": { + "action": "Eksportuoti pokalbį kaip „Markdown“", + "failedTitle": "Nepavyko eksportuoti pokalbio", + "failedDescription": "„Homarr“ nepavyko įkelti šio pokalbio. Pabandykite dar kartą." + }, + "reasoning": "Mąstymas", + "previousResponse": "Ankstesnis atsakymas", + "nextResponse": "Kitas atsakymas", + "removeAttachment": "Pašalinti priedą", + "downloadFile": "Atsisiųsti {name}", + "attachedImage": "Pridėtas vaizdas", + "externalImageBlocked": "Išorinis vaizdas užblokuotas dėl privatumo", + "image": { + "loading": "Įkeliamas vaizdas", + "failed": "Nepavyko įkelti šio vaizdo.", + "retry": "Bandyti įkelti vaizdą dar kartą" + }, + "quoteSelection": "Cituoti", + "dismissQuote": "Pašalinti citatą", + "attachments": { + "add": "Pridėti vaizdą arba dokumentą", + "errorTitle": "Nepavyko pridėti priedo", + "imageUnsupported": "Pasirinktas modelis nepalaiko vaizdo įvesties." + }, + "mentions": { + "menu": "Pridėti „Homarr“ kontekstą", + "context": "Kontekstas", + "app": "Programėlės", + "integration": "Integracijos", + "board": "Lentos", + "widget": "Valdikliai", + "tools": "Prieinami įrankiai" + }, + "markdown": { + "diagram": "Diagrama", + "renderingDiagram": "Generuojama diagrama…", + "diagramUnavailable": "Nepavyko sugeneruoti šios diagramos." + }, + "commands": { + "menu": "Asistento komandos", + "health": "Parengti paslaugos būklės patikrą", + "explore": "Parengti šio „Homarr“ egzemplioriaus apžvalgą", + "media": "Parengti medijos paiešką", + "style": "Parengti lentos išvaizdos arba pasirinktinio CSS pakeitimą", + "designWidget": "Parengti pasirinktinio valdiklio kūrimą pagal vieną užklausą" + }, + "usage": { + "tokens": "žetonai", + "contextWindow": "Konteksto langas", + "requestDetails": "Užklausos informacija", + "used": "Naujausias veiksmas", + "remaining": "Liko", + "capacity": "Talpa", + "input": "Įvestis", + "output": "Išvestis", + "cached": "Talpyklos įvestis", + "cacheWrite": "Rašymas į talpyklą", + "reasoning": "Samprotavimas", + "inputShort": "įvestis", + "outputShort": "išvestis", + "cachedShort": "talpykloje", + "reasoningShort": "samprotavimas", + "firstOutput": "Pirmoji išvestis", + "homarrTiming": "„Homarr“ stebėjo", + "endToEnd": "Nuo pradžios iki pabaigos", + "observedThroughput": "Stebimas pralaidumas", + "providerTiming": "Nurodė teikėjas", + "loadingProviderDetails": "Įkeliama generavimo informacija…", + "providerDetailsPending": "„OpenRouter“ vis dar apdoroja kai kurią generavimo informaciją. Atidarykite iš naujo, kad bandytumėte dar kartą.", + "providerLatency": "Teikėjo delsa", + "generationTime": "Generavimo laikas", + "moderationLatency": "Moderavimas", + "providerThroughput": "Teikėjo pralaidumas", + "fallbacks": "Atsarginiai variantai", + "fallbackLatency": "Atsarginio varianto delsa", + "cacheDiscount": "Talpyklos nuolaida", + "normalizedTokens": "„OpenRouter“ normalizuota įvestis / išvestis", + "byok": "BYOK", + "cost": "Kaina", + "reported": "Nurodė teikėjas", + "estimated": "Apskaičiuota pagal modelio kainodarą", + "upstreamCost": "Aukštesnio lygio išvada", + "webSearches": "Paieškos internete", + "finishReason": "Užbaigimo priežastis", + "notReported": "Nenurodyta", + "agentSteps": "Agento veiksmai", + "step": "Žingsnis {number}", + "generation": "Generavimas" + }, + "toolInput": "Įvestis", + "toolOutput": "Išvestis", + "toolActivity": { + "iconSearch": "Ieškoma „{query}“ piktogramų", + "iconBrowse": "Peržiūrimos galimos piktogramos" + }, + "toolNavigation": { + "openPreview": "Atidaryti peržiūrą", + "openWidget": "Atidaryti valdiklį" + }, + "webSearch": { + "title": "Paieška internete", + "completed": "„OpenRouter“ šiam atsakymui atliko paiešką internete.", + "searches": "{count, plural, one {# paieška} few {# paieškos} many {# paieškų} other {# paieškos}}", + "sources": "{count, plural, one {# šaltinis} few {# šaltiniai} many {# šaltinių} other {# šaltinio}}" + }, + "responseError": { + "title": "Padėjėjui nepavyko užbaigti darbo", + "description": "Bandykite dar kartą. Jei problema išlieka, paprašykite administratoriaus patikrinti sukonfigūruotą modelio galinį punktą." + }, + "toolPreparationError": { + "title": "Nepavyko paruošti šios užklausos", + "description": "Modelis sustojo prieš pateikdamas visą informaciją. Pabandykite atsakymą dar kartą arba iš naujo aprašykite užklausą. Pakeitimai neatlikti." + }, + "busy": { + "title": "Padėjėjas jau dirba", + "description": "Palaukite, kol bus paruoštas dabartinis atsakymas, arba atidarykite jį, kad sustabdytumėte vykdymą." + }, + "pendingAction": { + "answerTitle": "Reikia atsakymo", + "answerFallback": "Pasirinkite atsakymą, kad galėtumėte tęsti", + "formTitle": "Peržiūrėti programos informaciją", + "boardFormTitle": "Peržiūrėti lentos pakeitimus", + "review": "Peržiūrėti", + "sendBlocked": "Prieš siųsdami išspręskite laukiančią užklausą" + }, + "activity": { + "thinking": "Padėjėjas mąsto", + "working": "Rengiama jūsų užklausa", + "ready": "Atsakymas paruoštas", + "completed": "Atidaryti atsakymą", + "approval": "Reikia patvirtinimo", + "failed": "Padėjėjui reikia jūsų dėmesio", + "expand": "Atidaryti padėjėjo atsakymą", + "dismiss": "Paslėpti padėjėjo veiklą" + }, + "scrollToLatest": "Slinkti prie naujausio", + "refresh": { + "action": "Atnaujinti dabartinį rodinį", + "working": "Atnaujinamas dabartinis rodinys", + "completeTitle": "Rodinys atnaujintas", + "completeDescription": "Matomi „Homarr“ duomenys įkelti iš naujo.", + "failedTitle": "Nepavyko atnaujinti rodinio", + "failedDescription": "Pakeitimas vis tiek galėjo būti išsaugotas. Dar kartą pabandykite atnaujinti." + }, + "askUser": { + "preparing": "Rengiamas klausimas", + "answered": "Jūsų atsakymas", + "other": "Kita", + "otherLabel": "Jūsų atsakymas", + "otherPlaceholder": "Įveskite kitą atsakymą…", + "submit": "Siųsti atsakymą", + "cancelOther": "Atšaukti kitą atsakymą", + "optionKind": { + "affirmative": "Patvirtinti", + "negative": "Atmesti", + "alternative": "Parinktis", + "custom": "Pasirinktinė" + } + }, + "configureApp": { + "title": "Peržiūrėti programos informaciją", + "description": "Pasirinkite vietinę piktogramą ir prieš padėjėjui paprašant leidimo sukurti programą atlikite reikiamus pakeitimus.", + "preparing": "Rengiama programos informacija", + "continue": "Naudoti šią informaciją", + "ready": "Programos informacija paruošta", + "automaticContinue": "Ši programos informacija naudojama automatiškai" + }, + "configureBoardSettings": { + "title": "Peržiūrėti lentos pakeitimus", + "loading": "Įkeliami dabartiniai lentos nustatymai", + "loadErrorTitle": "Nepavyko įkelti lentos nustatymų", + "loadErrorDescription": "Lenta gali nebeegzistuoti arba neturite teisės jos keisti.", + "proposedCount": "Padėjėjas pasiūlė {count} laukų", + "changeCount": "Paruošta atlikti {count} pakeitimų", + "ready": "Lentos pakeitimai paruošti", + "cancelled": "Dabartiniai lentos nustatymai išsaugoti", + "noChanges": "Nustatymai nebus pakeisti", + "keepCurrent": "Palikti dabartinius nustatymus", + "continue": "Tęsti ir pereiti prie patvirtinimo", + "automaticContinue": "Siūlomi lentos pakeitimai priimami automatiškai", + "resetAll": "Atkurti visus pakeitimus", + "tabs": { + "css": "Pasirinktinis CSS", + "appearance": "Išvaizda", + "background": "Fonas", + "general": "Bendras" + }, + "cssDescription": "Redaguokite visą stilių lentelę. Esamos taisyklės išsaugomos, nebent jas čia pašalinsite.", + "cssCharacters": "{count} iš 16384 simbolių", + "copyCss": "Kopijuoti CSS", + "copied": "Nukopijuota", + "restoreCss": "Atkurti dabartinį CSS", + "remoteCssTitle": "Šis CSS įkelia nuotolinį išteklių", + "remoteCssDescription": "Importuoti stilių lapai ir nuotoliniai URL lentai įkeliant susisiekia su kitu serveriu. Prieš tęsdami juos peržiūrėkite." + }, + "configureWidget": { + "title": "Peržiūrėti valdiklį", + "preparing": "Rengiami valdiklio nustatymai", + "review": "Peržiūrėti valdiklį ir integracijas", + "ready": "Valdiklio konfigūracija paruošta", + "cancelled": "Valdiklis nebuvo pridėtas", + "automaticContinue": "Siūloma valdiklio konfigūracija priimama automatiškai", + "definitionLoadErrorTitle": "Nepavyko įkelti valdiklio nustatymų", + "definitionLoadErrorDescription": "„Homarr“ nepavyko įkelti šio valdiklio nustatymų. Bandykite dar kartą.", + "loadErrorTitle": "Nepavyko įkelti integracijų", + "loadErrorDescription": "„Homarr“ nepavyko įkelti šiam valdikliui galimų integracijų.", + "noIntegrationTitle": "Reikalinga suderinama integracija", + "noIntegrationDescription": "Prieš įtraukdami valdiklį į skydą sukonfigūruokite jo palaikomą integraciją.", + "connectIntegration": "Prijungti paslaugą", + "manageIntegrations": "Tvarkyti integracijas", + "skip": "Nepridėti", + "errorTitle": "Nepavyko paruošti valdiklio nustatymų", + "errorDescription": "Modelis nepateikė visos valdiklio konfigūracijos. Valdiklis nebuvo pridėtas." + }, + "approvalRequired": "Reikalingas patvirtinimas", + "complete": "Užbaigta", + "denied": "Atmesta", + "failed": "Nepavyko", + "working": "Vykdoma", + "approvalDescription": "Peržiūrėkite šį pakeitimą prieš jį vykdydami.", + "approveAndRun": "Patvirtinti ir vykdyti", + "deny": "Atmesti", + "autoApproval": { + "label": "Automatiniai patvirtinimai", + "composerLabel": "Patvirtinti už mane", + "title": "Automatiniai patvirtinimai", + "description": "Automatiškai paruošti formas ir patvirtinti apsaugotus šio pokalbio pakeitimus. Į klausimus vis tiek reikės atsakyti jums, o jūsų „Homarr“ leidimai ir toliau bus taikomi. Ši funkcija išjungiama perjungus pokalbį.", + "enable": "Įjungti šiame pokalbyje", + "disable": "Išjungti automatinius patvirtinimus", + "enabled": "Automatiniai patvirtinimai įjungti", + "approving": "Automatiškai tvirtinama" + } } } diff --git a/packages/translation/src/lang/lv.json b/packages/translation/src/lang/lv.json index 85bb37791..663a90dee 100644 --- a/packages/translation/src/lang/lv.json +++ b/packages/translation/src/lang/lv.json @@ -1,156 +1,246 @@ { "init": { - "step": { - "start": { - "title": "Laipni lūdzam Homarr", - "subtitle": "Sāksim Homarr instances iestatīšanu.", - "description": "Lai sāktu, atlasiet, kā vēlaties iestatīt savu Homarr instanci.", - "action": { - "scratch": "Sākt no jauna", - "importOldmarr": "Importēt no Homarr pirms 1.0", - "restoreSqlite": "SQLite rezerves kopija", - "restoreSqliteDescription": "Augšupielādējiet pilnu SQLite datu bāzes dublējumu no iepriekšējās Homarr instances. Tas atjaunos visus dēļus, lietotājus, lietotnes, integrācijas un iestatījumus.", - "backToOptions": "← Atpakaļ uz iestatīšanas opcijām" + "studio": { + "navigationLabel": "Sākotnējās iestatīšanas sadaļas", + "back": "Atpakaļ", + "buildBoard": "Izveidot manu paneli", + "common": { + "unknownError": "Radās kļūda. Jūsu izvēles joprojām ir saglabātas; mēģiniet vēlreiz." + }, + "claim": { + "checking": "Tiek aizsargāta šī ievadīšanas sesija…", + "checkingTitle": "Notiek drošās iestatīšanas sagatavošana", + "lockedTitle": "Iestatīšana ir atvērta citā pārlūkprogrammā", + "lockedDescription": "Turpiniet tur vai pagaidiet, līdz beidzas tās drošā pirmās palaišanas sesija, un pēc tam mēģiniet vēlreiz.", + "signInTitle": "Nepieciešama administratora pieteikšanās", + "signInDescription": "Administrators jau pastāv. Piesakieties, lai atsāktu iestatīšanu, nepakļaujot riskam akreditācijas datus vai piekļuvi pakalpojumiem.", + "signIn": "Pieteikties un atsākt", + "errorTitle": "Iestatīšanu neizdevās aizsargāt", + "errorDescription": "Atkārtoti ielādējiet lapu, lai mēģinātu vēlreiz sākt drošo pirmās palaišanas sesiju." + }, + "navigation": { + "essentials": "Būtiskākais", + "discover": "Atklāt", + "connect": "Savienot", + "board": "Panelis", + "extend": "Paplašināt", + "review": "Pārskatīt" + }, + "welcome": { + "title": "Laipni lūdzam mājās.", + "description": "Laipni lūdzam Homarr v{version}! Mēs iepazīstināsim jūs ar būtiskāko un palīdzēsim izveidot pirmo paneli.", + "start": "Sākt", + "restore": "Atjaunot dublējumu", + "restoreTitle": "Atjaunot no dublējuma", + "restoreDescription": "Pilns SQLite dublējums atjauno paneļus, lietotājus, lietotnes, integrācijas un iestatījumus. Homarr to pārbauda pirms jebkādu datu aizstāšanas.", + "errorTitle": "Iestatīšanu neizdevās sākt", + "errorDescription": "Jūsu iestatīšanas izvēles joprojām ir saglabātas. Mēģiniet vēlreiz vai atkārtoti ielādējiet lapu, ja problēma turpinās." + }, + "account": { + "title": "Izveidojiet administratoru", + "description": "Norādiet administratora lietotāja akreditācijas datus.", + "username": "Administratora lietotājvārds", + "passwordHint": "Nepieciešams tikai vismaz 8 rakstzīmju garums. Pārējās paroles stipruma pārbaudes ir ieteikumi.", + "create": "Izveidot administratoru", + "errorTitle": "Administratoru neizdevās izveidot", + "recoveryTitle": "Administratora konts izveidots", + "recoveryDescription": "Automātiskā pieteikšanās netika pabeigta. Lai turpinātu iestatīšanu, piesakieties ar tikko izveidotā administratora akreditācijas datiem.", + "recoveryAction": "Pieteikties un turpināt", + "unknownError": "Administratoru neizdevās izveidot." + }, + "externalGroup": { + "title": "Savienojiet administratoru grupu", + "description": "Izmantojiet precīzu grupas nosaukumu, ko nosūta LDAP vai OIDC. Šīs grupas dalībnieki iegūs administratora piekļuvi.", + "name": "Ārējā administratoru grupa", + "nameDescription": "Šis lauks ir reģistrjutīgs, un tam jāatbilst jūsu identitātes nodrošinātājam.", + "continue": "Saglabāt grupu un turpināt", + "errorTitle": "Grupu neizdevās saglabāt", + "unknownError": "Administratoru grupu neizdevās saglabāt." + }, + "essentials": { + "title": "Sāciet ar ierastajiem noklusējumiem", + "description": "Iestatiet valodu un izskatu, ko visi redzēs vispirms, pēc tam norādiet Homarr jūsu pakalpojumu izmantoto adrešu shēmu.", + "language": "Noklusējuma valoda", + "theme": "Noklusējuma motīvs", + "themeAuto": "Sistēmas", + "themeLight": "Gaišs", + "themeDark": "Tumšs", + "serverOriginHelp": "Homarr izmanto šo adresi, lai automātiski aizpildītu atklāto pakalpojumu vietrāžus. Jūs joprojām varat rediģēt katru pakalpojumu atsevišķi.", + "serverDescription": "Tas ir īsceļš, nevis ierobežojums. Katru atklāto pakalpojumu joprojām var rediģēt.", + "serverOrigin": "Domēns, IP adrese vai reversā starpniekservera ceļš", + "serverOriginDescription": "Piemēri: home.lan, 192.168.1.10 vai https://home.example.com/services. Tālāk izvēlieties, kā tiks pievienots katrs pakalpojums.", + "analytics": "Kopīgot anonīmu produkta analītiku", + "analyticsDescription": "Palīdz Homarr uzlabot funkciju darbības uzticamību. Netiek nosūtīti pakalpojumu akreditācijas dati vai paneļa saturs." + }, + "discover": { + "title": "Uzziniet, kam šī instalācija faktiski var piekļūt", + "description": "Homarr pārbauda iespējas uz vietas. Trūkstoša Docker ligzda vai Kubernetes konteksts nekad nebloķē manuālu iestatīšanu.", + "database": "Datu bāze", + "docker": "Docker un saderīgās ligzdas", + "kubernetes": "Kubernetes", + "assistantWorkshop": "Asistents un darbnīca", + "found": "Atrastās integrācijas: {integrations} un {apps} papildu lietotnes", + "retryKubernetes": "Vēlreiz pārbaudīt Kubernetes", + "retryWorkshop": "Vēlreiz pārbaudīt darbnīcu", + "unknownVersion": "nezināma versija", + "kubernetesAvailable": "Savienots ar Kubernetes {version}", + "kubernetesDisabled": "Nav iespējots; turpiniet ar Docker vai manuāliem pakalpojumiem", + "kubernetesUnavailable": "Kubernetes ir iespējots, bet no šī Homarr procesa tam nevar piekļūt", + "workshopAvailable": "Kopienas darbnīca un mitinātie asistenta pakalpojumi ir sasniedzami", + "workshopUnavailable": "Vietējie un pielāgotie asistenta nodrošinātāji joprojām ir pieejami", + "partialTitle": "Dažus avotus neizdevās skenēt", + "partialDescription": "Sasniedzamo resursdatoru rezultāti ir saglabāti. Pārbaudiet ligzdu atļaujas vai nākamajā sadaļā pievienojiet pakalpojumus manuāli.", + "status": { + "checking": "Tiek pārbaudīta pieejamība…", + "available": "Pieejams", + "partial": "Daļēji pieejams", + "empty": "Sasniedzams, bet nav atbilstošu darbojošos pakalpojumu", + "disabled": "Atspējots servera konfigurācijā", + "unavailable": "No šī Homarr procesa nav pieejams" } }, - "import": { - "title": "Importēt datus", - "subtitle": "Varat importēt datus no esošas Homarr instances.", - "dropzone": { - "title": "Velciet ZIP failu šeit vai noklikšķiniet, lai to pārlūkotu", - "description": "Augšupielādētais ZIP fails tiks apstrādāts, un varēsiet atlasīt, ko importēt" + "connect": { + "title": "Savienojiet to, kas padara paneli noderīgu", + "description": "Atlasiet vairākus pakalpojumus vienlaikus. Docker etiķetēm ir prioritāte, attēlu atbilstība aizpilda trūkstošo, un katru vietrādi un akreditācijas datus var pārskatīt.", + "discoveredIntegrations": "Atklātās integrācijas instances ({count})", + "detectedIntegrationLabel": "Importēt {name}, kas atpazīts kā {kind}", + "detectedAppLabel": "Importēt atklāto lietotni {name}", + "otherIntegrations": "Pievienot citu integrāciju", + "configureIntegrations": "Konfigurēt integrācijas", + "discoveredApps": "Atklātās lietotnes ({count})", + "appAddressRequired": "Pievienojiet adresi vienumam {name} vai noņemiet to no atlases.", + "empty": "Neviena integrācija nav atlasīta. Homarr joprojām izveidos noderīgu sākuma paneli ar vispārīgiem logrīkiem.", + "dockerSource": "Docker", + "manualSource": "Manuāli", + "url": "Pakalpojuma vietrādis", + "noCredentials": "Nav akreditācijas datu", + "noCredentialsDescription": "Šai integrācijai akreditācijas dati nav nepieciešami.", + "credentialMethod": "Akreditācijas datu metode", + "getApiKey": "Atvērt šī pakalpojuma API atslēgas iestatījumus", + "openGuide": "Atvērt Homarr iestatīšanas ceļvedi šim pakalpojumam", + "testConnection": "Pārbaudīt savienojumu", + "testSuccess": "Savienojums darbojas", + "testSuccessDescription": "Homarr izveidoja savienojumu, izmantojot pašreizējo adresi un akreditācijas datus.", + "testError": "Savienojums neizdevās", + "testErrorDescription": "Pārbaudiet pakalpojuma adresi un akreditācijas datus, pēc tam mēģiniet vēlreiz.", + "needsConfiguration": "Nepieciešama konfigurēšana", + "tested": "Savienojums pārbaudīts", + "testFailed": "Savienojuma pārbaude neizdevās", + "incompleteConfirmation": "Nepabeigtās integrācijas tiks izlaistas. Vai turpināt bez tām?" + }, + "board": { + "title": "Veidojiet dēli pirms tā izveides", + "description": "Homarr izveido aizsargātus Mobile un Base izkārtojumus, pēc tam izvieto atlasīto pakalpojumu lietotnes un saderīgos logrīkus.", + "target": "Konfigurējamais dēlis", + "targetDescription": "Izvēlieties precīzu esošo dēli, kas šīs iestatīšanas laikā jāatjaunina.", + "targetPlaceholder": "Atlasiet dēli", + "targetRequired": "Pirms turpināšanas atlasiet konfigurējamo dēli.", + "name": "Paneļa nosaukums", + "nameDescription": "Izmanto tāfeles URL; atļauti tikai burti, cipari, defises un pasvītrojuma zīmes.", + "nameRequired": "Pirms turpināšanas ievadiet tāfeles nosaukumu.", + "primaryColor": "Pamatkrāsa", + "secondaryColor": "Sekundārā krāsa", + "resetColors": "Atiestatīt krāsas", + "radius": "Logrīka stūru noapaļojums", + "radiusOptions": { + "xs": "Cieši", + "sm": "Maigi", + "md": "Līdzsvaroti", + "lg": "Noapaļoti", + "xl": "Mīksti" }, - "fileInfo": { - "action": { - "change": "Mainīt failu" - } + "columns": "Tāfeles kolonnas", + "columnsDescription": "Kolonnas nosaka horizontālo režģi, ko izmanto vienumu izmēra un novietojuma noteikšanai. Lielākajai daļai lietotāju pietiek ar 12.", + "columnCount": "{count, plural, zero {# kolonnas} one {# kolonna} other {# kolonnas}}", + "leftSidebar": "Kreisā sānjosla", + "rightSidebar": "Labā sānjosla", + "previewLabel": "Pirmā tāfeles izkārtojuma priekšskatījums reāllaikā" + }, + "extend": { + "title": "Papildu funkcijas", + "tabsLabel": "Asistenta, darbnīcas un MCP iestatīšana", + "assistant": "Asistents", + "workshop": "Darbnīca", + "assistantSetup": { + "loginTitle": "Nepieciešama administratora pieteikšanās", + "loginDescription": "Pakalpojumu sniedzēju atslēgas un piekļuve modeļiem ir aizsargāta. Pabeidziet iestatīšanu un piesakieties — Homarr tieši atvērs Asistenta konfigurāciju.", + "loginAction": "Pieteikties, lai konfigurētu Asistentu" }, - "importSettings": { - "title": "Importēt iestatījumus", - "description": "Konfigurēt importēšanas darbību" + "workshopSetup": { + "title": "Homarr darbnīca", + "description": "Pārlūkojiet kopienas pielāgotos logrīkus, pārbaudiet to pieprasītās iespējas, instalējiet tos un publicējiet savus darbus, nekopējot kodu starp serveriem.", + "available": "Pieejams", + "checking": "Notiek pārbaude…", + "unavailable": "Nav pieejams", + "discoverTitle": "Atklāt", + "discoverDescription": "Atrodiet logrīkus, kas izveidoti īstām paša mitinātām darbplūsmām.", + "installTitle": "Pārskatīt un instalēt", + "installDescription": "Pirms pievienošanas skatiet metadatus un konfigurāciju.", + "publishTitle": "Kopīgot", + "publishDescription": "Publicējiet atkārtoti izmantojamus logrīkus kopienai.", + "browse": "Pārlūkot darbnīcu" }, - "boardSelection": { - "title": "Atrasti {count} dēļi", - "description": "Izvēlieties visus importējamos dēļus ar vēlamo izmēru", - "action": { - "selectAll": "Atzīmēt visu", - "unselectAll": "Noņemt visu atlasi" - } - }, - "summary": { - "title": "Importēšanas kopsavilkums", - "description": "Tālāk redzamajā kopsavilkumā varat skatīt, kas tiks importēts", - "action": { - "import": "Apstiprināt importēšanu un turpināt" - }, - "entities": { - "apps": "Lietotnes", - "boards": "Dēļi", - "integrations": "Integrācijas", - "credentialUsers": "Akreditēto datu lietotāji" - } - }, - "tokenModal": { - "title": "Ievadīt importēšanas pilnvaru", - "field": { - "token": { - "label": "Atslēga", - "description": "Ievadiet iepriekšējā Homarr instancē parādīto importēšanas pilnvaru" - } - }, - "notification": { - "error": { - "title": "Nederīga pilnvara", - "message": "Ievadītā pilnvara nav derīga" - } - } + "mcpSetup": { + "title": "Homarr MCP", + "description": "Savienojiet Claude, Codex vai citu MCP klientu ar Homarr tipizētajiem rīkiem. API atslēgas nodrošina skaidri definētu un atsaucamu piekļuvi.", + "endpoint": "Straumējams HTTP galapunkts", + "keyTitle": "Nokopējiet šo atslēgu tagad", + "keyDescription": "Drošības nolūkos Homarr vairs nevar parādīt šo API atslēgu.", + "copyKey": "Kopēt API atslēgu", + "createKey": "Izveidot MCP API atslēgu", + "errorTitle": "MCP API atslēgu neizdevās izveidot", + "loginRequired": "Pēc iestatīšanas piesakieties kā administrators, lai izveidotu API atslēgu.", + "configuration": "Klienta konfigurācija", + "copy": "Kopēt konfigurāciju", + "copied": "Nokopēts", + "advanced": "Atvērt MCP rīkus, atļaujas un iestatīšanas informāciju" } }, - "user": { - "title": "Administratora lietotājs", - "subtitle": "Norādiet administratora lietotāja akreditācijas datus.", - "notification": { - "success": { - "title": "Lietotājs izveidots", - "message": "Lietotājs veiksmīgi izveidots" - }, - "error": { - "title": "Lietotāja izveide neizdevās" - } - } - }, - "group": { - "title": "Ārēja grupa", - "subtitle": "Norādiet grupu, kas jāizmanto ārējiem lietotājiem.", - "form": { - "name": { - "label": "Grupas nosaukums", - "description": "Nosaukumam jāatbilst ārējā nodrošinātāja administratoru grupai" - } - } - }, - "settings": { - "title": "Iestatījumi", - "subtitle": "Konfigurējiet servera iestatījumus." - }, - "integrations": { - "title": "Integrācijas", - "subtitle": "Atlasiet pakalpojumus, ko izmantojat.", - "description": "Izvēlieties integrācijas, ko vēlaties savienot. Mēs automātiski iestatīsim jūsu informācijas paneli ar atbilstošiem logrīkiem.", - "action": { - "continue": "Turpināt", - "skip": "Pagaidām izlaist šo soli" - }, - "configure": { - "progress": "{current} no {total}", - "skip": "Izlaist šo integrāciju", - "finishing": "Notiek informācijas paneļa iestatīšana...", - "error": { - "title": "Neizdevās iestatīt", - "message": "Radās kļūda, iestatot jūsu informācijas paneli. Lūdzu, mēģiniet vēlreiz." - }, - "helpers": { - "tooltip": "URL palīgrīki", - "description": "Šie palīgrīki mēģina uzminēt jūsu pakalpojumu URL. Ja tas nedarbojas, vienkārši ievadiet adresi manuāli." - } - }, - "urlTemplate": { - "label": "Bāzes URL", - "placeholder": "homelab.local vai 192.168.1.1", - "hint": "Ievadiet savu bāzes domēnu vai IP, lai automātiski aizpildītu integrāciju URL", - "warning": "Bāzes URL iestatīšana tagad automātiski aizpildīs visus integrāciju URL, ietaupot laiku iestatīšanas laikā", - "preview": "piem., {example}", - "mode": { - "subdomain": "Apakšdomēns", - "hostPort": "Resursdators:Ports" - } - }, - "docker": { - "detected": "Docker atklāja {count} pakalpojumus", - "detectedBreakdown": "{integrations} integrācijas · {apps} lietotnes", - "summary": "Homarr atklāja {apps} lietotnes, {integrations} no tām ir iebūvētas integrācijas", - "appBadge": "Lietotne", - "appSectionLabel": "Pievienojamās lietotnes informācijas panelim ({count} atlasītas)", - "scanning": "Notiek Docker skenēšana...", - "scanningDescription": "Meklē darbojošos konteinerus jūsu sistēmā" + "review": { + "title": "Viena tāfele, veidota jūsu pakalpojumiem", + "description": "Homarr pārbauda nesaglabātos savienojumus, importē atlasītās lietotnes, lieto izskatu un izkārtojumus, pēc tam atver precīzi konfigurēto tāfeli.", + "board": "Pirmā tāfele", + "columns": "Tāfeles kolonnas", + "columnsValue": "{count, plural, zero {# kolonnas} one {# kolonna} other {# kolonnas}}", + "sidebars": "Sānjoslas", + "sidebarsValue": "", + "layouts": "Adaptīvi izkārtojumi", + "layoutsValue": "Mobilais + pamata", + "integrations": "Integrācijas", + "integrationsValue": "", + "apps": "Lietotņu elementi", + "appsValue": "", + "language": "Valoda", + "theme": "Motīvs", + "themeAuto": "Sistēmas iestatījums", + "themeLight": "Gaišs", + "themeDark": "Tumšs", + "colors": "Tāfeles krāsas", + "radius": "Logrīka stūru noapaļojums", + "automaticTitle": "Ko izveidos Homarr", + "automaticDescription": "Saderīgi logrīki, ikonas, lietotņu saites, integrāciju attiecības un adaptīvais novietojums tiek iegūti no kopīgā Homarr kataloga. Katru rezultātu vēlāk varat rediģēt.", + "dockerWarningTitle": "Iestatīšanas laikā mainījās daži Docker apzīmējumi", + "dockerWarningDescription": "{count, plural, zero {# atlasīto Docker rezultātu nevarēja lietot, jo pakalpojums mainījās, bija paredzēts citai tāfelei vai tā logrīks nebija saderīgs} one {# atlasīto Docker rezultātu nevarēja lietot, jo pakalpojums mainījās, bija paredzēts citai tāfelei vai tā logrīks nebija saderīgs} other {# atlasītos Docker rezultātus nevarēja lietot, jo pakalpojumi mainījās, bija paredzēti citai tāfelei vai to logrīki nebija saderīgi}}.", + "errorTitle": "Tāfeli neizdevās izveidot", + "progress": { + "applying": "Savienojumu pārbaude un tāfeles izveide", + "done": "Jūsu tāfele ir gatava" } }, "finish": { - "title": "Pabeigt Iestatīšanu", - "subtitle": "Viss ir gatavs!", - "description": "Iestatīšanas process ir veiksmīgi pabeigts. Tagad varat sākt izmantot Homarr. Atlasiet nākamo darbību:", - "action": { - "goToBoard": "Doties uz dēli {name}", - "createBoard": "Izveidot savu pirmo dēli", - "inviteUser": "Ielūgt citus lietotājus", - "docs": "Lasīt dokumentāciju" - } + "title": "Jūsu pirmā tāfele ir gatava.", + "description": "Homarr savienoja jūsu atlasītos elementus un pārējos atstāja rediģējamus. Atveriet tāfeli tūlīt; īsā iebūvētā ekskursija var parādīt rediģēšanas režīmu, logrīkus, izkārtojumus un meklēšanu.", + "openBoard": "Atvērt manu tāfeli", + "manageTitle": "Pārvaldīt", + "manageDescription": "Precīzi pielāgojiet lietotnes, integrācijas, tāfeles, lietotājus un servera iestatījumus.", + "workshopTitle": "Darbnīca", + "workshopDescription": "Atklājiet un instalējiet kopienas pielāgotos logrīkus.", + "docsTitle": "Iepazīt Homarr", + "docsDescription": "Izlasiet mērķtiecīgus ceļvežus par tāfelēm, logrīkiem, integrācijām un rīkiem." } - }, - "backToStart": "Atpakaļ uz sākumu" + } }, "user": { - "title": "Lietotāji", "name": "Lietotājs", "page": { "login": { @@ -159,12 +249,10 @@ }, "invite": { "title": "Pievienoties Homarr", + "titleWithAppName": "Pievienoties {appName}", "subtitle": "Laipni lūgti Homarr! Lūdzu, izveidojiet savu kontu", + "subtitleWithAppName": "Laipni lūdzam {appName}! Izveidojiet savu kontu", "description": "Jūs uzaicināja {username}" - }, - "init": { - "title": "Jauna Homarr instalācija", - "subtitle": "Lūdzu, izveidojiet sākotnējo administratora lietotāju" } }, "field": { @@ -192,12 +280,17 @@ "previousPassword": { "label": "Iepriekšējā parole" }, - "homeBoard": { - "label": "Sākuma dēlis" - }, "pingIconsEnabled": { "label": "Izmantot ikonas pingiem" }, + "byteUnitSystem": { + "label": "Datu lieluma mērvienības", + "description": "Izvēlieties, kā Homarr attēlo baitu lielumus un pārsūtīšanas ātrumus. Bitu ātrumiem vienmēr tiek izmantotas decimālās mērvienības.", + "options": { + "binary": "Binārās", + "decimal": "Decimālās" + } + }, "enableRightClickOnWidgets": { "label": "Iespējot logrīku labo klikšķi", "description": "Rādīt Homarr konteksta izvēlni, ar peles labo pogu noklikšķinot uz logrīka. Atspējojiet, lai izmantotu pārlūkprogrammas noklusējuma izvēlni (piemēram, “Atvērt saiti jaunā cilnē”)." @@ -247,7 +340,6 @@ } } }, - "create": "Izveidot lietotāju", "changePassword": { "label": "Mainīt paroli", "notification": { @@ -259,56 +351,6 @@ } } }, - "changeHomeBoard": { - "notification": { - "success": { - "message": "Sākuma dēlis veiksmīgi nomainīts" - }, - "error": { - "message": "Nevar nomainīt sākuma dēli" - } - } - }, - "changeSearchPreferences": { - "notification": { - "success": { - "message": "Meklēšanas preferences veiksmīgi mainītas" - }, - "error": { - "message": "Nevar mainīt meklēšanas preferences" - } - } - }, - "changeFirstDayOfWeek": { - "notification": { - "success": { - "message": "Nedēļas pirmā diena veiksmīgi nomainīta" - }, - "error": { - "message": "Nevar nomainīt nedēļas pirmo dienu" - } - } - }, - "changePingIconsEnabled": { - "notification": { - "success": { - "message": "Pinga ikonas veiksmīgi pārslēgtas" - }, - "error": { - "message": "Nevar pārslēgt pinga ikonas" - } - } - }, - "changeDdgBangs": { - "notification": { - "success": { - "message": "DuckDuckGo bangs veiksmīgi pārslēgti" - }, - "error": { - "message": "Nevar pārslēgt DuckDuckGo bangs" - } - } - }, "manageAvatar": { "changeImage": { "label": "Mainīt attēlu", @@ -338,16 +380,6 @@ } } }, - "editProfile": { - "notification": { - "success": { - "message": "Profils veiksmīgi atjaunināts" - }, - "error": { - "message": "Nevar atjaunināt profilu" - } - } - }, "delete": { "label": "Dzēst lietotāju neatgriezeniski", "description": "Dzēš šo lietotāju, ieskaitot viņa preferences. Dēļi netiks dzēsti. Lietotājs netiks informēts.", @@ -356,18 +388,13 @@ "select": { "label": "Atlasīt lietotāju", "notFound": "Lietotājs nav atrasts" - }, - "transfer": { - "label": "Atlasīt jauno īpašnieku" } } }, "group": { - "title": "Grupas", "name": "Grupa", "search": "Atrast grupu", "field": { - "name": "Nosaukums", "members": "Dalībnieki", "homeBoard": { "label": "Sākuma dēlis", @@ -388,6 +415,19 @@ } } }, + "custom-widget": { + "title": "Pielāgotie logrīki", + "item": { + "manage": { + "label": "Pārvaldīt pielāgotos logrīkus", + "description": "Atļaut dalībniekiem izveidot, rediģēt un dzēst pielāgoto logrīku definīcijas" + }, + "secret-write": { + "label": "Konfigurēt pielāgoto logrīku noslēpumus", + "description": "Atļaut dalībniekiem un viņu API atslēgām iestatīt šifrētus pielāgoto logrīku akreditācijas datus" + } + } + }, "app": { "title": "Lietotnes", "item": { @@ -493,6 +533,35 @@ "description": "Atļaut dalībniekiem pārvaldīt un dzēst jebkuru meklētājprogrammu" } } + }, + "matrix": { + "none": "Nav piekļuves", + "impliedHint": "Piešķir arī: {permissions}", + "grantedViaAdmin": "Administratoriem tas jau ir. Iestatiet administratoram “Nav piekļuves”, lai konfigurētu to atsevišķi.", + "preset": { + "label": "Iepriekšiestatījumi", + "viewer": "Skatītājs", + "viewerDescription": "Tikai lasāms: skatīt tāfeles un multividi, izmantot jau esošās lietotnes un integrācijas.", + "editor": "Redaktors", + "editorDescription": "Ikdienas pārvaldība: izveidot un rediģēt tāfeles, lietotnes, integrācijas un meklētājprogrammas.", + "admin": "Administrators", + "adminDescription": "Neierobežota piekļuve visām funkcijām un iestatījumiem, tostarp lietotāju pārvaldībai.", + "custom": "Pielāgots" + }, + "effective": { + "title": "Efektīvās atļaujas", + "description": "Pilns, nedublēts darbību kopums, ko var veikt šīs grupas dalībnieki, tostarp netieši piešķirtās atļaujas.", + "empty": "Nav atlasīta neviena atļauja" + }, + "noneDescription": "Dalībniekiem nav piekļuves šai sadaļai.", + "level": { + "view": "Skatīt", + "use": "Lietot", + "interact": "Mijiedarboties", + "modify": "Modificēt", + "full": "Pilna" + }, + "capabilityIncluded": "Jau iekļauts līmenī “{level}”" } }, "memberNotice": { @@ -607,21 +676,24 @@ "search": "Atrast aplikāciju", "page": { "list": { - "title": "Lietotnes", + "ariaLabel": "Konfigurētās lietotnes", "noResults": { "title": "Vēl nav nevienas lietotnes", - "action": "Izveidojiet savu pirmo lietotni" + "description": "Lietotnes ir saites uz pakalpojumiem un rīkiem, ko vēlaties izmantot savās tāfelēs.", + "action": "Izveidojiet savu pirmo lietotni", + "filteredTitle": "Neviena lietotne neatbilst meklēšanai", + "filteredDescription": "Neviena lietotne neatbilst “{search}”. Izmēģiniet citu nosaukumu vai URL.", + "createOnlyTitle": "Varat tikai pievienot lietotnes", + "createOnlyDescription": "Jūsu atļaujas ļauj izveidot lietotnes, bet ne pārlūkot esošās. Lai skatītu pilnu sarakstu, lūdziet administratoram piekļuvi lietotņu pārvaldībai." } }, "create": { "title": "Jauna lietotne", "notification": { "success": { - "title": "Izveide veiksmīga", "message": "Lietotne tika veiksmīgi izveidota" }, "error": { - "title": "Izveide neizdevās", "message": "Lietotni nevarēja izveidot" } } @@ -630,11 +702,9 @@ "title": "Rediģēt lietotni", "notification": { "success": { - "title": "Izmaiņas veiksmīgi piemērotas", "message": "Lietotne tika veiksmīgi saglabāta" }, "error": { - "title": "Nevar piemērot izmaiņas", "message": "Lietotni nevarēja saglabāt" } } @@ -644,26 +714,18 @@ "message": "Vai esat pārliecināts, ka vēlaties dzēst lietotni {name}?", "notification": { "success": { - "title": "Dzēšana veiksmīga", "message": "Lietotne tika veiksmīgi dzēsta" }, "error": { - "title": "Dzēšana neizdevās", "message": "Nevar dzēst lietotni" } } } }, "field": { - "name": { - "label": "Nosaukums" - }, "description": { "label": "Apraksts" }, - "url": { - "label": "Url" - }, "useDifferentUrlForPing": { "checkbox": { "label": "Izmantot citu URL ping pārbaudei", @@ -678,44 +740,582 @@ "search": "Meklēt lietotni", "noResults": "Nav rezultātu", "action": "Atlasīt {app}", - "title": "Atlasiet lietotni, ko pievienot šim dēlim" + "title": "Atlasiet lietotni, ko pievienot šim dēlim", + "toggle": "Noklikšķiniet, lai atlasītu", + "selected": "Atlasīts", + "multiple": "Pievienot: {count}", + "selectedCount": "{count, plural, zero {# atlasīts} one {# atlasīts} other {# atlasīti}}", + "appsSelected": "{count, plural, zero {# lietotne atlasīta} one {# lietotne atlasīta} other {# lietotnes atlasītas}}", + "selectMultiple": "Atlasīt vairākas", + "cancelMultiple": "Iziet no vairākkārtējas atlases", + "customApplication": "Pielāgota lietotne", + "application": "Lietotne" }, "create": { "title": "Izveidot jaunu lietotni", "description": "Izveidot jaunu lietotni ", "action": "Atvērt lietotnes izveidi" - }, - "add": "" + } } }, + "tips": { + "dismiss": "Nerādīt padomu", + "multiSelectApps": "Padoms: turiet nospiestu Ctrl / ⌘, lai vienlaikus atlasītu vairākas lietotnes" + }, "customWidget": { + "secretEntry": { + "title": "Konfigurēt API avotu", + "description": "Apstipriniet servera URL un ievadiet akreditācijas datus. Homarr šifrē slepenās vērtības, un tās nekad netiek nosūtītas pieprasītājam aģentam.", + "loading": "Notiek drošā pieprasījuma ielāde…", + "applying": "Šī konfigurācija tiek lietota… Neaizveriet šo lapu.", + "saved": "API avots konfigurēts. Varat aizvērt šo lapu.", + "unavailable": "Pieprasījums nav pieejams", + "saveError": "API avotu neizdevās konfigurēt", + "source": "API avots: {name}", + "baseUrl": "Servera URL", + "networkScope": "Tīkla piekļuve", + "save": "Saglabāt API konfigurāciju", + "expires": "Šis vienreizējais pieprasījums beidzas {time}." + }, "page": { "list": { - "loading": "Notiek ielāde..." + "noResults": "Vēl nav pielāgotu logrīku. Izveidojiet pirmo!", + "noDescription": "Nav apraksta", + "enabled": "Iespējots", + "disabled": "Atspējots", + "disabledDescription": "Šis logrīks paliek konfigurēts, bet netiks ielādēts nevienā tāfelē.", + "requestCount": "{count, plural, zero {# pieprasījumu} one {# pieprasījums} other {# pieprasījumi}}", + "invalidDefinition": "Nederīga definīcija", + "migrationRequired": "Nepieciešama migrācija", + "migrationInstructions": "Atveriet sadaļu “Darbības”, lai kopētu vai eksportētu sākotnējo v1 definīciju manuālai atkārtotai izveidei. Varat izmantot arī migrācijas uzvedni ar LLM. Esošie novietojumi tāfelēs pēc migrācijas turpinās darboties.", + "missingCredentials": "{count, plural, zero {Trūkst akreditācijas datu} one {Trūkst # akreditācijas datu} other {Trūkst # akreditācijas datu}}", + "missingCredentialsDescription": "{count, plural, zero {Šim logrīkam joprojām nepieciešami akreditācijas dati.} one {Šim logrīkam joprojām nepieciešami vieni akreditācijas dati.} other {Šim logrīkam joprojām nepieciešami # akreditācijas dati.}} Atlasiet šo emblēmu, lai konfigurētu URL un šifrētās vērtības." + }, + "create": { + "title": "Izveidot pielāgotu logrīku", + "subtitle": "Definējiet API URL, autentifikāciju un to, kā attēlot atbildes datus." + }, + "tabs": { + "ariaLabel": "Pielāgoto logrīku sadaļas", + "installed": "Instalētie", + "workshop": "Darbnīca" } }, "action": { - "create": "Izveidot" + "pasteImportHint": "Ielīmējiet pilnu pielāgotā logrīka JSON, izmantojot Ctrl+V vai Command+V", + "delete": "Dzēst pielāgoto logrīku", + "deleteConfirm": "Vai tiešām vēlaties dzēst \"{name}\"? Šo darbību nevar atsaukt.", + "export": "Eksportēt", + "duplicate": "Dublēt", + "aiPrompt": "Veidot ar MI", + "copyAiPrompt": "Kopēt MI uzvedni", + "enable": "Iespējot", + "disable": "Atspējot", + "menu": "Darbības", + "downloadSkill": "Skatīt pielāgotā logrīka prasmes", + "publishWorkshop": "Publicēt darbnīcā", + "migrate": "Migrēt pielāgoto logrīku", + "configureSources": "Konfigurēt avotus", + "copyLegacyDefinition": "Kopēt logrīka sākotnējo saturu", + "exportLegacyDefinition": "Eksportēt logrīka sākotnējo saturu", + "copyMigrationPrompt": "Kopēt LLM migrēšanas uzvedni", + "pasteMigration": "Ielīmēt migrēto logrīku", + "importMigration": "Importēt migrētu JSON failu" + }, + "sourceSetupDialog": { + "title": "Konfigurēt logrīka avotus", + "description": "Pārskatiet, ar kurieni šis logrīks izveido savienojumu, un pievienojiet vai aizstājiet tā šifrētos akreditācijas datus.", + "credentialsRequired": "Pieprasījumi neizdosies, kamēr nebūs pievienoti nepieciešamie akreditācijas dati.", + "save": "Saglabāt konfigurāciju" + }, + "field": { + "description": "Apraksts" + }, + "editor": { + "errorBoundary": { + "title": "Radās kļūda" + }, + "action": { + "components": "Komponenti", + "format": "Formatēt", + "insertStarter": "Ievietot sākuma veidni", + "redo": "Atkārtot", + "copied": "Nokopēts", + "schema": "Shēma" + }, + "reference": { + "minimal": "Minimālais piemērs", + "full": "Pilns piemērs" + }, + "componentReference": { + "search": "Meklēt komponentus", + "empty": "Atbilstoši komponenti nav atrasti", + "count": "Pieejami {count, number} komponenti" + }, + "status": { + "errors": "{count, number} kļūdas", + "warnings": "{count, number} brīdinājumi", + "ready": "Problēmas nav atrastas", + "position": "Rinda {line, number}, kolonna {column, number}", + "characters": "{count, number} rakstzīmes", + "charactersWithLimit": "{count, number} / {limit, number}" + }, + "diagnostics": { + "title": "Veidnes diagnostika", + "line": "Rinda {line, number}", + "ast": "{value}", + "bindingTypeConflict": "Ievade \"{value}\" tiek koplietota starp vadīklām ar nesaderīgiem vērtību tipiem.", + "runtimeBindingTypeConflict": "Ievade \"{value}\" ir saistīta gan ar {firstType}, gan ar {secondType}.", + "dynamicRequestId": "Nepieciešams burtisks requestId. Dinamiskie pieprasījumu ID netiek pieņemti.", + "dynamicInputBinding": "Saistīšanai nepieciešams burtisks ievades nosaukums.", + "inlineRequestProps": "Tīkla komponenti pieņem requestId un params; iekļautie URL, metodes, galvenes un pamatteksta rekvizīti ir bloķēti.", + "invalidRequestManifest": "Nosauktajiem pieprasījumiem jābūt derīgai pieprasījumu kartei. {value}", + "missingRequestId": "Šim tīkla komponentam nepieciešams burtisks requestId.", + "templateEmpty": "Ievadiet JSX veidni.", + "templateTooLong": "Veidne pārsniedz 50 000 rakstzīmju ierobežojumu.", + "unknownRequest": "Nosaukts pieprasījums ar ID \"{value}\" nepastāv." + } + }, + "workbench": { + "configure": "Konfigurēt", + "sectionNavigation": "Pielāgotā logrīka sadaļas", + "widgetPreview": "Logrīka priekšskatījums", + "generalInformation": "Vispārīga informācija", + "invalidWidget": "Nederīgs logrīks", + "section": { + "general": "Vispārīgi", + "sources": "API avoti", + "requests": "Pieprasījumi", + "options": "Opcijas", + "jsx": "JSX", + "preview": "Priekšskatījums" + }, + "status": { + "unsaved": "Nesaglabātas izmaiņas", + "invalid": "Jāpievērš uzmanība", + "ready": "Gatavs" + }, + "saveError": { + "title": "Logrīks netika saglabāts", + "description": "Izlabojiet šīs validācijas kļūdas un saglabājiet vēlreiz.", + "more": "Darbnīcā tiek rādītas vēl {count} kļūdas.", + "errors": "Validācijas kļūdas", + "copy": "Kopēt kļūdas", + "copied": "Kļūdas nokopētas" + }, + "action": { + "preview": "Testēt un priekšskatīt", + "previewLoading": "Notiek pieprasījumu testēšana" + }, + "requests": { + "title": "Nosauktie vaicājumi un darbības", + "label": "Pieprasījumi", + "description": "Vaicājumi ielādē datus; darbības tiek izpildītas tikai pēc lietotāja mijiedarbības. Abiem veidiem ir derīga jebkura HTTP metode." + }, + "options": { + "title": "Logrīka opcijas" + }, + "builder": { + "advancedManifest": "Papildu neapstrādātais manifests", + "advancedJson": "Papildu manifesta JSON", + "manifestFilename": "widget.json", + "request": "Pieprasījums {count, number}", + "requestId": "Pieprasījuma ID", + "type": "Lejupielādes klienta tips", + "method": "Metode", + "source": "API avots", + "run": "Palaist", + "runLoad": "Kad logrīks tiek ielādēts", + "runManual": "No SubFetch", + "permission": "Atļauja", + "path": "Ceļš", + "pathDescription": "Izmantojiet '{option:name}' logrīka opcijām un '{param:name}' izsaukuma vērtībām.", + "requestDetails": "Vaicājums, pamatteksts un darbība", + "queryValues": "Vaicājuma vērtības", + "queryKey": "Vaicājuma atslēga", + "queryKeyInvalid": "Izmantojiet unikālu ID, kas sākas ar burtu un satur tikai burtus, ciparus, - vai _.", + "valueSource": "Vērtības avots", + "literal": "Burtiska vērtība", + "widgetOption": "Logrīka opcija", + "invocationParameter": "Izsaukuma parametrs", + "option": "Opcija", + "parameterName": "Parametra nosaukums", + "value": "Vērtība", + "removeQueryValue": "Noņemt vaicājuma vērtību", + "addQueryValue": "Pievienot vaicājuma vērtību", + "jsonBody": "JSON pamatteksts", + "jsonBodyDescription": "Neobligāti. Ievietojiet $option un $param atsauces jebkurā dziļumā.", + "insertOptionReference": "Ievietot opcijas atsauci", + "insertParameterReference": "Ievietot parametra atsauci", + "confirmation": "Apstiprinājuma ziņojums", + "invalidation": "Atsvaidzināt pēc panākumiem", + "invalidationDescription": "Ar komatiem atdalīti vaicājumu ID", + "noAuth": "Sūtīt bez avota autentifikācijas", + "moveRequestUp": "Pārvietot pieprasījumu uz augšu", + "moveRequestDown": "Pārvietot pieprasījumu uz leju", + "removeRequest": "Noņemt pieprasījumu", + "addRequest": "Pievienot pieprasījumu", + "optionName": "Opcijas nosaukums", + "label": "Etiķete", + "control": "Vadīkla", + "description": "Apraksts", + "default": "Noklusējums", + "optionDetails": "Ierobežojumi un dinamiskās izvēles", + "minimum": "Minimums", + "maximum": "Maksimums", + "step": "Solis", + "choiceLabel": "Izvēles etiķete", + "choiceValue": "Izvēles vērtība", + "newChoice": "Jauna izvēle", + "addChoice": "Pievienot izvēli", + "removeChoice": "Noņemt izvēli", + "choicesRequest": "Ielādēt izvēles no pieprasījuma", + "itemsPath": "Vienumu ceļš", + "itemsPathPlaceholder": "vienumi (neobligāti)", + "valuePath": "Vērtības ceļš", + "labelPath": "Etiķetes ceļš", + "group": "Grupa", + "advancedOption": "Papildu opcija", + "moveOptionUp": "Pārvietot opciju uz augšu", + "moveOptionDown": "Pārvietot opciju uz leju", + "removeOption": "Noņemt opciju", + "addOption": "Pievienot opciju", + "invalidJson": "Nederīgs JSON", + "invalidWidget": "Nederīgs logrīks" + }, + "jsx": { + "title": "JSX veidne", + "label": "Veidne" + }, + "sources": { + "title": "API avoti un akreditācijas dati", + "newName": "API {count, number}", + "duplicateSourceId": "API avotu ID jābūt unikāliem.", + "credentialRemoved": "Akreditācijas dati noņemti", + "credentialRemovedDescription": "Saglabātā vērtība tika dzēsta.", + "primary": "Primārais API", + "id": "Avota ID", + "name": "Darba vārds", + "baseUrl": "Bāzes URL", + "baseUrlError": { + "invalid": "Ievadiet pilnu URL.", + "protocol": "Izmantojiet HTTP vai HTTPS URL.", + "credentials": "Noņemiet lietotājvārdu un paroli no šī URL. Tā vietā konfigurējiet akreditācijas datus zemāk.", + "queryOrFragment": "Noņemiet vaicājuma virkni vai fragmentu no šī pamata URL. Pievienojiet vaicājuma vērtības nosauktam pieprasījumam." + }, + "networkScope": "Tīkla piekļuve", + "authentication": "Autentifikācija", + "headerName": "Galvenes nosaukums", + "queryParameter": "Vaicājuma parametrs", + "configured": "Konfigurēts — ievadiet aizstājēju", + "clear": "Skaidrs", + "remove": "Noņemt avotu un tā pieprasījumus", + "advanced": "Papildu", + "add": "Pievienot citu API avotu", + "sourceType": "Integrācija", + "manualSource": "HTTP API", + "existingIntegration": "Esoša integrācija", + "integrationType": "Integrācijas veids", + "selectIntegration": "Konfigurēta integrācija", + "noIntegrations": "Nav pieejamu atbilstošu integrāciju", + "integrationUnavailable": "Atlasītā integrācija vairs nav pieejama. Atlasiet citu integrāciju.", + "integrationDescription": "Izmanto saglabāto integrācijas URL un akreditācijas datus. Izmaiņas tiek lietotas automātiski. Lai izpildītu pieprasījumus, nepieciešama pilna piekļuve integrācijai." + }, + "ai": { + "title": "Izveidojiet vai labojiet ar jebkuru MI", + "description": "Vispirms pievienojiet API dokumentācijas URL, ja tāds ir. Labojumu gadījumā, ja iespējams, palaidiet priekšskatījumu. Kopējiet uzvedni jebkurā MI; tas var lūgt trūkstošo informāciju. Ielīmējiet tā galīgo JSON šeit.", + "request": "Ko šim logrīkam vajadzētu darīt?", + "documentationUrl": "API dokumentācijas URL (neobligāti)", + "paste": "Ielīmēt", + "response": "MI atbilde", + "manualCopyDescription": "Starpliktuves piekļuve nav pieejama. Atlasiet tālāk redzamo uzvedni un kopējiet to manuāli.", + "manualPasteDescription": "Starpliktuves piekļuve nav pieejama vai nokopētā atbilde ir jālabo. Ielīmējiet MI JSON atbildi šeit.", + "selectAll": "Atzīmēt visu", + "loadResponse": "Ielādēt atbildi", + "loaded": "Logrīks ielādēts redaktorā", + "invalidResponse": "Starpliktuvē nav derīga v2 logrīka", + "invalidResponseDetail": "MI atbilde nav derīga: {message}" + }, + "preview": { + "invalid": "Izlabojiet validācijas kļūdas, lai priekšskatītu šo logrīku.", + "fixtureError": "Priekšskatījuma testa dati izraisīja kļūdu", + "requestData": "Pieprasījuma dati", + "status": { + "idle": "Pieprasījumi nav testēti", + "loading": "Notiek pieprasījumu testēšana", + "success": "Visi ielādes pieprasījumi ir veiksmīgi", + "error": "Neizdevās izpildīt vienu vai vairākus ielādes pieprasījumus" + }, + "result": { + "loading": { + "title": "Notiek API pieprasījumu testēšana", + "description": "Homarr izveido priekšskatījuma sesiju un ielādē logrīka datus." + }, + "success": { + "title": "Priekšskatījums gatavs", + "description": "{succeeded, plural, =0 {Šim logrīkam nav ielādes pieprasījumu.} one {Veiksmīgs {succeeded} ielādes pieprasījums.} other {Veiksmīgi {succeeded} ielādes pieprasījumi.}} Atveriet sadaļu Dati, lai pārbaudītu atbildi." + }, + "error": { + "title": "Priekšskatījums pabeigts ar pieprasījumu kļūdām", + "description": "Veiksmīgi izpildīti {succeeded, number}, bet neizdevās izpildīt {failed, number}. Atveriet sadaļu Dati, lai skatītu atbildi un kļūdu informāciju." + } + }, + "instanceOptions": "Instances opcijas", + "liveActions": "Izpildīt darbības konfigurētajā API", + "liveActionsDescription": "Izslēgts režīms ir droša simulācija. Ieslēdzot šo opciju, tiks ietekmēts reālais pakalpojums.", + "noActions": "Darbības nav definētas.", + "containedFailures": "Izpildes kļūdas tiek izolētas šajā logrīkā. Pieprasījumu žurnālos nekad netiek iekļautas slepenās vērtības.", + "validation": { + "title": "Validācija", + "ready": "Logrīka definīcija ir derīga." + }, + "accessibility": { + "title": "Piekļūstamības pārbaudes", + "ready": "Bieži sastopami piekļūstamības trūkumi nav konstatēti.", + "pending": "Piekļūstamības pārbaudes tiks veiktas, kad logrīka definīcija būs derīga.", + "imageAlt": "Pievienojiet alt tekstu katram attēlam; tukšu alt izmantojiet tikai dekoratīviem attēliem.", + "actionIconLabel": "Katram ActionIcon pievienojiet aria-label vai title.", + "inputLabel": "Katram ievades laukam pievienojiet redzamu etiķeti vai pieejamu nosaukumu." + }, + "journal": "Rediģēts pieprasījumu žurnāls", + "actionParameters": "Darbības parametri (JSON)", + "invalidParameters": "Izmantojiet deklarētos virknes, skaitļa un Būla parametru tipus.", + "runDestructive": "Palaist destruktīvu darbību", + "runAction": "Palaist darbību", + "deleteConfirmation": "Šī priekšskatījuma darbība maina attālos datus, izmantojot konfigurēto API.", + "simulated": "Darbība simulēta", + "httpStatus": "HTTP {status, number}", + "tab": { + "widget": "Logrīks", + "data": "Dati", + "options": "Opcijas", + "state": "Darba stāvoklis", + "actions": "Vadīklas", + "diagnostics": "Diagnostika" + }, + "size": { + "compact": "Kompakts", + "standard": "Standarta", + "wide": "Plats" + }, + "fixture": { + "live": "Tiešraide", + "loading": "Notiek ielāde", + "empty": "Tukšs", + "error": "Kļūda" + } + } + }, + "preview": { + "request": { + "permission": { + "view": "Skatīt", + "modify": "Mainīt", + "full": "Pilna" + } + } + }, + "notification": { + "created": "Logrīks “{name}” ir veiksmīgi izveidots.", + "updated": "Logrīks “{name}” ir veiksmīgi atjaunināts.", + "deleted": "Logrīks “{name}” ir dzēsts.", + "imported": "Logrīks ir veiksmīgi importēts.", + "migrated": "Mantotais logrīks veiksmīgi migrēts. Esošie paneļa izvietojumi tagad izmanto v2 definīciju.", + "migrationError": "Neizdevās migrēt mantoto logrīku. Pārliecinieties, ka fails izmanto homarr-custom-widget-v2 shēmu.", + "legacyDefinitionCopied": "Logrīka sākotnējais saturs tika nokopēts. Saglabātās akreditācijas datu vērtības nav iekļautas.", + "legacyDefinitionCopyError": "Neizdevās nokopēt logrīka sākotnējo saturu.", + "migrationPromptCopied": "Rediģēta migrēšanas uzvedne tika nokopēta. Ielīmējiet to LLM, nokopējiet tā vienīgo JSON atbildi un pēc tam izvēlieties šeit ielīmēt migrēto logrīku.", + "migrationPromptCopyError": "Neizdevās nokopēt migrēšanas uzvedni.", + "sourcesConfigured": "Logrīka avoti un akreditācijas dati saglabāti.", + "sourceConfigurationError": "Neizdevās konfigurēt logrīka avotus.", + "aiPromptCopiedWithCount": "MI uzvedne nokopēta starpliktuvē ({count, number} rakstzīmes).", + "aiPromptCopyError": "Neizdevās nokopēt uzvedni starpliktuvē. Iespējams, jūsu pārlūkprogramma šo funkciju neatbalsta.", + "aiPromptSent": "Uzvedne nosūtīta. Varat turpināt rediģēšanu, kamēr asistents darbojas fonā.", + "updateError": "Neizdevās atjaunināt logrīku. Jūsu izmaiņas netika saglabātas.", + "importError": "Neizdevās importēt logrīku. Pārliecinieties, ka fails ir derīgs pielāgota logrīka JSON eksports.", + "exportError": "Neizdevās eksportēt logrīku.", + "duplicated": "Logrīks “{name}” ir dublēts.", + "duplicateError": "Neizdevās dublēt logrīku.", + "toggleError": "Neizdevās pārslēgt logrīka statusu.", + "deleteError": "Neizdevās dzēst logrīku.", + "previewError": "Neizdevās izgūt priekšskatījumu. Pārbaudiet URL un mēģiniet vēlreiz." + }, + "importReview": { + "title": "Pārskatīt pielāgotā logrīka importēšanu", + "description": "Pirms importēšanas pārbaudiet, ar kurieni šis logrīks izveido savienojumu un kāda paneļa piekļuve nepieciešama tā vadīklām.", + "migrationTitle": "Pārskatīt migrēto v2 aizstājēju", + "migrationDescription": "Pārskatiet un apstipriniet šo ģenerēto v2 definīciju. Apstiprināšana atomiski aizstāj saglabāto v1 ierakstu, vienlaikus saglabājot esošos paneļa izvietojumus, kas saistīti ar to pašu logrīka ID.", + "fileLabel": "Izvēlieties pielāgotā logrīka JSON failu", + "name": "Darba vārds", + "origin": "Bāzes izcelsme", + "authentication": "Autentifikācija", + "networkScope": "Tīkla tvērums", + "methods": "HTTP metodes", + "permissions": "Nepieciešamās paneļa atļaujas", + "sourceSetup": { + "title": "Konfigurēt API avotus", + "description": "Apstipriniet, ar kurieni šis logrīks izveido savienojumu, un pievienojiet akreditācijas datus. Privātie un cilpas adreses URL ir specifiski jūsu Homarr instalācijai.", + "suggestedUrl": "Ieteiktais URL", + "confirmUrl": "Apstiprinu, ka šis servera URL ir pareizs manai Homarr instalācijai", + "ready": "URL gatavs", + "needsUrl": "Apstiprināt URL", + "credentialsMissing": "Trūkst akreditācijas datu", + "credentialsOptional": "Varat instalēt bez akreditācijas datiem un konfigurēt tos vēlāk, taču pieprasījumi neizdosies, kamēr tie nebūs pievienoti." + }, + "actionWarning": { + "title": "Šis logrīks var mainīt attālos datus", + "description": "Pēc importēšanas pārskatiet katru nosaukto darbību, mantotos akreditācijas datus un destruktīvo darbību apstiprinājumus. Noslēpumi failā nav iekļauti." + }, + "cancel": "Atcelt importēšanu", + "confirm": "Importēt logrīku", + "confirmMigration": "Apstiprināt v2 aizstāšanu" + }, + "secret": { + "apiKey": "API atslēga vai pilnvara", + "username": "Lietotājvārds", + "password": "Parole", + "savedPlaceholder": "••••••• (saglabāts, atstājiet tukšu, lai saglabātu)" + } + }, + "workshop": { + "title": "Darbnīca", + "browseWorkshop": "Pārlūkot darbnīcu", + "openCommunity": "Atvērt darbnīcu", + "openOnWorkshop": "Atvērt {title} darbnīcas tīmekļa vietnē", + "back": "Atpakaļ uz darbnīcu", + "search": "Meklēt logrīkus", + "searchCss": "Meklēt CSS motīvus", + "sort": "Kārtot", + "sortTop": "Visaugstāk novērtētie", + "sortNewest": "Jaunākie", + "listAriaLabel": "Workshop logrīki", + "listAriaLabelCss": "Workshop CSS motīvi", + "empty": "Nevienam logrīkam neatbilst šī meklēšana.", + "emptyDescription": "Šeit tiek rādīti kopienas logrīki, kas publicēti Workshop.", + "emptyFilteredTitle": "Nevienam logrīkam neatbilst šī meklēšana", + "emptyFilteredDescription": "Neviens Workshop logrīks neatbilst “{search}”.", + "emptyCss": "Nevienam CSS motīvam neatbilst šī meklēšana.", + "unavailableTitle": "Šķiet, ka Homarr Workshop nav pieejams", + "unavailable": "Kopienas pakalpojums, iespējams, īslaicīgi nedarbojas. Pēc brīža mēģiniet vēlreiz. Jūsu instalētie logrīki nav ietekmēti.", + "loadError": "Šo iesniegumu neizdevās ielādēt.", + "noDescription": "Apraksta nav", + "author": "autors: {name}", + "communityMember": "Kopienas dalībnieks", + "outdated": "Novecojis", + "outdatedWarning": "Autors šo iesniegumu atzīmēja kā novecojušu. Pirms importēšanas rūpīgi to pārbaudiet.", + "score": "Vērtējums: {count, number}", + "upvote": "Atbalstīt", + "downvote": "Noraidīt", + "voteError": "Balsojumu neizdevās saglabāt.", + "signIn": "Pierakstīties ar GitHub", + "signInError": "Neizdevās pierakstīties GitHub. Pārbaudiet, vai Workshop OAuth nodrošinātājs ir konfigurēts un uznirstošie logi ir atļauti.", + "signOut": "Izrakstīties", + "signInHint": "Lai balsotu vai ziņotu, pierakstieties. Instalēšanai Workshop konts nav nepieciešams.", + "securityNotice": "Workshop logrīki var izsaukt deklarētos API avotus un veikt deklarētās darbības, izmantojot akreditācijas datus, ko konfigurējat lokāli. Noslēpumi nekad netiek iekļauti.", + "securityNoticeCss": "Kopienas CSS var mainīt paneļa izskatu un lietojamību. Pirms importēšanas to pārbaudiet; nekas netiek saglabāts, kamēr nesaglabājat paneļa iestatījumus.", + "install": "Instalēt", + "installReviewTitle": "Pārskatīt pirms instalēšanas", + "installError": "Šo logrīku nevar instalēt", + "installErrorDescription": "Workshop iesniegums nav derīgs Custom JSX v2 logrīks.", + "useCss": "Importēt CSS", + "importCss": "Importēt CSS no Workshop", + "importCssConfirm": "Vai aizstāt pašreizējo pielāgoto CSS ar “{title}”? Nekas netiek saglabāts, kamēr nesaglabājat paneļa iestatījumus.", + "screenshotAlt": "{title} ekrānuzņēmums {count, number}", + "screenshotViewer": "{title} ekrānuzņēmumu skatītājs", + "screenshotsLabel": "{title} ekrānuzņēmumi", + "zoomScreenshot": "Skatīt pilnā izmērā", + "previousScreenshot": "Iepriekšējais ekrānuzņēmums", + "nextScreenshot": "Nākamais ekrānuzņēmums", + "showScreenshotThumbnails": "Rādīt ekrānuzņēmumu sīktēlus", + "hideScreenshotThumbnails": "Paslēpt ekrānuzņēmumu sīktēlus", + "closeScreenshotViewer": "Aizvērt ekrānuzņēmumu skatītāju", + "technicalDetails": "Tehniskā informācija", + "sourceCode": "Workshop ieraksts", + "export": "Eksportēt", + "report": "Ziņot", + "reportTitle": "Ziņot par iesniegumu", + "reportReason": "Iemesls", + "reportExplanation": "Kas Workshop moderatoriem būtu jāzina?", + "reportSend": "Nosūtīt ziņojumu", + "reportSent": "Ziņojums nosūtīts", + "reportSentDescription": "Workshop moderatori tagad var pārskatīt šo iesniegumu.", + "reportCount": "{count, plural, zero {# ziņojumu} one {# ziņojums} other {# ziņojumi}}", + "reportWarning": "{count, plural, zero {Šim iesniegumam ir # atvērtu kopienas ziņojumu.} one {Šim iesniegumam ir # atvērts kopienas ziņojums.} other {Šim iesniegumam ir # atvērti kopienas ziņojumi.}} Tas joprojām ir instalējams, taču vispirms pārskatiet tā saturu.", + "reportVisibility": "Ziņojuma informācija ir redzama tikai šī iesnieguma autoram un Workshop administratoriem.", + "reportCategory": { + "outdated": "Novecojis vai vairs nedarbojas", + "malicious": "Ļaunprātīgs", + "spam": "Surogātpasts", + "copyright": "Autortiesības", + "inappropriate": "Nepiemērots", + "other": "Cits" + }, + "publish": { + "title": "Publicēt Workshop", + "introTitle": "Kopīgot šo logrīku ar kopienu", + "introDescription": "Homarr eksportē pašreizējā logrīka kopiju bez akreditācijas datiem. Pievienojiet skaidru ieraksta informāciju, lai lietotāji pirms instalēšanas zinātu, ko tas dara.", + "listingDetails": "Workshop ieraksts", + "listingDetailsDescription": "Šī informācija tiks publiski rādīta kopā ar eksportētā logrīka definīciju.", + "success": "Publicēts nekavējoties. Kopienas dalībnieki tagad var instalēt šo logrīku un ziņot par to.", + "successTitle": "Jūsu logrīks ir pieejams", + "manageDescription": "Atveriet iesniegumu, lai atjauninātu tā ierakstu, pārskatītu ziņojumus, atzīmētu to kā novecojušu vai dzēstu. Iesniegumu pārvaldība notiek tieši Workshop vietnē.", + "viewSubmission": "Skatīt un pārvaldīt iesniegumu", + "done": "Pabeigts", + "signInHint": "Pierakstieties, lai publicētu ar savu Workshop identitāti.", + "titleField": "Virsraksts", + "descriptionField": "Apraksts", + "screenshots": "Ekrānuzņēmumi", + "screenshotsDescription": "Līdz pieciem PNG, JPEG vai WebP attēliem", + "screenshotsPlaceholder": "Izvēlieties ekrānuzņēmumus", + "invalidScreenshot": "Izmantojiet PNG, JPEG vai WebP attēlus, kuru izmērs nepārsniedz {maxSize} katram.", + "privateSourceWarning": "Šis logrīks satur privātus avotu URL: {sources}. Pirms publicēšanas aizstājiet personīgos resursdatorus vai IP adreses ar drošiem pakalpojumu vietturiem.", + "reviewSourcesTitle": "Pārskatīt privātos avotu URL", + "privateSourceConfirmation": "Es pārskatīju šos avotu URL, un tie neatklāj privātās infrastruktūras informāciju", + "action": "Publicēt tagad", + "publicationNote": "Publicēšana notiek nekavējoties. Pēc tam iesniegumu varat pārvaldīt Workshop vietnē.", + "definitionChanged": "Logrīks mainījās, kamēr tika sagatavota publicēšana. Vēlreiz pārskatiet tā privātos avotu URL un pēc tam mēģiniet vēlreiz.", + "error": "Publicēšana neizdevās" } }, "integration": { + "completion": { + "modalTitle": "Pakalpojums gatavs", + "title": "{name} ir savienots", + "description": "Savienojums izturēja pārbaudi. Izvēlieties, ko tālāk rādīt šajā panelī.", + "connectionReady": "Pakalpojuma savienojums ir gatavs", + "appReady": "Lietotnes saīsne ir gatava", + "compatibleWidgets": "", + "chooseWidget": "Izvēlieties logrīku", + "recipes": { + "title": "Ieteicams šim panelim", + "description": "Pamatojoties uz savienotajiem pakalpojumiem un logrīkiem, kas jau atrodas šajā panelī.", + "newConnectionReason": "Tagad pieejams, izmantojot {integration}", + "existingConnectionReason": "Darbojas ar pakalpojumu, ko jau esat savienojis", + "dismiss": "Noraidīt ieteikumus šim pakalpojumam šajā panelī" + } + }, "page": { "list": { - "title": "Integrācijas", + "ariaLabel": "Konfigurētās integrācijas", "search": "Meklēt integrācijas", + "scopedNote": "Tiek rādītas tikai tās integrācijas, kuras jums ir atļauts pārvaldīt.", "noResults": { - "title": "Vēl nav nevienas integrācijas" + "title": "Vēl nav nevienas integrācijas", + "description": "Savienojiet pakalpojumu, lai Homarr logrīkos izmantotu tā datus un darbības.", + "action": "Izveidot savu pirmo integrāciju", + "filteredTitle": "Neviena integrācija neatbilst meklēšanai", + "filteredDescription": "Neviena integrācija neatbilst “{search}”. Izmēģiniet citu nosaukumu, tipu vai URL.", + "createOnlyTitle": "Varat tikai pievienot integrācijas", + "createOnlyDescription": "Jūsu atļaujas ļauj izveidot integrācijas, bet ne pārvaldīt esošās. Lūdziet administratoram piekļuvi nepieciešamajām integrācijām." } }, "create": { "title": "Jauna {name} integrācija", "notification": { "success": { - "title": "Izveide veiksmīga", "message": "Integrācija tika veiksmīgi izveidota" }, "error": { - "title": "Izveide neizdevās", "message": "Integrāciju nevarēja izveidot" } }, @@ -739,11 +1339,9 @@ "title": "Rediģēt {name} integrāciju", "notification": { "success": { - "title": "Izmaiņas veiksmīgi piemērotas", "message": "Integrācija tika veiksmīgi saglabāta" }, "error": { - "title": "Nevar piemērot izmaiņas", "message": "Integrāciju nevarēja saglabāt" } }, @@ -760,23 +1358,15 @@ "message": "Vai esat pārliecināts, ka vēlaties dzēst integrāciju {name}?", "notification": { "success": { - "title": "Dzēšana veiksmīga", "message": "Integrācija tika veiksmīgi dzēsta" }, "error": { - "title": "Dzēšana neizdevās", "message": "Nevar dzēst integrāciju" } } } }, "field": { - "name": { - "label": "Nosaukums" - }, - "url": { - "label": "Url" - }, "attemptSearchEngineCreation": { "label": "Izveidot meklētājprogrammu", "description": "Integrāciju \"{kind}\" var izmantot kopā ar meklētājprogrammām. Atzīmējiet šo opciju, lai automātiski konfigurētu meklētājprogrammu." @@ -788,6 +1378,10 @@ "label": "Izveidot lietotni", "description": "Izveidot lietotni ar tādu pašu nosaukumu un ikonu kā integrācijai. Atstājiet tālāk esošo ievades lauku tukšu, lai izveidotu lietotni ar integrācijas URL." }, + "linkApp": { + "label": "Saistīt esošu lietotni", + "description": "Savienojiet šo integrāciju ar lietotni, kuru jau varat izmantot." + }, "appHref": { "placeholder": "Pielāgots lietotnes URL" }, @@ -801,7 +1395,11 @@ "grid": { "widgetCount": "{count} logrīki", "noWidgets": "Nav logrīku", - "detected": "Atklāts caur Docker" + "detected": "Atklāts caur Docker", + "connected": "{count, plural, zero {# savienotu} one {# savienots} other {# savienoti}}", + "tiedWidgets": "Saistītie logrīki", + "more": "+{count} citi", + "loadError": "Integrācijas neizdevās ielādēt. Pirms jauna savienojuma izveides mēģiniet vēlreiz." }, "category": { "dnsHole": "DNS", @@ -832,7 +1430,10 @@ "analytics": "Analītika", "vpn": "VPN", "mediaLibrary": "Mediju bibliotēka", - "uptimeMonitoring": "Pieejamības uzraudzība" + "uptimeMonitoring": "Pieejamības uzraudzība", + "beszel": "Beszel", + "systemMonitoring": "Sistēmas uzraudzība", + "security": "Drošība" }, "testConnection": { "action": { @@ -1117,6 +1718,22 @@ "slug": { "label": "Statusa lapas daļa", "newLabel": "Jauna statusa lapas daļa" + }, + "wazuhIndexerUrl": { + "label": "Indeksētāja URL", + "newLabel": "Jauns indeksētāja URL" + }, + "wazuhIndexerUsername": { + "label": "Indeksētāja lietotājvārds", + "newLabel": "Jauns indeksētāja lietotājvārds" + }, + "wazuhIndexerPassword": { + "label": "Indeksētāja parole", + "newLabel": "Jauna indeksētāja parole" + }, + "wazuhDashboardUrl": { + "label": "Informācijas paneļa URL (neobligāts)", + "newLabel": "Jauns informācijas paneļa URL" } } }, @@ -1125,54 +1742,19 @@ "interact": "Mijiedarboties ar integrācijām", "full": "Pilna integrāciju piekļuve" }, - "audiobookshelf": { - "name": "Audiobookshelf", - "description": "Pašmitināts audiogrāmatu un podkāstu serveris" - }, - "navidrome": { - "name": "Navidrome", - "description": "Pašmitināts mūzikas straumēšanas serveris ar Subsonic API saderību" - }, - "uptimeKuma": { - "name": "Uptime Kuma", - "description": "Pašmitināta pieejamības uzraudzība ar publiskām statusa lapām", - "secret": { - "slug": { - "description": "Jūsu publiskās statusa lapas daļa. Ja nav iestatīts, noklusējums ir \"default\"." - }, - "apiKey": { - "description": "Neobligāta API atslēga autentificētai piekļuvei /metrics" - } - } - }, - "traefik": { - "name": "Traefik", - "description": "Mākonim piemērots reversais starpniekserveris un slodzes balansētājs" - }, - "paperlessNgx": { - "name": "Paperless-ngx", - "description": "Dokumentu pārvaldības sistēma skenētu dokumentu arhivēšanai un organizēšanai" - }, - "patchmon": { - "name": "PatchMon", - "description": "Linux resursdatoru labojumu pārvaldība un pārraudzība" - }, - "bazarr": { - "name": "Bazarr", - "description": "Sonarr un Radarr papildprogramma, kas pārvalda un lejupielādē subtitrus" - }, - "wud": { - "name": "What's Up Docker", - "description": "Uzrauga, kuriem no jūsu Docker konteineriem ir pieejami attēlu atjauninājumi" + "llamacpp": { + "name": "llama.cpp", + "description": "Pārraugiet lokālu llama.cpp llama-server: veselības stāvokļa, modeļa un ģenerēšanas metriku" } }, "media": { "plural": "Multimediji", "search": "Atrast multividi", "field": { - "name": "Nosaukums", + "preview": "Priekšskatījums", "size": "Lielums", - "creator": "Izveidotājs" + "creator": "Izveidotājs", + "actions": "Vadīklas" }, "action": { "upload": { @@ -1200,10 +1782,12 @@ } }, "copy": { - "label": "Kopēt URL" + "label": "Kopēt URL", + "labelNamed": "Kopēt {name} URL" }, "open": { - "label": "Atvērt multividi" + "label": "Atvērt multividi", + "labelNamed": "Atvērt {name}" } }, "noResults": { @@ -1218,7 +1802,6 @@ "add": "Pievienot", "apply": "Lietot", "backToOverview": "Atpakaļ uz pārskatu", - "skip": "Izlaist", "change": "Mainīt", "create": "Izveidot", "createAnother": "Izveidot un sākt no jauna", @@ -1241,16 +1824,31 @@ "tryAgain": "Mēģiniet vēlreiz", "loading": "Notiek ielāde", "show": "Rādīt", - "hide": "Paslēpt" + "hide": "Paslēpt", + "undo": "Atsaukt", + "editNamed": "Rediģēt {name}", + "deleteNamed": "Dzēst {name}", + "clearSearch": "Notīrīt meklēšanu", + "copy": "Kopēt", + "copied": "Nokopēts", + "refresh": "Atsvaidzināt" + }, + "pagination": { + "pageOf": "Lapa {page} no {totalPages}" }, "here": "šeit", + "serviceUrlTemplate": { + "serverTitle": "Parastā servera adrese", + "urlModeLabel": "Pakalpojuma adreses shēma", + "hostPort": "Tas pats resursdators, citi porti", + "subdomain": "Viens apakšdomēns katram pakalpojumam", + "path": "Viens ceļš katram pakalpojumam" + }, "iconPicker": { "label": "Ikonas URL", + "description": "Meklējiet bibliotēkā, ielīmējiet attēla URL vai augšupielādējiet failu.", "header": "Rakstiet nosaukumu vai objektus, lai filtrētu ikonas... Homarr pārmeklēs {countIcons} ikonas jūsu vietā", "headerLoading": "Meklēt attēlus pēc nosaukuma", - "noResults": "Neviena ikona neatbilst “{search}”.", - "error": "Neizdevās ielādēt ikonas.", - "description": "Meklējiet bibliotēkā, ielīmējiet attēla URL vai augšupielādējiet failu.", "clear": "Notīrīt attēlu", "uploadImage": "Augšupielādēt attēlu", "results": "Attēlu meklēšanas rezultāti", @@ -1259,7 +1857,9 @@ "otherImages": "Citi attēli", "urlLoading": "Pārbauda attēlu…", "urlReady": "Attēls ir gatavs lietošanai", - "urlError": "Šo attēlu nevarēja ielādēt. Pārbaudiet URL un mēģiniet vēlreiz." + "urlError": "Šo attēlu nevarēja ielādēt. Pārbaudiet URL un mēģiniet vēlreiz.", + "noResults": "Neviena ikona neatbilst “{search}”.", + "error": "Neizdevās ielādēt ikonas." }, "colorScheme": { "options": { @@ -1271,7 +1871,6 @@ "information": { "min": "Min", "max": "Maks", - "days": "Dienas", "hours": "Stundas", "minutes": "Minūtes" }, @@ -1308,16 +1907,16 @@ }, "userAvatar": { "menu": { - "switchToDarkMode": "Pārslēgt uz tumšo režīmu", - "switchToLightMode": "Pārslēgt uz gaišo režīmu", + "open": "Atvērt konta izvēlni", "management": "Pārvaldība", - "docker": "Docker", "preferences": "Jūsu iestatījumi", "logout": "Izrakstīties", "login": "Pieslēgties", "homeBoard": "Jūsu sākuma dēlis", - "loggedOut": "Izrakstījies", - "updateAvailable": "Pieejami {countUpdates} atjauninājumi: {tag}" + "updateAvailable": "Pieejami {countUpdates} atjauninājumi: {tag}", + "assistant": "Asistents", + "assistantThinking": "Domā", + "modifier": "Moderators" } }, "dangerZone": "Bīstamā zona", @@ -1365,17 +1964,70 @@ "kilometersPerHour": "km/h", "milesPerHour": "mph" } + }, + "widgetQuery": { + "loading": "Notiek logrīka datu ielāde" + }, + "total": "Kopā", + "filesystemUsage": "{count, plural, zero {Rādīt lietojumu # failu sistēmai} one {Rādīt lietojumu # failu sistēmai} other {Rādīt lietojumu # failu sistēmām}}", + "field": { + "name": "Darba vārds" + }, + "label": { + "new": "Jauns" + }, + "entity": { + "apps": "Lietotnes", + "boards": "Dēļi", + "certificates": "Sertifikāti", + "customWidgets": "Pielāgoti logrīki", + "groups": "Grupas", + "integrations": "Integrācijas", + "invites": "Uzaicinājumi", + "logs": "Žurnāli", + "media": "Multivide", + "searchEngines": "Meklētājprogrammas", + "tasks": "Uzdevumi", + "users": "Lietotāji" } }, "section": { - "dynamic": { + "option": { + "showLabel": { + "label": "Rādīt etiķeti", + "description": "Rādīt konteinera etiķeti virs tā satura." + }, + "collapsible": { + "label": "Atļaut sakļaušanu", + "description": "Ļaut skatītājiem izvērst un sakļaut šo konteineru." + }, + "showOpenAll": { + "label": "Rādīt darbību “Atvērt visu”", + "description": "Rādīt darbību, kas atver visas šajā konteinerā esošās lietotnes jaunās cilnēs." + }, + "scrollable": { + "label": "Ritināms", + "description": "Saglabāt šī konteinera iestatīto izmēru un ritināt tā saturu, nevis palielināt konteineru, lai saturs ietilptu." + } + }, + "action": { + "openAllInNewTabsFor": "Atvērt visas lietotnes sadaļā {name} cilnēs" + }, + "openAllInNewTabs": { + "title": "Atvērt visu cilnēs", + "text": "Drošības apsvērumu dēļ dažas pārlūkprogrammas var bloķēt ciļņu masveida atvēršanu. Homarr neizdevās atvērt visus logus, jo pārlūkprogramma bloķēja šo darbību. Atļaujiet “Atvērt uznirstošos logus” un mēģiniet vēlreiz." + }, + "container": { + "untitled": "Konteiners bez nosaukuma", "action": { - "create": "Jauna dinamiskā sadaļa", - "remove": "Noņemt dinamisko sadaļu" + "create": "Jauns konteiners", + "remove": "Noņemt konteineru", + "expand": "Izvērst", + "collapse": "Sakļaut" }, "option": { "title": { - "label": "Tituls" + "label": "Virsraksts" }, "customCssClasses": { "label": "Pielāgotas CSS klases" @@ -1385,55 +2037,12 @@ } }, "remove": { - "title": "Noņemt dinamisko sadaļu", - "message": "Vai esat pārliecināts, ka vēlaties noņemt šo dinamisko sadaļu? Vienumi tiks pārvietoti uz to pašu atrašanās vietu vecāku sadaļā." - } - }, - "category": { - "field": { - "name": { - "label": "Nosaukums" - } - }, - "action": { - "create": "Jauna kategorija", - "edit": "Pārdēvēt kategoriju", - "remove": "Noņemt kategoriju", - "moveUp": "Virzīt augšup", - "moveDown": "Virzīt lejup", - "createAbove": "Jauna kategorija augšā", - "createBelow": "Jauna kategorija apakšā", - "openAllInNewTabs": "Atvērt visu cilnēs" - }, - "create": { - "title": "Jauna kategorija", - "submit": "Pievienot kategoriju" - }, - "remove": { - "title": "Noņemt kategoriju", - "message": "Vai esat pārliecināts, ka vēlaties noņemt kategoriju {name}?" - }, - "edit": { - "title": "Pārdēvēt kategoriju", - "submit": "Pārdēvēt kategoriju" - }, - "menu": { - "label": { - "create": "Jauna kategorija", - "changePosition": "Mainīt pozīciju", - "settings": "Iestatījumi" - } - }, - "openAllInNewTabs": { - "title": "Atvērt visu cilnēs", - "text": "Dažas pārlūkprogrammas drošības apsvērumu dēļ var bloķēt daudzu ciļņu atvēršanu vienlaikus. Homarr nevarēja atvērt visus logus, jo pārlūkprogramma bloķēja šo darbību. Lūdzu, atļaujiet opciju \"Atvērt uznirstošos logus\" un mēģiniet vēlreiz." + "message": "Noņemt šo konteineru? Tā saturs tiks pārvietots apkārtējā apgabalā." } } }, "item": { "action": { - "create": "Jauns vienums", - "import": "Importēt vienumu", "edit": "Rediģēt vienumu", "moveResize": "Pārvietot / mainīt izmēru vienumam", "duplicate": "Dublēt vienumu", @@ -1442,7 +2051,7 @@ "menu": { "label": { "settings": "Iestatījumi", - "refresh": "Atsvaidzināt", + "settingsFor": "Iestatījumi: {name}", "options": "Opcijas", "actions": "Darbības" }, @@ -1451,21 +2060,96 @@ "error": "Kļūda", "loading": "Notiek ielāde", "idle": "Neaktīvs" + }, + "notification": { + "saveError": { + "title": "Neizdevās saglabāt logrīku", + "message": "Logrīka izmaiņas tika atceltas" + } } }, "create": { "title": "Izvēlieties pievienojamo vienumu", "search": "Filtrēt vienumus", - "addToBoard": "Pievienot dēlim" + "addToBoard": "Pievienot dēlim", + "addAtPosition": "Pievienot vienumu šeit", + "destination": { + "label": "Pievienot uz", + "description": "Izvēlieties, kur jāparādās logrīkam. Vēlāk to joprojām varēsiet pārvietot.", + "mainCanvas": "Galvenais kanvas apgabals", + "leftRail": "Kreisā josla", + "rightRail": "Labā josla" + }, + "connectionStatus": { + "ready": "Gatavs", + "needsSetup": "Jāiestata", + "noConnectionRequired": "Savienojums nav nepieciešams" + }, + "customWidget": "Pielāgots logrīks", + "standalone": "Patstāvīgs", + "missingIntegration": { + "title": "Vispirms savienojiet pakalpojumu", + "noPermission": "Šim logrīkam nepieciešams saderīgs pakalpojuma savienojums. Lūdziet administratoram to savienot un pēc tam mēģiniet vēlreiz." + }, + "notification": { + "success": { + "title": "Logrīks pievienots", + "message": "{name} tika pievienots šim panelim.", + "relocatedMessage": "{name} tika pievienots sadaļai {destination}, jo atlasītais galamērķis nebija pieejams." + }, + "error": { + "title": "Neizdevās pievienot vienumu", + "message": "Vienumu neizdevās pievienot šim panelim" + } + } + }, + "selection": { + "summary": "{count, plural, zero {# atlasītu vienumu} one {# atlasīts vienums} other {# atlasīti vienumi}}", + "selected": "{count, plural, zero {# atlasītu} one {# atlasīts} other {# atlasīti}}", + "copy": "Kopēt", + "copied": "{count, plural, zero {# vienumu nokopēts starpliktuvē} one {# vienums nokopēts starpliktuvē} other {# vienumi nokopēti starpliktuvē}}", + "copyError": "Atlasītos vienumus neizdevās nokopēt. Iespējams, pārlūkprogramma neļauj piekļūt starpliktuvei.", + "paste": "Ielīmēt", + "pasteShortcut": "Ielīmēt nokopētos vienumus šeit (Ctrl / ⌘ + V)", + "pasted": "{count, plural, zero {# vienumu ielīmēts} one {# vienums ielīmēts} other {# vienumi ielīmēti}}", + "pasteError": "Starpliktuvi neizdevās nolasīt. Iespējams, pārlūkprogramma neļauj piekļūt starpliktuvei.", + "pasteInvalid": "Starpliktuvē nav derīgu Homarr paneļa vienumu.", + "pasteUnavailable": "Nokopētie vienumi neietilpst šajā panelī.", + "removed": "{count, plural, zero {# vienumu noņemts} one {# vienums noņemts} other {# vienumi noņemti}}", + "move": "Pārvietot", + "moveTo": "Pārvietot atlasītos vienumus", + "delete": "Dzēst", + "clear": "Notīrīt atlasi", + "clearShortcut": "Notīrīt atlasi (Escape)", + "saveErrorTitle": "Neizdevās atjaunināt vienumus", + "saveErrorMessage": "Izmaiņas neizdevās saglabāt. Panelis tika atsvaidzināts.", + "moveUnavailableTitle": "Neizdevās pārvietot atlasītos vienumus", + "moveUnavailableMessage": "Galamērķī nepietiek vietas visai atlasei." }, "moveResize": { "title": "Pārvietot / mainīt izmēru vienumam", + "entryLabel": "{name}, kolonna {column}, rinda {row}", + "target": { + "numbered": "{name}, galamērķis {index}", + "located": "{name}, {location}, galamērķis {index}" + }, + "keyboard": { + "instructions": "Nospiediet Enter vai atstarpes taustiņu, lai sāktu rediģēšanu ar tastatūru. Izmantojiet bulttaustiņus pārvietošanai, Shift un bulttaustiņus izmēra maiņai, bet Escape, lai beigtu.", + "started": "Sākta rediģēšana ar tastatūru. Izmantojiet bulttaustiņus pārvietošanai, Shift un bulttaustiņus izmēra maiņai, bet Escape, lai beigtu.", + "stopped": "Rediģēšana ar tastatūru apturēta.", + "boundary": "Šīs izmaiņas neietilpst šajā sadaļā." + }, "field": { + "section": { + "label": "Sadaļa vai josla" + }, "width": { - "label": "Platums" + "label": "Platums", + "shortLabel": "P" }, "height": { - "label": "Augstums" + "label": "Augstums", + "shortLabel": "A" }, "xOffset": { "label": "X nobīde" @@ -1479,18 +2163,36 @@ "title": "Rediģēt vienumu", "tab": { "widget": "Rediģēt logrīku", - "app": "Rediģēt lietotni" + "app": "Rediģēt lietotni", + "integration": "Rediģēt integrāciju" }, "app": { "propagationNotice": "Izmaiņas šajā lietotnē tiks piemērotas visur, kur tā tiek izmantota visos informācijas paneļos." }, + "integration": { + "action": "Rediģēt savienojumu", + "description": "Pārbaudiet vai labojiet atlasīto savienojumu, neatstājot šo logrīku.", + "editLabel": "Rediģēt {name} integrāciju", + "fullAccessRequired": "Nepieciešama pilna piekļuve", + "propagationNotice": "Šīs integrācijas izmaiņas attiecas uz visām vietām, kur tā tiek izmantota. Savienojums tiek pārbaudīts pirms saglabāšanas.", + "loading": "Notiek integrācijas ielāde", + "loadError": "Šo integrāciju neizdevās ielādēt. Pirms savienojuma iestatījumu mainīšanas mēģiniet vēlreiz." + }, + "preview": { + "integrationRequired": "Izvēlieties savienojumu, lai priekšskatītu šo logrīku.", + "size": "Faila lielums" + }, + "settings": { + "label": "Logrīka iestatījumi" + }, "advancedOptions": { "label": "Papildu opcijas", "title": "Papildu vienumu opcijas" }, "field": { "integrations": { - "label": "Integrācijas" + "label": "Integrācijas", + "removeLabel": "Noņemt {name} integrāciju" }, "title": { "label": "Tituls" @@ -1504,17 +2206,18 @@ } }, "remove": { - "title": "Noņemt vienumu", "message": "Vai esat pārliecināts, ka vēlaties noņemt šo vienumu?" + }, + "advancedFocus": { + "open": "Atvērt paplašināto skatu", + "close": "Aizvērt paplašināto skatu", + "label": "{widget} paplašinātais skats" } }, "widget": { "integrationSelect": { "configureIntegrationFirst": "Vispirms pievienojiet integrāciju", - "loading": "Notiek ielāde...", - "placeholder": "Atlasiet opciju", - "noResults": "Nav atrasts neviens rezultāts", - "loadError": "Neizdevās ielādēt opcijas" + "placeholder": "Atlasiet opciju" }, "app": { "name": "Lietotne", @@ -1523,9 +2226,6 @@ "appId": { "label": "Izvēlēties lietotni" }, - "openInNewTab": { - "label": "Atvērt jaunā cilnē" - }, "showTitle": { "label": "Rādīt lietotnes nosaukumu" }, @@ -1533,11 +2233,8 @@ "label": "Iespējot statusa pārbaudi" }, "layout": { - "label": "Izkārtojums", "option": { - "row": "Horizontāli", "row-reverse": "Horizontāli (apgriezti)", - "column": "Vertikāli", "column-reverse": "Vertikāli (apgriezti)" } }, @@ -1562,23 +2259,60 @@ "name": "Grāmatzīmes", "description": "Parāda vairākas lietotņu saites", "option": { - "title": { - "label": "Nosaukums" + "showTitle": { + "label": "Rādīt logrīka virsrakstu" + }, + "titleSize": { + "label": "Logrīka virsraksta izmērs (px)" }, "layout": { "label": "Izkārtojums", "option": { - "row": { - "label": "Horizontāli" - }, - "column": { - "label": "Vertikāli" - }, - "grid": { - "label": "Režģis" + "adaptive": { + "label": "Adaptīvs" }, "gridHorizontal": { "label": "Horizontāls režģis" + }, + "icons": { + "label": "Ikonas" + } + } + }, + "variant": { + "label": "Izskats", + "option": { + "soft": { + "label": "Maigs" + }, + "filled": { + "label": "Aizpildīts" + }, + "outline": { + "label": "Kontūra" + }, + "plain": { + "label": "Vienkāršs" + } + } + }, + "spacing": { + "label": "Kartīšu atstarpes", + "option": { + "xs": { + "label": "Īpaši mazs" + }, + "sm": { + "label": "Mazs" + }, + "md": { + "label": "Vidējs" + }, + "lg": { + "label": "Liels" + }, + "xl": { + "label": "Īpaši liels" } } }, @@ -1591,17 +2325,28 @@ "hideHostname": { "label": "Slēpt resursdatorus" }, - "openNewTab": { - "label": "Atvērt jaunā cilnē" - }, "withBorder": { "label": "Rādīt apmali" }, + "grow": { + "label": "Izvērst kartītes, lai aizpildītu rindu" + }, + "customUrls": { + "label": "Pielāgotas saites" + }, "items": { "label": "Grāmatzīmes", - "add": "Pievienot grāmatzīmi" + "remove": "Noņemt grāmatzīmi", + "apps": { + "label": "Pievienot grāmatzīmes", + "description": "Ielīmējiet URL vai atrodiet esošās lietotnes. Velciet tālāk redzamās grāmatzīmes, lai mainītu to secību.", + "placeholder": "Ielīmējiet URL vai meklējiet lietotnes", + "addUrl": "Pievienot šo URL", + "hint": "Nospiediet Enter, lai pievienotu URL. Lai pievienotu vairākus URL, ielīmējiet tos, atdalot ar komatiem, vai pa vienam katrā rindā." + } } - } + }, + "empty": "Logrīka iestatījumos pievienojiet URL vai lietotni" }, "archiveTeamWarrior": { "name": "ArchiveTeam Warrior", @@ -1610,33 +2355,61 @@ "showBroadcastMessage": { "label": "Rādīt apraides ziņojumus" } + }, + "noProjectSelected": "Nav atlasīts neviens projekts", + "runnerStatus": "Izpildītājs: {status}", + "projectId": "Projekts: {id}", + "sessionReceived": "Saņemta sesija: {value}", + "sessionSent": "Nosūtīta sesija: {value}", + "sessionId": "Sesija: {id}", + "startedAt": "Sākts {date}", + "emptyItems": "Šajā momentuzņēmumā nav aktīvu vai nesenu darbu", + "metric": { + "running": "Darbojas", + "completed": "Pabeigts", + "failed": "Neizdevās izpildīt", + "canceled": "Atcelts", + "download": "Lejupielāde", + "upload": "Augšupielāde" + }, + "status": { + "running": "Darbojas", + "completed": "Pabeigts", + "failed": "Neizdevās izpildīt", + "canceled": "Atcelts", + "stopped": "Apturēts", + "idle": "Neaktīvs", + "unknown": "Nezināms" + } + }, + "wud": { + "name": "What's Up Docker", + "description": "Parāda, cik uzraudzītajiem konteineriem ir pieejami atjauninājumi.", + "title": "What's Up Docker", + "monitored": "Uzraudzītie", + "updatesAvailable": "{count, plural, zero {# atjauninājumu pieejami} one {# atjauninājums pieejams} other {# atjauninājumi pieejami}}", + "updateAvailable": "Pieejams atjauninājums", + "openReleaseNotes": "Atvērt laidiena piezīmes", + "option": { + "showRing": { + "label": "Rādīt atjaunināšanas gredzenu" + }, + "showUpdateList": { + "label": "Rādīt konteineru atjauninājumu sarakstu", + "description": "Uzskaita katru uzraudzīto konteineru, kuram ir pieejams attēla atjauninājums" + } } }, "dnsHoleSummary": { "name": "DNS cauruma kopsavilkums", "description": "Parāda jūsu DNS cauruma kopsavilkumu", "option": { - "layout": { - "label": "Izkārtojums", - "option": { - "row": { - "label": "Horizontāli" - }, - "column": { - "label": "Vertikāli" - }, - "grid": { - "label": "Režģis" - } - } - }, "usePiHoleColors": { "label": "Izmantot Pi-Hole krāsas" } }, "error": { - "internalServerError": "Neizdevās iegūt DNS cauruma kopsavilkumu", - "integrationsDisconnected": "Nav datu, visas integrācijas ir atvienotas" + "internalServerError": "Neizdevās iegūt DNS cauruma kopsavilkumu" }, "data": { "adsBlockedToday": "Šodien bloķēti", @@ -1644,32 +2417,24 @@ "dnsQueriesToday": "Pieprasījumi šodien", "domainsBeingBlocked": "Domēni bloķēšanas sarakstā" }, - "domainsTooltip": "Vairāku integrāciju dēļ Homarr nevar aprēķināt precīzu bloķēto domēnu skaitu" + "domainsTooltip": "Vairāku integrāciju dēļ Homarr nevar aprēķināt precīzu bloķēto domēnu skaitu", + "status": { + "enabled": "Iespējots", + "disabled": "Atspējots", + "unknown": "Nezināms" + } }, "dnsHoleControls": { "name": "DNS cauruma vadības elementi", "description": "Vadiet PiHole vai AdGuard no sava informācijas paneļa", "option": { - "layout": { - "label": "Izkārtojums", - "option": { - "row": { - "label": "Horizontāli" - }, - "column": { - "label": "Vertikāli" - }, - "grid": { - "label": "Režģis" - } - } - }, "showToggleAllButtons": { "label": "Rādīt Pārslēgt Visas pogas" } }, "error": { - "internalServerError": "Neizdevās vadīt DNS caurumu" + "internalServerError": "Neizdevās vadīt DNS caurumu", + "bulkActionsFailed": "{count, plural, zero {Neizdevās veikt nevienu darbību} one {Neizdevās veikt # darbību} other {Neizdevās veikt # darbības}}" }, "controls": { "enableAll": "Iespējot visu", @@ -1680,8 +2445,6 @@ "disabled": "Atspējots", "processing": "Apstrādā", "disconnected": "Atvienots", - "hours": "Stundas", - "minutes": "Minūtes", "unlimited": "Atstāt tukšu, lai neierobežotu" } }, @@ -1693,16 +2456,10 @@ "label": "Pielāgots nosaukums/pilsētas attēlojums", "description": "Parādiet pielāgotu nosaukumu vai pilsētas/valsts nosaukumu pulksteņa augšpusē." }, - "customTitle": { - "label": "Nosaukums" - }, "is24HourFormat": { "label": "24 stundu formāts", "description": "Izmantot 24 stundu formātu, nevis 12 stundu formātu" }, - "showSeconds": { - "label": "Rādīt sekundes" - }, "useCustomTimezone": { "label": "Izmantot fiksētu laika joslu" }, @@ -1721,29 +2478,295 @@ "label": "Pielāgots laika formāts", "description": "Laika formatēšanai izmantojiet ISO 8601 (tas aizstās citas opcijas)" }, - "customDateFormat": { - "label": "Pielāgots datuma formāts", - "description": "Datuma formatēšanai izmantojiet ISO 8601 (tas aizstās citas opcijas)" - }, "showWeather": { "label": "Rādīt laikapstākļus", "description": "Kartītes stūrī rādīt nelielu animētu laikapstākļu ikonu un temperatūru" }, - "weatherLocation": { - "label": "Laikapstākļu atrašanās vieta" - }, "isWeatherFormatFahrenheit": { "label": "Izmantot Fārenheita grādus" + }, + "animateWeatherIcon": { + "label": "Animēt laikapstākļu ikonu", + "description": "Animē laikapstākļu ikonu. Pēc noklusējuma atspējota un vienmēr atspējota, ja pieprasīta samazināta kustība." + }, + "colorWeatherByDayNight": { + "label": "Iekrāsot laikapstākļus pēc dienas/nakts", + "description": "Iekrāso laikapstākļu ikonu un temperatūru dienas vai nakts krāsā atkarībā no tā, vai izvēlētajā atrašanās vietā pašlaik ir diena vai nakts." + }, + "dayWeatherColor": { + "label": "Dienas krāsa" + }, + "nightWeatherColor": { + "label": "Nakts krāsa" + }, + "worldClockCities": { + "label": "Pasaules pulksteņa pilsētas", + "description": "Papildu skatā pievienojiet un sakārtojiet līdz sešām pilsētām." } + }, + "timezoneList": { + "timezone": "Laika zona", + "cityLabel": "Pilsētas nosaukums", + "searchPlaceholder": "Meklēt laika joslas", + "noResults": "Laika joslas nav atrastas", + "unsupportedOption": "Netiek atbalstīts: {timeZone}", + "add": "Pievienot pilsētu", + "remove": "Noņemt {city}", + "reorder": "Mainīt {city} secību", + "limit": "Konfigurētas {count} no {maximum} pilsētām" + }, + "worldClock": { + "primary": "Galvenais pulkstenis", + "local": "Vietējais laiks", + "today": "Šodien", + "tomorrow": "Rīt", + "yesterday": "Vakar", + "noSecondaryCities": "Pievienojiet pilsētas logrīka opcijās, lai tās šeit salīdzinātu.", + "unsupportedPrimaryTitle": "Galvenā laika josla nav pieejama", + "unsupportedPrimary": "Šis pārlūks neatbalsta {timeZone}. Kā skaidri atzīmēta rezerves iespēja tiek rādīts UTC.", + "unsupportedTimeZone": "Neatbalstīta laika josla: {timeZone}", + "accessibleTime": "{city}: {time}, {date}, {timeZone}", + "advancedLabel": "Papildu pasaules pulkstenis", + "cities": "Pasaules pulksteņi", + "cityCount": "{count} laika joslas", + "timeBarLabel": "Diennakts laika pozīcija 24 stundu formātā pilsētai {city}", + "dayProgress": "Pagājuši {percent}% · atlikušas {hours} st. {minutes} min.", + "phaseLegend": "Diennakts laika apzīmējumi", + "tick": { + "midnight": "00", + "morning": "06", + "noon": "12", + "evening": "18", + "end": "24" + }, + "phaseRange": { + "night": "00–05 · 21–24", + "dawn": "05–08", + "day": "08–18", + "dusk": "18–21" + }, + "phase": { + "night": "Nakts", + "dawn": "Rītausma", + "day": "Diena", + "dusk": "Krēsla" + } + } + }, + "airQuality": { + "name": "Gaisa kvalitāte un UV", + "description": "Parāda atrašanās vietas gaisa kvalitāti, ultravioletā starojuma indeksu, piesārņotājus un ziedputekšņus.", + "option": { + "location": { + "label": "Gaisa kvalitātes atrašanās vieta" + }, + "aqiStandard": { + "label": "Gaisa kvalitātes indeksa standarts", + "options": { + "auto": "Automātiski atbilstoši lokalizācijai", + "european": "Eiropas gaisa kvalitātes indekss", + "us": "ASV gaisa kvalitātes indekss" + } + }, + "showUv": { + "label": "Rādīt UV indeksu" + }, + "showPollutants": { + "label": "Rādīt piesārņotāju koncentrāciju" + }, + "showPollen": { + "label": "Rādīt ziedputekšņu koncentrāciju" + } + }, + "category": { + "good": "Laba", + "fair": "Pieņemama", + "moderate": "Mērena", + "unhealthySensitive": "Neveselīga jutīgām grupām", + "unhealthy": "Neveselīgs", + "poor": "Slikta", + "veryPoor": "Ļoti slikta", + "veryUnhealthy": "Ļoti neveselīga", + "extremelyPoor": "Īpaši slikta", + "hazardous": "Bīstama", + "unknown": "Gaisa kvalitātes indeksa dati nav pieejami" + }, + "uv": { + "label": "UV indekss", + "category": { + "low": "Zems", + "moderate": "Mērens", + "high": "Augsts", + "veryHigh": "Ļoti augsts", + "extreme": "Ekstrēms", + "unknown": "Dati nav pieejami" + } + }, + "dominantPollutant": "Dominējošais piesārņotājs", + "aqiLabel": "Gaisa kvalitātes indekss", + "strongestPollen": "Visaugstākā ziedputekšņu koncentrācija", + "unit": { + "concentration": "{value} µg/m³", + "pollen": "{value} graudi/m³" + }, + "pollutant": { + "pm2_5": "PM2,5", + "pm10": "PM10", + "ozone": "Ozons", + "nitrogenDioxide": "Slāpekļa dioksīds", + "sulphurDioxide": "Sēra dioksīds", + "carbonMonoxide": "Oglekļa monoksīds" + }, + "pollen": { + "alder": "Alksnis", + "birch": "Bērzs", + "grass": "Zāle", + "mugwort": "Vībotne", + "olive": "Olīvkoks", + "ragweed": "Ambrozija" + }, + "compact": { + "sixHourTrend": "Gaisa kvalitātes indeksa tendence nākamajām sešām stundām" + }, + "advanced": { + "observedAt": "Atjaunināts plkst. {time}", + "next24Hours": "Nākamās 24 stundas", + "pollutants": "Piesārņotāju koncentrācija", + "pollen": "Ziedputekšņu koncentrācija", + "sevenDayForecast": "Maksimālā prognoze 7 dienām", + "aqiValue": "Gaisa kvalitātes indekss {value}", + "uvValue": "UV līmenis: {value}", + "uvShort": "UV: {value}", + "noForecast": "Prognozes dati nav pieejami" + } + }, + "countdown": { + "name": "Atpakaļskaitīšana", + "description": "Uzskaita gaidāmos notikumus un atkārtotas gadadienas.", + "option": { + "events": { + "label": "Notikumi", + "description": "Pievienojiet un sakārtojiet līdz 20 vienreizējām vai ikgadējām atpakaļskaitīšanām. Datumi tiek ievadīti izvēlētajā laika joslā." + }, + "showProgress": { + "label": "Rādīt progresu" + }, + "showSeconds": { + "label": "Rādīt sekundes", + "description": "Saglabāt sekundes redzamas katram gaidāmajam notikumam." + } + }, + "dateTimeEventList": { + "newEvent": "Jauns notikums", + "add": "Pievienot notikumu", + "remove": "Noņemt {event}", + "reorder": "Mainīt {event} secību", + "eventLabel": "Notikuma nosaukums", + "timezone": "Laika zona", + "unsupportedOption": "Netiek atbalstīts: {timeZone}", + "recurrence": "Atkārtojas", + "recurrenceOption": { + "none": "Neatkārtojas", + "yearly": "Katru gadu" + }, + "target": "Notikuma datums un laiks", + "trackProgress": "Sekot progresam no sākuma datuma", + "start": "Progresa sākuma datums un laiks", + "confirmDateTime": "Apstiprināt datumu un laiku", + "limit": "Konfigurēti {count} no {maximum} notikumiem" + }, + "empty": { + "title": "Pagaidām nav atpakaļskaitīšanu", + "description": "Pievienojiet notikumu logrīka opcijās, lai sāktu atpakaļskaitīšanu." + }, + "completed": "Pabeigts", + "yearly": "Ikgadējs", + "progress": "Notikuma progress", + "upcoming": "Gaidāmie", + "completedEvents": "Pabeigtie notikumi", + "invalid": { + "title": "Dažus notikumus nevar parādīt", + "description": "{count, plural, zero {Nevienam notikumam nav nederīga datuma vai neatbalstītas laika joslas.} one {Vienam notikumam ir nederīgs datums vai neatbalstīta laika josla.} other {# notikumiem ir nederīgs datums vai neatbalstīta laika josla.}}", + "value": "Nav pieejams" + }, + "alert": { + "notifications": "Pārlūkprogrammas paziņojumi", + "permissionDenied": "Šajā pārlūkprogrammā paziņojumi ir bloķēti.", + "reached": "Atpakaļskaitīšana ir sasniegusi mērķi." + } + }, + "timer": { + "name": "Taimeris / Pomodoro", + "description": "Palaiž vienkāršu taimeri vai konfigurējamu Pomodoro secību.", + "option": { + "mode": { + "label": "Režīms", + "options": { + "timer": "Taimeris", + "pomodoro": "Pomodoro" + } + }, + "timerMinutes": { + "label": "Taimera minūtes" + }, + "focusMinutes": { + "label": "Fokusēšanās minūtes" + }, + "shortBreakMinutes": { + "label": "Īsā pārtraukuma minūtes" + }, + "longBreakMinutes": { + "label": "Garā pārtraukuma minūtes" + }, + "sessionsBeforeLongBreak": { + "label": "Fokusēšanās sesijas pirms garā pārtraukuma" + }, + "autoStartBreaks": { + "label": "Automātiski sākt pārtraukumus" + }, + "autoStartFocus": { + "label": "Automātiski sākt fokusēšanās sesijas" + } + }, + "phase": { + "timer": "Taimeris", + "focus": "Fokusēšanās", + "shortBreak": "Īss pārtraukums", + "longBreak": "Garš pārtraukums" + }, + "action": { + "start": "Palaist", + "pause": "Pauzēt", + "reset": "Atiestatīt" + }, + "attention": { + "timerComplete": "Taimeris pabeigts", + "phaseReady": "{phase} gatavs" + }, + "progress": "Taimera progress: {progress}%", + "compact": { + "completedFocus": "" + }, + "alert": { + "title": "Taimeris pabeigts", + "completed": "{phase} pabeigts." + }, + "advanced": { + "sequence": "Pomodoro secība", + "focusSession": "Fokusēšanās {session}", + "settings": "Pastāvīgie iestatījumi", + "settingsHint": "Izmantojiet logrīka konteksta izvēlni, lai rediģētu šos paneļa iestatījumus.", + "localAlerts": "Vietējie brīdinājumi", + "notifications": "Pārlūkprogrammas paziņojumi", + "sound": "Taimera skaņas", + "localAlertsHint": "Taimera skaņas pēc noklusējuma ir iespējotas. Skaņas un paziņojumi attiecas tikai uz šo logrīku šajā pārlūkprogrammā.", + "notificationsDenied": "Šajā pārlūkprogrammā paziņojumi ir bloķēti." } }, "minecraftServerStatus": { "name": "Minecraft servera statuss", "description": "Rāda Minecraft servera statusu", "option": { - "title": { - "label": "Tituls" - }, "domain": { "label": "Servera adrese" }, @@ -1763,11 +2786,21 @@ "noStation": "Stacija nav atlasīta", "option": { "baseUrl": { - "label": "Search.ch URL" + "label": "Search.ch URL", + "description": "Pielāgotajiem URL ir jāatrisinās uz publisku IP adresi. Privātie un lokālie resursdatori tiek noraidīti." }, "station": { - "label": "Stacija" + "label": "Stacija", + "placeholder": "Meklēt staciju" } + }, + "error": { + "customSourceUnavailable": "Saraksta avots nav pieejams. Pārbaudiet, vai tā URL tiek atrisināts uz publisku IP adresi.", + "stationSearch": "Nevar meklēt stacijas. Pārbaudiet pielāgoto URL un piekļuvi panelim." + }, + "warning": { + "stale": "Sarakstu neizdevās atsvaidzināt. Tiek rādītas atiešanas, kas pēdējo reizi atjauninātas plkst. {time}.", + "staleCompact": "Novecojuši dati" } }, "notebook": { @@ -1799,6 +2832,9 @@ "directionRtl": "Iestatīt teksta virzienu no labās uz kreiso", "blockquote": "Citāts", "horizontalLine": "Horizontāla līnija", + "details": "Pārslēgt sakļaujamu sadaļu", + "expandDetails": "Izvērst sakļaujamu sadaļu", + "collapseDetails": "Sakļaut sadaļu", "bulletList": "Aizzīmju saraksts", "orderedList": "Numurēts saraksts", "checkList": "Pārbaudes saraksts", @@ -1807,16 +2843,20 @@ "link": "Saite", "unlink": "Noņemt saiti", "image": "Iegult attēlu", - "addTable": "Pievienot tabulu", + "insertTable": "Ievietot tabulu", + "insertTableSize": "Ievietot {columns} × {rows} tabulu", "deleteTable": "Dzēst tabulu", "colorCell": "Krāsaina šūna", - "mergeCell": "Pārslēgt šūnu apvienošanu", + "mergeCells": "Apvienot šūnas", + "splitCell": "Sadalīt šūnu", "addColumnLeft": "Pievienot kolonnu pirms", "addColumnRight": "Pievienot kolonnu pēc", "deleteColumn": "Dzēst kolonnu", "addRowTop": "Pievienot rindu pirms", "addRowBelow": "Pievienot rindu pēc", - "deleteRow": "Dzēst rindu" + "deleteRow": "Dzēst rindu", + "toggleHeaderRow": "Pārslēgt galvenes rindu", + "toggleHeaderColumn": "Pārslēgt galvenes kolonnu" }, "align": { "left": "Pa kreisi", @@ -1827,8 +2867,6 @@ "clearColor": "Notīrīt krāsu", "source": "Avots", "widthPlaceholder": "Vērtība % vai pikseļos", - "columns": "Kolonnas", - "rows": "Rindas", "width": "Platums", "height": "Augstums" }, @@ -1840,7 +2878,9 @@ "discard": "Atmest izmaiņas", "keepEditing": "Turpināt rediģēšanu" } - } + }, + "saveFailed": "Nevar saglabāt piezīmi", + "documentStats": "{words, plural, zero {0 vārdu} one {# vārds} other {# vārdi}} · {characters, plural, zero {0 rakstzīmju} one {# rakstzīme} other {# rakstzīmes}}" }, "anchorNote": { "name": "Anchor piezīme", @@ -1849,9 +2889,6 @@ "noteId": { "label": "Piezīme" }, - "showTitle": { - "label": "Rādīt virsrakstu" - }, "showUpdatedAt": { "label": "Rādīt pēdējās atjaunināšanas laiku" } @@ -1861,14 +2898,20 @@ "notFound": "Piezīme nav atrasta", "noNotes": "Piezīmes nav atrastas", "integrationRequired": "Vispirms atlasiet Anchor integrāciju", - "updatedAt": "Atjaunināts {date}", "untitled": "Bez nosaukuma", - "edit": "Rediģēt", - "save": "Saglabāt", - "cancel": "Atcelt", "readOnlyViewer": "Jums ir skatītāja piekļuve šai piezīmei. Rediģēšana ir atspējota.", "saveForbidden": "Jums nav atļaujas rediģēt šo piezīmi.", - "saveFailed": "Neizdevās saglabāt šo piezīmi. Lūdzu, mēģiniet vēlreiz." + "saveFailed": "Neizdevās saglabāt šo piezīmi. Lūdzu, mēģiniet vēlreiz.", + "createdAt": "Izveidots {date}", + "permission": { + "owner": "Īpašnieks", + "editor": "Redaktors", + "viewer": "Skatītājs" + }, + "status": { + "pinned": "Piesprausts", + "archived": "Arhivēts" + } }, "iframe": { "name": "iFrame", @@ -1927,6 +2970,25 @@ "clickable": { "label": "Noklikšķināms" } + }, + "state": { + "on": "Ieslēgts", + "off": "Izslēgts", + "unavailable": "Nav pieejams", + "unknown": "Nezināms" + }, + "advanced": { + "entityId": "Vienības ID: {id}", + "lastChanged": "Mainīts {date}", + "attribute": { + "unit": "Vienība", + "deviceClass": "Ierīces klase", + "icon": "Ikona" + } + }, + "error": { + "loadFailed": "Nevar ielādēt entītiju", + "toggleFailed": "Nevar atjaunināt entītiju" } }, "smartHome-executeAutomation": { @@ -1942,11 +3004,31 @@ }, "spotlightAction": { "run": "Palaist {name}" + }, + "advanced": { + "lastExecuted": "Pēdējā izpilde plkst. {time}", + "automationId": "Automatizācijas ID: {id}", + "ready": "Gatavs palaišanai", + "noPermission": "Nav atļaujas palaist šo automatizāciju" + }, + "status": { + "running": "Darbojas automatizācija", + "success": "Automatizācija pabeigta" + }, + "error": { + "executeFailed": "Nevar palaist automatizāciju" } }, "stockPrice": { "name": "Akciju cena", "description": "Parāda uzņēmuma pašreizējo akciju cenu", + "advanced": { + "currentPrice": "Pašreizējā cena", + "previousClose": "Iepriekšējā slēgšanas cena", + "changePercentage": "Izmaiņas (%)", + "minimum": "Minimums", + "maximum": "Maksimums" + }, "option": { "stock": { "label": "Akcijas simbols" @@ -2017,6 +3099,10 @@ "label": "1 mēnesis" } } + }, + "showDetails": { + "label": "Rādīt informāciju", + "description": "Kompaktajā skatā rādīt nosaukumu, izmaiņas un laika diapazonu. Izslēdziet, lai rādītu tikai simbolu un cenu." } } }, @@ -2044,6 +3130,13 @@ "showUnmonitored": { "label": "Rādīt nepārraudzītos" } + }, + "advanced": { + "previousMonth": "Rādīt iepriekšējo mēnesi", + "nextMonth": "Rādīt nākamo mēnesi", + "eventCount": "{count, plural, zero {Nav neviena notikuma} one {# notikums} other {# notikumi}}", + "loading": "Notiek kalendāra notikumu ielāde...", + "noEvents": "Šajā mēnesī nav notikumu" } }, "weather": { @@ -2056,16 +3149,18 @@ "disableTemperatureDecimals": { "label": "Atspējot temperatūras decimāldaļas" }, + "animateIcons": { + "label": "Animēt laikapstākļu ikonas" + }, + "showHumidity": { + "label": "Rādīt mitrumu" + }, "showCurrentWindSpeed": { - "label": "Rādīt pašreizējo vēja ātrumu", - "description": "Tikai pašreizējiem laikapstākļiem" + "label": "Rādīt pašreizējo vēja ātrumu" }, "useImperialSpeed": { "label": "Vēja ātrumam izmantot mph" }, - "location": { - "label": "Laikapstākļu atrašānās vieta" - }, "showCity": { "label": "Rādīt pilsētu" }, @@ -2075,13 +3170,10 @@ "forecastDayCount": { "label": "Prognozes dienu skaits", "description": "Ja logrīks nav pietiekami plats, tiek rādīts mazāk dienu" - }, - "dateFormat": { - "label": "Datuma formāts", - "description": "Kā datumam jāizskatās" } }, "currentWindSpeed": "{currentWindSpeed} {unit}", + "disabled": "Laikapstākļu dati nav pieejami, jo izejošie savienojumi ir atspējoti", "dailyForecast": { "sunrise": "Saullēkts", "sunset": "Saulriets", @@ -2104,6 +3196,47 @@ "thunderstorm": "Pērkona negaiss", "thunderstormWithHail": "Pērkona negaiss ar krusu", "unknown": "Nezināms" + }, + "details": "Rādīt laikapstākļu informāciju", + "detailsFor": "Rādīt laikapstākļu informāciju datumam {date}", + "advanced": { + "forecast": "7 dienu prognoze", + "hourlyForecast": "Nākamās 24 stundas", + "day": "Diena", + "time": "Laiks", + "conditions": "Apstākļi", + "temperature": "Temperatūra", + "feelsLike": "Sajūtu temperatūra {temperature}", + "feelsLikeLabel": "Sajūtu temperatūra", + "feelsLikeRange": "Sajūtu temperatūra: {maximum} / {minimum}", + "highLow": "Augstākā {maximum} · zemākā {minimum}", + "observedAt": "Atjaunināts plkst. {time}", + "humidity": "Mitrums", + "averageHumidity": "Vidējais mitrums: {humidity}%", + "currentHumidity": "Pašreizējais mitrums", + "wind": "Vējš / brāzmas ({unit})", + "currentWind": "Pašreizējais vējš / brāzmas", + "windValue": "{speed} / {gusts} {unit}", + "windDetail": "Maksimālais vējš / brāzmas: {speed} / {gusts} {unit}", + "nextHourPrecipitation": "Nokrišņi nākamajā stundā", + "precipitationChance": "Nokrišņu iespējamība", + "precipitationValue": "{probability}% · {amount} mm", + "precipitationDetail": "Nokrišņi: {probability}% · {amount} mm", + "todayUv": "Šodienas maksimālais UV indekss", + "uvIndex": "Maksimālais UV indekss: {value}", + "daylight": "Dienasgaisma: {duration}", + "hourlyTooltip": "Sajūtu temperatūra {feelsLike}{temperatureUnit} · {amount} mm · mitrums {humidity}% · vējš {speed} {speedUnit}", + "hourlyTooltipWithoutHumidity": "Sajūtu temperatūra {feelsLike}{temperatureUnit} · {amount} mm · vējš {speed} {speedUnit}", + "detailLabel": { + "feelsLike": "Sajūtu temperatūra", + "precipitation": "Nokrišņi", + "humidity": "Vidējais mitrums", + "wind": "Maksimālais vējš / brāzmas", + "uv": "Maksimālais UV indekss", + "daylight": "Dienasgaisma" + }, + "sun": "Saullēkts / saulriets", + "noForecast": "Prognozes dati nav pieejami" } }, "indexerManager": { @@ -2116,8 +3249,15 @@ }, "title": "Indexer pārvaldnieks", "testAll": "Pārbaudīt visu", + "status": { + "healthy": "Veselīgs", + "unhealthy": "Neveselīgs", + "disabled": "Atspējots", + "unknown": "Veselības stāvoklis nav pieejams" + }, "error": { - "internalServerError": "Neizdevās iegūt indeksētāju statusu" + "internalServerError": "Neizdevās iegūt indeksētāju statusu", + "testAll": "Indeksētāja pārbaude neizdevās. Mēģiniet vēlreiz." } }, "healthMonitoring": { @@ -2146,11 +3286,6 @@ "fileSystem": { "label": "Rādīt failu sistēmas informāciju" }, - "visibleStorageVolumes": { - "label": "Redzamie krātuves sējumi", - "description": "Pieejams tikai tad, ja visas atlasītās integrācijas ir Synology. Atstājiet tukšu, lai rādītu visus atrastos krātuves sējumus.", - "placeholder": "Atlasiet krātuves sējumus" - }, "defaultTab": { "label": "Noklusējuma cilne" }, @@ -2173,17 +3308,27 @@ "minutes": "{count} minūtes", "used": "Izmantots", "available": "Pieejams", - "lastSeen": "Pēdējais statusa atjauninājums: {lastSeen}" + "lastSeen": "Pēdējais statusa atjauninājums: {lastSeen}", + "updatesAvailable": "{count, plural, zero {Nav pieejamu atjauninājumu} one {Pieejams # atjauninājums} other {Pieejami # atjauninājumi}}", + "rebootRequired": "Nepieciešama atsāknēšana", + "rebootNotRequired": "Atsāknēšana nav nepieciešama" + }, + "smartStatus": { + "attributesWithinThresholds": "SMART: atribūti ir sliekšņu diapazonā", + "attributesFailed": "SMART: {attributes} atribūti neizdevās", + "noCriticalWarning": "SMART: SSD nav ziņojis par brīdinājumu", + "criticalWarning": "SMART: SSD ir ziņojis par kritisku brīdinājumu" + }, + "gauge": { + "cpuUsage": "CPU lietojums", + "cpuTemperature": "CPU temperatūra", + "memoryUsage": "Atmiņas lietojums", + "gpuUsage": "{name} GPU lietojums" }, - "memory": {}, "error": { "internalServerError": "Neizdevās iegūt veselības statusu" }, "cluster": { - "summary": { - "cpu": "CPU", - "memory": "RAM" - }, "resource": { "node": { "name": "Mezgli" @@ -2219,8 +3364,6 @@ "table": { "header": { "name": "Vārds", - "cpu": "CPU", - "memory": "RAM", "node": "Mezgls" } } @@ -2230,33 +3373,29 @@ "name": "Docker statistika", "description": "Jūsu konteineru statistika (šo logrīku var pievienot tikai ar administratora privilēģijām)", "option": { - "columns": { - "label": "Rādāmās kolonnas" + "endpointIds": { + "label": "Docker vides", + "description": "Atstājiet tukšu, lai rādītu konteinerus no visām Docker vidēm", + "placeholder": "Visas Docker vides" }, - "enableRowSorting": { - "label": "Iespējot vienumu kārtošanu" + "containerFilter": { + "label": "Filtrējamie konteineri" + }, + "filterIsWhitelist": { + "label": "Filtrēt kā atļauto sarakstu" }, "defaultSort": { - "label": "Kolonna, pēc kuras kārtot pēc noklusējuma", "option": { "name": "Vārds", "state": "Stāvoklis", "cpuUsage": "CPU lietojums", "memoryUsage": "Atmiņas lietojums" } - }, - "descendingDefaultSort": { - "label": "Apgriezt kārtošanu" - }, - "columnOrder": { - "label": "Kolonnu secība" - }, - "columnWidths": { - "label": "Kolonnu platumi" } }, "error": { "internalServerError": "Neizdevās iegūt konteineru statistiku", + "endpointsUnavailable": "Docker galapunkti nav pieejami", "layoutSaveTitle": "Tabulas izkārtojums nav saglabāts", "layoutSaveMessage": "Docker tabulas izkārtojumu neizdevās saglabāt. Mēģiniet vēlreiz pārvietot vai mainīt kolonnas izmēru." }, @@ -2265,7 +3404,6 @@ } }, "coolify": { - "name": "Coolify", "description": "Jūsu Coolify instances pārskats ar serveriem un lietotnēm", "option": { "showServers": { @@ -2291,17 +3429,49 @@ "internalServerError": "Neizdevās iegūt Coolify datus" }, "server": { - "buildServer": "Būvēt" + "buildServer": "Būvēt", + "resourceCounts": "{applications, plural, zero {0 lietotņu} one {# lietotne} other {# lietotnes}} / {services, plural, zero {0 pakalpojumu} one {# pakalpojums} other {# pakalpojumi}}", + "reachability": "Sasniedzamība", + "usability": "Lietojamība" + }, + "source": { + "url": "Avots: {url}", + "unavailable": "{source}: nav pieejams" }, "instances": { "title": "Instances" + }, + "action": { + "openResource": "Atvērt {name}", + "openLogs": "Atvērt {name} žurnālus", + "showIp": "Rādīt IP adresi", + "hideIp": "Paslēpt IP adresi" + }, + "status": { + "running": "Darbojas", + "stopped": "Apturēts", + "exited": "Iziets", + "starting": "Tiek palaists", + "restarting": "Restartējas", + "unknown": "Nezināms", + "online": "Tiešsaistē", + "offline": "Bezsaistē", + "reachable": "Sasniedzams", + "unreachable": "Nesasniedzams", + "usable": "Lietojams", + "unusable": "Nelietojams" } }, "vpn": { "name": "VPN", "description": "Jūsu VPN savienojumu pārskats", "serviceUnavailable": "VPN nav pieejams", - "option": {} + "status": { + "running": "Darbojas", + "notRunning": "Nedarbojas", + "unavailable": "Nav pieejams", + "vpn": "VPN: {status}" + } }, "ups": { "name": "UPS", @@ -2328,14 +3498,19 @@ "runtime": "Darbības laiks", "load": "Slodze", "input": "Ieeja", - "output": "Izeja" + "output": "Izeja", + "batteryVoltage": "Akumulatora spriegums", + "power": "Jauda", + "temperature": "Temperatūra", + "manufacturer": "Ražotājs", + "model": "Modelis", + "serial": "Sērijas numurs" }, "error": { "internalServerError": "Neizdevās iegūt UPS datus" } }, "tracearr": { - "name": "Tracearr", "description": "Uzlabota multivides servera pārraudzība ar detalizētiem straumēšanas un pārkodēšanas datiem", "option": { "showStreams": { @@ -2423,10 +3598,7 @@ "label": "Notikums", "description": "Rādīt konkrēta notikuma kopējo biežumu", "placeholder": "Izvēlieties notikumu", - "loading": "Notiek notikumu ielāde...", - "noEvents": "Nav atrasts neviens notikums", - "none": "Nav notikuma", - "configureWebsiteFirst": "Vispirms izvēlieties vietni, lai ielādētu notikumus" + "none": "Nav notikuma" }, "chartType": { "label": "Diagrammas veids", @@ -2457,26 +3629,21 @@ "eventNames": { "label": "Notikumi", "description": "Atlasiet vienu vai vairākus notikumus, lai attēlotu diagrammā", - "placeholder": "Atlasiet notikumus...", - "loading": "Notiek notikumu ielāde...", - "noEvents": "Nav atrasts neviens notikums", - "configureWebsiteFirst": "Vispirms izvēlieties vietni, lai ielādētu notikumus" + "placeholder": "Atlasiet notikumus..." }, "topCount": { "label": "Rādāmie vienumi", "description": "Galveno vienumu skaits, ko rādīt (maks. 500)" + }, + "events": { + "loading": "Notiek notikumu ielāde...", + "noEvents": "Notikumi nav atrasti", + "configureWebsiteFirst": "Vispirms atlasiet vietni, lai ielādētu notikumus" } }, "event": { - "occurrences": "notikumi", "label": "notikumi" }, - "topPages": { - "direct": "Tieša" - }, - "topReferrers": { - "direct": "Tieša" - }, "events": { "selectPrompt": "Atlasiet notikumus, ko attēlot diagrammā" }, @@ -2485,6 +3652,9 @@ "noWebsite": "Nav konfigurēta vietne", "noData": "Nav pieejamu datu", "internalServerError": "Neizdevās iegūt Umami datus" + }, + "top": { + "direct": "Tiešs" } }, "common": { @@ -2512,7 +3682,8 @@ }, "integration": { "noData": "Integrācija nav atrasta", - "description": "Noklikšķiniet , lai izveidotu jaunu integrāciju" + "description": "Noklikšķiniet , lai izveidotu jaunu integrāciju", + "manage": "Pārvaldīt integrācijas" }, "app": { "noData": "Lietotne nav atrasta", @@ -2523,7 +3694,61 @@ "noIntegration": "Nav atlasīta integrācija", "noData": "Nav pieejami integrācijas dati" }, - "option": {} + "integrationDisconnected": "Dati nav pieejami, visas integrācijas ir atvienotas", + "updatedAt": "Atjaunināts {date}", + "title": { + "label": "Virsraksts" + }, + "openInNewTab": { + "label": "Atvērt jaunā cilnē" + }, + "showTitle": { + "label": "Rādīt virsrakstu" + }, + "weatherLocation": { + "label": "Laikapstākļu atrašānās vieta" + }, + "layout": { + "label": "Izkārtojums", + "option": { + "horizontal": "Horizontāli", + "vertical": "Vertikāli", + "grid": "Režģis" + } + }, + "select": { + "loading": "Notiek ielāde...", + "loadError": "Neizdevās ielādēt opcijas" + }, + "dateFormat": { + "label": "Datuma formāts", + "description": "Kā jāizskatās datumam" + }, + "visibleStorageVolumes": { + "label": "Redzamie krātuves sējumi", + "description": "Pieejams tikai tad, ja visas atlasītās integrācijas ir OpenMediaVault vai Synology. Atstājiet tukšu, lai rādītu visus atrastos krātuves sējumus.", + "placeholder": "Atlasīt krātuves sējumus" + }, + "tableOptions": { + "columns": { + "label": "Rādāmās kolonnas" + }, + "columnOrder": { + "label": "Kolonnu secība" + }, + "columnWidths": { + "label": "Kolonnu platumi" + }, + "enableRowSorting": { + "label": "Iespējot vienumu kārtošanu" + }, + "defaultSort": { + "label": "Kolonna, pēc kuras kārtot pēc noklusējuma" + }, + "invertSorting": { + "label": "Apgriezt kārtošanu" + } + } }, "video": { "name": "Videostraume", @@ -2582,6 +3807,7 @@ "transcoding": "Transkodēšana", "paused": "Apturēts", "remaining": "Atlikušas {minutes} min", + "seasonEpisode": "S{season} E{episode}", "metadata": { "title": "Statistika zinātkārajiem", "video": { @@ -2599,11 +3825,16 @@ "resolution": "Izšķirtspēja", "target": "Mērķa kodeks" } - } + }, + "unknownUser": "Nezināms lietotājs" + }, + "summary": { + "sessions": "{count, plural, zero {# sesiju} one {# sesija} other {# sesijas}}", + "playing": "Atskaņo {count}", + "transcoding": "Pārkodē {count}" } }, "paperlessNgx": { - "name": "Paperless-ngx", "description": "Pārskats par jūsu Paperless-ngx dokumentu arhīvu", "documentsTotal": "Kopā dokumentu", "documentsInbox": "Iesūtne", @@ -2647,6 +3878,192 @@ "internalServerError": "Neizdevās iegūt Paperless-ngx datus" } }, + "patchmon": { + "description": "Resursdatoru labojumu statusa pārskats no PatchMon", + "title": "PatchMon statistika", + "totalHosts": "Kopējais resursdatoru skaits", + "hostsNeedingUpdates": "Nepieciešami atjauninājumi", + "securityUpdates": "Drošības atjauninājumi", + "upToDateHosts": "Atjauninātie resursdatori", + "hostsWithSecurityUpdates": "Resursdatori ar drošības atjauninājumiem", + "recentUpdates24h": "Atjauninājumi (24 h)", + "totalOutdatedPackages": "Novecojušas pakotnes", + "totalRepos": "Repozitoriji", + "osDistribution": "Operētājsistēmu sadalījums", + "compliance": "Labojumu atbilstība", + "complianceRatio": "{upToDate} / {total}", + "lastUpdated": "Atjaunināts {time}", + "option": { + "showTotalHosts": { + "label": "Rādīt kopējo resursdatoru skaitu", + "description": "Rādīt pārraudzīto resursdatoru kopskaitu" + }, + "showHostsNeedingUpdates": { + "label": "Rādīt resursdatorus, kuriem nepieciešami atjauninājumi", + "description": "Rādīt resursdatorus ar vismaz vienu novecojušu pakotni" + }, + "showSecurityUpdates": { + "label": "Rādīt drošības atjauninājumus", + "description": "Rādīt pieejamo drošības atjauninājumu kopskaitu" + }, + "showUpToDateHosts": { + "label": "Rādīt atjauninātos resursdatorus", + "description": "Rādīt resursdatorus bez novecojušām pakotnēm" + }, + "showHostsWithSecurityUpdates": { + "label": "Rādīt resursdatorus ar drošības atjauninājumiem", + "description": "Rādīt resursdatorus, kuriem nepieciešami drošības labojumi" + }, + "showRecentUpdates24h": { + "label": "Rādīt nesenos atjauninājumus (24 h)", + "description": "Rādīt pēdējo 24 stundu laikā lietoto atjauninājumu skaitu" + }, + "showTotalOutdatedPackages": { + "label": "Rādīt novecojušās pakotnes", + "description": "Rādīt novecojušo pakotņu kopskaitu visos resursdatoros" + }, + "showTotalRepos": { + "label": "Rādīt repozitorijus", + "description": "Rādīt pārraudzīto aktīvo repozitoriju skaitu" + }, + "enableThresholdColors": { + "label": "Iespējot sliekšņu krāsas", + "description": "Krāsot statistikas vērtības zaļā, dzeltenā vai sarkanā krāsā atbilstoši nopietnības iestatījumiem" + }, + "useCustomThresholds": { + "label": "Papildu sliekšņi", + "description": "Pielāgot brīdinājuma un kritiskos sliekšņus katrai statistikas vērtībai, izmantojot absolūtos skaitļus vai procentuālo daļu no kopējā resursdatoru skaita" + }, + "thresholdMode": { + "option": { + "absolute": "Absolūtais skaits", + "percent": "Procentuālā daļa no kopējā resursdatoru skaita" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "Nepieciešamo atjauninājumu sliekšņa režīms", + "description": "Salīdzināt nepieciešamo atjauninājumu skaitu kā absolūtu vērtību vai procentuālo daļu no kopējā resursdatoru skaita" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "Nepieciešamo atjauninājumu brīdinājuma slieksnis" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "Nepieciešamo atjauninājumu kritiskais slieksnis" + }, + "securityUpdatesThresholdMode": { + "label": "Drošības atjauninājumu sliekšņa režīms", + "description": "Salīdzināt drošības atjauninājumu skaitu kā absolūtu vērtību vai procentuālo daļu no kopējā resursdatoru skaita" + }, + "securityUpdatesWarningAt": { + "label": "Drošības atjauninājumu brīdinājuma slieksnis" + }, + "securityUpdatesCriticalAt": { + "label": "Drošības atjauninājumu kritiskais slieksnis" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "Resursdatoru ar drošības atjauninājumiem sliekšņa režīms", + "description": "Salīdzināt resursdatoru skaitu kā absolūtu vērtību vai procentuālo daļu no kopējā resursdatoru skaita" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "Resursdatoru ar drošības atjauninājumiem brīdinājuma slieksnis" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "Resursdatoru ar drošības atjauninājumiem kritiskais slieksnis" + }, + "upToDateHostsThresholdMode": { + "label": "Atjaunināto resursdatoru sliekšņa režīms", + "description": "Salīdzināt atjaunināto resursdatoru skaitu kā absolūtu vērtību vai procentuālo daļu no kopējā resursdatoru skaita" + }, + "upToDateHostsWarningAt": { + "label": "Atjaunināto resursdatoru brīdinājuma slieksnis", + "description": "Iestatīt dzeltenu krāsu, kad vērtība ir sasniegusi vai pārsniegusi šo slieksni, bet nav pilnīga pārklājuma" + }, + "upToDateHostsCriticalAt": { + "label": "Atjaunināto resursdatoru kritiskais slieksnis", + "description": "Iestatīt sarkanu krāsu, kad vērtība nokrītas zem šī sliekšņa" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "Novecojušo pakotņu sliekšņa režīms", + "description": "Salīdzināt novecojušo pakotņu skaitu kā absolūtu vērtību vai procentuālo daļu no kopējā resursdatoru skaita" + }, + "totalOutdatedPackagesWarningAt": { + "label": "Novecojušo pakotņu brīdinājuma slieksnis" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "Novecojušo pakotņu kritiskais slieksnis" + }, + "showOsDistribution": { + "label": "Rādīt operētājsistēmu sadalījumu", + "description": "Rādīt pārraudzīto resursdatoru sadalījumu pēc operētājsistēmas" + }, + "osDistributionLimit": { + "label": "Operētājsistēmu sadalījuma ierobežojums", + "description": "Maksimālais attēlojamo operētājsistēmu skaits", + "option": { + "3": "3 populārākās", + "5": "5 populārākās", + "10": "10 populārākās", + "all": "Visas" + } + }, + "showOsVersion": { + "label": "Rādīt operētājsistēmas versiju", + "description": "Ja pieejams, pievienot operētājsistēmas versiju katrai sadalījuma etiķetei" + }, + "showComplianceHero": { + "label": "Rādīt atbilstības galveno elementu", + "description": "Rādīt atbilstības gredzenu ar atjaunināto resursdatoru procentuālo daļu" + }, + "osDisplayMode": { + "label": "Operētājsistēmas attēlojuma režīms", + "description": "Izvēlieties, kā attēlot operētājsistēmu sadalījumu", + "option": { + "bars": "Horizontālas joslas", + "donut": "Gredzena diagramma" + } + }, + "threshold": { + "warningAt": { + "description": "Ievadiet vērtību, pie kuras jāparādās dzeltenajai krāsai" + }, + "criticalAt": { + "description": "Ievadiet vērtību, pie kuras jāparādās sarkanajai krāsai" + } + } + }, + "error": { + "internalServerError": "Neizdevās izgūt PatchMon datus" + } + }, + "bazarr": { + "description": "Trūkstošo subtitru un Bazarr instances darbspējas statusa pārskats", + "episodes": "Trūkstošās sērijas", + "movies": "Trūkstošās filmas", + "providers": "Nodrošinātāju problēmas", + "status": "Darbspējas problēmas", + "announcements": "Paziņojumi", + "option": { + "showMissingEpisodes": { + "label": "Rādīt trūkstošās sērijas", + "description": "Rādīt to sēriju skaitu, kurām trūkst subtitru" + }, + "showMissingMovies": { + "label": "Rādīt trūkstošās filmas", + "description": "Rādīt to filmu skaitu, kurām trūkst subtitru" + }, + "showProviderIssues": { + "label": "Rādīt nodrošinātāju problēmas", + "description": "Rādīt to subtitru nodrošinātāju skaitu, kuriem ir problēmas" + }, + "showHealthIssues": { + "label": "Rādīt darbspējas problēmas", + "description": "Rādīt Bazarr darbspējas problēmu skaitu" + } + }, + "error": { + "internalServerError": "Neizdevās izgūt Bazarr datus" + } + }, "immich-serverStats": { "name": "Immich servera statistika", "description": "Informācija par jūsu Immich instanci", @@ -2671,7 +4088,8 @@ "users": "Lietotāji", "photos": "Fotoattēli", "videos": "Videoklipi", - "storage": "Izmantotā krātuve" + "storage": "Izmantotā krātuve", + "albumLimit": "Lielākie albumi (tiek rādīti ne vairāk kā {count})" }, "immich-albumCarousel": { "name": "Immich albums", @@ -2695,24 +4113,21 @@ } }, "description": "Fotoattēlu slaidrāde no Immich albuma vai visas bibliotēkas", - "noPhotos": "Nav atrasts neviens fotoattēls" + "noPhotos": "Nav atrasts neviens fotoattēls", + "albumPhoto": "Albuma fotoattēls", + "actions": { + "previousPhoto": "Iepriekšējais fotoattēls", + "nextPhoto": "Nākamais fotoattēls", + "pauseSlideshow": "Pauzēt slaidrādi", + "resumeSlideshow": "Atsākt slaidrādi", + "toggleSlideshow": "Pauzēt vai atsākt slaidrādi", + "photo": "Fotoattēls {number}" + } }, "downloads": { "name": "Lejupielādes klients", "description": "Ļauj skatīt un pārvaldīt lejupielādes gan Torrent, gan Usenet klientos.", "option": { - "columns": { - "label": "Rādāmās kolonnas" - }, - "enableRowSorting": { - "label": "Iespējot vienumu kārtošanu" - }, - "defaultSort": { - "label": "Kolonna, pēc kuras kārtot pēc noklusējuma" - }, - "descendingDefaultSort": { - "label": "Apgriezt kārtošanu" - }, "showCompletedUsenet": { "label": "Rādīt kā pabeigtus atzīmētos Usenet ierakstus" }, @@ -2737,12 +4152,6 @@ "limitPerIntegration": { "label": "Ierobežot vienumu skaitu katrai integrācijai", "description": "Tas ierobežos katrai integrācijai rādīto vienumu skaitu, nevis kopējo skaitu" - }, - "columnOrder": { - "label": "Kolonnu secība" - }, - "columnWidths": { - "label": "Kolonnu platumi" } }, "errors": { @@ -2773,7 +4182,7 @@ "detailsTitle": "Pašreizējais klienta indekss" }, "id": { - "columnTitle": "ID", + "columnTitle": "Vienuma ID", "detailsTitle": "Vienuma ID" }, "integration": { @@ -2795,7 +4204,7 @@ "detailsTitle": "Kopā lejupielādēts" }, "sent": { - "columnTitle": "", + "columnTitle": "Augšupielādes ātrums", "detailsTitle": "Kopā augšupielādēts" }, "size": { @@ -2903,6 +4312,10 @@ "mediaRequests-requestList": { "name": "Multivides pieprasījumu saraksts", "description": "Skatiet sarakstu ar visiem multimediju pieprasījumiem no jūsu Overseerr vai Jellyseerr instances", + "empty": { + "title": "Vēl nav multivides pieprasījumu", + "description": "Lai sāktu pieprasījumu, meklējiet filmu vai pārraidi." + }, "option": { "linksTargetNewTab": { "label": "Atvērt saites jaunā cilnē" @@ -2936,12 +4349,16 @@ "failed": "Neizdevās", "completed": "Pabeigts" }, + "unknown": "Nezināms", "toBeDetermined": "TBD" }, "mediaRequests-requestStats": { "name": "Multivides pieprasījumu statistika", "description": "Statistika par jūsu mediju pieprasījumiem", - "option": {}, + "empty": { + "title": "Vēl nav pieprasījumu aktivitātes", + "description": "Statistika tiks parādīta pēc pirmā multivides pieprasījuma." + }, "titles": { "stats": { "main": "Mediju statistika", @@ -2951,8 +4368,7 @@ "declined": "Jau noraidīti", "available": "Jau pieejami", "tv": "TV pieprasījumi", - "movie": "Filmu pieprasījumi", - "total": "Kopā" + "movie": "Filmu pieprasījumi" }, "users": { "main": "Top Lietotāji", @@ -2978,7 +4394,6 @@ }, "currentIndex": "{start}–{end} no {total}", "healthCheck": { - "title": "Darbspējas pārbaude", "queued": "Rindā", "status": { "healthy": "Darbojas", @@ -2987,38 +4402,63 @@ }, "panel": { "statistics": { - "empty": "Tukšs", - "transcodes": "Pārkodējumi", - "transcodesCount": "Pārkodējumi", - "healthChecksCount": "Veselības pārbaudes", "filesCount": "Faili", "savedSpace": "Ietaupītā vieta", - "healthChecks": "Darbspējas pārbaudes", "videoCodecs": "Kodeki", "videoContainers": "Konteineri", "videoResolutions": "Izšķirtspējas" }, "workers": { - "empty": "Tukšs", "table": { - "file": "Fails", "eta": "ETA", - "progress": "Norise", - "transcode": "Pārkodēt", - "healthCheck": "Darbspējas pārbaude" + "progress": "Norise" } }, "queue": { - "empty": "Tukšs", "table": { - "file": "Fails", - "size": "Lielums", - "transcode": "Pārkodēt", - "healthCheck": "Darbspējas pārbaude" + "size": "Lielums" } + }, + "common": { + "empty": "Tukšs", + "file": "Fails", + "healthCheck": "Darbspējas pārbaude", + "transcode": "Pārkodēt", + "transcodes": "Pārkodējumi", + "healthChecks": "Darbspēju pārbaudes" } } }, + "mediaMissing": { + "name": "Trūkstošie un rindā esošie multivides faili", + "description": "Rāda trūkstošās un rindā esošās filmas un sērijas no Radarr un Sonarr", + "option": { + "showMissing": { + "label": "Rādīt trūkstošos vienumus" + }, + "showQueued": { + "label": "Rādīt rindā esošos vienumus" + }, + "pageSize": { + "label": "Vienumu skaits lapā" + } + }, + "tab": { + "missing": "Trūkstošie", + "queued": "Rindā" + }, + "type": { + "movie": "Filma", + "episode": "Sērija", + "book": "Grāmata" + }, + "empty": { + "missing": "Nav trūkstošu vienumu", + "queued": "Nav rindā esošu vienumu", + "noTabsEnabled": "Logrīka iestatījumos iespējojiet vismaz vienu cilni" + }, + "timeLeft": "Atlikušais laiks" + }, "rssFeed": { "name": "RSS plūsmas", "description": "Pārraugiet un rādiet vienu vai vairākas vispārīgas RSS, ATOM vai JSON plūsmas", @@ -3041,6 +4481,13 @@ "showPosterImage": { "label": "Rādīt plakāta attēlu" } + }, + "error": { + "allFeedsFailed": "Neizdevās ielādēt RSS plūsmas. Pārbaudiet plūsmu URL un mēģiniet vēlreiz." + }, + "warning": { + "partial": "{count, plural, zero {Neizdevās ielādēt nevienu RSS plūsmu} one {Neizdevās ielādēt # RSS plūsmu} other {Neizdevās ielādēt # RSS plūsmas}}", + "stale": "RSS plūsmas nevarēja atsvaidzināt. Tiek rādīti iepriekš ielādētie ieraksti." } }, "releases": { @@ -3116,17 +4563,8 @@ "label": "Regulārā izteiksme" } }, - "edit": { - "label": "Rediģēt" - }, "editForm": { - "title": "Rediģēt repozitoriju", - "cancel": { - "label": "Atcelt" - }, - "confirm": { - "label": "Apstiprināt" - } + "title": "Rediģēt repozitoriju" }, "importForm": { "title": "Importēt no Docker" @@ -3143,8 +4581,7 @@ "label": "Nodrošinātāja marķieri", "token": "Marķieris", "configured": "Marķieris konfigurēts", - "notConfigured": "Marķieris nav iestatīts", - "save": "Saglabāt" + "notConfigured": "Marķieris nav iestatīts" } } }, @@ -3171,17 +4608,32 @@ "noProviderResponse": "No nodrošinātāja nav atbildes", "unexpected": "Negaidīta nodrošinātāja kļūda" } - } + }, + "expandDetails": "Rādīt detalizētu informāciju par {name}", + "collapseDetails": "Paslēpt detalizētu informāciju par {name}" }, "networkControllerSummary": { - "option": {}, - "card": { - "vpn": { - "countConnected": "{count} savienoti" + "advanced": { + "updated": "Atjaunināts", + "metric": { + "latency": "Aizkave", + "ping": "Ping", + "uptime": "Darbības laiks", + "users": "Lietotāji", + "guests": "Viesi" } }, + "card": { + "vpn": { + "countConnected": "{count, plural, zero {# savienotu} one {# savienots} other {# savienoti}}", + "label": "VPN" + }, + "wan": "WAN", + "web": "Tīmeklis", + "wifi": "Wi-Fi", + "lan": "LAN" + }, "error": { - "integrationsDisconnected": "Dati nav pieejami, visas integrācijas ir atvienotas", "unknownContentOption": "Nezināma tīkla kontrollera kopsavilkuma logrīka satura opcija: " }, "name": "Tīkla kontrollera kopsavilkums", @@ -3218,7 +4670,6 @@ } }, "error": { - "integrationsDisconnected": "Dati nav pieejami, visas integrācijas ir atvienotas", "unknownContentOption": "Nezināma tīkla statusa logrīka satura opcija: " }, "name": "Tīkla statuss", @@ -3248,7 +4699,6 @@ "versiontitle": "Versijas", "cputitle": "CPU lietojums", "memorytitle": "Atmiņas lietojums", - "cpu": "CPU", "memory": "Atmiņa", "interfaces": { "name": "vārds", @@ -3256,6 +4706,16 @@ "recv": "Saņemts", "title": "Tīkla saskarnes" } + }, + "empty": { + "noInterfaces": "Vēl nav tīkla saskarņu datu" + }, + "versionUnknown": "Nezināma versija", + "metricAccessible": "{metric}: {value}%, {status}", + "status": { + "normal": "Normāls", + "warning": "Brīdinājums", + "critical": "Kritisks" } }, "notifications": { @@ -3265,8 +4725,21 @@ "option": { "hideLogos": { "label": "Slēpt logotipus" + }, + "messageFormat": { + "label": "Ziņojuma formāts", + "option": { + "auto": "Automātiski", + "plain": "Vienkāršs teksts", + "markdown": "Markdown", + "html": "HTML" + } } - } + }, + "openService": "Atvērt paziņojumu pakalpojumu", + "deleteNotification": "Dzēst paziņojumu no Gotify", + "deleteFailed": "Neizdevās dzēst paziņojumu", + "deleteFailedMessage": "Paziņojumu nevarēja izdzēst. Lūdzu, mēģiniet vēlreiz." }, "speedtestTracker": { "name": "Speedtest Tracker", @@ -3308,7 +4781,6 @@ } }, "uptimeKuma": { - "name": "Uptime Kuma", "description": "Pārraudzīt pieejamības statistiku no jūsu Uptime Kuma statusa lapas", "option": { "showAverageUptime": { @@ -3345,8 +4817,58 @@ }, "error": { "internalServerError": "Neizdevās iegūt pieejamības datus" + }, + "status": { + "up": "Augšupielādes ātrums", + "down": "Lejupielādes Ātrums", + "paused": "Apstādināts" } }, + "traefik": { + "description": "Traefik maršrutētāju, pakalpojumu, starpprogrammatūras un ieejas punktu pārskats", + "option": { + "showTcp": { + "label": "Rādīt TCP" + }, + "showUdp": { + "label": "Rādīt UDP" + }, + "showEntryPoints": { + "label": "Rādīt ieejas punktus" + } + }, + "instances": "Traefik serveri", + "versionUnknown": "Versija nav zināma", + "summary": { + "routers": "Maršrutētāji", + "entryPoints": "Ieejas punkti" + }, + "resource": { + "routers": "Maršrutētāji", + "middlewares": "Starpprogrammatūra" + }, + "status": { + "healthy": "Darbojas pareizi", + "errors": "{count} kļūdas", + "warnings": "{count} brīdinājumi" + }, + "error": { + "internalServerError": "Neizdevās izgūt Traefik datus" + }, + "resourceType": { + "router": "Maršrutētājs", + "service": "Pakalpojums", + "middleware": "Starpprogrammatūra" + }, + "resourceStatus": { + "enabled": "Iespējots", + "disabled": "Atspējots", + "warning": "Brīdinājums", + "error": "Kļūda", + "unknown": "Nezināms" + }, + "failedEndpoint": "Neizdevās: {endpoint}" + }, "audioStats": { "name": "Audio statistika", "description": "Bibliotēkas un atskaņošanas statistika no Navidrome vai Audiobookshelf", @@ -3411,9 +4933,7 @@ "label": "Redzamās diagrammas", "description": "Atlasiet diagrammas, kuras vēlaties redzēt.", "option": { - "cpu": "CPU", "memory": "Atmiņa", - "gpu": "GPU", "network": "Tīkls" } }, @@ -3428,12 +4948,11 @@ } }, "card": { - "cpu": "CPU", "memory": "MEM", - "gpu": "GPU", "network": "TĪKLS", "up": "", - "down": "Lejup" + "down": "Lejup", + "memoryTooltip": "{used} / {available} ({percent}%)" } }, "systemDisks": { @@ -3459,151 +4978,88 @@ }, "showBackgroundBar": { "label": "Rādīt fona lietojuma joslu" - }, - "visibleStorageVolumes": { - "label": "Redzamie krātuves sējumi", - "description": "Pieejams tikai tad, ja visas atlasītās integrācijas ir Synology. Atstājiet tukšu, lai rādītu visus atrastos krātuves sējumus.", - "placeholder": "Atlasiet krātuves sējumus" } }, "status": { - "unhealthy": "Nedarb." + "unhealthy": "Nedarb.", + "smart": "SMART", + "free": "Brīvi {percentage}%" + } + }, + "customApi": { + "name": "Pielāgots logrīks", + "description": "Renderēt konfigurētu pielāgotu JSX definīciju.", + "customJsx": { + "noTemplate": "JSX veidne nav konfigurēta.", + "templateWarnings": "{count} veidnes brīdinājumi:", + "requestIdRequired": "Šai tīkla vadībai ir nepieciešams nosaukts requestId.", + "unsavedPreview": "Pirms nosaukto pieprasījumu testēšanas redaktorā palaidiet sākotnējo pieprasījuma testu.", + "invalidParams": "Pieprasījuma parametri nav derīgi.", + "loading": "Notiek pieprasījuma ielāde...", + "loadRequest": "Ielādēt pieprasījumu", + "requestFailed": "Pieprasījums neizdevās.", + "retry": "Atkārtot pieprasījumu", + "actionCompleted": "Darbība veiksmīgi pabeigta.", + "actionSimulated": "Darbība simulēta; pieprasījums netika nosūtīts.", + "actionsDisabledEditMode": "Darbības ir atspējotas, kamēr panelis ir rediģēšanas režīmā.", + "widgetItemUnavailable": "Šis logrīka elements nav pieejams.", + "toggle": "Pārslēgt", + "copied": "Nokopēts", + "confirmDelete": "Apstipriniet šo neatgriezenisko darbību." + }, + "option": { + "definitionId": { + "label": "Pielāgots logrīks" + }, + "refreshInterval": { + "label": "Atjaunināšanas intervāls", + "description": "Cik bieži atkārtoti izgūt datus no API (sekundēs)" + } + }, + "noDefinition": "Nav atlasīta definīcija", + "definitionNotFound": "Pielāgots logrīks nav pieejams", + "migrationRequired": "Šis mantotais pielāgotais logrīks ir saglabāts, taču pirms tā palaišanas tas ir jāmigrē uz Custom JSX v2 sadaļā “Pārvaldīt pielāgotos logrīkus”.", + "manageMigration": "Atvērt pielāgoto logrīku pārvaldību", + "contactAdmin": "Sazinieties ar administratoru.", + "configurationNeedsRepair": "Šī logrīka opcijas ir mainītas. Rediģējiet logrīku, lai labotu tā konfigurāciju.", + "removeFromBoard": "Noņemt no paneļa", + "editModePending": "Saglabājiet paneli, lai ielādētu šo logrīku.", + "picker": { + "group": "Pielāgotie JSX logrīki", + "empty": "Pielāgoti logrīki nav atrasti", + "preview": "Priekšskatījums", + "sources": "{count, plural, zero {# avotu} one {# avots} other {# avoti}}", + "requests": "{count, plural, zero {# pieprasījumu} one {# pieprasījums} other {# pieprasījumi}}", + "migrationRequired": "Nepieciešama migrācija", + "migrationDescription": "Šis ievietotais v1 logrīks vēl nevar darboties. Nokopējiet tā aizklāto uzvedni uz LLM un pēc tam ielīmējiet vienīgo JSON atbildi Homarr.", + "manageMigration": "Atvērt pielāgoto logrīku pārvaldību", + "contactAdmin": "Sazinieties ar administratoru." + }, + "configuration": { + "needsAttention": "Konfigurācijai jāpievērš uzmanība: {message}", + "advancedOptions": "Papildu opcijas", + "invalidJson": "Nederīgs JSON" } }, "beszelSystemTable": { "name": "Beszel sistēmas (Tabula)", "description": "Tabulas skats visām Beszel uzraudzītajām sistēmām ar kārtojamām kolonnām un statusa indikatoriem", "option": { - "statusFilter": { - "label": "Statusa filtrs" - }, "sortBy": { "label": "Kārtot pēc" }, "sortDirection": { "label": "Kārtošanas virziens" - }, - "showCpu": { - "label": "Rādīt CPU" - }, - "showMemory": { - "label": "Rādīt atmiņu" - }, - "showDisk": { - "label": "Rādīt disku" - }, - "showGpu": { - "label": "Rādīt GPU" - }, - "showLoadAvg": { - "label": "Rādīt slodzes vidējo" - }, - "showNet": { - "label": "Rādīt tīklu" - }, - "showTemp": { - "label": "Rādīt temperatūru" - }, - "showBattery": { - "label": "Rādīt akumulatoru" - }, - "showServices": { - "label": "Rādīt servisus" - }, - "showUptime": { - "label": "Rādīt darbības laiku" - }, - "showAgent": { - "label": "Rādīt aģenta versiju" - }, - "columnOrder": { - "label": "Kolonnu secība" - }, - "columnWidths": { - "label": "Kolonnu platumi" } }, - "noRecords": "Nav atrasta neviena sistēma", "error": { - "internalServerError": "Nevar izveidot savienojumu ar Beszel. Pārbaudiet integrācijas iestatījumus.", "layoutSaveTitle": "Nevar saglabāt tabulas izkārtojumu", "layoutSaveMessage": "Kolonnu secību vai platumus neizdevās saglabāt. Lūdzu, mēģiniet vēlreiz." - }, - "column": { - "system": "Sistēma", - "cpu": "Procesors", - "memory": "Atmiņa", - "disk": "Disks", - "gpu": "Grafikas procesors", - "loadAvg": "Slodzes vidējais", - "net": "Tīkls", - "temp": "Temperatūra", - "battery": "Baterija", - "services": "Servisi", - "uptime": "Darbības laiks", - "agent": "Aģents" } }, "beszelSystemGrid": { "name": "Beszel sistēmas (Režģis)", - "description": "Karšu režģa skats visām Beszel uzraudzītajām sistēmām ar reāllaika metrikām", - "option": { - "statusFilter": { - "label": "Statusa filtrs" - }, - "showCpu": { - "label": "Rādīt CPU" - }, - "showMemory": { - "label": "Rādīt atmiņu" - }, - "showDisk": { - "label": "Rādīt disku" - }, - "showGpu": { - "label": "Rādīt GPU" - }, - "showLoadAvg": { - "label": "Rādīt slodzes vidējo" - }, - "showNet": { - "label": "Rādīt tīklu" - }, - "showTemp": { - "label": "Rādīt temperatūru" - }, - "showBattery": { - "label": "Rādīt akumulatoru" - }, - "showServices": { - "label": "Rādīt servisus" - }, - "showUptime": { - "label": "Rādīt darbības laiku" - }, - "showAgent": { - "label": "Rādīt aģenta versiju" - } - }, - "error": { - "internalServerError": "Nevar izveidot savienojumu ar Beszel. Pārbaudiet integrācijas iestatījumus." - }, - "empty": { - "noSystems": "Sistēmas nav atrastas" - }, - "metric": { - "cpu": "Procesors", - "memory": "Atmiņa", - "disk": "Disks", - "gpu": "Grafikas procesors", - "loadAvg": "Slodzes vidējais", - "net": "Tīkls", - "temp": "Temperatūra", - "battery": "Baterija", - "services": "Servisi", - "uptime": "Darbības laiks", - "agent": "Aģents" - } + "description": "Karšu režģa skats visām Beszel uzraudzītajām sistēmām ar reāllaika metrikām" }, "beszelAlerts": { "name": "Beszel brīdinājumi", @@ -3617,11 +5073,12 @@ } }, "empty": "Nav konfigurētu brīdinājumu", - "error": { - "internalServerError": "Nevar izveidot savienojumu ar Beszel. Pārbaudiet integrācijas iestatījumus." - }, "history": "Vēsture", "resolved": "Atrisināts", + "alertDescription": { + "statusDuration": "Darbība pārtraukta {minutes} min", + "threshold": "Pārsniedz {value} pēdējās {minutes} min" + }, "status": { "triggered": "Izraisīts", "ok": "Labi" @@ -3668,16 +5125,16 @@ "noSystems": "Sistēmas nav atrastas" }, "error": { - "internalServerError": "Nevar izveidot savienojumu ar Beszel. Pārbaudiet integrācijas iestatījumus.", "liveConnectionFailed": "Tiešais savienojums neizdevās. Jūsu Beszel instance, iespējams, neatbalsta straumēšanu reāllaikā.", "switchToHistorical": "Pārslēgties uz vēsturisko skatu", - "systemNotFound": "Atlasītā sistēma nav atrasta. Izvēlieties citu sistēmu." + "systemNotFound": "Atlasītā sistēma nav atrasta. Izvēlieties citu sistēmu.", + "selectionSaveTitle": "Neizdevās saglabāt atlasi", + "selectionSaveMessage": "Jūsu sistēmas vai laika perioda atlasi nevarēja saglabāt. Lūdzu, mēģiniet vēlreiz." }, "chart": { "cpu": { "title": "CPU lietojums", - "subtitle": "Vidējais sistēmas mēroga CPU noslogojums", - "series": "Procesors" + "subtitle": "Vidējais sistēmas mēroga CPU noslogojums" }, "memory": { "title": "Atmiņas lietojums", @@ -3719,289 +5176,550 @@ "title": "Docker tīkla I/O", "subtitle": "Docker konteineru tīkla trafika" } + }, + "period": { + "live": "Tiešraidē", + "oneHour": "1 h", + "twelveHours": "12 h", + "oneDay": "24 h", + "oneWeek": "1 nedēļa", + "thirtyDays": "30 d" } }, - "patchmon": { - "name": "PatchMon", - "description": "Resursdatoru labojumu statusa pārskats no PatchMon", - "title": "PatchMon statistika", - "totalHosts": "Kopējais resursdatoru skaits", - "hostsNeedingUpdates": "Nepieciešami atjauninājumi", - "securityUpdates": "Drošības atjauninājumi", - "upToDateHosts": "Atjauninātie resursdatori", - "hostsWithSecurityUpdates": "Resursdatori ar drošības atjauninājumiem", - "recentUpdates24h": "Atjauninājumi (24 h)", - "totalOutdatedPackages": "Novecojušas pakotnes", - "totalRepos": "Repozitoriji", - "osDistribution": "Operētājsistēmu sadalījums", - "compliance": "Labojumu atbilstība", - "complianceRatio": "{upToDate} / {total}", - "lastUpdated": "Atjaunināts {time}", - "option": { - "showTotalHosts": { - "label": "Rādīt kopējo resursdatoru skaitu", - "description": "Rādīt pārraudzīto resursdatoru kopskaitu" - }, - "showHostsNeedingUpdates": { - "label": "Rādīt resursdatorus, kuriem nepieciešami atjauninājumi", - "description": "Rādīt resursdatorus ar vismaz vienu novecojušu pakotni" - }, - "showSecurityUpdates": { - "label": "Rādīt drošības atjauninājumus", - "description": "Rādīt pieejamo drošības atjauninājumu kopskaitu" - }, - "showUpToDateHosts": { - "label": "Rādīt atjauninātos resursdatorus", - "description": "Rādīt resursdatorus bez novecojušām pakotnēm" - }, - "showHostsWithSecurityUpdates": { - "label": "Rādīt resursdatorus ar drošības atjauninājumiem", - "description": "Rādīt resursdatorus, kuriem nepieciešami drošības labojumi" - }, - "showRecentUpdates24h": { - "label": "Rādīt nesenos atjauninājumus (24 h)", - "description": "Rādīt pēdējo 24 stundu laikā lietoto atjauninājumu skaitu" - }, - "showTotalOutdatedPackages": { - "label": "Rādīt novecojušās pakotnes", - "description": "Rādīt novecojušo pakotņu kopskaitu visos resursdatoros" - }, - "showTotalRepos": { - "label": "Rādīt repozitorijus", - "description": "Rādīt pārraudzīto aktīvo repozitoriju skaitu" - }, - "enableThresholdColors": { - "label": "Iespējot sliekšņu krāsas", - "description": "Krāsot statistikas vērtības zaļā, dzeltenā vai sarkanā krāsā atbilstoši nopietnības iestatījumiem" - }, - "useCustomThresholds": { - "label": "Papildu sliekšņi", - "description": "Pielāgot brīdinājuma un kritiskos sliekšņus katrai statistikas vērtībai, izmantojot absolūtos skaitļus vai procentuālo daļu no kopējā resursdatoru skaita" - }, - "thresholdMode": { - "option": { - "absolute": "Absolūtais skaits", - "percent": "Procentuālā daļa no kopējā resursdatoru skaita" - } - }, - "hostsNeedingUpdatesThresholdMode": { - "label": "Nepieciešamo atjauninājumu sliekšņa režīms", - "description": "Salīdzināt nepieciešamo atjauninājumu skaitu kā absolūtu vērtību vai procentuālo daļu no kopējā resursdatoru skaita" - }, - "hostsNeedingUpdatesWarningAt": { - "label": "Nepieciešamo atjauninājumu brīdinājuma slieksnis", - "description": "Iestatīt dzeltenu krāsu, kad vērtība sasniedz šo slieksni" - }, - "hostsNeedingUpdatesCriticalAt": { - "label": "Nepieciešamo atjauninājumu kritiskais slieksnis", - "description": "Iestatīt sarkanu krāsu, kad vērtība sasniedz šo slieksni" - }, - "securityUpdatesThresholdMode": { - "label": "Drošības atjauninājumu sliekšņa režīms", - "description": "Salīdzināt drošības atjauninājumu skaitu kā absolūtu vērtību vai procentuālo daļu no kopējā resursdatoru skaita" - }, - "securityUpdatesWarningAt": { - "label": "Drošības atjauninājumu brīdinājuma slieksnis", - "description": "Iestatīt dzeltenu krāsu, kad vērtība sasniedz šo slieksni" - }, - "securityUpdatesCriticalAt": { - "label": "Drošības atjauninājumu kritiskais slieksnis", - "description": "Iestatīt sarkanu krāsu, kad vērtība sasniedz šo slieksni" - }, - "hostsWithSecurityUpdatesThresholdMode": { - "label": "Resursdatoru ar drošības atjauninājumiem sliekšņa režīms", - "description": "Salīdzināt resursdatoru skaitu kā absolūtu vērtību vai procentuālo daļu no kopējā resursdatoru skaita" - }, - "hostsWithSecurityUpdatesWarningAt": { - "label": "Resursdatoru ar drošības atjauninājumiem brīdinājuma slieksnis", - "description": "Iestatīt dzeltenu krāsu, kad vērtība sasniedz šo slieksni" - }, - "hostsWithSecurityUpdatesCriticalAt": { - "label": "Resursdatoru ar drošības atjauninājumiem kritiskais slieksnis", - "description": "Iestatīt sarkanu krāsu, kad vērtība sasniedz šo slieksni" - }, - "upToDateHostsThresholdMode": { - "label": "Atjaunināto resursdatoru sliekšņa režīms", - "description": "Salīdzināt atjaunināto resursdatoru skaitu kā absolūtu vērtību vai procentuālo daļu no kopējā resursdatoru skaita" - }, - "upToDateHostsWarningAt": { - "label": "Atjaunināto resursdatoru brīdinājuma slieksnis", - "description": "Iestatīt dzeltenu krāsu, kad vērtība ir sasniegusi vai pārsniegusi šo slieksni, bet nav pilnīga pārklājuma" - }, - "upToDateHostsCriticalAt": { - "label": "Atjaunināto resursdatoru kritiskais slieksnis", - "description": "Iestatīt sarkanu krāsu, kad vērtība nokrītas zem šī sliekšņa" - }, - "totalOutdatedPackagesThresholdMode": { - "label": "Novecojušo pakotņu sliekšņa režīms", - "description": "Salīdzināt novecojušo pakotņu skaitu kā absolūtu vērtību vai procentuālo daļu no kopējā resursdatoru skaita" - }, - "totalOutdatedPackagesWarningAt": { - "label": "Novecojušo pakotņu brīdinājuma slieksnis", - "description": "Iestatīt dzeltenu krāsu, kad vērtība sasniedz šo slieksni" - }, - "totalOutdatedPackagesCriticalAt": { - "label": "Novecojušo pakotņu kritiskais slieksnis", - "description": "Iestatīt sarkanu krāsu, kad vērtība sasniedz šo slieksni" - }, - "showOsDistribution": { - "label": "Rādīt operētājsistēmu sadalījumu", - "description": "Rādīt pārraudzīto resursdatoru sadalījumu pēc operētājsistēmas" - }, - "osDistributionLimit": { - "label": "Operētājsistēmu sadalījuma ierobežojums", - "description": "Maksimālais attēlojamo operētājsistēmu skaits", - "option": { - "3": "3 populārākās", - "5": "5 populārākās", - "10": "10 populārākās", - "all": "Visas" - } - }, - "showOsVersion": { - "label": "Rādīt operētājsistēmas versiju", - "description": "Ja pieejams, pievienot operētājsistēmas versiju katrai sadalījuma etiķetei" - }, - "showComplianceHero": { - "label": "Rādīt atbilstības galveno elementu", - "description": "Rādīt atbilstības gredzenu ar atjaunināto resursdatoru procentuālo daļu" - }, - "osDisplayMode": { - "label": "Operētājsistēmas attēlojuma režīms", - "description": "Izvēlieties, kā attēlot operētājsistēmu sadalījumu", - "option": { - "bars": "Horizontālas joslas", - "donut": "Gredzena diagramma" - } - } + "assistant": { + "name": "Asistents", + "description": "Izmantojiet pilnvērtīgu asistenta sarunu tieši savā panelī.", + "unavailable": { + "title": "Asistents nav pieejams", + "description": "Pierakstieties un lūdziet administratoram konfigurēt asistentu pārvaldības panelī." }, + "compact": { + "title": "Asistents", + "description": "Mainiet šī logrīka izmēru, lai tērzētu šeit, vai atveriet pilno sarunu.", + "open": "Atvērt asistentu", + "openTitle": "Asistents atvērts sānu panelī", + "openDescription": "Saruna paliek vienā aktīvajā saskarnē.", + "returnToWidget": "Atgriezt sarunu šajā logrīkā", + "otherWidgetTitle": "Asistents aktīvs citā logrīkā", + "otherWidgetDescription": "Vienlaikus aktīva paliek tikai viena sarunas saskarne.", + "useHere": "Izmantot asistentu šajā logrīkā" + } + }, + "beszel": { "error": { - "internalServerError": "Neizdevās izgūt PatchMon datus" - } - }, - "bazarr": { - "name": "Bazarr", - "description": "Trūkstošo subtitru un Bazarr instances darbspējas statusa pārskats", - "episodes": "Trūkstošās sērijas", - "movies": "Trūkstošās filmas", - "providers": "Nodrošinātāju problēmas", - "status": "Darbspējas problēmas", - "option": { - "showMissingEpisodes": { - "label": "Rādīt trūkstošās sērijas", - "description": "Rādīt to sēriju skaitu, kurām trūkst subtitru" - }, - "showMissingMovies": { - "label": "Rādīt trūkstošās filmas", - "description": "Rādīt to filmu skaitu, kurām trūkst subtitru" - }, - "showProviderIssues": { - "label": "Rādīt nodrošinātāju problēmas", - "description": "Rādīt to subtitru nodrošinātāju skaitu, kuriem ir problēmas" - }, - "showHealthIssues": { - "label": "Rādīt darbspējas problēmas", - "description": "Rādīt Bazarr darbspējas problēmu skaitu" - } - }, - "error": { - "internalServerError": "Neizdevās izgūt Bazarr datus" - } - }, - "mediaMissing": { - "name": "Trūkstošie un rindā esošie multivides faili", - "description": "Rāda trūkstošās un rindā esošās filmas un sērijas no Radarr un Sonarr", - "option": { - "showMissing": { - "label": "Rādīt trūkstošos vienumus" - }, - "showQueued": { - "label": "Rādīt rindā esošos vienumus" - }, - "pageSize": { - "label": "Vienumu skaits lapā" - } - }, - "tab": { - "missing": "Trūkstošie", - "queued": "Rindā" - }, - "type": { - "movie": "Filma", - "episode": "Sērija" + "internalServerError": "Neizdevās izveidot savienojumu ar Beszel. Pārbaudiet integrācijas iestatījumus." }, "empty": { - "missing": "Nav trūkstošu vienumu", - "queued": "Nav rindā esošu vienumu", - "noTabsEnabled": "Logrīka iestatījumos iespējojiet vismaz vienu cilni" + "noSystems": "Sistēmas nav atrastas" }, - "timeLeft": "Atlikušais laiks" - }, - "traefik": { - "name": "Traefik", - "description": "Traefik maršrutētāju, pakalpojumu, starpprogrammatūras un ieejas punktu pārskats", - "option": { - "showTcp": { - "label": "Rādīt TCP" + "options": { + "statusFilter": { + "label": "Statusa filtrs" }, - "showUdp": { - "label": "Rādīt UDP" + "showCpu": { + "label": "Rādīt CPU" }, - "showEntryPoints": { - "label": "Rādīt ieejas punktus" + "showMemory": { + "label": "Rādīt atmiņu" + }, + "showDisk": { + "label": "Rādīt disku" + }, + "showGpu": { + "label": "Rādīt GPU" + }, + "showLoadAvg": { + "label": "Rādīt vidējo noslodzi" + }, + "showNet": { + "label": "Rādīt tīklu" + }, + "showTemp": { + "label": "Rādīt temperatūru" + }, + "showBattery": { + "label": "Rādīt akumulatoru" + }, + "showServices": { + "label": "Rādīt pakalpojumus" + }, + "showUptime": { + "label": "Rādīt darbspējas laiku" + }, + "showAgent": { + "label": "Rādīt aģenta versiju" } }, - "instances": "Traefik serveri", - "versionUnknown": "Versija nav zināma", - "summary": { - "routers": "Maršrutētāji", - "entryPoints": "Ieejas punkti" - }, - "resource": { - "routers": "Maršrutētāji", - "services": "Pakalpojumi", - "middlewares": "Starpprogrammatūra" - }, - "status": { - "healthy": "Darbojas pareizi", - "errors": "{count} kļūdas", - "warnings": "{count} brīdinājumi" - }, - "error": { - "internalServerError": "Neizdevās izgūt Traefik datus" + "metric": { + "system": "Sistēma", + "source": "Integrācija", + "hostname": "Saimniekdatora nosaukums", + "cpuModel": "CPU modelis", + "cores": "Kodoli", + "memoryTotal": "Kopējā atmiņa", + "memory": "Atmiņa", + "disk": "Disks", + "loadAvg": "Vid. noslodze", + "net": "Tīkls", + "temp": "Temperatūra", + "battery": "Akumulators", + "uptime": "Darbības laiks", + "agent": "Aģents" } }, - "wud": { - "name": "What's Up Docker", - "description": "Parāda, cik uzraudzītajiem konteineriem ir pieejami atjauninājumi.", - "title": "What's Up Docker", - "monitored": "Uzraudzītie", - "updatesAvailable": "{count, plural, zero {# atjauninājumu pieejami} one {# atjauninājums pieejams} other {# atjauninājumi pieejami}}", - "updateAvailable": "Pieejams atjauninājums", - "openReleaseNotes": "Atvērt laidiena piezīmes", + "llamacpp": { + "name": "llama.cpp", + "description": "Rādīt lokālā llama.cpp servera darbspēju, ielādēto modeli un ģenerēšanas ātrumu.", + "title": "llama.cpp", + "status": { + "unhealthy": "Neveselīgs ({status})" + }, + "idle": "Neaktīvs", + "speedTooltip": { + "current": "Pašreizējais ģenerēšanas ātrums", + "average": "Vidējais ģenerēšanas ātrums kopš palaišanas", + "request": "Vidējais ātrums kopš šī pieprasījuma sākuma" + }, + "busy": "{count, plural, zero {# notiek pieprasījums} one {# notiek pieprasījums} other {# notiek pieprasījumi}}", + "modelInfo": { + "context": "Konteksts", + "size": "Faila lielums", + "parameters": "Parametri", + "model": "Modelis", + "quantization": "Kvantēšana" + }, + "stats": { + "tokensProcessed": "Apstrādātie tokeni", + "contextUsage": "Konteksta / KV lietojums", + "cacheHitRate": "Uzvednes kešatmiņas trāpījumu līmenis", + "tokensGenerated": "Ģenerētie tokeni" + }, + "error": { + "unreachable": "llama-server nav sasniedzams" + }, + "unit": { + "speed": "{value} t/s", + "parameters": "{value}B", + "none": "—", + "speedShort": "t/s" + }, "option": { "showTitle": { - "label": "Rādīt nosaukumu" + "label": "Rādīt virsrakstu" }, - "showRing": { - "label": "Rādīt atjaunināšanas gredzenu" + "showModelInfo": { + "label": "Rādīt informāciju par modeli" }, - "layout": { - "label": "Izkārtojums", + "showContextUsage": { + "label": "Rādīt konteksta lietojumu" + }, + "showCacheHitRate": { + "label": "Rādīt kešatmiņas trāpījumu līmeni" + }, + "showSpeedStats": { + "label": "Rādīt ātruma statistiku" + }, + "showRequests": { + "label": "Rādīt pieprasījumu noslodzi" + }, + "showTokenStats": { + "label": "Rādīt tokenu kopsummas" + }, + "showSpeculative": { + "label": "Rādīt spekulatīvo dekodēšanu" + } + }, + "advanced": { + "promptSpeed": "Uzvednes ātrums", + "avgSpeed": "Vidējā ģenerēšana", + "requests": "Pieprasījumi", + "deferred": "Atlikts", + "slots": "Aizņemti {processing}/{total} sloti", + "speculative": "Spekulatīvā dekodēšana", + "avgPrompt": "Vidējā uzvedne", + "specDrafts": "Spekulatīvie melnraksti", + "specAccepted": "Spekulatīvi pieņemtie tokeni", + "specDraftTokens": "Spekulatīvie melnraksta tokeni" + } + }, + "stats": { + "name": "Statistika", + "description": "Apvienojiet integrāciju statistiku vienā konfigurējamā logrīkā.", + "configure": "Konfigurēt metriku", + "refresh": "Atsvaidzināt statistiku", + "empty": "Atveriet logrīka iestatījumus, atlasiet integrācijas un pēc tam pievienojiet metriku.", + "editorHelp": "Pievienojiet metriku no šim logrīkam atlasītajām integrācijām. Izmaiņas tiek saglabātas kopā ar paneli.", + "source": "Integrācija", + "metric": "Metrika", + "noMetrics": "Šai integrācijai nav pieejama statistika", + "add": "Pievienot metriku", + "label": "Pielāgota etiķete", + "hidden": "Slēpts", + "compact": "Kompakti skaitļi", + "moveUp": "Virzīt augšup", + "moveDown": "Virzīt lejup", + "remove": "Noņemt metriku", + "loading": "Notiek ielāde…", + "unavailable": "Nav pieejams", + "refreshFailed": "Atsvaidzināšana neizdevās — tiek rādīti saglabātie dati", + "stale": "Saglabātie dati — atsvaidziniet, lai atjauninātu", + "table": { + "value": "Vērtība", + "status": "Statuss" + }, + "option": { + "table": { + "label": "Tabulas skats" + }, + "rows": { + "label": "Kompaktas rindas" + }, + "showIcon": { + "label": "Rādīt avota ikonu" + }, + "spacing": { + "label": "Atstarpes", "option": { - "horizontal": { - "label": "Horizontāli" + "xs": { + "label": "Kompakts" }, - "vertical": { - "label": "Vertikāli" + "sm": { + "label": "Ērts" + }, + "md": { + "label": "Plašs" } } }, - "showUpdateList": { - "label": "Rādīt konteineru atjauninājumu sarakstu", - "description": "Uzskaita katru uzraudzīto konteineru, kuram ir pieejams attēla atjauninājums" + "entries": { + "label": "Metrikas" + }, + "plain": { + "label": "Noņemt karšu fonus" } - } + }, + "fetchFailed": "Neizdevās izgūt statistiku", + "viewOptions": "Pielāgot šo skatu", + "moreMetrics": "Papildu skatā vēl {count}", + "localHelp": "Izkārtojums, formatējums un redzamība attiecas tikai uz šo skatu. Koplietotie paneļa iestatījumi paliek nemainīgi.", + "plain": "Noņemt karšu fonus", + "resetView": "Atiestatīt skatu", + "allHidden": "Šajā skatā visas metrikas ir paslēptas. Izmantojiet “Pielāgot šo skatu”, lai tās atjaunotu." + }, + "wazuh": { + "target": { + "api": "Wazuh servera API", + "indexer": "Wazuh indeksētājs", + "wazuh": "Wazuh" + }, + "severity": { + "low": "Zems", + "medium": "Vidējs", + "high": "Augsts", + "critical": "Kritisks" + }, + "error": { + "unauthorized": { + "title": "{target} noraidīja akreditācijas datus", + "description": "Pārbaudiet Wazuh integrācijā saglabāto lietotājvārdu un paroli. Servera API (55000. ports) un indeksētājs (9200. ports) izmanto atsevišķus lietotājus." + }, + "certificate": { + "title": "{target} sertifikātam nevar uzticēties", + "description": "Wazuh pēc noklusējuma izmanto pašparakstītu sertifikātu. Integrācijā palaidiet “Pārbaudīt savienojumu” un uzticieties sertifikātam vai sadaļā Iestatījumi → Sertifikāti pievienojiet savu CA." + }, + "unreachable": { + "title": "Nevar sasniegt {target}", + "description": "Resursdators noraidīja vai pārtrauca savienojumu. Pārbaudiet URL, portu un ugunsmūri. Noklusējuma vienas instalācijas režīmā indeksētājs klausās tikai localhost." + }, + "timeout": { + "title": "{target} gaidīšanas laiks beidzās", + "description": "15 sekunžu laikā atbilde netika saņemta. Pakalpojums var būt pārslogots vai adrese var būt nepareiza." + }, + "status": { + "title": "{target} atgrieza kļūdu", + "description": "Pieprasījums neizdevās ar HTTP statusu {status}." + }, + "invalidResponse": { + "title": "Negaidīta atbilde no {target}", + "description": "Pārbaudiet, vai URL norāda uz Wazuh servera API vai indeksētāju, nevis uz informācijas paneli." + }, + "indexerRequired": { + "title": "Nepieciešami Wazuh indeksētāja akreditācijas dati", + "description": "Brīdinājumi, ievainojamības un failu integritātes notikumi tiek nolasīti no Wazuh indeksētāja. Pievienojiet integrācijai indeksētāja URL, lietotājvārdu un paroli." + }, + "unknown": { + "title": "Nevarēja ielādēt datus no {target}", + "description": "Detalizētu informāciju skatiet Homarr žurnālos." + } + }, + "range": { + "1h": "1 h", + "24h": "24 h", + "7d": "7 d", + "30d": "30 d" + }, + "levelTooltip": "Noteikuma līmenis {level} ({severity})" + }, + "wazuhAgents": { + "name": "Wazuh aģenti", + "description": "Kārtojams Wazuh aģentu saraksts ar statusu, operētājsistēmu, versiju un pēdējo uzturēšanas signālu", + "option": { + "statusFilter": { + "label": "Rādīt aģentus" + }, + "sortBy": { + "label": "Kārtot pēc" + }, + "showVersion": { + "label": "Rādīt Wazuh versijas kolonnu" + }, + "showGroups": { + "label": "Rādīt grupu kolonnu" + } + }, + "title": "Aģenti", + "total": "{count} aģenti", + "status": { + "active": "Aktīvs", + "disconnected": "Atvienots", + "neverConnected": "Nekad nav bijis savienots", + "pending": "Gaida" + }, + "statusLabel": { + "active": "Aktīvs", + "disconnected": "Atvienots", + "never_connected": "Nekad nav bijis savienots", + "pending": "Gaida", + "unknown": "Nezināms" + }, + "live": "Tiešraidē", + "snapshot": "Momentuzņēmums ir {age} vecs", + "snapshotHint": "Dati nolasīti no Wazuh informācijas paneļa aģentu momentuzņēmuma (wazuh-monitoring), kas uzņemts plkst. {time}. Lai iegūtu datus reāllaikā, pievienojiet servera API akreditācijas datus.", + "staleSnapshot": "Aģentu momentuzņēmums no {time} ir novecojis. Pārbaudiet, vai darbojas Wazuh informācijas paneļa pārraudzības uzdevums, vai pievienojiet servera API akreditācijas datus.", + "noDisconnected": "Visi aģenti ir savienoti", + "empty": "Neviens aģents neatbilst šim filtram", + "column": { + "status": "Statuss", + "name": "Darba vārds", + "ip": "IP", + "os": "OS", + "version": "Versija", + "lastKeepAlive": "Uzturēt savienojumu", + "groups": "Grupas" + }, + "outdated": "Vecāks par jaunāko aģenta versiju ({version})" + }, + "wazuhAlerts": { + "name": "Wazuh brīdinājumu plūsma", + "description": "Jaunākie Wazuh brīdinājumi ar līmeni, MITRE ATT&CK paņēmieniem, aģentu un avota IP", + "option": { + "minLevel": { + "label": "Minimālais noteikuma līmenis", + "description": "Wazuh līmeņi: 0–6 zems, 7–11 vidējs, 12–14 augsts, 15+ kritisks" + }, + "hours": { + "label": "Laika periods (stundas)" + }, + "limit": { + "label": "Brīdinājumu skaits" + }, + "showMitre": { + "label": "Rādīt MITRE ATT&CK paņēmienus" + }, + "showAgent": { + "label": "Rādīt aģentu" + }, + "showSourceIp": { + "label": "Rādīt avota IP" + }, + "showRuleId": { + "label": "Rādīt noteikuma ID" + } + }, + "title": "Brīdinājumi · līmenis {level}+ · {hours} st.", + "empty": "Šajā līmenī brīdinājumu nav. Viss mierīgi.", + "rule": "Noteikums {id}", + "openInDashboard": "Atvērt šo brīdinājumu Wazuh informācijas panelī" + }, + "wazuhSummary": { + "name": "Wazuh brīdinājumu nopietnība", + "description": "Brīdinājumu nopietnības sadalījums ar tendenci salīdzinājumā ar iepriekšējo periodu", + "option": { + "range": { + "label": "Laika diapazons" + }, + "showTrend": { + "label": "Rādīt tendenci salīdzinājumā ar iepriekšējo periodu" + }, + "showFooter": { + "label": "Rādīt kājeni" + } + }, + "title": "Brīdinājumu nopietnība · {range}", + "alerts": "brīdinājumi", + "none": "Brīdinājumu nav", + "trend": { + "new": "jauni", + "tooltip": "Iepriekšējais periods: {previous}" + }, + "previous": "Iepriekšējais {range}: {count}", + "maxLevel": "Maksimālais līmenis {level}", + "health": "Indeksētāja stāvoklis: {status}", + "manager": "Pārvaldnieks {version}" + }, + "wazuhTimeline": { + "name": "Wazuh brīdinājumu laika skala", + "description": "Wazuh brīdinājumu laikā sakrauts grafiks pēc nopietnības", + "option": { + "range": { + "label": "Laika diapazons" + }, + "interval": { + "label": "Intervāls" + }, + "chartType": { + "label": "Diagrammas veids" + }, + "yScale": { + "label": "Y ass mērogs", + "description": "Kvadrātsakne ļauj augsta un kritiska līmeņa brīdinājumiem būt redzamiem līdzās tūkstošiem zema līmeņa brīdinājumu" + }, + "minLevel": { + "label": "Minimālais noteikuma līmenis" + }, + "showLegend": { + "label": "Rādīt leģendu ar kopsummām" + } + }, + "title": "Brīdinājumu laika skala · {range}", + "total": "{count} brīdinājumi", + "interval": "uz {interval}" + }, + "wazuhTopList": { + "name": "Wazuh populārāko vienumu saraksts", + "description": "Biežākie noteikumi, aģenti, avota IP adreses vai MITRE ATT&CK taktikas un paņēmieni pēc brīdinājumu skaita", + "option": { + "kind": { + "label": "Rangs" + }, + "range": { + "label": "Laika diapazons" + }, + "limit": { + "label": "Ierakstu skaits" + }, + "minLevel": { + "label": "Minimālais noteikuma līmenis" + }, + "showBars": { + "label": "Rādīt joslas" + } + }, + "title": { + "rules": "Biežākie noteikumi · {range}", + "agents": "Biežākie aģenti · {range}", + "sourceIps": "Biežākās avota IP adreses · {range}", + "mitreTactics": "MITRE taktikas · {range}", + "mitreTechniques": "MITRE paņēmieni · {range}" + }, + "empty": { + "rules": "Šajā periodā nav brīdinājumu", + "agents": "Šajā periodā nav brīdinājumu", + "sourceIps": "Šajā periodā nav brīdinājumu ar avota IP adresi", + "mitreTactics": "Šajā periodā nav brīdinājumu, kas saistīti ar MITRE ATT&CK", + "mitreTechniques": "Šajā periodā nav brīdinājumu, kas saistīti ar MITRE ATT&CK" + }, + "totalTooltip": "{count} atbilstoši brīdinājumi", + "private": "LAN", + "public": "Publisks", + "agents": "Redzams {count} aģentiem", + "others": "{count} citu ierakstu brīdinājumi" + }, + "wazuhVulnerabilities": { + "name": "Wazuh ievainojamības", + "description": "Ievainojamību skaits, biežākie CVE un visneaizsargātākie aģenti", + "option": { + "cveOrder": { + "label": "Kārtot CVE pēc" + }, + "minSeverity": { + "label": "CVE nopietnība" + }, + "cveLimit": { + "label": "CVE skaits" + }, + "agentLimit": { + "label": "Aģentu skaits" + }, + "showAgents": { + "label": "Rādīt visneaizsargātākos aģentus" + } + }, + "title": "Ievainojamības", + "topCves": "Biežākie CVE", + "score": "Vērtējums", + "agentsShort": "Aģenti", + "topAgents": "Visneaizsargātākie aģenti", + "criticalHigh": "Krit. / augsta", + "totalTooltip": "{count} atradnes {agents} aģentiem", + "affected": "{count} aģenti", + "empty": "Ievainojamības nav konstatētas", + "distribution": "Nopietnības sadalījums. {unscored} atradnes bez vērtējuma netiek rādītas.", + "worst": "Sliktākais: {id} ({score}) uz {agents} aģentiem" + }, + "wazuhFim": { + "name": "Wazuh failu integritāte", + "description": "Nesenie failu integritātes uzraudzības (syscheck) notikumi", + "option": { + "range": { + "label": "Laika diapazons" + }, + "event": { + "label": "Notikumi" + }, + "limit": { + "label": "Notikumu skaits" + }, + "includeRegistry": { + "label": "Iekļaut Windows reģistra notikumus" + } + }, + "title": "Failu integritāte · {range}", + "event": { + "added": "Pievienošanas datums", + "modified": "Modificēts", + "deleted": "Dzēsts", + "unknown": "Mainīts" + }, + "empty": "Šajā periodā nav failu integritātes notikumu", + "user": "pēc {user}", + "registry": "Reģistrs" + }, + "wazuhAuthFailures": { + "name": "Wazuh autentifikācijas kļūmes", + "description": "Neveiksmīgas pieteikšanās un brutāla spēka uzbrukumu brīdinājumi katram aģentam ar stundu diagrammām", + "option": { + "hours": { + "label": "Laika logs (stundās)" + }, + "limit": { + "label": "Aģentu skaits" + }, + "showSourceIps": { + "label": "Rādīt biežākās avota IP adreses" + } + }, + "title": "Autentifikācijas kļūmes · {hours} h", + "seriesTooltip": "Visi aģenti pēdējo {hours} stundu laikā", + "peak": "Maksimums {count}/grupā", + "empty": "Šajā periodā nav neveiksmīgu pieteikšanos", + "failed": "Neveiksmīgas pieteikšanās", + "failedHint": "Atsevišķas autentifikācijas kļūmes (sshd, PAM, Windows pieteikšanās, nederīgi lietotāji)", + "bruteForce": "Brutāls spēks", + "bruteForceHint": "Saistītie brutāla spēka noteikumi (vairākas kļūmes īsā periodā, MITRE T1110)", + "sourceIps": "Avota IP adreses", + "ipTooltip": "{ip}: {count} kļūmes", + "bruteForceCount": "{count} brutāla spēka uzbrukumi" } }, "widgetPreview": { @@ -4014,7 +5732,76 @@ } }, "board": { + "emptyState": { + "title": "Izveidojiet savu pirmo skatu", + "description": "Pievienojiet logrīku vai lietotni, vai savienojiet pakalpojumu un izmantojiet tā datus šajā panelī.", + "addWidget": "Pievienot logrīku", + "addApp": "Pievienot lietotni", + "connectService": "Savienot pakalpojumu" + }, + "setupChecklist": { + "title": "Padariet šo paneli noderīgu", + "description": "Turpiniet no vietas, kur apstājāties. Norise tiek noteikta pēc šajā panelī jau esošā satura.", + "collapse": "Sakļaut iestatīšanas kontrolsarakstu", + "dismiss": "", + "resume": "Turpināt iestatīšanu ({completed}/{total})", + "progress": "Paneļa iestatīšanas norise", + "step": { + "content": { + "label": "Pievienot noderīgu saturu", + "description": "Izvēlieties logrīku un konfigurējiet to, pirms tas tiek novietots." + }, + "app": { + "label": "Piespraust lietotni", + "description": "Saglabājiet pakalpojumu vai rīku viena klikšķa attālumā šajā panelī." + }, + "service": { + "label": "Savienot pakalpojumu", + "description": "Atbloķējiet saderīgo logrīku reāllaika datus un darbības.", + "permissionDescription": "Administrators var savienot pakalpojumu, lai atbloķētu reāllaika datus.", + "action": "Savienot" + } + } + }, "action": { + "addContent": "Pievienot paneļa saturu", + "settings": "Paneļa iestatījumi", + "switch": "Pārslēgt paneli", + "switcher": { + "title": "Pārslēgt paneli", + "search": { + "empty": "Neviens panelis neatbilst vaicājumam \"{search}\"." + }, + "results": "Pieejamie paneļi", + "preview": "{name} priekšskatījums ar {count} vienumiem", + "currentHidden": "Pašreizējais panelis: {name}", + "keyboard": { + "navigate": "Pārvietoties", + "open": "Atvērt", + "instructions": "Ierakstiet, lai filtrētu paneļus. Izmantojiet bulttaustiņus, lai pārvietotos pa rezultātiem, un taustiņu Enter, lai atvērtu paneli." + }, + "empty": { + "title": "Citu paneļu nav", + "description": "Jums nav piekļuves nevienam citam panelim." + }, + "error": "Paneļus neizdevās ielādēt." + }, + "create": { + "availability": { + "checking": "Notiek pieejamības pārbaude…", + "available": "{name} ir pieejams" + }, + "notification": { + "success": { + "title": "Panelis izveidots", + "message": "Panelis {name} ir izveidots" + }, + "error": { + "title": "Paneli neizdevās izveidot", + "message": "Paneli {name} neizdevās izveidot" + } + } + }, "duplicate": { "title": "Dublēt dēli", "message": "Tiks dublēta tāfele {name} ar visu tās saturu. Ja logrīki izmanto integrācijas, kuras jums nav atļauts izmantot, tās tiks noņemtas.", @@ -4030,14 +5817,19 @@ } }, "edit": { + "enter": "Rediģēt paneli", + "save": "Saglabāt paneli", + "exit": "Iziet no rediģēšanas režīma", "notification": { "success": { - "title": "Izmaiņas veiksmīgi lietotas", "message": "Dēlis veiksmīgi saglabāts" }, "error": { - "title": "Nevar lietot izmaiņas", "message": "Dēli neizdevās saglabāt" + }, + "loadError": { + "title": "Neizdevās sākt rediģēšanu", + "message": "Paneļa redaktoru neizdevās ielādēt. Jūsu informācijas panelis joprojām ir pieejams skatīšanas režīmā." } }, "confirmLeave": { @@ -4045,62 +5837,6 @@ "message": "Jums ir nesaglabātas izmaiņas. Vai tiešām vēlaties aiziet?" } }, - "oldImport": { - "label": "Importēt no Homarr pirms 1.0.0", - "notification": { - "success": { - "title": "Importēšana veiksmīga", - "message": "Dēlis veiksmīgi importēts" - }, - "error": { - "title": "Importēšana neizdevās", - "message": "Dēli neizdevās importēt. Plašāku informāciju skatiet žurnālos" - } - }, - "form": { - "file": { - "label": "Atlasīt JSON failu", - "invalidError": "Nederīgs konfigurācijas fails" - }, - "apps": { - "label": "Lietotnes", - "avoidDuplicates": { - "label": "Izvairīties no dublikātiem", - "description": "Ignorē lietotnes, ja lietotne ar tādu pašu href jau pastāv" - }, - "onlyImportApps": { - "label": "Importēt tikai lietotnes", - "description": "Tiek pievienotas tikai lietotnes; dēlis jāizveido manuāli" - } - }, - "name": { - "label": "Dēļa nosaukums" - }, - "screenSize": { - "label": "Ekrāna izmērs", - "description": "Versijās pirms 1.0 bija trīs dažādi režīmi, tāpēc katram ekrāna izmēram varēja izvēlēties kolonnu skaitu.", - "option": { - "sm": "Mazs", - "md": "Vidējs", - "lg": "Liels" - } - }, - "sidebarBehavior": { - "label": "Sānjoslas darbība", - "description": "Sānjoslas tika noņemtas versijā 1.0; varat izvēlēties, kas notiks ar tajās esošajiem vienumiem.", - "option": { - "lastSection": { - "label": "Pēdējā sadaļa", - "description": "Sānjosla tiks rādīta zem pēdējās sadaļas" - }, - "removeItems": { - "label": "Noņemt vienumus", - "description": "Sānjoslā ietvertie vienumi tiks noņemti" - } - } - } - } - }, "quickCreateApp": { "modal": { "title": "Izveidot lietotni uzreiz", @@ -4108,6 +5844,12 @@ } } }, + "landmark": { + "canvas": "Informācijas paneļa kanva", + "leftRail": "Informācijas paneļa kreisā josla", + "rightRail": "Informācijas paneļa labā josla", + "items": "Informācijas paneļa vienumi" + }, "field": { "pageTitle": { "label": "Lapas virsraksts" @@ -4177,7 +5919,8 @@ } }, "primaryColor": { - "label": "Pamatkrāsa" + "label": "Pamatkrāsa", + "locked": "Administrators saglabā instances zīmola krāsu visos paneļos." }, "secondaryColor": { "label": "Sekundārā krāsa" @@ -4217,9 +5960,6 @@ "xl": "Ļoti liels" } }, - "name": { - "label": "Nosaukums" - }, "isPublic": { "label": "Publisks", "description": "Publiskie dēļi ir pieejami ikvienam, pat bez konta." @@ -4239,9 +5979,44 @@ "title": "Izkārtojums", "responsive": { "title": "Adaptīvi izkārtojumi", + "description": "Katram izkārtojumam ir savas logrīku pozīcijas un izmēri. Mobilais un pamata izkārtojums vienmēr ir pieejami; pielāgotus izkārtojumus varat pievienot jebkurā papildu pārtraukumpunktā.", "action": { "add": "Piev. izk." } + }, + "role": { + "mobile": "Mobilā ierīce", + "base": "Pamata", + "custom": "Pielāgots" + }, + "custom": { + "defaultName": "Pielāgots izkārtojums" + }, + "mobile": { + "breakpointDescription": "Mobilais izkārtojums vienmēr tiek izmantots no 0 pikseļiem līdz nākamajam izkārtojuma pārtraukumpunktam." + }, + "preview": { + "columns": "kolonnas", + "empty": "Šis izkārtojums ir tukšs", + "dynamicSection": "Dinamiskā sadaļa", + "editorWidthLabel": "{layoutName} · {width}px" + }, + "reset": { + "action": "Atiestatīt no pamata izkārtojuma", + "confirm": { + "title": "Atiestatīt {layoutName}?", + "message": "Tas aizstās visas saglabātās pozīcijas un izmērus šajā izkārtojumā ar jaunu izkārtojumu, kas ģenerēts no pamata izkārtojuma. Šo darbību nevar atsaukt." + } + }, + "edit": { + "action": "Rediģēt izkārtojumu", + "saveAndEdit": "Saglabāt un rediģēt", + "save": "Saglabāt izkārtojumu", + "cancel": { + "action": "Atcelt izkārtojuma rediģēšanu", + "title": "Atmest izkārtojuma izmaiņas?", + "message": "Jūsu nesaglabātās izmaiņas šajā izkārtojumā tiks atmestas." + } } }, "background": { @@ -4278,10 +6053,7 @@ "rename": { "label": "Pārdēvēt dēli", "description": "Nosaukuma maiņa pārtrauks visas saites uz šo dēli.", - "button": "Mainīt nosaukumu", - "modal": { - "title": "Pārdēvēt dēli" - } + "button": "Mainīt nosaukumu" }, "visibility": { "label": "Mainīt dēļa redzamību", @@ -4305,9 +6077,7 @@ } }, "delete": { - "label": "Dzēst šo dēli", "description": "Pēc dēļa dzēšanas to vairs nevarēs atjaunot. Lūdzu, pārliecinieties par savu izvēli.", - "button": "Dzēst šo dēli", "confirm": { "title": "Dzēst dēli", "description": "Vai tiešām vēlaties dzēst šo dēli? Dēlis un viss tā saturs tiks neatgriezeniski dzēsts." @@ -4352,28 +6122,41 @@ }, "layout": { "field": { - "name": { - "label": "Vārds" - }, "columnCount": { "label": "Kolonnu skaits" }, "breakpoint": { "label": "Pārtraukumpunkts", "description": "Izkārtojums tiks izmantots visos ekrānos, kas ir lielāki par šo pārtraukumpunktu, līdz nākamajam lielākajam pārtraukumpunktam." + }, + "gutters": { + "label": "Fiksētas sānu joslas", + "description": "Rezervējiet līdz trim informācijas paneļa kolonnām katrā pusē. Atlikusī kanva tiek automātiski pārkārtota.", + "left": { + "label": "Kreisā sānu josla", + "description": "Saglabājiet šo apgabalu redzamu, kamēr ritināt informācijas paneli.", + "thumbLabel": "Kreisās sānu joslas platums" + }, + "right": { + "label": "Labā sānu josla", + "description": "Saglabājiet šo apgabalu redzamu, kamēr ritināt informācijas paneli.", + "thumbLabel": "Labās sānu joslas platums" + }, + "width": { + "label": "Platums kolonnās" + }, + "preview": { + "label": "Informācijas paneļa izkārtojuma priekšskatījums" + } } } }, "management": { "metaTitle": "Pārvaldība", - "title": { - "morning": "Labrīt, {username}", - "afternoon": "Labdien, {username}", - "evening": "Labvakar, {username}" - }, "notFound": { "title": "Nav atrasts", - "text": "Nevarēja atrast pieprasīto resursu" + "text": "Nevarēja atrast pieprasīto resursu", + "backToHome": "Atpakaļ uz pārvaldības sākumlapu" }, "error": { "title": "Šo lapu neizdevās ielādēt", @@ -4382,19 +6165,10 @@ }, "navbar": { "items": { - "workshop": "Workshop", "home": "Sākums", - "boards": "Dēļi", - "apps": "Lietotnes", - "integrations": "Integrācijas", - "searchEngies": "Meklētājprogrammas", - "medias": "Multivide", "users": { - "label": "Lietotāji", "items": { - "manage": "Pārvaldīt", - "invites": "Uzaicinājumi", - "groups": "Grupas" + "manage": "Pārvaldīt" } }, "tools": { @@ -4402,10 +6176,7 @@ "items": { "docker": "Docker", "kubernetes": "Kubernetes", - "logs": "Žurnāli", "api": "API & MCP", - "certificates": "Sertifikāti", - "tasks": "Uzdevumi", "backup": "Dublēšana" } }, @@ -4419,21 +6190,12 @@ "sourceCode": "Avota kods" } }, - "about": "Par Programmu" + "about": "Par Programmu", + "assistant": "Asistents" } }, "page": { "home": { - "statistic": { - "board": "Dēļi", - "user": "Lietotāji", - "invite": "Uzaicinājumi", - "integration": "Integrācijas", - "app": "Lietotnes", - "group": "Grupas", - "searchEngine": "Meklētājprogrammas", - "media": "Multivide" - }, "statisticLabel": { "boards": "Dēļi", "resources": "Resursi", @@ -4471,13 +6233,8 @@ "tooltip": "Šī tāfele tiks rādīta kā jūsu mobilā tāfele" } }, - "duplicate": { - "label": "Dublēt dēli" - }, "delete": { - "label": "Neatgriezeniski dzēst", "confirm": { - "title": "Dzēst dēli", "description": "Vai tiešām vēlaties dzēst dēli {name}?" } } @@ -4486,28 +6243,82 @@ "public": "Šis dēlis ir publisks", "private": "Šis dēlis ir privāts" }, - "noResults": { - "title": "Pagaidām nav dēļu" + "preview": { + "label": "Izkārtojuma priekšskatījums panelim {name} ar {count} vienumiem", + "unknownCreator": "Nezināms izveidotājs" }, - "modal": { - "createBoard": { - "field": { - "name": { - "label": "Nosaukums" - } - } - } + "noResults": { + "title": "Pagaidām nav dēļu", + "description": "Izveidojiet paneli, lai sakārtotu savas lietotnes un logrīkus vienuviet." } }, "media": { "includeFromAllUsers": "Iekļaut visu lietotāju multividi" }, "user": { - "back": "Atpakaļ pie lietotājiem", "fieldsDisabledExternalProvider": "Daži lauki ir atspējoti, jo tos pārvalda ārējs autentifikācijas nodrošinātājs.", "setting": { "general": { "title": "Vispārīgi", + "header": { + "title": "Galvenes darbnīca", + "badge": "Personisks", + "description": "Velciet vadīklas jebkurā rindas vietā. Kreisā, centrālā un labā pozīcija paliek fiksētas, kamēr vadīklas pārvietojas ap tām.", + "device": { + "desktop": "Dators", + "mobile": "Mobilā ierīce" + }, + "zones": { + "left": "Pa kreisi", + "center": "Centrā", + "right": "Pa labi" + }, + "action": { + "hide": "Paslēpt galveni", + "show": "Rādīt galveni", + "configure": "Pārvietot vai konfigurēt {item}", + "remove": "Noņemt {item}", + "dropIntoZone": "Pārvietot uz sadaļu {zone}" + }, + "preview": { + "board": "Informācijas paneļa {name} priekšskatījums", + "empty": "Nav pieejams neviens informācijas paneļa izkārtojums" + }, + "available": { + "title": "Pieejamās vadīklas", + "description": "Pievienojiet vadīklu un pēc tam velciet visu tās pogu uz augstāk norādīto pozīciju.", + "requiredAlways": "Šī vadīkla ir obligāta, taču varat to pārvietot jebkurā galvenes vietā.", + "allAdded": "Visas iebūvētās vadīklas jau atrodas jūsu galvenē.", + "add": "Pievienot {item}", + "boardShortcut": "Paneļa saīsne", + "chooseBoard": "Izvēlēties paneli" + }, + "configuration": { + "description": "Šī vadīkla saglabā tādu pašu izmēru kā aktīvajā galvenē.", + "searchDisplay": { + "input": "Meklēšanas josla", + "icon": "Tikai ikona" + }, + "logoDisplay": { + "logo": "Tikai logotips", + "logoAndText": "Logotips + teksts" + } + }, + "items": { + "logo": "Logotips", + "search": "Meklēt", + "home": "Sākuma panelis", + "boardSwitcher": "Dēļi", + "assistant": "Asistents", + "docker": "Docker", + "boardEdit": "Rediģēt paneli", + "boardSettings": "Paneļa iestatījumi", + "settings": "Jūsu iestatījumi", + "themeToggle": "Pārslēgt motīvu", + "user": "Konts", + "boardUnavailable": "Panelis nav pieejams" + } + }, "item": { "language": "Valoda un reģions", "board": { @@ -4541,14 +6352,10 @@ }, "security": { "title": "Drošība" - }, - "board": { - "title": "Dēļi" } }, "list": { - "metaTitle": "Pārvaldīt lietotājus", - "title": "Lietotāji" + "metaTitle": "Pārvaldīt lietotājus" }, "edit": { "metaTitle": "Rediģēt lietotāju {username}" @@ -4602,9 +6409,6 @@ } }, "field": { - "id": { - "label": "ID" - }, "creator": { "label": "Izveidotājs" }, @@ -4628,10 +6432,7 @@ }, "setting": { "title": "Iestatījumi", - "alert": "Grupu iestatījumu prioritāti nosaka grupu secība sarakstā. Augstāk esošie iestatījumi pārraksta zemāk esošos iestatījumus.", - "board": { - "title": "Dēļi" - } + "alert": "Grupu iestatījumu prioritāti nosaka grupu secība sarakstā. Augstāk esošie iestatījumi pārraksta zemāk esošos iestatījumus." }, "members": { "title": "Dalībnieki", @@ -4639,10 +6440,7 @@ "notFound": "Dalībnieki nav atrasti" }, "permissions": { - "title": "Atļaujas", - "form": { - "unsavedChanges": "Jums ir nesaglabātas izmaiņas!" - } + "title": "Atļaujas" } } }, @@ -4651,12 +6449,10 @@ "notification": { "success": { "message": "Iestatījumi veiksmīgi saglabāti" - }, - "error": { - "message": "Iestatījumus neizdevās saglabāt" } }, "section": { + "analyticsDocumentation": "Skatiet, kādus analītikas datus Homarr apkopo", "analytics": { "title": "Analītika", "general": { @@ -4685,7 +6481,6 @@ } }, "board": { - "title": "Dēļi", "homeBoard": { "label": "Globālais sākuma dēlis", "mobileLabel": "Globālais mobilais dēlis", @@ -4704,7 +6499,6 @@ } }, "user": { - "title": "Lietotāji", "enableGravatar": { "label": "Iespējot Gravatar", "description": "Ja nav iestatīts pielāgots avatārs un ir konfigurēts e-pasts, izmantot lietotāja avatāru no Libravatar/Gravatar" @@ -4720,12 +6514,86 @@ "appearance": { "title": "Izskats", "defaultColorScheme": { - "label": "Noklusējuma krāsu shēma", + "label": "Noklusējuma krāsu shēma" + } + }, + "branding": { + "title": "Instances zīmols", + "groups": { + "identity": "Identitāte", + "appearance": "Izskats", + "customCss": "Pielāgots CSS", + "authentication": "Autentifikācija" + }, + "identity": { + "description": "Lietotnes logotips ir lielākais simbols, kas tiek izmantots lietotnē, pieteikšanās lapās un instalētajās lietotnēs. Pārlūkprogrammas ikona (favicon) ir mazs kvadrāts cilnēs un grāmatzīmēs; ja tā nav norādīta, tiek izmantots lietotnes logotips." + }, + "appName": { + "label": "Lietotnes nosaukums" + }, + "greeting": { + "label": "Pielāgots sveiciens" + }, + "logo": { + "label": "Lietotnes logotips", + "placeholder": "/logo/logo.png" + }, + "favicon": { + "label": "Pārlūkprogrammas ikona (favicon)", + "placeholder": "Izmanto lietotnes logotipu" + }, + "primaryColor": { + "label": "Pamatkrāsa" + }, + "secondaryColor": { + "label": "Sekundārā krāsa" + }, + "lockPrimaryColor": { + "label": "Saglabāt šo krāsu visos paneļos", + "description": "Neļauj paneļa krāsām aizstāt lietotnes akcenta krāsu." + }, + "signInBackground": { + "label": "Autentifikācijas fons", + "placeholder": "https://example.com/background.jpg" + }, + "signInOverlay": { + "label": "Fona pārklājums" + }, + "defaultRadius": { + "label": "Stūru stils", "options": { - "auto": "Automātiski", - "light": "Gaišs", - "dark": "Tumšs" + "xs": "Ciešs", + "sm": "Smalks", + "md": "Līdzsvarots", + "lg": "Noapaļots", + "xl": "Maigs" } + }, + "customCss": { + "label": "Globāls pielāgots CSS", + "description": "Piemērots katrai lapai. Paneļa pielāgotais CSS to var aizstāt." + }, + "authVisibility": { + "description": "Izvēlieties, kas tiek rādīts katrā autentifikācijas lapā.", + "appName": "Lietotnes nosaukums", + "logo": "Lietotnes logotips", + "greeting": "Sveiciens" + }, + "summary": { + "title": "Pašreizējais zīmols", + "cornerStyle": "Stūru stils", + "palette": "Palete", + "backgroundConfigured": "Pielāgots fons · {overlay}% pārklājums", + "backgroundDefault": "Noklusējuma fons", + "greetingConfigured": "Pielāgots sveiciens", + "greetingDefault": "Noklusējuma sveiciens", + "boardColorLocked": "Paneļa krāsa bloķēta", + "boardColorFlexible": "Paneļu krāsas atļautas", + "appName": "Darba vārds", + "logo": "Logotips", + "greeting": "Sveiciens", + "on": "Ieslēgts", + "off": "Izslēgts" } }, "culture": { @@ -4733,12 +6601,177 @@ "defaultLocale": { "label": "Noklusējuma valoda" } + }, + "assistant": { + "loading": "Notiek asistenta konfigurācijas ielāde", + "title": "Asistents", + "description": "Savienojiet ar OpenAI saderīgu modeļa galapunktu instances mēroga asistentam.", + "security": { + "description": "API atslēgas un papildu galvenes vērtības Homarr datubāzē tiek šifrētas. Tās nekad netiek nosūtītas pārlūkprogrammām. Modeļa pieprasījumi no Homarr servera tiek nosūtīti tieši uz konfigurēto galapunktu." + }, + "overview": { + "connectionReady": "Savienojums gatavs", + "unsavedChanges": "Nesaglabātas izmaiņas", + "setupRequired": "Nepieciešama iestatīšana", + "disabled": "Atspējots", + "noModel": "Nav izvēlēts modelis" + }, + "connection": { + "endpointTitle": "Nodrošinātājs un galapunkts", + "description": "Izvēlieties sākotnējo iestatījumu vai savienojiet jebkuru pakalpojumu, kas ievieš OpenAI Chat Completions API.", + "save": "Saglabāt nodrošinātāja savienojumu" + }, + "credentials": { + "title": "Akreditācijas dati", + "description": "Pievienojiet šim galapunktam nepieciešamos noslēpumus. Saglabātās vērtības paliek šifrētas, un tās nevar nolasīt.", + "required": "Atslēga ir obligāta", + "optional": "Atslēga nav obligāta", + "workshop": "GitHub pieteikšanās katram lietotājam" + }, + "provider": { + "title": "Nodrošinātājs", + "groups": { + "free": "Bezmaksas ar Homarr", + "hosted": "Mākonī izvietotie nodrošinātāji", + "local": "Lokālie nodrošinātāji", + "custom": "Pielāgots" + }, + "options": { + "homarr": { + "description": "Katru dienu ir pieejams ierobežots skaits bezmaksas Asistenta lietojumu, ko apmaksā Homarr komanda. Lai izmantotu savu limitu, piesakieties Community Workshop." + }, + "openrouter": { + "description": "Mākonī izvietota modeļu maršrutēšana ar plašu rīkus atbalstošu modeļu katalogu." + }, + "openai": { + "description": "OpenAI Chat Completions, izmantojot oficiālo API galapunktu." + }, + "anthropic": { + "description": "Claude, izmantojot Anthropic OpenAI SDK saderības galapunktu." + }, + "google-gemini": { + "description": "Gemini, izmantojot Google ar OpenAI saderīgo API galapunktu." + }, + "xai": { + "description": "Grok modeļi, izmantojot xAI ar OpenAI saderīgo API." + }, + "groq": { + "description": "Ātra mākonī izvietota izpilde, izmantojot Groq ar OpenAI saderīgo API." + }, + "mistral": { + "description": "Mistral modeļi, izmantojot oficiālo API." + }, + "deepseek": { + "description": "DeepSeek modeļi, izmantojot ar OpenAI saderīgo API." + }, + "together": { + "description": "Mākonī izvietoti atvērtie modeļi, izmantojot Together ar OpenAI saderīgo API." + }, + "ollama": { + "description": "Lokāls vai tīkla Ollama serveris, izmantojot tā API, kas ir saderīgs ar OpenAI." + }, + "lm-studio": { + "description": "LM Studio lokālais serveris ar iespējotu OpenAI saderību." + }, + "llama-cpp": { + "description": "Lokāls vai tīkla llama.cpp serveris, izmantojot tā API, kas ir saderīgs ar OpenAI." + }, + "custom": { + "label": "Pielāgots galapunkts", + "description": "Jebkurš cits galapunkts, kas ir saderīgs ar OpenAI Chat Completions." + } + }, + "homarrAuth": { + "title": "Iekļauti bezmaksas Asistenta ikdienas lietojumi", + "description": "API atslēga nav nepieciešama. Homarr komanda katru dienu jums nodrošina ierobežotu skaitu Asistenta lietojumu. Lai jūsu limits būtu nošķirts, piesakieties Community Workshop." + } + }, + "baseUrl": { + "title": "API pamata URL", + "description": "Iekļaujiet API prefiksu, parasti /v1. Konteineros localhost attiecas uz Homarr konteineru." + }, + "apiKey": { + "title": "API atslēga", + "required": "Šis nodrošinātājs to pieprasa. Vērtība ir šifrēta, un to var tikai ierakstīt.", + "optional": "Lokālajiem galapunktiem nav obligāta. Atstājiet tukšu, ja pakalpojumam nav nepieciešama nesēja autentifikācija.", + "placeholder": "Ievadiet API atslēgu", + "savedTitle": "Šifrētā API atslēga saglabāta", + "savedDescription": "Homarr var izmantot šo atslēgu, taču nevar parādīt vai atgūt tās vērtību.", + "remove": "Noņemt saglabāto API atslēgu", + "removeFlow": { + "title": "Noņemt saglabāto API atslēgu?", + "description": "Šim nodrošinātājam nepieciešama API atslēga. Tās noņemšana var apturēt modeļu atrašanu un asistenta atbildes, līdz tiek saglabāta cita atslēga.", + "optionalDescription": "Pēc šīs atslēgas noņemšanas galapunkts vairs nesaņems nesēja autentifikāciju. Pārliecinieties, ka tas pieņem neautentificētus pieprasījumus vai izmanto citu saglabātu galveni.", + "cancel": "Paturēt saglabāto atslēgu", + "confirm": "Noņemt API atslēgu" + } + }, + "headers": { + "title": "Papildu pieprasījumu galvenes", + "description": "Neobligātas autentifikācijas vai maršrutēšanas galvenes. Galveņu vērtības ir šifrētas, un tās var tikai ierakstīt.", + "add": "Pievienot galveni", + "name": "Galvenes nosaukums", + "value": "Galvenes vērtība", + "valuePlaceholder": "Noslēpuma vai maršrutēšanas vērtība", + "remove": "Noņemt galveni", + "configured": "Ir konfigurētas papildu šifrētas galvenes. Pievienojot galvenes, visa saglabātā kopa tiek aizstāta.", + "empty": "Šim nodrošinātājam nav saglabātu papildu galveņu.", + "savedBadge": "Galvenes saglabātas", + "pendingRemoval": "Noņemšana gaida izpildi", + "clear": "Saglabājot noņemt saglabātās galvenes", + "keep": "Paturēt saglabātās galvenes" + }, + "model": { + "title": "Modelis", + "description": "Atlasiet atrastu modeli vai ievadiet precīzu galapunkta modeļa ID.", + "placeholder": "Modeļa ID", + "refresh": "Atsvaidzināt modeļus", + "chooseModel": "Izvēlieties modeli, kas tiks izmantots jaunām sarunām.", + "discoveryPath": "Modeļu atrašanas ceļš", + "discoveryPathDescription": "Tiek pievienots API pamata URL. Atstājiet tukšu, lai atspējotu atrašanu un izmantotu manuālu modeļa ID.", + "manual": "Ievadiet modeļa ID manuāli vai saglabājiet savienojumu, lai atrastu modeļus.", + "manualFallback": "Modeļu atrašana nav pieejama. Joprojām varat manuāli ievadīt modeļa ID.", + "saveConnectionFirst": "Pirms modeļa izvēles saglabājiet nodrošinātāja savienojumu.", + "discovering": "Notiek pie šī nodrošinātāja pieejamo modeļu atsvaidzināšana…", + "discovered": "{count, plural, zero {Nav atrasts neviens modelis. Rīku atbalsts ir atkarīgs no izvēlētā galapunkta un modeļa.} one {Atrasts # modelis. Rīku atbalsts ir atkarīgs no izvēlētā galapunkta un modeļa.} other {Atrasti # modeļi. Rīku atbalsts ir atkarīgs no izvēlētā galapunkta un modeļa.}}", + "discoveryFailed": "Modeļu atrašana netika pabeigta", + "context": "{count} konteksta logs", + "toolsConfirmed": "Reklamētie rīki", + "toolsUnknown": "Pārbaudīt rīku atbalstu" + }, + "serverTools": { + "title": "Servera rīki", + "webSearch": { + "label": "Meklēšana tīmeklī", + "description": "Ļaut modelim meklēt aktuālo informāciju tīmeklī, izmantojot OpenRouter. Meklēšana tiek apmaksāta atsevišķi, izmantojot OpenRouter.", + "proxyDescription": "Nosūtīt OpenRouter tīmekļa meklēšanas servera rīku uz šo galapunktu. Iespējojiet to tikai tad, ja pielāgotais galapunkts pārsūta OpenRouter servera rīku formātu, piemēram, Homarr Router starpniekserveris.", + "limit": "Modelis izlemj, kad meklēt, un katram pieprasījumam ir noteikts 3 meklējumu un 5 rezultātu ierobežojums katram meklējumam." + } + }, + "enabled": { + "label": "Iespējot Asistentu", + "description": "Rāda asistentu visiem pieteiktajiem lietotājiem. Esošās Homarr atļaujas joprojām attiecas uz katru iekšējā rīka izsaukumu." + }, + "save": "Saglabāt asistentu", + "notification": { + "connectionSaved": { + "title": "Nodrošinātāja savienojums saglabāts", + "message": "Galapunkts un šifrētie akreditācijas dati ir gatavi modeļa izvēlei.", + "credentialsCleared": "Galapunkts tika mainīts, tāpēc iepriekšējie akreditācijas dati tika notīrīti. Ja nepieciešams, pievienojiet jaunajam galamērķim akreditācijas datus." + }, + "saved": { + "title": "Asistenta iestatījumi saglabāti", + "message": "Jaunā modeļa un pieejamības iestatījumi ir aktīvi." + }, + "error": { + "title": "Asistenta iestatījumus neizdevās saglabāt" + } + } } } }, "tool": { "tasks": { - "title": "Uzdevumi", "status": { "idle": "", "running": "Darbojas", @@ -4756,6 +6789,11 @@ "label": "Pingi" } }, + "action": { + "run": "Palaist {name} tagad", + "enable": "Iespējot {name}", + "disable": "Atspējot {name}" + }, "interval": { "seconds": "Ik pēc {interval, plural, =1 {sekundes} zero {sekundēm} one {sekundes} other {# sekundēm}}", "minutes": "Ik pēc {interval, plural, =1 {minūtes} zero {minūtēm} one {minūtes} other {# minūtēm}}", @@ -4771,13 +6809,7 @@ } } }, - "settings": { - "title": "Uzdevuma iestatījumi: {jobName}" - }, "field": { - "name": { - "label": "Vārds" - }, "interval": { "label": "Plānošanas intervāls" }, @@ -4791,11 +6823,6 @@ "table": { "search": "Meklēt {count} uzdevumus..." }, - "action": { - "refresh": { - "label": "Atsvaidzināt" - } - }, "refresh": { "success": { "message": "Uzdevumi veiksmīgi atsvaidzināti" @@ -4829,7 +6856,6 @@ } }, "api": { - "title": "API", "modal": { "createApiToken": { "title": "API pilnvara izveidota", @@ -4855,7 +6881,6 @@ }, "table": { "header": { - "id": "ID", "createdBy": "Izveidoja", "actions": "Darbības" } @@ -4911,43 +6936,12 @@ "availableTools": { "title": "Pieejamie rīki", "description": "Pieejami {count} rīki. Izvērsiet kategoriju, lai redzētu atsevišķus rīkus un to aprakstus.", - "columnType": "Tips", - "columnName": "Rīks", - "columnDescription": "Apraksts" - }, - "troubleshooting": { - "title": "Problēmu novēršana", - "missingHeader": { - "title": "\"Trūkst ApiKey galvenes\"", - "description": "Jūsu klients nesūta {header} galveni. Pārbaudiet, vai {section} sadaļa jūsu MCP konfigurācijā ir pareiza. Dažiem klientiem pēc konfigurācijas izmaiņām nepieciešama restartēšana." - }, - "invalidFormat": { - "title": "\"Nederīgs ApiKey formāts\"", - "description": "Pārliecinieties, ka nokopējāt pilnu API atslēgu, nevis tikai daļu no tās." - }, - "invalidKey": { - "title": "\"Nederīga API atslēga\"", - "description": "Atslēgas ID nav atrasts vai pilnvara ir nepareiza. API atslēgas var apskatīt tikai vienreiz, kad tās izveidotas. Ja pazaudējāt, izdzēsiet veco atslēgu un izveidojiet jaunu." - }, - "connectionRefused": { - "title": "Savienojums atteikts / noildze", - "description": "Pārliecinieties, ka URL ir sasniedzams no jūsu AI klienta. Ja Homarr darbojas aiz reverse proxy vai Docker, izmantojiet ārējo URL (nevis {localhost}). Pārbaudiet, vai ports ir pareizs (noklusējums: 7575 Docker)." - }, - "toolsNotAppearing": { - "title": "Rīki neparādās", - "description": "Dažiem rīkiem nepieciešama specifisku integrāciju konfigurācija (piem., Docker, Overseerr). Rīku saraksts ir atkarīgs no tā, kas pieejams jūsu Homarr instancē." + "filteredDescription": "{count} atbilstoši rīki izvērstajās kategorijās.", + "search": "Meklēt rīkus", + "noResults": { + "title": "Neviens rīks neatbilst šai meklēšanai", + "description": "Neviens MCP rīks neatbilst vaicājumam \"{search}\". Izmēģiniet nosaukumvietu, rīka nosaukumu vai aprakstu." } - }, - "copy": "Kopēt", - "oneClick": { - "title": "Instalēt ar vienu klikšķi", - "subtitle": "Izmanto OAuth — autentificējieties pārlūkā pirmajā lietošanas reizē", - "vsCode": "Instalēt VS Code", - "cursor": "Instalēt Cursor", - "copyUrl": "Kopēt MCP URL", - "copied": "Nokopēts!", - "copyHint": "ChatGPT, Claude Code vai jebkuram MCP klientam", - "manualConfig": "Manuālā konfigurācija" } } } @@ -4964,47 +6958,12 @@ "title": "Sensitīvu datu eksports", "warningTitle": "Šis eksports satur visu jūsu datu bāzi.", "warningBody": "Dublējumā iekļauti visi lietotāji, integrāciju noslēpumi (šifrēti), API atslēgas, dēļu konfigurācijas un lietotņu dati. Glabājiet eksportēto failu droši un neizplatiet to.", - "typePrompt": "Ierakstiet \"{phrase}\", lai turpinātu", - "submit": "Eksportēt datu bāzi", - "cancel": "Atcelt" + "submit": "Eksportēt datu bāzi" } }, "import": { "title": "Atjaunot datu bāzi", - "description": "Augšupielādējiet iepriekš eksportētu dublējuma ZIP, lai atjaunotu datu bāzi. Tas aizstās visu jūsu datu bāzi. Ja dublējums tika izveidots ar citu šifrēšanas atslēgu, noslēpumi tiks automātiski pāršifrēti.", - "warning": "Dublējuma atjaunošana pilnībā aizstās jūsu pašreizējo datu bāzi un restartēs lietojumprogrammu. Šo darbību nevar atsaukt.", - "dropzone": { - "title": "Iemetiet savu dublējuma ZIP šeit vai noklikšķiniet, lai pārlūkotu", - "description": "Tiek pieņemti tikai .zip faili no Homarr SQLite dublējuma" - }, - "changeFile": "Mainīt failu", - "button": "Atjaunot datu bāzi", - "success": { - "title": "Atjaunošana pabeigta", - "message": "Datu bāze ir veiksmīgi atjaunota. Lietojumprogramma tiek restartēta..." - }, - "error": "Importēšana neizdevās" - }, - "preview": { - "title": "Dublējuma saturs", - "exported": "Eksportēts {date}", - "loading": "Notiek dublējuma faila analīze...", - "errorTitle": "Priekšskatījuma kļūda", - "entity": "Entītija", - "count": "Skaits", - "boards": "Dēļi", - "entities": { - "board": "Dēļi", - "user": "Lietotāji", - "app": "Lietotnes", - "integration": "Integrācijas", - "item": "Logrīki", - "media": "Multivide", - "search_engine": "Meklētājprogrammas" - }, - "analyzeError": "Neizdevās analizēt dublējuma failu", - "invalidMissingMetadata": "Nederīgs dublējums: trūkst metadata.json", - "invalidMissingDb": "Nederīgs dublējums: trūkst db.sqlite" + "description": "Augšupielādējiet iepriekš eksportētu dublējuma ZIP, lai atjaunotu datu bāzi. Tas aizstās visu jūsu datu bāzi. Ja dublējums tika izveidots ar citu šifrēšanas atslēgu, noslēpumi tiks automātiski pāršifrēti." }, "restore": { "dropzone": { @@ -5014,29 +6973,20 @@ "analyzing": "Notiek dublējuma analīze...", "changeFile": "Mainīt failu", "continueToRestore": "Turpināt atjaunošanu", - "tryAgain": "Mēģināt vēlreiz", "analysisError": "Analīzes kļūda", "preview": { "title": "Dublējuma saturs", "exported": "Eksportēts {date}", "entity": "Entītija", "count": "Skaits", - "boards": "Dēļi", "entities": { - "board": "Dēļi", - "user": "Lietotāji", - "app": "Lietotnes", - "integration": "Integrācijas", - "item": "Logrīki", - "media": "Multivide", - "search_engine": "Meklētājprogrammas" + "item": "Logrīki" }, "migrationsApplied": "{count} migrācija piemērota", "migrationsAppliedPlural": "{count} migrācijas piemērotas", "migrationsOlderVersion": "Šis dublējums bija no vecākas Homarr versijas. Tika piemērota {count} shēmas migrācija, lai to atjauninātu.", "migrationsOlderVersionPlural": "Šis dublējums bija no vecākas Homarr versijas. Tika piemērotas {count} shēmas migrācijas, lai to atjauninātu.", "migrationsUpToDate": "Datu bāzes shēma ir aktuāla ({count} migrācijas piemērotas)", - "upToDate": "Aktuāls", "migrationsPending": "{count} gaida" }, "migration": { @@ -5047,21 +6997,21 @@ "title": "Destruktīva darbība", "warningTitle": "Tas neatgriezeniski aizstās visu jūsu datu bāzi.", "warningBody": "Visi pašreizējie dēļi, lietotāji, lietotnes, integrācijas, iestatījumi un sesijas tiks zaudētas. Šo darbību nevar atsaukt. Lietojumprogramma tiks restartēta pēc atjaunošanas.", - "typePrompt": "Ierakstiet \"{phrase}\", lai turpinātu", - "cancel": "Atcelt", "submit": "Atjaunot datu bāzi" }, "progress": { "title": "Notiek datu bāzes atjaunošana...", - "extracting": "Izvelk dublējuma arhīvu", - "migrating": "Piemēro datu bāzes migrācijas", - "encrypting": "Pāršifrē integrāciju noslēpumus", - "swapping": "Aizvieto datu bāzes failu", - "restarting": "Restartē serveri" + "restarting": "Restartē serveri", + "relogin": "Datubāzes atjaunošana padarīja jūsu pašreizējo sesiju nederīgu. Homarr nosūtīs jūs uz pieteikšanās lapu, kad serveris būs gatavs." }, "complete": { "title": "Atjaunošana pabeigta", - "message": "Datu bāze ir veiksmīgi atjaunota. Serveris tiek restartēts – lūdzu, atsvaidziniet lapu pēc dažām sekundēm." + "message": "Datu bāze ir veiksmīgi atjaunota. Serveris tiek restartēts – lūdzu, atsvaidziniet lapu pēc dažām sekundēm.", + "button": "Pieteikties tagad" + }, + "timeout": { + "title": "Serveris neatgriezās tiešsaistē", + "message": "Datubāzes atjaunošana ir pabeigta, taču Homarr atkal nebija gatavs. Atkārtojiet savienojuma pārbaudi vai manuāli atsvaidziniet šo lapu." }, "failed": { "title": "Atjaunošana neizdevās" @@ -5069,6 +7019,9 @@ "invalidMissingMetadata": "Nederīgs dublējums: trūkst metadata.json", "invalidMissingDb": "Nederīgs dublējums: trūkst db.sqlite", "analyzeError": "Neizdevās analizēt dublējumu" + }, + "confirm": { + "typePrompt": "Lai turpinātu, ierakstiet \"{phrase}\"" } } }, @@ -5103,7 +7056,11 @@ "toggleBoardEdit": "Pārslēgt dēļa rediģēšanas režīmu", "toggleColorScheme": "Pārslēgt gaišo/tumšo režīmu", "saveNotebook": "Saglabāt piezīmju grāmatiņu (tikai piezīmju grāmatiņas logrīkā)", - "openSpotlight": "Atvērt meklēšanu" + "openSpotlight": "Atvērt meklēšanu", + "openSpotlightApps": "Atvērt lietotņu meklēšanu", + "openSpotlightAssistant": "Atvērt asistenta režīmu", + "openSpotlightPreferences": "Atvērt preferenču režīmu", + "openAssistant": "Atvērt Asistentu" }, "note": "Padoms: Mod attiecas gan uz taustiņu Ctrl, gan uz taustiņu ⌘ operētājsistēmā macOS" } @@ -5113,6 +7070,63 @@ }, "docker": { "title": "Konteineri", + "reconciliation": { + "title": "Docker iestatīšana ar palīdzību", + "suggestions": "", + "attention": "{count} nepieciešama uzmanība", + "endpointUnavailable": "Dažus pakalpojumus nevarēja pārbaudīt, jo šie galapunkti nav pieejami: {names}", + "empty": "Redzami Docker pakalpojumi netika atrasti.", + "emptyFilter": "Neviens pakalpojums neatbilst šim skatam.", + "ambiguous": "Šim pakalpojumam varētu atbilst vairāk nekā viens esošs vienums. Homarr automātiski neizvēlēsies nevienu.", + "filter": { + "attention": "Nepieciešama uzmanība", + "represented": "Jau iestatīts", + "all": "Visi" + }, + "state": { + "newRecognized": "Gatavs savienošanai", + "newApp": "Jauns pakalpojums", + "represented": "Jau attēlots", + "linked": "Saistīts", + "moved": "Adrese mainīta" + }, + "url": { + "manual": "Ievadīt adresi manuāli" + }, + "health": { + "layer": { + "docker": "Docker", + "integrationConfiguration": "Integrācija", + "authentication": "Autentifikācija", + "apiRequest": "API", + "appRepresentation": "Lietotne", + "widgetConfiguration": "Logrīks", + "widgetQuery": "Logrīka vaicājums" + }, + "status": { + "available": "Pieejams", + "configured": "Konfigurēts", + "linked": "Saistīts", + "missing": "Trūkst", + "changed": "Mainīts", + "unused": "Netiek izmantots", + "notApplicable": "Nav piemērojams", + "notObserved": "Nav novērots" + } + }, + "action": { + "review": "Pārskatīt", + "dismiss": "Nerādīt", + "restoreDismissed": "Atjaunot paslēpto ({count})", + "setupIntegration": "Iestatīt integrāciju", + "reviewIntegration": "Pārskatīt integrāciju", + "viewRepresentation": "Skatīt iestatījumus" + }, + "loadError": { + "title": "Docker iestatīšanas palīgu neizdevās ielādēt", + "message": "Docker pakalpojuma informācija nav pieejama. Mēģiniet vēlreiz, neatstājot šo lapu." + } + }, "table": { "updated": "Atjaunināts {when}", "refresh": { @@ -5125,9 +7139,6 @@ "totalMemory": "Kopējā atmiņa: {memory}" }, "field": { - "name": { - "label": "Nosaukums" - }, "state": { "label": "Stāvoklis", "option": { @@ -5141,9 +7152,6 @@ } }, "stats": { - "cpu": { - "label": "CPU" - }, "memory": { "label": "Atmiņa" } @@ -5206,8 +7214,11 @@ } }, "remove": { - "label": "Noņemt", "confirm": "Noklikšķiniet vēlreiz, lai neatgriezeniski noņemtu", + "confirmation": { + "title": "{count, plural, zero {Noņemt # konteinerus?} one {Noņemt # konteineru?} other {Noņemt # konteinerus?}}", + "message": "{count, plural, zero {Tiks neatgriezeniski noņemti # konteineri: {names}} one {Tiks neatgriezeniski noņemts # konteiners: {names}} other {Tiks neatgriezeniski noņemti # konteineri: {names}}}" + }, "notification": { "success": { "title": "Konteineri noņemti", @@ -5219,8 +7230,13 @@ } } }, + "result": { + "failure": { + "title": "Dažas konteineru darbības neizdevās", + "message": "{total, plural, zero {{failed} no # darbībām neizdevās: {names}} one {{failed} no # darbības neizdevās: {names}} other {{failed} no # darbībām neizdevās: {names}}}" + } + }, "refresh": { - "label": "Atsvaidzināt", "notification": { "success": { "title": "Konteineri atsvaidzināti", @@ -5251,18 +7267,33 @@ }, "error": { "internalServerError": "Neizdevās iegūt Docker konteinerus", + "endpointUnavailable": "", "noColumns": "Logrīka iestatījumos atlasiet vismaz vienu kolonnu" } }, "kubernetes": { + "context": { + "label": "Kubernetes konteksts", + "loadError": { + "title": "Kubernetes kontekstus neizdevās ielādēt", + "message": "Konteksta informācija nav pieejama. Mēģiniet vēlreiz, neatstājot šo lapu." + }, + "status": { + "available": "Pieejams", + "degraded": "Metrikas nav pieejamas", + "unavailable": "Nav pieejams" + }, + "unavailable": "Šo Kubernetes kontekstu nevar sasniegt. Atlasiet citu kontekstu vai pārbaudiet tā akreditācijas datus un galapunktu.", + "metricsUnavailable": "Šis konteksts ir sasniedzams, bet Metrics Server nav pieejams. Inventārs paliek pieejams bez CPU un atmiņas lietojuma reāllaikā." + }, "cluster": { "title": "Klastera informācijas panelis", "label": "Klasteris", "providers": "Nodrošinātāji", "version": "Versija", - "architecture": "Arhitektūra", "capacity": { "title": "Kapacitāte", + "metricsUnavailable": "Metrics Server nav pieejams. Inventārs un rezervētā ietilpība joprojām ir redzama, taču CPU un atmiņas lietojumu reāllaikā nevar parādīt.", "resource": { "reserved": "Rezervēts", "used": "Lietots" @@ -5281,38 +7312,10 @@ } }, "nodes": { - "label": "Mezgli", "field": { - "name": { - "label": "Vārds" - }, - "state": { - "label": "Stāvoklis", - "option": { - "ready": "Gatavs", - "NotReady": "Nav gatavs" - } - }, - "cpu": { - "label": "CPU" - }, - "memory": { - "label": "RAM" - }, - "pods": { - "label": "Podi" - }, - "operatingSystem": { - "label": "OS" - }, - "architecture": { - "label": "Arhitektūra" - }, + "metricsUnavailable": "Nav pieejams", "kubernetesVersion": { "label": "Kubernetes versija" - }, - "creationTimestamp": { - "label": "Izveidots" } }, "table": { @@ -5320,43 +7323,17 @@ } }, "namespaces": { - "label": "Nosaukumvietas", - "field": { - "name": { - "label": "Vārds" - }, - "state": { - "label": "Stāvoklis", - "option": { - "active": "Aktīva", - "terminating": "Tiek pārtraukta" - } - }, - "creationTimestamp": { - "label": "Izveidots" - } - }, "table": { "search": "Meklēt {count} nosaukumvietas" } }, "ingresses": { - "label": "Ingress objekti", "field": { - "name": { - "label": "Vārds" - }, - "namespace": { - "label": "Nosaukumvieta" - }, "className": { "label": "Klases nosaukums" }, "rulesAndPaths": { "label": "Noteikumi un ceļi" - }, - "creationTimestamp": { - "label": "Izveidots" } }, "table": { @@ -5364,17 +7341,7 @@ } }, "services": { - "label": "Pakalpojumi", "field": { - "name": { - "label": "Vārds" - }, - "namespace": { - "label": "Nosaukumvieta" - }, - "type": { - "label": "Tips" - }, "ports": { "label": "Porti" }, @@ -5383,9 +7350,6 @@ }, "clusterIP": { "label": "Klastera IP" - }, - "creationTimestamp": { - "label": "Izveidots" } }, "table": { @@ -5393,25 +7357,12 @@ } }, "pods": { - "label": "Podi", "field": { - "name": { - "label": "Vārds" - }, - "namespace": { - "label": "Nosaukumvieta" - }, "image": { "label": "Attēls" }, "applicationType": { "label": "Lietotnes tips" - }, - "status": { - "label": "Statuss" - }, - "creationTimestamp": { - "label": "Izveidots" } }, "table": { @@ -5419,51 +7370,17 @@ } }, "secrets": { - "label": "Noslēpumi", - "field": { - "name": { - "label": "Vārds" - }, - "namespace": { - "label": "nosaukumvieta" - }, - "type": { - "label": "tips" - }, - "creationTimestamp": { - "label": "Izveidots" - } - }, "table": { "search": "Meklēt {count} noslēpumus" } }, "configmaps": { - "label": "ConfigMaps", - "field": { - "name": { - "label": "Vārds" - }, - "namespace": { - "label": "nosaukumvieta" - }, - "creationTimestamp": { - "label": "Izveidots" - } - }, "table": { "search": "Meklēt {count} ConfigMaps" } }, "volumes": { - "label": "Sējumi", "field": { - "name": { - "label": "Vārds" - }, - "namespace": { - "label": "Nosaukumvieta" - }, "accessModes": { "label": "Piekļuves režīmi" }, @@ -5478,12 +7395,6 @@ }, "volumeName": { "label": "Sējuma nosaukums" - }, - "status": { - "label": "Statuss" - }, - "creationTimestamp": { - "label": "Izveidots" } }, "table": { @@ -5492,6 +7403,29 @@ }, "error": { "internalServerError": "Neizdevās iegūt Kubernetes datus" + }, + "field": { + "name": { + "label": "Darba vārds" + }, + "namespace": { + "label": "Nosaukumvieta" + }, + "creationTimestamp": { + "label": "Izveidots" + }, + "state": { + "label": "Darba stāvoklis" + }, + "status": { + "label": "Statuss" + }, + "type": { + "label": "Lejupielādes klienta tips" + }, + "architecture": { + "label": "Arhitektūra" + } } }, "permission": { @@ -5525,71 +7459,27 @@ }, "navigationStructure": { "manage": { - "workshop": { - "label": "Workshop" - }, "label": "Pārvaldīt", - "boards": { - "label": "Dēļi" - }, - "integrations": { - "label": "Integrācijas", + "custom-widgets": { "edit": { - "label": "Rediģēt" + "flow": { + "label": "Plūsma" + } }, - "new": { - "label": "Jauns" - } - }, - "search-engines": { - "label": "Meklētājprogrammas", - "new": { - "label": "Jauns" + "workshop": { + "label": "Darbnīca" }, - "edit": { - "label": "Rediģēt" - } - }, - "medias": { - "label": "Multivide" - }, - "apps": { - "label": "Lietotnes", - "new": { - "label": "Jauns" - }, - "edit": { - "label": "Rediģēt" + "publish": { + "label": "Publicēt darbnīcā" } }, "users": { - "label": "Lietotāji", - "create": { - "label": "Izveidot" - }, "general": "Vispārīgi", - "security": "Drošība", - "board": "Dēļi", - "groups": { - "label": "Grupas" - }, - "invites": { - "label": "Uzaicinājumi" - } + "security": "Drošība" }, "tools": { "label": "Rīki", - "tasks": { - "label": "Uzdevumi" - }, - "docker": { - "label": "Docker", - "logs": { - "label": "Žurnāli" - } - }, "kubernetes": { - "label": "Kubernetes", "nodes": { "label": "Mezgli" }, @@ -5615,11 +7505,7 @@ "label": "Sējumi" } }, - "logs": { - "label": "Žurnāli" - }, "certificates": { - "label": "Sertifikāti", "hostnames": { "label": "Resursdatori" } @@ -5630,12 +7516,60 @@ }, "about": { "label": "Par Programmu" + }, + "assistant": { + "label": "Asistents" } } }, "search": { "placeholder": "Meklēt jebko", "nothingFound": "Nekas nav atrasts", + "modePicker": { + "search": { + "label": "Meklēt", + "placeholder": "Meklēt lietotnes, tāfeles, lapas, komandas un preferences" + }, + "apps": { + "label": "Lietotnes", + "placeholder": "Meklēt lietotnes, tāfeles un integrācijas" + }, + "command": { + "label": "Komandas", + "placeholder": "Meklēt darbības un komandas" + }, + "preferences": { + "label": "Iestatījumi", + "placeholder": "Meklēt un mainīt preferences" + }, + "assistant": { + "label": "Asistents", + "placeholder": "Jautāt Asistentam" + }, + "external": { + "label": "Tīmeklis", + "placeholder": "Meklēt ar ārēju meklētājprogrammu" + }, + "media": { + "label": "Multivide", + "placeholder": "Meklēt filmu vai pārraidi", + "fallback": "Meklēt multividi pēc “{query}”" + }, + "userGroup": { + "label": "Personas", + "placeholder": "Meklēt lietotājus un grupas" + }, + "continueWith": "Turpināt ar", + "dialogAriaLabel": "{mode} komandu izvēlne", + "navigationLabel": "Meklēšanas režīmi", + "modeAriaLabel": "{mode} režīms", + "resultsAriaLabel": "{mode} rezultāti", + "footer": { + "navigate": "Navigēt", + "open": "Atvērt", + "close": "Aizvērt" + } + }, "error": { "fetch": "Iegūstot datus, radās kļūda" }, @@ -5644,7 +7578,6 @@ "help": "Meklēt lietotnes, integrācijas vai dēļus", "group": { "app": { - "title": "Lietotnes", "children": { "action": { "open": { @@ -5660,7 +7593,6 @@ } }, "board": { - "title": "Dēļi", "children": { "action": { "open": { @@ -5680,9 +7612,6 @@ "title": "Atlasiet darbību dēlim" } } - }, - "integration": { - "title": "Integrācijas" } } }, @@ -5711,9 +7640,6 @@ "newBoard": { "label": "Izveidot jaunu dēli" }, - "importBoard": { - "label": "Importēt dēli" - }, "newApp": { "label": "Izveidot jaunu lietotni" }, @@ -5783,7 +7709,6 @@ } }, "defaultSearchEngineId": { - "label": "Noklusējuma meklētājprogramma", "children": { "detail": { "title": "Izvēlieties noklusējuma meklētājprogrammu" @@ -5791,7 +7716,6 @@ } }, "openSearchInNewTab": { - "label": "Atvērt meklēšanas rezultātus jaunā cilnē", "children": { "detail": { "title": "Atvērt meklēšanas rezultātus jaunā cilnē" @@ -5799,7 +7723,6 @@ } }, "ddgBangs": { - "label": "Iespējot DuckDuckGo bangs", "children": { "detail": { "title": "Iespējot DuckDuckGo bangs" @@ -5814,6 +7737,13 @@ } } }, + "byteUnitSystem": { + "children": { + "detail": { + "title": "Atlasiet datu lieluma mērvienības" + } + } + }, "homeBoardId": { "label": "Sākuma dēlis", "children": { @@ -5831,7 +7761,6 @@ } }, "pingIconsEnabled": { - "label": "Lietot ikonas pingiem", "children": { "detail": { "title": "Lietot ikonas pingiem" @@ -5839,7 +7768,6 @@ } }, "enableRightClickOnWidgets": { - "label": "Iespējot logrīku labo klikšķi", "children": { "detail": { "title": "Iespējot logrīku labo klikšķi" @@ -5867,6 +7795,7 @@ "description": "Sāciet rakstīt, lai meklētu savās multivides pieprasījumu integrācijās", "disabled": { "noIntegration": "Pievienojiet Overseerr, Jellyseerr vai Seerr integrāciju, lai iespējotu multivides meklēšanu.", + "signInRequired": "Lai meklētu multivides pieprasījumu integrācijas, piesakieties.", "scoped": "Šim logrīkam nav pieejamas multivides pieprasījumu integrācijas." } } @@ -5883,7 +7812,6 @@ "help": "Izmantot ārēju meklētājprogrammu", "group": { "searchEngine": { - "title": "Meklētājprogrammas", "tipDdgBangs": "Padoms: Šeit varat izmantot arī jebkurus DuckDuckGo bangs, piem., !something", "bang": { "searchWithQuery": "Meklēt \"{query}\" ar {label}", @@ -5934,20 +7862,6 @@ "group": { "mode": { "title": "Režīmi" - }, - "help": { - "title": "Palīdzība", - "option": { - "documentation": { - "label": "Dokumentācija" - }, - "submitIssue": { - "label": "Iesniegt problēmu" - }, - "discord": { - "label": "Kopienas Discord" - } - } } } }, @@ -5959,9 +7873,10 @@ "other": { "label": "Meklēt ar citu meklētājprogrammu" }, - "no-default": { - "label": "Nav noklusējuma meklētājprogrammas", - "description": "Iestatiet noklusējuma meklētājprogrammu preferencēs" + "no-engines": { + "label": "Nav konfigurēta neviena meklētājprogramma", + "descriptionCreate": "Pievienojiet meklētājprogrammu, lai meklētu komandu izvēlnē", + "descriptionUnavailable": "Lūdziet administratoram konfigurēt meklētājprogrammu" }, "search": { "label": "Meklēt “{query}” ar {name}" @@ -6041,7 +7956,6 @@ "help": "Meklēt lietotājus vai grupas", "group": { "user": { - "title": "Lietotāji", "children": { "action": { "detail": { @@ -6054,7 +7968,6 @@ } }, "group": { - "title": "Grupas", "children": { "action": { "detail": { @@ -6078,9 +7991,6 @@ "engine": { "search": "Atrast meklētājprogrammu", "field": { - "name": { - "label": "Nosaukums" - }, "short": { "label": "Īss" }, @@ -6093,12 +8003,19 @@ }, "page": { "list": { - "title": "Meklētājprogrammas", + "ariaLabel": "Konfigurētās meklētājprogrammas", "noResults": { "title": "Meklētājprogrammu vēl nav", - "action": "Izveidot savu pirmo meklētājprogrammu" + "description": "Meklētājprogrammas ļauj Spotlight nosūtīt vaicājumu vietnei vai savienotam pakalpojumam.", + "action": "Izveidot savu pirmo meklētājprogrammu", + "filteredTitle": "Neviena meklētājprogramma neatbilst meklēšanai", + "filteredDescription": "Neviena meklētājprogramma neatbilst “{search}”. Izmēģiniet citu nosaukumu vai URL." }, - "interactive": "Interaktīva, izmanto integrāciju" + "interactive": "Interaktīva, izmanto integrāciju", + "type": { + "generic": "URL veidne", + "fromIntegration": "Integrācija" + } }, "create": { "title": "Jauna meklētājprogramma", @@ -6117,11 +8034,9 @@ "title": "Rediģēt meklētājprogrammu", "notification": { "success": { - "title": "Izmaiņas veiksmīgi lietotas", "message": "Meklētājprogramma veiksmīgi saglabāta" }, "error": { - "title": "Nevar lietot izmaiņas", "message": "Meklētājprogrammu neizdevās saglabāt" } }, @@ -6260,6 +8175,10 @@ } }, "log": { + "context": { + "widgetError": "Logrīks ziņoja par kļūdu aptuveni šajā laikā", + "expiredWidgetError": "Žurnāli par šo logrīka kļūdu vairs netiek saglabāti" + }, "level": { "option": { "debug": "Atkļ.", @@ -6271,7 +8190,6 @@ }, "onboardingTour": { "learnMore": "Lasīt dokumentāciju", - "next": "Nākamais", "prev": "Atpakaļ", "done": "Gatavs", "skip": "Izlaist ekskursiju", @@ -6335,5 +8253,359 @@ "description": "Mainiet savu krāsu shēmu, valodu, sākuma dēli un preferences. No šejienes varat arī pāriet uz pārvaldības apgabalu." } } + }, + "metadata": { + "description": "Paša mitināta informācijas panelis *arr stekam un visai jūsu mājas laboratorijai. Integrējas ar vairāk nekā 50 pakalpojumiem, logrīki reāllaikā, bez konfigurācijas failiem.", + "dashboardTitle": "{appName} informācijas panelis" + }, + "assistant": { + "title": "Asistents", + "open": "Atvērt Asistentu", + "close": "Aizvērt Asistentu", + "minimize": "Minimizēt Asistentu", + "spotlight": "Jautāt Asistentam", + "spotlightDescription": "Ierakstiet un nosūtiet uzvedni, neizejot no komandu izvēlnes.", + "spotlightPrompt": { + "title": "Jautāt Asistentam", + "description": "Ierakstiet uzvedni iepriekš. Nospiežot Enter, tā tiks nosūtīta fonā.", + "send": "Nosūtīt uzvedni", + "empty": "Ierakstiet uzvedni iepriekš" + }, + "unavailable": { + "checking": "Notiek pārbaude, vai asistents ir pieejams…", + "error": "Asistenta pieejamību neizdevās pārbaudīt. Mēģiniet vēlreiz.", + "notConfigured": "Administratoram vispirms jākonfigurē un jāiespējo asistents.", + "signIn": "Piesakieties, lai izmantotu Asistentu." + }, + "newConversation": "Jauna saruna", + "conversations": "Sarunas", + "conversationActions": "Sarunas darbības", + "searchConversations": "Meklēt sarunas", + "noMatchingConversations": "Nav atbilstošu sarunu", + "moreActions": "Citas atbildes darbības", + "renameConversation": { + "action": "Pārdēvēt", + "label": "Sarunas nosaukums", + "save": "Saglabāt nosaukumu", + "failedTitle": "Sarunu neizdevās pārdēvēt", + "failedDescription": "Homarr neizdevās pārdēvēt šo sarunu. Mēģiniet vēlreiz." + }, + "deleteConversation": { + "title": "Dzēst sarunu?", + "description": "“{title}” un tās ziņojumi tiks neatgriezeniski dzēsti.", + "failedTitle": "Sarunu neizdevās dzēst", + "failedDescription": "Homarr neizdevās dzēst šo sarunu. Mēģiniet vēlreiz." + }, + "closeHistory": "Aizvērt sarunu vēsturi", + "openHistory": "Atvērt sarunu vēsturi", + "emptyTitle": "Ar ko varu palīdzēt?", + "emptyDescription": "Uzdodiet jautājumus par Homarr iestatīšanu, pārbaudiet reāllaika instances datus vai apstipriniet darbības, kad vēlaties, lai veicu izmaiņas.", + "suggestions": { + "health": { + "label": "Pārbaudīt pakalpojuma darbspēju", + "prompt": "Pārbaudiet manas integrācijas un apkopojiet visu, kam jāpievērš uzmanība." + }, + "explore": { + "label": "Izpētīt manu Homarr", + "prompt": "Parādiet, ko šajā Homarr instancē varu skatīt un pārvaldīt." + }, + "media": { + "label": "Atrast pieprasāmu multividi", + "prompt": "Palīdziet man atrast filmu vai seriālu, ko pieprasīt." + }, + "style": { + "label": "Uzlabot informācijas paneli", + "prompt": "Palīdziet man uzlabot paneļa izskatu vai pielāgoto CSS. Vispirms parādiet manus paneļus, pēc tam saglabājiet pašreizējos iestatījumus, kamēr veicam izmaiņas." + }, + "designWidget": { + "label": "Noformēt logrīku", + "prompt": "Izveidot un instalēt pielāgotu logrīku vietnei " + } + }, + "composerPlaceholder": "Jautāt asistentam…", + "runtime": { + "model": "Modelis", + "searchModels": "Meklēt modeļus", + "noModels": "Modeļi nav pieejami", + "otherModels": "Citi modeļi", + "imageInput": "Atbalsta attēlu ievadi", + "thinking": "Domāšanas režīms", + "reasoning": { + "auto": "Automātiski", + "none": "Izslēgts", + "minimal": "Minimāls", + "low": "Zems", + "medium": "Vidējs", + "high": "Augsts" + } + }, + "providerQuota": { + "title": "Homarr nodrošinātājs", + "communityWorkshop": "Kopienas darbnīca", + "dailyAllowance": "Dienas pieprasījumu limits", + "remainingLabel": "Atlikuši {remaining} no {limit} Homarr nodrošinātāja pieprasījumiem", + "loading": "Notiek Homarr nodrošinātāja limita ielāde", + "signInRequired": "Lai izmantotu Homarr nodrošinātāju, nepieciešams pierakstīties darbnīcā", + "signInDescription": "Pierakstieties ar GitHub, izmantojot kopienas darbnīcu, lai saņemtu atsevišķu dienas limitu.", + "exhaustedDescription": "Jūsu Homarr nodrošinātāja limits šodienai ir izlietots. Tas tiks atiestatīts pusnaktī pēc UTC.", + "unavailableDescription": "Pierakstieties darbnīcā vai gaidiet, līdz Homarr nodrošinātāja limits tiks atiestatīts.", + "signIn": "Pierakstīties ar GitHub", + "signInError": "Neizdevās pierakstīties GitHub. Pēc brīža mēģiniet vēlreiz.", + "loadError": "Neizdevās ielādēt Homarr nodrošinātāja limitu.", + "reset": "Tiek atiestatīts {relative} plkst. ", + "toolCalls": "Katrs modeļa pieprasījums un pabeigts rīka izsaukums izmanto vienu pieprasījumu.", + "retry": "Atkārtoti ielādēt limitu", + "level": { + "ok": "Labi", + "warning": "Brīdinājums", + "bad": "Zems", + "dead": "Izmantots" + } + }, + "stop": "Apturēt atbildi", + "send": "Nosūtīt ziņojumu", + "copy": "Kopēt atbildi", + "copyMessage": "Kopēt ziņojumu", + "editMessage": "Rediģēt ziņojumu", + "updateMessage": "Atjaunināt ziņojumu", + "regenerate": "Ģenerēt atbildi vēlreiz", + "helpful": "Noderīgi", + "notHelpful": "Nav noderīgi", + "readAloud": "Lasīt atbildi skaļi", + "stopReading": "Apturēt atbildes lasīšanu", + "feedbackError": "Jūsu atsauksmi neizdevās saglabāt. Mēģiniet vēlreiz.", + "exportMarkdown": "Eksportēt kā Markdown", + "exportConversation": { + "action": "Eksportēt sarunu kā Markdown", + "failedTitle": "Sarunu neizdevās eksportēt", + "failedDescription": "Homarr neizdevās ielādēt šo sarunu. Mēģiniet vēlreiz." + }, + "reasoning": "Domāšana", + "previousResponse": "Iepriekšējā atbilde", + "nextResponse": "Nākamā atbilde", + "removeAttachment": "Noņemt pielikumu", + "downloadFile": "Lejupielādēt {name}", + "attachedImage": "Pievienotais attēls", + "externalImageBlocked": "Ārējais attēls ir bloķēts konfidencialitātes dēļ", + "image": { + "loading": "Notiek attēla ielāde", + "failed": "Šo attēlu neizdevās ielādēt.", + "retry": "Mēģināt ielādēt attēlu vēlreiz" + }, + "quoteSelection": "Citāts", + "dismissQuote": "Noņemt citātu", + "attachments": { + "add": "Pievienot attēlu vai dokumentu", + "errorTitle": "Pielikumu neizdevās pievienot", + "imageUnsupported": "Atlasītais modelis neatbalsta attēlu ievadi." + }, + "mentions": { + "menu": "Pievienot Homarr kontekstu", + "context": "Konteksts", + "app": "Lietotnes", + "integration": "Integrācijas", + "board": "Dēļi", + "widget": "Logrīki", + "tools": "Pieejamie rīki" + }, + "markdown": { + "diagram": "Diagramma", + "renderingDiagram": "Notiek diagrammas renderēšana…", + "diagramUnavailable": "Šo diagrammu neizdevās renderēt." + }, + "commands": { + "menu": "Asistenta komandas", + "health": "Sagatavot pakalpojuma darbspējas pārbaudi", + "explore": "Sagatavot šīs Homarr instances pārskatu", + "media": "Sagatavot multivides meklēšanu", + "style": "Sagatavot paneļa izskata vai pielāgotā CSS izmaiņas", + "designWidget": "Sagatavot pielāgota logrīka izveidi ar vienu uzvedni" + }, + "usage": { + "tokens": "marķieri", + "contextWindow": "Konteksta logs", + "requestDetails": "Pieprasījuma informācija", + "used": "Pēdējais solis", + "remaining": "Atlikušie", + "capacity": "Ietilpība", + "input": "Ievade", + "output": "Izvade", + "cached": "Kešotā ievade", + "cacheWrite": "Kešatmiņas ierakstīšana", + "reasoning": "Spriešana", + "inputShort": "ieeja", + "outputShort": "izeja", + "cachedShort": "kešots", + "reasoningShort": "spriešana", + "firstOutput": "Pirmā izvade", + "homarrTiming": "Homarr novērotais", + "endToEnd": "No sākuma līdz beigām", + "observedThroughput": "Novērotā caurlaidspēja", + "providerTiming": "Nodrošinātāja ziņotais", + "loadingProviderDetails": "Notiek ģenerēšanas informācijas ielāde…", + "providerDetailsPending": "OpenRouter joprojām apstrādā daļu ģenerēšanas informācijas. Atveriet vēlreiz, lai mēģinātu atkārtoti.", + "providerLatency": "Nodrošinātāja aizkave", + "generationTime": "Ģenerēšanas laiks", + "moderationLatency": "Moderācija", + "providerThroughput": "Nodrošinātāja caurlaidspēja", + "fallbacks": "Atkāpšanās mehānismi", + "fallbackLatency": "Atkāpšanās aizkave", + "cacheDiscount": "Kešatmiņas atlaide", + "normalizedTokens": "OpenRouter normalizētā ievade / izvade", + "byok": "Izmanto savu atslēgu", + "cost": "Izmaksas", + "reported": "Ziņojis nodrošinātājs", + "estimated": "Aprēķināts pēc modeļa cenu nosacījumiem", + "upstreamCost": "Augšējā līmeņa secināšana", + "webSearches": "Meklēšana tīmeklī", + "finishReason": "Pabeigšanas iemesls", + "notReported": "Nav ziņots", + "agentSteps": "Aģenta soļi", + "step": "{number}. solis", + "generation": "Ģenerēšana" + }, + "toolInput": "Ievade", + "toolOutput": "Izvade", + "toolActivity": { + "iconSearch": "Tiek meklētas “{query}” ikonas", + "iconBrowse": "Pieejamo ikonu pārlūkošana" + }, + "toolNavigation": { + "openPreview": "Atvērt priekšskatījumu", + "openWidget": "Atvērt logrīku" + }, + "webSearch": { + "title": "Meklēšana tīmeklī", + "completed": "OpenRouter šai atbildei meklēja aktuālo informāciju tīmeklī.", + "searches": "{count, plural, one {# meklēšana} other {# meklēšanas}}", + "sources": "{count, plural, one {# avots} other {# avoti}}" + }, + "responseError": { + "title": "Asistents nevarēja pabeigt darbību", + "description": "Mēģiniet vēlreiz. Ja problēma turpinās, lūdziet administratoram pārbaudīt konfigurēto modeļa galapunktu." + }, + "toolPreparationError": { + "title": "Šo pieprasījumu neizdevās sagatavot", + "description": "Modelis apstājās, pirms sniedza pilnīgu informāciju. Atkārtojiet atbildi vai vēlreiz aprakstiet pieprasījumu. Izmaiņas netika veiktas." + }, + "busy": { + "title": "Asistents jau strādā", + "description": "Gaidiet pašreizējo atbildi vai atveriet to, lai apturētu izpildi." + }, + "pendingAction": { + "answerTitle": "Nepieciešama atbilde", + "answerFallback": "Lai turpinātu, izvēlieties atbildi", + "formTitle": "Pārskatīt lietotnes informāciju", + "boardFormTitle": "Pārskatīt paneļa izmaiņas", + "review": "Pārskatīt", + "sendBlocked": "Pirms nosūtīšanas atrisiniet neapstiprināto pieprasījumu" + }, + "activity": { + "thinking": "Asistents domā", + "working": "Notiek jūsu uzvednes apstrāde", + "ready": "Atbilde ir gatava", + "completed": "Atvērt atbildi", + "approval": "Nepieciešams apstiprinājums", + "failed": "Asistentam nepieciešama uzmanība", + "expand": "Atvērt asistenta atbildi", + "dismiss": "Paslēpt asistenta aktivitāti" + }, + "scrollToLatest": "Ritināt līdz jaunākajam", + "refresh": { + "action": "Atsvaidzināt pašreizējo skatu", + "working": "Notiek pašreizējā skata atsvaidzināšana", + "completeTitle": "Skats ir atsvaidzināts", + "completeDescription": "Redzamie Homarr dati ir atkārtoti ielādēti.", + "failedTitle": "Skatu neizdevās atsvaidzināt", + "failedDescription": "Izmaiņas, iespējams, joprojām tiek saglabātas. Vēlreiz izmēģiniet atsvaidzināšanu." + }, + "askUser": { + "preparing": "Notiek jautājuma sagatavošana", + "answered": "Jūsu atbilde", + "other": "Cits", + "otherLabel": "Jūsu atbilde", + "otherPlaceholder": "Ierakstiet citu atbildi…", + "submit": "Nosūtīt atbildi", + "cancelOther": "Atcelt citu atbildi", + "optionKind": { + "affirmative": "Apstipriniet", + "negative": "Noraidīt", + "alternative": "Opcija", + "custom": "Pielāgots" + } + }, + "configureApp": { + "title": "Pārskatīt lietotnes informāciju", + "description": "Izvēlieties lokālu ikonu un pirms asistents pieprasa izveides apstiprinājumu, pielāgojiet pārējos iestatījumus.", + "preparing": "Notiek lietotnes informācijas sagatavošana", + "continue": "Izmantot šo informāciju", + "ready": "Lietotnes informācija ir gatava", + "automaticContinue": "Šī lietotnes informācija tiek izmantota automātiski" + }, + "configureBoardSettings": { + "title": "Pārskatīt paneļa izmaiņas", + "loading": "Notiek pašreizējo paneļa iestatījumu ielāde", + "loadErrorTitle": "Paneļa iestatījumus neizdevās ielādēt", + "loadErrorDescription": "Panelis, iespējams, vairs nepastāv, vai arī jums nav atļaujas to modificēt.", + "proposedCount": "Asistents piedāvāja {count} laukus", + "changeCount": "Gatavas {count} izmaiņas", + "ready": "Paneļa izmaiņas ir gatavas", + "cancelled": "Pašreizējie paneļa iestatījumi saglabāti", + "noChanges": "Iestatījumi netiks mainīti", + "keepCurrent": "Saglabāt pašreizējos iestatījumus", + "continue": "Turpināt līdz apstiprināšanai", + "automaticContinue": "Piedāvātās paneļa izmaiņas tiek pieņemtas automātiski", + "resetAll": "Atiestatīt visas izmaiņas", + "tabs": { + "css": "Pielāgots CSS", + "appearance": "Izskats", + "background": "Fons", + "general": "Vispārīgi" + }, + "cssDescription": "Rediģējiet visu stilu lapu. Esošie noteikumi tiek saglabāti, ja vien tie šeit netiek noņemti.", + "cssCharacters": "{count} no 16384 rakstzīmēm", + "copyCss": "Kopēt CSS", + "copied": "Nokopēts", + "restoreCss": "Atjaunot pašreizējo CSS", + "remoteCssTitle": "Šis CSS ielādē attālu resursu", + "remoteCssDescription": "Importētās stilu lapas un attālie URL, ielādējot paneli, sazinās ar citu serveri. Pirms turpināšanas tos pārskatiet." + }, + "configureWidget": { + "title": "Pārskatīt logrīku", + "preparing": "Notiek logrīka iestatījumu sagatavošana", + "review": "Pārskatīt logrīku un integrācijas", + "ready": "Logrīka konfigurācija ir gatava", + "cancelled": "Logrīks netika pievienots", + "automaticContinue": "Piedāvātā logrīka konfigurācija tiek pieņemta automātiski", + "definitionLoadErrorTitle": "Logrīka iestatījumus neizdevās ielādēt", + "definitionLoadErrorDescription": "Homarr neizdevās ielādēt šī logrīka iestatījumus. Mēģiniet vēlreiz.", + "loadErrorTitle": "Integrācijas neizdevās ielādēt", + "loadErrorDescription": "Homarr neizdevās ielādēt šim logrīkam pieejamās integrācijas.", + "noIntegrationTitle": "Nepieciešama saderīga integrācija", + "noIntegrationDescription": "Pirms logrīka pievienošanas informācijas panelim konfigurējiet integrāciju, ko šis logrīks atbalsta.", + "connectIntegration": "Savienot pakalpojumu", + "manageIntegrations": "Pārvaldīt integrācijas", + "skip": "Nepievienot", + "errorTitle": "Logrīka iestatījumus neizdevās sagatavot", + "errorDescription": "Modelis nesniedza pilnīgu logrīka konfigurāciju. Logrīks netika pievienots." + }, + "approvalRequired": "Nepieciešams apstiprinājums", + "complete": "Pabeigts", + "denied": "Noraidīts", + "failed": "Neizdevās", + "working": "Notiek", + "approvalDescription": "Pirms izpildes pārskatiet šīs izmaiņas.", + "approveAndRun": "Apstiprināt un izpildīt", + "deny": "Noraidīt", + "autoApproval": { + "label": "Automātiskie apstiprinājumi", + "composerLabel": "Apstiprināt manā vietā", + "title": "Automātiskie apstiprinājumi", + "description": "Automātiski sagatavot veidlapas un apstiprināt aizsargātas izmaiņas šai sarunai. Jautājumi joprojām gaidīs jūsu atbildi, un jūsu Homarr atļaujas joprojām būs spēkā. Šī funkcija tiek izslēgta, pārslēdzoties uz citu sarunu.", + "enable": "Iespējot šai sarunai", + "disable": "Izslēgt automātiskos apstiprinājumus", + "enabled": "Automātiskie apstiprinājumi ir ieslēgti", + "approving": "Notiek automātiska apstiprināšana" + } } } diff --git a/packages/translation/src/lang/nl.json b/packages/translation/src/lang/nl.json index 763765af7..9ae99c302 100644 --- a/packages/translation/src/lang/nl.json +++ b/packages/translation/src/lang/nl.json @@ -1,156 +1,246 @@ { "init": { - "step": { - "start": { - "title": "Welkom bij Homarr", - "subtitle": "Laten we beginnen met het opzetten van je Homarr instantie.", - "description": "Selecteer om te beginnen hoe je je Homarr instantie wilt instellen.", - "action": { - "scratch": "Vanaf nul beginnen", - "importOldmarr": "Importeren uit Homarr vóór 1.0", - "restoreSqlite": "Herstellen vanuit SQLite-back-up", - "restoreSqliteDescription": "Upload een volledige SQLite-databaseback-up van een vorige Homarr-instantie. Dit zal alle borden, gebruikers, apps, integraties en instellingen herstellen.", - "backToOptions": "← Terug naar installatie-opties" + "studio": { + "navigationLabel": "Secties onboarding", + "back": "Achterzijde", + "buildBoard": "Bouw mijn bord", + "common": { + "unknownError": "Er is iets fout gegaan. Uw keuzes zijn hier nog; probeer het opnieuw." + }, + "claim": { + "checking": "Onboarding sessie… beveiligen", + "checkingTitle": "Beveiligde installatie voorbereiden", + "lockedTitle": "Setup is geopend in een andere browser", + "lockedDescription": "Ga daar verder of wacht tot de veilige eerste-run sessie verlopen voordat je het opnieuw probeert.", + "signInTitle": "Beheerder aanmelden vereist", + "signInDescription": "Een beheerder bestaat al. Log in om setup te hervatten zonder inloggegevens of servicetoegang te onthullen.", + "signIn": "Aanmelden en hervatten", + "errorTitle": "Setup kon niet worden beveiligd", + "errorDescription": "Herlaad de pagina om de veilige eerste sessie opnieuw te proberen." + }, + "navigation": { + "essentials": "Essentials", + "discover": "Ontdek", + "connect": "Verbinden", + "board": "Bord", + "extend": "Uitbreiden", + "review": "Beoordelen" + }, + "welcome": { + "title": "Welkom thuis.", + "description": "Welkom bij Homarr v{version}. We leiden u door de essentiële zaken en helpen u uw eerste bord te bouwen.", + "start": "Aan de slag", + "restore": "Back-up terugzetten", + "restoreTitle": "Back-up terugzetten", + "restoreDescription": "Een volledige SQLite back-up herstelt borden, personen, apps, integraties en instellingen. Homarr valideert het voordat u iets vervangt.", + "errorTitle": "Setup kon niet worden gestart", + "errorDescription": "Je setup-keuzes zijn nog steeds hier. Probeer het opnieuw, of vernieuw de pagina als dit doorgaat." + }, + "account": { + "title": "Maak uw beheerder aan", + "description": "Geef de inloggegevens op voor de administrator gebruiker.", + "username": "Beheerder gebruikersnaam", + "passwordHint": "Alleen het minimum van 8 tekens is vereist. De andere controles met de sterkte van het wachtwoord zijn suggesties.", + "create": "Beheerder aanmaken", + "errorTitle": "Beheerder kon niet aangemaakt worden", + "recoveryTitle": "Beheerdersaccount aangemaakt", + "recoveryDescription": "Automatische aanmelding is niet voltooid. Aanmelden met de administrator inloggegevens die u zojuist hebt aangemaakt om door te gaan met de installatie.", + "recoveryAction": "Aanmelden en doorgaan", + "unknownError": "De beheerder kon niet worden aangemaakt." + }, + "externalGroup": { + "title": "Sluit uw beheerdersgroep aan", + "description": "Gebruik de exacte naam van de groep verzonden door LDAP of OIDC. Leden van deze groep krijgen administrator toegang.", + "name": "Externe beheerdersgroep", + "nameDescription": "Dit is hoofdlettergevoelig en moet overeenkomen met uw identiteitsprovider.", + "continue": "Groep opslaan en doorgaan", + "errorTitle": "Groep kon niet worden opgeslagen", + "unknownError": "De beheerdersgroep kon niet worden opgeslagen." + }, + "essentials": { + "title": "Begin met bekende standaardwaarden", + "description": "Stel de taal en uiterlijk in die iedereen eerst ziet, geef Homarr dan het adrespatroon dat door uw diensten wordt gebruikt.", + "language": "Standaard taal", + "theme": "Standaard thema", + "themeAuto": "Systeem", + "themeLight": "Licht", + "themeDark": "Donker", + "serverOriginHelp": "Homarr gebruikt dit adres voor het voorvullen van gedetecteerde service-URLs. U kunt nog steeds elke dienst afzonderlijk bewerken.", + "serverDescription": "Dit is een snelkoppeling, geen beperking. Elke gedetecteerde dienst blijft bewerkbaar.", + "serverOrigin": "Domain, IP, of reverse-proxy pad", + "serverOriginDescription": "Voorbeelden: home.lan, 192.168.1.10 of https://home.example.com/services. Kies hoe elke dienst hieronder wordt toegevoegd.", + "analytics": "Anonieme productanalyses delen", + "analyticsDescription": "Helpen Homarr verbeteren functie betrouwbaarheid. Geen service-referenties of dashboard inhoud worden verzonden." + }, + "discover": { + "title": "Kijk wat deze installatie daadwerkelijk kan bereiken", + "description": "Homarr controleert mogelijkheden ter plekke. Een ontbrekende Docker socket of Kubernetes context blokkeert nooit een handmatige installatie.", + "database": "Database", + "docker": "Docker en compatibele sockets", + "kubernetes": "Kubernetes", + "assistantWorkshop": "Assistent en Workshop", + "found": "Gevonden {integrations} integraties en {apps} extra apps", + "retryKubernetes": "Controleer Kubernetes opnieuw", + "retryWorkshop": "Controleer de werkplaats opnieuw", + "unknownVersion": "onbekende versie", + "kubernetesAvailable": "Verbonden met Kubernetes {version}", + "kubernetesDisabled": "Niet ingeschakeld; doorgaan met Docker of handmatige diensten", + "kubernetesUnavailable": "Kubernetes is ingeschakeld maar kunnen niet worden bereikt vanuit dit Homarrproces", + "workshopAvailable": "Community Workshop en gehoste assistent-diensten zijn bereikbaar", + "workshopUnavailable": "Lokale en aangepaste assistent-providers blijven beschikbaar", + "partialTitle": "Sommige bronnen konden niet worden gescand", + "partialDescription": "Resultaten van bereikbare hosts worden bewaard. Controleer de machtigingen van socket of voeg diensten handmatig toe in de volgende sectie.", + "status": { + "checking": "Beschikbaarheid controleren…", + "available": "Beschikbaar", + "partial": "Gedeeltelijk beschikbaar", + "empty": "Bereikbaar, geen overeenkomende actieve services", + "disabled": "Uitgeschakeld door serverconfiguratie", + "unavailable": "Niet beschikbaar vanuit dit Homarr proces" } }, - "import": { - "title": "Gegevens importeren", - "subtitle": "Je kunt gegevens importeren uit een bestaande Homarr instantie.", - "dropzone": { - "title": "Sleep het ZIP-bestand hierheen of klik om te bladeren", - "description": "De geüploade ZIP wordt verwerkt en je kunt selecteren wat je wilt importeren" + "connect": { + "title": "Verbind wat het bord nuttig maakt", + "description": "Selecteer verschillende diensten in één keer. Docker labels hebben voorrang, afbeelding die overeenkomen met vul hiaten en elke URL en inloggegevens worden gerapporteerd.", + "discoveredIntegrations": "Gedetecteerde integratiefases ({count})", + "detectedIntegrationLabel": "Import {name}, gedetecteerd als {kind}", + "detectedAppLabel": "Importeer gedetecteerde app {name}", + "otherIntegrations": "Nog een integratie toevoegen", + "configureIntegrations": "Integraties configureren", + "discoveredApps": "Gedetecteerde apps ({count})", + "appAddressRequired": "Voeg een adres voor {name}toe of verwijder het uit de selectie.", + "empty": "Er zijn geen integraties geselecteerd. Homarr maakt nog steeds een nuttig starterbord met algemene widgets aan.", + "dockerSource": "Docker", + "manualSource": "Handleiding", + "url": "Service URL", + "noCredentials": "Geen inloggegevens", + "noCredentialsDescription": "Deze integratie heeft geen referenties nodig.", + "credentialMethod": "Toegangsmethode voor certificaten", + "getApiKey": "Open de API-sleutelinstellingen voor deze service", + "openGuide": "Open Homarr installatiehandleiding voor deze service", + "testConnection": "Verbindingstest testen", + "testSuccess": "Verbinding werkt", + "testSuccessDescription": "Homarr verbonden met de huidige adres en referenties.", + "testError": "Verbinding mislukt", + "testErrorDescription": "Controleer het service adres en referenties en probeer het opnieuw.", + "needsConfiguration": "Configuratie nodig", + "tested": "Verbinding getest", + "testFailed": "Verbindingstest mislukt", + "incompleteConfirmation": "Onvoltooide integraties worden overgeslagen. Doorgaan zonder deze integraties?" + }, + "board": { + "title": "Vorm het bord voordat het wordt gebouwd", + "description": "Homarr creëert beschermde Mobiele en Basis lay-outs, plaatst vervolgens apps en compatibele widgets van de door u geselecteerde diensten.", + "target": "Te configureren bord", + "targetDescription": "Kies het exacte bestaande bord dat deze instelling moet bijwerken.", + "targetPlaceholder": "Selecteer een bord", + "targetRequired": "Selecteer het bord om in te stellen voordat u verder gaat.", + "name": "Bord naam", + "nameDescription": "Gebruikt in de board URL; alleen letters, cijfers, streepjes en onderstrepingstekens.", + "nameRequired": "Voer een naam voor het bord in voordat u doorgaat.", + "primaryColor": "Primaire kleur", + "secondaryColor": "Secundaire kleur", + "resetColors": "Kleuren opnieuw instellen", + "radius": "Widget hoek radius", + "radiusOptions": { + "xs": "Strak", + "sm": "Subtiel", + "md": "Evenwichtig", + "lg": "Afgerond", + "xl": "Zacht" }, - "fileInfo": { - "action": { - "change": "Bestand veranderen" - } + "columns": "Bord kolommen", + "columnsDescription": "Kolommen definiëren het horizontale raster dat wordt gebruikt voor grootte en positie items. 12 is veel voor de meeste mensen.", + "columnCount": "{count, plural, one {# kolom} other {# kolommen}}", + "leftSidebar": "Left sidebar", + "rightSidebar": "Sidebar rechts", + "previewLabel": "Live preview van de lay-out van het eerste bord" + }, + "extend": { + "title": "Geavanceerde functies", + "tabsLabel": "Assistent, Workshop en MCP setup", + "assistant": "Assistent", + "workshop": "Werkplaats", + "assistantSetup": { + "loginTitle": "Beheerder aanmelden vereist", + "loginDescription": "Providersleutels en modeltoegang zijn geprivilegieerd. Stel de setup, log in en Homarr zal de assistent configuratie direct openen.", + "loginAction": "Log in om assistent te configureren" }, - "importSettings": { - "title": "Instellingen importeren", - "description": "Het importgedrag configureren" + "workshopSetup": { + "title": "Homarr Werkplaats", + "description": "Blader door de community Custom Widgets, bekijk hun gevraagde capaciteiten, installeer ze en publiceer uw eigen werk zonder de code tussen servers te kopiëren.", + "available": "Beschikbaar", + "checking": "Controleren…", + "unavailable": "Unavailable", + "discoverTitle": "Ontdek", + "discoverDescription": "Zoek widgets gebouwd voor echte zelf gehoste workflows.", + "installTitle": "Review en installeer", + "installDescription": "Bekijk metadata en configuratie voordat u iets toevoegt.", + "publishTitle": "Delen", + "publishDescription": "Publiceer herbruikbare widgets terug naar de community.", + "browse": "Blader door de Workshop" }, - "boardSelection": { - "title": "{count} borden gevonden", - "description": "Kies alle borden met hun grootte die je wilt importeren", - "action": { - "selectAll": "Alles selecteren", - "unselectAll": "Alles deselecteren" - } - }, - "summary": { - "title": "Overzicht importeren", - "description": "In het onderstaande overzicht kun je zien wat er wordt geïmporteerd", - "action": { - "import": "Import bevestigen en doorgaan" - }, - "entities": { - "apps": "Apps", - "boards": "Borden", - "integrations": "Integraties", - "credentialUsers": "Inloggegevens gebruikers" - } - }, - "tokenModal": { - "title": "Importeertoken invoeren", - "field": { - "token": { - "label": "Penning", - "description": "Voer het getoonde importeertoken van je vorige Homarr instantie in" - } - }, - "notification": { - "error": { - "title": "Ongeldig token", - "message": "Het ingevoerde token is ongeldig" - } - } + "mcpSetup": { + "title": "Homarr MCP", + "description": "Connect Claude, Codex of een andere MCP-client voor Homarr getypte tools. API-sleutels behouden de toegang expliciet en herroepbaar.", + "endpoint": "Streamable HTTP eindpunt", + "keyTitle": "Kopieer deze sleutel nu", + "keyDescription": "Voor veiligheid kan Homarr deze API-sleutel niet opnieuw weergeven.", + "copyKey": "API-sleutel kopiëren", + "createKey": "Maak een MCP API-sleutel", + "errorTitle": "MCP API-sleutel kon niet worden gemaakt", + "loginRequired": "Meld u aan als beheerder na het instellen van een API-sleutel.", + "configuration": "Client configuratie", + "copy": "Kopieer configuratie", + "copied": "Gekoppeld", + "advanced": "Open MCP tools, machtigingen en setup details" } }, - "user": { - "title": "Beheerder gebruiker", - "subtitle": "Geef de inloggegevens op voor de administrator gebruiker.", - "notification": { - "success": { - "title": "Gebruiker aangemaakt", - "message": "De gebruiker is succesvol aangemaakt" - }, - "error": { - "title": "Gebruiker aanmaken mislukt" - } - } - }, - "group": { - "title": "Externe groep", - "subtitle": "Geef de groep op die moet worden gebruikt voor externe gebruikers.", - "form": { - "name": { - "label": "Groepsnaam", - "description": "De naam moet overeenkomen met de beheerdersgroep van de externe provider" - } - } - }, - "settings": { - "title": "Instellingen", - "subtitle": "Serverinstellingen configureren." - }, - "integrations": { - "title": "Integraties", - "subtitle": "Selecteer de services die je gebruikt.", - "description": "Kies de integraties die je wilt verbinden. We stellen je dashboard in met bijbehorende widgets.", - "action": { - "continue": "Doorgaan", - "skip": "Overslaan voor nu" - }, - "configure": { - "progress": "{current} van {total}", - "skip": "Deze integratie overslaan", - "finishing": "Je dashboard instellen...", - "error": { - "title": "Instellen mislukt", - "message": "Er is iets misgegaan bij het instellen van je dashboard. Probeer het opnieuw." - }, - "helpers": { - "tooltip": "URL-helpers", - "description": "Deze helpers proberen de URL voor je services te raden. Als het niet werkt, typ dan handmatig het adres." - } - }, - "urlTemplate": { - "label": "Basis-URL", - "placeholder": "homelab.local of 192.168.1.1", - "hint": "Voer je basisdomein of IP in om integratie-URL's automatisch in te vullen", - "warning": "Door nu je basis-URL in te stellen worden alle integratie-URL's automatisch ingevuld, wat je tijd bespaart tijdens de installatie", - "preview": "bijv. {example}", - "mode": { - "subdomain": "Subdomein", - "hostPort": "Host:Poort" - } - }, - "docker": { - "detected": "Docker heeft {count} services gedetecteerd", - "detectedBreakdown": "{integrations} integraties · {apps} apps", - "summary": "Homarr heeft {apps} apps gedetecteerd, waarvan {integrations} ingebouwde integraties hebben", - "appBadge": "App", - "appSectionLabel": "Apps om aan dashboard toe te voegen ({count} geselecteerd)", - "scanning": "Docker scannen...", - "scanningDescription": "Zoeken naar actieve containers op je systeem" + "review": { + "title": "Één bord gebouwd rond uw diensten", + "description": "Homarr testen niet-opgeslagen verbindingen, importeren van de geselecteerde apps, uiterlijk en lay-outs, opent vervolgens het exacte bord dat het heeft geconfigureerd.", + "board": "Eerste bord", + "columns": "Bord kolommen", + "columnsValue": "{count, plural, one {# kolom} other {# kolommen}}", + "sidebars": "Zijbalken", + "sidebarsValue": "{count, plural, =0 {None} one {# sidebar} other {# sidebars}}", + "layouts": "Responsive lay-outs", + "layoutsValue": "Mobiel + Basis", + "integrations": "Integraties", + "integrationsValue": "{count, plural, =0 {Niets geselecteerd} one {# integratie} other {# integraties}}", + "apps": "App tegels", + "appsValue": "{count, plural, =0 {Alleen starter-apps} one {# app tegel} other {# app tegels}}", + "language": "Taal", + "theme": "Thema", + "themeAuto": "Voorkeur systeem", + "themeLight": "Licht", + "themeDark": "Donker", + "colors": "Bord kleuren", + "radius": "Widget straal", + "automaticTitle": "Wat Homarr maakt", + "automaticDescription": "Compatibele widgets, iconen, app links, integratie relaties en responsive placement komen uit de gedeelde Homarr catalogus. U kunt elk resultaat later bewerken.", + "dockerWarningTitle": "Sommige Docker labels zijn gewijzigd tijdens installatie", + "dockerWarningDescription": "{count, plural, one {# geselecteerde Docker resultaat kon niet worden toegepast omdat de service is veranderd, gericht tegen een ander bord, of omdat de widget niet compatibel was} other {# de geselecteerde Docker resultaten konden niet worden toegepast omdat de diensten zijn veranderd, gericht op een ander board, of omdat de widgets niet compatibel waren}}", + "errorTitle": "Bord kon niet worden gebouwd", + "progress": { + "applying": "Verbindingen testen en je bord bouwen", + "done": "Jouw bord is klaar" } }, "finish": { - "title": "Instellen voltooien", - "subtitle": "Je bent er klaar voor!", - "description": "Je hebt het installatieproces succesvol afgerond. Je kunt Homarr nu gaan gebruiken. Selecteer je volgende actie:", - "action": { - "goToBoard": "Ga naar {name} bord", - "createBoard": "Je eerste bord aanmaken", - "inviteUser": "Andere gebruikers uitnodigen", - "docs": "Lees de documentatie" - } + "title": "Je eerste bord is klaar.", + "description": "Homarr heeft de stukken die u selecteerde verbonden en de rest bewerkbaar gehouden. Open nu het bord; de korte in-product rondleiding laat zien dat je de bewerkingsmodus, widgets, lay-outs en zoekopdrachten aanpast.", + "openBoard": "Mijn bord openen", + "manageTitle": "Beheren", + "manageDescription": "Afstemming van apps, integraties, borden, gebruikers en serverinstellingen.", + "workshopTitle": "Werkplaats", + "workshopDescription": "Ontdek en installeer de community Custom Widgets.", + "docsTitle": "Leer Homarr", + "docsDescription": "Lees de gerichte gidsen voor boards, widgets, integraties en gereedschappen." } - }, - "backToStart": "Terug naar start" + } }, "user": { - "title": "Gebruikers", "name": "Gebruiker", "page": { "login": { @@ -159,12 +249,10 @@ }, "invite": { "title": "Deelnemen aan Homarr", + "titleWithAppName": "Deelnemen aan {appName}", "subtitle": "Welkom bij Homarr! Maak een account aan", + "subtitleWithAppName": "Welkom bij {appName}! Maak uw account aan", "description": "Je bent uitgenodigd door {username}" - }, - "init": { - "title": "Nieuwe Homarr installatie", - "subtitle": "Maak de eerste beheerdersgebruiker aan" } }, "field": { @@ -192,12 +280,17 @@ "previousPassword": { "label": "Vorig wachtwoord" }, - "homeBoard": { - "label": "Home-bord" - }, "pingIconsEnabled": { "label": "Gebruik iconen voor pings" }, + "byteUnitSystem": { + "label": "Eenheid voor gegevensgrootte", + "description": "Kies hoe Homarr geeft byte maten en byte tarieven weer. Bit tarieven gebruiken altijd decimale eenheden.", + "options": { + "binary": "Binair", + "decimal": "Decimaal" + } + }, "enableRightClickOnWidgets": { "label": "", "description": "" @@ -247,7 +340,6 @@ } } }, - "create": "Gebruiker aanmaken", "changePassword": { "label": "Wachtwoord wijzigen", "notification": { @@ -259,56 +351,6 @@ } } }, - "changeHomeBoard": { - "notification": { - "success": { - "message": "Home-bord succesvol gewijzigd" - }, - "error": { - "message": "Kan startpagina niet wijzigen" - } - } - }, - "changeSearchPreferences": { - "notification": { - "success": { - "message": "Zoekvoorkeuren succesvol gewijzigd" - }, - "error": { - "message": "Kan zoekvoorkeuren niet wijzigen" - } - } - }, - "changeFirstDayOfWeek": { - "notification": { - "success": { - "message": "Eerste dag van de week succesvol gewijzigd" - }, - "error": { - "message": "Kan eerste dag van week niet wijzigen" - } - } - }, - "changePingIconsEnabled": { - "notification": { - "success": { - "message": "Ping-iconen succesvol omgeschakeld" - }, - "error": { - "message": "Ping-iconen kunnen niet worden omgeschakeld" - } - } - }, - "changeDdgBangs": { - "notification": { - "success": { - "message": "DuckDuckGo bangs succesvol omgeschakeld" - }, - "error": { - "message": "Kan DuckDuckGo bangs niet omschakelen" - } - } - }, "manageAvatar": { "changeImage": { "label": "Afbeelding veranderen", @@ -338,16 +380,6 @@ } } }, - "editProfile": { - "notification": { - "success": { - "message": "Profiel succesvol bijgewerkt" - }, - "error": { - "message": "Kan profiel niet bijwerken" - } - } - }, "delete": { "label": "Gebruiker permanent verwijderen", "description": "Verwijdert deze gebruiker inclusief zijn voorkeuren. Verwijdert geen enkele borden. Gebruiker krijgt geen melding.", @@ -356,18 +388,13 @@ "select": { "label": "Gebruiker selecteren", "notFound": "Geen gebruiker gevonden" - }, - "transfer": { - "label": "Nieuwe eigenaar selecteren" } } }, "group": { - "title": "Groepen", "name": "Groep", "search": "Vind een groep", "field": { - "name": "Naam", "members": "Leden", "homeBoard": { "label": "Home-bord", @@ -388,6 +415,19 @@ } } }, + "custom-widget": { + "title": "Aangepaste widgets", + "item": { + "manage": { + "label": "Beheer aangepaste widgets", + "description": "Leden toestaan om eigen definities voor widgets aan te maken, te bewerken en te verwijderen" + }, + "secret-write": { + "label": "Configureren van aangepaste widget geheimen", + "description": "Sta leden en hun API-sleutels toe om versleutelde aangepaste widgetreferenties in te stellen" + } + } + }, "app": { "title": "Apps", "item": { @@ -493,6 +533,35 @@ "description": "Laat leden elke zoekmachine beheren en verwijderen" } } + }, + "matrix": { + "none": "Geen toegang", + "impliedHint": "Ook vermelding: {permissions}", + "grantedViaAdmin": "Beheerders hebben dit al. Stel de Admin in op \"Geen toegang\" om het afzonderlijk te configureren.", + "preset": { + "label": "Voorkeursinstellingen", + "viewer": "Bekijker", + "viewerDescription": "Alleen-lezen: boards en media bekijken, apps en integraties gebruiken die al bestaan.", + "editor": "Tekstverwerker", + "editorDescription": "Dagelijks beheer: maken en bewerken van borden, apps, integraties en zoekmachines.", + "admin": "Beheerder", + "adminDescription": "Onbeperkte toegang tot alle functies, inclusief gebruikersbeheer.", + "custom": "Aangepaste" + }, + "effective": { + "title": "Effectieve permissies", + "description": "De volledige, ontdubbelde reeks van acties die leden van deze groep kunnen uitvoeren, inclusief indirecte, verleende rechten.", + "empty": "Geen rechten geselecteerd" + }, + "noneDescription": "Leden krijgen geen toegang tot dit gebied.", + "level": { + "view": "Bekijken", + "use": "Gebruik", + "interact": "Interactie", + "modify": "Aanpassen", + "full": "Volledig" + }, + "capabilityIncluded": "Reeds opgenomen in \"{level}\"" } }, "memberNotice": { @@ -607,21 +676,24 @@ "search": "Vind een app", "page": { "list": { - "title": "Apps", + "ariaLabel": "Geconfigureerde apps", "noResults": { "title": "Er zijn nog geen apps", - "action": "Je eerste app aanmaken" + "description": "Apps zijn links naar de diensten en gereedschappen die u wilt op uw borden.", + "action": "Je eerste app aanmaken", + "filteredTitle": "Er zijn geen apps die voldoen aan uw zoekopdracht", + "filteredDescription": "Geen apps komen overeen met \"{search}\". Probeer een andere naam of URL.", + "createOnlyTitle": "U kunt alleen apps toevoegen", + "createOnlyDescription": "Uw machtigingen laten u apps maken maar niet door bestaande apps bladeren. Vraag een beheerder om toegang tot appbeheer om de volledige lijst te zien." } }, "create": { "title": "Nieuwe app", "notification": { "success": { - "title": "Succesvol aangemaakt", "message": "De app is succesvol aangemaakt" }, "error": { - "title": "Aanmaken mislukt", "message": "De app kon niet worden aangemaakt" } } @@ -630,11 +702,9 @@ "title": "App bewerken", "notification": { "success": { - "title": "Wijzigingen succesvol toegepast", "message": "De app is succesvol opgeslagen" }, "error": { - "title": "Kan wijzigingen niet toepassen", "message": "De app kon niet worden opgeslagen" } } @@ -644,26 +714,18 @@ "message": "Weet je zeker dat je de app {name} wilt verwijderen?", "notification": { "success": { - "title": "Succesvol verwijderd", "message": "De app is succesvol verwijderd" }, "error": { - "title": "Verwijderen mislukt", "message": "Kan de app niet verwijderen" } } } }, "field": { - "name": { - "label": "Naam" - }, "description": { "label": "Beschrijving" }, - "url": { - "label": "URL" - }, "useDifferentUrlForPing": { "checkbox": { "label": "Gebruik andere URL voor ping", @@ -678,34 +740,582 @@ "search": "Zoek naar een app", "noResults": "Geen resultaten", "action": "{app} selecteren", - "title": "Selecteer een app om aan dit bord toe te voegen" + "title": "Selecteer een app om aan dit bord toe te voegen", + "toggle": "Klik om te selecteren", + "selected": "Geselecteerd", + "multiple": "{count} toevoegen", + "selectedCount": "{count, plural, one {# geselecteerd} other {# geselecteerd}}", + "appsSelected": "{count, plural, one {# app geselecteerd} other {# apps geselecteerd}}", + "selectMultiple": "Selecteer meerdere", + "cancelMultiple": "Meervoudige selectie afsluiten", + "customApplication": "Aangepaste toepassing", + "application": "Applicatie" }, "create": { "title": "Nieuwe app aanmaken", "description": "Een nieuwe app aanmaken ", "action": "App aanmaken openen" + } + } + }, + "tips": { + "dismiss": "Tip verwijderen", + "multiSelectApps": "Tip: Houd Ctrl / 58 ingedrukt om meerdere apps tegelijk te selecteren" + }, + "customWidget": { + "secretEntry": { + "title": "API-bron configureren", + "description": "Bevestig de server-URL en voer inloggegevens in. Geheime waarden zijn versleuteld door Homarr en nooit teruggestuurd naar de verzoekende agent.", + "loading": "Beveiligde aanvraag laden…", + "applying": "Deze configuratie toepassen… Deze pagina open houden.", + "saved": "API-bron geconfigureerd. U kunt deze pagina sluiten.", + "unavailable": "Verzoek niet beschikbaar", + "saveError": "Kan API-bron niet configureren", + "source": "API bron: {name}", + "baseUrl": "Server URL", + "networkScope": "Netwerk toegang", + "save": "API-configuratie opslaan", + "expires": "Deze eenmalige aanvraag verloopt op {time}." + }, + "page": { + "list": { + "noResults": "", + "noDescription": "Geen beschrijving", + "enabled": "Ingeschakeld", + "disabled": "Uitgeschakeld", + "disabledDescription": "Deze widget blijft geconfigureerd maar zal niet laden op enig bord.", + "requestCount": "{count, plural, one {# aanvraag} other {# verzoeken}}", + "invalidDefinition": "Ongeldige definitie", + "migrationRequired": "Migratie vereist", + "migrationInstructions": "Open acties om de originele v1-definitie voor handmatige recreatie te kopiëren of te exporteren. Je kunt de migratie op tijd ook gebruiken met een LLM. Bestaande plaatsingen blijven werken na de migratie.", + "missingCredentials": "{count, plural, one {Credential mist} other {# referenties ontbreken}}", + "missingCredentialsDescription": "{count, plural, one {Deze widget heeft nog één inloggegevens nodig} other {Deze widget heeft nog steeds # inloggegevens nodig}} Selecteer deze badge om de URL en gecodeerde waarden te configureren." }, - "add": "Een app toevoegen" + "create": { + "title": "", + "subtitle": "" + }, + "tabs": { + "ariaLabel": "Aangepaste widget secties", + "installed": "Geinstalleerd", + "workshop": "Werkplaats" + } + }, + "action": { + "pasteImportHint": "Plak een volledige aangepaste widget JSON met Ctrl+V of Command+V", + "delete": "", + "deleteConfirm": "", + "export": "", + "duplicate": "", + "aiPrompt": "Ontwerp met AI", + "copyAiPrompt": "", + "enable": "", + "disable": "", + "menu": "", + "downloadSkill": "Bekijk Aangepaste Widget Vaardigheid", + "publishWorkshop": "Publiceer naar de Workshop", + "migrate": "Migreer Aangepaste Widget", + "configureSources": "Bronnen configureren", + "copyLegacyDefinition": "Kopieer oorspronkelijke widget-inhoud", + "exportLegacyDefinition": "Exporteer originele widget-inhoud", + "copyMigrationPrompt": "Kopieer LLM migratie prompt", + "pasteMigration": "Plak gemigreerde widget", + "importMigration": "Import gemigreerd JSON-bestand" + }, + "sourceSetupDialog": { + "title": "Widget bronnen configureren", + "description": "Controleer waar deze widget verbindt en voeg toe of vervang de versleutelde inloggegevens.", + "credentialsRequired": "Verzoek zal mislukken totdat de vereiste inloggegevens worden toegevoegd.", + "save": "Configuratie opslaan" + }, + "field": { + "description": "" + }, + "editor": { + "errorBoundary": { + "title": "Er ging iets mis" + }, + "action": { + "components": "Onderdelen", + "format": "Formatteren", + "insertStarter": "Insert starter", + "redo": "Opnieuw", + "copied": "Gekoppeld", + "schema": "Schema" + }, + "reference": { + "minimal": "Minimaal voorbeeld", + "full": "Volledig voorbeeld" + }, + "componentReference": { + "search": "Onderdelen zoeken", + "empty": "Geen overeenkomende componenten", + "count": "{count, number} componenten beschikbaar" + }, + "status": { + "errors": "{count, number} fouten", + "warnings": "{count, number} waarschuwingen", + "ready": "Geen problemen gevonden", + "position": "Ln {line, number}, Col {column, number}", + "characters": "{count, number} tekens", + "charactersWithLimit": "{count, number} / {limit, number}" + }, + "diagnostics": { + "title": "Sjabloon diagnostiek", + "line": "Lijn {line, number}", + "ast": "{value}", + "bindingTypeConflict": "De input \"{value}\" wordt gedeeld door besturingselementen met incompatibele waardetypes.", + "runtimeBindingTypeConflict": "De invoer \"{value}\" is gebonden als zowel {firstType} als {secondType}.", + "dynamicRequestId": "Een letterlijke verzoek ID is vereist. Dynamisch verzoek IDs worden niet geaccepteerd.", + "dynamicInputBinding": "Een letterlijke invoernaam is vereist om te binden.", + "inlineRequestProps": "Netwerkonderdelen accepteren requestId en parameters; inline-URL, methode, header en body props zijn geblokkeerd.", + "invalidRequestManifest": "Benoemde verzoeken moeten een geldige aanvraagkaart zijn. {value}", + "missingRequestId": "Dit netwerkcomponent vereist een letterlijke verzoekId.", + "templateEmpty": "Voer een JSX-sjabloon in.", + "templateTooLong": "De sjabloon overschrijdt de limiet van 50.000 tekens.", + "unknownRequest": "Geen met ID \"{value}\" bestaat al." + } + }, + "workbench": { + "configure": "Configureren", + "sectionNavigation": "Aangepaste widget secties", + "widgetPreview": "Widget voorbeeld", + "generalInformation": "Algemene informatie", + "invalidWidget": "Ongeldige widget", + "section": { + "general": "Algemeen", + "sources": "API bronnen", + "requests": "Aanvragen", + "options": "Instellingen", + "jsx": "JSX", + "preview": "Voorvertoning" + }, + "status": { + "unsaved": "Niet-opgeslagen wijzigingen", + "invalid": "Heeft aandacht nodig", + "ready": "Gereed" + }, + "saveError": { + "title": "Widget is niet opgeslagen", + "description": "Herstel deze validatiefouten en sla opnieuw op.", + "more": "+{count} meer fouten worden weergegeven in de werkbank.", + "errors": "Validatie fouten", + "copy": "Kopieer fouten", + "copied": "Fouten gekopieerd" + }, + "action": { + "preview": "Test en voorbeeld", + "previewLoading": "Aanvragen testen" + }, + "requests": { + "title": "Benoemde query's en acties", + "label": "Aanvragen", + "description": "Queries laadgegevens; acties worden alleen uitgevoerd na interactie van de gebruiker. HTTP methode is geldig voor elke soort." + }, + "options": { + "title": "Widget opties" + }, + "builder": { + "advancedManifest": "Geavanceerd rauw manifest", + "advancedJson": "Geavanceerd manifest JSON", + "manifestFilename": "widget.json", + "request": "Verzoek {count, number}", + "requestId": "ID aanvragen", + "type": "Client type downloaden", + "method": "Methode", + "source": "API bron", + "run": "Uitvoeren", + "runLoad": "Wanneer de widget wordt geladen", + "runManual": "Van Sub-Ophalen", + "permission": "Machtiging", + "path": "Pad", + "pathDescription": "Gebruik '{option:name}' voor widget opties en '{param:name}' voor aanroepwaarden.", + "requestDetails": "Query, lichaam en gedrag", + "queryValues": "Query waarden", + "queryKey": "Query sleutel", + "queryKeyInvalid": "Gebruik een unieke ID die begint met een letter en die alleen letters, cijfers, - of _ bevat.", + "valueSource": "Bron waarde", + "literal": "Letterlijk", + "widgetOption": "Widget optie", + "invocationParameter": "Invocatie parameter", + "option": "Optie", + "parameterName": "Naam parameter", + "value": "Waarde", + "removeQueryValue": "Query waarde verwijderen", + "addQueryValue": "Query waarde toevoegen", + "jsonBody": "JSON lichaam", + "jsonBodyDescription": "Optioneel. Voeg $option en $param referenties toe op elke diepte.", + "insertOptionReference": "Voeg optie referentie in", + "insertParameterReference": "Parameterreferentie toevoegen", + "confirmation": "Bevestigings bericht", + "invalidation": "Vernieuwen na succes", + "invalidationDescription": "Kommagescheiden query IDs", + "noAuth": "Stuur zonder bronverificatie", + "moveRequestUp": "Aanvraag omhoog verplaatsen", + "moveRequestDown": "Aanvraag omlaag verplaatsen", + "removeRequest": "Aanvraag verwijderen", + "addRequest": "Voeg verzoek toe", + "optionName": "Optie naam", + "label": "Omschrijving", + "control": "Bediening", + "description": "Beschrijving", + "default": "Standaard", + "optionDetails": "Beperkingen en dynamische keuzes", + "minimum": "Minimum", + "maximum": "Maximum", + "step": "Stap", + "choiceLabel": "Keuze label", + "choiceValue": "Keuze waarde", + "newChoice": "Nieuwe keuze", + "addChoice": "Keuze toevoegen", + "removeChoice": "Keuze verwijderen", + "choicesRequest": "Laad keuzes van verzoek", + "itemsPath": "Pad van items", + "itemsPathPlaceholder": "items (optioneel)", + "valuePath": "Pad van waarde", + "labelPath": "Pad van label", + "group": "Groep", + "advancedOption": "Geavanceerde optie", + "moveOptionUp": "Optie omhoog verplaatsen", + "moveOptionDown": "Optie omlaag verplaatsen", + "removeOption": "Optie verwijderen", + "addOption": "Voeg optie toe", + "invalidJson": "Ongeldige JSON", + "invalidWidget": "Ongeldige widget" + }, + "jsx": { + "title": "JSX sjabloon", + "label": "Sjabloon" + }, + "sources": { + "title": "API bronnen en referenties", + "newName": "API {count, number}", + "duplicateSourceId": "API-bron-ID's moeten uniek zijn.", + "credentialRemoved": "Toegangssleutel verwijderd", + "credentialRemovedDescription": "De opgeslagen waarde is verwijderd.", + "primary": "Primaire API", + "id": "Bron ID", + "name": "Taaknaam", + "baseUrl": "Basis-URL", + "baseUrlError": { + "invalid": "Voer een volledige URL in.", + "protocol": "Gebruik een HTTP of HTTPS URL.", + "credentials": "Verwijder de gebruikersnaam en het wachtwoord van deze URL. Configureer in plaats daarvan onderstaande inloggegevens.", + "queryOrFragment": "Verwijder de query string of fragment van deze basis URL. Voeg query waarden toe aan een naam verzoek." + }, + "networkScope": "Netwerk toegang", + "authentication": "Authenticatie", + "headerName": "Naam koptekst", + "queryParameter": "Query parameter", + "configured": "Geconfigureerd - voer een vervanging in", + "clear": "Wissen", + "remove": "Verwijder de bron en de bijbehorende verzoeken", + "advanced": "Geavanceerd", + "add": "Een andere API-bron toevoegen", + "sourceType": "Integratie", + "manualSource": "HTTP API", + "existingIntegration": "Bestaande integratie", + "integrationType": "Integratie type", + "selectIntegration": "Geconfigureerde integratie", + "noIntegrations": "Geen overeenkomende integraties beschikbaar", + "integrationUnavailable": "De geselecteerde integratie is niet langer beschikbaar. Selecteer een andere integratie.", + "integrationDescription": "Gebruikt de opgeslagen integratie URL en referenties. Wijzigingen worden automatisch toegepast. Volledige integratie toegang is vereist om aanvragen uit te voeren." + }, + "ai": { + "title": "Maak of repareer met een AI", + "description": "Voeg eerst een URL van een API documentatie toe als u die hebt. Voor fixes, voer indien mogelijk een voorbeeld uit. Kopieer de prompt in een AI; het kan om ontbrekende gegevens vragen. Plak de laatste JSON hier.", + "request": "Wat moet deze widget doen?", + "documentationUrl": "API documentatie-URL (optioneel)", + "paste": "Plakken", + "response": "AI antwoord", + "manualCopyDescription": "Toegang tot klembord is niet beschikbaar. Selecteer de onderstaande prompt en kopieer deze handmatig.", + "manualPasteDescription": "Clipboard toegang is niet beschikbaar of het gekopieerde antwoord moet worden gecorrigeerd. Plak de JSON reactie van de AI's JSON hier.", + "selectAll": "Alles selecteren", + "loadResponse": "Laad reactie", + "loaded": "Widget geladen in de editor", + "invalidResponse": "Klembord bevat geen geldige v2 widget", + "invalidResponseDetail": "Het AI-antwoord is ongeldig: {message}" + }, + "preview": { + "invalid": "Repareer de validatiefouten om deze widget weer te geven.", + "fixtureError": "Voorbeeld fixture fout", + "requestData": "Gegevens opvragen", + "status": { + "idle": "Verzoeken zijn niet getest", + "loading": "Aanvragen testen", + "success": "Alle laadverzoeken zijn gelukt", + "error": "Een of meer laadverzoeken zijn mislukt" + }, + "result": { + "loading": { + "title": "API-aanvragen testen", + "description": "Homarr is een voorbeeldsessie aan het maken en het laden van de widgetgegevens." + }, + "success": { + "title": "Voorbeeld gereed", + "description": "{succeeded, plural, =0 {Deze widget heeft geen laadverzoeken.} one {# laadverzoek geslaagd.} other {# laadverzoeken geslaagd.}} Open Gegevens om de respons te bekijken." + }, + "error": { + "title": "Voorbeeld voltooid met aanvraagfouten", + "description": "{succeeded, number} geslaagd en {failed, number} Mislukt! Open de gegevens voor het antwoord en de foutdetails." + } + }, + "instanceOptions": "Instance opties", + "liveActions": "Voer acties uit tegen de geconfigureerde API", + "liveActionsDescription": "Uit is veilige simulatie. Dit inschakelen heeft invloed op de echte service.", + "noActions": "Er zijn geen acties gedefinieerd.", + "containedFailures": "Runtime fouten staan in deze widget. Dagboeken vragen bevatten nooit geheime waarden.", + "validation": { + "title": "Validatie", + "ready": "De widget definitie is geldig." + }, + "accessibility": { + "title": "Controle toegankelijkheid", + "ready": "Geen algemene toegankelijkheidsomissies gedetecteerd.", + "pending": "Toegankelijkheidscontroles worden uitgevoerd wanneer de definitie van widget geldig is.", + "imageAlt": "Voeg Alt-tekst toe aan elke afbeelding, gebruik een leeg alt, alleen voor decoratieve afbeeldingen.", + "actionIconLabel": "Voeg een arialabel of titel toe aan elke ActionIcon.", + "inputLabel": "Voeg een zichtbare naam of toegankelijke naam toe aan elke invoer." + }, + "journal": "Aanvraaglogboek opnieuw uitgevoerd", + "actionParameters": "Actie parameters (JSON)", + "invalidParameters": "Gebruik de opgegeven tekenreeks, cijfers en booleaanse parametertypes.", + "runDestructive": "destructieve actie uitvoeren", + "runAction": "Actie uitvoeren", + "deleteConfirmation": "Deze voorbeeldactie verandert externe gegevens via de geconfigureerde API.", + "simulated": "Actie gesimuleerd", + "httpStatus": "HTTP {status, number}", + "tab": { + "widget": "Widget", + "data": "Gegevens", + "options": "Instellingen", + "state": "Taakstatus", + "actions": "Bedieningen", + "diagnostics": "Diagnose" + }, + "size": { + "compact": "Compacte", + "standard": "Standaard", + "wide": "Breed" + }, + "fixture": { + "live": "Zichtbaar", + "loading": "Laden", + "empty": "Leeg", + "error": "Fout" + } + } + }, + "preview": { + "request": { + "permission": { + "view": "Bekijken", + "modify": "Aanpassen", + "full": "Volledig" + } + } + }, + "notification": { + "created": "", + "updated": "", + "deleted": "", + "imported": "", + "migrated": "Oudere widget succesvol gemigreerd. Bestaande plaatsingen gebruiken nu de v2-definitie.", + "migrationError": "Migreren van oude widget mislukt. Zorg ervoor dat het bestand gebruik maakt van het homarr-widget-v2-schema.", + "legacyDefinitionCopied": "De oorspronkelijke widget-inhoud is gekopieerd. Opgeslagen referentiewaarden worden niet meegenomen.", + "legacyDefinitionCopyError": "Kon de oorspronkelijke inhoud van de widget niet kopiëren.", + "migrationPromptCopied": "Een redact migratie prompt werd gekopieerd. Plak het in een LLM, kopieer het enige JSON-antwoord en kies hier geplakt gemigreerde widget.", + "migrationPromptCopyError": "Kopiëren van de migratie-prompte is mislukt.", + "sourcesConfigured": "Widget bronnen en referenties opgeslagen.", + "sourceConfigurationError": "Kan widget bronnen niet configureren.", + "aiPromptCopiedWithCount": "AI prompt gekopieerd naar klembord ({count, number} karakters).", + "aiPromptCopyError": "", + "aiPromptSent": "Prompt verzonden. U kunt blijven bewerken terwijl de assistent op de achtergrond werkt.", + "updateError": "", + "importError": "", + "exportError": "", + "duplicated": "", + "duplicateError": "", + "toggleError": "", + "deleteError": "", + "previewError": "" + }, + "importReview": { + "title": "Aangepaste widget import controleren", + "description": "Controleer waar deze widget verbindt en welk bord toegang heeft tot de besturingselementen voordat u deze importeert.", + "migrationTitle": "Bekijk gemigreerde v2 vervanging", + "migrationDescription": "Controleer en bevestig dit gegenereerde v2-definitie. Bevestigen op atomatische wijze vervangt het gespaard v1-record terwijl bestaande plaatsingen op board gekoppeld blijven aan dezelfde widget-ID.", + "fileLabel": "Kies een aangepast widget JSON-bestand", + "name": "Taaknaam", + "origin": "Basis oorsprong", + "authentication": "Authenticatie", + "networkScope": "Netwerk bereik", + "methods": "HTTP methoden", + "permissions": "Vereiste schrijfrechten", + "sourceSetup": { + "title": "API-bronnen configureren", + "description": "Bevestig waar deze widget verbinding maakt en voeg referenties toe. Privé en loopback URL's zijn specifiek voor uw Homarr installatie.", + "suggestedUrl": "Voorgestelde URL", + "confirmUrl": "Ik bevestig dat deze server-URL juist is voor mijn Homarr installatie", + "ready": "URL gereed", + "needsUrl": "Bevestig URL", + "credentialsMissing": "Referenties ontbreken", + "credentialsOptional": "U kunt installeren zonder inloggegevens en deze later configureren, maar verzoeken zullen mislukken totdat ze worden toegevoegd." + }, + "actionWarning": { + "title": "Deze widget kan externe gegevens wijzigen", + "description": "Bekijk alle acties met naam en aanmeldgegevens en vernietigende bevestiging na het importeren. Geheime acties zijn niet opgenomen in het bestand." + }, + "cancel": "Import annuleren", + "confirm": "Importeer widget", + "confirmMigration": "Bevestig v2 vervanging" + }, + "secret": { + "apiKey": "API sleutel of token", + "username": "", + "password": "", + "savedPlaceholder": "" + } + }, + "workshop": { + "title": "Werkplaats", + "browseWorkshop": "Blader door de Workshop", + "openCommunity": "Open de Workshop", + "openOnWorkshop": "Open {title} op de Workshop website", + "back": "Terug naar Workshop", + "search": "Zoek widgets", + "searchCss": "Zoek CSS thema's", + "sort": "Sorteren", + "sortTop": "Best beoordeeld", + "sortNewest": "Nieuwste", + "listAriaLabel": "Workshop widgets", + "listAriaLabelCss": "CSS-thema's workshop", + "empty": "Geen enkele widget komt overeen met deze zoekopdracht.", + "emptyDescription": "De communautaire widgets die in de Workshop zijn gepubliceerd, worden hier getoond.", + "emptyFilteredTitle": "Er komen geen widgets overeen met deze zoekopdracht", + "emptyFilteredDescription": "Er komt geen Workshop widget overeen met \"{search}\".", + "emptyCss": "Geen CSS thema's komen overeen met deze zoekopdracht.", + "unavailableTitle": "Homarr Workshop lijkt niet beschikbaar te zijn", + "unavailable": "Mogelijk is de community service tijdelijk niet actief. Probeer het later opnieuw. Uw geïnstalleerde widgets hebben geen invloed.", + "loadError": "Deze uitwerking kon niet worden geladen.", + "noDescription": "Geen beschrijving", + "author": "door {name}", + "communityMember": "Community lid", + "outdated": "Verouderd", + "outdatedWarning": "De auteur markeerde deze inzending als verouderd. Controleer het zorgvuldig voordat u importeert.", + "score": "Score: {count, number}", + "upvote": "Upvote", + "downvote": "Negativ", + "voteError": "De stemming kon niet worden opgeslagen.", + "signIn": "Log in met GitHub", + "signInError": "GitHub aanmelding mislukt. Controleer of de OAuth provider is geconfigureerd en dat pop-ups zijn toegestaan.", + "signOut": "Log uit", + "signInHint": "Inloggen om te stemmen of te rapporteren. Installeren vereist geen Workshop account", + "securityNotice": "Workshop widgets kunnen hun gedeclareerde API bronnen aanroepen en lokale acties uitvoeren. Geheime acties worden nooit meegenomen.", + "securityNoticeCss": "Community CSS kan het uiterlijk en de bruikbaarheid van een bord wijzigen. Controleer het voordat u importeert; er wordt niets opgeslagen totdat u board instellingen opslaat.", + "install": "Installeren", + "installReviewTitle": "Review voor installeren", + "installError": "Deze widget kan niet worden geïnstalleerd", + "installErrorDescription": "De werkplaats indiening is geen geldige aangepaste JSX v2 widget.", + "useCss": "Import CSS", + "importCss": "CSS importeren uit Workshop", + "importCssConfirm": "Vervang de huidige aangepaste CSS met \"{title}\"? Niets opgeslagen totdat u de board instellingen opslaat.", + "screenshotAlt": "{title} schermafbeelding {count, number}", + "screenshotViewer": "{title} schermafbeelding bekijken", + "screenshotsLabel": "{title} schermafbeeldingen", + "zoomScreenshot": "Bekijk volledige grootte", + "previousScreenshot": "Vorige schermafbeelding", + "nextScreenshot": "Volgende schermafbeelding", + "showScreenshotThumbnails": "Toon screenshot miniaturen", + "hideScreenshotThumbnails": "Verberg schermafbeelding miniaturen", + "closeScreenshotViewer": "Schermafbeelding weergeven sluiten", + "technicalDetails": "Technische details", + "sourceCode": "Werkplaats invoer", + "export": "Exporteren", + "report": "Rapporteren", + "reportTitle": "Rapport indienen", + "reportReason": "Reden", + "reportExplanation": "Wat moeten de moderators van de Workshop weten?", + "reportSend": "Rapport verzenden", + "reportSent": "Rapport verzonden", + "reportSentDescription": "De moderators van de werkplaats kunnen deze inzending nu beoordelen.", + "reportCount": "{count, plural, one {# melding} other {# rapporten}}", + "reportWarning": "{count, plural, one {Deze inzending heeft # openstaand communityrapport.} other {Deze inzending heeft # openstaande communityrapporten.}} De inzending kan nog steeds worden geïnstalleerd, maar je moet de inhoud eerst controleren.", + "reportVisibility": "De details van het rapport zijn alleen zichtbaar voor de auteur en beheerders van deze uitzending.", + "reportCategory": { + "outdated": "Verouderd of niet meer werkt", + "malicious": "Kwaadaardig", + "spam": "Spam", + "copyright": "Auteursrecht", + "inappropriate": "Ongepast", + "other": "Andere" + }, + "publish": { + "title": "Publiceer naar de Workshop", + "introTitle": "Deze widget delen met de gemeenschap", + "introDescription": "Homarr exporteert een referentievrije kopie van de huidige widget. Voeg heldere lijstdetails toe zodat mensen weten wat het doet voordat u het installeert.", + "listingDetails": "Werkplaats aanbieding", + "listingDetailsDescription": "Deze gegevens verschijnen openbaar naast de geëxporteerde widget definitie.", + "success": "Onmiddellijk gepubliceerd. Community leden kunnen deze widget installeren en rapporteren.", + "successTitle": "Uw widget is live", + "manageDescription": "Open de indiening om de lijst bij te werken, rapporten te beoordelen, achterhaald te markeren of te verwijderen. Het beheer van de werkplaats wordt direct behandeld op de website van de workshop.", + "viewSubmission": "Bekijk en beheer indiening", + "done": "Voltooid", + "signInHint": "Log in om te publiceren onder je Workshop-identiteit.", + "titleField": "Titel", + "descriptionField": "Beschrijving", + "screenshots": "Schermafbeeldingen", + "screenshotsDescription": "Maximaal 5 PNG, JPEG, of WebP afbeeldingen", + "screenshotsPlaceholder": "Kies schermafbeeldingen", + "invalidScreenshot": "Gebruik PNG, JPEG, of WebP afbeeldingen niet groter dan {maxSize} per stuk.", + "privateSourceWarning": "Deze widget bevat privé bron-URL's voor: {sources}. Vervang persoonlijke hosts of IP-adressen door veilige plaatseigenaars van service voordat u publiceert.", + "reviewSourcesTitle": "Controleer privé bron URL's", + "privateSourceConfirmation": "Ik heb deze bron-URL's bekeken en zij geven geen details van particuliere infrastructuur weer.", + "action": "Publiceer nu", + "publicationNote": "Publiceren is onmiddellijk. U kunt de inzending nadien in de Werkplaats beheren.", + "definitionChanged": "De widget veranderde terwijl de publicatie wordt voorbereid. Controleer de privé bron-URL's opnieuw en probeer het opnieuw.", + "error": "Publicatie mislukt" } }, "integration": { + "completion": { + "modalTitle": "Service klaar", + "title": "{name} is verbonden", + "description": "De verbinding is geslaagd voor de test. Kies wat je moet laten zien op dit bord.", + "connectionReady": "Service verbinding is klaar", + "appReady": "App snelkoppeling is klaar", + "compatibleWidgets": "{count, plural, =0 {Geen geschikte widgets} one {# compatibele widget} other {# compatibele widgets}} beschikbaar", + "chooseWidget": "Widget kiezen", + "recipes": { + "title": "Aanbevolen voor dit bord", + "description": "Op basis van verbonden services en widgets die al op dit bord aanwezig zijn.", + "newConnectionReason": "Nu beschikbaar via {integration}", + "existingConnectionReason": "Werkt met een dienst die u al hebt verbonden", + "dismiss": "Aanbevelingen voor deze service op dit bord afwijzen" + } + }, "page": { "list": { - "title": "Integraties", + "ariaLabel": "Geconfigureerde integraties", "search": "Integraties zoeken", + "scopedNote": "Laat alleen de integraties zien die je mag beheren.", "noResults": { - "title": "Er zijn nog geen integraties" + "title": "Er zijn nog geen integraties", + "description": "Verbind een service om de gegevens en acties ervan te gebruiken in Homarr widgets.", + "action": "Maak je eerste integratie", + "filteredTitle": "Er komen geen integraties overeen met uw zoekopdracht", + "filteredDescription": "Geen integraties komen overeen met \"{search}\". Probeer een andere naam, type of URL.", + "createOnlyTitle": "U kunt alleen integraties toevoegen", + "createOnlyDescription": "Uw machtigingen laten u integraties aanmaken maar bestaande niet beheren. Vraag een beheerder om toegang tot degene die u nodig heeft." } }, "create": { "title": "Nieuwe {name} integratie", "notification": { "success": { - "title": "Succesvol aangemaakt", "message": "De integratie is succesvol aangemaakt" }, "error": { - "title": "Aanmaken mislukt", "message": "De integratie kon niet worden aangemaakt" } }, @@ -729,11 +1339,9 @@ "title": "{name} integratie bewerken", "notification": { "success": { - "title": "Wijzigingen succesvol toegepast", "message": "De integratie is succesvol opgeslagen" }, "error": { - "title": "Kan wijzigingen niet toepassen", "message": "De integratie kon niet worden opgeslagen" } }, @@ -750,23 +1358,15 @@ "message": "Weet je zeker dat je de integratie {name} wilt verwijderen?", "notification": { "success": { - "title": "Succesvol verwijderd", "message": "De integratie is succesvol verwijderd" }, "error": { - "title": "Verwijderen mislukt", "message": "Kan de integratie niet verwijderen" } } } }, "field": { - "name": { - "label": "Naam" - }, - "url": { - "label": "URL" - }, "attemptSearchEngineCreation": { "label": "Zoekmachine aanmaken", "description": "Integratie \"{kind}\" kan worden gebruikt met de zoekmachines. Controleer dit om automatisch de zoekmachine te configureren." @@ -778,6 +1378,10 @@ "label": "App aanmaken", "description": "Maak een app n met dezelfde naam en icoon als de integratie. Laat het invoerveld hieronder leeg om de app te maken met de integratie-URL." }, + "linkApp": { + "label": "Koppel een bestaande app", + "description": "Verbind deze integratie met een app die je al kunt gebruiken." + }, "appHref": { "placeholder": "Aangepaste app-URL" }, @@ -791,7 +1395,11 @@ "grid": { "widgetCount": "{count} widgets", "noWidgets": "Geen widgets", - "detected": "Gedetecteerd via Docker" + "detected": "Gedetecteerd via Docker", + "connected": "{count, plural, one {# heeft} other {# is aangesloten}}", + "tiedWidgets": "Getikte widgets", + "more": "+{count} meer", + "loadError": "De integraties konden niet worden geladen. Probeer het opnieuw voordat u een nieuwe verbinding maakt." }, "category": { "dnsHole": "DNS", @@ -822,7 +1430,10 @@ "analytics": "Analytics", "vpn": "", "mediaLibrary": "Mediabibliotheek", - "uptimeMonitoring": "Uptime-monitoring" + "uptimeMonitoring": "Uptime-monitoring", + "beszel": "Beszel", + "systemMonitoring": "Systeem monitoring", + "security": "Beveiliging" }, "testConnection": { "action": { @@ -1107,6 +1718,22 @@ "slug": { "label": "Slug van statuspagina", "newLabel": "Nieuwe slug van statuspagina" + }, + "wazuhIndexerUrl": { + "label": "Indexering URL", + "newLabel": "Nieuwe indexer-URL" + }, + "wazuhIndexerUsername": { + "label": "Indexeerder gebruikersnaam", + "newLabel": "Nieuwe indexer gebruikersnaam" + }, + "wazuhIndexerPassword": { + "label": "Indexer wachtwoord", + "newLabel": "Nieuw indexer wachtwoord" + }, + "wazuhDashboardUrl": { + "label": "Dashboard URL (optioneel)", + "newLabel": "Nieuwe dashboard URL" } } }, @@ -1115,54 +1742,19 @@ "interact": "Interactie met integraties", "full": "Volledige integratietoegang" }, - "audiobookshelf": { - "name": "Audiobookshelf", - "description": "Self-hosted audioboek- en podcastserver" - }, - "navidrome": { - "name": "Navidrome", - "description": "Self-hosted muziekstreamingserver met Subsonic API-compatibiliteit" - }, - "uptimeKuma": { - "name": "Uptime Kuma", - "description": "Self-hosted uptime-monitoring met openbare statuspagina's", - "secret": { - "slug": { - "description": "De slug van je openbare statuspagina. Standaard 'default' indien niet ingesteld." - }, - "apiKey": { - "description": "Optionele API-sleutel voor geauthenticeerde /metrics-toegang" - } - } - }, - "traefik": { - "name": "", - "description": "" - }, - "paperlessNgx": { - "name": "Paperless-ngx", - "description": "Documentbeheersysteem voor het archiveren en organiseren van gescande documenten" - }, - "patchmon": { - "name": "", - "description": "" - }, - "bazarr": { - "name": "", - "description": "" - }, - "wud": { - "name": "Wat is er een Docker", - "description": "Controleer welke van uw Docker containers afbeeldingen updates beschikbaar hebben" + "llamacpp": { + "name": "llama.cpp", + "description": "Volg een lokale llama.cpp llama-server: gezondheid, model en generatie metrieken" } }, "media": { "plural": "Media", "search": "Vind een media", "field": { - "name": "Naam", + "preview": "Voorvertoning", "size": "Grootte", - "creator": "Maker" + "creator": "Maker", + "actions": "Bedieningen" }, "action": { "upload": { @@ -1190,10 +1782,12 @@ } }, "copy": { - "label": "URL kopiëren" + "label": "URL kopiëren", + "labelNamed": "URL kopiëren voor {name}" }, "open": { - "label": "Media openen" + "label": "Media openen", + "labelNamed": "Open {name}" } }, "noResults": { @@ -1208,7 +1802,6 @@ "add": "Toevoegen", "apply": "Toepassen", "backToOverview": "Terug naar overzicht", - "skip": "Overslaan", "change": "Wijzigen", "create": "Aanmaken", "createAnother": "Aanmaken en opnieuw beginnen", @@ -1231,16 +1824,31 @@ "tryAgain": "Probeer opnieuw", "loading": "Laden", "show": "Weergeven", - "hide": "Verbergen" + "hide": "Verbergen", + "undo": "Herstel", + "editNamed": "{name} bewerken", + "deleteNamed": "{name} verwijderen", + "clearSearch": "Zoekopdracht wissen", + "copy": "Kopiëren", + "copied": "Gekoppeld", + "refresh": "Vernieuwen" + }, + "pagination": { + "pageOf": "Pagina {page} van {totalPages}" }, "here": "hier", + "serviceUrlTemplate": { + "serverTitle": "Usual serveradres", + "urlModeLabel": "Service adres patroon", + "hostPort": "Dezelfde host, verschillende poorten", + "subdomain": "Eén subdomein per service", + "path": "Één pad per dienst" + }, "iconPicker": { "label": "Icoon-URL", + "description": "Zoek in de bibliotheek, plak een afbeelding-URL of upload een bestand.", "header": "Zoek {countIcons} afbeeldingen op naam", "headerLoading": "Afbeeldingen zoeken op naam", - "noResults": "", - "error": "", - "description": "Zoek in de bibliotheek, plak een afbeelding-URL of upload een bestand.", "clear": "Verwijder afbeelding", "uploadImage": "Afbeelding uploaden", "results": "Zoekresultaten afbeeldingen", @@ -1249,7 +1857,9 @@ "otherImages": "Andere afbeeldingen", "urlLoading": "Controleren van afbeelding…", "urlReady": "Afbeelding is klaar voor gebruik", - "urlError": "Deze afbeelding kan niet worden geladen. Controleer de URL en probeer het opnieuw." + "urlError": "Deze afbeelding kan niet worden geladen. Controleer de URL en probeer het opnieuw.", + "noResults": "", + "error": "" }, "colorScheme": { "options": { @@ -1261,7 +1871,6 @@ "information": { "min": "Min.", "max": "Max.", - "days": "Dagen", "hours": "Uren", "minutes": "Minuten" }, @@ -1298,16 +1907,16 @@ }, "userAvatar": { "menu": { - "switchToDarkMode": "Schakel naar donkere modus", - "switchToLightMode": "Schakel naar lichte modus", + "open": "Open accountmenu", "management": "Beheer", - "docker": "", "preferences": "Jouw voorkeuren", "logout": "Uitloggen", "login": "Inloggen", "homeBoard": "Je home-bord", - "loggedOut": "Uitgelogd", - "updateAvailable": "{countUpdates} updates beschikbaar: {tag}" + "updateAvailable": "{countUpdates} updates beschikbaar: {tag}", + "assistant": "Assistent", + "assistantThinking": "Denken", + "modifier": "Mod" } }, "dangerZone": "Gevarenzone", @@ -1355,13 +1964,66 @@ "kilometersPerHour": "km/u", "milesPerHour": "mph" } + }, + "widgetQuery": { + "loading": "Laden widgetgegevens" + }, + "total": "Totaal", + "filesystemUsage": "{count, plural, one {Toon gebruik voor # bestandssysteem} other {Toon gebruik voor # filesystemen}}", + "field": { + "name": "Taaknaam" + }, + "label": { + "new": "Nieuw" + }, + "entity": { + "apps": "Apps", + "boards": "Borden", + "certificates": "Certificaten", + "customWidgets": "Aangepaste widgets", + "groups": "Groepen", + "integrations": "Integraties", + "invites": "Uitnodigingen", + "logs": "Logs", + "media": "Medium", + "searchEngines": "Zoekmachines", + "tasks": "Taken", + "users": "Gebruikers" } }, "section": { - "dynamic": { + "option": { + "showLabel": { + "label": "Label weergeven", + "description": "Toon het containerlabel boven de inhoud." + }, + "collapsible": { + "label": "Toestaan samenvouwen", + "description": "Laat kijkers deze container uitbreiden en uitklappen." + }, + "showOpenAll": { + "label": "Toon open-alle actie", + "description": "Een actie weergeven die elke app opent in deze container in nieuwe tabbladen." + }, + "scrollable": { + "label": "Schuifbaar", + "description": "Houd deze container aan de ingestelde grootte en scroll zijn inhoud in plaats van te groeien." + } + }, + "action": { + "openAllInNewTabsFor": "Open alle apps in {name} in tabbladen" + }, + "openAllInNewTabs": { + "title": "Alles openen in tabbladen", + "text": "Sommige browsers blokkeren om veiligheidsredenen het bulk openen van tabbladen. Homarr kon niet alle vensters openen, omdat je browser deze actie blokkeerde. Sta \"Pop-upvensters openen\" toe en probeer het opnieuw." + }, + "container": { + "untitled": "Naamloze container", "action": { - "create": "Nieuwe dynamische sectie", - "remove": "Dynamische sectie verwijderen" + "create": "Nieuwe container", + "remove": "Container verwijderen", + "expand": "Uitklappen", + "collapse": "Samenvouwen" }, "option": { "title": { @@ -1375,55 +2037,12 @@ } }, "remove": { - "title": "Dynamische sectie verwijderen", - "message": "Weet je zeker dat je deze dynamische sectie wilt verwijderen? Items worden verplaatst naar dezelfde locatie in de bovenliggende sectie." - } - }, - "category": { - "field": { - "name": { - "label": "Naam" - } - }, - "action": { - "create": "Nieuwe categorie", - "edit": "Categorie hernoemen", - "remove": "Categorie verwijderen", - "moveUp": "Omhoog", - "moveDown": "Omlaag", - "createAbove": "Nieuwe categorie hierboven", - "createBelow": "Nieuwe categorie hieronder", - "openAllInNewTabs": "Alles openen in tabbladen" - }, - "create": { - "title": "Nieuwe categorie", - "submit": "Categorie toevoegen" - }, - "remove": { - "title": "Categorie verwijderen", - "message": "Weet je zeker dat je de categorie {name} wilt verwijderen?" - }, - "edit": { - "title": "Categorie hernoemen", - "submit": "Categorie hernoemen" - }, - "menu": { - "label": { - "create": "Nieuwe categorie", - "changePosition": "Positie wijzigen", - "settings": "Instellingen" - } - }, - "openAllInNewTabs": { - "title": "Alles openen in tabbladen", - "text": "Sommige browsers blokkeren om veiligheidsredenen het bulk openen van tabbladen. Homarr kon niet alle vensters openen, omdat je browser deze actie blokkeerde. Sta \"Pop-upvensters openen\" toe en probeer het opnieuw." + "message": "Deze container verwijderen? De inhoud zal naar het omliggende gebied gaan." } } }, "item": { "action": { - "create": "Nieuw item", - "import": "Item importeren", "edit": "Item bewerken", "moveResize": "Item verplaatsen / formaat wijzigen", "duplicate": "Item dupliceren", @@ -1432,7 +2051,7 @@ "menu": { "label": { "settings": "Instellingen", - "refresh": "", + "settingsFor": "Instellingen voor {name}", "options": "", "actions": "" }, @@ -1441,21 +2060,96 @@ "error": "", "loading": "", "idle": "" + }, + "notification": { + "saveError": { + "title": "Kan widget niet opslaan", + "message": "De widget wijzigingen zijn teruggedraaid" + } } }, "create": { "title": "Kies een item om toe te voegen", "search": "Items filteren", - "addToBoard": "Toevoegen aan bord" + "addToBoard": "Toevoegen aan bord", + "addAtPosition": "Item hier toevoegen", + "destination": { + "label": "Toevoegen aan", + "description": "Kies waar de widget moet verschijnen. U kunt hem later nog verplaatsen.", + "mainCanvas": "Hoofd canvas", + "leftRail": "Linker spoor", + "rightRail": "Rechter spoor" + }, + "connectionStatus": { + "ready": "Gereed", + "needsSetup": "Heeft installatie nodig", + "noConnectionRequired": "Geen verbinding nodig" + }, + "customWidget": "Aangepaste widget", + "standalone": "Zelfstandig", + "missingIntegration": { + "title": "Verbind eerst een service", + "noPermission": "Deze widget heeft een compatibele serviceverbinding nodig. Vraag een beheerder om er een te verbinden en probeer het opnieuw." + }, + "notification": { + "success": { + "title": "Widget toegevoegd", + "message": "{name} is toegevoegd aan dit bord.", + "relocatedMessage": "{name} werd toegevoegd aan {destination} omdat de geselecteerde bestemming niet beschikbaar was." + }, + "error": { + "title": "Kan item niet toevoegen", + "message": "Het item kon niet aan dit bord worden toegevoegd" + } + } + }, + "selection": { + "summary": "{count, plural, one {# geselecteerde item} other {# geselecteerde artikel}}", + "selected": "{count, plural, one {# geselecteerd} other {# geselecteerd}}", + "copy": "Kopiëren", + "copied": "{count, plural, one {# item is naar het klembord gekopieerd} other {# items zijn naar het klembord gekopieerd}}", + "copyError": "De geselecteerde items konden niet worden gekopieerd. Uw browser staat mogelijk geen toegang toe tot het klembord.", + "paste": "Plakken", + "pasteShortcut": "Plak gekopieerde items hier (Ctrl / ½ + V)", + "pasted": "{count, plural, one {# item geplakt} other {# artikelen geplakt}}", + "pasteError": "Het klembord kon niet worden gelezen. Uw browser staat mogelijk geen toegang tot het klembord toe.", + "pasteInvalid": "Het klembord bevat geen geldige Homarr-bord.", + "pasteUnavailable": "De gekopieerde items passen niet op dit bord.", + "removed": "{count, plural, one {# item is verwijderd} other {# items zijn verwijderd}}", + "move": "Verplaatsen", + "moveTo": "Geselecteerde items verplaatsen", + "delete": "Verwijderen", + "clear": "Selectie wissen", + "clearShortcut": "Selectie wissen (Escape)", + "saveErrorTitle": "Kan items niet bijwerken", + "saveErrorMessage": "De wijzigingen konden niet worden opgeslagen. Het bord is vernieuwd.", + "moveUnavailableTitle": "Kan geselecteerde items niet verplaatsen", + "moveUnavailableMessage": "De bestemming heeft niet genoeg ruimte voor de hele selectie." }, "moveResize": { "title": "Item verplaatsen / formaat wijzigen", + "entryLabel": "{name}, kolom {column}, rij {row}", + "target": { + "numbered": "{name}, bestemming {index}", + "located": "{name}, {location}, bestemming {index}" + }, + "keyboard": { + "instructions": "Druk op Enter of Spatie om het bewerken van het toetsenbord te starten. Gebruik de pijltjestoetsen om te verplaatsen, Shift plus pijltjestoetsen om te verkleinen en Escape om te stoppen.", + "started": "Toetsenbord bewerken. Gebruik pijltjestoetsen om te verplaatsen, Shift plus pijltjestoetsen wijzigen om te vergroten en Escape om te stoppen.", + "stopped": "Toetsenbord bewerken gestopt.", + "boundary": "Die verandering past niet in deze sectie." + }, "field": { + "section": { + "label": "Sectie of spoor" + }, "width": { - "label": "Breedte" + "label": "Breedte", + "shortLabel": "W" }, "height": { - "label": "Hoogte" + "label": "Hoogte", + "shortLabel": "U" }, "xOffset": { "label": "X offset" @@ -1469,18 +2163,36 @@ "title": "Item bewerken", "tab": { "widget": "Widget bewerken", - "app": "App bewerken" + "app": "App bewerken", + "integration": "Integratie bewerken" }, "app": { "propagationNotice": "Wijzigingen aan deze app worden overal toegepast waar deze wordt gebruikt op alle dashboards." }, + "integration": { + "action": "Contact bewerken", + "description": "Test of repareer een geselecteerde verbinding zonder deze widget te verlaten.", + "editLabel": "{name} integratie bewerken", + "fullAccessRequired": "Volledige toegang vereist", + "propagationNotice": "Wijzigingen in deze integratie gelden overal waar deze wordt gebruikt. De verbinding wordt getest voordat het wordt opgeslagen.", + "loading": "Integratie laden", + "loadError": "Deze integratie kan niet worden geladen. Probeer het opnieuw voordat u de verbindingsinstellingen wijzigt." + }, + "preview": { + "integrationRequired": "Kies een verbinding om deze widget te bekijken.", + "size": "Bestandsgrootte" + }, + "settings": { + "label": "Instellingen widget" + }, "advancedOptions": { "label": "Geavanceerde opties", "title": "Geavanceerde itemopties" }, "field": { "integrations": { - "label": "Integraties" + "label": "Integraties", + "removeLabel": "{name} integratie verwijderen" }, "title": { "label": "Titel" @@ -1494,17 +2206,18 @@ } }, "remove": { - "title": "Item verwijderen", "message": "Weet je zeker dat je dit item wilt verwijderen?" + }, + "advancedFocus": { + "open": "Geavanceerde weergave openen", + "close": "Sluit geavanceerde weergave", + "label": "{widget} geavanceerde weergave" } }, "widget": { "integrationSelect": { "configureIntegrationFirst": "", - "loading": "", - "placeholder": "", - "noResults": "", - "loadError": "" + "placeholder": "" }, "app": { "name": "App", @@ -1513,9 +2226,6 @@ "appId": { "label": "App kiezen" }, - "openInNewTab": { - "label": "In nieuw tabblad openen" - }, "showTitle": { "label": "App naam weergeven" }, @@ -1523,11 +2233,8 @@ "label": "Statuscontrole inschakelen" }, "layout": { - "label": "Lay-out", "option": { - "row": "Horizontaal", "row-reverse": "Horizontaal (omgekeerd)", - "column": "Verticaal", "column-reverse": "Verticaal (omgekeerd)" } }, @@ -1552,23 +2259,60 @@ "name": "Bladwijzers", "description": "Toont meerdere app-links", "option": { - "title": { - "label": "Titel" + "showTitle": { + "label": "Toon widget titel" + }, + "titleSize": { + "label": "Widget titelgrootte (px)" }, "layout": { "label": "Lay-out", "option": { - "row": { - "label": "Horizontaal" - }, - "column": { - "label": "Verticaal" - }, - "grid": { - "label": "Raster" + "adaptive": { + "label": "Adaptief" }, "gridHorizontal": { "label": "Raster horizontaal" + }, + "icons": { + "label": "Pictogrammen" + } + } + }, + "variant": { + "label": "Weergave", + "option": { + "soft": { + "label": "Zacht" + }, + "filled": { + "label": "Gevuld" + }, + "outline": { + "label": "Omlijning" + }, + "plain": { + "label": "Eenvoudig" + } + } + }, + "spacing": { + "label": "Kaart ruimte", + "option": { + "xs": { + "label": "Extra klein" + }, + "sm": { + "label": "Klein" + }, + "md": { + "label": "Gemiddeld" + }, + "lg": { + "label": "Groot" + }, + "xl": { + "label": "Extra groot" } } }, @@ -1581,17 +2325,28 @@ "hideHostname": { "label": "Hostnamen verbergen" }, - "openNewTab": { - "label": "In nieuw tabblad openen" - }, "withBorder": { "label": "Rand weergeven" }, + "grow": { + "label": "Uitvouwen van kaarten om rij te vullen" + }, + "customUrls": { + "label": "Aangepaste links" + }, "items": { "label": "Bladwijzers", - "add": "Bladwijzer toevoegen" + "remove": "Bladwijzer verwijderen", + "apps": { + "label": "Bladwijzers toevoegen", + "description": "Plak URL's of vind bestaande Apps. Sleep de bladwijzers hieronder om ze opnieuw te ordenen.", + "placeholder": "Plak URLs of zoek Apps", + "addUrl": "Voeg deze URL toe", + "hint": "Druk op Enter om een URL toe te voegen. Plak komma gescheiden of één regel URL's om een aantal toe te voegen." + } } - } + }, + "empty": "Een URL of app toevoegen in de widget-instellingen" }, "archiveTeamWarrior": { "name": "", @@ -1600,33 +2355,61 @@ "showBroadcastMessage": { "label": "" } + }, + "noProjectSelected": "Geen project geselecteerd", + "runnerStatus": "Runner: {status}", + "projectId": "Project: {id}", + "sessionReceived": "Sessie ontvangen: {value}", + "sessionSent": "Sessie verzonden: {value}", + "sessionId": "Sessie: {id}", + "startedAt": "{date} gestart", + "emptyItems": "Geen actieve of recente vacatures in deze momentopname", + "metric": { + "running": "Actief", + "completed": "Voltooid", + "failed": "Mislukt", + "canceled": "Geannuleerd", + "download": "downloaden", + "upload": "Uploaden" + }, + "status": { + "running": "Actief", + "completed": "Voltooid", + "failed": "Mislukt", + "canceled": "Geannuleerd", + "stopped": "Gestopt", + "idle": "Niet actief", + "unknown": "Onbekend" + } + }, + "wud": { + "name": "Wat is er een Docker", + "description": "Laat zien hoeveel containers er updates beschikbaar hebben.", + "title": "Wat is er een Docker", + "monitored": "Gecontroleerd", + "updatesAvailable": "{count, plural, one {# update beschikbaar} other {# updates zijn beschikbaar}}", + "updateAvailable": "Update beschikbaar", + "openReleaseNotes": "Open release notities", + "option": { + "showRing": { + "label": "Update ring tonen" + }, + "showUpdateList": { + "label": "Toon container update lijst", + "description": "Lijst van alle gemonitorde container met een afbeelding update beschikbaar" + } } }, "dnsHoleSummary": { "name": "DNS-hole overzicht", "description": "Toont het overzicht van je DNS-hole", "option": { - "layout": { - "label": "Lay-out", - "option": { - "row": { - "label": "Horizontaal" - }, - "column": { - "label": "Verticaal" - }, - "grid": { - "label": "Raster" - } - } - }, "usePiHoleColors": { "label": "Gebruik Pi-Hole kleuren" } }, "error": { - "internalServerError": "DNS-hole overzicht ophalen mislukt", - "integrationsDisconnected": "Geen gegevens beschikbaar, alle integraties verbroken" + "internalServerError": "DNS-hole overzicht ophalen mislukt" }, "data": { "adsBlockedToday": "Vandaag geblokkeerd", @@ -1634,32 +2417,24 @@ "dnsQueriesToday": "Aanvragen vandaag", "domainsBeingBlocked": "Domeinen op blokkadelijst" }, - "domainsTooltip": "Vanwege meerdere integraties kan Homarr het exacte aantal geblokkeerde domeinen niet berekenen" + "domainsTooltip": "Vanwege meerdere integraties kan Homarr het exacte aantal geblokkeerde domeinen niet berekenen", + "status": { + "enabled": "Ingeschakeld", + "disabled": "Uitgeschakeld", + "unknown": "Onbekend" + } }, "dnsHoleControls": { "name": "DNS-hole bedieningen", "description": "Bedien PiHole of AdGuard vanaf je dashboard", "option": { - "layout": { - "label": "Lay-out", - "option": { - "row": { - "label": "Horizontaal" - }, - "column": { - "label": "Verticaal" - }, - "grid": { - "label": "Raster" - } - } - }, "showToggleAllButtons": { "label": "Alles omschakelen knoppen weergeven" } }, "error": { - "internalServerError": "DNS-hole besturen mislukt" + "internalServerError": "DNS-hole besturen mislukt", + "bulkActionsFailed": "{count, plural, one {# actie is mislukt} other {# acties zijn mislukt}}" }, "controls": { "enableAll": "Alles inschakelen", @@ -1670,8 +2445,6 @@ "disabled": "Uitgeschakeld", "processing": "Verwerken", "disconnected": "Verbinding verbroken", - "hours": "Uren", - "minutes": "Minuten", "unlimited": "Laat leeg voor onbeperkt" } }, @@ -1683,16 +2456,10 @@ "label": "Aangepaste titel-/plaatsweergave", "description": "Aangepaste titel of de naam van de stad/het land boven de klok weergeven." }, - "customTitle": { - "label": "Titel" - }, "is24HourFormat": { "label": "24-uursnotatie", "description": "Gebruik de 24-uursnotatie in plaats van de 12-uursnotatie" }, - "showSeconds": { - "label": "Seconden weergeven" - }, "useCustomTimezone": { "label": "Gebruik een vaste tijdzone" }, @@ -1711,29 +2478,295 @@ "label": "Aangepast tijdformaat", "description": "Gebruik ISO 8601 om de tijd op te maken (dit overschrijft andere opties)" }, - "customDateFormat": { - "label": "Aangepast datumformaat", - "description": "Gebruik ISO 8601 om datum op te maken (dit overschrijft andere opties)" - }, "showWeather": { "label": "", "description": "" }, - "weatherLocation": { - "label": "" - }, "isWeatherFormatFahrenheit": { "label": "" + }, + "animateWeatherIcon": { + "label": "Animeer weer icoon", + "description": "Animeer het weericoon. Standaard uitgeschakeld en altijd uitgeschakeld wanneer minder beweging wordt aangevraagd." + }, + "colorWeatherByDayNight": { + "label": "Weer kleur overdag/nacht", + "description": "Tint het weerpictogram en de temperatuur met een dagkleur of een nachtkleur, op basis van of het momenteel dag of nacht op de gekozen locatie is." + }, + "dayWeatherColor": { + "label": "Dag kleur" + }, + "nightWeatherColor": { + "label": "Nacht kleur" + }, + "worldClockCities": { + "label": "Plaatsen wereldklok", + "description": "Voeg tot zes steden toe en bestel maximaal zes voor gevorderde weergave." } + }, + "timezoneList": { + "timezone": "Tijdzone", + "cityLabel": "Stad label", + "searchPlaceholder": "Zoek tijdzones", + "noResults": "Geen tijdzones gevonden", + "unsupportedOption": "Niet-ondersteund: {timeZone}", + "add": "Stad toevoegen", + "remove": "Verwijder {city}", + "reorder": "Herschikken {city}", + "limit": "{count} van {maximum} steden geconfigureerd" + }, + "worldClock": { + "primary": "Primaire klok", + "local": "Lokale tijd", + "today": "vandaag", + "tomorrow": "Morgen", + "yesterday": "gisteren", + "noSecondaryCities": "Voeg steden toe aan widgetopties om ze hier te vergelijken.", + "unsupportedPrimaryTitle": "Primaire tijdzone is niet beschikbaar", + "unsupportedPrimary": "{timeZone} wordt niet ondersteund in deze browser. UTC wordt weergegeven als een duidelijk gemarkeerde terugval.", + "unsupportedTimeZone": "Niet-ondersteunde tijdzone: {timeZone}", + "accessibleTime": "{city}: {time}, {date}, {timeZone}", + "advancedLabel": "Geavanceerde wereldklok", + "cities": "Wereld klokken", + "cityCount": "{count} timezones", + "timeBarLabel": "24-uurs positie voor {city}", + "dayProgress": "{percent}% is verstreken · {hours}h {minutes}m resterend", + "phaseLegend": "Tijd van dag legende", + "tick": { + "midnight": "00", + "morning": "06", + "noon": "12", + "evening": "18", + "end": "24" + }, + "phaseRange": { + "night": "00–05 · 21–24", + "dawn": "05–08", + "day": "08–18", + "dusk": "18–21" + }, + "phase": { + "night": "Nacht", + "dawn": "Dawn", + "day": "dag", + "dusk": "Schemering" + } + } + }, + "airQuality": { + "name": "Luchtkwaliteit & UV", + "description": "Toont luchtkwaliteit, ultraviolette index, verontreinigende stoffen en pollen voor een locatie.", + "option": { + "location": { + "label": "Lucht kwaliteit locatie" + }, + "aqiStandard": { + "label": "AQI standaard", + "options": { + "auto": "Automatisch voor lokalisatie", + "european": "Europese AQI", + "us": "VS AQI" + } + }, + "showUv": { + "label": "Toon UV index" + }, + "showPollutants": { + "label": "Toon verontreinigende concentraties" + }, + "showPollen": { + "label": "Toon pollen concentraties" + } + }, + "category": { + "good": "goed", + "fair": "Redelijk", + "moderate": "Matig", + "unhealthySensitive": "Ongezond voor gevoelige groepen", + "unhealthy": "Niet-gezond", + "poor": "Onvoldoende", + "veryPoor": "Zeer slecht", + "veryUnhealthy": "Zeer ongezond", + "extremelyPoor": "Extreem arm", + "hazardous": "Gevaarlijke", + "unknown": "Geen AQI lezen" + }, + "uv": { + "label": "UV index", + "category": { + "low": "laag", + "moderate": "Matig", + "high": "hoog", + "veryHigh": "Zeer hoog", + "extreme": "Extreem", + "unknown": "Geen uitlezing" + } + }, + "dominantPollutant": "Dominant pollutant", + "aqiLabel": "AQI", + "strongestPollen": "Hoogste pollen", + "unit": { + "concentration": "{value} μg/m3", + "pollen": "{value} grains/m3" + }, + "pollutant": { + "pm2_5": "PM2.5", + "pm10": "PM10", + "ozone": "Ozon", + "nitrogenDioxide": "Nitrogeen dioxide", + "sulphurDioxide": "Sulphur dioxide", + "carbonMonoxide": "Carbon monoxide" + }, + "pollen": { + "alder": "Alder", + "birch": "Berken", + "grass": "Gras", + "mugwort": "Dreuzel", + "olive": "Olijf", + "ragweed": "Ragweed" + }, + "compact": { + "sixHourTrend": "AQI trend voor de komende zes uur" + }, + "advanced": { + "observedAt": "Bijgewerkt op {time}", + "next24Hours": "Volgende 24 uur", + "pollutants": "Vervuilende concentraties", + "pollen": "Pollen concentraties", + "sevenDayForecast": "7-daagse maximale voorspelling", + "aqiValue": "AQI {value}", + "uvValue": "UV {value}", + "uvShort": "UV {value}", + "noForecast": "Geen voorspellingsgegevens beschikbaar" + } + }, + "countdown": { + "name": "Aftellen", + "description": "Traceert aanstaande gebeurtenissen en terugkerende jubilea.", + "option": { + "events": { + "label": "Evenementen", + "description": "Toevoegen en bestellen tot 20 keer of jaarlijks aftellen. Datums zijn ingevoerd in de geselecteerde tijdzone." + }, + "showProgress": { + "label": "Voortgang tonen" + }, + "showSeconds": { + "label": "Toon seconden", + "description": "Houd seconden zichtbaar voor elke aankomende gebeurtenis." + } + }, + "dateTimeEventList": { + "newEvent": "Nieuwe afspraak", + "add": "Afspraak toevoegen", + "remove": "Verwijder {event}", + "reorder": "Herschikken {event}", + "eventLabel": "Gebeurtenis label", + "timezone": "Tijdzone", + "unsupportedOption": "Niet-ondersteund: {timeZone}", + "recurrence": "Herhaalt", + "recurrenceOption": { + "none": "Wordt niet herhaald", + "yearly": "Elk jaar" + }, + "target": "Gebeurtenis datum en tijd", + "trackProgress": "Volg de voortgang vanaf een startdatum", + "start": "Startdatum en tijd vooruitgang", + "confirmDateTime": "Datum en tijd bevestigen", + "limit": "{count} van {maximum} events geconfigureerd" + }, + "empty": { + "title": "Nog geen countdowns", + "description": "Voeg een gebeurtenis toe in widgetopties om te beginnen met aftellen" + }, + "completed": "Voltooid", + "yearly": "Jaarlijks", + "progress": "Evenement voortgang", + "upcoming": "Aankomende", + "completedEvents": "Afgeronde evenementen", + "invalid": { + "title": "Sommige afspraken kunnen niet worden weergegeven", + "description": "{count, plural, one {Eén gebeurtenis heeft een ongeldige datum of niet-ondersteunde tijdzone.} other {# gebeurtenissen hebben een ongeldige datum of niet-ondersteunde tijdzone.}}", + "value": "Unavailable" + }, + "alert": { + "notifications": "Browser notificaties", + "permissionDenied": "Meldingen worden geblokkeerd in deze browser.", + "reached": "Het aftellen heeft zijn doel bereikt." + } + }, + "timer": { + "name": "Timer / Pomodoro", + "description": "Voer een eenvoudige timer of een configureerbare Pomodoro reeks uit.", + "option": { + "mode": { + "label": "Modus", + "options": { + "timer": "Timer", + "pomodoro": "Pomodoro" + } + }, + "timerMinutes": { + "label": "Timer minuten" + }, + "focusMinutes": { + "label": "Minuten focussen" + }, + "shortBreakMinutes": { + "label": "Korte pauze minuten" + }, + "longBreakMinutes": { + "label": "Minuten lang pauze" + }, + "sessionsBeforeLongBreak": { + "label": "Focus-sessies voor een lange pauze" + }, + "autoStartBreaks": { + "label": "Pauzes automatisch starten" + }, + "autoStartFocus": { + "label": "Focussessies automatisch starten" + } + }, + "phase": { + "timer": "Timer", + "focus": "Focus", + "shortBreak": "Korte pauze", + "longBreak": "Lange pauze" + }, + "action": { + "start": "Starten", + "pause": "Onderbreken", + "reset": "Reset" + }, + "attention": { + "timerComplete": "Timer complete", + "phaseReady": "{phase} klaar" + }, + "progress": "Timer vooruitgang: {progress}%", + "compact": { + "completedFocus": "{count, plural, =0 {Geen focussessies voltooid} one {# focus sessie voltooid} other {# focus sessies voltooid}}" + }, + "alert": { + "title": "Timer complete", + "completed": "{phase} voltooid." + }, + "advanced": { + "sequence": "Pomodoro sequence", + "focusSession": "Focus {session}", + "settings": "Permanente instellingen", + "settingsHint": "Gebruik het contextmenu widget om deze board instellingen aan te passen.", + "localAlerts": "Lokale waarschuwingen", + "notifications": "Browser notificaties", + "sound": "Timer geluiden", + "localAlertsHint": "Timer geluiden zijn standaard ingeschakeld. Geluiden en meldingen zijn alleen van toepassing op deze widget in deze browser.", + "notificationsDenied": "Meldingen worden geblokkeerd in deze browser." } }, "minecraftServerStatus": { "name": "Minecraft server status", "description": "Geeft de status van een Minecraft server weer", "option": { - "title": { - "label": "Titel" - }, "domain": { "label": "Serveradres" }, @@ -1753,11 +2786,21 @@ "noStation": "Geen station geselecteerd", "option": { "baseUrl": { - "label": "" + "label": "", + "description": "Aangepaste URL's moeten worden opgelost tot een openbaar IP-adres. Privé en lokale hosts worden afgewezen." }, "station": { - "label": "Station" + "label": "Station", + "placeholder": "Zoek naar een station" } + }, + "error": { + "customSourceUnavailable": "De bron van het tijdschema is niet beschikbaar. Controleer of de URL een openbaar IP-adres oplost.", + "stationSearch": "Niet in staat om te zoeken op stations. Controleer de aangepaste URL en uw board-toegang." + }, + "warning": { + "stale": "Het tijdschema kon niet worden vernieuwd. Vernieuwde aanmeldingen werden laatst bijgewerkt op {time}.", + "staleCompact": "Oude gegevens" } }, "notebook": { @@ -1789,6 +2832,9 @@ "directionRtl": "", "blockquote": "Blokquote", "horizontalLine": "Horizontale lijn", + "details": "Schakel inklapbare sectie", + "expandDetails": "Vouw inklapbare sectie uit", + "collapseDetails": "Samenvouwen inklapbare sectie", "bulletList": "Opsommingslijst", "orderedList": "Gerangschikte lijst", "checkList": "Controlelijst", @@ -1797,16 +2843,20 @@ "link": "Link", "unlink": "Link verwijderen", "image": "Afbeelding insluiten", - "addTable": "Tabel toevoegen", + "insertTable": "Tabel invoegen", + "insertTableSize": "{columns} × {rows} tabel invoegen", "deleteTable": "Tabel verwijderen", "colorCell": "Celkleur", - "mergeCell": "Cellen samenvoegen schakelen", + "mergeCells": "Cellen samenvoegen", + "splitCell": "Cel splitsen", "addColumnLeft": "Kolom ervoor toevoegen", "addColumnRight": "Kolom erna toevoegen", "deleteColumn": "Kolom verwijderen", "addRowTop": "Rij toevoegen vóór", "addRowBelow": "Rij toevoegen ná", - "deleteRow": "Rij verwijderen" + "deleteRow": "Rij verwijderen", + "toggleHeaderRow": "Wissel kopregel", + "toggleHeaderColumn": "Header kolom in-/uitschakelen" }, "align": { "left": "Links", @@ -1817,8 +2867,6 @@ "clearColor": "Kleur wissen", "source": "Bron", "widthPlaceholder": "Waarde in % or pixels", - "columns": "Kolommen", - "rows": "Rijen", "width": "Breedte", "height": "Hoogte" }, @@ -1830,7 +2878,9 @@ "discard": "Aanpassingen weggooien", "keepEditing": "Blijven bewerken" } - } + }, + "saveFailed": "Kan notitie niet opslaan", + "documentStats": "{words, plural, one {# woord} other {# woorden}} {characters, plural, one {# karakter} other {# letter}}" }, "anchorNote": { "name": "Ankernotitie", @@ -1839,9 +2889,6 @@ "noteId": { "label": "Notitie" }, - "showTitle": { - "label": "Titel weergeven" - }, "showUpdatedAt": { "label": "Laatst bijgewerkt weergeven" } @@ -1851,14 +2898,20 @@ "notFound": "Notitie niet gevonden", "noNotes": "Geen notities gevonden", "integrationRequired": "Selecteer eerst een Anchor-integratie", - "updatedAt": "{date} bijgewerkt", "untitled": "Naamloos", - "edit": "Bewerken", - "save": "Opslaan", - "cancel": "Annuleren", "readOnlyViewer": "Je hebt kijktoegang tot deze notitie. Bewerken is uitgeschakeld.", "saveForbidden": "Je hebt geen toestemming om deze notitie te bewerken.", - "saveFailed": "Opslaan van deze notitie mislukt. Probeer het opnieuw." + "saveFailed": "Opslaan van deze notitie mislukt. Probeer het opnieuw.", + "createdAt": "Aangemaakt {date}", + "permission": { + "owner": "Eigenaar", + "editor": "Tekstverwerker", + "viewer": "Bekijker" + }, + "status": { + "pinned": "Vastgezet", + "archived": "Gearchiveerd" + } }, "iframe": { "name": "iFrame", @@ -1917,6 +2970,25 @@ "clickable": { "label": "Klikbaar" } + }, + "state": { + "on": "op", + "off": "UIT", + "unavailable": "Unavailable", + "unknown": "Onbekend" + }, + "advanced": { + "entityId": "Entiteit ID: {id}", + "lastChanged": "Gewijzigd {date}", + "attribute": { + "unit": "Eenheid", + "deviceClass": "Apparaat klasse", + "icon": "Pictogram" + } + }, + "error": { + "loadFailed": "Kan entiteit niet laden", + "toggleFailed": "Kan entiteit niet bijwerken" } }, "smartHome-executeAutomation": { @@ -1932,11 +3004,31 @@ }, "spotlightAction": { "run": "{name} uitvoeren" + }, + "advanced": { + "lastExecuted": "Laatst uitgevoerd op {time}", + "automationId": "Automatisering ID: {id}", + "ready": "Klaar om uit te voeren", + "noPermission": "Geen toestemming om deze automatisering uit te voeren" + }, + "status": { + "running": "Automatische activering", + "success": "Automatisering voltooid" + }, + "error": { + "executeFailed": "Automation kan niet worden uitgevoerd" } }, "stockPrice": { "name": "Aandelen prijs", "description": "Toont de huidige aandelenprijs van een bedrijf", + "advanced": { + "currentPrice": "Huidige prijs", + "previousClose": "Vorige sluiting", + "changePercentage": "Verandering (%)", + "minimum": "Minimum", + "maximum": "Maximum" + }, "option": { "stock": { "label": "Aandelen symbool" @@ -2007,6 +3099,10 @@ "label": "1 maand" } } + }, + "showDetails": { + "label": "Details weergeven", + "description": "Toon de naam, wijziging en tijdbereik in de compacte weergave. Schakel alleen uit voor het symbool en de prijs." } } }, @@ -2034,6 +3130,13 @@ "showUnmonitored": { "label": "Niet-bewaakte items weergeven" } + }, + "advanced": { + "previousMonth": "Toon vorige maand", + "nextMonth": "Volgende maand weergeven", + "eventCount": "{count, plural, one {# event} other {# gebeurtenissen}}", + "loading": "Agenda-afspraken laden...", + "noEvents": "Geen gebeurtenissen in deze maand" } }, "weather": { @@ -2046,16 +3149,18 @@ "disableTemperatureDecimals": { "label": "Temperatuur-decimalen uitschakelen" }, + "animateIcons": { + "label": "Animeer weerpictogrammen" + }, + "showHumidity": { + "label": "Toon vochtigheid" + }, "showCurrentWindSpeed": { - "label": "Toon huidige windsnelheid", - "description": "Alleen op het huidige weer" + "label": "Toon huidige windsnelheid" }, "useImperialSpeed": { "label": "Gebruik mph voor windsnelheid" }, - "location": { - "label": "Weerlocatie" - }, "showCity": { "label": "Stad weergeven" }, @@ -2065,13 +3170,10 @@ "forecastDayCount": { "label": "Aantal weersverwachting-dagen", "description": "Als de widget niet breed genoeg is, worden er minder dagen getoond" - }, - "dateFormat": { - "label": "Datumnotatie", - "description": "Hoe de datum eruit moet zien" } }, "currentWindSpeed": "{currentWindSpeed} {unit}", + "disabled": "Weergegevens zijn niet beschikbaar omdat uitgaande verbindingen zijn uitgeschakeld", "dailyForecast": { "sunrise": "Zonsopgang", "sunset": "Zonsondergang", @@ -2094,6 +3196,47 @@ "thunderstorm": "Onweersbui", "thunderstormWithHail": "Onweer met hagel", "unknown": "Onbekend" + }, + "details": "Toon weer details", + "detailsFor": "Weersgegevens voor {date} tonen", + "advanced": { + "forecast": "7-daagse voorspelling", + "hourlyForecast": "Volgende 24 uur", + "day": "dag", + "time": "Tijd", + "conditions": "Voorwaarden", + "temperature": "Temperatuur", + "feelsLike": "Voelt als {temperature}", + "feelsLikeLabel": "Voelt als", + "feelsLikeRange": "Voelt zoals: {maximum} / {minimum}", + "highLow": "Hoge {maximum} · lage {minimum}", + "observedAt": "Bijgewerkt op {time}", + "humidity": "Luchtvochtigheid", + "averageHumidity": "Gemiddelde luchtvochtigheid: {humidity}%", + "currentHumidity": "Huidige luchtvochtigheid", + "wind": "Wind / gasten ({unit})", + "currentWind": "Huidige wind / gast", + "windValue": "{speed} / {gusts} {unit}", + "windDetail": "Maximale wind / gassen: {speed} / {gusts} {unit}", + "nextHourPrecipitation": "Neerslag volgend uur", + "precipitationChance": "Neerslag kans", + "precipitationValue": "{probability}% · {amount} mm", + "precipitationDetail": "Neerslag: {probability}% · {amount} mm", + "todayUv": "Max. UV index vandaag", + "uvIndex": "Max UV index: {value}", + "daylight": "Daglicht: {duration}", + "hourlyTooltip": "Voelt als {feelsLike}{temperatureUnit} · {amount} mm · {humidity}% vochtigheid · {speed} {speedUnit} wind", + "hourlyTooltipWithoutHumidity": "Voelt als {feelsLike}{temperatureUnit} · {amount} mm · {speed} {speedUnit} wind", + "detailLabel": { + "feelsLike": "Voelt als", + "precipitation": "Neerslag", + "humidity": "Gemiddelde luchtvochtigheid", + "wind": "Maximale wind / gast", + "uv": "Max UV index", + "daylight": "Daylight" + }, + "sun": "Zonsopgang / zonsondergang", + "noForecast": "Geen voorspellingsgegevens beschikbaar" } }, "indexerManager": { @@ -2106,8 +3249,15 @@ }, "title": "Indexeringsbeheerder", "testAll": "Alles testen", + "status": { + "healthy": "Gezond", + "unhealthy": "Niet-gezond", + "disabled": "Uitgeschakeld", + "unknown": "Gezondheid niet beschikbaar" + }, "error": { - "internalServerError": "Indexersstatus ophalen mislukt" + "internalServerError": "Indexersstatus ophalen mislukt", + "testAll": "De indexertest is mislukt. Probeer het opnieuw." } }, "healthMonitoring": { @@ -2136,11 +3286,6 @@ "fileSystem": { "label": "Bestandssysteem info weergeven" }, - "visibleStorageVolumes": { - "label": "", - "description": "", - "placeholder": "" - }, "defaultTab": { "label": "Standaard tab" }, @@ -2163,17 +3308,27 @@ "minutes": "{count} minuten", "used": "Gebruikt", "available": "Beschikbaar", - "lastSeen": "Laatste statusupdate: {lastSeen}" + "lastSeen": "Laatste statusupdate: {lastSeen}", + "updatesAvailable": "{count, plural, one {# update beschikbaar} other {# updates zijn beschikbaar}}", + "rebootRequired": "Opnieuw opstarten vereist", + "rebootNotRequired": "Geen herstart vereist" + }, + "smartStatus": { + "attributesWithinThresholds": "SMART: attributen binnen de drempelwaarden", + "attributesFailed": "SMART: {attributes} mislukt", + "noCriticalWarning": "SMART: geen waarschuwing gemeld door SSD", + "criticalWarning": "SMART: kritische waarschuwing gemeld door SSD" + }, + "gauge": { + "cpuUsage": "CPU-gebruik", + "cpuTemperature": "CPU temperatuur", + "memoryUsage": "Geheugen gebruik", + "gpuUsage": "{name} GPU gebruik" }, - "memory": {}, "error": { "internalServerError": "Gezondheidsstatus ophalen mislukt" }, "cluster": { - "summary": { - "cpu": "CPU", - "memory": "RAM" - }, "resource": { "node": { "name": "Nodes" @@ -2209,8 +3364,6 @@ "table": { "header": { "name": "Naam", - "cpu": "CPU", - "memory": "RAM", "node": "Node" } } @@ -2220,33 +3373,29 @@ "name": "Docker statistieken", "description": "Statistieken van je containers (deze widget kan alleen worden toegevoegd met beheerdersrechten)", "option": { - "columns": { - "label": "" + "endpointIds": { + "label": "Docker omgevingen", + "description": "Laat leeg om containers te tonen in elke Docker omgeving", + "placeholder": "Alle Docker omgevingen" }, - "enableRowSorting": { - "label": "Items sorteren inschakelen" + "containerFilter": { + "label": "Bevat om te filteren" + }, + "filterIsWhitelist": { + "label": "Filteren als witte lijst" }, "defaultSort": { - "label": "Kolom die standaard wordt gebruikt voor sorteren", "option": { "name": "Naam", "state": "Status", "cpuUsage": "CPU-gebruik", "memoryUsage": "Geheugengebruik" } - }, - "descendingDefaultSort": { - "label": "Sorteren omkeren" - }, - "columnOrder": { - "label": "" - }, - "columnWidths": { - "label": "" } }, "error": { "internalServerError": "Ophalen van containerstatistieken mislukt", + "endpointsUnavailable": "Eindpunten van Docker zijn niet beschikbaar", "layoutSaveTitle": "", "layoutSaveMessage": "" }, @@ -2255,7 +3404,6 @@ } }, "coolify": { - "name": "Coolify", "description": "Overzicht van je Coolify-instantie met servers en applicaties", "option": { "showServers": { @@ -2281,17 +3429,49 @@ "internalServerError": "Ophalen van Coolify-gegevens mislukt" }, "server": { - "buildServer": "Build" + "buildServer": "Build", + "resourceCounts": "{applications, plural, one {# app} other {# apps}} / {services, plural, one {# service} other {# diensten}}", + "reachability": "Bereikbaarheid", + "usability": "Bruikbaarheid" + }, + "source": { + "url": "Bron: {url}", + "unavailable": "{source}: unavailable" }, "instances": { "title": "Instanties" + }, + "action": { + "openResource": "Open {name}", + "openLogs": "Open {name} logs", + "showIp": "Toon IP adres", + "hideIp": "IP-adres verbergen" + }, + "status": { + "running": "Actief", + "stopped": "Gestopt", + "exited": "Beëindigd", + "starting": "Starten", + "restarting": "Herstarten", + "unknown": "Onbekend", + "online": "Online", + "offline": "Offline", + "reachable": "Bereikbaar", + "unreachable": "Onbereikbaar", + "usable": "Bruikbaar", + "unusable": "Onbruikbaar" } }, "vpn": { "name": "", "description": "", "serviceUnavailable": "", - "option": {} + "status": { + "running": "Actief", + "notRunning": "Niet actief", + "unavailable": "Unavailable", + "vpn": "VPN: {status}" + } }, "ups": { "name": "UPS", @@ -2318,14 +3498,19 @@ "runtime": "Looptijd", "load": "Belasting", "input": "Invoer", - "output": "Uitvoer" + "output": "Uitvoer", + "batteryVoltage": "Batterij spanning", + "power": "Vermogen", + "temperature": "Temperatuur", + "manufacturer": "Fabrikant", + "model": "Model", + "serial": "Serienummer" }, "error": { "internalServerError": "Ophalen van UPS-gegevens mislukt" } }, "tracearr": { - "name": "Tracearr", "description": "Verbeterde mediaservermonitoring met gedetailleerde stream- en transcoderingsgegevens", "option": { "showStreams": { @@ -2413,10 +3598,7 @@ "label": "Gebeurtenis", "description": "Toon totaal aantal voorkomens van een specifieke gebeurtenis", "placeholder": "Selecteer een gebeurtenis", - "loading": "Gebeurtenissen laden...", - "noEvents": "Geen gebeurtenissen gevonden", - "none": "Geen gebeurtenis", - "configureWebsiteFirst": "Selecteer eerst een website om gebeurtenissen te laden" + "none": "Geen gebeurtenis" }, "chartType": { "label": "Grafiektype", @@ -2447,26 +3629,21 @@ "eventNames": { "label": "Gebeurtenissen", "description": "Selecteer een of meer gebeurtenissen om in een grafiek weer te geven", - "placeholder": "Selecteer gebeurtenissen...", - "loading": "Gebeurtenissen laden...", - "noEvents": "Geen gebeurtenissen gevonden", - "configureWebsiteFirst": "Selecteer eerst een website om gebeurtenissen te laden" + "placeholder": "Selecteer gebeurtenissen..." }, "topCount": { "label": "Te tonen items", "description": "Aantal topitems om weer te geven (max 500)" + }, + "events": { + "loading": "Events worden geladen...", + "noEvents": "Geen evenementen gevonden", + "configureWebsiteFirst": "Selecteer eerst een website om afspraken te laden" } }, "event": { - "occurrences": "gebeurtenissen", "label": "gebeurtenissen" }, - "topPages": { - "direct": "Direct" - }, - "topReferrers": { - "direct": "Direct" - }, "events": { "selectPrompt": "Selecteer gebeurtenissen om in een grafiek weer te geven" }, @@ -2475,6 +3652,9 @@ "noWebsite": "Geen website geconfigureerd", "noData": "Geen gegevens beschikbaar", "internalServerError": "Ophalen van Umami gegevens mislukt" + }, + "top": { + "direct": "Directe" } }, "common": { @@ -2502,7 +3682,8 @@ }, "integration": { "noData": "Geen integratie gevonden", - "description": "Klik om een nieuwe integratie aan te maken" + "description": "Klik om een nieuwe integratie aan te maken", + "manage": "Integraties beheren" }, "app": { "noData": "Geen app gevonden", @@ -2513,7 +3694,61 @@ "noIntegration": "Geen integratie geselecteerd", "noData": "Geen integratiegegevens beschikbaar" }, - "option": {} + "integrationDisconnected": "Geen gegevens beschikbaar, alle integraties verbroken", + "updatedAt": "{date} bijgewerkt", + "title": { + "label": "Titel" + }, + "openInNewTab": { + "label": "In nieuw tabblad openen" + }, + "showTitle": { + "label": "Toon titel" + }, + "weatherLocation": { + "label": "Weerlocatie" + }, + "layout": { + "label": "Lay-out", + "option": { + "horizontal": "Horizontaal", + "vertical": "Verticaal", + "grid": "Raster" + } + }, + "select": { + "loading": "Laden...", + "loadError": "Laden van opties mislukt" + }, + "dateFormat": { + "label": "Datumnotatie", + "description": "Hoe de datum eruit moet zien" + }, + "visibleStorageVolumes": { + "label": "Zichtbare opslagvolumes", + "description": "Alleen beschikbaar wanneer elke geselecteerde integratie OpenMediaVault of Synolog is. Laat leeg om alle gedetecteerde opslagvolumes te tonen.", + "placeholder": "Selecteer opslagvolumes" + }, + "tableOptions": { + "columns": { + "label": "Kolommen om te laten zien" + }, + "columnOrder": { + "label": "Kolomvolgorde" + }, + "columnWidths": { + "label": "Kolom breedtes" + }, + "enableRowSorting": { + "label": "Items sorteren inschakelen" + }, + "defaultSort": { + "label": "Kolom die standaard wordt gebruikt voor sorteren" + }, + "invertSorting": { + "label": "Sorteren omkeren" + } + } }, "video": { "name": "Video stream", @@ -2572,6 +3807,7 @@ "transcoding": "", "paused": "", "remaining": "", + "seasonEpisode": "S{season} E{episode}", "metadata": { "title": "Statistieken voor nerds", "video": { @@ -2589,11 +3825,16 @@ "resolution": "Resolutie", "target": "Doel codec" } - } + }, + "unknownUser": "Onbekende gebruiker" + }, + "summary": { + "sessions": "{count, plural, one {# sessie} other {# sessies}}", + "playing": "{count} speelt", + "transcoding": "{count} transcodering" } }, "paperlessNgx": { - "name": "Paperless-ngx", "description": "Overzicht van je Paperless-ngx documentenarchief", "documentsTotal": "Totaal documenten", "documentsInbox": "Inbox", @@ -2638,7 +3879,6 @@ } }, "patchmon": { - "name": "", "description": "", "title": "", "totalHosts": "", @@ -2705,36 +3945,30 @@ "description": "" }, "hostsNeedingUpdatesWarningAt": { - "label": "", - "description": "" + "label": "" }, "hostsNeedingUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "" }, "securityUpdatesThresholdMode": { "label": "", "description": "" }, "securityUpdatesWarningAt": { - "label": "", - "description": "" + "label": "" }, "securityUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "" }, "hostsWithSecurityUpdatesThresholdMode": { "label": "", "description": "" }, "hostsWithSecurityUpdatesWarningAt": { - "label": "", - "description": "" + "label": "" }, "hostsWithSecurityUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "" }, "upToDateHostsThresholdMode": { "label": "", @@ -2753,12 +3987,10 @@ "description": "" }, "totalOutdatedPackagesWarningAt": { - "label": "", - "description": "" + "label": "" }, "totalOutdatedPackagesCriticalAt": { - "label": "", - "description": "" + "label": "" }, "showOsDistribution": { "label": "", @@ -2789,6 +4021,14 @@ "bars": "", "donut": "" } + }, + "threshold": { + "warningAt": { + "description": "Voer geel in wanneer de waarde deze drempelwaarde bereikt" + }, + "criticalAt": { + "description": "Voer rood in wanneer de waarde deze drempelwaarde bereikt" + } } }, "error": { @@ -2796,12 +4036,12 @@ } }, "bazarr": { - "name": "", "description": "", "episodes": "", "movies": "", "providers": "", "status": "", + "announcements": "Mededelingen", "option": { "showMissingEpisodes": { "label": "", @@ -2848,7 +4088,8 @@ "users": "Gebruikers", "photos": "Foto's", "videos": "Video's", - "storage": "Gebruikte opslag" + "storage": "Gebruikte opslag", + "albumLimit": "Grootste albums (tot {count} getoond)" }, "immich-albumCarousel": { "name": "Immich Album", @@ -2872,24 +4113,21 @@ } }, "description": "", - "noPhotos": "" + "noPhotos": "", + "albumPhoto": "Album foto", + "actions": { + "previousPhoto": "Vorige foto", + "nextPhoto": "Volgende foto", + "pauseSlideshow": "Pause slideshow", + "resumeSlideshow": "Diavoorstelling hervatten", + "toggleSlideshow": "Pauzeer of hervatten diashow", + "photo": "Foto {number}" + } }, "downloads": { "name": "Client downloaden", "description": "Geeft je de mogelijkheid om downloads van torrent- en usenet-clients te bekijken en beheren.", "option": { - "columns": { - "label": "Kolommen om te laten zien" - }, - "enableRowSorting": { - "label": "Items sorteren inschakelen" - }, - "defaultSort": { - "label": "Kolom die standaard wordt gebruikt voor sorteren" - }, - "descendingDefaultSort": { - "label": "Sorteren omkeren" - }, "showCompletedUsenet": { "label": "Usenet-items weergeven die zijn gemarkeerd als voltooid" }, @@ -2914,12 +4152,6 @@ "limitPerIntegration": { "label": "Beperk items per integratie", "description": "Hiermee wordt het aantal items dat per integratie wordt getoond beperkt, niet globaal" - }, - "columnOrder": { - "label": "" - }, - "columnWidths": { - "label": "" } }, "errors": { @@ -2951,7 +4183,7 @@ }, "id": { "columnTitle": "ID", - "detailsTitle": "" + "detailsTitle": "ID" }, "integration": { "columnTitle": "Integratie" @@ -3080,6 +4312,10 @@ "mediaRequests-requestList": { "name": "Media-aanvragen lijst", "description": "Bekijk een lijst met alle media-aanvragen van je Overseerr of Jellyseerr instantie", + "empty": { + "title": "Nog geen mediaverzoeken", + "description": "Zoek naar een film of toon om een aanvraag te starten." + }, "option": { "linksTargetNewTab": { "label": "Links in nieuw tabblad openen" @@ -3113,12 +4349,16 @@ "failed": "Mislukt", "completed": "Voltooid" }, + "unknown": "Onbekend", "toBeDetermined": "TBD" }, "mediaRequests-requestStats": { "name": "Media-aanvragen statistieken", "description": "Statistieken over je media-aanvragen", - "option": {}, + "empty": { + "title": "Nog geen aanvraagactiviteit", + "description": "Statistieken verschijnen na het eerste media-verzoek." + }, "titles": { "stats": { "main": "Mediastatistieken", @@ -3128,8 +4368,7 @@ "declined": "Reeds geweigerd", "available": "Reeds beschikbaar", "tv": "TV aanvragen", - "movie": "Film aanvragen", - "total": "Totaal" + "movie": "Film aanvragen" }, "users": { "main": "Grootste gebruikers", @@ -3155,7 +4394,6 @@ }, "currentIndex": "{start}-{end} van {total}", "healthCheck": { - "title": "Gezondheidscontrole", "queued": "In wachtrij", "status": { "healthy": "Gezond", @@ -3164,41 +4402,36 @@ }, "panel": { "statistics": { - "empty": "Leeg", - "transcodes": "Transcodes", - "transcodesCount": "Transcodes: {value}", - "healthChecksCount": "Gezondheidscontroles: {value}", "filesCount": "Bestanden: {value}", "savedSpace": "Bespaarde ruimte: {value}", - "healthChecks": "Gezondheidscontroles", "videoCodecs": "Codecs", "videoContainers": "Containers", "videoResolutions": "Resoluties" }, "workers": { - "empty": "Leeg", "table": { - "file": "Bestand", "eta": "ETA", - "progress": "Voortgang", - "transcode": "Transcoderen", - "healthCheck": "Gezondheidscontrole" + "progress": "Voortgang" } }, "queue": { - "empty": "Leeg", "table": { - "file": "Bestand", - "size": "Grootte", - "transcode": "Transcoderen", - "healthCheck": "Gezondheidscontrole" + "size": "Grootte" } + }, + "common": { + "empty": "Leeg", + "file": "Bestand", + "healthCheck": "Gezondheidscontrole", + "transcode": "Transcoderen", + "transcodes": "Transcodes: {value}", + "healthChecks": "Gezondheidscontroles: {value}" } } }, "mediaMissing": { "name": "", - "description": "", + "description": "Toont ontbrekende en in de wachtrij geplaatste films, afleveringen en boeken van {radarr}, {sonarr} en {bindery}", "option": { "showMissing": { "label": "" @@ -3216,7 +4449,8 @@ }, "type": { "movie": "Film", - "episode": "" + "episode": "", + "book": "Boek" }, "empty": { "missing": "", @@ -3247,6 +4481,13 @@ "showPosterImage": { "label": "Posterafbeelding weergeven" } + }, + "error": { + "allFeedsFailed": "Kan RSS feeds niet laden. Controleer de feed URL's en probeer het opnieuw." + }, + "warning": { + "partial": "{count, plural, one {# RSS feed kon niet worden geladen} other {# RSS feeds konden niet worden geladen}}", + "stale": "RSS feeds konden niet worden vernieuwd. Eerder geladen items worden getoond." } }, "releases": { @@ -3322,17 +4563,8 @@ "label": "Reguliere expressie" } }, - "edit": { - "label": "Bewerken" - }, "editForm": { - "title": "Archief bewerken", - "cancel": { - "label": "Annuleren" - }, - "confirm": { - "label": "Bevestigen" - } + "title": "Archief bewerken" }, "importForm": { "title": "Importeren vanuit Docker" @@ -3349,8 +4581,7 @@ "label": "", "token": "", "configured": "", - "notConfigured": "", - "save": "" + "notConfigured": "" } } }, @@ -3377,17 +4608,32 @@ "noProviderResponse": "Geen reactie van aanbieder", "unexpected": "" } - } + }, + "expandDetails": "Toon details van {name}", + "collapseDetails": "Verberg details van {name}" }, "networkControllerSummary": { - "option": {}, - "card": { - "vpn": { - "countConnected": "{count} verbonden" + "advanced": { + "updated": "Bijgewerkt", + "metric": { + "latency": "Latentie", + "ping": "Ping", + "uptime": "Uptime", + "users": "Gebruikers", + "guests": "Gasten" } }, + "card": { + "vpn": { + "countConnected": "{count, plural, one {# heeft} other {# is aangesloten}}", + "label": "VPN" + }, + "wan": "WAN", + "web": "Internet", + "wifi": "Wi-Fi", + "lan": "LAN" + }, "error": { - "integrationsDisconnected": "Geen gegevens beschikbaar, alle integraties verbroken", "unknownContentOption": "Onbekende inhoudsoptie voor netwerkcontroller samenvatting widget: " }, "name": "Netwerkcontroller samenvatting", @@ -3424,7 +4670,6 @@ } }, "error": { - "integrationsDisconnected": "Geen gegevens beschikbaar, alle integraties verbroken", "unknownContentOption": "Onbekende inhoudsoptie voor netwerkstatus widget: " }, "name": "Netwerkstatus", @@ -3454,7 +4699,6 @@ "versiontitle": "Versies", "cputitle": "CPU-gebruik", "memorytitle": "Geheugen gebruik", - "cpu": "Processor", "memory": "Geheugen", "interfaces": { "name": "naam", @@ -3462,6 +4706,16 @@ "recv": "Ontvangen", "title": "Netwerkinterfaces" } + }, + "empty": { + "noInterfaces": "Nog geen netwerkgegevens" + }, + "versionUnknown": "Onbekende versie", + "metricAccessible": "{metric}: {value}%, {status}", + "status": { + "normal": "normaal", + "warning": "Waarschuwing", + "critical": "Kritiek" } }, "notifications": { @@ -3471,8 +4725,21 @@ "option": { "hideLogos": { "label": "" + }, + "messageFormat": { + "label": "Formaat bericht", + "option": { + "auto": "Automatisch", + "plain": "Onopgemaakte tekst", + "markdown": "Markdown", + "html": "HTML" + } } - } + }, + "openService": "Melding service openen", + "deleteNotification": "Melding bij Gotify verwijderen", + "deleteFailed": "Kan melding niet verwijderen", + "deleteFailedMessage": "De notificatie kon niet worden verwijderd. Probeer het opnieuw." }, "speedtestTracker": { "name": "Speedtest Tracker", @@ -3514,7 +4781,6 @@ } }, "uptimeKuma": { - "name": "Uptime Kuma", "description": "Bewaak uptime-statistieken van je Uptime Kuma statuspagina", "option": { "showAverageUptime": { @@ -3551,10 +4817,14 @@ }, "error": { "internalServerError": "" + }, + "status": { + "up": "Totaal up", + "down": "Totaal down", + "paused": "Gepauzeerd" } }, "traefik": { - "name": "", "description": "", "option": { "showTcp": { @@ -3575,7 +4845,6 @@ }, "resource": { "routers": "", - "services": "", "middlewares": "" }, "status": { @@ -3585,7 +4854,20 @@ }, "error": { "internalServerError": "" - } + }, + "resourceType": { + "router": "Router", + "service": "Diensten", + "middleware": "Middleware" + }, + "resourceStatus": { + "enabled": "Ingeschakeld", + "disabled": "Uitgeschakeld", + "warning": "Waarschuwing", + "error": "Fout", + "unknown": "Onbekend" + }, + "failedEndpoint": "Mislukt: {endpoint}" }, "audioStats": { "name": "", @@ -3651,9 +4933,7 @@ "label": "Zichtbare grafieken", "description": "Selecteer de grafieken die je zichtbaar wilt maken.", "option": { - "cpu": "Processor", "memory": "Geheugen", - "gpu": "GPU", "network": "Netwerk" } }, @@ -3668,12 +4948,11 @@ } }, "card": { - "cpu": "CPU", "memory": "MEM", - "gpu": "GPU", "network": "NET", "up": "OMHOOG", - "down": "OMLAAG" + "down": "OMLAAG", + "memoryTooltip": "{used} / {available} ({percent}%)" } }, "systemDisks": { @@ -3699,151 +4978,88 @@ }, "showBackgroundBar": { "label": "Gebruiksbalk op achtergrond weergeven" - }, - "visibleStorageVolumes": { - "label": "", - "description": "", - "placeholder": "" } }, "status": { - "unhealthy": "Niet-gezond" + "unhealthy": "Niet-gezond", + "smart": "SLIMME", + "free": "{percentage}% gratis" + } + }, + "customApi": { + "name": "Aangepaste widget", + "description": "Geef een geconfigureerde JSX-definitie weer.", + "customJsx": { + "noTemplate": "Geen JSX-sjabloon is geconfigureerd.", + "templateWarnings": "{count} template waarschuwingen:", + "requestIdRequired": "Deze netwerkcontrole vereist een requestId.", + "unsavedPreview": "Voer de initiële verzoektest uit in de editor voordat de benoemde aanvragen worden getest.", + "invalidParams": "De aanvraagparameters zijn ongeldig.", + "loading": "Verzoek laden...", + "loadRequest": "Laad verzoek", + "requestFailed": "De aanvraag is mislukt.", + "retry": "Opnieuw proberen", + "actionCompleted": "Actie met succes voltooid.", + "actionSimulated": "Actie gesimuleerd; er is geen aanvraag verzonden.", + "actionsDisabledEditMode": "Acties zijn uitgeschakeld als het bord in de bewerkingsmodus is.", + "widgetItemUnavailable": "Dit widget item is niet beschikbaar.", + "toggle": "Omschakelen", + "copied": "Gekoppeld", + "confirmDelete": "Bevestig deze destructieve actie." + }, + "option": { + "definitionId": { + "label": "Aangepaste widget" + }, + "refreshInterval": { + "label": "", + "description": "" + } + }, + "noDefinition": "", + "definitionNotFound": "Aangepaste widget niet beschikbaar", + "migrationRequired": "Deze oudere aangepaste widget is behouden, maar moet worden gemigreerd naar aangepaste JSX v2 vanuit Beheer aangepaste widgets voordat het kan worden uitgevoerd.", + "manageMigration": "Open Beheer aangepaste widgets", + "contactAdmin": "Neem contact op met een beheerder.", + "configurationNeedsRepair": "De opties van deze widget zijn gewijzigd. Bewerk de widget om de configuratie te herstellen.", + "removeFromBoard": "Verwijderen van bord", + "editModePending": "Sla het bord op om deze widget te laden.", + "picker": { + "group": "Aangepaste JSX widgets", + "empty": "Geen aangepaste widgets gevonden", + "preview": "Voorvertoning", + "sources": "{count, plural, one {# bron} other {# bronnen}}", + "requests": "{count, plural, one {# aanvraag} other {# verzoeken}}", + "migrationRequired": "Migratie vereist", + "migrationDescription": "Deze geplaatste v1 widget kan nog niet worden uitgevoerd. Kopieer zijn redact prompt naar een LLM, plak vervolgens het enkele JSON antwoord in Homarr.", + "manageMigration": "Open Beheer aangepaste widgets", + "contactAdmin": "Neem contact op met een beheerder." + }, + "configuration": { + "needsAttention": "Configuratie vereist aandacht: {message}", + "advancedOptions": "Geavanceerde opties", + "invalidJson": "Ongeldige JSON" } }, "beszelSystemTable": { "name": "Beszel-systemen (tabel)", "description": "Tabelweergave van alle door Beszel bewaakte systemen met sorteerbare kolommen en statusindicatoren", "option": { - "statusFilter": { - "label": "Statusfilter" - }, "sortBy": { "label": "Sorteer op" }, "sortDirection": { "label": "Sorteerrichting" - }, - "showCpu": { - "label": "Toon CPU" - }, - "showMemory": { - "label": "Toon geheugen" - }, - "showDisk": { - "label": "Toon schijf" - }, - "showGpu": { - "label": "Toon GPU" - }, - "showLoadAvg": { - "label": "Toon gemiddelde belasting" - }, - "showNet": { - "label": "Toon netwerk" - }, - "showTemp": { - "label": "Toon temperatuur" - }, - "showBattery": { - "label": "Toon batterij" - }, - "showServices": { - "label": "Toon services" - }, - "showUptime": { - "label": "Toon uptime" - }, - "showAgent": { - "label": "Toon agentversie" - }, - "columnOrder": { - "label": "" - }, - "columnWidths": { - "label": "" } }, - "noRecords": "Geen systemen gevonden", "error": { - "internalServerError": "", "layoutSaveTitle": "", "layoutSaveMessage": "" - }, - "column": { - "system": "Systeem", - "cpu": "CPU", - "memory": "Geheugen", - "disk": "Schijf", - "gpu": "GPU", - "loadAvg": "Gem. belasting", - "net": "Net", - "temp": "Temp", - "battery": "Bat", - "services": "Diensten", - "uptime": "Uptime", - "agent": "Agent" } }, "beszelSystemGrid": { "name": "Beszel-systemen (raster)", - "description": "Kaartrasterweergave van alle door Beszel bewaakte systemen met realtime metingen", - "option": { - "statusFilter": { - "label": "Statusfilter" - }, - "showCpu": { - "label": "Toon CPU" - }, - "showMemory": { - "label": "Toon geheugen" - }, - "showDisk": { - "label": "Toon schijf" - }, - "showGpu": { - "label": "Toon GPU" - }, - "showLoadAvg": { - "label": "Toon gemiddelde belasting" - }, - "showNet": { - "label": "Toon netwerk" - }, - "showTemp": { - "label": "Toon temperatuur" - }, - "showBattery": { - "label": "Toon batterij" - }, - "showServices": { - "label": "Toon services" - }, - "showUptime": { - "label": "Toon uptime" - }, - "showAgent": { - "label": "Toon agentversie" - } - }, - "error": { - "internalServerError": "" - }, - "empty": { - "noSystems": "" - }, - "metric": { - "cpu": "CPU", - "memory": "Geheugen", - "disk": "Schijf", - "gpu": "GPU", - "loadAvg": "Gem. belasting", - "net": "Net", - "temp": "Temp", - "battery": "Bat", - "services": "Diensten", - "uptime": "Uptime", - "agent": "Agent" - } + "description": "Kaartrasterweergave van alle door Beszel bewaakte systemen met realtime metingen" }, "beszelAlerts": { "name": "Beszel-waarschuwingen", @@ -3857,11 +5073,12 @@ } }, "empty": "Geen waarschuwingen geconfigureerd", - "error": { - "internalServerError": "" - }, "history": "Geschiedenis", "resolved": "Opgelost", + "alertDescription": { + "statusDuration": "Omlaag voor {minutes} min", + "threshold": "Overschrijdt {value} over een {minutes} min" + }, "status": { "triggered": "Geactiveerd", "ok": "OK" @@ -3908,16 +5125,16 @@ "noSystems": "" }, "error": { - "internalServerError": "", "liveConnectionFailed": "", "switchToHistorical": "", - "systemNotFound": "" + "systemNotFound": "", + "selectionSaveTitle": "Kan selectie niet opslaan", + "selectionSaveMessage": "De selectie van het systeem of de periode kon niet worden opgeslagen. Probeer het opnieuw." }, "chart": { "cpu": { "title": "CPU-gebruik", - "subtitle": "Gemiddeld systeembreed CPU-gebruik", - "series": "CPU" + "subtitle": "Gemiddeld systeembreed CPU-gebruik" }, "memory": { "title": "Geheugengebruik", @@ -3959,39 +5176,550 @@ "title": "Docker netwerk I/O", "subtitle": "Netwerkverkeer van Docker-containers" } + }, + "period": { + "live": "Zichtbaar", + "oneHour": "1u", + "twelveHours": "12u", + "oneDay": "24u", + "oneWeek": "1 uur", + "thirtyDays": "30D" } }, - "wud": { - "name": "Wat is er een Docker", - "description": "Laat zien hoeveel containers er updates beschikbaar hebben.", - "title": "Wat is er een Docker", - "monitored": "Gecontroleerd", - "updatesAvailable": "{count, plural, one {# update beschikbaar} other {# updates zijn beschikbaar}}", - "updateAvailable": "Update beschikbaar", - "openReleaseNotes": "Open release notities", + "assistant": { + "name": "Assistent", + "description": "Neem een compleet gesprek rechtstreeks op je bord.", + "unavailable": { + "title": "Assistent niet beschikbaar", + "description": "Log in en vraag een beheerder om de assistent te configureren vanuit het beheerpaneel." + }, + "compact": { + "title": "Assistent", + "description": "Pas deze widget aan om hier te chatten, of open het volledige gesprek.", + "open": "Assistent openen", + "openTitle": "Assistent geopend in het zijpaneel", + "openDescription": "Het gesprek blijft op één actief terrein.", + "returnToWidget": "Het gesprek naar deze widget retourneren", + "otherWidgetTitle": "Assistent actief in een andere widget", + "otherWidgetDescription": "Slechts één gespreksoppervlak blijft actief per keer.", + "useHere": "Gebruik de assistent in deze widget" + } + }, + "beszel": { + "error": { + "internalServerError": "Kan geen verbinding maken met Beszel. Controleer uw integratie-instellingen." + }, + "empty": { + "noSystems": "Geen systemen gevonden" + }, + "options": { + "statusFilter": { + "label": "Status filter" + }, + "showCpu": { + "label": "Toon CPU" + }, + "showMemory": { + "label": "Toon geheugen" + }, + "showDisk": { + "label": "Toon schijf" + }, + "showGpu": { + "label": "Toon GPU" + }, + "showLoadAvg": { + "label": "Gemiddelde belasting weergeven" + }, + "showNet": { + "label": "Netwerk weergeven" + }, + "showTemp": { + "label": "Temperatuur weergeven" + }, + "showBattery": { + "label": "Batterij weergeven" + }, + "showServices": { + "label": "Toon services" + }, + "showUptime": { + "label": "Toon uptime" + }, + "showAgent": { + "label": "Toon versie medewerker" + } + }, + "metric": { + "system": "Systeem", + "source": "Integratie", + "hostname": "Hostnaam", + "cpuModel": "CPU model", + "cores": "Cores", + "memoryTotal": "Geheugen totaal", + "memory": "Geheugen", + "disk": "Schijf", + "loadAvg": "Lading Gem.", + "net": "Netto", + "temp": "Tijdelijk", + "battery": "Vleermuis", + "uptime": "Uptime", + "agent": "Agent" + } + }, + "llamacpp": { + "name": "llama.cpp", + "description": "Toon de gezondheid, geladen model en generatiesnelheid van uw lokale llama.cpp server.", + "title": "llama.cpp", + "status": { + "unhealthy": "Ongezond ({status})" + }, + "idle": "Niet actief", + "speedTooltip": { + "current": "Huidige generatie snelheid", + "average": "Gemiddelde generatiesnelheid sinds opstarten", + "request": "Gemiddelde snelheid sinds dit verzoek is gestart" + }, + "busy": "{count, plural, one {# verzoek loopt} other {# verzoeken lopen}}", + "modelInfo": { + "context": "Context", + "size": "Bestands grootte", + "parameters": "Parameters", + "model": "Model", + "quantization": "Kwantisering" + }, + "stats": { + "tokensProcessed": "Tokens verwerkt", + "contextUsage": "Context / KV gebruik", + "cacheHitRate": "Trek percentage cache vragen", + "tokensGenerated": "Tokens gegenereerd" + }, + "error": { + "unreachable": "llama-server is niet bereikbaar" + }, + "unit": { + "speed": "{value} t/s", + "parameters": "{value}B", + "none": "—", + "speedShort": "/s" + }, "option": { "showTitle": { "label": "Toon titel" }, - "showRing": { - "label": "Update ring tonen" + "showModelInfo": { + "label": "Toon voorbeeld info" }, - "layout": { - "label": "Lay-out", + "showContextUsage": { + "label": "Context gebruik weergeven" + }, + "showCacheHitRate": { + "label": "Toon cache hit percentage" + }, + "showSpeedStats": { + "label": "Snelheidsstatistieken weergeven" + }, + "showRequests": { + "label": "Aanvraaglast weergeven" + }, + "showTokenStats": { + "label": "Token totalen tonen" + }, + "showSpeculative": { + "label": "Toon speculatieve decodering" + } + }, + "advanced": { + "promptSpeed": "Vragenlijst snelheid", + "avgSpeed": "Gem. generatie", + "requests": "Aanvragen", + "deferred": "Uitgesteld", + "slots": "{processing}/{total} slots bezet", + "speculative": "Speculatieve decodering", + "avgPrompt": "Gemiddelde prompt", + "specDrafts": "Spec. concepten", + "specAccepted": "Spec. geaccepteerde tokens", + "specDraftTokens": "Spec. ontwerp tokens" + } + }, + "stats": { + "name": "Statistieken", + "description": "Combineer statistieken van uw integraties in één configureerbare widget.", + "configure": "Metrieken configureren", + "refresh": "Statistieken vernieuwen", + "empty": "Open widget instellingen, selecteer integraties en voeg statistieken toe.", + "editorHelp": "Voeg statistieken toe van de geselecteerde integraties voor deze widget. Wijzigingen worden opgeslagen in uw dashboard.", + "source": "Integratie", + "metric": "Metrisch", + "noMetrics": "Geen statistieken beschikbaar voor deze integratie", + "add": "Metrische eenheden toevoegen", + "label": "Aangepast label", + "hidden": "Verborgen", + "compact": "Compacte getallen", + "moveUp": "Omhoog", + "moveDown": "Omlaag", + "remove": "Metrische eenheden verwijderen", + "loading": "Laden…", + "unavailable": "Unavailable", + "refreshFailed": "Vernieuwen mislukt — opgeslagen gegevens tonen", + "stale": "Opgeslagen gegevens — verversen om bij te werken", + "table": { + "value": "Waarde", + "status": "Status" + }, + "option": { + "table": { + "label": "Tabel weergave" + }, + "rows": { + "label": "Compacte rijen" + }, + "showIcon": { + "label": "Toon bronpictogram" + }, + "spacing": { + "label": "Afstand", "option": { - "horizontal": { - "label": "Horizontaal" + "xs": { + "label": "Compacte" }, - "vertical": { - "label": "Verticaal" + "sm": { + "label": "Comfortabel" + }, + "md": { + "label": "Ruime" } } }, - "showUpdateList": { - "label": "Toon container update lijst", - "description": "Lijst van alle gemonitorde container met een afbeelding update beschikbaar" + "entries": { + "label": "Statistieken" + }, + "plain": { + "label": "Verwijder achtergronden van kaart" } - } + }, + "fetchFailed": "Kan statistieken niet ophalen", + "viewOptions": "Deze weergave aanpassen", + "moreMetrics": "{count} meer in de geavanceerde weergave", + "localHelp": "Opmaak, opmaak en zichtbaarheid zijn alleen van toepassing op deze weergave. Gedeeld bord instellingen blijven hetzelfde.", + "plain": "Verwijder achtergronden van kaart", + "resetView": "Reset weergave", + "allHidden": "Alle statistieken zijn verborgen in deze weergave. Gebruik Aanpassen van deze weergave om ze te herstellen." + }, + "wazuh": { + "target": { + "api": "Wazuh server API", + "indexer": "Wazuh indexer", + "wazuh": "Wazuh" + }, + "severity": { + "low": "laag", + "medium": "Gemiddeld", + "high": "hoog", + "critical": "Kritiek" + }, + "error": { + "unauthorized": { + "title": "{target} heeft de inloggegevens geweigerd", + "description": "Controleer de gebruikersnaam en het wachtwoord die zijn opgeslagen in de integratie van de Wazuh. De server API (poort 55000) en de indexer (poort 9200) gebruiken afzonderlijke gebruikers." + }, + "certificate": { + "title": "{target} certificaat wordt niet vertrouwd", + "description": "Wazuh gebruikt standaard een zelfondertekend certificaat. Voer \"Test connectie\" uit op de integratie en vertrouwt het certificaat, of voeg je CA toe onder Instellingen → Certificaten." + }, + "unreachable": { + "title": "Kan {target} niet bereiken", + "description": "De host weigerde of heeft de verbinding verbroken. Controleer de URL, poort en firewall. De indexeerder luistert alleen op localhost in een standaard alles-in-een installatie." + }, + "timeout": { + "title": "{target} time-out", + "description": "Geen reactie binnen 15 seconden. De service kan overbelast zijn of het adres kan verkeerd zijn." + }, + "status": { + "title": "{target} gaf een fout terug", + "description": "Het verzoek is mislukt met de HTTP-status {status}." + }, + "invalidResponse": { + "title": "Onverwacht antwoord van {target}", + "description": "Controleer of de URL naar de Wazuh server API of indexeerder is en niet naar het dashboard." + }, + "indexerRequired": { + "title": "Wazuh indexer referenties vereist", + "description": "Alerts, kwetsbaarheden en bestandsintegriteitsgebeurtenissen worden gelezen door de Wazuh indexer URL, gebruikersnaam en wachtwoord aan de integratie." + }, + "unknown": { + "title": "Kan de gegevens van {target} niet laden", + "description": "Bekijk de Homarr logs voor meer informatie." + } + }, + "range": { + "1h": "1u", + "24h": "24u", + "7d": "7D", + "30d": "30D" + }, + "levelTooltip": "Regel niveau {level} ({severity})" + }, + "wazuhAgents": { + "name": "Wazuh agents", + "description": "Sorteerbare lijst van Wazuh agents met status, OS, versie en laatste keepalive", + "option": { + "statusFilter": { + "label": "Toon medewerkers" + }, + "sortBy": { + "label": "Sorteren op" + }, + "showVersion": { + "label": "Toon Wazuh versiekolom" + }, + "showGroups": { + "label": "Groepskolom tonen" + } + }, + "title": "Agenten", + "total": "{count} agents", + "status": { + "active": "Actief", + "disconnected": "Verbinding verbroken", + "neverConnected": "Nooit verbonden", + "pending": "In afwachting" + }, + "statusLabel": { + "active": "Actief", + "disconnected": "Verbinding verbroken", + "never_connected": "Nooit verbonden", + "pending": "In afwachting", + "unknown": "Onbekend" + }, + "live": "Zichtbaar", + "snapshot": "Momentopname {age} oud", + "snapshotHint": "Lees van de Wazuh dashboard snapshot (wazuh-monitoring) genomen bij {time}. Voeg de server API gegevens toe voor live data.", + "staleSnapshot": "De agent snapshot van {time} is verouderd. Controleer of de Wazuh dashboard monitoring job actief is, of voeg de server API referenties toe.", + "noDisconnected": "Alle agenten zijn verbonden", + "empty": "Er komen geen agenten overeen met deze filter", + "column": { + "status": "Status", + "name": "Taaknaam", + "ip": "IP-adres", + "os": "OS", + "version": "Versie", + "lastKeepAlive": "Blijven", + "groups": "Groepen" + }, + "outdated": "Ouder dan de nieuwste versie van de agent ({version})" + }, + "wazuhAlerts": { + "name": "Wazuh waarschuwingen", + "description": "Recente Wazuh waarschuwingen met level, MITRE ATT&CK technieken, agent en bron IP", + "option": { + "minLevel": { + "label": "Minimum regelniveau", + "description": "Wazuh levels: 0-6 laag, 7-11 medium, 12-14 hoog, 15+ kritisch" + }, + "hours": { + "label": "Tijdvenster (uren)" + }, + "limit": { + "label": "Aantal waarschuwingen" + }, + "showMitre": { + "label": "Show MITRE ATT&CK techniques" + }, + "showAgent": { + "label": "Toon medewerker" + }, + "showSourceIp": { + "label": "Toon bron IP" + }, + "showRuleId": { + "label": "Toon regel-ID" + } + }, + "title": "Waarschuwingen · niveau {level}+ · {hours}h", + "empty": "Geen meldingen op dit niveau. Alles stil.", + "rule": "Regel {id}", + "openInDashboard": "Open deze waarschuwing in het Wazuh dashboard" + }, + "wazuhSummary": { + "name": "Wazuh alarm ernst", + "description": "Melding is mislukt met een trend ten opzichte van de vorige periode", + "option": { + "range": { + "label": "Tijdsbereik" + }, + "showTrend": { + "label": "Toon een trend tegen de vorige periode" + }, + "showFooter": { + "label": "Toon voettekst" + } + }, + "title": "Ernstigheid · {range}", + "alerts": "waarschuwingen", + "none": "Geen meldingen", + "trend": { + "new": "nieuw", + "tooltip": "Vorige periode: {previous}" + }, + "previous": "Vorige {range}: {count}", + "maxLevel": "Max. niveau {level}", + "health": "Indexeren gezondheid: {status}", + "manager": "Manager {version}" + }, + "wazuhTimeline": { + "name": "Wazuh alerts timeline", + "description": "Gestapelde grafiek met Wazuh waarschuwingen na verloop van tijd door ernst", + "option": { + "range": { + "label": "Tijdsbereik" + }, + "interval": { + "label": "Interval" + }, + "chartType": { + "label": "Grafiek type" + }, + "yScale": { + "label": "Schaal van Y-as", + "description": "Vierkante wortel blijft hoge en kritische waarschuwingen zichtbaar naast duizenden lage" + }, + "minLevel": { + "label": "Minimum regelniveau" + }, + "showLegend": { + "label": "Toon legende met totalen" + } + }, + "title": "Tijdlijn waarschuwingen · {range}", + "total": "{count} waarschuwingen", + "interval": "per {interval}" + }, + "wazuhTopList": { + "name": "Wazuh toplijst", + "description": "Top regels, agenten, bron IP's of MITRE ATT&CK en technieken bij aantal meldingen", + "option": { + "kind": { + "label": "Positie" + }, + "range": { + "label": "Tijdsbereik" + }, + "limit": { + "label": "Aantal items" + }, + "minLevel": { + "label": "Minimum regelniveau" + }, + "showBars": { + "label": "Toon balken" + } + }, + "title": { + "rules": "Top regels · {range}", + "agents": "Top agenten · {range}", + "sourceIps": "Top bron IPs · {range}", + "mitreTactics": "MITRE tactieken · {range}", + "mitreTechniques": "MITRE techniques · {range}" + }, + "empty": { + "rules": "Geen meldingen in deze periode", + "agents": "Geen meldingen in deze periode", + "sourceIps": "Geen meldingen met een bron IP in deze periode", + "mitreTactics": "Geen waarschuwingen toegewezen aan MITRE ATT&CK in deze periode", + "mitreTechniques": "Geen waarschuwingen toegewezen aan MITRE ATT&CK in deze periode" + }, + "totalTooltip": "{count} passende waarschuwingen", + "private": "LAN", + "public": "Openbaar", + "agents": "Gezien op {count} agents", + "others": "{count} meer meldingen in andere items" + }, + "wazuhVulnerabilities": { + "name": "Wazuh kwetsbaarheden", + "description": "Kwetsbaarheid telt, top CVE's en de meest kwetsbare agenten", + "option": { + "cveOrder": { + "label": "Rank CVEs op" + }, + "minSeverity": { + "label": "CVE ernst" + }, + "cveLimit": { + "label": "Aantal CVE's" + }, + "agentLimit": { + "label": "Aantal agenten" + }, + "showAgents": { + "label": "Toon de meest kwetsbare agenten" + } + }, + "title": "Kwetsbaarheden", + "topCves": "Top CVE's", + "score": "Beoordeling", + "agentsShort": "Agenten", + "topAgents": "Meest kwetsbare agenten", + "criticalHigh": "Krit / hoog", + "totalTooltip": "{count} bevindingen van {agents} agents", + "affected": "{count} agents", + "empty": "Geen kwetsbaarheden gevonden", + "distribution": "Ernstige verdeling. {unscored} bevindingen zonder een score worden niet getoond.", + "worst": "Het belangrijkste: {id} ({score}) op {agents} agenten" + }, + "wazuhFim": { + "name": "Wazuh bestand integriteit", + "description": "Recente integriteitsbewaking van bestand (syscheck) gebeurtenissen", + "option": { + "range": { + "label": "Tijdsbereik" + }, + "event": { + "label": "Evenementen" + }, + "limit": { + "label": "Aantal gebeurtenissen" + }, + "includeRegistry": { + "label": "Inclusief Windows register gebeurtenissen" + } + }, + "title": "Bestandsintegriteit · {range}", + "event": { + "added": "Datum toegevoegd", + "modified": "Gewijzigd", + "deleted": "Verwijderd", + "unknown": "Veranderd" + }, + "empty": "Geen gebeurtenissen van integriteit bestand in deze periode", + "user": "door {user}", + "registry": "Register" + }, + "wazuhAuthFailures": { + "name": "Wazuh authenticatie mislukt", + "description": "Mislukte logins en brute-force waarschuwingen per agent met uurlijkse sparklines", + "option": { + "hours": { + "label": "Tijdvenster (uren)" + }, + "limit": { + "label": "Aantal agenten" + }, + "showSourceIps": { + "label": "Toon top source IP's" + } + }, + "title": "Authenticatie mislukt · {hours}u", + "seriesTooltip": "Alle agents van de laatste {hours}h", + "peak": "Piek {count}/emmer", + "empty": "Geen mislukte aanmeldingen in deze periode", + "failed": "Mislukte aanmeldingen", + "failedHint": "Enkelvoudige authenticatie fouten (logboek, pAM, Windows login, ongeldige gebruikers)", + "bruteForce": "Brute kracht", + "bruteForceHint": "Corgerelateerde brute-kracht regels (meerdere fouten in een korte periode, MITRE T1110)", + "sourceIps": "Bron IPs", + "ipTooltip": "{ip}: {count} fouten", + "bruteForceCount": "{count} brute kracht" } }, "widgetPreview": { @@ -4004,7 +5732,76 @@ } }, "board": { + "emptyState": { + "title": "Bouw je eerste beeld", + "description": "Voeg een widget of app toe, of verbind een service en gebruik de gegevens op dit board.", + "addWidget": "Widget toevoegen", + "addApp": "App toevoegen", + "connectService": "Verbind service" + }, + "setupChecklist": { + "title": "Maak dit bord nuttig", + "description": "Houdt u op waar u bent gebleven. Voortgang volgt de inhoud al op dit bord.", + "collapse": "Samenvouwen setup-checklist", + "dismiss": "Instellen van de checklist afwijzen", + "resume": "Doorgaan met setup ({completed}/{total})", + "progress": "Bord setup voortgang", + "step": { + "content": { + "label": "Handige inhoud toevoegen", + "description": "Kies een widget en stel deze in voordat het wordt geplaatst." + }, + "app": { + "label": "App vastzetten", + "description": "Houd een service of gereedschap met één klik verwijderd van dit bord." + }, + "service": { + "label": "Verbind een service", + "description": "Ontgrendel live data en acties voor compatibele widgets.", + "permissionDescription": "Een beheerder kan verbinding maken met een service om live data te ontgrendelen.", + "action": "Verbinden" + } + } + }, "action": { + "addContent": "Voeg foruminhoud toe", + "settings": "Instellingen bord", + "switch": "Wissel bord", + "switcher": { + "title": "Wissel bord", + "search": { + "empty": "Geen boards match \"{search}\"." + }, + "results": "Beschikbare boards", + "preview": "Voorbeeld van {name} met {count} items", + "currentHidden": "Huidig bord: {name}", + "keyboard": { + "navigate": "Navigate", + "open": "Open", + "instructions": "Typ om borden te filteren. Gebruik de pijltoetsen om door de resultaten te gaan en Enter om een bord te openen." + }, + "empty": { + "title": "Geen andere borden", + "description": "Er zijn geen andere boards die u kan openen." + }, + "error": "Borden konden niet geladen worden." + }, + "create": { + "availability": { + "checking": "Beschikbaarheid controleren…", + "available": "{name} is beschikbaar" + }, + "notification": { + "success": { + "title": "Bord aangemaakt", + "message": "Bord {name} is aangemaakt" + }, + "error": { + "title": "Kan board niet aanmaken", + "message": "Board {name} kon niet aangemaakt worden" + } + } + }, "duplicate": { "title": "Bord dupliceren", "message": "Dit zal het bord {name} dupliceren met al zijn inhoud. Als widgets refereren aan integraties, die je niet mag gebruiken, zullen ze worden verwijderd.", @@ -4020,14 +5817,19 @@ } }, "edit": { + "enter": "Bord bewerken", + "save": "Bord opslaan", + "exit": "Verlaat bewerkingsmodus", "notification": { "success": { - "title": "Wijzigingen succesvol toegepast", "message": "Het bord is succesvol opgeslagen" }, "error": { - "title": "Kan wijzigingen niet toepassen", "message": "Het bord kon niet worden opgeslagen" + }, + "loadError": { + "title": "Kan het bewerken niet starten", + "message": "De board-editor kan niet worden geladen. Uw dashboard is nog steeds beschikbaar in weergavemodus." } }, "confirmLeave": { @@ -4035,62 +5837,6 @@ "message": "Je hebt niet-opgeslagen wijzigingen, weet je zeker dat je weg wilt?" } }, - "oldImport": { - "label": "Importeren uit Homarr vóór 1.0.0", - "notification": { - "success": { - "title": "Succesvol geimporteerd", - "message": "Het bord is succesvol geïmporteerd" - }, - "error": { - "title": "Importeren mislukt", - "message": "Het bord kon niet worden geïmporteerd, controleer de logs voor meer informatie" - } - }, - "form": { - "file": { - "label": "JSON-bestand selecteren", - "invalidError": "Ongeldig configuratiebestand" - }, - "apps": { - "label": "Apps", - "avoidDuplicates": { - "label": "Duplicaten vermijden", - "description": "Negeert apps waar al een app met dezelfde href bestaat" - }, - "onlyImportApps": { - "label": "Alleen apps importeren", - "description": "Voegt alleen de apps toe, het bord moet handmatig opnieuw worden aangemaakt" - } - }, - "name": { - "label": "Bord naam" - }, - "screenSize": { - "label": "Schermgrootte", - "description": "In versies vóór 1.0 bestonden drie verschillende modi, zodat je het aantal kolommen voor elke schermgrootte kon kiezen.", - "option": { - "sm": "Klein", - "md": "Gemiddeld", - "lg": "Groot" - } - }, - "sidebarBehavior": { - "label": "Zijbalk-gedrag", - "description": "Zijbalken zijn verwijderd in 1.0, je kunt kiezen wat er moet gebeuren met de items erin.", - "option": { - "lastSection": { - "label": "Laatste sectie", - "description": "De zijbalk wordt onder de laatste sectie weergegeven" - }, - "removeItems": { - "label": "Items verwijderen", - "description": "Items in de zijbalk worden verwijderd" - } - } - } - } - }, "quickCreateApp": { "modal": { "title": "App onmiddellijk maken", @@ -4098,6 +5844,12 @@ } } }, + "landmark": { + "canvas": "Dashboard canvas", + "leftRail": "Links dashboard spoor", + "rightRail": "Rechts dashboard spoor", + "items": "Dashboard items" + }, "field": { "pageTitle": { "label": "Paginatitel" @@ -4167,7 +5919,8 @@ } }, "primaryColor": { - "label": "Primaire kleur" + "label": "Primaire kleur", + "locked": "Uw beheerder bewaart de merkkleur van de instantie op elk bord." }, "secondaryColor": { "label": "Secundaire kleur" @@ -4207,9 +5960,6 @@ "xl": "Zeer groot" } }, - "name": { - "label": "Naam" - }, "isPublic": { "label": "Openbaar", "description": "Openbare borden zijn voor iedereen toegankelijk, zelfs zonder account." @@ -4229,9 +5979,44 @@ "title": "Lay-out", "responsive": { "title": "Responsive lay-outs", + "description": "Elke lay-out houdt zijn eigen widgetposities en groottes. Mobiel en Basis zijn altijd beschikbaar; voeg aangepaste lay-outs toe op elk aanvullend breekpunt.", "action": { "add": "Lay-out toevoegen" } + }, + "role": { + "mobile": "Mobiel", + "base": "Basis", + "custom": "Aangepaste" + }, + "custom": { + "defaultName": "Aangepaste lay-out" + }, + "mobile": { + "breakpointDescription": "Mobiel wordt altijd gebruikt van 0px tot het volgende breekpunt." + }, + "preview": { + "columns": "kolommen", + "empty": "Deze lay-out is leeg", + "dynamicSection": "Dynamische sectie", + "editorWidthLabel": "{layoutName} · {width}px" + }, + "reset": { + "action": "Reset vanaf basis", + "confirm": { + "title": "Reset {layoutName}?", + "message": "Dit vervangt elke opgeslagen positie en grootte in deze lay-out door een nieuwe lay-out gegenereerd op basis van basis. Dit kan niet ongedaan worden gemaakt." + } + }, + "edit": { + "action": "Lay-out bewerken", + "saveAndEdit": "Opslaan en bewerken", + "save": "Schermindeling opslaan", + "cancel": { + "action": "Annuleer lay-out bewerking", + "title": "Opmaakwijzigingen negeren?", + "message": "Je niet-opgeslagen wijzigingen in deze lay-out worden genegeerd." + } } }, "background": { @@ -4268,10 +6053,7 @@ "rename": { "label": "Bord hernoemen", "description": "Als je de naam verandert, worden alle links naar dit bord verbroken.", - "button": "Naam wijzigen", - "modal": { - "title": "Bord hernoemen" - } + "button": "Naam wijzigen" }, "visibility": { "label": "Bord-zichtbaarheid wijzigen", @@ -4295,9 +6077,7 @@ } }, "delete": { - "label": "Dit bord verwijderen", "description": "Als je eenmaal een bord hebt verwijderd, kun je niet meer terug. Wees er zeker van.", - "button": "Dit bord verwijderen", "confirm": { "title": "Bord verwijderen", "description": "Weet je zeker dat je dit bord wilt verwijderen? Hiermee verwijder je het bord en alle inhoud definitief." @@ -4342,28 +6122,41 @@ }, "layout": { "field": { - "name": { - "label": "Naam" - }, "columnCount": { "label": "Kolom aantal" }, "breakpoint": { "label": "Breakpoint", "description": "Lay-out wordt gebruikt op alle schermen die groter zijn dan deze breakpoint tot de volgende grotere breakpoint." + }, + "gutters": { + "label": "Vaste sidebars", + "description": "Reserveer tot drie dashboardkolommen aan beide zijden. Het resterende doek vult automatisch op.", + "left": { + "label": "Left sidebar", + "description": "Dit gebied zichtbaar houden tijdens het dashboard scrollen.", + "thumbLabel": "Left sidebar width" + }, + "right": { + "label": "Sidebar rechts", + "description": "Dit gebied zichtbaar houden tijdens het dashboard scrollen.", + "thumbLabel": "Sidebar breedte rechts" + }, + "width": { + "label": "Breedte in kolommen" + }, + "preview": { + "label": "Dashboard lay-out voorbeeld" + } } } }, "management": { "metaTitle": "Beheer", - "title": { - "morning": "Goedemorgen, {username}", - "afternoon": "Goedemiddag, {username}", - "evening": "Goedenavond, {username}" - }, "notFound": { "title": "Niet gevonden", - "text": "Kon de aangevraagde bron niet vinden" + "text": "Kon de aangevraagde bron niet vinden", + "backToHome": "Terug naar beheerpagina" }, "error": { "title": "", @@ -4372,19 +6165,10 @@ }, "navbar": { "items": { - "workshop": "Workshop", "home": "Home", - "boards": "Borden", - "apps": "Apps", - "integrations": "Integraties", - "searchEngies": "Zoekmachines", - "medias": "Media", "users": { - "label": "Gebruikers", "items": { - "manage": "Beheren", - "invites": "Uitnodigingen", - "groups": "Groepen" + "manage": "Beheren" } }, "tools": { @@ -4392,10 +6176,7 @@ "items": { "docker": "Docker", "kubernetes": "Kubernetes", - "logs": "Logs", "api": "API", - "certificates": "Certificaten", - "tasks": "Taken", "backup": "Back-up" } }, @@ -4409,21 +6190,12 @@ "sourceCode": "Broncode" } }, - "about": "Over" + "about": "Over", + "assistant": "Assistent" } }, "page": { "home": { - "statistic": { - "board": "Borden", - "user": "Gebruikers", - "invite": "Uitnodigingen", - "integration": "Integraties", - "app": "Apps", - "group": "Groepen", - "searchEngine": "Zoekmachines", - "media": "Media" - }, "statisticLabel": { "boards": "Borden", "resources": "Bronnen", @@ -4461,13 +6233,8 @@ "tooltip": "Dit bord zal getoond worden als je mobiele bord" } }, - "duplicate": { - "label": "Bord dupliceren" - }, "delete": { - "label": "Permanent verwijderen", "confirm": { - "title": "Bord verwijderen", "description": "Weet je zeker dat je het {name} bord wilt verwijderen?" } } @@ -4476,28 +6243,82 @@ "public": "Dit bord is openbaar", "private": "Dit bord is privé" }, - "noResults": { - "title": "Nog geen borden" + "preview": { + "label": "Voorbeeld lay-out van {name}, met {count} items", + "unknownCreator": "Onbekende maker" }, - "modal": { - "createBoard": { - "field": { - "name": { - "label": "Naam" - } - } - } + "noResults": { + "title": "Nog geen borden", + "description": "Maak een bord aan om uw apps en widgets op één plek te rangschikken." } }, "media": { "includeFromAllUsers": "Media opnemen van alle gebruikers" }, "user": { - "back": "Terug naar gebruikers", "fieldsDisabledExternalProvider": "Bepaalde velden zijn uitgeschakeld omdat ze worden beheerd door een externe authenticatieprovider.", "setting": { "general": { "title": "Algemeen", + "header": { + "title": "Koptekst studio", + "badge": "Persoonlijk", + "description": "Sleep de besturing overal op de rij. Links, centrum, en Rechts blijven vast terwijl de besturingselementen om hen heen verschuiven.", + "device": { + "desktop": "Startscherm", + "mobile": "Mobiel" + }, + "zones": { + "left": "Links", + "center": "Centreren", + "right": "Rechts" + }, + "action": { + "hide": "Verberg de koptekst", + "show": "Toon de koptekst", + "configure": "{item} verplaatsen of configureren", + "remove": "Verwijder {item}", + "dropIntoZone": "Verplaats naar de {zone} sectie" + }, + "preview": { + "board": "Dashboard voorbeeld voor {name}", + "empty": "Geen dashboard lay-out beschikbaar" + }, + "available": { + "title": "Beschikbare bediening", + "description": "Voeg een regelaar toe en sleep dan de volledige knop naar boven.", + "requiredAlways": "Deze controle is vereist, maar u kunt deze overal verplaatsen in de header.", + "allAdded": "Elke ingebouwde controle staat al in je header.", + "add": "{item} toevoegen", + "boardShortcut": "Snelkoppeling op bord", + "chooseBoard": "Kies een bord" + }, + "configuration": { + "description": "Deze controle blijft even groot als in de live header.", + "searchDisplay": { + "input": "Zoek balk", + "icon": "Alleen icoon" + }, + "logoDisplay": { + "logo": "Alleen logo", + "logoAndText": "Logo + tekst" + } + }, + "items": { + "logo": "Logo", + "search": "Zoeken", + "home": "Home-bord", + "boardSwitcher": "Borden", + "assistant": "Assistent", + "docker": "Docker", + "boardEdit": "Bord bewerken", + "boardSettings": "Instellingen bord", + "settings": "Uw instellingen", + "themeToggle": "Thema aan/uit", + "user": "Rekening", + "boardUnavailable": "Bord niet beschikbaar" + } + }, "item": { "language": "Taal & regio", "board": { @@ -4531,14 +6352,10 @@ }, "security": { "title": "Beveiliging" - }, - "board": { - "title": "Borden" } }, "list": { - "metaTitle": "Gebruikers beheren", - "title": "Gebruikers" + "metaTitle": "Gebruikers beheren" }, "edit": { "metaTitle": "Gebruiker {username} bewerken" @@ -4592,9 +6409,6 @@ } }, "field": { - "id": { - "label": "ID" - }, "creator": { "label": "Maker" }, @@ -4618,10 +6432,7 @@ }, "setting": { "title": "Instellingen", - "alert": "Groepsinstellingen krijgen voorrang op basis van de volgorde van de groepen in de lijst. De bovenste instellingen overschrijven de onderste.", - "board": { - "title": "Borden" - } + "alert": "Groepsinstellingen krijgen voorrang op basis van de volgorde van de groepen in de lijst. De bovenste instellingen overschrijven de onderste." }, "members": { "title": "Leden", @@ -4629,10 +6440,7 @@ "notFound": "Geen leden gevonden" }, "permissions": { - "title": "Machtigingen", - "form": { - "unsavedChanges": "Er zijn niet-opgeslagen wijzigingen!" - } + "title": "Machtigingen" } } }, @@ -4641,12 +6449,10 @@ "notification": { "success": { "message": "Instellingen opgeslagen" - }, - "error": { - "message": "Instellingen opslaan mislukt" } }, "section": { + "analyticsDocumentation": "Zie precies welke analytics gegevens Homarr verzamelt", "analytics": { "title": "Analytics", "general": { @@ -4675,7 +6481,6 @@ } }, "board": { - "title": "Borden", "homeBoard": { "label": "Globaal home-bord", "mobileLabel": "Globaal mobiel bord", @@ -4694,7 +6499,6 @@ } }, "user": { - "title": "Gebruikers", "enableGravatar": { "label": "Gravatar inschakelen", "description": "Valt terug op gebruikersavatars van Libravatar/Gravatar wanneer geen aangepaste avatar is ingesteld en een e-mail is geconfigureerd" @@ -4710,12 +6514,86 @@ "appearance": { "title": "Weergave", "defaultColorScheme": { - "label": "Standaard kleurenschema", + "label": "Standaard kleurenschema" + } + }, + "branding": { + "title": "Instance branding", + "groups": { + "identity": "Identiteit", + "appearance": "Weergave", + "customCss": "Custom CSS", + "authentication": "Authenticatie" + }, + "identity": { + "description": "Het applicatielogo is de grotere markering die gebruikt wordt in de app, op inlogpagina's en voor geïnstalleerde apps. Het browserpictogram (favicon) is het kleine vierkant dat gebruikt wordt in tabbladen en bladwijzers; als het leeg is, valt het terug naar het applicatielogo." + }, + "appName": { + "label": "Naam toepassing" + }, + "greeting": { + "label": "Aangepaste begroeting" + }, + "logo": { + "label": "Applicatie logo", + "placeholder": "/logo/logo.png" + }, + "favicon": { + "label": "Browser pictogram (favicon)", + "placeholder": "Gebruikt applicatie logo" + }, + "primaryColor": { + "label": "Primaire kleur" + }, + "secondaryColor": { + "label": "Secundaire accenten" + }, + "lockPrimaryColor": { + "label": "Deze kleur op elk bord behouden", + "description": "Voorkomt dat board kleuren de applicatie accent vervangen." + }, + "signInBackground": { + "label": "Authenticatie achtergrond", + "placeholder": "https://voorbeeld.com/background.jpg" + }, + "signInOverlay": { + "label": "Achtergrond overlay" + }, + "defaultRadius": { + "label": "Hoek stijl", "options": { - "auto": "Auto", - "light": "Licht", - "dark": "Donker" + "xs": "Strak", + "sm": "Subtiel", + "md": "Evenwichtig", + "lg": "Afgerond", + "xl": "Zacht" } + }, + "customCss": { + "label": "Globale aangepaste CSS", + "description": "Toegepast op elke pagina. Board aangepast CSS kan het overschrijven." + }, + "authVisibility": { + "description": "Kies wat op elke verificatiepagina verschijnt.", + "appName": "Naam toepassing", + "logo": "Applicatie logo", + "greeting": "Begroeting" + }, + "summary": { + "title": "Huidige branding", + "cornerStyle": "Hoek stijl", + "palette": "Palette", + "backgroundConfigured": "Aangepaste achtergrond · {overlay}% overlay", + "backgroundDefault": "Standaard achtergrond", + "greetingConfigured": "Aangepaste begroeting", + "greetingDefault": "Standaard begroeting", + "boardColorLocked": "Kleur op bord vergrendeld", + "boardColorFlexible": "Kleuren op bord toegestaan", + "appName": "Taaknaam", + "logo": "Logo", + "greeting": "Begroeting", + "on": "op", + "off": "UIT" } }, "culture": { @@ -4723,12 +6601,177 @@ "defaultLocale": { "label": "Standaard taal" } + }, + "assistant": { + "loading": "Assistentconfiguratie laden", + "title": "Assistent", + "description": "Verbind een OpenAI-compatibel model eindpunt voor het instance-brede assistent.", + "security": { + "description": "API-sleutels en aanvullende header waarden worden versleuteld in de Homarr database. Ze worden nooit teruggestuurd naar browsers. Model verzoeken worden direct vanuit de Homarr server verzonden naar het geconfigureerde eindpunt." + }, + "overview": { + "connectionReady": "Connectie klaar", + "unsavedChanges": "Niet-opgeslagen wijzigingen", + "setupRequired": "Installatie vereist", + "disabled": "Uitgeschakeld", + "noModel": "Geen model geselecteerd" + }, + "connection": { + "endpointTitle": "Provider en eindpunt", + "description": "Kies een voorinstelling of verbind elke dienst die de OpenAI Chat Completions API implementeert.", + "save": "Provider connectie opslaan" + }, + "credentials": { + "title": "Aanmeldgegevens", + "description": "Voeg de geheimen toe die dit eindpunt nodig heeft. Opgeslagen waarden blijven versleuteld en kunnen niet terug worden gelezen.", + "required": "Sleutel vereist", + "optional": "Belangrijke optionele", + "workshop": "Github per gebruiker" + }, + "provider": { + "title": "Aanbieder", + "groups": { + "free": "Gratis met Homarr", + "hosted": "Gehoste aanbieders", + "local": "Lokale aanbieders", + "custom": "Aangepaste" + }, + "options": { + "homarr": { + "description": "Een beperkt aantal Assistent-toepassingen is elke dag gratis, betaald door het Homarr team. Meld u aan bij de Community Workshop om uw vergoeding te gebruiken." + }, + "openrouter": { + "description": "Gehoste modelroutering met een grote tool-capable modelcatalogus." + }, + "openai": { + "description": "OpenAI Chat Completies via het officiële API eindpunt." + }, + "anthropic": { + "description": "Claude via Anthropic's OpenAI SDK compatibiliteitspunt." + }, + "google-gemini": { + "description": "Gemini via Google's OpenAI-compatibele API endpoint." + }, + "xai": { + "description": "Grok modellen via xAI's OpenAI-compatibele API." + }, + "groq": { + "description": "Snel gehoste conclusie via Groq's OpenAI-compatibele API." + }, + "mistral": { + "description": "Mistrale modellen via de officiële API." + }, + "deepseek": { + "description": "DeepSeek modellen via de OpenAI-compatibele API." + }, + "together": { + "description": "Gehoste open modellen door gecombineerde OpenAI-compatibele API." + }, + "ollama": { + "description": "Een lokale of netwerk Ollama server die de OpenAI-compatibele API gebruikt." + }, + "lm-studio": { + "description": "Een LM Studio lokale server met OpenAI compatibiliteit ingeschakeld." + }, + "llama-cpp": { + "description": "Een lokale of netwerk-llama.cpp server met behulp van de OpenAI-compatibele API." + }, + "custom": { + "label": "Aangepast eindpunt", + "description": "Elk ander eindpunt compatibel met OpenAI Chat completies." + } + }, + "homarrAuth": { + "title": "Gratis dagelijks gebruik van assistenten inbegrepen", + "description": "Er is geen API-sleutel nodig. Het Homarr team heeft een beperkt aantal toepassingen voor jou per dag. Log in met de Community Workshop om je toelage gescheiden te houden." + } + }, + "baseUrl": { + "title": "API basis-URL", + "description": "Voeg de API prefix, meestal /v1. In containers verwijst localhost naar de Homarr container." + }, + "apiKey": { + "title": "API sleutel", + "required": "Vereist door deze provider. De waarde is versleuteld en alleen schrijven.", + "optional": "Optioneel voor lokale eindpunten. Laat het leeg wanneer de service geen authenticatie vereist.", + "placeholder": "Voer een API-sleutel in", + "savedTitle": "Versleutelde API-sleutel opgeslagen", + "savedDescription": "Homarr kan deze sleutel gebruiken, maar deze kan de waarde niet weergeven of herstellen.", + "remove": "Verwijder opgeslagen API-sleutel", + "removeFlow": { + "title": "De opgeslagen API-sleutel verwijderen?", + "description": "Deze provider vereist een API-sleutel. Deze verwijderen kan modelontdekking en assistent-antwoorden stoppen totdat een andere sleutel is opgeslagen.", + "optionalDescription": "Het eindpunt zal stoppen met het ontvangen van naburige authenticatie nadat deze sleutel is verwijderd. Bevestig dat deze ongeauthenticeerde aanvragen accepteert of gebruik een andere opgeslagen koptekst.", + "cancel": "Behoud opgeslagen sleutel", + "confirm": "API-sleutel verwijderen" + } + }, + "headers": { + "title": "Aanvullende verzoeken headers", + "description": "Optionele authenticatie of routering van headers. Header waarden zijn versleuteld en alleen schrijven.", + "add": "Koptekst toevoegen", + "name": "Naam koptekst", + "value": "Header waarde", + "valuePlaceholder": "Geheime of routing waarde", + "remove": "Koptekst verwijderen", + "configured": "Extra versleutelde headers zijn geconfigureerd. Koppen toevoegen vervangt de volledige opgeslagen set.", + "empty": "Er zijn geen extra headers opgeslagen voor deze provider.", + "savedBadge": "Kopteksten opgeslagen", + "pendingRemoval": "Verwijderen in behandeling", + "clear": "Verwijder opgeslagen headers bij het opslaan", + "keep": "Opgeslagen koppen behouden" + }, + "model": { + "title": "Model", + "description": "Selecteer een ontdekt model of voer een exact eindpunt model ID in.", + "placeholder": "Model ID", + "refresh": "Ververs modellen", + "chooseModel": "Kies het model dat gebruikt wordt voor nieuwe gesprekken", + "discoveryPath": "Model ontdekking pad", + "discoveryPathDescription": "Toegekend aan de API base URL. Laat leeg om de ontdekking uit te schakelen en gebruik een handmatige model ID.", + "manual": "Voer een model-ID handmatig in of sla de verbinding op om modellen te ontdekken.", + "manualFallback": "Ontdekking is niet beschikbaar. U kunt nog steeds een model-ID handmatig invoeren.", + "saveConnectionFirst": "Sla de providerverbinding op voordat u een model kiest.", + "discovering": "Vernieuwen van de modellen die beschikbaar zijn van deze provider…", + "discovered": "{count, plural, one {Ontdekt # model. Ondersteuning hangt af van het geselecteerde eindpunt en model.} other {Ontdekte # modellen. Hulpondersteuning is afhankelijk van het geselecteerde eindpunt en model}}", + "discoveryFailed": "Model discovery is niet voltooid", + "context": "{count} context venster", + "toolsConfirmed": "Hulpmiddelen geselecteerd", + "toolsUnknown": "Verifieer tool ondersteuning" + }, + "serverTools": { + "title": "Server tools", + "webSearch": { + "label": "Web zoeken", + "description": "Sta het model toe om via OpenRouter te zoeken als een aanvraag actuele informatie nodig heeft. Het zoekgebruik wordt afzonderlijk door OpenRouter in rekening gebracht.", + "proxyDescription": "Stuur OpenRouter's web-search server hulpprogramma naar dit eindpunt. Dit alleen inschakelen wanneer het aangepaste eindpunt naar voren gaat het OpenRouter server-tools formaat, zoals een Homarr Router proxy.", + "limit": "Het model bepaalt wanneer gezocht moet worden, met een limiet van 3 zoekopdrachten en 5 resultaten per zoekopdracht voor elk verzoek." + } + }, + "enabled": { + "label": "Assistent inschakelen", + "description": "Toont de assistent aan alle ingelogde gebruikers. Bestaande Homarr rechten zijn nog steeds van toepassing op elke interne tool oproep." + }, + "save": "Assistent opslaan", + "notification": { + "connectionSaved": { + "title": "Provider connectie opgeslagen", + "message": "Het eindpunt en versleutelde referenties zijn klaar voor modelselectie.", + "credentialsCleared": "Het eindpunt is gewijzigd zodat eerdere referenties zijn gewist. Voeg indien nodig referenties toe voor de nieuwe bestemming" + }, + "saved": { + "title": "Assistent instellingen opgeslagen", + "message": "Het nieuwe model en beschikbaarheidsinstellingen zijn actief." + }, + "error": { + "title": "Assistent-instellingen konden niet worden opgeslagen" + } + } } } }, "tool": { "tasks": { - "title": "Taken", "status": { "idle": "Niet actief", "running": "Actief", @@ -4746,6 +6789,11 @@ "label": "Pings" } }, + "action": { + "run": "Voer {name} nu uit", + "enable": "{name} inschakelen", + "disable": "{name} uitschakelen" + }, "interval": { "seconds": "Elke {interval, plural, one {}=1 {seconde} other {# seconden}}", "minutes": "Elke {interval, plural, one {}=1 {minuut} other {# minuten}}", @@ -4761,13 +6809,7 @@ } } }, - "settings": { - "title": "Taakinstellingen voor {jobName}" - }, "field": { - "name": { - "label": "Naam" - }, "interval": { "label": "Interval plannen" }, @@ -4781,11 +6823,6 @@ "table": { "search": "{count} taken zoeken…" }, - "action": { - "refresh": { - "label": "Vernieuwen" - } - }, "refresh": { "success": { "message": "Taken succesvol vernieuwd" @@ -4819,7 +6856,6 @@ } }, "api": { - "title": "API", "modal": { "createApiToken": { "title": "API-token aangemaakt", @@ -4845,7 +6881,6 @@ }, "table": { "header": { - "id": "ID", "createdBy": "Aangemaakt door", "actions": "Acties" } @@ -4901,43 +6936,12 @@ "availableTools": { "title": "", "description": "", - "columnType": "", - "columnName": "", - "columnDescription": "" - }, - "troubleshooting": { - "title": "", - "missingHeader": { - "title": "", - "description": "" - }, - "invalidFormat": { - "title": "", - "description": "" - }, - "invalidKey": { - "title": "", - "description": "" - }, - "connectionRefused": { - "title": "", - "description": "" - }, - "toolsNotAppearing": { - "title": "", - "description": "" + "filteredDescription": "{count} overeenkomende gereedschappen tussen uitgebreide categorieën.", + "search": "Zoek gereedschappen", + "noResults": { + "title": "Geen enkel gereedschap gevonden voor deze zoekopdracht", + "description": "Geen MCP tool komt overeen met \"{search}\". Probeer een namespace, toolnaam of beschrijving." } - }, - "copy": "", - "oneClick": { - "title": "", - "subtitle": "", - "vsCode": "", - "cursor": "", - "copyUrl": "", - "copied": "", - "copyHint": "", - "manualConfig": "" } } } @@ -4954,47 +6958,12 @@ "title": "Export van gevoelige gegevens", "warningTitle": "Deze export bevat je volledige database.", "warningBody": "De back-up omvat alle gebruikers, integratiegeheimen (versleuteld), API-sleutels, bordconfiguraties en app-gegevens. Bewaar het geëxporteerde bestand veilig en deel het niet.", - "typePrompt": "Typ \"{phrase}\" om door te gaan", - "submit": "Database exporteren", - "cancel": "Annuleren" + "submit": "Database exporteren" } }, "import": { "title": "Database herstellen", - "description": "Upload een eerder geëxporteerde back-up ZIP om je database te herstellen. Dit vervangt je volledige database. Als de back-up met een andere encryptiesleutel is gemaakt, worden geheimen automatisch opnieuw versleuteld.", - "warning": "Het herstellen van een back-up zal je huidige database volledig vervangen en de applicatie herstarten. Deze actie kan niet ongedaan worden gemaakt.", - "dropzone": { - "title": "Sleep je back-up ZIP hierheen of klik om te bladeren", - "description": "Alleen .zip-bestanden van een Homarr SQLite-back-up worden geaccepteerd" - }, - "changeFile": "Bestand wijzigen", - "button": "Database herstellen", - "success": { - "title": "Herstel voltooid", - "message": "Database is succesvol hersteld. De applicatie wordt opnieuw opgestart..." - }, - "error": "Importeren mislukt" - }, - "preview": { - "title": "Back-up inhoud", - "exported": "Geëxporteerd op {date}", - "loading": "Back-upbestand analyseren...", - "errorTitle": "Voorbeeldfout", - "entity": "Entiteit", - "count": "Aantal", - "boards": "Borden", - "entities": { - "board": "Borden", - "user": "Gebruikers", - "app": "Apps", - "integration": "Integraties", - "item": "Widgets", - "media": "Media", - "search_engine": "Zoekmachines" - }, - "analyzeError": "Kan back-upbestand niet analyseren", - "invalidMissingMetadata": "Ongeldige back-up: metadata.json ontbreekt", - "invalidMissingDb": "Ongeldige back-up: db.sqlite ontbreekt" + "description": "Upload een eerder geëxporteerde back-up ZIP om je database te herstellen. Dit vervangt je volledige database. Als de back-up met een andere encryptiesleutel is gemaakt, worden geheimen automatisch opnieuw versleuteld." }, "restore": { "dropzone": { @@ -5004,29 +6973,20 @@ "analyzing": "Back-up analyseren...", "changeFile": "Bestand wijzigen", "continueToRestore": "Doorgaan naar herstel", - "tryAgain": "Probeer opnieuw", "analysisError": "Analysefout", "preview": { "title": "Back-up inhoud", "exported": "Geëxporteerd op {date}", "entity": "Entiteit", "count": "Aantal", - "boards": "Borden", "entities": { - "board": "Borden", - "user": "Gebruikers", - "app": "Apps", - "integration": "Integraties", - "item": "Widgets", - "media": "Media", - "search_engine": "Zoekmachines" + "item": "Widgets" }, "migrationsApplied": "{count} migratie toegepast", "migrationsAppliedPlural": "{count} migraties toegepast", "migrationsOlderVersion": "Deze back-up was van een oudere Homarr-versie. {count} schemamigratie werd toegepast om deze bij te werken.", "migrationsOlderVersionPlural": "Deze back-up was van een oudere Homarr-versie. {count} schemamigraties werden toegepast om deze bij te werken.", "migrationsUpToDate": "Database-schema is up-to-date ({count} migraties toegepast)", - "upToDate": "Up-to-date", "migrationsPending": "{count} in behandeling" }, "migration": { @@ -5037,21 +6997,21 @@ "title": "Destructieve actie", "warningTitle": "Dit zal permanent je volledige database vervangen.", "warningBody": "Alle huidige borden, gebruikers, apps, integraties, instellingen en sessies gaan verloren. Deze actie kan niet ongedaan worden gemaakt. De applicatie wordt na het herstel opnieuw opgestart.", - "typePrompt": "Typ \"{phrase}\" om door te gaan", - "cancel": "Annuleren", "submit": "Database herstellen" }, "progress": { "title": "Database herstellen...", - "extracting": "Back-uparchief uitpakken", - "migrating": "Database migraties toepassen", - "encrypting": "Integratiegeheimen opnieuw versleutelen", - "swapping": "Databasebestand vervangen", - "restarting": "Server herstarten" + "restarting": "Server herstarten", + "relogin": "Herstellen van de database heeft je huidige sessie ongeldig. Homarr stuurt je om in te loggen als de server klaar is." }, "complete": { "title": "Herstel voltooid", - "message": "Database is succesvol hersteld. De server wordt opnieuw opgestart — ververs de pagina over enkele seconden." + "message": "Database is succesvol hersteld. De server wordt opnieuw opgestart — ververs de pagina over enkele seconden.", + "button": "Log nu in" + }, + "timeout": { + "title": "Server is niet online teruggekomen", + "message": "De database herstellen voltooid, maar Homarr is niet opnieuw klaar geworden. Probeer de connectie controle of ververs deze pagina handmatig." }, "failed": { "title": "Herstellen mislukt" @@ -5059,6 +7019,9 @@ "invalidMissingMetadata": "Ongeldige back-up: metadata.json ontbreekt", "invalidMissingDb": "Ongeldige back-up: db.sqlite ontbreekt", "analyzeError": "Kan back-up niet analyseren" + }, + "confirm": { + "typePrompt": "Type \"{phrase}\" om door te gaan" } } }, @@ -5093,7 +7056,11 @@ "toggleBoardEdit": "Bord berwerkingsmodus togglen", "toggleColorScheme": "Lichte/donkere modus togglen", "saveNotebook": "Notitieblok opslaan (alleen in widget notitieblok)", - "openSpotlight": "Zoeken openen" + "openSpotlight": "Zoeken openen", + "openSpotlightApps": "App zoeken openen", + "openSpotlightAssistant": "Open Assistent-modus", + "openSpotlightPreferences": "Open voorkeursmodus", + "openAssistant": "Open assistent" }, "note": "Tip: Mod verwijst naar zowel de Ctrl-toets als de ⌘ toets op macOS" } @@ -5103,6 +7070,63 @@ }, "docker": { "title": "Containers", + "reconciliation": { + "title": "Ondersteunde Docker setup", + "suggestions": "{count, plural, =0 {Geen suggesties} one {# suggestie} other {# suggesties}}", + "attention": "{count} heeft uw aandacht nodig", + "endpointUnavailable": "Sommige diensten konden niet worden gecontroleerd omdat deze eindpunten niet beschikbaar zijn: {names}", + "empty": "Geen zichtbare Docker services gevonden.", + "emptyFilter": "Geen services komen overeen met deze weergave.", + "ambiguous": "Meer dan één bestaand item kon met deze dienst overeenkomen. Homarr zal er niet automatisch een kiezen.", + "filter": { + "attention": "Heeft aandacht nodig", + "represented": "Al ingesteld", + "all": "Allemaal" + }, + "state": { + "newRecognized": "Klaar om te verbinden", + "newApp": "Nieuwe service", + "represented": "Al weergegeven", + "linked": "Gekoppeld", + "moved": "Adres gewijzigd" + }, + "url": { + "manual": "Voer een adres handmatig in" + }, + "health": { + "layer": { + "docker": "Docker", + "integrationConfiguration": "Integratie", + "authentication": "Authenticatie", + "apiRequest": "API", + "appRepresentation": "App", + "widgetConfiguration": "Widget", + "widgetQuery": "Widget query" + }, + "status": { + "available": "Beschikbaar", + "configured": "Geconfigureerd", + "linked": "Gekoppeld", + "missing": "Ontbrekende", + "changed": "Veranderd", + "unused": "Niet gebruikt", + "notApplicable": "Niet van toepassing", + "notObserved": "Niet waargenomen" + } + }, + "action": { + "review": "Beoordelen", + "dismiss": "Uitschakelen", + "restoreDismissed": "Herstel afgewezen ({count})", + "setupIntegration": "Integratie instellen", + "reviewIntegration": "Integratie herzien", + "viewRepresentation": "Instellingen bekijken" + }, + "loadError": { + "title": "De Docker setup assistent kon niet geladen worden", + "message": "Docker service informatie is niet beschikbaar. Probeer het opnieuw zonder deze pagina te verlaten." + } + }, "table": { "updated": "{when} bijgewerkt", "refresh": { @@ -5115,9 +7139,6 @@ "totalMemory": "" }, "field": { - "name": { - "label": "Naam" - }, "state": { "label": "Status", "option": { @@ -5131,9 +7152,6 @@ } }, "stats": { - "cpu": { - "label": "Processor" - }, "memory": { "label": "Geheugen" } @@ -5196,8 +7214,11 @@ } }, "remove": { - "label": "Verwijderen", "confirm": "", + "confirmation": { + "title": "{count, plural, one {Verwijder # container?} other {Verwijder # containers?}}", + "message": "{count, plural, one {Dit verwijdert permanent # container: {names}} other {Dit verwijdert # containers: {names}}}" + }, "notification": { "success": { "title": "Containers verwijderd", @@ -5209,8 +7230,13 @@ } } }, + "result": { + "failure": { + "title": "Sommige containeracties zijn mislukt", + "message": "{total, plural, one {{failed} van # actie mislukt: {names}} other {{failed} van # acties mislukt: {names}}}" + } + }, "refresh": { - "label": "Verversen", "notification": { "success": { "title": "Containers ververst", @@ -5241,18 +7267,33 @@ }, "error": { "internalServerError": "Docker-containers zijn niet opgehaald", + "endpointUnavailable": "{count, plural, one {# Docker eindpunt niet beschikbaar: {names}} other {# Docker eindpunten niet beschikbaar: {names}}}", "noColumns": "" } }, "kubernetes": { + "context": { + "label": "Kubernetes context", + "loadError": { + "title": "Kubernetes contexten konden niet geladen worden", + "message": "Context informatie is niet beschikbaar. Probeer het opnieuw zonder deze pagina te verlaten." + }, + "status": { + "available": "Beschikbaar", + "degraded": "Metrics unavailable", + "unavailable": "Unavailable" + }, + "unavailable": "Deze Kubernetes-context kan niet worden bereikt. Selecteer een andere context of controleer de inloggegevens en eindpunt.", + "metricsUnavailable": "Deze context is bereikbaar, maar Metrics Server is niet beschikbaar. Inventaris blijft beschikbaar zonder live CPU en geheugengebruik." + }, "cluster": { "title": "Cluster dashboard", "label": "Cluster", "providers": "Aanbieders", "version": "Versie", - "architecture": "Architectuur", "capacity": { "title": "Capaciteit", + "metricsUnavailable": "Metrics Server is niet beschikbaar. Inventaris en gereserveerde capaciteit blijven zichtbaar, maar live CPU en geheugen gebruik kan niet worden getoond.", "resource": { "reserved": "Gereserveerd", "used": "Gebruikt" @@ -5271,38 +7312,10 @@ } }, "nodes": { - "label": "Nodes", "field": { - "name": { - "label": "Naam" - }, - "state": { - "label": "Status", - "option": { - "ready": "Gereed", - "NotReady": "Niet gereed" - } - }, - "cpu": { - "label": "CPU" - }, - "memory": { - "label": "RAM" - }, - "pods": { - "label": "Pods" - }, - "operatingSystem": { - "label": "OS" - }, - "architecture": { - "label": "Architectuur" - }, + "metricsUnavailable": "Unavailable", "kubernetesVersion": { "label": "Kubernetes versie" - }, - "creationTimestamp": { - "label": "Aangemaakt" } }, "table": { @@ -5310,43 +7323,17 @@ } }, "namespaces": { - "label": "Namespaces", - "field": { - "name": { - "label": "Naam" - }, - "state": { - "label": "Status", - "option": { - "active": "Actief", - "terminating": "Beëindigen" - } - }, - "creationTimestamp": { - "label": "Aangemaakt" - } - }, "table": { "search": "{count} namespaces zoeken" } }, "ingresses": { - "label": "Ingresses", "field": { - "name": { - "label": "Naam" - }, - "namespace": { - "label": "Namespace" - }, "className": { "label": "Class naam" }, "rulesAndPaths": { "label": "Regels & paden" - }, - "creationTimestamp": { - "label": "Aangemaakt" } }, "table": { @@ -5354,17 +7341,7 @@ } }, "services": { - "label": "Diensten", "field": { - "name": { - "label": "Naam" - }, - "namespace": { - "label": "Namespace" - }, - "type": { - "label": "Type" - }, "ports": { "label": "Poorten" }, @@ -5373,9 +7350,6 @@ }, "clusterIP": { "label": "Cluster IP" - }, - "creationTimestamp": { - "label": "Aangemaakt" } }, "table": { @@ -5383,25 +7357,12 @@ } }, "pods": { - "label": "Pods", "field": { - "name": { - "label": "Naam" - }, - "namespace": { - "label": "Namespace" - }, "image": { "label": "Afbeelding" }, "applicationType": { "label": "Applicatietype" - }, - "status": { - "label": "Status" - }, - "creationTimestamp": { - "label": "Aangemaakt" } }, "table": { @@ -5409,51 +7370,17 @@ } }, "secrets": { - "label": "Geheimen", - "field": { - "name": { - "label": "Naam" - }, - "namespace": { - "label": "namespace" - }, - "type": { - "label": "type" - }, - "creationTimestamp": { - "label": "Aangemaakt" - } - }, "table": { "search": "{count} geheimen zoeken" } }, "configmaps": { - "label": "ConfigMaps", - "field": { - "name": { - "label": "Naam" - }, - "namespace": { - "label": "namespace" - }, - "creationTimestamp": { - "label": "Aangemaakt" - } - }, "table": { "search": "{count} configMaps zoeken" } }, "volumes": { - "label": "Volumes", "field": { - "name": { - "label": "Naam" - }, - "namespace": { - "label": "Namespace" - }, "accessModes": { "label": "Toegangsmodi" }, @@ -5468,12 +7395,6 @@ }, "volumeName": { "label": "Volume naam" - }, - "status": { - "label": "Status" - }, - "creationTimestamp": { - "label": "Aangemaakt" } }, "table": { @@ -5482,6 +7403,29 @@ }, "error": { "internalServerError": "Kubernetes gegevens ophalen mislukt" + }, + "field": { + "name": { + "label": "Taaknaam" + }, + "namespace": { + "label": "Namespace" + }, + "creationTimestamp": { + "label": "Aangemaakt" + }, + "state": { + "label": "Taakstatus" + }, + "status": { + "label": "Status" + }, + "type": { + "label": "Client type downloaden" + }, + "architecture": { + "label": "Architectuur" + } } }, "permission": { @@ -5515,71 +7459,27 @@ }, "navigationStructure": { "manage": { - "workshop": { - "label": "Workshop" - }, "label": "Beheren", - "boards": { - "label": "Borden" - }, - "integrations": { - "label": "Integraties", + "custom-widgets": { "edit": { - "label": "Bewerken" + "flow": { + "label": "" + } }, - "new": { - "label": "Nieuw" - } - }, - "search-engines": { - "label": "Zoekmachines", - "new": { - "label": "Nieuw" + "workshop": { + "label": "Werkplaats" }, - "edit": { - "label": "Bewerken" - } - }, - "medias": { - "label": "Media" - }, - "apps": { - "label": "Apps", - "new": { - "label": "Nieuw" - }, - "edit": { - "label": "Bewerken" + "publish": { + "label": "Publiceer naar de Workshop" } }, "users": { - "label": "Gebruikers", - "create": { - "label": "Aanmaken" - }, "general": "Algemeen", - "security": "Beveiliging", - "board": "Borden", - "groups": { - "label": "Groepen" - }, - "invites": { - "label": "Uitnodigingen" - } + "security": "Beveiliging" }, "tools": { "label": "Gereedschappen", - "tasks": { - "label": "Taken" - }, - "docker": { - "label": "Docker", - "logs": { - "label": "Logboeken" - } - }, "kubernetes": { - "label": "Kubernetes", "nodes": { "label": "Nodes" }, @@ -5605,11 +7505,7 @@ "label": "Volumes" } }, - "logs": { - "label": "Logs" - }, "certificates": { - "label": "Certificaten", "hostnames": { "label": "Hostnamen" } @@ -5620,12 +7516,60 @@ }, "about": { "label": "Over" + }, + "assistant": { + "label": "Assistent" } } }, "search": { "placeholder": "Zoeken naar alles", "nothingFound": "Niets gevonden", + "modePicker": { + "search": { + "label": "Zoeken", + "placeholder": "Zoek apps, borden, pagina's, commando's en voorkeuren" + }, + "apps": { + "label": "Apps", + "placeholder": "Zoek apps, borden en integraties" + }, + "command": { + "label": "Opdrachten", + "placeholder": "Zoek acties en commando's" + }, + "preferences": { + "label": "named@@0", + "placeholder": "Zoek en wijzig voorkeuren" + }, + "assistant": { + "label": "Assistent", + "placeholder": "Vraag assistent" + }, + "external": { + "label": "Internet", + "placeholder": "Zoeken met een externe zoekmachine" + }, + "media": { + "label": "Medium", + "placeholder": "Zoek naar een film of show", + "fallback": "Media zoeken voor \"{query}\"" + }, + "userGroup": { + "label": "Mensen", + "placeholder": "Zoek gebruikers en groepen" + }, + "continueWith": "Doorgaan met", + "dialogAriaLabel": "{mode} commando menu", + "navigationLabel": "Zoek modi", + "modeAriaLabel": "{mode} modus", + "resultsAriaLabel": "{mode} resultaten", + "footer": { + "navigate": "Navigate", + "open": "Open", + "close": "Sluiten" + } + }, "error": { "fetch": "Er is een fout opgetreden tijdens het ophalen van gegevens" }, @@ -5634,7 +7578,6 @@ "help": "Zoeken naar apps, integraties of borden", "group": { "app": { - "title": "Apps", "children": { "action": { "open": { @@ -5650,7 +7593,6 @@ } }, "board": { - "title": "Borden", "children": { "action": { "open": { @@ -5670,9 +7612,6 @@ "title": "Selecteer een actie voor het bord" } } - }, - "integration": { - "title": "Integraties" } } }, @@ -5701,9 +7640,6 @@ "newBoard": { "label": "Een nieuw bord aanmaken" }, - "importBoard": { - "label": "Een bord importeren" - }, "newApp": { "label": "Een nieuwe app aanmaken" }, @@ -5773,7 +7709,6 @@ } }, "defaultSearchEngineId": { - "label": "Standaard zoekmachine", "children": { "detail": { "title": "Selecteer je standaard zoekmachine" @@ -5781,7 +7716,6 @@ } }, "openSearchInNewTab": { - "label": "Zoekresultaten openen in nieuw tabblad", "children": { "detail": { "title": "Zoekresultaten openen in nieuw tabblad" @@ -5789,7 +7723,6 @@ } }, "ddgBangs": { - "label": "DuckDuckGo bangs inschakelen", "children": { "detail": { "title": "DuckDuckGo bangs inschakelen" @@ -5804,6 +7737,13 @@ } } }, + "byteUnitSystem": { + "children": { + "detail": { + "title": "Selecteer de eenheden van uw datalimiet" + } + } + }, "homeBoardId": { "label": "Home bord", "children": { @@ -5821,7 +7761,6 @@ } }, "pingIconsEnabled": { - "label": "Gebruik iconen voor pings", "children": { "detail": { "title": "Gebruik iconen voor pings" @@ -5829,7 +7768,6 @@ } }, "enableRightClickOnWidgets": { - "label": "", "children": { "detail": { "title": "" @@ -5857,6 +7795,7 @@ "description": "Begin met typen om je media-aanvraag integraties te doorzoeken", "disabled": { "noIntegration": "Voeg een Overseerr, Jellyseerr of Seerr integratie toe om media zoeken in te schakelen.", + "signInRequired": "Aanmelden om integraties van media te doorzoeken.", "scoped": "Deze widget heeft geen toegankelijke media-aanvraag integratie." } } @@ -5873,7 +7812,6 @@ "help": "Gebruik een externe zoekmachine", "group": { "searchEngine": { - "title": "Zoekmachines", "tipDdgBangs": "Tip: Je kunt hier ook elke DuckDuckGo bang gebruiken, bijvoorbeeld !iets", "bang": { "searchWithQuery": "Zoek \"{query}\" met {label}", @@ -5924,20 +7862,6 @@ "group": { "mode": { "title": "Modi" - }, - "help": { - "title": "Help", - "option": { - "documentation": { - "label": "Documentatie" - }, - "submitIssue": { - "label": "Een probleem melden" - }, - "discord": { - "label": "Community Discord" - } - } } } }, @@ -5949,9 +7873,10 @@ "other": { "label": "Zoeken met andere zoekmachine" }, - "no-default": { - "label": "Geen standaard zoekmachine", - "description": "Stel een standaard zoekmachine in in voorkeuren" + "no-engines": { + "label": "Geen zoekmachines geconfigureerd", + "descriptionCreate": "Voeg een zoekmachine toe aan de zoekfunctie in het opdrachtmenu", + "descriptionUnavailable": "Vraag een beheerder om een zoekmachine te configureren" }, "search": { "label": "Zoeken naar \"{query}\" met {name}" @@ -6031,7 +7956,6 @@ "help": "Zoeken naar gebruikers of groepen", "group": { "user": { - "title": "Gebruikers", "children": { "action": { "detail": { @@ -6044,7 +7968,6 @@ } }, "group": { - "title": "Groepen", "children": { "action": { "detail": { @@ -6068,9 +7991,6 @@ "engine": { "search": "Vind een zoekmachine", "field": { - "name": { - "label": "Naam" - }, "short": { "label": "Kort" }, @@ -6083,12 +8003,19 @@ }, "page": { "list": { - "title": "Zoekmachines", + "ariaLabel": "Geconfigureerde zoekmachines", "noResults": { "title": "Er zijn nog geen zoekmachines", - "action": "Je eerste zoekmachine aanmaken" + "description": "Zoekmachines laten Spotlight een query verzenden naar een site of aangesloten service.", + "action": "Je eerste zoekmachine aanmaken", + "filteredTitle": "Geen zoekmachines die overeenkomen met je zoekopdracht", + "filteredDescription": "Geen zoekmachines komen overeen met \"{search}\". Probeer een andere naam of URL." }, - "interactive": "Interactief, gebruikt een integratie" + "interactive": "Interactief, gebruikt een integratie", + "type": { + "generic": "URL sjabloon", + "fromIntegration": "Integratie" + } }, "create": { "title": "Nieuwe zoekmachine", @@ -6107,11 +8034,9 @@ "title": "Zoekmachine bewerken", "notification": { "success": { - "title": "Wijzigingen succesvol toegepast", "message": "De zoekmachine is succesvol opgeslagen" }, "error": { - "title": "Kan wijzigingen niet toepassen", "message": "De zoekmachine kon niet worden opgeslagen" } }, @@ -6250,6 +8175,10 @@ } }, "log": { + "context": { + "widgetError": "Widget rapporteerde een fout rond deze tijd", + "expiredWidgetError": "Logs rond deze widgetfout zijn niet langer bewaard" + }, "level": { "option": { "debug": "Debug", @@ -6261,7 +8190,6 @@ }, "onboardingTour": { "learnMore": "Lees de documentatie", - "next": "Volgende", "prev": "Terug", "done": "Klaar", "skip": "Rondleiding overslaan", @@ -6325,5 +8253,359 @@ "description": "Wijzig je kleurenschema, taal, home bord en voorkeuren. Je kunt ook vanuit hier naar de beheerpagina gaan." } } + }, + "metadata": { + "description": "Een zelfgehoste dashboard voor de *arr stack en je hele vaderland. Integreert met 50+ diensten, real-time widgets, geen configuratie bestanden.", + "dashboardTitle": "{appName} Dashboard" + }, + "assistant": { + "title": "Assistent", + "open": "Open assistent", + "close": "Assistent sluiten", + "minimize": "Minimaliseer assistent", + "spotlight": "Vraag assistent", + "spotlightDescription": "Typ en verstuur een prompt zonder het opdrachtmenu te verlaten.", + "spotlightPrompt": { + "title": "Vraag assistent", + "description": "Typ hierboven een prompt in. Voer deze in op de achtergrond.", + "send": "Stuur prompt", + "empty": "Typ een prompt hierboven" + }, + "unavailable": { + "checking": "Controleren of de assistent beschikbaar is…", + "error": "De beschikbaarheid van de assistent kon niet worden gecontroleerd. Probeer het opnieuw.", + "notConfigured": "Een beheerder moet eerst de assistent configureren en inschakelen.", + "signIn": "Log in om assistent te gebruiken." + }, + "newConversation": "Nieuwe conversatie", + "conversations": "Gesprekken", + "conversationActions": "Gesprek acties", + "searchConversations": "conversaties doorzoeken", + "noMatchingConversations": "Geen overeenkomende gesprekken", + "moreActions": "Meer responsacties", + "renameConversation": { + "action": "Hernoem", + "label": "Naam gesprek", + "save": "Naam opslaan", + "failedTitle": "Gesprek kon niet worden hernoemd", + "failedDescription": "Homarr kan dit gesprek niet hernoemen. Probeer het opnieuw." + }, + "deleteConversation": { + "title": "Gesprek verwijderen?", + "description": "\"{title}\" en de bijbehorende berichten worden permanent verwijderd.", + "failedTitle": "Gesprek kon niet worden verwijderd", + "failedDescription": "Homarr kon dit gesprek niet verwijderen. Probeer het opnieuw." + }, + "closeHistory": "Gespreksgeschiedenis sluiten", + "openHistory": "Gespreksgeschiedenis openen", + "emptyTitle": "Waar kan ik mee helpen?", + "emptyDescription": "Vragen over uw Homarr installatie, bekijk gegevens van live instanties, of keurt acties goed wanneer u wilt dat ik een wijziging aanbrengt.", + "suggestions": { + "health": { + "label": "Controleer service gezondheid", + "prompt": "Bekijk mijn integraties en vat alles samen wat aandacht moet krijgen." + }, + "explore": { + "label": "Mijn Homarr verkennen", + "prompt": "Laat me zien wat ik in deze Homarr instantie kan bekijken en beheren." + }, + "media": { + "label": "Media zoeken om te vragen", + "prompt": "Help me een film of serie te vinden." + }, + "style": { + "label": "Verbeter het dashboard", + "prompt": "Help me met het verbeteren van het uiterlijk of aangepaste CSS. Laat me eerst mijn borden zien, en bewaar mijn huidige instellingen terwijl we de wijziging maken." + }, + "designWidget": { + "label": "Ontwerp een widget", + "prompt": "Maak en installeer een aangepaste widget voor " + } + }, + "composerPlaceholder": "Assistent vragen…", + "runtime": { + "model": "Model", + "searchModels": "Zoek modellen", + "noModels": "Geen modellen beschikbaar", + "otherModels": "Andere modellen", + "imageInput": "Afbeeldinginvoer accepteren", + "thinking": "Denken modus", + "reasoning": { + "auto": "Automatisch", + "none": "UIT", + "minimal": "Minimaal", + "low": "laag", + "medium": "Gemiddeld", + "high": "hoog" + } + }, + "providerQuota": { + "title": "Leverancier homeren", + "communityWorkshop": "Gemeenschap Workshop", + "dailyAllowance": "Dagelijkse verzoek vergoeding", + "remainingLabel": "{remaining} van {limit} Homarr aanbiederverzoeken resterend", + "loading": "Laden Homarr provider toelage", + "signInRequired": "Inloggen voor werkplaats vereist voor de Homarr provider", + "signInDescription": "Meld je aan met GitHub via de Community Workshop om je aparte dagelijkse vergoeding te ontvangen.", + "exhaustedDescription": "Uw Homarr provider toelage wordt gebruikt voor vandaag. Het wordt gereset om middernacht UTC.", + "unavailableDescription": "Meld je aan bij de Workshop of wacht tot je Homarr provider toelage is gereset.", + "signIn": "Log in met GitHub", + "signInError": "GitHub login is mislukt. Probeer het over een moment opnieuw.", + "loadError": "De Homarr provider kon niet worden geladen.", + "reset": "Reset {relative} in ", + "toolCalls": "Elke modelverzoek en voltooide hulpprogramma gebruikt één verzoek.", + "retry": "Herlaad toelage", + "level": { + "ok": "Ok", + "warning": "Waarschuwing", + "bad": "laag", + "dead": "Gebruikt" + } + }, + "stop": "Stop reactie", + "send": "Verstuur bericht", + "copy": "Antwoord kopiëren", + "copyMessage": "Bericht kopiëren", + "editMessage": "Bericht bewerken", + "updateMessage": "Bericht bijwerken", + "regenerate": "Regenereer reactie", + "helpful": "Nuttig", + "notHelpful": "Niet nuttig", + "readAloud": "Reactie hardop lezen", + "stopReading": "Stop met lezen", + "feedbackError": "Uw feedback kon niet worden opgeslagen. Probeer het opnieuw.", + "exportMarkdown": "Exporteren als Markdown", + "exportConversation": { + "action": "Gesprek exporteren als Markdown", + "failedTitle": "Gesprek kon niet worden geëxporteerd", + "failedDescription": "Homarr kon dit gesprek niet laden. Probeer het opnieuw." + }, + "reasoning": "Denken", + "previousResponse": "Vorige reactie", + "nextResponse": "Volgende reactie", + "removeAttachment": "Bijlage verwijderen", + "downloadFile": "Download {name}", + "attachedImage": "Bijgevoegde afbeelding", + "externalImageBlocked": "Externe afbeelding geblokkeerd voor privacy", + "image": { + "loading": "Laden van afbeelding", + "failed": "Deze afbeelding kon niet worden geladen.", + "retry": "Probeer opnieuw afbeelding" + }, + "quoteSelection": "Offerte", + "dismissQuote": "Prijsopgave verwijderen", + "attachments": { + "add": "Een afbeelding of document bijvoegen", + "errorTitle": "Bijlage kon niet worden toegevoegd", + "imageUnsupported": "Het geselecteerde model ondersteunt geen afbeelding invoer." + }, + "mentions": { + "menu": "Homarr context toevoegen", + "context": "Context", + "app": "Apps", + "integration": "Integraties", + "board": "Borden", + "widget": "Widgets", + "tools": "Beschikbare gereedschappen" + }, + "markdown": { + "diagram": "Diagram", + "renderingDiagram": "Diagram genereren…", + "diagramUnavailable": "Dit diagram kon niet worden weergegeven." + }, + "commands": { + "menu": "Assistent commando's", + "health": "Bereid een service-health check voor", + "explore": "Bereid een overzicht voor van deze Homarr instantie", + "media": "Bereid een media-zoekopdracht voor", + "style": "Bereid uiterlijk van een bord of aangepaste CSS voor", + "designWidget": "Bereid een een-prompt aangepaste widget build voor" + }, + "usage": { + "tokens": "tokens", + "contextWindow": "Context venster", + "requestDetails": "Details opvragen", + "used": "Laatste stap", + "remaining": "Resterend", + "capacity": "Capaciteit", + "input": "Input", + "output": "Uitvoer", + "cached": "Gebufferde invoer", + "cacheWrite": "Cache schrijven", + "reasoning": "Reden", + "inputShort": "inch", + "outputShort": "uit", + "cachedShort": "gecached", + "reasoningShort": "redenering", + "firstOutput": "Eerste uitvoer", + "homarrTiming": "Homarr waargenomen", + "endToEnd": "Einde tot einde", + "observedThroughput": "Waargenomen door", + "providerTiming": "Provider gerapporteerd", + "loadingProviderDetails": "Generatiedetails laden…", + "providerDetailsPending": "OpenRouter is nog steeds bezig met het verwerken van sommige generatiegegevens. Heropen om opnieuw te proberen.", + "providerLatency": "Provider latentie", + "generationTime": "Generatie tijd", + "moderationLatency": "Moderatie", + "providerThroughput": "Leverancier doorvoer", + "fallbacks": "Terugvallen", + "fallbackLatency": "Terugval latentie", + "cacheDiscount": "Cache korting", + "normalizedTokens": "OpenRouter genormaliseerde invoer / uitvoer", + "byok": "BEKIJK", + "cost": "Kosten", + "reported": "Gerapporteerd door provider", + "estimated": "Geschat van modelprijzen", + "upstreamCost": "Introductie stroomopwaarts", + "webSearches": "Web zoekopdrachten", + "finishReason": "Reden voltooien", + "notReported": "Niet gerapporteerd", + "agentSteps": "Agent stappen", + "step": "Stap {number}", + "generation": "Genereren" + }, + "toolInput": "Input", + "toolOutput": "Uitvoer", + "toolActivity": { + "iconSearch": "Zoeken naar \"{query}\" pictogrammen", + "iconBrowse": "Bladeren van beschikbare pictogrammen" + }, + "toolNavigation": { + "openPreview": "Voorbeeld openen", + "openWidget": "Widget openen" + }, + "webSearch": { + "title": "Web zoeken", + "completed": "OpenRouter heeft gezocht op het live web voor dit antwoord.", + "searches": "{count, plural, one {# zoekopdracht} other {# zoekopdrachten}}", + "sources": "{count, plural, one {# bron} other {# bronnen}}" + }, + "responseError": { + "title": "De assistent kon niet klaar zijn", + "description": "Probeer het opnieuw. Vraag een beheerder om het geconfigureerde model eindpunt te controleren als het probleem zich blijft voordoen." + }, + "toolPreparationError": { + "title": "Dit verzoek kon niet worden voorbereid", + "description": "Het model stopte voordat het volledige details leverde. Probeer het antwoord opnieuw of beschrijf het verzoek opnieuw. Er is geen wijziging doorgevoerd." + }, + "busy": { + "title": "De assistent werkt al", + "description": "Wacht op het huidige antwoord of open het om het uitvoeren te stoppen." + }, + "pendingAction": { + "answerTitle": "Antwoord nodig", + "answerFallback": "Kies een antwoord om door te gaan", + "formTitle": "Bekijk app details", + "boardFormTitle": "Beoordeel board wijzigingen", + "review": "Beoordelen", + "sendBlocked": "Los het lopende verzoek op voor het verzenden" + }, + "activity": { + "thinking": "Assistent denkt", + "working": "Werken aan uw prompt", + "ready": "Reactie klaar", + "completed": "Open het antwoord", + "approval": "Goedkeuring vereist", + "failed": "Assistent heeft aandacht nodig", + "expand": "Open de assistent reactie", + "dismiss": "Verwijder assistent activiteit" + }, + "scrollToLatest": "Scroll naar nieuwste", + "refresh": { + "action": "Vernieuw huidige weergave", + "working": "Vernieuwen huidige weergave", + "completeTitle": "Bekijk vernieuwd", + "completeDescription": "Zichtbare Homarr gegevens zijn herladen.", + "failedTitle": "Weergave kon niet worden vernieuwd", + "failedDescription": "De wijziging kan nog steeds worden opgeslagen. Probeer de vernieuwingsactie opnieuw." + }, + "askUser": { + "preparing": "Vragen voorbereiden", + "answered": "Uw antwoord", + "other": "Andere", + "otherLabel": "Uw antwoord", + "otherPlaceholder": "Typ een ander antwoord…", + "submit": "Stuur antwoord", + "cancelOther": "Annuleer ander antwoord", + "optionKind": { + "affirmative": "Bevestigen", + "negative": "Afwijzen", + "alternative": "Optie", + "custom": "Aangepaste" + } + }, + "configureApp": { + "title": "Bekijk app details", + "description": "Kies een lokaal pictogram en pas iets aan voordat de assistent om goedkeuring vraagt.", + "preparing": "Voorbereiden van app details", + "continue": "Gebruik deze details", + "ready": "App-gegevens klaar", + "automaticContinue": "Deze app details automatisch gebruiken" + }, + "configureBoardSettings": { + "title": "Beoordeel board wijzigingen", + "loading": "Huidige board instellingen worden geladen", + "loadErrorTitle": "Board instellingen konden niet worden geladen", + "loadErrorDescription": "Het bord bestaat niet meer of je hebt geen toestemming om het te wijzigen.", + "proposedCount": "Assistent voorgestelde {count} velden", + "changeCount": "{count} wijzigingen klaar", + "ready": "Aanpassingen op het bord", + "cancelled": "Huidige board instellingen bewaard", + "noChanges": "Geen instellingen gewijzigd", + "keepCurrent": "Huidige instellingen behouden", + "continue": "Ga verder naar goedkeuring", + "automaticContinue": "Automatisch wijzigingen in het voorgestelde bord accepteren", + "resetAll": "Reset alle wijzigingen", + "tabs": { + "css": "Custom CSS", + "appearance": "Weergave", + "background": "Achtergrond", + "general": "Algemeen" + }, + "cssDescription": "Bewerk het volledige stylesheet. Bestaande regels worden bewaard tenzij ze hier verwijderd worden.", + "cssCharacters": "{count} van 16384 tekens", + "copyCss": "Copy CSS", + "copied": "Gekoppeld", + "restoreCss": "Restore current CSS", + "remoteCssTitle": "Deze CSS laadt een externe bron", + "remoteCssDescription": "Geïmporteerde stylesheets en externe URL's nemen contact op met een andere server wanneer het bord wordt geladen. Controleer deze voordat u doorgaat." + }, + "configureWidget": { + "title": "Widget herzien", + "preparing": "Widget-instellingen voorbereiden", + "review": "Widget- en integraties herzien", + "ready": "Widget configuratie klaar", + "cancelled": "Widget is niet toegevoegd", + "automaticContinue": "Automatisch de voorgestelde widget configuratie accepteren", + "definitionLoadErrorTitle": "Widget instellingen konden niet geladen worden", + "definitionLoadErrorDescription": "Homarr kon de instellingen van deze widget niet laden. Probeer het opnieuw.", + "loadErrorTitle": "Integraties konden niet worden geladen", + "loadErrorDescription": "Homarr kon de integraties voor deze widget niet laden.", + "noIntegrationTitle": "Compatibele integratie is vereist", + "noIntegrationDescription": "Configureer een integratie ondersteund door deze widget voordat u deze toevoegt aan het dashboard.", + "connectIntegration": "Verbind service", + "manageIntegrations": "Integraties beheren", + "skip": "Niet toevoegen", + "errorTitle": "Widget instellingen konden niet worden voorbereid", + "errorDescription": "Het model heeft geen volledige widget configuratie opgegeven. Er is geen widget toegevoegd." + }, + "approvalRequired": "Goedkeuring vereist", + "complete": "Complete", + "denied": "Geweigerd", + "failed": "Mislukt", + "working": "Werken", + "approvalDescription": "Controleer deze wijziging voordat het wordt uitgevoerd.", + "approveAndRun": "Goedkeuren en uitvoeren", + "deny": "Weigeren", + "autoApproval": { + "label": "Automatische goedkeuringen", + "composerLabel": "Goedkeuren voor mij", + "title": "Automatische goedkeuringen", + "description": "Formulieren automatisch voorbereiden en beschermde wijzigingen goedkeuren voor dit gesprek. Vragen wachten nog op uw antwoord en uw Homarr machtigingen zijn nog steeds van toepassing. Dit schakelt uit wanneer u gesprekken wisselt.", + "enable": "Inschakelen voor dit gesprek", + "disable": "Automatische goedkeuringen uitschakelen", + "enabled": "Automatische goedkeuringen staan aan", + "approving": "Automatisch goedkeuren" + } } } diff --git a/packages/translation/src/lang/no.json b/packages/translation/src/lang/no.json index 014eeb2a5..5cb0907b0 100644 --- a/packages/translation/src/lang/no.json +++ b/packages/translation/src/lang/no.json @@ -1,156 +1,246 @@ { "init": { - "step": { - "start": { - "title": "Velkommen til Homarr", - "subtitle": "La oss begynne med å sette opp Homarr-forekomsten din.", - "description": "For å komme i gang, velg hvordan du vil sette opp din Homarr forekomst.", - "action": { - "scratch": "Start fra begynnelsen", - "importOldmarr": "Importer fra Homarr før 1.0", - "restoreSqlite": "Gjenopprett fra SQLite sikkerhetskopi", - "restoreSqliteDescription": "Last opp en full SQLite database sikkerhetskopi fra en tidligere Homarr instans. Dette vil gjenopprette alle tavler, brukere, apper, integrasjoner og innstillinger.", - "backToOptions": "λ Tilbake til innstillingsvalg" + "studio": { + "navigationLabel": "Onboarding avsnitt", + "back": "Tilbake", + "buildBoard": "Bygg min tavle", + "common": { + "unknownError": "Noe gikk galt. Dine valg er fortsatt her; prøv igjen." + }, + "claim": { + "checking": "Sikrer denne onboarding-økten…", + "checkingTitle": "Forbereder sikker oppsett", + "lockedTitle": "Konfigurasjonen er åpen i en annen nettleser", + "lockedDescription": "Fortsett der, eller vent på at den sikre førstegangs sesjon utløper før den prøver igjen.", + "signInTitle": "Administrator pålogging kreves", + "signInDescription": "En administrator finnes allerede. Logg på for å fortsette oppsettet uten å eksponere påloggingsinformasjon eller tilgang til tjenesten.", + "signIn": "Logg inn og fortsett", + "errorTitle": "Konfigureringen kunne ikke sikres", + "errorDescription": "Last siden på nytt for å prøve sikker førstegangsøkt." + }, + "navigation": { + "essentials": "Nødvendig", + "discover": "Oppdag", + "connect": "Nettverk", + "board": "Brett", + "extend": "Utvid", + "review": "Se over" + }, + "welcome": { + "title": "Velkommen hjem.", + "description": "Velkommen til Homarr v{version}. Vi vil lede deg gjennom essensielle verdier og hjelpe deg med å bygge din første tavle.", + "start": "Kom i gang", + "restore": "Gjenopprett sikkerhetskopi", + "restoreTitle": "Gjenopprett fra sikkerhetskopi", + "restoreDescription": "En full SQLite sikkerhetskopi gjenoppretter tavler, personer, apper, integrasjoner og innstillinger. Homarr validerer det før du erstatter noe.", + "errorTitle": "Installasjonen kunne ikke starte", + "errorDescription": "Dine konfigureringsvalg er fremdeles her. Prøv igjen, eller last inn siden på nytt hvis dette fortsetter." + }, + "account": { + "title": "Opprett din administrator", + "description": "Angi innloggingsdetaljene for administratorbrukeren din.", + "username": "Administrator brukernavn", + "passwordHint": "Det kreves bare et minimum på 8 tegn. De andre passordstyrke-sjekkene er forslag.", + "create": "Opprett administrator", + "errorTitle": "Administrator kunne ikke opprettes", + "recoveryTitle": "Brukerkonto er opprettet", + "recoveryDescription": "Automatisk innlogging er ikke fullført. Logg på med administratorlegitimasjon som du nettopp opprettet for å fortsette oppsettet.", + "recoveryAction": "Logg inn og fortsett", + "unknownError": "Administratoren kunne ikke opprettes." + }, + "externalGroup": { + "title": "Koble til administratorgruppen", + "description": "Bruk nøyaktig gruppenavn sendt av LDAP eller OIDC. Medlemmer i denne gruppen får administratortilgang.", + "name": "Ekstern administratorgruppe", + "nameDescription": "Dette er case-sensitive og må matche identiteten din.", + "continue": "Lagre gruppe og fortsett", + "errorTitle": "Gruppe kan ikke lagres", + "unknownError": "Administratorgruppen kunne ikke lagres." + }, + "essentials": { + "title": "Start med velkjente standarder", + "description": "Angi språket og utseendet alle ser først, og gi deretter adressmønsteret som brukes av tjenestene dine.", + "language": "Standardspråk", + "theme": "Standard tema", + "themeAuto": "System", + "themeLight": "Lys", + "themeDark": "Mørk", + "serverOriginHelp": "Homarr bruker denne adressen for å forhåndsutfylle oppdagede tjeneste-adresser. Du kan fremdeles redigere hver tjeneste individuelt.", + "serverDescription": "Dette er en snarvei, ikke en restriksjon. Alle oppdagede tjenester er fortsatt redigerbare.", + "serverOrigin": "Domain, IP, or reverse-proxy path", + "serverOriginDescription": "Eksempler: home.lan, 192.168.1.10, eller https://home.example.com/services. Velg hvordan hver tjeneste er lagt til nedenfor.", + "analytics": "Del anonym produktanalyse", + "analyticsDescription": "Hjelper Homarr forbedrer funksjonen. Ingen tjeneste innloggingsinformasjon eller dashbord innhold er sendt." + }, + "discover": { + "title": "Se hva denne installasjonen faktisk kan nå", + "description": "Homarr checks capabilities in place. A missing Docker socket or Kubernetes context blocks never a manual setup.", + "database": "Databasen", + "docker": "Dokumenter og kompatible kontakter", + "kubernetes": "Kubernetes", + "assistantWorkshop": "Assistent and Workshop", + "found": "Fant {integrations} integrasjoner og {apps} ekstra apper", + "retryKubernetes": "Sjekk Kubernetes igjen", + "retryWorkshop": "Sjekk Verksted igjen", + "unknownVersion": "ukjent versjon", + "kubernetesAvailable": "Koblet til Kubernetes {version}", + "kubernetesDisabled": "Ikke aktivert; fortsett med Docker eller manuelle tjenester", + "kubernetesUnavailable": "Kubernetes er aktivert, men kan ikke nås fra denne Homarr prosessen", + "workshopAvailable": "Fellesskapets arbeidssted og tjenester tilknyttet assistent er tilgjengelig", + "workshopUnavailable": "Lokale og tilpassede assistentleverandører forblir tilgjengelige", + "partialTitle": "Noen kilder kunne ikke skannes", + "partialDescription": "Resultatene fra tilgjengelige verter sprekker. Sjekk socket-tillatelser eller legg til tjenester manuelt i neste seksjon.", + "status": { + "checking": "Kontrollerer tilgjengelighet…", + "available": "Tilgjengelig", + "partial": "Delvis tilgjengelig", + "empty": "Tilstrekkelig, ingen samsvarende tjenester", + "disabled": "Deaktivert av serverkonfigurasjonen", + "unavailable": "Utilgjengelig fra denne Homarr prosessen" } }, - "import": { - "title": "Importer data", - "subtitle": "Du kan importere data fra en eksisterende Homarr-forekomst.", - "dropzone": { - "title": "Dra zip-filen hit eller klikk for å bla gjennom", - "description": "Den opplastede zip-filen vil bli behandlet og du kan velge hva du ønsker å importere" + "connect": { + "title": "Tilknytt hva som gjør tavlen nyttig", + "description": "Velg flere tjenester samtidig. Legeetikettene prioriterer bilde, bilder som matcher filer og alle URL-er og legitimasjonsopphold kan gjennomgås.", + "discoveredIntegrations": "Oppdagede integrasjonsinstanser ({count})", + "detectedIntegrationLabel": "Importer {name}, oppdaget som {kind}", + "detectedAppLabel": "Importer oppdagede apper {name}", + "otherIntegrations": "Legg til en ny integrasjon", + "configureIntegrations": "Konfigurer integrasjoner", + "discoveredApps": "Oppdagede apper ({count})", + "appAddressRequired": "Legg til en adresse for {name}, eller fjern den fra utvalget.", + "empty": "Ingen integrasjon valgt. Homarr vil fortsatt opprette en nyttig starttavle med generelle widgets.", + "dockerSource": "Docker", + "manualSource": "Manuell", + "url": "Tjeneste URL", + "noCredentials": "Ingen påloggingsinformasjon", + "noCredentialsDescription": "Denne integrasjonen trenger ikke legitimasjon.", + "credentialMethod": "Påloggings^metode", + "getApiKey": "Åpne API nøkkelinnstillingene for denne tjenesten", + "openGuide": "Åpne hjemmets oppsettsveiledning for denne tjenesten", + "testConnection": "Test tilkoblingen", + "testSuccess": "Tilkobling virker", + "testSuccessDescription": "Homarr knyttet til gjeldende adresse og legitimasjon.", + "testError": "Tilkobling feilet", + "testErrorDescription": "Kontroller tjenestens adresse og legitimasjon, og prøv på nytt.", + "needsConfiguration": "Trenger konfigurasjon", + "tested": "Tilkobling testet", + "testFailed": "Tilkoblingstesten mislyktes", + "incompleteConfirmation": "Uferdige integrasjoner vil bli hoppet over. Fortsette uten dem?" + }, + "board": { + "title": "Rist brettet før det er bygget", + "description": "Homarr skaper beskyttede og grunnleggende oppsett, og plasserer deretter programmer og kompatible widgets fra tjenestene du har valgt.", + "target": "Tavle som skal konfigureres", + "targetDescription": "Velg den nøyaktige eksisterende tavlen som denne oppsettet skal oppdateres.", + "targetPlaceholder": "Velg en tavle", + "targetRequired": "Velg tavle du vil konfigurere før du fortsetter.", + "name": "Navn på tavle", + "nameDescription": "Brukes i URL'en til tavlen; kun bokstaver, tall, bindestrek og understreker.", + "nameRequired": "Angi et navn på tavlen før du fortsetter.", + "primaryColor": "Primærfarge", + "secondaryColor": "Sekundærfarge", + "resetColors": "Tilbakestill farger", + "radius": "Miniprogram hjørneradius", + "radiusOptions": { + "xs": "Tatt", + "sm": "Lilla", + "md": "Balansert", + "lg": "Avrundet", + "xl": "Myk" }, - "fileInfo": { - "action": { - "change": "Endre fil" - } + "columns": "Kolonner på tavle", + "columnsDescription": "Kolonner definerer horisontalt rutenett som brukes til å angi størrelse og posisjon punkt 12 for de fleste.", + "columnCount": "{count, plural, one {# kolonne} other {# kolonner}}", + "leftSidebar": "Left sidebar", + "rightSidebar": "Høyre sidestolpe", + "previewLabel": "Live forhåndsvisning av første tavlevisning" + }, + "extend": { + "title": "Avanserte funksjoner", + "tabsLabel": "Assistant, workshop og MCP oppsett", + "assistant": "Assistent", + "workshop": "Verksted", + "assistantSetup": { + "loginTitle": "Administrator pålogging kreves", + "loginDescription": "Leverandørnøkler og modelltilgang er privilegert. Fullføre oppsettet, logg inn, og Homarr vil åpne assistentkonfigurasjonen direkte.", + "loginAction": "Logg inn for å konfigurere assistent" }, - "importSettings": { - "title": "Importinnstillinger", - "description": "Konfigurer import oppførsel" + "workshopSetup": { + "title": "Verksted for Homarr", + "description": "Bla gjennom brukerdefinerte Widgets, inspiser deres etterspurte funksjoner, installer dem og publiser ditt eget arbeid uten å kopiere kode mellom serverene.", + "available": "Tilgjengelig", + "checking": "Sjekker…", + "unavailable": "Unavailable", + "discoverTitle": "Oppdag", + "discoverDescription": "Finn moduler laget for ekte arbeidsflyter. (Automatic Translation)", + "installTitle": "Gjennomgå og installere", + "installDescription": "Se metadata og konfigurasjon før du legger til noe.", + "publishTitle": "Del", + "publishDescription": "Publiser gjenbrukbare widgets tilbake til samfunnet.", + "browse": "Bla gjennom Verksted" }, - "boardSelection": { - "title": "Fant {count} tavler", - "description": "Velg alle tavler med størrelse du vil importere", - "action": { - "selectAll": "Velg alle", - "unselectAll": "Velg bort alle" - } - }, - "summary": { - "title": "Importoversikt", - "description": "I oversikten nedenfor kan du se hva som vil bli importert", - "action": { - "import": "Bekreft import og fortsett" - }, - "entities": { - "apps": "Apper", - "boards": "Tavler", - "integrations": "Integrasjoner", - "credentialUsers": "Påloggings-brukere" - } - }, - "tokenModal": { - "title": "Angi import-token", - "field": { - "token": { - "label": "Token", - "description": "Angi vist import-token for din forrige Homarr forekomst" - } - }, - "notification": { - "error": { - "title": "Ugyldig token", - "message": "Token du anga er ugyldig" - } - } + "mcpSetup": { + "title": "Homarr MCP", + "description": "Koble Claude, Codex, eller en annen MCP-klient til Homarrets skrevne verktøy. API-nøkler holder eksplisitt tilgang og tilbakekallbart.", + "endpoint": "Streambart HTTP-endepunkt", + "keyTitle": "Kopier denne nøkkelen nå", + "keyDescription": "For sikkerhet, kan ikke Homarr vise denne API-nøkkelen igjen.", + "copyKey": "Kopier API-nøkkel", + "createKey": "Opprett en MCP API-nøkkel", + "errorTitle": "MCP API-nøkkel kunne ikke opprettes", + "loginRequired": "Logg på som administrator etter oppsett for å lage et API-nøkkel.", + "configuration": "Klientkonfigurasjon", + "copy": "Kopier konfigurasjon", + "copied": "Kopiert", + "advanced": "Åpne MCP-verktøy, tillatelser, og oppsettsdetaljer" } }, - "user": { - "title": "Admin-bruker", - "subtitle": "Angi innloggingsdetaljene for administratorbrukeren din.", - "notification": { - "success": { - "title": "Bruker opprettet", - "message": "Bruker opprettet" - }, - "error": { - "title": "Brukeropprettelse feilet" - } - } - }, - "group": { - "title": "Ekstern gruppe", - "subtitle": "Angi gruppen som skal brukes for eksterne brukere.", - "form": { - "name": { - "label": "Gruppenavn", - "description": "Navnet må stemme med administratorgruppe av ekstern leverandør" - } - } - }, - "settings": { - "title": "Innstillinger", - "subtitle": "Konfigurer serverinnstillinger." - }, - "integrations": { - "title": "Integrasjoner", - "subtitle": "Velg tjenestene du bruker.", - "description": "Velg integrasjoner du vil koble til. Vi vil sette opp dashbordet med matchende widgets automatisk.", - "action": { - "continue": "Fortsett", - "skip": "Hopp over for nå" - }, - "configure": { - "progress": "{current} av {total}", - "skip": "Hopp over denne integrasjonen", - "finishing": "Setter opp dashbordet ditt...", - "error": { - "title": "Installasjon mislyktes", - "message": "Noe gikk galt under oppretting av dashbordet. Vennligst prøv på nytt." - }, - "helpers": { - "tooltip": "URL helpers", - "description": "Disse hjelpere prøver å gjette URLen for tjenestene dine. Hvis det ikke fungerer, bare skriv inn adressen manuelt." - } - }, - "urlTemplate": { - "label": "Standard URL", - "placeholder": "homelab.lokal eller 192.168.1.1", - "hint": "Angi ditt basisdomene eller IP til automatisk utfylling av integrasjons-URLer", - "warning": "Når du angir din basis-URL vil automatisk utfylle alle nettadresser, men lagrer deg tid under oppsett", - "preview": "f.eks {example}", - "mode": { - "subdomain": "Underdomene", - "hostPort": "Vert:Port" - } - }, - "docker": { - "detected": "Docker oppdaget {count} tjenester", - "detectedBreakdown": "{integrations} integrasjoner · {apps} apper", - "summary": "Homarr oppdaget {apps} apper, {integrations} har innebygd integrasjoner", - "appBadge": "App", - "appSectionLabel": "Apper som legges til dashbord ({count} valgt)", - "scanning": "Skanner Docker...", - "scanningDescription": "Leter etter kjørende beholdere på systemet ditt" + "review": { + "title": "Et bord, bygget rundt tjenestene dine", + "description": "Homarr tester som ikke er lagrede forbindelser, importer de valgte appene, anvender utseende og oppsett og åpner så den eksakte brettet det er konfigurert.", + "board": "Første tavle", + "columns": "Kolonner på tavle", + "columnsValue": "{count, plural, one {# kolonne} other {# kolonner}}", + "sidebars": "Sidefelt", + "sidebarsValue": "{count, plural, =0 {None} one {# sidebar} other {# sidebars}}", + "layouts": "Responsivt oppsett", + "layoutsValue": "Mobil + Base", + "integrations": "Integrasjoner", + "integrationsValue": "{count, plural, =0 {Ingen valgte} one {# integrasjon} other {# integrasjoner}}", + "apps": "App fliser", + "appsValue": "{count, plural, =0 {Kun startapper} one {# appflis} other {# appfliser}}", + "language": "Språk", + "theme": "Tema", + "themeAuto": "Systemets preferanse", + "themeLight": "Lys", + "themeDark": "Mørk", + "colors": "Farger for tavle", + "radius": "Widget radius", + "automaticTitle": "Hva Homarr skal opprette", + "automaticDescription": "Kompatible moduler, ikoner, applinker, integrasjonsrelasjoner og responsiv plassering kommer fra delt Homarr katalog. Du kan redigere hvert resultat senere.", + "dockerWarningTitle": "Noen Docker-etiketter endret under oppsett", + "dockerWarningDescription": "{count, plural, one {# valgte Docker-resultat kunne ikke brukes fordi tjenesten ble endret, målrettet en annen tavle eller dens widget var inkompatibelt} other {# valgte Docker-resultater kunne ikke brukes fordi tjenester er endret, målrettet et annet tavle, eller deres widgets var inkompatible til}}", + "errorTitle": "Kan ikke bygge tavle", + "progress": { + "applying": "Teste forbindelser og bygge din tavle", + "done": "Tavlen er klar" } }, "finish": { - "title": "Fullfør oppsett", - "subtitle": "Alt er klart!", - "description": "Du har fullført installasjonsprosessen. Du kan nå bruke Homarr. Velg din neste handling:", - "action": { - "goToBoard": "Gå til {name} tavlen", - "createBoard": "Opprett din første tavle", - "inviteUser": "Inviter andre brukere", - "docs": "Les dokumentasjonen" - } + "title": "Den første tavlen din er klar.", + "description": "Homarr koblet sammen de valgte delene og holdt resten redigerbaren. Åpne tavlen nå; korte i produktomvisning kan vise deg redigeringsmodus, widgets, oppsett og søk.", + "openBoard": "Åpne tavlen min", + "manageTitle": "Administrer", + "manageDescription": "Finale apper, integreringer, tavler, brukere og serverinnstillinger.", + "workshopTitle": "Verksted", + "workshopDescription": "Oppdag og installer samfunnet Egendefinerte Widgets.", + "docsTitle": "Lær Homarr", + "docsDescription": "Les veiledningene i fokusområdet for tavler, widgets, integrasjon og verktøy." } - }, - "backToStart": "Tilbake til start" + } }, "user": { - "title": "Brukere", "name": "Bruker", "page": { "login": { @@ -159,12 +249,10 @@ }, "invite": { "title": "Bli med i Homarr", + "titleWithAppName": "Delta i {appName}", "subtitle": "Velkommen til Homarr! Vennligst opprett en konto", + "subtitleWithAppName": "Velkommen til {appName}! Vennligst lag din konto", "description": "Du ble invitert av {username}" - }, - "init": { - "title": "Ny Homarr installasjon", - "subtitle": "Vennligst opprett den første administratorbrukeren" } }, "field": { @@ -192,15 +280,20 @@ "previousPassword": { "label": "Forrige passord" }, - "homeBoard": { - "label": "Hjem tavle" - }, "pingIconsEnabled": { "label": "Bruk ikoner for pinger" }, + "byteUnitSystem": { + "label": "Større dataenheter", + "description": "Velg hvordan Homarr viser bytestørrelser og byte. Beit priser bruker alltid desimaler.", + "options": { + "binary": "Binær", + "decimal": "Desimal" + } + }, "enableRightClickOnWidgets": { "label": "Aktiver høyreklikk på widgets", - "description": "Vis Hjemmens kontekstmeny når høyre klikker en widget. Deaktiver for å bruke nettleserens standardmeny (f.eks \"Åpne link i ny fan\")." + "description": "Vis Homarrs hurtigmeny når du høyreklikker på en widget. Deaktiver for å bruke nettleserens standardmeny (f.eks. «Åpne lenke i ny fane»)." }, "defaultSearchEngine": { "label": "Standard søkemotor" @@ -247,7 +340,6 @@ } } }, - "create": "Opprett bruker", "changePassword": { "label": "Endre passord", "notification": { @@ -259,56 +351,6 @@ } } }, - "changeHomeBoard": { - "notification": { - "success": { - "message": "Hjem tavle ble endret" - }, - "error": { - "message": "Kune ikke endre hjem tavle" - } - } - }, - "changeSearchPreferences": { - "notification": { - "success": { - "message": "Søkeinnstillingene endret" - }, - "error": { - "message": "Kunne ikke endre søkeinnstillingene" - } - } - }, - "changeFirstDayOfWeek": { - "notification": { - "success": { - "message": "Første dag i uken endret" - }, - "error": { - "message": "Kunne ikke endre første dag i uken" - } - } - }, - "changePingIconsEnabled": { - "notification": { - "success": { - "message": "Ping av ikoner endret" - }, - "error": { - "message": "Kunne ikke endre ping av ikoner" - } - } - }, - "changeDdgBangs": { - "notification": { - "success": { - "message": "DuckDuckGo bangs er endret vellykket" - }, - "error": { - "message": "Kan ikke slå av/på DuckDuckGo bangs" - } - } - }, "manageAvatar": { "changeImage": { "label": "Endre bilde", @@ -338,16 +380,6 @@ } } }, - "editProfile": { - "notification": { - "success": { - "message": "Profil oppdatert" - }, - "error": { - "message": "Kan ikke oppdatere profil" - } - } - }, "delete": { "label": "Slett bruker permanent", "description": "Sletter denne brukeren inkludert deres innstillinger. Vil ikke slette tavler. Brukeren vil ikke bli varslet.", @@ -356,18 +388,13 @@ "select": { "label": "Velg bruker", "notFound": "Ingen bruker funnet" - }, - "transfer": { - "label": "Velg ny eier" } } }, "group": { - "title": "Grupper", "name": "Gruppe", "search": "Finn en gruppe", "field": { - "name": "Navn", "members": "Medlemmer", "homeBoard": { "label": "Hjem tavle", @@ -388,6 +415,19 @@ } } }, + "custom-widget": { + "title": "Tilpassede widgets", + "item": { + "manage": { + "label": "Administrere egendefinerte widgets", + "description": "Tillate medlemmer å opprette, redigere og slette egendefinerte widgetdefinisjoner" + }, + "secret-write": { + "label": "Konfigurer egendefinerte widget hemmeligheter", + "description": "Tillat medlemmer og deres API nøkler å angi kryptert egendefinert widget legitimasjon" + } + } + }, "app": { "title": "Apper", "item": { @@ -493,6 +533,35 @@ "description": "Tillat medlemmer å administrere og slette alle søkemotorer" } } + }, + "matrix": { + "none": "Ingen tilgang", + "impliedHint": "Også {permissions}", + "grantedViaAdmin": "Administratorer har allerede dette. Sett Admin til \"Ingen tilgang\" for å konfigurere det separat.", + "preset": { + "label": "Forhåndsinnstillinger", + "viewer": "Bruker", + "viewerDescription": "Skrivebare: Se tavler og medier, bruk programmer og integrasjoner som allerede finnes.", + "editor": "Redaktør", + "editorDescription": "Dag-til-dag-behandling: Opprett og rediger tavler, apper, integrasjoner og søkemotorer.", + "admin": "Administrator", + "adminDescription": "Ubegrenset tilgang til alle funksjoner og innstillinger, inkludert brukerhåndtering.", + "custom": "Egendefinert" + }, + "effective": { + "title": "Effektive tillatelser", + "description": "Fullt, duplisert sett av medlemmer i gruppen kan utføre, inkludert tillatelser gitt indirekte.", + "empty": "Ingen tillatelser valgt" + }, + "noneDescription": "Medlemmer får ikke tilgang til dette området.", + "level": { + "view": "Visning", + "use": "Bruk", + "interact": "Interagere", + "modify": "Endre", + "full": "Full" + }, + "capabilityIncluded": "Allerede inkludert i \"{level}\"" } }, "memberNotice": { @@ -607,21 +676,24 @@ "search": "Finn en app", "page": { "list": { - "title": "Apper", + "ariaLabel": "Konfigurerte apper", "noResults": { "title": "Det er ingen apper enda", - "action": "Opprett din første app" + "description": "Programmer er lenker til tjenestene og verktøyene du vil ha i tavlene dine.", + "action": "Opprett din første app", + "filteredTitle": "Ingen apper samsvarer med søket ditt", + "filteredDescription": "Ingen apper samsvarer med \"{search}\". Prøv et annet navn eller URL.", + "createOnlyTitle": "Du kan bare legge til apper", + "createOnlyDescription": "Tillatelsene dine lar deg opprette apper, men ikke bla gjennom eksisterende. Be en administrator om tilgang til app administrasjon for å se listen fullstendig." } }, "create": { "title": "Ny app", "notification": { "success": { - "title": "Opprettelse vellykket", "message": "App opprettet" }, "error": { - "title": "Opprettelse mislyktes", "message": "App kunne ikke opprettes" } } @@ -630,11 +702,9 @@ "title": "Rediger app", "notification": { "success": { - "title": "Endringer fullført", "message": "App lagret" }, "error": { - "title": "Kunne ikke fullføre endringer", "message": "App kunne ikke lagres" } } @@ -644,26 +714,18 @@ "message": "Er du sikker på at du vil slette appen {name}?", "notification": { "success": { - "title": "Slettet", "message": "App slettet" }, "error": { - "title": "Sletting feilet", "message": "Kunne ikke slette appen" } } } }, "field": { - "name": { - "label": "Navn" - }, "description": { "label": "Beskrivelse" }, - "url": { - "label": "Url" - }, "useDifferentUrlForPing": { "checkbox": { "label": "Bruk annen URL for ping", @@ -678,34 +740,582 @@ "search": "Søk etter en app", "noResults": "Ingen resultater", "action": "Velg {app}", - "title": "Velg en app for å legge den til på dette brettet" + "title": "Velg en app for å legge den til på dette brettet", + "toggle": "Klikk for å velge", + "selected": "Valgt", + "multiple": "Legg til {count}", + "selectedCount": "{count, plural, one {# valgt} other {# valgt}}", + "appsSelected": "{count, plural, one {# app valgt} other {# apper valgt}}", + "selectMultiple": "Velg flere", + "cancelMultiple": "Avslutt multivalg", + "customApplication": "Egendefinert applikasjon", + "application": "Applikasjon" }, "create": { "title": "Lag ny app", "description": "Lag en ny app ", "action": "Åpne appoppretting" + } + } + }, + "tips": { + "dismiss": "Avvis tips", + "multiSelectApps": "Tips: Hold Ctrl / b for å velge flere apper samtidig" + }, + "customWidget": { + "secretEntry": { + "title": "Konfigurere API kilde", + "description": "Bekrefte tjenerens URL og skriv inn legitimasjon. Hemmelig verdier er kryptert av Homarr og returnerte aldri til den forespurte agenten.", + "loading": "Laster sikker forespørsel…", + "applying": "Bruker denne konfigurasjonen… Hold denne siden åpen.", + "saved": "API-kilde konfigurert. Du kan lukke denne siden.", + "unavailable": "Forespørsel utilgjengelig", + "saveError": "Kan ikke konfigurere API kilde", + "source": "API-kilde: {name}", + "baseUrl": "URL til server", + "networkScope": "Nettverk tilgang", + "save": "Lagre API-konfigurasjon", + "expires": "Denne engangsforespørselen utløper ved {time}." + }, + "page": { + "list": { + "noResults": "Ingen tilpassede widgets ennå. Opprett din første!", + "noDescription": "Ingen beskrivelse", + "enabled": "Aktivert", + "disabled": "Deaktivert", + "disabledDescription": "Denne widgeten forblir konfigurert, men vil ikke lastes inn på noen tavler.", + "requestCount": "{count, plural, one {# forespørsel} other {# forespørsler}}", + "invalidDefinition": "Ugyldig definisjon", + "migrationRequired": "Migrasjon kreves", + "migrationInstructions": "Åpne handlinger for å kopiere eller eksportere den opprinnelige v1 definisjonen for manuell rekreasjon. Du kan også benytte migrasjonsguiden med en LLM. Eksisterende bords plasseringer fortsetter å jobbe etter migrasjon.", + "missingCredentials": "{count, plural, one {Påloggingsopplysninger mangler} other {# Pålogginger mangler}}", + "missingCredentialsDescription": "{count, plural, one {Denne widgeten trenger fortsatt én legitimasjon.} other {Denne widgeten trenger fortsatt # brukeropplysninger.}} Velg dette merket for å konfigurere URL-en og krypterte verdier." }, - "add": "Legg til en app" + "create": { + "title": "Opprett tilpasset widget", + "subtitle": "Angi en API-URL, autentisering og hvordan svardataene skal vises." + }, + "tabs": { + "ariaLabel": "Tilpassede widget-seksjoner", + "installed": "Installert", + "workshop": "Verksted" + } + }, + "action": { + "pasteImportHint": "Lim inn en fullstendig egendefinert widget JSON med Ctrl+V eller Kommand+V", + "delete": "Slett tilpasset widget", + "deleteConfirm": "Er du sikker på at du vil slette \"{name}\"? Handlingen kan ikke angres.", + "export": "Eksporter", + "duplicate": "Duplicate", + "aiPrompt": "Design med AI", + "copyAiPrompt": "Kopier AI ledetekst", + "enable": "Aktiver", + "disable": "Deaktiver", + "menu": "Handlinger", + "downloadSkill": "Vis tilpasset Widget ferdighet", + "publishWorkshop": "Publiser til Verksted", + "migrate": "Migrere tilpasset widget", + "configureSources": "Konfigurer kilder", + "copyLegacyDefinition": "Kopier opprinnelig innhold fra widget", + "exportLegacyDefinition": "Eksporter opprinnelig widget innhold", + "copyMigrationPrompt": "Kopier LM overføringsforespørsel", + "pasteMigration": "Lim inn migrert widget", + "importMigration": "Importer migrert JSON-fil" + }, + "sourceSetupDialog": { + "title": "Konfigurer widget kilder", + "description": "Gjennomgå hvor denne widgeten kobler til, eller erstatt dens krypterte legitimasjon.", + "credentialsRequired": "Forespørsler vil ikke besto før den nødvendige legitimasjonen er lagt til.", + "save": "Lagre konfigurasjon" + }, + "field": { + "description": "Beskrivelse" + }, + "editor": { + "errorBoundary": { + "title": "Noe gikk galt" + }, + "action": { + "components": "Komponenter", + "format": "Formatér", + "insertStarter": "Insert starter", + "redo": "Gjenta", + "copied": "Kopiert", + "schema": "Skjema" + }, + "reference": { + "minimal": "Minimalt eksempel", + "full": "Fullt eksempel" + }, + "componentReference": { + "search": "Søk i komponenter", + "empty": "Ingen samsvarende komponenter", + "count": "{count, number} tilgjengelige komponenter" + }, + "status": { + "errors": "{count, number} feil", + "warnings": "{count, number} advarsler", + "ready": "Ingen feil funnet", + "position": "Ln {line, number}, Col {column, number}", + "characters": "{count, number} karakterer", + "charactersWithLimit": "{count, number} / {limit, number}" + }, + "diagnostics": { + "title": "Mal diagnostikk", + "line": "Linje {line, number}", + "ast": "{value}", + "bindingTypeConflict": "Inndata \"{value}\" deles av kontroller med inkompatible verdityper.", + "runtimeBindingTypeConflict": "Inndata \"{value}\" er bundet som både {firstType} og {secondType}.", + "dynamicRequestId": "En literal forespørsel-ID er nødvendig. Dynamiske forespørsler er ikke akseptert.", + "dynamicInputBinding": "Et literal inndatanavn kreves for bind.", + "inlineRequestProps": "Nettverkskomponenter godtar forespørsels-IDen og paramene; inline URL, metode, headeren og kropps-rekvisitter er blokkert.", + "invalidRequestManifest": "Navnede forespørsler må være et gyldig forespørselskart. {value}", + "missingRequestId": "Denne nettverkskomponenten krever literal forespørsel.", + "templateEmpty": "Angi en JSX mal", + "templateTooLong": "Malen overskrider grensen på 50.000 tegn.", + "unknownRequest": "Ingen navngitt forespørsel med ID \"{value}\" finnes." + } + }, + "workbench": { + "configure": "Konfigurer", + "sectionNavigation": "Tilpassede widget-seksjoner", + "widgetPreview": "Forhåndsvisning av widget", + "generalInformation": "Generell informasjon", + "invalidWidget": "Ugyldig widget", + "section": { + "general": "Generelt", + "sources": "API kilder", + "requests": "Forespørsler", + "options": "Alternativer", + "jsx": "JSX", + "preview": "Forhåndsvisning" + }, + "status": { + "unsaved": "Ulagrede endringer", + "invalid": "Trenger oppmerksomhet", + "ready": "Klar" + }, + "saveError": { + "title": "Widget ble ikke lagret", + "description": "Fiks disse valideringsfeilene og lagre på nytt.", + "more": "+{count} flere feil vises i arbeidsbenken.", + "errors": "Valideringsfeil", + "copy": "Kopier feil", + "copied": "Kopierte feil" + }, + "action": { + "preview": "Test og forhåndsvisning", + "previewLoading": "Tester forespørsler" + }, + "requests": { + "title": "Navngitte spørringer og handlinger", + "label": "Forespørsler", + "description": "Queries load data; actions only run after user interaction. Any HTTP method is valid for one kind." + }, + "options": { + "title": "Widget alternativer" + }, + "builder": { + "advancedManifest": "Avansert rå manifest", + "advancedJson": "Avansert manifest JSON", + "manifestFilename": "widget.json", + "request": "Forespørsel {count, number}", + "requestId": "Forespørsel ID", + "type": "Nedlastings-klient type", + "method": "Metode", + "source": "API kilde", + "run": "Kjør", + "runLoad": "Når widgeten lastes inn", + "runManual": "Fra underhenting", + "permission": "Rettighet", + "path": "Sti", + "pathDescription": "Bruk '{option:name}' for widgetopsjoner og '{param:name}' for oppkoplingsverdier.", + "requestDetails": "Spørring, kroppsbygning og oppførsel", + "queryValues": "Spørreverdier", + "queryKey": "Spørre nøkkel", + "queryKeyInvalid": "Bruk en unik ID som starter med en bokstav og kun inneholder bokstaver, tall, - eller _.", + "valueSource": "Verdi kilde", + "literal": "Literal", + "widgetOption": "Alternativer for widget", + "invocationParameter": "Besøks parametre", + "option": "Alternativ", + "parameterName": "Parameter navn", + "value": "Verdi", + "removeQueryValue": "Fjern spørringsverdi", + "addQueryValue": "Legg til spørringsverdi", + "jsonBody": "JSON hoveddel", + "jsonBodyDescription": "Valgfritt. Sett inn referanser fra $option og $param på alle dybder.", + "insertOptionReference": "Sett inn referanse", + "insertParameterReference": "Sett inn parameterreferanse", + "confirmation": "Bekreftelse melding", + "invalidation": "Gjenoppfrisk etter suksess", + "invalidationDescription": "Komma-separert spørrings-IDer", + "noAuth": "Send uten kilde-autentisering", + "moveRequestUp": "Flytt forespørsel opp", + "moveRequestDown": "Flytt forespørsel ned", + "removeRequest": "Fjern forespørsel", + "addRequest": "Opprett forespørsel", + "optionName": "Alternativ navn", + "label": "Etikett", + "control": "Styring", + "description": "Beskrivelse", + "default": "Standard", + "optionDetails": "Betingelser og dynamiske valg", + "minimum": "Minimum", + "maximum": "Maksimum", + "step": "Trinn", + "choiceLabel": "Valg etikett", + "choiceValue": "Valg verdi", + "newChoice": "Nytt valg", + "addChoice": "Legg til valg", + "removeChoice": "Fjern valget", + "choicesRequest": "Last valg fra forespørsel", + "itemsPath": "Bane til elementer", + "itemsPathPlaceholder": "elementer (valgfritt)", + "valuePath": "Plassering av verdi", + "labelPath": "Etikett sti", + "group": "Gruppe", + "advancedOption": "Avansert valg", + "moveOptionUp": "Flytt alternativet opp", + "moveOptionDown": "Flytt alternativet ned", + "removeOption": "Fjern alternativet", + "addOption": "Legg til alternativ", + "invalidJson": "Ugyldig JSON", + "invalidWidget": "Ugyldig widget" + }, + "jsx": { + "title": "JSX-mal", + "label": "Mal" + }, + "sources": { + "title": "API kilder og legitimasjon", + "newName": "API {count, number}", + "duplicateSourceId": "API-kilde IDer må være unike.", + "credentialRemoved": "Legitimasjon fjernet", + "credentialRemovedDescription": "Den lagrede verdien ble slettet.", + "primary": "Primær API", + "id": "Kilde ID", + "name": "Jobb navn", + "baseUrl": "Standard URL", + "baseUrlError": { + "invalid": "Angi en fullstendig URL.", + "protocol": "Bruk en HTTP eller HTTPS-URL.", + "credentials": "Fjern brukernavnet og passordet fra denne URL-adressen. Konfigurer opplysningene under i stedet.", + "queryOrFragment": "Fjern spørringsstrengen eller fragment fra denne basale URL-en. Legg til maleverdier til en navngitt forespørsel." + }, + "networkScope": "Nettverk tilgang", + "authentication": "Autentisering", + "headerName": "Navn på topptekst", + "queryParameter": "Parameter for spørring", + "configured": "Konfigurert – angi en erstatning", + "clear": "Tøm", + "remove": "Fjern kilde og dens forespørsler", + "advanced": "Avansert", + "add": "Legg til en API-kilde", + "sourceType": "Integrasjon", + "manualSource": "HTTP API", + "existingIntegration": "Eksisterende integrering", + "integrationType": "Integrasjon type", + "selectIntegration": "Konfigurert integrasjon", + "noIntegrations": "Ingen matchende integrasjoner tilgjengelig", + "integrationUnavailable": "Den valgte integrasjonen er ikke lenger tilgjengelig. Velg en annen integrasjon.", + "integrationDescription": "Bruker den lagrede integrasjons-nettadressen og legitimasjonene. Endringer gjelder automatisk. Full integrasjonstilgang kreves for å kjøre forespørsler." + }, + "ai": { + "title": "Opprette eller løse med en AI", + "description": "Legg til en URL for API-dokumentasjon først hvis du har en. For fikser, kjør forhåndsvisning om mulig. Kopier ledeteksten til en AI; det kan be om manglende detaljer. Lim inn den endelige JSONen.", + "request": "Hva skal denne widgeten?", + "documentationUrl": "API dokumentasjonsURL (valgfritt)", + "paste": "Lim", + "response": "AI respons", + "manualCopyDescription": "Tilgang på utklippstavle er utilgjengelig. Velg ledeteksten nedenfor og kopier det manuelt.", + "manualPasteDescription": "Utklippstavletilgang er ikke tilgjengelig, eller det kopierte svaret trenger korreksjon. Lim inn AIs JSON-svar her.", + "selectAll": "Velg alle", + "loadResponse": "Last respons", + "loaded": "Widget lastet inn i editoren", + "invalidResponse": "Utklippstavlen inneholder ikke en gyldig v2 widget", + "invalidResponseDetail": "AI-svaret er ugyldig: {message}" + }, + "preview": { + "invalid": "Fiks valideringsfeil til å forhåndsvise denne modulen.", + "fixtureError": "Forhåndsvis fixture feil", + "requestData": "Be om data", + "status": { + "idle": "Forespørsler har ikke blitt testet", + "loading": "Tester forespørsler", + "success": "Alle opplastingsforespørsler var vellykket", + "error": "En eller flere innlastingsforespørsler mislyktes" + }, + "result": { + "loading": { + "title": "Tester API-forespørsler", + "description": "Homarr oppretter en forhåndsvisningsøkt og laster inn widget-data." + }, + "success": { + "title": "Forhåndsvisning klar", + "description": "{succeeded, plural, =0 {Denne widgeten har ingen laste inn forespørsler.} one {# last forespørsler var vellykket.} other {# last forespørsler var vellykked!}} Åpne data for å inspisere responsen." + }, + "error": { + "title": "Forhåndsvisning fullført med forespørselsfeil", + "description": "{succeeded, number} lykkes og {failed, number} mislyktes. Åpne data for svaret og feilinformasjonen." + } + }, + "instanceOptions": "Alternativer for forekomst", + "liveActions": "Kjør handlinger mot det konfigurerte API-et", + "liveActionsDescription": "Av er sikker simulering. Slår dette på og påvirker den reelle tjenesten.", + "noActions": "Ingen handlinger er definert.", + "containedFailures": "Kjøringsfeil finnes i denne widgeten. Forespørsler tidsskrifter inkluderer aldri hemmelige verdier.", + "validation": { + "title": "Validering", + "ready": "Widgetdefinisjonen er gyldig." + }, + "accessibility": { + "title": "Tilgjengelighetskontroller", + "ready": "Ingen felles tilgjengelighetsutelatelser oppdaget.", + "pending": "Tilgjengelighetskontroller kjøres når widgetdefinisjonen er gyldig.", + "imageAlt": "Legge til alttekst i hvert bilde, med et tomt alt bare for dekorative bilder.", + "actionIconLabel": "Legg til en aria-etikett eller tittel til hver handling-ikon.", + "inputLabel": "Legg til en synlig etikett eller tilgjengelig navn for hver inngang." + }, + "journal": "Lagret journal for gjenreisning", + "actionParameters": "Handlingsparametere (JSON)", + "invalidParameters": "Bruk den deklarerte strengen, antallet og boolske parametertypen.", + "runDestructive": "Kjør destruktiv handling", + "runAction": "Kjør handlingen", + "deleteConfirmation": "Denne forhåndsvisningshandlingen endrer eksterne data gjennom det konfigurerte API-et.", + "simulated": "Operasjon simulert", + "httpStatus": "HTTP {status, number}", + "tab": { + "widget": "Moduler", + "data": "Data", + "options": "Alternativer", + "state": "Jobb status", + "actions": "Kontroller", + "diagnostics": "Diagnostikk" + }, + "size": { + "compact": "Kompakt", + "standard": "Vanlig", + "wide": "Bred" + }, + "fixture": { + "live": "Direkte", + "loading": "Laster", + "empty": "Tøm", + "error": "Feil" + } + } + }, + "preview": { + "request": { + "permission": { + "view": "Visning", + "modify": "Endre", + "full": "Full" + } + } + }, + "notification": { + "created": "Widget \"{name}\" opprettet.", + "updated": "Widget \"{name}\" oppdatert.", + "deleted": "Widget \"{name}\" slettet.", + "imported": "Widget ble importert.", + "migrated": "Eldre widget migrert vellykket. Eksisterende tavplasseringer bruker nå v2-definisjonen.", + "migrationError": "Kunne ikke migrere den eldre widgeten. Påse at filen bruker \"homarr-custom-widget-v2 skjema\".", + "legacyDefinitionCopied": "Det opprinnelige widgetinnholdet ble kopiert. Lagrede innloggingsverdier er ikke inkludert.", + "legacyDefinitionCopyError": "Kunne ikke kopiere det opprinnelige widgetinnholdet.", + "migrationPromptCopied": "En redacted migration-ledetekst ble kopiert. Lim den inn til en LM, kopier dens ene JSON-respons, og velg lim inn widget her.", + "migrationPromptCopyError": "Kunne ikke kopiere ledeteksten for migrering.", + "sourcesConfigured": "Widgetskildene og legitimasjonen er lagret.", + "sourceConfigurationError": "Kan ikke konfigurere widget kilder.", + "aiPromptCopiedWithCount": "AI spør om kopiert til utklippstavlen ({count, number} tegn).", + "aiPromptCopyError": "Kan ikke kopiere ledetekst til utklippstavlen. Nettleseren kan ikke støtte denne funksjonen.", + "aiPromptSent": "Ledetekst sendt. Du kan fortsette å redigere mens assistenten fungerer i bakgrunnen.", + "updateError": "Kan ikke oppdatere widget. Dine endringer ble ikke lagret.", + "importError": "Kunne ikke importere widget. Påfør at filen er en gyldig egendefinert widget JSON eksport.", + "exportError": "Kunne ikke eksportere widget.", + "duplicated": "Widget \"{name}\" duplisert.", + "duplicateError": "Kunne ikke duplisere widget.", + "toggleError": "Kunne ikke bytte widget status.", + "deleteError": "Kunne ikke slette widget.", + "previewError": "Kan ikke hente forhåndsvisning. Kontroller URL-en og prøv på nytt." + }, + "importReview": { + "title": "Gjennomgå egendefinert widget import", + "description": "Kontroller hvor denne widgeten kobles opp og hvilken tavle tilgang kontrollene krever før du importerer den.", + "migrationTitle": "Overført v2-erstatning ved migrering", + "migrationDescription": "Gjennomgå og bekreft dette genererte v2 definisjonen. Bekrefter atomisk erstatter den bevarte v1-posten mens du beholder eksisterende veggplasseringer koblet til samme widget-ID.", + "fileLabel": "Velg en egendefinert widget-JSON-fil", + "name": "Jobb navn", + "origin": "Basis opprinnelse", + "authentication": "Autentisering", + "networkScope": "Nettverk omfang", + "methods": "HTTP metoder", + "permissions": "Nødvendige rettighet for tavlen", + "sourceSetup": { + "title": "Konfigurere API kilder", + "description": "Bekreft hvor denne widgeten kobler seg sammen og legger til legitimasjoner. Private og loopback-URLer er spesifikke for din Homarr installasjon.", + "suggestedUrl": "Foreslått URL", + "confirmUrl": "Jeg bekrefter at denne server-URLen er korrekt for Homarr installasjonen", + "ready": "URL-adressen er klar", + "needsUrl": "Bekreft URL", + "credentialsMissing": "Påloggingsinformasjonen mangler", + "credentialsOptional": "Du kan installere uten legitimasjon og konfigurere dem senere, men forespørsler vil feile før de er lagt til." + }, + "actionWarning": { + "title": "Denne widgeten kan endre eksterne data", + "description": "Gjennomgå alle navngitte handlinger, arvet legitimasjon og destruktiv bekreftelse etter import. Hemmeligheter blir ikke inkludert i filen." + }, + "cancel": "Avbryt import", + "confirm": "Importer widget", + "confirmMigration": "Bekreft v2 erstatning" + }, + "secret": { + "apiKey": "API-nøkkel eller token", + "username": "Brukernavn", + "password": "Passord", + "savedPlaceholder": "•••••• (lagret, la være tom for å beholde)" + } + }, + "workshop": { + "title": "Verksted", + "browseWorkshop": "Bla gjennom Verksted", + "openCommunity": "Åpne Verksted", + "openOnWorkshop": "Åpne {title} på Workshop nettside", + "back": "Tilbake til Verksted", + "search": "Søk etter widgets", + "searchCss": "Søk i CSS-temaer", + "sort": "Sorter", + "sortTop": "Høyest rangerte først", + "sortNewest": "Nyeste", + "listAriaLabel": "Verksted widgets", + "listAriaLabelCss": "Verksted CSS-temaer", + "empty": "Ingen widgets samsvarer med dette søket.", + "emptyDescription": "Community widgets publisert til Workshop-oppføringen her.", + "emptyFilteredTitle": "Ingen widgets samsvarer med dette søket", + "emptyFilteredDescription": "Ingen Workshop widget samsvarer med \"{search}\".", + "emptyCss": "Ingen CSS-temaer samsvarer med dette søket.", + "unavailableTitle": "Homarr Workshop synes utilgjengelig", + "unavailable": "Fellesskapstjenesten kan bli midlertidig nede. Prøv igjen om et øyeblikk. Dine installerte widgets er upåvirket.", + "loadError": "Innsendingen kunne ikke lastes.", + "noDescription": "Ingen beskrivelse", + "author": "av {name}", + "communityMember": "Medlem i fellesskapet", + "outdated": "Utdatert", + "outdatedWarning": "Forfatteren markerte dette som utdatert. Gjennomgå det nøye før du importerer.", + "score": "Poeng: {count, number}", + "upvote": "Upvote", + "downvote": "Nedstemme", + "voteError": "Stemmen kunne ikke lagres.", + "signIn": "Logg på med GitHub", + "signInError": "GitHub innlogging mislyktes. Sjekk at Workshop OAuth leverandør er konfigurert og at popups er tillatt.", + "signOut": "Logg ut", + "signInHint": "Innlogging for å stemme eller rapport. Installering krever ikke en Workshop-konto.", + "securityNotice": "Verksted widgets kan ringe sine deklarerte API-kilder og utføre deklarerte handlinger med legitimasjon du konfigurerer lokalt. Hemmeligheter er aldri inkludert.", + "securityNoticeCss": "Fellesskapets CSS kan endre utseendet og brukervennligheten til et bord. Gjennomgå den før du importerer; ingenting er lagres, til du lagrer bordinnstillinger.", + "install": "Installer", + "installReviewTitle": "Gjennomgang før installering", + "installError": "Denne widgeten kan ikke installeres", + "installErrorDescription": "Workshop-innsending er ikke en gyldig egendefinert JSX v2 widget.", + "useCss": "Import CSS", + "importCss": "Importer CSS fra Workshop", + "importCssConfirm": "Erstatte gjeldende CSS med \"{title}\"? Ingenting er lagret inntil du lagrer styrets innstillinger.", + "screenshotAlt": "{title} skjermbilde {count, number}", + "screenshotViewer": "{title} skjermbilde viser", + "screenshotsLabel": "{title} skjermbilder", + "zoomScreenshot": "Se full størrelse", + "previousScreenshot": "Forrige skjermbilde", + "nextScreenshot": "Neste skjermbilde", + "showScreenshotThumbnails": "Vis miniatyrbilder for skjermbilde", + "hideScreenshotThumbnails": "Skjul miniatyrbilder for skjermbilde", + "closeScreenshotViewer": "Lukk skjermbilde", + "technicalDetails": "Tekniske detaljer", + "sourceCode": "Verksted oppføring", + "export": "Eksporter", + "report": "Rapporter", + "reportTitle": "Rapporter innsending", + "reportReason": "Grunn", + "reportExplanation": "Hva bør workshop-moderatorene vite?", + "reportSend": "Send rapport", + "reportSent": "Rapporten sendes", + "reportSentDescription": "Verkplassens moderatorer kan nå gjennomgå dette innlegget.", + "reportCount": "{count, plural, one {# rapport} other {# rapporter}}", + "reportWarning": "{count, plural, one {Denne innsendingen har # åpne samfunnsrapporten.} other {Denne sendingen har # åpne samfunnsrapporter.}} Det forblir installerbar, men du bør gjennomgå innholdet først.", + "reportVisibility": "Rapporter detaljer er kun synlige for denne leveransens forfatter og Workshop administratorer.", + "reportCategory": { + "outdated": "Utdatert eller ikke lenger arbeider", + "malicious": "Skadelig", + "spam": "Søppelpost", + "copyright": "Opphavsrett", + "inappropriate": "Upassende", + "other": "Andre" + }, + "publish": { + "title": "Publiser til Verksted", + "introTitle": "Del denne widgeten med samfunnet", + "introDescription": "Homarr eksporterer en legitimasjonsfri kopi av denne widgeten. Legg til tydelig oppføringsinformasjon slik at folk vet hva den gjør før du installerer den.", + "listingDetails": "Verksted oppføring", + "listingDetailsDescription": "Disse detaljene vises offentlig sammen med den eksporterte widgetdefinisjonen.", + "success": "Publisert umiddelbart. Samfunnsmedlemmer kan nå installere og rapportere denne modulen.", + "successTitle": "Widgeten din er live", + "manageDescription": "Åpne sendingen for å oppdatere oppføringen, gjennomgå og marker den utdatert, eller slette den. Innleggshåndtering er håndtert direkte på nettsiden til Workshop.", + "viewSubmission": "Vis og behandle innsending", + "done": "Ferdig", + "signInHint": "Logg inn for å publisere under Workshop-identiteten din.", + "titleField": "Tittel", + "descriptionField": "Beskrivelse", + "screenshots": "Skjermbilder", + "screenshotsDescription": "Opptil fem PNG, JPEG eller WebP-bilder", + "screenshotsPlaceholder": "Velg skjermbilder", + "invalidScreenshot": "Bruk PNG, JPEG eller WebP-bilder ikke større enn {maxSize} hver.", + "privateSourceWarning": "Denne widgeten inneholder private kilde-URL-er for: {sources}. Bytt ut personlige verter eller IP-adresser med sikker tjenesteplasserere før publisering.", + "reviewSourcesTitle": "Gjennomgå private kilde-URLer", + "privateSourceConfirmation": "Jeg gjennomgikk disse kilde-URLene og de utsetter ikke detaljer om den private infrastrukturen", + "action": "Publisér nå", + "publicationNote": "Publisering er umiddelbar. Du kan administrere innsendingen etterpå Workshop.", + "definitionChanged": "Widgeten endret seg da publiseringen ble utarbeidet. Gå gjennom sine private kilde-URLer igjen, og prøv på nytt.", + "error": "Publiseringen mislyktes" } }, "integration": { + "completion": { + "modalTitle": "Tjeneste klar", + "title": "{name} er tilkoblet", + "description": "Forbindelsen bestått i testen. Velg hva som skal vises på denne tavlen.", + "connectionReady": "Tjeneste-forbindelse er klar", + "appReady": "App-snarvei er klar", + "compatibleWidgets": "{count, plural, =0 {Ingen kompatible widgets} one {# kompatibel widget} other {# kompatible widgets}} tilgjengelig", + "chooseWidget": "Velg skrivebord", + "recipes": { + "title": "Anbefalt for denne tavlen", + "description": "Basert på tilkoblede tjenester og widgets er allerede på dette tavlen.", + "newConnectionReason": "Nå tilgjengelig gjennom {integration}", + "existingConnectionReason": "Fungerer med en tjeneste du allerede har tilkoblet", + "dismiss": "Avvis anbefalinger til denne tjenesten på denne tavlen" + } + }, "page": { "list": { - "title": "Integrasjoner", + "ariaLabel": "Konfigurerte integrasjoner", "search": "Søk integrasjoner", + "scopedNote": "Viser bare integrasjonene du har lov til å håndtere.", "noResults": { - "title": "Det er ingen integrasjoner enda" + "title": "Det er ingen integrasjoner enda", + "description": "Koble en tjeneste for å bruke dens data og handlinger i Homarr widgets.", + "action": "Opprett din første integrasjon", + "filteredTitle": "Ingen integrasjon samsvarer med søket ditt", + "filteredDescription": "Ingen integrasjoner samsvarer med \"{search}\". Prøv et annet navn, type eller URL.", + "createOnlyTitle": "Du kan bare legge til integrasjoner", + "createOnlyDescription": "Du kan opprette integrasjoner, men ikke administrere eksisterende. Be en administrator om tilgang til de du trenger." } }, "create": { "title": "Ny {name} integrasjon", "notification": { "success": { - "title": "Opprettelse vellykket", "message": "Integrasjon opprettet" }, "error": { - "title": "Opprettelse mislyktes", "message": "Integrasjonen kunne ikke opprettes" } }, @@ -729,11 +1339,9 @@ "title": "Rediger {name} integrasjon", "notification": { "success": { - "title": "Endringer fullført", "message": "Integrasjonen ble lagret" }, "error": { - "title": "Kunne ikke fullføre endringer", "message": "Integrasjonen kunne ikke lagres" } }, @@ -750,23 +1358,15 @@ "message": "Er du sikker på at du vil slette integrasjonen {name}?", "notification": { "success": { - "title": "Slettet", "message": "Integrasjon slettet" }, "error": { - "title": "Sletting feilet", "message": "Kunne ikke slette integrasjonen" } } } }, "field": { - "name": { - "label": "Navn" - }, - "url": { - "label": "Url" - }, "attemptSearchEngineCreation": { "label": "Opprett søkemotor", "description": "Integrasjon \"{kind}\" kan brukes med søkemotorene. Huk av her for å automatisk konfigurere søkemotor." @@ -778,6 +1378,10 @@ "label": "Opprett app", "description": "Opprett en app med samme navn og ikon som integrasjonen. La inndataboksen under stå tom for å opprette appen med integrasjons-URL-en." }, + "linkApp": { + "label": "Koble til en eksisterende app", + "description": "Koble denne integrasjonen til en app som du allerede kan bruke." + }, "appHref": { "placeholder": "Egendefinert app-URL" }, @@ -791,7 +1395,11 @@ "grid": { "widgetCount": "{count} moduler", "noWidgets": "Ingen widgets", - "detected": "Oppdaget via Docker" + "detected": "Oppdaget via Docker", + "connected": "{count, plural, one {# tilkoblet} other {# tilkoblet}}", + "tiedWidgets": "Avdelte widgets", + "more": "+{count} flere", + "loadError": "Kan ikke laste inn integrasjoner. Prøv igjen før du oppretter en ny tilkobling." }, "category": { "dnsHole": "DNS", @@ -822,7 +1430,10 @@ "analytics": "Analyser", "vpn": "VPN", "mediaLibrary": "Mediabibliotek media", - "uptimeMonitoring": "Oppetid overvåking" + "uptimeMonitoring": "Oppetid overvåking", + "beszel": "Beszel", + "systemMonitoring": "Systemovervåking", + "security": "Sikkerhet" }, "testConnection": { "action": { @@ -1107,6 +1718,22 @@ "slug": { "label": "Statusside slug", "newLabel": "Ny statusside slug" + }, + "wazuhIndexerUrl": { + "label": "Indekserer URL", + "newLabel": "Ny indekserers nettadresse" + }, + "wazuhIndexerUsername": { + "label": "Indekserer brukernavn", + "newLabel": "Nytt indekserer-brukernavn" + }, + "wazuhIndexerPassword": { + "label": "Indekserer passord", + "newLabel": "Nytt indekserer-passord" + }, + "wazuhDashboardUrl": { + "label": "Dashboard URL (valgfritt)", + "newLabel": "Ny URL-adresse for dashbordet" } } }, @@ -1115,54 +1742,19 @@ "interact": "Samhandle med integrasjoner", "full": "Full integrasjons-tilgang" }, - "audiobookshelf": { - "name": "Audiobokshylle", - "description": "Selvbetjent audiobok og podcast server" - }, - "navidrome": { - "name": "Navidrome", - "description": "Selvbetjent musikk-streaming server med Subsonic API kompatibilitet" - }, - "uptimeKuma": { - "name": "Opp til Kuma", - "description": "Selvbetjent oppetid overvåking med offentlige statussider", - "secret": { - "slug": { - "description": "Slo på din offentlige statusside. Standard til \"standard\" hvis ikke angitt." - }, - "apiKey": { - "description": "Valgfri API-nøkkel for godkjent /måltall tilgang" - } - } - }, - "traefik": { - "name": "Traefik", - "description": "Cloud-nativ revers-proxy og laste balanserer" - }, - "paperlessNgx": { - "name": "Paperless-ngx", - "description": "System for dokumentstyring for arkivering og organisering av skannede dokumenter" - }, - "patchmon": { - "name": "PatchMon", - "description": "Styring og overvåking av Linux-verter" - }, - "bazarr": { - "name": "Bazarr", - "description": "Companion-applikasjon til Sonarr og Radarr som administrerer og laster ned undertekster" - }, - "wud": { - "name": "Hva passer opp", - "description": "Overvåk hvilke av Docker-beholderene dine har bildeoppdateringer tilgjengelig" + "llamacpp": { + "name": "llama.cpp", + "description": "Monitor a local llama.cpp llama-server: health, model and generation metrics" } }, "media": { "plural": "Medier", "search": "Finn et medie", "field": { - "name": "Navn", + "preview": "Forhåndsvisning", "size": "Størrelse", - "creator": "Skaper" + "creator": "Skaper", + "actions": "Kontroller" }, "action": { "upload": { @@ -1190,10 +1782,12 @@ } }, "copy": { - "label": "Kopier URL" + "label": "Kopier URL", + "labelNamed": "Kopier URL for {name}" }, "open": { - "label": "Åpne medie" + "label": "Åpne medie", + "labelNamed": "Åpne {name}" } }, "noResults": { @@ -1208,7 +1802,6 @@ "add": "Legg til", "apply": "Bruk", "backToOverview": "Tilbake til oversikt", - "skip": "Hopp", "change": "Endre", "create": "Opprett", "createAnother": "Opprett og start på nytt", @@ -1231,16 +1824,31 @@ "tryAgain": "Prøv igjen", "loading": "Laster", "show": "Vis", - "hide": "Skjul" + "hide": "Skjul", + "undo": "Angre", + "editNamed": "Rediger {name}", + "deleteNamed": "Slett {name}", + "clearSearch": "Tøm søk", + "copy": "Kopier", + "copied": "Kopiert", + "refresh": "Oppdater" + }, + "pagination": { + "pageOf": "Side {page} av {totalPages}" }, "here": "her", + "serviceUrlTemplate": { + "serverTitle": "Vanlig serveradresse", + "urlModeLabel": "Service adresse mønster", + "hostPort": "Samme vert, forskjellige porter", + "subdomain": "Ett deldomene per tjeneste", + "path": "sti per tjeneste" + }, "iconPicker": { "label": "Ikon-URL", + "description": "Søk biblioteket, lim inn en bilde-URL, eller last opp en fil.", "header": "Skriv navn eller objekt å filtrere for ikoner... Homarr vil søke gjennom {countIcons} ikoner for deg.", "headerLoading": "Søk etter navn", - "noResults": "Ingen ikoner samsvarer med \"{search}\".", - "error": "Kunne ikke laste ned ikoner.", - "description": "Søk biblioteket, lim inn en bilde-URL, eller last opp en fil.", "clear": "Fjern bilde", "uploadImage": "Last opp bilde", "results": "Søkeresultater for bilde", @@ -1249,7 +1857,9 @@ "otherImages": "Andre bilder", "urlLoading": "Sjekker bildet…", "urlReady": "Bildet er klart til bruk", - "urlError": "Dette bildet kan ikke lastes. Kontroller URL-en og prøv på nytt." + "urlError": "Dette bildet kan ikke lastes. Kontroller URL-en og prøv på nytt.", + "noResults": "Ingen ikoner samsvarer med \"{search}\".", + "error": "Kunne ikke laste ned ikoner." }, "colorScheme": { "options": { @@ -1261,7 +1871,6 @@ "information": { "min": "Min", "max": "Maks", - "days": "Dager", "hours": "Timer", "minutes": "Minutter" }, @@ -1298,16 +1907,16 @@ }, "userAvatar": { "menu": { - "switchToDarkMode": "Bytt til mørk modus", - "switchToLightMode": "Bytt til lys modus", + "open": "Åpne kontomeny", "management": "Administrasjon", - "docker": "Docker", "preferences": "Dine innstillinger", "logout": "Logg ut", "login": "Logg Inn", "homeBoard": "Hjem-tavlen din", - "loggedOut": "Logget ut", - "updateAvailable": "{countUpdates} oppdateringer tilgjengelig: {tag}" + "updateAvailable": "{countUpdates} oppdateringer tilgjengelig: {tag}", + "assistant": "Assistent", + "assistantThinking": "Tenker", + "modifier": "Mod" } }, "dangerZone": "Faresonen", @@ -1355,13 +1964,66 @@ "kilometersPerHour": "km/h", "milesPerHour": "mph" } + }, + "widgetQuery": { + "loading": "Laster widgetdata" + }, + "total": "Totalt", + "filesystemUsage": "{count, plural, one {Vis bruk for # filsystem} other {Vis bruk for # filsystemer}}", + "field": { + "name": "Jobb navn" + }, + "label": { + "new": "Ny" + }, + "entity": { + "apps": "Apper", + "boards": "Tavler", + "certificates": "Sertifikater", + "customWidgets": "Tilpassede widgets", + "groups": "Grupper", + "integrations": "Integrasjoner", + "invites": "Invitasjoner", + "logs": "Logger", + "media": "Media", + "searchEngines": "Søkemotorer", + "tasks": "Oppgaver", + "users": "Brukere" } }, "section": { - "dynamic": { + "option": { + "showLabel": { + "label": "Vis etikett", + "description": "Vis beholderens etikett over innholdet." + }, + "collapsible": { + "label": "Tillat kollaps", + "description": "La seerne utvide og kollapse denne beholderen." + }, + "showOpenAll": { + "label": "Vis åpne alle handlinger", + "description": "Vis en handling som åpner hver app i denne containeren i nye faner." + }, + "scrollable": { + "label": "Rullbar", + "description": "Behold denne beholderen i settets størrelse, og bland innholdet sitt i stedet for å vokse for å passe det." + } + }, + "action": { + "openAllInNewTabsFor": "Åpne alle apper i {name} i faner" + }, + "openAllInNewTabs": { + "title": "Åpne alle i faner", + "text": "Noen nettlesere kan blokkere åpning av faner av sikkerhetsgrunner. Homarr kunne ikke åpne alle vinduer, fordi nettleseren din blokkerte denne handlingen. Vennligst tillat \"Åpne pop-up vinduer\" og prøv på nytt." + }, + "container": { + "untitled": "Beholder uten navn", "action": { - "create": "Ny dynamisk seksjon", - "remove": "Fjern dynamisk seksjon" + "create": "Ny beholder", + "remove": "Fjern beholder", + "expand": "Utvid", + "collapse": "Skjul" }, "option": { "title": { @@ -1375,55 +2037,12 @@ } }, "remove": { - "title": "Fjern dynamisk seksjon", - "message": "Er du sikker på at du vil fjerne denne dynamiske delen? Elementer vil bli flyttet til samme sted i overordnet seksjon." - } - }, - "category": { - "field": { - "name": { - "label": "Navn" - } - }, - "action": { - "create": "Ny kategori", - "edit": "Endre kategorinavn", - "remove": "Fjern kategori", - "moveUp": "Flytte opp", - "moveDown": "Flytt ned", - "createAbove": "Ny kategori over", - "createBelow": "Ny kategori under", - "openAllInNewTabs": "Åpne alle i faner" - }, - "create": { - "title": "Ny kategori", - "submit": "Legg til kategori" - }, - "remove": { - "title": "Fjern kategori", - "message": "Er du sikker på at du vil slette kategorien {name}?" - }, - "edit": { - "title": "Endre kategorinavn", - "submit": "Endre kategorinavn" - }, - "menu": { - "label": { - "create": "Ny kategori", - "changePosition": "Endre posisjon", - "settings": "Innstillinger" - } - }, - "openAllInNewTabs": { - "title": "Åpne alle i faner", - "text": "Noen nettlesere kan blokkere åpning av faner av sikkerhetsgrunner. Homarr kunne ikke åpne alle vinduer, fordi nettleseren din blokkerte denne handlingen. Vennligst tillat \"Åpne pop-up vinduer\" og prøv på nytt." + "message": "Fjern denne beholderen? Innholdet flytter seg inn i området rundt." } } }, "item": { "action": { - "create": "Nytt element", - "import": "Importer element", "edit": "Rediger element", "moveResize": "Flytt / endre størrelse element", "duplicate": "Dupliser element", @@ -1432,7 +2051,7 @@ "menu": { "label": { "settings": "Innstillinger", - "refresh": "Oppdater", + "settingsFor": "Innstillinger for {name}", "options": "Alternativer", "actions": "Handlinger" }, @@ -1441,21 +2060,96 @@ "error": "Feil", "loading": "Laster", "idle": "Inaktiv" + }, + "notification": { + "saveError": { + "title": "Kan ikke lagre widget", + "message": "Endringene i widgeten ble rullet tilbake" + } } }, "create": { "title": "Velg element du vil legge til", "search": "Filtrer elementer", - "addToBoard": "Legg til tavle" + "addToBoard": "Legg til tavle", + "addAtPosition": "Legg til element her", + "destination": { + "label": "Legg til i", + "description": "Velg hvor widgeten skal vises. Du kan fremdeles flytte den senere.", + "mainCanvas": "Hovedlerret", + "leftRail": "Venstre togspor", + "rightRail": "Høyre togspor" + }, + "connectionStatus": { + "ready": "Klar", + "needsSetup": "Trenger oppsett", + "noConnectionRequired": "Ingen tilkobling kreves" + }, + "customWidget": "Egendefinert widget", + "standalone": "Frittstående", + "missingIntegration": { + "title": "Koble til en tjeneste først", + "noPermission": "Denne widgeten trenger en kompatibel tjenestetilkobling. Be en administrator om å koble til, og prøv på nytt." + }, + "notification": { + "success": { + "title": "Widget lagt til", + "message": "{name} ble lagt til i denne tavlen.", + "relocatedMessage": "{name} ble lagt til {destination} fordi det valgte målet ikke var tilgjengelig." + }, + "error": { + "title": "Kan ikke legge til element", + "message": "Elementet kunne ikke legges til denne tavlen" + } + } + }, + "selection": { + "summary": "{count, plural, one {# valgt element} other {# valgte elementer}}", + "selected": "{count, plural, one {# valgt} other {# valgt}}", + "copy": "Kopier", + "copied": "{count, plural, one {# element kopiert til utklippstavlen} other {# elementer kopiert til utklippstavlen}}", + "copyError": "Det valgte elementet kunne ikke kopieres. Nettleseren tillater kanskje ikke tilgang til utklippstavlen.", + "paste": "Lim", + "pasteShortcut": "Lim inn kopierte elementer her (Ctrl / ⌘ + V)", + "pasted": "{count, plural, one {# element limt inn} other {# elementer limt inn}}", + "pasteError": "Klarte ikke å lese utklippstavlen. Nettleseren din gir kanskje ikke tilgang til utklippstavlen", + "pasteInvalid": "Utklippstavlen inneholder ikke gyldige Homarr tavleelementer.", + "pasteUnavailable": "De kopierte elementene passer ikke på denne tavlen.", + "removed": "{count, plural, one {# element fjernet} other {# elementer fjernet}}", + "move": "Flytt", + "moveTo": "Flytt valgte elementer", + "delete": "Slett", + "clear": "Tøm valg", + "clearShortcut": "Nullstill valg (landskap)", + "saveErrorTitle": "Kan ikke oppdatere elementer", + "saveErrorMessage": "Endringene kunne ikke lagres. Tavlen ble oppdatert.", + "moveUnavailableTitle": "Kan ikke flytte valgte elementer", + "moveUnavailableMessage": "Målet har ikke nok plass til hele utvalget." }, "moveResize": { "title": "Flytt / endre størrelse på element", + "entryLabel": "{name}, kolonne {column}, rad {row}", + "target": { + "numbered": "{name}, destinasjon {index}", + "located": "{name}, {location}, destinasjon {index}" + }, + "keyboard": { + "instructions": "Trykk Enter eller Mellomrom for å starte tastaturredigering. Bruk piltastene for å flytte, Shift pluss piltastene for å endre størrelse og flukt for å stoppe.", + "started": "Tastaturredigering startet. Bruk piltastene for å flytte, Shift pluss piltaster for å endre størrelse og Escape for å stoppe.", + "stopped": "Tastaturet redigert stoppet.", + "boundary": "Denne endringen passer ikke inn i denne seksjonen." + }, "field": { + "section": { + "label": "Seksjon eller skinne" + }, "width": { - "label": "Bredde" + "label": "Bredde", + "shortLabel": "V" }, "height": { - "label": "Høyde" + "label": "Høyde", + "shortLabel": "t" }, "xOffset": { "label": "X forskyvning" @@ -1469,18 +2163,36 @@ "title": "Rediger element", "tab": { "widget": "Rediger widget", - "app": "Rediger app" + "app": "Rediger app", + "integration": "Rediger integrasjon" }, "app": { "propagationNotice": "Endringer i denne appen vil bli brukt overalt det brukes på tvers av alle dashbord." }, + "integration": { + "action": "Rediger forbindelse", + "description": "Test eller reparer en valgt forbindelse uten å forlate denne widgeten.", + "editLabel": "Rediger {name} integrasjon", + "fullAccessRequired": "Full tilgang kreves", + "propagationNotice": "Endringer i denne integrasjonen gjelder overalt det brukes. Tilkoblingen testes før den lagres.", + "loading": "Laster inn integrasjon", + "loadError": "Kan ikke laste denne integrasjonen. Prøv igjen før du endrer tilkoblingsinnstillingene." + }, + "preview": { + "integrationRequired": "Velg en forbindelse til å forhåndsvise denne widgeten.", + "size": "Filstørrelse" + }, + "settings": { + "label": "Innstillinger for widget" + }, "advancedOptions": { "label": "Avanserte innstillinger", "title": "Avanserte elementinnstillinger" }, "field": { "integrations": { - "label": "Integrasjoner" + "label": "Integrasjoner", + "removeLabel": "Fjern {name} integrasjon" }, "title": { "label": "Tittel" @@ -1494,17 +2206,18 @@ } }, "remove": { - "title": "Slett element", "message": "Er du sikker på at du vil slette dette elementet?" + }, + "advancedFocus": { + "open": "Åpne avansert visning", + "close": "Lukk avansert visning", + "label": "{widget} avansert visning" } }, "widget": { "integrationSelect": { "configureIntegrationFirst": "Koble til en integrasjon først", - "loading": "Laster...", - "placeholder": "Velg et alternativ", - "noResults": "Ingen resultater funnet", - "loadError": "Kan ikke laste inn innstillingene" + "placeholder": "Velg et alternativ" }, "app": { "name": "App", @@ -1513,9 +2226,6 @@ "appId": { "label": "Velg app" }, - "openInNewTab": { - "label": "Åpne i ny fane" - }, "showTitle": { "label": "Vis app navn" }, @@ -1523,11 +2233,8 @@ "label": "Aktiver enkel ping" }, "layout": { - "label": "Oppsett", "option": { - "row": "Horisontal", "row-reverse": "Horisontal (omvendt)", - "column": "Vertikal", "column-reverse": "Vertikal (omvendt)" } }, @@ -1552,23 +2259,60 @@ "name": "Bokmerke", "description": "Viser flere applinker", "option": { - "title": { - "label": "Tittel" + "showTitle": { + "label": "Vis widget tittel" + }, + "titleSize": { + "label": "Tittelstørrelse for widget (px)" }, "layout": { "label": "Oppsett", "option": { - "row": { - "label": "Horisontal" - }, - "column": { - "label": "Vertikal" - }, - "grid": { - "label": "Rutenettet" + "adaptive": { + "label": "Tilpassende" }, "gridHorizontal": { "label": "Rutenett horisontalt" + }, + "icons": { + "label": "Ikoner" + } + } + }, + "variant": { + "label": "Utseende", + "option": { + "soft": { + "label": "Myk" + }, + "filled": { + "label": "Fylt" + }, + "outline": { + "label": "Omriss" + }, + "plain": { + "label": "Enkel" + } + } + }, + "spacing": { + "label": "Kortets avstand", + "option": { + "xs": { + "label": "Ekstra liten" + }, + "sm": { + "label": "Liten" + }, + "md": { + "label": "Medium" + }, + "lg": { + "label": "Stor" + }, + "xl": { + "label": "Ekstra stor" } } }, @@ -1581,17 +2325,28 @@ "hideHostname": { "label": "Skjul vertsnavn" }, - "openNewTab": { - "label": "Åpne i ny fane" - }, "withBorder": { "label": "Vis kantlinje" }, + "grow": { + "label": "Utvid kort til å fylle rad" + }, + "customUrls": { + "label": "Egendefinerte lenker" + }, "items": { "label": "Bokmerke", - "add": "Legg til bokmerke" + "remove": "Fjern bokmerke", + "apps": { + "label": "Legg til bokmerker", + "description": "Lim inn nettadresser eller finn eksisterende apper. Dra bokmerkene under for å flytte rekkefølgen dem.", + "placeholder": "Lim inn URL- eller søkeapper", + "addUrl": "Legg til denne URL-adressen", + "hint": "Trykk Enter for å legge til en URL. Lim inn komma-separerte eller en-linje-URLer for å legge til flere adresser." + } } - } + }, + "empty": "Legg til en URL eller app i widget-innstillingene" }, "archiveTeamWarrior": { "name": "ArkivLag Kriger", @@ -1600,33 +2355,61 @@ "showBroadcastMessage": { "label": "Vis kringkastede meldinger" } + }, + "noProjectSelected": "Ingen prosjekter valgt", + "runnerStatus": "Runner: {status}", + "projectId": "Prosjekt: {id}", + "sessionReceived": "Sesjon mottatt: {value}", + "sessionSent": "Økten sendt: {value}", + "sessionId": "Sesjon: {id}", + "startedAt": "Startet {date}", + "emptyItems": "Ingen aktive eller nylige jobber i dette øyeblikksbilde", + "metric": { + "running": "Kjører", + "completed": "Ferdig", + "failed": "Feilet", + "canceled": "Avbrutt", + "download": "Nedlasting", + "upload": "Opplastning" + }, + "status": { + "running": "Kjører", + "completed": "Fullført", + "failed": "Feilet", + "canceled": "Avbrutt", + "stopped": "Stoppet", + "idle": "Inaktiv", + "unknown": "Ukjent" + } + }, + "wud": { + "name": "Hva passer opp", + "description": "Vis hvor mange sette containere som er tilgjengelige.", + "title": "Hva passer opp", + "monitored": "Overvåket", + "updatesAvailable": "{count, plural, one {# oppdatering tilgjengelig} other {# oppdateringer tilgjengelig}}", + "updateAvailable": "Oppdatering tilgjengelig", + "openReleaseNotes": "Åpne utgivelsesnotater", + "option": { + "showRing": { + "label": "Vis oppdatering ring" + }, + "showUpdateList": { + "label": "Vis liste over containeroppdatering", + "description": "Viser hver overvåket beholder som har en bildeoppdatering tilgjengelig" + } } }, "dnsHoleSummary": { "name": "DNS Hole Sammendrag", "description": "Viser sammendrag av DNS Hole", "option": { - "layout": { - "label": "Oppsett", - "option": { - "row": { - "label": "Horisontal" - }, - "column": { - "label": "Vertikal" - }, - "grid": { - "label": "Rutenett" - } - } - }, "usePiHoleColors": { "label": "Bruk farger fra Pi-Hole" } }, "error": { - "internalServerError": "Kunne ikke hente DNS Hole Sammendrag", - "integrationsDisconnected": "Ingen data er tilgjengelig, alle integrasjoner frakoblet" + "internalServerError": "Kunne ikke hente DNS Hole Sammendrag" }, "data": { "adsBlockedToday": "Blokkert i dag", @@ -1634,32 +2417,24 @@ "dnsQueriesToday": "Spørringer i dag", "domainsBeingBlocked": "Domener på blokkliste" }, - "domainsTooltip": "På grunn av flere integrasjons Homarr kan ikke kalkulere nøyaktig antall domener som blokkeres" + "domainsTooltip": "På grunn av flere integrasjons Homarr kan ikke kalkulere nøyaktig antall domener som blokkeres", + "status": { + "enabled": "Aktivert", + "disabled": "Deaktivert", + "unknown": "Ukjent" + } }, "dnsHoleControls": { "name": "DNS Hole kontroller", "description": "Kontroller PiHole eller AdGuard fra dashbordet", "option": { - "layout": { - "label": "Oppsett", - "option": { - "row": { - "label": "Horisontal" - }, - "column": { - "label": "Vertikal" - }, - "grid": { - "label": "Rutenett" - } - } - }, "showToggleAllButtons": { "label": "Vis av/på alle knapper" } }, "error": { - "internalServerError": "Kunne ikke kontrollere DNS Hole" + "internalServerError": "Kunne ikke kontrollere DNS Hole", + "bulkActionsFailed": "{count, plural, one {# handling mislyktes} other {# handlinger mislyktes}}" }, "controls": { "enableAll": "Aktiver alle", @@ -1670,8 +2445,6 @@ "disabled": "Deaktivert", "processing": "Prosesserer", "disconnected": "Frakoblet", - "hours": "Timer", - "minutes": "Minutter", "unlimited": "Blank for ubegrenset" } }, @@ -1683,16 +2456,10 @@ "label": "Tilpasset Tittel/By visning", "description": "Vis av en egendefinert tittel eller navnet på byen/landet øverst i klokken." }, - "customTitle": { - "label": "Tittel" - }, "is24HourFormat": { "label": "24-timersformat", "description": "Bruk 24-timers format i stedet for 12-timers format" }, - "showSeconds": { - "label": "Vis sekunder" - }, "useCustomTimezone": { "label": "Bruk en fast tidssone" }, @@ -1711,29 +2478,295 @@ "label": "Egendefinert tidsformat", "description": "Bruk ISO 8601 til å formatere tid (dette vil overstyre andre alternativer)" }, - "customDateFormat": { - "label": "Egendefinert dato format", - "description": "Bruk ISO 8601 til å formatere datoen (dette vil overstyre andre alternativer)" - }, "showWeather": { "label": "Vis været", "description": "Vis et lite animert værikon og temperatur i hjørnet av kortet" }, - "weatherLocation": { - "label": "Værposisjon" - }, "isWeatherFormatFahrenheit": { "label": "Use Fahrenheit" + }, + "animateWeatherIcon": { + "label": "Animert værikon", + "description": "Animer væroppsettet. Deaktivert som standard og alltid deaktivert når redusert bevegelse kreves." + }, + "colorWeatherByDayNight": { + "label": "Fargevær per dag/natt", + "description": "Tone værikonet og temperatur med en dagfarge eller en nattfarge, Basert på hvorvidt det er for øyeblikket daglig eller natt på den valgte plasseringen." + }, + "dayWeatherColor": { + "label": "Dag farge" + }, + "nightWeatherColor": { + "label": "Natt farge" + }, + "worldClockCities": { + "label": "Klokke byer i Verden", + "description": "Legg til og sorter opp til seks byer for avansert visning." } + }, + "timezoneList": { + "timezone": "Tidssone", + "cityLabel": "Etikett for byen", + "searchPlaceholder": "Søk i tidssoner", + "noResults": "Ingen tidssoner funnet", + "unsupportedOption": "Ustøttet: {timeZone}", + "add": "Legg til by", + "remove": "Fjern {city}", + "reorder": "Omorganiser {city}", + "limit": "{count} av {maximum} byer konfigurert" + }, + "worldClock": { + "primary": "Primær klokke", + "local": "Lokal tid", + "today": "I dag", + "tomorrow": "I morgen", + "yesterday": "Igår", + "noSecondaryCities": "Legge til byer i widget alternativer for å sammenligne dem her.", + "unsupportedPrimaryTitle": "Primærtidssone er utilgjengelig", + "unsupportedPrimary": "{timeZone} støttes ikke i denne nettleseren. Viser UTC som en tydelig merket reserveløsning.", + "unsupportedTimeZone": "Ustøttet tidssone: {timeZone}", + "accessibleTime": "{city}: {time}, {date}, {timeZone}", + "advancedLabel": "Avansert verden klokke", + "cities": "Verdensklokke", + "cityCount": "{count} timezones", + "timeBarLabel": "24-timers tidsavbrudd stilling for {city}", + "dayProgress": "{percent}% forløpt · {hours}t {minutes}m gjenstår", + "phaseLegend": "Tidspunkt legende", + "tick": { + "midnight": "00", + "morning": "06", + "noon": "12", + "evening": "18", + "end": "24" + }, + "phaseRange": { + "night": "00–05 · 21–24", + "dawn": "05–08", + "day": "08–18", + "dusk": "18–21" + }, + "phase": { + "night": "Natt", + "dawn": "Kveld", + "day": "Dag", + "dusk": "Skumring" + } + } + }, + "airQuality": { + "name": "Luftkvalitet og UV", + "description": "Viser luftkvalitet, ultrafiolett indeks, miljøgifter og pollen for en lokalitet.", + "option": { + "location": { + "label": "Plassering av luftkvalitet" + }, + "aqiStandard": { + "label": "AQI standard", + "options": { + "auto": "Automatisk for nasjonale innstillinger", + "european": "European AQI", + "us": "Amerikansk AQI" + } + }, + "showUv": { + "label": "Vis UV-indeks" + }, + "showPollutants": { + "label": "Vis forurensende konsentrasjoner" + }, + "showPollen": { + "label": "Vis pollkonsentrasjonene" + } + }, + "category": { + "good": "Bra", + "fair": "Lettskyet", + "moderate": "Moderat", + "unhealthySensitive": "Usunn for sensitive grupper", + "unhealthy": "Usunn", + "poor": "Dårlig", + "veryPoor": "Veldig dårlig", + "veryUnhealthy": "Veldig usunt", + "extremelyPoor": "Ekstrem dårlig", + "hazardous": "Farlig", + "unknown": "Ingen AQI lesing" + }, + "uv": { + "label": "UV indeks", + "category": { + "low": "Lav", + "moderate": "Moderat", + "high": "Høy", + "veryHigh": "Veldig høy", + "extreme": "Ekstrem", + "unknown": "Ingen lesing" + } + }, + "dominantPollutant": "Dominant pollutant", + "aqiLabel": "AQI", + "strongestPollen": "Høyeste pollen", + "unit": { + "concentration": "{value} μg/m3", + "pollen": "{value} korner/m3" + }, + "pollutant": { + "pm2_5": "PM2.5", + "pm10": "PM10", + "ozone": "Ozon", + "nitrogenDioxide": "Nitrogendioksid", + "sulphurDioxide": "Sulphur dioxide", + "carbonMonoxide": "Karbonmonoksid" + }, + "pollen": { + "alder": "Alder", + "birch": "Bjørk", + "grass": "Gress", + "mugwort": "Feil", + "olive": "Olivengrønn", + "ragweed": "Ragweed" + }, + "compact": { + "sixHourTrend": "AQI trend for de neste seks timene" + }, + "advanced": { + "observedAt": "Oppdatert til {time}", + "next24Hours": "Neste 24 timer", + "pollutants": "Konsentrasjoner av forurensende stoffer", + "pollen": "Polens konsentrasjoner", + "sevenDayForecast": "7-dagers maksimal værmelding", + "aqiValue": "AQI {value}", + "uvValue": "UV {value}", + "uvShort": "UV {value}", + "noForecast": "Ingen værinformasjon tilgjengelig" + } + }, + "countdown": { + "name": "Nedtellinger", + "description": "Spor kommende arrangementer og gjentatte jubileer.", + "option": { + "events": { + "label": "Hendelser", + "description": "Legg til og bestille inntil 20 engangs- eller årlige nedtellinger. Datoer angis i valgt tidssone." + }, + "showProgress": { + "label": "Vis fremdrift" + }, + "showSeconds": { + "label": "Vis sekunder", + "description": "Behold sekunder synlige for hver kommende hendelse." + } + }, + "dateTimeEventList": { + "newEvent": "Ny hendelse", + "add": "Legg til hendelse", + "remove": "Fjern {event}", + "reorder": "Omorganiser {event}", + "eventLabel": "Event etikett", + "timezone": "Tidssone", + "unsupportedOption": "Ustøttet: {timeZone}", + "recurrence": "Gjentar", + "recurrenceOption": { + "none": "Gjenta ikke", + "yearly": "Hvert år" + }, + "target": "Dato og tid for begivenheten", + "trackProgress": "Sporets fremgang fra en startdato", + "start": "Fremdriftsstart dato og tid", + "confirmDateTime": "Bekreft dato og klokkeslett", + "limit": "{count} av {maximum} hendelser konfigurert" + }, + "empty": { + "title": "Ingen nedtellinger ennå", + "description": "Legg til en hendelse i widget alternativer for å starte å telle ned." + }, + "completed": "Fullført", + "yearly": "Årlig", + "progress": "Event fremgang", + "upcoming": "Kommende", + "completedEvents": "Fullførte hendelser", + "invalid": { + "title": "Noen hendelser kan ikke vises", + "description": "{count, plural, one {En hendelse har en ugyldig dato eller ustøttet tidssone.} other {# hendelser har en ugyldig dato eller ustøttet tidssone.}}", + "value": "Unavailable" + }, + "alert": { + "notifications": "Nettleser varsler", + "permissionDenied": "Varsler er blokkert i denne nettleseren.", + "reached": "Nedtellingen har nådd målet." + } + }, + "timer": { + "name": "Timer / Pomodoro", + "description": "Kjører en enkel tidtaker eller en konfigurerbar Pomodoro rekkefølge.", + "option": { + "mode": { + "label": "Modus", + "options": { + "timer": "Tidtaker", + "pomodoro": "Pomodoro" + } + }, + "timerMinutes": { + "label": "Tidtaker minutter" + }, + "focusMinutes": { + "label": "Fokus minutter" + }, + "shortBreakMinutes": { + "label": "Kort pause minutter" + }, + "longBreakMinutes": { + "label": "Lang pause minutter" + }, + "sessionsBeforeLongBreak": { + "label": "Fokusøkter før en lang pause" + }, + "autoStartBreaks": { + "label": "Start pause automatisk" + }, + "autoStartFocus": { + "label": "Sett i gang med sesjoner" + } + }, + "phase": { + "timer": "Tidtaker", + "focus": "Fokus", + "shortBreak": "Kort pause", + "longBreak": "Lang pause" + }, + "action": { + "start": "Start", + "pause": "pause", + "reset": "Reset" + }, + "attention": { + "timerComplete": "Timer complete", + "phaseReady": "{phase} klar" + }, + "progress": "Tidtaker pågår: {progress}%", + "compact": { + "completedFocus": "{count, plural, =0 {Ingen fokusøkter fullførte} one {# fullført økt} other {# gjennomførte økter}}" + }, + "alert": { + "title": "Timer complete", + "completed": "{phase} fullført." + }, + "advanced": { + "sequence": "Pomodoro sequence", + "focusSession": "Fokus {session}", + "settings": "Permanente innstillinger", + "settingsHint": "Bruk menyen 'widget kontekst' for å redigere disse tavlen(e) innstillingene.", + "localAlerts": "Lokale varsler", + "notifications": "Nettleser varsler", + "sound": "Tidtaker lyder", + "localAlertsHint": "Tidstidslyd er aktivert som standard. Lyder og varsler gjelder kun for denne widgeten i denne nettleseren.", + "notificationsDenied": "Varsler er blokkert i denne nettleseren." } }, "minecraftServerStatus": { "name": "Minecraft Server Status", "description": "Viser statusen til en Minecraft server", "option": { - "title": { - "label": "Tittel" - }, "domain": { "label": "Serveradresse" }, @@ -1753,11 +2786,21 @@ "noStation": "Ingen stasjon valgt", "option": { "baseUrl": { - "label": "Søk.ch URL" + "label": "Søk.ch URL", + "description": "Egendefinerte URL-er må løse til en offentlig IP-adresse. Private og lokale verter avvises." }, "station": { - "label": "Stasjon" + "label": "Stasjon", + "placeholder": "Søk etter en stasjon" } + }, + "error": { + "customSourceUnavailable": "Metoden er utilgjengelig. Sjekk at dets nettadresse løser til en offentlig IP-adresse.", + "stationSearch": "Kan ikke søke stasjoner. Sjekk den egendefinerte nettadressen og tilgang til din tavle." + }, + "warning": { + "stale": "Tidsplanen kunne ikke oppdateres. Viser avganger oppdatert på {time}.", + "staleCompact": "Gammel data" } }, "notebook": { @@ -1789,6 +2832,9 @@ "directionRtl": "Angi tekstretning høyre til venstre", "blockquote": "Blokksitat", "horizontalLine": "Horisontal linje", + "details": "Slå av/på sammenleggbar seksjon", + "expandDetails": "Ekspander sammenleggbar seksjon", + "collapseDetails": "Skjul sammenleggbar seksjon", "bulletList": "Punktliste", "orderedList": "Sortert liste", "checkList": "Sjekkliste", @@ -1797,16 +2843,20 @@ "link": "Link", "unlink": "Fjern lenke", "image": "Bygg inn bilde", - "addTable": "Legg til tabell", + "insertTable": "Sett inn tabell", + "insertTableSize": "Sett inn {columns} × {rows} tabell", "deleteTable": "Slett tabell", "colorCell": "Fargecelle", - "mergeCell": "Slå cellesammenslåing av/på", + "mergeCells": "Slå sammen celler", + "splitCell": "Del celle", "addColumnLeft": "Legg til kolonne før", "addColumnRight": "Legg til kolonne etter", "deleteColumn": "Slett kolonne", "addRowTop": "Legg til rad før", "addRowBelow": "Legg til rad etter", - "deleteRow": "Slett rad" + "deleteRow": "Slett rad", + "toggleHeaderRow": "Vis/Skjul topptekstrad", + "toggleHeaderColumn": "Vis/Skjul topptekstkolonne" }, "align": { "left": "Venstre", @@ -1817,8 +2867,6 @@ "clearColor": "Fjern farge", "source": "Kilde", "widthPlaceholder": "Verdi i % eller piksler", - "columns": "Kolonner", - "rows": "Rader", "width": "Bredde", "height": "Høyde" }, @@ -1830,7 +2878,9 @@ "discard": "Forkast endringer", "keepEditing": "Fortsett å redigere" } - } + }, + "saveFailed": "Kan ikke lagre notat", + "documentStats": "{words, plural, one {# ord} other {# ord}} · {characters, plural, one {# tegn} other {# tegn}}" }, "anchorNote": { "name": "Ankermerknad", @@ -1839,9 +2889,6 @@ "noteId": { "label": "Notat" }, - "showTitle": { - "label": "Vis tittel" - }, "showUpdatedAt": { "label": "Vis sist oppdatert" } @@ -1851,14 +2898,20 @@ "notFound": "Notat ikke funnet", "noNotes": "Fant ingen notater", "integrationRequired": "Velg en ankerintegrasjon først", - "updatedAt": "Oppdatert {date}", "untitled": "Uten navn", - "edit": "Rediger", - "save": "Lagre", - "cancel": "Avbryt", "readOnlyViewer": "Du har seertilgang til dette notatet. Redigering er deaktivert.", "saveForbidden": "Du har ikke tillatelse til å redigere dette notatet.", - "saveFailed": "Kunne ikke lagre dette notatet. Prøv på nytt." + "saveFailed": "Kunne ikke lagre dette notatet. Prøv på nytt.", + "createdAt": "Opprettet {date}", + "permission": { + "owner": "Eier", + "editor": "Redaktør", + "viewer": "Bruker" + }, + "status": { + "pinned": "Festet", + "archived": "Arkivert" + } }, "iframe": { "name": "iFrame", @@ -1917,6 +2970,25 @@ "clickable": { "label": "Klikkbar" } + }, + "state": { + "on": "På", + "off": "Av", + "unavailable": "Unavailable", + "unknown": "Ukjent" + }, + "advanced": { + "entityId": "Enhet ID: {id}", + "lastChanged": "Endret {date}", + "attribute": { + "unit": "Enhet", + "deviceClass": "Utstyrsklasse", + "icon": "Ikon" + } + }, + "error": { + "loadFailed": "Kan ikke laste inn enhet", + "toggleFailed": "Kan ikke oppdatere enhet" } }, "smartHome-executeAutomation": { @@ -1932,11 +3004,31 @@ }, "spotlightAction": { "run": "Kjør {name}" + }, + "advanced": { + "lastExecuted": "Sist kjørt ved {time}", + "automationId": "Automasjons-ID: {id}", + "ready": "Klar til å løpe", + "noPermission": "Ingen tillatelse til å kjøre denne automatiseringen" + }, + "status": { + "running": "Kjører automatisering", + "success": "Automatisering fullført" + }, + "error": { + "executeFailed": "Kan ikke kjøre automatisering" } }, "stockPrice": { "name": "Aksjekurs", "description": "Viser gjeldende aksjekurs for et selskap", + "advanced": { + "currentPrice": "Nåværende pris", + "previousClose": "Forrige lukking", + "changePercentage": "Endring (%)", + "minimum": "Minimum", + "maximum": "Maksimum" + }, "option": { "stock": { "label": "Aksjesymbol" @@ -2007,6 +3099,10 @@ "label": "1 måned" } } + }, + "showDetails": { + "label": "Vis detaljer", + "description": "Vis navn, endring, og tidsintervall i kompakt visning. Slå av for bare symbolet og pris." } } }, @@ -2034,6 +3130,13 @@ "showUnmonitored": { "label": "Vis ikke monitorert" } + }, + "advanced": { + "previousMonth": "Vis forrige måned", + "nextMonth": "Vis neste måned", + "eventCount": "{count, plural, one {# hendelsen} other {# hendelser}}", + "loading": "Laster kalenderhendelser...", + "noEvents": "Ingen hendelser i denne måneden" } }, "weather": { @@ -2046,16 +3149,18 @@ "disableTemperatureDecimals": { "label": "Deaktivere temperaturdesimaler" }, + "animateIcons": { + "label": "Animer værikoner" + }, + "showHumidity": { + "label": "Vis fuktighet" + }, "showCurrentWindSpeed": { - "label": "Vis nåværende vindhastighet", - "description": "Bare på nåværende vær" + "label": "Vis nåværende vindhastighet" }, "useImperialSpeed": { "label": "Bruk mph for vindhastighet" }, - "location": { - "label": "Vær plassering" - }, "showCity": { "label": "Vis by" }, @@ -2065,13 +3170,10 @@ "forecastDayCount": { "label": "Antall dagers værvarsel", "description": "Når widget ikke er bred nok, blir færre dager vist" - }, - "dateFormat": { - "label": "Datoformat", - "description": "Hvordan datoen skal se ut" } }, "currentWindSpeed": "{currentWindSpeed} {unit}", + "disabled": "Værdata er utilgjengelig fordi utgående tilkoblinger er deaktivert", "dailyForecast": { "sunrise": "Soloppgang", "sunset": "Solnedgang", @@ -2094,6 +3196,47 @@ "thunderstorm": "Tordenvær", "thunderstormWithHail": "Tordenvær med hagl", "unknown": "Ukjent" + }, + "details": "Vis værdetaljer", + "detailsFor": "Vis værdetaljer for {date}", + "advanced": { + "forecast": "7-dagers værmelding", + "hourlyForecast": "Neste 24 timer", + "day": "Dag", + "time": "Tid", + "conditions": "Betingelser", + "temperature": "Temperatur", + "feelsLike": "Føler som {temperature}", + "feelsLikeLabel": "Kjenner som", + "feelsLikeRange": "Føles som: {maximum} / {minimum}", + "highLow": "Høy {maximum} · Lav {minimum}", + "observedAt": "Oppdatert til {time}", + "humidity": "Fuktighet", + "averageHumidity": "Gjennomsnittlig fuktighet: {humidity}%", + "currentHumidity": "Nåværende fuktighet", + "wind": "Vind / spalter ({unit})", + "currentWind": "Gjeldende vind / spalter", + "windValue": "{speed} / {gusts} {unit}", + "windDetail": "Max vind / justeringer: {speed} / {gusts} {unit}", + "nextHourPrecipitation": "Neste time nedbør", + "precipitationChance": "Mulighet for nedbør", + "precipitationValue": "{probability}% · {amount} mm", + "precipitationDetail": "Nedskrifter: {probability}% · {amount} mm", + "todayUv": "Dagens maks UV-indeks", + "uvIndex": "Maks UV-indeks: {value}", + "daylight": "Dagslys: {duration}", + "hourlyTooltip": "Føler som {feelsLike}{temperatureUnit} · {amount} mm · {humidity}% fuktighet · {speed} {speedUnit} vind", + "hourlyTooltipWithoutHumidity": "Føler som {feelsLike}{temperatureUnit} · {amount} mm · {speed} {speedUnit} vind", + "detailLabel": { + "feelsLike": "Kjenner som", + "precipitation": "Nedbør", + "humidity": "Gjennomsnittlig fuktighet", + "wind": "Maks. vind / spalter", + "uv": "Maks UV indeks", + "daylight": "Daylight" + }, + "sun": "Soloppgang / solnedgang", + "noForecast": "Ingen værinformasjon tilgjengelig" } }, "indexerManager": { @@ -2106,8 +3249,15 @@ }, "title": "Indekserings-behandler", "testAll": "Test alle", + "status": { + "healthy": "Frisk", + "unhealthy": "Usunn", + "disabled": "Deaktivert", + "unknown": "Helse utilgjengelig" + }, "error": { - "internalServerError": "Kunne ikke hente indekser status" + "internalServerError": "Kunne ikke hente indekser status", + "testAll": "Indekseringstesten feilet. Prøv på nytt." } }, "healthMonitoring": { @@ -2136,11 +3286,6 @@ "fileSystem": { "label": "Vis filsysteminfo" }, - "visibleStorageVolumes": { - "label": "Synlige lagringsvolumer", - "description": "Bare tilgjengelig når alle valgte integrasjoner er synologi. La stå tomt for å vise alle lagringsvolumer.", - "placeholder": "Velg lagringsvolum" - }, "defaultTab": { "label": "Standard fane" }, @@ -2163,17 +3308,27 @@ "minutes": "{count} minutter", "used": "Brukt", "available": "Tilgjengelig", - "lastSeen": "Siste statusoppdatering: {lastSeen}" + "lastSeen": "Siste statusoppdatering: {lastSeen}", + "updatesAvailable": "{count, plural, one {# oppdatering tilgjengelig} other {# oppdateringer tilgjengelig}}", + "rebootRequired": "Omstart kreves", + "rebootNotRequired": "Ingen omstart kreves" + }, + "smartStatus": { + "attributesWithinThresholds": "SMART: attributter innenfor terskler", + "attributesFailed": "SMART: {attributes} mislyktes", + "noCriticalWarning": "SMART: ingen advarsel rapportert fra SSD", + "criticalWarning": "SMART: kritiske advarsler rapportert fra SSD" + }, + "gauge": { + "cpuUsage": "CPU-bruk", + "cpuTemperature": "Prosessor temperatur", + "memoryUsage": "Minnebruk", + "gpuUsage": "{name} GPU-bruk" }, - "memory": {}, "error": { "internalServerError": "Kunne ikke hente helse status" }, "cluster": { - "summary": { - "cpu": "CPU", - "memory": "RAM" - }, "resource": { "node": { "name": "Noder" @@ -2209,8 +3364,6 @@ "table": { "header": { "name": "Navn", - "cpu": "CPU", - "memory": "RAM", "node": "Node" } } @@ -2220,33 +3373,29 @@ "name": "Docker status", "description": "Statistikk over containerne dine (denne widgeten kan bare legges til med administratorrettigheter)", "option": { - "columns": { - "label": "Kolonner som skal vises" + "endpointIds": { + "label": "Forankringsmiljø", + "description": "La være tomt for å vise beholdere fra alle Docker-miljøet", + "placeholder": "Alle Docker miljøer" }, - "enableRowSorting": { - "label": "Aktiver sortering av elementer" + "containerFilter": { + "label": "Beholdere som skal filtreres" + }, + "filterIsWhitelist": { + "label": "Filtrer som hvitliste" }, "defaultSort": { - "label": "Kolonne brukt som standard for sortering", "option": { "name": "Navn", "state": "Tilstand", "cpuUsage": "CPU-bruk", "memoryUsage": "Minnebruk" } - }, - "descendingDefaultSort": { - "label": "Reverser sortering" - }, - "columnOrder": { - "label": "Rekkefølge på kolonne" - }, - "columnWidths": { - "label": "Kolonnebredde" } }, "error": { "internalServerError": "Kunne ikke hente containerstatistikk", + "endpointsUnavailable": "Legeendepunkter er ikke tilgjengelige", "layoutSaveTitle": "Tabelloppsett ikke lagret", "layoutSaveMessage": "Kunne ikke lagre Docker tabelloppsett. Forsøk å flytte eller endre størrelse på kolonnen igjen." }, @@ -2255,7 +3404,6 @@ } }, "coolify": { - "name": "Coolify", "description": "Oversikt over din Coolify-instans med servere og apper", "option": { "showServers": { @@ -2281,17 +3429,49 @@ "internalServerError": "Kunne ikke hente Coolify data" }, "server": { - "buildServer": "Bygg" + "buildServer": "Bygg", + "resourceCounts": "{applications, plural, one {# app} other {# apps}} / {services, plural, one {# tjenesten} other {# tjenester}}", + "reachability": "Tilgjengelighet", + "usability": "Brukbarhet" + }, + "source": { + "url": "Kilde: {url}", + "unavailable": "{source}: unavailable" }, "instances": { "title": "Instanser" + }, + "action": { + "openResource": "Åpne {name}", + "openLogs": "Åpne {name} logger", + "showIp": "Vis IP-adresse", + "hideIp": "Skjul IP-adresse" + }, + "status": { + "running": "Kjører", + "stopped": "Stoppet", + "exited": "Avsluttet", + "starting": "Starter", + "restarting": "Starter på nytt", + "unknown": "Ukjent", + "online": "Online", + "offline": "Offline", + "reachable": "Tilstrekkelig", + "unreachable": "Utilgjengelig", + "usable": "Brukbar", + "unusable": "Ubrukelig" } }, "vpn": { "name": "VPN", "description": "Oversikt over VPN-tilkoblingene dine", "serviceUnavailable": "VPN utilgjengelig", - "option": {} + "status": { + "running": "Kjører", + "notRunning": "Kjører ikke", + "unavailable": "Unavailable", + "vpn": "VPN: {status}" + } }, "ups": { "name": "OPPTAK", @@ -2318,14 +3498,19 @@ "runtime": "Kjøretid", "load": "Last", "input": "Input", - "output": "Utgang" + "output": "Utgang", + "batteryVoltage": "Batteri spenning", + "power": "Makt", + "temperature": "Temperatur", + "manufacturer": "Produsent", + "model": "Modell", + "serial": "Serienummer" }, "error": { "internalServerError": "Kunne ikke hente UPS-data" } }, "tracearr": { - "name": "Tracearr", "description": "Forbedret medieserverovervåking med detaljert strøm- og transkodingsdata", "option": { "showStreams": { @@ -2413,10 +3598,7 @@ "label": "Hendelse", "description": "Vis totale forekomster av en bestemt hendelse", "placeholder": "Velg en hendelse", - "loading": "Laster inn hendelser...", - "noEvents": "Ingen hendelser funnet", - "none": "Ingen hendelser", - "configureWebsiteFirst": "Velg en nettside først for å laste inn hendelser" + "none": "Ingen hendelser" }, "chartType": { "label": "Diagramtype", @@ -2447,26 +3629,21 @@ "eventNames": { "label": "Hendelser", "description": "Velg ett eller flere hendelser i diagrammet", - "placeholder": "Velg en hendelse...", - "loading": "Laster inn hendelser...", - "noEvents": "Ingen hendelser funnet", - "configureWebsiteFirst": "Velg en nettside først for å laste inn hendelser" + "placeholder": "Velg en hendelse..." }, "topCount": { "label": "Gjenstander å vise", "description": "Antall oppføringer som skal vises (maks 500)" + }, + "events": { + "loading": "Laster inn hendelser...", + "noEvents": "Ingen hendelser funnet", + "configureWebsiteFirst": "Velg en nettside først for å laste inn hendelser" } }, "event": { - "occurrences": "hendelser", "label": "hendelser" }, - "topPages": { - "direct": "Direkte" - }, - "topReferrers": { - "direct": "Direkte" - }, "events": { "selectPrompt": "Velg hendelser for å diagram" }, @@ -2475,6 +3652,9 @@ "noWebsite": "Ingen nettsted konfigurert", "noData": "Ingen data tilgjengelig", "internalServerError": "Kunne ikke hente Umami data" + }, + "top": { + "direct": "Direkte" } }, "common": { @@ -2502,7 +3682,8 @@ }, "integration": { "noData": "Ingen integrasjon funnet", - "description": "Klikk for å opprette en ny integrasjon" + "description": "Klikk for å opprette en ny integrasjon", + "manage": "Administrer integrasjoner" }, "app": { "noData": "Ingen app funnet", @@ -2513,7 +3694,61 @@ "noIntegration": "Ingen integrasjon valgt", "noData": "Ingen integrasjonsdata er tilgjengelig" }, - "option": {} + "integrationDisconnected": "Ingen data tilgjengelig, alle integrasjoner er frakoblet", + "updatedAt": "Oppdatert {date}", + "title": { + "label": "Tittel" + }, + "openInNewTab": { + "label": "Åpne i ny fane" + }, + "showTitle": { + "label": "Vis tittel" + }, + "weatherLocation": { + "label": "Vær plassering" + }, + "layout": { + "label": "Oppsett", + "option": { + "horizontal": "Horisontal", + "vertical": "Vertikal", + "grid": "Rutenett" + } + }, + "select": { + "loading": "Laster...", + "loadError": "Kan ikke laste inn innstillingene" + }, + "dateFormat": { + "label": "Datoformat", + "description": "Hvordan datoen skal se ut" + }, + "visibleStorageVolumes": { + "label": "Synlige lagringsvolumer", + "description": "Kun tilgjengelig når hver valgte integrasjon er OpenMediaVault eller Synology. La stå tomt for å vise alle oppdagede lagringsvolumer.", + "placeholder": "Velg lagringsvolum" + }, + "tableOptions": { + "columns": { + "label": "Kolonner som skal vises" + }, + "columnOrder": { + "label": "Rekkefølge på kolonne" + }, + "columnWidths": { + "label": "Kolonnebredde" + }, + "enableRowSorting": { + "label": "Aktiver sortering av elementer" + }, + "defaultSort": { + "label": "Kolonne brukt som standard for sortering" + }, + "invertSorting": { + "label": "Reverser sortering" + } + } }, "video": { "name": "Videostrømming", @@ -2572,6 +3807,7 @@ "transcoding": "Transkoding", "paused": "Pauset", "remaining": "{minutes} min igjen", + "seasonEpisode": "S{season} E{episode}", "metadata": { "title": "Statistikk for nerder", "video": { @@ -2589,11 +3825,16 @@ "resolution": "Oppløsning", "target": "Målkodek" } - } + }, + "unknownUser": "Ukjent bruker" + }, + "summary": { + "sessions": "{count, plural, one {# økt} other {# økter}}", + "playing": "{count} spiller", + "transcoding": "{count} transkoding" } }, "paperlessNgx": { - "name": "Paperless-ngx", "description": "Oversikt over Paperless-ngx-dokumentarkivet", "documentsTotal": "Totalt antall dokumenter", "documentsInbox": "Innboks", @@ -2638,7 +3879,6 @@ } }, "patchmon": { - "name": "PatchMon", "description": "Oversikt over vertsprogrammets status fra PatchMon", "title": "PatchMon Statistikk", "totalHosts": "Totalt antall verter", @@ -2705,36 +3945,30 @@ "description": "Sammenlign antall behov oppdateringer som en absolutt verdi eller prosentandel av totalt antall verter" }, "hostsNeedingUpdatesWarningAt": { - "label": "Trenger oppdaterings varselsterskel", - "description": "Angi gul når verdien når denne terskelen" + "label": "Trenger oppdaterings varselsterskel" }, "hostsNeedingUpdatesCriticalAt": { - "label": "Trenger oppdateringskritisk terskel", - "description": "Angi rødt når verdien når denne terskelen" + "label": "Trenger oppdateringskritisk terskel" }, "securityUpdatesThresholdMode": { "label": "Terskelmodus for sikkerhetsoppdateringer", "description": "Sammenlign sikkerhetsvarianter antallet som en absolutt verdi eller prosentandel av totale verter" }, "securityUpdatesWarningAt": { - "label": "Varselterskel for sikkerhetsoppdateringer", - "description": "Angi gul når verdien når denne terskelen" + "label": "Varselterskel for sikkerhetsoppdateringer" }, "securityUpdatesCriticalAt": { - "label": "Sikkerhetsoppdateringer kritisk terskel", - "description": "Angi rødt når verdien når denne terskelen" + "label": "Sikkerhetsoppdateringer kritisk terskel" }, "hostsWithSecurityUpdatesThresholdMode": { "label": "Verter med terskelmodus for sikkerhetsoppdateringer", "description": "Sammenlign vertstallet som en absolutt verdi eller prosent av totale verter" }, "hostsWithSecurityUpdatesWarningAt": { - "label": "Verter med varslingsterskel for sikkerhetsoppdateringer", - "description": "Angi gul når verdien når denne terskelen" + "label": "Verter med varslingsterskel for sikkerhetsoppdateringer" }, "hostsWithSecurityUpdatesCriticalAt": { - "label": "Verter med kritisk terskel for sikkerhetsoppdateringer", - "description": "Angi rødt når verdien når denne terskelen" + "label": "Verter med kritisk terskel for sikkerhetsoppdateringer" }, "upToDateHostsThresholdMode": { "label": "Oppdatert verts-terskelmodus", @@ -2753,12 +3987,10 @@ "description": "Sammenlign antall utgående pakker som en absolutt verdi eller prosentandel av totale verter" }, "totalOutdatedPackagesWarningAt": { - "label": "Varsel ved utdaterte pakker", - "description": "Angi gul når verdien når denne terskelen" + "label": "Varsel ved utdaterte pakker" }, "totalOutdatedPackagesCriticalAt": { - "label": "Kritisk terskel for utdaterte pakker", - "description": "Angi rødt når verdien når denne terskelen" + "label": "Kritisk terskel for utdaterte pakker" }, "showOsDistribution": { "label": "Vis OS distribusjon", @@ -2789,6 +4021,14 @@ "bars": "Horisontale streker", "donut": "Donut chart" } + }, + "threshold": { + "warningAt": { + "description": "Angi gul når verdien når denne terskelen" + }, + "criticalAt": { + "description": "Angi rødt når verdien når denne terskelen" + } } }, "error": { @@ -2796,12 +4036,12 @@ } }, "bazarr": { - "name": "Bazarr", "description": "Oversikt over manglende undertekster og helsestatus i Bazarr forekomsten", "episodes": "Manglende episoder", "movies": "Manglende filmer", "providers": "Leverandørproblemer", "status": "Helse problemer", + "announcements": "Kunngjøringer", "option": { "showMissingEpisodes": { "label": "Vis manglende episoder", @@ -2848,7 +4088,8 @@ "users": "Brukere", "photos": "Bilder", "videos": "Videoer", - "storage": "Brukt lagringsplass" + "storage": "Brukt lagringsplass", + "albumLimit": "Største album (opptil {count} vist)" }, "immich-albumCarousel": { "name": "Immich Album", @@ -2872,24 +4113,21 @@ } }, "description": "Lysbildefremvisning av bilder i ditt Immich-album", - "noPhotos": "Ingen bilder i dette albumet" + "noPhotos": "Ingen bilder i dette albumet", + "albumPhoto": "Album foto", + "actions": { + "previousPhoto": "Forrige bilde", + "nextPhoto": "Neste bilde", + "pauseSlideshow": "Pause slideshow", + "resumeSlideshow": "Fortsett bildeserie", + "toggleSlideshow": "Pause eller fortsett lysbildefremvisning", + "photo": "Bilde {number}" + } }, "downloads": { "name": "Nedlastings-klient", "description": "Lar deg se og behandle nedlastinger fra både Torrent og Usenet klienter.", "option": { - "columns": { - "label": "Kolonner som skal vises" - }, - "enableRowSorting": { - "label": "Aktiver elementsortering" - }, - "defaultSort": { - "label": "Kolonnen som brukes for sortering som standard" - }, - "descendingDefaultSort": { - "label": "Inverter sortering" - }, "showCompletedUsenet": { "label": "Vis usenet oppføringer markert som fullført" }, @@ -2914,12 +4152,6 @@ "limitPerIntegration": { "label": "Begrens elementer per integrasjon", "description": "Dette begrenser antall elementer vist per integrasjon, ikke globalt" - }, - "columnOrder": { - "label": "Rekkefølge på kolonne" - }, - "columnWidths": { - "label": "Kolonnebredde" } }, "errors": { @@ -3080,6 +4312,10 @@ "mediaRequests-requestList": { "name": "Liste over mediaspillforespørsler", "description": "Se en liste over alle medieforespørsler fra din Overseerr eller Jellyseerr instans", + "empty": { + "title": "Ingen medieforespørsler ennå", + "description": "Søk etter en film eller vis for å starte en forespørsel." + }, "option": { "linksTargetNewTab": { "label": "Åpne lenker i ny fane" @@ -3113,12 +4349,16 @@ "failed": "Feilet", "completed": "Fullført" }, + "unknown": "Ukjent", "toBeDetermined": "Uavklart" }, "mediaRequests-requestStats": { "name": "Statistikk for mediaforespørsler", "description": "Statistikk om dine medieforespørsler", - "option": {}, + "empty": { + "title": "Ingen forespørsel-aktivitet ennå", + "description": "Statistikk vil vises etter den første medieforespørselen." + }, "titles": { "stats": { "main": "Media statistikk", @@ -3128,8 +4368,7 @@ "declined": "Allerede avslått", "available": "Allerede tilgjengelig", "tv": "TV forespørsler", - "movie": "Film forespørsler", - "total": "Totalt" + "movie": "Film forespørsler" }, "users": { "main": "Topp brukere", @@ -3155,7 +4394,6 @@ }, "currentIndex": "{start}-{end} av {total}", "healthCheck": { - "title": "Helsesjekk", "queued": "I kø", "status": { "healthy": "Frisk", @@ -3164,35 +4402,30 @@ }, "panel": { "statistics": { - "empty": "Tøm", - "transcodes": "Transkoder", - "transcodesCount": "Transkoder", - "healthChecksCount": "Helsesjekker", "filesCount": "Filer", "savedSpace": "Diskplass spart", - "healthChecks": "Helsesjekker", "videoCodecs": "Kodeker", "videoContainers": "Containere", "videoResolutions": "Oppløsninger" }, "workers": { - "empty": "Tøm", "table": { - "file": "Fil", "eta": "Gjenstående tid (estimat)", - "progress": "Fremgang", - "transcode": "Transkode", - "healthCheck": "Helsesjekk" + "progress": "Fremgang" } }, "queue": { - "empty": "Tøm", "table": { - "file": "Fil", - "size": "Størrelse", - "transcode": "Transkode", - "healthCheck": "Helsesjekk" + "size": "Størrelse" } + }, + "common": { + "empty": "Tøm", + "file": "Fil", + "healthCheck": "Helsesjekk", + "transcode": "Transkode", + "transcodes": "Transkoder", + "healthChecks": "Helsesjekker" } } }, @@ -3216,7 +4449,8 @@ }, "type": { "movie": "Film", - "episode": "Episode" + "episode": "Episode", + "book": "Bok" }, "empty": { "missing": "Ingen manglende produkter", @@ -3247,6 +4481,13 @@ "showPosterImage": { "label": "Vis plakatbilde" } + }, + "error": { + "allFeedsFailed": "Kan ikke laste RSS-feed. Kontroller URLene for nyhetsmating, og prøv igjen." + }, + "warning": { + "partial": "{count, plural, one {# RSS-feed kunne ikke lastes} other {# RSS-strømmer kunne ikke lastes}}", + "stale": "RSS-feeder kunne ikke oppdateres. Viser tidligere lastet oppføringer." } }, "releases": { @@ -3322,17 +4563,8 @@ "label": "Regulært uttrykk" } }, - "edit": { - "label": "Rediger" - }, "editForm": { - "title": "Rediger repository", - "cancel": { - "label": "Avbryt" - }, - "confirm": { - "label": "Bekreft" - } + "title": "Rediger repository" }, "importForm": { "title": "Importer fra Docker" @@ -3349,8 +4581,7 @@ "label": "Søkeleverandør Tokens", "token": "Sjetong", "configured": "Sjetong konfigurert", - "notConfigured": "Ingen token valgt", - "save": "Lagre" + "notConfigured": "Ingen token valgt" } } }, @@ -3377,17 +4608,32 @@ "noProviderResponse": "Ingen respons fra leverandør", "unexpected": "Uventet leverandørfeil" } - } + }, + "expandDetails": "Vis detaljer for {name}", + "collapseDetails": "Skjul detaljer for {name}" }, "networkControllerSummary": { - "option": {}, - "card": { - "vpn": { - "countConnected": "{count} tilkoblet" + "advanced": { + "updated": "Oppdatert", + "metric": { + "latency": "Latens", + "ping": "Ping", + "uptime": "Oppetid", + "users": "Brukere", + "guests": "Gjester" } }, + "card": { + "vpn": { + "countConnected": "{count, plural, one {# tilkoblet} other {# tilkoblet}}", + "label": "VPN" + }, + "wan": "WAN", + "web": "Nett", + "wifi": "Wi-Fi", + "lan": "LAN" + }, "error": { - "integrationsDisconnected": "Ingen data tilgjengelig, alle integrasjoner er frakoblet", "unknownContentOption": "Ukjent innholdsvalg for nettverkskontroller-sammendragswidget: " }, "name": "Nettverkskontroller-sammendrag", @@ -3424,7 +4670,6 @@ } }, "error": { - "integrationsDisconnected": "Ingen data tilgjengelig, alle integrasjoner er frakoblet", "unknownContentOption": "Ukjent innholdsvalg for nettverksstatus-widget: " }, "name": "Nettverksstatus", @@ -3454,7 +4699,6 @@ "versiontitle": "Versjoner", "cputitle": "CPU-bruk", "memorytitle": "Minnebruk", - "cpu": "CPU", "memory": "Minne", "interfaces": { "name": "navn", @@ -3462,6 +4706,16 @@ "recv": "Mottatt", "title": "Nettverksgrensesnitt" } + }, + "empty": { + "noInterfaces": "Ingen data om nettverksgrensesnitt ennå" + }, + "versionUnknown": "Ukjent versjon", + "metricAccessible": "{metric}: {value}%, {status}", + "status": { + "normal": "Vanlig", + "warning": "Advarsel", + "critical": "Kritisk" } }, "notifications": { @@ -3471,8 +4725,21 @@ "option": { "hideLogos": { "label": "Skjul logoer" + }, + "messageFormat": { + "label": "Format for melding", + "option": { + "auto": "Automatisk", + "plain": "Ren tekst", + "markdown": "Markdown", + "html": "HTML" + } } - } + }, + "openService": "Åpen varslingstjeneste", + "deleteNotification": "Slett varsel fra Gotify", + "deleteFailed": "Kan ikke slette varsel", + "deleteFailedMessage": "Varselet kunne ikke slettes. Vennligst prøv igjen." }, "speedtestTracker": { "name": "Speedtest tracker", @@ -3514,7 +4781,6 @@ } }, "uptimeKuma": { - "name": "Opp til Kuma", "description": "Overvåke oppetid statistikk fra statussiden i Kuma", "option": { "showAverageUptime": { @@ -3551,10 +4817,14 @@ }, "error": { "internalServerError": "Kunne ikke hente oppetid data" + }, + "status": { + "up": "Opplastnings hastighet", + "down": "Nedlastings- hastighet", + "paused": "Pauset" } }, "traefik": { - "name": "Traefik", "description": "Oversikt over Traefik rutere, tjenester, middager og inngangspunkter", "option": { "showTcp": { @@ -3575,7 +4845,6 @@ }, "resource": { "routers": "Rutere", - "services": "Tjenester", "middlewares": "Midtbeslag" }, "status": { @@ -3585,7 +4854,20 @@ }, "error": { "internalServerError": "Fikk ikke tak i Traefik data" - } + }, + "resourceType": { + "router": "Ruter", + "service": "Tjeneste", + "middleware": "Middels" + }, + "resourceStatus": { + "enabled": "Aktivert", + "disabled": "Deaktivert", + "warning": "Advarsel", + "error": "Feil", + "unknown": "Ukjent" + }, + "failedEndpoint": "Mislyktes: {endpoint}" }, "audioStats": { "name": "Lyd statistikk", @@ -3651,9 +4933,7 @@ "label": "Synlige diagrammer", "description": "Velg diagrammene du vil vise.", "option": { - "cpu": "CPU", "memory": "Minne", - "gpu": "GPU", "network": "Nettverk" } }, @@ -3668,12 +4948,11 @@ } }, "card": { - "cpu": "CPU", "memory": "Minne", - "gpu": "GPU", "network": "NETT", "up": "OPP", - "down": "NED" + "down": "NED", + "memoryTooltip": "{used} / {available} ({percent}%)" } }, "systemDisks": { @@ -3699,151 +4978,88 @@ }, "showBackgroundBar": { "label": "Vis bakgrunnsbrukslinje" - }, - "visibleStorageVolumes": { - "label": "Synlige lagringsvolumer", - "description": "Bare tilgjengelig når alle valgte integrasjoner er synologi. La stå tomt for å vise alle lagringsvolumer.", - "placeholder": "Velg lagringsvolum" } }, "status": { - "unhealthy": "Usunn" + "unhealthy": "Usunn", + "smart": "Smarte", + "free": "{percentage}% gratis" + } + }, + "customApi": { + "name": "Egendefinert widget", + "description": "Gjengi en konfigurert egendefinert JSX-definisjon.", + "customJsx": { + "noTemplate": "Ingen JSX-mal er konfigurert.", + "templateWarnings": "{count} mal advarsler:", + "requestIdRequired": "Denne nettverkskontrollen krever en navngitt forespørsel.", + "unsavedPreview": "Kjør den innledende forespørselstesten i editoren før testing med navngitte forespørsler.", + "invalidParams": "Forespørselens parametre er ugyldige.", + "loading": "Laster forespørsel...", + "loadRequest": "Last forespørsel", + "requestFailed": "Forespørselen mislyktes.", + "retry": "Prøv igjen", + "actionCompleted": "Handlingen er fullført.", + "actionSimulated": "Handlingsimulator; ingen forespørsel ble sendt.", + "actionsDisabledEditMode": "Handlinger er deaktivert mens tavlen er i redigeringsmodus.", + "widgetItemUnavailable": "Denne widgeten er ikke tilgjengelig.", + "toggle": "Veksle", + "copied": "Kopiert", + "confirmDelete": "Bekreft denne destruktive handlingen." + }, + "option": { + "definitionId": { + "label": "Egendefinert widget" + }, + "refreshInterval": { + "label": "Oppdater intervall", + "description": "Hvor ofte skal data fra API (i sekunder) fylles" + } + }, + "noDefinition": "Ingen definisjon valgt", + "definitionNotFound": "Tilpasset widget utilgjengelig", + "migrationRequired": "Denne eldre egendefinerte widgeten er bevart men den må overføres til Custom JSX v2 fra å administrere egendefinerte widgets før den kan kjøre.", + "manageMigration": "Åpne Administrer tilpassede widgets", + "contactAdmin": "Kontakt en administrator.", + "configurationNeedsRepair": "Alternativet til denne widgeten ble endret. Rediger widgeten for å reparere konfigurasjonen.", + "removeFromBoard": "Fjern fra tavlen", + "editModePending": "Lager tavlen til å laste denne widgeten.", + "picker": { + "group": "Egendefinerte JSX widgets", + "empty": "Ingen egendefinerte widgets funnet", + "preview": "Forhåndsvisning", + "sources": "{count, plural, one {# kilde} other {# kilder}}", + "requests": "{count, plural, one {# forespørsel} other {# forespørsler}}", + "migrationRequired": "Migrasjon kreves", + "migrationDescription": "Denne plasserte v1 widgeten kan ikke kjøre ennå. Kopier dens rødfargede ledetekst til en LLM, og lim så inn et eneste JSON-svar på Homarr.", + "manageMigration": "Åpne Administrer tilpassede widgets", + "contactAdmin": "Kontakt en administrator." + }, + "configuration": { + "needsAttention": "Konfigurasjonen trenger oppmerksomhet: {message}", + "advancedOptions": "Avanserte innstillinger", + "invalidJson": "Ugyldig JSON" } }, "beszelSystemTable": { "name": "Beszel systemer (tabell)", "description": "Tabellvisning for alle Beszel-overvåkede systemer med sorterbare kolonner og statusindikatorer", "option": { - "statusFilter": { - "label": "Status filter" - }, "sortBy": { "label": "Sorter etter" }, "sortDirection": { "label": "Sorter retning" - }, - "showCpu": { - "label": "Vis CPU" - }, - "showMemory": { - "label": "Vis minne" - }, - "showDisk": { - "label": "Vis disk" - }, - "showGpu": { - "label": "Vis GPU" - }, - "showLoadAvg": { - "label": "Vis gjennomsnitt for last" - }, - "showNet": { - "label": "Vis nettverk" - }, - "showTemp": { - "label": "Vis temperatur" - }, - "showBattery": { - "label": "Vis batteri" - }, - "showServices": { - "label": "Vis tjenester" - }, - "showUptime": { - "label": "Vis oppetid" - }, - "showAgent": { - "label": "Vis agent versjon" - }, - "columnOrder": { - "label": "Rekkefølge på kolonne" - }, - "columnWidths": { - "label": "Kolonnebredde" } }, - "noRecords": "Ingen systemer funnet", "error": { - "internalServerError": "Kan ikke koble til Beszel. Sjekk dine integrasjonsinnstillinger.", "layoutSaveTitle": "Kan ikke lagre tabelloppsett", "layoutSaveMessage": "Bestillingen eller breddene på kolonnen kunne ikke lagres. Prøv på nytt." - }, - "column": { - "system": "Systemadministrasjon", - "cpu": "Prosessor", - "memory": "Minne", - "disk": "Disk", - "gpu": "GPU", - "loadAvg": "Last snitt", - "net": "Netto", - "temp": "Temp", - "battery": "Flaggermus", - "services": "Tjenester", - "uptime": "Oppetid", - "agent": "Agent" } }, "beszelSystemGrid": { "name": "Beszel Systems (Grid)", - "description": "Korttabellvisning for alle Beszel-overvåkede systemer med sanntidsmåltall", - "option": { - "statusFilter": { - "label": "Status filter" - }, - "showCpu": { - "label": "Vis CPU" - }, - "showMemory": { - "label": "Vis minne" - }, - "showDisk": { - "label": "Vis disk" - }, - "showGpu": { - "label": "Vis GPU" - }, - "showLoadAvg": { - "label": "Vis gjennomsnitt for last" - }, - "showNet": { - "label": "Vis nettverk" - }, - "showTemp": { - "label": "Vis temperatur" - }, - "showBattery": { - "label": "Vis batteri" - }, - "showServices": { - "label": "Vis tjenester" - }, - "showUptime": { - "label": "Vis oppetid" - }, - "showAgent": { - "label": "Vis agent versjon" - } - }, - "error": { - "internalServerError": "Kan ikke koble til Beszel. Sjekk dine integrasjonsinnstillinger." - }, - "empty": { - "noSystems": "Ingen systemer funnet" - }, - "metric": { - "cpu": "Prosessor", - "memory": "Minne", - "disk": "Disk", - "gpu": "GPU", - "loadAvg": "Last snitt", - "net": "Netto", - "temp": "Temp", - "battery": "Flaggermus", - "services": "Tjenester", - "uptime": "Oppetid", - "agent": "Agent" - } + "description": "Korttabellvisning for alle Beszel-overvåkede systemer med sanntidsmåltall" }, "beszelAlerts": { "name": "Beszel Alerts", @@ -3857,11 +5073,12 @@ } }, "empty": "Ingen varsler konfigurert", - "error": { - "internalServerError": "Kan ikke koble til Beszel. Sjekk dine integrasjonsinnstillinger." - }, "history": "Historikk", "resolved": "Løst", + "alertDescription": { + "statusDuration": "Ned for {minutes} min", + "threshold": "Overstiger fra {value} over {minutes} min" + }, "status": { "triggered": "Utløst", "ok": "Ok" @@ -3908,16 +5125,16 @@ "noSystems": "Ingen systemer funnet" }, "error": { - "internalServerError": "Kan ikke koble til Beszel. Sjekk dine integrasjonsinnstillinger.", "liveConnectionFailed": "Direkte tilkobling mislyktes. Beszel-forekomsten din støtter kanskje ikke sanntidsstrømming.", "switchToHistorical": "Bytt til historisk visning", - "systemNotFound": "Valgt system ble ikke funnet. Velg et annet system." + "systemNotFound": "Valgt system ble ikke funnet. Velg et annet system.", + "selectionSaveTitle": "Kan ikke lagre utvalget", + "selectionSaveMessage": "Ditt valg av system-eller tidsperiode kunne ikke lagres. Prøv på nytt." }, "chart": { "cpu": { "title": "Prosessorbruk", - "subtitle": "Gjennomsnittlig prossessorutnyttelse i hele systemet", - "series": "Prosessor" + "subtitle": "Gjennomsnittlig prossessorutnyttelse i hele systemet" }, "memory": { "title": "Minne brukt", @@ -3959,39 +5176,550 @@ "title": "Docker nettverk I/O", "subtitle": "Nettverkstrafikken til en dokerkolulator" } + }, + "period": { + "live": "Direkte", + "oneHour": "1t", + "twelveHours": "12 t", + "oneDay": "24t", + "oneWeek": "1u", + "thirtyDays": "30d" } }, - "wud": { - "name": "Hva passer opp", - "description": "Vis hvor mange sette containere som er tilgjengelige.", - "title": "Hva passer opp", - "monitored": "Overvåket", - "updatesAvailable": "{count, plural, one {# oppdatering tilgjengelig} other {# oppdateringer tilgjengelig}}", - "updateAvailable": "Oppdatering tilgjengelig", - "openReleaseNotes": "Åpne utgivelsesnotater", + "assistant": { + "name": "Assistent", + "description": "Ha en komplett assistent samtale direkte på tavlen.", + "unavailable": { + "title": "Assistent utilgjengelig", + "description": "Logg inn og be en administrator om å konfigurere assistenten fra administrasjonspanelet." + }, + "compact": { + "title": "Assistent", + "description": "Endre denne widgeten for å chatte her, eller åpne hele samtalen.", + "open": "Åpne assistent", + "openTitle": "Assistent åpne i sidepanelet", + "openDescription": "Samtalen forblir i én aktiv overflate.", + "returnToWidget": "Returner samtalen til denne modulen", + "otherWidgetTitle": "Assistent aktiv i en annen widget", + "otherWidgetDescription": "Bare en samtale forblir aktiv om gangen.", + "useHere": "Bruk assistenten i denne widgeten" + } + }, + "beszel": { + "error": { + "internalServerError": "Kan ikke koble til Beszel. Sjekk dine integrasjonsinnstillinger." + }, + "empty": { + "noSystems": "Ingen systemer funnet" + }, + "options": { + "statusFilter": { + "label": "Status filter" + }, + "showCpu": { + "label": "Vis CPU" + }, + "showMemory": { + "label": "Vis minne" + }, + "showDisk": { + "label": "Vis disk" + }, + "showGpu": { + "label": "Vis GPU" + }, + "showLoadAvg": { + "label": "Vis gjennomsnitt for last" + }, + "showNet": { + "label": "Vis nettverk" + }, + "showTemp": { + "label": "Vis temperatur" + }, + "showBattery": { + "label": "Vis batteri" + }, + "showServices": { + "label": "Vis tjenester" + }, + "showUptime": { + "label": "Vis oppetid" + }, + "showAgent": { + "label": "Vis agent versjon" + } + }, + "metric": { + "system": "System", + "source": "Integrasjon", + "hostname": "Vertsnavn", + "cpuModel": "CPU modell", + "cores": "Kjerner", + "memoryTotal": "Minne totalt", + "memory": "Minne", + "disk": "Disk", + "loadAvg": "Last snitt", + "net": "Netto", + "temp": "Temp", + "battery": "Flaggermus", + "uptime": "Oppetid", + "agent": "Agent" + } + }, + "llamacpp": { + "name": "llama.cpp", + "description": "Vis helse, lastet modell og generasjons fart på din lokale lama.cpp server.", + "title": "llama.cpp", + "status": { + "unhealthy": "Usunn ({status})" + }, + "idle": "Inaktiv", + "speedTooltip": { + "current": "Gjeldende generasjonshastighet", + "average": "Gjennomsnittlig generasjonshastighet siden oppstart", + "request": "Gjennomsnittlig hastighet siden forespørselen startet" + }, + "busy": "{count, plural, one {# forespørsel kjører} other {# forespørsler kjører}}", + "modelInfo": { + "context": "Kontekst", + "size": "Fil Størrelse", + "parameters": "Parametere", + "model": "Modell", + "quantization": "Kvantisering" + }, + "stats": { + "tokensProcessed": "Tokens prosessert", + "contextUsage": "Kontekst / KV bruk", + "cacheHitRate": "Ledetekst treff-hastighet for cache", + "tokensGenerated": "Symboler generert" + }, + "error": { + "unreachable": "lama-server er ikke tilgjengelig" + }, + "unit": { + "speed": "{value} t/s", + "parameters": "{value}B", + "none": "—", + "speedShort": "t/s" + }, "option": { "showTitle": { "label": "Vis tittel" }, - "showRing": { - "label": "Vis oppdatering ring" + "showModelInfo": { + "label": "Vis info om modellen" }, - "layout": { - "label": "Oppsett", + "showContextUsage": { + "label": "Vis bruk av kontekst" + }, + "showCacheHitRate": { + "label": "Vis cachetreff-hastighet" + }, + "showSpeedStats": { + "label": "Vis hastighetsstatistikk" + }, + "showRequests": { + "label": "Vis anmodningsinnlasting" + }, + "showTokenStats": { + "label": "Vis token totaler" + }, + "showSpeculative": { + "label": "Vis spekulativ dekoding" + } + }, + "advanced": { + "promptSpeed": "Ledetekst hastighet", + "avgSpeed": "Gjennomsnittlig generasjon", + "requests": "Forespørsler", + "deferred": "Utsatt", + "slots": "{processing}/{total} plasser opptatt", + "speculative": "Spesifikasjon", + "avgPrompt": "Snitt ledetekst", + "specDrafts": "Art. utkast", + "specAccepted": "Spesifikt. aksepterte symboler", + "specDraftTokens": "Spesifikt utkast tokens" + } + }, + "stats": { + "name": "Statistikk", + "description": "Kombiner statistikk fra integrasjoner i en konfigurerbar widget.", + "configure": "Konfigurer måltall", + "refresh": "Oppdatere statistikk", + "empty": "Åpne widget-innstillinger, velg integreringer, legg deretter måltall.", + "editorHelp": "Legg til måltall fra integrasjoner valgt for denne widgeten. Endringer lagres i dashbordet.", + "source": "Integrasjon", + "metric": "Metrisk", + "noMetrics": "Ingen statistikk er tilgjengelig for denne integrasjonen", + "add": "Legg til måltall", + "label": "Egendefinert etikett", + "hidden": "Skjult", + "compact": "Kompakt tall", + "moveUp": "Flytte opp", + "moveDown": "Flytt ned", + "remove": "Fjern måltall", + "loading": "Laster inn…", + "unavailable": "Unavailable", + "refreshFailed": "Oppdatering feilet - vise lagrede data", + "stale": "Lagrede data - oppdater for å oppdatere", + "table": { + "value": "Verdi", + "status": "Status" + }, + "option": { + "table": { + "label": "Tabellvisning" + }, + "rows": { + "label": "Kompakt rader" + }, + "showIcon": { + "label": "Vis kilde-ikon" + }, + "spacing": { + "label": "Avstand", "option": { - "horizontal": { - "label": "Horisontal" + "xs": { + "label": "Kompakt" }, - "vertical": { - "label": "Vertikal" + "sm": { + "label": "Komfortabel" + }, + "md": { + "label": "Sterk" } } }, - "showUpdateList": { - "label": "Vis liste over containeroppdatering", - "description": "Viser hver overvåket beholder som har en bildeoppdatering tilgjengelig" + "entries": { + "label": "Måltall" + }, + "plain": { + "label": "Fjern kortbakgrunner" } - } + }, + "fetchFailed": "Kan ikke hente statistikk", + "viewOptions": "Tilpass denne visningen", + "moreMetrics": "{count} mer i avansert visning", + "localHelp": "Layout, formatering og synlighet gjelder bare for denne visningen. Delte tavleinnstillinger er de samme.", + "plain": "Fjern kortbakgrunner", + "resetView": "Tilbakestille visning", + "allHidden": "Alle måltall er skjult i denne visningen. Bruk Tilpass denne visningen for å gjenopprette dem." + }, + "wazuh": { + "target": { + "api": "Wazuh server API", + "indexer": "Vasuh indekser", + "wazuh": "Wazuh" + }, + "severity": { + "low": "Lav", + "medium": "Medium", + "high": "Høy", + "critical": "Kritisk" + }, + "error": { + "unauthorized": { + "title": "{target} avviste legitimasjonen", + "description": "Sjekk brukernavnet og passordet lagret på Wazuh integrasjonen. ServerAPI-et (port 55000) og indeksereren (port 9200) bruker separate brukere." + }, + "certificate": { + "title": "{target} sertifikatet er ikke klarert", + "description": "Wazuh bruker et selvsignert sertifikat som standard. Kjør \"Testtilkobling\" på integrasjonen og stoler på sertifikatet, eller legg til CA i Innstillinger → Sertifikater." + }, + "unreachable": { + "title": "Kan ikke nå {target}", + "description": "Verten avslo eller slapp tilkoblingen. Sjekk nettadressen, port og brannmur. Indekseren lytter bare på localhost i en standard alt-i-ett-installasjon." + }, + "timeout": { + "title": "{target} fikk tidsavbrudd", + "description": "Ingen respons innen 15 sekunder. Tjenesten kan bli overbelastet, eller adressen kan være feil." + }, + "status": { + "title": "{target} returnerte en feil", + "description": "Forespørselen mislyktes med HTTP-status {status}." + }, + "invalidResponse": { + "title": "Uventet svar fra {target}", + "description": "Kontroller at URL-adressen peker til Wazuh server API eller indekserer, og ikke til dashbordet." + }, + "indexerRequired": { + "title": "Wazuh indeksereren må fylles ut", + "description": "Varsler og sårbarheter og filintegritetshendelser er lest fra Wazuh indeksen. Legg til en indekser-URL, brukernavn og passord til integreringen." + }, + "unknown": { + "title": "Kunne ikke laste data fra {target}", + "description": "Sjekk Homarr loggene for detaljer." + } + }, + "range": { + "1h": "1t", + "24h": "24t", + "7d": "7d", + "30d": "30d" + }, + "levelTooltip": "Regelnivå {level} ({severity})" + }, + "wazuhAgents": { + "name": "Vasukiske midler", + "description": "Sorterbar liste over Wazuh agenter med status, OS, versjon og siste holdbarhet", + "option": { + "statusFilter": { + "label": "Vis agenter" + }, + "sortBy": { + "label": "Sorter etter" + }, + "showVersion": { + "label": "Vis kolonne for Wazuh versjon" + }, + "showGroups": { + "label": "Vis gruppe-kolonne" + } + }, + "title": "Agenter", + "total": "{count} agenter", + "status": { + "active": "Aktiv", + "disconnected": "Frakoblet", + "neverConnected": "Aldri tilkoblet", + "pending": "Venter" + }, + "statusLabel": { + "active": "Aktiv", + "disconnected": "Frakoblet", + "never_connected": "Aldri tilkoblet", + "pending": "Venter", + "unknown": "Ukjent" + }, + "live": "Direkte", + "snapshot": "Øyeblikksbilde fra {age} siden", + "snapshotHint": "Les fra Wazuh dashbord sitt bilde (wazuh-monitoring) tatt på {time}. Legg til API-opplysninger for live data.", + "staleSnapshot": "Agenten snapshot fra {time} er utdatert. Sjekk at Wazuh dashboard overvåkingsjobben er i gang, eller legg til server API legitimasjon.", + "noDisconnected": "Alle agenter er tilkoblet", + "empty": "Ingen agenter samsvarer med dette filteret", + "column": { + "status": "Status", + "name": "Jobb navn", + "ip": "IP", + "os": "OS", + "version": "Versjon", + "lastKeepAlive": "Keepalive", + "groups": "Grupper" + }, + "outdated": "Eldre enn nyeste agent versjon ({version})" + }, + "wazuhAlerts": { + "name": "Wazuh varsler feed", + "description": "Siste Wazuh varsler med nivået, MITRE ATT&CK teknikker, agent og kilde IP", + "option": { + "minLevel": { + "label": "Minste regelnivå", + "description": "Wazuh-nivåer: 0-6 lav, 7-11 medium, 12-14 høy, 15 + kritisk" + }, + "hours": { + "label": "Tidsvindu (timer)" + }, + "limit": { + "label": "Antall varsler" + }, + "showMitre": { + "label": "Show MITRE ATT&CK techniques" + }, + "showAgent": { + "label": "Vis agent" + }, + "showSourceIp": { + "label": "Vis kilde IP" + }, + "showRuleId": { + "label": "Vis regel ID" + } + }, + "title": "Varsler · Nivå {level}+ · {hours}h", + "empty": "Ingen varsler på dette nivået. Alle rolige.", + "rule": "Regel {id}", + "openInDashboard": "Åpne dette varselet i Wazuh dashbordet" + }, + "wazuhSummary": { + "name": "Wazukh varslings alvorlighetsgrad", + "description": "Gjør alvorlighetsgraden oppmerksom med en trend mot forrige periode", + "option": { + "range": { + "label": "Tidsintervall" + }, + "showTrend": { + "label": "Vis trend mot forrige periode" + }, + "showFooter": { + "label": "Vis bunntekst" + } + }, + "title": "Alvorlighetsgrad av alarm · {range}", + "alerts": "varsler", + "none": "Ingen varsler", + "trend": { + "new": "ny", + "tooltip": "Forrige periode: {previous}" + }, + "previous": "Forrige {range}: {count}", + "maxLevel": "Maks nivå {level}", + "health": "Indekserer health: {status}", + "manager": "Behandler {version}" + }, + "wazuhTimeline": { + "name": "Wazuh alerts timeline", + "description": "Stablet diagram over Hviterusslåtte varsler over tid av alvorlighetsgrad", + "option": { + "range": { + "label": "Tidsintervall" + }, + "interval": { + "label": "Intervall" + }, + "chartType": { + "label": "Diagramtype" + }, + "yScale": { + "label": "Y akseskala", + "description": "Kvadratisk rot holder høye og kritiske varsler synlig neste tusen av lave" + }, + "minLevel": { + "label": "Minste regelnivå" + }, + "showLegend": { + "label": "Vis forklaring med totaler" + } + }, + "title": "Varsler tidslinje · {range}", + "total": "{count} varsler", + "interval": "per {interval}" + }, + "wazuhTopList": { + "name": "Hvete toppliste", + "description": "Topp regler, agenter, kilde-IP-adresser eller MITRE ATT&CK taktikk og teknikker ved å varsle", + "option": { + "kind": { + "label": "Rangering" + }, + "range": { + "label": "Tidsintervall" + }, + "limit": { + "label": "Antall oppføringer" + }, + "minLevel": { + "label": "Minste regelnivå" + }, + "showBars": { + "label": "Vis streker" + } + }, + "title": { + "rules": "Toppregler · {range}", + "agents": "Flest agenter · {range}", + "sourceIps": "Topp kilde IPs · {range}", + "mitreTactics": "MITRE taktikk · {range}", + "mitreTechniques": "MITRE techniques · {range}" + }, + "empty": { + "rules": "Ingen varsler i denne perioden", + "agents": "Ingen varsler i denne perioden", + "sourceIps": "Ingen varsler med kilde-IP i denne perioden", + "mitreTactics": "Ingen varsler tilordnet til MITRE ATT&CK i denne perioden", + "mitreTechniques": "Ingen varsler tilordnet til MITRE ATT&CK i denne perioden" + }, + "totalTooltip": "{count} matchende varsler", + "private": "LAN", + "public": "Offentlig", + "agents": "Sett på {count} agenter", + "others": "{count} ytterligere varsler i andre enheter" + }, + "wazuhVulnerabilities": { + "name": "Vasuske sårbarheter", + "description": "Teller for sårbarhet, øverste kVEer og mest sårbare stoffer", + "option": { + "cveOrder": { + "label": "Ranger kven av" + }, + "minSeverity": { + "label": "KV alvorlighetsgrad" + }, + "cveLimit": { + "label": "Antall CVE-er" + }, + "agentLimit": { + "label": "Antall agenter" + }, + "showAgents": { + "label": "Vis mest sårbare agenter" + } + }, + "title": "Sårbarhet", + "topCves": "Øverste gjenstand", + "score": "Poeng", + "agentsShort": "Agenter", + "topAgents": "Mest sårbare agenter", + "criticalHigh": "Mal / Høy", + "totalTooltip": "{count} funn på {agents} agenter", + "affected": "{count} agenter", + "empty": "Ingen sårbarheter påvist", + "distribution": "Alvorlighetsfordeling. {unscored} funn uten en skår er ikke vist.", + "worst": "Vert: {id} ({score}) på {agents} agenter" + }, + "wazuhFim": { + "name": "Wazuh fil integritet", + "description": "Nylig gjennomgått filintegritetsovervåking (syscheck) hendelser", + "option": { + "range": { + "label": "Tidsintervall" + }, + "event": { + "label": "Hendelser" + }, + "limit": { + "label": "Antall hendelser" + }, + "includeRegistry": { + "label": "Inkluder Windows-registerhendelser" + } + }, + "title": "Filintegritet · {range}", + "event": { + "added": "Dato lagt til", + "modified": "Endret", + "deleted": "Slettet", + "unknown": "Endret" + }, + "empty": "Ingen filintegritetshendelser i denne perioden", + "user": "av {user}", + "registry": "Register" + }, + "wazuhAuthFailures": { + "name": "Wazuh godkjenningsfeil", + "description": "Mislyktes å logge inn og brute-force varsler per agent med timelister", + "option": { + "hours": { + "label": "Tidsvindu (timer)" + }, + "limit": { + "label": "Antall agenter" + }, + "showSourceIps": { + "label": "Vis topp kilde IP-er" + } + }, + "title": "Autentiseringsfeil · {hours}t", + "seriesTooltip": "Alle agenter i løpet av den siste {hours}t", + "peak": "Topp {count}/bucket", + "empty": "Ingen mislykkede innlogginger i denne perioden", + "failed": "Mislykkede innlogginger", + "failedHint": "Enkelt-godkjenningsfeil ((sshd, PAM, Windows logon, ugyldige brukere)", + "bruteForce": "Brute kraft", + "bruteForceHint": "Korrigerte brute-kraftregler (flere feil i løpet av kort tid, MITRE T1110)", + "sourceIps": "Kilde IP-adresser", + "ipTooltip": "{ip}: {count} feil", + "bruteForceCount": "{count} renser kraft" } }, "widgetPreview": { @@ -4004,7 +5732,76 @@ } }, "board": { + "emptyState": { + "title": "Bygg din første visning", + "description": "Legg til en widget eller app, eller koble til en tjeneste og bruk dens data om denne tavlen.", + "addWidget": "Legg til modul", + "addApp": "Legg til app", + "connectService": "Koble til tjeneste" + }, + "setupChecklist": { + "title": "Gjør tavlen nyttig", + "description": "Ta opp der du slapp av. Fremgang følger innholdet på dette brettet.", + "collapse": "Minimer oppsettsliste", + "dismiss": "Avvis oppsettsliste", + "resume": "Fortsett oppsett ({completed}/{total})", + "progress": "Oppsett av tavler", + "step": { + "content": { + "label": "Legg til nyttig innhold", + "description": "Velg en widget og konfigurer den før den er plassert." + }, + "app": { + "label": "Fest app", + "description": "Hold en tjeneste eller redskap et klikk unna denne tavlen." + }, + "service": { + "label": "Koble til en tjeneste", + "description": "Lås opp live-data og handlinger for kompatible widgets.", + "permissionDescription": "En administrator kan koble en tjeneste for å låse opp live-data.", + "action": "Nettverk" + } + } + }, "action": { + "addContent": "Legg til tavlinnhold", + "settings": "Innstillinger for tavle", + "switch": "Bytt tavle", + "switcher": { + "title": "Bytt tavle", + "search": { + "empty": "Ingen tavler samsvarer \"{search}\"." + }, + "results": "Tilgjengelige tavler", + "preview": "Forhåndsvisning av {name} med {count} elementer", + "currentHidden": "Nåværende tavle: {name}", + "keyboard": { + "navigate": "Navigate", + "open": "Åpne", + "instructions": "Skriv for å filtrere tavler. Bruk piltastene til å flytte gjennom resultater og Enter for å åpne en tavle." + }, + "empty": { + "title": "Ingen andre tavler", + "description": "Det er ingen andre tavler du kan få tilgang til." + }, + "error": "Tavler kunne ikke lastes." + }, + "create": { + "availability": { + "checking": "Kontrollerer tilgjengelighet…", + "available": "{name} er tilgjengelig" + }, + "notification": { + "success": { + "title": "Tavlen opprettet", + "message": "Tavlen {name} er opprettet" + }, + "error": { + "title": "Kan ikke opprette tavle", + "message": "Tavlen {name} kunne ikke opprettes" + } + } + }, "duplicate": { "title": "Dupliser tavle", "message": "Det vil duplisere tavlen {name} med alt innhold. Hvis widgeter refererer til integrasjoner du ikke har tilgang til, vil de bli fjernet.", @@ -4020,14 +5817,19 @@ } }, "edit": { + "enter": "Rediger tavle", + "save": "Lagre tavle", + "exit": "Avslutt redigeringsmodus", "notification": { "success": { - "title": "Endringer fullført", "message": "Tavlen lagret" }, "error": { - "title": "Kunne ikke fullføre endringer", "message": "Tavlen kunne ikke lagres" + }, + "loadError": { + "title": "Kan ikke starte redigering", + "message": "Trådredigeringsprogrammet kan ikke lastes inn. Dashbordet ditt er fremdeles tilgjengelig i visningsmodus." } }, "confirmLeave": { @@ -4035,62 +5837,6 @@ "message": "Du har ulagrede endringer, er du sikker på at du vil avslutte?" } }, - "oldImport": { - "label": "Importer fra homarr før 1.0.0", - "notification": { - "success": { - "title": "Importen var vellykket", - "message": "Tavlen ble importert" - }, - "error": { - "title": "Import feilet", - "message": "Tavlen kunne ikke importeres, sjekk loggene for ytterligere detaljer" - } - }, - "form": { - "file": { - "label": "Velg JSON-fil", - "invalidError": "Ugyldig konfigurasjonsfil" - }, - "apps": { - "label": "Apper", - "avoidDuplicates": { - "label": "Unngå duplikater", - "description": "Ignorerer apper der en app med samme href allerede eksisterer" - }, - "onlyImportApps": { - "label": "Bare importer apper", - "description": "Bare legge til appene, tavlen må gjenskapes manuelt" - } - }, - "name": { - "label": "Navn på tavle" - }, - "screenSize": { - "label": "Skjerm størrelse", - "description": "I versjoner før 1.0 fantes tre forskjellige moduser, slik at du kunne velge antall kolonner for hver skjermstørrelse.", - "option": { - "sm": "Liten", - "md": "Medium", - "lg": "Stor" - } - }, - "sidebarBehavior": { - "label": "Oppførsel for sidepanelet", - "description": "Sidestolper ble fjernet i 1.0, du kan velge hva som skal skje med elementene inne i dem.", - "option": { - "lastSection": { - "label": "Siste seksjon", - "description": "Sidepanelet vil bli vist under den siste seksjonen" - }, - "removeItems": { - "label": "Slett elementer", - "description": "Elementer som finnes i sidepanelet vil bli fjernet" - } - } - } - } - }, "quickCreateApp": { "modal": { "title": "Opprett app direkte", @@ -4098,6 +5844,12 @@ } } }, + "landmark": { + "canvas": "Dashbord lerret", + "leftRail": "Venstre dashbordskinne", + "rightRail": "Høyre instrumentpanel", + "items": "Dashbord elementer" + }, "field": { "pageTitle": { "label": "Side tittel" @@ -4167,7 +5919,8 @@ } }, "primaryColor": { - "label": "Primærfarge" + "label": "Primærfarge", + "locked": "Administratoren holder instansen av merkevarefargen på hver tavle." }, "secondaryColor": { "label": "Sekundærfarge" @@ -4207,9 +5960,6 @@ "xl": "Veldig stor" } }, - "name": { - "label": "Navn" - }, "isPublic": { "label": "Offentlig", "description": "Offentlige tavler er tilgjengelige for alle, selv uten en konto." @@ -4229,9 +5979,44 @@ "title": "Oppsett", "responsive": { "title": "Responsivt oppsett", + "description": "Hvert oppsett holder sine egne widget-posisjoner og -størrelser. Mobil og Base er alltid tilgjengelige; legg til egendefinerte oppsett når som helst.", "action": { "add": "Legg til oppsett" } + }, + "role": { + "mobile": "Mobil", + "base": "Grunnlag", + "custom": "Egendefinert" + }, + "custom": { + "defaultName": "Egendefinert oppsett" + }, + "mobile": { + "breakpointDescription": "Mobil brukes alltid fra 0px til neste layoutsett." + }, + "preview": { + "columns": "kolonner", + "empty": "Dette oppsettet er tomt", + "dynamicSection": "Dynamisk seksjon", + "editorWidthLabel": "{layoutName} · {width}px" + }, + "reset": { + "action": "Tilbakestill fra Base", + "confirm": { + "title": "Reset {layoutName}?", + "message": "Dette erstatter hver lagrede posisjon og størrelse i dette oppsettet med et nytt oppsett generert fra basen. Dette kan ikke angres." + } + }, + "edit": { + "action": "Rediger oppsett", + "saveAndEdit": "Lagre og rediger", + "save": "Lagre oppsett", + "cancel": { + "action": "Avbryt redigering av oppsett", + "title": "Forkast endringer i oppsettet?", + "message": "Ulagrede endringer i dette oppsettet blir forkastet." + } } }, "background": { @@ -4268,10 +6053,7 @@ "rename": { "label": "Endre navn på tavle", "description": "Endring av navn ødelegger noen koblinger til tavlen.", - "button": "Endre navn", - "modal": { - "title": "Omdøp tavle" - } + "button": "Endre navn" }, "visibility": { "label": "Endre synlighet på tavle", @@ -4295,9 +6077,7 @@ } }, "delete": { - "label": "Slett tavle", "description": "Når du sletter en tavle, er det ingen tilbakeføring. Ver sikker på at du ønsker å slette.", - "button": "Slett tavle", "confirm": { "title": "Slett tavle", "description": "Er du sikker på at du vil slette tavlen? Dette vil permanent slette tavlen og alt innholdet." @@ -4342,28 +6122,41 @@ }, "layout": { "field": { - "name": { - "label": "Navn" - }, "columnCount": { "label": "Antall kolonner" }, "breakpoint": { "label": "Stoppunkt", "description": "Oppsett vil bli brukt på alle skjermer som er større enn dette bruddpunktet til neste større bruddpunkt." + }, + "gutters": { + "label": "Faste sidefelt", + "description": "Reserver opptil tre dashbord-kolonner på begge sider. Det resterende lerretet svarer automatisk.", + "left": { + "label": "Left sidebar", + "description": "Hold dette området synlig mens dashbordet ruller.", + "thumbLabel": "Left sidebar width" + }, + "right": { + "label": "Høyre sidestolpe", + "description": "Hold dette området synlig mens dashbordet ruller.", + "thumbLabel": "Bredde på høyre sidestolpe" + }, + "width": { + "label": "Bredde i kolonner" + }, + "preview": { + "label": "Forhåndsvisning av dashbord" + } } } }, "management": { "metaTitle": "Administrasjon", - "title": { - "morning": "God morgen, {username}", - "afternoon": "God ettermiddag, {username}", - "evening": "God kveld, {username}" - }, "notFound": { "title": "Ikke funnet", - "text": "Fant ikke den forespurte ressursen" + "text": "Fant ikke den forespurte ressursen", + "backToHome": "Tilbake til ledelsen hjem" }, "error": { "title": "Denne siden kunne ikke lastes", @@ -4372,19 +6165,10 @@ }, "navbar": { "items": { - "workshop": "Workshop", "home": "Hjem", - "boards": "Tavler", - "apps": "Apper", - "integrations": "Integrasjoner", - "searchEngies": "Søkemotorer", - "medias": "Medier", "users": { - "label": "Brukere", "items": { - "manage": "Administrer", - "invites": "Invitasjoner", - "groups": "Grupper" + "manage": "Administrer" } }, "tools": { @@ -4392,10 +6176,7 @@ "items": { "docker": "Docker", "kubernetes": "Kubernetes", - "logs": "Logger", "api": "API", - "certificates": "Sertifikater", - "tasks": "Oppgaver", "backup": "Sikkerhetskopi" } }, @@ -4409,21 +6190,12 @@ "sourceCode": "Kildekode" } }, - "about": "Info" + "about": "Info", + "assistant": "Assistent" } }, "page": { "home": { - "statistic": { - "board": "Tavler", - "user": "Brukere", - "invite": "Invitasjoner", - "integration": "Integrasjoner", - "app": "Apper", - "group": "Grupper", - "searchEngine": "Søkemotorer", - "media": "Medier" - }, "statisticLabel": { "boards": "Tavler", "resources": "Ressurser", @@ -4461,13 +6233,8 @@ "tooltip": "Denne tavlen vil vises som din mobil hjemtavle" } }, - "duplicate": { - "label": "Dupliser tavle" - }, "delete": { - "label": "Slett permanent", "confirm": { - "title": "Slett tavle", "description": "Er du sikker på at du vil slette tavlen {name}?" } } @@ -4476,28 +6243,82 @@ "public": "Denne tavlen er offentlig", "private": "Denne tavlen er privat" }, - "noResults": { - "title": "Ingen tavler ennå" + "preview": { + "label": "Oppsett forhåndsvisning for {name}, med {count} elementer", + "unknownCreator": "Ukjent skaperen" }, - "modal": { - "createBoard": { - "field": { - "name": { - "label": "Navn" - } - } - } + "noResults": { + "title": "Ingen tavler ennå", + "description": "Opprett en tavle for å ordne apper og widgets på et sted." } }, "media": { "includeFromAllUsers": "Inkluder medier fra alle brukere" }, "user": { - "back": "Tilbake til brukere", "fieldsDisabledExternalProvider": "Enkelte felt er deaktivert fordi de er administrert av en ekstern autentiseringsleverandør.", "setting": { "general": { "title": "Generelt", + "header": { + "title": "Studio for toppteksten", + "badge": "Personlig", + "description": "Dra kontrollene hvor som helst på raden. Senter og høyre opphold festet mens kontroller skifter rundt dem.", + "device": { + "desktop": "Skrivebord", + "mobile": "Mobil" + }, + "zones": { + "left": "Venstre", + "center": "Midtstilt", + "right": "Høyre" + }, + "action": { + "hide": "Skjul toppteksten", + "show": "Vis topptekst", + "configure": "Flytt eller konfigurer {item}", + "remove": "Fjern {item}", + "dropIntoZone": "Flytt til {zone} seksjonen" + }, + "preview": { + "board": "Dashboard forhåndsvisning for {name}", + "empty": "Ingen dashbordoppsett tilgjengelig" + }, + "available": { + "title": "Tilgjengelige kontroller", + "description": "Adder en kontroll, og dra så hele knappen i posisjon ovenfor.", + "requiredAlways": "Denne kontrollen er påkrevd, men du kan flytte den hvor som helst på overskriften.", + "allAdded": "Alle innebygde kontroller finnes allerede i hodet.", + "add": "Legg til {item}", + "boardShortcut": "Snarvei for tavle", + "chooseBoard": "Velg en tavle" + }, + "configuration": { + "description": "Denne kontrollen forblir den samme størrelsen som den gjør i live header.", + "searchDisplay": { + "input": "Søk i bar", + "icon": "Kun ikon" + }, + "logoDisplay": { + "logo": "Bare logoen", + "logoAndText": "Logo + tekst" + } + }, + "items": { + "logo": "Logo", + "search": "Søk", + "home": "Hjem tavle", + "boardSwitcher": "Tavler", + "assistant": "Assistent", + "docker": "Docker", + "boardEdit": "Rediger tavle", + "boardSettings": "Innstillinger for tavle", + "settings": "Dine innstillinger", + "themeToggle": "Veksle tema", + "user": "Konto", + "boardUnavailable": "Styret er utilgjengelig" + } + }, "item": { "language": "Språk og region", "board": { @@ -4531,14 +6352,10 @@ }, "security": { "title": "Sikkerhet" - }, - "board": { - "title": "Tavler" } }, "list": { - "metaTitle": "Administrer brukere", - "title": "Brukere" + "metaTitle": "Administrer brukere" }, "edit": { "metaTitle": "Rediger bruker {username}" @@ -4592,9 +6409,6 @@ } }, "field": { - "id": { - "label": "ID" - }, "creator": { "label": "Skaper" }, @@ -4618,10 +6432,7 @@ }, "setting": { "title": "Innstillinger", - "alert": "Gruppeinnstillinger er prioritert etter rekkefølgen på gruppene i listen. Øverste innstillinger overskriver bunninnstillingene.", - "board": { - "title": "Tavler" - } + "alert": "Gruppeinnstillinger er prioritert etter rekkefølgen på gruppene i listen. Øverste innstillinger overskriver bunninnstillingene." }, "members": { "title": "Medlemmer", @@ -4629,10 +6440,7 @@ "notFound": "Ingen medlemmer funnet" }, "permissions": { - "title": "Rettigheter", - "form": { - "unsavedChanges": "Du har ulagrede endringer!" - } + "title": "Rettigheter" } } }, @@ -4641,17 +6449,15 @@ "notification": { "success": { "message": "Innstillinger lagret" - }, - "error": { - "message": "Lagring av innstillingene feilet" } }, "section": { + "analyticsDocumentation": "Se nøyaktig hvilke analyser datalarr samler inn", "analytics": { "title": "Statistikk", "general": { "title": "Send anonym brukerdata", - "text": "Homarr vil sende anonymiserte analyser ved bruk av den åpne programvaren Umami. Når dette er aktivert, samler vi inn: Homarr-versjon, databastype (PostgreSQL/SQLite), Docker/Kubernetes-status, aktiverte autentiseringsmetoder, og antallet av hver funksjon. Alle data er anonyme og aggregerte – ingen personlig informasjon, URL-er, navn eller identifiserbare data samles inn. Dette hjelper vårt open source-team med å forstå bruks‑mønstre og prioritere utvikling." + "text": "Homarr vil sende anonymiserte analyser ved bruk av den åpne programvaren Umami. Når dette er aktivert, samler vi inn: Homarr-versjon, databastype (MySQL/PostgreSQL/SQLite), Docker/Kubernetes-status, aktiverte autentiseringsmetoder, og antallet av hver funksjon. Alle data er anonyme og aggregerte – ingen personlig informasjon, URL-er, navn eller identifiserbare data samles inn. Dette hjelper vårt open source-team med å forstå bruks‑mønstre og prioritere utvikling." } }, "crawlingAndIndexing": { @@ -4675,7 +6481,6 @@ } }, "board": { - "title": "Tavler", "homeBoard": { "label": "Global hjemtavle", "mobileLabel": "Global mobiltavle", @@ -4694,7 +6499,6 @@ } }, "user": { - "title": "Brukere", "enableGravatar": { "label": "Aktiver Gravatar", "description": "Bruker avatarer fra Libravatar/Gravatar som reserve når ingen egendefinert avatar er angitt og en e-post er konfigurert" @@ -4710,12 +6514,86 @@ "appearance": { "title": "Utseende", "defaultColorScheme": { - "label": "Standard fargetema", + "label": "Standard fargetema" + } + }, + "branding": { + "title": "Utforming av instansmerking", + "groups": { + "identity": "Identitet", + "appearance": "Utseende", + "customCss": "Custom CSS", + "authentication": "Autentisering" + }, + "identity": { + "description": "Applikasjonslogoen er det større merket som benyttes inne i appen, på innloggingssidene, og for monterte apper. Nettleserikonet (favicon) er den lille firkanten som brukes i faner og bokmerker; når tom, er den tilbake til programlogoen." + }, + "appName": { + "label": "Navn på applikasjon" + }, + "greeting": { + "label": "Tilpasset hilsen" + }, + "logo": { + "label": "Applikasjons logo", + "placeholder": "/logo/logo.png" + }, + "favicon": { + "label": "Nettleserikon (favicon)", + "placeholder": "Benytter applikasjonslogo" + }, + "primaryColor": { + "label": "Primærfarge" + }, + "secondaryColor": { + "label": "Sekundær aksent" + }, + "lockPrimaryColor": { + "label": "Behold denne fargen på hver tavle", + "description": "Hindrer bordfarger fra å skifte ut aksenten." + }, + "signInBackground": { + "label": "Autentisering bakgrunn", + "placeholder": "https://example.com/background.jpg" + }, + "signInOverlay": { + "label": "Bakgrunnsoverlegg" + }, + "defaultRadius": { + "label": "Stil på hjørne", "options": { - "auto": "Auto", - "light": "Lys", - "dark": "Mørk" + "xs": "Tatt", + "sm": "Lilla", + "md": "Balansert", + "lg": "Avrundet", + "xl": "Myk" } + }, + "customCss": { + "label": "Global egendefinert CSS", + "description": "Ble brukt på alle sider. Egendefinert CSS kan overstyre den." + }, + "authVisibility": { + "description": "Velg hva som vises på hver autentiseringsside.", + "appName": "Navn på applikasjon", + "logo": "Applikasjons logo", + "greeting": "Hilsen" + }, + "summary": { + "title": "Nåværende branding", + "cornerStyle": "Stil på hjørne", + "palette": "Palette", + "backgroundConfigured": "Egendefinert bakgrunn · {overlay}% overlegg", + "backgroundDefault": "Standard bakgrunn", + "greetingConfigured": "Tilpasset hilsen", + "greetingDefault": "Standard hilsen", + "boardColorLocked": "Brettfarge låst", + "boardColorFlexible": "Styrefarger tillatt", + "appName": "Jobb navn", + "logo": "Logo", + "greeting": "Hilsen", + "on": "På", + "off": "Av" } }, "culture": { @@ -4723,12 +6601,177 @@ "defaultLocale": { "label": "Standardspråk" } + }, + "assistant": { + "loading": "Laster assistentkonfigurasjon", + "title": "Assistent", + "description": "Koble til et OpenAI-kompatibelt modell-endepunkt for instance-wide assistant.", + "security": { + "description": "API-nøkler og ekstra headerverdier er krypterte i Homarr databasen. De returneres aldri til nettlesere. Modellforespørsler sendes fra Homarr serveren direkte til det konfigurerte endepunktet." + }, + "overview": { + "connectionReady": "Tilkobling klar", + "unsavedChanges": "Ulagrede endringer", + "setupRequired": "Oppsett kreves", + "disabled": "Deaktivert", + "noModel": "Ingen modell valgt" + }, + "connection": { + "endpointTitle": "Leverandør og endepunkt", + "description": "Velg en forhåndsinnstilling eller koble en tjeneste som implementerer OpenAI chat sluttspill API.", + "save": "Lagre leverandørtilkobling" + }, + "credentials": { + "title": "Legitimasjon", + "description": "Legg til hemmeligheter dette endepunktets behov. Lagrede verdier forblir krypterte og kan ikke leses tilbake.", + "required": "Nøkkel kreves", + "optional": "Nøkkel er valgfritt", + "workshop": "Per-user GitHub påloggingsinformasjon" + }, + "provider": { + "title": "Leverandør", + "groups": { + "free": "Gratis med Homarr", + "hosted": "Tjenestede leverandører", + "local": "Lokale leverandører", + "custom": "Egendefinert" + }, + "options": { + "homarr": { + "description": "Et begrenset antall assistenter brukes gratis hver dag, betalt for av Homarr teamet. Logg inn med nettbutikken for å bruke tillatelsen." + }, + "openrouter": { + "description": "Arrangert modellruting med en stor verktøykabel modellkatalog." + }, + "openai": { + "description": "Behandlingen av OpenAI gjennom det offisielle API-endepunktet." + }, + "anthropic": { + "description": "Claude through Anthropic's OpenAI SDK kompatibilitetsendepunkt." + }, + "google-gemini": { + "description": "Gemini gjennom Googles OpenAI-kompatible API-endepunkt." + }, + "xai": { + "description": "Grok-modeller gjennom xAIs OpenAI-kompatible API." + }, + "groq": { + "description": "Rask hosted innstilling gjennom Groq's OpenAI-kompatible API." + }, + "mistral": { + "description": "Mistral modeller gjennom det offisielle APIet." + }, + "deepseek": { + "description": "DeepSeek modeller gjennom dens OpenAI-kompatible API." + }, + "together": { + "description": "Arrangert åpne modeller gjennom Together's OpenAI-kompatible API." + }, + "ollama": { + "description": "En lokal eller nettverk Ollama-server som bruker dens OpenAI-kompatible API." + }, + "lm-studio": { + "description": "En lokal LM Studio med OpenAI kompatibilitet aktivert." + }, + "llama-cpp": { + "description": "En lokal eller nettverk llama.cpp server med dens OpenAI-kompatible API." + }, + "custom": { + "label": "Egendefinert endepunkt", + "description": "Alle andre endepunkter som er kompatible med OpenAI chat-sammenligninger." + } + }, + "homarrAuth": { + "title": "Gratis daglig assistent bruker inkludert", + "description": "Ingen API-nøkkel er nødvendig. Homarr teamet dekker et begrenset antall assistenter for deg hver dag. Logg på med Fellesskapets Verksted for å oppbevare et skille mellom godtgjørelser." + } + }, + "baseUrl": { + "title": "API hovednettadresse", + "description": "Inkluder API prefix, vanligvis /v1. I containere refererer localhost til Homarr beholderen." + }, + "apiKey": { + "title": "API nøkkel", + "required": "Kreves av denne leverandøren. Verdien er kryptert og skrivebeskyttet.", + "optional": "Valgfritt for lokale endepunkter. La den være tom når tjenesten ikke krever en strålende autentisering.", + "placeholder": "Skriv inn en API-nøkkel", + "savedTitle": "Kryptert API-nøkkel lagret", + "savedDescription": "Homarr kan bruke denne nøkkelen, men den kan ikke vise eller gjenopprette sin verdi.", + "remove": "Fjern lagret API-nøkkel", + "removeFlow": { + "title": "Fjerne den lagrede API-nøkkelen?", + "description": "Denne leverandøren krever en API-nøkkel. Hvis du fjerner den kan det stoppe modellfunnet og assisterende svar til en annen nøkkel er lagret.", + "optionalDescription": "Endepunktet vil slutte å motta ytre autentisering etter at denne nøkkelen er fjernet. Bekreft at det godtar uautoriserte forespørsler eller bruker en annen lagret header.", + "cancel": "Behold lagret nøkkel", + "confirm": "Fjern API-nøkkel" + } + }, + "headers": { + "title": "Flere forespørselshodere", + "description": "Valgfri autentisering eller ruting overskrifter. Høydeverdier er kun kryptert og skrivebeskyttet.", + "add": "Legg til overskrift", + "name": "Navn på topptekst", + "value": "Header verdi", + "valuePlaceholder": "Hemmelig eller ruting verdi", + "remove": "Fjern topptekst", + "configured": "Ekstra krypterte overskrifter er konfigurert. Legge til overskrifter erstatter det komplette lagrede settet.", + "empty": "Ingen ekstra overskrifter lagres for denne leverandøren.", + "savedBadge": "Overskrifter lagret", + "pendingRemoval": "Venter på fjerning", + "clear": "Fjern lagrede overskrifter ved lagring", + "keep": "Behold lagrede overskrifter" + }, + "model": { + "title": "Modell", + "description": "Velg en oppdaget modell eller angi en eksakt endepunkt-modell-ID.", + "placeholder": "Modell ID", + "refresh": "Oppdater modeller", + "chooseModel": "Velg modellen som brukes til nye samtaler.", + "discoveryPath": "Modell oppdagelsessti", + "discoveryPathDescription": "Legg til API-base-URL. La stå tom for å deaktivere oppdagelse og bruk en manuell modell-ID.", + "manual": "Angi en modell-ID manuelt eller lagre tilkoblingen for å oppdage modeller.", + "manualFallback": "Funnet er utilgjengelig. Du kan fortsatt skrive inn en modell-ID manuelt.", + "saveConnectionFirst": "Lagre leverandørtilkoblingen før du velger en modell.", + "discovering": "Oppdaterer modeller tilgjengelig fra denne leverandøren…", + "discovered": "{count, plural, one {Avdekket # modell. Verktøystøtte avhenger av den valgte endepunktet og modellen.} other {Dekket # modeller. Støtte avhenger av det valgte endepunktet og modellen}}", + "discoveryFailed": "Modellfunn ikke ferdig", + "context": "{count} kontekstvindu", + "toolsConfirmed": "Verktøy annonsert", + "toolsUnknown": "Bekreft støtte for verktøy" + }, + "serverTools": { + "title": "Server verktøy", + "webSearch": { + "label": "Søk på nett", + "description": "Tillat modell å søke i live nett gjennom OpenRouter når en forespørsel trenger gjeldende informasjon. Søkebruk belastes separat av OpenRouter.", + "proxyDescription": "Send OpenRouters web-søke-serververktøy til dette endepunktet. Aktiver dette bare når de tilpassede endepunktene forover OpenRouter server-formatet, for eksempel en Homarr Router proxy.", + "limit": "Modellen bestemmer når man skal søke med en grense på 3 søk og 5 resultater per søk etter hver forespørsel." + } + }, + "enabled": { + "label": "Aktiver assistent", + "description": "Viser assistenten til alle påloggede brukere. Eksisterende Homarr tillatelser gjelder fortsatt for alle interne verktøysamtaler." + }, + "save": "Lagre assistent", + "notification": { + "connectionSaved": { + "title": "Tilkobling til leverandør lagret", + "message": "Endepunktet og kryptert innloggingsinformasjon er klare for valg av modell.", + "credentialsCleared": "Endepunktet ble endret, så tidligere innloggingsinformasjon ble slettet. Legg til innloggingsinformasjon for ny destinasjon hvis nødvendig." + }, + "saved": { + "title": "Assistentinnstillinger lagret", + "message": "De nye modellen og tilgjengelighetsinnstillingene er aktive." + }, + "error": { + "title": "Assistentinnstillinger kunne ikke lagres" + } + } } } }, "tool": { "tasks": { - "title": "Oppgaver", "status": { "idle": "Inaktiv", "running": "Kjører", @@ -4746,6 +6789,11 @@ "label": "Pinger" } }, + "action": { + "run": "Kjør {name} nå", + "enable": "Aktiver {name}", + "disable": "Deaktiver {name}" + }, "interval": { "seconds": "Hvert {interval, plural, =1 {sekund} other {# sekunder}}", "minutes": "Hvert {interval, plural, =1 {minutt} other {# minutter}}", @@ -4761,13 +6809,7 @@ } } }, - "settings": { - "title": "Oppgaveinnstillinger for {jobName}" - }, "field": { - "name": { - "label": "Navn" - }, "interval": { "label": "Planlagt intervall" }, @@ -4781,11 +6823,6 @@ "table": { "search": "Søk i {count} oppgaver..." }, - "action": { - "refresh": { - "label": "Oppdater" - } - }, "refresh": { "success": { "message": "Oppgaver ble oppdatert" @@ -4819,7 +6856,6 @@ } }, "api": { - "title": "API", "modal": { "createApiToken": { "title": "API token opprettet", @@ -4845,7 +6881,6 @@ }, "table": { "header": { - "id": "ID", "createdBy": "Opprettet av", "actions": "Handlinger" } @@ -4901,43 +6936,12 @@ "availableTools": { "title": "Tilgjengelige verktøy", "description": "{count} verktøy tilgjengelig. Utvid en kategori for å se enkelte verktøy og tilhørende beskrivelser.", - "columnType": "Type", - "columnName": "Verktøy", - "columnDescription": "Beskrivelse" - }, - "troubleshooting": { - "title": "Feilsøking", - "missingHeader": { - "title": "\"Mangler ApiKey header\"", - "description": "Klienten din sender ikke headeren {header}. Verifiser {section}-delen i MCP-konfigurasjonen din er riktig. Noen klienter krever omstart etter konfigurasjonsendringer." - }, - "invalidFormat": { - "title": "\"Ugyldig ApiKey format\"", - "description": "Forsikre deg om at du kopierte hele API-nøkkelen, ikke bare en del av den." - }, - "invalidKey": { - "title": "\"Ugyldig API-nøkkel\"", - "description": "Nøkkel-ID ble ikke funnet, eller tokenet er galt. API-nøkler kan bare ses én gang når den ble opprettet. Om du mistet det, slett den gamle nøkkelen og lag en ny." - }, - "connectionRefused": { - "title": "Tilkobling avvist / tidsavbrudd", - "description": "Sørg for at nettadressen er tilgjengelig fra din AI-klient. Hvis Homarr kjører bak en omvendt proxy eller i Docker, bruk den eksterne URLen (ikke {localhost}). Bekreft at porten er korrekt (forvalg: 7575 for Docker)." - }, - "toolsNotAppearing": { - "title": "Verktøy ikke gjengis", - "description": "Noen verktøy krever spesifikke integrasjoner som skal konfigureres (f.eks. Docker, Overseerr). Verktøylisten er avhengig av hva som er tilgjengelig i Homarr forekomsten." + "filteredDescription": "{count} matchende verktøy i utvidede kategorier.", + "search": "Søk i verktøy", + "noResults": { + "title": "Ingen verktøy samsvarer med dette søket", + "description": "Ingen MCP-verktøy samsvarer med \"{search}\". Prøv et navneområde, verktøynavn, eller beskrivelse." } - }, - "copy": "Kopier", - "oneClick": { - "title": "Installer i ett klikk", - "subtitle": "Benytt OAuth — autentisér i nettleseren din ved første bruk", - "vsCode": "Installer i VS-kode", - "cursor": "Installer i markøren", - "copyUrl": "Kopier MCP URL", - "copied": "Kopiert!", - "copyHint": "For ChatGPT, Claude kode eller enhver MCP-klient", - "manualConfig": "Manuell konfigurasjon" } } } @@ -4954,47 +6958,12 @@ "title": "Eksport av følsomme data", "warningTitle": "Denne eksporten inneholder hele databasen.", "warningBody": "Sikkerhetskopien omfatter alle brukere, integrasjonshemmeligheter (kryptert), API-nøkler, tavlekonfigurasjoner og appdata. Lagre den eksporterte filen sikkert og ikke del den.", - "typePrompt": "Skriv \"{phrase}\" for å fortsette", - "submit": "Eksporter database", - "cancel": "Avbryt" + "submit": "Eksporter database" } }, "import": { "title": "Gjenopprett database", - "description": "Last opp en tidligere eksportert sikkerhetskopi ZIP for å gjenopprette databasen. Dette vil erstatte hele databasen din. Hvis sikkerhetskopien ble opprettet med en annen krypteringsnøkkel, blir hemmeligheter gjenkryptert automatisk.", - "warning": "Gjenoppretting av en sikkerhetskopi erstatter den nåværende databasen helt og restart applikasjonen. Denne handlingen kan ikke angres.", - "dropzone": { - "title": "Slipp sikkerhetskopi ZIP her, eller klikk for å bla igjennom", - "description": "Kun .zip-filer fra en Homarr SQLite sikkerhetskopi er akseptert" - }, - "changeFile": "Endre fil", - "button": "Gjenopprett database", - "success": { - "title": "Restore Complete", - "message": "Database er gjenopprettet. Programmet starter på nytt..." - }, - "error": "Import feilet" - }, - "preview": { - "title": "Innhold i sikkerhetskopi", - "exported": "Eksportert {date}", - "loading": "Analyserer sikkerhetskopifil...", - "errorTitle": "Forhåndsvis feil", - "entity": "Enhet", - "count": "Antall", - "boards": "Tavler", - "entities": { - "board": "Tavler", - "user": "Brukere", - "app": "Apper", - "integration": "Integrasjoner", - "item": "Moduler", - "media": "Medier", - "search_engine": "Søkemotorer" - }, - "analyzeError": "Kunne ikke analysere sikkerhetskopifilen", - "invalidMissingMetadata": "Ugyldig sikkerhetskopi: manglende metadata.json", - "invalidMissingDb": "Ugyldig sikkerhetskopi: manglende db.sqlite" + "description": "Last opp en tidligere eksportert sikkerhetskopi ZIP for å gjenopprette databasen. Dette vil erstatte hele databasen din. Hvis sikkerhetskopien ble opprettet med en annen krypteringsnøkkel, blir hemmeligheter gjenkryptert automatisk." }, "restore": { "dropzone": { @@ -5004,29 +6973,20 @@ "analyzing": "Analyserer sikkerhetskopi...", "changeFile": "Endre fil", "continueToRestore": "Fortsett å gjenopprette", - "tryAgain": "Prøv igjen", "analysisError": "Analyse feil", "preview": { "title": "Innhold i sikkerhetskopi", "exported": "Eksportert {date}", "entity": "Enhet", "count": "Antall", - "boards": "Tavler", "entities": { - "board": "Tavler", - "user": "Brukere", - "app": "Apper", - "integration": "Integrasjoner", - "item": "Moduler", - "media": "Medier", - "search_engine": "Søkemotorer" + "item": "Moduler" }, "migrationsApplied": "{count} migrering benyttet", "migrationsAppliedPlural": "{count} migrasjoner brukt", "migrationsOlderVersion": "Denne sikkerhetskopien var fra en eldre Homarr versjon. {count} schema migrering ble brukt for å hente den oppdatert.", "migrationsOlderVersionPlural": "Denne sikkerhetskopien var fra en eldre Homarr versjon. {count} skjemamigrasjoner ble brukt for å hente den oppdatert.", "migrationsUpToDate": "Databaseskjema er oppdatert ({count} migrasjoner benyttet)", - "upToDate": "Opp til dato", "migrationsPending": "Avventer på {count}" }, "migration": { @@ -5037,21 +6997,21 @@ "title": "Destruktiv handling", "warningTitle": "Dette vil erstatte hele databasen permanent.", "warningBody": "Alle nåværende tavler, brukere, apper, integrasjoner, innstillinger og økter vil gå tapt. Denne handlingen kan ikke angres. Programmet vil starte på nytt etter gjenopprettingen.", - "typePrompt": "Skriv \"{phrase}\" for å fortsette", - "cancel": "Avbryt", "submit": "Gjenopprett database" }, "progress": { "title": "Gjenoppretter databasen...", - "extracting": "Trekker ut sikkerhetskopiarkiv", - "migrating": "Benytter databaseoverføringer", - "encrypting": "Rekrypterer integrasjon hemmeligheter", - "swapping": "Erstatter databasefil", - "restarting": "Restarter server" + "restarting": "Restarter server", + "relogin": "Gjenoppretter databasen ugyldiggjorte økten. Homarr sender deg å logge inn når serveren er klar." }, "complete": { "title": "Restore Complete", - "message": "Databasen ble gjenopprettet. Serveren starter på nytt — vennligst oppdater siden om noen få sekunder." + "message": "Databasen ble gjenopprettet. Serveren starter på nytt — vennligst oppdater siden om noen få sekunder.", + "button": "Logg inn nå" + }, + "timeout": { + "title": "Serveren kom ikke tilbake på nettet", + "message": "Gjenoppretting av databasen er ferdig, men Homarr ble ikke klar igjen. Prøv å sjekke forbindelsen eller oppdatere denne siden manuelt." }, "failed": { "title": "Gjenoppretting feilet" @@ -5059,6 +7019,9 @@ "invalidMissingMetadata": "Ugyldig sikkerhetskopi: manglende metadata.json", "invalidMissingDb": "Ugyldig sikkerhetskopi: manglende db.sqlite", "analyzeError": "Kunne ikke analysere sikkerhetskopiering" + }, + "confirm": { + "typePrompt": "Skriv \"{phrase}\" for å fortsette" } } }, @@ -5093,7 +7056,11 @@ "toggleBoardEdit": "Slå av/på redigeringsmodus for tavle", "toggleColorScheme": "Bytt lys/mørk modus", "saveNotebook": "Lagre notatbok (kun i notatbok-widget)", - "openSpotlight": "Åpne søk" + "openSpotlight": "Åpne søk", + "openSpotlightApps": "Åpne appsøk", + "openSpotlightAssistant": "Åpne assistent modus", + "openSpotlightPreferences": "Åpne preferanse-modus", + "openAssistant": "Åpne Assistent" }, "note": "Tips: Mod refererer til både Ctrl-tasten og ⌘ på macOS" } @@ -5103,6 +7070,63 @@ }, "docker": { "title": "Containere", + "reconciliation": { + "title": "Assistert oppsett av Docker", + "suggestions": "{count, plural, =0 {Ingen forslag} one {# forslag} other {# forslag}}", + "attention": "{count} bør håndteres", + "endpointUnavailable": "Noen tjenester kunne ikke sjekkes fordi disse endepunktene er utilgjengelige: {names}", + "empty": "Ingen synlige Docker-tjenester ble funnet.", + "emptyFilter": "Ingen tjenester samsvarer med denne visningen.", + "ambiguous": "Mer enn et eksisterende element kan stemme med denne tjenesten. Homarr vil ikke velge ett automatisk.", + "filter": { + "attention": "Trenger oppmerksomhet", + "represented": "Allerede konfigurert", + "all": "Alle" + }, + "state": { + "newRecognized": "Klar til å koble til", + "newApp": "Ny tjeneste", + "represented": "Allerede representert", + "linked": "Koblet", + "moved": "Adressen er endret" + }, + "url": { + "manual": "Legg inn en adresse manuelt" + }, + "health": { + "layer": { + "docker": "Docker", + "integrationConfiguration": "Integrasjon", + "authentication": "Autentisering", + "apiRequest": "API", + "appRepresentation": "App", + "widgetConfiguration": "Moduler", + "widgetQuery": "Widget spørring" + }, + "status": { + "available": "Tilgjengelig", + "configured": "Konfigurert", + "linked": "Koblet", + "missing": "Mangler", + "changed": "Endret", + "unused": "Ikke i bruk", + "notApplicable": "Ikke relevant", + "notObserved": "Ikke observert" + } + }, + "action": { + "review": "Se over", + "dismiss": "Avvis", + "restoreDismissed": "Gjenoppretting avvist ({count})", + "setupIntegration": "Sett opp integrering", + "reviewIntegration": "Gjennomgå integrering", + "viewRepresentation": "Vis oppsett" + }, + "loadError": { + "title": "Utvikleren til Docker kunne ikke lastes", + "message": "Docker tjenesteinformasjon er utilgjengelig. Prøv igjen uten å forlate denne siden." + } + }, "table": { "updated": "Oppdatert {when}", "refresh": { @@ -5115,9 +7139,6 @@ "totalMemory": "Total Mem: {memory}" }, "field": { - "name": { - "label": "Navn" - }, "state": { "label": "Status", "option": { @@ -5131,9 +7152,6 @@ } }, "stats": { - "cpu": { - "label": "CPU" - }, "memory": { "label": "Minne" } @@ -5196,8 +7214,11 @@ } }, "remove": { - "label": "Fjern", "confirm": "Klikk igjen for å fjerne permanent", + "confirmation": { + "title": "{count, plural, one {Fjern # container?} other {Fjern # beholdere?}}", + "message": "{count, plural, one {Dette fjerner permanent # container: {names}} other {Dette fjerner permanent # containere: {names}}}" + }, "notification": { "success": { "title": "Containere fjernet", @@ -5209,8 +7230,13 @@ } } }, + "result": { + "failure": { + "title": "Noen containerhandlinger mislyktes", + "message": "{total, plural, one {{failed} med # handling mislyktes: {names}} other {{failed} av # handlinger mislykket: ! {names}}}" + } + }, "refresh": { - "label": "Oppfrisk", "notification": { "success": { "title": "Containere oppfrisket", @@ -5241,18 +7267,33 @@ }, "error": { "internalServerError": "Klarte ikke hente Docker-containere", + "endpointUnavailable": "{count, plural, one {# Docker endepunkt er utilgjengelig: {names}} other {# Docker endpoints er ikke tilgjengelig: {names}!}}", "noColumns": "Velg minst én kolonne i widget-innstillingene" } }, "kubernetes": { + "context": { + "label": "Kubernetes kontekst", + "loadError": { + "title": "Kubernetes sammenhenger kunne ikke lastes", + "message": "Kontekstinformasjon er utilgjengelig. Prøv igjen uten å forlate denne siden." + }, + "status": { + "available": "Tilgjengelig", + "degraded": "Metrics unavailable", + "unavailable": "Unavailable" + }, + "unavailable": "Denne teksten Kubernetes kan ikke nås. Velg en annen kontekst, eller verifiser dens legitimasjon og endepunkt.", + "metricsUnavailable": "Denne sammenhengen kan nås, men måltall Server er ikke tilgjengelig. Inventar forblir tilgjengelig uten live CPU og minnebruk." + }, "cluster": { "title": "Klynge dashbord", "label": "Klynge", "providers": "Leverandør", "version": "Versjon", - "architecture": "Arkitektur", "capacity": { "title": "Kapasitet", + "metricsUnavailable": "Måltall Server er utilgjengelig. Inventar og reservert kapasitet er synlig, men live CPU og minnebruk kan ikke vises.", "resource": { "reserved": "Reservert", "used": "Brukt" @@ -5271,38 +7312,10 @@ } }, "nodes": { - "label": "Noder", "field": { - "name": { - "label": "Navn" - }, - "state": { - "label": "Status", - "option": { - "ready": "Klar", - "NotReady": "Ikke klar" - } - }, - "cpu": { - "label": "CPU" - }, - "memory": { - "label": "RAM" - }, - "pods": { - "label": "Pods" - }, - "operatingSystem": { - "label": "OS" - }, - "architecture": { - "label": "Arkitektur" - }, + "metricsUnavailable": "Unavailable", "kubernetesVersion": { "label": "Kubernetes versjon" - }, - "creationTimestamp": { - "label": "Opprettet" } }, "table": { @@ -5310,43 +7323,17 @@ } }, "namespaces": { - "label": "Navnerom", - "field": { - "name": { - "label": "Navn" - }, - "state": { - "label": "Status", - "option": { - "active": "Aktiv", - "terminating": "Avslutter" - } - }, - "creationTimestamp": { - "label": "Opprettet" - } - }, "table": { "search": "Søk i {count} navnerom" } }, "ingresses": { - "label": "Ingress", "field": { - "name": { - "label": "Navn" - }, - "namespace": { - "label": "Navnerom" - }, "className": { "label": "Klassenavn" }, "rulesAndPaths": { "label": "Regler & stier" - }, - "creationTimestamp": { - "label": "Opprettet" } }, "table": { @@ -5354,17 +7341,7 @@ } }, "services": { - "label": "Tjenester", "field": { - "name": { - "label": "Navn" - }, - "namespace": { - "label": "Navnerom" - }, - "type": { - "label": "Type" - }, "ports": { "label": "Porter" }, @@ -5373,9 +7350,6 @@ }, "clusterIP": { "label": "Klynge IP" - }, - "creationTimestamp": { - "label": "Opprettet" } }, "table": { @@ -5383,25 +7357,12 @@ } }, "pods": { - "label": "Pods", "field": { - "name": { - "label": "Navn" - }, - "namespace": { - "label": "Navnerom" - }, "image": { "label": "Image" }, "applicationType": { "label": "Applikasjonstype" - }, - "status": { - "label": "Status" - }, - "creationTimestamp": { - "label": "Opprettet" } }, "table": { @@ -5409,51 +7370,17 @@ } }, "secrets": { - "label": "Hemmeligheter", - "field": { - "name": { - "label": "Navn" - }, - "namespace": { - "label": "navnerom" - }, - "type": { - "label": "type" - }, - "creationTimestamp": { - "label": "Opprettet" - } - }, "table": { "search": "Søk i {count} hemmeligheter" } }, "configmaps": { - "label": "ConfigMaps", - "field": { - "name": { - "label": "Navn" - }, - "namespace": { - "label": "navnerom" - }, - "creationTimestamp": { - "label": "Opprettet" - } - }, "table": { "search": "Søk i {count} configMaps" } }, "volumes": { - "label": "Volumer", "field": { - "name": { - "label": "Navn" - }, - "namespace": { - "label": "Navnerom" - }, "accessModes": { "label": "Tilgang moduser" }, @@ -5468,12 +7395,6 @@ }, "volumeName": { "label": "Volum navn" - }, - "status": { - "label": "Status" - }, - "creationTimestamp": { - "label": "Opprettet" } }, "table": { @@ -5482,6 +7403,29 @@ }, "error": { "internalServerError": "Kan ikke hente data fra Kubernetes" + }, + "field": { + "name": { + "label": "Jobb navn" + }, + "namespace": { + "label": "Navnerom" + }, + "creationTimestamp": { + "label": "Opprettet" + }, + "state": { + "label": "Jobb status" + }, + "status": { + "label": "Status" + }, + "type": { + "label": "Nedlastings-klient type" + }, + "architecture": { + "label": "Arkitektur" + } } }, "permission": { @@ -5515,71 +7459,27 @@ }, "navigationStructure": { "manage": { - "workshop": { - "label": "Workshop" - }, "label": "Administrer", - "boards": { - "label": "Tavler" - }, - "integrations": { - "label": "Integrasjoner", + "custom-widgets": { "edit": { - "label": "Rediger" + "flow": { + "label": "Bevegelse" + } }, - "new": { - "label": "Ny" - } - }, - "search-engines": { - "label": "Søkemotorer", - "new": { - "label": "Ny" + "workshop": { + "label": "Verksted" }, - "edit": { - "label": "Rediger" - } - }, - "medias": { - "label": "Medier" - }, - "apps": { - "label": "Apper", - "new": { - "label": "Ny" - }, - "edit": { - "label": "Rediger" + "publish": { + "label": "Publiser til Verksted" } }, "users": { - "label": "Brukere", - "create": { - "label": "Opprett" - }, "general": "Generelt", - "security": "Sikkerhet", - "board": "Tavler", - "groups": { - "label": "Grupper" - }, - "invites": { - "label": "Invitasjoner" - } + "security": "Sikkerhet" }, "tools": { "label": "Verktøy", - "tasks": { - "label": "Oppgaver" - }, - "docker": { - "label": "Docker", - "logs": { - "label": "Logger" - } - }, "kubernetes": { - "label": "Kubernetes", "nodes": { "label": "Noder" }, @@ -5605,11 +7505,7 @@ "label": "Volumer" } }, - "logs": { - "label": "Logger" - }, "certificates": { - "label": "Sertifikater", "hostnames": { "label": "Vertsnavn" } @@ -5620,12 +7516,60 @@ }, "about": { "label": "Info" + }, + "assistant": { + "label": "Assistent" } } }, "search": { "placeholder": "Søk etter hva som helst", "nothingFound": "Ingenting funnet", + "modePicker": { + "search": { + "label": "Søk", + "placeholder": "Søk etter apper, tavler, sider, kommandoer og innstillinger" + }, + "apps": { + "label": "Apper", + "placeholder": "Søk etter apper, tavler og integrasjoner" + }, + "command": { + "label": "Kommandoer", + "placeholder": "Søk handlinger og kommandoer" + }, + "preferences": { + "label": "Innstillinger", + "placeholder": "Søk og endre innstillinger" + }, + "assistant": { + "label": "Assistent", + "placeholder": "Spør Assistenten" + }, + "external": { + "label": "Nett", + "placeholder": "Søk med en ekstern søkemotor" + }, + "media": { + "label": "Media", + "placeholder": "Søk etter en film eller vis", + "fallback": "Søk i media \"{query}\"" + }, + "userGroup": { + "label": "Folk", + "placeholder": "Søk blant brukere og grupper" + }, + "continueWith": "Fortsett med", + "dialogAriaLabel": "{mode} kommando-meny", + "navigationLabel": "Søke modus", + "modeAriaLabel": "{mode} modus", + "resultsAriaLabel": "{mode} resultater", + "footer": { + "navigate": "Navigate", + "open": "Åpne", + "close": "Lukk" + } + }, "error": { "fetch": "Det oppstod en feil under henting av data" }, @@ -5634,7 +7578,6 @@ "help": "Søk etter apper, integrasjon eller tavler", "group": { "app": { - "title": "Apper", "children": { "action": { "open": { @@ -5650,7 +7593,6 @@ } }, "board": { - "title": "Tavler", "children": { "action": { "open": { @@ -5670,9 +7612,6 @@ "title": "Velg en handling for tavlen" } } - }, - "integration": { - "title": "Integrasjoner" } } }, @@ -5701,9 +7640,6 @@ "newBoard": { "label": "Opprett en ny tavle" }, - "importBoard": { - "label": "Importer en tavle" - }, "newApp": { "label": "Opprett en ny app" }, @@ -5773,7 +7709,6 @@ } }, "defaultSearchEngineId": { - "label": "Standard søkemotor", "children": { "detail": { "title": "Velg standard søkemotor" @@ -5781,7 +7716,6 @@ } }, "openSearchInNewTab": { - "label": "Åpne søkeresultater i ny fane", "children": { "detail": { "title": "Åpne søkeresultater i ny fane" @@ -5789,7 +7723,6 @@ } }, "ddgBangs": { - "label": "Aktiver DuckDuckGo bangs", "children": { "detail": { "title": "Aktiver DuckDuckGo bangs" @@ -5804,6 +7737,13 @@ } } }, + "byteUnitSystem": { + "children": { + "detail": { + "title": "Velg dine datamengder" + } + } + }, "homeBoardId": { "label": "Hjemmelaget", "children": { @@ -5821,7 +7761,6 @@ } }, "pingIconsEnabled": { - "label": "Bruk ikoner for pinger", "children": { "detail": { "title": "Bruk ikoner for pinger" @@ -5829,7 +7768,6 @@ } }, "enableRightClickOnWidgets": { - "label": "Aktiver høyreklikk på widgets", "children": { "detail": { "title": "Aktiver høyreklikk på widgets" @@ -5857,6 +7795,7 @@ "description": "Begynn å skrive for å søke etter dine medieforespørsler", "disabled": { "noIntegration": "Legge til en Overseerr, Jellyseerr, eller Seerr integrasjon for å tillate mediesøk.", + "signInRequired": "Logg inn for å søke etter integrasjoner.", "scoped": "Denne widgeten har ingen tilgjengelig media forespørsel integrering." } } @@ -5873,7 +7812,6 @@ "help": "Bruk en ekstern søkemotor", "group": { "searchEngine": { - "title": "Søkemotorer", "tipDdgBangs": "Tips: Du kan også bruke DuckDuckGo-bangs her, f.eks. !something", "bang": { "searchWithQuery": "Søk etter \"{query}\" med {label}", @@ -5924,20 +7862,6 @@ "group": { "mode": { "title": "Moduser" - }, - "help": { - "title": "Hjelp", - "option": { - "documentation": { - "label": "Dokumentasjon" - }, - "submitIssue": { - "label": "Send inn en sak" - }, - "discord": { - "label": "Discord" - } - } } } }, @@ -5949,9 +7873,10 @@ "other": { "label": "Søk med en annen søkemotor" }, - "no-default": { - "label": "Ingen standard søkemotor", - "description": "Angi en standard søkemotor i innstillingene" + "no-engines": { + "label": "Ingen søkemotorer konfigurert", + "descriptionCreate": "Legg til en søkemotor for å søke fra kommandomenyen", + "descriptionUnavailable": "Be en administrator om å konfigurere en søkemotor" }, "search": { "label": "Søk etter \"{query}\" med {name}" @@ -6031,7 +7956,6 @@ "help": "Søk etter bruker og grupper", "group": { "user": { - "title": "Brukere", "children": { "action": { "detail": { @@ -6044,7 +7968,6 @@ } }, "group": { - "title": "Grupper", "children": { "action": { "detail": { @@ -6068,9 +7991,6 @@ "engine": { "search": "Finn en søkemotor", "field": { - "name": { - "label": "Navn" - }, "short": { "label": "Kort" }, @@ -6083,12 +8003,19 @@ }, "page": { "list": { - "title": "Søkemotorer", + "ariaLabel": "Konfigurerte søkemotorer", "noResults": { "title": "Det er ingen søkemotorer enda", - "action": "Opprett din første søkemotor" + "description": "Søkemotorer lar Spotlight sende en spørring til et nettsted eller en tilknyttet tjeneste.", + "action": "Opprett din første søkemotor", + "filteredTitle": "Ingen søkemotorer samsvarer med søket ditt", + "filteredDescription": "Ingen søkemotorer samsvarer med \"{search}\". Prøv et annet navn eller URL." }, - "interactive": "Interaktiv, bruker en integrasjon" + "interactive": "Interaktiv, bruker en integrasjon", + "type": { + "generic": "URL mal", + "fromIntegration": "Integrasjon" + } }, "create": { "title": "Ny søkemotor", @@ -6107,11 +8034,9 @@ "title": "Rediger søkemotor", "notification": { "success": { - "title": "Endringer fullført", "message": "Søkemotor lagret" }, "error": { - "title": "Kunne ikke fullføre endringer", "message": "Søkemotoren kunne ikke lagres" } }, @@ -6250,6 +8175,10 @@ } }, "log": { + "context": { + "widgetError": "Widgeten rapporterte en feil rundt denne gangen", + "expiredWidgetError": "Logger rundt denne widget-feilen beholdes ikke lenger" + }, "level": { "option": { "debug": "Feilsøk", @@ -6261,7 +8190,6 @@ }, "onboardingTour": { "learnMore": "Les dokumentasjonen", - "next": "Neste", "prev": "Tilbake", "done": "Ferdig", "skip": "Hopp over tur", @@ -6325,5 +8253,359 @@ "description": "Endre fargetemaet, språket, tavlen og preferansene dine. Du kan også hoppe til området herfra." } } + }, + "metadata": { + "description": "Et selvbetjent dashbord for *arr stack og hele hjemmelaget. Integrerer med mer enn 50 tjenester, sanntid widgets, ingen konfigurasjonsfiler.", + "dashboardTitle": "{appName} Dashbord" + }, + "assistant": { + "title": "Assistent", + "open": "Åpne Assistent", + "close": "Lukk assistenten", + "minimize": "Minimer assistent", + "spotlight": "Spør Assistenten", + "spotlightDescription": "Skriv inn og send en ledetekst uten å forlate kommandomenyen.", + "spotlightPrompt": { + "title": "Spør Assistenten", + "description": "Skriv inn en ledetekst ovenfor. Skriv inn sender den i bakgrunnen.", + "send": "Send ledetekst", + "empty": "Skriv inn en ledetekst ovenfor" + }, + "unavailable": { + "checking": "Kontrollerer om hjelperen er tilgjengelig…", + "error": "assistentens tilgjengelighet kan ikke kontrolleres. Prøv igjen.", + "notConfigured": "En administrator må konfigurere og aktivere assistenten først.", + "signIn": "Logg på for å bruke Assistant." + }, + "newConversation": "Ny samtale", + "conversations": "Samtaler", + "conversationActions": "Samtale handlinger", + "searchConversations": "Søk i samtaler", + "noMatchingConversations": "Ingen matchende samtaler", + "moreActions": "Flere responshandlinger", + "renameConversation": { + "action": "Omdøp", + "label": "Navn på samtale", + "save": "Lagre navn", + "failedTitle": "Samtalen kunne ikke gis nytt navn", + "failedDescription": "Homarr kunne ikke endre navnet på denne samtalen. Prøv igjen." + }, + "deleteConversation": { + "title": "Slett samtale?", + "description": "“{title}” og meldingene vil bli slettet permanent.", + "failedTitle": "Samtalen kan ikke slettes", + "failedDescription": "Homarr kunne ikke slette denne samtalen. Prøv igjen." + }, + "closeHistory": "Lukk samtalelogg", + "openHistory": "Åpne samtalelogg", + "emptyTitle": "Hva kan jeg hjelpe med?", + "emptyDescription": "Spør om oppstarten av Homarr, inspiser live-instansdata, eller godkjenne handlinger når du vil at jeg skal gjøre en endring.", + "suggestions": { + "health": { + "label": "Sjekk tjenestens helsetilstand", + "prompt": "Sjekk mine integrasjoner og oppsummere noe som bør følges opp." + }, + "explore": { + "label": "Utforsk min Homarr", + "prompt": "Vis meg hva jeg kan se og administrere i denne Homarr instansen." + }, + "media": { + "label": "Finn media å be om", + "prompt": "Hjelp meg å finne en film eller en serie som kan forespørre." + }, + "style": { + "label": "Forbedre et dashbord", + "prompt": "Hjelp meg med å forbedre et tavleutseende eller en tilpasset CSS. Vis meg tavlene først, og beveg deretter mine nåværende innstillinger mens vi gjør endringen." + }, + "designWidget": { + "label": "Design en widget", + "prompt": "Opprett og installer en tilpasset widget for " + } + }, + "composerPlaceholder": "Spør Assistent…", + "runtime": { + "model": "Modell", + "searchModels": "Søk modeller", + "noModels": "Ingen modeller tilgjengelig", + "otherModels": "Andre modeller", + "imageInput": "Godtar bildeinndata", + "thinking": "Tenker modus", + "reasoning": { + "auto": "Auto", + "none": "Av", + "minimal": "Minimalt", + "low": "Lav", + "medium": "Medium", + "high": "Høy" + } + }, + "providerQuota": { + "title": "Homarr leverandør", + "communityWorkshop": "Fellesskapsverks verksted", + "dailyAllowance": "Daglig anmodning om godtgjørelse", + "remainingLabel": "{remaining} av {limit} Homarr leverandørs forespørsler gjenstår", + "loading": "Laster inn tillegg til Homarr", + "signInRequired": "Workshop-innlogging kreves for Homarr leverandøren", + "signInDescription": "Logg på med GitHub gjennom nettbutikken for å motta din egen daglige kvote.", + "exhaustedDescription": "Din Homarr leverandør godtgjørelse er brukt til i dag. Den tilbakestilles ved midnatt UTC.", + "unavailableDescription": "Logg inn på Verkstedet eller vent på Homarr leverandøren din for å tilbakestille.", + "signIn": "Logg på med GitHub", + "signInError": "GitHub innlogging mislyktes. Prøv igjen om et øyeblikk.", + "loadError": "Kunne ikke laste inn tillatt Homarr leverandør.", + "reset": "Tilbakestilles {relative} kl. ", + "toolCalls": "Hver forespørsel om modell og fullført verktøysamtale bruker en forespørsel.", + "retry": "Oppdater godtgjørelse", + "level": { + "ok": "OK", + "warning": "Advarsel", + "bad": "Lav", + "dead": "Brukt" + } + }, + "stop": "Stopp respons", + "send": "Send melding", + "copy": "Kopier svar", + "copyMessage": "Kopier melding", + "editMessage": "Rediger melding", + "updateMessage": "Oppdater melding", + "regenerate": "Regenerer respons", + "helpful": "Nyttig", + "notHelpful": "Ikke nyttig", + "readAloud": "Les svaret høyt", + "stopReading": "Slutt å lese respons", + "feedbackError": "Tilbakemeldingen din kunne ikke lagres. Prøv igjen.", + "exportMarkdown": "Eksporter som Markdown", + "exportConversation": { + "action": "Eksporter samtale som Markdown", + "failedTitle": "Samtalen kunne ikke eksporteres", + "failedDescription": "Homarr kunne ikke laste denne samtalen. Prøv igjen." + }, + "reasoning": "Tenker", + "previousResponse": "Tidligere svar", + "nextResponse": "Neste svar", + "removeAttachment": "Fjern vedlegg", + "downloadFile": "Last ned {name}", + "attachedImage": "Vedlagt bilde", + "externalImageBlocked": "Eksternt bilde blokkert for personvern", + "image": { + "loading": "Laster bilde", + "failed": "Dette bildet kunne ikke lastes inn.", + "retry": "Prøv bilde igjen" + }, + "quoteSelection": "Sitat", + "dismissQuote": "Fjern tilbud", + "attachments": { + "add": "Legg ved et bilde eller et dokument", + "errorTitle": "Vedlegg kunne ikke legges til", + "imageUnsupported": "Den valgte modellen støtter ikke inndata for bildet." + }, + "mentions": { + "menu": "Legg til Homarr kontekst", + "context": "Kontekst", + "app": "Apper", + "integration": "Integrasjoner", + "board": "Tavler", + "widget": "Moduler", + "tools": "Tilgjengelige verktøy" + }, + "markdown": { + "diagram": "Figur", + "renderingDiagram": "Gjengi diagram…", + "diagramUnavailable": "Dette diagrammet kunne ikke vises." + }, + "commands": { + "menu": "Assistent kommandoer", + "health": "Klargjør en tjeneste-helse sjekk", + "explore": "Forbered en oversikt over denne Homarr forekomsten", + "media": "Forbered et mediesøk", + "style": "Forbered et tavleutseende eller en egendefinert CSS endring", + "designWidget": "Forbered en one-prompt egendefinert Widget versjon" + }, + "usage": { + "tokens": "Nøkkel", + "contextWindow": "Kontekstvindu", + "requestDetails": "Be om informasjon", + "used": "Siste trinn", + "remaining": "Gjenstår", + "capacity": "Kapasitet", + "input": "Input", + "output": "Utgang", + "cached": "Bufret inndata", + "cacheWrite": "Skriv mellomlager", + "reasoning": "Begrunnelse", + "inputShort": "i", + "outputShort": "ute", + "cachedShort": "bufret", + "reasoningShort": "begrunnelse", + "firstOutput": "Første utgang", + "homarrTiming": "Homarr observert", + "endToEnd": "Slutt til slutt", + "observedThroughput": "Observert gjennomstrømning", + "providerTiming": "Leverandør rapportert", + "loadingProviderDetails": "Laster inn generasjonsdetaljer…", + "providerDetailsPending": "OpenRouter behandler fortsatt noen generasjons detaljer. Prøv på nytt.", + "providerLatency": "Provider latens", + "generationTime": "Generering tid", + "moderationLatency": "Moderering", + "providerThroughput": "Provider belastet", + "fallbacks": "Tilbakefall", + "fallbackLatency": "Tilbakefallsforsinkelse", + "cacheDiscount": "Cache rabatt", + "normalizedTokens": "OpenRouter normalisert inndata / utgang", + "byok": "KJØP", + "cost": "Kostnad", + "reported": "Rapportert av leverandør", + "estimated": "Estimert ut fra modellprising", + "upstreamCost": "Oppstrøms innstilling", + "webSearches": "Web søk", + "finishReason": "Fullfør årsak", + "notReported": "Ikke rapportert", + "agentSteps": "Agent trinn", + "step": "Trinn {number}", + "generation": "Generering" + }, + "toolInput": "Input", + "toolOutput": "Utgang", + "toolActivity": { + "iconSearch": "Leter etter “{query}” ikoner", + "iconBrowse": "Bla gjennom tilgjengelige ikoner" + }, + "toolNavigation": { + "openPreview": "Åpen forhåndsvisning", + "openWidget": "Åpne widget" + }, + "webSearch": { + "title": "Søk på nett", + "completed": "OpenRouter søkte i live web for dette svaret.", + "searches": "{count, plural, one {# søk} other {# søk}}", + "sources": "{count, plural, one {# kilde} other {# kilder}}" + }, + "responseError": { + "title": "Hjelperen kan ikke bli ferdig", + "description": "Prøv igjen. Hvis problemet fortsetter, be en administrator om å verifisere det konfigurerte modellendepunktet." + }, + "toolPreparationError": { + "title": "Denne forespørselen kunne ikke forberedes", + "description": "Modellen stoppet før den ga fullstendige detaljer. Prøv på nytt eller beskriv forespørselen igjen. Ingen endringer." + }, + "busy": { + "title": "Hjelperen er allerede i gang", + "description": "Vent på det aktuelle svaret eller åpne det for å stoppe kjøringen." + }, + "pendingAction": { + "answerTitle": "Svar kreves", + "answerFallback": "Velg et svar for å fortsette", + "formTitle": "Les detaljer om appen", + "boardFormTitle": "Se gjennom tavlendringer", + "review": "Se over", + "sendBlocked": "Løs den ventende forespørselen før du sender" + }, + "activity": { + "thinking": "Assistent thinking", + "working": "Arbeid med din ledetekst", + "ready": "Svar klar", + "completed": "Åpne svaret", + "approval": "Godkjenning nødvendig", + "failed": "Assistent trenger oppmerksomhet", + "expand": "Åpne assistenten respons", + "dismiss": "Avvis assistentaktivitet" + }, + "scrollToLatest": "Rull til siste", + "refresh": { + "action": "Oppdater gjeldende visning", + "working": "Oppdaterer gjeldende visning", + "completeTitle": "Vis oppdatert", + "completeDescription": "Synlige Homarr data er lastet på nytt.", + "failedTitle": "Visningen kunne ikke oppdateres", + "failedDescription": "Endringen kan fortsatt lagres. Prøv oppdateringshandlingen igjen." + }, + "askUser": { + "preparing": "Forbereder spørsmål", + "answered": "Ditt svar", + "other": "Andre", + "otherLabel": "Ditt svar", + "otherPlaceholder": "Skriv et annet svar på…", + "submit": "Send svar", + "cancelOther": "Avbryt annet svar", + "optionKind": { + "affirmative": "Bekreft", + "negative": "Avslå", + "alternative": "Alternativ", + "custom": "Egendefinert" + } + }, + "configureApp": { + "title": "Les detaljer om appen", + "description": "Velg et lokalt ikon og juster noe før assistent forespørselen godkjennelse for etablering.", + "preparing": "Forbereder appdetaljer", + "continue": "Bruk disse detaljene", + "ready": "Appdetaljer klar", + "automaticContinue": "Bruker disse appdetaljene automatisk" + }, + "configureBoardSettings": { + "title": "Se gjennom tavlendringer", + "loading": "Laster inn gjeldende tavleinnstillinger", + "loadErrorTitle": "Styrets innstillinger kunne ikke lastes", + "loadErrorDescription": "Tavlen finnes ikke lenger, eller du har ikke rettigheter til å endre den.", + "proposedCount": "Assistent foreslått {count} felt", + "changeCount": "{count} endringer klar", + "ready": "Styrets endringer klar", + "cancelled": "Gjeldende tavleinnstillinger ble beholdt", + "noChanges": "Ingen innstillinger vil endre", + "keepCurrent": "Behold nåværende innstillinger", + "continue": "Fortsett til godkjenning", + "automaticContinue": "Aksept foreslåtte styreendring automatisk", + "resetAll": "Tilbakestill alle endringer", + "tabs": { + "css": "Custom CSS", + "appearance": "Utseende", + "background": "Bakgrunn", + "general": "Generelt" + }, + "cssDescription": "Rediger det komplette stilarket. Eksisterende regler beholdes med mindre de er fjernet her.", + "cssCharacters": "{count} av 16384 tegn", + "copyCss": "Copy CSS", + "copied": "Kopiert", + "restoreCss": "Restore current CSS", + "remoteCssTitle": "Denne CSS laster en ekstern ressurs", + "remoteCssDescription": "Importerte stilark og eksterne nettadresser kontakter en annen server når tavlen lastes inn. Gjennomgå dem før du fortsetter." + }, + "configureWidget": { + "title": "Gå igjennom widget", + "preparing": "Forbereder widgetinnstillinger", + "review": "Se gjennom widget og integrasjoner", + "ready": "Widget-konfigurasjon er klar", + "cancelled": "Widget ble ikke lagt til", + "automaticContinue": "Aksepterer den foreslåtte widgetkonfigurasjonen automatisk", + "definitionLoadErrorTitle": "Widget innstillinger kunne ikke lastes", + "definitionLoadErrorDescription": "Homarr kunne ikke laste innstillingene til denne widgeten. Prøv igjen.", + "loadErrorTitle": "Integrasjoner kunne ikke lastes", + "loadErrorDescription": "Homarr kunne ikke laste inn integrasjonen for denne widgeten.", + "noIntegrationTitle": "En kompatibel integrasjon er påkrevd", + "noIntegrationDescription": "Konfigurer en integrasjon støttet av denne widgeten før du legger den til på dashbordet.", + "connectIntegration": "Koble til tjeneste", + "manageIntegrations": "Administrer integrasjoner", + "skip": "Ikke legg til", + "errorTitle": "Widgetinnstillinger kunne ikke forberedes", + "errorDescription": "Modellen har ikke lagt til en komplett widget konfigurasjon. Ingen widget ble lagt til." + }, + "approvalRequired": "Godkjenning kreves", + "complete": "Complete", + "denied": "Avvist", + "failed": "Feilet", + "working": "Arbeider", + "approvalDescription": "Gjennomgå denne endringen før den kjører.", + "approveAndRun": "Godkjenn og kjør", + "deny": "Avslå", + "autoApproval": { + "label": "Automatiske godkjenninger", + "composerLabel": "Godkjenn for meg", + "title": "Automatiske godkjenninger", + "description": "Forberede skjema automatisk og godkjenn beskyttede endringer for denne samtalen. Spørsmål venter fortsatt på svar, og Homarr tillatelser gjelder fremdeles. Dette blir slått av når du bytter samtaler.", + "enable": "Aktiver for denne samtalen", + "disable": "Slå av automatiske godkjenninger", + "enabled": "Automatiske godkjenninger er aktivert", + "approving": "Godkjenner automatisk" + } } } diff --git a/packages/translation/src/lang/pl.json b/packages/translation/src/lang/pl.json index 0f2284d0a..fac548df1 100644 --- a/packages/translation/src/lang/pl.json +++ b/packages/translation/src/lang/pl.json @@ -1,156 +1,246 @@ { "init": { - "step": { - "start": { - "title": "Witaj w Homarr", - "subtitle": "Zacznijmy od konfiguracji Twojej instancji Homarr.", - "description": "Aby rozpocząć, wybierz jak chcesz skonfigurować instancję Homarr.", - "action": { - "scratch": "Zacznij od zera", - "importOldmarr": "Importuj z Homarr przed 1.0", - "restoreSqlite": "Przywróć z kopii zapasowej SQLite", - "restoreSqliteDescription": "Prześlij pełną kopię zapasową bazy danych SQLite z poprzedniej instancji Homarr. Spowoduje to przywrócenie wszystkich tablic, użytkowników, aplikacji, integracji i ustawień.", - "backToOptions": "← Wróć do opcji konfiguracji" + "studio": { + "navigationLabel": "Sekcje wdrażania", + "back": "Wstecz", + "buildBoard": "Zbuduj moją tablicę", + "common": { + "unknownError": "Coś poszło nie tak. Twoje wybory są nadal tutaj; spróbuj ponownie." + }, + "claim": { + "checking": "Zabezpieczenie tej sesji wdrożenia…", + "checkingTitle": "Przygotowanie bezpiecznej konfiguracji", + "lockedTitle": "Konfiguracja jest otwarta w innej przeglądarce", + "lockedDescription": "Kontynuuj tam lub czekaj aż jego bezpieczna sesja zakończy się przed ponowną próbą.", + "signInTitle": "Wymagane logowanie administratora", + "signInDescription": "Administrator już istnieje. Zaloguj się, aby wznowić konfigurację bez ujawniania danych logowania lub dostępu do usługi.", + "signIn": "Zaloguj się i wznawiaj", + "errorTitle": "Konfiguracja nie może być zabezpieczona", + "errorDescription": "Odśwież stronę, aby ponowić próbę bezpiecznej sesji pierwszego uruchomienia." + }, + "navigation": { + "essentials": "Podstawowe", + "discover": "Odkryj", + "connect": "Połącz", + "board": "Tablica", + "extend": "Rozszerz", + "review": "Przeglądaj" + }, + "welcome": { + "title": "Witaj w domu.", + "description": "Witamy w Homarr v{version}. Poprowadzimy Cię przez zasadnicze elementy i pomożemy Ci zbudować swoją pierwszą tablicę.", + "start": "Zacznij", + "restore": "Przywróć kopię zapasową", + "restoreTitle": "Przywróć z kopii zapasowej", + "restoreDescription": "Pełna kopia zapasowa SQLite przywraca tablice, ludzi, aplikacje, integracje i ustawienia. Homarr sprawdza ją przed zastąpieniem wszystkiego.", + "errorTitle": "Nie można uruchomić konfiguracji", + "errorDescription": "Twoje ustawienia są nadal tutaj. Spróbuj ponownie lub odśwież stronę, jeśli to będzie kontynuowane." + }, + "account": { + "title": "Utwórz administratora", + "description": "Określ dane uwierzytelniające dla administratora", + "username": "Nazwa użytkownika administratora", + "passwordHint": "Wymagane są tylko 8-znakowe minimum. Inne kontrole siły hasła to sugestie.", + "create": "Utwórz administratora", + "errorTitle": "Administrator nie mógł zostać utworzony", + "recoveryTitle": "Utworzono konto administratora", + "recoveryDescription": "Automatyczne logowanie nie zostało zakończone. Zaloguj się za pomocą danych administratora, które właśnie utworzyłeś, aby kontynuować konfigurację.", + "recoveryAction": "Zaloguj się i kontynuuj", + "unknownError": "Nie można utworzyć administratora." + }, + "externalGroup": { + "title": "Podłącz swoją grupę administratora", + "description": "Użyj dokładnej nazwy grupy wysyłanej przez LDAP lub OIDC. Członkowie tej grupy otrzymują dostęp administratora.", + "name": "Zewnętrzna grupa administratora", + "nameDescription": "To jest wrażliwe na wielkość liter i musi być zgodne z Twoim dostawcą tożsamości.", + "continue": "Zapisz grupę i kontynuuj", + "errorTitle": "Nie można zapisać grupy", + "unknownError": "Nie można zapisać grupy administratora." + }, + "essentials": { + "title": "Zacznij od znanych ustawień domyślnych", + "description": "Ustaw język i wygląd każdego widzącego na początku, a następnie nadaj Homarr wzór adresu używany przez Twoje usługi.", + "language": "Język domyślny", + "theme": "Domyślny motyw", + "themeAuto": "System", + "themeLight": "Jasny", + "themeDark": "Ciemny", + "serverOriginHelp": "Homarr używa tego adresu do wstępnego wypełnienia wykrytych adresów URL usługi. Nadal możesz edytować każdą usługę indywidualnie.", + "serverDescription": "To jest skrót, a nie ograniczenie. Każda wykryta usługa pozostaje edytowalna.", + "serverOrigin": "Domena, IP lub ścieżka odwrotnego proxy", + "serverOriginDescription": "Przykłady: home.lan, 192.168.1.10 lub https://home.example.com/services. Wybierz sposób dołączenia każdej usługi poniżej.", + "analytics": "Udostępnij anonimową analizę produktów", + "analyticsDescription": "Pomaga Homarr poprawić niezawodność funkcji. Żadne dane uwierzytelniające usługi ani zawartość panelu ustawień nie są wysyłane." + }, + "discover": { + "title": "Zobacz, do czego ta instalacja może dotrzeć", + "description": "Homarr sprawdza możliwości w miejscu. Brakujące gniazdo Docker lub kontekst Kubernetes nigdy nie blokuje ręcznej konfiguracji.", + "database": "Baza danych", + "docker": "Docker i kompatybilne gniazda", + "kubernetes": "Kubernetes", + "assistantWorkshop": "Asystent i warsztaty", + "found": "Znaleziono integracje {integrations} i dodatkowe aplikacje {apps}", + "retryKubernetes": "Sprawdź ponownie Kubernetes", + "retryWorkshop": "Sprawdź ponownie warsztat", + "unknownVersion": "nieznana wersja", + "kubernetesAvailable": "Połączono z Kubernetes {version}", + "kubernetesDisabled": "Nie włączony; kontynuuj serwisy Docker lub ręczne", + "kubernetesUnavailable": "Kubernetes jest włączony, ale nie można go osiągnąć z tego procesu Homarr", + "workshopAvailable": "Warsztaty społeczności i hostowane usługi asystenta są dostępne", + "workshopUnavailable": "Lokalni i niestandardowi dostawcy asystentów są nadal dostępni", + "partialTitle": "Nie można zeskanować niektórych źródeł", + "partialDescription": "Wyniki z osiągalnych hostów są zachowane. Sprawdź uprawnienia gniazda lub dodaj usługi ręcznie w następnej sekcji.", + "status": { + "checking": "Sprawdzanie dostępności…", + "available": "Dostępne", + "partial": "Częściowo dostępne", + "empty": "Osiągalne, brak pasujących usług uruchomionych", + "disabled": "Wyłączone przez konfigurację serwera", + "unavailable": "Niedostępne z tego procesu Homarr" } }, - "import": { - "title": "Importuj dane", - "subtitle": "Możesz zaimportować dane z istniejącej instancji Homarra.", - "dropzone": { - "title": "Przeciągnij tutaj plik zip lub kliknij, aby przeglądać", - "description": "Przesłany zip zostanie przetworzony i będziesz mógł wybrać co chcesz zaimportować" + "connect": { + "title": "Połącz co sprawia, że tablica jest przydatna", + "description": "Wybierz kilka usług jednocześnie. Etykiety dokujące przyjmują priorytet, obrazki pasujące do luk wypełniają luki, a każdy adres URL i dane logowania pozostają sprawdzalne.", + "discoveredIntegrations": "Wykryte instancje integracji ({count})", + "detectedIntegrationLabel": "Importuj {name}, wykryto jako {kind}", + "detectedAppLabel": "Importuj aplikację {name}", + "otherIntegrations": "Dodaj kolejną integrację", + "configureIntegrations": "Konfiguruj integracje", + "discoveredApps": "Wykryte aplikacje ({count})", + "appAddressRequired": "Dodaj adres dla {name}lub usuń go z wyboru.", + "empty": "Nie wybrano integracji. Homarr nadal stworzy użyteczną tablicę startową z ogólnymi widżetami.", + "dockerSource": "Docker", + "manualSource": "Ręcznie", + "url": "Adres URL usługi", + "noCredentials": "Brak danych logowania", + "noCredentialsDescription": "Ta integracja nie wymaga poświadczeń.", + "credentialMethod": "Metoda uwierzytelniania", + "getApiKey": "Otwórz ustawienia klucza API dla tej usługi", + "openGuide": "Otwórz poradnik konfiguracji Homarra dla tej usługi", + "testConnection": "Test połączenia", + "testSuccess": "Połączenie działa", + "testSuccessDescription": "Homarr połączony z bieżącym adresem i danymi logowania.", + "testError": "Nie udało się połączyć", + "testErrorDescription": "Sprawdź adres serwisu i dane uwierzytelniające, a następnie spróbuj ponownie.", + "needsConfiguration": "Wymagana konfiguracja", + "tested": "Połączenie przetestowane", + "testFailed": "Test połączenia nie powiódł się", + "incompleteConfirmation": "Nieukończone integracje zostaną pominięte. Kontynuować bez nich?" + }, + "board": { + "title": "Kształtuj płytkę przed jej budową", + "description": "Homarr tworzy chronione układy mobilne i bazowe, a następnie umieszcza aplikacje i kompatybilne widżety z usług, które wybrałeś.", + "target": "Tablica, aby skonfigurować", + "targetDescription": "Wybierz dokładnie istniejący dział, który ta konfiguracja powinna zaktualizować.", + "targetPlaceholder": "Wybierz tablicę", + "targetRequired": "Wybierz dział, aby skonfigurować przed kontynuowaniem.", + "name": "Nazwa tablicy", + "nameDescription": "Używane tylko w adresie URL; litery, cyfry, myślniki i podkreślenia.", + "nameRequired": "Przed kontynuowaniem wprowadź nazwę działu.", + "primaryColor": "Kolor podstawowy", + "secondaryColor": "Kolor akcentowy", + "resetColors": "Resetuj kolory", + "radius": "Promień narożnika widżetu", + "radiusOptions": { + "xs": "Mocno", + "sm": "Subtelny", + "md": "Zrównoważony", + "lg": "Zaokrąglone", + "xl": "Miękki" }, - "fileInfo": { - "action": { - "change": "Zmień plik" - } + "columns": "Kolumny tablicy", + "columnsDescription": "Kolumny definiują siatkę poziomą używaną do rozmiaru i pozycji pozycji. 12 jest dla większości ludzi.", + "columnCount": "{count, plural, one {# kolumna} other {# kolumny}}", + "leftSidebar": "Left sidebar", + "rightSidebar": "Prawy pasek boczny", + "previewLabel": "Podgląd na żywo pierwszego układu tablicy" + }, + "extend": { + "title": "Zaawansowane funkcje", + "tabsLabel": "Asystent, warsztaty i konfiguracja MCP", + "assistant": "Asystent", + "workshop": "Warsztat", + "assistantSetup": { + "loginTitle": "Wymagane logowanie administratora", + "loginDescription": "Klucze dostawcy i dostęp do modelu są uprzywilejowane. Zakończ konfigurację, zaloguj się, a Homarr otworzy konfigurację Asystenta.", + "loginAction": "Zaloguj się, aby skonfigurować Asystenta" }, - "importSettings": { - "title": "Importuj ustawienia", - "description": "Skonfiguruj zachowanie importu" + "workshopSetup": { + "title": "Warsztat Homarr", + "description": "Przeglądaj niestandardowe widżety, sprawdź wymagane możliwości, zainstaluj je i opublikuj własną pracę bez kopiowania kodu pomiędzy serwerami.", + "available": "Dostępne", + "checking": "Sprawdzanie…", + "unavailable": "Unavailable", + "discoverTitle": "Odkryj", + "discoverDescription": "Znajdź widżety zbudowane dla prawdziwych własnych procesów pracy.", + "installTitle": "Przejrzyj i zainstaluj", + "installDescription": "Zobacz metadane i konfigurację przed dodaniem czegokolwiek.", + "publishTitle": "Udostępnij", + "publishDescription": "Opublikuj ponownie używane widżety z powrotem do społeczności.", + "browse": "Przeglądaj warsztaty" }, - "boardSelection": { - "title": "Znaleziono {count} tablic", - "description": "Wybierz wszystkie tablice o rozmiarze do zaimportowania", - "action": { - "selectAll": "Zaznacz wszystkie", - "unselectAll": "Odznacz wszystkie" - } - }, - "summary": { - "title": "Podsumowanie importu", - "description": "W poniższym podsumowaniu możesz zobaczyć, co zostanie zaimportowane", - "action": { - "import": "Potwierdź import i kontynuuj" - }, - "entities": { - "apps": "Aplikacje", - "boards": "Tablice", - "integrations": "Integracje", - "credentialUsers": "Dane użytkowników" - } - }, - "tokenModal": { - "title": "Wpisz token importu", - "field": { - "token": { - "label": "Token", - "description": "Wprowadź token importu z poprzedniej instancji homarr" - } - }, - "notification": { - "error": { - "title": "Nieprawidłowy token", - "message": "Wprowadzony token jest nieprawidłowy" - } - } + "mcpSetup": { + "title": "Homarr MCP", + "description": "Połącz Claude, Codex, lub inny klient MCP z narzędziami Homarra. Klucze API zachowują dostęp jawny i odwołalny.", + "endpoint": "Streamowalny punkt końcowy HTTP", + "keyTitle": "Skopiuj ten klucz teraz", + "keyDescription": "Dla bezpieczeństwa, Homarr nie może ponownie wyświetlić tego klucza API.", + "copyKey": "Kopiuj klucz API", + "createKey": "Utwórz klucz API MCP", + "errorTitle": "Nie można utworzyć klucza API MCP", + "loginRequired": "Zaloguj się jako administrator po ustawieniu aby utworzyć klucz API.", + "configuration": "Konfiguracja klienta", + "copy": "Kopiuj konfigurację", + "copied": "Skopiowano", + "advanced": "Otwórz narzędzia, uprawnienia i szczegóły konfiguracji MCP" } }, - "user": { - "title": "Administrator", - "subtitle": "Określ dane uwierzytelniające dla administratora", - "notification": { - "success": { - "title": "Użytkownik został utworzony", - "message": "Użytkownik został pomyślnie utworzony" - }, - "error": { - "title": "Błąd podczas tworzenia użytkownika" - } - } - }, - "group": { - "title": "Zewnętrzna grupa", - "subtitle": "Określ grupę, która powinna być używana przez użytkowników zewnętrznych.", - "form": { - "name": { - "label": "Nazwa grupy", - "description": "Nazwa musi być zgodna z grupą administratora zewnętrznego dostawcy" - } - } - }, - "settings": { - "title": "Ustawienia", - "subtitle": "Konfiguruj ustawienia serwera" - }, - "integrations": { - "title": "Integracje", - "subtitle": "Wybierz usługi, których używasz.", - "description": "Wybierz integracje, które chcesz połączyć. Skonfigurujemy Twoją tablicę z pasującymi widgetami automatycznie.", - "action": { - "continue": "Kontynuuj", - "skip": "Pomiń na razie" - }, - "configure": { - "progress": "{current} z {total}", - "skip": "Pomiń tę integrację", - "finishing": "Konfigurowanie twojej tablicy...", - "error": { - "title": "Konfiguracja nie powiodła się", - "message": "Coś poszło nie tak podczas konfiguracji twojej tablicy. Spróbuj ponownie później." - }, - "helpers": { - "tooltip": "URL helpers", - "description": "URL helpers spróbują odgadnąć URL twoich serwisów. Jeżeli to nie zadziała, po prostu wpisz adres ręcznie." - } - }, - "urlTemplate": { - "label": "Base URL", - "placeholder": "homelab.local lub 192.168.1.1", - "hint": "Wprowadź swoją podstawową domenę lub adres IP, aby automatycznie wypełniać adresy URL integracji", - "warning": "Ustawienie Base URL spowoduje automatyczne wypełnienie wszystkich adresów URL integracji, oszczędzając czas podczas konfiguracji", - "preview": "np. {example}", - "mode": { - "subdomain": "Subdomena", - "hostPort": "Host:Port" - } - }, - "docker": { - "detected": "Doker wykrył {count} usług", - "detectedBreakdown": "Integracje {integrations} · {apps} aplikacje", - "summary": "Homarr wykrył {apps} aplikacji, z których {integrations} ma wbudowane integracje", - "appBadge": "Aplikacja", - "appSectionLabel": "Aplikacje do dodania do tablicy (wybrano {count})", - "scanning": "Skanowanie Dockera...", - "scanningDescription": "Szukanie uruchomionych kontenerów w systemie" + "review": { + "title": "Jedna płytka, zbudowana wokół Twoich usług", + "description": "Homarr testuje niezapisane połączenia, importuje wybrane aplikacje, stosuje wygląd i układy, a następnie otwiera dokładnie skonfigurowany dział.", + "board": "Pierwsza tablica", + "columns": "Kolumny tablicy", + "columnsValue": "{count, plural, one {# kolumna} other {# kolumny}}", + "sidebars": "Paski boczne", + "sidebarsValue": "{count, plural, =0 {None} one {# sidebar} other {# sidebars}}", + "layouts": "Responsywne układy", + "layoutsValue": "Telefon komórkowy + baza", + "integrations": "Integracje", + "integrationsValue": "{count, plural, =0 {Nie wybrano} one {# integracja} other {# integracje}}", + "apps": "Kafelki aplikacji", + "appsValue": "{count, plural, =0 {Rozpocznij aplikacje tylko} one {# kafelek aplikacji} other {# kafelek aplikacji}}", + "language": "Język", + "theme": "Motyw", + "themeAuto": "Preferencje systemu", + "themeLight": "Jasny", + "themeDark": "Ciemny", + "colors": "Kolory tablicy", + "radius": "Promień widżetu", + "automaticTitle": "Co będzie tworzyć Homarr", + "automaticDescription": "Kompatybilne widżety, ikony, linki do aplikacji, relacje integracji i położenie responsywne pochodzą z udostępnionego katalogu Homarr. Możesz edytować każdy wynik później.", + "dockerWarningTitle": "Niektóre etykiety dokującego zostały zmienione podczas konfiguracji", + "dockerWarningDescription": "{count, plural, one {# wybrany wynik Docker nie może zostać zastosowany, ponieważ jego usługa została zmieniona, ukierunkowana na inny dział lub widżet był niekompatybilny} other {# wybrane wyniki Dockera nie mogą zostać zastosowane, ponieważ usługi zmienione, zostały skierowane na inny dział lub ich widżety były niezgodne}}", + "errorTitle": "Nie można zbudować tablicy", + "progress": { + "applying": "Testowanie połączeń i budowanie twojej tablicy", + "done": "Twoja tablica jest gotowa" } }, "finish": { - "title": "Zakończ konfigurację", - "subtitle": "Gotowe!", - "description": "Pomyślnie zakończyłeś proces konfiguracji. Teraz możesz zacząć używać Homarr. Wybierz następną akcję:", - "action": { - "goToBoard": "Idź do tablicy {name}", - "createBoard": "Stwórz swoją pierwszą tablicę", - "inviteUser": "Zaproś innych użytkowników", - "docs": "Przeczytaj dokumentację" - } + "title": "Twoja pierwsza tablica jest gotowa.", + "description": "Homarr podłączył wybrane elementy do edytowania. Otwórz dział już teraz; krótka wycieczka w produkcie może pokazać Ci tryb edycji, widżety, układy i wyszukiwanie.", + "openBoard": "Otwórz moją tablicę", + "manageTitle": "Zarządzaj", + "manageDescription": "Dopasuj aplikacje, integracje, tablice, użytkowników i ustawienia serwera.", + "workshopTitle": "Warsztat", + "workshopDescription": "Odkryj i zainstaluj niestandardowe widżety społeczności.", + "docsTitle": "Naucz się Homarr", + "docsDescription": "Przeczytaj ukierunkowane przewodniki dla działów, widżetów, integracji i narzędzi." } - }, - "backToStart": "Powrót do początku" + } }, "user": { - "title": "Użytkownicy", "name": "Użytkownik", "page": { "login": { @@ -159,12 +249,10 @@ }, "invite": { "title": "Dołącz do Homarr", + "titleWithAppName": "Dołącz do {appName}", "subtitle": "Witamy w Homarr! Utwórz swoje konto", + "subtitleWithAppName": "Witaj w {appName}! Proszę utworzyć swoje konto", "description": "Zostałeś(aś) zaproszony(a) przez {username}" - }, - "init": { - "title": "Nowa instalacja Homarr", - "subtitle": "Proszę utworzyć użytkownika dla podstawowego administratora" } }, "field": { @@ -192,12 +280,17 @@ "previousPassword": { "label": "Stare hasło:" }, - "homeBoard": { - "label": "Tablica główna" - }, "pingIconsEnabled": { "label": "Użyj ikon dla pingów" }, + "byteUnitSystem": { + "label": "Jednostki wielkości danych", + "description": "Wybierz, jak Homarr wyświetla rozmiary bajtów i stawki bajtów. Zbiór zawsze używa jednostek dziesiętnych.", + "options": { + "binary": "Binarny", + "decimal": "Dziesiętne" + } + }, "enableRightClickOnWidgets": { "label": "Włącz prawe kliknięcie na widżetach", "description": "Pokaż menu kontekstowe Homarr po kliknięciu prawym przyciskiem na widżet. Wyłącz, aby używać domyślnego menu przeglądarki (np. \"Otwórz link w nowej karcie\")." @@ -247,7 +340,6 @@ } } }, - "create": "Utwórz użytkownika", "changePassword": { "label": "Zmień hasło", "notification": { @@ -259,56 +351,6 @@ } } }, - "changeHomeBoard": { - "notification": { - "success": { - "message": "Tablica główna zmieniona pomyślnie" - }, - "error": { - "message": "Nie można zmienić tablicy głównej" - } - } - }, - "changeSearchPreferences": { - "notification": { - "success": { - "message": "Preferencje wyszukiwania zostały zmienione" - }, - "error": { - "message": "Nie można zmienić preferencji wyszukiwania" - } - } - }, - "changeFirstDayOfWeek": { - "notification": { - "success": { - "message": "Pierwszy dzień tygodnia został pomyślnie zmieniony" - }, - "error": { - "message": "Nie można zmienić pierwszego dnia tygodnia" - } - } - }, - "changePingIconsEnabled": { - "notification": { - "success": { - "message": "Pomyślnie przełączono ping ikon" - }, - "error": { - "message": "Nie można przełączyć ping ikon" - } - } - }, - "changeDdgBangs": { - "notification": { - "success": { - "message": "DuckDuckGo bangs zostały pomyślnie przełączone" - }, - "error": { - "message": "Nie można przełączyć DuckDuckGo bangs" - } - } - }, "manageAvatar": { "changeImage": { "label": "Zmień obraz", @@ -338,16 +380,6 @@ } } }, - "editProfile": { - "notification": { - "success": { - "message": "Pomyślnie zaktualizowano profil" - }, - "error": { - "message": "Problem z aktualizacją profilu" - } - } - }, "delete": { "label": "Usuń trwale użytkownika", "description": "Usuwa tego użytkownika, w tym jego preferencje. To nie usunie żadnych tablic. Użytkownik nie będzie powiadamiany.", @@ -356,18 +388,13 @@ "select": { "label": "Wybierz użytkownika", "notFound": "Nie znaleziono użytkownika" - }, - "transfer": { - "label": "Wybierz nowego właściciela" } } }, "group": { - "title": "Grupy", "name": "Grupa", "search": "Znajdź grupę", "field": { - "name": "Nazwa", "members": "Członkowie", "homeBoard": { "label": "Tablica główna", @@ -388,6 +415,19 @@ } } }, + "custom-widget": { + "title": "Niestandardowe Wigety", + "item": { + "manage": { + "label": "Zarządzaj widżetami niestandardowymi", + "description": "Pozwól użytkownikom tworzyć, edytować i usuwać definicje widżetów niestandardowych" + }, + "secret-write": { + "label": "Skonfiguruj niestandardowe sekrety widżetów", + "description": "Zezwalaj użytkownikom i ich klucze API na ustawianie zaszyfrowanych własnych danych logowania widżetu" + } + } + }, "app": { "title": "Aplikacje", "item": { @@ -493,6 +533,35 @@ "description": "Zezwól użytkownikom na zarządzanie i usuwanie dowolnej wyszukiwarki" } } + }, + "matrix": { + "none": "Brak dostępu", + "impliedHint": "Także dotacje: {permissions}", + "grantedViaAdmin": "Administratorzy mają już to. Ustaw administratora na \"Brak dostępu\", aby skonfigurować go oddzielnie.", + "preset": { + "label": "Ustawienia", + "viewer": "Przeglądarka", + "viewerDescription": "Tylko do odczytu: wyświetlacze i media, używaj aplikacji i integracji, które już istnieją.", + "editor": "Edytor", + "editorDescription": "Bieżące zarządzanie: tworzenie i edycja działów, aplikacji, integracji i wyszukiwarek.", + "admin": "Administrator", + "adminDescription": "Nieograniczony dostęp do każdej funkcji i ustawień, w tym zarządzania użytkownikami.", + "custom": "Własny" + }, + "effective": { + "title": "Skuteczne uprawnienia", + "description": "Pełny, odduplikowany zestaw działań członków tej grupy może wykonywać, w tym uprawnienia przyznane pośrednio.", + "empty": "Nie wybrano uprawnień" + }, + "noneDescription": "Członkowie nie mają dostępu do tego obszaru.", + "level": { + "view": "Widok", + "use": "Użycie", + "interact": "Interakcja", + "modify": "Modyfikowanie", + "full": "Pełna" + }, + "capabilityIncluded": "Już zawarte w „{level}”" } }, "memberNotice": { @@ -607,21 +676,24 @@ "search": "Znajdź aplikację", "page": { "list": { - "title": "Aplikacje", + "ariaLabel": "Skonfigurowane aplikacje", "noResults": { "title": "Nie ma jeszcze żadnych aplikacji", - "action": "Utwórz swoją pierwszą aplikację" + "description": "Aplikacje są linkami do serwisów i narzędzi, które chcesz w swoich działach.", + "action": "Utwórz swoją pierwszą aplikację", + "filteredTitle": "Żadne aplikacje nie pasują do Twojego wyszukiwania", + "filteredDescription": "Żadna aplikacja nie pasuje do \"{search}\". Spróbuj innej nazwy lub adresu URL.", + "createOnlyTitle": "Możesz tylko dodawać aplikacje", + "createOnlyDescription": "Twoje uprawnienia pozwalają tworzyć aplikacje, ale nie przeglądać istniejących. Poproś administratora o dostęp do zarządzania aplikacją, aby zobaczyć pełną listę." } }, "create": { "title": "Nowa aplikacja", "notification": { "success": { - "title": "Pomyślnie utworzono", "message": "Aplikacja została pomyślnie utworzona" }, "error": { - "title": "Tworzenie nieudane", "message": "Aplikacja nie mogła zostać utworzona" } } @@ -630,11 +702,9 @@ "title": "Edytuj aplikację", "notification": { "success": { - "title": "Zmiany zostały pomyślnie zastosowane", "message": "Aplikacja została pomyślnie zapisana" }, "error": { - "title": "Nie można wprowadzić zmian", "message": "Nie można zapisać aplikacji" } } @@ -644,26 +714,18 @@ "message": "Czy na pewno chcesz usunąć aplikację {name}?", "notification": { "success": { - "title": "Usunięto pomyślnie", "message": "Aplikacja została pomyślnie usunięta" }, "error": { - "title": "Nie udało się usunąć", "message": "Nie można usunąć aplikacji" } } } }, "field": { - "name": { - "label": "Nazwa" - }, "description": { "label": "Opis" }, - "url": { - "label": "Adres URL" - }, "useDifferentUrlForPing": { "checkbox": { "label": "Użyj innego adresu URL do pingu", @@ -678,58 +740,397 @@ "search": "Znajdź aplikację", "noResults": "Brak wyników", "action": "Wybierz {app}", - "title": "Wybierz aplikację do dodania do tej tablicy" + "title": "Wybierz aplikację do dodania do tej tablicy", + "toggle": "Kliknij, aby wybrać", + "selected": "Wybrane", + "multiple": "Dodaj {count}", + "selectedCount": "{count, plural, one {# wybrany} other {# wybrany}}", + "appsSelected": "{count, plural, one {# aplikacja wybrana} other {# aplikacji wybranych}}", + "selectMultiple": "Wybierz wiele", + "cancelMultiple": "Wyjdź z wielokrotnego wyboru", + "customApplication": "Własna aplikacja", + "application": "Aplikacja" }, "create": { "title": "Stwórz nową aplikację", "description": "Stwórz nową aplikację", "action": "Otwórz tworzenie aplikacji" - }, - "add": "Dodaj aplikację" + } } }, + "tips": { + "dismiss": "Odrzuć podpowiedź", + "multiSelectApps": "Wskazówka: Przytrzymaj Ctrl / aby wybrać wiele aplikacji na raz" + }, "customWidget": { + "secretEntry": { + "title": "Skonfiguruj źródło API", + "description": "Potwierdź adres URL serwera i wprowadź poświadczenia. Sekretne wartości są zaszyfrowane przez Homarr i nigdy nie zwracane do wnioskującego agenta.", + "loading": "Ładowanie bezpiecznego żądania…", + "applying": "Stosowanie tej konfiguracji… Pozostaw tę stronę otwartą.", + "saved": "Skonfigurowano źródło API. Możesz zamknąć tę stronę.", + "unavailable": "Żądanie niedostępne", + "saveError": "Nie można skonfigurować źródła API", + "source": "Źródło API: {name}", + "baseUrl": "Adres URL serwera", + "networkScope": "Dostęp do sieci", + "save": "Zapisz konfigurację API", + "expires": "To jednorazowe żądanie wygasa w {time}." + }, "page": { "list": { - "title": "Niestandardowe widgety", "noResults": "Brak niestandardowych widgetów. Utwórz swój pierwszy!", - "loading": "Ładowanie..." + "noDescription": "Brak opisu", + "enabled": "Aktywny", + "disabled": "Nieaktywny", + "disabledDescription": "Ten widżet pozostaje skonfigurowany, ale nie załaduje się na żadnej płytce.", + "requestCount": "{count, plural, one {# żądanie} other {# żądań}}", + "invalidDefinition": "Nieprawidłowa definicja", + "migrationRequired": "Wymagana migracja", + "migrationInstructions": "Otwórz akcje, aby skopiować lub wyeksportować oryginalną definicję v1 dla ręcznego utworzenia. Możesz również użyć monitu migracji z LLM. Istniejące miejsca na płytce nadal pracują po migracji.", + "missingCredentials": "{count, plural, one {Brakuje poświadczenia} other {Brakuje poświadczenia}}", + "missingCredentialsDescription": "{count, plural, one {Ten widżet nadal potrzebuje jednego poświadczenia.} other {Ten widżet nadal potrzebuje # poświadczeń.}} Wybierz tę odznakę, aby skonfigurować adres URL i zaszyfrowane wartości." }, "create": { "title": "Utwórz niestandardowy widget", "subtitle": "Zdefiniuj adres URL API, uwierzytelnianie oraz sposób wyświetlania danych z odpowiedzi." }, - "edit": { - "title": "Edytuj niestandardowy widget" + "tabs": { + "ariaLabel": "Niestandardowe sekcje widżetów", + "installed": "Zainstalowane", + "workshop": "Warsztat" } }, "action": { - "create": "Utwórz", - "import": "Importuj", - "save": "Zapisz", + "pasteImportHint": "Wklej pełny, niestandardowy widżet JSON z Ctrl+V lub poleceniem +V", "delete": "Usuń niestandardowy widget", "deleteConfirm": "Czy na pewno chcesz usunąć \"{name}\"? Tej akcji nie można cofnąć.", "export": "Eksportuj", - "edit": "Edytuj", "duplicate": "Duplikuj", + "aiPrompt": "Projekt z AI", "copyAiPrompt": "Skopiuj prompt AI", "enable": "Włącz", "disable": "Wyłącz", - "menu": "Akcje" + "menu": "Akcje", + "downloadSkill": "Zobacz niestandardową umiejętność widżetu", + "publishWorkshop": "Opublikuj w Warsztacie", + "migrate": "Migruj niestandardowy widżet", + "configureSources": "Konfiguruj źródła", + "copyLegacyDefinition": "Kopiuj oryginalną zawartość widżetu", + "exportLegacyDefinition": "Eksportuj oryginalną zawartość widżetu", + "copyMigrationPrompt": "Kopiuj wiersz migracji LLM", + "pasteMigration": "Wklej zmigrowany widżet", + "importMigration": "Importuj plik JSON" + }, + "sourceSetupDialog": { + "title": "Skonfiguruj źródła widżetu", + "description": "Sprawdź, gdzie ten widżet łączy się i dodaje lub zastąpi swoje zaszyfrowane dane uwierzytelniające.", + "credentialsRequired": "Żądanie nie będzie możliwe do momentu dodania wymaganych poświadczeń.", + "save": "Zapisz konfigurację" }, "field": { - "name": "Nazwa", - "description": "Opis", - "iconUrl": "Adres URL ikony" + "description": "Opis" + }, + "editor": { + "errorBoundary": { + "title": "Coś poszło nie tak" + }, + "action": { + "components": "Składniki", + "format": "Formatowanie", + "insertStarter": "Insert starter", + "redo": "Ponów", + "copied": "Skopiowano", + "schema": "Schemat" + }, + "reference": { + "minimal": "Minimalny przykład", + "full": "Pełny przykład" + }, + "componentReference": { + "search": "Szukaj komponentów", + "empty": "Brak pasujących komponentów", + "count": "{count, number} dostępne komponenty" + }, + "status": { + "errors": "{count, number} błędy", + "warnings": "{count, number} ostrzeżenia", + "ready": "Nie znaleziono problemów", + "position": "Ln {line, number}, Col {column, number}", + "characters": "{count, number} znaki", + "charactersWithLimit": "{count, number} / {limit, number}" + }, + "diagnostics": { + "title": "Diagnostyka szablonów", + "line": "Wiersz {line, number}", + "ast": "{value}", + "bindingTypeConflict": "Wejście \"{value}\" jest współdzielone przez urządzenia sterujące niekompatybilnymi typami wartości.", + "runtimeBindingTypeConflict": "Dane wejściowe \"{value}\" są powiązane zarówno {firstType} , jak i {secondType}.", + "dynamicRequestId": "Wymagane jest dosłowne ID żądania. Dynamiczne ID żądania nie są akceptowane.", + "dynamicInputBinding": "Dla powiązania wymagana jest dosłowna nazwa wejścia.", + "inlineRequestProps": "Komponenty sieciowe akceptują żądane Id i parametry; adres URL, metoda, nagłówek i rekwizyty ciała są zablokowane.", + "invalidRequestManifest": "Nazwane żądania muszą być poprawną mapą żądania. {value}", + "missingRequestId": "Ten komponent sieci wymaga dosłownego identyfikatora żądania.", + "templateEmpty": "Wprowadź szablon JSX.", + "templateTooLong": "Szablon przekracza limit 50 000 znaków.", + "unknownRequest": "Żadne żądanie o nazwie z ID \"{value}\" nie istnieje." + } + }, + "workbench": { + "configure": "Skonfiguruj", + "sectionNavigation": "Niestandardowe sekcje widżetów", + "widgetPreview": "Podgląd widżetu", + "generalInformation": "Informacje ogólne", + "invalidWidget": "Nieprawidłowy widżet", + "section": { + "general": "Ogólne", + "sources": "Źródła API", + "requests": "Zapytania", + "options": "Opcje", + "jsx": "JSX", + "preview": "Podgląd" + }, + "status": { + "unsaved": "Niezapisane zmiany", + "invalid": "Potrzebne uwagi", + "ready": "Gotowe" + }, + "saveError": { + "title": "Widżet nie został zapisany", + "description": "Napraw te błędy sprawdzania poprawności i zapisz ponownie.", + "more": "+{count} więcej błędów jest wyświetlanych na stole roboczym.", + "errors": "Błędy walidacji", + "copy": "Kopiuj błędy", + "copied": "Błędy skopiowane" + }, + "action": { + "preview": "Test i podgląd", + "previewLoading": "Żądania testowania" + }, + "requests": { + "title": "Nazwane zapytania i akcje", + "label": "Zapytania", + "description": "Zapytuje ładowanie danych; akcje uruchamiane tylko po interakcji użytkownika. Każda metoda HTTP jest ważna dla każdego rodzaju." + }, + "options": { + "title": "Opcje widżetu" + }, + "builder": { + "advancedManifest": "Zaawansowany manifest surowy", + "advancedJson": "Zaawansowany manifest JSON", + "manifestFilename": "widget.json", + "request": "Żądaj {count, number}", + "requestId": "Żądanie ID", + "type": "Typ", + "method": "Metoda", + "source": "Źródło API", + "run": "Uruchom", + "runLoad": "Kiedy widżet ładuje się", + "runManual": "Z Subpobierania", + "permission": "Uprawnienie", + "path": "Ścieżka", + "pathDescription": "Użyj '{option:name}' dla opcji widżetu i '{param:name}' dla wartości wywołania.", + "requestDetails": "Zapytanie, treść i zachowanie", + "queryValues": "Wartości zapytania", + "queryKey": "Klucz zapytania", + "queryKeyInvalid": "Użyj unikalnego identyfikatora, który zaczyna się od litery i zawiera tylko litery, cyfry - lub _.", + "valueSource": "Źródło wartości", + "literal": "Drobne", + "widgetOption": "Opcja widżetu", + "invocationParameter": "Parametr wywołania", + "option": "Opcja", + "parameterName": "Nazwa parametru", + "value": "Wartość", + "removeQueryValue": "Usuń wartość zapytania", + "addQueryValue": "Dodaj wartość zapytania", + "jsonBody": "Treść JSON", + "jsonBodyDescription": "Opcjonalne. Wstaw odniesienia $option i $param na dowolną głębokość.", + "insertOptionReference": "Wstaw odniesienie do opcji", + "insertParameterReference": "Wstaw odniesienie do parametru", + "confirmation": "Wiadomość potwierdzająca", + "invalidation": "Odśwież po sukcesie", + "invalidationDescription": "ID kwerendy oddzielone przecinkami", + "noAuth": "Wyślij bez autoryzacji źródłowej", + "moveRequestUp": "Przenieś żądanie w górę", + "moveRequestDown": "Przenieś żądanie w dół", + "removeRequest": "Usuń żądanie", + "addRequest": "Dodaj żądanie", + "optionName": "Nazwa opcji", + "label": "Etykieta", + "control": "Kontrola", + "description": "Opis", + "default": "Domyślny", + "optionDetails": "Ograniczenia i wybory dynamiczne", + "minimum": "Minimalny", + "maximum": "Maksymalnie", + "step": "Krok", + "choiceLabel": "Etykieta wyboru", + "choiceValue": "Wartość wyboru", + "newChoice": "Nowy wybór", + "addChoice": "Dodaj wybór", + "removeChoice": "Usuń wybór", + "choicesRequest": "Wczytaj wybory z żądania", + "itemsPath": "Ścieżka elementów", + "itemsPathPlaceholder": "elementy (opcjonalnie)", + "valuePath": "Ścieżka wartości", + "labelPath": "Ścieżka etykiety", + "group": "Grupa", + "advancedOption": "Opcja zaawansowana", + "moveOptionUp": "Przenieś opcję w górę", + "moveOptionDown": "Przenieś opcję w dół", + "removeOption": "Usuń opcję", + "addOption": "Dodaj opcję", + "invalidJson": "Nieprawidłowy JSON", + "invalidWidget": "Nieprawidłowy widżet" + }, + "jsx": { + "title": "Szablon JSX", + "label": "Szablon" + }, + "sources": { + "title": "Źródła i dane logowania API", + "newName": "API {count, number}", + "duplicateSourceId": "Identyfikatory źródła API muszą być unikalne.", + "credentialRemoved": "Usunięto poświadczenia", + "credentialRemovedDescription": "Zapisana wartość została usunięta.", + "primary": "Podstawowe API", + "id": "ID źródła", + "name": "Nazwa zlecenia", + "baseUrl": "Base URL", + "baseUrlError": { + "invalid": "Wprowadź pełny adres URL.", + "protocol": "Użyj adresu URL HTTP lub HTTPS.", + "credentials": "Usuń nazwę użytkownika i hasło z tego adresu URL. Zamiast tego skonfiguruj dane logowania poniżej.", + "queryOrFragment": "Usuń ciąg zapytania lub fragment z tego podstawowego adresu URL. Dodaj wartości zapytania do nazwanego żądania." + }, + "networkScope": "Dostęp do sieci", + "authentication": "Authentication", + "headerName": "Nazwa nagłówka", + "queryParameter": "Parametr zapytania", + "configured": "Skonfigurowane — wprowadź zamiennik", + "clear": "Bezchmurnie", + "remove": "Usuń źródło i jego żądania", + "advanced": "Zaawansowane", + "add": "Dodaj kolejne źródło API", + "sourceType": "Integracja", + "manualSource": "HTTP API", + "existingIntegration": "Istniejąca integracja", + "integrationType": "Typ integracji", + "selectIntegration": "Konfigurowana integracja", + "noIntegrations": "Brak dostępnych pasujących integracji", + "integrationUnavailable": "Wybrana integracja nie jest już dostępna. Wybierz inną integrację.", + "integrationDescription": "Używa zapisanego adresu URL integracji i danych logowania. Zmiany są stosowane automatycznie. Pełen dostęp do integracji jest wymagany do uruchomienia żądań." + }, + "ai": { + "title": "Twórz lub naprawiaj dowolną SI", + "description": "Najpierw dodaj adres URL dokumentacji API. Dla napraw, uruchom podgląd, jeśli to możliwe. Skopiuj szybkość do dowolnego AI; może poprosić o brakujące szczegóły. Wklej ostateczny JSON tutaj.", + "request": "Co powinien zrobić ten widżet?", + "documentationUrl": "URL dokumentacji API (opcjonalnie)", + "paste": "Wklej", + "response": "Odpowiedź SI", + "manualCopyDescription": "Dostęp do schowka jest niedostępny. Wybierz poniższy wiersz i skopiuj go ręcznie.", + "manualPasteDescription": "Dostęp do schowka jest niedostępny lub skopiowana odpowiedź wymaga korekty. Wklej tutaj odpowiedź AI JSON", + "selectAll": "Zaznacz wszystko", + "loadResponse": "Wczytaj odpowiedź", + "loaded": "Widżet załadowany do edytora", + "invalidResponse": "Schowek nie zawiera poprawnego widżetu v2", + "invalidResponseDetail": "Odpowiedź SI jest nieprawidłowa: {message}" + }, + "preview": { + "invalid": "Napraw błędy sprawdzania poprawności, aby wyświetlić ten widżet.", + "fixtureError": "Błąd podglądu", + "requestData": "Poproś o dane", + "status": { + "idle": "Żądania nie zostały przetestowane", + "loading": "Żądania testowania", + "success": "Wszystkie żądania załadowania zakończone sukcesem", + "error": "Jedno lub więcej żądań załadowania nie powiodło się" + }, + "result": { + "loading": { + "title": "Testowanie żądań API", + "description": "Homarr tworzy podgląd sesji i ładuje dane widżetów." + }, + "success": { + "title": "Podgląd gotowy", + "description": "{succeeded, plural, =0 {Ten widżet nie ma żadnych żądań.} one {# żądanie załadowania powiodło się.} other {# żądania załadowania zakończone.}} Otwórz dane, aby sprawdzić odpowiedź." + }, + "error": { + "title": "Podgląd zakończony z błędami żądania", + "description": "{succeeded, number} Udało się i {failed, number} nie powiodło się. Otwarte dane dla odpowiedzi i szczegółów błędu." + } + }, + "instanceOptions": "Opcje instancji", + "liveActions": "Uruchom akcje przeciwko skonfigurowanym API", + "liveActionsDescription": "Wyłączona jest bezpieczna symulacja. Włączenie tej opcji wpływa na prawdziwą usługę.", + "noActions": "Nie zdefiniowano żadnych działań.", + "containedFailures": "Błędy czasu pracy są zawarte w tym widżecie. Żądane czasopisma nigdy nie zawierają tajnych wartości.", + "validation": { + "title": "Walidacja", + "ready": "Definicja widżetu jest prawidłowa." + }, + "accessibility": { + "title": "Kontrole dostępności", + "ready": "Nie wykryto wspólnych braków w dostępności.", + "pending": "Sprawdzenie dostępności zostanie uruchomione, gdy definicja widżetu jest prawidłowa.", + "imageAlt": "Dodaj tekst alt do każdego obrazu, używając pustego alt tylko dla zdjęć dekoracyjnych.", + "actionIconLabel": "Dodaj etykietę arytmy lub tytuł do każdej ikony Actioncon.", + "inputLabel": "Dodaj widoczną etykietę lub dostępną nazwę do każdego wpisu." + }, + "journal": "Zreaktywowany dziennik żądania", + "actionParameters": "Parametry akcji (JSON)", + "invalidParameters": "Użyj zadeklarowanego ciągu znaków, liczby i typów parametrów logicznych.", + "runDestructive": "Uruchom niszczące działanie", + "runAction": "Uruchom akcję", + "deleteConfirmation": "To działanie podglądu zmienia zdalne dane za pomocą skonfigurowanego API.", + "simulated": "Akcja symulowana", + "httpStatus": "HTTP {status, number}", + "tab": { + "widget": "Widżet", + "data": "Dane", + "options": "Opcje", + "state": "Stan pracy", + "actions": "Sterowanie", + "diagnostics": "Diagnostyka" + }, + "size": { + "compact": "Kompaktowy", + "standard": "Standardowy", + "wide": "Szeroki" + }, + "fixture": { + "live": "Żywe", + "loading": "Ładowanie", + "empty": "Puste", + "error": "Błąd" + } + } + }, + "preview": { + "request": { + "permission": { + "view": "Widok", + "modify": "Modyfikowanie", + "full": "Pełna" + } + } }, "notification": { "created": "Widget \"{name}\" został utworzony pomyślnie.", "updated": "Widget \"{name}\" zaktualizowany pomyślnie.", "deleted": "Widget \"{name}\" usunięty.", "imported": "Widget został zaimportowany pomyślnie.", - "aiPromptCopied": "Prompt AI skopiowany do schowka", + "migrated": "Starszy widżet został pomyślnie przeniesiony. Istniejące miejsca na tablicy teraz używają definicji v2.", + "migrationError": "Nie udało się zmigrować widżetu starszego. Upewnij się, że plik używa schematu homarr-custom-widget-v2.", + "legacyDefinitionCopied": "Oryginalna zawartość widżetu została skopiowana. Przechowywane wartości logowania nie są uwzględnione.", + "legacyDefinitionCopyError": "Nie udało się skopiować oryginalnej zawartości widżetu.", + "migrationPromptCopied": "Skopiowano poprawiony wiersz migracji. Wklej go do LLM, skopiuj jego pojedynczą odpowiedź JSON, a następnie wybierz tutaj wklej zmigrowany widżet.", + "migrationPromptCopyError": "Nie udało się skopiować monitu migracji.", + "sourcesConfigured": "Źródła widżetu i dane logowania.", + "sourceConfigurationError": "Nie udało się skonfigurować źródeł widżetu.", + "aiPromptCopiedWithCount": "Wskazówka o SI została skopiowana do schowka ({count, number} znaków).", "aiPromptCopyError": "Nie udało się skopiować prompta do schowka. Twoja przeglądarka może nie obsługiwać tej funkcji.", - "createError": "Nie udało się utworzyć widżetu. Sprawdź, czy endpoint API jest osiągalny.", + "aiPromptSent": "Szybkie wysłanie. Możesz nadal edytować, gdy asystent pracuje w tle.", "updateError": "Nie udało się zaktualizować widgetu. Zmiany nie zostały zapisane.", "importError": "Nie udało się zaimportować widgetu. Upewnij się, że plik jest prawidłowym eksportem niestandardowego widgetu JSON.", "exportError": "Nie udało się wyeksportować widgetu.", @@ -737,29 +1138,184 @@ "duplicateError": "Nie udało się zduplikować widgetu.", "toggleError": "Nie udało się przełączyć statusu widgetu.", "deleteError": "Nie udało się usunąć widgetu.", - "previewError": "Nie udało się pobrać podglądu. Sprawdź URL i spróbuj ponownie.", - "executed": "Akcja wykonana pomyślnie.", - "executeError": "Akcja nie powiodła się: {error}" + "previewError": "Nie udało się pobrać podglądu. Sprawdź URL i spróbuj ponownie." + }, + "importReview": { + "title": "Przejrzyj import widżetu niestandardowego", + "description": "Sprawdź, gdzie ten widżet łączy się i jaki dostęp do niego wymaga przed jego importowaniem.", + "migrationTitle": "Przegląd zmigrowanego zamiennika v2", + "migrationDescription": "Przejrzyj i potwierdź tę wygenerowaną definicję v2. Potwierdzenie atomowo zastępuje zachowany rekord v1 przy utrzymaniu istniejących umiejscowień połączonych z tym samym identyfikatorem widżetu.", + "fileLabel": "Wybierz plik JSON niestandardowego widżetu", + "name": "Nazwa zlecenia", + "origin": "Podstawowe źródło", + "authentication": "Authentication", + "networkScope": "Zakres sieci", + "methods": "Metody HTTP", + "permissions": "Wymagane uprawnienia działu", + "sourceSetup": { + "title": "Skonfiguruj źródła API", + "description": "Potwierdź, gdzie ten widżet łączy się i dodaj poświadczenia. Prywatne i loopback adresy URL są specyficzne dla twojej instalacji Homarr.", + "suggestedUrl": "Sugerowany adres URL", + "confirmUrl": "Potwierdzam, że ten adres URL serwera jest poprawny dla mojej instalacji Homarr", + "ready": "Adres URL gotowy", + "needsUrl": "Potwierdź adres URL", + "credentialsMissing": "Brak danych logowania", + "credentialsOptional": "Możesz zainstalować bez poświadczeń i skonfigurować je później, ale żądania nie zostaną dodane." + }, + "actionWarning": { + "title": "Ten widżet może zmieniać zdalne dane", + "description": "Przejrzyj każdą nazwaną akcję, odziedziczone dane uwierzytelniające i destrukcyjne potwierdzenie po importu. Sekretności nie są zawarte w pliku." + }, + "cancel": "Anuluj import", + "confirm": "Importuj widżet", + "confirmMigration": "Potwierdź zastąpienie v2" + }, + "secret": { + "apiKey": "Klucz API lub token", + "username": "Nazwa użytkownika", + "password": "Hasło", + "savedPlaceholder": "•••••• (zapisane, pozostaw puste aby zachować)" + } + }, + "workshop": { + "title": "Warsztat", + "browseWorkshop": "Przeglądaj warsztaty", + "openCommunity": "Otwórz warsztat", + "openOnWorkshop": "Otwórz {title} na stronie warsztatu", + "back": "Wróć do Warsztatu", + "search": "Szukaj widżetów", + "searchCss": "Szukaj motywów CSS", + "sort": "Sortuj", + "sortTop": "Najwyżej oceniane", + "sortNewest": "Najnowsze", + "listAriaLabel": "Widżety warsztatowe", + "listAriaLabelCss": "Warsztaty stylów CSS", + "empty": "Żaden widget nie pasuje do tego wyszukiwania.", + "emptyDescription": "Widżety społeczności opublikowane w Warsztacie pojawiają się tutaj.", + "emptyFilteredTitle": "Żaden widget nie pasuje do tego wyszukiwania", + "emptyFilteredDescription": "Żaden widżet warsztatowy nie pasuje do \"{search}\".", + "emptyCss": "Żaden styl CSS nie pasuje do tego wyszukiwania.", + "unavailableTitle": "Warsztat Homarr wydaje się być niedostępny", + "unavailable": "Usługa społecznościowa może być tymczasowo wyłączona. Spróbuj ponownie za chwilę. Twoje zainstalowane widżety nie ulegają zmianie.", + "loadError": "Nie można załadować tego zgłoszenia.", + "noDescription": "Brak opisu", + "author": "przez {name}", + "communityMember": "Członek społeczności", + "outdated": "Nieaktualny", + "outdatedWarning": "Autor oznaczył to zgłoszenie jako przestarzałe. Przejrzyj je uważnie przed importowaniem.", + "score": "Wynik: {count, number}", + "upvote": "Upvote", + "downvote": "Głosuj na dół", + "voteError": "Nie można zapisać głosu.", + "signIn": "Zaloguj się przez GitHub", + "signInError": "Logowanie na GitHub nie powiodło się. Sprawdź, czy dostawca OAuth warsztatu jest skonfigurowany i czy wyskakujące okienka są dozwolone.", + "signOut": "Wyloguj się", + "signInHint": "Zaloguj się, aby głosować lub raportu. Instalacja nie wymaga konta warsztatu.", + "securityNotice": "Widżety warsztatowe mogą wywoływać deklarowane źródła API i wykonywać deklarowane działania z danymi uwierzytelniającymi konfigurowanymi lokalnie. Tajemnice nigdy nie są uwzględniane.", + "securityNoticeCss": "CSS społeczności może zmienić wygląd i przydatność działu. Przejrzyj go przed zaimportowaniem; nic nie zostanie zapisane, dopóki nie zapiszesz ustawień działu.", + "install": "Zainstaluj", + "installReviewTitle": "Przejrzyj przed instalacją", + "installError": "Ten widżet nie może być zainstalowany", + "installErrorDescription": "Zgłoszenie warsztatu nie jest poprawnym widgetem niestandardowym JSX v2.", + "useCss": "Import CSS", + "importCss": "Importuj CSS z Warsztatu", + "importCssConfirm": "Zastąpić bieżący niestandardowy CSS \"{title}\"? Nic nie zostanie zapisane dopóki nie zapiszesz ustawień forum.", + "screenshotAlt": "{title} zrzut ekranu {count, number}", + "screenshotViewer": "Przeglądarka zrzutów ekranu {title}", + "screenshotsLabel": "{title} zrzuty ekranu", + "zoomScreenshot": "Zobacz pełny rozmiar", + "previousScreenshot": "Poprzedni zrzut ekranu", + "nextScreenshot": "Następny zrzut ekranu", + "showScreenshotThumbnails": "Pokaż miniatury zrzutów ekranu", + "hideScreenshotThumbnails": "Ukryj miniatury zrzutu ekranu", + "closeScreenshotViewer": "Zamknij podgląd zrzutu ekranu", + "technicalDetails": "Szczegóły techniczne", + "sourceCode": "Wpis do warsztatu", + "export": "Eksportuj", + "report": "Zgłoszenie", + "reportTitle": "Zgłoś zgłoszenie", + "reportReason": "Powód", + "reportExplanation": "Co powinni wiedzieć moderatorzy warsztatów?", + "reportSend": "Wyślij raport", + "reportSent": "Raport wysłany", + "reportSentDescription": "Moderatorzy warsztatów mogą teraz przejrzeć to zgłoszenie.", + "reportCount": "{count, plural, one {# zgłoś} other {# zgłoszenia}}", + "reportWarning": "{count, plural, one {To zgłoszenie ma # otwarte zgłoszenie społeczności} other {To zgłoszenie ma # otwarte zgłoszenia społeczności.}} Pozostaje zainstalowany, ale najpierw powinieneś przejrzeć jego zawartość.", + "reportVisibility": "Szczegóły raportu są widoczne tylko dla autora tego zgłoszenia i administratorów warsztatów.", + "reportCategory": { + "outdated": "Przestarzałe lub już niepracujące", + "malicious": "Złośliwy", + "spam": "Spam", + "copyright": "Prawa autorskie", + "inappropriate": "Niewłaściwe", + "other": "Inne" + }, + "publish": { + "title": "Opublikuj w Warsztacie", + "introTitle": "Podziel się tym widgetem ze społecznością", + "introDescription": "Homarr eksportuje bezpośrednia kopia bieżącego widżetu. Dodaj wyczyść szczegóły listy, aby ludzie wiedzieli, co robią przed zainstalowaniem widżetu.", + "listingDetails": "Lista warsztatów", + "listingDetailsDescription": "Szczegóły te pojawiają się publicznie wraz z definicją eksportowanych widżetów.", + "success": "Opublikowano natychmiast. Członkowie społeczności mogą teraz zainstalować i zgłosić ten widżet.", + "successTitle": "Twój widżet jest na żywo", + "manageDescription": "Otwórz przedłożenie, aby zaktualizować jego listę, przejrzeć raporty, oznacz go nieaktualny lub usuń go. Zarządzanie zgłoszeniami jest obsługiwane bezpośrednio na stronie internetowej warsztatu.", + "viewSubmission": "Zobacz i zarządzaj przedłożeniem", + "done": "Gotowe", + "signInHint": "Zaloguj się, aby opublikować pod swoją tożsamością warsztatu.", + "titleField": "Tytuł", + "descriptionField": "Opis", + "screenshots": "Zrzuty ekranu", + "screenshotsDescription": "Do pięciu obrazów PNG, JPEG, lub WebP", + "screenshotsPlaceholder": "Wybierz zrzuty ekranu", + "invalidScreenshot": "Użyj obrazów PNG, JPEG, lub WebP nie większych niż każde z nich {maxSize}.", + "privateSourceWarning": "Ten widget zawiera prywatne źródłowe adresy URL dla: {sources}. Zastąp osobiste hosty lub adresy IP bezpiecznymi symbolami zastępczymi serwisu przed publikacją.", + "reviewSourcesTitle": "Przejrzyj prywatne adresy źródłowe", + "privateSourceConfirmation": "Przejrzyłem te źródłowe adresy URL i nie ujawniają prywatnych szczegółów infrastruktury", + "action": "Opublikuj teraz", + "publicationNote": "Publikowanie jest natychmiastowe. Następnie możesz zarządzać zgłoszeniem w Warsztacie.", + "definitionChanged": "Widżet zmieniony podczas przygotowywania publikacji. Przejrzyj jego prywatne adresy źródłowe ponownie, a następnie spróbuj ponownie.", + "error": "Publikacja nie powiodła się" } }, "integration": { + "completion": { + "modalTitle": "Usługa gotowa", + "title": "{name} jest połączony", + "description": "Połączenie przeszło test połączenia. Wybierz co wyświetlić na tym dziale.", + "connectionReady": "Połączenie serwisowe jest gotowe", + "appReady": "Skrót aplikacji jest gotowy", + "compatibleWidgets": "{count, plural, =0 {Brak kompatybilnych widżetów} one {# kompatybilnego widżetu} other {# kompatybilnych widżetów}} Dostępne", + "chooseWidget": "Wybierz widżet", + "recipes": { + "title": "Zalecane dla tej tablicy", + "description": "W oparciu o połączone usługi i widżety już w tym dziale.", + "newConnectionReason": "Teraz dostępne przez {integration}", + "existingConnectionReason": "Pracuje z usługą, którą już połączyłeś", + "dismiss": "Odrzuć zalecenia dla tej usługi w tej radzie" + } + }, "page": { "list": { - "title": "Integracje", + "ariaLabel": "Skonfigurowane integracji", "search": "Szukaj integracji", + "scopedNote": "Wyświetlanie tylko integracji, którymi możesz zarządzać.", "noResults": { - "title": "Nie ma jeszcze integracji" + "title": "Nie ma jeszcze integracji", + "description": "Połącz usługę, aby używać jej danych i akcji w widżetach Homarr.", + "action": "Utwórz swoją pierwszą integrację", + "filteredTitle": "Żadna integracja nie pasuje do Twojego wyszukiwania", + "filteredDescription": "Żadna integracja nie pasuje do \"{search}\". Spróbuj innej nazwy, typu lub adresu URL.", + "createOnlyTitle": "Możesz tylko dodać integracje", + "createOnlyDescription": "Twoje uprawnienia pozwalają na tworzenie integracji, ale nie zarządzają istniejącymi. Poproś administratora o dostęp do tych, których potrzebujesz." } }, "create": { "title": "Nowa integracja {name}", "notification": { "success": { - "title": "Utworzenie udało się", "message": "Integracja została pomyślnie utworzona" }, "error": { - "title": "Nie udało się utworzyć", "message": "Integracja nie może zostać utworzona" } }, @@ -783,11 +1339,9 @@ "title": "Edytuj integrację z {name}", "notification": { "success": { - "title": "Zmiany zostały pomyślnie zastosowane", "message": "Integracja została pomyślnie zapisana" }, "error": { - "title": "Nie można wprowadzić zmian", "message": "Integracja nie mogła zostać zapisana" } }, @@ -804,23 +1358,15 @@ "message": "Czy na pewno chcesz usunąć integrację z {name}?", "notification": { "success": { - "title": "Usunięto pomyślnie", "message": "Integracja została pomyślnie usunięta" }, "error": { - "title": "Nie udało się usunąć", "message": "Nie udało się usunąć integracji" } } } }, "field": { - "name": { - "label": "Nazwa" - }, - "url": { - "label": "Adres URL" - }, "attemptSearchEngineCreation": { "label": "Utwórz wyszukiwarkę", "description": "Integracja \"{kind}\" może być używana z wyszukiwarkami. Zaznacz to, aby automatycznie skonfigurować wyszukiwarkę." @@ -832,6 +1378,10 @@ "label": "Stwórz aplikację", "description": "Utwórz aplikację o tej samej nazwie i ikonie, co integracja. Poniższe pole pozostaw puste, aby utworzyć aplikację z URL integracji." }, + "linkApp": { + "label": "Połącz istniejącą aplikację", + "description": "Połącz tę integrację z aplikacją, którą możesz już użyć." + }, "appHref": { "placeholder": "Niestandardowy adres URL aplikacji" }, @@ -845,7 +1395,11 @@ "grid": { "widgetCount": "{count} widgety", "noWidgets": "Brak widgetów", - "detected": "Wykryto przez Docker" + "detected": "Wykryto przez Docker", + "connected": "{count, plural, one {# połączono} other {# połączono}}", + "tiedWidgets": "Powiązane widżety", + "more": "+{count} więcej", + "loadError": "Integracje nie mogły zostać załadowane. Spróbuj ponownie przed utworzeniem nowego połączenia." }, "category": { "dnsHole": "DNS", @@ -876,7 +1430,10 @@ "analytics": "Analityka", "vpn": "VPN", "mediaLibrary": "Biblioteka Multimediów", - "uptimeMonitoring": "Monitorowanie Czasu Pracy" + "uptimeMonitoring": "Monitorowanie Czasu Pracy", + "beszel": "Beszel", + "systemMonitoring": "Monitorowanie systemu", + "security": "Bezpieczeństwo" }, "testConnection": { "action": { @@ -1161,6 +1718,22 @@ "slug": { "label": "Slug strony statusu", "newLabel": "Nowy Slug strony statusu" + }, + "wazuhIndexerUrl": { + "label": "Indekser URL", + "newLabel": "Nowy indeksator URL" + }, + "wazuhIndexerUsername": { + "label": "Nazwa użytkownika Indeksu", + "newLabel": "Nowa nazwa użytkownika indeksatora" + }, + "wazuhIndexerPassword": { + "label": "Hasło indeksatora", + "newLabel": "Nowe hasło indeksatora" + }, + "wazuhDashboardUrl": { + "label": "Adres URL panelu ustawień (opcjonalnie)", + "newLabel": "Adres URL nowego panelu ustawień" } } }, @@ -1169,54 +1742,19 @@ "interact": "Interakcja z integracjami", "full": "Pełny dostęp do integracji" }, - "audiobookshelf": { - "name": "Audiobookshelf", - "description": "Samodzielnie hostowany serwer audiobooków i podcastów" - }, - "navidrome": { - "name": "Navidrome", - "description": "Samodzielnie hostowany serwer strumieniowania muzyki z kompatybilnością Subsonic API" - }, - "uptimeKuma": { - "name": "Uptime Kuma", - "description": "Samodzielnie hostowany serwer monitorujący czas pracy z publicznymi stronami statusu", - "secret": { - "slug": { - "description": "Slug twojej publicznej strony statusu. Domyślnie \"default\" jeśli nie ustawione." - }, - "apiKey": { - "description": "Opcjonalny klucz API dla uwierzytelnionego dostępu /metryki" - } - } - }, - "traefik": { - "name": "Traefik", - "description": "Chmurowy reverse proxy i load balancer" - }, - "paperlessNgx": { - "name": "Paperless-ngx", - "description": "System zarządzania dokumentami do archiwizacji i organizacji zeskanowaych dokumnteów" - }, - "patchmon": { - "name": "PatchMon", - "description": "Zarządzanie łatkami i monitorowanie hostów Linux" - }, - "bazarr": { - "name": "Bazarr", - "description": "Aplikacja towarzysząca Sonarr i Radarr do zarządzania i pobierania napisów" - }, - "wud": { - "name": "What's Up Docker", - "description": "Monitoruj, który z twoich kontenerów Docker ma dostępne aktualizacje obrazów" + "llamacpp": { + "name": "llama.cpp", + "description": "Monitoruj lokalny serwer llama.cpp: zdrowie, model i wskaźniki generowania" } }, "media": { "plural": "Multimedia", "search": "Znajdź multimedia", "field": { - "name": "Nazwa", + "preview": "Podgląd", "size": "Rozmiar", - "creator": "Twórca" + "creator": "Twórca", + "actions": "Sterowanie" }, "action": { "upload": { @@ -1244,10 +1782,12 @@ } }, "copy": { - "label": "Kopiuj adres URL" + "label": "Kopiuj adres URL", + "labelNamed": "Kopiuj adres URL dla {name}" }, "open": { - "label": "Otwórz multimedia" + "label": "Otwórz multimedia", + "labelNamed": "Otwórz {name}" } }, "noResults": { @@ -1262,7 +1802,6 @@ "add": "Dodaj", "apply": "Zastosuj", "backToOverview": "Powrót do widoku ogólnego", - "skip": "Pomiń", "change": "Zmień", "create": "Utwórz", "createAnother": "Utwórz i zacznij od nowa", @@ -1285,16 +1824,31 @@ "tryAgain": "Spróbuj ponownie", "loading": "Ładowanie", "show": "Pokaż", - "hide": "Ukryj" + "hide": "Ukryj", + "undo": "Cofnij", + "editNamed": "Edytuj {name}", + "deleteNamed": "Usuń {name}", + "clearSearch": "Wyczyść wyszukiwanie", + "copy": "Kopiuj", + "copied": "Skopiowano", + "refresh": "Odśwież" + }, + "pagination": { + "pageOf": "Strona {page} z {totalPages}" }, "here": "tutaj", + "serviceUrlTemplate": { + "serverTitle": "Zwykły adres serwera", + "urlModeLabel": "Wzorzec adresu usługi", + "hostPort": "Ten sam host, różne porty", + "subdomain": "Jedna subdomena na usługę", + "path": "Jedna ścieżka na usługę" + }, "iconPicker": { "label": "adres URL ikony", + "description": "Przeszukaj bibliotekę, wklej adres URL obrazu lub wgraj plik.", "header": "Szukaj zdjęć {countIcons} według nazwy", "headerLoading": "Szukaj obrazów według nazwy", - "noResults": "Brak ikon pasujących do \"{search}\".", - "error": "Nie udało się załadować ikon.", - "description": "Przeszukaj bibliotekę, wklej adres URL obrazu lub wgraj plik.", "clear": "Wyczyść obraz", "uploadImage": "Prześlij obraz", "results": "Wyniki wyszukiwania obrazów", @@ -1303,7 +1857,9 @@ "otherImages": "Inne obrazy", "urlLoading": "Sprawdzanie obrazu…", "urlReady": "Obraz jest gotowy do użycia", - "urlError": "Nie można załadować tego obrazu. Sprawdź adres URL i spróbuj ponownie." + "urlError": "Nie można załadować tego obrazu. Sprawdź adres URL i spróbuj ponownie.", + "noResults": "Brak ikon pasujących do \"{search}\".", + "error": "Nie udało się załadować ikon." }, "colorScheme": { "options": { @@ -1315,7 +1871,6 @@ "information": { "min": "Min", "max": "Maks", - "days": "Dni", "hours": "Godziny", "minutes": "Minuty" }, @@ -1352,16 +1907,16 @@ }, "userAvatar": { "menu": { - "switchToDarkMode": "Przełącz na tryb nocny", - "switchToLightMode": "Przełącz na tryb jasny", + "open": "Otwórz menu konta", "management": "Zarządzanie", - "docker": "Docker", "preferences": "Twoje preferencje", "logout": "Wyloguj się", "login": "Zaloguj się", "homeBoard": "Twoja tablica główna", - "loggedOut": "Wylogowano", - "updateAvailable": "Dostępne aktualizacje {countUpdates} : {tag}" + "updateAvailable": "Dostępne aktualizacje {countUpdates} : {tag}", + "assistant": "Asystent", + "assistantThinking": "Myślenie", + "modifier": "Mod" } }, "dangerZone": "Strefa zagrożenia", @@ -1409,13 +1964,66 @@ "kilometersPerHour": "km/h", "milesPerHour": "mph" } + }, + "widgetQuery": { + "loading": "Wczytywanie danych widżetu" + }, + "total": "Razem", + "filesystemUsage": "{count, plural, one {Pokaż użycie systemu plików #} other {Pokaż użycie # systemów plików}}", + "field": { + "name": "Nazwa zlecenia" + }, + "label": { + "new": "Nowa" + }, + "entity": { + "apps": "Aplikacje", + "boards": "Tablice", + "certificates": "Certyfikaty", + "customWidgets": "Niestandardowe Wigety", + "groups": "Grupy", + "integrations": "Integracje", + "invites": "Zaproszenia", + "logs": "Logi", + "media": "Multimedia", + "searchEngines": "Wyszukiwarki", + "tasks": "Zadania", + "users": "Użytkownicy" } }, "section": { - "dynamic": { + "option": { + "showLabel": { + "label": "Pokaż etykietę", + "description": "Wyświetlaj etykietę kontenera powyżej jej zawartości." + }, + "collapsible": { + "label": "Zezwól na zwinięcie", + "description": "Pozwól widzom rozwinąć i zwinąć ten kontener." + }, + "showOpenAll": { + "label": "Pokaż działanie \"wszystko otwarte\"", + "description": "Pokaż akcję, która otwiera każdą aplikację w tym kontenerze w nowych kartach." + }, + "scrollable": { + "label": "Przewijalny", + "description": "Trzymaj ten pojemnik w ustawionym rozmiarze i przewiń jego zawartość zamiast rosnąć, aby pasować do nich." + } + }, + "action": { + "openAllInNewTabsFor": "Otwórz wszystkie aplikacje w {name} w zakładkach" + }, + "openAllInNewTabs": { + "title": "Otwórz wszystkie w kartach", + "text": "Niektóre przeglądarki mogą blokować masowe otwieranie kart ze względów bezpieczeństwa. Homarr nie był w stanie otworzyć wszystkich okien, ponieważ Twoja przeglądarka zablokowała tę akcję. Proszę zezwolić na \"Otwórz wyskakujące okna\" i spróbować ponownie." + }, + "container": { + "untitled": "Kontener bez nazwy", "action": { - "create": "Nowa sekcja dynamiczna", - "remove": "Usuń sekcję dynamiczną" + "create": "Nowy kontener", + "remove": "Usuń kontener", + "expand": "Rozwiń", + "collapse": "Zwiń" }, "option": { "title": { @@ -1429,55 +2037,12 @@ } }, "remove": { - "title": "Usuń sekcję dynamiczną", - "message": "Czy na pewno chcesz usunąć tę sekcję dynamiczną? Elementy zostaną przeniesione w tej samej lokalizacji w sekcji nadrzędnej." - } - }, - "category": { - "field": { - "name": { - "label": "Nazwa" - } - }, - "action": { - "create": "Nowa kategoria", - "edit": "Zmień nazwę kategorii", - "remove": "Usuń kategorię", - "moveUp": "Przenieś w górę", - "moveDown": "Przenieś w dół", - "createAbove": "Nowa kategoria powyżej", - "createBelow": "Nowa kategoria poniżej", - "openAllInNewTabs": "Otwórz wszystkie w kartach" - }, - "create": { - "title": "Nowa kategoria", - "submit": "Dodaj kategorię" - }, - "remove": { - "title": "Usuń kategorię", - "message": "Czy na pewno chcesz usunąć kategorię {name}?" - }, - "edit": { - "title": "Zmień nazwę kategorii", - "submit": "Zmień nazwę kategorii" - }, - "menu": { - "label": { - "create": "Nowa kategoria", - "changePosition": "Zmiana pozycji", - "settings": "Ustawienia" - } - }, - "openAllInNewTabs": { - "title": "Otwórz wszystkie w kartach", - "text": "Niektóre przeglądarki mogą blokować masowe otwieranie kart ze względów bezpieczeństwa. Homarr nie był w stanie otworzyć wszystkich okien, ponieważ Twoja przeglądarka zablokowała tę akcję. Proszę zezwolić na \"Otwórz wyskakujące okna\" i spróbować ponownie." + "message": "Usunąć ten pojemnik? Jego zawartość przeniesie się do otaczającego obszaru." } } }, "item": { "action": { - "create": "Nowy element", - "import": "Importuj element", "edit": "Edytuj element", "moveResize": "Przenieś / zmień rozmiar element", "duplicate": "Duplikuj element", @@ -1486,7 +2051,7 @@ "menu": { "label": { "settings": "Ustawienia", - "refresh": "Odśwież", + "settingsFor": "Ustawienia dla {name}", "options": "Opcje", "actions": "Akcje" }, @@ -1495,21 +2060,96 @@ "error": "Błąd", "loading": "Ładowanie", "idle": "Bezczynny" + }, + "notification": { + "saveError": { + "title": "Nie można zapisać widżetu", + "message": "Zmiany widżetu zostały przywrócone" + } } }, "create": { "title": "Wybierz element do dodania", "search": "Filtrowanie elementów", - "addToBoard": "Dodaj do tablicy" + "addToBoard": "Dodaj do tablicy", + "addAtPosition": "Dodaj element tutaj", + "destination": { + "label": "Dodaj do", + "description": "Wybierz, gdzie powinien pojawić się widżet. Nadal możesz go przenieść później.", + "mainCanvas": "Główne płótno", + "leftRail": "Lewa szyna", + "rightRail": "Prawa szyna" + }, + "connectionStatus": { + "ready": "Gotowe", + "needsSetup": "Potrzebne ustawienia", + "noConnectionRequired": "Połączenie nie jest wymagane" + }, + "customWidget": "Niestandardowe API", + "standalone": "Zwykły", + "missingIntegration": { + "title": "Połącz najpierw usługę", + "noPermission": "Ten widżet wymaga kompatybilnego połączenia z usługą. Poproś administratora o połączenie, a następnie spróbuj ponownie." + }, + "notification": { + "success": { + "title": "Dodano widżet", + "message": "{name} został dodany do tego działu.", + "relocatedMessage": "{name} został dodany do {destination} , ponieważ wybrany cel był niedostępny." + }, + "error": { + "title": "Nie można dodać elementu", + "message": "Element nie może zostać dodany do tego działu" + } + } + }, + "selection": { + "summary": "{count, plural, one {# wybrany przedmiot} other {# wybrane przedmioty}}", + "selected": "{count, plural, one {# wybrany} other {# wybrany}}", + "copy": "Kopiuj", + "copied": "{count, plural, one {# element skopiowany do schowka} other {# elementy skopiowane do schowka}}", + "copyError": "Wybrane elementy nie mogą zostać skopiowane. Twoja przeglądarka może nie zezwolić na dostęp do schowka.", + "paste": "Wklej", + "pasteShortcut": "Wklej tutaj skopiowane elementy (Ctrl / + V)", + "pasted": "{count, plural, one {# przedmiot wklejony} other {# przedmiotów wklejonych}}", + "pasteError": "Nie można odczytać schowka. Twoja przeglądarka może nie zezwolić na dostęp do schowka.", + "pasteInvalid": "Schowek nie zawiera prawidłowych elementów tablicy Homarr.", + "pasteUnavailable": "Skopiowane elementy nie pasują do tego działu.", + "removed": "{count, plural, one {# przedmiot został usunięty} other {# przedmiotów usunięty}}", + "move": "Przenieś", + "moveTo": "Przenieś wybrane elementy", + "delete": "Usuń", + "clear": "Wyczyść zaznaczenie", + "clearShortcut": "Wyczyść zaznaczenie (Escape)", + "saveErrorTitle": "Nie można zaktualizować elementów", + "saveErrorMessage": "Zmiany nie mogły zostać zapisane. Dział został odświeżony.", + "moveUnavailableTitle": "Nie można przenieść zaznaczonych elementów", + "moveUnavailableMessage": "Miejsce docelowe nie ma wystarczającej ilości miejsca na cały wybór." }, "moveResize": { "title": "Przenieś / zmień rozmiar elementu", + "entryLabel": "{name}, kolumna {column}, wiersz {row}", + "target": { + "numbered": "{name}, cel {index}", + "located": "{name}, {location}, cel {index}" + }, + "keyboard": { + "instructions": "Naciśnij Enter, aby rozpocząć edycję klawiatury. Użyj klawiszy strzałek, aby poruszać, Shift plus klawisze strzałek, aby zmienić rozmiar i Escape aby zatrzymać.", + "started": "Edycja klawiatury rozpoczęta. Użyj klawiszy strzałek, aby się poruszać, Shift plus klawisze strzałek, aby zmienić rozmiar i Escape aby zatrzymać.", + "stopped": "Edycja klawiatury zatrzymana.", + "boundary": "Ta zmiana nie pasuje do niniejszej sekcji." + }, "field": { + "section": { + "label": "Przekrój lub szyna" + }, "width": { - "label": "Szerokość" + "label": "Szerokość", + "shortLabel": "Pr" }, "height": { - "label": "Wysokość" + "label": "Wysokość", + "shortLabel": "H" }, "xOffset": { "label": "Przesunięcie X" @@ -1523,18 +2163,36 @@ "title": "Edytuj element", "tab": { "widget": "Edytuj widget", - "app": "Edytuj aplikację" + "app": "Edytuj aplikację", + "integration": "Edytuj integrację" }, "app": { "propagationNotice": "Zmiany w tej aplikacji będą zastosowane wszędzie tam, gdzie jest używana spośród wszystkich Tablic." }, + "integration": { + "action": "Edytuj połączenie", + "description": "Przetestuj lub napraw wybrane połączenie bez opuszczania tego widżetu.", + "editLabel": "Edytuj integrację z {name}", + "fullAccessRequired": "Wymagany pełny dostęp", + "propagationNotice": "Zmiany w tej integracji mają zastosowanie wszędzie gdzie jest używany. Połączenie jest testowane przed zapisaniem.", + "loading": "Ładowanie integracji", + "loadError": "Nie można załadować integracji. Spróbuj ponownie przed zmianą ustawień połączenia." + }, + "preview": { + "integrationRequired": "Wybierz połączenie, aby wyświetlić ten widżet.", + "size": "Rozmiar pliku" + }, + "settings": { + "label": "Ustawienia widżetu" + }, "advancedOptions": { "label": "Ustawienia zaawansowane", "title": "Zaawansowane opcje elementu" }, "field": { "integrations": { - "label": "Integracje" + "label": "Integracje", + "removeLabel": "Usuń integrację {name}" }, "title": { "label": "Tytuł" @@ -1548,17 +2206,18 @@ } }, "remove": { - "title": "Usuń pozycję", "message": "Jesteś pewien, że chcesz usunąć ten element?" + }, + "advancedFocus": { + "open": "Otwórz widok zaawansowany", + "close": "Zamknij widok zaawansowany", + "label": "Widok zaawansowany {widget}" } }, "widget": { "integrationSelect": { "configureIntegrationFirst": "Najpierw połącz integrację", - "loading": "Ładowanie...", - "placeholder": "Wybierz opcję", - "noResults": "Nie znaleziono żadnych wyników", - "loadError": "Nie udało się załadować opcji" + "placeholder": "Wybierz opcję" }, "app": { "name": "Aplikacja", @@ -1567,9 +2226,6 @@ "appId": { "label": "Wybierz aplikację" }, - "openInNewTab": { - "label": "Otwórz w nowej karcie" - }, "showTitle": { "label": "Pokaż nazwę aplikacji" }, @@ -1577,11 +2233,8 @@ "label": "Włącz sprawdzanie statusu" }, "layout": { - "label": "Układ", "option": { - "row": "Poziomy", "row-reverse": "Poziomy (odwrócony)", - "column": "Pionowy", "column-reverse": "Pionowy (odwrócony)" } }, @@ -1606,23 +2259,60 @@ "name": "Zakładki", "description": "Wyświetla wiele linków do aplikacji", "option": { - "title": { - "label": "Tytuł" + "showTitle": { + "label": "Pokaż tytuł widżetu" + }, + "titleSize": { + "label": "Rozmiar tytułu widżetu (px)" }, "layout": { "label": "Układ", "option": { - "row": { - "label": "Poziomy" - }, - "column": { - "label": "Pionowy" - }, - "grid": { - "label": "Siatka" + "adaptive": { + "label": "Adaptacyjny" }, "gridHorizontal": { "label": "Siatka pozioma" + }, + "icons": { + "label": "Ikony" + } + } + }, + "variant": { + "label": "Wygląd", + "option": { + "soft": { + "label": "Miękki" + }, + "filled": { + "label": "Wypełnione" + }, + "outline": { + "label": "Obrys" + }, + "plain": { + "label": "Zwykłe" + } + } + }, + "spacing": { + "label": "Odstęp między kartami", + "option": { + "xs": { + "label": "Bardzo mały" + }, + "sm": { + "label": "Mały" + }, + "md": { + "label": "Średni" + }, + "lg": { + "label": "Duży" + }, + "xl": { + "label": "Bardzo duży" } } }, @@ -1635,17 +2325,28 @@ "hideHostname": { "label": "Ukryj nazwy hostów" }, - "openNewTab": { - "label": "Otwórz w nowej karcie" - }, "withBorder": { "label": "Pokaż obramowanie" }, + "grow": { + "label": "Rozwiń karty do wypełnienia wiersza" + }, + "customUrls": { + "label": "Własne linki" + }, "items": { "label": "Zakładki", - "add": "Dodaj zakładkę" + "remove": "Usuń zakładkę", + "apps": { + "label": "Dodaj zakładki", + "description": "Wklej adresy URL lub znajdź istniejące aplikacje. Przeciągnij zakładki poniżej, aby zmienić ich kolejność.", + "placeholder": "Wklej adresy URL lub wyszukaj aplikacje", + "addUrl": "Dodaj ten URL", + "hint": "Naciśnij Enter, aby dodać adres URL. Wklej adresy URL oddzielone przecinkami lub pojedynczą linią, aby dodać kilka adresów." + } } - } + }, + "empty": "Dodaj adres URL lub aplikację w ustawieniach widżetu" }, "archiveTeamWarrior": { "name": "ArchiveTeam Warrior", @@ -1654,33 +2355,61 @@ "showBroadcastMessage": { "label": "Pokaż wiadomości nadawcze" } + }, + "noProjectSelected": "Nie wybrano projektu", + "runnerStatus": "Robotnik: {status}", + "projectId": "Projekt: {id}", + "sessionReceived": "Otrzymano sesję: {value}", + "sessionSent": "Sesja wysłana: {value}", + "sessionId": "Sesja: {id}", + "startedAt": "Rozpoczęto {date}", + "emptyItems": "Brak aktywnych lub ostatnich ofert pracy w tym zrzucie ekranu", + "metric": { + "running": "Uruchomione", + "completed": "Gotowe", + "failed": "Niepowodzenie", + "canceled": "Anulowane", + "download": "Pobieranie", + "upload": "Wysyłanie" + }, + "status": { + "running": "Uruchomione", + "completed": "Ukończony", + "failed": "Niepowodzenie", + "canceled": "Anulowane", + "stopped": "Zatrzymano", + "idle": "Bezczynny", + "unknown": "Nieznany" + } + }, + "wud": { + "name": "What's Up Docker", + "description": "Pokaż, ile oglądanych kontenerów ma dostępne aktualizacje.", + "title": "What's Up Docker", + "monitored": "Monitorowane", + "updatesAvailable": "{count, plural, one {# dostępna aktualizacja} other {# dostępne aktualizacje}}", + "updateAvailable": "Dostępna aktualizacja", + "openReleaseNotes": "Otwórz notatki o wydaniu", + "option": { + "showRing": { + "label": "Pokaż pierścień aktualizacji" + }, + "showUpdateList": { + "label": "Pokaż listę aktualizacji kontenera", + "description": "Wymienia każdy monitorowany kontener z dostępną aktualizacją obrazu" + } } }, "dnsHoleSummary": { "name": "Podsumowanie DNS Hole", "description": "Wyświetla podsumowanie Twojego DNS Hole", "option": { - "layout": { - "label": "Układ", - "option": { - "row": { - "label": "Poziomy" - }, - "column": { - "label": "Pionowy" - }, - "grid": { - "label": "Siatka" - } - } - }, "usePiHoleColors": { "label": "Użyj kolorów Pi-Hole" } }, "error": { - "internalServerError": "Nie udało się pobrać podsumowanie DNS Hole", - "integrationsDisconnected": "Brak dostępnych danych, wszystkie integracje odłączone" + "internalServerError": "Nie udało się pobrać podsumowanie DNS Hole" }, "data": { "adsBlockedToday": "Zablokowane dzisiaj", @@ -1688,32 +2417,24 @@ "dnsQueriesToday": "Zapytania dzisiaj", "domainsBeingBlocked": "Domeny na liście blokowanych" }, - "domainsTooltip": "Ze względu na wiele integracji, Homarr nie może obliczyć dokładnej liczby zablokowanych domen" + "domainsTooltip": "Ze względu na wiele integracji, Homarr nie może obliczyć dokładnej liczby zablokowanych domen", + "status": { + "enabled": "Aktywny", + "disabled": "Nieaktywny", + "unknown": "Nieznany" + } }, "dnsHoleControls": { "name": "Kontrola DNS Hole", "description": "Kontroluj PiHole lub AdGuard ze swojego pulpitu", "option": { - "layout": { - "label": "Układ", - "option": { - "row": { - "label": "Poziomy" - }, - "column": { - "label": "Pionowy" - }, - "grid": { - "label": "Siatka" - } - } - }, "showToggleAllButtons": { "label": "Pokaż przyciski „przełącz wszystkie\"" } }, "error": { - "internalServerError": "Nie udało się kontrolować funkcji DNS Hole" + "internalServerError": "Nie udało się kontrolować funkcji DNS Hole", + "bulkActionsFailed": "{count, plural, one {# akcja nie powiodła się} other {# akcji nie powiodło się}}" }, "controls": { "enableAll": "Włącz wszystkie", @@ -1724,8 +2445,6 @@ "disabled": "Wyłączony", "processing": "Przetwarzanie", "disconnected": "Rozłączono", - "hours": "Godziny", - "minutes": "Minuty", "unlimited": "Pozostaw puste do nieograniczonej" } }, @@ -1737,16 +2456,10 @@ "label": "Niestandardowe wyświetlanie tytułu/miasta", "description": "Pokaż własny tytuł lub nazwę miasta/kraju na górze zegara." }, - "customTitle": { - "label": "Tytuł" - }, "is24HourFormat": { "label": "Format 24-godzinny", "description": "Użyj 24-godzinnego formatu zamiast 12-godzinnego" }, - "showSeconds": { - "label": "Wyświetlaj sekundy" - }, "useCustomTimezone": { "label": "Użyj stałej strefy czasowej" }, @@ -1765,29 +2478,295 @@ "label": "Własny format czasu", "description": "Użyj ISO 8601 do formatu czasu (spowoduje nadpisanie innych opcji)" }, - "customDateFormat": { - "label": "Niestandardowy format daty", - "description": "Użyj ISO 8601 do formatu daty (spowoduje to nadpisanie innych opcji)" - }, "showWeather": { "label": "Pokaż pogodę", "description": "Wyświetl małą animowaną ikonę pogody i temperaturę w rogu karty" }, - "weatherLocation": { - "label": "Lokalizacja pogody" - }, "isWeatherFormatFahrenheit": { "label": "Użyj Fahrenheita" + }, + "animateWeatherIcon": { + "label": "Animuj ikonę pogody", + "description": "Animuj ikonę pogody. Domyślnie wyłączone i zawsze wyłączone, gdy żądane jest zmniejszenie ruchu." + }, + "colorWeatherByDayNight": { + "label": "Kolorowa pogoda na dzień/noc", + "description": "Odśwież ikonę pogody i temperaturę kolorem dziennym lub nocnym, w zależności od tego, czy jest dzień czy noc w wybranej lokalizacji." + }, + "dayWeatherColor": { + "label": "Kolor dnia" + }, + "nightWeatherColor": { + "label": "Kolor nocy" + }, + "worldClockCities": { + "label": "Miasta zegara światowego", + "description": "Dodaj i uporządkuj do sześciu miast, aby uzyskać zaawansowany widok." } + }, + "timezoneList": { + "timezone": "Strefa czasowa", + "cityLabel": "Etykieta miasta", + "searchPlaceholder": "Szukaj stref czasowych", + "noResults": "Nie znaleziono stref czasowych", + "unsupportedOption": "Nieobsługiwane: {timeZone}", + "add": "Dodaj miasto", + "remove": "Usuń {city}", + "reorder": "Zmień kolejność {city}", + "limit": "{count} z {maximum} miast skonfigurowanych" + }, + "worldClock": { + "primary": "Zegar główny", + "local": "Czas lokalny", + "today": "Dzisiaj", + "tomorrow": "Jutro", + "yesterday": "Wczoraj", + "noSecondaryCities": "Dodaj miasta w opcjach widżetu do porównania ich tutaj.", + "unsupportedPrimaryTitle": "Podstawowa strefa czasowa jest niedostępna", + "unsupportedPrimary": "{timeZone} nie jest obsługiwany w tej przeglądarce. Wyświetlanie UTC jako wyraźnie zaznaczonego spadku.", + "unsupportedTimeZone": "Nieobsługiwana strefa czasowa: {timeZone}", + "accessibleTime": "{city}: {time}, {date}, {timeZone}", + "advancedLabel": "Zaawansowany zegar świata", + "cities": "Zegary światowe", + "cityCount": "{count} timezones", + "timeBarLabel": "24-godzinny czas dnia dla {city}", + "dayProgress": "{percent}% upłynęło · {hours}h {minutes}m pozostało", + "phaseLegend": "Legenda z godziny dnia", + "tick": { + "midnight": "00", + "morning": "06", + "noon": "12", + "evening": "18", + "end": "24" + }, + "phaseRange": { + "night": "00–05 · 21–24", + "dawn": "05–08", + "day": "08–18", + "dusk": "18–21" + }, + "phase": { + "night": "Noc", + "dawn": "Ścieżka", + "day": "Dzień", + "dusk": "Zupa" + } + } + }, + "airQuality": { + "name": "Jakość powietrza i UV", + "description": "Wyświetla jakość powietrza, wskaźnik ultrafioletowy, zanieczyszczenia i pyłek w danej lokalizacji.", + "option": { + "location": { + "label": "Lokalizacja jakości powietrza" + }, + "aqiStandard": { + "label": "Standard AQI", + "options": { + "auto": "Automatyczne dla ustawień regionalnych", + "european": "Europejska AQI", + "us": "AQI USA" + } + }, + "showUv": { + "label": "Pokaż indeks UV" + }, + "showPollutants": { + "label": "Pokaż stężenia zanieczyszczeń" + }, + "showPollen": { + "label": "Pokaż stężenie pyłku" + } + }, + "category": { + "good": "Dobry", + "fair": "Uczciwe", + "moderate": "Umiarkowane", + "unhealthySensitive": "Niezdrowe dla wrażliwych grup", + "unhealthy": "Zły", + "poor": "Źle", + "veryPoor": "Bardzo słabe", + "veryUnhealthy": "Bardzo niezdrowe", + "extremelyPoor": "Ekstremalnie słabe", + "hazardous": "Niebezpieczne", + "unknown": "Brak czytania AQI" + }, + "uv": { + "label": "Indeks UV", + "category": { + "low": "Niski", + "moderate": "Umiarkowane", + "high": "Wysoka", + "veryHigh": "Bardzo wysoka", + "extreme": "Ekstremalne", + "unknown": "Brak czytania" + } + }, + "dominantPollutant": "Dominant pollutant", + "aqiLabel": "AQI", + "strongestPollen": "Najwyższy pyłek", + "unit": { + "concentration": "{value} μg/m3", + "pollen": "{value} ziarna/m3" + }, + "pollutant": { + "pm2_5": "PM2,5", + "pm10": "PM10", + "ozone": "Ozon", + "nitrogenDioxide": "Dwutlenek azotu", + "sulphurDioxide": "Sulphur dioxide", + "carbonMonoxide": "Tlenek węgla" + }, + "pollen": { + "alder": "Alder", + "birch": "Brzozowy", + "grass": "Trawa", + "mugwort": "Bakłażan", + "olive": "Oliwki", + "ragweed": "Wściekły" + }, + "compact": { + "sixHourTrend": "Tendencja AQI na najbliższe sześć godzin" + }, + "advanced": { + "observedAt": "Zaktualizowano w {time}", + "next24Hours": "Następne 24 godziny", + "pollutants": "Stężenia zanieczyszczeń", + "pollen": "Stężenie pyłu", + "sevenDayForecast": "Maksymalna prognoza na 7 dni", + "aqiValue": "AQI {value}", + "uvValue": "UV {value}", + "uvShort": "UV {value}", + "noForecast": "Brak dostępnych danych prognoz" + } + }, + "countdown": { + "name": "Liczniki", + "description": "Śledź nadchodzące wydarzenia i powtarzające się rocznice.", + "option": { + "events": { + "label": "Zdarzenia", + "description": "Dodaj i zamów do 20 jednorazowych lub rocznych liczników. Daty są wprowadzane w wybranej strefie czasowej." + }, + "showProgress": { + "label": "Pokaż postęp" + }, + "showSeconds": { + "label": "Pokaż sekundy", + "description": "Pozostaw sekundy widoczne dla każdego nadchodzącego wydarzenia." + } + }, + "dateTimeEventList": { + "newEvent": "Nowe wydarzenie", + "add": "Dodaj wydarzenie", + "remove": "Usuń {event}", + "reorder": "Zmień kolejność {event}", + "eventLabel": "Etykieta wydarzenia", + "timezone": "Strefa czasowa", + "unsupportedOption": "Nieobsługiwane: {timeZone}", + "recurrence": "Powtarza", + "recurrenceOption": { + "none": "Nie powtarza się", + "yearly": "Co roku" + }, + "target": "Data i godzina zdarzenia", + "trackProgress": "Śledź postęp od daty rozpoczęcia", + "start": "Data i godzina rozpoczęcia postępu", + "confirmDateTime": "Potwierdź datę i godzinę", + "limit": "{count} z {maximum} skonfigurowanych wydarzeń" + }, + "empty": { + "title": "Brak liczników", + "description": "Dodaj zdarzenie w opcjach widżetu aby zacząć liczenie w dół." + }, + "completed": "Ukończony", + "yearly": "Rocznie", + "progress": "Postęp wydarzenia", + "upcoming": "Nadchodzące", + "completedEvents": "Zakończone wydarzenia", + "invalid": { + "title": "Niektóre wydarzenia nie mogą być wyświetlane", + "description": "{count, plural, one {Jedno zdarzenie ma nieprawidłową datę lub nieobsługiwaną strefę czasową.} other {# zdarzenia mają nieprawidłową datę lub nieobsługiwaną strefę czasową.}}", + "value": "Unavailable" + }, + "alert": { + "notifications": "Powiadomienia przeglądarki", + "permissionDenied": "Powiadomienia są zablokowane w tej przeglądarce.", + "reached": "Odliczanie osiągnęło swój cel." + } + }, + "timer": { + "name": "Timer / Pomodoro", + "description": "Uruchamia prosty zegar lub konfigurowalną sekwencję Pomodoro.", + "option": { + "mode": { + "label": "Tryb", + "options": { + "timer": "Timer", + "pomodoro": "Pomodoro" + } + }, + "timerMinutes": { + "label": "Minuty timera" + }, + "focusMinutes": { + "label": "Przejdź do minut" + }, + "shortBreakMinutes": { + "label": "Krótkie minuty przerwy" + }, + "longBreakMinutes": { + "label": "Minuty długiej przerwy" + }, + "sessionsBeforeLongBreak": { + "label": "Skoncentruj sesje przed długą przerwą" + }, + "autoStartBreaks": { + "label": "Automatycznie uruchom przerwy" + }, + "autoStartFocus": { + "label": "Automatycznie uruchom sesje ostrości" + } + }, + "phase": { + "timer": "Timer", + "focus": "Skupienie się", + "shortBreak": "Krótka przerwa", + "longBreak": "Długa przerwa" + }, + "action": { + "start": "Uruchom", + "pause": "Wstrzymaj", + "reset": "Reset" + }, + "attention": { + "timerComplete": "Timer complete", + "phaseReady": "{phase} gotowy" + }, + "progress": "Postęp timera: {progress}%", + "compact": { + "completedFocus": "{count, plural, =0 {Nie ukończono żadnych sesji skupienia} one {# sesja ogniskowa zakończona} other {# sesje ogniskowe zakończono}}" + }, + "alert": { + "title": "Timer complete", + "completed": "Ukończono {phase}." + }, + "advanced": { + "sequence": "Pomodoro sequence", + "focusSession": "Skupienie {session}", + "settings": "Stałe ustawienia", + "settingsHint": "Użyj menu kontekstowego widżetu do edycji tych ustawień.", + "localAlerts": "Lokalne alerty", + "notifications": "Powiadomienia przeglądarki", + "sound": "Dźwięki timera", + "localAlertsHint": "Dźwięki timera są domyślnie włączone. Dźwięki i powiadomienia dotyczą tylko tego widżetu w tej przeglądarce.", + "notificationsDenied": "Powiadomienia są zablokowane w tej przeglądarce." } }, "minecraftServerStatus": { "name": "Status serwera Minecraft", "description": "Wyświetla status serwera Minecraft", "option": { - "title": { - "label": "Tytuł" - }, "domain": { "label": "Adres serwera" }, @@ -1807,11 +2786,21 @@ "noStation": "Nie wybrano stacji", "option": { "baseUrl": { - "label": "Szukaj adresu URL" + "label": "Szukaj adresu URL", + "description": "Niestandardowe adresy URL muszą rozwiązywać publiczny adres IP. Prywatne i lokalne hosty są odrzucane." }, "station": { - "label": "Stacja" + "label": "Stacja", + "placeholder": "Szukaj stacji" } + }, + "error": { + "customSourceUnavailable": "Źródło rozkładu jazdy jest niedostępne. Sprawdź, czy jego adres URL rozwiązuje się na publiczny adres IP.", + "stationSearch": "Nie można wyszukać stacji. Sprawdź niestandardowy adres URL i dostęp do działu." + }, + "warning": { + "stale": "Nie można odświeżyć harmonogramu. Wyświetlanie odjazdów zaktualizowanych w {time}.", + "staleCompact": "Nieaktualne dane" } }, "notebook": { @@ -1843,6 +2832,9 @@ "directionRtl": "Ustaw kierunek tekstu od prawej do lewej", "blockquote": "Cytat", "horizontalLine": "Linia pozioma", + "details": "Przełącz sekcję zwijaną", + "expandDetails": "Rozwiń sekcję zwijaną", + "collapseDetails": "Zwiń sekcję zwijaną", "bulletList": "Lista punktowana", "orderedList": "Lista numerowana", "checkList": "Lista kontrolna", @@ -1851,16 +2843,20 @@ "link": "Odnośnik", "unlink": "Usuń odnośnik", "image": "Osadź obraz", - "addTable": "Dodaj tabelę", + "insertTable": "Wstaw tabelę", + "insertTableSize": "Wstaw tabelę {columns} × {rows}", "deleteTable": "Usuń tabelę", "colorCell": "Kolor Komórki", - "mergeCell": "Przełączanie scalania komórek", + "mergeCells": "Scal komórki", + "splitCell": "Podziel komórkę", "addColumnLeft": "Dodaj kolumnę przed", "addColumnRight": "Dodaj kolumnę po", "deleteColumn": "Usuń kolumnę", "addRowTop": "Dodaj wiersz przed", "addRowBelow": "Dodaj wiersz po", - "deleteRow": "Usuń wiersz" + "deleteRow": "Usuń wiersz", + "toggleHeaderRow": "Przełącz wiersz nagłówka", + "toggleHeaderColumn": "Przełącz kolumnę nagłówka" }, "align": { "left": "Lewo", @@ -1871,8 +2867,6 @@ "clearColor": "Usuń kolor", "source": "Źródło", "widthPlaceholder": "Wartość w % lub pikselach", - "columns": "Kolumny", - "rows": "Wiersze", "width": "Szerokość", "height": "Wysokość" }, @@ -1884,7 +2878,9 @@ "discard": "Odrzuć zmiany", "keepEditing": "Kontynuuj edycję" } - } + }, + "saveFailed": "Nie można zapisać notatki", + "documentStats": "{words, plural, one {# słowo} other {# słowa}} · {characters, plural, one {# znaków} other {# znaków}}" }, "anchorNote": { "name": "Notatka z Anchor", @@ -1893,9 +2889,6 @@ "noteId": { "label": "Notatka" }, - "showTitle": { - "label": "Pokaż tytuł" - }, "showUpdatedAt": { "label": "Pokaż ostatnią aktualizację" } @@ -1905,14 +2898,20 @@ "notFound": "Nie znaleziono notatki", "noNotes": "Nie znaleziono notatek", "integrationRequired": "Najpierw wybierz integrację z Anchor", - "updatedAt": "Zaktualizowano {date}", "untitled": "Bez tytułu", - "edit": "Edytuj", - "save": "Zapisz", - "cancel": "Anuluj", "readOnlyViewer": "Masz dostęp tylko do odczytu tej notatki. Edycja jest wyłączona.", "saveForbidden": "Nie masz uprawnień do edycji tej notatki.", - "saveFailed": "Nie udało się zapisać tej notatki. Spróbuj ponownie." + "saveFailed": "Nie udało się zapisać tej notatki. Spróbuj ponownie.", + "createdAt": "Utworzono {date}", + "permission": { + "owner": "Właściciel", + "editor": "Edytor", + "viewer": "Przeglądarka" + }, + "status": { + "pinned": "Przypięte", + "archived": "Archiwalny" + } }, "iframe": { "name": "iFrame", @@ -1971,6 +2970,25 @@ "clickable": { "label": "Element klikalny" } + }, + "state": { + "on": "Włączone", + "off": "Wyłączony", + "unavailable": "Unavailable", + "unknown": "Nieznany" + }, + "advanced": { + "entityId": "ID jednostki: {id}", + "lastChanged": "Zmieniono {date}", + "attribute": { + "unit": "Jednostka", + "deviceClass": "Klasa urządzenia", + "icon": "Ikona" + } + }, + "error": { + "loadFailed": "Nie można załadować obiektu", + "toggleFailed": "Nie można zaktualizować obiektu" } }, "smartHome-executeAutomation": { @@ -1986,11 +3004,31 @@ }, "spotlightAction": { "run": "Uruchom {name}" + }, + "advanced": { + "lastExecuted": "Ostatnio uruchomione w {time}", + "automationId": "ID automatyzacji: {id}", + "ready": "Gotowy do uruchomienia", + "noPermission": "Brak uprawnień do uruchomienia tej automatyzacji" + }, + "status": { + "running": "Uruchamianie automatyzacji", + "success": "Automatyzacja zakończona" + }, + "error": { + "executeFailed": "Nie można uruchomić automatyzacji" } }, "stockPrice": { "name": "Cena akcji", "description": "Wyświetla aktualną cenę akcji firmy", + "advanced": { + "currentPrice": "Aktualna cena", + "previousClose": "Poprzednie zamknięcie", + "changePercentage": "Zmiana (%)", + "minimum": "Minimalny", + "maximum": "Maksymalnie" + }, "option": { "stock": { "label": "Symbol akcji" @@ -2061,6 +3099,10 @@ "label": "1 Miesiąc" } } + }, + "showDetails": { + "label": "Pokaż szczegóły", + "description": "Pokaż nazwę, zmianę i zakres czasowy w widoku kompaktowym. Wyłącz tylko dla symbolu i ceny." } } }, @@ -2088,6 +3130,13 @@ "showUnmonitored": { "label": "Pokaż niemonitorowane" } + }, + "advanced": { + "previousMonth": "Pokaż poprzedni miesiąc", + "nextMonth": "Pokaż następny miesiąc", + "eventCount": "{count, plural, one {# wydarzenie} other {# wydarzeń}}", + "loading": "Ładowanie wydarzeń kalendarza...", + "noEvents": "Brak wydarzeń w tym miesiącu" } }, "weather": { @@ -2100,16 +3149,18 @@ "disableTemperatureDecimals": { "label": "Wyłącz dziesiętne wartości temperatury" }, + "animateIcons": { + "label": "Animuj ikony pogody" + }, + "showHumidity": { + "label": "Pokaż wilgotność" + }, "showCurrentWindSpeed": { - "label": "Pokaż aktualną prędkość wiatru", - "description": "Tylko dla bieżącej pogody" + "label": "Pokaż aktualną prędkość wiatru" }, "useImperialSpeed": { "label": "Użyj mph dla prędkości wiatru" }, - "location": { - "label": "Lokalizacja pogody" - }, "showCity": { "label": "Pokaż miasto" }, @@ -2119,13 +3170,10 @@ "forecastDayCount": { "label": "Liczba dni prognozy", "description": "Kiedy widżet nie jest wystarczająco szeroki, mniej dni jest wyświetlane" - }, - "dateFormat": { - "label": "Format daty", - "description": "Jak powinna wyglądać data" } }, "currentWindSpeed": "{currentWindSpeed} {unit}", + "disabled": "Dane pogodowe są niedostępne, ponieważ połączenia wychodzące są wyłączone", "dailyForecast": { "sunrise": "Wschód słońca", "sunset": "Zachód słońca", @@ -2148,6 +3196,47 @@ "thunderstorm": "Burza", "thunderstormWithHail": "Burza z gradem", "unknown": "Nieznany" + }, + "details": "Pokaż szczegóły pogody", + "detailsFor": "Pokaż szczegóły pogody dla {date}", + "advanced": { + "forecast": "7-dniowa prognoza", + "hourlyForecast": "Następne 24 godziny", + "day": "Dzień", + "time": "Czas", + "conditions": "Warunki", + "temperature": "Temperatura", + "feelsLike": "Czuje się jak {temperature}", + "feelsLikeLabel": "Czują się jak", + "feelsLikeRange": "Czują się jako: {maximum} / {minimum}", + "highLow": "Wysoka {maximum} · niska {minimum}", + "observedAt": "Zaktualizowano w {time}", + "humidity": "Wilgotność", + "averageHumidity": "Średnia wilgotność: {humidity}%", + "currentHumidity": "Obecna wilgotność", + "wind": "Wiatr / Pusty ({unit})", + "currentWind": "Bieżący wiatr / podpórki", + "windValue": "{speed} / {gusts} {unit}", + "windDetail": "Maksymalny wiatr / bandy: {speed} / {gusts} {unit}", + "nextHourPrecipitation": "Opady w następnej godzinie", + "precipitationChance": "Szansa na opady", + "precipitationValue": "{probability}% · {amount} mm", + "precipitationDetail": "Wytrącanie: {probability}% · {amount} mm", + "todayUv": "Dzisiejszy maksymalny indeks UV", + "uvIndex": "Maksymalny indeks UV: {value}", + "daylight": "Światło dzienne: {duration}", + "hourlyTooltip": "Czuje się jak {feelsLike}{temperatureUnit} · {amount} mm · {humidity}% wilgotność · {speed} {speedUnit} wiatr", + "hourlyTooltipWithoutHumidity": "Czuje się jak {feelsLike}{temperatureUnit} · {amount} mm · {speed} {speedUnit} wiatr", + "detailLabel": { + "feelsLike": "Czują się jak", + "precipitation": "Opady", + "humidity": "Średnia wilgotność", + "wind": "Maksymalny wiatr / podpórki", + "uv": "Maksymalny indeks UV", + "daylight": "Daylight" + }, + "sun": "Wschód / Zachód słońca", + "noForecast": "Brak dostępnych danych prognoz" } }, "indexerManager": { @@ -2160,8 +3249,15 @@ }, "title": "Menedżer indeksów", "testAll": "Przetestuj wszystkie", + "status": { + "healthy": "Dobry", + "unhealthy": "Zły", + "disabled": "Nieaktywny", + "unknown": "Zdrowie niedostępne" + }, "error": { - "internalServerError": "Nie udało się pobrać statusu indeksów" + "internalServerError": "Nie udało się pobrać statusu indeksów", + "testAll": "Test indeksatora nie powiódł się. Spróbuj ponownie." } }, "healthMonitoring": { @@ -2190,11 +3286,6 @@ "fileSystem": { "label": "Pokaż informacje o systemie plików" }, - "visibleStorageVolumes": { - "label": "Widoczne woluminy pamięci", - "description": "Dostępne tylko gdy wszystkie wybrane integracje to Synology. Pozostaw puste, aby wyświetlić wszystkie wykryte woluminy pamięci.", - "placeholder": "Wybierz woluminy pamięci" - }, "defaultTab": { "label": "Domyślna karta" }, @@ -2217,17 +3308,27 @@ "minutes": "{count} minut", "used": "Używane", "available": "Dostępne", - "lastSeen": "Ostatnia aktualizacja statusu: {lastSeen}" + "lastSeen": "Ostatnia aktualizacja statusu: {lastSeen}", + "updatesAvailable": "{count, plural, one {# dostępna aktualizacja} other {# dostępne aktualizacje}}", + "rebootRequired": "Wymagane ponowne uruchomienie", + "rebootNotRequired": "Nie jest wymagane ponowne uruchomienie" + }, + "smartStatus": { + "attributesWithinThresholds": "SMART: atrybuty mieszczące się w progach", + "attributesFailed": "SMART: {attributes} nie powiodło się", + "noCriticalWarning": "SMART: brak ostrzeżeń zgłoszonych przez SSD", + "criticalWarning": "SMART: ostrzeżenie krytyczne zgłoszone przez SSD" + }, + "gauge": { + "cpuUsage": "Użycie CPU", + "cpuTemperature": "Temperatura procesora", + "memoryUsage": "Użycie pamięci", + "gpuUsage": "Użycie {name} GPU" }, - "memory": {}, "error": { "internalServerError": "Nie udało się pobrać stanu zdrowia" }, "cluster": { - "summary": { - "cpu": "CPU", - "memory": "RAM" - }, "resource": { "node": { "name": "Węzły" @@ -2263,8 +3364,6 @@ "table": { "header": { "name": "Nazwa", - "cpu": "CPU", - "memory": "RAM", "node": "Węzeł" } } @@ -2274,33 +3373,29 @@ "name": "Statystyki Dockera", "description": "Statystyki Twoich kontenerów (ten widżet można dodać tylko z uprawnieniami administratora)", "option": { - "columns": { - "label": "Kolumny do pokazania" + "endpointIds": { + "label": "Środowisko dokujące", + "description": "Pozostaw puste, aby pokazać kontenery z każdego środowiska dokującego", + "placeholder": "Wszystkie środowiska dokujące" }, - "enableRowSorting": { - "label": "Włącz sortowanie elementów" + "containerFilter": { + "label": "Pojemniki do filtrowania" + }, + "filterIsWhitelist": { + "label": "Filtruj jako białą listę" }, "defaultSort": { - "label": "👉 Kolumna używana domyślnie do sortowania", "option": { "name": "Nazwa", "state": "Stan", "cpuUsage": "Użycie CPU", "memoryUsage": "Użycie pamięci" } - }, - "descendingDefaultSort": { - "label": "Odwróć sortowanie" - }, - "columnOrder": { - "label": "Kolejność kolumn" - }, - "columnWidths": { - "label": "Szerokości kolumn" } }, "error": { "internalServerError": "Nie udało się pobrać statystyk kontenerów", + "endpointsUnavailable": "Punkty końcowe dokowania są niedostępne", "layoutSaveTitle": "Nie zapisano układu tabeli", "layoutSaveMessage": "Nie można zapisać układu tabeli Dockera. Spróbuj ponownie przesunąć lub zmienić rozmiar kolumny." }, @@ -2309,7 +3404,6 @@ } }, "coolify": { - "name": "Coolify", "description": "Przegląd instancji Coolify z serwerami i aplikacjami", "option": { "showServers": { @@ -2335,17 +3429,49 @@ "internalServerError": "Nie udało się pobrać danych z Coolify" }, "server": { - "buildServer": "Build" + "buildServer": "Build", + "resourceCounts": "{applications, plural, one {# aplikacja} other {# aplikacje}} / {services, plural, one {# usługa} other {# usługi}}", + "reachability": "Osiągalność", + "usability": "Użyteczność" + }, + "source": { + "url": "Źródło: {url}", + "unavailable": "{source}: unavailable" }, "instances": { "title": "Instancje" + }, + "action": { + "openResource": "Otwórz {name}", + "openLogs": "Otwórz dzienniki {name}", + "showIp": "Pokaż adres IP", + "hideIp": "Ukryj adres IP" + }, + "status": { + "running": "Uruchomione", + "stopped": "Zatrzymano", + "exited": "Zakończony", + "starting": "Rozpoczęcie", + "restarting": "Restartowanie", + "unknown": "Nieznany", + "online": "Online", + "offline": "Niedostępny", + "reachable": "Osiągalny", + "unreachable": "Nieosiągalny", + "usable": "Użyteczne", + "unusable": "Nieużyteczny" } }, "vpn": { "name": "VPN", "description": "Przegląd Twoich połączeń VPN", "serviceUnavailable": "VPN niedostępny", - "option": {} + "status": { + "running": "Uruchomione", + "notRunning": "Nieuruchomiony", + "unavailable": "Unavailable", + "vpn": "VPN: {status}" + } }, "ups": { "name": "UPS", @@ -2372,14 +3498,19 @@ "runtime": "Czas pracy", "load": "Załaduj", "input": "Input", - "output": "Output" + "output": "Output", + "batteryVoltage": "Napięcie baterii", + "power": "Moc", + "temperature": "Temperatura", + "manufacturer": "Wytwórca", + "model": "Wzór", + "serial": "Seryjny" }, "error": { "internalServerError": "Nie udało się pobrać danych z UPS" } }, "tracearr": { - "name": "Tracearr", "description": "Rozszerzone monitorowanie serwera multimediów z szczegółowymi danymi o strumieniach i transkodowaniu", "option": { "showStreams": { @@ -2467,10 +3598,7 @@ "label": "Zdarzenie", "description": "Pokaż wszystkie wystąpienia określonego zdarzenia", "placeholder": "Wybierz zdarzenie", - "loading": "Ładowanie zdarzeń...", - "noEvents": "Nie znaleziono zdarzeń", - "none": "Brak zdarzeń", - "configureWebsiteFirst": "Wybierz stronę aby załadować zdarzenia" + "none": "Brak zdarzeń" }, "chartType": { "label": "Typ wykresu", @@ -2501,26 +3629,21 @@ "eventNames": { "label": "Zdarzenia", "description": "Wybierz jedno lub więcej zdarzeń do wykresu", - "placeholder": "Wybierz zdarzenie...", - "loading": "Ładowanie zdarzeń...", - "noEvents": "Nie znaleziono zdarzeń", - "configureWebsiteFirst": "Wybierz stronę aby załadować zdarzenia" + "placeholder": "Wybierz zdarzenie..." }, "topCount": { "label": "Elementy do wyświetlenia", "description": "Liczba górnych elementów do wyświetlenia (maks. 500)" + }, + "events": { + "loading": "Ładowanie zdarzeń...", + "noEvents": "Nie znaleziono zdarzeń", + "configureWebsiteFirst": "Wybierz stronę aby załadować zdarzenia" } }, "event": { - "occurrences": "zdarzenia", "label": "zdarzenia" }, - "topPages": { - "direct": "Bezpośrednio" - }, - "topReferrers": { - "direct": "Bezpośrednio" - }, "events": { "selectPrompt": "Wybierz zdarzenia do wykresu" }, @@ -2529,6 +3652,9 @@ "noWebsite": "Brak skonfigurowanej strony internetowej", "noData": "Brak dostępnych danych", "internalServerError": "Nie udało się pobrać danych z Umami" + }, + "top": { + "direct": "Bezpośrednio" } }, "common": { @@ -2556,7 +3682,8 @@ }, "integration": { "noData": "Nie znaleziono integracji", - "description": "Kliknij aby utworzyć nową integrację" + "description": "Kliknij aby utworzyć nową integrację", + "manage": "Zarządzaj integracjami" }, "app": { "noData": "Nie znaleziono aplikacji", @@ -2567,7 +3694,61 @@ "noIntegration": "Nie wybrano integracji", "noData": "Brak danych dotyczących integracji" }, - "option": {} + "integrationDisconnected": "Brak dostępnych danych, wszystkie integracje są rozłączone", + "updatedAt": "Zaktualizowano {date}", + "title": { + "label": "Tytuł" + }, + "openInNewTab": { + "label": "Otwórz w nowej karcie" + }, + "showTitle": { + "label": "Pokaż tytuł" + }, + "weatherLocation": { + "label": "Lokalizacja pogody" + }, + "layout": { + "label": "Układ", + "option": { + "horizontal": "Poziomy", + "vertical": "Pionowy", + "grid": "Siatka" + } + }, + "select": { + "loading": "Ładowanie...", + "loadError": "Nie udało się załadować opcji" + }, + "dateFormat": { + "label": "Format daty", + "description": "Jak powinna wyglądać data" + }, + "visibleStorageVolumes": { + "label": "Widoczne pojemności magazynowe", + "description": "Dostępne tylko wtedy, gdy każda wybrana integracja jest OpenMediaVault lub Synology. Pozostaw puste, aby wyświetlić wszystkie wykryte objętości pamięci.", + "placeholder": "Wybierz pojemność pamięci" + }, + "tableOptions": { + "columns": { + "label": "Kolumny do pokazania" + }, + "columnOrder": { + "label": "Kolejność kolumn" + }, + "columnWidths": { + "label": "Szerokość kolumn" + }, + "enableRowSorting": { + "label": "Włącz sortowanie elementów" + }, + "defaultSort": { + "label": "👉 Kolumna używana domyślnie do sortowania" + }, + "invertSorting": { + "label": "Odwróć sortowanie" + } + } }, "video": { "name": "Strumień wideo", @@ -2626,6 +3807,7 @@ "transcoding": "Transkodowanie", "paused": "Zatrzymane", "remaining": "{minutes} min pozostało", + "seasonEpisode": "S{season} E{episode}", "metadata": { "title": "Statystyki dla nerdów", "video": { @@ -2643,11 +3825,16 @@ "resolution": "Rozdzielczość", "target": "Kodek docelowy" } - } + }, + "unknownUser": "Nieznany użytkownik" + }, + "summary": { + "sessions": "{count, plural, one {# sesja} other {# sesje}}", + "playing": "{count} gra", + "transcoding": "{count} transkodowanie" } }, "paperlessNgx": { - "name": "Paperless-ngx", "description": "Przegląd Twojego archiwum dokumentów Paperless-ngx", "documentsTotal": "Łączna liczba dokumentów", "documentsInbox": "Skrzynka odbiorcza", @@ -2692,7 +3879,6 @@ } }, "patchmon": { - "name": "PatchMon", "description": "Przegląd stanu poprawek hostów z PatchMon", "title": "Statystyki PatchMon", "totalHosts": "Łączna liczba hostów", @@ -2759,36 +3945,30 @@ "description": "Porównaj liczbę hostów wymagających aktualizacji jako wartość bezwzględną lub procent wszystkich hostów" }, "hostsNeedingUpdatesWarningAt": { - "label": "Próg ostrzeżenia dla wymagających aktualizacji", - "description": "Zmień na żółty, gdy wartość osiągnie ten próg" + "label": "Próg ostrzeżenia dla wymagających aktualizacji" }, "hostsNeedingUpdatesCriticalAt": { - "label": "Próg krytyczny dla wymagających aktualizacji", - "description": "Zmień na czerwony, gdy wartość osiągnie ten próg" + "label": "Próg krytyczny dla wymagających aktualizacji" }, "securityUpdatesThresholdMode": { "label": "Tryb progu dla aktualizacji zabezpieczeń", "description": "Porównaj liczbę aktualizacji zabezpieczeń jako wartość bezwzględną lub procent wszystkich hostów" }, "securityUpdatesWarningAt": { - "label": "Próg ostrzeżenia dla aktualizacji zabezpieczeń", - "description": "Ustaw żółty kolor, gdy wartość osiągnie ten próg" + "label": "Próg ostrzeżenia dla aktualizacji zabezpieczeń" }, "securityUpdatesCriticalAt": { - "label": "Próg krytyczny aktualizacji zabezpieczeń", - "description": "Ustaw czerwony kolor, gdy wartość osiągnie ten próg" + "label": "Próg krytyczny aktualizacji zabezpieczeń" }, "hostsWithSecurityUpdatesThresholdMode": { "label": "Tryb progu liczby hostów z aktualizacjami zabezpieczeń", "description": "Porównaj liczbę hostów jako wartość bezwzględną lub procent całkowitej liczby hostów" }, "hostsWithSecurityUpdatesWarningAt": { - "label": "Próg ostrzegawczy dla hostów z aktualizacjami zabezpieczeń", - "description": "Ustaw żółty kolor, gdy wartość osiągnie ten próg" + "label": "Próg ostrzegawczy dla hostów z aktualizacjami zabezpieczeń" }, "hostsWithSecurityUpdatesCriticalAt": { - "label": "Próg krytyczny dla hostów z aktualizacjami zabezpieczeń", - "description": "Ustaw czerwony kolor, gdy wartość osiągnie ten próg" + "label": "Próg krytyczny dla hostów z aktualizacjami zabezpieczeń" }, "upToDateHostsThresholdMode": { "label": "Tryb progu dla aktualnych hostów", @@ -2807,12 +3987,10 @@ "description": "Porównaj liczbę nieaktualnych pakietów jako wartość bezwzględną lub procent całkowitej liczby hostów" }, "totalOutdatedPackagesWarningAt": { - "label": "Próg ostrzegawczy dla nieaktualnych pakietów", - "description": "Ustaw żółty kolor, gdy wartość osiągnie ten próg" + "label": "Próg ostrzegawczy dla nieaktualnych pakietów" }, "totalOutdatedPackagesCriticalAt": { - "label": "Próg krytyczny dla nieaktualnych pakietów", - "description": "Ustaw czerwony kolor, gdy wartość osiągnie ten próg" + "label": "Próg krytyczny dla nieaktualnych pakietów" }, "showOsDistribution": { "label": "Pokaż dystrybucję systemu operacyjnego", @@ -2843,6 +4021,14 @@ "bars": "Paski poziome", "donut": "Wykres pierścieniowy" } + }, + "threshold": { + "warningAt": { + "description": "Wprowadź żółty, gdy wartość osiągnie ten próg" + }, + "criticalAt": { + "description": "Wprowadź czerwone kiedy wartość osiągnie ten próg" + } } }, "error": { @@ -2850,12 +4036,12 @@ } }, "bazarr": { - "name": "Bazarr", "description": "Przegląd brakujących napisów i stanu zdrowia z instancji Bazarr", "episodes": "Brakujące odcinki", "movies": "Brakujące filmy", "providers": "Problemy dostawców", "status": "Problemy ze stanem", + "announcements": "Ogłoszenia", "option": { "showMissingEpisodes": { "label": "Pokaż brakujące odcinki", @@ -2902,7 +4088,8 @@ "users": "Użytkownicy", "photos": "Zdjęcia", "videos": "Filmy", - "storage": "Wykorzystana przestrzeń" + "storage": "Wykorzystana przestrzeń", + "albumLimit": "Największe albumy (do {count} pokazane)" }, "immich-albumCarousel": { "name": "Album Immich", @@ -2926,24 +4113,21 @@ } }, "description": "Pokaz slajdów zdjęć z Twojego albumu w Immich", - "noPhotos": "Brak zdjęć w tym albumie" + "noPhotos": "Brak zdjęć w tym albumie", + "albumPhoto": "Zdjęcie albumu", + "actions": { + "previousPhoto": "Poprzednie zdjęcie", + "nextPhoto": "Następne zdjęcie", + "pauseSlideshow": "Pause slideshow", + "resumeSlideshow": "Wznów pokaz slajdów", + "toggleSlideshow": "Wstrzymaj lub wznawiaj pokaz slajdów", + "photo": "Zdjęcie {number}" + } }, "downloads": { "name": "Klient pobierania", "description": "Pozwala na oglądanie i zarządzanie pobieraniem zarówno przez klientów Torrent, jak i Usenet.", "option": { - "columns": { - "label": "Kolumny do pokazania" - }, - "enableRowSorting": { - "label": "Włącz sortowanie przedmiotów" - }, - "defaultSort": { - "label": "Kolumna używana do sortowania domyślnie" - }, - "descendingDefaultSort": { - "label": "Odwróć sortowanie" - }, "showCompletedUsenet": { "label": "Pokaż wpisy usenet oznaczone jako zakończone" }, @@ -2968,12 +4152,6 @@ "limitPerIntegration": { "label": "Limit elementów na integrację", "description": "To ograniczy liczbę wyświetlanych elementów dla każdej integracji, a nie globalnie" - }, - "columnOrder": { - "label": "Kolejność kolumn" - }, - "columnWidths": { - "label": "Szerokości kolumn" } }, "errors": { @@ -3004,7 +4182,7 @@ "detailsTitle": "Bieżący indeks w ramach klienta" }, "id": { - "columnTitle": "ID", + "columnTitle": "Identyfikator elementu", "detailsTitle": "Identyfikator elementu" }, "integration": { @@ -3134,6 +4312,10 @@ "mediaRequests-requestList": { "name": "Lista żądań multimediów", "description": "Zobacz listę wszystkich zapytań o media z Twoich instancji Overseerr lub Jellyseerr", + "empty": { + "title": "Brak żądań mediów", + "description": "Wyszukaj film lub pokaż aby rozpocząć żądanie." + }, "option": { "linksTargetNewTab": { "label": "Otwieraj linki w nowej karcie" @@ -3167,12 +4349,16 @@ "failed": "Niepowodzenie", "completed": "Ukończone" }, + "unknown": "Nieznany", "toBeDetermined": "Nieokreślone" }, "mediaRequests-requestStats": { "name": "Statystyki zapytań o media", "description": "Statystyki Twoich zapytań o media", - "option": {}, + "empty": { + "title": "Brak aktywności na żądanie", + "description": "Statystyki pojawią się po pierwszym żądaniu mediów." + }, "titles": { "stats": { "main": "Statystyki mediów", @@ -3182,8 +4368,7 @@ "declined": "Już odrzucone", "available": "Już dostępne", "tv": "Zapytania o seriale", - "movie": "Zapytania o filmy", - "total": "Razem" + "movie": "Zapytania o filmy" }, "users": { "main": "Najaktywniejsi użytkownicy", @@ -3209,7 +4394,6 @@ }, "currentIndex": "{start}-{end} z {total}", "healthCheck": { - "title": "Ocena stanu zdrowia", "queued": "W kolejce", "status": { "healthy": "Dobry", @@ -3218,35 +4402,30 @@ }, "panel": { "statistics": { - "empty": "Puste", - "transcodes": "Transkoduj", - "transcodesCount": "Transkoduj", - "healthChecksCount": "Kontrola stanu", "filesCount": "Pliki: {value}", "savedSpace": "Zaoszczędzona przestrzeń", - "healthChecks": "Kontrola stanu", "videoCodecs": "Kodeki", "videoContainers": "Kontenery", "videoResolutions": "Rozdzielczość" }, "workers": { - "empty": "Puste", "table": { - "file": "Plik", "eta": "Przewidywany czas", - "progress": "Postęp", - "transcode": "Transkoduj", - "healthCheck": "Kontrola stanu" + "progress": "Postęp" } }, "queue": { - "empty": "Puste", "table": { - "file": "Plik", - "size": "Rozmiar", - "transcode": "Transkoduj", - "healthCheck": "Kontrola stanu" + "size": "Rozmiar" } + }, + "common": { + "empty": "Puste", + "file": "Plik", + "healthCheck": "Kontrola stanu", + "transcode": "Transkodowanie", + "transcodes": "Transkodowanie", + "healthChecks": "Kontrola stanu" } } }, @@ -3270,7 +4449,8 @@ }, "type": { "movie": "Film", - "episode": "Odcinek" + "episode": "Odcinek", + "book": "Książka" }, "empty": { "missing": "Brak brakujących elementów", @@ -3301,6 +4481,13 @@ "showPosterImage": { "label": "Pokaż obraz okładki" } + }, + "error": { + "allFeedsFailed": "Nie można załadować kanałów RSS. Sprawdź adresy URL kanału i spróbuj ponownie." + }, + "warning": { + "partial": "{count, plural, one {# kanał RSS nie mógł zostać załadowany} other {# kanały RSS nie mogły zostać załadowane}}", + "stale": "Nie można odświeżyć kanału RSS. Wyświetlono poprzednio załadowane wpisy." } }, "releases": { @@ -3376,17 +4563,8 @@ "label": "Wyrażenie regularne" } }, - "edit": { - "label": "Edytuj" - }, "editForm": { - "title": "Edytuj repozytorium", - "cancel": { - "label": "Anuluj" - }, - "confirm": { - "label": "Potwierdź" - } + "title": "Edytuj repozytorium" }, "importForm": { "title": "Importuj z Dockera" @@ -3403,8 +4581,7 @@ "label": "Tokeny dostawcy", "token": "Token", "configured": "Token skonfigurowany", - "notConfigured": "Brak ustawionych tokenów", - "save": "Zapisz" + "notConfigured": "Brak ustawionych tokenów" } } }, @@ -3431,17 +4608,32 @@ "noProviderResponse": "Brak odpowiedzi od dostawcy", "unexpected": "Nieoczekiwany błąd dostawcy" } - } + }, + "expandDetails": "Pokaż szczegóły dla {name}", + "collapseDetails": "Ukryj szczegóły dla {name}" }, "networkControllerSummary": { - "option": {}, - "card": { - "vpn": { - "countConnected": "{count} połączonych" + "advanced": { + "updated": "Zaktualizowano", + "metric": { + "latency": "Opóźnienie", + "ping": "Ping", + "uptime": "Czas pracy", + "users": "Użytkownicy", + "guests": "Goście" } }, + "card": { + "vpn": { + "countConnected": "{count, plural, one {# połączono} other {# połączono}}", + "label": "VPN" + }, + "wan": "WAN", + "web": "Web", + "wifi": "Wi-Fi", + "lan": "LAN" + }, "error": { - "integrationsDisconnected": "Brak dostępnych danych, wszystkie integracje rozłączone", "unknownContentOption": "Nieznana opcja zawartości dla widżetu podsumowania kontrolera sieci: " }, "name": "Podsumowanie kontrolera sieci", @@ -3478,7 +4670,6 @@ } }, "error": { - "integrationsDisconnected": "Brak dostępnych danych, wszystkie integracje są rozłączone", "unknownContentOption": "Nieznana opcja zawartości dla widżetu statusu sieci: " }, "name": "Stan sieci", @@ -3508,7 +4699,6 @@ "versiontitle": "Wersje", "cputitle": "Użycie procesora", "memorytitle": "Użycie pamięci", - "cpu": "CPU", "memory": "Pamięć", "interfaces": { "name": "nazwa", @@ -3516,6 +4706,16 @@ "recv": "Otrzymano", "title": "Interfejsy sieciowe" } + }, + "empty": { + "noInterfaces": "Brak danych interfejsu sieciowego" + }, + "versionUnknown": "Nieznana wersja", + "metricAccessible": "{metric}: {value}%, {status}", + "status": { + "normal": "Normalny", + "warning": "Ostrzeżenie", + "critical": "Krytyczne" } }, "notifications": { @@ -3525,8 +4725,21 @@ "option": { "hideLogos": { "label": "Ukryj loga" + }, + "messageFormat": { + "label": "Format wiadomości", + "option": { + "auto": "Automatyczne", + "plain": "Zwykły tekst", + "markdown": "Markdown", + "html": "HTML" + } } - } + }, + "openService": "Otwórz usługę powiadomień", + "deleteNotification": "Usuń powiadomienie z Gotify", + "deleteFailed": "Nie można usunąć powiadomienia", + "deleteFailedMessage": "Nie można usunąć powiadomienia. Spróbuj ponownie." }, "speedtestTracker": { "name": "Speedtest Tracker", @@ -3568,7 +4781,6 @@ } }, "uptimeKuma": { - "name": "Uptime Kuma", "description": "Monitoruj statystyki czasu pracy ze strony statusu Uptime Kuma", "option": { "showAverageUptime": { @@ -3605,10 +4817,14 @@ }, "error": { "internalServerError": "Nie udało się pobrać danych czasu pracy" + }, + "status": { + "up": "Prędkość wysyłania", + "down": "Prędkość pobierania", + "paused": "Zatrzymane" } }, "traefik": { - "name": "Traefik", "description": "Przegląd routerów, usług, middleware i punktów wejścia Traefik", "option": { "showTcp": { @@ -3629,7 +4845,6 @@ }, "resource": { "routers": "Routery", - "services": "Usługi", "middlewares": "Middleware" }, "status": { @@ -3639,7 +4854,20 @@ }, "error": { "internalServerError": "Nie udało się pobrać danych Traefik" - } + }, + "resourceType": { + "router": "Węzeł", + "service": "Usługa", + "middleware": "Oprogramowanie pośrednie" + }, + "resourceStatus": { + "enabled": "Aktywny", + "disabled": "Nieaktywny", + "warning": "Ostrzeżenie", + "error": "Błąd", + "unknown": "Nieznany" + }, + "failedEndpoint": "Niepowodzenie: {endpoint}" }, "audioStats": { "name": "Audio stats", @@ -3705,9 +4933,7 @@ "label": "Widoczne wykresy", "description": "Wybierz wykresy, które chcesz, aby były widoczne.", "option": { - "cpu": "Procesor", "memory": "Pamięć", - "gpu": "GPU", "network": "Sieć" } }, @@ -3722,12 +4948,11 @@ } }, "card": { - "cpu": "Procesor", "memory": "Pamięć", - "gpu": "GPU", "network": "Sieć", "up": "Aktywny", - "down": "Nieaktywny" + "down": "Nieaktywny", + "memoryTooltip": "{used} / {available} ({percent}%)" } }, "systemDisks": { @@ -3753,20 +4978,35 @@ }, "showBackgroundBar": { "label": "Pokaż pasek wykorzystania w tle" - }, - "visibleStorageVolumes": { - "label": "Widoczne woluminy pamięci", - "description": "Dostępne tylko gdy wszystkie wybrane integracje to Synology. Pozostaw puste, aby wyświetlić wszystkie wykryte woluminy pamięci.", - "placeholder": "Wybierz woluminy pamięci" } }, "status": { - "unhealthy": "Zły" + "unhealthy": "Zły", + "smart": "SMART", + "free": "{percentage}% wolnego miejsca" } }, "customApi": { "name": "Niestandardowe API", "description": "Wyświetlaj dane z dowolnego zewnętrznego API z niestandardową konfiguracją.", + "customJsx": { + "noTemplate": "Nie skonfigurowano szablonu JSX.", + "templateWarnings": "Ostrzeżenia szablonu {count}:", + "requestIdRequired": "Ta kontrola sieci wymaga nazwy „requestId”.", + "unsavedPreview": "Uruchom początkowy test żądania w edytorze przed testowaniem nazwanych żądań.", + "invalidParams": "Parametry żądania są nieprawidłowe.", + "loading": "Ładowanie żądania...", + "loadRequest": "Wczytaj żądanie", + "requestFailed": "Żądanie nie powiodło się.", + "retry": "Ponów żądanie", + "actionCompleted": "Akcja zakończona pomyślnie.", + "actionSimulated": "Akcja symulowana; żadne żądanie nie zostało wysłane.", + "actionsDisabledEditMode": "Akcje są wyłączone, gdy tablica jest w trybie edycji.", + "widgetItemUnavailable": "Ten widżet nie jest dostępny.", + "toggle": "Przełącz", + "copied": "Skopiowano", + "confirmDelete": "Potwierdź to niszczące działanie." + }, "option": { "definitionId": { "label": "Definition ID" @@ -3777,142 +5017,49 @@ } }, "noDefinition": "Nie wybrano definicji", - "definitionNotFound": "Nie znaleziono definicji widgetu. Być może została usunięta." + "definitionNotFound": "Nie znaleziono definicji widgetu. Być może została usunięta.", + "migrationRequired": "Ten starszy widżet niestandardowy jest zachowany, ale musi być przeniesiony do niestandardowego JSX v2 z Zarządzaj widżetami niestandardowymi, zanim będzie mógł działać.", + "manageMigration": "Otwórz zarządzanie widżetami niestandardowymi", + "contactAdmin": "Skontaktuj się z administratorem.", + "configurationNeedsRepair": "Opcje tego widżetu zmieniły się. Edytuj widżet w celu naprawy jego konfiguracji.", + "removeFromBoard": "Usuń z płytki", + "editModePending": "Zapisz dział, aby załadować ten widżet.", + "picker": { + "group": "Własne widżety JSX", + "empty": "Nie znaleziono widżetów niestandardowych", + "preview": "Podgląd", + "sources": "{count, plural, one {# źródło} other {# źródła}}", + "requests": "{count, plural, one {# żądanie} other {# żądań}}", + "migrationRequired": "Wymagana migracja", + "migrationDescription": "Nie można jeszcze uruchomić widżetu v1. Skopiuj jego poprawioną prośbę do LLM, a następnie wklej pojedynczą odpowiedź JSON do Homarr.", + "manageMigration": "Otwórz zarządzanie widżetami niestandardowymi", + "contactAdmin": "Skontaktuj się z administratorem." + }, + "configuration": { + "needsAttention": "Konfiguracja wymaga uwagi: {message}", + "advancedOptions": "Ustawienia zaawansowane", + "invalidJson": "Nieprawidłowy JSON" + } }, "beszelSystemTable": { "name": "Systemy Beszel (Tabela)", "description": "Widok tabeli wszystkich systemów monitorowanych przez Beszel z sortowalnymi kolumnami i wskaźnikami statusu", "option": { - "statusFilter": { - "label": "Filtry statusu" - }, "sortBy": { "label": "Sortuj według" }, "sortDirection": { "label": "Kierunek sortowania" - }, - "showCpu": { - "label": "Pokaż CPU" - }, - "showMemory": { - "label": "Pokaż pamięć" - }, - "showDisk": { - "label": "Pokaż dysk" - }, - "showGpu": { - "label": "Pokaż GPU" - }, - "showLoadAvg": { - "label": "Pokaż średnie obciążenie" - }, - "showNet": { - "label": "Pokaż sieć" - }, - "showTemp": { - "label": "Pokaż temperaturę" - }, - "showBattery": { - "label": "Pokaż baterię" - }, - "showServices": { - "label": "Pokaż usługi" - }, - "showUptime": { - "label": "Pokaż czas pracy" - }, - "showAgent": { - "label": "Pokaż wersję agenta" - }, - "columnOrder": { - "label": "Kolejność kolumn" - }, - "columnWidths": { - "label": "Szerokości kolumn" } }, - "noRecords": "Nie znaleziono systemów", "error": { - "internalServerError": "Nie można połączyć się z Beszel. Sprawdź ustawienia integracji.", "layoutSaveTitle": "Nie można zapisać układu tabeli", "layoutSaveMessage": "Nie można zapisać kolejności kolumn ani ich szerokości. Spróbuj ponownie." - }, - "column": { - "system": "System", - "cpu": "CPU", - "memory": "Pamięć", - "disk": "Dysk", - "gpu": "GPU", - "loadAvg": "Śr. Obciążenie", - "net": "Sieć", - "temp": "Temp.", - "battery": "Bateria", - "services": "Usługi", - "uptime": "Czas pracy", - "agent": "Agent" } }, "beszelSystemGrid": { "name": "Beszel Systems (Siatka)", - "description": "Widok siatki wszystkich systemów monitorowanych przez Beszel z miernikami w czasie rzeczywistym", - "option": { - "statusFilter": { - "label": "Filtr statusu" - }, - "showCpu": { - "label": "Pokaż CPU" - }, - "showMemory": { - "label": "Pokaż pamięć" - }, - "showDisk": { - "label": "Pokaż dysk" - }, - "showGpu": { - "label": "Pokaż GPU" - }, - "showLoadAvg": { - "label": "Pokaż średnie obciążenie" - }, - "showNet": { - "label": "Pokaż sieć" - }, - "showTemp": { - "label": "Pokaż temperaturę" - }, - "showBattery": { - "label": "Pokaż baterię" - }, - "showServices": { - "label": "Pokaż usługi" - }, - "showUptime": { - "label": "Pokaż czas pracy" - }, - "showAgent": { - "label": "Pokaż wersję agenta" - } - }, - "error": { - "internalServerError": "Nie można połączyć się z Beszel. Sprawdź ustawienia integracji." - }, - "empty": { - "noSystems": "Nie znaleziono systemów" - }, - "metric": { - "cpu": "CPU", - "memory": "Pamięć", - "disk": "Dysk", - "gpu": "GPU", - "loadAvg": "Śr. Obciążenie", - "net": "Sieć", - "temp": "Temp.", - "battery": "Bateria", - "services": "Usługi", - "uptime": "Czas pracy", - "agent": "Agent" - } + "description": "Widok siatki wszystkich systemów monitorowanych przez Beszel z miernikami w czasie rzeczywistym" }, "beszelAlerts": { "name": "Alerty Beszel", @@ -3926,11 +5073,12 @@ } }, "empty": "Brak skonfigurowanych alertów", - "error": { - "internalServerError": "Nie można połączyć się z Beszel. Sprawdź ustawienia integracji." - }, "history": "Historia", "resolved": "Rozwiązane", + "alertDescription": { + "statusDuration": "W dół na {minutes} min", + "threshold": "Przekracza {value} przez {minutes} min" + }, "status": { "triggered": "Wywołane", "ok": "OK" @@ -3977,16 +5125,16 @@ "noSystems": "Nie znaleziono systemów" }, "error": { - "internalServerError": "Nie można połączyć się z Beszel. Sprawdź ustawienia integracji.", "liveConnectionFailed": "Połączenie na żywo nie powiodło się. Twoja instancja Beszel może nie obsługiwać strumieniowania w czasie rzeczywistym.", "switchToHistorical": "Przełącz na widok historyczny", - "systemNotFound": "Nie znaleziono wybranego systemu. Wybierz inny system." + "systemNotFound": "Nie znaleziono wybranego systemu. Wybierz inny system.", + "selectionSaveTitle": "Nie można zapisać zaznaczenia", + "selectionSaveMessage": "Wybór systemu lub okresu czasu nie mógł zostać zapisany. Spróbuj ponownie." }, "chart": { "cpu": { "title": "Użycie CPU", - "subtitle": "Średnie wykorzystanie procesora w całym systemie", - "series": "CPU" + "subtitle": "Średnie wykorzystanie procesora w całym systemie" }, "memory": { "title": "Użycie Pamięci", @@ -4028,39 +5176,550 @@ "title": "I/O Sieci Dockera", "subtitle": "Ruch sieciowy kontenerów Docker" } + }, + "period": { + "live": "Żywe", + "oneHour": "1h", + "twelveHours": "12h", + "oneDay": "24h", + "oneWeek": "1 tydzień", + "thirtyDays": "30d" } }, - "wud": { - "name": "What's Up Docker", - "description": "Pokaż, ile oglądanych kontenerów ma dostępne aktualizacje.", - "title": "What's Up Docker", - "monitored": "Monitorowane", - "updatesAvailable": "{count, plural, one {# dostępna aktualizacja} other {# dostępne aktualizacje}}", - "updateAvailable": "Dostępna aktualizacja", - "openReleaseNotes": "Otwórz notatki o wydaniu", + "assistant": { + "name": "Asystent", + "description": "Posiadaj pełną rozmowę asystenta bezpośrednio na swojej stronie.", + "unavailable": { + "title": "Asystent niedostępny", + "description": "Zaloguj się i poproś administratora o skonfigurowanie asystenta z panelu zarządzania." + }, + "compact": { + "title": "Asystent", + "description": "Zmień rozmiar widżetu na czat, lub otwórz pełną rozmowę.", + "open": "Otwórz asystenta", + "openTitle": "Asystent otwarty w panelu bocznym", + "openDescription": "Rozmowa pozostaje na jednej aktywnej powierzchni.", + "returnToWidget": "Zwróć konwersację do tego widżetu", + "otherWidgetTitle": "Asystent aktywny w innym widżecie", + "otherWidgetDescription": "Tylko jedna powierzchnia konwersacji pozostaje aktywna w danym czasie.", + "useHere": "Użyj asystenta w tym widżecie" + } + }, + "beszel": { + "error": { + "internalServerError": "Nie można połączyć się z Beszel. Sprawdź ustawienia integracji." + }, + "empty": { + "noSystems": "Nie znaleziono systemów" + }, + "options": { + "statusFilter": { + "label": "Filtr statusu" + }, + "showCpu": { + "label": "Pokaż CPU" + }, + "showMemory": { + "label": "Pokaż pamięć" + }, + "showDisk": { + "label": "Pokaż dysk" + }, + "showGpu": { + "label": "Pokaż GPU" + }, + "showLoadAvg": { + "label": "Pokaż średnie obciążenie" + }, + "showNet": { + "label": "Pokaż sieć" + }, + "showTemp": { + "label": "Pokaż temperaturę" + }, + "showBattery": { + "label": "Pokaż baterię" + }, + "showServices": { + "label": "Pokaż usługi" + }, + "showUptime": { + "label": "Pokaż czas pracy" + }, + "showAgent": { + "label": "Pokaż wersję agenta" + } + }, + "metric": { + "system": "System", + "source": "Integracja", + "hostname": "Nazwa hosta", + "cpuModel": "Model procesora", + "cores": "Rdzenie", + "memoryTotal": "Całkowita pamięć", + "memory": "Pamięć", + "disk": "Dysk", + "loadAvg": "Śr. Obciążenie", + "net": "Sieć", + "temp": "Temp.", + "battery": "Bateria", + "uptime": "Czas pracy", + "agent": "Agent" + } + }, + "llamacpp": { + "name": "llama.cpp", + "description": "Pokaż zdrowie, załadowany model i prędkość generowania lokalnego serwera llama.cpp.", + "title": "llama.cpp", + "status": { + "unhealthy": "Niezdrowe ({status})" + }, + "idle": "Bezczynny", + "speedTooltip": { + "current": "Prędkość bieżącej generacji", + "average": "Średnia prędkość wytwarzania od uruchomienia", + "request": "Średnia prędkość od rozpoczęcia tego żądania" + }, + "busy": "{count, plural, one {# żądanie uruchamiane} other {# żądania uruchamiane}}", + "modelInfo": { + "context": "Kontekst", + "size": "Rozmiar pliku", + "parameters": "Parametry", + "model": "Wzór", + "quantization": "Kwantyzacja" + }, + "stats": { + "tokensProcessed": "Tokeny przetworzone", + "contextUsage": "Wykorzystanie kontekstu / KV", + "cacheHitRate": "Szybki wskaźnik trafień skrzynki", + "tokensGenerated": "Tokeny wygenerowane" + }, + "error": { + "unreachable": "serwer llama-jest nieosiągalny" + }, + "unit": { + "speed": "{value} t/s", + "parameters": "{value}B", + "none": "—", + "speedShort": "t/s" + }, "option": { "showTitle": { "label": "Pokaż tytuł" }, - "showRing": { - "label": "Pokaż pierścień aktualizacji" + "showModelInfo": { + "label": "Pokaż informacje o modelu" }, - "layout": { - "label": "Układ", + "showContextUsage": { + "label": "Pokaż użycie kontekstu" + }, + "showCacheHitRate": { + "label": "Pokaż wskaźnik trafień pamięci podręcznej" + }, + "showSpeedStats": { + "label": "Pokaż statystyki prędkości" + }, + "showRequests": { + "label": "Pokaż ładunek żądania" + }, + "showTokenStats": { + "label": "Pokaż całkowite tokeny" + }, + "showSpeculative": { + "label": "Pokaż dekodowanie spekulacyjne" + } + }, + "advanced": { + "promptSpeed": "Szybkość", + "avgSpeed": "Średnia generacja", + "requests": "Zapytania", + "deferred": "Odroczone", + "slots": "Miejsca {processing}/{total} zajęte", + "speculative": "Dekodowanie spekulacyjne", + "avgPrompt": "Średni monit", + "specDrafts": "Specjalne szkice", + "specAccepted": "Akceptowane tokeny specyfikacji", + "specDraftTokens": "Specjalne szkicowe tokeny" + } + }, + "stats": { + "name": "Statystyki", + "description": "Połącz statystyki z integracji w jednym konfigurowalnym widżecie.", + "configure": "Konfiguruj metryki", + "refresh": "Odśwież statystyki", + "empty": "Otwórz ustawienia widżetu, wybierz integracje, a następnie dodaj metryki.", + "editorHelp": "Dodaj metryki z integracji, które wybrano dla tego widżetu. Zmiany są zapisywane w panelu nawigacyjnym.", + "source": "Integracja", + "metric": "Metryka", + "noMetrics": "Brak dostępnych statystyk dla tej integracji", + "add": "Dodaj metrykę", + "label": "Własna etykieta", + "hidden": "Ukryty", + "compact": "Numery kompaktowe", + "moveUp": "Przenieś w górę", + "moveDown": "Przenieś w dół", + "remove": "Usuń metrykę", + "loading": "Ładowanie…", + "unavailable": "Unavailable", + "refreshFailed": "Odświeżanie nie powiodło się — pokazuje zapisane dane", + "stale": "Zapisane dane — odśwież aby zaktualizować", + "table": { + "value": "Wartość", + "status": "Status" + }, + "option": { + "table": { + "label": "Widok tabeli" + }, + "rows": { + "label": "Wiersze kompaktowe" + }, + "showIcon": { + "label": "Pokaż ikonę źródłową" + }, + "spacing": { + "label": "Odstępy", "option": { - "horizontal": { - "label": "Poziomy" + "xs": { + "label": "Kompaktowy" }, - "vertical": { - "label": "Pionowy" + "sm": { + "label": "Komfortowalne" + }, + "md": { + "label": "Surowy" } } }, - "showUpdateList": { - "label": "Pokaż listę aktualizacji kontenera", - "description": "Wymienia każdy monitorowany kontener z dostępną aktualizacją obrazu" + "entries": { + "label": "Metryki" + }, + "plain": { + "label": "Usuń tła karty" } - } + }, + "fetchFailed": "Nie można pobrać statystyk", + "viewOptions": "Dostosuj ten widok", + "moreMetrics": "{count} więcej w widoku zaawansowanym", + "localHelp": "Układ, formatowanie i widoczność odnoszą się tylko do tego widoku. Ustawienia współdzielonych działów pozostają takie same.", + "plain": "Usuń tła karty", + "resetView": "Resetuj widok", + "allHidden": "Wszystkie metryki są ukryte w tym widoku. Użyj Dostosuj ten widok, aby je przywrócić." + }, + "wazuh": { + "target": { + "api": "API serwera Wazuh", + "indexer": "Indeks Wazuh", + "wazuh": "Wazuh" + }, + "severity": { + "low": "Niski", + "medium": "Średni", + "high": "Wysoka", + "critical": "Krytyczne" + }, + "error": { + "unauthorized": { + "title": "{target} odrzucił dane logowania", + "description": "Sprawdź nazwę użytkownika i hasło zapisane w integracji Wazuh. API serwera (port 55000) i indeks (port 9200) używają oddzielnych użytkowników." + }, + "certificate": { + "title": "Certyfikat {target} nie jest zaufany", + "description": "Wazuh używa domyślnie podpisanego certyfikatu. Uruchom \"Testuj połączenie\" na integracji i zaufaj certyfikatowi lub dodaj swój CA w Ustawienia → Certyfikaty." + }, + "unreachable": { + "title": "Nie można osiągnąć {target}", + "description": "Host odmówił połączenia lub go usunął. Sprawdź adres URL, port i zaporę. Indekser słucha tylko na localhost w domyślnej instalacji." + }, + "timeout": { + "title": "Upłynął limit czasu {target}", + "description": "Brak odpowiedzi w ciągu 15 sekund. Usługa może być przeciążona lub adres może być nieprawidłowy." + }, + "status": { + "title": "{target} zwrócił błąd", + "description": "Żądanie o statusie HTTP {status} nie powiodło się." + }, + "invalidResponse": { + "title": "Nieoczekiwana odpowiedź od {target}", + "description": "Sprawdź, czy adres URL wskazuje do API serwera Wazuh lub indeksatora, a nie do pulpitu nawigacyjnego." + }, + "indexerRequired": { + "title": "Wymagane dane logowania indeksatora Wazuh", + "description": "Alerty, luki i zdarzenia integralności plików są odczytywane z indeksatora Wazuh. Dodaj adres URL indeksatora, nazwę użytkownika i hasło do integracji." + }, + "unknown": { + "title": "Nie można załadować danych z {target}", + "description": "Sprawdź logi Homarr po więcej informacji." + } + }, + "range": { + "1h": "1h", + "24h": "24h", + "7d": "7d", + "30d": "30d" + }, + "levelTooltip": "Poziom reguły {level} ({severity})" + }, + "wazuhAgents": { + "name": "Środki przeciwmgielne", + "description": "Sortowalna lista agentów Wazuh ze statusem, OS, wersją i ostatnią wersją", + "option": { + "statusFilter": { + "label": "Pokaż agentów" + }, + "sortBy": { + "label": "Sortuj według" + }, + "showVersion": { + "label": "Pokaż kolumnę wersji Wazuh" + }, + "showGroups": { + "label": "Pokaż kolumnę grup" + } + }, + "title": "Agenci", + "total": "Agenci {count}", + "status": { + "active": "Aktywny", + "disconnected": "Rozłączono", + "neverConnected": "Nigdy nie podłączony", + "pending": "Oczekujące" + }, + "statusLabel": { + "active": "Aktywny", + "disconnected": "Rozłączono", + "never_connected": "Nigdy nie podłączony", + "pending": "Oczekujące", + "unknown": "Nieznany" + }, + "live": "Żywe", + "snapshot": "Zrzut stanu {age} stary", + "snapshotHint": "Przeczytaj z pulpitu nawigacyjnego Wazuh (monitorowanie wazuh) pobranego w {time}. Dodaj dane logowania do serwera dla danych na żywo.", + "staleSnapshot": "Snapshot agenta z {time} jest przestarzały. Sprawdź, czy zadanie monitorowania panelu Wazuh jest uruchomione, lub dodaj dane API serwera.", + "noDisconnected": "Wszyscy agenci są połączeni", + "empty": "Żaden agent nie pasuje do tego filtru", + "column": { + "status": "Status", + "name": "Nazwa zlecenia", + "ip": "IP", + "os": "System operacyjny", + "version": "Wersja", + "lastKeepAlive": "Cykloalkanowe, cykloalkeny i cykloterpeny", + "groups": "Grupy" + }, + "outdated": "Starsza niż najnowsza wersja konsultanta ({version})" + }, + "wazuhAlerts": { + "name": "Kanał alarmowy Wazuh", + "description": "Ostatnie powiadomienia Wazuh z poziomem, MITRE technikami ATT&CK, agentem i źródłowym IP", + "option": { + "minLevel": { + "label": "Minimalny poziom reguły", + "description": "Poziomy wahań: 0-6 niskie, 7-11 średnie, 12-14 wysokie, 15+ krytyczne" + }, + "hours": { + "label": "Okno czasu (godziny)" + }, + "limit": { + "label": "Liczba wpisów" + }, + "showMitre": { + "label": "Show MITRE ATT&CK techniques" + }, + "showAgent": { + "label": "Pokaż agenta" + }, + "showSourceIp": { + "label": "Pokaż źródłowy adres IP" + }, + "showRuleId": { + "label": "Pokaż ID reguły" + } + }, + "title": "Alerty · poziom {level}+ · {hours}h", + "empty": "Brak alertów na tym poziomie. Wszystko cicho.", + "rule": "Reguła {id}", + "openInDashboard": "Otwórz ten alarm w panelu Wazuh" + }, + "wazuhSummary": { + "name": "Natężenie alarmu Wazuh", + "description": "Podział według stopnia zagrożenia z tendencją w stosunku do poprzedniego okresu", + "option": { + "range": { + "label": "Zakres czasowy" + }, + "showTrend": { + "label": "Pokaż trend w stosunku do poprzedniego okresu" + }, + "showFooter": { + "label": "Pokaż stopkę" + } + }, + "title": "Alarm dotkliwości · {range}", + "alerts": "ostrzeżenia", + "none": "Brak alertów", + "trend": { + "new": "nowa", + "tooltip": "Poprzedni okres: {previous}" + }, + "previous": "Poprzedni {range}: {count}", + "maxLevel": "Maksymalny poziom {level}", + "health": "Indekser zdrowia: {status}", + "manager": "Menedżer {version}" + }, + "wazuhTimeline": { + "name": "Wazuh alerts timeline", + "description": "Złożony wykres powiadomień Wazuh w czasie według dotkliwości", + "option": { + "range": { + "label": "Zakres czasowy" + }, + "interval": { + "label": "Interwał" + }, + "chartType": { + "label": "Typ wykresu" + }, + "yScale": { + "label": "Skala osi Y", + "description": "Korzeń kwadratu utrzymuje wysokie i krytyczne alarmy widoczne obok tysięcy nisko" + }, + "minLevel": { + "label": "Minimalny poziom reguły" + }, + "showLegend": { + "label": "Pokaż legendę z sumami" + } + }, + "title": "Alerts timeline · {range}", + "total": "Alerty {count}", + "interval": "za {interval}" + }, + "wazuhTopList": { + "name": "Lista Wazuh", + "description": "Najlepsze zasady, przedstawiciele, źródłowe adresy IP lub MITRE taktyki i techniki ATT&CK według liczby ostrzeżeń", + "option": { + "kind": { + "label": "Ranga" + }, + "range": { + "label": "Zakres czasowy" + }, + "limit": { + "label": "Liczba wpisów" + }, + "minLevel": { + "label": "Minimalny poziom reguły" + }, + "showBars": { + "label": "Pokaż paski" + } + }, + "title": { + "rules": "Najlepsze reguły · {range}", + "agents": "Najlepsi agenci · {range}", + "sourceIps": "Najlepsze źródłowe adresy IP · {range}", + "mitreTactics": "Taktyka MITRE · {range}", + "mitreTechniques": "MITRE techniques · {range}" + }, + "empty": { + "rules": "Brak alertów w tym okresie", + "agents": "Brak alertów w tym okresie", + "sourceIps": "Brak alertów o źródłowym IP w tym okresie", + "mitreTactics": "Brak alertów mapowanych na MITRE ATT&CK w tym okresie", + "mitreTechniques": "Brak alertów mapowanych na MITRE ATT&CK w tym okresie" + }, + "totalTooltip": "{count} pasujące alerty", + "private": "LAN", + "public": "Publiczna", + "agents": "Widziane na agentach {count}", + "others": "{count} więcej alertów w innych wpisach" + }, + "wazuhVulnerabilities": { + "name": "Wazu podatności", + "description": "Liczba podatności na zagrożenia, najwyższe życiorysy i najbardziej wrażliwe podmioty", + "option": { + "cveOrder": { + "label": "Ranking CVE wg" + }, + "minSeverity": { + "label": "Intensywność CVE" + }, + "cveLimit": { + "label": "Liczba CVE" + }, + "agentLimit": { + "label": "Liczba agentów" + }, + "showAgents": { + "label": "Pokaż najbardziej wrażliwych agentów" + } + }, + "title": "podatności na zagrożenia", + "topCves": "Najlepsze CVE", + "score": "Wynik", + "agentsShort": "Agenci", + "topAgents": "Najbardziej wrażliwi agenci", + "criticalHigh": "Krytyka / Wysoka", + "totalTooltip": "{count} odkrycia agentów {agents}", + "affected": "Agenci {count}", + "empty": "Nie wykryto podatności", + "distribution": "Rozkład dotkliwości. Wyniki {unscored} bez wyniku nie są wyświetlane.", + "worst": "Najgorsze: {id} ({score}) na agentów {agents}" + }, + "wazuhFim": { + "name": "Integralność pliku Wazuh", + "description": "Ostatnie zdarzenia monitorowania integralności plików (syscheck)", + "option": { + "range": { + "label": "Zakres czasowy" + }, + "event": { + "label": "Zdarzenia" + }, + "limit": { + "label": "Liczba zdarzeń" + }, + "includeRegistry": { + "label": "Dołącz zdarzenia rejestru Windows" + } + }, + "title": "Integralność pliku · {range}", + "event": { + "added": "Data dodania", + "modified": "Zmodyfikowane", + "deleted": "Usunięty", + "unknown": "Zmieniono" + }, + "empty": "Brak zdarzeń integralności plików w tym okresie", + "user": "przez {user}", + "registry": "Rejestr" + }, + "wazuhAuthFailures": { + "name": "Błąd uwierzytelniania Wazuh", + "description": "Nieudane logowanie i alarmy brute-force na agenta z godzinowymi liniami sparkline", + "option": { + "hours": { + "label": "Okno czasu (godziny)" + }, + "limit": { + "label": "Liczba agentów" + }, + "showSourceIps": { + "label": "Pokaż najlepsze źródłowe adresy IP" + } + }, + "title": "Niepowodzenie uwierzytelniania · {hours}h", + "seriesTooltip": "Wszyscy agenci w ciągu ostatnich {hours}h", + "peak": "Szczyt {count}/wiadro", + "empty": "Brak nieudanych logowań w tym okresie", + "failed": "Nieudane logowanie", + "failedHint": "Pojedyncze błędy uwierzytelniania (sshd, PAM, Windows logon, nieprawidłowy użytkownik)", + "bruteForce": "Siła szczotkowa", + "bruteForceHint": "Skojarzone zasady brute-force (wielokrotne awarie w krótkim okresie, MITRE T1110)", + "sourceIps": "Źródłowe adresy IP", + "ipTooltip": "{ip}: {count} porażki", + "bruteForceCount": "Siła {count}" } }, "widgetPreview": { @@ -4073,7 +5732,76 @@ } }, "board": { + "emptyState": { + "title": "Zbuduj pierwszy widok", + "description": "Dodaj widżet lub aplikację, lub podłącz usługę i użyj jej danych w tym dziale.", + "addWidget": "Dodaj widżet", + "addApp": "Dodaj aplikację", + "connectService": "Połącz usługę" + }, + "setupChecklist": { + "title": "Spraw, by ten dział był użyteczny", + "description": "Podnieś miejsce, w którym opuściłeś. Postęp postępuje zgodnie z treścią już w tym dziale.", + "collapse": "Zwiń listę kontrolną konfiguracji", + "dismiss": "Odrzuć listę kontrolną konfiguracji", + "resume": "Kontynuuj ustawienia ({completed}/{total})", + "progress": "Postęp konfiguracji tablicy", + "step": { + "content": { + "label": "Dodaj użyteczną zawartość", + "description": "Wybierz widżet i skonfiguruj go zanim zostanie umieszczony." + }, + "app": { + "label": "Przypnij aplikację", + "description": "Zachowaj usługę lub narzędzie z dala od tego działu." + }, + "service": { + "label": "Połącz usługę", + "description": "Odblokuj dane i akcje na żywo dla kompatybilnych widżetów.", + "permissionDescription": "Administrator może połączyć usługę, aby odblokować dane na żywo.", + "action": "Połącz" + } + } + }, "action": { + "addContent": "Dodaj zawartość działu", + "settings": "Ustawienia tablicy", + "switch": "Przełącz tablicę", + "switcher": { + "title": "Przełącz tablicę", + "search": { + "empty": "Żaden dział nie pasuje do \"{search}\"." + }, + "results": "Dostępne działy", + "preview": "Podgląd {name} z artykułami {count}", + "currentHidden": "Bieżący dział: {name}", + "keyboard": { + "navigate": "Navigate", + "open": "Otwórz", + "instructions": "Wpisz aby filtrować płyty. Użyj klawiszy strzałek, aby przenieść wyniki i Wejdź, aby otworzyć płytę." + }, + "empty": { + "title": "Brak innych działów", + "description": "Nie ma innych działów, do których możesz uzyskać dostęp." + }, + "error": "Nie można załadować działów." + }, + "create": { + "availability": { + "checking": "Sprawdzanie dostępności…", + "available": "{name} jest dostępny" + }, + "notification": { + "success": { + "title": "Utworzono tablicę", + "message": "Dział {name} został utworzony" + }, + "error": { + "title": "Nie można utworzyć tablicy", + "message": "Nie można utworzyć tablicy {name}" + } + } + }, "duplicate": { "title": "Duplikuj tablicę", "message": "Spowoduje to zduplikowanie tablicy {name} wraz ze wszystkimi jej treściami. Jeśli widżety odwołują się do integracji, których nie możesz używać, zostaną usunięte.", @@ -4089,14 +5817,19 @@ } }, "edit": { + "enter": "Edytuj tablicę", + "save": "Zapisz tablicę", + "exit": "Wyjdź z trybu edycji", "notification": { "success": { - "title": "Zmiany zostały pomyślnie zastosowane", "message": "Tablica została pomyślnie zapisana" }, "error": { - "title": "Nie można zastosować zmian", "message": "Nie udało się zapisać tablicy" + }, + "loadError": { + "title": "Nie można rozpocząć edycji", + "message": "Edytor tablicy nie może zostać załadowany. Twój panel jest nadal dostępny w trybie widoku." } }, "confirmLeave": { @@ -4104,62 +5837,6 @@ "message": "Masz niezapisane zmiany, czy na pewno chcesz wyjść?" } }, - "oldImport": { - "label": "Import z Homarr sprzed wersji 1.0.0", - "notification": { - "success": { - "title": "Import zakończony pomyślnie", - "message": "Tablica została pomyślnie zaimportowana" - }, - "error": { - "title": "Import nie powiódł się", - "message": "Nie udało się zaimportować tablicy. Sprawdź logi, aby uzyskać więcej informacji" - } - }, - "form": { - "file": { - "label": "Wybierz plik JSON", - "invalidError": "Nieprawidłowy plik konfiguracji" - }, - "apps": { - "label": "Aplikacje", - "avoidDuplicates": { - "label": "Unikaj duplikatów", - "description": "Ignoruje aplikacje, dla których już istnieje aplikacja z tym samym adresem href" - }, - "onlyImportApps": { - "label": "Import tylko aplikacje", - "description": "Dodaje tylko aplikacje, tablica musi zostać odtworzona ręcznie" - } - }, - "name": { - "label": "Nazwa tablicy" - }, - "screenSize": { - "label": "Rozmiar ekranu", - "description": "W wersjach przed 1.0 istniały trzy różne tryby, dzięki czemu można było wybrać liczbę kolumn dla każdego rozmiaru ekranu.", - "option": { - "sm": "Mały", - "md": "Średni", - "lg": "Duży" - } - }, - "sidebarBehavior": { - "label": "Zachowanie paska bocznego", - "description": "Paski boczne zostały usunięte w wersji 1.0, możesz wybrać, co ma się stać z elementami, które się w nich znajdowały.", - "option": { - "lastSection": { - "label": "Ostatnia sekcja", - "description": "Pasek boczny będzie wyświetlany poniżej ostatniej sekcji" - }, - "removeItems": { - "label": "Usuń elementy", - "description": "Elementy znajdujące się w pasku bocznym zostaną usunięte" - } - } - } - } - }, "quickCreateApp": { "modal": { "title": "Utwórz aplikację w locie", @@ -4167,6 +5844,12 @@ } } }, + "landmark": { + "canvas": "Płótno panelu", + "leftRail": "Kolej z lewej tablicy rozdzielczej", + "rightRail": "Kolej prawej tablicy rozdzielczej", + "items": "Elementy panelu ustawień" + }, "field": { "pageTitle": { "label": "Tytuł strony" @@ -4236,7 +5919,8 @@ } }, "primaryColor": { - "label": "Kolor podstawowy" + "label": "Kolor podstawowy", + "locked": "Administrator utrzymuje kolor znaku towarowego instancji na każdym pokładzie." }, "secondaryColor": { "label": "Kolor akcentowy" @@ -4276,9 +5960,6 @@ "xl": "Bardzo duży" } }, - "name": { - "label": "Nazwa" - }, "isPublic": { "label": "Publiczna", "description": "Tablice publiczne są dostępne dla wszystkich, nawet bez konta." @@ -4298,9 +5979,44 @@ "title": "Układ", "responsive": { "title": "Responsywne układy", + "description": "Każdy układ zachowuje swoje własne pozycje i rozmiary. Komórka i baza są zawsze dostępne, dodaj własne układy przy każdym dodatkowym przerwie.", "action": { "add": "Dodaj układ" } + }, + "role": { + "mobile": "Mobilny", + "base": "Podstawa", + "custom": "Własny" + }, + "custom": { + "defaultName": "Własny układ" + }, + "mobile": { + "breakpointDescription": "Komórka jest zawsze używana od 0px do następnego punktu przerwania układu." + }, + "preview": { + "columns": "kolumny", + "empty": "Ten układ jest pusty", + "dynamicSection": "Sekcja dynamiczna", + "editorWidthLabel": "{layoutName} · {width}px" + }, + "reset": { + "action": "Resetuj z bazy", + "confirm": { + "title": "Reset {layoutName}?", + "message": "To zastępuje każdą zapisaną pozycję i rozmiar w tym układzie nowym układem wygenerowanym z Bazy. Tego nie można cofnąć." + } + }, + "edit": { + "action": "Edytuj układ", + "saveAndEdit": "Zapisz i edytuj", + "save": "Zapisz układ", + "cancel": { + "action": "Anuluj edycję układu", + "title": "Odrzucić zmiany układu?", + "message": "Twoje niezapisane zmiany w tym układzie zostaną odrzucone." + } } }, "background": { @@ -4337,10 +6053,7 @@ "rename": { "label": "Zmień nazwę tablicy", "description": "Zmiana nazwy spowoduje, że wszystkie linki do tej tablicy przestaną działać.", - "button": "Zmień nazwę", - "modal": { - "title": "Zmień nazwę tablicy" - } + "button": "Zmień nazwę" }, "visibility": { "label": "Zmień widoczność tablicy", @@ -4364,9 +6077,7 @@ } }, "delete": { - "label": "Usuń tę tablicę", "description": "Po usunięciu tablicy nie będzie można tego cofnąć. Upewnij się, że chcesz kontynuować.", - "button": "Usuń tę tablicę", "confirm": { "title": "Usuń tablicę", "description": "Czy na pewno chcesz usunąć tę tablicę? Spowoduje to trwałe usunięcie tablicy i całej jej zawartości." @@ -4411,28 +6122,41 @@ }, "layout": { "field": { - "name": { - "label": "Nazwa" - }, "columnCount": { "label": "Liczba kolumn" }, "breakpoint": { "label": "Punkt przerwania", "description": "Układ będzie używany na wszystkich ekranach większych niż ten punkt przerwania, aż do kolejnego, większego punktu przerwania." + }, + "gutters": { + "label": "Stałe paski boczne", + "description": "Zarezerwuj do trzech kolumn tablicy rozdzielczej po obu stronach. Pozostałe płótno automatycznie powraca.", + "left": { + "label": "Left sidebar", + "description": "Pozostaw ten obszar widoczny podczas przewijania tablicy rozdzielczej.", + "thumbLabel": "Left sidebar width" + }, + "right": { + "label": "Prawy pasek boczny", + "description": "Pozostaw ten obszar widoczny podczas przewijania tablicy rozdzielczej.", + "thumbLabel": "Szerokość prawego paska bocznego" + }, + "width": { + "label": "Szerokość w kolumnach" + }, + "preview": { + "label": "Podgląd układu panelu ustawień" + } } } }, "management": { "metaTitle": "Zarządzanie", - "title": { - "morning": "Dzień dobry, {username}", - "afternoon": "Dzień dobry, {username}", - "evening": "Dobry wieczór, {username}" - }, "notFound": { "title": "Nie znaleziono", - "text": "Nie znaleziono żądanego zasobu" + "text": "Nie znaleziono żądanego zasobu", + "backToHome": "Powrót do zarządzania domem" }, "error": { "title": "Nie można załadować tej strony", @@ -4441,20 +6165,10 @@ }, "navbar": { "items": { - "workshop": "Workshop", "home": "Strona główna", - "boards": "Tablice", - "apps": "Aplikacje", - "integrations": "Integracje", - "customWidgets": "Niestandardowe Widgety", - "searchEngies": "Wyszukiwarki", - "medias": "Media", "users": { - "label": "Użytkownicy", "items": { - "manage": "Zarządzaj", - "invites": "Zaproszenia", - "groups": "Grupy" + "manage": "Zarządzaj" } }, "tools": { @@ -4462,10 +6176,7 @@ "items": { "docker": "Docker", "kubernetes": "Kubernetes", - "logs": "Logi", "api": "API", - "certificates": "Certyfikaty", - "tasks": "Zadania", "backup": "Kopia Zapasowa" } }, @@ -4479,21 +6190,12 @@ "sourceCode": "Kod źródłowy" } }, - "about": "O programie" + "about": "O programie", + "assistant": "Asystent" } }, "page": { "home": { - "statistic": { - "board": "Tablice", - "user": "Użytkownicy", - "invite": "Zaproszenia", - "integration": "Integracje", - "app": "Aplikacje", - "group": "Grupy", - "searchEngine": "Wyszukiwarki", - "media": "Multimedia" - }, "statisticLabel": { "boards": "Tablice", "resources": "Zasoby", @@ -4531,13 +6233,8 @@ "tooltip": "Ta tablica będzie wyświetlana jako Twoja tablica mobilna" } }, - "duplicate": { - "label": "Duplikuj tablicę" - }, "delete": { - "label": "Usuń trwale", "confirm": { - "title": "Usuń tablicę", "description": "Czy na pewno chcesz usunąć tablicę {name}?" } } @@ -4546,28 +6243,82 @@ "public": "Ta tablica jest publiczna", "private": "Ta tablica jest prywatna" }, - "noResults": { - "title": "Brak tablic" + "preview": { + "label": "Podgląd układu dla {name}, z artykułami {count}", + "unknownCreator": "Nieznany twórca" }, - "modal": { - "createBoard": { - "field": { - "name": { - "label": "Nazwa" - } - } - } + "noResults": { + "title": "Brak tablic", + "description": "Utwórz dział, aby uporządkować swoje aplikacje i widżety w jednym miejscu." } }, "media": { "includeFromAllUsers": "Uwzględnij media od wszystkich użytkowników" }, "user": { - "back": "Powrót do użytkowników", "fieldsDisabledExternalProvider": "Niektóre pola są zablokowane, ponieważ są zarządzane przez zewnętrznego dostawcę uwierzytelniania.", "setting": { "general": { "title": "Ogólne", + "header": { + "title": "Studio nagłówka", + "badge": "Osobisty", + "description": "Przeciągnij sterowanie gdziekolwiek w rzędzie. Lewo, Środek i Prawo pozostają na stałe, podczas gdy sterowanie przesuwaniem się wokół nich.", + "device": { + "desktop": "Pulpit", + "mobile": "Mobilny" + }, + "zones": { + "left": "Lewo", + "center": "Wyśrodkowany", + "right": "Prawo" + }, + "action": { + "hide": "Ukryj nagłówek", + "show": "Pokaż nagłówek", + "configure": "Przenieś lub skonfiguruj {item}", + "remove": "Usuń {item}", + "dropIntoZone": "Przejdź do sekcji {zone}" + }, + "preview": { + "board": "Podgląd Panelu dla {name}", + "empty": "Układ panelu ustawień nie jest dostępny" + }, + "available": { + "title": "Dostępne ustawienia", + "description": "Dodaj sterownik, a następnie przeciągnij pełny przycisk na pozycję powyżej.", + "requiredAlways": "Ta kontrola jest wymagana, ale możesz ją przenieść gdziekolwiek w nagłówku.", + "allAdded": "Każda wbudowana kontrola jest już w nagłówku.", + "add": "Dodaj {item}", + "boardShortcut": "Skrót na tablicy", + "chooseBoard": "Wybierz tablicę" + }, + "configuration": { + "description": "Ta kontrola pozostaje w takim samym rozmiarze jak w nagłówku żywy.", + "searchDisplay": { + "input": "Pasek wyszukiwania", + "icon": "Tylko ikona" + }, + "logoDisplay": { + "logo": "Tylko logo", + "logoAndText": "Logo + tekst" + } + }, + "items": { + "logo": "Logo", + "search": "Szukaj", + "home": "Tablica główna", + "boardSwitcher": "Tablice", + "assistant": "Asystent", + "docker": "Docker", + "boardEdit": "Edytuj tablicę", + "boardSettings": "Ustawienia tablicy", + "settings": "Twoje ustawienia", + "themeToggle": "Przełącz motyw", + "user": "Konto", + "boardUnavailable": "Tablica niedostępna" + } + }, "item": { "language": "Język & Region", "board": { @@ -4601,14 +6352,10 @@ }, "security": { "title": "Bezpieczeństwo" - }, - "board": { - "title": "Tablice" } }, "list": { - "metaTitle": "Zarządzaj użytkownikami", - "title": "Użytkownicy" + "metaTitle": "Zarządzaj użytkownikami" }, "edit": { "metaTitle": "Edytuj użytkownika {username}" @@ -4662,9 +6409,6 @@ } }, "field": { - "id": { - "label": "ID" - }, "creator": { "label": "Twórca" }, @@ -4688,10 +6432,7 @@ }, "setting": { "title": "Ustawienia", - "alert": "Ustawienia grup są priorytetyzowane według kolejności grup na liście. Ustawienia z górnych grup nadpisują ustawienia z grup dolnych.", - "board": { - "title": "Tablice" - } + "alert": "Ustawienia grup są priorytetyzowane według kolejności grup na liście. Ustawienia z górnych grup nadpisują ustawienia z grup dolnych." }, "members": { "title": "Członkowie", @@ -4699,10 +6440,7 @@ "notFound": "Nie znaleziono członków" }, "permissions": { - "title": "Uprawnienia", - "form": { - "unsavedChanges": "Masz niezapisane zmiany!" - } + "title": "Uprawnienia" } } }, @@ -4711,12 +6449,10 @@ "notification": { "success": { "message": "Ustawienia zostały pomyślnie zapisane" - }, - "error": { - "message": "Nie udało się zapisać ustawień" } }, "section": { + "analyticsDocumentation": "Zobacz, co dokładnie analizuje dane homarr", "analytics": { "title": "Analityka", "general": { @@ -4745,7 +6481,6 @@ } }, "board": { - "title": "Tablice", "homeBoard": { "label": "Globalna tablica główna", "mobileLabel": "Global mobile board", @@ -4764,7 +6499,6 @@ } }, "user": { - "title": "Użytkownicy", "enableGravatar": { "label": "Włącz Gravatar", "description": "Używa awatarów z Libravatar/Gravatar, gdy nie ustawiono własnego awatara i skonfigurowano adres e-mail" @@ -4780,12 +6514,86 @@ "appearance": { "title": "Wygląd", "defaultColorScheme": { - "label": "Domyślny schemat kolorów", + "label": "Domyślny schemat kolorów" + } + }, + "branding": { + "title": "Instancja branding", + "groups": { + "identity": "Tożsamość", + "appearance": "Wygląd", + "customCss": "Custom CSS", + "authentication": "Authentication" + }, + "identity": { + "description": "Logo aplikacji jest większym znakiem używanym w aplikacji, na stronach logowania i zainstalowanych aplikacjach. Ikona przeglądarki (favicon) to mały kwadrat używany w zakładkach i zakładkach; gdy pusty wróci do logo aplikacji." + }, + "appName": { + "label": "Nazwa aplikacji" + }, + "greeting": { + "label": "Własne powitanie" + }, + "logo": { + "label": "Logo aplikacji", + "placeholder": "/logo/logo.png" + }, + "favicon": { + "label": "Ikona przeglądarki (favicon)", + "placeholder": "Używa logo aplikacji" + }, + "primaryColor": { + "label": "Kolor podstawowy" + }, + "secondaryColor": { + "label": "Drugi akcent" + }, + "lockPrimaryColor": { + "label": "Zachowaj ten kolor na każdej płytce", + "description": "Zapobiega zastępowaniu kolorów działu." + }, + "signInBackground": { + "label": "Tło uwierzytelniania", + "placeholder": "https://example.com/background.jpg" + }, + "signInOverlay": { + "label": "Nakładka w tle" + }, + "defaultRadius": { + "label": "Styl narożnika", "options": { - "auto": "Auto", - "light": "Jasny", - "dark": "Ciemny" + "xs": "Mocno", + "sm": "Subtelny", + "md": "Zrównoważony", + "lg": "Zaokrąglone", + "xl": "Miękki" } + }, + "customCss": { + "label": "Globalny niestandardowy CSS", + "description": "Zastosowano do każdej strony. Niestandardowy CSS może go nadpisać." + }, + "authVisibility": { + "description": "Wybierz co pojawia się na każdej stronie uwierzytelniania.", + "appName": "Nazwa aplikacji", + "logo": "Logo aplikacji", + "greeting": "Powitanie" + }, + "summary": { + "title": "Bieżąca marka", + "cornerStyle": "Styl narożnika", + "palette": "Palette", + "backgroundConfigured": "Własne tło · {overlay}% nakładka", + "backgroundDefault": "Domyślne tło", + "greetingConfigured": "Własne powitanie", + "greetingDefault": "Domyślne powitanie", + "boardColorLocked": "Kolor tablicy zablokowany", + "boardColorFlexible": "Kolor tablicy dozwolony", + "appName": "Nazwa zlecenia", + "logo": "Logo", + "greeting": "Powitanie", + "on": "Włączone", + "off": "Wyłączony" } }, "culture": { @@ -4793,12 +6601,177 @@ "defaultLocale": { "label": "Język domyślny" } + }, + "assistant": { + "loading": "Ładowanie konfiguracji asystenta", + "title": "Asystent", + "description": "Połącz punkt końcowy modelu zgodny z OpenAI dla szerokiego asystenta.", + "security": { + "description": "Klucze API i dodatkowe wartości nagłówka są zaszyfrowane w bazie danych Homarr. Nigdy nie są zwracane do przeglądarki. Prośby o model są wysyłane z serwera Homarr bezpośrednio do skonfigurowanego punktu końcowego." + }, + "overview": { + "connectionReady": "Połączenie gotowe", + "unsavedChanges": "Niezapisane zmiany", + "setupRequired": "Wymagana konfiguracja", + "disabled": "Nieaktywny", + "noModel": "Nie wybrano żadnego modelu" + }, + "connection": { + "endpointTitle": "Dostawca i punkt końcowy", + "description": "Wybierz ustawienie wstępne lub podłącz jakąkolwiek usługę, która implementuje API Chat Completions API.", + "save": "Zapisz połączenie z dostawcą" + }, + "credentials": { + "title": "Dane logowania", + "description": "Dodaj sekrety potrzebne dla tego punktu końcowego. Przechowywane wartości pozostają zaszyfrowane i nie można ich odczytać z powrotem.", + "required": "Klucz wymagany", + "optional": "Klucz opcjonalny", + "workshop": "Logowanie na GitHub dla użytkownika" + }, + "provider": { + "title": "Dostawca", + "groups": { + "free": "Darmowe z Homarr", + "hosted": "Dostawcy hostowani", + "local": "Lokalni dostawcy", + "custom": "Własny" + }, + "options": { + "homarr": { + "description": "Ograniczona liczba zastosowań asystenta jest codziennie darmowa, opłacana przez zespół Homarr. Zaloguj się za pomocą Warsztatu Społeczności, aby skorzystać ze swojego dodatku." + }, + "openrouter": { + "description": "Hosted model routing z dużym katalogiem modeli." + }, + "openai": { + "description": "Kompletności czatu OpenAI przez oficjalny punkt końcowy API." + }, + "anthropic": { + "description": "Claude przez punkt końcowy kompatybilności SDK Antropii." + }, + "google-gemini": { + "description": "Gemini przez punkt końcowy kompatybilny z OpenAI Google." + }, + "xai": { + "description": "Grok models za pomocą API kompatybilnego z xAI OpenAI." + }, + "groq": { + "description": "Szybko hostowane ustawienia poprzez interfejs API kompatybilny z Groq." + }, + "mistral": { + "description": "Modele mistralne za pośrednictwem oficjalnego API." + }, + "deepseek": { + "description": "Modele DeepSeek za pośrednictwem interfejsu API kompatybilnego z OpenAI." + }, + "together": { + "description": "Hostowane otwarte modele za pomocą API kompatybilnego z OpenAI Together'a" + }, + "ollama": { + "description": "Lokalny lub sieciowy serwer Ollama przy użyciu interfejsu API zgodnego z OpenAI." + }, + "lm-studio": { + "description": "Lokalny serwer LM Studio z włączoną kompatybilnością OpenAI." + }, + "llama-cpp": { + "description": "Lokalny lub sieciowy serwer llama.cpp przy użyciu interfejsu API kompatybilnego z OpenAI." + }, + "custom": { + "label": "Niestandardowy punkt końcowy", + "description": "Jakiekolwiek inne punkty końcowe zgodne z zakończeniami czatu OpenAI." + } + }, + "homarrAuth": { + "title": "Bezpłatne codzienne zastosowania asystenta uwzględnione", + "description": "Klucz API nie jest wymagany. Zespół Homarr obejmuje ograniczoną liczbę zastosowań Asystenta każdego dnia. Zaloguj się za pomocą Warsztatu Społeczności, aby oddzielić dodatek." + } + }, + "baseUrl": { + "title": "Podstawowy URL API", + "description": "Dołącz prefiks API, zazwyczaj /v1. W kontenerach localhost odnosi się do kontenera Homarr." + }, + "apiKey": { + "title": "Klucz API", + "required": "Wymagane przez tego dostawcę. Wartość jest szyfrowana i tylko do zapisu.", + "optional": "Opcjonalnie dla lokalnych punktów końcowych. Pozostaw puste, gdy usługa nie wymaga uwierzytelniania na okazicie.", + "placeholder": "Wprowadź klucz API", + "savedTitle": "Zaszyfrowany klucz API zapisany", + "savedDescription": "Homarr może użyć tego klucza, ale nie może wyświetlić ani odzyskać swojej wartości.", + "remove": "Usuń zapisany klucz API", + "removeFlow": { + "title": "Usunąć zapisany klucz API?", + "description": "Ten dostawca wymaga klucza API. Usunięcie tego klucza może zatrzymać odkrywanie modelu i odpowiedzi asystenta dopóki inny klucz nie zostanie zapisany.", + "optionalDescription": "Punkt końcowy przestanie otrzymywać uwierzytelnianie na okaziciela po usunięciu tego klucza. Potwierdź, że akceptuje nieuwierzytelnione żądania lub używa innego przechowywanego nagłówka.", + "cancel": "Zachowaj zapisany klucz", + "confirm": "Usuń klucz API" + } + }, + "headers": { + "title": "Dodatkowe nagłówki żądania", + "description": "Opcjonalne nagłówki uwierzytelniania lub routingu. Wartości nagłówka są zaszyfrowane i tylko do zapisu.", + "add": "Dodaj nagłówek", + "name": "Nazwa nagłówka", + "value": "Wartość nagłówka", + "valuePlaceholder": "Tajna lub routingowa wartość", + "remove": "Usuń nagłówek", + "configured": "Dodatkowe zaszyfrowane nagłówki są skonfigurowane. Dodawanie nagłówków zastępuje kompletny zapisany zestaw.", + "empty": "Brak dodatkowych nagłówków dla tego dostawcy.", + "savedBadge": "Nagłówki zapisane", + "pendingRemoval": "Usuwanie oczekujące", + "clear": "Usuń przechowywane nagłówki podczas zapisywania", + "keep": "Zachowaj przechowywane nagłówki" + }, + "model": { + "title": "Wzór", + "description": "Wybierz odkryty model lub wprowadź dokładny identyfikator modelu punktu końcowego.", + "placeholder": "Identyfikator modelu", + "refresh": "Odśwież modele", + "chooseModel": "Wybierz model używany do nowych konwersacji.", + "discoveryPath": "Ścieżka wyszukiwania modelu", + "discoveryPathDescription": "Dodano do bazowego adresu URL API. Pozostaw puste, aby wyłączyć wyszukiwanie i użyć ręcznego identyfikatora modelu.", + "manual": "Wprowadź identyfikator modelu ręcznie lub zapisz połączenie aby odkryć modele.", + "manualFallback": "Odkrycie jest niedostępne. Nadal możesz wprowadzić identyfikator modelu ręcznie.", + "saveConnectionFirst": "Zapisz połączenie z dostawcą przed wybraniem modelu.", + "discovering": "Odświeżanie modeli dostępnych od tego dostawcy…", + "discovered": "{count, plural, one {Znaleziono # model. Obsługa narzędzi zależy od wybranego punktu końcowego i modelu.} other {Odkryto # modele. Obsługa narzędzi zależy od wybranego punktu końcowego i modelu.}}", + "discoveryFailed": "Odkrycie modelu nie zostało ukończone", + "context": "Okno kontekstowe {count}", + "toolsConfirmed": "Narzędzia reklamowane", + "toolsUnknown": "Zweryfikuj obsługę narzędzi" + }, + "serverTools": { + "title": "Narzędzia serwera", + "webSearch": { + "label": "Wyszukiwanie w Internecie", + "description": "Pozwól modelowi na wyszukiwanie na żywo przez OpenRouter gdy żądanie wymaga aktualnych informacji. Wyszukiwanie jest obciążone osobno przez OpenRouter.", + "proxyDescription": "Wyślij narzędzie serwera wyszukiwania internetowego OpenRouter do tego punktu końcowego. Włącz to tylko wtedy, gdy niestandardowy punkt końcowy przekierowuje format narzędzi serwera OpenRfier, takich jak proxy węzła Homarr.", + "limit": "Model decyduje, kiedy szukać, z limitem 3 wyszukiwań i 5 wyników dla każdego zapytania." + } + }, + "enabled": { + "label": "Włącz Asystenta", + "description": "Pokazuje asystenta dla wszystkich zalogowanych użytkowników. Istniejące uprawnienia Homarr nadal dotyczą każdego połączenia z narzędziami wewnętrznymi." + }, + "save": "Zapisz asystenta", + "notification": { + "connectionSaved": { + "title": "Zapisano połączenie z dostawcą", + "message": "Punkt końcowy i zaszyfrowane poświadczenia są gotowe do wyboru modelu.", + "credentialsCleared": "Punkt końcowy zmieniony, więc poprzednie dane logowania zostały wyczyszczone. Dodaj dane logowania dla nowego miejsca docelowego, jeśli jest to wymagane." + }, + "saved": { + "title": "Ustawienia asystenta zapisane", + "message": "Nowy model i ustawienia dostępności są aktywne." + }, + "error": { + "title": "Nie można zapisać ustawień asystenta" + } + } } } }, "tool": { "tasks": { - "title": "Zadania", "status": { "idle": "Bezczynny", "running": "Uruchomione", @@ -4816,6 +6789,11 @@ "label": "Pingi" } }, + "action": { + "run": "Uruchom {name} teraz", + "enable": "Włącz {name}", + "disable": "Wyłącz {name}" + }, "interval": { "seconds": "Co {interval, plural, =1 {sekundę} other {# sekundy}}", "minutes": "Co {interval, plural, =1 {minutę} other {# minuty}}”", @@ -4831,13 +6809,7 @@ } } }, - "settings": { - "title": "Ustawienia zadania dla {jobName}" - }, "field": { - "name": { - "label": "Nazwa" - }, "interval": { "label": "Interwał harmonogramu" }, @@ -4851,11 +6823,6 @@ "table": { "search": "Szukaj wśród {count} zadań..." }, - "action": { - "refresh": { - "label": "Odśwież" - } - }, "refresh": { "success": { "message": "Zadania odświeżone pomyślnie" @@ -4889,7 +6856,6 @@ } }, "api": { - "title": "API", "modal": { "createApiToken": { "title": "Token API został utworzony", @@ -4915,7 +6881,6 @@ }, "table": { "header": { - "id": "ID", "createdBy": "Utworzony przez", "actions": "Akcje" } @@ -4971,43 +6936,12 @@ "availableTools": { "title": "Dostępne Narzędzia", "description": "Dostępne narzędzia: {count}. Rozszerz kategorię, aby zobaczyć poszczególne narzędzia i ich opisy.", - "columnType": "Typ", - "columnName": "Narzędzie", - "columnDescription": "Opis" - }, - "troubleshooting": { - "title": "Rozwiązywanie problemów", - "missingHeader": { - "title": "\"Missing ApiKey header\"", - "description": "Twój klient nie wysyła nagłówka {header}. Zweryfikuj czy sekcja {section} w konfiguracji MCP jest poprawna. Niektórzy klienci wymagają ponownego uruchomienia po zmianie konfiguracji." - }, - "invalidFormat": { - "title": "\"Invalid ApiKey format\"", - "description": "Upewnij się, że skopiowałeś pełny klucz API, a nie tylko jego część." - }, - "invalidKey": { - "title": "\"Invalid API key\"", - "description": "Identyfikator klucza nie został znaleziony lub token jest nieprawidłowy. Klucze API można wyświetlić tylko raz po utworzeniu. Jeśli go zgubiłeś, usuń stary klucz i utwórz nowy." - }, - "connectionRefused": { - "title": "Odmowa połączenia / przekroczenie czasu połączenia", - "description": "Upewnij się, że adres URL jest dostępny od klienta AI. Jeśli Homarr działa za odwróconym proxy lub w Docker, użyj zewnętrznego adresu URL (nie {localhost}). Sprawdź, czy port jest poprawny (domyślnie: 7575 dla Docker)." - }, - "toolsNotAppearing": { - "title": "Narzędzia nie pojawiają się", - "description": "Niektóre narzędzia wymagają konfiguracji specyficznych integracji (np. Docker, Overseerr). Lista narzędzi zależy od tego, co jest dostępne w twojej instancji Homarr." + "filteredDescription": "{count} pasujące narzędzia w rozszerzonych kategoriach.", + "search": "Narzędzia wyszukiwania", + "noResults": { + "title": "Żadne narzędzia nie pasują do tego wyszukiwania", + "description": "Żadne narzędzie MCP nie pasuje do \"{search}\". Wypróbuj przestrzeń nazw, nazwę narzędzia lub opis." } - }, - "copy": "Kopiuj", - "oneClick": { - "title": "Zainstaluj jednym kliknięciem", - "subtitle": "Używa OAuth - uwierzytelniaj w przeglądarce przy pierwszym użyciu", - "vsCode": "Zainstaluj w VS Code", - "cursor": "Zainstaluj w Cursor", - "copyUrl": "Kopiuj URL MCP", - "copied": "Skopiowano!", - "copyHint": "Dla ChatGPT, Claude Code, lub dowolnego klienta MCP", - "manualConfig": "Konfiguracja ręczna" } } } @@ -5024,47 +6958,12 @@ "title": "Eksport danych wrażliwych", "warningTitle": "Ten eksport zawiera całą Twoją bazę danych.", "warningBody": "Kopia zapasowa obejmuje wszystkich użytkowników, sekrety integracji (zaszyfrowane), klucze API, tablice i dane aplikacji. Przechowuj wyeksportowany plik bezpiecznie i nie udostępniaj go.", - "typePrompt": "Wpisz \"{phrase}\", aby kontynuować", - "submit": "Eksportuj Bazę Danych", - "cancel": "Anuluj" + "submit": "Eksportuj Bazę Danych" } }, "import": { "title": "Przywróć Bazę Danych", - "description": "Prześlij poprzednio wyeksportowaną kopię zapasową ZIP, aby przywrócić bazę danych. To zastąpi całą bazę danych. Jeśli kopia zapasowa została utworzona przy użyciu innego klucza szyfrowania, sekrety zostaną automatycznie ponownie zaszyfrowane.", - "warning": "Przywracanie kopii zapasowej całkowicie zastąpi Twoją aktualną bazę danych i zrestartuje aplikację. Tej akcji nie można cofnąć.", - "dropzone": { - "title": "Upuść kopię zapasową ZIP tutaj lub kliknij aby przeglądać", - "description": "Akceptowane są tylko pliki .zip z kopii zapasowej Homarr SQLite" - }, - "changeFile": "Zmień plik", - "button": "Przywróć Bazę Danych", - "success": { - "title": "Przywracanie Ukończone", - "message": "Baza danych została pomyślnie przywrócona. Aplikacja uruchamia się ponownie..." - }, - "error": "Importowanie nie powiodło się" - }, - "preview": { - "title": "Zawartość kopii zapasowej", - "exported": "Wyeksportowano {date}", - "loading": "Analizowanie pliku kopii zapasowej...", - "errorTitle": "Podgląd Błędu", - "entity": "Encja", - "count": "Ilość", - "boards": "Tablice", - "entities": { - "board": "Tablice", - "user": "Użytkownicy", - "app": "Aplikacje", - "integration": "Integracje", - "item": "Widgety", - "media": "Multimedia", - "search_engine": "Wyszukiwarki" - }, - "analyzeError": "Nie udało się przeanalizować pliku kopii zapasowej", - "invalidMissingMetadata": "Nieprawidłowa kopia zapasowa: brakuje metadata.json", - "invalidMissingDb": "Nieprawidłowa kopia zapasowa: brakuje db.sqlite" + "description": "Prześlij poprzednio wyeksportowaną kopię zapasową ZIP, aby przywrócić bazę danych. To zastąpi całą bazę danych. Jeśli kopia zapasowa została utworzona przy użyciu innego klucza szyfrowania, sekrety zostaną automatycznie ponownie zaszyfrowane." }, "restore": { "dropzone": { @@ -5074,29 +6973,20 @@ "analyzing": "Analizowanie kopii zapasowej...", "changeFile": "Zmień plik", "continueToRestore": "Kontynuuj przywracanie", - "tryAgain": "Spróbuj ponownie", "analysisError": "Błąd analizy", "preview": { "title": "Zawartość kopii zapasowej", "exported": "Eksportowano {date}", "entity": "Encja", "count": "Ilość", - "boards": "Tablice", "entities": { - "board": "Tablice", - "user": "Użytkownicy", - "app": "Aplikacje", - "integration": "Integracje", - "item": "Widgety", - "media": "Multimedia", - "search_engine": "Wyszukiwarki" + "item": "Widgety" }, "migrationsApplied": "{count} migracja została zastosowana", "migrationsAppliedPlural": "{count} migracje zostały zastosowane", "migrationsOlderVersion": "Ta kopia zapasowa została wykonana ze starszej wersji Homarr. {count} migracja schematu została zastosowana, aby ją zaktualizować.", "migrationsOlderVersionPlural": "Ta kopia zapasowa została wykonana ze starszej wersji Homarr. {count} migracje schematu zostały zastosowane, aby ją zaktualizować.", "migrationsUpToDate": "Schemat bazy danych jest aktualny (zastosowano {count} migracji)", - "upToDate": "Na bieżąco", "migrationsPending": "{count} oczekujące" }, "migration": { @@ -5107,21 +6997,21 @@ "title": "Czynność niszczycielska", "warningTitle": "To nieodwracalnie zastąpi całą Twoją bazę danych.", "warningBody": "Wszystkie bieżące tablice, użytkownicy, aplikacje, integracje, ustawienia i sesje zostaną utracone. Tej czynności nie można cofnąć. Aplikacja zostanie uruchomiona ponownie po przywróceniu.", - "typePrompt": "Wpisz \"{phrase}\", aby kontynuować", - "cancel": "Anuluj", "submit": "Przywrócono Bazę Danych" }, "progress": { "title": "Przywracanie bazy danych...", - "extracting": "Rozpakowywanie archiwum kopii zapasowej", - "migrating": "Wdrażanie migracji bazy danych", - "encrypting": "Ponowne szyfrowanie sekretów integracji", - "swapping": "Zastępowanie pliku bazy danych", - "restarting": "Ponowne uruchamianie serwera" + "restarting": "Ponowne uruchamianie serwera", + "relogin": "Przywracanie bazy danych unieważniło Twoją obecną sesję. Homarr wyśle Ci do logowania, gdy serwer będzie gotowy." }, "complete": { "title": "Przywrócono kopię zapasową", - "message": "Baza danych została pomyślnie przywrócona. Serwer uruchamia się ponownie — odśwież stronę za kilka sekund." + "message": "Baza danych została pomyślnie przywrócona. Serwer uruchamia się ponownie — odśwież stronę za kilka sekund.", + "button": "Zaloguj się teraz" + }, + "timeout": { + "title": "Serwer nie wrócił do trybu online", + "message": "Przywracanie bazy danych zakończone, ale Homarr nie został ponownie gotowy. Spróbuj ponownie sprawdzić połączenie lub odświeżyć tę stronę ręcznie." }, "failed": { "title": "Przywracanie nie powiodło się" @@ -5129,6 +7019,9 @@ "invalidMissingMetadata": "Nieprawidłowa kopia zapasowa: brakuje metadata.json", "invalidMissingDb": "Nieprawidłowa kopia zapasowa: brakuje db.sqlite", "analyzeError": "Nie udało się przeanalizować kopii zapasowej" + }, + "confirm": { + "typePrompt": "Wpisz \"{phrase}\", aby kontynuować" } } }, @@ -5163,7 +7056,11 @@ "toggleBoardEdit": "Przełącz tryb edycji tablicy", "toggleColorScheme": "Przełącz tryb jasny/ciemny", "saveNotebook": "Zapisz notatnik (tylko w widżecie notatnika)", - "openSpotlight": "Otwórz wyszukiwarkę" + "openSpotlight": "Otwórz wyszukiwarkę", + "openSpotlightApps": "Otwórz wyszukiwanie aplikacji", + "openSpotlightAssistant": "Otwórz tryb asystenta", + "openSpotlightPreferences": "Otwórz tryb preferencji", + "openAssistant": "Otwórz Asystenta" }, "note": "Wskazówka: Mod odnosi się zarówno do klawisza Ctrl, jak i ⌘ na macOS" } @@ -5173,6 +7070,63 @@ }, "docker": { "title": "Kontenery", + "reconciliation": { + "title": "Pomocna konfiguracja dokera", + "suggestions": "{count, plural, =0 {Brak sugestii} one {# sugestie} other {# sugestie}}", + "attention": "{count} wymaga uwagi", + "endpointUnavailable": "Niektóre usługi nie mogą zostać sprawdzone, ponieważ te punkty końcowe są niedostępne: {names}", + "empty": "Nie znaleziono żadnych widocznych usług dokujących.", + "emptyFilter": "Żadne usługi nie pasują do tego widoku.", + "ambiguous": "Więcej niż jeden istniejący element może pasować do tej usługi. Homarr nie wybierze go automatycznie.", + "filter": { + "attention": "Potrzebne uwagi", + "represented": "Już skonfigurowano", + "all": "Wszystkie" + }, + "state": { + "newRecognized": "Gotowy do połączenia", + "newApp": "Nowa usługa", + "represented": "Już reprezentowane", + "linked": "Powiązane", + "moved": "Adres zmieniony" + }, + "url": { + "manual": "Wprowadź adres ręcznie" + }, + "health": { + "layer": { + "docker": "Docker", + "integrationConfiguration": "Integracja", + "authentication": "Authentication", + "apiRequest": "API", + "appRepresentation": "Aplikacja", + "widgetConfiguration": "Widżet", + "widgetQuery": "Zapytanie widżetu" + }, + "status": { + "available": "Dostępne", + "configured": "Skonfigurowane", + "linked": "Powiązane", + "missing": "Brakujące", + "changed": "Zmieniono", + "unused": "„Technologia”, zgodnie z uwagą ogólną do technologii, służąca do „rozwoju”, „produkcji” lub „użytkowania” sprzętu lub „oprogramowania” wyszczególnionego w pozycjach 2B004, 2B005, 2B006.a, 2B006.b, 2B006.c, 2B006.c, 2B006.c, 2B006.c, 2B006.c, 2B006.c, 2B006.c, 2B006.c, 2B006.c, 2B006.c, 2B006.c, 2B006.c, 2B006.c, 2B006.c, 2B006.c, 2B006.c, 2B006.c, 2B006.c, 2B006.c, 2B006.c, 2B006.c, 2B006.c, 2B006.c, 2B006.c, 2B006.c, 2B006.c, 2B006.c, 2B006.c, 2B006.c, 2B006.c, 2B006.c, 2B006.c, 2B006.c, 2B006.c, 2B006.c, 2B006.c, 2B006.c, 2B006.c,", + "notApplicable": "Nie dotyczy", + "notObserved": "Nieobserwowane" + } + }, + "action": { + "review": "Przeglądaj", + "dismiss": "Odrzuć", + "restoreDismissed": "Przywracanie wyłączone ({count})", + "setupIntegration": "Skonfiguruj integrację", + "reviewIntegration": "Przejrzyj integrację", + "viewRepresentation": "Ustawienia widoku" + }, + "loadError": { + "title": "Nie można załadować asystenta konfiguracji dokera", + "message": "Informacje o usłudze dokowania są niedostępne. Spróbuj ponownie bez opuszczania tej strony." + } + }, "table": { "updated": "Zaktualizowano {when}", "refresh": { @@ -5185,9 +7139,6 @@ "totalMemory": "Całkowita Pamięć: {memory}" }, "field": { - "name": { - "label": "Nazwa" - }, "state": { "label": "Status", "option": { @@ -5201,9 +7152,6 @@ } }, "stats": { - "cpu": { - "label": "CPU" - }, "memory": { "label": "Pamięć" } @@ -5266,8 +7214,11 @@ } }, "remove": { - "label": "Usuń", "confirm": "Kliknij ponownie, aby trwale usunąć", + "confirmation": { + "title": "{count, plural, one {Usunąć # kontenerów?} other {Usunąć # kontenerów?}}", + "message": "{count, plural, one {To trwale usuwa # kontenerów: {names}} other {To trwale usuwa # kontenerów: {names}}}" + }, "notification": { "success": { "title": "Usunięto kontenery", @@ -5279,8 +7230,13 @@ } } }, + "result": { + "failure": { + "title": "Niektóre akcje kontenera nie powiodły się", + "message": "{total, plural, one {{failed} z # akcji nie powiodło się: {names}} other {{failed} z # akcji nie powiodło się: {names}}}" + } + }, "refresh": { - "label": "Odśwież", "notification": { "success": { "title": "Odświeżone kontenery", @@ -5311,18 +7267,33 @@ }, "error": { "internalServerError": "Nie udało się pobrać kontenerów Dockera", + "endpointUnavailable": "{count, plural, one {# Koniec dokowania niedostępny: {names}} other {# Punkty końcowe są niedostępne: {names}}}", "noColumns": "Wybierz co najmniej jedną kolumnę w ustawieniach widżetu" } }, "kubernetes": { + "context": { + "label": "Kontekst Kubernetes", + "loadError": { + "title": "Kontekst Kubernetes nie mógł zostać załadowany", + "message": "Informacje o kontekstach są niedostępne. Spróbuj ponownie bez opuszczania tej strony." + }, + "status": { + "available": "Dostępne", + "degraded": "Metrics unavailable", + "unavailable": "Unavailable" + }, + "unavailable": "Ten kontekst Kubernetes nie może zostać osiągnięty. Wybierz inny kontekst lub zweryfikuj jego poświadczenia i punkt końcowy.", + "metricsUnavailable": "Ten kontekst jest osiągalny, ale Serwer Metrics jest niedostępny. Ekwipunek pozostaje dostępny bez użycia CPU i pamięci." + }, "cluster": { "title": "Panel klastra", "label": "Klaster", "providers": "Dostawcy", "version": "Wersja", - "architecture": "Architektura", "capacity": { "title": "Pojemność", + "metricsUnavailable": "Serwer metryczny jest niedostępny. Ekwipunek i zarezerwowana pojemność pozostają widoczne, ale użycie CPU i pamięci na żywo nie może być wyświetlane.", "resource": { "reserved": "Zarezerwowane", "used": "Używane" @@ -5341,38 +7312,10 @@ } }, "nodes": { - "label": "Węzły", "field": { - "name": { - "label": "Nazwa" - }, - "state": { - "label": "Status", - "option": { - "ready": "Gotowe", - "NotReady": "Niegotowy" - } - }, - "cpu": { - "label": "CPU" - }, - "memory": { - "label": "RAM" - }, - "pods": { - "label": "Pody" - }, - "operatingSystem": { - "label": "System operacyjny" - }, - "architecture": { - "label": "Architektura" - }, + "metricsUnavailable": "Unavailable", "kubernetesVersion": { "label": "Wersja Kubernetes" - }, - "creationTimestamp": { - "label": "Utworzony" } }, "table": { @@ -5380,43 +7323,17 @@ } }, "namespaces": { - "label": "Przestrzenie nazw", - "field": { - "name": { - "label": "Nazwa" - }, - "state": { - "label": "Status", - "option": { - "active": "Aktywny", - "terminating": "Kończenie" - } - }, - "creationTimestamp": { - "label": "Utworzony" - } - }, "table": { "search": "zukaj {count} przestrzeni nazw" } }, "ingresses": { - "label": "Ingresy", "field": { - "name": { - "label": "Nazwa" - }, - "namespace": { - "label": "Przestrzeń nazw" - }, "className": { "label": "Nazwa klasy" }, "rulesAndPaths": { "label": "Reguły i ścieżki" - }, - "creationTimestamp": { - "label": "Utworzony" } }, "table": { @@ -5424,17 +7341,7 @@ } }, "services": { - "label": "Usługi", "field": { - "name": { - "label": "Nazwa" - }, - "namespace": { - "label": "Przestrzeń nazw" - }, - "type": { - "label": "Typ" - }, "ports": { "label": "Porty" }, @@ -5443,9 +7350,6 @@ }, "clusterIP": { "label": "Adres IP klastra" - }, - "creationTimestamp": { - "label": "Utworzony" } }, "table": { @@ -5453,25 +7357,12 @@ } }, "pods": { - "label": "Pody", "field": { - "name": { - "label": "Nazwa" - }, - "namespace": { - "label": "Przestrzeń nazw" - }, "image": { "label": "Obraz" }, "applicationType": { "label": "Typ aplikacji" - }, - "status": { - "label": "Status" - }, - "creationTimestamp": { - "label": "Utworzony" } }, "table": { @@ -5479,51 +7370,17 @@ } }, "secrets": { - "label": "Sekrety", - "field": { - "name": { - "label": "Nazwa" - }, - "namespace": { - "label": "przestrzeń nazw" - }, - "type": { - "label": "typ" - }, - "creationTimestamp": { - "label": "Utworzony" - } - }, "table": { "search": "Szukaj {count} sekretów" } }, "configmaps": { - "label": "ConfigMaps", - "field": { - "name": { - "label": "Nazwa" - }, - "namespace": { - "label": "przestrzeń nazw" - }, - "creationTimestamp": { - "label": "Utworzony" - } - }, "table": { "search": "Szukaj {count} configMaps" } }, "volumes": { - "label": "Wolumeny", "field": { - "name": { - "label": "Nazwa" - }, - "namespace": { - "label": "Przestrzeń nazw" - }, "accessModes": { "label": "Tryby dostępu" }, @@ -5538,12 +7395,6 @@ }, "volumeName": { "label": "Nazwa wolumenu" - }, - "status": { - "label": "Status" - }, - "creationTimestamp": { - "label": "Utworzony" } }, "table": { @@ -5552,6 +7403,29 @@ }, "error": { "internalServerError": "Nie udało się pobrać danych Kubernetes" + }, + "field": { + "name": { + "label": "Nazwa zlecenia" + }, + "namespace": { + "label": "Przestrzeń nazw" + }, + "creationTimestamp": { + "label": "Utworzony" + }, + "state": { + "label": "Stan pracy" + }, + "status": { + "label": "Status" + }, + "type": { + "label": "Pobierz typ klienta" + }, + "architecture": { + "label": "Architektura" + } } }, "permission": { @@ -5585,83 +7459,27 @@ }, "navigationStructure": { "manage": { - "workshop": { - "label": "Workshop" - }, "label": "Zarządzaj", - "boards": { - "label": "Tablice" - }, - "integrations": { - "label": "Integracje", - "edit": { - "label": "Edytuj" - }, - "new": { - "label": "Nowy" - } - }, - "search-engines": { - "label": "Wyszukiwarki", - "new": { - "label": "Nowy" - }, - "edit": { - "label": "Edytuj" - } - }, - "medias": { - "label": "Media" - }, - "apps": { - "label": "Aplikacje", - "new": { - "label": "Nowy" - }, - "edit": { - "label": "Edytuj" - } - }, "custom-widgets": { - "label": "Niestandardowe Wigety", - "new": { - "label": "Nowy" - }, "edit": { - "label": "Edytuj", "flow": { "label": "Flow" } + }, + "workshop": { + "label": "Warsztat" + }, + "publish": { + "label": "Opublikuj w Warsztacie" } }, "users": { - "label": "Użytkownicy", - "create": { - "label": "Utwórz" - }, "general": "Ogólne", - "security": "Bezpieczeństwo", - "board": "Tablice", - "groups": { - "label": "Grupy" - }, - "invites": { - "label": "Zaproszenia" - } + "security": "Bezpieczeństwo" }, "tools": { "label": "Narzędzia", - "tasks": { - "label": "Zadania" - }, - "docker": { - "label": "Docker", - "logs": { - "label": "Logi" - } - }, "kubernetes": { - "label": "Kubernetes", "nodes": { "label": "Węzły" }, @@ -5687,11 +7505,7 @@ "label": "Wolumeny" } }, - "logs": { - "label": "Logi" - }, "certificates": { - "label": "Certyfikaty", "hostnames": { "label": "Nazwy hostów" } @@ -5702,12 +7516,60 @@ }, "about": { "label": "O programie" + }, + "assistant": { + "label": "Asystent" } } }, "search": { "placeholder": "Wyszukaj cokolwiek", "nothingFound": "Nic nie znaleziono", + "modePicker": { + "search": { + "label": "Szukaj", + "placeholder": "Szukaj aplikacji, tablic, stron, poleceń i preferencji" + }, + "apps": { + "label": "Aplikacje", + "placeholder": "Szukaj aplikacji, działów i integracji" + }, + "command": { + "label": "Polecenia", + "placeholder": "Akcje wyszukiwania i polecenia" + }, + "preferences": { + "label": "Preferencje", + "placeholder": "Szukaj i zmień preferencje" + }, + "assistant": { + "label": "Asystent", + "placeholder": "Zapytaj Asystenta" + }, + "external": { + "label": "Web", + "placeholder": "Szukaj z zewnętrzną wyszukiwarką" + }, + "media": { + "label": "Multimedia", + "placeholder": "Szukaj filmu lub pokaż", + "fallback": "Szukaj mediów \"{query}\"" + }, + "userGroup": { + "label": "Ludzie", + "placeholder": "Szukaj użytkowników i grup" + }, + "continueWith": "Kontynuuj z", + "dialogAriaLabel": "Menu poleceń {mode}", + "navigationLabel": "Tryb wyszukiwania", + "modeAriaLabel": "Tryb {mode}", + "resultsAriaLabel": "Wyniki {mode}", + "footer": { + "navigate": "Navigate", + "open": "Otwórz", + "close": "Zamknij" + } + }, "error": { "fetch": "Wystąpił błąd podczas pobierania danych" }, @@ -5716,7 +7578,6 @@ "help": "Szukaj aplikacji, integracji lub tablic", "group": { "app": { - "title": "Aplikacje", "children": { "action": { "open": { @@ -5732,7 +7593,6 @@ } }, "board": { - "title": "Tablice", "children": { "action": { "open": { @@ -5752,9 +7612,6 @@ "title": "Wybierz akcję dla tablicy" } } - }, - "integration": { - "title": "Integracje" } } }, @@ -5783,9 +7640,6 @@ "newBoard": { "label": "Utwórz nową tablicę" }, - "importBoard": { - "label": "Importuj tablicę" - }, "newApp": { "label": "Utwórz nową aplikację" }, @@ -5855,7 +7709,6 @@ } }, "defaultSearchEngineId": { - "label": "Domyślna wyszukiwarka", "children": { "detail": { "title": "Wybierz domyślną wyszukiwarkę" @@ -5863,7 +7716,6 @@ } }, "openSearchInNewTab": { - "label": "Otwórz wyniki wyszukiwania w nowej karcie", "children": { "detail": { "title": "Otwórz wyniki wyszukiwania w nowej karcie" @@ -5871,7 +7723,6 @@ } }, "ddgBangs": { - "label": "Włącz DuckDuckGo bangs", "children": { "detail": { "title": "Włącz DuckDuckGo bangs" @@ -5886,6 +7737,13 @@ } } }, + "byteUnitSystem": { + "children": { + "detail": { + "title": "Wybierz jednostki rozmiaru danych" + } + } + }, "homeBoardId": { "label": "Tablica główna", "children": { @@ -5903,7 +7761,6 @@ } }, "pingIconsEnabled": { - "label": "Użyj ikon dla pingów", "children": { "detail": { "title": "Użyj ikon dla pingów" @@ -5911,7 +7768,6 @@ } }, "enableRightClickOnWidgets": { - "label": "Włącz prawe kliknięcie na widżetach", "children": { "detail": { "title": "Włącz prawe kliknięcie na widżetach" @@ -5939,6 +7795,7 @@ "description": "Zacznij wpisywać, aby wyszukać integracje z twoimi żądaniami mediów", "disabled": { "noIntegration": "Dodaj integrację Overseerr, Jellyseerr lub Seerr, aby włączyć wyszukiwanie multimediów.", + "signInRequired": "Zaloguj się, aby wyszukać integrację z żądaniem mediów.", "scoped": "Ten widget nie ma dostępnej integracji z żądaniem mediów." } } @@ -5955,7 +7812,6 @@ "help": "Użyj zewnętrznej wyszukiwarki", "group": { "searchEngine": { - "title": "Wyszukiwarki", "tipDdgBangs": "Wskazówka: Możesz również użyć wszystkich DuckDuckGo Bangs tutaj, np. !something", "bang": { "searchWithQuery": "Wyszukaj „{query}” za pomocą {label}", @@ -6006,20 +7862,6 @@ "group": { "mode": { "title": "Tryby" - }, - "help": { - "title": "Pomoc", - "option": { - "documentation": { - "label": "Dokumentacja" - }, - "submitIssue": { - "label": "Zgłoś problem" - }, - "discord": { - "label": "Discord społeczności" - } - } } } }, @@ -6031,9 +7873,10 @@ "other": { "label": "Wyszukaj za pomocą innej wyszukiwarki" }, - "no-default": { - "label": "Brak domyślnej wyszukiwarki", - "description": "Ustaw domyślną wyszukiwarkę w ustawieniach" + "no-engines": { + "label": "Brak skonfigurowanych wyszukiwarek", + "descriptionCreate": "Dodaj wyszukiwarkę do wyszukiwania w menu poleceń", + "descriptionUnavailable": "Poproś administratora o skonfigurowanie wyszukiwarki" }, "search": { "label": "Wyszukaj „{query}” za pomocą {name}" @@ -6113,7 +7956,6 @@ "help": "Wyszukaj użytkowników lub grupy", "group": { "user": { - "title": "Użytkownicy", "children": { "action": { "detail": { @@ -6126,7 +7968,6 @@ } }, "group": { - "title": "Grupy", "children": { "action": { "detail": { @@ -6150,9 +7991,6 @@ "engine": { "search": "Znajdź wyszukiwarkę", "field": { - "name": { - "label": "Nazwa" - }, "short": { "label": "Krótki" }, @@ -6165,12 +8003,19 @@ }, "page": { "list": { - "title": "Wyszukiwarki", + "ariaLabel": "Skonfigurowane wyszukiwarki", "noResults": { "title": "Nie ma jeszcze żadnych wyszukiwarek", - "action": "Utwórz swoją pierwszą wyszukiwarkę" + "description": "Wyszukiwarki pozwalają Spotlight wysłać zapytanie do witryny lub połączonej usługi.", + "action": "Utwórz swoją pierwszą wyszukiwarkę", + "filteredTitle": "Żadne wyszukiwarki nie pasują do Twojego wyszukiwania", + "filteredDescription": "Żadne wyszukiwarki nie pasują do \"{search}\". Spróbuj innej nazwy lub adresu URL." }, - "interactive": "Interaktywny, korzysta z integracji" + "interactive": "Interaktywny, korzysta z integracji", + "type": { + "generic": "Szablon URL", + "fromIntegration": "Integracja" + } }, "create": { "title": "Nowa wyszukiwarka", @@ -6189,11 +8034,9 @@ "title": "Edytuj wyszukiwarkę", "notification": { "success": { - "title": "Zmiany zostały pomyślnie zastosowane", "message": "Wyszukiwarka została pomyślnie zapisana" }, "error": { - "title": "Nie można zastosować zmian", "message": "Nie udało się zapisać wyszukiwarki" } }, @@ -6332,6 +8175,10 @@ } }, "log": { + "context": { + "widgetError": "Widżet zgłosił błąd w tym czasie", + "expiredWidgetError": "Logi wokół tego widżetu nie są już zachowane" + }, "level": { "option": { "debug": "Debugowanie", @@ -6343,7 +8190,6 @@ }, "onboardingTour": { "learnMore": "Przeczytaj dokumentację", - "next": "Dalej", "prev": "Wstecz", "done": "Gotowe", "skip": "Pomiń samouczek", @@ -6407,5 +8253,359 @@ "description": "Zmień swoją paletę kolorów, język, tablicę startową i preferencje. Możesz również przejść z tąd do obszaru zarządzania." } } + }, + "metadata": { + "description": "Samodzielny panel nawigacyjny dla *arr stosu arr i całej Twojej homelab. Integruje się z ponad 50 usługami, widżetami w czasie rzeczywistym, bez plików konfiguracyjnych.", + "dashboardTitle": "Panel {appName}" + }, + "assistant": { + "title": "Asystent", + "open": "Otwórz Asystenta", + "close": "Zamknij asystenta", + "minimize": "Minimalizuj asystenta", + "spotlight": "Zapytaj Asystenta", + "spotlightDescription": "Wpisz i wyślij monit bez opuszczania menu poleceń.", + "spotlightPrompt": { + "title": "Zapytaj Asystenta", + "description": "Wpisz powyższy monit. Wprowadź wysyła go w tle.", + "send": "Wyślij monit", + "empty": "Wpisz powyższy wiersz" + }, + "unavailable": { + "checking": "Sprawdzanie, czy asystent jest dostępny…", + "error": "Nie można sprawdzić dostępności asystenta. Spróbuj ponownie.", + "notConfigured": "Administrator musi najpierw skonfigurować i włączyć asystenta.", + "signIn": "Zaloguj się, aby korzystać z Asystenta." + }, + "newConversation": "Nowa konwersacja", + "conversations": "Rozmowy", + "conversationActions": "Akcje konwersacji", + "searchConversations": "Szukaj konwersacji", + "noMatchingConversations": "Brak pasujących konwersacji", + "moreActions": "Więcej działań", + "renameConversation": { + "action": "Zmień nazwę", + "label": "Nazwa konwersacji", + "save": "Zapisz nazwę", + "failedTitle": "Nie można zmienić nazwy konwersacji", + "failedDescription": "Homarr nie mógł zmienić nazwy tej rozmowy. Spróbuj ponownie." + }, + "deleteConversation": { + "title": "Usunąć rozmowę?", + "description": "\"{title}\" i jego wiadomości zostaną trwale usunięte.", + "failedTitle": "Rozmowa nie może zostać usunięta", + "failedDescription": "Homarr nie mógł usunąć tej rozmowy. Spróbuj ponownie." + }, + "closeHistory": "Zamknij historię rozmów", + "openHistory": "Otwórz historię konwersacji", + "emptyTitle": "Z czym mogę pomóc?", + "emptyDescription": "Zapytaj o swoją konfigurację Homarr, sprawdź dane instancji na żywo lub zatwierdzaj akcje, gdy chcesz, żebym dokonał zmiany.", + "suggestions": { + "health": { + "label": "Sprawdź zdrowie usługi", + "prompt": "Sprawdź moje integracje i podsumowaj wszystko, co wymaga uwagi." + }, + "explore": { + "label": "Przeglądaj mój homarca", + "prompt": "Pokaż mi, co mogę zobaczyć i zarządzać w tej instancji Homarr." + }, + "media": { + "label": "Znajdź media do żądania", + "prompt": "Pomóż mi znaleźć film lub serię na żądanie." + }, + "style": { + "label": "Popraw panel", + "prompt": "Pomóż mi poprawić wygląd tablicy lub niestandardowy CSS. Pokaż mi najpierw moje tablice, a następnie zachowaj moje aktualne ustawienia, podczas gdy dokonujemy zmiany." + }, + "designWidget": { + "label": "Zaprojektuj widżet", + "prompt": "Utwórz i zainstaluj niestandardowy widżet dla " + } + }, + "composerPlaceholder": "Zapytaj Asystenta…", + "runtime": { + "model": "Wzór", + "searchModels": "Szukaj modeli", + "noModels": "Brak dostępnych modeli", + "otherModels": "Inne modele", + "imageInput": "Akceptuje wprowadzanie obrazu", + "thinking": "Tryb myślenia", + "reasoning": { + "auto": "Auto", + "none": "Wyłączony", + "minimal": "Minimalny", + "low": "Niski", + "medium": "Średni", + "high": "Wysoka" + } + }, + "providerQuota": { + "title": "Dostawca homarca", + "communityWorkshop": "Warsztat Społeczności", + "dailyAllowance": "Zasiłek dzienny", + "remainingLabel": "Pozostało żądania dostawcy {remaining} z {limit}", + "loading": "Wczytywanie dodatku dostawcy Homarr", + "signInRequired": "Logowanie do warsztatu wymagane dla dostawcy Homarr", + "signInDescription": "Zaloguj się za pomocą GitHub przez warsztaty społeczności, aby otrzymać oddzielny dzienny diet.", + "exhaustedDescription": "Twój dodatek dostawcy Homarr jest używany na dzisiaj. Zresetuje się o północy czasu UTC.", + "unavailableDescription": "Zaloguj się do Warsztatu lub poczekaj na zresetowanie uprawnień dostawcy Homarr.", + "signIn": "Zaloguj się przez GitHub", + "signInError": "Logowanie do GitHub nie powiodło się. Spróbuj ponownie za chwilę.", + "loadError": "Nie można załadować dodatku dostawcy Homarr.", + "reset": "Resetuje {relative} w ", + "toolCalls": "Każde żądanie modelu i ukończone połączenie narzędzi wykorzystuje jedno żądanie.", + "retry": "Odśwież limit", + "level": { + "ok": "OK", + "warning": "Ostrzeżenie", + "bad": "Niski", + "dead": "W Użyciu" + } + }, + "stop": "Zatrzymaj odpowiedź", + "send": "Wyślij wiadomość", + "copy": "Kopiuj odpowiedź", + "copyMessage": "Kopiuj wiadomość", + "editMessage": "Edytuj wiadomość", + "updateMessage": "Aktualizuj wiadomość", + "regenerate": "Wygeneruj odpowiedź", + "helpful": "Pomocne", + "notHelpful": "Niepomocne", + "readAloud": "Odczytuj odpowiedź", + "stopReading": "Przestań czytać odpowiedź", + "feedbackError": "Twoja opinia nie może zostać zapisana. Spróbuj ponownie.", + "exportMarkdown": "Eksportuj jako Markdown", + "exportConversation": { + "action": "Eksportuj konwersację jako Markdown", + "failedTitle": "Nie można wyeksportować konwersacji", + "failedDescription": "Homarr nie mógł załadować tej rozmowy. Spróbuj ponownie." + }, + "reasoning": "Myślenie", + "previousResponse": "Poprzednia odpowiedź", + "nextResponse": "Następna odpowiedź", + "removeAttachment": "Usuń załącznik", + "downloadFile": "Pobierz {name}", + "attachedImage": "Dołączony obraz", + "externalImageBlocked": "Zewnętrzne zdjęcie zablokowane dla prywatności", + "image": { + "loading": "Ładowanie obrazu", + "failed": "Nie można załadować tego obrazu.", + "retry": "Spróbuj ponownie obrazek" + }, + "quoteSelection": "Oferta", + "dismissQuote": "Usuń cytat", + "attachments": { + "add": "Dołącz obraz lub dokument", + "errorTitle": "Nie można dodać załącznika", + "imageUnsupported": "Wybrany model nie obsługuje wprowadzania obrazu." + }, + "mentions": { + "menu": "Dodaj kontekst Homarr", + "context": "Kontekst", + "app": "Aplikacje", + "integration": "Integracje", + "board": "Tablice", + "widget": "Widgety", + "tools": "Dostępne narzędzia" + }, + "markdown": { + "diagram": "Schemat", + "renderingDiagram": "Renderowanie wykresu…", + "diagramUnavailable": "Ten schemat nie może być wyrenderowany." + }, + "commands": { + "menu": "Polecenia asystenta", + "health": "Przygotuj ocenę usług i zdrowia", + "explore": "Przygotuj przegląd tej instancji Homarr", + "media": "Przygotuj wyszukiwanie mediów", + "style": "Przygotuj wygląd tablicy lub niestandardową zmianę CSS", + "designWidget": "Przygotuj jedną szybką wersję niestandardowego widżetu" + }, + "usage": { + "tokens": "tokeny", + "contextWindow": "Okno kontekstowe", + "requestDetails": "Szczegóły żądania", + "used": "Ostatni krok", + "remaining": "Pozostało", + "capacity": "Pojemność", + "input": "Input", + "output": "Output", + "cached": "Pamięć podręczna", + "cacheWrite": "Zapisywanie pamięci podręcznej", + "reasoning": "Uzasadnienie", + "inputShort": "w", + "outputShort": "wyjście", + "cachedShort": "pamięć podręczna", + "reasoningShort": "rozumowanie", + "firstOutput": "Pierwsze wyjście", + "homarrTiming": "Zaobserwowano homarr", + "endToEnd": "Koniec do końca", + "observedThroughput": "Obserwowana przepustowość", + "providerTiming": "Dostawca zgłosił", + "loadingProviderDetails": "Ładowanie szczegółów generowania…", + "providerDetailsPending": "OpenRouter nadal przetwarza dane generowane. Otwórz ponownie aby ponowić.", + "providerLatency": "Opóźnienie dostawcy", + "generationTime": "Czas generowania", + "moderationLatency": "Moderacja", + "providerThroughput": "Przepustowość dostawcy", + "fallbacks": "Fallbacks", + "fallbackLatency": "Opóźnienie zwrotne", + "cacheDiscount": "Rabat pamięci podręcznej", + "normalizedTokens": "OpenRouter znormalizowane wejście / wyjście", + "byok": "BYŁE", + "cost": "Koszt", + "reported": "Zgłoszone przez dostawcę", + "estimated": "Szacowane na podstawie cen modelowych", + "upstreamCost": "Ustawienie na wcześniejszych etapach łańcucha dostaw", + "webSearches": "Wyszukiwarki internetowe", + "finishReason": "Powód zakończenia", + "notReported": "Niezgłoszone", + "agentSteps": "Kroki agenta", + "step": "Krok {number}", + "generation": "Generacja" + }, + "toolInput": "Input", + "toolOutput": "Output", + "toolActivity": { + "iconSearch": "Szukam ikon \"{query}\"", + "iconBrowse": "Przeglądanie dostępnych ikon" + }, + "toolNavigation": { + "openPreview": "Otwórz podgląd", + "openWidget": "Otwórz widżet" + }, + "webSearch": { + "title": "Wyszukiwanie w Internecie", + "completed": "OpenRouter przeszukał tę odpowiedź na żywo.", + "searches": "{count, plural, one {# szukaj} other {# szukaj}}", + "sources": "{count, plural, one {# źródło} other {# źródła}}" + }, + "responseError": { + "title": "Asystent nie mógł zakończyć", + "description": "Spróbuj ponownie. Jeśli problem będzie się powtarzał, poproś administratora o weryfikację skonfigurowanego punktu końcowego modelu." + }, + "toolPreparationError": { + "title": "Nie można przygotować tego żądania", + "description": "Model zatrzymał się zanim podał kompletne szczegóły. Ponów próbę odpowiedzi lub opisz wniosek ponownie. Nie wprowadzono żadnych zmian." + }, + "busy": { + "title": "Asystent już pracuje", + "description": "Poczekaj na bieżącą odpowiedź lub otwórz ją, aby zatrzymać działanie." + }, + "pendingAction": { + "answerTitle": "Wymagana odpowiedź", + "answerFallback": "Wybierz odpowiedź, aby kontynuować", + "formTitle": "Przejrzyj szczegóły aplikacji", + "boardFormTitle": "Przejrzyj zmiany w dziale", + "review": "Przeglądaj", + "sendBlocked": "Rozwiąż oczekujące zapytanie przed wysłaniem" + }, + "activity": { + "thinking": "Asystent myśli", + "working": "Praca nad twoim pytaniem", + "ready": "Odpowiedź gotowa", + "completed": "Otwórz odpowiedź", + "approval": "Wymagane zatwierdzenie", + "failed": "Asystent wymaga uwagi", + "expand": "Otwórz odpowiedź asystenta", + "dismiss": "Odrzuć aktywność asystenta" + }, + "scrollToLatest": "Przewiń do najnowszych", + "refresh": { + "action": "Odśwież bieżący widok", + "working": "Odświeżanie bieżącego widoku", + "completeTitle": "Zobacz odświeżone", + "completeDescription": "Widoczne dane Homarr zostały przeładowane.", + "failedTitle": "Nie można odświeżyć widoku", + "failedDescription": "Zmiana może być nadal zapisana. Spróbuj ponownie odświeżyć." + }, + "askUser": { + "preparing": "Przygotowywanie pytania", + "answered": "Twoja odpowiedź", + "other": "Inne", + "otherLabel": "Twoja odpowiedź", + "otherPlaceholder": "Wpisz inną odpowiedź…", + "submit": "Wyślij odpowiedź", + "cancelOther": "Anuluj inną odpowiedź", + "optionKind": { + "affirmative": "Potwierdź", + "negative": "Odrzuć", + "alternative": "Opcja", + "custom": "Własny" + } + }, + "configureApp": { + "title": "Przejrzyj szczegóły aplikacji", + "description": "Wybierz lokalną ikonę i dostosuj cokolwiek zanim asystent poprosi o zatwierdzenie utworzenia.", + "preparing": "Przygotowywanie szczegółów aplikacji", + "continue": "Użyj tych szczegółów", + "ready": "Szczegóły aplikacji gotowe", + "automaticContinue": "Używanie tych danych aplikacji automatycznie" + }, + "configureBoardSettings": { + "title": "Przejrzyj zmiany w dziale", + "loading": "Wczytywanie ustawień bieżącego działu", + "loadErrorTitle": "Ustawienia tablicy nie mogły zostać załadowane", + "loadErrorDescription": "Tablica może już nie istnieć, lub nie masz uprawnień do jej modyfikowania.", + "proposedCount": "Asystent zaproponował pola {count}", + "changeCount": "{count} zmiany gotowe", + "ready": "Gotowe zmiany tablicy", + "cancelled": "Bieżące ustawienia tablicy przechowywane", + "noChanges": "Żadne ustawienia nie zmienią się", + "keepCurrent": "Zachowaj bieżące ustawienia", + "continue": "Kontynuuj do zatwierdzenia", + "automaticContinue": "Akceptowanie proponowanych zmian w dziale automatycznie", + "resetAll": "Resetuj wszystkie zmiany", + "tabs": { + "css": "Custom CSS", + "appearance": "Wygląd", + "background": "Tło", + "general": "Ogólne" + }, + "cssDescription": "Edytuj kompletny arkusz stylów. Istniejące zasady są zachowane, chyba że zostaną usunięte tutaj.", + "cssCharacters": "{count} z 16384 znakami", + "copyCss": "Copy CSS", + "copied": "Skopiowano", + "restoreCss": "Restore current CSS", + "remoteCssTitle": "Ten CSS ładuje zdalny zasób", + "remoteCssDescription": "Zaimportowane arkusze stylów i zdalne adresy URL kontaktują się z innym serwerem, gdy płytka się ładuje. Przejrzyj je przed kontynuowaniem." + }, + "configureWidget": { + "title": "Przejrzyj widżet", + "preparing": "Przygotowywanie ustawień widżetu", + "review": "Przejrzyj widżet i integracje", + "ready": "Konfiguracja widżetu gotowa", + "cancelled": "Widżet nie został dodany", + "automaticContinue": "Akceptacja proponowanej konfiguracji widżetu automatycznie", + "definitionLoadErrorTitle": "Nie można załadować ustawień widżetu", + "definitionLoadErrorDescription": "Homarr nie mógł załadować ustawień tego widżetu. Spróbuj ponownie.", + "loadErrorTitle": "Integracje nie mogły zostać załadowane", + "loadErrorDescription": "Homarr nie mógł załadować integracji dostępnej dla tego widżetu.", + "noIntegrationTitle": "Wymagana jest kompatybilna integracja", + "noIntegrationDescription": "Skonfiguruj integrację obsługiwaną przez ten widżet przed dodaniem jej do kokpitu.", + "connectIntegration": "Połącz usługę", + "manageIntegrations": "Zarządzaj integracjami", + "skip": "Nie dodaj", + "errorTitle": "Nie można przygotować ustawień widżetu", + "errorDescription": "Model nie dostarczył pełnej konfiguracji widżetu. Nie dodano widżetu." + }, + "approvalRequired": "Wymagane zatwierdzenie", + "complete": "Complete", + "denied": "Odmowa", + "failed": "Niepowodzenie", + "working": "Praca", + "approvalDescription": "Przejrzyj tę zmianę przed jej uruchomieniem.", + "approveAndRun": "Zatwierdź i uruchom", + "deny": "Odmowa", + "autoApproval": { + "label": "Zatwierdzenia automatyczne", + "composerLabel": "Zatwierdź dla mnie", + "title": "Zatwierdzenia automatyczne", + "description": "Automatycznie przygotowuj formularze i zatwierdzaj chronione zmiany dla tej rozmowy. Pytania nadal czekają na Twoją odpowiedź, a Twoje uprawnienia Homarr nadal obowiązują. To wyłącza się po przełączeniu rozmowy.", + "enable": "Włącz dla tej rozmowy", + "disable": "Wyłącz automatyczne zatwierdzanie", + "enabled": "Automatyczne zatwierdzanie jest włączone", + "approving": "Zatwierdzanie automatycznie" + } } } diff --git a/packages/translation/src/lang/pt-br.json b/packages/translation/src/lang/pt-br.json index c08329e70..e8986d106 100644 --- a/packages/translation/src/lang/pt-br.json +++ b/packages/translation/src/lang/pt-br.json @@ -1,156 +1,246 @@ { "init": { - "step": { - "start": { - "title": "Bem-vindo ao Homarr", - "subtitle": "Vamos começar configurando a sua instância Homarr.", - "description": "Para começar, por favor selecione como você deseja configurar sua instância Homarr.", - "action": { - "scratch": "Começar do zero", - "importOldmarr": "Importe de uma instância do Homarr anterior a 1.0", - "restoreSqlite": "Restaurar do backup SQLite", - "restoreSqliteDescription": "Fazer o upload de um backup completo do banco de dados SQLite de uma instância anterior da Homarr. Isso restaurará todos os painéis, usuários, apps, integrações e configurações.", - "backToOptions": "← Retorna às opções de instalação" + "studio": { + "navigationLabel": "Seções de integração", + "back": "Anterior", + "buildBoard": "Construir minha placa", + "common": { + "unknownError": "Algo deu errado. Suas escolhas ainda estão aqui; tente novamente." + }, + "claim": { + "checking": "Protegendo esta sessão de integração…", + "checkingTitle": "Preparando configuração segura", + "lockedTitle": "A instalação está aberta em outro navegador", + "lockedDescription": "Continue lá, ou aguarde sua sessão de primeiro execução segura expirar antes de tentar novamente.", + "signInTitle": "Login de administrador necessário", + "signInDescription": "Um administrador já existe. Faça o login para retomar a configuração sem expor credenciais ou acesso de serviço.", + "signIn": "Iniciar sessão e retomar", + "errorTitle": "A configuração não pôde ser segura", + "errorDescription": "Recarregue a página para tentar novamente a sessão de primeira execução." + }, + "navigation": { + "essentials": "Essenciais", + "discover": "Pendentes", + "connect": "Conectar", + "board": "Tabuleiro", + "extend": "Estender", + "review": "Revisão" + }, + "welcome": { + "title": "Bem-vindos à casa.", + "description": "Bem-vindo ao Homarr v{version}. Nós lhe guiaremos pelo essencial e ajudaremos a construir o seu primeiro quadro.", + "start": "Vamos começar", + "restore": "Restaurar backup", + "restoreTitle": "Restaurar do backup", + "restoreDescription": "Um backup completo do SQLite restaura quadros, pessoas, aplicativos, integrações e configurações. A Homarr o valida antes de substituir qualquer coisa.", + "errorTitle": "A configuração não pôde iniciar", + "errorDescription": "Suas escolhas de configuração ainda estão aqui. Tente novamente ou recarregue a página se isto continuar." + }, + "account": { + "title": "Criar seu administrador", + "description": "Especifique as credenciais para seu usuário administrador.", + "username": "Nome do administrador", + "passwordHint": "Apenas o mínimo de 8 caracteres é necessário. As outras verificações de força de senha são sugestões.", + "create": "Criar administrador", + "errorTitle": "O administrador não pôde ser criado", + "recoveryTitle": "Conta de administrador criada", + "recoveryDescription": "O login automático não foi concluído. Faça o login com as credenciais do administrador que você acabou de criar para continuar a configuração.", + "recoveryAction": "Entre e continue", + "unknownError": "O administrador não pôde ser criado." + }, + "externalGroup": { + "title": "Conecte seu grupo de administrador", + "description": "Use o nome exato do grupo enviado pelo LDAP ou OIDC. Membros deste grupo recebem acesso de administrador.", + "name": "Grupo de administrador externo", + "nameDescription": "Isso diferencia maiúsculas de minúsculas e deve corresponder ao seu provedor de identidade.", + "continue": "Salvar grupo e continuar", + "errorTitle": "O grupo não pôde ser salvo", + "unknownError": "O grupo administrador não pode ser salvo." + }, + "essentials": { + "title": "Começar com padrões familiares", + "description": "Defina o idioma e a aparência que todos veem primeiro, em seguida, dê a Homarr o padrão de endereço usado pelos seus serviços.", + "language": "Idioma padrão", + "theme": "Tema padrão", + "themeAuto": "Sistema", + "themeLight": "Claro", + "themeDark": "Escuro", + "serverOriginHelp": "Homarr usa esse endereço para pré-preencher URLs de serviço detectado. Você ainda pode editar cada serviço individualmente.", + "serverDescription": "Este é um atalho, não uma restrição. Todo serviço detectado permanece editável.", + "serverOrigin": "Domínio, IP ou caminho reverso do proxy", + "serverOriginDescription": "Exemplos: home.lan, 192.168.1.10 ou https://home.example.com/services. Escolha como cada serviço é anexado abaixo.", + "analytics": "Compartilhar análise de produto anônima", + "analyticsDescription": "Ajuda Homarr melhora o recurso de confiabilidade. Credenciais de serviço ou conteúdo do painel de controle não foram enviados." + }, + "discover": { + "title": "Veja o que esta instalação pode alcançar", + "description": "Recursos de verificação Homarr. Um soquete Docker ausente ou contexto Kubernetes nunca bloqueia uma configuração manual.", + "database": "Banco", + "docker": "Docker e sockets compatíveis", + "kubernetes": "Kubernetes", + "assistantWorkshop": "Assistente e Oficina", + "found": "Integrações {integrations} e {apps} aplicações adicionais encontradas", + "retryKubernetes": "Verificar o Kubernetes novamente", + "retryWorkshop": "Verifique a Oficina novamente", + "unknownVersion": "versão desconhecida", + "kubernetesAvailable": "Conectado ao Kubernetes {version}", + "kubernetesDisabled": "Não habilitado; continue com Docker ou serviços manuais", + "kubernetesUnavailable": "Kubernetes está habilitado, mas não pode ser alcançado a partir deste processo Homarr", + "workshopAvailable": "Oficina comunitária e serviços de assistência hospedados são acessíveis", + "workshopUnavailable": "Provedores locais e personalizados de assistência permanecem disponíveis", + "partialTitle": "Algumas fontes não puderam ser verificadas", + "partialDescription": "Resultados de hosts acessíveis são mantidos. Verifique as permissões do soquete ou adicione serviços manualmente na próxima seção.", + "status": { + "checking": "Verificando disponibilidade…", + "available": "Disponível", + "partial": "Parcialmente disponível", + "empty": "Alcançável, sem serviços correspondentes em execução", + "disabled": "Desativado pela configuração do servidor", + "unavailable": "Indisponível para este processo Homarr" } }, - "import": { - "title": "Importar dados", - "subtitle": "Você pode importar dados de uma instância existente do Homarr.", - "dropzone": { - "title": "Arraste o arquivo ZIP aqui ou clique para procurar", - "description": "O arquivo ZIP enviado será processado e você poderá selecionar o que deseja importar" + "connect": { + "title": "Conecte o que faz com que o fórum seja útil", + "description": "Selecione vários serviços de uma só vez. Os rótulos de Docker têm prioridade, imagens que correspondem preenchem lacunas e todas as URL e credenciais permanecem revisáveis.", + "discoveredIntegrations": "Instâncias de integração detectadas ({count})", + "detectedIntegrationLabel": "Importar {name}, detectado como {kind}", + "detectedAppLabel": "Importar aplicativo detectado {name}", + "otherIntegrations": "Adicionar outra integração", + "configureIntegrations": "Configurar integrações", + "discoveredApps": "Aplicativos detectados ({count})", + "appAddressRequired": "Adicione um endereço de {name}ou remova-o da seleção.", + "empty": "Nenhuma integração selecionada. A Homarr ainda criará uma placa inicial útil com widgets gerais.", + "dockerSource": "Docker", + "manualSource": "Manualmente", + "url": "URL de Serviço", + "noCredentials": "Sem credenciais", + "noCredentialsDescription": "Esta integração não precisa de credenciais.", + "credentialMethod": "Método de credenciais", + "getApiKey": "Abra as configurações da chave API para este serviço", + "openGuide": "Guia de configuração do Homarreia aberto para este serviço", + "testConnection": "Testar conexão", + "testSuccess": "Conexão funciona", + "testSuccessDescription": "Homarr conectou-se ao endereço e credenciais atuais.", + "testError": "Falha na conexão", + "testErrorDescription": "Verifique o endereço de serviço e as credenciais, e então tente novamente.", + "needsConfiguration": "Precisa de configuração", + "tested": "Conexão testada", + "testFailed": "Falha no teste de conexão", + "incompleteConfirmation": "Integrações não concluídas serão ignoradas. Continuar sem elas?" + }, + "board": { + "title": "Forme o quadro antes de ser construído", + "description": "A Homarr cria layouts protegidos para celular e base, então coloca aplicativos e widgets compatíveis a partir dos serviços selecionados.", + "target": "Board para configurar", + "targetDescription": "Escolha o quadro exato existente que esta configuração deve atualizar.", + "targetPlaceholder": "Selecione um board", + "targetRequired": "Selecione o board a ser configurado antes de continuar.", + "name": "Nome do painel", + "nameDescription": "Usado apenas na URL do tabuleiro; letras, números, traços e sublinhados.", + "nameRequired": "Insira um nome para o tabuleiro antes de continuar.", + "primaryColor": "Cor primária", + "secondaryColor": "Cor secundária", + "resetColors": "Redefinir cores", + "radius": "Raio do canto do widget", + "radiusOptions": { + "xs": "Bem", + "sm": "Sutil", + "md": "Equilibrado", + "lg": "Arredondado", + "xl": "Suave" }, - "fileInfo": { - "action": { - "change": "Alterar arquivo" - } + "columns": "Colunas de board", + "columnsDescription": "Colunas definem a grade horizontal usada para dimensionar e posicionar itens. 12 é muito para a maioria das pessoas.", + "columnCount": "{count, plural, one {# coluna} other {# colunas}}", + "leftSidebar": "Left sidebar", + "rightSidebar": "Barra lateral direita", + "previewLabel": "Visualização ao vivo do layout do primeiro board" + }, + "extend": { + "title": "Recursos avançados", + "tabsLabel": "Configuração de Assistente, Workshop e MCP", + "assistant": "Assistente", + "workshop": "Oficina", + "assistantSetup": { + "loginTitle": "Login de administrador necessário", + "loginDescription": "As chaves do provedor e o acesso do modelo foram privilegiados. Finalize a configuração, faça o login e Homarr abrirá a configuração do Assistente diretamente.", + "loginAction": "Faça login para configurar o Assistente" }, - "importSettings": { - "title": "Importar configurações", - "description": "Configure o comportamento da importação" + "workshopSetup": { + "title": "Oficina Homarr", + "description": "Navegar pelos Widgets Personalizados da Comunidade, inspecionar seus recursos solicitados, instalá-los e publicar seu próprio trabalho sem copiar o código entre os servidores.", + "available": "Disponível", + "checking": "Verificando…", + "unavailable": "Unavailable", + "discoverTitle": "Pendentes", + "discoverDescription": "Encontre widgets construídos para fluxos de trabalho auto-hospedados.", + "installTitle": "Revisar e instalar", + "installDescription": "Ver metadados e configuração antes de adicionar qualquer coisa.", + "publishTitle": "Compartilhar", + "publishDescription": "Publicar widgets reutilizáveis de volta à comunidade.", + "browse": "Navegar na Oficina" }, - "boardSelection": { - "title": "{count} painéis encontrados", - "description": "Escolha todos os painéis com o tamanho que você deseja importar", - "action": { - "selectAll": "Selecionar todos", - "unselectAll": "Desmarcar Todos" - } - }, - "summary": { - "title": "Resumo da importação", - "description": "No resumo abaixo você pode ver o que será importado", - "action": { - "import": "Confirmar a importação e continuar" - }, - "entities": { - "apps": "Aplicativos", - "boards": "Painéis", - "integrations": "Integrações", - "credentialUsers": "Usuários credenciados" - } - }, - "tokenModal": { - "title": "Insira o token de importação", - "field": { - "token": { - "label": "Token", - "description": "Insira o token de importação mostrado em sua instância homarr anterior" - } - }, - "notification": { - "error": { - "title": "Token inválido", - "message": "O token que você inseriu é inválido" - } - } + "mcpSetup": { + "title": "MCP de Homarr", + "description": "Conecte Claude, Codex, ou outro cliente MCP às ferramentas digitadas pelo Homarr. Chaves de API mantêm acesso explícito e revogável.", + "endpoint": "Ponte HTTP streamable", + "keyTitle": "Copiar esta chave agora", + "keyDescription": "Por segurança, Homarr não pode mostrar esta chave de API novamente.", + "copyKey": "Copiar chave da API", + "createKey": "Criar uma chave de API MCP", + "errorTitle": "Chave da API MCP não pôde ser criada", + "loginRequired": "Entre como administrador após a configuração para criar uma chave de API.", + "configuration": "Configuração de cliente", + "copy": "Copiar configuração", + "copied": "Copiado", + "advanced": "Abrir ferramentas MCP, permissões e detalhes de configuração" } }, - "user": { - "title": "Usuário Administrador", - "subtitle": "Especifique as credenciais para seu usuário administrador.", - "notification": { - "success": { - "title": "Usuário criado", - "message": "O usuário foi criado com sucesso" - }, - "error": { - "title": "Falha ao criar usuário" - } - } - }, - "group": { - "title": "Grupo externo", - "subtitle": "Especifique o grupo que deve ser usado para usuários externos.", - "form": { - "name": { - "label": "Nome do grupo", - "description": "O nome tem que coincidir com o grupo administrador do provedor externo" - } - } - }, - "settings": { - "title": "Configurações", - "subtitle": "Definir as configurações do servidor." - }, - "integrations": { - "title": "Integrações", - "subtitle": "Selecione os serviços que você usa.", - "description": "Escolha as integrações que deseja conectar. Vamos configurar seu painel com os widgets correspondentes automaticamente.", - "action": { - "continue": "Continuar", - "skip": "Pular por enquanto" - }, - "configure": { - "progress": "{current} de {total}", - "skip": "Pular esta integração", - "finishing": "Configurando seu painel...", - "error": { - "title": "Falha na configuração", - "message": "Algo deu errado ao configurar seu painel. Por favor, tente novamente." - }, - "helpers": { - "tooltip": "Auxiliares de URL", - "description": "Esses auxiliares tentam adivinhar a URL dos seus serviços. Se não funcionar, digite o endereço manualmente." - } - }, - "urlTemplate": { - "label": "URL base", - "placeholder": "homelab.local ou 192.168.1.1", - "hint": "Digite seu domínio base ou IP para preencher automaticamente as URLs das integrações", - "warning": "Definir sua URL base agora preencherá automaticamente todas as URLs das integrações, economizando tempo durante a configuração", - "preview": "ex.: {example}", - "mode": { - "subdomain": "Subdomínio", - "hostPort": "Host:Porta" - } - }, - "docker": { - "detected": "Docker detectou {count} serviços", - "detectedBreakdown": "{integrations} integrações · {apps} apps", - "summary": "O Homarr detectou {apps} apps, dos quais {integrations} possuem integrações nativas", - "appBadge": "App", - "appSectionLabel": "Apps para adicionar ao painel ({count} selecionados)", - "scanning": "Verificando Docker...", - "scanningDescription": "Procurando contêineres em execução no seu sistema" + "review": { + "title": "Um tabuleiro construído em torno de seus serviços", + "description": "A Homarr testa conexões não salvas, importa os aplicativos selecionados, aplica aparência e layouts, em seguida, abre o quadro exato configurado.", + "board": "Primeiro quadro", + "columns": "Colunas de board", + "columnsValue": "{count, plural, one {# coluna} other {# colunas}}", + "sidebars": "Barras laterais", + "sidebarsValue": "{count, plural, =0 {None} one {# sidebar} other {# sidebars}}", + "layouts": "Layouts responsivos", + "layoutsValue": "Celular + Base", + "integrations": "Integrações", + "integrationsValue": "{count, plural, =0 {Nenhum selecionado} one {# integração} other {# integrações}}", + "apps": "Botões de app", + "appsValue": "{count, plural, =0 {Apenas aplicativos iniciantes} one {# tile de aplicativo} other {# tiles de aplicativo}}", + "language": "IDIOMA", + "theme": "Tema", + "themeAuto": "Preferências do sistema", + "themeLight": "Claro", + "themeDark": "Escuro", + "colors": "Cores do tabuleiro", + "radius": "Raio do widget", + "automaticTitle": "O que Homarr criará", + "automaticDescription": "Widgets compatíveis, ícones, links de aplicativos, relações de integração e posicionamento responsivo vêm do catálogo do Homarr compartilhado. Você pode editar todos os resultados mais tarde.", + "dockerWarningTitle": "Alguns rótulos do Docker alterados durante a configuração", + "dockerWarningDescription": "{count, plural, one {# resultado selecionado do Docker não pôde ser aplicado porque seu serviço mudou, visando outro board, ou seu widget era incompatível} other {# resultados do Docker selecionados não puderam ser aplicados porque os serviços mudaram, apontaram outro tabuleiro ou seus widgets eram incompatíveis}}", + "errorTitle": "Quadro não pode ser construído", + "progress": { + "applying": "Testando conexões e construindo sua placa", + "done": "Seu quadro está pronto" } }, "finish": { - "title": "Concluir configuração", - "subtitle": "Você está pronto para começar!", - "description": "Você concluiu com sucesso o processo de configuração. Agora você pode começar a usar o Homarr. Selecione sua próxima ação:", - "action": { - "goToBoard": "Ir para o painel {name}", - "createBoard": "Crie seu primeiro painel", - "inviteUser": "Convidar outros usuários", - "docs": "Ler a documentação" - } + "title": "Seu primeiro quadro está pronto.", + "description": "Homarr conectou as partes que você selecionou e manteve as restantes editáveis. Abra o quadro agora; o pequeno tour dentro do produto pode mostrar a você modo de edição, widgets, layouts e pesquisa.", + "openBoard": "Abrir meu board", + "manageTitle": "Gerenciar", + "manageDescription": "Ajuste fino de aplicativos, integrações, quadros, usuários e configurações do servidor.", + "workshopTitle": "Oficina", + "workshopDescription": "Descubra e instale Widgets Personalizados da Comunidade.", + "docsTitle": "Aprenda Homarr", + "docsDescription": "Leia os guias focados para quadros, widgets, integrações e ferramentas." } - }, - "backToStart": "Voltar ao início" + } }, "user": { - "title": "Usuários", "name": "Usuário", "page": { "login": { @@ -159,12 +249,10 @@ }, "invite": { "title": "Junte-se ao Homarr", + "titleWithAppName": "Entrar em {appName}", "subtitle": "Bem-vindo ao Homarr! Por favor, crie sua conta", + "subtitleWithAppName": "Bem-vindo ao {appName}! Por favor, crie sua conta", "description": "Você foi convidado(a) por {username}" - }, - "init": { - "title": "Nova instalação do Homarr", - "subtitle": "Por favor, crie o usuário administrador inicial" } }, "field": { @@ -192,12 +280,17 @@ "previousPassword": { "label": "Senha anterior" }, - "homeBoard": { - "label": "Quadro inicial" - }, "pingIconsEnabled": { "label": "Usar ícone para pings" }, + "byteUnitSystem": { + "label": "Unidades de tamanho dados", + "description": "Escolha como Homarr exibe os tamanhos dos bytes e as taxas de byte. As taxas de bits sempre usam unidades decimais.", + "options": { + "binary": "BINÁRIO", + "decimal": "decimal" + } + }, "enableRightClickOnWidgets": { "label": "", "description": "" @@ -247,7 +340,6 @@ } } }, - "create": "Criar usuário", "changePassword": { "label": "Alterar senha", "notification": { @@ -259,56 +351,6 @@ } } }, - "changeHomeBoard": { - "notification": { - "success": { - "message": "Quadro inicial alterado com sucesso" - }, - "error": { - "message": "Não foi possível alterar o painel inicial" - } - } - }, - "changeSearchPreferences": { - "notification": { - "success": { - "message": "Preferências de busca alteradas com sucesso" - }, - "error": { - "message": "Não foi possível alterar as preferências de busca" - } - } - }, - "changeFirstDayOfWeek": { - "notification": { - "success": { - "message": "Primeiro dia da semana alterado com sucesso" - }, - "error": { - "message": "Não foi possível alterar o primeiro dia da semana" - } - } - }, - "changePingIconsEnabled": { - "notification": { - "success": { - "message": "Ícones de ping alterados com sucesso" - }, - "error": { - "message": "Não foi possível alternar ícones de ping" - } - } - }, - "changeDdgBangs": { - "notification": { - "success": { - "message": "Bangs do DuckDuckGo alternados com sucesso" - }, - "error": { - "message": "Não foi possível alternar os bangs do DuckDuckGo" - } - } - }, "manageAvatar": { "changeImage": { "label": "Alterar imagem", @@ -338,16 +380,6 @@ } } }, - "editProfile": { - "notification": { - "success": { - "message": "Perfil atualizado com sucesso" - }, - "error": { - "message": "Não foi possível atualizar o perfil" - } - } - }, "delete": { "label": "Excluir usuário permanentemente", "description": "Exclui esse usuário incluindo suas preferências. Isso não removerá nenhum painel. O usuário não será notificado.", @@ -356,18 +388,13 @@ "select": { "label": "Selecionar usuário", "notFound": "Nenhum usuário encontrado" - }, - "transfer": { - "label": "Selecionar novo proprietário" } } }, "group": { - "title": "Grupos", "name": "Grupo", "search": "Encontrar um grupo", "field": { - "name": "Nome", "members": "Membros", "homeBoard": { "label": "Quadro inicial", @@ -388,6 +415,19 @@ } } }, + "custom-widget": { + "title": "Widgets personalizados", + "item": { + "manage": { + "label": "Gerenciar widgets personalizados", + "description": "Permitir que os membros criem, editem e excluam definições de widget personalizadas" + }, + "secret-write": { + "label": "Configurar segredos de widgets personalizados", + "description": "Permitir que os membros e suas chaves API definam credenciais de widget personalizado criptografadas" + } + } + }, "app": { "title": "Aplicativos", "item": { @@ -493,6 +533,35 @@ "description": "Permitir que membros modifiquem e deletem qualquer ferramenta de busca" } } + }, + "matrix": { + "none": "Sem acesso", + "impliedHint": "Concessões também: {permissions}", + "grantedViaAdmin": "Administradores já tem isso. Defina o Administrador para \"Sem acesso\" para configurá-lo separadamente.", + "preset": { + "label": "Predefinições", + "viewer": "Visualizador", + "viewerDescription": "Somente leitura: ver quadros e mídias, usar apps e integrações que já existem.", + "editor": "Editores", + "editorDescription": "Gerenciamento do dia-a-dia: crie e edite quadros, aplicativos, integrações e motores de busca.", + "admin": "Administrador", + "adminDescription": "Acesso irrestrito a todos os recursos e configurações, incluindo o gerenciamento de usuários.", + "custom": "Personalizado" + }, + "effective": { + "title": "Permissões efetivas", + "description": "O conjunto completo e desduplicado de ações deste grupo pode realizar, incluindo permissões concedidas indiretamente.", + "empty": "Nenhuma permissão selecionada" + }, + "noneDescription": "Os membros não têm acesso a esta área.", + "level": { + "view": "Visualização", + "use": "Utilizar", + "interact": "Interagir", + "modify": "Modificação", + "full": "Completo" + }, + "capabilityIncluded": "Já incluído em “{level}”" } }, "memberNotice": { @@ -607,21 +676,24 @@ "search": "Encontre um aplicativo", "page": { "list": { - "title": "Aplicativos", + "ariaLabel": "Aplicativos configurados", "noResults": { "title": "Ainda não há aplicativos disponíveis", - "action": "Crie seu primeiro aplicativo" + "description": "Os aplicativos são links para os serviços e ferramentas que você deseja em seus painéis.", + "action": "Crie seu primeiro aplicativo", + "filteredTitle": "Nenhum aplicativo corresponde à sua pesquisa", + "filteredDescription": "Nenhum aplicativo corresponde \"{search}\". Tente outro nome ou URL.", + "createOnlyTitle": "Você só pode adicionar apps", + "createOnlyDescription": "Suas permissões permitem que você crie aplicativos, mas não navegue pelos existentes. Peça a um administrador para acesso de gerenciamento de aplicativos para ver a lista completa." } }, "create": { "title": "Novo Aplicativo", "notification": { "success": { - "title": "Criado com sucesso", "message": "O aplicativo foi criado com sucesso" }, "error": { - "title": "Falha ao criar", "message": "Não foi possível criar o aplicativo" } } @@ -630,11 +702,9 @@ "title": "Editar aplicativo", "notification": { "success": { - "title": "Mudanças aplicadas com sucesso", "message": "O aplicativo foi salvo com sucesso" }, "error": { - "title": "Não foi possível aplicar as alterações", "message": "O aplicativo não pôde ser salvo" } } @@ -644,26 +714,18 @@ "message": "Tem certeza que deseja excluir o aplicativo {name}?", "notification": { "success": { - "title": "Exclusão bem-sucedida", "message": "O aplicativo foi excluído com sucesso" }, "error": { - "title": "Falha na exclusão", "message": "Não foi possível excluir o aplicativo" } } } }, "field": { - "name": { - "label": "Nome" - }, "description": { "label": "Descrição" }, - "url": { - "label": "URL" - }, "useDifferentUrlForPing": { "checkbox": { "label": "Use uma URL diferente para o ping", @@ -678,56 +740,397 @@ "search": "Busque por um aplicativo", "noResults": "Sem resultados", "action": "Selecionar {app}", - "title": "Selecione um aplicativo para adicioná-lo neste painel" + "title": "Selecione um aplicativo para adicioná-lo neste painel", + "toggle": "Clique para selecionar", + "selected": "Selecionado", + "multiple": "Adicionar {count}", + "selectedCount": "{count, plural, one {# selecionou} other {# selecionado}}", + "appsSelected": "{count, plural, one {# app selecionado} other {# apps selecionados}}", + "selectMultiple": "Selecionar múltiplos", + "cancelMultiple": "Sair multi-seleção", + "customApplication": "Aplicativo personalizado", + "application": "Solicitação" }, "create": { "title": "Criar aplicativo", "description": "Criar um novo aplicativo ", "action": "Abrir criação de aplicativo" - }, - "add": "Adicione um aplicativo" + } } }, + "tips": { + "dismiss": "Descartar dica", + "multiSelectApps": "Dica: Mantenha Ctrl / segure para selecionar múltiplos apps de uma só vez" + }, "customWidget": { + "secretEntry": { + "title": "Configurar fonte API", + "description": "Confirme o URL do servidor e insira as credenciais. Os valores secretos são criptografados por Homarr e nunca retornam ao agente solicitante.", + "loading": "Carregando solicitação segura…", + "applying": "Aplicando esta configuração… Mantenha esta página aberta.", + "saved": "Fonte da API configurada. Você pode fechar esta página.", + "unavailable": "Pedido indisponível", + "saveError": "Não é possível configurar a fonte API", + "source": "Fonte da API: {name}", + "baseUrl": "URL do servidor", + "networkScope": "Acesso à rede", + "save": "Salvar configuração da API", + "expires": "Este pedido único expira em {time}." + }, "page": { "list": { - "title": "Widgets Personalizados", "noResults": "Nenhum widget personalizado ainda. Crie o seu primeiro!", - "loading": "Carregando..." + "noDescription": "Sem descrição", + "enabled": "Habilitado", + "disabled": "Desabilitado", + "disabledDescription": "Este widget permanece configurado, mas não carregará em nenhum quadro.", + "requestCount": "{count, plural, one {# pedido} other {# Solicitações}}", + "invalidDefinition": "Definição inválida", + "migrationRequired": "Migração necessária", + "migrationInstructions": "Ações Abertas para copiar ou exportar a definição v1 original para recriação manual. Você também pode usar o prompt de migração com um LLM. Alocamentos de quadros existentes continuam funcionando após a migração.", + "missingCredentials": "{count, plural, one {Credencial ausente} other {# credenciais ausentes}}", + "missingCredentialsDescription": "{count, plural, one {Este widget ainda precisa de uma credencial.} other {Este widget ainda precisa de # credenciais.}} Selecione este emblema para configurar a URL e valores criptografados." }, "create": { "title": "Criar widget personalizado", "subtitle": "Defina uma URL de API, autenticação e como exibir os dados de resposta." }, - "edit": { - "title": "Editar widget personalizado" + "tabs": { + "ariaLabel": "Seções de widget personalizadas", + "installed": "Instalado", + "workshop": "Oficina" } }, "action": { - "create": "Criar", - "import": "Importar", - "save": "Salvar", + "pasteImportHint": "Cole um widget personalizado completo JSON com Ctrl+V ou Comando+V", "delete": "Excluir widget personalizado", "deleteConfirm": "Tem certeza de que deseja excluir \"{name}\"? Esta ação não pode ser desfeita.", "export": "Exportar", - "edit": "Editar", "duplicate": "Duplicar", + "aiPrompt": "Projete com IA", + "copyAiPrompt": "Copiar prompt de IA", "enable": "Habilitado", "disable": "Desabilitado", - "menu": "Ações" + "menu": "Ações", + "downloadSkill": "Ver Habilidade Personalizada de Widget", + "publishWorkshop": "Publicar na Oficina", + "migrate": "Migrar widget personalizado", + "configureSources": "Configurar fontes", + "copyLegacyDefinition": "Copiar conteúdo original do widget", + "exportLegacyDefinition": "Exportar conteúdo original do widget", + "copyMigrationPrompt": "Copiar aviso de migração LLM", + "pasteMigration": "Colar widget migrado", + "importMigration": "Importar arquivo JSON migrado" + }, + "sourceSetupDialog": { + "title": "Configurar fontes de widgets", + "description": "Revise onde este widget conecta e adicione ou substitua suas credenciais criptografadas.", + "credentialsRequired": "As solicitações falharão até que as credenciais necessárias sejam adicionadas.", + "save": "Salvar configuração" }, "field": { - "name": "Nome", - "description": "Descrição", - "iconUrl": "URL do ícone" + "description": "Descrição" + }, + "editor": { + "errorBoundary": { + "title": "Algo deu errado" + }, + "action": { + "components": "Componentes", + "format": "Formato", + "insertStarter": "Insert starter", + "redo": "Refazer", + "copied": "Copiado", + "schema": "Esquema" + }, + "reference": { + "minimal": "Exemplo mínimo", + "full": "Exemplo completo" + }, + "componentReference": { + "search": "Pesquisar componentes", + "empty": "Sem componentes correspondentes", + "count": "{count, number} componentes disponíveis" + }, + "status": { + "errors": "{count, number} erros", + "warnings": "{count, number} avisos", + "ready": "Nenhuma issue encontrada", + "position": "Ln {line, number}, Col {column, number}", + "characters": "{count, number} caracteres", + "charactersWithLimit": "{count, number} / {limit, number}" + }, + "diagnostics": { + "title": "Diagnósticos de modelo", + "line": "Linha {line, number}", + "ast": "{value}", + "bindingTypeConflict": "A entrada \"{value}\" é compartilhada por controles com tipos de valores incompatíveis.", + "runtimeBindingTypeConflict": "A entrada \"{value}\" está vinculada como {firstType} e {secondType}.", + "dynamicRequestId": "Um ID de solicitação literal é necessário. IDs de solicitação dinâmica não são aceitos.", + "dynamicInputBinding": "Um nome de entrada literal é necessário para a vinculação.", + "inlineRequestProps": "Componentes de rede aceitam requestId e parâmetros; URLs inline, método, cabeçalho, e props corpo estão bloqueados.", + "invalidRequestManifest": "Solicitações nomeadas devem ser um mapa de solicitação válido. {value}", + "missingRequestId": "Este componente de rede requer uma ID de requisição literal.", + "templateEmpty": "Digite um modelo JSX.", + "templateTooLong": "O modelo excede o limite de 50.000 caracteres.", + "unknownRequest": "Não existe nenhum pedido de nome com ID \"{value}\"." + } + }, + "workbench": { + "configure": "Configurar", + "sectionNavigation": "Seções de widget personalizadas", + "widgetPreview": "Visualização do widget", + "generalInformation": "Informação Geral", + "invalidWidget": "Widget inválido", + "section": { + "general": "Geral", + "sources": "Fontes de API", + "requests": "Solicitações", + "options": "Opções", + "jsx": "JSX", + "preview": "Pré-visualizar" + }, + "status": { + "unsaved": "Alterações não salvas", + "invalid": "Precisa de atenção", + "ready": "Pronto" + }, + "saveError": { + "title": "Widget não foi salvo", + "description": "Corrija estes erros de validação e salve novamente.", + "more": "+{count} erros são mostrados na bancada.", + "errors": "Erros de validação", + "copy": "Copiar erros", + "copied": "Erros copiados" + }, + "action": { + "preview": "Teste e pré-visualização", + "previewLoading": "Solicitações de teste" + }, + "requests": { + "title": "Consultas e ações nomeadas", + "label": "Solicitações", + "description": "Consulta dados de carregamento; ações são executadas apenas após a interação do usuário. Qualquer método HTTP é válido para qualquer tipo." + }, + "options": { + "title": "Opções do widget" + }, + "builder": { + "advancedManifest": "Manifesto bruto avançado", + "advancedJson": "JSON de manifesto avançado", + "manifestFilename": "widget.json", + "request": "Solicite {count, number}", + "requestId": "Solicitar ID", + "type": "Tipo de cliente de download", + "method": "Método", + "source": "Fonte da API", + "run": "Executar", + "runLoad": "Quando o widget carregar", + "runManual": "Do subproduto", + "permission": "Permissão", + "path": "Caminho", + "pathDescription": "Use '{option:name}' para opções de widget e '{param:name}' para valores de chamada.", + "requestDetails": "Query, corpo e comportamento", + "queryValues": "Valores da consulta", + "queryKey": "Chave de consulta", + "queryKeyInvalid": "Use um ID exclusivo que começa com uma letra e contém apenas letras, números - ou _.", + "valueSource": "Fonte do valor", + "literal": "Literal", + "widgetOption": "Opção de widget", + "invocationParameter": "Parâmetro de inserção", + "option": "Alternativa", + "parameterName": "Nome do parâmetro", + "value": "Valor", + "removeQueryValue": "Remover valor da consulta", + "addQueryValue": "Adicionar valor da consulta", + "jsonBody": "Corpo JSON", + "jsonBodyDescription": "Opcional. Insira $option e $param referências em qualquer profundidade.", + "insertOptionReference": "Inserir opção de referência", + "insertParameterReference": "Inserir referência de parâmetro", + "confirmation": "Mensagem de confirmação", + "invalidation": "Atualizado após sucesso", + "invalidationDescription": "IDs de consulta separados por vírgula", + "noAuth": "Enviar sem autenticação de origem", + "moveRequestUp": "Mover requisição para cima", + "moveRequestDown": "Mover solicitação para baixo", + "removeRequest": "Remover requisição", + "addRequest": "Adicionar pedido", + "optionName": "Nome da opção", + "label": "Descrição", + "control": "Controles", + "description": "Descrição", + "default": "Padrão", + "optionDetails": "Restrições e escolhas dinâmicas", + "minimum": "Mínimo", + "maximum": "Máxima", + "step": "Passo", + "choiceLabel": "Rótulo da escolha", + "choiceValue": "Valor da escolha", + "newChoice": "Nova opção", + "addChoice": "Adicionar escolha", + "removeChoice": "Remover escolha", + "choicesRequest": "Carregar escolhas do pedido", + "itemsPath": "Caminho dos itens", + "itemsPathPlaceholder": "itens (opcional)", + "valuePath": "Caminho do valor", + "labelPath": "Caminho do rótulo", + "group": "Grupo", + "advancedOption": "Opção avançada", + "moveOptionUp": "Mover opção para cima", + "moveOptionDown": "Mover opção para baixo", + "removeOption": "Remover opção", + "addOption": "Adicionar alternativa", + "invalidJson": "JSON inválido", + "invalidWidget": "Widget inválido" + }, + "jsx": { + "title": "Modelo JSX", + "label": "Modelo" + }, + "sources": { + "title": "Fontes e credenciais da API", + "newName": "API {count, number}", + "duplicateSourceId": "IDs de origem da API precisam ser únicas.", + "credentialRemoved": "Credencial removida", + "credentialRemovedDescription": "O valor armazenado foi excluído.", + "primary": "API primária", + "id": "ID da fonte", + "name": "Nome do trabalho", + "baseUrl": "URL base", + "baseUrlError": { + "invalid": "Insira uma URL completa.", + "protocol": "Use uma URL HTTP ou HTTPS.", + "credentials": "Remova o nome de usuário e a senha desta URL. Configure as credenciais abaixo.", + "queryOrFragment": "Remover a cadeia de caracteres de consulta ou fragmento desta URL base. Adicione valores de consulta a uma requisição nomeada." + }, + "networkScope": "Acesso à rede", + "authentication": "Autenticação", + "headerName": "Nome do Cabeçalho", + "queryParameter": "Parâmetro de consulta", + "configured": "Configurado — insira uma substituição", + "clear": "Limpar", + "remove": "Remover origem e suas solicitações", + "advanced": "Avançado", + "add": "Adicionar outra fonte de API", + "sourceType": "Integração", + "manualSource": "HTTP API", + "existingIntegration": "Integração existente", + "integrationType": "Tipo de integração", + "selectIntegration": "Integração configurada", + "noIntegrations": "Nenhuma integração correspondente disponível", + "integrationUnavailable": "A integração selecionada não está mais disponível. Selecione outra integração.", + "integrationDescription": "Usa a URL de integração salva e as credenciais. As alterações aplicam acesso total de integração é necessário para executar as solicitações." + }, + "ai": { + "title": "Criar ou corrigir com qualquer IA", + "description": "Adicione primeiro um URL de documentação de API se tiver uma. Para correções, execute a visualização se possível. Copie o prompt para qualquer IA; ele pode pedir detalhes ausentes. Cole seu JSON final aqui.", + "request": "O que este widget deve fazer?", + "documentationUrl": "URL da documentação da API (opcional)", + "paste": "Colar", + "response": "Resposta IA", + "manualCopyDescription": "Acesso à área de transferência não está disponível. Selecione o prompt abaixo e copie-o manualmente.", + "manualPasteDescription": "O acesso à área de transferência está indisponível ou a resposta copiada precisa de correção. Cole a resposta JSON da IA aqui.", + "selectAll": "Selecionar tudo", + "loadResponse": "Carregar resposta", + "loaded": "Widget carregado no editor", + "invalidResponse": "Área de transferência não contém um widget v2 válido", + "invalidResponseDetail": "A resposta IA é inválida: {message}" + }, + "preview": { + "invalid": "Corrigir erros de validação para pré-visualizar este widget.", + "fixtureError": "Erro de pré-visualização", + "requestData": "Solicitar dados", + "status": { + "idle": "Os pedidos não foram testados", + "loading": "Solicitações de teste", + "success": "Todas as solicitações de carga foram bem-sucedidas", + "error": "Uma ou mais solicitações de carregamento falharam" + }, + "result": { + "loading": { + "title": "Testando solicitações de API", + "description": "Homarr está criando uma sessão de pré-visualização e carregando os dados do widget." + }, + "success": { + "title": "Pré-visualização pronta", + "description": "{succeeded, plural, =0 {Este widget não tem solicitações de carregamento.} one {# pedido de carregamento bem-sucedido} other {# carregamento das solicitações bem-sucedido.}} Abra os dados para inspecionar a resposta." + }, + "error": { + "title": "Visualização concluída com erros de requisição", + "description": "{succeeded, number} sucedeu e {failed, number} falhou. Abra os dados para os detalhes de resposta e de erro." + } + }, + "instanceOptions": "Opções de instância", + "liveActions": "Executar ações contra a API configurada", + "liveActionsDescription": "Desligar é uma simulação segura. Virar isto afecta o serviço real.", + "noActions": "Nenhuma ação foi definida.", + "containedFailures": "Falhas de execução estão contidas dentro deste widget. Pedidos de revistas nunca incluem valores secretos.", + "validation": { + "title": "Validação", + "ready": "A definição de widget é válida." + }, + "accessibility": { + "title": "Verificações de acessibilidade", + "ready": "Nenhuma omissão de acessibilidade comum detectada.", + "pending": "Verificações de acessibilidade serão executadas quando a definição do widget for válida.", + "imageAlt": "Adicionar texto alternativo a cada imagem, usando um alt vazio somente para imagens decorativas.", + "actionIconLabel": "Adicionar um rótulo aria-label ou título a cada ActionIcon.", + "inputLabel": "Adicione um rótulo visível ou um nome acessível a cada entrada." + }, + "journal": "Diário de solicitação anulado", + "actionParameters": "Parâmetros de ação (JSON)", + "invalidParameters": "Use os tipos de string declarada, número e parâmetro booleano.", + "runDestructive": "Executar ação destrutiva", + "runAction": "Executar ação", + "deleteConfirmation": "Esta ação de visualização altera dados remotos através da API configurada.", + "simulated": "Simulação de ação", + "httpStatus": "HTTP {status, number}", + "tab": { + "widget": "Widget", + "data": "Dado", + "options": "Opções", + "state": "Estado do trabalho", + "actions": "Controles", + "diagnostics": "Diagnóstico" + }, + "size": { + "compact": "Compacta", + "standard": "Padrão", + "wide": "Ampla" + }, + "fixture": { + "live": "Publicado", + "loading": "Carregando", + "empty": "Vazio", + "error": "Erro" + } + } + }, + "preview": { + "request": { + "permission": { + "view": "Visualização", + "modify": "Modificação", + "full": "Completo" + } + } }, "notification": { "created": "Widget \"{name}\" criado com sucesso.", "updated": "Widget \"{name}\" atualizado com sucesso.", "deleted": "Widget \"{name}\" excluído.", "imported": "Widget importado com sucesso.", + "migrated": "Widget legado migrado com sucesso. Os posicionamentos do tabuleiro existentes agora usam a definição v2.", + "migrationError": "Falha ao migrar o widget legado. Certifique-se de que o arquivo utilize o esquema homarr-custom-widget-v2.", + "legacyDefinitionCopied": "O conteúdo original do widget foi copiado. Valores de credenciais armazenados não estão incluídos.", + "legacyDefinitionCopyError": "Falha ao copiar o conteúdo do widget original.", + "migrationPromptCopied": "Um prompt de migração aninhado foi copiado. Cole em um LLM, copie sua única resposta JSON e então escolha Colar widget aqui.", + "migrationPromptCopyError": "Falha ao copiar o prompt de migração.", + "sourcesConfigured": "Fontes e credenciais do widget salvas.", + "sourceConfigurationError": "Falha ao configurar fontes de widgets.", + "aiPromptCopiedWithCount": "Aviso copiado para a área de transferência ({count, number} caracteres).", "aiPromptCopyError": "Falha ao copiar prompt para área de transferência. O seu navegador pode não suportar este recurso.", - "createError": "Falha ao criar widget. Verifique se o endpoint API está acessível.", + "aiPromptSent": "Prompt enviada. Você pode continuar editando enquanto o assistente trabalha em segundo plano.", "updateError": "Falha ao atualizar o widget. Suas alterações não foram salvas.", "importError": "Falha ao importar o widget. Certifique-se de que o arquivo seja um widget personalizado válido exportado em JSON.", "exportError": "Falha ao exportar o widget.", @@ -735,29 +1138,184 @@ "duplicateError": "Falha ao duplicar o widget.", "toggleError": "Falha ao alternar o status do widget.", "deleteError": "Falha ao excluir o widget.", - "previewError": "Falha ao buscar a pré-visualização. Verifique a URL e tente novamente.", - "executed": "Ação executada com sucesso.", - "executeError": "A ação falhou: {error}" + "previewError": "Falha ao buscar a pré-visualização. Verifique a URL e tente novamente." + }, + "importReview": { + "title": "Revisar importação de widget personalizada", + "description": "Verificar onde este widget se conecta e o que a placa acessar seus controles requer antes de importá-lo.", + "migrationTitle": "Revisar substituição v2 migrada", + "migrationDescription": "Revise e confirme esta definição gerada de v2. Confirmando que atomicamente substitui o registro v1 preservado mantendo os posicionamentos do quadro vinculados ao mesmo ID de widget.", + "fileLabel": "Escolha um arquivo de widget JSON personalizado", + "name": "Nome do trabalho", + "origin": "Origem base", + "authentication": "Autenticação", + "networkScope": "Escopo de rede", + "methods": "Métodos HTTP", + "permissions": "Permissões necessárias do fórum", + "sourceSetup": { + "title": "Configurar fontes de API", + "description": "Confirme onde este widget conecta e adiciona credenciais. URLs privadas e de loopback são específicas para a sua instalação Homarr.", + "suggestedUrl": "URL sugerida", + "confirmUrl": "Eu confirmo que a URL do servidor está correta para a minha instalação Homarr", + "ready": "URL pronta", + "needsUrl": "Confirmar URL", + "credentialsMissing": "Faltam credenciais", + "credentialsOptional": "Você pode instalar sem credenciais e configurá-las mais tarde, mas as solicitações irão falhar até que sejam adicionadas." + }, + "actionWarning": { + "title": "Este widget pode alterar dados remotos", + "description": "Revise todas as ações nomeadas, as credenciais herdadas e a confirmação destrutiva após a importação. Os segredos não estão incluídos no arquivo." + }, + "cancel": "Cancelar Importação", + "confirm": "Importar widget", + "confirmMigration": "Confirmar substituição v2" + }, + "secret": { + "apiKey": "Chave de API ou token", + "username": "Usuário", + "password": "Senha", + "savedPlaceholder": "••••••• (salvo, deixe em branco para manter)" + } + }, + "workshop": { + "title": "Oficina", + "browseWorkshop": "Navegar na Oficina", + "openCommunity": "Abrir Oficina", + "openOnWorkshop": "Abrir {title} no site da Oficina", + "back": "Voltar à Oficina", + "search": "Widgets de pesquisa", + "searchCss": "Pesquisar temas CSS", + "sort": "Ordenar", + "sortTop": "Melhores avaliados", + "sortNewest": "Recentes", + "listAriaLabel": "Widgets da oficina", + "listAriaLabelCss": "Temas CSS da Oficina", + "empty": "Nenhum widget corresponde a esta pesquisa.", + "emptyDescription": "Widgets comunitários publicados na Oficina aparecem aqui.", + "emptyFilteredTitle": "Nenhum widget corresponde a esta pesquisa", + "emptyFilteredDescription": "Nenhum widget da oficina corresponde \"{search}\".", + "emptyCss": "Nenhum tema CSS corresponde a essa pesquisa.", + "unavailableTitle": "A Oficina Homarr parece não estar disponível", + "unavailable": "O serviço da comunidade pode estar temporariamente fora do ar. Tente novamente daqui a pouco. Os seus widgets instalados não são afetados.", + "loadError": "Esta submissão não pôde ser carregada.", + "noDescription": "Sem descrição", + "author": "por {name}", + "communityMember": "Membro da comunidade", + "outdated": "Desatualizado", + "outdatedWarning": "O autor marcou esta submissão como desatualizada. Revise-a com atenção antes de importá-la.", + "score": "Pontuação: {count, number}", + "upvote": "Upvote", + "downvote": "Desaprovar", + "voteError": "Não foi possível salvar o voto.", + "signIn": "Entrar com GitHub", + "signInError": "Falha ao entrar no GitHub. Verifique se o provedor OAuth da Workshop está configurado e se os popups são permitidos.", + "signOut": "Encerrar sessão", + "signInHint": "Entrar para votar ou reportar. Instalar não requer uma conta de oficina.", + "securityNotice": "Widgets de oficina podem chamar suas fontes declaradas de API e executar ações declaradas com credenciais configuradas localmente. Segredos nunca são incluídos.", + "securityNoticeCss": "O CSS da comunidade pode alterar a aparência e usabilidade de um quadro. Revise-o antes de importar; nada é salvo até salvar as configurações do tabuleiro.", + "install": "Instale", + "installReviewTitle": "Revise antes de instalar", + "installError": "Este widget não pode ser instalado", + "installErrorDescription": "O envio da oficina não é um widget JSX v2 personalizado.", + "useCss": "Import CSS", + "importCss": "Importar CSS da Oficina", + "importCssConfirm": "Substituir o atual CSS personalizado com \"{title}\"? Nada é salvo até que você salve as configurações do painel.", + "screenshotAlt": "{title} captura de tela {count, number}", + "screenshotViewer": "{title} visualizador de capturas", + "screenshotsLabel": "{title} capturas de tela", + "zoomScreenshot": "Ver tamanho total", + "previousScreenshot": "Imagem anterior", + "nextScreenshot": "Próxima captura de tela", + "showScreenshotThumbnails": "Mostrar miniaturas de captura", + "hideScreenshotThumbnails": "Ocultar miniaturas de imagem", + "closeScreenshotViewer": "Fechar visualizador de captura", + "technicalDetails": "Detalhes técnicos", + "sourceCode": "Entrada de oficina", + "export": "Exportar", + "report": "Denunciar", + "reportTitle": "Denunciar submissão", + "reportReason": "Motivo", + "reportExplanation": "O que os moderadores da Oficina devem saber?", + "reportSend": "Enviar relatório", + "reportSent": "Denúncia enviada", + "reportSentDescription": "Moderadores da oficina agora podem revisar esta submissão.", + "reportCount": "{count, plural, one {# reportar} other {# reporta}}", + "reportWarning": "{count, plural, one {Esta submissão tem # denúncia comunitária em aberto.} other {Esta submissão tem # denúncias comunitárias em aberto.}} Ela continua instalável, mas você deve revisar seu conteúdo primeiro.", + "reportVisibility": "Detalhes do relatório são visíveis apenas para o autor e administradores da oficina desta submissão.", + "reportCategory": { + "outdated": "Desatualizado ou não funciona mais", + "malicious": "Malicioso", + "spam": "Spam", + "copyright": "Direitos autorais", + "inappropriate": "Inapropriado", + "other": "Outras" + }, + "publish": { + "title": "Publicar na Oficina", + "introTitle": "Compartilhe este widget com a comunidade", + "introDescription": "A Homarr exporta uma cópia sem credencial do widget atual. Adicione detalhes claros na listagem para que as pessoas saibam o que faz antes de instalá-lo.", + "listingDetails": "Listagem de oficina", + "listingDetailsDescription": "Estes detalhes aparecem publicamente ao lado da definição de widget exportado.", + "success": "Publicado imediatamente. Membros da Comunidade podem instalar e denunciar este widget.", + "successTitle": "Seu widget está ao vivo", + "manageDescription": "Abra o envio para atualizar seu anúncio, relatórios de revisão, marcá-lo como desatualizado ou excluí-lo. O gerenciamento de submissão é tratado diretamente no site da Oficina.", + "viewSubmission": "Visualizar e gerenciar submissões", + "done": "Concluído", + "signInHint": "Entre para publicar sob sua identidade na Oficina.", + "titleField": "Título", + "descriptionField": "Descrição", + "screenshots": "Screenshots", + "screenshotsDescription": "Até cinco imagens PNG, JPEG ou WebP", + "screenshotsPlaceholder": "Escolher capturas", + "invalidScreenshot": "Use PNG, JPEG ou imagens WebP menores que {maxSize} cada.", + "privateSourceWarning": "Este widget contém URLs de origem privada para: {sources}. Substitua endereços pessoais ou IP por espaços reservados de serviço seguros antes de publicar.", + "reviewSourcesTitle": "Revisar URLs de origem privada", + "privateSourceConfirmation": "Eu revisei estas URLs de origem e elas não expõem detalhes de infraestrutura privada", + "action": "Publicar agora", + "publicationNote": "Publicação é imediata. Você pode gerenciar a submissão depois na Oficina.", + "definitionChanged": "O widget mudou enquanto a publicação estava sendo preparada. Revise suas URLs de fonte privada novamente, e tente novamente.", + "error": "Publicação falhou" } }, "integration": { + "completion": { + "modalTitle": "Serviço pronto", + "title": "{name} está conectado", + "description": "A conexão passou no teste. Escolha o que mostrar neste tabuleiro.", + "connectionReady": "Conexão de serviço está pronta", + "appReady": "Atalho do aplicativo está pronto", + "compatibleWidgets": "{count, plural, =0 {Não há widgets compatíveis} one {# widget compatível} other {# widgets compatíveis}} disponível", + "chooseWidget": "Escolha o widget", + "recipes": { + "title": "Recomendado para este board", + "description": "Com base em serviços e widgets conectados já existe nesta tabuleira.", + "newConnectionReason": "Agora disponível através {integration}", + "existingConnectionReason": "Funciona com um serviço que você já está conectado.", + "dismiss": "Descartar recomendações para este serviço neste board" + } + }, "page": { "list": { - "title": "Integrações", + "ariaLabel": "Integrações configuradas", "search": "Buscar integrações", + "scopedNote": "Mostrando apenas as integrações que você tem permissão para gerenciar.", "noResults": { - "title": "Ainda não existem integrações" + "title": "Ainda não existem integrações", + "description": "Conecte um serviço para usar seus dados e ações em widgets da página inicial.", + "action": "Crie sua primeira integração", + "filteredTitle": "Nenhuma integração corresponde à sua pesquisa", + "filteredDescription": "Nenhuma integração corresponde \"{search}\". Tente outro nome, tipo ou URL.", + "createOnlyTitle": "Você só pode adicionar integrações", + "createOnlyDescription": "Suas permissões permitem que você crie integrações, mas não gerencie as existentes. Peça a um administrador para acessar as que você precisa." } }, "create": { "title": "Nova integração {name}", "notification": { "success": { - "title": "Criação bem-sucedida", "message": "A integração foi criada com sucesso" }, "error": { - "title": "A criação falhou", "message": "A integração não pôde ser criada" } }, @@ -781,11 +1339,9 @@ "title": "Editar integração {name}", "notification": { "success": { - "title": "Mudanças aplicadas com sucesso", "message": "A integração foi salva com sucesso" }, "error": { - "title": "Não foi possível aplicar as alterações", "message": "A integração não pôde ser salva" } }, @@ -802,23 +1358,15 @@ "message": "Tem certeza que deseja excluir a integração {name}?", "notification": { "success": { - "title": "Exclusão bem-sucedida", "message": "A integração foi excluída com sucesso" }, "error": { - "title": "Falha na exclusão", "message": "Não foi possível deletar a integração" } } } }, "field": { - "name": { - "label": "Nome" - }, - "url": { - "label": "URL" - }, "attemptSearchEngineCreation": { "label": "Criar mecanismo de busca", "description": "A integração \"{kind}\" pode ser usada com os mecanismos de busca. Marque isso para configurar automaticamente o mecanismo de busca." @@ -830,6 +1378,10 @@ "label": "Criar aplicativo", "description": "Crie um aplicativo com o mesmo nome e ícone da integração. Deixe o campo de entrada abaixo vazio para criar o aplicativo com a URL de integração." }, + "linkApp": { + "label": "Vincular um aplicativo existente", + "description": "Conecte essa integração a um aplicativo que você já pode usar." + }, "appHref": { "placeholder": "URL de aplicativo personalizada" }, @@ -843,7 +1395,11 @@ "grid": { "widgetCount": "{count} widgets", "noWidgets": "Sem widgets", - "detected": "Detectado via Docker" + "detected": "Detectado via Docker", + "connected": "{count, plural, one {# conectado} other {# conectado}}", + "tiedWidgets": "Widgets amarrados", + "more": "+ Mais{count}", + "loadError": "Não foi possível carregar as integrações. Tente novamente antes de criar uma nova conexão." }, "category": { "dnsHole": "DNS", @@ -874,7 +1430,10 @@ "analytics": "Análises", "vpn": "VPN", "mediaLibrary": "Biblioteca de mídia", - "uptimeMonitoring": "Monitoramento do Uptime" + "uptimeMonitoring": "Monitoramento do Uptime", + "beszel": "Beszel", + "systemMonitoring": "Sistema de Monitoramento", + "security": "Segurança" }, "testConnection": { "action": { @@ -1159,6 +1718,22 @@ "slug": { "label": "Slug página de status", "newLabel": "Novo slug da página de status" + }, + "wazuhIndexerUrl": { + "label": "URL do Indexador", + "newLabel": "URL do novo indexador" + }, + "wazuhIndexerUsername": { + "label": "Usuário Indexador", + "newLabel": "Novo nome de usuário indexador" + }, + "wazuhIndexerPassword": { + "label": "Senha do indexador", + "newLabel": "Nova senha do indexador" + }, + "wazuhDashboardUrl": { + "label": "URL do Painel (opcional)", + "newLabel": "URL do novo dashboard" } } }, @@ -1167,54 +1742,19 @@ "interact": "Interagir com integrações", "full": "Acesso completo à integração" }, - "audiobookshelf": { - "name": "Audiobookshelf", - "description": "Servidor auto-hospedado de audiolivros e podcasts" - }, - "navidrome": { - "name": "Navidrome", - "description": "Servidor auto-hospedado de streaming de música com compatibilidade com a API Subsonic" - }, - "uptimeKuma": { - "name": "Uptime Kuma", - "description": "Monitoramento de tempo de atividade auto-hospedado com páginas de status públicas", - "secret": { - "slug": { - "description": "O slug da sua página de status pública. O padrão é \"default\" se não definido." - }, - "apiKey": { - "description": "Chave de API opcional para acesso autenticado a /metrics" - } - } - }, - "traefik": { - "name": "", - "description": "" - }, - "paperlessNgx": { - "name": "Paperless-ngx", - "description": "Sistema de gerenciamento de documentos para arquivamento e organização de documentos digitalizados" - }, - "patchmon": { - "name": "", - "description": "" - }, - "bazarr": { - "name": "", - "description": "" - }, - "wud": { - "name": "O Docker", - "description": "Monitora qual dos seus contêineres Docker tem atualizações de imagem disponíveis" + "llamacpp": { + "name": "llama.cpp", + "description": "Monitore um servidor llama-server local: saúde, modelo e métricas de geração" } }, "media": { "plural": "Mídias", "search": "Buscar uma mídia", "field": { - "name": "Nome", + "preview": "Pré-visualizar", "size": "Tamanho", - "creator": "Criador" + "creator": "Criador", + "actions": "Controles" }, "action": { "upload": { @@ -1242,10 +1782,12 @@ } }, "copy": { - "label": "Copiar URL" + "label": "Copiar URL", + "labelNamed": "Copiar URL para {name}" }, "open": { - "label": "Abrir mídia" + "label": "Abrir mídia", + "labelNamed": "Abrir {name}" } }, "noResults": { @@ -1260,7 +1802,6 @@ "add": "Adicionar", "apply": "Aplicar", "backToOverview": "Voltar à visão geral", - "skip": "Pular", "change": "Alterar", "create": "Criar", "createAnother": "Criar e recomeçar", @@ -1283,16 +1824,31 @@ "tryAgain": "Tente novamente", "loading": "Carregando", "show": "Mostrar", - "hide": "Esconder" + "hide": "Esconder", + "undo": "Desfazer", + "editNamed": "Editar {name}", + "deleteNamed": "Excluir {name}", + "clearSearch": "Limpar pesquisa", + "copy": "copiar", + "copied": "Copiado", + "refresh": "Atualizar" + }, + "pagination": { + "pageOf": "Página {page} de {totalPages}" }, "here": "aqui", + "serviceUrlTemplate": { + "serverTitle": "Endereço normal do servidor", + "urlModeLabel": "Padrão de serviço", + "hostPort": "Mesmo hospedeiro, portas diferentes", + "subdomain": "Um subdomínio por serviço", + "path": "Um caminho por serviço" + }, "iconPicker": { "label": "URL do ícone", + "description": "Procure na biblioteca, cole uma URL da imagem ou envie um arquivo.", "header": "Digite o nome ou os objetos para filtrar os ícones... O Homarr pesquisará {countIcons} ícones para você", "headerLoading": "Digite para pesquisar ícones", - "noResults": "Nenhum ícone corresponde a \"{search}\".", - "error": "Não foi possível carregar os ícones.", - "description": "Procure na biblioteca, cole uma URL da imagem ou envie um arquivo.", "clear": "Limpar imagem", "uploadImage": "Upload de imagem", "results": "Resultados da busca por imagem", @@ -1301,7 +1857,9 @@ "otherImages": "Outras imagens", "urlLoading": "Verificando imagem…", "urlReady": "A imagem está pronta para uso", - "urlError": "Esta imagem não pôde ser carregada. Verifique a URL e tente novamente." + "urlError": "Esta imagem não pôde ser carregada. Verifique a URL e tente novamente.", + "noResults": "Nenhum ícone corresponde a \"{search}\".", + "error": "Não foi possível carregar os ícones." }, "colorScheme": { "options": { @@ -1313,7 +1871,6 @@ "information": { "min": "Mínimo", "max": "Máximo", - "days": "Dias", "hours": "Horas", "minutes": "Minutos" }, @@ -1350,16 +1907,16 @@ }, "userAvatar": { "menu": { - "switchToDarkMode": "Alternar para o modo escuro", - "switchToLightMode": "Alternar para o modo claro", + "open": "Abrir menu da conta", "management": "Gerenciamento", - "docker": "", "preferences": "Suas preferências", "logout": "Sair", "login": "“Login”", "homeBoard": "Seu painel inicial", - "loggedOut": "Sessão encerrada", - "updateAvailable": "{countUpdates} atualizações disponíveis: {tag}" + "updateAvailable": "{countUpdates} atualizações disponíveis: {tag}", + "assistant": "Assistente", + "assistantThinking": "Pensando", + "modifier": "Mod" } }, "dangerZone": "Zona de risco", @@ -1407,75 +1964,85 @@ "kilometersPerHour": "km/h", "milesPerHour": "mph" } + }, + "widgetQuery": { + "loading": "Carregando dados do widget" + }, + "total": "Total", + "filesystemUsage": "{count, plural, one {Mostre o uso para # sistemas de arquivos} other {Mostre o uso para # sistemas de arquivos}}", + "field": { + "name": "Nome do trabalho" + }, + "label": { + "new": "Novo" + }, + "entity": { + "apps": "Aplicativos", + "boards": "Painéis", + "certificates": "Certificados", + "customWidgets": "Widgets personalizados", + "groups": "Grupos", + "integrations": "Integrações", + "invites": "Convites", + "logs": "Logs", + "media": "Mídia", + "searchEngines": "Mecanismos de busca", + "tasks": "Tarefas", + "users": "Usuários" } }, "section": { - "dynamic": { + "option": { + "showLabel": { + "label": "Mostrar etiqueta", + "description": "Exibe o rótulo do recipiente acima do seu conteúdo." + }, + "collapsible": { + "label": "Permitir colapso", + "description": "Deixar que os espectadores expandam e frustram este contêiner." + }, + "showOpenAll": { + "label": "Mostrar ação open-all", + "description": "Mostrar uma ação que abre todos os aplicativos neste contêiner em novas abas." + }, + "scrollable": { + "label": "Rolável", + "description": "Mantenha este contêiner em seu tamanho definido e role seu conteúdo em vez de crescer." + } + }, + "action": { + "openAllInNewTabsFor": "Abrir todos os aplicativos no {name} nas abas" + }, + "openAllInNewTabs": { + "title": "Abrir tudo em abas", + "text": "Alguns navegadores podem bloquear a abertura em massa de abas por motivos de segurança. O Homarr não conseguiu abrir todas as janelas porque seu navegador bloqueou esta ação. Por favor, permita \"Abrir janelas pop-up\" e tente novamente." + }, + "container": { + "untitled": "Recipiente sem título", "action": { - "create": "Nova seção dinâmica", - "remove": "Remover seção dinâmica" + "create": "Novo recipiente", + "remove": "Remover contêiner", + "expand": "Expandir", + "collapse": "Recolher" }, "option": { "title": { "label": "Título" }, "customCssClasses": { - "label": "Classes CSS customizadas" + "label": "Classes CSS personalizadas" }, "borderColor": { "label": "Cor da borda" } }, "remove": { - "title": "Remover seção dinâmica", - "message": "Tem certeza de que deseja remover esta seção dinâmica? Os itens serão movidos para o mesmo local na seção pai." - } - }, - "category": { - "field": { - "name": { - "label": "Nome" - } - }, - "action": { - "create": "Nova categoria", - "edit": "Renomear categoria", - "remove": "Remover categoria", - "moveUp": "Subir", - "moveDown": "Mover para baixo", - "createAbove": "Nova categoria acima", - "createBelow": "Nova categoria abaixo", - "openAllInNewTabs": "Abrir tudo em abas" - }, - "create": { - "title": "Nova categoria", - "submit": "Adicionar categoria" - }, - "remove": { - "title": "Remover categoria", - "message": "Tem certeza que deseja deletar a categoria {name}?" - }, - "edit": { - "title": "Renomear categoria", - "submit": "Renomear categoria" - }, - "menu": { - "label": { - "create": "Nova categoria", - "changePosition": "Mudar de posição", - "settings": "Configurações" - } - }, - "openAllInNewTabs": { - "title": "Abrir tudo em abas", - "text": "Alguns navegadores podem bloquear a abertura em massa de abas por motivos de segurança. O Homarr não conseguiu abrir todas as janelas porque seu navegador bloqueou esta ação. Por favor, permita \"Abrir janelas pop-up\" e tente novamente." + "message": "Remover este container? Seu conteúdo se moverá para a área ao redor." } } }, "item": { "action": { - "create": "Novo item", - "import": "Importar item", "edit": "Editar item", "moveResize": "Mover / redimensionar item", "duplicate": "Duplicar item", @@ -1484,7 +2051,7 @@ "menu": { "label": { "settings": "Configurações", - "refresh": "", + "settingsFor": "Configurações para {name}", "options": "", "actions": "" }, @@ -1493,21 +2060,96 @@ "error": "", "loading": "", "idle": "" + }, + "notification": { + "saveError": { + "title": "Não foi possível salvar o widget", + "message": "As alterações no widget foram revertidas" + } } }, "create": { "title": "Escolha o item a adicionar", "search": "Filtrar itens", - "addToBoard": "Adicionar ao painel" + "addToBoard": "Adicionar ao painel", + "addAtPosition": "Adicionar item aqui", + "destination": { + "label": "Adicionar a", + "description": "Escolha onde o widget deve aparecer. Você ainda pode movê-lo mais tarde.", + "mainCanvas": "Tela principal", + "leftRail": "Trilho esquerdo", + "rightRail": "Trilho direito" + }, + "connectionStatus": { + "ready": "Pronto", + "needsSetup": "Precisa de configuração", + "noConnectionRequired": "Nenhuma conexão necessária" + }, + "customWidget": "Widget personalizado", + "standalone": "Autônomo", + "missingIntegration": { + "title": "Conecte um serviço primeiro", + "noPermission": "Este widget precisa de uma conexão de serviço compatível. Peça a um administrador para conectar um, e tente novamente." + }, + "notification": { + "success": { + "title": "Widget adicionado", + "message": "{name} foi adicionado a este board.", + "relocatedMessage": "{name} foi adicionado ao {destination} porque o destino selecionado não estava disponível." + }, + "error": { + "title": "Não é possível adicionar item", + "message": "O item não pode ser adicionado a este board" + } + } + }, + "selection": { + "summary": "{count, plural, one {# item selecionado} other {# itens selecionados}}", + "selected": "{count, plural, one {# selecionou} other {# selecionado}}", + "copy": "copiar", + "copied": "{count, plural, one {# item copiado para a área de transferência} other {# itens copiados para a área de transferência}}", + "copyError": "Os itens selecionados não puderam ser copiados. Seu navegador não pode permitir o acesso à área de transferência.", + "paste": "Colar", + "pasteShortcut": "Cole os itens copiados aqui (Ctrl / ├+ V)", + "pasted": "{count, plural, one {# item colou} other {# itens colados}}", + "pasteError": "A área de transferência não pôde ser lida. É possível que seu navegador não permita acesso à área de transferência.", + "pasteInvalid": "A área de transferência não contém itens válidos do quadro Homarr.", + "pasteUnavailable": "Os itens copiados não cabem neste tabuleiro.", + "removed": "{count, plural, one {# item removido} other {# itens removidos}}", + "move": "Mover-se", + "moveTo": "Mover itens selecionados", + "delete": "Apagar", + "clear": "Limpar seleção", + "clearShortcut": "Limpar seleção (Escape)", + "saveErrorTitle": "Não é possível atualizar itens", + "saveErrorMessage": "As alterações não puderam ser salvas. O board foi atualizado.", + "moveUnavailableTitle": "Não é possível mover os itens selecionados", + "moveUnavailableMessage": "O destino não tem espaço suficiente para toda a seleção." }, "moveResize": { "title": "Mover / redimensionar item", + "entryLabel": "{name}, coluna {column}, linha {row}", + "target": { + "numbered": "{name}, destino {index}", + "located": "{name}, {location}, destino {index}" + }, + "keyboard": { + "instructions": "Pressione Enter ou Espaço para iniciar a edição do teclado. Use as teclas de seta para mover, Shift + as setas do teclado para redimensionar e Escape para parar.", + "started": "Edição do teclado iniciada. Use as setas para mover, Shift + as setas do teclado para redimensionar e Escape para parar.", + "stopped": "Edição de teclado interrompida.", + "boundary": "Essa mudança não se encaixa nesta seção." + }, "field": { + "section": { + "label": "Seção ou trilho" + }, "width": { - "label": "Largura" + "label": "Largura", + "shortLabel": "PO" }, "height": { - "label": "Altura" + "label": "Altura", + "shortLabel": "A" }, "xOffset": { "label": "Deslocamento X" @@ -1521,18 +2163,36 @@ "title": "Editar item", "tab": { "widget": "Editar widget", - "app": "Editar aplicativo" + "app": "Editar aplicativo", + "integration": "Editar integração" }, "app": { "propagationNotice": "As alterações deste aplicativo serão aplicadas em todos os lugares em que for usado em todos os painéis." }, + "integration": { + "action": "Editar conexão", + "description": "Teste ou repare uma conexão selecionada sem sair deste widget.", + "editLabel": "Editar integração {name}", + "fullAccessRequired": "Acesso total necessário", + "propagationNotice": "As alterações nesta integração são aplicadas em todos os lugares em que for utilizada. A conexão é testada antes de ser salva.", + "loading": "Carregando integração", + "loadError": "Não foi possível carregar esta integração. Tente novamente antes de alterar suas configurações de conexão." + }, + "preview": { + "integrationRequired": "Escolha um contato para visualizar este widget.", + "size": "Tamanho do arquivo" + }, + "settings": { + "label": "Configurações do widget" + }, "advancedOptions": { "label": "Opções avançadas", "title": "Opções avançadas de itens" }, "field": { "integrations": { - "label": "Integrações" + "label": "Integrações", + "removeLabel": "Remover integração {name}" }, "title": { "label": "Título" @@ -1546,17 +2206,18 @@ } }, "remove": { - "title": "Remover item", "message": "Tem certeza que deseja remover esse item?" + }, + "advancedFocus": { + "open": "Abrir visualização avançada", + "close": "Fechar visualização avançada", + "label": "{widget} visão avançada" } }, "widget": { "integrationSelect": { "configureIntegrationFirst": "Conecte uma integração primeiro", - "loading": "Carregando...", - "placeholder": "Selecionar uma opção", - "noResults": "Nenhum resultado encontrado", - "loadError": "Erro ao carregar opções" + "placeholder": "Selecionar uma opção" }, "app": { "name": "Aplicativo", @@ -1565,9 +2226,6 @@ "appId": { "label": "Escolher aplicativo" }, - "openInNewTab": { - "label": "Abrir em nova guia" - }, "showTitle": { "label": "Exibir o nome do aplicativo" }, @@ -1575,11 +2233,8 @@ "label": "Habilitar verificação de status" }, "layout": { - "label": "Layout", "option": { - "row": "Horizontal", "row-reverse": "Horizontal (invertido)", - "column": "Vertical", "column-reverse": "Vertical (invertido)" } }, @@ -1604,23 +2259,60 @@ "name": "Marcadores", "description": "Exibe múltiplos links de aplicativos", "option": { - "title": { - "label": "Título" + "showTitle": { + "label": "Mostrar título do widget" + }, + "titleSize": { + "label": "Tamanho do título do widget (px)" }, "layout": { "label": "Layout", "option": { - "row": { - "label": "Horizontal" - }, - "column": { - "label": "Vertical" - }, - "grid": { - "label": "Grade" + "adaptive": { + "label": "Adaptativo" }, "gridHorizontal": { "label": "Grade horizontal" + }, + "icons": { + "label": "Ícones" + } + } + }, + "variant": { + "label": "Aparência", + "option": { + "soft": { + "label": "Suave" + }, + "filled": { + "label": "Preenchido" + }, + "outline": { + "label": "Contorno" + }, + "plain": { + "label": "Simples" + } + } + }, + "spacing": { + "label": "Espaçamento entre cartas", + "option": { + "xs": { + "label": "Extra pequeno" + }, + "sm": { + "label": "Pequeno" + }, + "md": { + "label": "Médio" + }, + "lg": { + "label": "Grande" + }, + "xl": { + "label": "Extra grande" } } }, @@ -1633,17 +2325,28 @@ "hideHostname": { "label": "Ocultar nomes de host" }, - "openNewTab": { - "label": "Abrir em nova guia" - }, "withBorder": { "label": "Mostrar bordas" }, + "grow": { + "label": "Expanda cartões para preencher linha" + }, + "customUrls": { + "label": "Links personalizados" + }, "items": { "label": "Marcadores", - "add": "Adicionar marcador" + "remove": "Remover marcador favorito", + "apps": { + "label": "Adicionar favoritos", + "description": "Cole URLs ou encontre apps existentes. Arraste os favoritos abaixo para reordená-los.", + "placeholder": "Colar URLs ou aplicativos de pesquisa", + "addUrl": "Adicione esta URL", + "hint": "Pressione Enter para adicionar uma URL. Cole URLs separados por vírgula ou uma por linha para adicionar vários." + } } - } + }, + "empty": "Adicione uma URL ou um aplicativo nas configurações do widget" }, "archiveTeamWarrior": { "name": "ArchiveTeam Warrior", @@ -1652,33 +2355,61 @@ "showBroadcastMessage": { "label": "Mostrar mensagens de transmissão" } + }, + "noProjectSelected": "Nenhum projeto selecionado", + "runnerStatus": "Runner: {status}", + "projectId": "Projeto: {id}", + "sessionReceived": "Sessão recebida: {value}", + "sessionSent": "Sessão enviada: {value}", + "sessionId": "Sessão: {id}", + "startedAt": "{date} Iniciado", + "emptyItems": "Nenhum trabalho ativo ou recente neste snapshot", + "metric": { + "running": "Em execução", + "completed": "Concluído", + "failed": "Falhou", + "canceled": "Cancelado", + "download": "Download", + "upload": "Upload" + }, + "status": { + "running": "Em execução", + "completed": "Concluído", + "failed": "Falhou", + "canceled": "Cancelado", + "stopped": "Parado", + "idle": "Ocioso", + "unknown": "Desconhecido" + } + }, + "wud": { + "name": "O Docker", + "description": "Mostrar quantos contêineres assistidos possuem atualizações disponíveis.", + "title": "O Docker", + "monitored": "Monitorado", + "updatesAvailable": "{count, plural, one {# atualização disponível} other {# atualizações disponíveis}}", + "updateAvailable": "Atualização disponível", + "openReleaseNotes": "Abrir notas de lançamento", + "option": { + "showRing": { + "label": "Mostrar atualização de toque" + }, + "showUpdateList": { + "label": "Mostrar lista de atualização do recipiente", + "description": "Lista cada container monitorado que tem uma atualização de imagem disponível" + } } }, "dnsHoleSummary": { "name": "Resumo do DNS Hole", "description": "Exibe o resumo do seu DNS Hole", "option": { - "layout": { - "label": "Layout", - "option": { - "row": { - "label": "Horizontal" - }, - "column": { - "label": "Vertical" - }, - "grid": { - "label": "Grade" - } - } - }, "usePiHoleColors": { "label": "Usar cores do Pi-Hole" } }, "error": { - "internalServerError": "Falha ao buscar resumo do DNS Hole", - "integrationsDisconnected": "Nenhum dado disponível, todas as integrações estão desconectadas" + "internalServerError": "Falha ao buscar resumo do DNS Hole" }, "data": { "adsBlockedToday": "Bloqueado hoje", @@ -1686,32 +2417,24 @@ "dnsQueriesToday": "Consultas hoje", "domainsBeingBlocked": "Domínios na lista de bloqueio" }, - "domainsTooltip": "Devido a múltiplas integrações, o Homarr não pode calcular o número exato de domínios sendo bloqueados" + "domainsTooltip": "Devido a múltiplas integrações, o Homarr não pode calcular o número exato de domínios sendo bloqueados", + "status": { + "enabled": "Habilitado", + "disabled": "Desabilitado", + "unknown": "Desconhecido" + } }, "dnsHoleControls": { "name": "Controles do DNS Hole", "description": "Controle o PiHole ou o AdGuard em seu painel de controle", "option": { - "layout": { - "label": "Layout", - "option": { - "row": { - "label": "Horizontal" - }, - "column": { - "label": "Vertical" - }, - "grid": { - "label": "Grade" - } - } - }, "showToggleAllButtons": { "label": "Exibir botões \"Alternar Todos\"" } }, "error": { - "internalServerError": "Falha ao gerenciar o DNS Hole" + "internalServerError": "Falha ao gerenciar o DNS Hole", + "bulkActionsFailed": "{count, plural, one {# ação falhou} other {# ações falharam}}" }, "controls": { "enableAll": "Habilitar todos", @@ -1722,8 +2445,6 @@ "disabled": "Desativado", "processing": "Processando", "disconnected": "Desconectado", - "hours": "Horas", - "minutes": "Minutos", "unlimited": "Deixe em branco para não limitar" } }, @@ -1735,16 +2456,10 @@ "label": "Exibição personalizada do título/cidade", "description": "Exiba um título personalizado ou o nome da cidade/país na parte superior do relógio." }, - "customTitle": { - "label": "Título" - }, "is24HourFormat": { "label": "Formato de 24 horas", "description": "Use o formato de 24 horas em vez do formato de 12 horas" }, - "showSeconds": { - "label": "Exibir segundos" - }, "useCustomTimezone": { "label": "Usar um fuso horário fixo" }, @@ -1763,29 +2478,295 @@ "label": "Formato de hora personalizado", "description": "Usar ISO 8601 para formatar horas (Isso sobrescreverá outras opções)" }, - "customDateFormat": { - "label": "Formato de data personalizado", - "description": "Usar ISO 8601 para formatar datas (Isso sobrescreverá outras opções)" - }, "showWeather": { "label": "", "description": "" }, - "weatherLocation": { - "label": "" - }, "isWeatherFormatFahrenheit": { "label": "" + }, + "animateWeatherIcon": { + "label": "Animar ícone do clima", + "description": "Animar o ícone do clima. Desativado por padrão e sempre desativado quando movimento reduzido é solicitado." + }, + "colorWeatherByDayNight": { + "label": "Clima colorido por dia/noite", + "description": "Pintar o ícone e temperatura do clima com uma cor do dia ou uma cor noturna, baseado em se é atualmente dia ou noite no local escolhido." + }, + "dayWeatherColor": { + "label": "Cor do dia" + }, + "nightWeatherColor": { + "label": "Cor noturna" + }, + "worldClockCities": { + "label": "Cidades do relógio mundial", + "description": "Adicionar e ordenar até seis cidades para exibição avançada." } + }, + "timezoneList": { + "timezone": "Fuso-horário", + "cityLabel": "Etiqueta da cidade", + "searchPlaceholder": "Pesquisar fusos horários", + "noResults": "Nenhum fuso horário encontrado", + "unsupportedOption": "Não Suportado: {timeZone}", + "add": "Adicionar cidade", + "remove": "Remover {city}", + "reorder": "Reordenar {city}", + "limit": "{count} de {maximum} cidades configuradas" + }, + "worldClock": { + "primary": "Relógio principal", + "local": "Hora local", + "today": "Hoje", + "tomorrow": "Amanhã", + "yesterday": "ontem", + "noSecondaryCities": "Adicione cidades nas opções de widget para compará-las aqui.", + "unsupportedPrimaryTitle": "Fuso horário principal não está disponível", + "unsupportedPrimary": "{timeZone} não é suportado neste navegador. Mostrando UTC como uma fallback claramente marcada.", + "unsupportedTimeZone": "Fuso horário não suportado: {timeZone}", + "accessibleTime": "{city}: {time}, {date}, {timeZone}", + "advancedLabel": "Relógio mundial avançado", + "cities": "Relógios mundiais", + "cityCount": "{count} timezones", + "timeBarLabel": "Posição 24 horas no dia para {city}", + "dayProgress": "{percent}% decorrido · {hours}h {minutes}m restante", + "phaseLegend": "Legenda do dia", + "tick": { + "midnight": "00", + "morning": "06", + "noon": "12", + "evening": "18", + "end": "24" + }, + "phaseRange": { + "night": "00–05 · 21–24", + "dawn": "05–08", + "day": "08–18", + "dusk": "18–21" + }, + "phase": { + "night": "Noite", + "dawn": "Amanhecer", + "day": "dia", + "dusk": "Crepúsculo" + } + } + }, + "airQuality": { + "name": "Qualidade do ar e UV", + "description": "Mostra a qualidade do ar, o índice de ultravioleta, os poluentes e o pólen para um local.", + "option": { + "location": { + "label": "Localização da qualidade do ar" + }, + "aqiStandard": { + "label": "Padrão AQI", + "options": { + "auto": "Automático para a localização", + "european": "IQA Europeu", + "us": "AQI EUA" + } + }, + "showUv": { + "label": "Mostrar índice UV" + }, + "showPollutants": { + "label": "Mostrar concentrações poluentes" + }, + "showPollen": { + "label": "Mostrar concentrações de pólen" + } + }, + "category": { + "good": "Excelente", + "fair": "Razoável", + "moderate": "Moderado", + "unhealthySensitive": "Insalubre para grupos sensíveis", + "unhealthy": "Com problemas", + "poor": "Inferior", + "veryPoor": "Muito pobre", + "veryUnhealthy": "Muito ruim", + "extremelyPoor": "Extremamente pobre", + "hazardous": "Perigoso", + "unknown": "Sem AQI lendo" + }, + "uv": { + "label": "Índice UV", + "category": { + "low": "baixa", + "moderate": "Moderado", + "high": "alta", + "veryHigh": "Muito alto", + "extreme": "Extremo", + "unknown": "Sem leitura" + } + }, + "dominantPollutant": "Dominant pollutant", + "aqiLabel": "IQA", + "strongestPollen": "Maior pólen", + "unit": { + "concentration": "{value} ├g/m3", + "pollen": "Grãos {value} /m3" + }, + "pollutant": { + "pm2_5": "PM2,5", + "pm10": "PM10", + "ozone": "Ozono", + "nitrogenDioxide": "Dióxido de nitrogênio", + "sulphurDioxide": "Sulphur dioxide", + "carbonMonoxide": "Monóxido de carbono" + }, + "pollen": { + "alder": "Alder", + "birch": "Bétula", + "grass": "Grama", + "mugwort": "Mugwort", + "olive": "Verde-oliva", + "ragweed": "Arrogantes" + }, + "compact": { + "sixHourTrend": "Tendência de IQA para as próximas seis horas" + }, + "advanced": { + "observedAt": "Atualizado em {time}", + "next24Hours": "Próximas 24 horas", + "pollutants": "Concentrações de poluentes", + "pollen": "Pollen concentrations", + "sevenDayForecast": "Previsão máxima de 7 dias", + "aqiValue": "AQI {value}", + "uvValue": "UV {value}", + "uvShort": "UV {value}", + "noForecast": "Não há previsão de dados disponíveis" + } + }, + "countdown": { + "name": "Contagem regressiva", + "description": "Rastreia eventos futuros e aniversários recorrentes.", + "option": { + "events": { + "label": "Eventos", + "description": "Adicione e ordene até 20 vezes ou uma contagem regressiva anual. As datas são inseridas no fuso horário selecionado." + }, + "showProgress": { + "label": "Mostrar progresso" + }, + "showSeconds": { + "label": "Mostrar segundos", + "description": "Mantenha os segundos visíveis para todos os próximos eventos." + } + }, + "dateTimeEventList": { + "newEvent": "Novo evento", + "add": "Adicionar evento", + "remove": "Remover {event}", + "reorder": "Reordenar {event}", + "eventLabel": "Etiqueta de evento", + "timezone": "Fuso-horário", + "unsupportedOption": "Não Suportado: {timeZone}", + "recurrence": "Repetir", + "recurrenceOption": { + "none": "Não repetir", + "yearly": "Todos os anos" + }, + "target": "Data e hora do evento", + "trackProgress": "Acompanhar progresso a partir de uma data de início", + "start": "Data e hora de início do progresso", + "confirmDateTime": "Confirmar data e hora", + "limit": "{count} de eventos {maximum} configurados" + }, + "empty": { + "title": "Nenhuma contagem regressiva ainda", + "description": "Adicionar um evento em opções de widget para começar a contar menos." + }, + "completed": "Concluído", + "yearly": "Anualmente", + "progress": "Progresso do evento", + "upcoming": "Próximos", + "completedEvents": "Eventos concluídos", + "invalid": { + "title": "Alguns eventos não podem ser exibidos", + "description": "{count, plural, one {Um evento tem uma data inválida ou um fuso horário incompatível.} other {# eventos têm uma data inválida ou um fuso horário incompatível.}}", + "value": "Unavailable" + }, + "alert": { + "notifications": "Notificações do navegador", + "permissionDenied": "As notificações estão bloqueadas neste navegador.", + "reached": "A contagem regressiva atingiu o seu alvo." + } + }, + "timer": { + "name": "Timer / Pomodoro", + "description": "Executa um simples timer ou uma sequência configurável do Pomodoro.", + "option": { + "mode": { + "label": "Modo", + "options": { + "timer": "Cronômetro", + "pomodoro": "Pomodoro" + } + }, + "timerMinutes": { + "label": "Minutos do temporizador" + }, + "focusMinutes": { + "label": "Atas de foco" + }, + "shortBreakMinutes": { + "label": "Minutos de pausa curtas" + }, + "longBreakMinutes": { + "label": "Pausa longa de minutos" + }, + "sessionsBeforeLongBreak": { + "label": "Focar sessões antes de uma longa pausa" + }, + "autoStartBreaks": { + "label": "Automaticamente iniciar pausas" + }, + "autoStartFocus": { + "label": "Iniciar sessões de foco automaticamente" + } + }, + "phase": { + "timer": "Cronômetro", + "focus": "Focar", + "shortBreak": "Quebra curta", + "longBreak": "Pausa longa" + }, + "action": { + "start": "Iniciar", + "pause": "Suspender", + "reset": "Reset" + }, + "attention": { + "timerComplete": "Timer complete", + "phaseReady": "{phase} pronto" + }, + "progress": "Progresso do cronômetro: {progress}%", + "compact": { + "completedFocus": "{count, plural, =0 {Não há sessões de foco completas} one {# Sessão de foco completada} other {# sessões de foco completadas}}" + }, + "alert": { + "title": "Timer complete", + "completed": "{phase} concluído." + }, + "advanced": { + "sequence": "Pomodoro sequence", + "focusSession": "Focar {session}", + "settings": "Configurações permanentes", + "settingsHint": "Use o menu de contexto do widget para editar estas configurações do quadro.", + "localAlerts": "Alertas locais", + "notifications": "Notificações do navegador", + "sound": "Sons do cronômetro", + "localAlertsHint": "Sons do temporizador estão ativados por padrão. Sons e notificações se aplicam apenas a este widget neste navegador.", + "notificationsDenied": "As notificações estão bloqueadas neste navegador." } }, "minecraftServerStatus": { "name": "Status de servidor Minecraft", "description": "Exibir o status de um servidor Minecraft", "option": { - "title": { - "label": "Título" - }, "domain": { "label": "Endereço do servidor" }, @@ -1805,11 +2786,21 @@ "noStation": "Nenhuma estação selecionada", "option": { "baseUrl": { - "label": "" + "label": "", + "description": "URLs personalizadas devem ser resolvidas para um endereço IP público. Hosts privados e locais são rejeitados." }, "station": { - "label": "Estação" + "label": "Estação", + "placeholder": "Procurar uma estação" } + }, + "error": { + "customSourceUnavailable": "A fonte do calendário não está disponível. Verifique se sua URL resolve com um endereço IP público.", + "stationSearch": "Não foi possível procurar estações. Verifique a URL personalizada e o seu acesso ao fórum." + }, + "warning": { + "stale": "O calendário não pôde ser atualizado. Mostrando as partidas pela última vez em {time}.", + "staleCompact": "Dados obsoletos" } }, "notebook": { @@ -1841,6 +2832,9 @@ "directionRtl": "", "blockquote": "Bloco de Citação", "horizontalLine": "Linha horizontal", + "details": "Alternar seção ocultável", + "expandDetails": "Expandir seção ocultável", + "collapseDetails": "Recolher seção ocultável", "bulletList": "Lista de marcadores", "orderedList": "Lista ordenada", "checkList": "Lista de verificação", @@ -1849,16 +2843,20 @@ "link": "Link", "unlink": "Remover link", "image": "Incorporar imagem", - "addTable": "Adicionar tabela", + "insertTable": "Inserir tabela", + "insertTableSize": "Inserir tabela {columns} × {rows}", "deleteTable": "Excluir tabela", "colorCell": "Cor da Célula", - "mergeCell": "Ativar/desativar mesclagem de células", + "mergeCells": "Mesclar células", + "splitCell": "Dividir célula", "addColumnLeft": "Adicionar coluna antes", "addColumnRight": "Adicionar coluna depois", "deleteColumn": "Excluir coluna", "addRowTop": "Adicionar linha antes", "addRowBelow": "Adicionar linha depois", - "deleteRow": "Excluir linha" + "deleteRow": "Excluir linha", + "toggleHeaderRow": "Alternar linha de cabeçalho", + "toggleHeaderColumn": "Alternar coluna de cabeçalho" }, "align": { "left": "Esquerda", @@ -1869,8 +2867,6 @@ "clearColor": "Limpar cor", "source": "Fonte", "widthPlaceholder": "Valor em % ou pixels", - "columns": "Colunas", - "rows": "Linhas", "width": "Largura", "height": "Altura" }, @@ -1882,7 +2878,9 @@ "discard": "Descartar alterações", "keepEditing": "Continuar editando" } - } + }, + "saveFailed": "Não é possível salvar nota", + "documentStats": "{words, plural, one {# palavra} other {# palavras}} · {characters, plural, one {# caracteres} other {# caracteres}}" }, "anchorNote": { "name": "Nota do Anchor", @@ -1891,9 +2889,6 @@ "noteId": { "label": "Nota" }, - "showTitle": { - "label": "Mostrar título" - }, "showUpdatedAt": { "label": "Exibir última atualização" } @@ -1903,14 +2898,20 @@ "notFound": "Nenhuma nota encontrada", "noNotes": "Nenhuma nota encontrada", "integrationRequired": "Selecione primeiro uma integração do Anchor", - "updatedAt": "Atualizado em {date}", "untitled": "Sem título", - "edit": "Editar", - "save": "Salvar", - "cancel": "Cancelar", "readOnlyViewer": "Você tem acesso de visualização a esta nota. A edição está desativada.", "saveForbidden": "Você não tem permissão para editar essa nota.", - "saveFailed": "Não foi possível salvar a nota. Tente novamente." + "saveFailed": "Não foi possível salvar a nota. Tente novamente.", + "createdAt": "Criado em {date}", + "permission": { + "owner": "Dono", + "editor": "Editores", + "viewer": "Visualizador" + }, + "status": { + "pinned": "Fixado", + "archived": "Arquivado" + } }, "iframe": { "name": "iFrame", @@ -1969,6 +2970,25 @@ "clickable": { "label": "Clicável" } + }, + "state": { + "on": "Ligado", + "off": "Desligado", + "unavailable": "Unavailable", + "unknown": "Desconhecido" + }, + "advanced": { + "entityId": "ID da entidade: {id}", + "lastChanged": "Alterado {date}", + "attribute": { + "unit": "Unidade", + "deviceClass": "Classe do dispositivo", + "icon": "Ícone" + } + }, + "error": { + "loadFailed": "Não foi possível carregar a entidade", + "toggleFailed": "Não foi possível atualizar a entidade" } }, "smartHome-executeAutomation": { @@ -1984,11 +3004,31 @@ }, "spotlightAction": { "run": "Executar {name}" + }, + "advanced": { + "lastExecuted": "Última execução em {time}", + "automationId": "ID de automação: {id}", + "ready": "Pronto para executar", + "noPermission": "Sem permissão para executar essa automação" + }, + "status": { + "running": "Automação em execução", + "success": "Automação concluída" + }, + "error": { + "executeFailed": "Não foi possível executar a automação" } }, "stockPrice": { "name": "Preço das ações", "description": "Exibe o preço atual das ações de uma empresa", + "advanced": { + "currentPrice": "Preço atual", + "previousClose": "Fechamento anterior", + "changePercentage": "Mudança (%)", + "minimum": "Mínimo", + "maximum": "Máxima" + }, "option": { "stock": { "label": "Símbolo da ação" @@ -2059,6 +3099,10 @@ "label": "1 mês" } } + }, + "showDetails": { + "label": "Exibir detalhes", + "description": "Mostre o nome, mudança e intervalo de tempo na visualização compacta. Desligue apenas para o símbolo e o preço." } } }, @@ -2086,6 +3130,13 @@ "showUnmonitored": { "label": "Mostrar não monitorados" } + }, + "advanced": { + "previousMonth": "Mostrar mês anterior", + "nextMonth": "Mostrar o próximo mês", + "eventCount": "{count, plural, one {# evento} other {# eventos}}", + "loading": "Carregando eventos do calendário...", + "noEvents": "Nenhum evento neste mês" } }, "weather": { @@ -2098,16 +3149,18 @@ "disableTemperatureDecimals": { "label": "Desativar decimais de temperatura" }, + "animateIcons": { + "label": "Animar ícones meteorológicos" + }, + "showHumidity": { + "label": "Mostrar umidade" + }, "showCurrentWindSpeed": { - "label": "Exibir velocidade do vento atual", - "description": "Somente no clima atual" + "label": "Exibir velocidade do vento atual" }, "useImperialSpeed": { "label": "Usar unidade mph para velocidade do vento" }, - "location": { - "label": "Localização do tempo" - }, "showCity": { "label": "Exibir cidade" }, @@ -2117,13 +3170,10 @@ "forecastDayCount": { "label": "Quantidade de dias de previsão", "description": "Quando o widget não é largo o suficiente, menos dias serão exibidos" - }, - "dateFormat": { - "label": "Formato de data", - "description": "Como a data deve ser exibida" } }, "currentWindSpeed": "{currentWindSpeed} {unit}", + "disabled": "Dados de clima estão indisponíveis porque as conexões de saída estão desativadas", "dailyForecast": { "sunrise": "Nascer do sol", "sunset": "Pôr do sol", @@ -2146,6 +3196,47 @@ "thunderstorm": "Tempestade", "thunderstormWithHail": "Tempestade com granizo", "unknown": "Desconhecido" + }, + "details": "Mostrar detalhes do tempo", + "detailsFor": "Mostrar detalhes do tempo para {date}", + "advanced": { + "forecast": "Previsão de 7 dias", + "hourlyForecast": "Próximas 24 horas", + "day": "dia", + "time": "Horário", + "conditions": "condições", + "temperature": "Temperatura", + "feelsLike": "Sensação de {temperature}", + "feelsLikeLabel": "Sensação de", + "feelsLikeRange": "Sente-se como: {maximum} / {minimum}", + "highLow": "{maximum} Alto · Baixa {minimum}", + "observedAt": "Atualizado em {time}", + "humidity": "Umidade", + "averageHumidity": "Umidade média: {humidity}%", + "currentHumidity": "Umidade atual", + "wind": "Vento / rajadas ({unit})", + "currentWind": "Vento atual / Visitas", + "windValue": "{speed} / {gusts} {unit}", + "windDetail": "Vento máximo / convidados: {speed} / {gusts} {unit}", + "nextHourPrecipitation": "Precipitação na próxima hora", + "precipitationChance": "Chance de precipitação", + "precipitationValue": "{probability}% · {amount} mm", + "precipitationDetail": "Precipitação: {probability}% · {amount} mm", + "todayUv": "Índice máximo UV de hoje", + "uvIndex": "Máximo índice UV: {value}", + "daylight": "Luz Diária: {duration}", + "hourlyTooltip": "Sente-se como {feelsLike}{temperatureUnit} · {amount} mm · {humidity}% de humidade · {speed} {speedUnit} wind", + "hourlyTooltipWithoutHumidity": "Sente-se como {feelsLike}{temperatureUnit} · {amount} mm · {speed} {speedUnit} wind", + "detailLabel": { + "feelsLike": "Sensação de", + "precipitation": "Precipitação", + "humidity": "Umidade média", + "wind": "Vento máximo / convidados", + "uv": "Índice máximo de UV", + "daylight": "Daylight" + }, + "sun": "Amanhecer / entardecer", + "noForecast": "Não há previsão de dados disponíveis" } }, "indexerManager": { @@ -2158,8 +3249,15 @@ }, "title": "Gerenciador de indexadores", "testAll": "Testar todos", + "status": { + "healthy": "Saudável", + "unhealthy": "Com problemas", + "disabled": "Desabilitado", + "unknown": "Vida indisponível" + }, "error": { - "internalServerError": "Falha ao buscar status dos indexadores" + "internalServerError": "Falha ao buscar status dos indexadores", + "testAll": "O teste do indexador falhou. Tente novamente." } }, "healthMonitoring": { @@ -2188,11 +3286,6 @@ "fileSystem": { "label": "Mostrar informações do sistema de arquivos" }, - "visibleStorageVolumes": { - "label": "", - "description": "", - "placeholder": "" - }, "defaultTab": { "label": "Aba padrão" }, @@ -2215,17 +3308,27 @@ "minutes": "{count} minutos", "used": "Usado", "available": "Disponível", - "lastSeen": "Última atualização de status: {lastSeen}" + "lastSeen": "Última atualização de status: {lastSeen}", + "updatesAvailable": "{count, plural, one {# atualização disponível} other {# atualizações disponíveis}}", + "rebootRequired": "Reinicialização necessária", + "rebootNotRequired": "Não é necessário reiniciar" + }, + "smartStatus": { + "attributesWithinThresholds": "SMART: atributos dentro dos limites", + "attributesFailed": "SMART: {attributes} falhou", + "noCriticalWarning": "SMART: nenhum aviso reportado pelo SSD", + "criticalWarning": "SMART: aviso relatado pelo SSD" + }, + "gauge": { + "cpuUsage": "Uso da CPU", + "cpuTemperature": "Temperatura da CPU", + "memoryUsage": "Uso da Memória", + "gpuUsage": "{name} uso da GPU" }, - "memory": {}, "error": { "internalServerError": "Falha ao buscar status de saúde" }, "cluster": { - "summary": { - "cpu": "CPU", - "memory": "RAM" - }, "resource": { "node": { "name": "Nós" @@ -2261,8 +3364,6 @@ "table": { "header": { "name": "Nome", - "cpu": "CPU", - "memory": "RAM", "node": "Nó" } } @@ -2272,33 +3373,29 @@ "name": "Estatísticas do Docker", "description": "Estatísticas dos seus contêineres (Esse widget só pode ser adicionado com privilégios de administrador)", "option": { - "columns": { - "label": "" + "endpointIds": { + "label": "Ambientes Docker", + "description": "Deixe vazio para mostrar contêineres de cada ambiente Docker", + "placeholder": "Todos os ambientes Docker" }, - "enableRowSorting": { - "label": "Ativar ordenação de itens" + "containerFilter": { + "label": "Contêineres para filtrar" + }, + "filterIsWhitelist": { + "label": "Filtrar como lista de permissões" }, "defaultSort": { - "label": "Coluna usada para ordenação por padrão", "option": { "name": "Nome", "state": "Estado", "cpuUsage": "Uso da CPU", "memoryUsage": "Uso da Memória" } - }, - "descendingDefaultSort": { - "label": "Inverter ordenação" - }, - "columnOrder": { - "label": "" - }, - "columnWidths": { - "label": "" } }, "error": { "internalServerError": "Erro ao obter as estatísticas dos contêineres", + "endpointsUnavailable": "Os endpoints do Docker estão indisponíveis", "layoutSaveTitle": "", "layoutSaveMessage": "" }, @@ -2307,7 +3404,6 @@ } }, "coolify": { - "name": "Coolify", "description": "Visão geral da sua instância Coolify com servidores e aplicativos", "option": { "showServers": { @@ -2333,17 +3429,49 @@ "internalServerError": "Falha ao buscar dados do Coolify" }, "server": { - "buildServer": "Build" + "buildServer": "Build", + "resourceCounts": "{applications, plural, one {# aplicativo} other {# aplicativos}} / {services, plural, one {# serviço} other {# serviços}}", + "reachability": "Alcançabilidade", + "usability": "usabilidade" + }, + "source": { + "url": "Fonte: {url}", + "unavailable": "{source}: unavailable" }, "instances": { "title": "Instâncias" + }, + "action": { + "openResource": "Abrir {name}", + "openLogs": "Abrir logs do {name}", + "showIp": "Mostrar endereço IP", + "hideIp": "Ocultar endereço IP" + }, + "status": { + "running": "Em execução", + "stopped": "Parado", + "exited": "Finalizado", + "starting": "Iniciando", + "restarting": "Recomeço", + "unknown": "Desconhecido", + "online": "Online", + "offline": "Offline", + "reachable": "Alcançável", + "unreachable": "Inacessível", + "usable": "usável", + "unusable": "Inutilizável" } }, "vpn": { "name": "VPN", "description": "Visão geral das suas conexões VPN", "serviceUnavailable": "VPN indisponível", - "option": {} + "status": { + "running": "Em execução", + "notRunning": "Não em execução", + "unavailable": "Unavailable", + "vpn": "VPN: {status}" + } }, "ups": { "name": "UPS", @@ -2370,14 +3498,19 @@ "runtime": "Tempo de execução", "load": "Carga", "input": "Entrada", - "output": "Saída" + "output": "Saída", + "batteryVoltage": "Tensão da bateria", + "power": "Liga/Desliga", + "temperature": "Temperatura", + "manufacturer": "Fabricante", + "model": "Modelo", + "serial": "Série" }, "error": { "internalServerError": "Falha ao buscar dados do UPS" } }, "tracearr": { - "name": "Tracearr", "description": "Monitoramento avançado de servidor de mídia com dados detalhados de transmissão e transcodificação", "option": { "showStreams": { @@ -2465,10 +3598,7 @@ "label": "Evento", "description": "Exibir total de ocorrências de um evento específico", "placeholder": "Selecionar um evento", - "loading": "Carregando eventos...", - "noEvents": "Nenhum evento encontrado", - "none": "Nenhum evento", - "configureWebsiteFirst": "Selecione um site primeiro para carregar os eventos" + "none": "Nenhum evento" }, "chartType": { "label": "Tipo de gráfico", @@ -2499,26 +3629,21 @@ "eventNames": { "label": "Eventos", "description": "Selecione um ou mais eventos para o gráfico", - "placeholder": "Selecionar eventos...", - "loading": "Carregando eventos...", - "noEvents": "Nenhum evento encontrado", - "configureWebsiteFirst": "Selecione um site primeiro para carregar os eventos" + "placeholder": "Selecionar eventos..." }, "topCount": { "label": "Itens para exibir", "description": "Número de itens principais para exibir (máx 500)" + }, + "events": { + "loading": "Carregando eventos...", + "noEvents": "Nenhum evento encontrado", + "configureWebsiteFirst": "Selecione um site primeiro para carregar os eventos" } }, "event": { - "occurrences": "Eventos", "label": "Eventos" }, - "topPages": { - "direct": "Direto" - }, - "topReferrers": { - "direct": "Direto" - }, "events": { "selectPrompt": "Selecionar eventos para o gráfico" }, @@ -2527,6 +3652,9 @@ "noWebsite": "Nenhum site configurado", "noData": "Nenhum dado disponível", "internalServerError": "Falha ao buscar dados do Umami" + }, + "top": { + "direct": "Direto" } }, "common": { @@ -2554,7 +3682,8 @@ }, "integration": { "noData": "Nenhuma integração encontrada", - "description": "Clique para criar uma nova integração" + "description": "Clique para criar uma nova integração", + "manage": "Gerenciar integrações" }, "app": { "noData": "Nenhum aplicativo encontrado", @@ -2565,7 +3694,61 @@ "noIntegration": "Nenhuma integração selecionada", "noData": "Nenhum dado de integração disponível" }, - "option": {} + "integrationDisconnected": "Nenhum dado disponível, todas as integrações estão desconectadas", + "updatedAt": "Atualizado em {date}", + "title": { + "label": "Título" + }, + "openInNewTab": { + "label": "Abrir em nova guia" + }, + "showTitle": { + "label": "Mostrar título" + }, + "weatherLocation": { + "label": "Localização do tempo" + }, + "layout": { + "label": "Layout", + "option": { + "horizontal": "Horizontal", + "vertical": "Vertical", + "grid": "Grade" + } + }, + "select": { + "loading": "Carregando...", + "loadError": "Falha ao carregar opções" + }, + "dateFormat": { + "label": "Formato de data", + "description": "Como a data deve ser exibida" + }, + "visibleStorageVolumes": { + "label": "Volume de armazenamento visível", + "description": "Disponível apenas quando cada integração selecionada é OpenMediaVault ou Synology. Deixe em branco para mostrar todos os volumes de armazenamento detectados.", + "placeholder": "Selecionar volumes de armazenamento" + }, + "tableOptions": { + "columns": { + "label": "Colunas para exibir" + }, + "columnOrder": { + "label": "Ordem das colunas" + }, + "columnWidths": { + "label": "Largura da coluna" + }, + "enableRowSorting": { + "label": "Habilitar ordenação de itens" + }, + "defaultSort": { + "label": "Coluna usada para ordenação por padrão" + }, + "invertSorting": { + "label": "Inverter ordenação" + } + } }, "video": { "name": "Transmissão de vídeo", @@ -2624,6 +3807,7 @@ "transcoding": "", "paused": "", "remaining": "", + "seasonEpisode": "T{season} E{episode}", "metadata": { "title": "Estatísticas para nerds", "video": { @@ -2641,11 +3825,16 @@ "resolution": "Resolução", "target": "Codec de destino" } - } + }, + "unknownUser": "Usuário desconhecido" + }, + "summary": { + "sessions": "{count, plural, one {# Sessão} other {# sessões}}", + "playing": "{count} em reprodução", + "transcoding": "Transcodificação {count}" } }, "paperlessNgx": { - "name": "Paperless-ngx", "description": "Visão geral do seu arquivo de documentos Paperless-ngx", "documentsTotal": "Total de documentos", "documentsInbox": "Caixa de entrada", @@ -2689,6 +3878,192 @@ "internalServerError": "Falha ao buscar dados do Paperless-ngx" } }, + "patchmon": { + "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": "" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "" + }, + "securityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "securityUpdatesWarningAt": { + "label": "" + }, + "securityUpdatesCriticalAt": { + "label": "" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "" + }, + "upToDateHostsThresholdMode": { + "label": "", + "description": "" + }, + "upToDateHostsWarningAt": { + "label": "", + "description": "" + }, + "upToDateHostsCriticalAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesWarningAt": { + "label": "" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "" + }, + "showOsDistribution": { + "label": "", + "description": "" + }, + "osDistributionLimit": { + "label": "", + "description": "", + "option": { + "3": "", + "5": "", + "10": "", + "all": "" + } + }, + "showOsVersion": { + "label": "", + "description": "" + }, + "showComplianceHero": { + "label": "", + "description": "" + }, + "osDisplayMode": { + "label": "", + "description": "", + "option": { + "bars": "", + "donut": "" + } + }, + "threshold": { + "warningAt": { + "description": "Digite amarelo quando o valor atingir este limite" + }, + "criticalAt": { + "description": "Digite vermelho quando o valor atingir este limite" + } + } + }, + "error": { + "internalServerError": "" + } + }, + "bazarr": { + "description": "", + "episodes": "", + "movies": "", + "providers": "", + "status": "", + "announcements": "Avisos", + "option": { + "showMissingEpisodes": { + "label": "", + "description": "" + }, + "showMissingMovies": { + "label": "", + "description": "" + }, + "showProviderIssues": { + "label": "", + "description": "" + }, + "showHealthIssues": { + "label": "", + "description": "" + } + }, + "error": { + "internalServerError": "" + } + }, "immich-serverStats": { "name": "Estatísticas do Servidor Immich", "description": "Informações sobre sua instância do Immich", @@ -2713,7 +4088,8 @@ "users": "Usuários", "photos": "Fotos", "videos": "Vídeos", - "storage": "Armazenamento Utilizado" + "storage": "Armazenamento Utilizado", + "albumLimit": "Álbuns maiores (até {count} mostrados)" }, "immich-albumCarousel": { "name": "Álbum do Immich", @@ -2737,24 +4113,21 @@ } }, "description": "Apresentação de imagens em seu álbum Imich", - "noPhotos": "Nenhuma foto neste álbum" + "noPhotos": "Nenhuma foto neste álbum", + "albumPhoto": "Foto do álbum", + "actions": { + "previousPhoto": "Foto anterior", + "nextPhoto": "Próxima foto", + "pauseSlideshow": "Pause slideshow", + "resumeSlideshow": "Retomar slideshow", + "toggleSlideshow": "Pausar ou retomar a apresentação", + "photo": "Foto {number}" + } }, "downloads": { "name": "Cliente de Download", "description": "Permite visualizar e gerenciar seus Downloads de clientes Torrent e Usenet.", "option": { - "columns": { - "label": "Colunas para exibir" - }, - "enableRowSorting": { - "label": "Habilitar ordenação de itens" - }, - "defaultSort": { - "label": "Coluna usada para ordenação por padrão" - }, - "descendingDefaultSort": { - "label": "Inverter ordenação" - }, "showCompletedUsenet": { "label": "Exibir entradas usenet marcadas como concluídas" }, @@ -2779,12 +4152,6 @@ "limitPerIntegration": { "label": "Limitar itens por integração", "description": "Isso limitará o número de itens exibidos por integração, não globalmente" - }, - "columnOrder": { - "label": "" - }, - "columnWidths": { - "label": "" } }, "errors": { @@ -2816,7 +4183,7 @@ }, "id": { "columnTitle": "Id", - "detailsTitle": "" + "detailsTitle": "Id" }, "integration": { "columnTitle": "Integração" @@ -2945,6 +4312,10 @@ "mediaRequests-requestList": { "name": "Lista de Solicitações de Mídia", "description": "Veja uma lista de todas as solicitações de mídia da sua instância do Overseerr ou Jellyseerr", + "empty": { + "title": "Nenhuma solicitação de mídia ainda", + "description": "Procurar um filme ou mostrar para começar uma solicitação." + }, "option": { "linksTargetNewTab": { "label": "Abrir links em uma nova guia" @@ -2978,12 +4349,16 @@ "failed": "Falhou", "completed": "Concluído" }, + "unknown": "Desconhecido", "toBeDetermined": "TBD" }, "mediaRequests-requestStats": { "name": "Estatísticas de Solicitações de Mídia", "description": "Estatísticas sobre suas solicitações de mídia", - "option": {}, + "empty": { + "title": "Nenhuma atividade requisitada ainda", + "description": "Estatísticas aparecerão após a primeira solicitação de mídia." + }, "titles": { "stats": { "main": "Estatísticas de mídia", @@ -2993,8 +4368,7 @@ "declined": "Já recusado", "available": "Já disponível", "tv": "Solicitações de TV", - "movie": "Solicitações de filmes", - "total": "Total" + "movie": "Solicitações de filmes" }, "users": { "main": "Principais usuários", @@ -3020,7 +4394,6 @@ }, "currentIndex": "{start}-{end} de {total}", "healthCheck": { - "title": "Verificação de saúde", "queued": "Em fila", "status": { "healthy": "Saudável", @@ -3029,38 +4402,63 @@ }, "panel": { "statistics": { - "empty": "Vazio", - "transcodes": "Transcodificações", - "transcodesCount": "Transcodificações", - "healthChecksCount": "Verificações de saúde", "filesCount": "Arquivos", "savedSpace": "Espaço economizado", - "healthChecks": "Verificações de saúde", "videoCodecs": "Codificadores", "videoContainers": "Contêineres", "videoResolutions": "Resoluções" }, "workers": { - "empty": "Vazio", "table": { - "file": "Ficheiro", "eta": "TED", - "progress": "Progresso", - "transcode": "Transcodificar", - "healthCheck": "Verificação de saúde" + "progress": "Progresso" } }, "queue": { - "empty": "Vazio", "table": { - "file": "Ficheiro", - "size": "Tamanho", - "transcode": "Transcodificar", - "healthCheck": "Verificação de saúde" + "size": "Tamanho" } + }, + "common": { + "empty": "Vazio", + "file": "Ficheiro", + "healthCheck": "Verificação de saúde", + "transcode": "Transcodificação", + "transcodes": "Transcodificações", + "healthChecks": "Verificações de saúde" } } }, + "mediaMissing": { + "name": "", + "description": "Mostrar filmes, episódios e livros ausentes do {radarr}, {sonarr} e {bindery}", + "option": { + "showMissing": { + "label": "" + }, + "showQueued": { + "label": "" + }, + "pageSize": { + "label": "" + } + }, + "tab": { + "missing": "", + "queued": "" + }, + "type": { + "movie": "", + "episode": "", + "book": "Reservar" + }, + "empty": { + "missing": "", + "queued": "", + "noTabsEnabled": "" + }, + "timeLeft": "" + }, "rssFeed": { "name": "Feeds RSS", "description": "Monitora e exibe um ou mais feeds RSS, ATOM ou JSON genéricos", @@ -3083,6 +4481,13 @@ "showPosterImage": { "label": "Exibir pôster" } + }, + "error": { + "allFeedsFailed": "Não foi possível carregar feeds RSS. Verifique as URLs do feed e tente novamente." + }, + "warning": { + "partial": "{count, plural, one {# Feed RSS não pôde ser carregado} other {# Feeds RSS não puderam ser carregados}}", + "stale": "Feeds RSS não puderam ser atualizados. Mostrando entradas carregadas anteriormente." } }, "releases": { @@ -3158,17 +4563,8 @@ "label": "Expressão regular (RegEx)" } }, - "edit": { - "label": "Editar" - }, "editForm": { - "title": "Editar repositório", - "cancel": { - "label": "Cancelar" - }, - "confirm": { - "label": "Confirmar" - } + "title": "Editar repositório" }, "importForm": { "title": "Importar do Docker" @@ -3185,8 +4581,7 @@ "label": "", "token": "", "configured": "", - "notConfigured": "", - "save": "" + "notConfigured": "" } } }, @@ -3213,17 +4608,32 @@ "noProviderResponse": "Nenhuma resposta do provedor", "unexpected": "" } - } + }, + "expandDetails": "Exibir detalhes do {name}", + "collapseDetails": "Ocultar detalhes de {name}" }, "networkControllerSummary": { - "option": {}, - "card": { - "vpn": { - "countConnected": "{count} conectados" + "advanced": { + "updated": "Atualizado", + "metric": { + "latency": "Latência", + "ping": "Ping", + "uptime": "Tempo de atividade", + "users": "Usuários", + "guests": "Convidados" } }, + "card": { + "vpn": { + "countConnected": "{count, plural, one {# conectado} other {# conectado}}", + "label": "VPN" + }, + "wan": "WAN", + "web": "Web", + "wifi": "Wi-Fi", + "lan": "LAN" + }, "error": { - "integrationsDisconnected": "Nenhum dado disponível, todas as integrações estão desconectadas", "unknownContentOption": "Opção de conteúdo desconhecida para o widget de resumo do controlador de rede: " }, "name": "Resumo do Controlador de Rede", @@ -3260,7 +4670,6 @@ } }, "error": { - "integrationsDisconnected": "Nenhum dado disponível, todas as integrações estão desconectadas", "unknownContentOption": "Opção de conteúdo desconhecida para o widget de status de rede: " }, "name": "Status da Rede", @@ -3290,7 +4699,6 @@ "versiontitle": "Versões", "cputitle": "Uso da CPU", "memorytitle": "Uso da Memória", - "cpu": "CPU", "memory": "Memória", "interfaces": { "name": "nome", @@ -3298,6 +4706,16 @@ "recv": "Recebido", "title": "Interfaces de rede" } + }, + "empty": { + "noInterfaces": "Ainda não há dados de interface de rede" + }, + "versionUnknown": "Versão desconhecida", + "metricAccessible": "{metric}: {value}%, {status}", + "status": { + "normal": "normal", + "warning": "ATENÇÃO", + "critical": "Crítica" } }, "notifications": { @@ -3307,8 +4725,21 @@ "option": { "hideLogos": { "label": "" + }, + "messageFormat": { + "label": "Formato da mensagem", + "option": { + "auto": "Automático", + "plain": "Texto sem formatação", + "markdown": "Markdown", + "html": "HTML" + } } - } + }, + "openService": "Abrir serviço de notificação", + "deleteNotification": "Excluir notificação do Gotify", + "deleteFailed": "Não foi possível excluir a notificação", + "deleteFailedMessage": "A notificação não pode ser excluída. Por favor, tente novamente." }, "speedtestTracker": { "name": "Speedtest Tracker", @@ -3350,7 +4781,6 @@ } }, "uptimeKuma": { - "name": "Uptime Kuma", "description": "Monitore estatísticas de tempo de atividade da sua página de status do Uptime Kuma", "option": { "showAverageUptime": { @@ -3387,8 +4817,58 @@ }, "error": { "internalServerError": "Falha ao buscar dados de tempo de atividade" + }, + "status": { + "up": "Total enviado", + "down": "Velocidade de Transferência", + "paused": "Pausado" } }, + "traefik": { + "description": "", + "option": { + "showTcp": { + "label": "" + }, + "showUdp": { + "label": "" + }, + "showEntryPoints": { + "label": "" + } + }, + "instances": "", + "versionUnknown": "", + "summary": { + "routers": "", + "entryPoints": "" + }, + "resource": { + "routers": "", + "middlewares": "" + }, + "status": { + "healthy": "", + "errors": "", + "warnings": "" + }, + "error": { + "internalServerError": "" + }, + "resourceType": { + "router": "Roteador", + "service": "Serviço", + "middleware": "Mediador" + }, + "resourceStatus": { + "enabled": "Habilitado", + "disabled": "Desabilitado", + "warning": "ATENÇÃO", + "error": "Erro", + "unknown": "Desconhecido" + }, + "failedEndpoint": "Falhou: {endpoint}" + }, "audioStats": { "name": "Estatísticas de áudio", "description": "Estatísticas de biblioteca e reprodução do Navidrome ou Audiobookshelf", @@ -3453,9 +4933,7 @@ "label": "Gráficos visíveis", "description": "Selecione os gráficos que você deseja que estejam visíveis.", "option": { - "cpu": "CPU", "memory": "Memória", - "gpu": "GPU", "network": "Rede" } }, @@ -3470,12 +4948,11 @@ } }, "card": { - "cpu": "CPU", "memory": "MEM", - "gpu": "GPU", "network": "REDE", "up": "ENVIO", - "down": "RECEBIDO" + "down": "RECEBIDO", + "memoryTooltip": "{used} / {available} ({percent}%)" } }, "systemDisks": { @@ -3501,151 +4978,88 @@ }, "showBackgroundBar": { "label": "Exibir barra de uso em segundo plano" - }, - "visibleStorageVolumes": { - "label": "", - "description": "", - "placeholder": "" } }, "status": { - "unhealthy": "Não saudável" + "unhealthy": "Não saudável", + "smart": "INTELIGENTE", + "free": "{percentage}% grátis" + } + }, + "customApi": { + "name": "Widget personalizado", + "description": "Renderizar uma definição JSX personalizada configurada.", + "customJsx": { + "noTemplate": "Nenhum modelo JSX está configurado.", + "templateWarnings": "Alertas de modelos {count}", + "requestIdRequired": "Este controle de rede requer uma ID de solicitação chamada.", + "unsavedPreview": "Execute o teste de solicitação inicial no editor antes de testar solicitações nomeadas.", + "invalidParams": "Os parâmetros solicitados são inválidos.", + "loading": "Carregando solicitação...", + "loadRequest": "Pedido de carga", + "requestFailed": "A solicitação falhou.", + "retry": "Repetir a requisição", + "actionCompleted": "Ação concluída com sucesso.", + "actionSimulated": "Ação simulada; nenhum pedido foi enviado.", + "actionsDisabledEditMode": "Ações estão desativadas enquanto o board estiver no modo de edição.", + "widgetItemUnavailable": "Este item de widget não está disponível.", + "toggle": "Alternador", + "copied": "Copiado", + "confirmDelete": "Confirme esta ação destrutiva." + }, + "option": { + "definitionId": { + "label": "Widget personalizado" + }, + "refreshInterval": { + "label": "Intervalo de atualização", + "description": "Com que frequência reobter dados da API (em segundos)" + } + }, + "noDefinition": "Nenhuma definição selecionada", + "definitionNotFound": "Widget personalizado indisponível", + "migrationRequired": "Este widget personalizado legado é preservado, mas deve ser migrado para JSX personalizado v2 de Gerenciar widgets personalizados antes de ser executado.", + "manageMigration": "Abrir Gerenciar Widgets Personalizados", + "contactAdmin": "Entre em contato com um administrador.", + "configurationNeedsRepair": "As opções deste widget mudaram. Edite o widget para reparar sua configuração.", + "removeFromBoard": "Remover do board", + "editModePending": "Salve a placa para carregar este widget.", + "picker": { + "group": "Widgets JSX personalizados", + "empty": "Nenhum widget personalizado encontrado", + "preview": "Pré-visualizar", + "sources": "{count, plural, one {# source} other {# sources}}", + "requests": "{count, plural, one {# pedido} other {# Solicitações}}", + "migrationRequired": "Migração necessária", + "migrationDescription": "Este widget colocado v1 não pode ser executado ainda. Copie seu prompt redact para uma LLM e, em seguida, cole a única resposta JSON no Homarr.", + "manageMigration": "Abrir Gerenciar Widgets Personalizados", + "contactAdmin": "Entre em contato com um administrador." + }, + "configuration": { + "needsAttention": "Configuração precisa de atenção: {message}", + "advancedOptions": "Opções avançadas", + "invalidJson": "JSON inválido" } }, "beszelSystemTable": { "name": "Sistemas Beszel (Tabela)", "description": "Visualização em tabela de todos os sistemas monitorados pelo Beszel com colunas classificáveis e indicadores de status", "option": { - "statusFilter": { - "label": "Filtro de status" - }, "sortBy": { "label": "Ordenar por" }, "sortDirection": { "label": "Direção da ordenação" - }, - "showCpu": { - "label": "Mostrar CPU" - }, - "showMemory": { - "label": "Mostrar memória" - }, - "showDisk": { - "label": "Mostrar disco" - }, - "showGpu": { - "label": "Mostrar GPU" - }, - "showLoadAvg": { - "label": "Mostrar carga média" - }, - "showNet": { - "label": "Mostrar rede" - }, - "showTemp": { - "label": "Mostrar temperatura" - }, - "showBattery": { - "label": "Mostrar bateria" - }, - "showServices": { - "label": "Mostrar serviços" - }, - "showUptime": { - "label": "Mostrar tempo de atividade" - }, - "showAgent": { - "label": "Mostrar versão do agente" - }, - "columnOrder": { - "label": "" - }, - "columnWidths": { - "label": "" } }, - "noRecords": "Nenhum sistema encontrado", "error": { - "internalServerError": "Não foi possível conectar ao Beszel. Verifique as configurações de integração.", "layoutSaveTitle": "", "layoutSaveMessage": "" - }, - "column": { - "system": "Sistema", - "cpu": "CPU", - "memory": "Memória", - "disk": "Disco", - "gpu": "GPU", - "loadAvg": "Carga média", - "net": "Rede", - "temp": "Temperatura", - "battery": "Bateria", - "services": "Serviços", - "uptime": "Tempo de atividade", - "agent": "Agente" } }, "beszelSystemGrid": { "name": "Sistemas Beszel (Grade)", - "description": "Visualização em grade de cartões de todos os sistemas monitorados pelo Beszel com métricas em tempo real", - "option": { - "statusFilter": { - "label": "Filtro de status" - }, - "showCpu": { - "label": "Mostrar CPU" - }, - "showMemory": { - "label": "Mostrar memória" - }, - "showDisk": { - "label": "Mostrar disco" - }, - "showGpu": { - "label": "Mostrar GPU" - }, - "showLoadAvg": { - "label": "Mostrar carga média" - }, - "showNet": { - "label": "Mostrar rede" - }, - "showTemp": { - "label": "Mostrar temperatura" - }, - "showBattery": { - "label": "Mostrar bateria" - }, - "showServices": { - "label": "Mostrar serviços" - }, - "showUptime": { - "label": "Mostrar tempo de atividade" - }, - "showAgent": { - "label": "Mostrar versão do agente" - } - }, - "error": { - "internalServerError": "Não foi possível conectar ao Beszel. Verifique as configurações de integração." - }, - "empty": { - "noSystems": "Nenhum sistema encontrado" - }, - "metric": { - "cpu": "CPU", - "memory": "Memória", - "disk": "Disco", - "gpu": "GPU", - "loadAvg": "Carga média", - "net": "Rede", - "temp": "Temperatura", - "battery": "Bateria", - "services": "Serviços", - "uptime": "Tempo de atividade", - "agent": "Agente" - } + "description": "Visualização em grade de cartões de todos os sistemas monitorados pelo Beszel com métricas em tempo real" }, "beszelAlerts": { "name": "Alertas Beszel", @@ -3659,11 +5073,12 @@ } }, "empty": "Nenhum alerta configurado", - "error": { - "internalServerError": "Não foi possível conectar ao Beszel. Verifique as configurações de integração." - }, "history": "Histórico", "resolved": "Resolvido", + "alertDescription": { + "statusDuration": "{minutes} min abaixo", + "threshold": "Excede {value} em {minutes} min" + }, "status": { "triggered": "Acionado", "ok": "OK" @@ -3710,16 +5125,16 @@ "noSystems": "Nenhum sistema encontrado" }, "error": { - "internalServerError": "Não foi possível conectar ao Beszel. Verifique as configurações de integração.", "liveConnectionFailed": "Falha na conexão ao vivo. Sua instância Beszel pode não oferecer suporte a streaming em tempo real.", "switchToHistorical": "Mudar para visualização histórica", - "systemNotFound": "Sistema selecionado não encontrado. Escolha um sistema diferente." + "systemNotFound": "Sistema selecionado não encontrado. Escolha um sistema diferente.", + "selectionSaveTitle": "Não é possível salvar a seleção", + "selectionSaveMessage": "Sua seleção de sistema ou período de tempo não pôde ser salva. Por favor, tente novamente." }, "chart": { "cpu": { "title": "Uso da CPU", - "subtitle": "Utilização média da CPU em todo o sistema", - "series": "CPU" + "subtitle": "Utilização média da CPU em todo o sistema" }, "memory": { "title": "Uso da memória", @@ -3761,289 +5176,550 @@ "title": "E/S de rede do Docker", "subtitle": "Tráfego de rede dos contêineres Docker" } + }, + "period": { + "live": "Publicado", + "oneHour": "1h", + "twelveHours": "12h", + "oneDay": "24h", + "oneWeek": "1sem", + "thirtyDays": "30d" } }, - "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": "" - } - } + "assistant": { + "name": "Assistente", + "description": "Tenha uma conversa completa de assistente diretamente no seu quadro.", + "unavailable": { + "title": "Assistente indisponível", + "description": "Entre e peça a um administrador para configurar o Assistente a partir do painel de gerenciamento." }, + "compact": { + "title": "Assistente", + "description": "Redimensionar este widget para conversar aqui, ou abrir uma conversa completa.", + "open": "Abrir assistente", + "openTitle": "Assistente abre no painel lateral", + "openDescription": "A conversa permanece em uma superfície ativa.", + "returnToWidget": "Retornar a conversa para este widget", + "otherWidgetTitle": "Assistente ativo em outro widget", + "otherWidgetDescription": "Apenas uma superfície de conversa permanece ativa de cada vez.", + "useHere": "Use o assistente neste widget" + } + }, + "beszel": { "error": { - "internalServerError": "" - } - }, - "bazarr": { - "name": "", - "description": "", - "episodes": "", - "movies": "", - "providers": "", - "status": "", - "option": { - "showMissingEpisodes": { - "label": "", - "description": "" - }, - "showMissingMovies": { - "label": "", - "description": "" - }, - "showProviderIssues": { - "label": "", - "description": "" - }, - "showHealthIssues": { - "label": "", - "description": "" - } - }, - "error": { - "internalServerError": "" - } - }, - "mediaMissing": { - "name": "", - "description": "", - "option": { - "showMissing": { - "label": "" - }, - "showQueued": { - "label": "" - }, - "pageSize": { - "label": "" - } - }, - "tab": { - "missing": "", - "queued": "" - }, - "type": { - "movie": "", - "episode": "" + "internalServerError": "Não foi possível conectar ao Beszel. Verifique suas configurações de integração." }, "empty": { - "missing": "", - "queued": "", - "noTabsEnabled": "" + "noSystems": "Nenhum sistema encontrado" }, - "timeLeft": "" - }, - "traefik": { - "name": "", - "description": "", - "option": { - "showTcp": { - "label": "" + "options": { + "statusFilter": { + "label": "Filtro de Status" }, - "showUdp": { - "label": "" + "showCpu": { + "label": "Mostrar CPU" }, - "showEntryPoints": { - "label": "" + "showMemory": { + "label": "Mostrar memória" + }, + "showDisk": { + "label": "Mostrar disco" + }, + "showGpu": { + "label": "Mostrar GPU" + }, + "showLoadAvg": { + "label": "Mostrar média de carga" + }, + "showNet": { + "label": "Mostrar rede" + }, + "showTemp": { + "label": "Mostrar temperatura" + }, + "showBattery": { + "label": "Exibir bateria" + }, + "showServices": { + "label": "Exibir serviços" + }, + "showUptime": { + "label": "Mostrar uptime" + }, + "showAgent": { + "label": "Mostrar versão do agente" } }, - "instances": "", - "versionUnknown": "", - "summary": { - "routers": "", - "entryPoints": "" - }, - "resource": { - "routers": "", - "services": "", - "middlewares": "" - }, - "status": { - "healthy": "", - "errors": "", - "warnings": "" - }, - "error": { - "internalServerError": "" + "metric": { + "system": "Sistema", + "source": "Integração", + "hostname": "Hostname", + "cpuModel": "Modelo da CPU", + "cores": "Núcleos", + "memoryTotal": "Total de memória", + "memory": "Memória", + "disk": "Disco", + "loadAvg": "Carga Média", + "net": "Líquido", + "temp": "Temperatura", + "battery": "Morcego", + "uptime": "Tempo de atividade", + "agent": "Representante" } }, - "wud": { - "name": "O Docker", - "description": "Mostrar quantos contêineres assistidos possuem atualizações disponíveis.", - "title": "O Docker", - "monitored": "Monitorado", - "updatesAvailable": "{count, plural, one {# atualização disponível} other {# atualizações disponíveis}}", - "updateAvailable": "Atualização disponível", - "openReleaseNotes": "Abrir notas de lançamento", + "llamacpp": { + "name": "llama.cpp", + "description": "Mostra a saúde, modelo carregado e velocidade de geração do seu servidor llama.cpp local.", + "title": "llama.cpp", + "status": { + "unhealthy": "Insalubre ({status})" + }, + "idle": "Ocioso", + "speedTooltip": { + "current": "Velocidade atual de geração", + "average": "Velocidade média de geração desde a inicialização", + "request": "Velocidade média desde que esta solicitação começou" + }, + "busy": "{count, plural, one {# solicitação para executar} other {# solicitações executando}}", + "modelInfo": { + "context": "Contexto", + "size": "Tamanho do arquivo", + "parameters": "Parâmetros", + "model": "Modelo", + "quantization": "Quantização" + }, + "stats": { + "tokensProcessed": "Tokens processados", + "contextUsage": "Uso de contexto / KV", + "cacheHitRate": "Taxa de acerto em cache rápida", + "tokensGenerated": "Tokens gerados" + }, + "error": { + "unreachable": "llama-server não está acessível" + }, + "unit": { + "speed": "{value} t/s", + "parameters": "{value}B", + "none": "—", + "speedShort": "t/s" + }, "option": { "showTitle": { "label": "Mostrar título" }, - "showRing": { - "label": "Mostrar atualização de toque" + "showModelInfo": { + "label": "Mostrar informações do modelo" }, - "layout": { - "label": "Layout", + "showContextUsage": { + "label": "Mostrar uso do contexto" + }, + "showCacheHitRate": { + "label": "Mostrar taxa de acerto em cache" + }, + "showSpeedStats": { + "label": "Mostrar estatísticas de velocidade" + }, + "showRequests": { + "label": "Mostrar solicitação de carregamento" + }, + "showTokenStats": { + "label": "Mostrar totais de token" + }, + "showSpeculative": { + "label": "Mostrar decodificação especulativa" + } + }, + "advanced": { + "promptSpeed": "Velocidade do alerta", + "avgSpeed": "Geração média", + "requests": "Solicitações", + "deferred": "Adiado", + "slots": "{processing}/{total} slots ocupados", + "speculative": "Decodificação especulativa", + "avgPrompt": "Prompt média", + "specDrafts": "Rascunhos de fala", + "specAccepted": "Spec. tokens aceitos", + "specDraftTokens": "Tokens de rascunho especificados" + } + }, + "stats": { + "name": "Estatísticas", + "description": "Combine estatísticas de suas integrações em um widget configurável.", + "configure": "Configurar métricas", + "refresh": "Atualizar estatísticas", + "empty": "Abra configurações de widget, selecione integrações e adicione métricas.", + "editorHelp": "Adicione métricas a partir das integrações selecionadas para este widget. As alterações são salvas no seu painel.", + "source": "Integração", + "metric": "Métrico", + "noMetrics": "Não há estatísticas disponíveis para essa integração", + "add": "Adicionar métrica", + "label": "Etiqueta personalizada", + "hidden": "Oculto", + "compact": "Números compactos", + "moveUp": "Subir", + "moveDown": "Mover para baixo", + "remove": "Remover métrica", + "loading": "Carregando…", + "unavailable": "Unavailable", + "refreshFailed": "Atualização falhou - mostrando dados salvos", + "stale": "Dados salvos - atualize para atualizar", + "table": { + "value": "Valor", + "status": "Status" + }, + "option": { + "table": { + "label": "Exibição em tabela" + }, + "rows": { + "label": "Linhas compactas" + }, + "showIcon": { + "label": "Mostrar ícone de origem" + }, + "spacing": { + "label": "Espaçamento", "option": { - "horizontal": { - "label": "Horizontal" + "xs": { + "label": "Compacta" }, - "vertical": { - "label": "Vertical" + "sm": { + "label": "Confortável" + }, + "md": { + "label": "Indomável" } } }, - "showUpdateList": { - "label": "Mostrar lista de atualização do recipiente", - "description": "Lista cada container monitorado que tem uma atualização de imagem disponível" + "entries": { + "label": "Métricas" + }, + "plain": { + "label": "Remover fundos do cartão" } - } + }, + "fetchFailed": "Não foi possível recuperar estatísticas", + "viewOptions": "Personalizar esta visão", + "moreMetrics": "Mais {count} na visão avançada", + "localHelp": "Layout, formatação e visibilidade aplicam-se somente a esta vista. As configurações do board compartilhado permanecem as mesmas.", + "plain": "Remover fundos do cartão", + "resetView": "Redefinir visão", + "allHidden": "Todas as métricas estão escondidas nesta exibição. Use Personalizar essa exibição para restaurá-las." + }, + "wazuh": { + "target": { + "api": "API de servidor Wazuh", + "indexer": "Indexador de imagens", + "wazuh": "Wazuh" + }, + "severity": { + "low": "baixa", + "medium": "Médio", + "high": "alta", + "critical": "Crítica" + }, + "error": { + "unauthorized": { + "title": "{target} rejeitou as credenciais", + "description": "Verifique o nome de usuário e senha salvos na integração do Wazuh. A API do servidor (porta 55000) e o indexador (porta 9200) usam usuários separados." + }, + "certificate": { + "title": "Certificado {target} não é confiável", + "description": "O Wazuh usa um certificado auto-assinado por padrão. Execute a \"Conexão de teste\" na integração e confie no certificado, ou adicione sua CA em Configurações → Certificados." + }, + "unreachable": { + "title": "Não foi possível alcançar {target}", + "description": "O host recusou ou soltou a conexão. Verifique o URL, a porta e o firewall. O indexador só escuta localhost em uma instalação padrão tudo-em-um." + }, + "timeout": { + "title": "{target} expirou", + "description": "Nenhuma resposta dentro de 15 segundos. O serviço pode ser sobrecarregado ou o endereço pode estar errado." + }, + "status": { + "title": "{target} retornou um erro", + "description": "O pedido falhou com status HTTP {status}." + }, + "invalidResponse": { + "title": "Resposta inesperada de {target}", + "description": "Verifique que a URL aponta para a API ou indexador do servidor do Wazuh e não para o painel." + }, + "indexerRequired": { + "title": "Credenciais do indexador Wazuh necessárias", + "description": "Alertas, vulnerabilidades e eventos de integridade do arquivo são lidos pelo indexador do Wazuh. Adicione um URL indexador, nome de usuário e senha à integração." + }, + "unknown": { + "title": "Não foi possível carregar os dados do {target}", + "description": "Verifique os logs do Homarr para detalhes." + } + }, + "range": { + "1h": "1h", + "24h": "24h", + "7d": "7a", + "30d": "30d" + }, + "levelTooltip": "Nível da regra {level} ({severity})" + }, + "wazuhAgents": { + "name": "Agentes Wazuh", + "description": "Lista ordenada de agentes Wazuh com status, SO, versão e última manutenção", + "option": { + "statusFilter": { + "label": "Mostrar agentes" + }, + "sortBy": { + "label": "Classificar por" + }, + "showVersion": { + "label": "Mostrar coluna de versão Wazuh" + }, + "showGroups": { + "label": "Mostrar coluna de grupos" + } + }, + "title": "agentes", + "total": "{count} agentes", + "status": { + "active": "Ativo", + "disconnected": "Desconectado", + "neverConnected": "Nunca conectado", + "pending": "Pendente" + }, + "statusLabel": { + "active": "Ativo", + "disconnected": "Desconectado", + "never_connected": "Nunca conectado", + "pending": "Pendente", + "unknown": "Desconhecido" + }, + "live": "Publicado", + "snapshot": "Snapshot de {age}", + "snapshotHint": "Leia o snapshot do agente do Wazuh (monitoramento wazuh-) tomado em {time}. Adicione credenciais da API do servidor para dados ao vivo.", + "staleSnapshot": "O snapshot do agente de {time} está desatualizado. Verifique se a tarefa de monitoramento do Wazuh está sendo executada, ou adicione as credenciais de API do servidor.", + "noDisconnected": "Todos os agentes estão conectados", + "empty": "Nenhum agente corresponde a este filtro", + "column": { + "status": "Status", + "name": "Nome do trabalho", + "ip": "PI", + "os": "SO", + "version": "Versão", + "lastKeepAlive": "Manter", + "groups": "Grupos" + }, + "outdated": "Mais antigo do que a versão mais recente do agente ({version})" + }, + "wazuhAlerts": { + "name": "Feed de alertas Wazuh", + "description": "Alertas recentes do Wazuh com nível, Técnicas ATT&CK de MITRE e IP de origem", + "option": { + "minLevel": { + "label": "Nível mínimo de regra", + "description": "Níveis do Wazuh: 0-6 baixo, 7-11 médio, 12-14 de altura, 15+ crítico" + }, + "hours": { + "label": "Janela de Tempo (horas)" + }, + "limit": { + "label": "Número de alertas" + }, + "showMitre": { + "label": "Show MITRE ATT&CK techniques" + }, + "showAgent": { + "label": "Mostrar agente" + }, + "showSourceIp": { + "label": "Mostrar IP de origem" + }, + "showRuleId": { + "label": "Mostrar ID da regra" + } + }, + "title": "Alertas · Nível {level}+ · {hours}h", + "empty": "Não há alertas neste nível. Tudo em silêncio.", + "rule": "Regra {id}", + "openInDashboard": "Abrir este alerta no painel do Wazuh" + }, + "wazuhSummary": { + "name": "Severidade de alerta Wazuh", + "description": "Alerta de gravidade com tendência contra o período anterior", + "option": { + "range": { + "label": "Intervalo de tempo" + }, + "showTrend": { + "label": "Mostrar tendência contra o período anterior" + }, + "showFooter": { + "label": "Mostrar rodapé" + } + }, + "title": "Severidade de alerta · {range}", + "alerts": "alertas", + "none": "Sem alertas", + "trend": { + "new": "novo", + "tooltip": "Período anterior: {previous}" + }, + "previous": "{range}anterior: {count}", + "maxLevel": "Nível Máximo {level}", + "health": "Vida do indexador: {status}", + "manager": "Gerente {version}" + }, + "wazuhTimeline": { + "name": "Wazuh alerts timeline", + "description": "Gráfico empilhado de alertas Wazuh ao longo do tempo por gravidade", + "option": { + "range": { + "label": "Intervalo de tempo" + }, + "interval": { + "label": "Intervalo" + }, + "chartType": { + "label": "Tipo de gráfico" + }, + "yScale": { + "label": "Escala do eixo Y", + "description": "A raiz quadrada mantém alertas altos e críticos visíveis ao lado de milhares de alertas baixos" + }, + "minLevel": { + "label": "Nível mínimo de regra" + }, + "showLegend": { + "label": "Mostrar legenda com os totais" + } + }, + "title": "Linha de tempo dos alertas · {range}", + "total": "{count} alertas", + "interval": "por {interval}" + }, + "wazuhTopList": { + "name": "Lista principal do Wazuh", + "description": "Principais regras, agentes, IPs de origem ou ATTáticas e técnicas de MITRE por contagem de alertas", + "option": { + "kind": { + "label": "Classificação" + }, + "range": { + "label": "Intervalo de tempo" + }, + "limit": { + "label": "Número de postagens" + }, + "minLevel": { + "label": "Nível mínimo de regra" + }, + "showBars": { + "label": "Mostrar barras" + } + }, + "title": { + "rules": "Principais Regras · {range}", + "agents": "Melhores agentes · {range}", + "sourceIps": "IPs de maior fonte · {range}", + "mitreTactics": "Tática de MITRE · {range}", + "mitreTechniques": "MITRE techniques · {range}" + }, + "empty": { + "rules": "Não há alertas neste período", + "agents": "Não há alertas neste período", + "sourceIps": "Não há alertas com um IP de origem neste período", + "mitreTactics": "Nenhum alerta mapeado para ATT&CK MITRE neste período", + "mitreTechniques": "Nenhum alerta mapeado para ATT&CK MITRE neste período" + }, + "totalTooltip": "{count} alertas correspondentes", + "private": "LAN", + "public": "Público", + "agents": "Visto em agentes de {count}", + "others": "{count} mais alertas em outras entradas" + }, + "wazuhVulnerabilities": { + "name": "Vulnerabilidades Wazuh", + "description": "Contagens de vulnerabilidades, principais CVEs e os agentes mais vulneráveis", + "option": { + "cveOrder": { + "label": "CVEs de classificação por" + }, + "minSeverity": { + "label": "Severidade do CVE" + }, + "cveLimit": { + "label": "Número de CVEs" + }, + "agentLimit": { + "label": "Número de agentes" + }, + "showAgents": { + "label": "Mostrar os agentes mais vulneráveis" + } + }, + "title": "Vulnerabilidades", + "topCves": "Principais CVEs", + "score": "Pontuação", + "agentsShort": "agentes", + "topAgents": "Agentes mais vulneráveis", + "criticalHigh": "Crítico / Alto", + "totalTooltip": "{count} descobriu em {agents} agentes", + "affected": "{count} agentes", + "empty": "Nenhuma vulnerabilidade detectada", + "distribution": "Distribuição de severidade. Descobertas {unscored} sem pontuações não são mostradas.", + "worst": "Pior: {id} ({score}) sobre os agentes {agents}" + }, + "wazuhFim": { + "name": "Integridade do arquivo Wazuh", + "description": "Eventos recentes de integridade do arquivo (syscheck)", + "option": { + "range": { + "label": "Intervalo de tempo" + }, + "event": { + "label": "Eventos" + }, + "limit": { + "label": "Número de Eventos" + }, + "includeRegistry": { + "label": "Incluir eventos registrados do Windows" + } + }, + "title": "Integridade do arquivo · {range}", + "event": { + "added": "Data adicionada", + "modified": "Modificado", + "deleted": "Excluído", + "unknown": "Alterado" + }, + "empty": "Nenhum evento de integridade de arquivo neste período", + "user": "por {user}", + "registry": "Registro" + }, + "wazuhAuthFailures": { + "name": "Falhas de autenticação Wazuh", + "description": "Logins falhados e alertas de força bruta por agente com sparklines horárias", + "option": { + "hours": { + "label": "Janela de Tempo (horas)" + }, + "limit": { + "label": "Número de agentes" + }, + "showSourceIps": { + "label": "Mostrar os principais IPs fonte" + } + }, + "title": "Falha de autenticação · {hours}h", + "seriesTooltip": "Todos os agentes sobre o último {hours}h", + "peak": "Pico {count}/bucket", + "empty": "Nenhum login com falha neste período", + "failed": "Logins falhados", + "failedHint": "Falhas únicas de autenticação (sshd, PAM, logon do Windows, usuários inválidos)", + "bruteForce": "Força bruta", + "bruteForceHint": "Regras brute-force relacionadas (várias falhas em um curto período, MITRE T1110)", + "sourceIps": "IPs de origem", + "ipTooltip": "{ip}: Falhas {count}", + "bruteForceCount": "{count} força bruta" } }, "widgetPreview": { @@ -4056,7 +5732,76 @@ } }, "board": { + "emptyState": { + "title": "Construa sua primeira vista", + "description": "Adicione um widget ou aplicativo, ou conecte um serviço e use seus dados neste board.", + "addWidget": "Adicionar widget", + "addApp": "Adicionar aplicativo", + "connectService": "Conectar serviço" + }, + "setupChecklist": { + "title": "Tornar este quadro útil", + "description": "Continue de onde você parou. O progresso segue o conteúdo já existente neste tabuleiro.", + "collapse": "Recolher checklist de configuração", + "dismiss": "Descartar checklist de configuração", + "resume": "Continuar configuração ({completed}/{total})", + "progress": "Progresso do quadro", + "step": { + "content": { + "label": "Adicionar conteúdo útil", + "description": "Escolha um widget e configure-o antes de ser colocado." + }, + "app": { + "label": "Fixar um aplicativo", + "description": "Manter um serviço ou ferramenta a um clique fora deste quadro." + }, + "service": { + "label": "Conectar um serviço", + "description": "Desbloqueie dados ao vivo e ações para widgets compatíveis.", + "permissionDescription": "Um administrador pode conectar um serviço para desbloquear dados ao vivo.", + "action": "Conectar" + } + } + }, "action": { + "addContent": "Adicionar conteúdo do board", + "settings": "Configurações do fórum", + "switch": "Trocar placa", + "switcher": { + "title": "Trocar placa", + "search": { + "empty": "Nenhum quadro corresponde \"{search}\"." + }, + "results": "Quadros disponíveis", + "preview": "Pré-visualização de {name} com {count} itens", + "currentHidden": "Quadro atual: {name}", + "keyboard": { + "navigate": "Navigate", + "open": "Abertas", + "instructions": "Digite para filtrar quadros. Use as setas do teclado para mover pelos resultados e Enter para abrir um quadro." + }, + "empty": { + "title": "Sem outros quadros", + "description": "Não há nenhuma outra seção que você possa acessar." + }, + "error": "Quadros não puderam ser carregados." + }, + "create": { + "availability": { + "checking": "Verificando disponibilidade…", + "available": "{name} está disponível" + }, + "notification": { + "success": { + "title": "Board criado", + "message": "O Board {name} foi criado" + }, + "error": { + "title": "Não foi possível criar board", + "message": "O Board {name} não pôde ser criado" + } + } + }, "duplicate": { "title": "Duplicar painel", "message": "Isso duplicará o painel {name} com todo o seu conteúdo. Se os widgets fizerem referência a integrações que você não tem permissão para usar, eles serão removidos.", @@ -4072,14 +5817,19 @@ } }, "edit": { + "enter": "Editar quadro", + "save": "Salvar quadro", + "exit": "Sair do modo de edição", "notification": { "success": { - "title": "Alterações aplicadas com sucesso", "message": "O painel foi salvo com sucesso" }, "error": { - "title": "Não foi possível aplicar as alterações", "message": "O painel não pôde ser salvo" + }, + "loadError": { + "title": "Não é possível começar a editar", + "message": "Não foi possível carregar o editor de painel. Seu painel de controle ainda está disponível no modo de exibição." } }, "confirmLeave": { @@ -4087,62 +5837,6 @@ "message": "Você tem alterações não salvas, tem certeza de que deseja sair?" } }, - "oldImport": { - "label": "Importar do Homarr anterior à versão 1.0.0", - "notification": { - "success": { - "title": "Importação bem-sucedida", - "message": "O painel foi importado com sucesso" - }, - "error": { - "title": "Falha na importação", - "message": "O painel não pôde ser importado, verifique os logs para mais detalhes" - } - }, - "form": { - "file": { - "label": "Selecionar arquivo JSON", - "invalidError": "Arquivo de configuração inválido" - }, - "apps": { - "label": "Aplicativos", - "avoidDuplicates": { - "label": "Evitar duplicatas", - "description": "Ignora aplicativos onde já existe um aplicativo com o mesmo href" - }, - "onlyImportApps": { - "label": "Importar apenas aplicativos", - "description": "Só adiciona os aplicativos, o painel precisa ser recriado manualmente" - } - }, - "name": { - "label": "Nome do painel" - }, - "screenSize": { - "label": "Tamanho da tela", - "description": "Nas versões anteriores à 1.0 existiam três modos diferentes, então você podia escolher a quantidade de colunas para cada tamanho de tela.", - "option": { - "sm": "Pequeno", - "md": "Médio", - "lg": "Grande" - } - }, - "sidebarBehavior": { - "label": "Comportamento da barra lateral", - "description": "As barras laterais foram removidas na versão 1.0. Você pode selecionar o que deve acontecer com os itens dentro delas.", - "option": { - "lastSection": { - "label": "Última seção", - "description": "A barra lateral será exibida abaixo da última seção" - }, - "removeItems": { - "label": "Remover itens", - "description": "Os itens presentes na barra lateral serão removidos" - } - } - } - } - }, "quickCreateApp": { "modal": { "title": "Criar aplicativo em tempo real", @@ -4150,6 +5844,12 @@ } } }, + "landmark": { + "canvas": "Painel tela", + "leftRail": "Trilho esquerdo", + "rightRail": "Trilho de painel direito", + "items": "Itens do painel" + }, "field": { "pageTitle": { "label": "Título da página" @@ -4219,7 +5919,8 @@ } }, "primaryColor": { - "label": "Cor primária" + "label": "Cor primária", + "locked": "Seu administrador mantém a cor da instância em todos os quadros." }, "secondaryColor": { "label": "Cor secundária" @@ -4259,9 +5960,6 @@ "xl": "Muito grande" } }, - "name": { - "label": "Nome" - }, "isPublic": { "label": "Público", "description": "Painéis públicos são acessíveis a todos, mesmo sem uma conta." @@ -4281,9 +5979,44 @@ "title": "Layout", "responsive": { "title": "Layouts responsivos", + "description": "Cada layout mantém suas próprias posições e tamanhos de widget. Os dispositivos móveis e base estão sempre disponíveis; adicione layouts personalizados em qualquer ponto de interrupção adicional.", "action": { "add": "Adicionar layout" } + }, + "role": { + "mobile": "Dispositivos móveis", + "base": "Base", + "custom": "Personalizado" + }, + "custom": { + "defaultName": "Layout personalizado" + }, + "mobile": { + "breakpointDescription": "O celular é sempre utilizado a partir de 0px até o próximo ponto de interrupção do layout." + }, + "preview": { + "columns": "colunas", + "empty": "Este layout está vazio", + "dynamicSection": "Seção dinâmica", + "editorWidthLabel": "{layoutName} · {width}px" + }, + "reset": { + "action": "Redefinir da Base", + "confirm": { + "title": "Reset {layoutName}?", + "message": "Isso substitui todas as posições e tamanhos salvos neste layout com um novo layout gerado a partir da Base. Isso não pode ser desfeito." + } + }, + "edit": { + "action": "Editar layout", + "saveAndEdit": "Salvar e editar", + "save": "Salvar layout", + "cancel": { + "action": "Cancelar edição de layout", + "title": "Descartar alterações de layout?", + "message": "Suas alterações não salvas neste layout serão descartadas." + } } }, "background": { @@ -4320,10 +6053,7 @@ "rename": { "label": "Renomear painel", "description": "Alterar o nome quebrará quaisquer links para este painel.", - "button": "Alterar nome", - "modal": { - "title": "Renomear painel" - } + "button": "Alterar nome" }, "visibility": { "label": "Editar visibilidade do painel", @@ -4347,9 +6077,7 @@ } }, "delete": { - "label": "Excluir este painel", "description": "Uma vez que você exclui um painel, não há como voltar atrás. Por favor, tenha certeza.", - "button": "Excluir este painel", "confirm": { "title": "Excluir painel", "description": "Tem certeza de que deseja excluir este painel? Isso excluirá permanentemente o painel e todo o seu conteúdo." @@ -4394,28 +6122,41 @@ }, "layout": { "field": { - "name": { - "label": "Nome" - }, "columnCount": { "label": "Contagem de colunas" }, "breakpoint": { "label": "Breakpoint", "description": "O layout será usado em todas as telas maiores que este breakpoint até o próximo breakpoint maior." + }, + "gutters": { + "label": "barras laterais fixas", + "description": "Reserve até três colunas de painéis de ambos os lados. A tela de reflows restante automaticamente.", + "left": { + "label": "Left sidebar", + "description": "Manter esta área visível enquanto o painel de rolagem.", + "thumbLabel": "Left sidebar width" + }, + "right": { + "label": "Barra lateral direita", + "description": "Manter esta área visível enquanto o painel de rolagem.", + "thumbLabel": "Largura da barra lateral direita" + }, + "width": { + "label": "Largura em colunas" + }, + "preview": { + "label": "Visualização do layout do painel" + } } } }, "management": { "metaTitle": "Gerenciamento", - "title": { - "morning": "Bom dia, {username}", - "afternoon": "Boa tarde, {username}", - "evening": "Boa noite, {username}" - }, "notFound": { "title": "Não encontrado", - "text": "Não foi possível encontrar o recurso solicitado" + "text": "Não foi possível encontrar o recurso solicitado", + "backToHome": "Voltar à página inicial do gerenciamento" }, "error": { "title": "Não foi possível carregar esta página", @@ -4424,19 +6165,10 @@ }, "navbar": { "items": { - "workshop": "Workshop", "home": "Início", - "boards": "Placas", - "apps": "Aplicativos", - "integrations": "Integrações", - "searchEngies": "Mecanismos de busca", - "medias": "Mídias", "users": { - "label": "Usuários", "items": { - "manage": "Gerenciar", - "invites": "Convites", - "groups": "Grupos" + "manage": "Gerenciar" } }, "tools": { @@ -4444,10 +6176,7 @@ "items": { "docker": "Docker", "kubernetes": "Kubernetes", - "logs": "Logs", "api": "API", - "certificates": "Certificados", - "tasks": "Tarefas", "backup": "Backup" } }, @@ -4461,21 +6190,12 @@ "sourceCode": "Código-fonte" } }, - "about": "Sobre" + "about": "Sobre", + "assistant": "Assistente" } }, "page": { "home": { - "statistic": { - "board": "Placas", - "user": "Usuários", - "invite": "Convites", - "integration": "Integrações", - "app": "Aplicativos", - "group": "Grupos", - "searchEngine": "Mecanismos de busca", - "media": "Mídias" - }, "statisticLabel": { "boards": "Placas", "resources": "Recursos", @@ -4513,13 +6233,8 @@ "tooltip": "Esse painel será exibido como padrão para dispositivos móveis" } }, - "duplicate": { - "label": "Quadro duplicado" - }, "delete": { - "label": "Excluir permanentemente", "confirm": { - "title": "Excluir quadro", "description": "Tem certeza que deseja deletar o quadro {name}?" } } @@ -4528,28 +6243,82 @@ "public": "Este quadro é publico", "private": "Este quadro é privado" }, - "noResults": { - "title": "Nenhum painel ainda" + "preview": { + "label": "Pré-visualização de layout para {name}, com {count} itens", + "unknownCreator": "Criador desconhecido" }, - "modal": { - "createBoard": { - "field": { - "name": { - "label": "Nome" - } - } - } + "noResults": { + "title": "Nenhum painel ainda", + "description": "Crie um quadro para organizar os seus aplicativos e widgets em um só lugar." } }, "media": { "includeFromAllUsers": "Incluir mídia para todos os usuários" }, "user": { - "back": "Voltar aos usuários", "fieldsDisabledExternalProvider": "Alguns campos estão desabilitados porque são gerenciados por um provedor de autenticação externo.", "setting": { "general": { "title": "Geral", + "header": { + "title": "Estúdio de Cabeçalho", + "badge": "pessoal", + "description": "Arraste controles em qualquer lugar da linha. Esquerda, Central e Direita permaneçam fixos enquanto controles deslocam-se em torno deles.", + "device": { + "desktop": "Computadores", + "mobile": "Dispositivos móveis" + }, + "zones": { + "left": "Esquerda", + "center": "Centralizado", + "right": "Certo" + }, + "action": { + "hide": "Ocultar o cabeçalho", + "show": "Mostrar cabeçalho", + "configure": "Mover ou configurar {item}", + "remove": "Remover {item}", + "dropIntoZone": "Mover para a seção {zone}" + }, + "preview": { + "board": "Visualização do painel para {name}", + "empty": "Nenhum layout do painel está disponível" + }, + "available": { + "title": "Controles disponíveis", + "description": "Adicione um controle e, em seguida, arraste seu botão completo para a posição acima.", + "requiredAlways": "Este controle é necessário, mas você pode movê-lo para qualquer lugar do cabeçalho.", + "allAdded": "Cada controle interno já está no seu cabeçalho.", + "add": "Adicionar {item}", + "boardShortcut": "Atalho para tabuleiro", + "chooseBoard": "Escolher um board" + }, + "configuration": { + "description": "Esse controle permanece com o mesmo tamanho que no cabeçalho vivo.", + "searchDisplay": { + "input": "Barra de pesquisa", + "icon": "Apenas ícone" + }, + "logoDisplay": { + "logo": "Logotipo apenas", + "logoAndText": "Logotipo + texto" + } + }, + "items": { + "logo": "Logotipo", + "search": "Busca", + "home": "Quadro inicial", + "boardSwitcher": "Painéis", + "assistant": "Assistente", + "docker": "Docker", + "boardEdit": "Editar quadro", + "boardSettings": "Configurações do fórum", + "settings": "Suas configurações", + "themeToggle": "Alternar tema", + "user": "conta", + "boardUnavailable": "Quadro indisponível" + } + }, "item": { "language": "Idioma & Região", "board": { @@ -4583,14 +6352,10 @@ }, "security": { "title": "Segurança" - }, - "board": { - "title": "Placas" } }, "list": { - "metaTitle": "Gerenciar usuários", - "title": "Usuários" + "metaTitle": "Gerenciar usuários" }, "edit": { "metaTitle": "Editar usuário {username}" @@ -4644,9 +6409,6 @@ } }, "field": { - "id": { - "label": "ID" - }, "creator": { "label": "Criador" }, @@ -4670,10 +6432,7 @@ }, "setting": { "title": "Configurações", - "alert": "As configurações do grupo são priorizadas pela ordem dos grupos na lista. As configurações superiores substituem as configurações inferiores.", - "board": { - "title": "Painéis" - } + "alert": "As configurações do grupo são priorizadas pela ordem dos grupos na lista. As configurações superiores substituem as configurações inferiores." }, "members": { "title": "Membros", @@ -4681,10 +6440,7 @@ "notFound": "Nenhum membro encontrado" }, "permissions": { - "title": "Permissões", - "form": { - "unsavedChanges": "Você tem alterações não salvas!" - } + "title": "Permissões" } } }, @@ -4693,12 +6449,10 @@ "notification": { "success": { "message": "Configurações salvas com sucesso" - }, - "error": { - "message": "Erro ao salvar permissões" } }, "section": { + "analyticsDocumentation": "Veja exatamente o que a análise de dados do Homarr coleta", "analytics": { "title": "Análises", "general": { @@ -4727,7 +6481,6 @@ } }, "board": { - "title": "Placas", "homeBoard": { "label": "Painel inicial global", "mobileLabel": "Painel para dispositivos móveis (global)", @@ -4746,7 +6499,6 @@ } }, "user": { - "title": "Usuários", "enableGravatar": { "label": "Ativar Gravatar", "description": "Usa avatares de usuário do Libravatar/Gravatar quando nenhum avatar personalizado está definido e um e-mail está configurado" @@ -4762,12 +6514,86 @@ "appearance": { "title": "Aparência", "defaultColorScheme": { - "label": "Esquema de cores padrão", + "label": "Esquema de cores padrão" + } + }, + "branding": { + "title": "Marca da instância", + "groups": { + "identity": "Identidade", + "appearance": "Aparência", + "customCss": "Custom CSS", + "authentication": "Autenticação" + }, + "identity": { + "description": "O logotipo do aplicativo é a marca maior usada dentro do aplicativo, nas páginas de login e para aplicativos instalados. O ícone do navegador (favicon) é o pequeno quadrado usado em abas e favoritos; quando vazio, ele volta para o logotipo do aplicativo." + }, + "appName": { + "label": "Nome do aplicativo" + }, + "greeting": { + "label": "Saudação personalizada" + }, + "logo": { + "label": "Logotipo da aplicação", + "placeholder": "/logo/logo.png" + }, + "favicon": { + "label": "Ícone do navegador (favicon)", + "placeholder": "Usa logotipo da aplicação" + }, + "primaryColor": { + "label": "Cor primária" + }, + "secondaryColor": { + "label": "Realce secundário" + }, + "lockPrimaryColor": { + "label": "Manter essa cor em cada board", + "description": "Impede que as cores do board substituam o acento do aplicativo." + }, + "signInBackground": { + "label": "Fundo de autenticação", + "placeholder": "https://exemplo.com.br/pt_BR.jpg" + }, + "signInOverlay": { + "label": "Sobreposição de fundo" + }, + "defaultRadius": { + "label": "Estilo de canto", "options": { - "auto": "Automático", - "light": "Claro", - "dark": "Escuro" + "xs": "Bem", + "sm": "Sutil", + "md": "Equilibrado", + "lg": "Arredondado", + "xl": "Suave" } + }, + "customCss": { + "label": "CSS personalizado global", + "description": "Aplicado a cada página. O CSS personalizado do painel pode substituí-lo." + }, + "authVisibility": { + "description": "Escolha o que aparece em cada página de autenticação.", + "appName": "Nome do aplicativo", + "logo": "Logotipo da aplicação", + "greeting": "Saudação" + }, + "summary": { + "title": "Marca atual", + "cornerStyle": "Estilo de canto", + "palette": "Palette", + "backgroundConfigured": "Fundo personalizado · {overlay}% de sobreposição", + "backgroundDefault": "Fundo padrão", + "greetingConfigured": "Saudação personalizada", + "greetingDefault": "Saudação padrão", + "boardColorLocked": "Cor do tabuleiro bloqueada", + "boardColorFlexible": "Cores do fórum permitidas", + "appName": "Nome do trabalho", + "logo": "Logotipo", + "greeting": "Saudação", + "on": "Ligado", + "off": "Desligado" } }, "culture": { @@ -4775,12 +6601,177 @@ "defaultLocale": { "label": "Idioma padrão" } + }, + "assistant": { + "loading": "Carregando configuração do assistente", + "title": "Assistente", + "description": "Conecte um ponto de extremidade do modelo compatível com OpenAI: o assistente de toda a instância.", + "security": { + "description": "Chaves de API e valores adicionais do cabeçalho são criptografados no banco de dados Homarr. Eles nunca são retornados para navegadores. As solicitações de modelos são enviadas diretamente do servidor Homarr para o ponto de extremidade configurado." + }, + "overview": { + "connectionReady": "Conexão pronta", + "unsavedChanges": "Alterações não salvas", + "setupRequired": "Configuração necessária", + "disabled": "Desabilitado", + "noModel": "Nenhum modelo selecionado" + }, + "connection": { + "endpointTitle": "Provedor e endpoint", + "description": "Escolha uma predefinição ou conecte qualquer serviço que implemente a API de Conclusões do Chat OpenAI.", + "save": "Salvar conexão do provedor" + }, + "credentials": { + "title": "Credenciais", + "description": "Adicione os segredos deste ponto de extremidade. Os valores armazenados permanecem criptografados e não podem ser lidos de volta.", + "required": "Chave necessária", + "optional": "Chave opcional", + "workshop": "Login por usuário no GitHub" + }, + "provider": { + "title": "Provedor", + "groups": { + "free": "Grátis com Homarr", + "hosted": "Provedores hospedados", + "local": "Provedores locais", + "custom": "Personalizado" + }, + "options": { + "homarr": { + "description": "Um número limitado de usos de Assistente são gratuitos todos os dias, pagos pela equipa Homarr. Entre na Oficina da Comunidade para usar sua remuneração." + }, + "openrouter": { + "description": "Roteamento de modelo hospedado com um grande catálogo de modelos capazes de ferramentas." + }, + "openai": { + "description": "Conclusões de Chat OpenAI através do API oficial." + }, + "anthropic": { + "description": "Claude através do endpoint de compatibilidade do OpenAI SDK do Anthropic." + }, + "google-gemini": { + "description": "Gemini através do ponto de API compatível com OpenAI." + }, + "xai": { + "description": "Grok models através da API OpenAI-compatível com OpenAI." + }, + "groq": { + "description": "Inferência de hospedagem rápida através da API OpenAI-compatível com Groq." + }, + "mistral": { + "description": "Modelos Mistral através da API oficial." + }, + "deepseek": { + "description": "DeepSeek models através da API compatível com OpenAI." + }, + "together": { + "description": "Hospedado de modelos abertos através da API OpenAI-compatível com OpenAI." + }, + "ollama": { + "description": "Um servidor local ou de rede Ollama usando a sua API compatível com OpenAI." + }, + "lm-studio": { + "description": "Um servidor local do LM Studio com compatibilidade com OpenAI habilitada." + }, + "llama-cpp": { + "description": "Um servidor llama.cpp local ou de rede usando sua API compatível com OpenAI." + }, + "custom": { + "label": "Ponto final personalizado", + "description": "Qualquer outro ponto de extremidade compatível com Conclusões do Chat OpenAI." + } + }, + "homarrAuth": { + "title": "Utilização diária gratuita do Assistente inclusa", + "description": "Nenhuma chave de API é necessária. A equipe Homarr cobre um número limitado de usos de Assistente para você todos os dias. Entre na Oficina da Comunidade para manter sua licença separada." + } + }, + "baseUrl": { + "title": "URL base de API", + "description": "Inclua o prefixo da API, geralmente /v1. Em containers, localhost refere-se ao recipiente Homarr." + }, + "apiKey": { + "title": "Chave da API", + "required": "Exigido por este provedor. O valor é criptografado e apenas gravação.", + "optional": "Opcional para endpoints locais. Deixe em branco quando o serviço não requer autenticação pelo portador.", + "placeholder": "Digite uma chave de API", + "savedTitle": "Chave de API criptografada salva", + "savedDescription": "Homarr pode usar esta chave, mas não pode exibir ou recuperar seu valor.", + "remove": "Remover chave de API salva", + "removeFlow": { + "title": "Remover a chave API salva?", + "description": "Este provedor requer uma chave de API. Removendo-o pode parar a descoberta de modelos e as respostas do assistente até que outra chave seja salva.", + "optionalDescription": "O endpoint deixará de receber a autenticação do portador depois que esta chave for removida. Confirme que aceita solicitações não autenticadas ou usa outro cabeçalho armazenado.", + "cancel": "Manter a chave salva", + "confirm": "Remover chave de API" + } + }, + "headers": { + "title": "Cabeçalhos de solicitação adicionais", + "description": "Cabeçalhos de autenticação ou roteamento. Valores de cabeçalho são criptografados e apenas gravados.", + "add": "Adicionar cabeçalho", + "name": "Nome do Cabeçalho", + "value": "Valor do cabeçalho", + "valuePlaceholder": "Valor secreto ou de roteamento", + "remove": "Remover cabeçalho", + "configured": "Cabeçalhos criptografados adicionais são configurados. Adicionar cabeçalhos substitui o conjunto completo armazenado.", + "empty": "Nenhum cabeçalho adicional é armazenado para este provedor.", + "savedBadge": "Cabeçalhos salvos", + "pendingRemoval": "Remoção pendente", + "clear": "Remover cabeçalhos armazenados ao salvar", + "keep": "Manter cabeçalhos armazenados" + }, + "model": { + "title": "Modelo", + "description": "Selecione um modelo descoberto ou digite uma ID exata de modelo de endpoints.", + "placeholder": "ID do modelo", + "refresh": "Atualizar modelos", + "chooseModel": "Escolha o modelo usado para novas conversas.", + "discoveryPath": "Caminho de descoberta modelo", + "discoveryPathDescription": "Acrescentado à URL base da API. Deixe em branco para desativar a descoberta e usar uma ID de modelo manual.", + "manual": "Digite um ID de modelo manualmente ou salve a conexão para descobrir modelos.", + "manualFallback": "A descoberta está indisponível. Você ainda pode inserir um modelo de ID manualmente.", + "saveConnectionFirst": "Salve a conexão do provedor antes de escolher um modelo.", + "discovering": "Atualizando os modelos disponíveis deste provedor…", + "discovered": "{count, plural, one {Encontrado o modelo #. O suporte de ferramenta depende do ponto de extremidade e modelo selecionados.} other {Encontrado os modelos #. O suporte de ferramenta depende do endpoint e modelo selecionados.}}", + "discoveryFailed": "Descoberta de modelo não concluída", + "context": "Janela de contexto {count}", + "toolsConfirmed": "Ferramentas anunciadas", + "toolsUnknown": "Verificar ferramenta de suporte" + }, + "serverTools": { + "title": "Ferramentas do servidor", + "webSearch": { + "label": "Pesquisa na internet", + "description": "Permitir que o modelo pesquise a web ao vivo através do OpenRouter quando uma solicitação precisa de informações atuais. O uso da pesquisa é cobrado separadamente pelo OpenRouter.", + "proxyDescription": "Envie a ferramenta do servidor de busca web do OpenRouter para este endpoint. Habilitar isso somente quando o ponto de extremidade personalizado encaminha o formato das ferramentas do servidor OpenRouter, como um proxy do Roteador Homarr.", + "limit": "O modelo decide quando procurar, com um limite de 3 pesquisas e 5 resultados por pesquisa para cada solicitação." + } + }, + "enabled": { + "label": "Ativar Assistente", + "description": "Mostra o assistente para todos os usuários registrados. As permissões existentes na Homarr ainda se aplicam a todas as chamadas de ferramentas internas." + }, + "save": "Salvar assistente", + "notification": { + "connectionSaved": { + "title": "Conexão ao provedor salvo", + "message": "O endpoint e credenciais criptografadas estão prontas para a seleção do modelo.", + "credentialsCleared": "O endpoint alterado, então as credenciais anteriores foram limpas. Adicione credenciais para o novo destino, se necessário." + }, + "saved": { + "title": "Configurações do assistente salvas", + "message": "O novo modelo e as configurações de disponibilidade estão ativos." + }, + "error": { + "title": "Configurações do assistente não puderam ser salvas" + } + } } } }, "tool": { "tasks": { - "title": "Tarefas", "status": { "idle": "Ocioso", "running": "Em execução", @@ -4798,6 +6789,11 @@ "label": "Pings" } }, + "action": { + "run": "Executar {name} agora", + "enable": "Habilitar {name}", + "disable": "Desativar {name}" + }, "interval": { "seconds": "A cada {interval, plural, =1 {segundo} other {# segundos}}", "minutes": "A cada {interval, plural, =1 {minuto} other {# minutos}}", @@ -4813,13 +6809,7 @@ } } }, - "settings": { - "title": "Configurações da tarefa para {jobName}" - }, "field": { - "name": { - "label": "Nome" - }, "interval": { "label": "Intervalo de agendamento" }, @@ -4833,11 +6823,6 @@ "table": { "search": "Buscar {count} tarefas..." }, - "action": { - "refresh": { - "label": "Atualizar" - } - }, "refresh": { "success": { "message": "Tarefas atualizadas com sucesso" @@ -4871,7 +6856,6 @@ } }, "api": { - "title": "API", "modal": { "createApiToken": { "title": "Token de API criado", @@ -4897,7 +6881,6 @@ }, "table": { "header": { - "id": "ID", "createdBy": "Criado por", "actions": "Ações" } @@ -4953,43 +6936,12 @@ "availableTools": { "title": "Ferramentas disponíveis", "description": "{count} ferramentas disponíveis. Expanda uma categoria para ver as ferramentas individuais e suas descrições.", - "columnType": "Tipo", - "columnName": "Ferramenta", - "columnDescription": "Descrição" - }, - "troubleshooting": { - "title": "Solução de problemas", - "missingHeader": { - "title": "\"Cabeçalho ApiKey ausente\"", - "description": "Seu cliente não está enviando o cabeçalho {header}. Verifique se a seção {section} em sua configuração MCP está correta. Alguns clientes exigem reinicialização após alterações de configuração." - }, - "invalidFormat": { - "title": "\"Formato inválido de ApiKey\"", - "description": "Certifique-se de copiar a chave API completa, não apenas parte dela." - }, - "invalidKey": { - "title": "\"Chave API inválida\"", - "description": "O ID da chave não foi encontrado ou o token está incorreto. As chaves API só podem ser visualizadas uma vez ao serem criadas. Se você a perdeu, exclua a chave antiga e crie uma nova." - }, - "connectionRefused": { - "title": "Conexão recusada / tempo limite", - "description": "Certifique-se de que a URL seja acessível a partir do seu cliente de IA. Se o Homarr estiver atrás de um proxy reverso ou em Docker, use a URL externa (não {localhost}). Verifique se a porta está correta (padrão: 7575 para Docker)." - }, - "toolsNotAppearing": { - "title": "Ferramentas não estão aparecendo", - "description": "Algumas ferramentas exigem integrações específicas configuradas (por exemplo, Docker, Overseerr). A lista de ferramentas depende do que está disponível em sua instância do Homarr." + "filteredDescription": "Ferramentas {count} correspondentes entre categorias expandidas.", + "search": "Ferramentas de busca", + "noResults": { + "title": "Nenhuma ferramenta corresponde a esta pesquisa", + "description": "Nenhuma ferramenta MCP corresponde \"{search}\". Tente um namespace, nome da ferramenta ou descrição." } - }, - "copy": "Copiar", - "oneClick": { - "title": "Instalar em um clique", - "subtitle": "Usa OAuth — autentique-se no navegador no primeiro uso", - "vsCode": "Instalar no VS Code", - "cursor": "Instalar no Cursor", - "copyUrl": "Copiar URL MCP", - "copied": "Copiado!", - "copyHint": "Para ChatGPT, Claude Code ou qualquer cliente MCP", - "manualConfig": "Configuração manual" } } } @@ -5006,47 +6958,12 @@ "title": "Exportação de dados sensíveis", "warningTitle": "Esta exportação contém todo o seu banco de dados.", "warningBody": "O backup inclui todos os usuários, segredos de integração (criptografados), chaves de API, configurações de quadro e dados de aplicativos. Armazene o arquivo exportado com segurança e não o compartilhe.", - "typePrompt": "Digite \"{phrase}\" para continuar", - "submit": "Exportar banco de dados", - "cancel": "Cancelar" + "submit": "Exportar banco de dados" } }, "import": { "title": "Restaurar banco de dados", - "description": "Envie um backup ZIP exportado anteriormente para restaurar seu banco de dados. Isso substituirá todo o seu banco de dados. Se o backup foi criado com uma chave de criptografia diferente, os segredos serão automaticamente recriptografados.", - "warning": "Restaurar um backup substituirá completamente seu banco de dados atual e reiniciará o aplicativo. Esta ação não pode ser desfeita.", - "dropzone": { - "title": "Solte seu arquivo ZIP de backup aqui ou clique para navegar", - "description": "Somente arquivos .zip de um backup SQLite do Homarr são aceitos" - }, - "changeFile": "Alterar arquivo", - "button": "Restaurar banco de dados", - "success": { - "title": "Restauração concluída", - "message": "O banco de dados foi restaurado com sucesso. O aplicativo está reiniciando..." - }, - "error": "Falha na importação" - }, - "preview": { - "title": "Conteúdo do backup", - "exported": "Exportado em {date}", - "loading": "Analisando arquivo de backup...", - "errorTitle": "Erro de visualização", - "entity": "Entidade", - "count": "Contagem", - "boards": "Quadros", - "entities": { - "board": "Quadros", - "user": "Usuários", - "app": "Aplicativos", - "integration": "Integrações", - "item": "Widgets", - "media": "Mídia", - "search_engine": "Mecanismos de busca" - }, - "analyzeError": "Falha ao analisar arquivo de backup", - "invalidMissingMetadata": "Backup inválido: metadata.json ausente", - "invalidMissingDb": "Backup inválido: db.sqlite ausente" + "description": "Envie um backup ZIP exportado anteriormente para restaurar seu banco de dados. Isso substituirá todo o seu banco de dados. Se o backup foi criado com uma chave de criptografia diferente, os segredos serão automaticamente recriptografados." }, "restore": { "dropzone": { @@ -5056,29 +6973,20 @@ "analyzing": "Analisando backup...", "changeFile": "Alterar arquivo", "continueToRestore": "Continuar para restauração", - "tryAgain": "Tente novamente", "analysisError": "Erro de análise", "preview": { "title": "Conteúdo do backup", "exported": "Exportado em {date}", "entity": "Entidade", "count": "Contagem", - "boards": "Quadros", "entities": { - "board": "Quadros", - "user": "Usuários", - "app": "Aplicativos", - "integration": "Integrações", - "item": "Widgets", - "media": "Mídia", - "search_engine": "Mecanismos de busca" + "item": "Widgets" }, "migrationsApplied": "{count} migração aplicada", "migrationsAppliedPlural": "{count} migrações aplicadas", "migrationsOlderVersion": "Este backup era de uma versão mais antiga do Homarr. {count} migração de esquema foi aplicada para atualizá-lo.", "migrationsOlderVersionPlural": "Este backup era de uma versão mais antiga do Homarr. {count} migrações de esquema foram aplicadas para atualizá-lo.", "migrationsUpToDate": "Esquema do banco de dados está atualizado ({count} migrações aplicadas)", - "upToDate": "Atualizado", "migrationsPending": "{count, plural, one {# pendente} other {# pendentes}}" }, "migration": { @@ -5089,21 +6997,21 @@ "title": "Ação destrutiva", "warningTitle": "Isso substituirá permanentemente todo o seu banco de dados.", "warningBody": "Todos os quadros, usuários, aplicativos, integrações, configurações e sessões atuais serão perdidos. Esta ação não pode ser desfeita. O aplicativo será reiniciado após a restauração.", - "typePrompt": "Digite \"{phrase}\" para continuar", - "cancel": "Cancelar", "submit": "Restaurar banco de dados" }, "progress": { "title": "Restaurando banco de dados...", - "extracting": "Extraindo arquivo de backup", - "migrating": "Aplicando migrações do banco de dados", - "encrypting": "Recriptografando segredos de integração", - "swapping": "Substituindo arquivo do banco de dados", - "restarting": "Reiniciando servidor" + "restarting": "Reiniciando servidor", + "relogin": "Restaurar o banco de dados invalidado sua sessão atual. A Homarr enviará você para entrar quando o servidor estiver pronto." }, "complete": { "title": "Restauração concluída", - "message": "O banco de dados foi restaurado com sucesso. O servidor está reiniciando — atualize a página em alguns segundos." + "message": "O banco de dados foi restaurado com sucesso. O servidor está reiniciando — atualize a página em alguns segundos.", + "button": "Acessar agora" + }, + "timeout": { + "title": "O servidor não voltou online", + "message": "A restauração do banco de dados finalizada, mas Homarr não voltou a ser preparada. Tente novamente a verificação da conexão ou atualize esta página manualmente." }, "failed": { "title": "Falha na restauração" @@ -5111,6 +7019,9 @@ "invalidMissingMetadata": "Backup inválido: metadata.json ausente", "invalidMissingDb": "Backup inválido: db.sqlite ausente", "analyzeError": "Falha ao analisar backup" + }, + "confirm": { + "typePrompt": "Digite \"{phrase}\" para continuar" } } }, @@ -5145,7 +7056,11 @@ "toggleBoardEdit": "Alternar para o modo de edição do quadro", "toggleColorScheme": "Alternar entre modo claro/escuro", "saveNotebook": "Salvar bloco de notas (apenas dentro do widget de bloco de notas)", - "openSpotlight": "Abrir busca" + "openSpotlight": "Abrir busca", + "openSpotlightApps": "Abrir pesquisa de aplicativos", + "openSpotlightAssistant": "Abrir modo assistente", + "openSpotlightPreferences": "Abrir modo de preferências", + "openAssistant": "Abrir Assistente" }, "note": "Dica: Mod refere-se tanto à tecla Ctrl quanto à tecla ⌘ no macOS" } @@ -5155,6 +7070,63 @@ }, "docker": { "title": "Contêineres", + "reconciliation": { + "title": "Configuração Docker assistida", + "suggestions": "{count, plural, =0 {Não há sugestões} one {# sugestão} other {# sugestões}}", + "attention": "{count} precisa de atenção", + "endpointUnavailable": "Alguns serviços não puderam ser verificados porque estes pontos de extremidade não estão disponíveis: {names}", + "empty": "Não foram encontrados serviços Docker visíveis.", + "emptyFilter": "Nenhum serviço corresponde a esta visualização.", + "ambiguous": "Mais de um item existente pode corresponder a este serviço. Homarr não irá escolher um automaticamente.", + "filter": { + "attention": "Precisa de atenção", + "represented": "Já configurado", + "all": "TODOS" + }, + "state": { + "newRecognized": "Pronto para conectar", + "newApp": "Novo serviço", + "represented": "Já representado", + "linked": "Relacionado", + "moved": "Endereço alterado" + }, + "url": { + "manual": "Insira um endereço manualmente" + }, + "health": { + "layer": { + "docker": "Docker", + "integrationConfiguration": "Integração", + "authentication": "Autenticação", + "apiRequest": "API", + "appRepresentation": "App", + "widgetConfiguration": "Widget", + "widgetQuery": "Consulta de widget" + }, + "status": { + "available": "Disponível", + "configured": "Configurado", + "linked": "Relacionado", + "missing": "Faltando", + "changed": "Alterado", + "unused": "Não utilizado", + "notApplicable": "Não se aplica", + "notObserved": "Não observado" + } + }, + "action": { + "review": "Revisão", + "dismiss": "Descartar", + "restoreDismissed": "Restauração dispensada ({count})", + "setupIntegration": "Configurar integração", + "reviewIntegration": "Revisar integração", + "viewRepresentation": "Configuração de visualização" + }, + "loadError": { + "title": "Assistente de configuração do Docker não pôde ser carregado", + "message": "Informações do serviço Docker indisponíveis. Tente novamente sem sair desta página." + } + }, "table": { "updated": "Atualizado em {when}", "refresh": { @@ -5167,9 +7139,6 @@ "totalMemory": "Memória total: {memory}" }, "field": { - "name": { - "label": "Nome" - }, "state": { "label": "Estado", "option": { @@ -5183,9 +7152,6 @@ } }, "stats": { - "cpu": { - "label": "CPU" - }, "memory": { "label": "Memória" } @@ -5248,8 +7214,11 @@ } }, "remove": { - "label": "Excluir", "confirm": "", + "confirmation": { + "title": "{count, plural, one {Remover # contêiner?} other {Remover # contêineres?}}", + "message": "{count, plural, one {Isto remove permanentemente o contêiner #: {names}} other {Isto remove permanentemente # contêineres: {names}}}" + }, "notification": { "success": { "title": "Contêineres removidos", @@ -5261,8 +7230,13 @@ } } }, + "result": { + "failure": { + "title": "Algumas ações de contêiner falharam", + "message": "{total, plural, one {{failed} da ação # falhou: {names}} other {{failed} de # ações falhou: {names}}}" + } + }, "refresh": { - "label": "Atualizar", "notification": { "success": { "title": "Os contêineres foram atualizados", @@ -5293,18 +7267,33 @@ }, "error": { "internalServerError": "Falha ao buscar contêineres Docker", + "endpointUnavailable": "{count, plural, one {# Ponte do Docker indisponível: {names}} other {# Ponte-endpoints do Docker indisponível: {names}}}", "noColumns": "" } }, "kubernetes": { + "context": { + "label": "Contexto do Kubernetes", + "loadError": { + "title": "Os contextos do Kubernetes não puderam ser carregados", + "message": "Informações de contexto indisponíveis. Tente novamente sem sair desta página." + }, + "status": { + "available": "Disponível", + "degraded": "Metrics unavailable", + "unavailable": "Unavailable" + }, + "unavailable": "Este contexto do Kubernetes não pode ser alcançado. Selecione outro contexto ou verifique suas credenciais e endpoint.", + "metricsUnavailable": "Este contexto está acessível, mas o Servidor de Métricas está indisponível. O inventário permanece disponível sem o uso ao vivo da CPU e da memória." + }, "cluster": { "title": "Painel do Cluster", "label": "Cluster", "providers": "Provedores", "version": "Versão", - "architecture": "Arquitetura", "capacity": { "title": "Capacidade", + "metricsUnavailable": "O servidor de métricas está indisponível. O inventário e a capacidade reservada permanecem visíveis, mas o uso da CPU ao vivo e da memória não podem ser mostrados.", "resource": { "reserved": "Reservado", "used": "Usado" @@ -5323,38 +7312,10 @@ } }, "nodes": { - "label": "Nós", "field": { - "name": { - "label": "Nome" - }, - "state": { - "label": "Estado", - "option": { - "ready": "Pronto", - "NotReady": "Não está pronto" - } - }, - "cpu": { - "label": "CPU" - }, - "memory": { - "label": "RAM" - }, - "pods": { - "label": "Pods" - }, - "operatingSystem": { - "label": "SO" - }, - "architecture": { - "label": "Arquitetura" - }, + "metricsUnavailable": "Unavailable", "kubernetesVersion": { "label": "Versão do Kubernetes" - }, - "creationTimestamp": { - "label": "Criado" } }, "table": { @@ -5362,43 +7323,17 @@ } }, "namespaces": { - "label": "Namespaces", - "field": { - "name": { - "label": "Nome" - }, - "state": { - "label": "Estado", - "option": { - "active": "Ativo", - "terminating": "Terminando" - } - }, - "creationTimestamp": { - "label": "Criado" - } - }, "table": { "search": "Buscar {count} namespaces" } }, "ingresses": { - "label": "Ingresses", "field": { - "name": { - "label": "Nome" - }, - "namespace": { - "label": "Namespace" - }, "className": { "label": "Nome da classe" }, "rulesAndPaths": { "label": "Regras & caminhos" - }, - "creationTimestamp": { - "label": "Criado" } }, "table": { @@ -5406,17 +7341,7 @@ } }, "services": { - "label": "Serviços", "field": { - "name": { - "label": "Nome" - }, - "namespace": { - "label": "Namespace" - }, - "type": { - "label": "Tipo" - }, "ports": { "label": "Portas" }, @@ -5425,9 +7350,6 @@ }, "clusterIP": { "label": "IP do Cluster" - }, - "creationTimestamp": { - "label": "Criado" } }, "table": { @@ -5435,25 +7357,12 @@ } }, "pods": { - "label": "Pods", "field": { - "name": { - "label": "Nome" - }, - "namespace": { - "label": "Namespace" - }, "image": { "label": "Imagem" }, "applicationType": { "label": "Tipos de aplicações" - }, - "status": { - "label": "Status" - }, - "creationTimestamp": { - "label": "Criado" } }, "table": { @@ -5461,51 +7370,17 @@ } }, "secrets": { - "label": "Secrets", - "field": { - "name": { - "label": "Nome" - }, - "namespace": { - "label": "namespace" - }, - "type": { - "label": "tipo" - }, - "creationTimestamp": { - "label": "Criado" - } - }, "table": { "search": "Buscar {count} secrets" } }, "configmaps": { - "label": "ConfigMaps", - "field": { - "name": { - "label": "Nome" - }, - "namespace": { - "label": "namespace" - }, - "creationTimestamp": { - "label": "Criado" - } - }, "table": { "search": "Buscar {count} configMaps" } }, "volumes": { - "label": "Volumes", "field": { - "name": { - "label": "Nome" - }, - "namespace": { - "label": "Namespace" - }, "accessModes": { "label": "Modos de acesso" }, @@ -5520,12 +7395,6 @@ }, "volumeName": { "label": "Nome do volume" - }, - "status": { - "label": "Status" - }, - "creationTimestamp": { - "label": "Criado" } }, "table": { @@ -5534,6 +7403,29 @@ }, "error": { "internalServerError": "Falha ao buscar dados do Kubernetes" + }, + "field": { + "name": { + "label": "Nome do trabalho" + }, + "namespace": { + "label": "Namespace" + }, + "creationTimestamp": { + "label": "Criado" + }, + "state": { + "label": "Estado do trabalho" + }, + "status": { + "label": "Status" + }, + "type": { + "label": "Tipo de cliente de download" + }, + "architecture": { + "label": "Arquitetura" + } } }, "permission": { @@ -5567,71 +7459,27 @@ }, "navigationStructure": { "manage": { - "workshop": { - "label": "Workshop" - }, "label": "Gerenciar", - "boards": { - "label": "Placas" - }, - "integrations": { - "label": "Integrações", + "custom-widgets": { "edit": { - "label": "Editar" + "flow": { + "label": "Fluxo" + } }, - "new": { - "label": "Novo" - } - }, - "search-engines": { - "label": "Mecanismos de busca", - "new": { - "label": "Novo" + "workshop": { + "label": "Oficina" }, - "edit": { - "label": "Editar" - } - }, - "medias": { - "label": "Mídias" - }, - "apps": { - "label": "Aplicativos", - "new": { - "label": "Novo" - }, - "edit": { - "label": "Editar" + "publish": { + "label": "Publicar na Oficina" } }, "users": { - "label": "Usuários", - "create": { - "label": "Criar" - }, "general": "Geral", - "security": "Segurança", - "board": "Placas", - "groups": { - "label": "Grupos" - }, - "invites": { - "label": "Convites" - } + "security": "Segurança" }, "tools": { "label": "Ferramentas", - "tasks": { - "label": "Tarefas" - }, - "docker": { - "label": "Docker", - "logs": { - "label": "Registros" - } - }, "kubernetes": { - "label": "Kubernetes", "nodes": { "label": "Nós" }, @@ -5657,11 +7505,7 @@ "label": "Volumes" } }, - "logs": { - "label": "Logs" - }, "certificates": { - "label": "Certificados", "hostnames": { "label": "Hostnames" } @@ -5672,12 +7516,60 @@ }, "about": { "label": "Sobre" + }, + "assistant": { + "label": "Assistente" } } }, "search": { "placeholder": "Buscar por qualquer coisa", "nothingFound": "Nada encontrado", + "modePicker": { + "search": { + "label": "Busca", + "placeholder": "Pesquisar aplicativos, quadros, páginas, comandos e preferências" + }, + "apps": { + "label": "Aplicativos", + "placeholder": "Pesquisar aplicativos, quadros e integrações" + }, + "command": { + "label": "Comandos", + "placeholder": "Pesquisar ações e comandos" + }, + "preferences": { + "label": "Preferências:", + "placeholder": "Pesquisar e alterar preferências" + }, + "assistant": { + "label": "Assistente", + "placeholder": "Solicitar Assistente" + }, + "external": { + "label": "Web", + "placeholder": "Pesquisar com um motor de busca externo" + }, + "media": { + "label": "Mídia", + "placeholder": "Buscar um filme ou programa", + "fallback": "Pesquisar mídia por \"{query}\"" + }, + "userGroup": { + "label": "Pessoas", + "placeholder": "Pesquisar usuários e grupos" + }, + "continueWith": "Continuar com", + "dialogAriaLabel": "Menu de comando {mode}", + "navigationLabel": "Modos de pesquisa", + "modeAriaLabel": "Modo {mode}", + "resultsAriaLabel": "{mode} resultados", + "footer": { + "navigate": "Navigate", + "open": "Abertas", + "close": "Fechar" + } + }, "error": { "fetch": "Ocorreu um erro ao buscar os dados" }, @@ -5686,7 +7578,6 @@ "help": "Buscar por aplicativos, integrações ou painéis", "group": { "app": { - "title": "Aplicativos", "children": { "action": { "open": { @@ -5702,7 +7593,6 @@ } }, "board": { - "title": "Placas", "children": { "action": { "open": { @@ -5722,9 +7612,6 @@ "title": "Selecione uma ação para o quadro" } } - }, - "integration": { - "title": "Integrações" } } }, @@ -5753,9 +7640,6 @@ "newBoard": { "label": "Criar um novo quadro" }, - "importBoard": { - "label": "Importe um quadro" - }, "newApp": { "label": "Criar aplicativo" }, @@ -5825,7 +7709,6 @@ } }, "defaultSearchEngineId": { - "label": "Mecanismo de pesquisa padrão", "children": { "detail": { "title": "Selecione seu mecanismo de pesquisa padrão" @@ -5833,7 +7716,6 @@ } }, "openSearchInNewTab": { - "label": "Abrir resultados da busca em uma nova guia", "children": { "detail": { "title": "Abrir resultados da busca em uma nova guia" @@ -5841,7 +7723,6 @@ } }, "ddgBangs": { - "label": "Ativar bangs do DuckDuckGo", "children": { "detail": { "title": "Ativar bangs do DuckDuckGo" @@ -5856,6 +7737,13 @@ } } }, + "byteUnitSystem": { + "children": { + "detail": { + "title": "Selecione suas unidades de tamanho de dados" + } + } + }, "homeBoardId": { "label": "Quadro inicial", "children": { @@ -5873,7 +7761,6 @@ } }, "pingIconsEnabled": { - "label": "Usar ícones para pings", "children": { "detail": { "title": "Usar ícones para pings" @@ -5881,7 +7768,6 @@ } }, "enableRightClickOnWidgets": { - "label": "", "children": { "detail": { "title": "" @@ -5909,6 +7795,7 @@ "description": "Comece a digitar para pesquisar suas integrações de solicitação de mídia", "disabled": { "noIntegration": "Adicione uma integração Overseerr, Jellyseerr ou Seerr para habilitar a busca de mídia.", + "signInRequired": "Faça o login para pesquisar integrações de requisição de mídia.", "scoped": "Este widget não possui uma integração de solicitação de mídia acessível." } } @@ -5925,7 +7812,6 @@ "help": "Usar um mecanismo de busca externo", "group": { "searchEngine": { - "title": "Mecanismos de busca", "tipDdgBangs": "Dica: Você também pode usar qualquer bang do DuckDuckGo aqui, ex: !something", "bang": { "searchWithQuery": "Pesquisar \"{query}\" com {label}", @@ -5976,20 +7862,6 @@ "group": { "mode": { "title": "Modos" - }, - "help": { - "title": "Ajuda", - "option": { - "documentation": { - "label": "Documentação" - }, - "submitIssue": { - "label": "Reportar um problema" - }, - "discord": { - "label": "Discord da comunidade" - } - } } } }, @@ -6001,9 +7873,10 @@ "other": { "label": "Pesquise com outro mecanismo de busca" }, - "no-default": { - "label": "Nenhum mecanismo de busca predefinido", - "description": "Defina um mecanismo de busca padrão nas preferências" + "no-engines": { + "label": "Nenhum mecanismo de busca configurado", + "descriptionCreate": "Adicionar um mecanismo de pesquisa para pesquisar a partir do menu do comando", + "descriptionUnavailable": "Peça a um administrador para configurar um mecanismo de pesquisa" }, "search": { "label": "Buscar por \"{query}\" com {name}" @@ -6083,7 +7956,6 @@ "help": "Buscar por usuários ou grupos", "group": { "user": { - "title": "Usuários", "children": { "action": { "detail": { @@ -6096,7 +7968,6 @@ } }, "group": { - "title": "Grupos", "children": { "action": { "detail": { @@ -6120,9 +7991,6 @@ "engine": { "search": "Encontrar um mecanismo de busca", "field": { - "name": { - "label": "Nome" - }, "short": { "label": "Abreviação" }, @@ -6135,12 +8003,19 @@ }, "page": { "list": { - "title": "Mecanismos de busca", + "ariaLabel": "Motores de busca configurados", "noResults": { "title": "Ainda não existem mecanismos de busca", - "action": "Crie seu primeiro mecanismo de busca" + "description": "Os motores de busca permitem que o Spotlight envie uma consulta a um site ou serviço conectado.", + "action": "Crie seu primeiro mecanismo de busca", + "filteredTitle": "Nenhum motor de busca corresponde à sua pesquisa", + "filteredDescription": "Nenhum motor de busca corresponde \"{search}\". Tente outro nome ou URL." }, - "interactive": "Interativo, usa uma integração" + "interactive": "Interativo, usa uma integração", + "type": { + "generic": "Modelo de URL", + "fromIntegration": "Integração" + } }, "create": { "title": "Novo mecanismo de busca", @@ -6159,11 +8034,9 @@ "title": "Editar mecanismo de busca", "notification": { "success": { - "title": "Mudanças aplicadas com sucesso", "message": "O mecanismo de busca foi salvo com sucesso" }, "error": { - "title": "Não foi possível aplicar as mudanças", "message": "O mecanismo de busca não pôde ser salvo" } }, @@ -6302,6 +8175,10 @@ } }, "log": { + "context": { + "widgetError": "Widget relatou um erro desta vez", + "expiredWidgetError": "Registros em torno deste erro de widget não são mais retidos" + }, "level": { "option": { "debug": "Debug", @@ -6313,7 +8190,6 @@ }, "onboardingTour": { "learnMore": "Leia a documentação", - "next": "Próximo", "prev": "Voltar", "done": "Concluído", "skip": "Pular tour", @@ -6377,5 +8253,359 @@ "description": "Altere seu esquema de cores, idioma, quadro inicial e preferências. Você também pode acessar a área de gerenciamento a partir daqui." } } + }, + "metadata": { + "description": "Um painel auto-hospedado para a *pilha de arr e toda a sua pátria. Integra com mais de 50 serviços, widgets em tempo real, sem arquivos de configuração.", + "dashboardTitle": "Painel {appName}" + }, + "assistant": { + "title": "Assistente", + "open": "Abrir Assistente", + "close": "Fechar assistente", + "minimize": "Minimizar assistente", + "spotlight": "Solicitar Assistente", + "spotlightDescription": "Digite e envie um prompt sem sair do menu de comandos.", + "spotlightPrompt": { + "title": "Solicitar Assistente", + "description": "Digite um prompt acima. O email será enviado pelo plano de fundo.", + "send": "Enviar aviso", + "empty": "Digite um prompt acima" + }, + "unavailable": { + "checking": "Verificando se o assistente está disponível…", + "error": "Não foi possível verificar a disponibilidade do assistente. Tente novamente.", + "notConfigured": "Um administrador deve configurar e ativar o assistente primeiro.", + "signIn": "Faça o login para usar o Assistente." + }, + "newConversation": "Nova conversa", + "conversations": "Conversas", + "conversationActions": "Ações de conversa", + "searchConversations": "Pesquisar conversas", + "noMatchingConversations": "Não há conversas correspondentes", + "moreActions": "Mais ações de resposta", + "renameConversation": { + "action": "Renomear", + "label": "Nome da conversa", + "save": "Salvar nome", + "failedTitle": "Não foi possível renomear a conversa", + "failedDescription": "Homarr não pôde renomear esta conversa. Tente novamente." + }, + "deleteConversation": { + "title": "Excluir conversa?", + "description": "“{title}” e suas mensagens serão excluídas permanentemente.", + "failedTitle": "Conversa não pôde ser excluída", + "failedDescription": "Homarr não pôde excluir esta conversa. Tente novamente." + }, + "closeHistory": "Fechar histórico de conversas", + "openHistory": "Abrir histórico de conversas", + "emptyTitle": "Em que posso ajudar?", + "emptyDescription": "Pergunte sobre a configuração do seu Homarr, inspecionar dados de instância ao vivo ou aprovar ações quando você quiser que eu faça uma mudança.", + "suggestions": { + "health": { + "label": "Verificar saúde do serviço", + "prompt": "Verificar minhas integrações e resumir qualquer coisa que precise de atenção." + }, + "explore": { + "label": "Explore meu Homarr", + "prompt": "Mostre-me o que posso ver e gerenciar nesta instância do Homarr." + }, + "media": { + "label": "Encontrar mídia para solicitar", + "prompt": "Ajude-me a encontrar um filme ou uma série para pedir." + }, + "style": { + "label": "Melhorar painel de controle", + "prompt": "Ajude-me a melhorar a aparência de um board ou CSS personalizado. Mostre-me minhas tábuas primeiro, e em seguida, preservar minhas configurações atuais enquanto fazemos a mudança." + }, + "designWidget": { + "label": "Crie um widget", + "prompt": "Criar e instalar um Widget Personalizado para " + } + }, + "composerPlaceholder": "Pergunte ao Assistente…", + "runtime": { + "model": "Modelo", + "searchModels": "Buscar modelos", + "noModels": "Não há modelos disponíveis", + "otherModels": "Outros modelos", + "imageInput": "Aceita entrada de imagem", + "thinking": "Modo de pensamento", + "reasoning": { + "auto": "Automático", + "none": "Desligado", + "minimal": "Mínimo", + "low": "baixa", + "medium": "Médio", + "high": "alta" + } + }, + "providerQuota": { + "title": "Provedor Homarr", + "communityWorkshop": "Oficina da Comunidade", + "dailyAllowance": "Requisição diária", + "remainingLabel": "{remaining} do provedor {limit} Homarr pedidos restantes", + "loading": "Carregando subsídio do provedor Homarr", + "signInRequired": "Login na Oficina necessário para o provedor Homarr", + "signInDescription": "Entre com o GitHub através da Oficina Comunitária para receber sua remuneração diária separada.", + "exhaustedDescription": "O subsídio para seu provedor Homarr foi usado hoje. Ele se reinicia à meia-noite UTC.", + "unavailableDescription": "Entre na Oficina ou espere que o seu provedor de Homarr tenha permissão para reiniciar.", + "signIn": "Entrar com GitHub", + "signInError": "Login falhou no GitHub. Tente novamente daqui a pouco.", + "loadError": "O subsídio do provedor Homarr não pôde ser carregado.", + "reset": "Redefine {relative} em ", + "toolCalls": "Cada solicitação de modelo e chamada de ferramenta concluída utiliza uma solicitação.", + "retry": "Recarregar permissão", + "level": { + "ok": "Ok", + "warning": "ATENÇÃO", + "bad": "baixa", + "dead": "Usado" + } + }, + "stop": "Parar resposta", + "send": "Enviar mensagem", + "copy": "Copiar resposta", + "copyMessage": "Copiar mensagem", + "editMessage": "Editar Mensagem", + "updateMessage": "Atualizar mensagem", + "regenerate": "Regenerar resposta", + "helpful": "Útil", + "notHelpful": "Não é útil", + "readAloud": "Ler resposta em voz alta", + "stopReading": "Parar leitura", + "feedbackError": "Seu feedback não pôde ser salvo. Tente novamente.", + "exportMarkdown": "Exportar como Markdown", + "exportConversation": { + "action": "Exportar conversa como Markdown", + "failedTitle": "Não foi possível exportar a conversa", + "failedDescription": "Homarr não conseguiu carregar esta conversa. Tente novamente." + }, + "reasoning": "Pensando", + "previousResponse": "Resposta anterior", + "nextResponse": "Próxima resposta", + "removeAttachment": "Remover anexo", + "downloadFile": "Baixar {name}", + "attachedImage": "Imagem anexada", + "externalImageBlocked": "Imagem externa bloqueada por privacidade", + "image": { + "loading": "Carregando imagem", + "failed": "Não foi possível carregar esta imagem.", + "retry": "Tente novamente a imagem" + }, + "quoteSelection": "Cotação", + "dismissQuote": "Remover orçamento", + "attachments": { + "add": "Anexar uma imagem ou documento", + "errorTitle": "Anexo não pôde ser adicionado", + "imageUnsupported": "O modelo selecionado não suporta entrada de imagem." + }, + "mentions": { + "menu": "Adicionar contexto Homarr", + "context": "Contexto", + "app": "Aplicativos", + "integration": "Integrações", + "board": "Painéis", + "widget": "Widgets", + "tools": "Ferramentas disponíveis" + }, + "markdown": { + "diagram": "Diagrama", + "renderingDiagram": "Processando o diagrama…", + "diagramUnavailable": "Este diagrama não pôde ser renderizado." + }, + "commands": { + "menu": "Comandos do assistente", + "health": "Preparar um exame de saúde", + "explore": "Preparar uma visão geral desta instância Homarr", + "media": "Preparar uma pesquisa de mídia", + "style": "Preparar uma aparência do board ou uma alteração personalizada de CSS", + "designWidget": "Preparar uma compilação de widget personalizado de um prompt" + }, + "usage": { + "tokens": "tokens", + "contextWindow": "Janela de contexto", + "requestDetails": "Pedir detalhes", + "used": "Último passo", + "remaining": "Restante", + "capacity": "Capacidade", + "input": "Entrada", + "output": "Saída", + "cached": "Entrada de cache", + "cacheWrite": "Gravar cache", + "reasoning": "Justificativa", + "inputShort": "em", + "outputShort": "Fora", + "cachedShort": "armazenado", + "reasoningShort": "raciocínio", + "firstOutput": "Saída inicial", + "homarrTiming": "Homarr observado", + "endToEnd": "Fim a fim", + "observedThroughput": "Taxa de entrada observada", + "providerTiming": "Provedor relatado", + "loadingProviderDetails": "Carregando detalhes da geração…", + "providerDetailsPending": "O OpenRouter ainda está processando alguns detalhes de geração. Reabra para tentar novamente.", + "providerLatency": "latência do provedor", + "generationTime": "Tempo de geração", + "moderationLatency": "Moderação", + "providerThroughput": "Transferência de provedor", + "fallbacks": "Fallbacks", + "fallbackLatency": "Latência de retrocesso", + "cacheDiscount": "Desconto no cache", + "normalizedTokens": "Entrada / saída do OpenRouter normalizada", + "byok": "BYOK", + "cost": "Custo", + "reported": "Reportado pelo provedor", + "estimated": "Estimado a partir dos preços do modelo", + "upstreamCost": "Inferência a montante", + "webSearches": "Pesquisas na web", + "finishReason": "Motivo final", + "notReported": "Não denunciado", + "agentSteps": "Etapas do agente", + "step": "Etapa {number}", + "generation": "Geração" + }, + "toolInput": "Entrada", + "toolOutput": "Saída", + "toolActivity": { + "iconSearch": "Procurando ícones “{query}”", + "iconBrowse": "Navegação nos ícones disponíveis" + }, + "toolNavigation": { + "openPreview": "Abrir pré-visualização", + "openWidget": "Abrir widget" + }, + "webSearch": { + "title": "Pesquisa na internet", + "completed": "O OpenRouter pesquisou esta resposta na web ao vivo.", + "searches": "{count, plural, one {# busca} other {# buscas}}", + "sources": "{count, plural, one {# source} other {# sources}}" + }, + "responseError": { + "title": "O assistente não pôde terminar", + "description": "Tente novamente. Se o problema continuar, peça a um administrador para verificar o ponto de extremidade do modelo configurado." + }, + "toolPreparationError": { + "title": "Este pedido não pôde ser preparado", + "description": "O modelo parou antes de fornecer detalhes completos. Tente novamente a resposta ou descreva a solicitação novamente. Nenhuma alteração foi feita." + }, + "busy": { + "title": "O assistente já está trabalhando", + "description": "Aguarde a resposta atual ou abra-o para parar a execução." + }, + "pendingAction": { + "answerTitle": "Resposta necessária", + "answerFallback": "Escolha uma resposta para continuar", + "formTitle": "Revisar detalhes do aplicativo", + "boardFormTitle": "Revisar alterações do quadro", + "review": "Revisão", + "sendBlocked": "Resolver a solicitação pendente antes de enviar" + }, + "activity": { + "thinking": "Assistente está pensando", + "working": "Trabalhando no seu prompt", + "ready": "Resposta pronta", + "completed": "Abrir a resposta", + "approval": "Aprovação necessária", + "failed": "O Assistente precisa de atenção", + "expand": "Abrir a resposta do assistente", + "dismiss": "Descartar atividade do assistente" + }, + "scrollToLatest": "Ir para a última", + "refresh": { + "action": "Atualizar a visão atual", + "working": "Atualizando a visão atual", + "completeTitle": "Ver atualizados", + "completeDescription": "Dados visíveis do Homarr foram recarregados.", + "failedTitle": "A visão não pôde ser atualizada", + "failedDescription": "A alteração ainda pode ser salva. Tente atualizar novamente." + }, + "askUser": { + "preparing": "Preparando pergunta", + "answered": "Sua resposta", + "other": "Outras", + "otherLabel": "Sua resposta", + "otherPlaceholder": "Digite outra resposta…", + "submit": "Enviar resposta", + "cancelOther": "Cancelar outra resposta", + "optionKind": { + "affirmative": "Confirmar", + "negative": "Recusar", + "alternative": "Alternativa", + "custom": "Personalizado" + } + }, + "configureApp": { + "title": "Revisar detalhes do aplicativo", + "description": "Escolha um ícone local e ajuste qualquer coisa antes da aprovação do assistente solicitada.", + "preparing": "Preparando detalhes do aplicativo", + "continue": "Utilizar estes detalhes", + "ready": "Detalhes do aplicativo prontos", + "automaticContinue": "Usando esses detalhes do app automaticamente" + }, + "configureBoardSettings": { + "title": "Revisar alterações do quadro", + "loading": "Carregando configurações atuais do fórum", + "loadErrorTitle": "As configurações do board não puderam ser carregadas", + "loadErrorDescription": "O board pode não existir mais, ou você pode não ter permissão para modificá-lo.", + "proposedCount": "Campo {count} proposto pelo assistente", + "changeCount": "Mudanças {count} prontas", + "ready": "Alterações no painel prontas", + "cancelled": "Configurações atuais do board mantidas", + "noChanges": "Nenhuma configuração será alterada", + "keepCurrent": "Manter as configurações atuais", + "continue": "Continuar para aprovação", + "automaticContinue": "Aceitar as alterações propostas automaticamente", + "resetAll": "Redefinir todas as alterações", + "tabs": { + "css": "Custom CSS", + "appearance": "Aparência", + "background": "Imagem de fundo", + "general": "Geral" + }, + "cssDescription": "Editar a folha de estilo completa. Regras existentes são mantidas a menos que sejam removidas aqui.", + "cssCharacters": "{count} de 16384 caracteres", + "copyCss": "Copy CSS", + "copied": "Copiado", + "restoreCss": "Restore current CSS", + "remoteCssTitle": "Este CSS carrega um recurso remoto", + "remoteCssDescription": "Folhas de estilos importadas e URLs remotas contactam outro servidor quando o board é carregado. Revise elas antes de continuar." + }, + "configureWidget": { + "title": "Widget de revisão", + "preparing": "Preparando configurações de widget", + "review": "Revise widgets e integrações", + "ready": "Configuração de widget pronta", + "cancelled": "Widget não foi adicionado", + "automaticContinue": "Aceitando a configuração proposta do widget automaticamente", + "definitionLoadErrorTitle": "As configurações do widget não puderam ser carregadas", + "definitionLoadErrorDescription": "Homarr não conseguiu carregar as configurações deste widget. Tente novamente.", + "loadErrorTitle": "Não foi possível carregar as integrações", + "loadErrorDescription": "Homarr não pôde carregar as integrações disponíveis para este widget.", + "noIntegrationTitle": "É necessária uma integração compatível", + "noIntegrationDescription": "Configure uma integração suportada por este widget antes de adicioná-lo ao painel.", + "connectIntegration": "Conectar serviço", + "manageIntegrations": "Gerenciar integrações", + "skip": "Não adicionar", + "errorTitle": "As configurações do widget não puderam ser preparadas", + "errorDescription": "O modelo não forneceu uma configuração completa de widget. Nenhum widget foi adicionado." + }, + "approvalRequired": "Aprovação necessária", + "complete": "Complete", + "denied": "Negado", + "failed": "Falhou", + "working": "Trabalhando", + "approvalDescription": "Revise esta alteração antes que seja executada.", + "approveAndRun": "Aprovar e executar", + "deny": "Recusar", + "autoApproval": { + "label": "Aprovações automáticas", + "composerLabel": "Aprovar para mim", + "title": "Aprovações automáticas", + "description": "Prepare automaticamente formulários e aprove alterações protegidas para esta conversa. As perguntas ainda esperam pela sua resposta e as suas permissões de Homarr ainda se aplicam. Isso é desativado quando você troca de conversas.", + "enable": "Habilitar para esta conversa", + "disable": "Desativar aprovações automáticas", + "enabled": "Aprovações automáticas ativadas", + "approving": "Aprovando automaticamente" + } } } diff --git a/packages/translation/src/lang/pt.json b/packages/translation/src/lang/pt.json index 8c92405ad..2fc9ea319 100644 --- a/packages/translation/src/lang/pt.json +++ b/packages/translation/src/lang/pt.json @@ -1,156 +1,246 @@ { "init": { - "step": { - "start": { - "title": "Bem-vindo ao Homarr", - "subtitle": "Vamos começar configurando a sua instância Homarr.", - "description": "Para começar, selecione como você deseja configurar sua instância Homarr.", - "action": { - "scratch": "Começar do zero", - "importOldmarr": "Importar do Homarr anterior à versão 1.0", - "restoreSqlite": "Restaurar do backup SQLite", - "restoreSqliteDescription": "Carregar um backup completo do banco de dados SQLite de uma instância anterior do Homarr. Isso restaurará todos os painéis, usuários, aplicativos, integrações e configurações.", - "backToOptions": "← Voltar para opções de configuração" + "studio": { + "navigationLabel": "Seções de integração", + "back": "Anterior", + "buildBoard": "Construir minha placa", + "common": { + "unknownError": "Algo deu errado. Suas escolhas ainda estão aqui; tente novamente." + }, + "claim": { + "checking": "Protegendo esta sessão de integração…", + "checkingTitle": "Preparando configuração segura", + "lockedTitle": "A instalação está aberta em outro navegador", + "lockedDescription": "Continue lá, ou aguarde sua sessão de primeiro execução segura expirar antes de tentar novamente.", + "signInTitle": "Login de administrador necessário", + "signInDescription": "Um administrador já existe. Faça o login para retomar a configuração sem expor credenciais ou acesso de serviço.", + "signIn": "Iniciar sessão e retomar", + "errorTitle": "A configuração não pôde ser segura", + "errorDescription": "Recarregue a página para tentar novamente a sessão de primeira execução." + }, + "navigation": { + "essentials": "Essenciais", + "discover": "Pendentes", + "connect": "Conectar", + "board": "Tabuleiro", + "extend": "Estender", + "review": "Revisão" + }, + "welcome": { + "title": "Bem-vindos à casa.", + "description": "Bem-vindo ao Homarr v{version}. Nós lhe guiaremos pelo essencial e ajudaremos a construir o seu primeiro quadro.", + "start": "Vamos começar", + "restore": "Restaurar backup", + "restoreTitle": "Restaurar do backup", + "restoreDescription": "Um backup completo do SQLite restaura quadros, pessoas, aplicativos, integrações e configurações. A Homarr o valida antes de substituir qualquer coisa.", + "errorTitle": "A configuração não pôde iniciar", + "errorDescription": "Suas escolhas de configuração ainda estão aqui. Tente novamente ou recarregue a página se isto continuar." + }, + "account": { + "title": "Criar seu administrador", + "description": "Especifique as credenciais para seu usuário administrador.", + "username": "Nome do administrador", + "passwordHint": "Apenas o mínimo de 8 caracteres é necessário. As outras verificações de força de senha são sugestões.", + "create": "Criar administrador", + "errorTitle": "O administrador não pôde ser criado", + "recoveryTitle": "Conta de administrador criada", + "recoveryDescription": "O login automático não foi concluído. Faça o login com as credenciais do administrador que você acabou de criar para continuar a configuração.", + "recoveryAction": "Entre e continue", + "unknownError": "O administrador não pôde ser criado." + }, + "externalGroup": { + "title": "Conecte seu grupo de administrador", + "description": "Use o nome exato do grupo enviado pelo LDAP ou OIDC. Membros deste grupo recebem acesso de administrador.", + "name": "Grupo de administrador externo", + "nameDescription": "Isso diferencia maiúsculas de minúsculas e deve corresponder ao seu provedor de identidade.", + "continue": "Salvar grupo e continuar", + "errorTitle": "O grupo não pôde ser salvo", + "unknownError": "O grupo administrador não pode ser salvo." + }, + "essentials": { + "title": "Começar com padrões familiares", + "description": "Defina o idioma e a aparência que todos veem primeiro, em seguida, dê a Homarr o padrão de endereço usado pelos seus serviços.", + "language": "Idioma padrão", + "theme": "Tema padrão", + "themeAuto": "Sistema", + "themeLight": "Claro", + "themeDark": "Escuro", + "serverOriginHelp": "Homarr usa esse endereço para pré-preencher URLs de serviço detectado. Você ainda pode editar cada serviço individualmente.", + "serverDescription": "Este é um atalho, não uma restrição. Todo serviço detectado permanece editável.", + "serverOrigin": "Domínio, IP ou caminho reverso do proxy", + "serverOriginDescription": "Exemplos: home.lan, 192.168.1.10 ou https://home.example.com/services. Escolha como cada serviço é anexado abaixo.", + "analytics": "Compartilhar análise de produto anônima", + "analyticsDescription": "Ajuda Homarr melhora o recurso de confiabilidade. Credenciais de serviço ou conteúdo do painel de controle não foram enviados." + }, + "discover": { + "title": "Veja o que esta instalação pode alcançar", + "description": "Recursos de verificação Homarr. Um soquete Docker ausente ou contexto Kubernetes nunca bloqueia uma configuração manual.", + "database": "Banco", + "docker": "Docker e sockets compatíveis", + "kubernetes": "Kubernetes", + "assistantWorkshop": "Assistente e Oficina", + "found": "Integrações {integrations} e {apps} aplicações adicionais encontradas", + "retryKubernetes": "Verificar o Kubernetes novamente", + "retryWorkshop": "Verifique a Oficina novamente", + "unknownVersion": "versão desconhecida", + "kubernetesAvailable": "Conectado ao Kubernetes {version}", + "kubernetesDisabled": "Não habilitado; continue com Docker ou serviços manuais", + "kubernetesUnavailable": "Kubernetes está habilitado, mas não pode ser alcançado a partir deste processo Homarr", + "workshopAvailable": "Oficina comunitária e serviços de assistência hospedados são acessíveis", + "workshopUnavailable": "Provedores locais e personalizados de assistência permanecem disponíveis", + "partialTitle": "Algumas fontes não puderam ser verificadas", + "partialDescription": "Resultados de hosts acessíveis são mantidos. Verifique as permissões do soquete ou adicione serviços manualmente na próxima seção.", + "status": { + "checking": "Verificando disponibilidade…", + "available": "Disponível", + "partial": "Parcialmente disponível", + "empty": "Alcançável, sem serviços correspondentes em execução", + "disabled": "Desativado pela configuração do servidor", + "unavailable": "Indisponível para este processo Homarr" } }, - "import": { - "title": "Importar dados", - "subtitle": "Você pode importar dados de uma instância existente do Homarr.", - "dropzone": { - "title": "Arraste o arquivo ZIP aqui ou clique para procurar", - "description": "O arquivo ZIP enviado será processado e você poderá selecionar o que deseja importar" + "connect": { + "title": "Conecte o que faz com que o fórum seja útil", + "description": "Selecione vários serviços de uma só vez. Os rótulos de Docker têm prioridade, imagens que correspondem preenchem lacunas e todas as URL e credenciais permanecem revisáveis.", + "discoveredIntegrations": "Instâncias de integração detectadas ({count})", + "detectedIntegrationLabel": "Importar {name}, detectado como {kind}", + "detectedAppLabel": "Importar aplicativo detectado {name}", + "otherIntegrations": "Adicionar outra integração", + "configureIntegrations": "Configurar integrações", + "discoveredApps": "Aplicativos detectados ({count})", + "appAddressRequired": "Adicione um endereço de {name}ou remova-o da seleção.", + "empty": "Nenhuma integração selecionada. A Homarr ainda criará uma placa inicial útil com widgets gerais.", + "dockerSource": "Atracador", + "manualSource": "Manualmente", + "url": "URL de Serviço", + "noCredentials": "Sem credenciais", + "noCredentialsDescription": "Esta integração não precisa de credenciais.", + "credentialMethod": "Método de credenciais", + "getApiKey": "Abra as configurações da chave API para este serviço", + "openGuide": "Guia de configuração do Homarreia aberto para este serviço", + "testConnection": "Testar conexão", + "testSuccess": "Conexão funciona", + "testSuccessDescription": "Homarr conectou-se ao endereço e credenciais atuais.", + "testError": "Falha na conexão", + "testErrorDescription": "Verifique o endereço de serviço e as credenciais, e então tente novamente.", + "needsConfiguration": "Precisa de configuração", + "tested": "Conexão testada", + "testFailed": "Falha no teste de conexão", + "incompleteConfirmation": "Integrações não concluídas serão ignoradas. Continuar sem elas?" + }, + "board": { + "title": "Forme o quadro antes de ser construído", + "description": "A Homarr cria layouts protegidos para celular e base, então coloca aplicativos e widgets compatíveis a partir dos serviços selecionados.", + "target": "Board para configurar", + "targetDescription": "Escolha o quadro exato existente que esta configuração deve atualizar.", + "targetPlaceholder": "Selecione um board", + "targetRequired": "Selecione o board a ser configurado antes de continuar.", + "name": "Nome do painel", + "nameDescription": "Usado apenas na URL do tabuleiro; letras, números, traços e sublinhados.", + "nameRequired": "Insira um nome para o tabuleiro antes de continuar.", + "primaryColor": "Cor primária", + "secondaryColor": "Cor secundária", + "resetColors": "Redefinir cores", + "radius": "Raio do canto do widget", + "radiusOptions": { + "xs": "Bem", + "sm": "Sutil", + "md": "Equilibrado", + "lg": "Arredondado", + "xl": "Suave" }, - "fileInfo": { - "action": { - "change": "Alterar arquivo" - } + "columns": "Colunas de board", + "columnsDescription": "Colunas definem a grade horizontal usada para dimensionar e posicionar itens. 12 é muito para a maioria das pessoas.", + "columnCount": "{count, plural, one {# coluna} other {# colunas}}", + "leftSidebar": "Left sidebar", + "rightSidebar": "Barra lateral direita", + "previewLabel": "Visualização ao vivo do layout do primeiro board" + }, + "extend": { + "title": "Recursos avançados", + "tabsLabel": "Configuração de Assistente, Workshop e MCP", + "assistant": "Assistente", + "workshop": "Oficina", + "assistantSetup": { + "loginTitle": "Login de administrador necessário", + "loginDescription": "As chaves do provedor e o acesso do modelo foram privilegiados. Finalize a configuração, faça o login e Homarr abrirá a configuração do Assistente diretamente.", + "loginAction": "Faça login para configurar o Assistente" }, - "importSettings": { - "title": "Importar configurações", - "description": "Configure o comportamento da importação" + "workshopSetup": { + "title": "Oficina Homarr", + "description": "Navegar pelos Widgets Personalizados da Comunidade, inspecionar seus recursos solicitados, instalá-los e publicar seu próprio trabalho sem copiar o código entre os servidores.", + "available": "Disponível", + "checking": "Verificando…", + "unavailable": "Unavailable", + "discoverTitle": "Pendentes", + "discoverDescription": "Encontre widgets construídos para fluxos de trabalho auto-hospedados.", + "installTitle": "Revisar e instalar", + "installDescription": "Ver metadados e configuração antes de adicionar qualquer coisa.", + "publishTitle": "Compartilhar", + "publishDescription": "Publicar widgets reutilizáveis de volta à comunidade.", + "browse": "Navegar na Oficina" }, - "boardSelection": { - "title": "{count} painéis encontrados", - "description": "Escolha todos os painéis com o tamanho que você deseja importar", - "action": { - "selectAll": "Selecionar tudo", - "unselectAll": "Desmarcar tudo" - } - }, - "summary": { - "title": "Resumo da importação", - "description": "No resumo abaixo, você pode ver o que será importado", - "action": { - "import": "Confirmar a importação e continuar" - }, - "entities": { - "apps": "Apps", - "boards": "Placas", - "integrations": "Integrações", - "credentialUsers": "Usuários credenciados" - } - }, - "tokenModal": { - "title": "Insira o token de importação", - "field": { - "token": { - "label": "Token", - "description": "Insira o token de importação mostrado em sua instância Homarr anterior" - } - }, - "notification": { - "error": { - "title": "Token inválido", - "message": "O token que você inseriu é inválido" - } - } + "mcpSetup": { + "title": "MCP de Homarr", + "description": "Conecte Claude, Codex, ou outro cliente MCP às ferramentas digitadas pelo Homarr. Chaves de API mantêm acesso explícito e revogável.", + "endpoint": "Ponte HTTP streamable", + "keyTitle": "Copiar esta chave agora", + "keyDescription": "Por segurança, Homarr não pode mostrar esta chave de API novamente.", + "copyKey": "Copiar chave da API", + "createKey": "Criar uma chave de API MCP", + "errorTitle": "Chave da API MCP não pôde ser criada", + "loginRequired": "Entre como administrador após a configuração para criar uma chave de API.", + "configuration": "Configuração de cliente", + "copy": "Copiar configuração", + "copied": "Copiado", + "advanced": "Abrir ferramentas MCP, permissões e detalhes de configuração" } }, - "user": { - "title": "Usuário admin", - "subtitle": "Especifique as credenciais para seu usuário administrador.", - "notification": { - "success": { - "title": "Usuário criado", - "message": "O usuário foi criado com sucesso" - }, - "error": { - "title": "Falha ao criar usuário" - } - } - }, - "group": { - "title": "Grupo externo", - "subtitle": "Especifique o grupo que deve ser usado para usuários externos.", - "form": { - "name": { - "label": "Nome do grupo", - "description": "O nome deve coincidir com o grupo administrador do provedor externo" - } - } - }, - "settings": { - "title": "Configurações", - "subtitle": "Definir as configurações do servidor." - }, - "integrations": { - "title": "Integrações", - "subtitle": "Selecione os serviços que você usa.", - "description": "Escolha as integrações que você gostaria de conectar. Vamos configurar seu painel com widgets correspondentes automaticamente.", - "action": { - "continue": "Continuar", - "skip": "Pular por enquanto" - }, - "configure": { - "progress": "{current} de {total}", - "skip": "Pular esta integração", - "finishing": "Configurando seu painel...", - "error": { - "title": "Falha na configuração", - "message": "Algo deu errado ao configurar seu painel. Por favor, tente novamente." - }, - "helpers": { - "tooltip": "Ajudantes de URL", - "description": "Esses ajudantes tentam adivinhar a URL para seus serviços. Se não funcionar, basta digitar o endereço manualmente." - } - }, - "urlTemplate": { - "label": "URL base", - "placeholder": "homelab.local ou 192.168.1.1", - "hint": "Digite seu domínio base ou IP para preencher automaticamente as URLs de integração", - "warning": "Definir sua URL base agora preencherá automaticamente todas as URLs de integração, economizando tempo durante a configuração", - "preview": "ex.: {example}", - "mode": { - "subdomain": "Subdomínio", - "hostPort": "Host:Porta" - } - }, - "docker": { - "detected": "Docker detectou {count} serviços", - "detectedBreakdown": "{integrations} integrações · {apps} apps", - "summary": "Homarr detectou {apps} aplicativos, {integrations} dos quais têm integrações integradas", - "appBadge": "Aplicativo", - "appSectionLabel": "Apps para adicionar ao painel ({count} selecionados)", - "scanning": "Escaneando Docker...", - "scanningDescription": "Procurando contêineres em execução no seu sistema" + "review": { + "title": "Um tabuleiro construído em torno de seus serviços", + "description": "A Homarr testa conexões não salvas, importa os aplicativos selecionados, aplica aparência e layouts, em seguida, abre o quadro exato configurado.", + "board": "Primeiro quadro", + "columns": "Colunas de board", + "columnsValue": "{count, plural, one {# coluna} other {# colunas}}", + "sidebars": "Barras laterais", + "sidebarsValue": "{count, plural, =0 {None} one {# sidebar} other {# sidebars}}", + "layouts": "Layouts responsivos", + "layoutsValue": "Celular + Base", + "integrations": "Integrações", + "integrationsValue": "{count, plural, =0 {Nenhum selecionado} one {# integração} other {# integrações}}", + "apps": "Botões de app", + "appsValue": "{count, plural, =0 {Apenas aplicativos iniciantes} one {# tile de aplicativo} other {# tiles de aplicativo}}", + "language": "IDIOMA", + "theme": "Tema", + "themeAuto": "Preferências do sistema", + "themeLight": "Claro", + "themeDark": "Escuro", + "colors": "Cores do tabuleiro", + "radius": "Raio do widget", + "automaticTitle": "O que Homarr criará", + "automaticDescription": "Widgets compatíveis, ícones, links de aplicativos, relações de integração e posicionamento responsivo vêm do catálogo do Homarr compartilhado. Você pode editar todos os resultados mais tarde.", + "dockerWarningTitle": "Alguns rótulos do Docker alterados durante a configuração", + "dockerWarningDescription": "{count, plural, one {# resultado selecionado do Docker não pôde ser aplicado porque seu serviço mudou, visando outro board, ou seu widget era incompatível} other {# resultados do Docker selecionados não puderam ser aplicados porque os serviços mudaram, apontaram outro tabuleiro ou seus widgets eram incompatíveis}}", + "errorTitle": "Quadro não pode ser construído", + "progress": { + "applying": "Testando conexões e construindo sua placa", + "done": "Seu quadro está pronto" } }, "finish": { - "title": "Concluir configuração", - "subtitle": "Você está pronto para começar!", - "description": "Você concluiu com sucesso o processo de configuração. Agora você pode começar a usar o Homarr. Selecione sua próxima ação:", - "action": { - "goToBoard": "Ir para o painel {name}", - "createBoard": "Crie seu primeiro painel", - "inviteUser": "Convidar outros usuários", - "docs": "Ler a documentação" - } + "title": "Seu primeiro quadro está pronto.", + "description": "Homarr conectou as partes que você selecionou e manteve as restantes editáveis. Abra o quadro agora; o pequeno tour dentro do produto pode mostrar a você modo de edição, widgets, layouts e pesquisa.", + "openBoard": "Abrir meu board", + "manageTitle": "Gerenciar", + "manageDescription": "Ajuste fino de aplicativos, integrações, quadros, usuários e configurações do servidor.", + "workshopTitle": "Oficina", + "workshopDescription": "Descubra e instale Widgets Personalizados da Comunidade.", + "docsTitle": "Aprenda Homarr", + "docsDescription": "Leia os guias focados para quadros, widgets, integrações e ferramentas." } - }, - "backToStart": "Voltar ao início" + } }, "user": { - "title": "Usuários", "name": "Usuário", "page": { "login": { @@ -159,12 +249,10 @@ }, "invite": { "title": "Junte-se ao Homarr", + "titleWithAppName": "Entrar em {appName}", "subtitle": "Bem-vindo ao Homarr! Por favor, crie sua conta", + "subtitleWithAppName": "Bem-vindo ao {appName}! Por favor, crie sua conta", "description": "Você foi convidado(a) por {username}" - }, - "init": { - "title": "Nova instalação do Homarr", - "subtitle": "Por favor, crie o usuário administrador inicial" } }, "field": { @@ -192,12 +280,17 @@ "previousPassword": { "label": "Senha anterior" }, - "homeBoard": { - "label": "Quadro inicial" - }, "pingIconsEnabled": { "label": "Usar ícone para pings" }, + "byteUnitSystem": { + "label": "Unidades de tamanho dados", + "description": "Escolha como Homarr exibe os tamanhos dos bytes e as taxas de byte. As taxas de bits sempre usam unidades decimais.", + "options": { + "binary": "BINÁRIO", + "decimal": "decimal" + } + }, "enableRightClickOnWidgets": { "label": "Ativar clique com o botão direito nos widgets", "description": "Exibir o menu de contexto do Homarr ao clicar com o botão direito em um widget. Desative para usar o menu padrão do navegador (por exemplo, \"Abrir link em uma nova aba\")." @@ -247,7 +340,6 @@ } } }, - "create": "Criar usuário", "changePassword": { "label": "Alterar senha", "notification": { @@ -259,56 +351,6 @@ } } }, - "changeHomeBoard": { - "notification": { - "success": { - "message": "Quadro inicial alterado com sucesso" - }, - "error": { - "message": "Não foi possível alterar o painel inicial" - } - } - }, - "changeSearchPreferences": { - "notification": { - "success": { - "message": "Preferências de busca alteradas com sucesso" - }, - "error": { - "message": "Não foi possível alterar as preferências de busca" - } - } - }, - "changeFirstDayOfWeek": { - "notification": { - "success": { - "message": "Primeiro dia da semana alterado com sucesso" - }, - "error": { - "message": "Não foi possível alterar o primeiro dia da semana" - } - } - }, - "changePingIconsEnabled": { - "notification": { - "success": { - "message": "Ícones de ping alterados com sucesso" - }, - "error": { - "message": "Não foi possível alternar ícones de ping" - } - } - }, - "changeDdgBangs": { - "notification": { - "success": { - "message": "Bangs do DuckDuckGo alternados com sucesso" - }, - "error": { - "message": "Não foi possível alternar bangs do DuckDuckGo" - } - } - }, "manageAvatar": { "changeImage": { "label": "Alterar imagem", @@ -338,16 +380,6 @@ } } }, - "editProfile": { - "notification": { - "success": { - "message": "Perfil atualizado com sucesso" - }, - "error": { - "message": "Não foi possível atualizar o perfil" - } - } - }, "delete": { "label": "Excluir usuário permanentemente", "description": "Exclui esse usuário incluindo suas preferências. Isso não removerá nenhum painel. O usuário não será notificado.", @@ -356,18 +388,13 @@ "select": { "label": "Selecionar usuário", "notFound": "Nenhum usuário encontrado" - }, - "transfer": { - "label": "Selecionar novo proprietário" } } }, "group": { - "title": "Grupos", "name": "Grupo", "search": "Encontrar um grupo", "field": { - "name": "Nome", "members": "Membros", "homeBoard": { "label": "Quadro inicial", @@ -388,6 +415,19 @@ } } }, + "custom-widget": { + "title": "Widgets personalizados", + "item": { + "manage": { + "label": "Gerenciar widgets personalizados", + "description": "Permitir que os membros criem, editem e excluam definições de widget personalizadas" + }, + "secret-write": { + "label": "Configurar segredos de widgets personalizados", + "description": "Permitir que os membros e suas chaves API definam credenciais de widget personalizado criptografadas" + } + } + }, "app": { "title": "Aplicativos", "item": { @@ -493,6 +533,35 @@ "description": "Permitir que membros modifiquem e deletem qualquer ferramenta de busca" } } + }, + "matrix": { + "none": "Sem acesso", + "impliedHint": "Concessões também: {permissions}", + "grantedViaAdmin": "Administradores já tem isso. Defina o Administrador para \"Sem acesso\" para configurá-lo separadamente.", + "preset": { + "label": "Predefinições", + "viewer": "Visualizador", + "viewerDescription": "Somente leitura: ver quadros e mídias, usar apps e integrações que já existem.", + "editor": "Editores", + "editorDescription": "Gerenciamento do dia-a-dia: crie e edite quadros, aplicativos, integrações e motores de busca.", + "admin": "Administrador", + "adminDescription": "Acesso irrestrito a todos os recursos e configurações, incluindo o gerenciamento de usuários.", + "custom": "Personalizado" + }, + "effective": { + "title": "Permissões efetivas", + "description": "O conjunto completo e desduplicado de ações deste grupo pode realizar, incluindo permissões concedidas indiretamente.", + "empty": "Nenhuma permissão selecionada" + }, + "noneDescription": "Os membros não têm acesso a esta área.", + "level": { + "view": "Visualizar", + "use": "Utilizar", + "interact": "Interagir", + "modify": "Modificação", + "full": "Completo" + }, + "capabilityIncluded": "Já incluído em “{level}”" } }, "memberNotice": { @@ -607,21 +676,24 @@ "search": "Encontrar app", "page": { "list": { - "title": "Aplicativos", + "ariaLabel": "Aplicativos configurados", "noResults": { "title": "Ainda não há aplicativos disponíveis", - "action": "Crie seu primeiro aplicativo" + "description": "Os aplicativos são links para os serviços e ferramentas que você deseja em seus painéis.", + "action": "Crie seu primeiro aplicativo", + "filteredTitle": "Nenhum aplicativo corresponde à sua pesquisa", + "filteredDescription": "Nenhum aplicativo corresponde \"{search}\". Tente outro nome ou URL.", + "createOnlyTitle": "Você só pode adicionar apps", + "createOnlyDescription": "Suas permissões permitem que você crie aplicativos, mas não navegue pelos existentes. Peça a um administrador para acesso de gerenciamento de aplicativos para ver a lista completa." } }, "create": { "title": "Novo Aplicativo", "notification": { "success": { - "title": "Criação realizada com sucesso", "message": "O aplicativo foi criado com sucesso" }, "error": { - "title": "Criação falhou", "message": "Não foi possível criar o aplicativo" } } @@ -630,11 +702,9 @@ "title": "Editar aplicativo", "notification": { "success": { - "title": "Alterações aplicadas com sucesso", "message": "O aplicativo foi salvo com sucesso" }, "error": { - "title": "Não foi possível aplicar as mudanças", "message": "O aplicativo não pôde ser salvo" } } @@ -644,26 +714,18 @@ "message": "Tem certeza que deseja excluir o aplicativo {name}?", "notification": { "success": { - "title": "Exclusão realizada com sucesso", "message": "O aplicativo foi excluído com sucesso" }, "error": { - "title": "Exclusão falhou", "message": "Não foi possível excluir o aplicativo" } } } }, "field": { - "name": { - "label": "Nome" - }, "description": { "label": "Descrição" }, - "url": { - "label": "Url" - }, "useDifferentUrlForPing": { "checkbox": { "label": "Use uma URL diferente para o ping", @@ -678,34 +740,582 @@ "search": "Busque por um aplicativo", "noResults": "Sem resultados", "action": "Selecionar {app}", - "title": "Selecione um aplicativo para adicioná-lo neste painel" + "title": "Selecione um aplicativo para adicioná-lo neste painel", + "toggle": "Clique para selecionar", + "selected": "Selecionado", + "multiple": "Adicionar {count}", + "selectedCount": "{count, plural, one {# selecionou} other {# selecionado}}", + "appsSelected": "{count, plural, one {# app selecionado} other {# apps selecionados}}", + "selectMultiple": "Selecionar múltiplos", + "cancelMultiple": "Sair multi-seleção", + "customApplication": "Aplicativo personalizado", + "application": "Solicitação" }, "create": { "title": "Criar aplicativo", "description": "Criar um novo app ", "action": "Abrir criação de aplicativo" + } + } + }, + "tips": { + "dismiss": "Descartar dica", + "multiSelectApps": "Dica: Mantenha Ctrl / segure para selecionar múltiplos apps de uma só vez" + }, + "customWidget": { + "secretEntry": { + "title": "Configurar fonte API", + "description": "Confirme o URL do servidor e insira as credenciais. Os valores secretos são criptografados por Homarr e nunca retornam ao agente solicitante.", + "loading": "Carregando solicitação segura…", + "applying": "Aplicando esta configuração… Mantenha esta página aberta.", + "saved": "Fonte da API configurada. Você pode fechar esta página.", + "unavailable": "Pedido indisponível", + "saveError": "Não é possível configurar a fonte API", + "source": "Fonte da API: {name}", + "baseUrl": "URL do servidor", + "networkScope": "Acesso à rede", + "save": "Salvar configuração da API", + "expires": "Este pedido único expira em {time}." + }, + "page": { + "list": { + "noResults": "Ainda não há widgets personalizados. Crie o primeiro!", + "noDescription": "Sem descrição", + "enabled": "Ativado", + "disabled": "Desabilitado", + "disabledDescription": "Este widget permanece configurado, mas não carregará em nenhum quadro.", + "requestCount": "{count, plural, one {# pedido} other {# Solicitações}}", + "invalidDefinition": "Definição inválida", + "migrationRequired": "Migração necessária", + "migrationInstructions": "Ações Abertas para copiar ou exportar a definição v1 original para recriação manual. Você também pode usar o prompt de migração com um LLM. Alocamentos de quadros existentes continuam funcionando após a migração.", + "missingCredentials": "{count, plural, one {Credencial ausente} other {# credenciais ausentes}}", + "missingCredentialsDescription": "{count, plural, one {Este widget ainda precisa de uma credencial.} other {Este widget ainda precisa de # credenciais.}} Selecione este emblema para configurar a URL e valores criptografados." }, - "add": "Adicionar app" + "create": { + "title": "Criar widget personalizado", + "subtitle": "Defina uma URL de API, a autenticação e como exibir os dados da resposta." + }, + "tabs": { + "ariaLabel": "Seções de widget personalizadas", + "installed": "Instalado", + "workshop": "Oficina" + } + }, + "action": { + "pasteImportHint": "Cole um widget personalizado completo JSON com Ctrl+V ou Comando+V", + "delete": "Excluir widget personalizado", + "deleteConfirm": "Tem certeza de que deseja excluir \"{name}\"? Esta ação não pode ser desfeita.", + "export": "Exportar", + "duplicate": "Duplicar", + "aiPrompt": "Projete com IA", + "copyAiPrompt": "Copiar prompt de IA", + "enable": "Ativar", + "disable": "Desativar", + "menu": "Ações", + "downloadSkill": "Ver Habilidade Personalizada de Widget", + "publishWorkshop": "Publicar na Oficina", + "migrate": "Migrar widget personalizado", + "configureSources": "Configurar fontes", + "copyLegacyDefinition": "Copiar conteúdo original do widget", + "exportLegacyDefinition": "Exportar conteúdo original do widget", + "copyMigrationPrompt": "Copiar aviso de migração LLM", + "pasteMigration": "Colar widget migrado", + "importMigration": "Importar arquivo JSON migrado" + }, + "sourceSetupDialog": { + "title": "Configurar fontes de widgets", + "description": "Revise onde este widget conecta e adicione ou substitua suas credenciais criptografadas.", + "credentialsRequired": "As solicitações falharão até que as credenciais necessárias sejam adicionadas.", + "save": "Salvar configuração" + }, + "field": { + "description": "Descrição" + }, + "editor": { + "errorBoundary": { + "title": "Algo deu errado" + }, + "action": { + "components": "Componentes", + "format": "Formato", + "insertStarter": "Insert starter", + "redo": "Refazer", + "copied": "Copiado", + "schema": "Esquema" + }, + "reference": { + "minimal": "Exemplo mínimo", + "full": "Exemplo completo" + }, + "componentReference": { + "search": "Pesquisar componentes", + "empty": "Sem componentes correspondentes", + "count": "{count, number} componentes disponíveis" + }, + "status": { + "errors": "{count, number} erros", + "warnings": "{count, number} avisos", + "ready": "Nenhuma issue encontrada", + "position": "Ln {line, number}, Col {column, number}", + "characters": "{count, number} caracteres", + "charactersWithLimit": "{count, number} / {limit, number}" + }, + "diagnostics": { + "title": "Diagnósticos de modelo", + "line": "Linha {line, number}", + "ast": "{value}", + "bindingTypeConflict": "A entrada \"{value}\" é compartilhada por controles com tipos de valores incompatíveis.", + "runtimeBindingTypeConflict": "A entrada \"{value}\" está vinculada como {firstType} e {secondType}.", + "dynamicRequestId": "Um ID de solicitação literal é necessário. IDs de solicitação dinâmica não são aceitos.", + "dynamicInputBinding": "Um nome de entrada literal é necessário para a vinculação.", + "inlineRequestProps": "Componentes de rede aceitam requestId e parâmetros; URLs inline, método, cabeçalho, e props corpo estão bloqueados.", + "invalidRequestManifest": "Solicitações nomeadas devem ser um mapa de solicitação válido. {value}", + "missingRequestId": "Este componente de rede requer uma ID de requisição literal.", + "templateEmpty": "Digite um modelo JSX.", + "templateTooLong": "O modelo excede o limite de 50.000 caracteres.", + "unknownRequest": "Não existe nenhum pedido de nome com ID \"{value}\"." + } + }, + "workbench": { + "configure": "Configurar", + "sectionNavigation": "Seções de widget personalizadas", + "widgetPreview": "Visualização do widget", + "generalInformation": "Informação Geral", + "invalidWidget": "Widget inválido", + "section": { + "general": "Geral", + "sources": "Fontes de API", + "requests": "Solicitações", + "options": "Opções", + "jsx": "JSX", + "preview": "Pré-visualizar" + }, + "status": { + "unsaved": "Alterações não salvas", + "invalid": "Precisa de atenção", + "ready": "Pronto" + }, + "saveError": { + "title": "Widget não foi salvo", + "description": "Corrija estes erros de validação e salve novamente.", + "more": "+{count} erros são mostrados na bancada.", + "errors": "Erros de validação", + "copy": "Copiar erros", + "copied": "Erros copiados" + }, + "action": { + "preview": "Teste e pré-visualização", + "previewLoading": "Solicitações de teste" + }, + "requests": { + "title": "Consultas e ações nomeadas", + "label": "Solicitações", + "description": "Consulta dados de carregamento; ações são executadas apenas após a interação do usuário. Qualquer método HTTP é válido para qualquer tipo." + }, + "options": { + "title": "Opções do widget" + }, + "builder": { + "advancedManifest": "Manifesto bruto avançado", + "advancedJson": "JSON de manifesto avançado", + "manifestFilename": "widget.json", + "request": "Solicite {count, number}", + "requestId": "Solicitar ID", + "type": "Tipo de cliente de download", + "method": "Método", + "source": "Fonte da API", + "run": "Executar", + "runLoad": "Quando o widget carregar", + "runManual": "Do subproduto", + "permission": "Permissão", + "path": "Caminho", + "pathDescription": "Use '{option:name}' para opções de widget e '{param:name}' para valores de chamada.", + "requestDetails": "Query, corpo e comportamento", + "queryValues": "Valores da consulta", + "queryKey": "Chave de consulta", + "queryKeyInvalid": "Use um ID exclusivo que começa com uma letra e contém apenas letras, números - ou _.", + "valueSource": "Fonte do valor", + "literal": "Literal", + "widgetOption": "Opção de widget", + "invocationParameter": "Parâmetro de inserção", + "option": "Alternativa", + "parameterName": "Nome do parâmetro", + "value": "Valor", + "removeQueryValue": "Remover valor da consulta", + "addQueryValue": "Adicionar valor da consulta", + "jsonBody": "Corpo JSON", + "jsonBodyDescription": "Opcional. Insira $option e $param referências em qualquer profundidade.", + "insertOptionReference": "Inserir opção de referência", + "insertParameterReference": "Inserir referência de parâmetro", + "confirmation": "Mensagem de confirmação", + "invalidation": "Atualizado após sucesso", + "invalidationDescription": "IDs de consulta separados por vírgula", + "noAuth": "Enviar sem autenticação de origem", + "moveRequestUp": "Mover requisição para cima", + "moveRequestDown": "Mover solicitação para baixo", + "removeRequest": "Remover requisição", + "addRequest": "Adicionar pedido", + "optionName": "Nome da opção", + "label": "Descrição", + "control": "Controles", + "description": "Descrição", + "default": "Padrão", + "optionDetails": "Restrições e escolhas dinâmicas", + "minimum": "Mínimo", + "maximum": "Máxima", + "step": "Passo", + "choiceLabel": "Rótulo da escolha", + "choiceValue": "Valor da escolha", + "newChoice": "Nova opção", + "addChoice": "Adicionar escolha", + "removeChoice": "Remover escolha", + "choicesRequest": "Carregar escolhas do pedido", + "itemsPath": "Caminho dos itens", + "itemsPathPlaceholder": "itens (opcional)", + "valuePath": "Caminho do valor", + "labelPath": "Caminho do rótulo", + "group": "Grupo", + "advancedOption": "Opção avançada", + "moveOptionUp": "Mover opção para cima", + "moveOptionDown": "Mover opção para baixo", + "removeOption": "Remover opção", + "addOption": "Adicionar alternativa", + "invalidJson": "JSON inválido", + "invalidWidget": "Widget inválido" + }, + "jsx": { + "title": "Modelo JSX", + "label": "Modelo" + }, + "sources": { + "title": "Fontes e credenciais da API", + "newName": "API {count, number}", + "duplicateSourceId": "IDs de origem da API precisam ser únicas.", + "credentialRemoved": "Credencial removida", + "credentialRemovedDescription": "O valor armazenado foi excluído.", + "primary": "API primária", + "id": "ID da fonte", + "name": "Nome do trabalho", + "baseUrl": "URL Base", + "baseUrlError": { + "invalid": "Insira uma URL completa.", + "protocol": "Use uma URL HTTP ou HTTPS.", + "credentials": "Remova o nome de usuário e a senha desta URL. Configure as credenciais abaixo.", + "queryOrFragment": "Remover a cadeia de caracteres de consulta ou fragmento desta URL base. Adicione valores de consulta a uma requisição nomeada." + }, + "networkScope": "Acesso à rede", + "authentication": "Autenticação", + "headerName": "Nome do Cabeçalho", + "queryParameter": "Parâmetro de consulta", + "configured": "Configurado — insira uma substituição", + "clear": "Limpar", + "remove": "Remover origem e suas solicitações", + "advanced": "Avançado", + "add": "Adicionar outra fonte de API", + "sourceType": "Integração", + "manualSource": "HTTP API", + "existingIntegration": "Integração existente", + "integrationType": "Tipo de integração", + "selectIntegration": "Integração configurada", + "noIntegrations": "Nenhuma integração correspondente disponível", + "integrationUnavailable": "A integração selecionada não está mais disponível. Selecione outra integração.", + "integrationDescription": "Usa a URL de integração salva e as credenciais. As alterações aplicam acesso total de integração é necessário para executar as solicitações." + }, + "ai": { + "title": "Criar ou corrigir com qualquer IA", + "description": "Adicione primeiro um URL de documentação de API se tiver uma. Para correções, execute a visualização se possível. Copie o prompt para qualquer IA; ele pode pedir detalhes ausentes. Cole seu JSON final aqui.", + "request": "O que este widget deve fazer?", + "documentationUrl": "URL da documentação da API (opcional)", + "paste": "Colar", + "response": "Resposta IA", + "manualCopyDescription": "Acesso à área de transferência não está disponível. Selecione o prompt abaixo e copie-o manualmente.", + "manualPasteDescription": "O acesso à área de transferência está indisponível ou a resposta copiada precisa de correção. Cole a resposta JSON da IA aqui.", + "selectAll": "Selecionar tudo", + "loadResponse": "Carregar resposta", + "loaded": "Widget carregado no editor", + "invalidResponse": "Área de transferência não contém um widget v2 válido", + "invalidResponseDetail": "A resposta IA é inválida: {message}" + }, + "preview": { + "invalid": "Corrigir erros de validação para pré-visualizar este widget.", + "fixtureError": "Erro de pré-visualização", + "requestData": "Solicitar dados", + "status": { + "idle": "Os pedidos não foram testados", + "loading": "Solicitações de teste", + "success": "Todas as solicitações de carga foram bem-sucedidas", + "error": "Uma ou mais solicitações de carregamento falharam" + }, + "result": { + "loading": { + "title": "Testando solicitações de API", + "description": "Homarr está criando uma sessão de pré-visualização e carregando os dados do widget." + }, + "success": { + "title": "Pré-visualização pronta", + "description": "{succeeded, plural, =0 {Este widget não tem solicitações de carregamento.} one {# pedido de carregamento bem-sucedido} other {# carregamento das solicitações bem-sucedido.}} Abra os dados para inspecionar a resposta." + }, + "error": { + "title": "Visualização concluída com erros de requisição", + "description": "{succeeded, number} sucedeu e {failed, number} falhou. Abra os dados para os detalhes de resposta e de erro." + } + }, + "instanceOptions": "Opções de instância", + "liveActions": "Executar ações contra a API configurada", + "liveActionsDescription": "Desligar é uma simulação segura. Virar isto afecta o serviço real.", + "noActions": "Nenhuma ação foi definida.", + "containedFailures": "Falhas de execução estão contidas dentro deste widget. Pedidos de revistas nunca incluem valores secretos.", + "validation": { + "title": "Validação", + "ready": "A definição de widget é válida." + }, + "accessibility": { + "title": "Verificações de acessibilidade", + "ready": "Nenhuma omissão de acessibilidade comum detectada.", + "pending": "Verificações de acessibilidade serão executadas quando a definição do widget for válida.", + "imageAlt": "Adicionar texto alternativo a cada imagem, usando um alt vazio somente para imagens decorativas.", + "actionIconLabel": "Adicionar um rótulo aria-label ou título a cada ActionIcon.", + "inputLabel": "Adicione um rótulo visível ou um nome acessível a cada entrada." + }, + "journal": "Diário de solicitação anulado", + "actionParameters": "Parâmetros de ação (JSON)", + "invalidParameters": "Use os tipos de string declarada, número e parâmetro booleano.", + "runDestructive": "Executar ação destrutiva", + "runAction": "Executar ação", + "deleteConfirmation": "Esta ação de visualização altera dados remotos através da API configurada.", + "simulated": "Simulação de ação", + "httpStatus": "HTTP {status, number}", + "tab": { + "widget": "Widget", + "data": "Dado", + "options": "Opções", + "state": "Estado do trabalho", + "actions": "Controles", + "diagnostics": "Diagnóstico" + }, + "size": { + "compact": "Compacta", + "standard": "Padrão", + "wide": "Ampla" + }, + "fixture": { + "live": "Publicado", + "loading": "Carregando", + "empty": "Vazio", + "error": "Erro" + } + } + }, + "preview": { + "request": { + "permission": { + "view": "Visualizar", + "modify": "Modificação", + "full": "Completo" + } + } + }, + "notification": { + "created": "Widget \"{name}\" criado com sucesso.", + "updated": "Widget \"{name}\" atualizado com sucesso.", + "deleted": "Widget \"{name}\" excluído.", + "imported": "Widget importado com sucesso.", + "migrated": "Widget legado migrado com sucesso. Os posicionamentos do tabuleiro existentes agora usam a definição v2.", + "migrationError": "Falha ao migrar o widget legado. Certifique-se de que o arquivo utilize o esquema homarr-custom-widget-v2.", + "legacyDefinitionCopied": "O conteúdo original do widget foi copiado. Valores de credenciais armazenados não estão incluídos.", + "legacyDefinitionCopyError": "Falha ao copiar o conteúdo do widget original.", + "migrationPromptCopied": "Um prompt de migração aninhado foi copiado. Cole em um LLM, copie sua única resposta JSON e então escolha Colar widget aqui.", + "migrationPromptCopyError": "Falha ao copiar o prompt de migração.", + "sourcesConfigured": "Fontes e credenciais do widget salvas.", + "sourceConfigurationError": "Falha ao configurar fontes de widgets.", + "aiPromptCopiedWithCount": "Aviso copiado para a área de transferência ({count, number} caracteres).", + "aiPromptCopyError": "Falha ao copiar o prompt para a área de transferência. Seu navegador pode não oferecer suporte a esse recurso.", + "aiPromptSent": "Prompt enviada. Você pode continuar editando enquanto o assistente trabalha em segundo plano.", + "updateError": "Falha ao atualizar o widget. Suas alterações não foram salvas.", + "importError": "Falha ao importar o widget. Verifique se o arquivo é uma exportação JSON válida de widget personalizado.", + "exportError": "Falha ao exportar o widget.", + "duplicated": "Widget \"{name}\" duplicado.", + "duplicateError": "Falha ao duplicar o widget.", + "toggleError": "Falha ao alternar o status do widget.", + "deleteError": "Falha ao excluir o widget.", + "previewError": "Falha ao buscar a pré-visualização. Verifique a URL e tente novamente." + }, + "importReview": { + "title": "Revisar importação de widget personalizada", + "description": "Verificar onde este widget se conecta e o que a placa acessar seus controles requer antes de importá-lo.", + "migrationTitle": "Revisar substituição v2 migrada", + "migrationDescription": "Revise e confirme esta definição gerada de v2. Confirmando que atomicamente substitui o registro v1 preservado mantendo os posicionamentos do quadro vinculados ao mesmo ID de widget.", + "fileLabel": "Escolha um arquivo de widget JSON personalizado", + "name": "Nome do trabalho", + "origin": "Origem base", + "authentication": "Autenticação", + "networkScope": "Escopo de rede", + "methods": "Métodos HTTP", + "permissions": "Permissões necessárias do fórum", + "sourceSetup": { + "title": "Configurar fontes de API", + "description": "Confirme onde este widget conecta e adiciona credenciais. URLs privadas e de loopback são específicas para a sua instalação Homarr.", + "suggestedUrl": "URL sugerida", + "confirmUrl": "Eu confirmo que a URL do servidor está correta para a minha instalação Homarr", + "ready": "URL pronta", + "needsUrl": "Confirmar URL", + "credentialsMissing": "Faltam credenciais", + "credentialsOptional": "Você pode instalar sem credenciais e configurá-las mais tarde, mas as solicitações irão falhar até que sejam adicionadas." + }, + "actionWarning": { + "title": "Este widget pode alterar dados remotos", + "description": "Revise todas as ações nomeadas, as credenciais herdadas e a confirmação destrutiva após a importação. Os segredos não estão incluídos no arquivo." + }, + "cancel": "Cancelar Importação", + "confirm": "Importar widget", + "confirmMigration": "Confirmar substituição v2" + }, + "secret": { + "apiKey": "Chave de API ou token", + "username": "Nome de usuário", + "password": "Senha", + "savedPlaceholder": "••••••• (salvo, deixe vazio para manter)" + } + }, + "workshop": { + "title": "Oficina", + "browseWorkshop": "Navegar na Oficina", + "openCommunity": "Abrir Oficina", + "openOnWorkshop": "Abrir {title} no site da Oficina", + "back": "Voltar à Oficina", + "search": "Widgets de pesquisa", + "searchCss": "Pesquisar temas CSS", + "sort": "Ordenar", + "sortTop": "Melhores avaliados", + "sortNewest": "Recentes", + "listAriaLabel": "Widgets da oficina", + "listAriaLabelCss": "Temas CSS da Oficina", + "empty": "Nenhum widget corresponde a esta pesquisa.", + "emptyDescription": "Widgets comunitários publicados na Oficina aparecem aqui.", + "emptyFilteredTitle": "Nenhum widget corresponde a esta pesquisa", + "emptyFilteredDescription": "Nenhum widget da oficina corresponde \"{search}\".", + "emptyCss": "Nenhum tema CSS corresponde a essa pesquisa.", + "unavailableTitle": "A Oficina Homarr parece não estar disponível", + "unavailable": "O serviço da comunidade pode estar temporariamente fora do ar. Tente novamente daqui a pouco. Os seus widgets instalados não são afetados.", + "loadError": "Esta submissão não pôde ser carregada.", + "noDescription": "Sem descrição", + "author": "por {name}", + "communityMember": "Membro da comunidade", + "outdated": "Desatualizado", + "outdatedWarning": "O autor marcou esta submissão como desatualizada. Revise-a com atenção antes de importá-la.", + "score": "Pontuação: {count, number}", + "upvote": "Upvote", + "downvote": "Desaprovar", + "voteError": "Não foi possível salvar o voto.", + "signIn": "Entrar com GitHub", + "signInError": "Falha ao entrar no GitHub. Verifique se o provedor OAuth da Workshop está configurado e se os popups são permitidos.", + "signOut": "Encerrar sessão", + "signInHint": "Entrar para votar ou reportar. Instalar não requer uma conta de oficina.", + "securityNotice": "Widgets de oficina podem chamar suas fontes declaradas de API e executar ações declaradas com credenciais configuradas localmente. Segredos nunca são incluídos.", + "securityNoticeCss": "O CSS da comunidade pode alterar a aparência e usabilidade de um quadro. Revise-o antes de importar; nada é salvo até salvar as configurações do tabuleiro.", + "install": "Instale", + "installReviewTitle": "Revise antes de instalar", + "installError": "Este widget não pode ser instalado", + "installErrorDescription": "O envio da oficina não é um widget JSX v2 personalizado.", + "useCss": "Import CSS", + "importCss": "Importar CSS da Oficina", + "importCssConfirm": "Substituir o atual CSS personalizado com \"{title}\"? Nada é salvo até que você salve as configurações do painel.", + "screenshotAlt": "{title} captura de tela {count, number}", + "screenshotViewer": "{title} visualizador de capturas", + "screenshotsLabel": "{title} capturas de tela", + "zoomScreenshot": "Ver tamanho total", + "previousScreenshot": "Imagem anterior", + "nextScreenshot": "Próxima captura de tela", + "showScreenshotThumbnails": "Mostrar miniaturas de captura", + "hideScreenshotThumbnails": "Ocultar miniaturas de imagem", + "closeScreenshotViewer": "Fechar visualizador de captura", + "technicalDetails": "Detalhes técnicos", + "sourceCode": "Entrada de oficina", + "export": "Exportação", + "report": "Denunciar", + "reportTitle": "Denunciar submissão", + "reportReason": "Motivo", + "reportExplanation": "O que os moderadores da Oficina devem saber?", + "reportSend": "Enviar relatório", + "reportSent": "Denúncia enviada", + "reportSentDescription": "Moderadores da oficina agora podem revisar esta submissão.", + "reportCount": "{count, plural, one {# reportar} other {# reporta}}", + "reportWarning": "{count, plural, one {Esta submissão tem # denúncia comunitária aberta.} other {Esta submissão tem # denúncias comunitárias abertas.}} Ela continua instalável, mas você deve revisar seu conteúdo primeiro.", + "reportVisibility": "Detalhes do relatório são visíveis apenas para o autor e administradores da oficina desta submissão.", + "reportCategory": { + "outdated": "Desatualizado ou não funciona mais", + "malicious": "Malicioso", + "spam": "Spam", + "copyright": "Direitos autorais", + "inappropriate": "Inapropriado", + "other": "Outras" + }, + "publish": { + "title": "Publicar na Oficina", + "introTitle": "Compartilhe este widget com a comunidade", + "introDescription": "A Homarr exporta uma cópia sem credencial do widget atual. Adicione detalhes claros na listagem para que as pessoas saibam o que faz antes de instalá-lo.", + "listingDetails": "Listagem de oficina", + "listingDetailsDescription": "Estes detalhes aparecem publicamente ao lado da definição de widget exportado.", + "success": "Publicado imediatamente. Membros da Comunidade podem instalar e denunciar este widget.", + "successTitle": "Seu widget está ao vivo", + "manageDescription": "Abra o envio para atualizar seu anúncio, relatórios de revisão, marcá-lo como desatualizado ou excluí-lo. O gerenciamento de submissão é tratado diretamente no site da Oficina.", + "viewSubmission": "Visualizar e gerenciar submissões", + "done": "Concluído", + "signInHint": "Entre para publicar sob sua identidade na Oficina.", + "titleField": "Título", + "descriptionField": "Descrição", + "screenshots": "Screenshots", + "screenshotsDescription": "Até cinco imagens PNG, JPEG ou WebP", + "screenshotsPlaceholder": "Escolher capturas", + "invalidScreenshot": "Use PNG, JPEG ou imagens WebP menores que {maxSize} cada.", + "privateSourceWarning": "Este widget contém URLs de origem privada para: {sources}. Substitua endereços pessoais ou IP por espaços reservados de serviço seguros antes de publicar.", + "reviewSourcesTitle": "Revisar URLs de origem privada", + "privateSourceConfirmation": "Eu revisei estas URLs de origem e elas não expõem detalhes de infraestrutura privada", + "action": "Publicar agora", + "publicationNote": "Publicação é imediata. Você pode gerenciar a submissão depois na Oficina.", + "definitionChanged": "O widget mudou enquanto a publicação estava sendo preparada. Revise suas URLs de fonte privada novamente, e tente novamente.", + "error": "Publicação falhou" } }, "integration": { + "completion": { + "modalTitle": "Serviço pronto", + "title": "{name} está conectado", + "description": "A conexão passou no teste. Escolha o que mostrar neste tabuleiro.", + "connectionReady": "Conexão de serviço está pronta", + "appReady": "Atalho do aplicativo está pronto", + "compatibleWidgets": "{count, plural, =0 {Não há widgets compatíveis} one {# widget compatível} other {# widgets compatíveis}} disponível", + "chooseWidget": "Escolha o widget", + "recipes": { + "title": "Recomendado para este board", + "description": "Com base em serviços e widgets conectados já existe nesta tabuleira.", + "newConnectionReason": "Agora disponível através {integration}", + "existingConnectionReason": "Funciona com um serviço que você já está conectado.", + "dismiss": "Descartar recomendações para este serviço neste board" + } + }, "page": { "list": { - "title": "Integrações", + "ariaLabel": "Integrações configuradas", "search": "Buscar integrações", + "scopedNote": "Mostrando apenas as integrações que você tem permissão para gerenciar.", "noResults": { - "title": "Ainda não existem integrações" + "title": "Ainda não existem integrações", + "description": "Conecte um serviço para usar seus dados e ações em widgets da página inicial.", + "action": "Crie sua primeira integração", + "filteredTitle": "Nenhuma integração corresponde à sua pesquisa", + "filteredDescription": "Nenhuma integração corresponde \"{search}\". Tente outro nome, tipo ou URL.", + "createOnlyTitle": "Você só pode adicionar integrações", + "createOnlyDescription": "Suas permissões permitem que você crie integrações, mas não gerencie as existentes. Peça a um administrador para acessar as que você precisa." } }, "create": { "title": "Nova integração {name}", "notification": { "success": { - "title": "Criação realizada com sucesso", "message": "A integração foi criada com sucesso" }, "error": { - "title": "Criação falhou", "message": "A integração não pôde ser criada" } }, @@ -729,11 +1339,9 @@ "title": "Editar integração {name}", "notification": { "success": { - "title": "Alterações aplicadas com sucesso", "message": "A integração foi salva com sucesso" }, "error": { - "title": "Não foi possível aplicar as alterações", "message": "A integração não pôde ser salva" } }, @@ -750,23 +1358,15 @@ "message": "Tem certeza que deseja excluir a integração {name}?", "notification": { "success": { - "title": "Exclusão realizada com sucesso", "message": "A integração foi excluída com sucesso" }, "error": { - "title": "Exclusão falhou", "message": "Não foi possível deletar a integração" } } } }, "field": { - "name": { - "label": "Nome" - }, - "url": { - "label": "Url" - }, "attemptSearchEngineCreation": { "label": "Criar mecanismo de busca", "description": "A integração \"{kind}\" pode ser usada com os mecanismos de busca. Marque isso para configurar automaticamente o mecanismo de busca." @@ -778,6 +1378,10 @@ "label": "Criar aplicativo", "description": "Crie um aplicativo com o mesmo nome e ícone da integração. Deixe o campo de entrada abaixo vazio para criar o aplicativo com a URL de integração." }, + "linkApp": { + "label": "Vincular um aplicativo existente", + "description": "Conecte essa integração a um aplicativo que você já pode usar." + }, "appHref": { "placeholder": "URL de app personalizada" }, @@ -791,7 +1395,11 @@ "grid": { "widgetCount": "{count} widgets", "noWidgets": "Nenhum widget", - "detected": "Detectado via Docker" + "detected": "Detectado via Docker", + "connected": "{count, plural, one {# conectado} other {# conectado}}", + "tiedWidgets": "Widgets amarrados", + "more": "+ Mais{count}", + "loadError": "Não foi possível carregar as integrações. Tente novamente antes de criar uma nova conexão." }, "category": { "dnsHole": "DNS", @@ -822,7 +1430,10 @@ "analytics": "Análises", "vpn": "VPN", "mediaLibrary": "Biblioteca de Mídia", - "uptimeMonitoring": "Monitoramento de Uptime" + "uptimeMonitoring": "Monitoramento de Uptime", + "beszel": "Beszel", + "systemMonitoring": "Sistema de Monitoramento", + "security": "Segurança" }, "testConnection": { "action": { @@ -1107,6 +1718,22 @@ "slug": { "label": "Slug da página de status", "newLabel": "Novo slug da página de status" + }, + "wazuhIndexerUrl": { + "label": "URL do Indexador", + "newLabel": "URL do novo indexador" + }, + "wazuhIndexerUsername": { + "label": "Usuário Indexador", + "newLabel": "Novo nome de usuário indexador" + }, + "wazuhIndexerPassword": { + "label": "Senha do indexador", + "newLabel": "Nova senha do indexador" + }, + "wazuhDashboardUrl": { + "label": "URL do Painel (opcional)", + "newLabel": "URL do novo dashboard" } } }, @@ -1115,54 +1742,19 @@ "interact": "Interagir com integrações", "full": "Acesso completo à integração" }, - "audiobookshelf": { - "name": "Audiobookshelf", - "description": "Servidor auto-hospedado de audiolivros e podcasts" - }, - "navidrome": { - "name": "Navidrome", - "description": "Servidor de streaming de música auto-hospedado com compatibilidade com a API Subsonic" - }, - "uptimeKuma": { - "name": "Uptime Kuma", - "description": "Monitoramento de uptime auto-hospedado com páginas de status públicas", - "secret": { - "slug": { - "description": "O slug da sua página de status pública. O padrão é \"default\" se não definido." - }, - "apiKey": { - "description": "Chave de API opcional para acesso autenticado a /metrics" - } - } - }, - "traefik": { - "name": "Traefik", - "description": "Proxy reverso e balanceador de carga nativos da nuvem" - }, - "paperlessNgx": { - "name": "Paperless-ngx", - "description": "Sistema de gerenciamento de documentos para arquivamento e organização de documentos digitalizados" - }, - "patchmon": { - "name": "PatchMon", - "description": "Gerenciamento e monitoramento de patches para hosts Linux" - }, - "bazarr": { - "name": "Bazarr", - "description": "Aplicativo complementar ao Sonarr e Radarr que gerencia e baixa legendas" - }, - "wud": { - "name": "O Docker", - "description": "Monitora qual dos seus contêineres Docker tem atualizações de imagem disponíveis" + "llamacpp": { + "name": "llama.cpp", + "description": "Monitore um servidor llama-server local: saúde, modelo e métricas de geração" } }, "media": { "plural": "Mídias", "search": "Buscar uma mídia", "field": { - "name": "Nome", + "preview": "Pré-visualizar", "size": "Tamanho", - "creator": "Criador" + "creator": "Criador", + "actions": "Controles" }, "action": { "upload": { @@ -1190,10 +1782,12 @@ } }, "copy": { - "label": "Copiar URL" + "label": "Copiar URL", + "labelNamed": "Copiar URL para {name}" }, "open": { - "label": "Abrir mídia" + "label": "Abrir mídia", + "labelNamed": "Abrir {name}" } }, "noResults": { @@ -1208,7 +1802,6 @@ "add": "Adicionar", "apply": "Aplicar", "backToOverview": "Voltar à visão geral", - "skip": "Pular", "change": "Alterar", "create": "Criar", "createAnother": "Criar e recomeçar", @@ -1231,16 +1824,31 @@ "tryAgain": "Tente novamente", "loading": "Carregando", "show": "Exibir", - "hide": "Ocultar" + "hide": "Ocultar", + "undo": "Desfazer", + "editNamed": "Editar {name}", + "deleteNamed": "Excluir {name}", + "clearSearch": "Limpar pesquisa", + "copy": "copiar", + "copied": "Copiado", + "refresh": "Atualizar" + }, + "pagination": { + "pageOf": "Página {page} de {totalPages}" }, "here": "aqui", + "serviceUrlTemplate": { + "serverTitle": "Endereço normal do servidor", + "urlModeLabel": "Padrão de serviço", + "hostPort": "Mesmo hospedeiro, portas diferentes", + "subdomain": "Um subdomínio por serviço", + "path": "Um caminho por serviço" + }, "iconPicker": { "label": "URL do ícone", + "description": "Procure na biblioteca, cole uma URL da imagem ou envie um arquivo.", "header": "Digite o nome ou os objetos para filtrar os ícones... O Homarr pesquisará {countIcons} ícones para você.", "headerLoading": "Pesquisar imagens por nome", - "noResults": "Nenhum ícone corresponde a \"{search}\".", - "error": "Não foi possível carregar os ícones.", - "description": "Procure na biblioteca, cole uma URL da imagem ou envie um arquivo.", "clear": "Limpar imagem", "uploadImage": "Upload de imagem", "results": "Resultados da busca por imagem", @@ -1249,7 +1857,9 @@ "otherImages": "Outras imagens", "urlLoading": "Verificando imagem…", "urlReady": "A imagem está pronta para uso", - "urlError": "Esta imagem não pôde ser carregada. Verifique a URL e tente novamente." + "urlError": "Esta imagem não pôde ser carregada. Verifique a URL e tente novamente.", + "noResults": "Nenhum ícone corresponde a \"{search}\".", + "error": "Não foi possível carregar os ícones." }, "colorScheme": { "options": { @@ -1261,7 +1871,6 @@ "information": { "min": "Mínimo", "max": "Máximo", - "days": "Dias", "hours": "Horas", "minutes": "Minutos" }, @@ -1298,16 +1907,16 @@ }, "userAvatar": { "menu": { - "switchToDarkMode": "Alternar para o modo escuro", - "switchToLightMode": "Alternar para o modo claro", + "open": "Abrir menu da conta", "management": "Gerenciamento", - "docker": "Docker", "preferences": "Suas preferências", "logout": "Sair", "login": "“Login”", "homeBoard": "Seu painel inicial", - "loggedOut": "Sessão encerrada", - "updateAvailable": "{countUpdates} atualizações disponíveis: {tag}" + "updateAvailable": "{countUpdates} atualizações disponíveis: {tag}", + "assistant": "Assistente", + "assistantThinking": "Pensando", + "modifier": "Mod" } }, "dangerZone": "Zona de risco", @@ -1355,75 +1964,85 @@ "kilometersPerHour": "km/h", "milesPerHour": "mph" } + }, + "widgetQuery": { + "loading": "Carregando dados do widget" + }, + "total": "Total:", + "filesystemUsage": "{count, plural, one {Mostre o uso para # sistemas de arquivos} other {Mostre o uso para # sistemas de arquivos}}", + "field": { + "name": "Nome do trabalho" + }, + "label": { + "new": "Novo" + }, + "entity": { + "apps": "Aplicativos", + "boards": "Placas", + "certificates": "Certificados", + "customWidgets": "Widgets personalizados", + "groups": "Grupos", + "integrations": "Integrações", + "invites": "Convites", + "logs": "Registros", + "media": "Mídia", + "searchEngines": "Mecanismos de busca", + "tasks": "Tarefas", + "users": "Usuários" } }, "section": { - "dynamic": { + "option": { + "showLabel": { + "label": "Mostrar etiqueta", + "description": "Exibe o rótulo do recipiente acima do seu conteúdo." + }, + "collapsible": { + "label": "Permitir colapso", + "description": "Deixar que os espectadores expandam e frustram este contêiner." + }, + "showOpenAll": { + "label": "Mostrar ação open-all", + "description": "Mostrar uma ação que abre todos os aplicativos neste contêiner em novas abas." + }, + "scrollable": { + "label": "Rolável", + "description": "Mantenha este contêiner em seu tamanho definido e role seu conteúdo em vez de crescer." + } + }, + "action": { + "openAllInNewTabsFor": "Abrir todos os aplicativos no {name} nas abas" + }, + "openAllInNewTabs": { + "title": "Abrir tudo em abas", + "text": "Alguns navegadores podem bloquear a abertura em massa de abas por motivos de segurança. O Homarr não conseguiu abrir todas as janelas porque seu navegador bloqueou esta ação. Por favor, permita \"Abrir janelas pop-up\" e tente novamente." + }, + "container": { + "untitled": "Recipiente sem título", "action": { - "create": "Nova seção dinâmica", - "remove": "Remover seção dinâmica" + "create": "Novo recipiente", + "remove": "Remover contêiner", + "expand": "Expandir", + "collapse": "Recolher" }, "option": { "title": { "label": "Título" }, "customCssClasses": { - "label": "Classes CSS personalizadas" + "label": "Classes CSS customizadas" }, "borderColor": { "label": "Cor da borda" } }, "remove": { - "title": "Remover seção dinâmica", - "message": "Tem certeza de que deseja remover esta seção dinâmica? Os itens serão movidos para o mesmo local na seção pai." - } - }, - "category": { - "field": { - "name": { - "label": "Nome" - } - }, - "action": { - "create": "Nova categoria", - "edit": "Renomear categoria", - "remove": "Remover categoria", - "moveUp": "Subir", - "moveDown": "Mover para baixo", - "createAbove": "Nova categoria acima", - "createBelow": "Nova categoria abaixo", - "openAllInNewTabs": "Abrir tudo em abas" - }, - "create": { - "title": "Nova categoria", - "submit": "Adicionar categoria" - }, - "remove": { - "title": "Remover categoria", - "message": "Tem certeza que deseja deletar a categoria {name}?" - }, - "edit": { - "title": "Renomear categoria", - "submit": "Renomear categoria" - }, - "menu": { - "label": { - "create": "Nova categoria", - "changePosition": "Mudar de posição", - "settings": "Configurações" - } - }, - "openAllInNewTabs": { - "title": "Abrir tudo em abas", - "text": "Alguns navegadores podem bloquear a abertura em massa de abas por motivos de segurança. O Homarr não conseguiu abrir todas as janelas porque seu navegador bloqueou esta ação. Permita \"Abrir janelas pop-up\" e tente novamente." + "message": "Remover este container? Seu conteúdo se moverá para a área ao redor." } } }, "item": { "action": { - "create": "Novo item", - "import": "Importar item", "edit": "Editar item", "moveResize": "Mover / redimensionar item", "duplicate": "Duplicar item", @@ -1432,7 +2051,7 @@ "menu": { "label": { "settings": "Configurações", - "refresh": "Atualizar", + "settingsFor": "Configurações para {name}", "options": "Opções", "actions": "Ações" }, @@ -1441,21 +2060,96 @@ "error": "Erro", "loading": "Carregando", "idle": "Ocioso" + }, + "notification": { + "saveError": { + "title": "Não foi possível salvar o widget", + "message": "As alterações no widget foram revertidas" + } } }, "create": { "title": "Escolha o item a adicionar", "search": "Filtrar itens", - "addToBoard": "Adicionar ao painel" + "addToBoard": "Adicionar ao painel", + "addAtPosition": "Adicionar item aqui", + "destination": { + "label": "Adicionar a", + "description": "Escolha onde o widget deve aparecer. Você ainda pode movê-lo mais tarde.", + "mainCanvas": "Tela principal", + "leftRail": "Trilho esquerdo", + "rightRail": "Trilho direito" + }, + "connectionStatus": { + "ready": "Pronto", + "needsSetup": "Precisa de configuração", + "noConnectionRequired": "Nenhuma conexão necessária" + }, + "customWidget": "Widget personalizado", + "standalone": "Autônomo", + "missingIntegration": { + "title": "Conecte um serviço primeiro", + "noPermission": "Este widget precisa de uma conexão de serviço compatível. Peça a um administrador para conectar um, e tente novamente." + }, + "notification": { + "success": { + "title": "Widget adicionado", + "message": "{name} foi adicionado a este board.", + "relocatedMessage": "{name} foi adicionado ao {destination} porque o destino selecionado não estava disponível." + }, + "error": { + "title": "Não é possível adicionar item", + "message": "O item não pode ser adicionado a este board" + } + } + }, + "selection": { + "summary": "{count, plural, one {# item selecionado} other {# itens selecionados}}", + "selected": "{count, plural, one {# selecionou} other {# selecionado}}", + "copy": "copiar", + "copied": "{count, plural, one {# item copiado para a área de transferência} other {# itens copiados para a área de transferência}}", + "copyError": "Os itens selecionados não puderam ser copiados. Seu navegador não pode permitir o acesso à área de transferência.", + "paste": "Colar", + "pasteShortcut": "Cole os itens copiados aqui (Ctrl / ├+ V)", + "pasted": "{count, plural, one {# item colou} other {# itens colados}}", + "pasteError": "A área de transferência não pôde ser lida. É possível que seu navegador não permita acesso à área de transferência.", + "pasteInvalid": "A área de transferência não contém itens válidos do quadro Homarr.", + "pasteUnavailable": "Os itens copiados não cabem neste tabuleiro.", + "removed": "{count, plural, one {# item removido} other {# itens removidos}}", + "move": "Mover-se", + "moveTo": "Mover itens selecionados", + "delete": "Apagar", + "clear": "Limpar seleção", + "clearShortcut": "Limpar seleção (Escape)", + "saveErrorTitle": "Não é possível atualizar itens", + "saveErrorMessage": "As alterações não puderam ser salvas. O board foi atualizado.", + "moveUnavailableTitle": "Não é possível mover os itens selecionados", + "moveUnavailableMessage": "O destino não tem espaço suficiente para toda a seleção." }, "moveResize": { "title": "Mover / redimensionar item", + "entryLabel": "{name}, coluna {column}, linha {row}", + "target": { + "numbered": "{name}, destino {index}", + "located": "{name}, {location}, destino {index}" + }, + "keyboard": { + "instructions": "Pressione Enter ou Espaço para iniciar a edição do teclado. Use as teclas de seta para mover, Shift + as setas do teclado para redimensionar e Escape para parar.", + "started": "Edição do teclado iniciada. Use as setas para mover, Shift + as setas do teclado para redimensionar e Escape para parar.", + "stopped": "Edição de teclado interrompida.", + "boundary": "Essa mudança não se encaixa nesta seção." + }, "field": { + "section": { + "label": "Seção ou trilho" + }, "width": { - "label": "Largura" + "label": "Largura", + "shortLabel": "PO" }, "height": { - "label": "Altura" + "label": "Altura", + "shortLabel": "A" }, "xOffset": { "label": "Deslocamento X" @@ -1469,18 +2163,36 @@ "title": "Editar item", "tab": { "widget": "Editar widget", - "app": "Editar aplicativo" + "app": "Editar aplicativo", + "integration": "Editar integração" }, "app": { "propagationNotice": "As alterações neste aplicativo serão aplicadas em todos os locais onde ele é usado em todos os painéis." }, + "integration": { + "action": "Editar conexão", + "description": "Teste ou repare uma conexão selecionada sem sair deste widget.", + "editLabel": "Editar integração {name}", + "fullAccessRequired": "Acesso total necessário", + "propagationNotice": "As alterações nesta integração são aplicadas em todos os lugares em que for utilizada. A conexão é testada antes de ser salva.", + "loading": "Carregando integração", + "loadError": "Não foi possível carregar esta integração. Tente novamente antes de alterar suas configurações de conexão." + }, + "preview": { + "integrationRequired": "Escolha um contato para visualizar este widget.", + "size": "Tamanho do arquivo" + }, + "settings": { + "label": "Configurações do widget" + }, "advancedOptions": { "label": "Opções avançadas", "title": "Opções avançadas de itens" }, "field": { "integrations": { - "label": "Integrações" + "label": "Integrações", + "removeLabel": "Remover integração {name}" }, "title": { "label": "Título" @@ -1494,17 +2206,18 @@ } }, "remove": { - "title": "Remover item", "message": "Tem certeza que deseja remover esse item?" + }, + "advancedFocus": { + "open": "Abrir visualização avançada", + "close": "Fechar visualização avançada", + "label": "{widget} visão avançada" } }, "widget": { "integrationSelect": { "configureIntegrationFirst": "Conecte uma integração primeiro", - "loading": "Carregando...", - "placeholder": "Selecione uma opção", - "noResults": "Nenhum resultado encontrado", - "loadError": "Falha ao carregar as opções" + "placeholder": "Selecione uma opção" }, "app": { "name": "Aplicativo", @@ -1513,9 +2226,6 @@ "appId": { "label": "Escolher aplicativo" }, - "openInNewTab": { - "label": "Abrir em nova guia" - }, "showTitle": { "label": "Exibir o nome do aplicativo" }, @@ -1523,11 +2233,8 @@ "label": "Habilitar verificação de status" }, "layout": { - "label": "Layout", "option": { - "row": "Horizontal", "row-reverse": "Horizontal (invertido)", - "column": "Vertical", "column-reverse": "Vertical (invertido)" } }, @@ -1552,23 +2259,60 @@ "name": "Marcadores", "description": "Exibe múltiplos links de aplicativos", "option": { - "title": { - "label": "Título" + "showTitle": { + "label": "Mostrar título do widget" + }, + "titleSize": { + "label": "Tamanho do título do widget (px)" }, "layout": { "label": "Layout", "option": { - "row": { - "label": "Horizontal" - }, - "column": { - "label": "Vertical" - }, - "grid": { - "label": "Grade" + "adaptive": { + "label": "Adaptativo" }, "gridHorizontal": { "label": "Grade horizontal" + }, + "icons": { + "label": "Ícones" + } + } + }, + "variant": { + "label": "Aparência", + "option": { + "soft": { + "label": "Suave" + }, + "filled": { + "label": "Preenchido" + }, + "outline": { + "label": "Contorno" + }, + "plain": { + "label": "Simples" + } + } + }, + "spacing": { + "label": "Espaçamento entre cartas", + "option": { + "xs": { + "label": "Extra pequeno" + }, + "sm": { + "label": "Pequeno" + }, + "md": { + "label": "Médio" + }, + "lg": { + "label": "Grande" + }, + "xl": { + "label": "Extra grande" } } }, @@ -1581,17 +2325,28 @@ "hideHostname": { "label": "Ocultar nomes de host" }, - "openNewTab": { - "label": "Abrir em nova guia" - }, "withBorder": { "label": "Exibir borda" }, + "grow": { + "label": "Expanda cartões para preencher linha" + }, + "customUrls": { + "label": "Links personalizados" + }, "items": { "label": "Marcadores", - "add": "Adicionar marcador" + "remove": "Remover marcador favorito", + "apps": { + "label": "Adicionar favoritos", + "description": "Cole URLs ou encontre apps existentes. Arraste os favoritos abaixo para reordená-los.", + "placeholder": "Colar URLs ou aplicativos de pesquisa", + "addUrl": "Adicione esta URL", + "hint": "Pressione Enter para adicionar uma URL. Cole URLs separados por vírgula ou uma por linha para adicionar vários." + } } - } + }, + "empty": "Adicione uma URL ou um aplicativo nas configurações do widget" }, "archiveTeamWarrior": { "name": "ArchiveTeam Warrior", @@ -1600,33 +2355,61 @@ "showBroadcastMessage": { "label": "Exibir mensagens de transmissão" } + }, + "noProjectSelected": "Nenhum projeto selecionado", + "runnerStatus": "Runner: {status}", + "projectId": "Projeto: {id}", + "sessionReceived": "Sessão recebida: {value}", + "sessionSent": "Sessão enviada: {value}", + "sessionId": "Sessão: {id}", + "startedAt": "{date} Iniciado", + "emptyItems": "Nenhum trabalho ativo ou recente neste snapshot", + "metric": { + "running": "Em execução", + "completed": "Concluído", + "failed": "Falhou", + "canceled": "Cancelado", + "download": "BAIXAR", + "upload": "Transferir" + }, + "status": { + "running": "Em execução", + "completed": "Concluído", + "failed": "Falhou", + "canceled": "Cancelado", + "stopped": "Parado", + "idle": "Ocioso", + "unknown": "Desconhecido" + } + }, + "wud": { + "name": "O Docker", + "description": "Mostrar quantos contêineres assistidos possuem atualizações disponíveis.", + "title": "O Docker", + "monitored": "Monitorado", + "updatesAvailable": "{count, plural, one {# atualização disponível} other {# atualizações disponíveis}}", + "updateAvailable": "Atualização disponível", + "openReleaseNotes": "Abrir notas de lançamento", + "option": { + "showRing": { + "label": "Mostrar atualização de toque" + }, + "showUpdateList": { + "label": "Mostrar lista de atualização do recipiente", + "description": "Lista cada container monitorado que tem uma atualização de imagem disponível" + } } }, "dnsHoleSummary": { "name": "Resumo do DNS Hole", "description": "Exibe o resumo do seu DNS Hole", "option": { - "layout": { - "label": "Layout", - "option": { - "row": { - "label": "Horizontal" - }, - "column": { - "label": "Vertical" - }, - "grid": { - "label": "Grade" - } - } - }, "usePiHoleColors": { "label": "Usar cores do Pi-Hole" } }, "error": { - "internalServerError": "Falha ao buscar resumo do DNS Hole", - "integrationsDisconnected": "Nenhum dado disponível, todas as integrações estão desconectadas" + "internalServerError": "Falha ao buscar resumo do DNS Hole" }, "data": { "adsBlockedToday": "Bloqueado hoje", @@ -1634,32 +2417,24 @@ "dnsQueriesToday": "Consultas hoje", "domainsBeingBlocked": "Domínios na lista de bloqueio" }, - "domainsTooltip": "Devido a múltiplas integrações, o Homarr não pode calcular o número exato de domínios sendo bloqueados" + "domainsTooltip": "Devido a múltiplas integrações, o Homarr não pode calcular o número exato de domínios sendo bloqueados", + "status": { + "enabled": "Ativado", + "disabled": "Desabilitado", + "unknown": "Desconhecido" + } }, "dnsHoleControls": { "name": "Controles do DNS Hole", "description": "Controle o PiHole ou o AdGuard em seu painel de controle", "option": { - "layout": { - "label": "Layout", - "option": { - "row": { - "label": "Horizontal" - }, - "column": { - "label": "Vertical" - }, - "grid": { - "label": "Grade" - } - } - }, "showToggleAllButtons": { "label": "Exibir botões \"Alternar Todos\"" } }, "error": { - "internalServerError": "Falha ao gerenciar o DNS Hole" + "internalServerError": "Falha ao gerenciar o DNS Hole", + "bulkActionsFailed": "{count, plural, one {# ação falhou} other {# ações falharam}}" }, "controls": { "enableAll": "Habilitar todos", @@ -1670,8 +2445,6 @@ "disabled": "Desabilitado", "processing": "Processando", "disconnected": "Desconectado", - "hours": "Horas", - "minutes": "Minutos", "unlimited": "Deixe em branco para não limitar" } }, @@ -1683,16 +2456,10 @@ "label": "Exibição personalizada do título/cidade", "description": "Exiba um título personalizado ou o nome da cidade/país na parte superior do relógio." }, - "customTitle": { - "label": "Título" - }, "is24HourFormat": { "label": "Formato de 24 horas", "description": "Use o formato de 24 horas em vez do formato de 12 horas" }, - "showSeconds": { - "label": "Exibir segundos" - }, "useCustomTimezone": { "label": "Usar um fuso horário fixo" }, @@ -1711,29 +2478,295 @@ "label": "Formato de hora personalizado", "description": "Usar ISO 8601 para formatar horas (isso substituirá outras opções)" }, - "customDateFormat": { - "label": "Formato de data personalizado", - "description": "Usar ISO 8601 para formatar datas (isso substituirá outras opções)" - }, "showWeather": { "label": "Exibir clima", "description": "Exibir um pequeno ícone de clima animado e a temperatura no canto do cartão" }, - "weatherLocation": { - "label": "Localização do clima" - }, "isWeatherFormatFahrenheit": { "label": "Usar Fahrenheit" + }, + "animateWeatherIcon": { + "label": "Animar ícone do clima", + "description": "Animar o ícone do clima. Desativado por padrão e sempre desativado quando movimento reduzido é solicitado." + }, + "colorWeatherByDayNight": { + "label": "Clima colorido por dia/noite", + "description": "Pintar o ícone e temperatura do clima com uma cor do dia ou uma cor noturna, baseado em se é atualmente dia ou noite no local escolhido." + }, + "dayWeatherColor": { + "label": "Cor do dia" + }, + "nightWeatherColor": { + "label": "Cor noturna" + }, + "worldClockCities": { + "label": "Cidades do relógio mundial", + "description": "Adicionar e ordenar até seis cidades para exibição avançada." } + }, + "timezoneList": { + "timezone": "Fuso-horário", + "cityLabel": "Etiqueta da cidade", + "searchPlaceholder": "Pesquisar fusos horários", + "noResults": "Nenhum fuso horário encontrado", + "unsupportedOption": "Não Suportado: {timeZone}", + "add": "Adicionar cidade", + "remove": "Remover {city}", + "reorder": "Reordenar {city}", + "limit": "{count} de {maximum} cidades configuradas" + }, + "worldClock": { + "primary": "Relógio principal", + "local": "Hora local", + "today": "hoje", + "tomorrow": "Amanhã", + "yesterday": "ontem", + "noSecondaryCities": "Adicione cidades nas opções de widget para compará-las aqui.", + "unsupportedPrimaryTitle": "Fuso horário principal não está disponível", + "unsupportedPrimary": "{timeZone} não é suportado neste navegador. Mostrando UTC como uma fallback claramente marcada.", + "unsupportedTimeZone": "Fuso horário não suportado: {timeZone}", + "accessibleTime": "{city}: {time}, {date}, {timeZone}", + "advancedLabel": "Relógio mundial avançado", + "cities": "Relógios mundiais", + "cityCount": "{count} timezones", + "timeBarLabel": "Posição 24 horas no dia para {city}", + "dayProgress": "{percent}% decorrido · {hours}h {minutes}m restante", + "phaseLegend": "Legenda do dia", + "tick": { + "midnight": "00", + "morning": "06", + "noon": "12", + "evening": "18", + "end": "24" + }, + "phaseRange": { + "night": "00–05 · 21–24", + "dawn": "05–08", + "day": "08–18", + "dusk": "18–21" + }, + "phase": { + "night": "Noite", + "dawn": "Amanhecer", + "day": "dia", + "dusk": "Crepúsculo" + } + } + }, + "airQuality": { + "name": "Qualidade do ar e UV", + "description": "Mostra a qualidade do ar, o índice de ultravioleta, os poluentes e o pólen para um local.", + "option": { + "location": { + "label": "Localização da qualidade do ar" + }, + "aqiStandard": { + "label": "Padrão AQI", + "options": { + "auto": "Automático para a localização", + "european": "IQA Europeu", + "us": "AQI EUA" + } + }, + "showUv": { + "label": "Mostrar índice UV" + }, + "showPollutants": { + "label": "Mostrar concentrações poluentes" + }, + "showPollen": { + "label": "Mostrar concentrações de pólen" + } + }, + "category": { + "good": "Excelente", + "fair": "Razoável", + "moderate": "Moderado", + "unhealthySensitive": "Insalubre para grupos sensíveis", + "unhealthy": "Com problemas", + "poor": "Inferior", + "veryPoor": "Muito pobre", + "veryUnhealthy": "Muito ruim", + "extremelyPoor": "Extremamente pobre", + "hazardous": "Perigoso", + "unknown": "Sem AQI lendo" + }, + "uv": { + "label": "Índice UV", + "category": { + "low": "baixa", + "moderate": "Moderado", + "high": "alta", + "veryHigh": "Muito alto", + "extreme": "Extremo", + "unknown": "Sem leitura" + } + }, + "dominantPollutant": "Dominant pollutant", + "aqiLabel": "IQA", + "strongestPollen": "Maior pólen", + "unit": { + "concentration": "{value} ├g/m3", + "pollen": "Grãos {value} /m3" + }, + "pollutant": { + "pm2_5": "PM2,5", + "pm10": "PM10", + "ozone": "Ozono", + "nitrogenDioxide": "Dióxido de nitrogênio", + "sulphurDioxide": "Sulphur dioxide", + "carbonMonoxide": "Monóxido de carbono" + }, + "pollen": { + "alder": "Alder", + "birch": "Bétula", + "grass": "Grama", + "mugwort": "Mugwort", + "olive": "Verde-oliva", + "ragweed": "Arrogantes" + }, + "compact": { + "sixHourTrend": "Tendência de IQA para as próximas seis horas" + }, + "advanced": { + "observedAt": "Atualizado em {time}", + "next24Hours": "Próximas 24 horas", + "pollutants": "Concentrações de poluentes", + "pollen": "Pollen concentrations", + "sevenDayForecast": "Previsão máxima de 7 dias", + "aqiValue": "IQA {value}", + "uvValue": "UV {value}", + "uvShort": "UV {value}", + "noForecast": "Não há previsão de dados disponíveis" + } + }, + "countdown": { + "name": "Contagem regressiva", + "description": "Rastreia eventos futuros e aniversários recorrentes.", + "option": { + "events": { + "label": "Eventos", + "description": "Adicione e ordene até 20 vezes ou uma contagem regressiva anual. As datas são inseridas no fuso horário selecionado." + }, + "showProgress": { + "label": "Mostrar progresso" + }, + "showSeconds": { + "label": "Mostrar segundos", + "description": "Mantenha os segundos visíveis para todos os próximos eventos." + } + }, + "dateTimeEventList": { + "newEvent": "Novo evento", + "add": "Adicionar evento", + "remove": "Remover {event}", + "reorder": "Reordenar {event}", + "eventLabel": "Etiqueta de evento", + "timezone": "Fuso-horário", + "unsupportedOption": "Não Suportado: {timeZone}", + "recurrence": "Repetir", + "recurrenceOption": { + "none": "Não repetir", + "yearly": "Todos os anos" + }, + "target": "Data e hora do evento", + "trackProgress": "Acompanhar progresso a partir de uma data de início", + "start": "Data e hora de início do progresso", + "confirmDateTime": "Confirmar data e hora", + "limit": "{count} de eventos {maximum} configurados" + }, + "empty": { + "title": "Nenhuma contagem regressiva ainda", + "description": "Adicionar um evento em opções de widget para começar a contar menos." + }, + "completed": "Concluído", + "yearly": "Anualmente", + "progress": "Progresso do evento", + "upcoming": "Próximos", + "completedEvents": "Eventos concluídos", + "invalid": { + "title": "Alguns eventos não podem ser exibidos", + "description": "{count, plural, one {Um evento tem uma data inválida ou um fuso horário incompatível.} other {# eventos têm uma data inválida ou um fuso horário incompatível.}}", + "value": "Unavailable" + }, + "alert": { + "notifications": "Notificações do navegador", + "permissionDenied": "As notificações estão bloqueadas neste navegador.", + "reached": "A contagem regressiva atingiu o seu alvo." + } + }, + "timer": { + "name": "Timer / Pomodoro", + "description": "Executa um simples timer ou uma sequência configurável do Pomodoro.", + "option": { + "mode": { + "label": "Modo", + "options": { + "timer": "Cronômetro", + "pomodoro": "Pomodoro" + } + }, + "timerMinutes": { + "label": "Minutos do temporizador" + }, + "focusMinutes": { + "label": "Atas de foco" + }, + "shortBreakMinutes": { + "label": "Minutos de pausa curtas" + }, + "longBreakMinutes": { + "label": "Pausa longa de minutos" + }, + "sessionsBeforeLongBreak": { + "label": "Focar sessões antes de uma longa pausa" + }, + "autoStartBreaks": { + "label": "Automaticamente iniciar pausas" + }, + "autoStartFocus": { + "label": "Iniciar sessões de foco automaticamente" + } + }, + "phase": { + "timer": "Cronômetro", + "focus": "Focar", + "shortBreak": "Quebra curta", + "longBreak": "Pausa longa" + }, + "action": { + "start": "Iniciar", + "pause": "Suspender", + "reset": "Reset" + }, + "attention": { + "timerComplete": "Timer complete", + "phaseReady": "{phase} pronto" + }, + "progress": "Progresso do cronômetro: {progress}%", + "compact": { + "completedFocus": "{count, plural, =0 {Não há sessões de foco completas} one {# Sessão de foco completada} other {# sessões de foco completadas}}" + }, + "alert": { + "title": "Timer complete", + "completed": "{phase} concluído." + }, + "advanced": { + "sequence": "Pomodoro sequence", + "focusSession": "Focar {session}", + "settings": "Configurações permanentes", + "settingsHint": "Use o menu de contexto do widget para editar estas configurações do quadro.", + "localAlerts": "Alertas locais", + "notifications": "Notificações do navegador", + "sound": "Sons do cronômetro", + "localAlertsHint": "Sons do temporizador estão ativados por padrão. Sons e notificações se aplicam apenas a este widget neste navegador.", + "notificationsDenied": "As notificações estão bloqueadas neste navegador." } }, "minecraftServerStatus": { "name": "Status de servidor Minecraft", "description": "Exibir o status de um servidor Minecraft", "option": { - "title": { - "label": "Título" - }, "domain": { "label": "Endereço do servidor" }, @@ -1753,11 +2786,21 @@ "noStation": "Nenhuma estação selecionada", "option": { "baseUrl": { - "label": "URL do Search.ch" + "label": "URL do Search.ch", + "description": "URLs personalizadas devem ser resolvidas para um endereço IP público. Hosts privados e locais são rejeitados." }, "station": { - "label": "Estação" + "label": "Estação", + "placeholder": "Procurar uma estação" } + }, + "error": { + "customSourceUnavailable": "A fonte do calendário não está disponível. Verifique se sua URL resolve com um endereço IP público.", + "stationSearch": "Não foi possível procurar estações. Verifique a URL personalizada e o seu acesso ao fórum." + }, + "warning": { + "stale": "O calendário não pôde ser atualizado. Mostrando as partidas pela última vez em {time}.", + "staleCompact": "Dados obsoletos" } }, "notebook": { @@ -1789,6 +2832,9 @@ "directionRtl": "Definir direção do texto da direita para a esquerda", "blockquote": "Bloco de Citação", "horizontalLine": "Linha horizontal", + "details": "Alternar seção ocultável", + "expandDetails": "Expandir seção ocultável", + "collapseDetails": "Recolher seção ocultável", "bulletList": "Lista de marcadores", "orderedList": "Lista ordenada", "checkList": "Lista de verificação", @@ -1797,16 +2843,20 @@ "link": "Link", "unlink": "Remover link", "image": "Incorporar imagem", - "addTable": "Adicionar tabela", + "insertTable": "Inserir tabela", + "insertTableSize": "Inserir tabela {columns} × {rows}", "deleteTable": "Excluir tabela", "colorCell": "Cor da Célula", - "mergeCell": "Ativar/desativar mesclagem de células", + "mergeCells": "Mesclar células", + "splitCell": "Dividir célula", "addColumnLeft": "Adicionar coluna antes", "addColumnRight": "Adicionar coluna depois", "deleteColumn": "Excluir coluna", "addRowTop": "Adicionar linha antes", "addRowBelow": "Adicionar linha depois", - "deleteRow": "Excluir linha" + "deleteRow": "Excluir linha", + "toggleHeaderRow": "Alternar linha de cabeçalho", + "toggleHeaderColumn": "Alternar coluna de cabeçalho" }, "align": { "left": "Esquerda", @@ -1817,8 +2867,6 @@ "clearColor": "Limpar cor", "source": "Fonte", "widthPlaceholder": "Valor em % ou pixels", - "columns": "Colunas", - "rows": "Linhas", "width": "Largura", "height": "Altura" }, @@ -1830,7 +2878,9 @@ "discard": "Descartar alterações", "keepEditing": "Continuar editando" } - } + }, + "saveFailed": "Não é possível salvar nota", + "documentStats": "{words, plural, one {# palavra} other {# palavras}} · {characters, plural, one {# caracteres} other {# caracteres}}" }, "anchorNote": { "name": "Nota do Anchor", @@ -1839,9 +2889,6 @@ "noteId": { "label": "Nota" }, - "showTitle": { - "label": "Exibir título" - }, "showUpdatedAt": { "label": "Exibir última atualização" } @@ -1851,14 +2898,20 @@ "notFound": "Nota não encontrada", "noNotes": "Nenhuma nota encontrada", "integrationRequired": "Selecione primeiro uma integração do Anchor", - "updatedAt": "Atualizado em {date}", "untitled": "Sem título", - "edit": "Editar", - "save": "Salvar", - "cancel": "Cancelar", "readOnlyViewer": "Você tem acesso de visualização a esta nota. A edição está desativada.", "saveForbidden": "Você não tem permissão para editar esta nota.", - "saveFailed": "Não foi possível salvar esta nota. Tente novamente." + "saveFailed": "Não foi possível salvar esta nota. Tente novamente.", + "createdAt": "Criado em {date}", + "permission": { + "owner": "Dono", + "editor": "Editores", + "viewer": "Visualizador" + }, + "status": { + "pinned": "Fixado", + "archived": "Arquivado" + } }, "iframe": { "name": "iFrame", @@ -1917,6 +2970,25 @@ "clickable": { "label": "Clicável" } + }, + "state": { + "on": "Ligado", + "off": "Desligado", + "unavailable": "Unavailable", + "unknown": "Desconhecido" + }, + "advanced": { + "entityId": "ID da entidade: {id}", + "lastChanged": "Alterado {date}", + "attribute": { + "unit": "Unidade", + "deviceClass": "Classe do dispositivo", + "icon": "Ícone" + } + }, + "error": { + "loadFailed": "Não foi possível carregar a entidade", + "toggleFailed": "Não foi possível atualizar a entidade" } }, "smartHome-executeAutomation": { @@ -1932,11 +3004,31 @@ }, "spotlightAction": { "run": "Executar {name}" + }, + "advanced": { + "lastExecuted": "Última execução em {time}", + "automationId": "ID de automação: {id}", + "ready": "Pronto para executar", + "noPermission": "Sem permissão para executar essa automação" + }, + "status": { + "running": "Automação em execução", + "success": "Automação concluída" + }, + "error": { + "executeFailed": "Não foi possível executar a automação" } }, "stockPrice": { "name": "Preço das ações", "description": "Exibe o preço atual das ações de uma empresa", + "advanced": { + "currentPrice": "Preço atual", + "previousClose": "Fechamento anterior", + "changePercentage": "Mudança (%)", + "minimum": "Mínimo", + "maximum": "Máxima" + }, "option": { "stock": { "label": "Símbolo da ação" @@ -2007,6 +3099,10 @@ "label": "1 mês" } } + }, + "showDetails": { + "label": "Exibir detalhes", + "description": "Mostre o nome, mudança e intervalo de tempo na visualização compacta. Desligue apenas para o símbolo e o preço." } } }, @@ -2034,6 +3130,13 @@ "showUnmonitored": { "label": "Mostrar não monitorados" } + }, + "advanced": { + "previousMonth": "Mostrar mês anterior", + "nextMonth": "Mostrar o próximo mês", + "eventCount": "{count, plural, one {# evento} other {# eventos}}", + "loading": "Carregando eventos do calendário...", + "noEvents": "Nenhum evento neste mês" } }, "weather": { @@ -2046,16 +3149,18 @@ "disableTemperatureDecimals": { "label": "Desativar decimais de temperatura" }, + "animateIcons": { + "label": "Animar ícones meteorológicos" + }, + "showHumidity": { + "label": "Mostrar umidade" + }, "showCurrentWindSpeed": { - "label": "Exibir velocidade do vento atual", - "description": "Somente no clima atual" + "label": "Exibir velocidade do vento atual" }, "useImperialSpeed": { "label": "Usar mph para a velocidade do vento" }, - "location": { - "label": "Localização do tempo" - }, "showCity": { "label": "Exibir cidade" }, @@ -2065,13 +3170,10 @@ "forecastDayCount": { "label": "Quantidade de dias de previsão", "description": "Quando o widget não é largo o suficiente, menos dias serão exibidos" - }, - "dateFormat": { - "label": "Formato de data", - "description": "Como a data deve ser exibida" } }, "currentWindSpeed": "{currentWindSpeed} {unit}", + "disabled": "Dados de clima estão indisponíveis porque as conexões de saída estão desativadas", "dailyForecast": { "sunrise": "", "sunset": "Pôr do sol", @@ -2094,6 +3196,47 @@ "thunderstorm": "Trovoada", "thunderstormWithHail": "Trovoada com granizo", "unknown": "Desconhecido" + }, + "details": "Mostrar detalhes do tempo", + "detailsFor": "Mostrar detalhes do tempo para {date}", + "advanced": { + "forecast": "Previsão de 7 dias", + "hourlyForecast": "Próximas 24 horas", + "day": "dia", + "time": "Horário", + "conditions": "condições", + "temperature": "Temperatura", + "feelsLike": "Sensação de {temperature}", + "feelsLikeLabel": "Sensação de", + "feelsLikeRange": "Sente-se como: {maximum} / {minimum}", + "highLow": "{maximum} Alto · Baixa {minimum}", + "observedAt": "Atualizado em {time}", + "humidity": "Umidade", + "averageHumidity": "Umidade média: {humidity}%", + "currentHumidity": "Umidade atual", + "wind": "Vento / rajadas ({unit})", + "currentWind": "Vento atual / Visitas", + "windValue": "{speed} / {gusts} {unit}", + "windDetail": "Vento máximo / convidados: {speed} / {gusts} {unit}", + "nextHourPrecipitation": "Precipitação na próxima hora", + "precipitationChance": "Chance de precipitação", + "precipitationValue": "{probability}% · {amount} mm", + "precipitationDetail": "Precipitação: {probability}% · {amount} mm", + "todayUv": "Índice máximo UV de hoje", + "uvIndex": "Máximo índice UV: {value}", + "daylight": "Luz Diária: {duration}", + "hourlyTooltip": "Sente-se como {feelsLike}{temperatureUnit} · {amount} mm · {humidity}% de humidade · {speed} {speedUnit} wind", + "hourlyTooltipWithoutHumidity": "Sente-se como {feelsLike}{temperatureUnit} · {amount} mm · {speed} {speedUnit} wind", + "detailLabel": { + "feelsLike": "Sensação de", + "precipitation": "Precipitação", + "humidity": "Umidade média", + "wind": "Vento máximo / convidados", + "uv": "Índice máximo de UV", + "daylight": "Daylight" + }, + "sun": "Amanhecer / entardecer", + "noForecast": "Não há previsão de dados disponíveis" } }, "indexerManager": { @@ -2106,8 +3249,15 @@ }, "title": "Gerenciador de indexadores", "testAll": "Testar todos", + "status": { + "healthy": "Saudável", + "unhealthy": "Com problemas", + "disabled": "Desabilitado", + "unknown": "Vida indisponível" + }, "error": { - "internalServerError": "Falha ao buscar status dos indexadores" + "internalServerError": "Falha ao buscar status dos indexadores", + "testAll": "O teste do indexador falhou. Tente novamente." } }, "healthMonitoring": { @@ -2136,11 +3286,6 @@ "fileSystem": { "label": "Mostrar informações do sistema de arquivos" }, - "visibleStorageVolumes": { - "label": "Volumes de armazenamento visíveis", - "description": "Disponível apenas quando todas as integrações selecionadas são Synology. Deixe vazio para exibir todos os volumes de armazenamento detectados.", - "placeholder": "Selecione os volumes de armazenamento" - }, "defaultTab": { "label": "Aba padrão" }, @@ -2163,17 +3308,27 @@ "minutes": "{count} minutos", "used": "Usado", "available": "Disponível", - "lastSeen": "Última atualização de status: {lastSeen}" + "lastSeen": "Última atualização de status: {lastSeen}", + "updatesAvailable": "{count, plural, one {# atualização disponível} other {# atualizações disponíveis}}", + "rebootRequired": "Reinicialização necessária", + "rebootNotRequired": "Não é necessário reiniciar" + }, + "smartStatus": { + "attributesWithinThresholds": "SMART: atributos dentro dos limites", + "attributesFailed": "SMART: {attributes} falhou", + "noCriticalWarning": "SMART: nenhum aviso reportado pelo SSD", + "criticalWarning": "SMART: aviso relatado pelo SSD" + }, + "gauge": { + "cpuUsage": "Uso da CPU", + "cpuTemperature": "Temperatura da CPU", + "memoryUsage": "Uso da Memória", + "gpuUsage": "{name} uso da GPU" }, - "memory": {}, "error": { "internalServerError": "Falha ao buscar status de integridade" }, "cluster": { - "summary": { - "cpu": "CPU", - "memory": "RAM" - }, "resource": { "node": { "name": "Nós" @@ -2209,8 +3364,6 @@ "table": { "header": { "name": "Nome", - "cpu": "CPU", - "memory": "RAM", "node": "Nó" } } @@ -2220,33 +3373,29 @@ "name": "Estatísticas", "description": "Estatísticas dos seus contêineres (este widget só pode ser adicionado com privilégios de administrador)", "option": { - "columns": { - "label": "Colunas para exibir" + "endpointIds": { + "label": "Ambientes Docker", + "description": "Deixe vazio para mostrar contêineres de cada ambiente Docker", + "placeholder": "Todos os ambientes Docker" }, - "enableRowSorting": { - "label": "Habilitar ordenação de itens" + "containerFilter": { + "label": "Contêineres para filtrar" + }, + "filterIsWhitelist": { + "label": "Filtrar como lista de permissões" }, "defaultSort": { - "label": "Coluna usada para ordenação por padrão", "option": { "name": "Nome", "state": "Estado", "cpuUsage": "Uso da CPU", "memoryUsage": "Uso da memória" } - }, - "descendingDefaultSort": { - "label": "Inverter ordenação" - }, - "columnOrder": { - "label": "Ordem das colunas" - }, - "columnWidths": { - "label": "Larguras das colunas" } }, "error": { "internalServerError": "Erro ao obter as estatísticas dos contêineres", + "endpointsUnavailable": "Os endpoints do Docker estão indisponíveis", "layoutSaveTitle": "Layout da tabela não salvo", "layoutSaveMessage": "Não foi possível salvar o layout da tabela do Docker. Tente mover ou redimensionar a coluna novamente." }, @@ -2255,7 +3404,6 @@ } }, "coolify": { - "name": "Coolify", "description": "Visão geral da sua instância do Coolify com servidores e aplicativos", "option": { "showServers": { @@ -2281,17 +3429,49 @@ "internalServerError": "Falha ao obter dados do Coolify" }, "server": { - "buildServer": "Compilar" + "buildServer": "Compilar", + "resourceCounts": "{applications, plural, one {# aplicativo} other {# aplicativos}} / {services, plural, one {# serviço} other {# serviços}}", + "reachability": "Alcançabilidade", + "usability": "usabilidade" + }, + "source": { + "url": "Fonte: {url}", + "unavailable": "{source}: unavailable" }, "instances": { "title": "Instâncias" + }, + "action": { + "openResource": "Abrir {name}", + "openLogs": "Abrir logs do {name}", + "showIp": "Mostrar endereço IP", + "hideIp": "Ocultar endereço IP" + }, + "status": { + "running": "Em execução", + "stopped": "Parado", + "exited": "Finalizado", + "starting": "Iniciando", + "restarting": "Recomeço", + "unknown": "Desconhecido", + "online": "Disponível", + "offline": "Desconectado", + "reachable": "Alcançável", + "unreachable": "Inacessível", + "usable": "usável", + "unusable": "Inutilizável" } }, "vpn": { "name": "VPN", "description": "Visão geral das suas conexões VPN", "serviceUnavailable": "VPN indisponível", - "option": {} + "status": { + "running": "Em execução", + "notRunning": "Não em execução", + "unavailable": "Unavailable", + "vpn": "VPN: {status}" + } }, "ups": { "name": "UPS", @@ -2318,14 +3498,19 @@ "runtime": "Tempo de execução", "load": "Carga", "input": "Entrada", - "output": "Saída" + "output": "Saída", + "batteryVoltage": "Tensão da bateria", + "power": "Liga/Desliga", + "temperature": "Temperatura", + "manufacturer": "Fabricante", + "model": "Modelo", + "serial": "Série" }, "error": { "internalServerError": "Falha ao buscar dados do UPS" } }, "tracearr": { - "name": "Tracearr", "description": "Monitoramento avançado de servidor de mídia com dados detalhados de transmissão e transcodificação", "option": { "showStreams": { @@ -2413,10 +3598,7 @@ "label": "Evento", "description": "Mostrar total de ocorrências de um evento específico", "placeholder": "Selecione um evento", - "loading": "Carregando eventos...", - "noEvents": "Nenhum evento encontrado", - "none": "Nenhum evento", - "configureWebsiteFirst": "Selecione primeiro um site para carregar eventos" + "none": "Nenhum evento" }, "chartType": { "label": "Tipo de gráfico", @@ -2447,26 +3629,21 @@ "eventNames": { "label": "Eventos", "description": "Selecione um ou mais eventos para o gráfico", - "placeholder": "Selecionar eventos...", - "loading": "Carregando eventos...", - "noEvents": "Nenhum evento encontrado", - "configureWebsiteFirst": "Selecione primeiro um site para carregar eventos" + "placeholder": "Selecionar eventos..." }, "topCount": { "label": "Itens a exibir", "description": "Número de itens principais a exibir (máx. 500)" + }, + "events": { + "loading": "Carregando eventos...", + "noEvents": "Nenhum evento encontrado", + "configureWebsiteFirst": "Selecione um site primeiro para carregar eventos" } }, "event": { - "occurrences": "ocorrências", "label": "eventos" }, - "topPages": { - "direct": "Direto" - }, - "topReferrers": { - "direct": "Direto" - }, "events": { "selectPrompt": "Selecione eventos para o gráfico" }, @@ -2475,6 +3652,9 @@ "noWebsite": "Nenhum site configurado", "noData": "Sem dados disponíveis", "internalServerError": "Falha ao buscar dados do Umami" + }, + "top": { + "direct": "Direto" } }, "common": { @@ -2502,7 +3682,8 @@ }, "integration": { "noData": "Nenhuma integração encontrada", - "description": "Clique para criar uma nova integração" + "description": "Clique para criar uma nova integração", + "manage": "Gerenciar integrações" }, "app": { "noData": "Nenhum aplicativo encontrado", @@ -2513,7 +3694,61 @@ "noIntegration": "Nenhuma integração selecionada", "noData": "Nenhum dado de integração disponível" }, - "option": {} + "integrationDisconnected": "Nenhum dado disponível, todas as integrações estão desconectadas", + "updatedAt": "Atualizado em {date}", + "title": { + "label": "Título" + }, + "openInNewTab": { + "label": "Abrir em nova guia" + }, + "showTitle": { + "label": "Mostrar título" + }, + "weatherLocation": { + "label": "Localização do tempo" + }, + "layout": { + "label": "Disposição", + "option": { + "horizontal": "Horizontal", + "vertical": "Vertical", + "grid": "Grade" + } + }, + "select": { + "loading": "Carregandochar@@0", + "loadError": "Falha ao carregar opções" + }, + "dateFormat": { + "label": "Formato de data", + "description": "Como a data deve ser exibida" + }, + "visibleStorageVolumes": { + "label": "Volume de armazenamento visível", + "description": "Disponível apenas quando cada integração selecionada é OpenMediaVault ou Synology. Deixe em branco para mostrar todos os volumes de armazenamento detectados.", + "placeholder": "Selecionar volumes de armazenamento" + }, + "tableOptions": { + "columns": { + "label": "Colunas para exibir" + }, + "columnOrder": { + "label": "Ordem das colunas" + }, + "columnWidths": { + "label": "Largura da coluna" + }, + "enableRowSorting": { + "label": "Habilitar ordenação de itens" + }, + "defaultSort": { + "label": "Coluna usada para ordenação por padrão" + }, + "invertSorting": { + "label": "Inverter ordenação" + } + } }, "video": { "name": "Transmissão de vídeo", @@ -2572,6 +3807,7 @@ "transcoding": "Transcodificação", "paused": "Pausado", "remaining": "Faltam {minutes} min", + "seasonEpisode": "T{season} E{episode}", "metadata": { "title": "Estatísticas para nerds", "video": { @@ -2589,11 +3825,16 @@ "resolution": "Resolução", "target": "Codec de destino" } - } + }, + "unknownUser": "Usuário desconhecido" + }, + "summary": { + "sessions": "{count, plural, one {# Sessão} other {# sessões}}", + "playing": "{count} em reprodução", + "transcoding": "Transcodificação {count}" } }, "paperlessNgx": { - "name": "Paperless-ngx", "description": "Visão geral do seu arquivo de documentos do Paperless-ngx", "documentsTotal": "Total de Documentos", "documentsInbox": "Caixa de Entrada", @@ -2637,6 +3878,192 @@ "internalServerError": "Falha ao buscar dados do Paperless-ngx" } }, + "patchmon": { + "description": "Visão geral do status dos patches dos hosts pelo PatchMon", + "title": "Estatísticas do PatchMon", + "totalHosts": "Total de hosts", + "hostsNeedingUpdates": "Precisa de atualizações", + "securityUpdates": "Atualizações de segurança", + "upToDateHosts": "Hosts atualizados", + "hostsWithSecurityUpdates": "Hosts com atualizações de segurança", + "recentUpdates24h": "Atualizações (24 h)", + "totalOutdatedPackages": "Pacotes desatualizados", + "totalRepos": "Repositórios", + "osDistribution": "Distribuição do sistema operacional", + "compliance": "Conformidade dos patches", + "complianceRatio": "{upToDate} / {total}", + "lastUpdated": "Atualizado {time}", + "option": { + "showTotalHosts": { + "label": "Exibir total de hosts", + "description": "Exibir o número total de hosts monitorados" + }, + "showHostsNeedingUpdates": { + "label": "Exibir hosts que precisam de atualizações", + "description": "Exibir hosts com pelo menos um pacote desatualizado" + }, + "showSecurityUpdates": { + "label": "Exibir atualizações de segurança", + "description": "Exibir o número total de atualizações de segurança disponíveis" + }, + "showUpToDateHosts": { + "label": "Exibir hosts atualizados", + "description": "Exibir hosts sem pacotes desatualizados" + }, + "showHostsWithSecurityUpdates": { + "label": "Exibir hosts com atualizações de segurança", + "description": "Exibir hosts que exigem patches de segurança" + }, + "showRecentUpdates24h": { + "label": "Exibir atualizações recentes (24 h)", + "description": "Exibir o número de atualizações aplicadas nas últimas 24 horas" + }, + "showTotalOutdatedPackages": { + "label": "Exibir pacotes desatualizados", + "description": "Exibir o número total de pacotes desatualizados em todos os hosts" + }, + "showTotalRepos": { + "label": "Exibir repositórios", + "description": "Exibir o número de repositórios ativos monitorados" + }, + "enableThresholdColors": { + "label": "Ativar cores de limite", + "description": "Colorir os valores das estatísticas de verde, amarelo ou vermelho com base nas predefinições de gravidade" + }, + "useCustomThresholds": { + "label": "Limites avançados", + "description": "Personalize os limites de aviso e crítico por estatística usando contagens absolutas ou porcentagens do total de hosts" + }, + "thresholdMode": { + "option": { + "absolute": "Contagem absoluta", + "percent": "Porcentagem do total de hosts" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "Modo de limite de atualizações necessárias", + "description": "Compare a contagem de atualizações necessárias como valor absoluto ou porcentagem do total de hosts" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "Limite de aviso de atualizações necessárias" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "Limite crítico de atualizações necessárias" + }, + "securityUpdatesThresholdMode": { + "label": "Modo de limite de atualizações de segurança", + "description": "Compare a contagem de atualizações de segurança como valor absoluto ou porcentagem do total de hosts" + }, + "securityUpdatesWarningAt": { + "label": "Limite de aviso de atualizações de segurança" + }, + "securityUpdatesCriticalAt": { + "label": "Limite crítico de atualizações de segurança" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "Modo de limite de hosts com atualizações de segurança", + "description": "Compare a contagem de hosts como valor absoluto ou porcentagem do total de hosts" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "Limite de aviso de hosts com atualizações de segurança" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "Limite crítico de hosts com atualizações de segurança" + }, + "upToDateHostsThresholdMode": { + "label": "Modo de limite de hosts atualizados", + "description": "Compare a contagem de hosts atualizados como valor absoluto ou porcentagem do total de hosts" + }, + "upToDateHostsWarningAt": { + "label": "Limite de aviso de hosts atualizados", + "description": "Insira amarelo quando o valor estiver neste limite ou acima dele, mas abaixo da cobertura total" + }, + "upToDateHostsCriticalAt": { + "label": "Limite crítico de hosts atualizados", + "description": "Insira vermelho quando o valor ficar abaixo deste limite" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "Modo de limite de pacotes desatualizados", + "description": "Compare a contagem de pacotes desatualizados como valor absoluto ou porcentagem do total de hosts" + }, + "totalOutdatedPackagesWarningAt": { + "label": "Limite de aviso de pacotes desatualizados" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "Limite crítico de pacotes desatualizados" + }, + "showOsDistribution": { + "label": "Exibir distribuição do sistema operacional", + "description": "Exibir uma divisão dos hosts monitorados por sistema operacional" + }, + "osDistributionLimit": { + "label": "Limite da distribuição do sistema operacional", + "description": "Número máximo de sistemas operacionais a exibir", + "option": { + "3": "3 principais", + "5": "5 principais", + "10": "10 principais", + "all": "Todos" + } + }, + "showOsVersion": { + "label": "Exibir versão do sistema operacional", + "description": "Acrescentar a versão do sistema operacional a cada rótulo de distribuição quando disponível" + }, + "showComplianceHero": { + "label": "Exibir destaque de conformidade", + "description": "Exibir um anel de conformidade mostrando a porcentagem de hosts atualizados" + }, + "osDisplayMode": { + "label": "Modo de exibição do sistema operacional", + "description": "Escolha como exibir a distribuição do sistema operacional", + "option": { + "bars": "Barras horizontais", + "donut": "Gráfico de rosca" + } + }, + "threshold": { + "warningAt": { + "description": "Digite amarelo quando o valor atingir este limite" + }, + "criticalAt": { + "description": "Digite vermelho quando o valor atingir este limite" + } + } + }, + "error": { + "internalServerError": "Falha ao buscar dados do PatchMon" + } + }, + "bazarr": { + "description": "Visão geral das legendas ausentes e do status de integridade da sua instância do Bazarr", + "episodes": "Episódios ausentes", + "movies": "Filmes ausentes", + "providers": "Problemas dos provedores", + "status": "Problemas de integridade", + "announcements": "Avisos", + "option": { + "showMissingEpisodes": { + "label": "Exibir episódios ausentes", + "description": "Exibir o número de episódios com legendas ausentes" + }, + "showMissingMovies": { + "label": "Exibir filmes ausentes", + "description": "Exibir o número de filmes com legendas ausentes" + }, + "showProviderIssues": { + "label": "Exibir problemas dos provedores", + "description": "Exibir o número de provedores de legendas com problemas" + }, + "showHealthIssues": { + "label": "Exibir problemas de integridade", + "description": "Exibir o número de problemas de integridade do Bazarr" + } + }, + "error": { + "internalServerError": "Falha ao buscar dados do Bazarr" + } + }, "immich-serverStats": { "name": "Estatísticas do servidor Immich", "description": "Informações sobre sua instância do Immich", @@ -2661,7 +4088,8 @@ "users": "Usuários", "photos": "Fotos", "videos": "Vídeos", - "storage": "Armazenamento utilizado" + "storage": "Armazenamento utilizado", + "albumLimit": "Álbuns maiores (até {count} mostrados)" }, "immich-albumCarousel": { "name": "Álbum do Immich", @@ -2685,24 +4113,21 @@ } }, "description": "Apresentação de fotos de um álbum do Immich ou de toda a sua biblioteca", - "noPhotos": "Nenhuma foto encontrada" + "noPhotos": "Nenhuma foto encontrada", + "albumPhoto": "Foto do álbum", + "actions": { + "previousPhoto": "Foto anterior", + "nextPhoto": "Próxima foto", + "pauseSlideshow": "Pause slideshow", + "resumeSlideshow": "Retomar slideshow", + "toggleSlideshow": "Pausar ou retomar a apresentação", + "photo": "Foto {number}" + } }, "downloads": { "name": "Cliente de download", "description": "Permite visualizar e gerenciar seus downloads de clientes Torrent e Usenet.", "option": { - "columns": { - "label": "Colunas a exibir" - }, - "enableRowSorting": { - "label": "Habilitar ordenação de itens" - }, - "defaultSort": { - "label": "Coluna usada para ordenação padrão" - }, - "descendingDefaultSort": { - "label": "Inverter ordenação" - }, "showCompletedUsenet": { "label": "Mostrar entradas da Usenet marcadas como concluídas" }, @@ -2727,12 +4152,6 @@ "limitPerIntegration": { "label": "Limitar itens por integração", "description": "Isso limitará o número de itens exibidos por integração, não globalmente" - }, - "columnOrder": { - "label": "Ordem das colunas" - }, - "columnWidths": { - "label": "Larguras das colunas" } }, "errors": { @@ -2893,6 +4312,10 @@ "mediaRequests-requestList": { "name": "Lista de solicitações de mídia", "description": "Veja uma lista de todas as solicitações de mídia da sua instância do Overseerr ou Jellyseerr", + "empty": { + "title": "Nenhuma solicitação de mídia ainda", + "description": "Procurar um filme ou mostrar para começar uma solicitação." + }, "option": { "linksTargetNewTab": { "label": "Abrir links em nova aba" @@ -2926,12 +4349,16 @@ "failed": "Falhou", "completed": "Concluído" }, + "unknown": "Desconhecido", "toBeDetermined": "A definir" }, "mediaRequests-requestStats": { "name": "Estatísticas de solicitações de mídia", "description": "Estatísticas sobre suas solicitações de mídia", - "option": {}, + "empty": { + "title": "Nenhuma atividade requisitada ainda", + "description": "Estatísticas aparecerão após a primeira solicitação de mídia." + }, "titles": { "stats": { "main": "Estatísticas de mídia", @@ -2941,8 +4368,7 @@ "declined": "Já recusado", "available": "Já disponível", "tv": "Solicitações de TV", - "movie": "Solicitações de filmes", - "total": "Total" + "movie": "Solicitações de filmes" }, "users": { "main": "Principais usuários", @@ -2968,7 +4394,6 @@ }, "currentIndex": "{start}-{end} de {total}", "healthCheck": { - "title": "Verificação de saúde", "queued": "Em fila", "status": { "healthy": "Saudável", @@ -2977,38 +4402,63 @@ }, "panel": { "statistics": { - "empty": "Vazio", - "transcodes": "Transcodificações", - "transcodesCount": "Transcodificações", - "healthChecksCount": "Verificações de saúde", "filesCount": "Arquivos", "savedSpace": "Espaço economizado", - "healthChecks": "Verificações de saúde", "videoCodecs": "Codecs", "videoContainers": "Contêineres", "videoResolutions": "Resoluções" }, "workers": { - "empty": "Vazio", "table": { - "file": "Arquivo", "eta": "TPE", - "progress": "Progresso", - "transcode": "Transcodificar", - "healthCheck": "Verificação de saúde" + "progress": "Progresso" } }, "queue": { - "empty": "Vazio", "table": { - "file": "Arquivo", - "size": "Tamanho", - "transcode": "Transcodificar", - "healthCheck": "Verificação de saúde" + "size": "Tamanho" } + }, + "common": { + "empty": "Vazio", + "file": "Ficheiro", + "healthCheck": "Verificação de saúde", + "transcode": "Transcodificar", + "transcodes": "Transcodificações", + "healthChecks": "Verificações de saúde" } } }, + "mediaMissing": { + "name": "Mídia ausente e na fila", + "description": "Exibe filmes e episódios ausentes e na fila do Radarr e Sonarr", + "option": { + "showMissing": { + "label": "Exibir itens ausentes" + }, + "showQueued": { + "label": "Exibir itens na fila" + }, + "pageSize": { + "label": "Itens por página" + } + }, + "tab": { + "missing": "Ausentes", + "queued": "Na fila" + }, + "type": { + "movie": "Filme", + "episode": "Episódio", + "book": "Reservar" + }, + "empty": { + "missing": "Nenhum item ausente", + "queued": "Nenhum item na fila", + "noTabsEnabled": "Ative pelo menos uma aba nas configurações do widget" + }, + "timeLeft": "Tempo restante" + }, "rssFeed": { "name": "Feeds RSS", "description": "Monitora e exibe um ou mais feeds RSS, ATOM ou JSON genéricos", @@ -3031,6 +4481,13 @@ "showPosterImage": { "label": "Exibir imagem do pôster" } + }, + "error": { + "allFeedsFailed": "Não foi possível carregar feeds RSS. Verifique as URLs do feed e tente novamente." + }, + "warning": { + "partial": "{count, plural, one {# Feed RSS não pôde ser carregado} other {# Feeds RSS não puderam ser carregados}}", + "stale": "Feeds RSS não puderam ser atualizados. Mostrando entradas carregadas anteriormente." } }, "releases": { @@ -3106,17 +4563,8 @@ "label": "Expressão regular" } }, - "edit": { - "label": "Editar" - }, "editForm": { - "title": "Editar repositório", - "cancel": { - "label": "Cancelar" - }, - "confirm": { - "label": "Confirmar" - } + "title": "Editar repositório" }, "importForm": { "title": "Importar do Docker" @@ -3133,8 +4581,7 @@ "label": "Tokens do provedor", "token": "Token", "configured": "Token configurado", - "notConfigured": "Nenhum token definido", - "save": "Salvar" + "notConfigured": "Nenhum token definido" } } }, @@ -3161,17 +4608,32 @@ "noProviderResponse": "Nenhuma resposta do provedor", "unexpected": "Erro inesperado do provedor" } - } + }, + "expandDetails": "Exibir detalhes do {name}", + "collapseDetails": "Ocultar detalhes de {name}" }, "networkControllerSummary": { - "option": {}, - "card": { - "vpn": { - "countConnected": "{count} conectados" + "advanced": { + "updated": "Atualizado", + "metric": { + "latency": "Latência", + "ping": "Latência", + "uptime": "Tempo de atividade", + "users": "Usuários", + "guests": "Convidados" } }, + "card": { + "vpn": { + "countConnected": "{count, plural, one {# conectado} other {# conectado}}", + "label": "VPN" + }, + "wan": "WAN", + "web": "Web", + "wifi": "Wi-Fi", + "lan": "LAN" + }, "error": { - "integrationsDisconnected": "Nenhum dado disponível, todas as integrações estão desconectadas", "unknownContentOption": "Opção de conteúdo desconhecida para o widget de resumo do controlador de rede: " }, "name": "Resumo do Controlador de Rede", @@ -3208,7 +4670,6 @@ } }, "error": { - "integrationsDisconnected": "Nenhum dado disponível, todas as integrações estão desconectadas", "unknownContentOption": "Opção de conteúdo desconhecida para o widget de status de rede: " }, "name": "Status da Rede", @@ -3238,7 +4699,6 @@ "versiontitle": "Versões", "cputitle": "Uso da CPU", "memorytitle": "Uso da memória", - "cpu": "CPU", "memory": "Memória", "interfaces": { "name": "nome", @@ -3246,6 +4706,16 @@ "recv": "Recebido", "title": "Interfaces de rede" } + }, + "empty": { + "noInterfaces": "Ainda não há dados de interface de rede" + }, + "versionUnknown": "Versão desconhecida", + "metricAccessible": "{metric}: {value}%, {status}", + "status": { + "normal": "normal", + "warning": "ATENÇÃO", + "critical": "Crítica" } }, "notifications": { @@ -3255,8 +4725,21 @@ "option": { "hideLogos": { "label": "Ocultar logotipos" + }, + "messageFormat": { + "label": "Formato da mensagem", + "option": { + "auto": "Automático", + "plain": "Texto sem formatação", + "markdown": "Markdown", + "html": "HTML" + } } - } + }, + "openService": "Abrir serviço de notificação", + "deleteNotification": "Excluir notificação do Gotify", + "deleteFailed": "Não foi possível excluir a notificação", + "deleteFailedMessage": "A notificação não pode ser excluída. Por favor, tente novamente." }, "speedtestTracker": { "name": "Speedtest Tracker", @@ -3298,7 +4781,6 @@ } }, "uptimeKuma": { - "name": "Uptime Kuma", "description": "Monitore as estatísticas de disponibilidade da sua página de status do Uptime Kuma", "option": { "showAverageUptime": { @@ -3335,8 +4817,58 @@ }, "error": { "internalServerError": "Falha ao buscar dados de disponibilidade" + }, + "status": { + "up": "Total enviado", + "down": "Velocidade de download", + "paused": "Pausado" } }, + "traefik": { + "description": "Visão geral dos roteadores, serviços, middlewares e pontos de entrada do Traefik", + "option": { + "showTcp": { + "label": "Exibir TCP" + }, + "showUdp": { + "label": "Exibir UDP" + }, + "showEntryPoints": { + "label": "Exibir pontos de entrada" + } + }, + "instances": "Instâncias do Traefik", + "versionUnknown": "Versão desconhecida", + "summary": { + "routers": "Roteadores", + "entryPoints": "Pontos de entrada" + }, + "resource": { + "routers": "Roteadores", + "middlewares": "Middlewares" + }, + "status": { + "healthy": "Saudável", + "errors": "{count} erros", + "warnings": "{count} avisos" + }, + "error": { + "internalServerError": "Falha ao buscar dados do Traefik" + }, + "resourceType": { + "router": "Roteador", + "service": "Serviço", + "middleware": "Mediador" + }, + "resourceStatus": { + "enabled": "Ativado", + "disabled": "Desabilitado", + "warning": "ATENÇÃO", + "error": "Erro", + "unknown": "Desconhecido" + }, + "failedEndpoint": "Falhou: {endpoint}" + }, "audioStats": { "name": "Estatísticas de áudio", "description": "Estatísticas da biblioteca e da reprodução do Navidrome ou Audiobookshelf", @@ -3401,9 +4933,7 @@ "label": "Gráficos visíveis", "description": "Selecione os gráficos que você deseja que estejam visíveis.", "option": { - "cpu": "CPU", "memory": "Memória", - "gpu": "GPU", "network": "Rede" } }, @@ -3418,12 +4948,11 @@ } }, "card": { - "cpu": "CPU", "memory": "MEM", - "gpu": "GPU", "network": "REDE", "up": "", - "down": "BAIXA" + "down": "BAIXA", + "memoryTooltip": "{used} / {available} ({percent}%)" } }, "systemDisks": { @@ -3449,151 +4978,88 @@ }, "showBackgroundBar": { "label": "Exibir barra de uso em segundo plano" - }, - "visibleStorageVolumes": { - "label": "Volumes de armazenamento visíveis", - "description": "Disponível apenas quando todas as integrações selecionadas são Synology. Deixe vazio para exibir todos os volumes de armazenamento detectados.", - "placeholder": "Selecione os volumes de armazenamento" } }, "status": { - "unhealthy": "Não saudável" + "unhealthy": "Não saudável", + "smart": "INTELIGENTE", + "free": "{percentage}% grátis" + } + }, + "customApi": { + "name": "Widget personalizado", + "description": "Renderizar uma definição JSX personalizada configurada.", + "customJsx": { + "noTemplate": "Nenhum modelo JSX está configurado.", + "templateWarnings": "Alertas de modelos {count}", + "requestIdRequired": "Este controle de rede requer uma ID de solicitação chamada.", + "unsavedPreview": "Execute o teste de solicitação inicial no editor antes de testar solicitações nomeadas.", + "invalidParams": "Os parâmetros solicitados são inválidos.", + "loading": "Carregando solicitação...", + "loadRequest": "Pedido de carga", + "requestFailed": "A solicitação falhou.", + "retry": "Repetir a requisição", + "actionCompleted": "Ação concluída com sucesso.", + "actionSimulated": "Ação simulada; nenhum pedido foi enviado.", + "actionsDisabledEditMode": "Ações estão desativadas enquanto o board estiver no modo de edição.", + "widgetItemUnavailable": "Este item de widget não está disponível.", + "toggle": "Alternador", + "copied": "Copiado", + "confirmDelete": "Confirme esta ação destrutiva." + }, + "option": { + "definitionId": { + "label": "Widget personalizado" + }, + "refreshInterval": { + "label": "Intervalo de atualização", + "description": "Com que frequência buscar novamente os dados da API (em segundos)" + } + }, + "noDefinition": "Nenhuma definição selecionada", + "definitionNotFound": "Widget personalizado indisponível", + "migrationRequired": "Este widget personalizado legado é preservado, mas deve ser migrado para JSX personalizado v2 de Gerenciar widgets personalizados antes de ser executado.", + "manageMigration": "Abrir Gerenciar Widgets Personalizados", + "contactAdmin": "Entre em contato com um administrador.", + "configurationNeedsRepair": "As opções deste widget mudaram. Edite o widget para reparar sua configuração.", + "removeFromBoard": "Remover do board", + "editModePending": "Salve a placa para carregar este widget.", + "picker": { + "group": "Widgets JSX personalizados", + "empty": "Nenhum widget personalizado encontrado", + "preview": "Pré-visualizar", + "sources": "{count, plural, one {# source} other {# sources}}", + "requests": "{count, plural, one {# pedido} other {# Solicitações}}", + "migrationRequired": "Migração necessária", + "migrationDescription": "Este widget colocado v1 não pode ser executado ainda. Copie seu prompt redact para uma LLM e, em seguida, cole a única resposta JSON no Homarr.", + "manageMigration": "Abrir Gerenciar Widgets Personalizados", + "contactAdmin": "Entre em contato com um administrador." + }, + "configuration": { + "needsAttention": "Configuração precisa de atenção: {message}", + "advancedOptions": "Opções avançadas", + "invalidJson": "JSON inválido" } }, "beszelSystemTable": { "name": "Sistemas Beszel (Tabela)", "description": "Visualização em tabela de todos os sistemas monitorados pelo Beszel com colunas classificáveis e indicadores de status", "option": { - "statusFilter": { - "label": "Filtro de status" - }, "sortBy": { "label": "Ordenar por" }, "sortDirection": { "label": "Direção da ordenação" - }, - "showCpu": { - "label": "Exibir CPU" - }, - "showMemory": { - "label": "Exibir memória" - }, - "showDisk": { - "label": "Exibir disco" - }, - "showGpu": { - "label": "Exibir GPU" - }, - "showLoadAvg": { - "label": "Exibir carga média" - }, - "showNet": { - "label": "Exibir rede" - }, - "showTemp": { - "label": "Exibir temperatura" - }, - "showBattery": { - "label": "Exibir bateria" - }, - "showServices": { - "label": "Exibir serviços" - }, - "showUptime": { - "label": "Exibir uptime" - }, - "showAgent": { - "label": "Exibir versão do agente" - }, - "columnOrder": { - "label": "Ordem das colunas" - }, - "columnWidths": { - "label": "Larguras das colunas" } }, - "noRecords": "Nenhum sistema encontrado", "error": { - "internalServerError": "Não foi possível conectar ao Beszel. Verifique as configurações da integração.", "layoutSaveTitle": "Não foi possível salvar o layout da tabela", "layoutSaveMessage": "Não foi possível salvar a ordem ou as larguras das colunas. Tente novamente." - }, - "column": { - "system": "Sistema", - "cpu": "CPU", - "memory": "Memória", - "disk": "Disco", - "gpu": "GPU", - "loadAvg": "Carga Média", - "net": "Rede", - "temp": "Temp", - "battery": "Bat", - "services": "Serviços", - "uptime": "Tempo de atividade", - "agent": "Agente" } }, "beszelSystemGrid": { "name": "Sistemas Beszel (Grade)", - "description": "Visualização em grade de cartões de todos os sistemas monitorados pelo Beszel com métricas em tempo real", - "option": { - "statusFilter": { - "label": "Filtro de status" - }, - "showCpu": { - "label": "Exibir CPU" - }, - "showMemory": { - "label": "Exibir memória" - }, - "showDisk": { - "label": "Exibir disco" - }, - "showGpu": { - "label": "Exibir GPU" - }, - "showLoadAvg": { - "label": "Exibir carga média" - }, - "showNet": { - "label": "Exibir rede" - }, - "showTemp": { - "label": "Exibir temperatura" - }, - "showBattery": { - "label": "Exibir bateria" - }, - "showServices": { - "label": "Exibir serviços" - }, - "showUptime": { - "label": "Exibir uptime" - }, - "showAgent": { - "label": "Exibir versão do agente" - } - }, - "error": { - "internalServerError": "Não foi possível conectar ao Beszel. Verifique as configurações da integração." - }, - "empty": { - "noSystems": "Nenhum sistema encontrado" - }, - "metric": { - "cpu": "CPU", - "memory": "Memória", - "disk": "Disco", - "gpu": "GPU", - "loadAvg": "Carga Média", - "net": "Rede", - "temp": "Temp", - "battery": "Bat", - "services": "Serviços", - "uptime": "Tempo de atividade", - "agent": "Agente" - } + "description": "Visualização em grade de cartões de todos os sistemas monitorados pelo Beszel com métricas em tempo real" }, "beszelAlerts": { "name": "Alertas Beszel", @@ -3607,11 +5073,12 @@ } }, "empty": "Nenhum alerta configurado", - "error": { - "internalServerError": "Não foi possível conectar ao Beszel. Verifique as configurações da integração." - }, "history": "Histórico", "resolved": "Resolvido", + "alertDescription": { + "statusDuration": "{minutes} min abaixo", + "threshold": "Excede {value} em {minutes} min" + }, "status": { "triggered": "Disparado", "ok": "OK" @@ -3658,16 +5125,16 @@ "noSystems": "Nenhum sistema encontrado" }, "error": { - "internalServerError": "Não foi possível conectar ao Beszel. Verifique as configurações da integração.", "liveConnectionFailed": "Falha na conexão ao vivo. Sua instância do Beszel pode não oferecer suporte à transmissão em tempo real.", "switchToHistorical": "Mudar para a visualização histórica", - "systemNotFound": "O sistema selecionado não foi encontrado. Escolha outro sistema." + "systemNotFound": "O sistema selecionado não foi encontrado. Escolha outro sistema.", + "selectionSaveTitle": "Não é possível salvar a seleção", + "selectionSaveMessage": "Sua seleção de sistema ou período de tempo não pôde ser salva. Por favor, tente novamente." }, "chart": { "cpu": { "title": "Uso da CPU", - "subtitle": "Utilização média da CPU em todo o sistema", - "series": "CPU" + "subtitle": "Utilização média da CPU em todo o sistema" }, "memory": { "title": "Uso de Memória", @@ -3709,289 +5176,550 @@ "title": "E/S de Rede Docker", "subtitle": "Tráfego de rede dos contêineres Docker" } + }, + "period": { + "live": "Publicado", + "oneHour": "1h", + "twelveHours": "12h", + "oneDay": "24h", + "oneWeek": "1sem", + "thirtyDays": "30d" } }, - "patchmon": { - "name": "PatchMon", - "description": "Visão geral do status dos patches dos hosts pelo PatchMon", - "title": "Estatísticas do PatchMon", - "totalHosts": "Total de hosts", - "hostsNeedingUpdates": "Precisa de atualizações", - "securityUpdates": "Atualizações de segurança", - "upToDateHosts": "Hosts atualizados", - "hostsWithSecurityUpdates": "Hosts com atualizações de segurança", - "recentUpdates24h": "Atualizações (24 h)", - "totalOutdatedPackages": "Pacotes desatualizados", - "totalRepos": "Repositórios", - "osDistribution": "Distribuição do sistema operacional", - "compliance": "Conformidade dos patches", - "complianceRatio": "{upToDate} / {total}", - "lastUpdated": "Atualizado {time}", - "option": { - "showTotalHosts": { - "label": "Exibir total de hosts", - "description": "Exibir o número total de hosts monitorados" - }, - "showHostsNeedingUpdates": { - "label": "Exibir hosts que precisam de atualizações", - "description": "Exibir hosts com pelo menos um pacote desatualizado" - }, - "showSecurityUpdates": { - "label": "Exibir atualizações de segurança", - "description": "Exibir o número total de atualizações de segurança disponíveis" - }, - "showUpToDateHosts": { - "label": "Exibir hosts atualizados", - "description": "Exibir hosts sem pacotes desatualizados" - }, - "showHostsWithSecurityUpdates": { - "label": "Exibir hosts com atualizações de segurança", - "description": "Exibir hosts que exigem patches de segurança" - }, - "showRecentUpdates24h": { - "label": "Exibir atualizações recentes (24 h)", - "description": "Exibir o número de atualizações aplicadas nas últimas 24 horas" - }, - "showTotalOutdatedPackages": { - "label": "Exibir pacotes desatualizados", - "description": "Exibir o número total de pacotes desatualizados em todos os hosts" - }, - "showTotalRepos": { - "label": "Exibir repositórios", - "description": "Exibir o número de repositórios ativos monitorados" - }, - "enableThresholdColors": { - "label": "Ativar cores de limite", - "description": "Colorir os valores das estatísticas de verde, amarelo ou vermelho com base nas predefinições de gravidade" - }, - "useCustomThresholds": { - "label": "Limites avançados", - "description": "Personalize os limites de aviso e crítico por estatística usando contagens absolutas ou porcentagens do total de hosts" - }, - "thresholdMode": { - "option": { - "absolute": "Contagem absoluta", - "percent": "Porcentagem do total de hosts" - } - }, - "hostsNeedingUpdatesThresholdMode": { - "label": "Modo de limite de atualizações necessárias", - "description": "Compare a contagem de atualizações necessárias como valor absoluto ou porcentagem do total de hosts" - }, - "hostsNeedingUpdatesWarningAt": { - "label": "Limite de aviso de atualizações necessárias", - "description": "Insira amarelo quando o valor atingir este limite" - }, - "hostsNeedingUpdatesCriticalAt": { - "label": "Limite crítico de atualizações necessárias", - "description": "Insira vermelho quando o valor atingir este limite" - }, - "securityUpdatesThresholdMode": { - "label": "Modo de limite de atualizações de segurança", - "description": "Compare a contagem de atualizações de segurança como valor absoluto ou porcentagem do total de hosts" - }, - "securityUpdatesWarningAt": { - "label": "Limite de aviso de atualizações de segurança", - "description": "Insira amarelo quando o valor atingir este limite" - }, - "securityUpdatesCriticalAt": { - "label": "Limite crítico de atualizações de segurança", - "description": "Insira vermelho quando o valor atingir este limite" - }, - "hostsWithSecurityUpdatesThresholdMode": { - "label": "Modo de limite de hosts com atualizações de segurança", - "description": "Compare a contagem de hosts como valor absoluto ou porcentagem do total de hosts" - }, - "hostsWithSecurityUpdatesWarningAt": { - "label": "Limite de aviso de hosts com atualizações de segurança", - "description": "Insira amarelo quando o valor atingir este limite" - }, - "hostsWithSecurityUpdatesCriticalAt": { - "label": "Limite crítico de hosts com atualizações de segurança", - "description": "Insira vermelho quando o valor atingir este limite" - }, - "upToDateHostsThresholdMode": { - "label": "Modo de limite de hosts atualizados", - "description": "Compare a contagem de hosts atualizados como valor absoluto ou porcentagem do total de hosts" - }, - "upToDateHostsWarningAt": { - "label": "Limite de aviso de hosts atualizados", - "description": "Insira amarelo quando o valor estiver neste limite ou acima dele, mas abaixo da cobertura total" - }, - "upToDateHostsCriticalAt": { - "label": "Limite crítico de hosts atualizados", - "description": "Insira vermelho quando o valor ficar abaixo deste limite" - }, - "totalOutdatedPackagesThresholdMode": { - "label": "Modo de limite de pacotes desatualizados", - "description": "Compare a contagem de pacotes desatualizados como valor absoluto ou porcentagem do total de hosts" - }, - "totalOutdatedPackagesWarningAt": { - "label": "Limite de aviso de pacotes desatualizados", - "description": "Insira amarelo quando o valor atingir este limite" - }, - "totalOutdatedPackagesCriticalAt": { - "label": "Limite crítico de pacotes desatualizados", - "description": "Insira vermelho quando o valor atingir este limite" - }, - "showOsDistribution": { - "label": "Exibir distribuição do sistema operacional", - "description": "Exibir uma divisão dos hosts monitorados por sistema operacional" - }, - "osDistributionLimit": { - "label": "Limite da distribuição do sistema operacional", - "description": "Número máximo de sistemas operacionais a exibir", - "option": { - "3": "3 principais", - "5": "5 principais", - "10": "10 principais", - "all": "Todos" - } - }, - "showOsVersion": { - "label": "Exibir versão do sistema operacional", - "description": "Acrescentar a versão do sistema operacional a cada rótulo de distribuição quando disponível" - }, - "showComplianceHero": { - "label": "Exibir destaque de conformidade", - "description": "Exibir um anel de conformidade mostrando a porcentagem de hosts atualizados" - }, - "osDisplayMode": { - "label": "Modo de exibição do sistema operacional", - "description": "Escolha como exibir a distribuição do sistema operacional", - "option": { - "bars": "Barras horizontais", - "donut": "Gráfico de rosca" - } - } + "assistant": { + "name": "Assistente", + "description": "Tenha uma conversa completa de assistente diretamente no seu quadro.", + "unavailable": { + "title": "Assistente indisponível", + "description": "Entre e peça a um administrador para configurar o Assistente a partir do painel de gerenciamento." }, + "compact": { + "title": "Assistente", + "description": "Redimensionar este widget para conversar aqui, ou abrir uma conversa completa.", + "open": "Abrir assistente", + "openTitle": "Assistente abre no painel lateral", + "openDescription": "A conversa permanece em uma superfície ativa.", + "returnToWidget": "Retornar a conversa para este widget", + "otherWidgetTitle": "Assistente ativo em outro widget", + "otherWidgetDescription": "Apenas uma superfície de conversa permanece ativa de cada vez.", + "useHere": "Use o assistente neste widget" + } + }, + "beszel": { "error": { - "internalServerError": "Falha ao buscar dados do PatchMon" - } - }, - "bazarr": { - "name": "Bazarr", - "description": "Visão geral das legendas ausentes e do status de integridade da sua instância do Bazarr", - "episodes": "Episódios ausentes", - "movies": "Filmes ausentes", - "providers": "Problemas dos provedores", - "status": "Problemas de integridade", - "option": { - "showMissingEpisodes": { - "label": "Exibir episódios ausentes", - "description": "Exibir o número de episódios com legendas ausentes" - }, - "showMissingMovies": { - "label": "Exibir filmes ausentes", - "description": "Exibir o número de filmes com legendas ausentes" - }, - "showProviderIssues": { - "label": "Exibir problemas dos provedores", - "description": "Exibir o número de provedores de legendas com problemas" - }, - "showHealthIssues": { - "label": "Exibir problemas de integridade", - "description": "Exibir o número de problemas de integridade do Bazarr" - } - }, - "error": { - "internalServerError": "Falha ao buscar dados do Bazarr" - } - }, - "mediaMissing": { - "name": "Mídia ausente e na fila", - "description": "Exibe filmes e episódios ausentes e na fila do Radarr e Sonarr", - "option": { - "showMissing": { - "label": "Exibir itens ausentes" - }, - "showQueued": { - "label": "Exibir itens na fila" - }, - "pageSize": { - "label": "Itens por página" - } - }, - "tab": { - "missing": "Ausentes", - "queued": "Na fila" - }, - "type": { - "movie": "Filme", - "episode": "Episódio" + "internalServerError": "Não foi possível conectar ao Beszel. Verifique suas configurações de integração." }, "empty": { - "missing": "Nenhum item ausente", - "queued": "Nenhum item na fila", - "noTabsEnabled": "Ative pelo menos uma aba nas configurações do widget" + "noSystems": "Nenhum sistema encontrado" }, - "timeLeft": "Tempo restante" - }, - "traefik": { - "name": "Traefik", - "description": "Visão geral dos roteadores, serviços, middlewares e pontos de entrada do Traefik", - "option": { - "showTcp": { - "label": "Exibir TCP" + "options": { + "statusFilter": { + "label": "Filtro de Status" }, - "showUdp": { - "label": "Exibir UDP" + "showCpu": { + "label": "Mostrar CPU" }, - "showEntryPoints": { - "label": "Exibir pontos de entrada" + "showMemory": { + "label": "Mostrar memória" + }, + "showDisk": { + "label": "Mostrar disco" + }, + "showGpu": { + "label": "Mostrar GPU" + }, + "showLoadAvg": { + "label": "Mostrar média de carga" + }, + "showNet": { + "label": "Mostrar rede" + }, + "showTemp": { + "label": "Mostrar temperatura" + }, + "showBattery": { + "label": "Mostrar bateria" + }, + "showServices": { + "label": "Exibir serviços" + }, + "showUptime": { + "label": "Exibir uptime" + }, + "showAgent": { + "label": "Mostrar versão do agente" } }, - "instances": "Instâncias do Traefik", - "versionUnknown": "Versão desconhecida", - "summary": { - "routers": "Roteadores", - "entryPoints": "Pontos de entrada" - }, - "resource": { - "routers": "Roteadores", - "services": "Serviços", - "middlewares": "Middlewares" - }, - "status": { - "healthy": "Saudável", - "errors": "{count} erros", - "warnings": "{count} avisos" - }, - "error": { - "internalServerError": "Falha ao buscar dados do Traefik" + "metric": { + "system": "Sistema", + "source": "Integração", + "hostname": "Hostname", + "cpuModel": "Modelo da CPU", + "cores": "Núcleos", + "memoryTotal": "Total de memória", + "memory": "Memória", + "disk": "Disco", + "loadAvg": "Carga Média", + "net": "Líquido", + "temp": "Temperatura", + "battery": "Morcego", + "uptime": "Tempo de atividade", + "agent": "Representante" } }, - "wud": { - "name": "O Docker", - "description": "Mostrar quantos contêineres assistidos possuem atualizações disponíveis.", - "title": "O Docker", - "monitored": "Monitorado", - "updatesAvailable": "{count, plural, one {# atualização disponível} other {# atualizações disponíveis}}", - "updateAvailable": "Atualização disponível", - "openReleaseNotes": "Abrir notas de lançamento", + "llamacpp": { + "name": "llama.cpp", + "description": "Mostra a saúde, modelo carregado e velocidade de geração do seu servidor llama.cpp local.", + "title": "llama.cpp", + "status": { + "unhealthy": "Insalubre ({status})" + }, + "idle": "Ocioso", + "speedTooltip": { + "current": "Velocidade atual de geração", + "average": "Velocidade média de geração desde a inicialização", + "request": "Velocidade média desde que esta solicitação começou" + }, + "busy": "{count, plural, one {# solicitação para executar} other {# solicitações executando}}", + "modelInfo": { + "context": "Contexto", + "size": "Tamanho do arquivo", + "parameters": "Parâmetros", + "model": "Modelo", + "quantization": "Quantização" + }, + "stats": { + "tokensProcessed": "Tokens processados", + "contextUsage": "Uso de contexto / KV", + "cacheHitRate": "Taxa de acerto em cache rápida", + "tokensGenerated": "Tokens gerados" + }, + "error": { + "unreachable": "llama-server não está acessível" + }, + "unit": { + "speed": "{value} t/s", + "parameters": "{value}B", + "none": "—", + "speedShort": "t/s" + }, "option": { "showTitle": { "label": "Mostrar título" }, - "showRing": { - "label": "Mostrar atualização de toque" + "showModelInfo": { + "label": "Mostrar informações do modelo" }, - "layout": { - "label": "Disposição", + "showContextUsage": { + "label": "Mostrar uso do contexto" + }, + "showCacheHitRate": { + "label": "Mostrar taxa de acerto em cache" + }, + "showSpeedStats": { + "label": "Mostrar estatísticas de velocidade" + }, + "showRequests": { + "label": "Mostrar solicitação de carregamento" + }, + "showTokenStats": { + "label": "Mostrar totais de token" + }, + "showSpeculative": { + "label": "Mostrar decodificação especulativa" + } + }, + "advanced": { + "promptSpeed": "Velocidade do alerta", + "avgSpeed": "Geração média", + "requests": "Solicitações", + "deferred": "Adiado", + "slots": "{processing}/{total} slots ocupados", + "speculative": "Decodificação especulativa", + "avgPrompt": "Prompt média", + "specDrafts": "Rascunhos de fala", + "specAccepted": "Spec. tokens aceitos", + "specDraftTokens": "Tokens de rascunho especificados" + } + }, + "stats": { + "name": "Estatísticas", + "description": "Combine estatísticas de suas integrações em um widget configurável.", + "configure": "Configurar métricas", + "refresh": "Atualizar estatísticas", + "empty": "Abra configurações de widget, selecione integrações e adicione métricas.", + "editorHelp": "Adicione métricas a partir das integrações selecionadas para este widget. As alterações são salvas no seu painel.", + "source": "Integração", + "metric": "Métrico", + "noMetrics": "Não há estatísticas disponíveis para essa integração", + "add": "Adicionar métrica", + "label": "Etiqueta personalizada", + "hidden": "Oculto", + "compact": "Números compactos", + "moveUp": "Subir", + "moveDown": "Mover para baixo", + "remove": "Remover métrica", + "loading": "Carregando…", + "unavailable": "Unavailable", + "refreshFailed": "Atualização falhou - mostrando dados salvos", + "stale": "Dados salvos - atualize para atualizar", + "table": { + "value": "Valor", + "status": "SItuação" + }, + "option": { + "table": { + "label": "Exibição em tabela" + }, + "rows": { + "label": "Linhas compactas" + }, + "showIcon": { + "label": "Mostrar ícone de origem" + }, + "spacing": { + "label": "Espaçamento", "option": { - "horizontal": { - "label": "Horizontal" + "xs": { + "label": "Compacta" }, - "vertical": { - "label": "Vertical" + "sm": { + "label": "Confortável" + }, + "md": { + "label": "Indomável" } } }, - "showUpdateList": { - "label": "Mostrar lista de atualização do recipiente", - "description": "Lista cada container monitorado que tem uma atualização de imagem disponível" + "entries": { + "label": "Métricas" + }, + "plain": { + "label": "Remover fundos do cartão" } - } + }, + "fetchFailed": "Não foi possível recuperar estatísticas", + "viewOptions": "Personalizar esta visão", + "moreMetrics": "Mais {count} na visão avançada", + "localHelp": "Layout, formatação e visibilidade aplicam-se somente a esta vista. As configurações do board compartilhado permanecem as mesmas.", + "plain": "Remover fundos do cartão", + "resetView": "Redefinir visão", + "allHidden": "Todas as métricas estão escondidas nesta exibição. Use Personalizar essa exibição para restaurá-las." + }, + "wazuh": { + "target": { + "api": "API de servidor Wazuh", + "indexer": "Indexador de imagens", + "wazuh": "Wazuh" + }, + "severity": { + "low": "baixa", + "medium": "Médio", + "high": "alta", + "critical": "Crítica" + }, + "error": { + "unauthorized": { + "title": "{target} rejeitou as credenciais", + "description": "Verifique o nome de usuário e senha salvos na integração do Wazuh. A API do servidor (porta 55000) e o indexador (porta 9200) usam usuários separados." + }, + "certificate": { + "title": "Certificado {target} não é confiável", + "description": "O Wazuh usa um certificado auto-assinado por padrão. Execute a \"Conexão de teste\" na integração e confie no certificado, ou adicione sua CA em Configurações → Certificados." + }, + "unreachable": { + "title": "Não foi possível alcançar {target}", + "description": "O host recusou ou soltou a conexão. Verifique o URL, a porta e o firewall. O indexador só escuta localhost em uma instalação padrão tudo-em-um." + }, + "timeout": { + "title": "{target} expirou", + "description": "Nenhuma resposta dentro de 15 segundos. O serviço pode ser sobrecarregado ou o endereço pode estar errado." + }, + "status": { + "title": "{target} retornou um erro", + "description": "O pedido falhou com status HTTP {status}." + }, + "invalidResponse": { + "title": "Resposta inesperada de {target}", + "description": "Verifique que a URL aponta para a API ou indexador do servidor do Wazuh e não para o painel." + }, + "indexerRequired": { + "title": "Credenciais do indexador Wazuh necessárias", + "description": "Alertas, vulnerabilidades e eventos de integridade do arquivo são lidos pelo indexador do Wazuh. Adicione um URL indexador, nome de usuário e senha à integração." + }, + "unknown": { + "title": "Não foi possível carregar os dados do {target}", + "description": "Verifique os logs do Homarr para detalhes." + } + }, + "range": { + "1h": "1h", + "24h": "24h", + "7d": "7a", + "30d": "30d" + }, + "levelTooltip": "Nível da regra {level} ({severity})" + }, + "wazuhAgents": { + "name": "Agentes Wazuh", + "description": "Lista ordenada de agentes Wazuh com status, SO, versão e última manutenção", + "option": { + "statusFilter": { + "label": "Mostrar agentes" + }, + "sortBy": { + "label": "Classificar por" + }, + "showVersion": { + "label": "Mostrar coluna de versão Wazuh" + }, + "showGroups": { + "label": "Mostrar coluna de grupos" + } + }, + "title": "agentes", + "total": "{count} agentes", + "status": { + "active": "Ativo", + "disconnected": "Desconectado", + "neverConnected": "Nunca conectado", + "pending": "Pendente" + }, + "statusLabel": { + "active": "Ativo", + "disconnected": "Desconectado", + "never_connected": "Nunca conectado", + "pending": "Pendente", + "unknown": "Desconhecido" + }, + "live": "Publicado", + "snapshot": "Snapshot com {age}", + "snapshotHint": "Leia o snapshot do agente do Wazuh (monitoramento wazuh-) tomado em {time}. Adicione credenciais da API do servidor para dados ao vivo.", + "staleSnapshot": "O snapshot do agente de {time} está desatualizado. Verifique se a tarefa de monitoramento do Wazuh está sendo executada, ou adicione as credenciais de API do servidor.", + "noDisconnected": "Todos os agentes estão conectados", + "empty": "Nenhum agente corresponde a este filtro", + "column": { + "status": "SItuação", + "name": "Nome do trabalho", + "ip": "PI", + "os": "SO", + "version": "Versão", + "lastKeepAlive": "Manter", + "groups": "Grupos" + }, + "outdated": "Mais antigo do que a versão mais recente do agente ({version})" + }, + "wazuhAlerts": { + "name": "Feed de alertas Wazuh", + "description": "Alertas recentes do Wazuh com nível, Técnicas ATT&CK de MITRE e IP de origem", + "option": { + "minLevel": { + "label": "Nível mínimo de regra", + "description": "Níveis do Wazuh: 0-6 baixo, 7-11 médio, 12-14 de altura, 15+ crítico" + }, + "hours": { + "label": "Janela de Tempo (horas)" + }, + "limit": { + "label": "Número de alertas" + }, + "showMitre": { + "label": "Show MITRE ATT&CK techniques" + }, + "showAgent": { + "label": "Mostrar agente" + }, + "showSourceIp": { + "label": "Mostrar IP de origem" + }, + "showRuleId": { + "label": "Mostrar ID da regra" + } + }, + "title": "Alertas · Nível {level}+ · {hours}h", + "empty": "Não há alertas neste nível. Tudo em silêncio.", + "rule": "Regra {id}", + "openInDashboard": "Abrir este alerta no painel do Wazuh" + }, + "wazuhSummary": { + "name": "Severidade de alerta Wazuh", + "description": "Alerta de gravidade com tendência contra o período anterior", + "option": { + "range": { + "label": "Intervalo de tempo" + }, + "showTrend": { + "label": "Mostrar tendência contra o período anterior" + }, + "showFooter": { + "label": "Mostrar rodapé" + } + }, + "title": "Severidade de alerta · {range}", + "alerts": "alertas", + "none": "Sem alertas", + "trend": { + "new": "novo", + "tooltip": "Período anterior: {previous}" + }, + "previous": "{range}anterior: {count}", + "maxLevel": "Nível Máximo {level}", + "health": "Vida do indexador: {status}", + "manager": "Gerente {version}" + }, + "wazuhTimeline": { + "name": "Wazuh alerts timeline", + "description": "Gráfico empilhado de alertas Wazuh ao longo do tempo por gravidade", + "option": { + "range": { + "label": "Intervalo de tempo" + }, + "interval": { + "label": "Intervalo" + }, + "chartType": { + "label": "Tipo de gráfico" + }, + "yScale": { + "label": "Escala do eixo Y", + "description": "A raiz quadrada mantém alertas altos e críticos visíveis ao lado de milhares de alertas baixos" + }, + "minLevel": { + "label": "Nível mínimo de regra" + }, + "showLegend": { + "label": "Mostrar legenda com os totais" + } + }, + "title": "Linha de tempo dos alertas · {range}", + "total": "{count} alertas", + "interval": "por {interval}" + }, + "wazuhTopList": { + "name": "Lista principal do Wazuh", + "description": "Principais regras, agentes, IPs de origem ou ATTáticas e técnicas de MITRE por contagem de alertas", + "option": { + "kind": { + "label": "Classificação" + }, + "range": { + "label": "Intervalo de tempo" + }, + "limit": { + "label": "Número de postagens" + }, + "minLevel": { + "label": "Nível mínimo de regra" + }, + "showBars": { + "label": "Mostrar barras" + } + }, + "title": { + "rules": "Principais Regras · {range}", + "agents": "Melhores agentes · {range}", + "sourceIps": "IPs de maior fonte · {range}", + "mitreTactics": "Tática de MITRE · {range}", + "mitreTechniques": "MITRE techniques · {range}" + }, + "empty": { + "rules": "Não há alertas neste período", + "agents": "Não há alertas neste período", + "sourceIps": "Não há alertas com um IP de origem neste período", + "mitreTactics": "Nenhum alerta mapeado para ATT&CK MITRE neste período", + "mitreTechniques": "Nenhum alerta mapeado para ATT&CK MITRE neste período" + }, + "totalTooltip": "{count} alertas correspondentes", + "private": "LAN", + "public": "Público", + "agents": "Visto em agentes de {count}", + "others": "Mais {count} alertas em outras entradas" + }, + "wazuhVulnerabilities": { + "name": "Vulnerabilidades Wazuh", + "description": "Contagens de vulnerabilidades, principais CVEs e os agentes mais vulneráveis", + "option": { + "cveOrder": { + "label": "CVEs de classificação por" + }, + "minSeverity": { + "label": "Severidade do CVE" + }, + "cveLimit": { + "label": "Número de CVEs" + }, + "agentLimit": { + "label": "Número de agentes" + }, + "showAgents": { + "label": "Mostrar os agentes mais vulneráveis" + } + }, + "title": "Vulnerabilidades", + "topCves": "Principais CVEs", + "score": "Pontuação", + "agentsShort": "agentes", + "topAgents": "Agentes mais vulneráveis", + "criticalHigh": "Crítico / Alto", + "totalTooltip": "{count} descobriu em {agents} agentes", + "affected": "{count} agentes", + "empty": "Nenhuma vulnerabilidade detectada", + "distribution": "Distribuição de severidade. Descobertas {unscored} sem pontuações não são mostradas.", + "worst": "Pior: {id} ({score}) sobre os agentes {agents}" + }, + "wazuhFim": { + "name": "Integridade do arquivo Wazuh", + "description": "Eventos recentes de integridade do arquivo (syscheck)", + "option": { + "range": { + "label": "Intervalo de tempo" + }, + "event": { + "label": "Eventos" + }, + "limit": { + "label": "Número de Eventos" + }, + "includeRegistry": { + "label": "Incluir eventos registrados do Windows" + } + }, + "title": "Integridade do arquivo · {range}", + "event": { + "added": "Data de adição", + "modified": "Modificado", + "deleted": "Excluído", + "unknown": "Alterado" + }, + "empty": "Nenhum evento de integridade de arquivo neste período", + "user": "por {user}", + "registry": "Registro" + }, + "wazuhAuthFailures": { + "name": "Falhas de autenticação Wazuh", + "description": "Logins falhados e alertas de força bruta por agente com sparklines horárias", + "option": { + "hours": { + "label": "Janela de Tempo (horas)" + }, + "limit": { + "label": "Número de agentes" + }, + "showSourceIps": { + "label": "Mostrar os principais IPs fonte" + } + }, + "title": "Falha de autenticação · {hours}h", + "seriesTooltip": "Todos os agentes sobre o último {hours}h", + "peak": "Pico {count}/bucket", + "empty": "Nenhum login com falha neste período", + "failed": "Logins falhados", + "failedHint": "Falhas únicas de autenticação (sshd, PAM, logon do Windows, usuários inválidos)", + "bruteForce": "Força bruta", + "bruteForceHint": "Regras brute-force relacionadas (várias falhas em um curto período, MITRE T1110)", + "sourceIps": "IPs de origem", + "ipTooltip": "{ip}: Falhas {count}", + "bruteForceCount": "{count} força bruta" } }, "widgetPreview": { @@ -4004,7 +5732,76 @@ } }, "board": { + "emptyState": { + "title": "Construa sua primeira vista", + "description": "Adicione um widget ou aplicativo, ou conecte um serviço e use seus dados neste board.", + "addWidget": "Adicionar widget", + "addApp": "Adicionar aplicativo", + "connectService": "Conectar serviço" + }, + "setupChecklist": { + "title": "Tornar este quadro útil", + "description": "Continue de onde você parou. O progresso segue o conteúdo já existente neste tabuleiro.", + "collapse": "Recolher checklist de configuração", + "dismiss": "Descartar checklist de configuração", + "resume": "Continuar configuração ({completed}/{total})", + "progress": "Progresso do quadro", + "step": { + "content": { + "label": "Adicionar conteúdo útil", + "description": "Escolha um widget e configure-o antes de ser colocado." + }, + "app": { + "label": "Fixar um aplicativo", + "description": "Manter um serviço ou ferramenta a um clique fora deste quadro." + }, + "service": { + "label": "Conectar um serviço", + "description": "Desbloqueie dados ao vivo e ações para widgets compatíveis.", + "permissionDescription": "Um administrador pode conectar um serviço para desbloquear dados ao vivo.", + "action": "Conectar" + } + } + }, "action": { + "addContent": "Adicionar conteúdo do board", + "settings": "Configurações do fórum", + "switch": "Trocar placa", + "switcher": { + "title": "Trocar placa", + "search": { + "empty": "Nenhum quadro corresponde \"{search}\"." + }, + "results": "Quadros disponíveis", + "preview": "Pré-visualização de {name} com {count} itens", + "currentHidden": "Quadro atual: {name}", + "keyboard": { + "navigate": "Navigate", + "open": "Abertas", + "instructions": "Digite para filtrar quadros. Use as setas do teclado para mover pelos resultados e Enter para abrir um quadro." + }, + "empty": { + "title": "Sem outros quadros", + "description": "Não há nenhuma outra seção que você possa acessar." + }, + "error": "Quadros não puderam ser carregados." + }, + "create": { + "availability": { + "checking": "Verificando disponibilidade…", + "available": "{name} está disponível" + }, + "notification": { + "success": { + "title": "Board criado", + "message": "O Board {name} foi criado" + }, + "error": { + "title": "Não foi possível criar board", + "message": "O Board {name} não pôde ser criado" + } + } + }, "duplicate": { "title": "Quadro duplicado", "message": "Isso duplicará o painel {name} com todo o seu conteúdo. Se os widgets fizerem referência a integrações que você não tem permissão para usar, eles serão removidos.", @@ -4020,14 +5817,19 @@ } }, "edit": { + "enter": "Editar quadro", + "save": "Salvar quadro", + "exit": "Sair do modo de edição", "notification": { "success": { - "title": "Alterações aplicadas com sucesso", "message": "O painel foi salvo com sucesso" }, "error": { - "title": "Não foi possível aplicar as alterações", "message": "O painel não pôde ser salvo" + }, + "loadError": { + "title": "Não é possível começar a editar", + "message": "Não foi possível carregar o editor de painel. Seu painel de controle ainda está disponível no modo de exibição." } }, "confirmLeave": { @@ -4035,62 +5837,6 @@ "message": "Você tem alterações não salvas, tem certeza de que deseja sair?" } }, - "oldImport": { - "label": "Importar do Homarr anterior à versão 1.0.0", - "notification": { - "success": { - "title": "Importação bem-sucedida", - "message": "O painel foi importado com sucesso" - }, - "error": { - "title": "Falha na importação", - "message": "O painel não pôde ser importado, verifique os logs para mais detalhes" - } - }, - "form": { - "file": { - "label": "Selecionar arquivo JSON", - "invalidError": "Arquivo de configuração inválido" - }, - "apps": { - "label": "Aplicativos", - "avoidDuplicates": { - "label": "Evitar duplicatas", - "description": "Ignora aplicativos onde já existe um aplicativo com o mesmo href" - }, - "onlyImportApps": { - "label": "Importar apenas aplicativos", - "description": "Apenas adiciona os aplicativos, o painel precisa ser recriado manualmente" - } - }, - "name": { - "label": "Nome do painel" - }, - "screenSize": { - "label": "Tamanho da tela", - "description": "Nas versões anteriores à 1.0, existiam três modos diferentes, então era possível escolher a quantidade de colunas para cada tamanho de tela.", - "option": { - "sm": "Pequeno", - "md": "Médio", - "lg": "Grande" - } - }, - "sidebarBehavior": { - "label": "Comportamento da barra lateral", - "description": "As barras laterais foram removidas na versão 1.0. Você pode selecionar o que deve acontecer com os itens dentro delas.", - "option": { - "lastSection": { - "label": "Última seção", - "description": "A barra lateral será exibida abaixo da última seção" - }, - "removeItems": { - "label": "Remover itens", - "description": "Os itens contidos na barra lateral serão removidos" - } - } - } - } - }, "quickCreateApp": { "modal": { "title": "Criar aplicativo em tempo real", @@ -4098,6 +5844,12 @@ } } }, + "landmark": { + "canvas": "Painel tela", + "leftRail": "Trilho esquerdo", + "rightRail": "Trilho de painel direito", + "items": "Itens do painel" + }, "field": { "pageTitle": { "label": "Título da página" @@ -4167,7 +5919,8 @@ } }, "primaryColor": { - "label": "Cor primária" + "label": "Cor primária", + "locked": "Seu administrador mantém a cor da instância em todos os quadros." }, "secondaryColor": { "label": "Cor secundária" @@ -4207,9 +5960,6 @@ "xl": "Muito grande" } }, - "name": { - "label": "Nome" - }, "isPublic": { "label": "Público", "description": "Painéis públicos são acessíveis a todos, mesmo sem uma conta." @@ -4229,9 +5979,44 @@ "title": "Layout", "responsive": { "title": "Layouts responsivos", + "description": "Cada layout mantém suas próprias posições e tamanhos de widget. Os dispositivos móveis e base estão sempre disponíveis; adicione layouts personalizados em qualquer ponto de interrupção adicional.", "action": { "add": "Adicionar layout" } + }, + "role": { + "mobile": "Dispositivos móveis", + "base": "Base", + "custom": "Personalizado" + }, + "custom": { + "defaultName": "Layout personalizado" + }, + "mobile": { + "breakpointDescription": "O celular é sempre utilizado a partir de 0px até o próximo ponto de interrupção do layout." + }, + "preview": { + "columns": "colunas", + "empty": "Este layout está vazio", + "dynamicSection": "Seção dinâmica", + "editorWidthLabel": "{layoutName} · {width}px" + }, + "reset": { + "action": "Redefinir da Base", + "confirm": { + "title": "Reset {layoutName}?", + "message": "Isso substitui todas as posições e tamanhos salvos neste layout com um novo layout gerado a partir da Base. Isso não pode ser desfeito." + } + }, + "edit": { + "action": "Editar layout", + "saveAndEdit": "Salvar e editar", + "save": "Salvar layout", + "cancel": { + "action": "Cancelar edição de layout", + "title": "Descartar alterações de layout?", + "message": "Suas alterações não salvas neste layout serão descartadas." + } } }, "background": { @@ -4268,10 +6053,7 @@ "rename": { "label": "Renomear painel", "description": "Alterar o nome quebrará quaisquer links para este painel.", - "button": "Alterar nome", - "modal": { - "title": "Renomear painel" - } + "button": "Alterar nome" }, "visibility": { "label": "Alterar visibilidade do painel", @@ -4295,9 +6077,7 @@ } }, "delete": { - "label": "Excluir este painel", "description": "Depois de excluir um painel, não há como voltar atrás. Por favor, tenha certeza.", - "button": "Excluir este painel", "confirm": { "title": "Excluir painel", "description": "Tem certeza de que deseja excluir este painel? Isso excluirá permanentemente o painel e todo o seu conteúdo." @@ -4342,28 +6122,41 @@ }, "layout": { "field": { - "name": { - "label": "Nome" - }, "columnCount": { "label": "Contagem de colunas" }, "breakpoint": { "label": "Breakpoint", "description": "O layout será usado em todas as telas maiores que este breakpoint até o próximo breakpoint maior." + }, + "gutters": { + "label": "barras laterais fixas", + "description": "Reserve até três colunas de painéis de ambos os lados. A tela de reflows restante automaticamente.", + "left": { + "label": "Left sidebar", + "description": "Manter esta área visível enquanto o painel de rolagem.", + "thumbLabel": "Left sidebar width" + }, + "right": { + "label": "Barra lateral direita", + "description": "Manter esta área visível enquanto o painel de rolagem.", + "thumbLabel": "Largura da barra lateral direita" + }, + "width": { + "label": "Largura em colunas" + }, + "preview": { + "label": "Visualização do layout do painel" + } } } }, "management": { "metaTitle": "Gerenciamento", - "title": { - "morning": "Bom dia, {username}", - "afternoon": "Boa tarde, {username}", - "evening": "Boa noite, {username}" - }, "notFound": { "title": "Não encontrado", - "text": "Não foi possível encontrar o recurso solicitado" + "text": "Não foi possível encontrar o recurso solicitado", + "backToHome": "Voltar à página inicial do gerenciamento" }, "error": { "title": "Não foi possível carregar esta página", @@ -4372,19 +6165,10 @@ }, "navbar": { "items": { - "workshop": "Workshop", "home": "Início", - "boards": "Painéis", - "apps": "Aplicativos", - "integrations": "Integrações", - "searchEngies": "Mecanismos de busca", - "medias": "Mídias", "users": { - "label": "Usuários", "items": { - "manage": "Gerenciar", - "invites": "Convites", - "groups": "Grupos" + "manage": "Gerenciar" } }, "tools": { @@ -4392,10 +6176,7 @@ "items": { "docker": "Docker", "kubernetes": "Kubernetes", - "logs": "Logs", "api": "API e MCP", - "certificates": "Certificados", - "tasks": "Tarefas", "backup": "Backup" } }, @@ -4409,21 +6190,12 @@ "sourceCode": "Código fonte" } }, - "about": "Sobre" + "about": "Sobre", + "assistant": "Assistente" } }, "page": { "home": { - "statistic": { - "board": "Painéis", - "user": "Usuários", - "invite": "Convites", - "integration": "Integrações", - "app": "Aplicativos", - "group": "Grupos", - "searchEngine": "Mecanismos de busca", - "media": "Mídias" - }, "statisticLabel": { "boards": "Painéis", "resources": "Recursos", @@ -4461,13 +6233,8 @@ "tooltip": "Esse painel será exibido como padrão para dispositivos móveis" } }, - "duplicate": { - "label": "Quadro duplicado" - }, "delete": { - "label": "Excluir permanentemente", "confirm": { - "title": "Excluir painel", "description": "Tem certeza de que deseja excluir o painel {name}?" } } @@ -4476,28 +6243,82 @@ "public": "Este painel é público", "private": "Este painel é privado" }, - "noResults": { - "title": "Nenhum quadro ainda" + "preview": { + "label": "Pré-visualização de layout para {name}, com {count} itens", + "unknownCreator": "Criador desconhecido" }, - "modal": { - "createBoard": { - "field": { - "name": { - "label": "Nome" - } - } - } + "noResults": { + "title": "Nenhum quadro ainda", + "description": "Crie um quadro para organizar os seus aplicativos e widgets em um só lugar." } }, "media": { "includeFromAllUsers": "Incluir mídia de todos os usuários" }, "user": { - "back": "Voltar para usuários", "fieldsDisabledExternalProvider": "Alguns campos estão desabilitados porque são gerenciados por um provedor de autenticação externo.", "setting": { "general": { "title": "Geral", + "header": { + "title": "Estúdio de Cabeçalho", + "badge": "pessoal", + "description": "Arraste controles em qualquer lugar da linha. Esquerda, Central e Direita permaneçam fixos enquanto controles deslocam-se em torno deles.", + "device": { + "desktop": "Computadores", + "mobile": "Dispositivos móveis" + }, + "zones": { + "left": "Esquerda", + "center": "Centralizado", + "right": "Certo" + }, + "action": { + "hide": "Ocultar o cabeçalho", + "show": "Mostrar cabeçalho", + "configure": "Mover ou configurar {item}", + "remove": "Remover {item}", + "dropIntoZone": "Mover para a seção {zone}" + }, + "preview": { + "board": "Visualização do painel para {name}", + "empty": "Nenhum layout do painel está disponível" + }, + "available": { + "title": "Controles disponíveis", + "description": "Adicione um controle e, em seguida, arraste seu botão completo para a posição acima.", + "requiredAlways": "Este controle é necessário, mas você pode movê-lo para qualquer lugar do cabeçalho.", + "allAdded": "Cada controle interno já está no seu cabeçalho.", + "add": "Adicionar {item}", + "boardShortcut": "Atalho para tabuleiro", + "chooseBoard": "Escolher um board" + }, + "configuration": { + "description": "Esse controle permanece com o mesmo tamanho que no cabeçalho vivo.", + "searchDisplay": { + "input": "Barra de pesquisa", + "icon": "Apenas ícone" + }, + "logoDisplay": { + "logo": "Logotipo apenas", + "logoAndText": "Logotipo + texto" + } + }, + "items": { + "logo": "Logotipo", + "search": "Buscar", + "home": "Quadro inicial", + "boardSwitcher": "Placas", + "assistant": "Assistente", + "docker": "Atracador", + "boardEdit": "Editar quadro", + "boardSettings": "Configurações do fórum", + "settings": "Suas configurações", + "themeToggle": "Alternar tema", + "user": "conta", + "boardUnavailable": "Quadro indisponível" + } + }, "item": { "language": "Idioma e região", "board": { @@ -4531,14 +6352,10 @@ }, "security": { "title": "Segurança" - }, - "board": { - "title": "Painéis" } }, "list": { - "metaTitle": "Gerenciar usuários", - "title": "Usuários" + "metaTitle": "Gerenciar usuários" }, "edit": { "metaTitle": "Editar usuário {username}" @@ -4592,9 +6409,6 @@ } }, "field": { - "id": { - "label": "ID" - }, "creator": { "label": "Criador" }, @@ -4618,10 +6432,7 @@ }, "setting": { "title": "Configurações", - "alert": "As configurações do grupo são priorizadas pela ordem dos grupos na lista. As configurações superiores substituem as configurações inferiores.", - "board": { - "title": "Placas" - } + "alert": "As configurações do grupo são priorizadas pela ordem dos grupos na lista. As configurações superiores substituem as configurações inferiores." }, "members": { "title": "Membros", @@ -4629,10 +6440,7 @@ "notFound": "Nenhum membro encontrado" }, "permissions": { - "title": "Permissões", - "form": { - "unsavedChanges": "Você tem alterações não salvas!" - } + "title": "Permissões" } } }, @@ -4641,12 +6449,10 @@ "notification": { "success": { "message": "Configurações salvas com sucesso" - }, - "error": { - "message": "Falha ao salvar configurações" } }, "section": { + "analyticsDocumentation": "Veja exatamente o que a análise de dados do Homarr coleta", "analytics": { "title": "Análises", "general": { @@ -4675,7 +6481,6 @@ } }, "board": { - "title": "Painéis", "homeBoard": { "label": "Painel inicial global", "mobileLabel": "Painel móvel global", @@ -4694,7 +6499,6 @@ } }, "user": { - "title": "Usuários", "enableGravatar": { "label": "Ativar Gravatar", "description": "Usa avatares de usuário do Libravatar/Gravatar quando nenhum avatar personalizado está definido e um e-mail está configurado" @@ -4710,12 +6514,86 @@ "appearance": { "title": "Aparência", "defaultColorScheme": { - "label": "Esquema de cores padrão", + "label": "Esquema de cores padrão" + } + }, + "branding": { + "title": "Marca da instância", + "groups": { + "identity": "Identidade", + "appearance": "Aparência", + "customCss": "Custom CSS", + "authentication": "Autenticação" + }, + "identity": { + "description": "O logotipo do aplicativo é a marca maior usada dentro do aplicativo, nas páginas de login e para aplicativos instalados. O ícone do navegador (favicon) é o pequeno quadrado usado em abas e favoritos; quando vazio, ele volta para o logotipo do aplicativo." + }, + "appName": { + "label": "Nome do aplicativo" + }, + "greeting": { + "label": "Saudação personalizada" + }, + "logo": { + "label": "Logotipo da aplicação", + "placeholder": "/logo/logo.png" + }, + "favicon": { + "label": "Ícone do navegador (favicon)", + "placeholder": "Usa logotipo da aplicação" + }, + "primaryColor": { + "label": "Cor primária" + }, + "secondaryColor": { + "label": "Realce secundário" + }, + "lockPrimaryColor": { + "label": "Manter essa cor em cada board", + "description": "Impede que as cores do board substituam o acento do aplicativo." + }, + "signInBackground": { + "label": "Fundo de autenticação", + "placeholder": "https://exemplo.com.br/pt_BR.jpg" + }, + "signInOverlay": { + "label": "Sobreposição de fundo" + }, + "defaultRadius": { + "label": "Estilo de canto", "options": { - "auto": "Automático", - "light": "Claro", - "dark": "Escuro" + "xs": "Bem", + "sm": "Sutil", + "md": "Equilibrado", + "lg": "Arredondado", + "xl": "Suave" } + }, + "customCss": { + "label": "CSS personalizado global", + "description": "Aplicado a cada página. O CSS personalizado do painel pode substituí-lo." + }, + "authVisibility": { + "description": "Escolha o que aparece em cada página de autenticação.", + "appName": "Nome do aplicativo", + "logo": "Logotipo da aplicação", + "greeting": "Saudação" + }, + "summary": { + "title": "Marca atual", + "cornerStyle": "Estilo de canto", + "palette": "Palette", + "backgroundConfigured": "Fundo personalizado · {overlay}% de sobreposição", + "backgroundDefault": "Fundo padrão", + "greetingConfigured": "Saudação personalizada", + "greetingDefault": "Saudação padrão", + "boardColorLocked": "Cor do tabuleiro bloqueada", + "boardColorFlexible": "Cores do fórum permitidas", + "appName": "Nome do trabalho", + "logo": "Logotipo", + "greeting": "Saudação", + "on": "Ligado", + "off": "Desligado" } }, "culture": { @@ -4723,12 +6601,177 @@ "defaultLocale": { "label": "Idioma padrão" } + }, + "assistant": { + "loading": "Carregando configuração do assistente", + "title": "Assistente", + "description": "Conecte um ponto de extremidade do modelo compatível com OpenAI: o assistente de toda a instância.", + "security": { + "description": "Chaves de API e valores adicionais do cabeçalho são criptografados no banco de dados Homarr. Eles nunca são retornados para navegadores. As solicitações de modelos são enviadas diretamente do servidor Homarr para o ponto de extremidade configurado." + }, + "overview": { + "connectionReady": "Conexão pronta", + "unsavedChanges": "Alterações não salvas", + "setupRequired": "Configuração necessária", + "disabled": "Desabilitado", + "noModel": "Nenhum modelo selecionado" + }, + "connection": { + "endpointTitle": "Provedor e endpoint", + "description": "Escolha uma predefinição ou conecte qualquer serviço que implemente a API de Conclusões do Chat OpenAI.", + "save": "Salvar conexão do provedor" + }, + "credentials": { + "title": "Credenciais", + "description": "Adicione os segredos deste ponto de extremidade. Os valores armazenados permanecem criptografados e não podem ser lidos de volta.", + "required": "Chave necessária", + "optional": "Chave opcional", + "workshop": "Login por usuário no GitHub" + }, + "provider": { + "title": "Provedor", + "groups": { + "free": "Grátis com Homarr", + "hosted": "Provedores hospedados", + "local": "Provedores locais", + "custom": "Personalizado" + }, + "options": { + "homarr": { + "description": "Um número limitado de usos de Assistente são gratuitos todos os dias, pagos pela equipa Homarr. Entre na Oficina da Comunidade para usar sua remuneração." + }, + "openrouter": { + "description": "Roteamento de modelo hospedado com um grande catálogo de modelos capazes de ferramentas." + }, + "openai": { + "description": "Conclusões de Chat OpenAI através do API oficial." + }, + "anthropic": { + "description": "Claude através do endpoint de compatibilidade do OpenAI SDK do Anthropic." + }, + "google-gemini": { + "description": "Gemini através do ponto de API compatível com OpenAI." + }, + "xai": { + "description": "Grok models através da API OpenAI-compatível com OpenAI." + }, + "groq": { + "description": "Inferência de hospedagem rápida através da API OpenAI-compatível com Groq." + }, + "mistral": { + "description": "Modelos Mistral através da API oficial." + }, + "deepseek": { + "description": "DeepSeek models através da API compatível com OpenAI." + }, + "together": { + "description": "Hospedado de modelos abertos através da API OpenAI-compatível com OpenAI." + }, + "ollama": { + "description": "Um servidor local ou de rede Ollama usando a sua API compatível com OpenAI." + }, + "lm-studio": { + "description": "Um servidor local do LM Studio com compatibilidade com OpenAI habilitada." + }, + "llama-cpp": { + "description": "Um servidor llama.cpp local ou de rede usando sua API compatível com OpenAI." + }, + "custom": { + "label": "Ponto final personalizado", + "description": "Qualquer outro ponto de extremidade compatível com Conclusões do Chat OpenAI." + } + }, + "homarrAuth": { + "title": "Utilização diária gratuita do Assistente inclusa", + "description": "Nenhuma chave de API é necessária. A equipe Homarr cobre um número limitado de usos de Assistente para você todos os dias. Entre na Oficina da Comunidade para manter sua licença separada." + } + }, + "baseUrl": { + "title": "URL base de API", + "description": "Inclua o prefixo da API, geralmente /v1. Em containers, localhost refere-se ao recipiente Homarr." + }, + "apiKey": { + "title": "Chave da API", + "required": "Exigido por este provedor. O valor é criptografado e apenas gravação.", + "optional": "Opcional para endpoints locais. Deixe em branco quando o serviço não requer autenticação pelo portador.", + "placeholder": "Digite uma chave de API", + "savedTitle": "Chave de API criptografada salva", + "savedDescription": "Homarr pode usar esta chave, mas não pode exibir ou recuperar seu valor.", + "remove": "Remover chave de API salva", + "removeFlow": { + "title": "Remover a chave API salva?", + "description": "Este provedor requer uma chave de API. Removendo-o pode parar a descoberta de modelos e as respostas do assistente até que outra chave seja salva.", + "optionalDescription": "O endpoint deixará de receber a autenticação do portador depois que esta chave for removida. Confirme que aceita solicitações não autenticadas ou usa outro cabeçalho armazenado.", + "cancel": "Manter a chave salva", + "confirm": "Remover chave de API" + } + }, + "headers": { + "title": "Cabeçalhos de solicitação adicionais", + "description": "Cabeçalhos de autenticação ou roteamento. Valores de cabeçalho são criptografados e apenas gravados.", + "add": "Adicionar cabeçalho", + "name": "Nome do Cabeçalho", + "value": "Valor do cabeçalho", + "valuePlaceholder": "Valor secreto ou de roteamento", + "remove": "Remover cabeçalho", + "configured": "Cabeçalhos criptografados adicionais são configurados. Adicionar cabeçalhos substitui o conjunto completo armazenado.", + "empty": "Nenhum cabeçalho adicional é armazenado para este provedor.", + "savedBadge": "Cabeçalhos salvos", + "pendingRemoval": "Remoção pendente", + "clear": "Remover cabeçalhos armazenados ao salvar", + "keep": "Manter cabeçalhos armazenados" + }, + "model": { + "title": "Modelo", + "description": "Selecione um modelo descoberto ou digite uma ID exata de modelo de endpoints.", + "placeholder": "ID do modelo", + "refresh": "Atualizar modelos", + "chooseModel": "Escolha o modelo usado para novas conversas.", + "discoveryPath": "Caminho de descoberta modelo", + "discoveryPathDescription": "Acrescentado à URL base da API. Deixe em branco para desativar a descoberta e usar uma ID de modelo manual.", + "manual": "Digite um ID de modelo manualmente ou salve a conexão para descobrir modelos.", + "manualFallback": "A descoberta está indisponível. Você ainda pode inserir um modelo de ID manualmente.", + "saveConnectionFirst": "Salve a conexão do provedor antes de escolher um modelo.", + "discovering": "Atualizando os modelos disponíveis deste provedor…", + "discovered": "{count, plural, one {Encontrado o modelo #. O suporte de ferramenta depende do ponto de extremidade e modelo selecionados.} other {Encontrado os modelos #. O suporte de ferramenta depende do endpoint e modelo selecionados.}}", + "discoveryFailed": "Descoberta de modelo não concluída", + "context": "Janela de contexto {count}", + "toolsConfirmed": "Ferramentas anunciadas", + "toolsUnknown": "Verificar ferramenta de suporte" + }, + "serverTools": { + "title": "Ferramentas do servidor", + "webSearch": { + "label": "Pesquisa na internet", + "description": "Permitir que o modelo pesquise a web ao vivo através do OpenRouter quando uma solicitação precisa de informações atuais. O uso da pesquisa é cobrado separadamente pelo OpenRouter.", + "proxyDescription": "Envie a ferramenta do servidor de busca web do OpenRouter para este endpoint. Habilitar isso somente quando o ponto de extremidade personalizado encaminha o formato das ferramentas do servidor OpenRouter, como um proxy do Roteador Homarr.", + "limit": "O modelo decide quando procurar, com um limite de 3 pesquisas e 5 resultados por pesquisa para cada solicitação." + } + }, + "enabled": { + "label": "Ativar Assistente", + "description": "Mostra o assistente para todos os usuários registrados. As permissões existentes na Homarr ainda se aplicam a todas as chamadas de ferramentas internas." + }, + "save": "Salvar assistente", + "notification": { + "connectionSaved": { + "title": "Conexão ao provedor salvo", + "message": "O endpoint e credenciais criptografadas estão prontas para a seleção do modelo.", + "credentialsCleared": "O endpoint alterado, então as credenciais anteriores foram limpas. Adicione credenciais para o novo destino, se necessário." + }, + "saved": { + "title": "Configurações do assistente salvas", + "message": "O novo modelo e as configurações de disponibilidade estão ativos." + }, + "error": { + "title": "Configurações do assistente não puderam ser salvas" + } + } } } }, "tool": { "tasks": { - "title": "Tarefas", "status": { "idle": "Ocioso", "running": "Em execução", @@ -4746,6 +6789,11 @@ "label": "Pings" } }, + "action": { + "run": "Executar {name} agora", + "enable": "Habilitar {name}", + "disable": "Desativar {name}" + }, "interval": { "seconds": "", "minutes": "", @@ -4761,13 +6809,7 @@ } } }, - "settings": { - "title": "Configurações da tarefa para {jobName}" - }, "field": { - "name": { - "label": "Nome" - }, "interval": { "label": "Intervalo de agendamento" }, @@ -4781,11 +6823,6 @@ "table": { "search": "Buscar {count} tarefas..." }, - "action": { - "refresh": { - "label": "Atualizar" - } - }, "refresh": { "success": { "message": "Tarefas atualizadas com sucesso" @@ -4819,7 +6856,6 @@ } }, "api": { - "title": "API", "modal": { "createApiToken": { "title": "Token de API criado", @@ -4845,7 +6881,6 @@ }, "table": { "header": { - "id": "ID", "createdBy": "Criado por", "actions": "Ações" } @@ -4901,43 +6936,12 @@ "availableTools": { "title": "Ferramentas disponíveis", "description": "{count} ferramentas disponíveis. Expanda uma categoria para ver as ferramentas individuais e suas descrições.", - "columnType": "Tipo", - "columnName": "Ferramenta", - "columnDescription": "Descrição" - }, - "troubleshooting": { - "title": "Solução de problemas", - "missingHeader": { - "title": "\"Cabeçalho ApiKey ausente\"", - "description": "Seu cliente não está enviando o cabeçalho {header}. Verifique se a seção {section} na configuração do MCP está correta. Alguns clientes exigem reinicialização após alterações na configuração." - }, - "invalidFormat": { - "title": "\"Formato de ApiKey inválido\"", - "description": "Certifique-se de ter copiado a chave de API completa, não apenas parte dela." - }, - "invalidKey": { - "title": "\"Chave de API inválida\"", - "description": "O ID da chave não foi encontrado ou o token está incorreto. As chaves de API só podem ser visualizadas uma vez, quando são criadas. Se você a perdeu, exclua a chave antiga e crie uma nova." - }, - "connectionRefused": { - "title": "Conexão recusada / tempo limite", - "description": "Certifique-se de que a URL esteja acessível pelo seu cliente de IA. Se o Homarr estiver atrás de um proxy reverso ou em um contêiner Docker, use a URL externa (não {localhost}). Verifique se a porta está correta (padrão: 7575 para Docker)." - }, - "toolsNotAppearing": { - "title": "Ferramentas não aparecem", - "description": "Algumas ferramentas exigem integrações específicas configuradas (por exemplo, Docker e Overseerr). A lista de ferramentas depende do que está disponível na sua instância do Homarr." + "filteredDescription": "Ferramentas {count} correspondentes entre categorias expandidas.", + "search": "Ferramentas de busca", + "noResults": { + "title": "Nenhuma ferramenta corresponde a esta pesquisa", + "description": "Nenhuma ferramenta MCP corresponde \"{search}\". Tente um namespace, nome da ferramenta ou descrição." } - }, - "copy": "Copiar", - "oneClick": { - "title": "Instalar com um clique", - "subtitle": "Usa OAuth — autentique-se no navegador ao usar pela primeira vez", - "vsCode": "Instalar no VS Code", - "cursor": "Instalar no Cursor", - "copyUrl": "Copiar URL do MCP", - "copied": "Copiado!", - "copyHint": "Para ChatGPT, Claude Code ou qualquer cliente MCP", - "manualConfig": "Configuração manual" } } } @@ -4954,47 +6958,12 @@ "title": "Exportação de dados sensíveis", "warningTitle": "Esta exportação contém todo o seu banco de dados.", "warningBody": "O backup inclui todos os usuários, segredos de integração (criptografados), chaves de API, configurações de painéis e dados de aplicativos. Armazene o arquivo exportado com segurança e não o compartilhe.", - "typePrompt": "Digite \"{phrase}\" para continuar", - "submit": "Exportar Banco de Dados", - "cancel": "Cancelar" + "submit": "Exportar Banco de Dados" } }, "import": { "title": "Restaurar Banco de Dados", - "description": "Carregue um backup ZIP exportado anteriormente para restaurar seu banco de dados. Isso substituirá todo o seu banco de dados. Se o backup foi criado com uma chave de criptografia diferente, os segredos serão automaticamente re-criptografados.", - "warning": "Restaurar um backup substituirá completamente seu banco de dados atual e reiniciará o aplicativo. Esta ação não pode ser desfeita.", - "dropzone": { - "title": "Solte seu backup ZIP aqui ou clique para navegar", - "description": "Somente arquivos .zip de um backup SQLite do Homarr são aceitos" - }, - "changeFile": "Alterar arquivo", - "button": "Restaurar Banco de Dados", - "success": { - "title": "Restauração Concluída", - "message": "O banco de dados foi restaurado com sucesso. O aplicativo está reiniciando..." - }, - "error": "Falha na importação" - }, - "preview": { - "title": "Conteúdo do Backup", - "exported": "Exportado em {date}", - "loading": "Analisando arquivo de backup...", - "errorTitle": "Erro na Pré-visualização", - "entity": "Entidade", - "count": "Contagem", - "boards": "Painéis", - "entities": { - "board": "Painéis", - "user": "Usuários", - "app": "Aplicativos", - "integration": "Integrações", - "item": "Widgets", - "media": "Mídia", - "search_engine": "Mecanismos de Pesquisa" - }, - "analyzeError": "Falha ao analisar arquivo de backup", - "invalidMissingMetadata": "Backup inválido: metadata.json ausente", - "invalidMissingDb": "Backup inválido: db.sqlite ausente" + "description": "Carregue um backup ZIP exportado anteriormente para restaurar seu banco de dados. Isso substituirá todo o seu banco de dados. Se o backup foi criado com uma chave de criptografia diferente, os segredos serão automaticamente re-criptografados." }, "restore": { "dropzone": { @@ -5004,29 +6973,20 @@ "analyzing": "Analisando backup...", "changeFile": "Alterar arquivo", "continueToRestore": "Continuar para restauração", - "tryAgain": "Tentar novamente", "analysisError": "Erro de Análise", "preview": { "title": "Conteúdo do Backup", "exported": "Exportado em {date}", "entity": "Entidade", "count": "Contagem", - "boards": "Painéis", "entities": { - "board": "Painéis", - "user": "Usuários", - "app": "Aplicativos", - "integration": "Integrações", - "item": "Widgets", - "media": "Mídia", - "search_engine": "Mecanismos de Pesquisa" + "item": "Widgets" }, "migrationsApplied": "{count} migração aplicada", "migrationsAppliedPlural": "{count} migrações aplicadas", "migrationsOlderVersion": "Este backup era de uma versão mais antiga do Homarr. {count} migração de esquema foi aplicada para atualizá-lo.", "migrationsOlderVersionPlural": "Este backup era de uma versão mais antiga do Homarr. {count} migrações de esquema foram aplicadas para atualizá-lo.", "migrationsUpToDate": "Esquema do banco de dados está atualizado ({count} migrações aplicadas)", - "upToDate": "Atualizado", "migrationsPending": "{count} pendentes" }, "migration": { @@ -5037,21 +6997,21 @@ "title": "Ação destrutiva", "warningTitle": "Isso substituirá permanentemente todo o seu banco de dados.", "warningBody": "Todos os painéis, usuários, aplicativos, integrações, configurações e sessões atuais serão perdidos. Esta ação não pode ser desfeita. O aplicativo reiniciará após a restauração.", - "typePrompt": "Digite \"{phrase}\" para continuar", - "cancel": "Cancelar", "submit": "Restaurar Banco de Dados" }, "progress": { "title": "Restaurando banco de dados...", - "extracting": "Extraindo arquivo de backup", - "migrating": "Aplicando migrações de banco de dados", - "encrypting": "Re-criptografando segredos de integração", - "swapping": "Substituindo arquivo de banco de dados", - "restarting": "Reiniciando servidor" + "restarting": "Reiniciando servidor", + "relogin": "Restaurar o banco de dados invalidado sua sessão atual. A Homarr enviará você para entrar quando o servidor estiver pronto." }, "complete": { "title": "Restauração Concluída", - "message": "O banco de dados foi restaurado com sucesso. O servidor está reiniciando — por favor, atualize a página em alguns segundos." + "message": "O banco de dados foi restaurado com sucesso. O servidor está reiniciando — por favor, atualize a página em alguns segundos.", + "button": "Acessar agora" + }, + "timeout": { + "title": "O servidor não voltou online", + "message": "A restauração do banco de dados finalizada, mas Homarr não voltou a ser preparada. Tente novamente a verificação da conexão ou atualize esta página manualmente." }, "failed": { "title": "Falha na Restauração" @@ -5059,6 +7019,9 @@ "invalidMissingMetadata": "Backup inválido: metadata.json ausente", "invalidMissingDb": "Backup inválido: db.sqlite ausente", "analyzeError": "Falha ao analisar backup" + }, + "confirm": { + "typePrompt": "Digite \"{phrase}\" para continuar" } } }, @@ -5093,7 +7056,11 @@ "toggleBoardEdit": "Editar quadro", "toggleColorScheme": "Alternar entre modo claro e escuro", "saveNotebook": "Salvar bloco de notas (apenas dentro do widget de bloco de notas)", - "openSpotlight": "Abrir busca" + "openSpotlight": "Abrir busca", + "openSpotlightApps": "Abrir pesquisa de aplicativos", + "openSpotlightAssistant": "Abrir modo assistente", + "openSpotlightPreferences": "Abrir modo de preferências", + "openAssistant": "Abrir Assistente" }, "note": "Dica: Mod refere-se tanto à tecla Ctrl quanto à tecla ⌘ no macOS" } @@ -5103,6 +7070,63 @@ }, "docker": { "title": "Contêineres", + "reconciliation": { + "title": "Configuração Docker assistida", + "suggestions": "{count, plural, =0 {Não há sugestões} one {# sugestão} other {# sugestões}}", + "attention": "{count} precisa de atenção", + "endpointUnavailable": "Alguns serviços não puderam ser verificados porque estes pontos de extremidade não estão disponíveis: {names}", + "empty": "Não foram encontrados serviços Docker visíveis.", + "emptyFilter": "Nenhum serviço corresponde a esta visualização.", + "ambiguous": "Mais de um item existente pode corresponder a este serviço. Homarr não irá escolher um automaticamente.", + "filter": { + "attention": "Precisa de atenção", + "represented": "Já configurado", + "all": "TODOS" + }, + "state": { + "newRecognized": "Pronto para conectar", + "newApp": "Novo serviço", + "represented": "Já representado", + "linked": "Relacionado", + "moved": "Endereço alterado" + }, + "url": { + "manual": "Insira um endereço manualmente" + }, + "health": { + "layer": { + "docker": "Atracador", + "integrationConfiguration": "Integração", + "authentication": "Autenticação", + "apiRequest": "API", + "appRepresentation": "Aplicativo", + "widgetConfiguration": "Widget", + "widgetQuery": "Consulta de widget" + }, + "status": { + "available": "Disponível", + "configured": "Configurado", + "linked": "Relacionado", + "missing": "Faltando", + "changed": "Alterado", + "unused": "Não utilizado", + "notApplicable": "Não se aplica", + "notObserved": "Não observado" + } + }, + "action": { + "review": "Revisão", + "dismiss": "Descartar", + "restoreDismissed": "Restauração dispensada ({count})", + "setupIntegration": "Configurar integração", + "reviewIntegration": "Revisar integração", + "viewRepresentation": "Configuração de visualização" + }, + "loadError": { + "title": "Assistente de configuração do Docker não pôde ser carregado", + "message": "Informações do serviço Docker indisponíveis. Tente novamente sem sair desta página." + } + }, "table": { "updated": "Atualizado {when}", "refresh": { @@ -5115,9 +7139,6 @@ "totalMemory": "Memória total: {memory}" }, "field": { - "name": { - "label": "Nome" - }, "state": { "label": "Estado", "option": { @@ -5131,9 +7152,6 @@ } }, "stats": { - "cpu": { - "label": "CPU" - }, "memory": { "label": "Memória" } @@ -5196,8 +7214,11 @@ } }, "remove": { - "label": "Remover", "confirm": "Clique novamente para remover permanentemente", + "confirmation": { + "title": "{count, plural, one {Remover # contêiner?} other {Remover # contêineres?}}", + "message": "{count, plural, one {Isto remove permanentemente o contêiner #: {names}} other {Isto remove permanentemente # contêineres: {names}}}" + }, "notification": { "success": { "title": "Contêineres removidos", @@ -5209,8 +7230,13 @@ } } }, + "result": { + "failure": { + "title": "Algumas ações de contêiner falharam", + "message": "{total, plural, one {{failed} da ação # falhou: {names}} other {{failed} de # ações falhou: {names}}}" + } + }, "refresh": { - "label": "Atualizar", "notification": { "success": { "title": "Contêineres atualizados", @@ -5241,18 +7267,33 @@ }, "error": { "internalServerError": "Falha ao buscar contêineres Docker", + "endpointUnavailable": "{count, plural, one {# Ponte do Docker indisponível: {names}} other {# Ponte-endpoints do Docker indisponível: {names}}}", "noColumns": "Selecione pelo menos uma coluna nas configurações do widget" } }, "kubernetes": { + "context": { + "label": "Contexto do Kubernetes", + "loadError": { + "title": "Os contextos do Kubernetes não puderam ser carregados", + "message": "Informações de contexto indisponíveis. Tente novamente sem sair desta página." + }, + "status": { + "available": "Disponível", + "degraded": "Metrics unavailable", + "unavailable": "Unavailable" + }, + "unavailable": "Este contexto do Kubernetes não pode ser alcançado. Selecione outro contexto ou verifique suas credenciais e endpoint.", + "metricsUnavailable": "Este contexto está acessível, mas o Servidor de Métricas está indisponível. O inventário permanece disponível sem o uso ao vivo da CPU e da memória." + }, "cluster": { "title": "Painel do Cluster", "label": "Cluster", "providers": "Provedores", "version": "Versão", - "architecture": "Arquitetura", "capacity": { "title": "Capacidade", + "metricsUnavailable": "O servidor de métricas está indisponível. O inventário e a capacidade reservada permanecem visíveis, mas o uso da CPU ao vivo e da memória não podem ser mostrados.", "resource": { "reserved": "Reservado", "used": "Usado" @@ -5271,38 +7312,10 @@ } }, "nodes": { - "label": "Nós", "field": { - "name": { - "label": "Nome" - }, - "state": { - "label": "Estado", - "option": { - "ready": "Pronto", - "NotReady": "Não está pronto" - } - }, - "cpu": { - "label": "CPU" - }, - "memory": { - "label": "RAM" - }, - "pods": { - "label": "Pods" - }, - "operatingSystem": { - "label": "SO" - }, - "architecture": { - "label": "Arquitetura" - }, + "metricsUnavailable": "Unavailable", "kubernetesVersion": { "label": "Versão do Kubernetes" - }, - "creationTimestamp": { - "label": "Criado" } }, "table": { @@ -5310,43 +7323,17 @@ } }, "namespaces": { - "label": "Namespaces", - "field": { - "name": { - "label": "Nome" - }, - "state": { - "label": "Estado", - "option": { - "active": "Ativo", - "terminating": "Terminando" - } - }, - "creationTimestamp": { - "label": "Criado" - } - }, "table": { "search": "Buscar {count} namespaces" } }, "ingresses": { - "label": "Ingresses", "field": { - "name": { - "label": "Nome" - }, - "namespace": { - "label": "Namespace" - }, "className": { "label": "Nome da classe" }, "rulesAndPaths": { "label": "Regras e caminhos" - }, - "creationTimestamp": { - "label": "Criado" } }, "table": { @@ -5354,17 +7341,7 @@ } }, "services": { - "label": "Serviços", "field": { - "name": { - "label": "Nome" - }, - "namespace": { - "label": "Namespace" - }, - "type": { - "label": "Tipo" - }, "ports": { "label": "Portas" }, @@ -5373,9 +7350,6 @@ }, "clusterIP": { "label": "IP do Cluster" - }, - "creationTimestamp": { - "label": "Criado" } }, "table": { @@ -5383,25 +7357,12 @@ } }, "pods": { - "label": "Pods", "field": { - "name": { - "label": "Nome" - }, - "namespace": { - "label": "Namespace" - }, "image": { "label": "Imagem" }, "applicationType": { "label": "Tipo de aplicação" - }, - "status": { - "label": "Status" - }, - "creationTimestamp": { - "label": "Criado" } }, "table": { @@ -5409,51 +7370,17 @@ } }, "secrets": { - "label": "Segredos", - "field": { - "name": { - "label": "Nome" - }, - "namespace": { - "label": "namespace" - }, - "type": { - "label": "tipo" - }, - "creationTimestamp": { - "label": "Criado" - } - }, "table": { "search": "Buscar {count} segredos" } }, "configmaps": { - "label": "ConfigMaps", - "field": { - "name": { - "label": "Nome" - }, - "namespace": { - "label": "namespace" - }, - "creationTimestamp": { - "label": "Criado" - } - }, "table": { "search": "Buscar {count} ConfigMaps" } }, "volumes": { - "label": "Volumes", "field": { - "name": { - "label": "Nome" - }, - "namespace": { - "label": "Namespace" - }, "accessModes": { "label": "Modos de acesso" }, @@ -5468,12 +7395,6 @@ }, "volumeName": { "label": "Nome do volume" - }, - "status": { - "label": "Status" - }, - "creationTimestamp": { - "label": "Criado" } }, "table": { @@ -5482,6 +7403,29 @@ }, "error": { "internalServerError": "Falha ao buscar dados do Kubernetes" + }, + "field": { + "name": { + "label": "Nome do trabalho" + }, + "namespace": { + "label": "Espaço nominal" + }, + "creationTimestamp": { + "label": "Criado" + }, + "state": { + "label": "Estado do trabalho" + }, + "status": { + "label": "SItuação" + }, + "type": { + "label": "Tipo de cliente de download" + }, + "architecture": { + "label": "Arquitetura" + } } }, "permission": { @@ -5515,71 +7459,27 @@ }, "navigationStructure": { "manage": { - "workshop": { - "label": "Workshop" - }, "label": "Gerenciar", - "boards": { - "label": "Painéis" - }, - "integrations": { - "label": "Integrações", + "custom-widgets": { "edit": { - "label": "Editar" + "flow": { + "label": "Fluxo" + } }, - "new": { - "label": "Novo" - } - }, - "search-engines": { - "label": "Mecanismos de busca", - "new": { - "label": "Novo" + "workshop": { + "label": "Oficina" }, - "edit": { - "label": "Editar" - } - }, - "medias": { - "label": "Mídias" - }, - "apps": { - "label": "Aplicativos", - "new": { - "label": "Novo" - }, - "edit": { - "label": "Editar" + "publish": { + "label": "Publicar na Oficina" } }, "users": { - "label": "Usuários", - "create": { - "label": "Criar" - }, "general": "Geral", - "security": "Segurança", - "board": "Painéis", - "groups": { - "label": "Grupos" - }, - "invites": { - "label": "Convites" - } + "security": "Segurança" }, "tools": { "label": "Ferramentas", - "tasks": { - "label": "Tarefas" - }, - "docker": { - "label": "Docker", - "logs": { - "label": "Logs" - } - }, "kubernetes": { - "label": "Kubernetes", "nodes": { "label": "Nós" }, @@ -5605,11 +7505,7 @@ "label": "Volumes" } }, - "logs": { - "label": "Logs" - }, "certificates": { - "label": "Certificados", "hostnames": { "label": "Nomes de host" } @@ -5620,12 +7516,60 @@ }, "about": { "label": "Sobre" + }, + "assistant": { + "label": "Assistente" } } }, "search": { "placeholder": "Buscar por qualquer coisa", "nothingFound": "Nada encontrado", + "modePicker": { + "search": { + "label": "Buscar", + "placeholder": "Pesquisar aplicativos, quadros, páginas, comandos e preferências" + }, + "apps": { + "label": "Aplicativos", + "placeholder": "Pesquisar aplicativos, quadros e integrações" + }, + "command": { + "label": "Comandos", + "placeholder": "Pesquisar ações e comandos" + }, + "preferences": { + "label": "Preferências:", + "placeholder": "Pesquisar e alterar preferências" + }, + "assistant": { + "label": "Assistente", + "placeholder": "Solicitar Assistente" + }, + "external": { + "label": "Web", + "placeholder": "Pesquisar com um motor de busca externo" + }, + "media": { + "label": "Mídia", + "placeholder": "Buscar um filme ou programa", + "fallback": "Pesquisar mídia por \"{query}\"" + }, + "userGroup": { + "label": "Pessoas", + "placeholder": "Pesquisar usuários e grupos" + }, + "continueWith": "Continuar com", + "dialogAriaLabel": "Menu de comando {mode}", + "navigationLabel": "Modos de pesquisa", + "modeAriaLabel": "Modo {mode}", + "resultsAriaLabel": "{mode} resultados", + "footer": { + "navigate": "Navigate", + "open": "Abertas", + "close": "Fechar" + } + }, "error": { "fetch": "Ocorreu um erro ao buscar os dados" }, @@ -5634,7 +7578,6 @@ "help": "Buscar por aplicativos, integrações ou painéis", "group": { "app": { - "title": "Aplicativos", "children": { "action": { "open": { @@ -5650,7 +7593,6 @@ } }, "board": { - "title": "Placas", "children": { "action": { "open": { @@ -5670,9 +7612,6 @@ "title": "Selecione uma ação para o quadro" } } - }, - "integration": { - "title": "Integrações" } } }, @@ -5701,9 +7640,6 @@ "newBoard": { "label": "Criar um novo quadro" }, - "importBoard": { - "label": "Importar um quadro" - }, "newApp": { "label": "Criar aplicativo" }, @@ -5773,7 +7709,6 @@ } }, "defaultSearchEngineId": { - "label": "Mecanismo de pesquisa padrão", "children": { "detail": { "title": "Selecione seu mecanismo de pesquisa padrão" @@ -5781,7 +7716,6 @@ } }, "openSearchInNewTab": { - "label": "Abrir resultados da pesquisa em nova guia", "children": { "detail": { "title": "Abrir resultados da pesquisa em nova guia" @@ -5789,7 +7723,6 @@ } }, "ddgBangs": { - "label": "Ativar bangs do DuckDuckGo", "children": { "detail": { "title": "Ativar bangs do DuckDuckGo" @@ -5804,6 +7737,13 @@ } } }, + "byteUnitSystem": { + "children": { + "detail": { + "title": "Selecione suas unidades de tamanho de dados" + } + } + }, "homeBoardId": { "label": "Painel inicial", "children": { @@ -5821,7 +7761,6 @@ } }, "pingIconsEnabled": { - "label": "Usar ícones para pings", "children": { "detail": { "title": "Usar ícones para pings" @@ -5829,7 +7768,6 @@ } }, "enableRightClickOnWidgets": { - "label": "Ativar clique com o botão direito nos widgets", "children": { "detail": { "title": "Ativar clique com o botão direito nos widgets" @@ -5857,6 +7795,7 @@ "description": "Comece a digitar para pesquisar suas integrações de solicitação de mídia", "disabled": { "noIntegration": "Adicione uma integração Overseerr, Jellyseerr ou Seerr para ativar a pesquisa de mídia.", + "signInRequired": "Faça o login para pesquisar integrações de requisição de mídia.", "scoped": "Este widget não possui uma integração de solicitação de mídia acessível." } } @@ -5873,7 +7812,6 @@ "help": "Usar um mecanismo de busca externo", "group": { "searchEngine": { - "title": "Mecanismos de busca", "tipDdgBangs": "Dica: você também pode usar qualquer bang do DuckDuckGo aqui, por exemplo, !algo", "bang": { "searchWithQuery": "Buscar \"{query}\" com {label}", @@ -5924,20 +7862,6 @@ "group": { "mode": { "title": "Modos" - }, - "help": { - "title": "Ajuda", - "option": { - "documentation": { - "label": "Documentação" - }, - "submitIssue": { - "label": "Reportar um problema" - }, - "discord": { - "label": "Discord da comunidade" - } - } } } }, @@ -5949,9 +7873,10 @@ "other": { "label": "Pesquisar com outro mecanismo de busca" }, - "no-default": { - "label": "Nenhum mecanismo de busca predefinido", - "description": "Defina um mecanismo de busca padrão nas preferências" + "no-engines": { + "label": "Nenhum mecanismo de busca configurado", + "descriptionCreate": "Adicionar um mecanismo de pesquisa para pesquisar a partir do menu do comando", + "descriptionUnavailable": "Peça a um administrador para configurar um mecanismo de pesquisa" }, "search": { "label": "Buscar por \"{query}\" com {name}" @@ -6031,7 +7956,6 @@ "help": "Buscar por usuários ou grupos", "group": { "user": { - "title": "Usuários", "children": { "action": { "detail": { @@ -6044,7 +7968,6 @@ } }, "group": { - "title": "Grupos", "children": { "action": { "detail": { @@ -6068,9 +7991,6 @@ "engine": { "search": "Encontrar um mecanismo de busca", "field": { - "name": { - "label": "Nome" - }, "short": { "label": "Curto" }, @@ -6083,12 +8003,19 @@ }, "page": { "list": { - "title": "Mecanismos de busca", + "ariaLabel": "Motores de busca configurados", "noResults": { "title": "Ainda não existem mecanismos de busca", - "action": "Crie seu primeiro mecanismo de busca" + "description": "Os motores de busca permitem que o Spotlight envie uma consulta a um site ou serviço conectado.", + "action": "Crie seu primeiro mecanismo de busca", + "filteredTitle": "Nenhum motor de busca corresponde à sua pesquisa", + "filteredDescription": "Nenhum motor de busca corresponde \"{search}\". Tente outro nome ou URL." }, - "interactive": "Interativo, usa uma integração" + "interactive": "Interativo, usa uma integração", + "type": { + "generic": "Modelo de URL", + "fromIntegration": "Integração" + } }, "create": { "title": "Novo mecanismo de busca", @@ -6107,11 +8034,9 @@ "title": "Editar mecanismo de busca", "notification": { "success": { - "title": "Alterações aplicadas com sucesso", "message": "O mecanismo de busca foi salvo com sucesso" }, "error": { - "title": "Não foi possível aplicar as mudanças", "message": "O mecanismo de busca não pôde ser salvo" } }, @@ -6250,6 +8175,10 @@ } }, "log": { + "context": { + "widgetError": "Widget relatou um erro desta vez", + "expiredWidgetError": "Registros em torno deste erro de widget não são mais retidos" + }, "level": { "option": { "debug": "Depuração", @@ -6261,7 +8190,6 @@ }, "onboardingTour": { "learnMore": "Leia a documentação", - "next": "Próximo", "prev": "Voltar", "done": "Concluído", "skip": "Pular tour", @@ -6325,5 +8253,359 @@ "description": "Altere seu esquema de cores, idioma, painel inicial e preferências. Você também pode acessar a área de gerenciamento a partir daqui." } } + }, + "metadata": { + "description": "Um painel auto-hospedado para a *pilha de arr e toda a sua pátria. Integra com mais de 50 serviços, widgets em tempo real, sem arquivos de configuração.", + "dashboardTitle": "Painel {appName}" + }, + "assistant": { + "title": "Assistente", + "open": "Abrir Assistente", + "close": "Fechar assistente", + "minimize": "Minimizar assistente", + "spotlight": "Solicitar Assistente", + "spotlightDescription": "Digite e envie um prompt sem sair do menu de comandos.", + "spotlightPrompt": { + "title": "Solicitar Assistente", + "description": "Digite um prompt acima. O email será enviado pelo plano de fundo.", + "send": "Enviar aviso", + "empty": "Digite um prompt acima" + }, + "unavailable": { + "checking": "Verificando se o assistente está disponível…", + "error": "Não foi possível verificar a disponibilidade do assistente. Tente novamente.", + "notConfigured": "Um administrador deve configurar e ativar o assistente primeiro.", + "signIn": "Faça o login para usar o Assistente." + }, + "newConversation": "Nova conversa", + "conversations": "Conversas", + "conversationActions": "Ações de conversa", + "searchConversations": "Pesquisar conversas", + "noMatchingConversations": "Não há conversas correspondentes", + "moreActions": "Mais ações de resposta", + "renameConversation": { + "action": "Renomear", + "label": "Nome da conversa", + "save": "Salvar nome", + "failedTitle": "Não foi possível renomear a conversa", + "failedDescription": "Homarr não pôde renomear esta conversa. Tente novamente." + }, + "deleteConversation": { + "title": "Excluir conversa?", + "description": "“{title}” e suas mensagens serão excluídas permanentemente.", + "failedTitle": "Conversa não pôde ser excluída", + "failedDescription": "Homarr não pôde excluir esta conversa. Tente novamente." + }, + "closeHistory": "Fechar histórico de conversas", + "openHistory": "Abrir histórico de conversas", + "emptyTitle": "Em que posso ajudar?", + "emptyDescription": "Pergunte sobre a configuração do seu Homarr, inspecionar dados de instância ao vivo ou aprovar ações quando você quiser que eu faça uma mudança.", + "suggestions": { + "health": { + "label": "Verificar saúde do serviço", + "prompt": "Verificar minhas integrações e resumir qualquer coisa que precise de atenção." + }, + "explore": { + "label": "Explore meu Homarr", + "prompt": "Mostre-me o que posso ver e gerenciar nesta instância do Homarr." + }, + "media": { + "label": "Encontrar mídia para solicitar", + "prompt": "Ajude-me a encontrar um filme ou uma série para pedir." + }, + "style": { + "label": "Melhorar painel de controle", + "prompt": "Ajude-me a melhorar a aparência de um board ou CSS personalizado. Mostre-me minhas tábuas primeiro, e em seguida, preservar minhas configurações atuais enquanto fazemos a mudança." + }, + "designWidget": { + "label": "Crie um widget", + "prompt": "Criar e instalar um Widget Personalizado para " + } + }, + "composerPlaceholder": "Pergunte ao Assistente…", + "runtime": { + "model": "Modelo", + "searchModels": "Buscar modelos", + "noModels": "Não há modelos disponíveis", + "otherModels": "Outros modelos", + "imageInput": "Aceita entrada de imagem", + "thinking": "Modo de pensamento", + "reasoning": { + "auto": "Automático", + "none": "Desligado", + "minimal": "Mínimo", + "low": "baixa", + "medium": "Médio", + "high": "alta" + } + }, + "providerQuota": { + "title": "Provedor Homarr", + "communityWorkshop": "Oficina da Comunidade", + "dailyAllowance": "Requisição diária", + "remainingLabel": "{remaining} do provedor {limit} Homarr pedidos restantes", + "loading": "Carregando subsídio do provedor Homarr", + "signInRequired": "Login na Oficina necessário para o provedor Homarr", + "signInDescription": "Entre com o GitHub através da Oficina Comunitária para receber sua remuneração diária separada.", + "exhaustedDescription": "O subsídio para seu provedor Homarr foi usado hoje. Ele se reinicia à meia-noite UTC.", + "unavailableDescription": "Entre na Oficina ou espere que o seu provedor de Homarr tenha permissão para reiniciar.", + "signIn": "Entrar com GitHub", + "signInError": "Login falhou no GitHub. Tente novamente daqui a pouco.", + "loadError": "O subsídio do provedor Homarr não pôde ser carregado.", + "reset": "Redefine {relative} em ", + "toolCalls": "Cada solicitação de modelo e chamada de ferramenta concluída utiliza uma solicitação.", + "retry": "Recarregar permissão", + "level": { + "ok": "Ok", + "warning": "ATENÇÃO", + "bad": "baixa", + "dead": "Usado" + } + }, + "stop": "Parar resposta", + "send": "Enviar mensagem", + "copy": "Copiar resposta", + "copyMessage": "Copiar mensagem", + "editMessage": "Editar Mensagem", + "updateMessage": "Atualizar mensagem", + "regenerate": "Regenerar resposta", + "helpful": "Útil", + "notHelpful": "Não é útil", + "readAloud": "Ler resposta em voz alta", + "stopReading": "Parar leitura", + "feedbackError": "Seu feedback não pôde ser salvo. Tente novamente.", + "exportMarkdown": "Exportar como Markdown", + "exportConversation": { + "action": "Exportar conversa como Markdown", + "failedTitle": "Não foi possível exportar a conversa", + "failedDescription": "Homarr não conseguiu carregar esta conversa. Tente novamente." + }, + "reasoning": "Pensando", + "previousResponse": "Resposta anterior", + "nextResponse": "Próxima resposta", + "removeAttachment": "Remover anexo", + "downloadFile": "Baixar {name}", + "attachedImage": "Imagem anexada", + "externalImageBlocked": "Imagem externa bloqueada por privacidade", + "image": { + "loading": "Carregando imagem", + "failed": "Não foi possível carregar esta imagem.", + "retry": "Tente novamente a imagem" + }, + "quoteSelection": "Cotação", + "dismissQuote": "Remover orçamento", + "attachments": { + "add": "Anexar uma imagem ou documento", + "errorTitle": "Anexo não pôde ser adicionado", + "imageUnsupported": "O modelo selecionado não suporta entrada de imagem." + }, + "mentions": { + "menu": "Adicionar contexto Homarr", + "context": "Contexto", + "app": "Aplicativos", + "integration": "Integrações", + "board": "Placas", + "widget": "Widgets", + "tools": "Ferramentas disponíveis" + }, + "markdown": { + "diagram": "Diagrama", + "renderingDiagram": "Processando o diagrama…", + "diagramUnavailable": "Este diagrama não pôde ser renderizado." + }, + "commands": { + "menu": "Comandos do assistente", + "health": "Preparar um exame de saúde", + "explore": "Preparar uma visão geral desta instância Homarr", + "media": "Preparar uma pesquisa de mídia", + "style": "Preparar uma aparência do board ou uma alteração personalizada de CSS", + "designWidget": "Preparar uma compilação de widget personalizado de um prompt" + }, + "usage": { + "tokens": "tokens", + "contextWindow": "Janela de contexto", + "requestDetails": "Pedir detalhes", + "used": "Último passo", + "remaining": "Restante", + "capacity": "Capacidade", + "input": "Input", + "output": "Saída", + "cached": "Entrada de cache", + "cacheWrite": "Gravar cache", + "reasoning": "Justificativa", + "inputShort": "em", + "outputShort": "Fora", + "cachedShort": "armazenado", + "reasoningShort": "raciocínio", + "firstOutput": "Saída inicial", + "homarrTiming": "Homarr observado", + "endToEnd": "Fim a fim", + "observedThroughput": "Taxa de entrada observada", + "providerTiming": "Provedor relatado", + "loadingProviderDetails": "Carregando detalhes da geração…", + "providerDetailsPending": "O OpenRouter ainda está processando alguns detalhes de geração. Reabra para tentar novamente.", + "providerLatency": "latência do provedor", + "generationTime": "Tempo de geração", + "moderationLatency": "Moderação", + "providerThroughput": "Transferência de provedor", + "fallbacks": "Fallbacks", + "fallbackLatency": "Latência de retrocesso", + "cacheDiscount": "Desconto no cache", + "normalizedTokens": "Entrada / saída do OpenRouter normalizada", + "byok": "BYOK", + "cost": "Custo", + "reported": "Reportado pelo provedor", + "estimated": "Estimado a partir dos preços do modelo", + "upstreamCost": "Inferência a montante", + "webSearches": "Pesquisas na web", + "finishReason": "Motivo final", + "notReported": "Não denunciado", + "agentSteps": "Etapas do agente", + "step": "Etapa {number}", + "generation": "Geração" + }, + "toolInput": "Input", + "toolOutput": "Saída", + "toolActivity": { + "iconSearch": "Procurando ícones “{query}”", + "iconBrowse": "Navegação nos ícones disponíveis" + }, + "toolNavigation": { + "openPreview": "Abrir pré-visualização", + "openWidget": "Abrir widget" + }, + "webSearch": { + "title": "Pesquisa na internet", + "completed": "O OpenRouter pesquisou esta resposta na web ao vivo.", + "searches": "{count, plural, one {# busca} other {# buscas}}", + "sources": "{count, plural, one {# source} other {# sources}}" + }, + "responseError": { + "title": "O assistente não pôde terminar", + "description": "Tente novamente. Se o problema continuar, peça a um administrador para verificar o ponto de extremidade do modelo configurado." + }, + "toolPreparationError": { + "title": "Este pedido não pôde ser preparado", + "description": "O modelo parou antes de fornecer detalhes completos. Tente novamente a resposta ou descreva a solicitação novamente. Nenhuma alteração foi feita." + }, + "busy": { + "title": "O assistente já está trabalhando", + "description": "Aguarde a resposta atual ou abra-o para parar a execução." + }, + "pendingAction": { + "answerTitle": "Resposta necessária", + "answerFallback": "Escolha uma resposta para continuar", + "formTitle": "Revisar detalhes do aplicativo", + "boardFormTitle": "Revisar alterações do quadro", + "review": "Revisão", + "sendBlocked": "Resolver a solicitação pendente antes de enviar" + }, + "activity": { + "thinking": "Assistente está pensando", + "working": "Trabalhando no seu prompt", + "ready": "Resposta pronta", + "completed": "Abrir a resposta", + "approval": "Aprovação necessária", + "failed": "O Assistente precisa de atenção", + "expand": "Abrir a resposta do assistente", + "dismiss": "Descartar atividade do assistente" + }, + "scrollToLatest": "Ir para a última", + "refresh": { + "action": "Atualizar a visão atual", + "working": "Atualizando a visão atual", + "completeTitle": "Ver atualizados", + "completeDescription": "Dados visíveis do Homarr foram recarregados.", + "failedTitle": "A visão não pôde ser atualizada", + "failedDescription": "A alteração ainda pode ser salva. Tente atualizar novamente." + }, + "askUser": { + "preparing": "Preparando pergunta", + "answered": "Sua resposta", + "other": "Outras", + "otherLabel": "Sua resposta", + "otherPlaceholder": "Digite outra resposta…", + "submit": "Enviar resposta", + "cancelOther": "Cancelar outra resposta", + "optionKind": { + "affirmative": "Confirmar", + "negative": "Recusar", + "alternative": "Alternativa", + "custom": "Personalizado" + } + }, + "configureApp": { + "title": "Revisar detalhes do aplicativo", + "description": "Escolha um ícone local e ajuste qualquer coisa antes da aprovação do assistente solicitada.", + "preparing": "Preparando detalhes do aplicativo", + "continue": "Utilizar estes detalhes", + "ready": "Detalhes do aplicativo prontos", + "automaticContinue": "Usando esses detalhes do app automaticamente" + }, + "configureBoardSettings": { + "title": "Revisar alterações do quadro", + "loading": "Carregando configurações atuais do fórum", + "loadErrorTitle": "As configurações do board não puderam ser carregadas", + "loadErrorDescription": "O board pode não existir mais, ou você pode não ter permissão para modificá-lo.", + "proposedCount": "Campo {count} proposto pelo assistente", + "changeCount": "Mudanças {count} prontas", + "ready": "Alterações no painel prontas", + "cancelled": "Configurações atuais do board mantidas", + "noChanges": "Nenhuma configuração será alterada", + "keepCurrent": "Manter as configurações atuais", + "continue": "Continuar para aprovação", + "automaticContinue": "Aceitar as alterações propostas automaticamente", + "resetAll": "Redefinir todas as alterações", + "tabs": { + "css": "Custom CSS", + "appearance": "Aparência", + "background": "Imagem de fundo", + "general": "Geral" + }, + "cssDescription": "Editar a folha de estilo completa. Regras existentes são mantidas a menos que sejam removidas aqui.", + "cssCharacters": "{count} de 16384 caracteres", + "copyCss": "Copy CSS", + "copied": "Copiado", + "restoreCss": "Restore current CSS", + "remoteCssTitle": "Este CSS carrega um recurso remoto", + "remoteCssDescription": "Folhas de estilos importadas e URLs remotas contactam outro servidor quando o board é carregado. Revise elas antes de continuar." + }, + "configureWidget": { + "title": "Widget de revisão", + "preparing": "Preparando configurações de widget", + "review": "Revise widgets e integrações", + "ready": "Configuração de widget pronta", + "cancelled": "Widget não foi adicionado", + "automaticContinue": "Aceitando a configuração proposta do widget automaticamente", + "definitionLoadErrorTitle": "As configurações do widget não puderam ser carregadas", + "definitionLoadErrorDescription": "Homarr não conseguiu carregar as configurações deste widget. Tente novamente.", + "loadErrorTitle": "Não foi possível carregar as integrações", + "loadErrorDescription": "Homarr não pôde carregar as integrações disponíveis para este widget.", + "noIntegrationTitle": "É necessária uma integração compatível", + "noIntegrationDescription": "Configure uma integração suportada por este widget antes de adicioná-lo ao painel.", + "connectIntegration": "Conectar serviço", + "manageIntegrations": "Gerenciar integrações", + "skip": "Não adicionar", + "errorTitle": "As configurações do widget não puderam ser preparadas", + "errorDescription": "O modelo não forneceu uma configuração completa de widget. Nenhum widget foi adicionado." + }, + "approvalRequired": "Aprovação necessária", + "complete": "Complete", + "denied": "Negado", + "failed": "Falhou", + "working": "Trabalhando", + "approvalDescription": "Revise esta alteração antes que seja executada.", + "approveAndRun": "Aprovar e executar", + "deny": "Recusar", + "autoApproval": { + "label": "Aprovações automáticas", + "composerLabel": "Aprovar para mim", + "title": "Aprovações automáticas", + "description": "Prepare automaticamente formulários e aprove alterações protegidas para esta conversa. As perguntas ainda esperam pela sua resposta e as suas permissões de Homarr ainda se aplicam. Isso é desativado quando você troca de conversas.", + "enable": "Habilitar para esta conversa", + "disable": "Desativar aprovações automáticas", + "enabled": "Aprovações automáticas ativadas", + "approving": "Aprovando automaticamente" + } } } diff --git a/packages/translation/src/lang/ro.json b/packages/translation/src/lang/ro.json index 32f39d1f7..89bf4946d 100644 --- a/packages/translation/src/lang/ro.json +++ b/packages/translation/src/lang/ro.json @@ -1,156 +1,246 @@ { "init": { - "step": { - "start": { - "title": "Bun venit", - "subtitle": "Să începem cu configurarea Homarr.", - "description": "Pentru a începe, selectează modul în care vrei să setezi Homarr.", - "action": { - "scratch": "Începe de la zero", - "importOldmarr": "Importă din Homarr înainte de 1.0", - "restoreSqlite": "Restaurează dintr-un backup SQLite", - "restoreSqliteDescription": "Încarcă o copie completă a bazei de date SQLite dintr-o instalare anterioară a Homarr. Aceasta va restaura toate interfețele, utilizatorii, aplicaţiile, integrările şi setările.", - "backToOptions": "← Înapoi la opțiunile de configurare" + "studio": { + "navigationLabel": "Secțiuni de înregistrare", + "back": "Înapoi", + "buildBoard": "Construiește-mi tabla", + "common": { + "unknownError": "Ceva nu a funcționat. Alegerile dvs. sunt încă aici; încercați din nou." + }, + "claim": { + "checking": "Se securizează această sesiune de înregistrare…", + "checkingTitle": "Pregătire configurare securizată", + "lockedTitle": "Configurarea este deschisă într-un alt browser", + "lockedDescription": "Continuă acolo sau așteaptă ca sesiunea sa securizată să expire înainte de a încerca din nou.", + "signInTitle": "Autentificare administrator necesară", + "signInDescription": "Un administrator există deja. Conectați-vă pentru a relua configurarea fără a expune credențialele sau accesul la serviciu.", + "signIn": "Conectează-te și reia", + "errorTitle": "Configurarea nu a putut fi securizată", + "errorDescription": "Reîncărcați pagina pentru a reîncerca sesiunea securizată în primul rând." + }, + "navigation": { + "essentials": "Esențiale", + "discover": "Descoperă", + "connect": "Conectează-te", + "board": "Secţiune", + "extend": "Extinde", + "review": "Revizuire" + }, + "welcome": { + "title": "Bine ați venit acasă.", + "description": "Bine ai venit la Homarr v{version}. Te vom ghida prin lucrurile esenţiale şi te vom ajuta să construieşti prima ta secţiune.", + "start": "Începeți", + "restore": "Restaurare copie de rezervă", + "restoreTitle": "Restaurează din backup", + "restoreDescription": "O copie de rezervă completă SQLite restaurează plăcile, oamenii, aplicațiile, integrările și setările. Homarr o validează înainte de a înlocui orice.", + "errorTitle": "Configurarea nu a putut începe", + "errorDescription": "Alegerile de configurare sunt încă aici. Încercați din nou sau reîncărcați pagina dacă aceasta continuă." + }, + "account": { + "title": "Crează-ți administratorul", + "description": "Specifică credențialele pentru utilizatorul administrator.", + "username": "Nume utilizator administrator", + "passwordHint": "Este necesar doar minimul de 8 caractere. Celelalte verificări ale intensității parolei sunt sugestii.", + "create": "Creare administrator", + "errorTitle": "Administratorul nu a putut fi creat", + "recoveryTitle": "Cont administrator creat", + "recoveryDescription": "Conectarea automată nu a fost finalizată. Conectați-vă cu acreditările administratorilor pe care tocmai le-ați creat pentru a continua configurarea.", + "recoveryAction": "Conectați-vă și continuați", + "unknownError": "Administratorul nu a putut fi creat." + }, + "externalGroup": { + "title": "Conectați grupul de administratori", + "description": "Utilizați numele grupului exact trimis de LDAP sau OIDC. Membrii acestui grup primesc acces de administrator.", + "name": "Grup de administrator extern", + "nameDescription": "Acesta este sensibil la majuscule și trebuie să se potrivească cu furnizorul dvs. de identitate.", + "continue": "Salvează grupul și continuă", + "errorTitle": "Grupul nu a putut fi salvat", + "unknownError": "Grupul de administratori nu a putut fi salvat." + }, + "essentials": { + "title": "Începe cu setările prestabilite", + "description": "Setaţi limba şi aspectul pe care toată lumea îl vede mai întâi, apoi daţi Homarr modelul de adresă utilizat de serviciile dvs.", + "language": "Limba implicită", + "theme": "Tema implicită", + "themeAuto": "Sistem", + "themeLight": "Lumină", + "themeDark": "Întunecat", + "serverOriginHelp": "Homarr folosește această adresă pentru a pre-umple URL-urile de serviciu detectate. Poți edita în continuare fiecare serviciu individual.", + "serverDescription": "Aceasta este o scurtătură, nu o restricţie. Fiecare serviciu detectat rămâne editabil.", + "serverOrigin": "Domeniu, IP sau cale inversă proxy", + "serverOriginDescription": "Exemple: home.lan, 192.168.1.10, sau https://home.example.com/services. Alegeţi modul în care fiecare serviciu este adăugat mai jos.", + "analytics": "Distribuie anonim analiza produselor", + "analyticsDescription": "Ajuta Homarr sa imbunatateasca fiabilitatea caracteristicii. Nici un serviciu de acreditare sau conţinut de tablou de bord nu sunt trimise." + }, + "discover": { + "title": "Vezi ce poate ajunge această instalație", + "description": "Verifică capacitățile Homarr în funcțiune. Un docker socket lipsă sau contextul Kubernetes nu blochează niciodată o configurare manuală.", + "database": "Baza de date", + "docker": "Docker și sockuri compatibile", + "kubernetes": "Kubernetes", + "assistantWorkshop": "Asistent și atelier", + "found": "S-a găsit {integrations} integrări și {apps} aplicații suplimentare", + "retryKubernetes": "Verificați Kubernetes din nou", + "retryWorkshop": "Verifică Atelierul din nou", + "unknownVersion": "versiune necunoscută", + "kubernetesAvailable": "Conectat la Kubernetes {version}", + "kubernetesDisabled": "Nu este activată; continuă cu Docker sau servicii manuale", + "kubernetesUnavailable": "Kubernetes este activat, dar nu poate fi atins din acest proces Homarr", + "workshopAvailable": "Atelierul comunitar și serviciile asistente găzduite sunt accesibile", + "workshopUnavailable": "Furnizorii locali și asistenți vamali rămân disponibili", + "partialTitle": "Unele surse nu au putut fi scanate", + "partialDescription": "Rezultatele din gazdele accesibile sunt păstrate. Verificați permisiunile socket sau adăugați servicii manual în secțiunea următoare.", + "status": { + "checking": "Verificare disponibilitate…", + "available": "Disponibil", + "partial": "Disponibil parțial", + "empty": "Accesibil fără servicii de potrivire", + "disabled": "Dezactivat de configurare server", + "unavailable": "Indisponibil din acest proces Homarr" } }, - "import": { - "title": "Importare date", - "subtitle": "Puteți importa date dintr-o instalare Homarr existentă.", - "dropzone": { - "title": "Trage fişierul zip aici sau apasă pentru a-l căuta", - "description": "Fișierul zip încărcat va fi procesat și vei putea selecta ceea ce dorești să imporți" + "connect": { + "title": "Conectează ce face panoul folositor", + "description": "Selectați mai multe servicii simultan. Etichetele de Docker sunt prioritare, completarea golurilor se potrivește cu imaginile, iar fiecare URL și acreditările rămân pot fi revizuite.", + "discoveredIntegrations": "Cazuri de integrare detectate ({count})", + "detectedIntegrationLabel": "Importă {name}, detectat ca {kind}", + "detectedAppLabel": "Aplicația de import detectată {name}", + "otherIntegrations": "Adăugați o altă integrare", + "configureIntegrations": "Configurare integrări", + "discoveredApps": "Aplicații detectate ({count})", + "appAddressRequired": "Adăugați o adresă pentru {name}sau eliminați-o din selecție.", + "empty": "Nicio integrare selectată. Homarr va crea în continuare un forum de pornire util cu widget-uri generale.", + "dockerSource": "Doctor", + "manualSource": "Manual", + "url": "URL serviciu", + "noCredentials": "Fără acreditări", + "noCredentialsDescription": "Această integrare nu are nevoie de acreditări.", + "credentialMethod": "Metoda de acreditare", + "getApiKey": "Deschide setările cheilor API pentru acest serviciu", + "openGuide": "Deschide ghidul de configurare al aplicației pentru acest serviciu", + "testConnection": "Testare conexiune", + "testSuccess": "Conexiunea funcționează", + "testSuccessDescription": "Homarr conectat la adresa curentă și credențiale.", + "testError": "Conexiune eșuată", + "testErrorDescription": "Verificați adresa serviciului și acreditările, apoi încercați din nou.", + "needsConfiguration": "Necesită configurare", + "tested": "Conexiune testată", + "testFailed": "Testul conexiunii a eșuat", + "incompleteConfirmation": "Integrările neterminate vor fi sărite. Continuați fără ele?" + }, + "board": { + "title": "Forma tabla înainte de a fi construită", + "description": "Homarr creează layout-uri mobile și de bază protejate, apoi plasează aplicații și widget-uri compatibile de la serviciile selectate.", + "target": "Secţiunea pentru configurare", + "targetDescription": "Alegeţi secţiunea existentă exactă pe care această configurare ar trebui să o actualizeze.", + "targetPlaceholder": "Selectaţi o secţiune", + "targetRequired": "Selectaţi secţiunea pentru a configura înainte de a continua.", + "name": "Numele forumului", + "nameDescription": "Folosit în URL-ul secţiunii; litere, numere, cratime şi doar sublinieri.", + "nameRequired": "Introduceți un nume de secţiune înainte de a continua.", + "primaryColor": "Culoare de bază", + "secondaryColor": "Culoare secundară", + "resetColors": "Resetare culori", + "radius": "Raza de colț widget", + "radiusOptions": { + "xs": "Strâns", + "sm": "Subtil", + "md": "Echilibru", + "lg": "Rotunjit", + "xl": "Moale" }, - "fileInfo": { - "action": { - "change": "Schimbă fișierul" - } + "columns": "Coloane tablă", + "columnsDescription": "Coloanele definesc grila orizontală folosită la mărimea și poziționarea elementelor. 12 este suficientă pentru majoritatea oamenilor.", + "columnCount": "{count, plural, one {# coloana} other {# coloane}}", + "leftSidebar": "Left sidebar", + "rightSidebar": "Bara laterală dreapta", + "previewLabel": "Previzualizare live a primei secţiuni" + }, + "extend": { + "title": "Caracteristici avansate", + "tabsLabel": "Configurare asistentă, atelier și MCP", + "assistant": "Asistent", + "workshop": "Atelier", + "assistantSetup": { + "loginTitle": "Autentificare administrator necesară", + "loginDescription": "Cheile furnizorului și accesul la model sunt privilegiate. Finalizați configurarea, conectați-vă și Homarr va deschide configurația asistentă în mod direct.", + "loginAction": "Conectați-vă pentru a configura Asistentul" }, - "importSettings": { - "title": "Importă Setări", - "description": "Configurare comportamentul de importare" + "workshopSetup": { + "title": "Atelier Homarr", + "description": "Navigați widget-uri personalizate ale comunității, inspectați capacitățile cerute, instalați-le, și publicați propria lucrare fără a copia codul între servere.", + "available": "Disponibil", + "checking": "Verificare…", + "unavailable": "Unavailable", + "discoverTitle": "Descoperă", + "discoverDescription": "Găsiți widget-uri construite pentru fluxuri de lucru cu adevărat auto-găzduite.", + "installTitle": "Revizuiește și instalează", + "installDescription": "Vedeți metadatele și configurația înainte de a adăuga ceva.", + "publishTitle": "Distribuie", + "publishDescription": "Publică widget-uri reutilizabile înapoi la comunitate.", + "browse": "Caută Atelier" }, - "boardSelection": { - "title": "S-au găsit {count} secţiuni", - "description": "Alege toate secțiunile cu dimensiunea pe care dorești să o imporți", - "action": { - "selectAll": "Selectează tot", - "unselectAll": "Deselectează tot" - } - }, - "summary": { - "title": "Rezumat importare", - "description": "În rezumatul de mai jos poți vedea ce va fi importat", - "action": { - "import": "Confirmă importul şi continuă" - }, - "entities": { - "apps": "Aplicații", - "boards": "Planșe", - "integrations": "Integrări", - "credentialUsers": "Utilizatori acreditați" - } - }, - "tokenModal": { - "title": "Introdu codul de import", - "field": { - "token": { - "label": "Token-ul", - "description": "Introdu token-ul de import afișat în instalarea de homarr anterioară" - } - }, - "notification": { - "error": { - "title": "Token invalid", - "message": "Token-ul introdus e invalid" - } - } + "mcpSetup": { + "title": "Homarr MCP", + "description": "Conectează Claude, Codex, sau un alt client MCP la uneltele introduse de Homarr. Chei API păstrează accesul explicit și revocabil.", + "endpoint": "Criteriul HTTP Streamable", + "keyTitle": "Copiază această cheie acum", + "keyDescription": "Pentru securitate, Homarr nu poate afișa această cheie API din nou.", + "copyKey": "Copiază cheia API", + "createKey": "Creează o cheie MCP API", + "errorTitle": "Cheia API MCP nu a putut fi creată", + "loginRequired": "Conectați-vă ca administrator după configurare pentru a crea o cheie API.", + "configuration": "Configurare client", + "copy": "Copiază configurația", + "copied": "Copiat", + "advanced": "Deschide instrumente, permisiuni și detalii de configurare" } }, - "user": { - "title": "Utilizator Administrator", - "subtitle": "Specifică credențialele pentru utilizatorul administrator.", - "notification": { - "success": { - "title": "Utilizator creat", - "message": "Utilizatorul a fost creat cu succes" - }, - "error": { - "title": "Crearea utilizatorului a eșuat" - } - } - }, - "group": { - "title": "Grup extern", - "subtitle": "Specifică grupul care ar trebui să fie utilizat pentru utilizatori externi.", - "form": { - "name": { - "label": "Nume grup", - "description": "Numele trebuie să corespundă grupului de administratori al furnizorului extern" - } - } - }, - "settings": { - "title": "Setări", - "subtitle": "Configurare setări server." - }, - "integrations": { - "title": "Integrări", - "subtitle": "Selectează serviciile pe care le folosești.", - "description": "Alegeți integrările pe care doriți să le conectați. Vă vom configura tabloul de bord cu widget-uri care se potrivesc automat.", - "action": { - "continue": "Continuă", - "skip": "Omite pentru moment" - }, - "configure": { - "progress": "{current} din {total}", - "skip": "Omite această integrare", - "finishing": "Se configurează tabloul de bord...", - "error": { - "title": "Configurarea a eșuat", - "message": "Ceva nu a mers bine în timpul configurării tabloului de bord. Te rugăm să încerci din nou." - }, - "helpers": { - "tooltip": "Helperi URL", - "description": "Acești helperi încearcă să ghicească URL-ul serviciilor tale. Dacă nu funcționează, introdu adresa manual." - } - }, - "urlTemplate": { - "label": "URL de bază", - "placeholder": "homelab.local sau 192.168.1.1", - "hint": "Introdu domeniul de bază sau IP-ul pentru a completa automat adresele URL ale integrărilor", - "warning": "Setarea adresei URL de bază acum va completa automat toate URL-urile integrărilor, scurtând timpul necesar configurării", - "preview": "de ex. {example}", - "mode": { - "subdomain": "Subdomeniu", - "hostPort": "Gazdă:Port" - } - }, - "docker": { - "detected": "Docker a detectat {count} servicii", - "detectedBreakdown": "{integrations} integrări · {apps} aplicații", - "summary": "Homarr a detectat {apps} aplicații, dintre care {integrations} au integrări încorporate", - "appBadge": "Aplicație", - "appSectionLabel": "Aplicații de adăugat la tabloul de bord ({count} selectate)", - "scanning": "Scanare Docker...", - "scanningDescription": "Căutare containere care rulează pe sistem" + "review": { + "title": "O singură placă, construită în jurul serviciilor tale", + "description": "Testează Homarr conexiunile nesalvate, importă aplicațiile selectate, aplică aspectul și aspectele, apoi deschide placa exactă pe care a configurat-o.", + "board": "Prima secţiune", + "columns": "Coloane tablă", + "columnsValue": "{count, plural, one {# coloana} other {# coloane}}", + "sidebars": "Sidebar-uri", + "sidebarsValue": "{count, plural, =0 {None} one {# sidebar} other {# sidebars}}", + "layouts": "Aspecte Responsive", + "layoutsValue": "Mobil + Bază", + "integrations": "Integrări", + "integrationsValue": "{count, plural, =0 {Nimeni nu a selectat} one {# integrare} other {# integrări}}", + "apps": "Dalele aplicației", + "appsValue": "{count, plural, =0 {Doar aplicaţii iniţiale} one {# dală de aplicaţii} other {# dale de aplicaţii}}", + "language": "Limba", + "theme": "Tema", + "themeAuto": "Preferințe sistem", + "themeLight": "Lumină", + "themeDark": "Întunecat", + "colors": "Culori tablă", + "radius": "Raza widget", + "automaticTitle": "Ce va crea Homarr", + "automaticDescription": "Widget-urile compatibile, iconițele, link-urile aplicației, relațiile de integrare și plasamentul responsiv provin din catalogul comun Homarr. Puteți edita fiecare rezultat mai târziu.", + "dockerWarningTitle": "Unele etichete Docker au fost modificate în timpul configurării", + "dockerWarningDescription": "{count, plural, one {# rezultatul selectat Docker nu a putut fi aplicat deoarece serviciul său a fost modificat, a fost direcționat o altă secţiune, sau widget-ul său a fost incompatibil} other {# rezultatele selectate Docker nu au putut fi aplicate deoarece serviciile schimbate, o altă secţiune vizată sau widget-urile lor au fost incompatibile}}", + "errorTitle": "Secţiunea nu a putut fi construită", + "progress": { + "applying": "Testarea conexiunilor și construirea forumului", + "done": "Secţiunea dumneavoastră este gata" } }, "finish": { - "title": "Finalizează configurarea", - "subtitle": "Ești gata să începi!", - "description": "Ai finalizat cu succes procesul de configurare. Acum poți începe să utilizezi Homarr. Selectează următoarea acțiune:", - "action": { - "goToBoard": "Mergi la panoul {name}", - "createBoard": "Creează primul tău panou", - "inviteUser": "Invită alți utilizatori", - "docs": "Citește documentația" - } + "title": "Prima ta secţiune este gata.", + "description": "Homarr a conectat piesele pe care le-ați selectat și a păstrat restul editabil. Deschideți tabla acum; turul scurt al produsului vă poate arăta modul de editare, widget-uri, layout-uri și căutare.", + "openBoard": "Deschide tabla", + "manageTitle": "Gestionați", + "manageDescription": "Reglaţi fin aplicaţii, integrări, secţiuni, utilizatori şi setările de server.", + "workshopTitle": "Atelier", + "workshopDescription": "Descoperă și instalează Widget-uri personalizate ale comunității.", + "docsTitle": "Învață Homarr", + "docsDescription": "Citiți ghidurile specifice pentru secțiuni, widgeturi, integrări și instrumente." } - }, - "backToStart": "Înapoi la început" + } }, "user": { - "title": "Utilizatori", "name": "Utilizator", "page": { "login": { @@ -159,12 +249,10 @@ }, "invite": { "title": "Alătură-te Homarr", + "titleWithAppName": "Alătură-te {appName}", "subtitle": "Bine ai venit la Homarr! Te rugăm să-ți creezi contul", + "subtitleWithAppName": "Bine ați venit la {appName}! Vă rugăm să vă creați contul", "description": "Ai fost invitat de {username}" - }, - "init": { - "title": "Instalare Homarr nouă", - "subtitle": "Vă rugăm să creați utilizatorul administrator inițial" } }, "field": { @@ -192,12 +280,17 @@ "previousPassword": { "label": "Parola anterioară" }, - "homeBoard": { - "label": "Tablou principal" - }, "pingIconsEnabled": { "label": "Folosește pictograme pentru ping-uri" }, + "byteUnitSystem": { + "label": "Unități de dimensiune date", + "description": "Alegeți cum Homarr afișează mărimile de octeți și tarifele de biți. Bit utilizează întotdeauna unități zecimale.", + "options": { + "binary": "Binar", + "decimal": "Zecimal" + } + }, "enableRightClickOnWidgets": { "label": "Activează clic-dreapta pe widget-uri", "description": "Arată meniul contextual al Homarr-ului când click dreapta pe un widget. Dezactivează pentru a utiliza meniul implicit al browser-ului (de ex. \"Deschide link-ul în fila nouă\")." @@ -247,7 +340,6 @@ } } }, - "create": "Creează utilizator", "changePassword": { "label": "Schimbă parola", "notification": { @@ -259,56 +351,6 @@ } } }, - "changeHomeBoard": { - "notification": { - "success": { - "message": "Acasă schimbată cu succes" - }, - "error": { - "message": "Imposibil de schimbat tabla principală" - } - } - }, - "changeSearchPreferences": { - "notification": { - "success": { - "message": "Preferințe căutare schimbate cu succes" - }, - "error": { - "message": "Imposibil de modificat preferințele de căutare" - } - } - }, - "changeFirstDayOfWeek": { - "notification": { - "success": { - "message": "Prima zi a săptămânii schimbată cu succes" - }, - "error": { - "message": "Imposibil de modificat prima zi a săptămânii" - } - } - }, - "changePingIconsEnabled": { - "notification": { - "success": { - "message": "Ping pictograme comutate cu succes" - }, - "error": { - "message": "Nu se pot comuta pictogramele de ping" - } - } - }, - "changeDdgBangs": { - "notification": { - "success": { - "message": "Bang-urile DuckDuckGo au fost activate cu succes" - }, - "error": { - "message": "Nu s-a putut activa bang-urile DuckDuckGo" - } - } - }, "manageAvatar": { "changeImage": { "label": "Schimbă imaginea", @@ -338,16 +380,6 @@ } } }, - "editProfile": { - "notification": { - "success": { - "message": "Profil actualizat cu succes" - }, - "error": { - "message": "Imposibil de actualizat profilul" - } - } - }, "delete": { "label": "Ștergeți utilizatorul permanent", "description": "Şterge acest utilizator, inclusiv preferinţele lor. Nu va şterge nicio secţiune. Utilizatorul nu va fi notificat.", @@ -356,18 +388,13 @@ "select": { "label": "Selectați utilizatorul", "notFound": "Niciun utilizator găsit" - }, - "transfer": { - "label": "Selectați un proprietar nou" } } }, "group": { - "title": "Grupuri", "name": "Grup", "search": "Găsește un grup", "field": { - "name": "Nume", "members": "Membri", "homeBoard": { "label": "Tablou principal", @@ -388,6 +415,19 @@ } } }, + "custom-widget": { + "title": "Widget-uri personalizate", + "item": { + "manage": { + "label": "Gestionare widget-uri personalizate", + "description": "Permite membrilor să creeze, să editeze și să șteargă definiții personalizate pentru widget" + }, + "secret-write": { + "label": "Configurare secrete personalizate widget", + "description": "Permite membrilor și cheilor lor API să seteze credențialele personalizate criptate" + } + } + }, "app": { "title": "Aplicații", "item": { @@ -493,6 +533,35 @@ "description": "Permite membrilor să gestioneze și să șteargă orice motor de căutare" } } + }, + "matrix": { + "none": "Fără acces", + "impliedHint": "De asemenea, granturi: {permissions}", + "grantedViaAdmin": "Administratorii au deja acest lucru. Setați administratorul ca \"Nici un acces\" pentru a-l configura separat.", + "preset": { + "label": "Presetări", + "viewer": "Vizualizator", + "viewerDescription": "Doar citire: vizualizare secţiuni şi media, utilizează aplicaţii şi integrări care există deja.", + "editor": "Editor", + "editorDescription": "Gestionare cotidiană: creați și editați secțiuni, aplicații, integrări și motoare de căutare.", + "admin": "Administrator", + "adminDescription": "Acces nelimitat la fiecare caracteristică şi setare, inclusiv gestionarea utilizatorului.", + "custom": "Personalizat" + }, + "effective": { + "title": "Permisiuni efective", + "description": "Setul complet, de-duplicat de acțiuni pe care membrii acestui grup le pot executa, inclusiv permisiunile acordate indirect.", + "empty": "Nicio permisiune selectată" + }, + "noneDescription": "Membrii nu au acces în acest domeniu.", + "level": { + "view": "Vizualizare", + "use": "Utilizare", + "interact": "Interacționează", + "modify": "Modifică", + "full": "Complet" + }, + "capabilityIncluded": "Deja inclus în „{level}”" } }, "memberNotice": { @@ -607,21 +676,24 @@ "search": "Găsește o aplicație", "page": { "list": { - "title": "Aplicații", + "ariaLabel": "Aplicații configurate", "noResults": { "title": "Încă nu există aplicații", - "action": "Creează prima ta aplicație" + "description": "Aplicațiile sunt link-uri către serviciile și instrumentele pe care le doriți în secțiunile dvs.", + "action": "Creează prima ta aplicație", + "filteredTitle": "Nicio aplicație nu corespunde căutării", + "filteredDescription": "Nicio aplicație nu se potrivește cu \"{search}\". Încercați un alt nume sau un URL.", + "createOnlyTitle": "Puteți adăuga doar aplicații", + "createOnlyDescription": "Permisiunile dvs. vă permit să creați aplicații, dar nu să le navigați pe cele existente. Cereți unui administrator pentru accesul la gestionarea aplicațiilor pentru a vedea lista completă." } }, "create": { "title": "Aplicație nouă", "notification": { "success": { - "title": "Creare reușită", "message": "Aplicația a fost creată cu succes" }, "error": { - "title": "Creare eșuată", "message": "Aplicația nu a putut fi creată" } } @@ -630,11 +702,9 @@ "title": "Editare aplicație", "notification": { "success": { - "title": "Modificări aplicate cu succes", "message": "Aplicația a fost salvată cu succes" }, "error": { - "title": "Imposibil de aplicat modificările", "message": "Aplicația nu a putut fi salvată" } } @@ -644,26 +714,18 @@ "message": "Sunteți sigur că doriți să ștergeți aplicația {name}?", "notification": { "success": { - "title": "Ștergere reușită", "message": "Aplicația a fost ștearsă cu succes" }, "error": { - "title": "Ștergerea a eșuat", "message": "Imposibil de șters aplicația" } } } }, "field": { - "name": { - "label": "Nume" - }, "description": { "label": "Descriere" }, - "url": { - "label": "Url-ul" - }, "useDifferentUrlForPing": { "checkbox": { "label": "Folosiți un URL diferit pentru ping-uri", @@ -678,34 +740,582 @@ "search": "Caută o aplicație", "noResults": "Niciun rezultat", "action": "Selectați {app}", - "title": "Selectaţi o aplicaţie pentru a o adăuga la această secţiune" + "title": "Selectaţi o aplicaţie pentru a o adăuga la această secţiune", + "toggle": "Click pentru a selecta", + "selected": "Selectate", + "multiple": "Adaugă {count}", + "selectedCount": "{count, plural, one {# a selectat} other {# a selectat}}", + "appsSelected": "{count, plural, one {# aplicaţie selectată} other {# aplicaţii selectate}}", + "selectMultiple": "Selectează mai multe", + "cancelMultiple": "Ieșiți din multi-selectare", + "customApplication": "Aplicație personalizată", + "application": "Cerere" }, "create": { "title": "Creează o aplicație nouă", "description": "Creează o aplicație nouă ", "action": "Deschide crearea aplicației" + } + } + }, + "tips": { + "dismiss": "Renunțați la sfat", + "multiSelectApps": "Sfat: Țineți apăsat Ctrl / pentru a selecta mai multe aplicații dintr-o dată" + }, + "customWidget": { + "secretEntry": { + "title": "Configurați sursa API", + "description": "Confirmați URL-ul serverului și introduceți acreditările. Valorile secrete sunt criptate de Homarr și nu s-au întors niciodată la agentul solicitant.", + "loading": "Se încarcă solicitarea de securitate…", + "applying": "Se aplică această configurație… Păstrează această pagină deschisă.", + "saved": "Sursă API configurată. Puteți închide această pagină.", + "unavailable": "Cerere indisponibilă", + "saveError": "Imposibil de configurat sursa API", + "source": "Sursă API: {name}", + "baseUrl": "URL Server", + "networkScope": "Acces la rețea", + "save": "Salvează configurația API", + "expires": "Această solicitare unică expiră la {time}." + }, + "page": { + "list": { + "noResults": "Nici un widget personalizat încă. Creați primul!", + "noDescription": "Nici o descriere", + "enabled": "Activat", + "disabled": "Dezactivat", + "disabledDescription": "Acest widget rămâne configurat dar nu se va încărca pe nicio secţiune.", + "requestCount": "{count, plural, one {# solicitare} other {# cereri}}", + "invalidDefinition": "Definiţie nevalidă", + "migrationRequired": "Migrare necesară", + "migrationInstructions": "Deschide Acțiuni pentru a copia sau exporta definiția originală v1 pentru recreere manuală. Poți folosi, de asemenea, migrarea promptă cu un LLM. Plasamentele existente la bord continuă să funcționeze după migrare.", + "missingCredentials": "{count, plural, one {Acreditările lipsesc} other {# acreditările lipsesc}}", + "missingCredentialsDescription": "{count, plural, one {Acest widget încă are nevoie de o acreditare.} other {Acest widget încă are nevoie de # acreditări.}} Selectați această insignă pentru a configura URL-ul și valorile criptate." }, - "add": "Adăugați o aplicație" + "create": { + "title": "Creați widget personalizat", + "subtitle": "Definiți un URL API, autentificare și cum să afișați datele de răspuns." + }, + "tabs": { + "ariaLabel": "Secţiuni widget personalizat", + "installed": "Instalat", + "workshop": "Atelier" + } + }, + "action": { + "pasteImportHint": "Lipește un widget complet personalizat JSON cu Ctrl+V sau Comandă+V", + "delete": "Ștergere widget personalizat", + "deleteConfirm": "Sunteţi sigur că doriţi să ştergeţi \"{name}\"? Această acţiune nu poate fi anulată.", + "export": "Exportă", + "duplicate": "Duplicate", + "aiPrompt": "Proiectare cu AI", + "copyAiPrompt": "Copiază solicitarea AI", + "enable": "Activare", + "disable": "Dezactivează", + "menu": "Acțiuni", + "downloadSkill": "Vezi Abilitatea Personalizată a Widgetului", + "publishWorkshop": "Publică în Atelier", + "migrate": "Migrează widget personalizat", + "configureSources": "Configurați sursele", + "copyLegacyDefinition": "Copiază conținutul original al widget-ului", + "exportLegacyDefinition": "Exportă conținutul widget original", + "copyMigrationPrompt": "Copiere promptitudine migrare LLM", + "pasteMigration": "Lipește widget migrat", + "importMigration": "Importă fișier JSON migrat" + }, + "sourceSetupDialog": { + "title": "Configurare surse widget", + "description": "Revizuiește unde acest widget se conectează și adaugă sau înlocuiește credențialele sale criptate.", + "credentialsRequired": "Cererile vor eşua până când nu vor fi adăugate acreditările necesare.", + "save": "Salvează configurația" + }, + "field": { + "description": "Descriere" + }, + "editor": { + "errorBoundary": { + "title": "Ceva nu a funcționat" + }, + "action": { + "components": "Componente", + "format": "Format", + "insertStarter": "Insert starter", + "redo": "Reface", + "copied": "Copiat", + "schema": "Schema" + }, + "reference": { + "minimal": "Exemplu minim", + "full": "Exemplu complet" + }, + "componentReference": { + "search": "Componente căutare", + "empty": "Nicio componentă care se potrivește", + "count": "{count, number} componente disponibile" + }, + "status": { + "errors": "Eroare {count, number}", + "warnings": "Avertismentele {count, number}", + "ready": "Nicio problemă găsită", + "position": "Ln {line, number}, Col {column, number}", + "characters": "{count, number} caractere", + "charactersWithLimit": "{count, number} / {limit, number}" + }, + "diagnostics": { + "title": "Diagnosticare șablon", + "line": "Linia {line, number}", + "ast": "{value}", + "bindingTypeConflict": "Intrarea \"{value}\" este partajată de controale cu tipuri de valori incompatibile.", + "runtimeBindingTypeConflict": "Intrarea \"{value}\" este asociată atât {firstType} cât și {secondType}.", + "dynamicRequestId": "Este necesar un ID de solicitare literal. ID-urile dinamice de cerere nu sunt acceptate.", + "dynamicInputBinding": "Un nume de intrare literal este necesar pentru legare.", + "inlineRequestProps": "Componentele de rețea acceptă requestId și param-uri; URL-ul, metoda, header-ul și prop-urile corpului sunt blocate.", + "invalidRequestManifest": "Solicitările denumite trebuie să fie o hartă validă a cererii. {value}", + "missingRequestId": "Această componentă de rețea necesită un ID de solicitare literală.", + "templateEmpty": "Introduceți un șablon JSX.", + "templateTooLong": "Şablonul depăşeşte limita de 50.000 de caractere.", + "unknownRequest": "Nu există nicio cerere cu numele \"{value}\"." + } + }, + "workbench": { + "configure": "Configurare", + "sectionNavigation": "Secţiuni widget personalizat", + "widgetPreview": "Previzualizare widget", + "generalInformation": "Informaţii generale", + "invalidWidget": "Widget nevalid", + "section": { + "general": "Generalități", + "sources": "Surse API", + "requests": "Cereri", + "options": "Opţiuni", + "jsx": "JSX", + "preview": "Previzualizare" + }, + "status": { + "unsaved": "Modificări nesalvate", + "invalid": "Necesită atenție", + "ready": "Gata" + }, + "saveError": { + "title": "Widgetul nu a fost salvat", + "description": "Repară aceste erori de validare și salvează din nou.", + "more": "+{count} mai multe erori sunt afișate în banca de lucru.", + "errors": "Erori de validare", + "copy": "Copiază erorile", + "copied": "Erori copiate" + }, + "action": { + "preview": "Testare și previzualizare", + "previewLoading": "Testarea cererilor" + }, + "requests": { + "title": "Întrebări și acțiuni denumite", + "label": "Cereri", + "description": "Interacțiunea se încarcă date; acțiunile se execută numai după interacțiunea utilizatorului. Orice metodă HTTP este valabilă pentru orice fel." + }, + "options": { + "title": "Opțiuni widget" + }, + "builder": { + "advancedManifest": "manifest brut avansat", + "advancedJson": "manifest avansat JSON", + "manifestFilename": "widget.json", + "request": "Cere {count, number}", + "requestId": "ID cerere", + "type": "Descarcă tipul de client", + "method": "Metodă", + "source": "Sursă API", + "run": "Rulează", + "runLoad": "Când widget-ul se încarcă", + "runManual": "Din SubFetch", + "permission": "Permisiune", + "path": "Cale", + "pathDescription": "Folosiți '{option:name}' pentru opțiunile widget-ului și '{param:name}' pentru valorile de invocare.", + "requestDetails": "Interogări, corp și comportament", + "queryValues": "Interogare valori", + "queryKey": "Cheie de interogare", + "queryKeyInvalid": "Folosește un ID unic care începe cu o literă și conține doar litere, numere, - sau _.", + "valueSource": "Sursa valorii", + "literal": "Literală", + "widgetOption": "Opțiune widget", + "invocationParameter": "Parametru de invocare", + "option": "Opţiune", + "parameterName": "Numele parametrului", + "value": "Valoare", + "removeQueryValue": "Elimină valoarea interogării", + "addQueryValue": "Adaugă valoare interogare", + "jsonBody": "Corpul JSON", + "jsonBodyDescription": "Opțional. Introduceți referințe $option și $param la orice adâncime.", + "insertOptionReference": "Inserați referința opțiunii", + "insertParameterReference": "Introduceți o referință a parametrului", + "confirmation": "Mesaj de confirmare", + "invalidation": "Reîmprospătare după succes", + "invalidationDescription": "ID interogare separate prin virgulă", + "noAuth": "Trimite fără autentificare sursă", + "moveRequestUp": "Solicitare de mutare în sus", + "moveRequestDown": "Mutați solicitarea în jos", + "removeRequest": "Elimină cererea", + "addRequest": "Adaugă cerere", + "optionName": "Numele opţiunii", + "label": "Etichetă", + "control": "Control", + "description": "Descriere", + "default": "Implicit", + "optionDetails": "Constrângeri și opțiuni dinamice", + "minimum": "Minim", + "maximum": "Maxim", + "step": "Pas", + "choiceLabel": "Etichetă alegere", + "choiceValue": "Valoarea alegerii", + "newChoice": "Alegere nouă", + "addChoice": "Adăugați o alegere", + "removeChoice": "Eliminați alegerea", + "choicesRequest": "Încărcați opțiunile de la cerere", + "itemsPath": "Calea articolelor", + "itemsPathPlaceholder": "articole (opţional)", + "valuePath": "Calea valorii", + "labelPath": "Calea etichetei", + "group": "Grup", + "advancedOption": "Opțiune avansată", + "moveOptionUp": "Mutați opțiunea în sus", + "moveOptionDown": "Mutați opțiunea în jos", + "removeOption": "Eliminați opțiunea", + "addOption": "Adaugă opțiune", + "invalidJson": "JSON invalid", + "invalidWidget": "Widget nevalid" + }, + "jsx": { + "title": "Sablon JSX", + "label": "Șablon" + }, + "sources": { + "title": "Surse API și acreditări", + "newName": "API {count, number}", + "duplicateSourceId": "ID-urile sursă API trebuie să fie unice.", + "credentialRemoved": "Acreditări eliminate", + "credentialRemovedDescription": "Valoarea stocată a fost ștearsă.", + "primary": "API principal", + "id": "ID sursă", + "name": "Numele postului", + "baseUrl": "URL de bază", + "baseUrlError": { + "invalid": "Introduceți un URL complet.", + "protocol": "Utilizați un URL HTTP sau HTTPS.", + "credentials": "Șterge numele de utilizator și parola din acest URL. Configurați credențialele de mai jos.", + "queryOrFragment": "Eliminați șirul sau fragmentul de interogare din acest URL de bază. Adăugați valorile interogării la o cerere numită." + }, + "networkScope": "Acces la rețea", + "authentication": "Autentificare", + "headerName": "Nume antet", + "queryParameter": "Parametru interogare", + "configured": "Configurează-te - introdu un înlocuitor", + "clear": "Senin", + "remove": "Șterge sursa și cererile sale", + "advanced": "Avansat", + "add": "Adăugați o altă sursă API", + "sourceType": "Integrare", + "manualSource": "HTTP API", + "existingIntegration": "Integrare existentă", + "integrationType": "Tip de integrare", + "selectIntegration": "Integrare configurată", + "noIntegrations": "Nu există integrări disponibile", + "integrationUnavailable": "Integrarea selectată nu mai este disponibilă. Selectați o altă integrare.", + "integrationDescription": "Folosește URL-ul de integrare și acreditările salvate. Modificările se aplică automat. Accesul complet la integrare este necesar pentru a rula cererile." + }, + "ai": { + "title": "Creează sau repară cu orice AI", + "description": "Adaugă un URL de documente API mai întâi dacă ai unul. Pentru remedieri, execută previzualizarea, dacă este posibil. Copiază promptitudinea în orice AI; poate cere detalii lipsă. Lipiți aici ultimul său JSON.", + "request": "Ce ar trebui să facă acest widget?", + "documentationUrl": "URL documentație API (opțional)", + "paste": "Lipește", + "response": "Răspuns AI", + "manualCopyDescription": "Accesul la Clipboard nu este disponibil. Selectați prompt de mai jos și copiați-l manual.", + "manualPasteDescription": "Accesul la Clipboard nu este disponibil sau răspunsul copiat necesită corecţie. Lipiţi aici răspunsul AI-ului.", + "selectAll": "Selectează tot", + "loadResponse": "Încarcă răspuns", + "loaded": "Widget încărcat în editor", + "invalidResponse": "Clipboard nu conține un widget v2 valid", + "invalidResponseDetail": "Răspunsul AI nu este valid: {message}" + }, + "preview": { + "invalid": "Repară erorile de validare pentru a previzualiza acest widget.", + "fixtureError": "Eroare de previzualizare", + "requestData": "Solicită date", + "status": { + "idle": "Cererile nu au fost testate", + "loading": "Testarea cererilor", + "success": "Toate solicitările de încărcare au reușit", + "error": "Una sau mai multe solicitări de încărcare au eșuat" + }, + "result": { + "loading": { + "title": "Testarea solicitărilor API", + "description": "Homarr creează o sesiune de previzualizare și încarcă datele widgetului." + }, + "success": { + "title": "Previzualizare gata", + "description": "{succeeded, plural, =0 {Acest widget nu are solicitări de încărcare.} one {# solicitare de încărcare cu succes.} other {# solicitări de încărcare cu succes.}} Deschideţi Date pentru a inspecta răspunsul." + }, + "error": { + "title": "Previzualizare finalizată cu erori de solicitare", + "description": "{succeeded, number} a reușit și {failed, number} a eșuat. Deschideți Datele pentru răspuns și detaliile de eroare." + } + }, + "instanceOptions": "Opțiuni instanță", + "liveActions": "Execută acțiunile împotriva API configurat", + "liveActionsDescription": "Dezactivarea este simulare sigură. Activarea acesteia afectează serviciul real.", + "noActions": "Nici o acţiune nu este definită.", + "containedFailures": "Eșecurile în timpul runtime sunt conținute în acest widget. Solicitarea de jurnale nu include niciodată valori secrete.", + "validation": { + "title": "Validare", + "ready": "Definiția widgetului este validă." + }, + "accessibility": { + "title": "Verificările accesibilității", + "ready": "Nu s-au detectat omisiuni comune de accesibilitate.", + "pending": "Verificările de accesibilitate se vor executa atunci când definiția widgetului este validă.", + "imageAlt": "Adaugă alt text la fiecare imagine, folosind un alt gol doar pentru imagini decorative.", + "actionIconLabel": "Adaugă o etichetă sau un titlu ariei la fiecare ActionIcon.", + "inputLabel": "Adăugați o etichetă vizibilă sau un nume accesibil la fiecare intrare." + }, + "journal": "Jurnal cerere respinsă", + "actionParameters": "Parametri de acțiune (JSON)", + "invalidParameters": "Utilizează tipurile de parametri declarate, numărul și booleeni.", + "runDestructive": "Rulează acțiune distructivă", + "runAction": "Execută acțiunea", + "deleteConfirmation": "Această previzualizare acţiune schimbă datele de la distanţă prin API-ul configurat.", + "simulated": "Acțiune simulată", + "httpStatus": "HTTP {status, number}", + "tab": { + "widget": "Widget", + "data": "Date", + "options": "Opţiuni", + "state": "Stare Job", + "actions": "Controale", + "diagnostics": "Diagnosticare" + }, + "size": { + "compact": "Compact", + "standard": "Standard", + "wide": "Lat" + }, + "fixture": { + "live": "Live", + "loading": "Încărcare", + "empty": "Gol", + "error": "Eroare" + } + } + }, + "preview": { + "request": { + "permission": { + "view": "Vizualizare", + "modify": "Modifică", + "full": "Complet" + } + } + }, + "notification": { + "created": "Widget \"{name}\" creat cu succes.", + "updated": "Widget \"{name}\" a fost actualizat cu succes.", + "deleted": "Widget-ul \"{name}\" a fost șters.", + "imported": "Widget importat cu succes.", + "migrated": "Widget moștenit migrat cu succes. Plasamentele existente la bord folosesc acum definiția v2.", + "migrationError": "Eșec la migrarea widget-ului moștenit. Asigură-te că fișierul folosește schema homarrarr-custom-widget-v2.", + "legacyDefinitionCopied": "Conținutul widget original a fost copiat. Valorile acreditărilor stocate nu sunt incluse.", + "legacyDefinitionCopyError": "Copierea conținutului original al widget-ului a eșuat.", + "migrationPromptCopied": "Un aviz de migrare modificat a fost copiat. Lipiți-l în LLM, copiați singurul său răspuns JSON, apoi alegeți aici Paste widget migrat.", + "migrationPromptCopyError": "Nu s-a putut copia solicitarea migrării.", + "sourcesConfigured": "Surse widget-uri și acreditări salvate.", + "sourceConfigurationError": "Nu s-a putut configura sursele widget-urilor.", + "aiPromptCopiedWithCount": "Cererea AI a fost copiată în clipboard ({count, number} caractere).", + "aiPromptCopyError": "Copierea promptă în clipboard. Este posibil ca browserul să nu suporte această funcție.", + "aiPromptSent": "Trimitere promptă. Puteți continua editarea în timp ce asistentul lucrează în fundal.", + "updateError": "Actualizarea widget-ului a eșuat. Modificările nu au fost salvate.", + "importError": "Importul widget-ului a eșuat. Asigurați-vă că fișierul este un widget personalizat valid JSON export.", + "exportError": "Exportarea widget-ului a eșuat.", + "duplicated": "Widget \"{name}\" duplicat.", + "duplicateError": "Esuare duplicare widget.", + "toggleError": "Eroare la comutarea stării widget-ului.", + "deleteError": "Ștergerea widget-ului a eșuat.", + "previewError": "Previzualizarea nu a reușit. Verificați URL-ul și încercați din nou." + }, + "importReview": { + "title": "Revizuiește import widget personalizat", + "description": "Verificați unde se conectează acest widget și ce drepturi de acces ale acestuia înainte de importare.", + "migrationTitle": "Revizuiește înlocuitorul v2 migrat", + "migrationDescription": "Examinați și confirmați această definiție generată v2. Confirmând înlocuirea atomică a înregistrărilor v1 conservate, păstrând în același timp plasările de bord existente legate de același ID widget.", + "fileLabel": "Alegeți un fișier JSON pentru widget personalizat", + "name": "Numele postului", + "origin": "Originea de bază", + "authentication": "Autentificare", + "networkScope": "Domeniul de aplicare al rețelei", + "methods": "Metode HTTP", + "permissions": "Permisiuni la bord necesare", + "sourceSetup": { + "title": "Configurați sursele API", + "description": "Confirmă unde se conectează acest widget și adaugă acreditări. URL-urile private și de buclă sunt specifice instalării Homarr.", + "suggestedUrl": "URL sugerat", + "confirmUrl": "Confirm că acest server URL este corect pentru instalarea mea de Homarr", + "ready": "URL gata", + "needsUrl": "Confirmare URL", + "credentialsMissing": "Acreditările lipsesc", + "credentialsOptional": "Puteți instala fără acreditări și să le configurați mai târziu, dar cererile vor eșua până când acestea vor fi adăugate." + }, + "actionWarning": { + "title": "Acest widget poate schimba datele de la distanță", + "description": "Examinați fiecare acțiune numită, acreditare moștenită și confirmare distructivă după import. Secretele nu sunt incluse în fișier." + }, + "cancel": "Anulare import", + "confirm": "Importă widget", + "confirmMigration": "Confirmați înlocuirea v2" + }, + "secret": { + "apiKey": "Cheie API sau jeton", + "username": "Nume", + "password": "Parolă", + "savedPlaceholder": "• • • (salvat, lasati gol pentru a fi păstrat)" + } + }, + "workshop": { + "title": "Atelier", + "browseWorkshop": "Caută Atelier", + "openCommunity": "Deschide atelierul", + "openOnWorkshop": "Deschide {title} pe site-ul Atelier", + "back": "Înapoi la Atelier", + "search": "Căutare widget-uri", + "searchCss": "Caută teme CSS", + "sort": "Sortează", + "sortTop": "Cele mai evaluate", + "sortNewest": "Cele mai noi", + "listAriaLabel": "Widget-uri atelier", + "listAriaLabelCss": "Teme CSS atelier", + "empty": "Niciun widget nu se potrivește cu această căutare.", + "emptyDescription": "Widget-urile comunitare publicate în Atelier apar aici.", + "emptyFilteredTitle": "Niciun widget nu se potrivește cu această căutare", + "emptyFilteredDescription": "Nici un widget atelier nu se potrivește \"{search}\".", + "emptyCss": "Nicio temă CSS nu se potrivește cu această căutare.", + "unavailableTitle": "Atelierul Homarr pare să fie indisponibil", + "unavailable": "Serviciul comunitar poate fi temporar oprit. Încercaţi din nou într-un moment. Widget-urile instalate nu sunt afectate.", + "loadError": "Această prezentare nu a putut fi încărcată.", + "noDescription": "Nici o descriere", + "author": "de {name}", + "communityMember": "Membru al comunității", + "outdated": "învechit", + "outdatedWarning": "Autorul a marcat această depunere ca fiind depăşită. Examinaţi-o cu atenţie înainte de a importa.", + "score": "Scor: {count, number}", + "upvote": "Upvote", + "downvote": "Retrogradeaza", + "voteError": "Votul nu a putut fi salvat.", + "signIn": "Conectați-vă cu GitHub", + "signInError": "Conectarea GitHub a eșuat. Verificați dacă furnizorul OAuth este configurat și dacă popup-urile sunt permise.", + "signOut": "Deconectare", + "signInHint": "Conectați-vă pentru a vota sau raporta. Instalarea nu necesită un cont Atelier.", + "securityNotice": "Widget-urile atelierului pot apela sursele lor declarate API și pot efectua acțiunile declarate cu acreditările dvs. configurați local. Secretele nu sunt incluse niciodată.", + "securityNoticeCss": "CSS din Comunitate poate schimba aspectul şi modul de utilizare a unui tablă. Examinaţi-l înainte de import; nimic nu este salvat până când salvaţi setările secţiunii.", + "install": "Instalează", + "installReviewTitle": "Revizuiește înainte de instalare", + "installError": "Acest widget nu poate fi instalat", + "installErrorDescription": "Trimiterea atelierului nu este un widget JSX v2 customizat.", + "useCss": "Import CSS", + "importCss": "Importă CSS din Workshop", + "importCssConfirm": "Înlocuiţi personalizarea CSS curentă cu \"{title}\"? Nimic nu este salvat până nu salvaţi setările secţiunii.", + "screenshotAlt": "{title} captură de ecran {count, number}", + "screenshotViewer": "{title} vizualizator de captură ecran", + "screenshotsLabel": "{title} capturi de ecran", + "zoomScreenshot": "Vezi dimensiunea completă", + "previousScreenshot": "Captură ecran anterioară", + "nextScreenshot": "Screenshot următor", + "showScreenshotThumbnails": "Arată miniaturi de captură ecran", + "hideScreenshotThumbnails": "Ascunde miniaturi de captură ecran", + "closeScreenshotViewer": "Închideți vizualizatorul de captură ecran", + "technicalDetails": "Detalii tehnice", + "sourceCode": "Intrare atelier", + "export": "Exportă", + "report": "Raport", + "reportTitle": "Trimitere raport", + "reportReason": "Motiv", + "reportExplanation": "Ce ar trebui să știe moderatorii atelierului?", + "reportSend": "Trimite raport", + "reportSent": "Raport trimis", + "reportSentDescription": "Moderatorii atelierului pot revizui acum această submisie.", + "reportCount": "{count, plural, one {# raportează} other {# rapoarte}}", + "reportWarning": "{count, plural, one {Această postare are # raport de comunitate.} other {Această postare are # rapoarte de comunitate deschise.}} Rămâne instalabil, dar ar trebui să revizuiți mai întâi conținutul acestuia.", + "reportVisibility": "Detaliile raportului sunt vizibile doar autorului și administratorilor Workshop de la această trimitere.", + "reportCategory": { + "outdated": "Depășit sau nu mai funcționează", + "malicious": "Malicios", + "spam": "Spam", + "copyright": "Drepturi de autor", + "inappropriate": "Nepotrivit", + "other": "Altele" + }, + "publish": { + "title": "Publică în Atelier", + "introTitle": "Distribuie acest widget comunității", + "introDescription": "Homarr exportă o copie fără acreditare a widget-ului curent. Adăugați detalii clare de listare, astfel încât oamenii să știe ce face înainte de a instala.", + "listingDetails": "Listare atelier", + "listingDetailsDescription": "Aceste detalii apar public alături de definiția widget-ului exportat.", + "success": "Publicat imediat. Membrii Comunităţii pot acum instala şi raporta acest widget.", + "successTitle": "Widgetul dvs. este live", + "manageDescription": "Deschideți trimiterea pentru a actualiza lista, revizuiți-le, marcați-o învechită sau ștergeți-o. Gestionarea trimiterilor este gestionată direct pe site-ul Workshop.", + "viewSubmission": "Vizualizați și gestionați trimiterea", + "done": "Terminat", + "signInHint": "Conectați-vă pentru a publica sub identitatea Atelierului dvs.", + "titleField": "Titlu", + "descriptionField": "Descriere", + "screenshots": "Capturi ecran", + "screenshotsDescription": "Până la cinci imagini PNG, JPEG sau WebP", + "screenshotsPlaceholder": "Alege capturi de ecran", + "invalidScreenshot": "Utilizați imagini PNG, JPEG sau WebP care nu sunt mai mari decât {maxSize} fiecare.", + "privateSourceWarning": "Acest widget conţine surse private URL-uri pentru: {sources}. Înlocuiţi gazdele personale sau adresele IP cu substituenţi de servicii în siguranţă înainte de publicare.", + "reviewSourcesTitle": "Revizuiește URL-uri de sursă privată", + "privateSourceConfirmation": "Am analizat aceste adrese URL sursă și nu expun detaliile infrastructurii private", + "action": "Publică acum", + "publicationNote": "Publicarea este imediată. Puteți gestiona trimiterea după atelier.", + "definitionChanged": "Widget-ul s-a schimbat în timp ce publicarea a fost pregătită. Examinați din nou adresele URL sursă privată și apoi reîncercați.", + "error": "Publicare eșuată" } }, "integration": { + "completion": { + "modalTitle": "Serviciu gata", + "title": "{name} este conectat", + "description": "Conexiunea a trecut de test. Alegeți ce să afișați în următoarea secţiune.", + "connectionReady": "Conexiunea la serviciu este gata", + "appReady": "Scurtătura aplicației este gata", + "compatibleWidgets": "{count, plural, =0 {Nici un widget compatibil} one {# widget compatibil} other {# widget-uri compatibile}} disponibil", + "chooseWidget": "Alege widget", + "recipes": { + "title": "Recomandat pentru această secţiune", + "description": "Bazat pe servicii și widget-uri conectate deja în această secţiune.", + "newConnectionReason": "Disponibil acum prin {integration}", + "existingConnectionReason": "Funcționează cu un serviciu pe care l-ai conectat deja", + "dismiss": "Respingeți recomandările pentru acest serviciu în această secţiune" + } + }, "page": { "list": { - "title": "Integrări", + "ariaLabel": "Integrări configurate", "search": "Căutare integrări", + "scopedNote": "Se afișează doar integrările care vă sunt permise pentru gestionare.", "noResults": { - "title": "Nu există încă integrări" + "title": "Nu există încă integrări", + "description": "Conectați un serviciu pentru a-și utiliza datele și acțiunile în widget-uri Homarr.", + "action": "Creați prima dvs integrare", + "filteredTitle": "Nicio integrare nu corespunde căutării tale", + "filteredDescription": "Nicio integrare nu se potrivește \"{search}\". Încercați un alt nume, tip sau URL.", + "createOnlyTitle": "Puteți adăuga doar integrări", + "createOnlyDescription": "Permisiunile dvs. vă permit să creați integrări, dar nu să le gestionați pe cele existente. Solicitați administratorului acces la cele de care aveți nevoie." } }, "create": { "title": "Integrare nouă {name}", "notification": { "success": { - "title": "Creare reușită", "message": "Integrarea a fost creată cu succes" }, "error": { - "title": "Creare eșuată", "message": "Integrarea nu a putut fi creată" } }, @@ -729,11 +1339,9 @@ "title": "Editare integrare {name}", "notification": { "success": { - "title": "Modificări aplicate cu succes", "message": "Integrarea a fost salvată cu succes" }, "error": { - "title": "Imposibil de aplicat modificările", "message": "Integrarea nu a putut fi salvată" } }, @@ -750,23 +1358,15 @@ "message": "Sunteţi sigur că doriţi să ştergeţi integrarea {name}?", "notification": { "success": { - "title": "Ștergere reușită", "message": "Integrarea a fost ștearsă cu succes" }, "error": { - "title": "Ștergerea a eșuat", "message": "Imposibil de șters integrarea" } } } }, "field": { - "name": { - "label": "Nume" - }, - "url": { - "label": "Url-ul" - }, "attemptSearchEngineCreation": { "label": "Crează Motor de Căutare", "description": "Integrarea \"{kind}\" poate fi utilizată cu motoarele de căutare. Verificați acest lucru pentru a configura automat motorul de căutare." @@ -778,6 +1378,10 @@ "label": "Creare aplicație", "description": "Creați o aplicație cu același nume și aceeași pictogramă ca și integrarea. Lăsați câmpul de intrare de mai jos gol pentru a crea aplicația cu URL-ul de integrare." }, + "linkApp": { + "label": "Conectați o aplicație existentă", + "description": "Conectați această integrare la o aplicație pe care o puteți folosi deja." + }, "appHref": { "placeholder": "URL personalizat pentru aplicație" }, @@ -791,7 +1395,11 @@ "grid": { "widgetCount": "{count} widget-uri", "noWidgets": "Niciun widget", - "detected": "Detectat prin Docker" + "detected": "Detectat prin Docker", + "connected": "{count, plural, one {# conectat} other {# conectat}}", + "tiedWidgets": "Widget-uri cuplate", + "more": "+{count} mai mult", + "loadError": "Integrările nu au putut fi încărcate. Încercați din nou înainte de a crea o conexiune nouă." }, "category": { "dnsHole": "DNS", @@ -822,7 +1430,10 @@ "analytics": "Analiză", "vpn": "VPN", "mediaLibrary": "Bibliotecă media", - "uptimeMonitoring": "Monitorizare uptime" + "uptimeMonitoring": "Monitorizare uptime", + "beszel": "Beszel", + "systemMonitoring": "Monitorizare sistem", + "security": "Securitate" }, "testConnection": { "action": { @@ -1107,6 +1718,22 @@ "slug": { "label": "Slug pagină de stare", "newLabel": "Nou slug pagină de stare" + }, + "wazuhIndexerUrl": { + "label": "URL indexare", + "newLabel": "URL indexare nouă" + }, + "wazuhIndexerUsername": { + "label": "Nume utilizator indexare", + "newLabel": "Nume utilizator nou indexare" + }, + "wazuhIndexerPassword": { + "label": "Parola indexului", + "newLabel": "Parola de indexare nouă" + }, + "wazuhDashboardUrl": { + "label": "URL Panou de control (opțional)", + "newLabel": "URL nou dashboard" } } }, @@ -1115,54 +1742,19 @@ "interact": "Interacționează cu integrările", "full": "Acces complet la integrare" }, - "audiobookshelf": { - "name": "Audiobookshelf", - "description": "Server auto-găzduit de audiobooks și podcasturi" - }, - "navidrome": { - "name": "Navidrome", - "description": "Server auto-găzduit de streaming muzical cu compatibilitate API Subsonic" - }, - "uptimeKuma": { - "name": "Uptime Kuma", - "description": "Monitorizare autogăzduită în timpul uptime cu pagini de stare publică", - "secret": { - "slug": { - "description": "slug din pagina publică de stare. Implicit este \"implicit\" dacă nu este setat." - }, - "apiKey": { - "description": "Cheie API opțională pentru acces autentificat/metrică" - } - } - }, - "traefik": { - "name": "Traefik", - "description": "Convertizorul opus invers proxy și echilibru de încărcare" - }, - "paperlessNgx": { - "name": "Ngx", - "description": "Sistem de administrare a documentelor pentru arhivarea și organizarea documentelor scanate" - }, - "patchmon": { - "name": "PatchMon", - "description": "Managementul plasturelui și monitorizarea pentru gazdele Linux" - }, - "bazarr": { - "name": "Bazarr", - "description": "Aplicaţie de companie pentru Sonarr şi Radarr care gestionează şi descarcă subtitrări" - }, - "wud": { - "name": "Ce este Docker", - "description": "Monitorizează ce containere Docker au disponibile actualizări ale imaginilor" + "llamacpp": { + "name": "llama.cpp", + "description": "Monitorizați un llama.cpp llama-server: sănătatea, modelul și valorile generației" } }, "media": { "plural": "Medias", "search": "Găsește un fișier media", "field": { - "name": "Nume", + "preview": "Previzualizare", "size": "Mărime", - "creator": "Creator" + "creator": "Creator", + "actions": "Controale" }, "action": { "upload": { @@ -1190,10 +1782,12 @@ } }, "copy": { - "label": "Copiază URL-ul" + "label": "Copiază URL-ul", + "labelNamed": "Copiază URL-ul pentru {name}" }, "open": { - "label": "Deschide media" + "label": "Deschide media", + "labelNamed": "Deschide {name}" } }, "noResults": { @@ -1208,7 +1802,6 @@ "add": "Adaugă", "apply": "Aplică", "backToOverview": "Înapoi la prezentare generală", - "skip": "Omite", "change": "Schimbă", "create": "Creează", "createAnother": "Creează și începe din nou", @@ -1231,16 +1824,31 @@ "tryAgain": "Încearcă din nou", "loading": "Încărcare", "show": "Arată", - "hide": "Ascunde" + "hide": "Ascunde", + "undo": "Anulează", + "editNamed": "Editare {name}", + "deleteNamed": "Șterge {name}", + "clearSearch": "Ștergeți căutarea", + "copy": "Copiază", + "copied": "Copiat", + "refresh": "Împrospătează" + }, + "pagination": { + "pageOf": "Pagina {page} {totalPages}" }, "here": "aici", + "serviceUrlTemplate": { + "serverTitle": "Adresă server obişnuită", + "urlModeLabel": "Modelul adresei serviciului", + "hostPort": "Aceeași gazdă, porturi diferite", + "subdomain": "Un subdomeniu per serviciu", + "path": "O singură cale per serviciu" + }, "iconPicker": { "label": "Iconiță URL", + "description": "Căutaţi biblioteca, lipiţi un URL de imagine sau încărcaţi un fişier.", "header": "Căutare {countIcons} imagini după nume", "headerLoading": "Căutare imagini după nume", - "noResults": "Nicio pictogramă nu se potrivește \"{search}\".", - "error": "Nu s-au putut încărca pictogramele.", - "description": "Căutaţi biblioteca, lipiţi un URL de imagine sau încărcaţi un fişier.", "clear": "Șterge imaginea", "uploadImage": "Încarcă imaginea", "results": "Rezultatele căutării imaginii", @@ -1249,7 +1857,9 @@ "otherImages": "Alte imagini", "urlLoading": "Se verifică imaginea…", "urlReady": "Imaginea este gata de utilizare", - "urlError": "Această imagine nu a putut fi încărcată. Verificați adresa URL și încercați din nou." + "urlError": "Această imagine nu a putut fi încărcată. Verificați adresa URL și încercați din nou.", + "noResults": "Nicio pictogramă nu se potrivește \"{search}\".", + "error": "Nu s-au putut încărca pictogramele." }, "colorScheme": { "options": { @@ -1261,7 +1871,6 @@ "information": { "min": "Minim", "max": "Maxim", - "days": "Zile", "hours": "Ore", "minutes": "Minute" }, @@ -1298,16 +1907,16 @@ }, "userAvatar": { "menu": { - "switchToDarkMode": "Comutați la modul întunecat", - "switchToLightMode": "Comutați la modul lumină", + "open": "Deschide meniul contului", "management": "Gestionare", - "docker": "Doctor", "preferences": "Preferințele dvs", "logout": "Deconectare", "login": "Utilizator", "homeBoard": "Tabloul de bord", - "loggedOut": "Delogat", - "updateAvailable": "{countUpdates} actualizări disponibile: {tag}" + "updateAvailable": "{countUpdates} actualizări disponibile: {tag}", + "assistant": "Asistent", + "assistantThinking": "Gândire", + "modifier": "Mod" } }, "dangerZone": "Zonă periculoasă", @@ -1355,13 +1964,66 @@ "kilometersPerHour": "km/h", "milesPerHour": "milă" } + }, + "widgetQuery": { + "loading": "Încărcare date widget" + }, + "total": "Total", + "filesystemUsage": "{count, plural, one {Arată utilizarea pentru # fișiere} other {Arată utilizarea pentru # de fișiere}}", + "field": { + "name": "Numele postului" + }, + "label": { + "new": "Nou" + }, + "entity": { + "apps": "Aplicații", + "boards": "Planșe", + "certificates": "Certificate", + "customWidgets": "Widget-uri personalizate", + "groups": "Grupuri", + "integrations": "Integrări", + "invites": "Invitații", + "logs": "Jurnale", + "media": "Media", + "searchEngines": "Motoare de căutare", + "tasks": "Sarcini", + "users": "Utilizatori" } }, "section": { - "dynamic": { + "option": { + "showLabel": { + "label": "Arată eticheta", + "description": "Afișează eticheta recipientului deasupra conținutului său." + }, + "collapsible": { + "label": "Permite colaps", + "description": "Permiteţi telespectatorilor să extindă şi să restrângă acest container." + }, + "showOpenAll": { + "label": "Arată acțiune deschisă", + "description": "Arată o acțiune care deschide fiecare aplicație din acest container în filele noi." + }, + "scrollable": { + "label": "Derulabil", + "description": "Ţineţi acest container la dimensiunea setată şi derulaţi conţinutul său în loc să creşteţi pentru a se potrivi." + } + }, + "action": { + "openAllInNewTabsFor": "Deschide toate aplicațiile în {name} în file" + }, + "openAllInNewTabs": { + "title": "Deschide toate în file", + "text": "Unele browsere pot bloca deschiderea în bloc a filelor din motive de securitate. Homarr nu a putut deschide toate ferestrele, deoarece browserul dvs. a blocat această acțiune. Permiteți \"Deschideți ferestrele pop-up\" și reîncercați." + }, + "container": { + "untitled": "Container fără titlu", "action": { - "create": "Secţiune nouă dinamică", - "remove": "Elimină secţiunea dinamică" + "create": "Container nou", + "remove": "Scoateţi containerul", + "expand": "Extinde", + "collapse": "Restrânge" }, "option": { "title": { @@ -1375,55 +2037,12 @@ } }, "remove": { - "title": "Elimină secţiunea dinamică", - "message": "Sunteţi sigur că doriţi să ştergeţi această secţiune dinamică? Elementele vor fi mutate în aceeaşi locaţie în secţiunea părinte." - } - }, - "category": { - "field": { - "name": { - "label": "Nume" - } - }, - "action": { - "create": "Categorie nouă", - "edit": "Redenumire categorie", - "remove": "Elimină categoria", - "moveUp": "Mută în sus", - "moveDown": "Mută în jos", - "createAbove": "Categorie nouă de mai sus", - "createBelow": "Categorie nouă mai jos", - "openAllInNewTabs": "Deschide toate în file" - }, - "create": { - "title": "Categorie nouă", - "submit": "Adaugă categorie" - }, - "remove": { - "title": "Elimină categoria", - "message": "Sigur doriți să eliminați categoria {name}?" - }, - "edit": { - "title": "Redenumire categorie", - "submit": "Redenumire categorie" - }, - "menu": { - "label": { - "create": "Categorie nouă", - "changePosition": "Schimbă locația", - "settings": "Setări" - } - }, - "openAllInNewTabs": { - "title": "Deschide toate în file", - "text": "Unele browsere pot bloca deschiderea în bloc a filelor din motive de securitate. Homarr nu a putut deschide toate ferestrele, deoarece browserul dvs. a blocat această acțiune. Permiteți \"Deschideți ferestrele pop-up\" și reîncercați." + "message": "Eliminați acest container? Conținutul său se va muta în zona înconjurătoare." } } }, "item": { "action": { - "create": "Element nou", - "import": "Importă articol", "edit": "Editare articol", "moveResize": "Mutare / redimensionare element", "duplicate": "Element duplicat", @@ -1432,7 +2051,7 @@ "menu": { "label": { "settings": "Setări", - "refresh": "Împrospătează", + "settingsFor": "Setări pentru {name}", "options": "Opţiuni", "actions": "Acțiuni" }, @@ -1441,21 +2060,96 @@ "error": "Eroare", "loading": "Încărcare", "idle": "Inactiv" + }, + "notification": { + "saveError": { + "title": "Widget-ul nu poate fi salvat", + "message": "Modificările widget-ului au fost rulate înapoi" + } } }, "create": { "title": "Alege elementul de adăugat", "search": "Elemente filtru", - "addToBoard": "Adaugă la bord" + "addToBoard": "Adaugă la bord", + "addAtPosition": "Adaugă element aici", + "destination": { + "label": "Adaugă la", + "description": "Alegeți unde ar trebui să apară widget-ul. Puteți să îl mutați în continuare mai târziu.", + "mainCanvas": "Pânză principală", + "leftRail": "Cale ferată stângă", + "rightRail": "Cale ferată dreaptă" + }, + "connectionStatus": { + "ready": "Gata", + "needsSetup": "Necesită configurare", + "noConnectionRequired": "Nicio conexiune necesară" + }, + "customWidget": "Widget personalizat", + "standalone": "Standalone", + "missingIntegration": { + "title": "Conectați mai întâi un serviciu", + "noPermission": "Acest widget are nevoie de o conexiune de serviciu compatibilă. Întreabă un administrator să se conecteze unul, apoi încearcă din nou." + }, + "notification": { + "success": { + "title": "Widget adăugat", + "message": "{name} a fost adăugat la această secţiune.", + "relocatedMessage": "{name} a fost adăugat la {destination} deoarece destinația selectată nu este disponibilă." + }, + "error": { + "title": "Imposibil de adăugat elementul", + "message": "Elementul nu a putut fi adăugat la această secţiune" + } + } + }, + "selection": { + "summary": "{count, plural, one {# element selectat} other {# articole selectate}}", + "selected": "{count, plural, one {# a selectat} other {# a selectat}}", + "copy": "Copiază", + "copied": "{count, plural, one {# element copiat în clipboard} other {# elemente copiate în clipboard}}", + "copyError": "Elementele selectate nu au putut fi copiate. Este posibil ca browserul să nu permită accesul în clipboard.", + "paste": "Lipește", + "pasteShortcut": "Lipiți elementele copiate aici (Ctrl / + V)", + "pasted": "{count, plural, one {# element lipsit} other {# articole lipite}}", + "pasteError": "Clipboard-ul nu a putut fi citit. Este posibil ca browserul să nu permită accesul în clipboard.", + "pasteInvalid": "Clipboard-ul nu conține elemente de bord valide Homarr.", + "pasteUnavailable": "Elementele copiate nu se potrivesc pe această secţiune.", + "removed": "{count, plural, one {# articol eliminat} other {# articole șterse}}", + "move": "Mutare", + "moveTo": "Mută elementele selectate", + "delete": "Șterge", + "clear": "Ștergeți selecția", + "clearShortcut": "Șterge selecția (Escape)", + "saveErrorTitle": "Imposibil de actualizat elementele", + "saveErrorMessage": "Modificările nu au putut fi salvate. Secţiunea a fost reîmprospătată.", + "moveUnavailableTitle": "Imposibil de mutat elementele selectate", + "moveUnavailableMessage": "Destinația nu are suficient spațiu pentru întreaga selecție." }, "moveResize": { "title": "Mutare / redimensionare element", + "entryLabel": "{name}, coloana {column}, rând {row}", + "target": { + "numbered": "{name}, destinație {index}", + "located": "{name}, {location}, destinație {index}" + }, + "keyboard": { + "instructions": "Apăsați Enter sau Space pentru a începe editarea de tastatură. Utilizați tastele săgeată pentru a muta, Shift plus săgețile pentru a redimensiona și Escape pentru a opri.", + "started": "Editarea tastaturii a început. Folosiți tastele săgeată pentru a se muta, Shift plus tastele săgeată pentru a se redimensiona și pentru a se opri.", + "stopped": "Editarea tastaturii s-a oprit.", + "boundary": "Această schimbare nu se încadrează în această secţiune." + }, "field": { + "section": { + "label": "Secţiune sau cale ferată" + }, "width": { - "label": "Lățime" + "label": "Lățime", + "shortLabel": "P" }, "height": { - "label": "Înălțime" + "label": "Înălțime", + "shortLabel": "P" }, "xOffset": { "label": "Decalaj X" @@ -1469,18 +2163,36 @@ "title": "Editare articol", "tab": { "widget": "Editează widget-ul", - "app": "Editează aplicația" + "app": "Editează aplicația", + "integration": "Editare integrare" }, "app": { "propagationNotice": "Modificările acestei aplicații se vor aplica în toate locurile unde este utilizată pe toate planșele." }, + "integration": { + "action": "Editare conexiune", + "description": "Testează sau repară o conexiune selectată fără a părăsi acest widget.", + "editLabel": "Editare integrare {name}", + "fullAccessRequired": "Este necesar acces complet", + "propagationNotice": "Modificările aduse acestei integrări se aplică peste tot unde este utilizată. Conexiunea este testată înainte de a fi salvată.", + "loading": "Încărcare integrare", + "loadError": "Această integrare nu a putut fi încărcată. Încercați din nou înainte de a schimba setările conexiunii." + }, + "preview": { + "integrationRequired": "Alegeți o conexiune pentru a previzualiza acest widget.", + "size": "Dimensiune fișier" + }, + "settings": { + "label": "Setări widget" + }, "advancedOptions": { "label": "Opțiuni avansate", "title": "Opțiuni avansate ale articolului" }, "field": { "integrations": { - "label": "Integrări" + "label": "Integrări", + "removeLabel": "Eliminați integrarea {name}" }, "title": { "label": "Titlu" @@ -1494,17 +2206,18 @@ } }, "remove": { - "title": "Elimină element", "message": "Sunteţi sigur că doriţi să ştergeţi acest element?" + }, + "advancedFocus": { + "open": "Deschide vizualizarea avansată", + "close": "Închide vizualizarea avansată", + "label": "{widget} vizualizare avansată" } }, "widget": { "integrationSelect": { "configureIntegrationFirst": "Conectați mai întâi o integrare", - "loading": "Încărcare...", - "placeholder": "Selectați o opțiune", - "noResults": "Nici un rezultat găsit", - "loadError": "Încărcarea opțiunilor a eșuat" + "placeholder": "Selectați o opțiune" }, "app": { "name": "Aplicație", @@ -1513,9 +2226,6 @@ "appId": { "label": "Alegeți aplicația" }, - "openInNewTab": { - "label": "Deschideți într-o pagină nouă" - }, "showTitle": { "label": "Arată numele aplicației" }, @@ -1523,11 +2233,8 @@ "label": "Activează verificarea stării" }, "layout": { - "label": "Aspect", "option": { - "row": "Orizontal", "row-reverse": "Orizontal (inversat)", - "column": "Verticală", "column-reverse": "Vertical (inversat)" } }, @@ -1552,23 +2259,60 @@ "name": "Marcaje", "description": "Afișează mai multe link-uri între aplicații", "option": { - "title": { - "label": "Titlu" + "showTitle": { + "label": "Arată titlul widget-ului" + }, + "titleSize": { + "label": "Dimensiune titlu widget (px)" }, "layout": { "label": "Aspect", "option": { - "row": { - "label": "Orizontal" - }, - "column": { - "label": "Verticală" - }, - "grid": { - "label": "Grilă" + "adaptive": { + "label": "Adaptiv" }, "gridHorizontal": { "label": "Grilă orizontală" + }, + "icons": { + "label": "Iconițe" + } + } + }, + "variant": { + "label": "Aspect", + "option": { + "soft": { + "label": "Moale" + }, + "filled": { + "label": "Completat" + }, + "outline": { + "label": "Conturul" + }, + "plain": { + "label": "Simplu" + } + } + }, + "spacing": { + "label": "Spațiere pe card", + "option": { + "xs": { + "label": "Extra mic" + }, + "sm": { + "label": "Mic" + }, + "md": { + "label": "Mediu" + }, + "lg": { + "label": "Mare" + }, + "xl": { + "label": "Extra mare" } } }, @@ -1581,17 +2325,28 @@ "hideHostname": { "label": "Ascunde numele gazdei" }, - "openNewTab": { - "label": "Deschide într-o filă nouă" - }, "withBorder": { "label": "Arată chenarul" }, + "grow": { + "label": "Extinde cardurile pentru a completa rândul" + }, + "customUrls": { + "label": "Link-uri personalizate" + }, "items": { "label": "Marcaje", - "add": "Adaugă marcaj" + "remove": "Eliminaţi marcajul", + "apps": { + "label": "Adaugă marcaje", + "description": "Lipiți URL-uri sau găsiți aplicațiile existente. Trageți semnele de carte de mai jos pentru a le reordona.", + "placeholder": "Lipește URL-uri sau caută aplicații", + "addUrl": "Adaugă acest URL", + "hint": "Apăsați Enter pentru a adăuga un URL. Lipiți URL-uri separate prin virgulă sau un singur rând pentru a adăuga mai multe adrese." + } } - } + }, + "empty": "Adăugați un URL sau o aplicație în setările widget-ului" }, "archiveTeamWarrior": { "name": "Războinic de arhivă", @@ -1600,33 +2355,61 @@ "showBroadcastMessage": { "label": "Arată mesajele de difuzare" } + }, + "noProjectSelected": "Niciun proiect selectat", + "runnerStatus": "Alergător: {status}", + "projectId": "Proiect: {id}", + "sessionReceived": "Sesiune primită: {value}", + "sessionSent": "Sesiune trimisă: {value}", + "sessionId": "Sesiune: {id}", + "startedAt": "A început {date}", + "emptyItems": "Nu există joburi active sau recente în acest instantaneu", + "metric": { + "running": "Rulează", + "completed": "Terminat", + "failed": "Eșuat", + "canceled": "Anulat", + "download": "Descărcare", + "upload": "Incarca" + }, + "status": { + "running": "Rulează", + "completed": "Finalizat", + "failed": "Eșuat", + "canceled": "Anulat", + "stopped": "Oprit", + "idle": "Inactiv", + "unknown": "Necunoscut" + } + }, + "wud": { + "name": "Ce este Docker", + "description": "Arată câte containere vizionate au actualizări disponibile.", + "title": "Ce este Docker", + "monitored": "Monitorizat", + "updatesAvailable": "{count, plural, one {# actualizare disponibilă} other {# actualizări disponibile}}", + "updateAvailable": "Actualizare disponibilă", + "openReleaseNotes": "Deschide notele de lansare", + "option": { + "showRing": { + "label": "Arată inel de actualizare" + }, + "showUpdateList": { + "label": "Arată lista de actualizări containere", + "description": "Listează fiecare container monitorizat care are o actualizare a imaginii disponibilă" + } } }, "dnsHoleSummary": { "name": "Sumar de gură DNS", "description": "Afişează rezumatul cutiei DNS", "option": { - "layout": { - "label": "Aspect", - "option": { - "row": { - "label": "Orizontal" - }, - "column": { - "label": "Verticală" - }, - "grid": { - "label": "Grilă" - } - } - }, "usePiHoleColors": { "label": "Folosește culori Pi-Hole" } }, "error": { - "internalServerError": "Nu s-a reușit preluarea sumarului de cache DNS", - "integrationsDisconnected": "Nu există date disponibile, toate integrările sunt deconectate" + "internalServerError": "Nu s-a reușit preluarea sumarului de cache DNS" }, "data": { "adsBlockedToday": "Blocate astăzi", @@ -1634,32 +2417,24 @@ "dnsQueriesToday": "Interogări astăzi", "domainsBeingBlocked": "Domenii pe lista de blocare" }, - "domainsTooltip": "Din cauza integrărilor multiple, Homarr nu poate calcula numărul exact de domenii blocate" + "domainsTooltip": "Din cauza integrărilor multiple, Homarr nu poate calcula numărul exact de domenii blocate", + "status": { + "enabled": "Activat", + "disabled": "Dezactivat", + "unknown": "Necunoscut" + } }, "dnsHoleControls": { "name": "Controale DNS", "description": "Controlați PiHole sau AdGuard din planșa dvs", "option": { - "layout": { - "label": "Aspect", - "option": { - "row": { - "label": "Orizontal" - }, - "column": { - "label": "Verticală" - }, - "grid": { - "label": "Grilă" - } - } - }, "showToggleAllButtons": { "label": "Arată/dezactivează toate butoanele" } }, "error": { - "internalServerError": "Nu a reușit să controleze golul DNS" + "internalServerError": "Nu a reușit să controleze golul DNS", + "bulkActionsFailed": "{count, plural, one {# acţiune a eşuat} other {# acţiuni au eşuat}}" }, "controls": { "enableAll": "Activează toate", @@ -1670,8 +2445,6 @@ "disabled": "Dezactivat", "processing": "Prelucrare", "disconnected": "Deconectat", - "hours": "Ore", - "minutes": "Minute", "unlimited": "Lăsați necompletat pentru a fi nelimitat" } }, @@ -1683,16 +2456,10 @@ "label": "Afișare personalizată Titlu/Oraș", "description": "Arată un titlu personalizat sau numele orașului/țării deasupra ceasului." }, - "customTitle": { - "label": "Titlu" - }, "is24HourFormat": { "label": "Format 24 ore", "description": "Folosiți formatul 24 de ore în loc de formatul de 12 ore" }, - "showSeconds": { - "label": "Afişare secunde" - }, "useCustomTimezone": { "label": "Folosește un fus orar fix" }, @@ -1711,29 +2478,295 @@ "label": "Format personalizat al orei", "description": "Utilizați ISO 8601 pentru a formata timpul (aceasta va suprascrie alte opțiuni)" }, - "customDateFormat": { - "label": "Format personalizat pentru dată", - "description": "Utilizați ISO 8601 pentru a formata data (aceasta va suprascrie alte opțiuni)" - }, "showWeather": { "label": "Arată vremea", "description": "Afișează o mică pictogramă meteo animată și o temperatură în colțul cardului" }, - "weatherLocation": { - "label": "Locație meteo" - }, "isWeatherFormatFahrenheit": { "label": "Use Fahrenheit" + }, + "animateWeatherIcon": { + "label": "Pictogramă meteo animată", + "description": "Animează pictograma meteo. Dezactivată implicit și întotdeauna dezactivată atunci când este cerută o mișcare redusă." + }, + "colorWeatherByDayNight": { + "label": "Culoare meteo pe zi/noapte", + "description": "Indică pictograma meteo și temperatura cu o culoare a zilei sau o culoare a nopții, bazat pe faptul că este momentan zi sau noapte la locul ales." + }, + "dayWeatherColor": { + "label": "Culoare zi" + }, + "nightWeatherColor": { + "label": "Culoare noapte" + }, + "worldClockCities": { + "label": "Orașele ceasului mondial", + "description": "Adăugați și ordonați până la șase orașe pentru vedere avansată." } + }, + "timezoneList": { + "timezone": "Fus orar", + "cityLabel": "Etichetă oraș", + "searchPlaceholder": "Căutare fus orar", + "noResults": "Niciun fus orar găsit", + "unsupportedOption": "Neacceptat: {timeZone}", + "add": "Adaugă oraș", + "remove": "Elimină {city}", + "reorder": "Reordonare {city}", + "limit": "{count} de {maximum} orașe configurate" + }, + "worldClock": { + "primary": "Ceas principal", + "local": "Ora locală", + "today": "Astăzi", + "tomorrow": "Mâine", + "yesterday": "Ieri", + "noSecondaryCities": "Adăugați orașe în widget-uri opțiuni pentru a le compara aici.", + "unsupportedPrimaryTitle": "Fus orar primar este indisponibil", + "unsupportedPrimary": "{timeZone} nu este acceptat în acest browser. Se afișează UTC ca o rezervă clar marcată.", + "unsupportedTimeZone": "Fus orar nesuportat: {timeZone}", + "accessibleTime": "{city}: {time}, {date}, {timeZone}", + "advancedLabel": "Ceas mondial avansat", + "cities": "Ceasuri mondiale", + "cityCount": "{count} timezones", + "timeBarLabel": "Poziția pe 24 de ore din zi pentru {city}", + "dayProgress": "{percent}% a trecut · {hours}h {minutes}m ramas", + "phaseLegend": "Legendă timp de zi", + "tick": { + "midnight": "00", + "morning": "06", + "noon": "12", + "evening": "18", + "end": "24" + }, + "phaseRange": { + "night": "00–05 · 21–24", + "dawn": "05–08", + "day": "08–18", + "dusk": "18–21" + }, + "phase": { + "night": "Noapte", + "dawn": "Răsărit", + "day": "Zi", + "dusk": "Dusk" + } + } + }, + "airQuality": { + "name": "Calitatea aerului & UV", + "description": "Afișează calitatea aerului, indicele ultravioletă, poluanții și polenul pentru o locație.", + "option": { + "location": { + "label": "Locația calității aerului" + }, + "aqiStandard": { + "label": "Standard AQI", + "options": { + "auto": "Automat pentru local", + "european": "CABI europene", + "us": "AQI SUA" + } + }, + "showUv": { + "label": "Arată indexul UV" + }, + "showPollutants": { + "label": "Arătați concentrațiile poluante" + }, + "showPollen": { + "label": "Arată concentraţiile de polen" + } + }, + "category": { + "good": "Bun", + "fair": "Corect", + "moderate": "Moderează", + "unhealthySensitive": "Nesănătoase pentru grupuri sensibile", + "unhealthy": "Nesănătos", + "poor": "Slabă", + "veryPoor": "Foarte sărac", + "veryUnhealthy": "Foarte nesănătoase", + "extremelyPoor": "Extrem de sărac", + "hazardous": "Periculoase", + "unknown": "Nici o citire AQI" + }, + "uv": { + "label": "Indexul UV", + "category": { + "low": "scazut", + "moderate": "Moderează", + "high": "Ridicat", + "veryHigh": "Foarte mare", + "extreme": "Extrem", + "unknown": "Nicio lectură" + } + }, + "dominantPollutant": "Dominant pollutant", + "aqiLabel": "SACI", + "strongestPollen": "Cel mai mare polen", + "unit": { + "concentration": "{value} μg/m3", + "pollen": "{value} cereale/m3" + }, + "pollutant": { + "pm2_5": "PM2,5", + "pm10": "PM10", + "ozone": "Ozonul", + "nitrogenDioxide": "Dioxid de azot", + "sulphurDioxide": "Sulphur dioxide", + "carbonMonoxide": "Monoxid de carbon" + }, + "pollen": { + "alder": "Alder", + "birch": "Mestru", + "grass": "Iarbă", + "mugwort": "Mugwort", + "olive": "Oliv", + "ragweed": "Ragweed" + }, + "compact": { + "sixHourTrend": "Tendința AQI pentru următoarele șase ore" + }, + "advanced": { + "observedAt": "Actualizat la {time}", + "next24Hours": "Următoarele 24 de ore", + "pollutants": "Concentraţiile de poluanţi", + "pollen": "Concentraţiile de polen", + "sevenDayForecast": "Prognoza maximă 7 zile", + "aqiValue": "AQI {value}", + "uvValue": "UV {value}", + "uvShort": "UV {value}", + "noForecast": "Nu sunt disponibile date prognozate" + } + }, + "countdown": { + "name": "Numaratoare", + "description": "Urmărește evenimentele viitoare și aniversările recurente.", + "option": { + "events": { + "label": "Evenimente", + "description": "Adăugați și ordonați până la 20 de numărători o dată sau anuale. Datele sunt introduse în fusul orar selectat." + }, + "showProgress": { + "label": "Arată progresul" + }, + "showSeconds": { + "label": "Arată secunde", + "description": "Păstraţi secunde vizibile pentru fiecare eveniment următor." + } + }, + "dateTimeEventList": { + "newEvent": "Eveniment nou", + "add": "Adaugă eveniment", + "remove": "Elimină {event}", + "reorder": "Reordonare {event}", + "eventLabel": "Eticheta evenimentului", + "timezone": "Fus orar", + "unsupportedOption": "Neacceptat: {timeZone}", + "recurrence": "Repetă", + "recurrenceOption": { + "none": "Nu se repetă", + "yearly": "În fiecare an" + }, + "target": "Data și ora evenimentului", + "trackProgress": "Urmărește progresul de la o dată de început", + "start": "Data și ora de începere a progresului", + "confirmDateTime": "Confirmă data și ora", + "limit": "{count} de {maximum} evenimente configurate" + }, + "empty": { + "title": "Nici o numărătoare inversă încă", + "description": "Adăugați un eveniment în opțiunile widget-ului pentru a începe numărarea în jos." + }, + "completed": "Finalizat", + "yearly": "Anual", + "progress": "Progresul evenimentului", + "upcoming": "Urmează", + "completedEvents": "Evenimente finalizate", + "invalid": { + "title": "Unele evenimente nu pot fi afișate", + "description": "{count, plural, one {Un eveniment are o dată nevalidă sau un fus orar neacceptat.} other {# evenimente au o dată nevalidă sau un fus orar neacceptat}}", + "value": "Unavailable" + }, + "alert": { + "notifications": "Notificări browser", + "permissionDenied": "Notificările sunt blocate în acest browser.", + "reached": "Numărătoarea inversă și-a atins obiectivul." + } + }, + "timer": { + "name": "Timer / Pomodoro", + "description": "Rulează un cronometru simplu sau o secvență Pomodoro configurabilă.", + "option": { + "mode": { + "label": "Mod", + "options": { + "timer": "Cronometru", + "pomodoro": "Pomodoro" + } + }, + "timerMinutes": { + "label": "Minute de cronometru" + }, + "focusMinutes": { + "label": "Focalizează minute" + }, + "shortBreakMinutes": { + "label": "Scurte pauză minute" + }, + "longBreakMinutes": { + "label": "Minute de pauză lungă" + }, + "sessionsBeforeLongBreak": { + "label": "Focalizează sesiunile înainte de o pauză lungă" + }, + "autoStartBreaks": { + "label": "Începe pauze automat" + }, + "autoStartFocus": { + "label": "Pornește automat sesiunile de focalizare" + } + }, + "phase": { + "timer": "Cronometru", + "focus": "Focalizare", + "shortBreak": "Pauză scurtă", + "longBreak": "Pauză lungă" + }, + "action": { + "start": "Pornește", + "pause": "Întrerupeți", + "reset": "Reset" + }, + "attention": { + "timerComplete": "Timer complete", + "phaseReady": "{phase} gata" + }, + "progress": "Progres cronometru: {progress}", + "compact": { + "completedFocus": "{count, plural, =0 {Nici o sesiune de focalizare terminată} one {Sesiune de focalizare terminată} other {# sesiuni de focalizare terminate}}" + }, + "alert": { + "title": "Timer complete", + "completed": "{phase} finalizat." + }, + "advanced": { + "sequence": "Pomodoro sequence", + "focusSession": "Focalizare {session}", + "settings": "Setări permanente", + "settingsHint": "Utilizați meniul contextual al widgetului pentru a edita aceste setări ale secţiunii.", + "localAlerts": "Alerte locale", + "notifications": "Notificări browser", + "sound": "Sunete cronometru", + "localAlertsHint": "Sunetele cronometrului sunt activate în mod implicit. Sunetele și notificările se aplică numai acestui widget din acest browser.", + "notificationsDenied": "Notificările sunt blocate în acest browser." } }, "minecraftServerStatus": { "name": "Stare server Minecraft", "description": "Afișează starea unui server Minecraft", "option": { - "title": { - "label": "Titlu" - }, "domain": { "label": "Adresa serverului" }, @@ -1753,11 +2786,21 @@ "noStation": "Nicio stație selectată", "option": { "baseUrl": { - "label": "URL cautare.ch" + "label": "URL cautare.ch", + "description": "URL-uri personalizate trebuie să se rezolve la o adresă IP publică. Gazdele locale și private sunt respinse." }, "station": { - "label": "Stație" + "label": "Stație", + "placeholder": "Caută o stație" } + }, + "error": { + "customSourceUnavailable": "Sursa de orar nu este disponibilă. Verificați dacă URL-ul său se rezolvă la o adresă IP publică.", + "stationSearch": "Imposibil de căutat staţii. Verificaţi URL-ul personalizat şi accesul la secţiune." + }, + "warning": { + "stale": "Calendarul nu a putut fi actualizat. Se afișează plecările ultima dată actualizate la {time}.", + "staleCompact": "Date vechi" } }, "notebook": { @@ -1789,6 +2832,9 @@ "directionRtl": "Setează direcția textului de la dreapta la stânga", "blockquote": "Citat", "horizontalLine": "Linie orizontală", + "details": "Comutați colapsul secțiunii", + "expandDetails": "Extinde secţiunea colapsul", + "collapseDetails": "Restrânge secțiunea colaps", "bulletList": "Listă cu puncte", "orderedList": "Listă ordonată", "checkList": "Lista de verificare cu bifă", @@ -1797,16 +2843,20 @@ "link": "Link-ul", "unlink": "Șterge link-ul", "image": "Încorporează imagine", - "addTable": "Adaugă tabelă", + "insertTable": "Introduceți tabelul", + "insertTableSize": "Introduceți {columns} × {rows} tabel", "deleteTable": "Șterge tabelă", "colorCell": "Culoare celulă", - "mergeCell": "Comută îmbinarea celulelor", + "mergeCells": "Îmbinare celule", + "splitCell": "Divizare celulă", "addColumnLeft": "Adaugă o coloană în fată", "addColumnRight": "Adaugă o coloană după", "deleteColumn": "Șterge coloană", "addRowTop": "Adaugă un rând înainte", "addRowBelow": "Adaugă un rând după", - "deleteRow": "Șterge rând" + "deleteRow": "Șterge rând", + "toggleHeaderRow": "Comutare rând antet", + "toggleHeaderColumn": "Comutare coloană antet" }, "align": { "left": "Stânga", @@ -1817,8 +2867,6 @@ "clearColor": "Șterge culoarea", "source": "Sursă", "widthPlaceholder": "Valoare exprimată în % sau pixeli", - "columns": "Coloane", - "rows": "Rânduri", "width": "Lățime", "height": "Înălțime" }, @@ -1830,7 +2878,9 @@ "discard": "Renunță la modificări", "keepEditing": "Continuă editarea" } - } + }, + "saveFailed": "Imposibil de salvat nota", + "documentStats": "{words, plural, one {# cuvânt} other {# cuvinte}} · {characters, plural, one {# caracter} other {# caractere}}" }, "anchorNote": { "name": "Notă Ancoră", @@ -1839,9 +2889,6 @@ "noteId": { "label": "Notă" }, - "showTitle": { - "label": "Afișare titlu" - }, "showUpdatedAt": { "label": "Arată ultima actualizare" } @@ -1851,14 +2898,20 @@ "notFound": "Notă negăsită", "noNotes": "Nici o notă găsită", "integrationRequired": "Selectați mai întâi o integrare Anchor", - "updatedAt": "Actualizat {date}", "untitled": "Fără titlu", - "edit": "Editare", - "save": "Salvează", - "cancel": "Anulează", "readOnlyViewer": "Aveţi acces la această notă. Editarea este dezactivată.", "saveForbidden": "Nu aveţi permisiunea de a edita această notă.", - "saveFailed": "Salvarea acestei note a eșuat. Te rugăm să încerci din nou." + "saveFailed": "Salvarea acestei note a eșuat. Te rugăm să încerci din nou.", + "createdAt": "Creat {date}", + "permission": { + "owner": "Proprietar", + "editor": "Editor", + "viewer": "Vizualizator" + }, + "status": { + "pinned": "Fixat", + "archived": "Arhivat" + } }, "iframe": { "name": "iFrame", @@ -1917,6 +2970,25 @@ "clickable": { "label": "Clickable" } + }, + "state": { + "on": "Activat", + "off": "Dezactivat", + "unavailable": "Unavailable", + "unknown": "Necunoscut" + }, + "advanced": { + "entityId": "ID Entitate: {id}", + "lastChanged": "{date} modificat", + "attribute": { + "unit": "Unitate", + "deviceClass": "Clasa dispozitivului", + "icon": "Iconiță" + } + }, + "error": { + "loadFailed": "Imposibil de încărcat entitatea", + "toggleFailed": "Imposibil de actualizat entitatea" } }, "smartHome-executeAutomation": { @@ -1932,11 +3004,31 @@ }, "spotlightAction": { "run": "Rulează {name}" + }, + "advanced": { + "lastExecuted": "Ultima rulare la {time}", + "automationId": "ID automatizare: {id}", + "ready": "Gata de rulare", + "noPermission": "Nu există permisiunea de a rula această automatizare" + }, + "status": { + "running": "Automatizare în rulare", + "success": "Automatizare finalizată" + }, + "error": { + "executeFailed": "Imposibil de rulat automatizarea" } }, "stockPrice": { "name": "Preț stoc", "description": "Afiseaza pretul curent al actiunii unei companii", + "advanced": { + "currentPrice": "Preț curent", + "previousClose": "Închiderea anterioară", + "changePercentage": "Modificare (%)", + "minimum": "Minim", + "maximum": "Maxim" + }, "option": { "stock": { "label": "Simbol stoc" @@ -2007,6 +3099,10 @@ "label": "1 lună" } } + }, + "showDetails": { + "label": "Afișare detalii", + "description": "Afișează numele, modificarea și intervalul de timp în vizualizarea compactă. Opriți doar pentru simbol și preț." } } }, @@ -2034,6 +3130,13 @@ "showUnmonitored": { "label": "Arată nesupravegheate" } + }, + "advanced": { + "previousMonth": "Arată luna anterioară", + "nextMonth": "Arată luna viitoare", + "eventCount": "{count, plural, one {# eveniment} other {# evenimente}}", + "loading": "Se încarcă evenimentele din calendar...", + "noEvents": "Nu există evenimente în această lună" } }, "weather": { @@ -2046,16 +3149,18 @@ "disableTemperatureDecimals": { "label": "Dezactivează zecimalele de temperatură" }, + "animateIcons": { + "label": "Pictograme meteo animate" + }, + "showHumidity": { + "label": "Arată umiditate" + }, "showCurrentWindSpeed": { - "label": "Arată viteza vântului curentă", - "description": "Doar pe vremea curentă" + "label": "Arată viteza vântului curentă" }, "useImperialSpeed": { "label": "Folosește mila pentru viteza vântului" }, - "location": { - "label": "Locație meteo" - }, "showCity": { "label": "Arată orașul" }, @@ -2065,13 +3170,10 @@ "forecastDayCount": { "label": "Cantitatea de zile prognozate", "description": "Când widget-ul nu este suficient de larg, sunt afișate mai puține zile" - }, - "dateFormat": { - "label": "Formatul datei", - "description": "Cum ar trebui să arate data" } }, "currentWindSpeed": "{currentWindSpeed} {unit}", + "disabled": "Datele meteo nu sunt disponibile deoarece conexiunile de ieșire sunt dezactivate", "dailyForecast": { "sunrise": "Răsărit", "sunset": "Amortizor", @@ -2094,6 +3196,47 @@ "thunderstorm": "Furtună", "thunderstormWithHail": "Furtună cu grindină", "unknown": "Necunoscut" + }, + "details": "Arată detaliile meteo", + "detailsFor": "Arată detaliile meteo pentru {date}", + "advanced": { + "forecast": "Previziuni de 7 zile", + "hourlyForecast": "Următoarele 24 de ore", + "day": "Zi", + "time": "Timp", + "conditions": "Condiţii", + "temperature": "Temperatură", + "feelsLike": "Sentimente precum {temperature}", + "feelsLikeLabel": "Sentimente ca", + "feelsLikeRange": "Sentimente precum: {maximum} / {minimum}", + "highLow": "{maximum} · scăzut {minimum}", + "observedAt": "Actualizat la {time}", + "humidity": "Umiditate", + "averageHumidity": "Umiditate medie: {humidity}", + "currentHumidity": "Umiditatea actuală", + "wind": "Vânt / raft ({unit})", + "currentWind": "Vânt / gusturi curente", + "windValue": "{speed} / {gusts} {unit}", + "windDetail": "Valori maxime / gusturi: {speed} / {gusts} {unit}", + "nextHourPrecipitation": "Precipitații în următoarea oră", + "precipitationChance": "Șanse de precipitații", + "precipitationValue": "{probability}% · {amount} mm", + "precipitationDetail": "Precipitații: {probability}% · {amount} mm", + "todayUv": "Indicele UV maxim de astăzi", + "uvIndex": "Indicele maxim UV: {value}", + "daylight": "Lumină: {duration}", + "hourlyTooltip": "Feels like {feelsLike}{temperatureUnit} · {amount} mm · {humidity}% umiditate · {speed} {speedUnit} wind", + "hourlyTooltipWithoutHumidity": "Sună ca {feelsLike}{temperatureUnit} · {amount} mm · {speed} {speedUnit} vânturi", + "detailLabel": { + "feelsLike": "Sentimente ca", + "precipitation": "Precipitaţii", + "humidity": "Umiditate medie", + "wind": "Vânt maxim / rafale", + "uv": "Index UV maxim", + "daylight": "Daylight" + }, + "sun": "Însorit / apus", + "noForecast": "Nu sunt disponibile date prognozate" } }, "indexerManager": { @@ -2106,8 +3249,15 @@ }, "title": "Manager de clasificare", "testAll": "Verifică toate", + "status": { + "healthy": "Sănătos", + "unhealthy": "Nesănătos", + "disabled": "Dezactivat", + "unknown": "Sănătate indisponibilă" + }, "error": { - "internalServerError": "Nu s-a reușit preluarea stării de indexare" + "internalServerError": "Nu s-a reușit preluarea stării de indexare", + "testAll": "Testul de indexare a eșuat. Încercați din nou." } }, "healthMonitoring": { @@ -2136,11 +3286,6 @@ "fileSystem": { "label": "Afișare informații despre sistemul de fișiere" }, - "visibleStorageVolumes": { - "label": "Volumele de stocare vizibile", - "description": "Disponibil numai atunci când toate integrările selectate sunt sincronizate. Lăsați gol pentru a afișa toate volumele de stocare detectate.", - "placeholder": "Selectați volumele de stocare" - }, "defaultTab": { "label": "Default tab" }, @@ -2163,17 +3308,27 @@ "minutes": "{count} minute", "used": "Utilizat", "available": "Disponibil", - "lastSeen": "Ultima actualizare: {lastSeen}" + "lastSeen": "Ultima actualizare: {lastSeen}", + "updatesAvailable": "{count, plural, one {# actualizare disponibilă} other {# actualizări disponibile}}", + "rebootRequired": "Repornire necesară", + "rebootNotRequired": "Nu este necesară repornire" + }, + "smartStatus": { + "attributesWithinThresholds": "SMART: atribute în praguri", + "attributesFailed": "SMART: {attributes} a eșuat", + "noCriticalWarning": "SMART: nicio avertizare raportată de SSD", + "criticalWarning": "SMART: avertisment critic raportat de SSD" + }, + "gauge": { + "cpuUsage": "Utilizare CPU", + "cpuTemperature": "Temperatura procesorului", + "memoryUsage": "Utilizare memorie", + "gpuUsage": "{name} Utilizare GPU" }, - "memory": {}, "error": { "internalServerError": "Preluarea stării de sănătate nu a reușit" }, "cluster": { - "summary": { - "cpu": "procesor", - "memory": "RAM" - }, "resource": { "node": { "name": "Nodes" @@ -2209,8 +3364,6 @@ "table": { "header": { "name": "Nume", - "cpu": "procesor", - "memory": "RAM", "node": "Nod" } } @@ -2220,33 +3373,29 @@ "name": "Statistici Docker", "description": "Statistici containere (acest widget poate fi adăugat doar cu drepturi de administrator)", "option": { - "columns": { - "label": "Coloane de afișat" + "endpointIds": { + "label": "Medii docker", + "description": "Lăsați gol pentru a afișa containerele din fiecare mediu al Docker", + "placeholder": "Toate mediile Docker" }, - "enableRowSorting": { - "label": "Activează sortarea articolelor" + "containerFilter": { + "label": "Containere de filtrat" + }, + "filterIsWhitelist": { + "label": "Filtrare ca whitelist" }, "defaultSort": { - "label": "Coloana folosită pentru sortare în mod implicit", "option": { "name": "Nume", "state": "Județ", "cpuUsage": "Utilizare CPU", "memoryUsage": "Utilizare memorie" } - }, - "descendingDefaultSort": { - "label": "Inversează sortarea" - }, - "columnOrder": { - "label": "Ordinea coloanei" - }, - "columnWidths": { - "label": "Lățime coloană" } }, "error": { "internalServerError": "Nu s-a reușit preluarea statisticilor containerelor", + "endpointsUnavailable": "Criteriile de evaluare ale dok-ului nu sunt disponibile", "layoutSaveTitle": "Structura tabelelor nu a fost salvată", "layoutSaveMessage": "Structura tabelului Docker nu a putut fi salvată. Încercați să vă mutați sau să redimensionați coloana din nou." }, @@ -2255,7 +3404,6 @@ } }, "coolify": { - "name": "Coolify", "description": "Prezentare generală a instanței tale Coolify cu servere și aplicații", "option": { "showServers": { @@ -2281,17 +3429,49 @@ "internalServerError": "Esuare preluare date Coolify" }, "server": { - "buildServer": "Construire" + "buildServer": "Construire", + "resourceCounts": "{applications, plural, one {# aplicaţie} other {# aplicaţii}} / {services, plural, one {# serviciu} other {# servicii}}", + "reachability": "Accesibilitate", + "usability": "Utilizare" + }, + "source": { + "url": "Sursa: {url}", + "unavailable": "{source}: unavailable" }, "instances": { "title": "Instanțe" + }, + "action": { + "openResource": "Deschide {name}", + "openLogs": "Deschide {name} însemnări", + "showIp": "Arată adresa IP", + "hideIp": "Ascunde adresa IP" + }, + "status": { + "running": "Rulează", + "stopped": "Oprit", + "exited": "Ieşit", + "starting": "Pornire", + "restarting": "Repornire", + "unknown": "Necunoscut", + "online": "Online", + "offline": "Offline", + "reachable": "Accesibil", + "unreachable": "Inaccesibil", + "usable": "Utilizabil", + "unusable": "Inutilizabil" } }, "vpn": { "name": "VPN", "description": "Prezentare generală a conexiunilor VPN", "serviceUnavailable": "VPN indisponibil", - "option": {} + "status": { + "running": "Rulează", + "notRunning": "Nu rulează", + "unavailable": "Unavailable", + "vpn": "VPN: {status}" + } }, "ups": { "name": "UPS", @@ -2318,14 +3498,19 @@ "runtime": "Autonomie", "load": "Încărcare", "input": "Intrare", - "output": "Ieșire" + "output": "Ieșire", + "batteryVoltage": "Tensiunea bateriei", + "power": "Putere", + "temperature": "Temperatură", + "manufacturer": "Fabricantul:", + "model": "Model", + "serial": "Serie" }, "error": { "internalServerError": "Nu s-au putut prelua datele UPS" } }, "tracearr": { - "name": "Tracearr", "description": "Monitorizare îmbunătățită a serverului media cu flux detaliat și date de transcodare", "option": { "showStreams": { @@ -2413,10 +3598,7 @@ "label": "Eveniment", "description": "Afișează totalul aparițiilor unui anumit eveniment", "placeholder": "Selectați un eveniment", - "loading": "Se încarcă evenimentele...", - "noEvents": "Niciun eveniment găsit", - "none": "Niciun eveniment", - "configureWebsiteFirst": "Selectați mai întâi un site pentru a încărca evenimentele" + "none": "Niciun eveniment" }, "chartType": { "label": "Tip de grafic", @@ -2447,26 +3629,21 @@ "eventNames": { "label": "Evenimente", "description": "Selectați unul sau mai multe evenimente pentru grafic", - "placeholder": "Selectați evenimente...", - "loading": "Se încarcă evenimentele...", - "noEvents": "Niciun eveniment găsit", - "configureWebsiteFirst": "Selectați mai întâi un site pentru a încărca evenimentele" + "placeholder": "Selectați evenimente..." }, "topCount": { "label": "Elemente de afișat", "description": "Numărul maxim de elemente de top de afișat (max 500)" + }, + "events": { + "loading": "Se încarcă evenimentele...", + "noEvents": "Niciun eveniment găsit", + "configureWebsiteFirst": "Selectați mai întâi un website pentru a încărca evenimentele" } }, "event": { - "occurrences": "evenimente", "label": "evenimente" }, - "topPages": { - "direct": "Direct" - }, - "topReferrers": { - "direct": "Direct" - }, "events": { "selectPrompt": "Selectați evenimente pentru grafic" }, @@ -2475,6 +3652,9 @@ "noWebsite": "Niciun site configurat", "noData": "Nicio dată disponibilă", "internalServerError": "Eroare la preluarea datelor Umami" + }, + "top": { + "direct": "Directă" } }, "common": { @@ -2502,7 +3682,8 @@ }, "integration": { "noData": "Nicio integrare găsită", - "description": "Apăsați pentru a crea o nouă integrare" + "description": "Apăsați pentru a crea o nouă integrare", + "manage": "Gestionează integrările" }, "app": { "noData": "Nicio aplicație găsită", @@ -2513,7 +3694,61 @@ "noIntegration": "Nicio integrare selectată", "noData": "Nu sunt disponibile date privind integrarea" }, - "option": {} + "integrationDisconnected": "Nu există date disponibile, toate integrările sunt deconectate", + "updatedAt": "Actualizat {date}", + "title": { + "label": "Titlu" + }, + "openInNewTab": { + "label": "Deschideți într-o pagină nouă" + }, + "showTitle": { + "label": "Afișare titlu" + }, + "weatherLocation": { + "label": "Locație meteo" + }, + "layout": { + "label": "Aspect", + "option": { + "horizontal": "Orizontal", + "vertical": "Verticală", + "grid": "Grilă" + } + }, + "select": { + "loading": "Încărcare...", + "loadError": "Încărcarea opțiunilor a eșuat" + }, + "dateFormat": { + "label": "Formatul datei", + "description": "Cum ar trebui să arate data" + }, + "visibleStorageVolumes": { + "label": "Volumele de stocare vizibile", + "description": "Disponibil numai atunci când fiecare integrare selectată este OpenMediaVault sau Synology. Lăsați gol pentru a afișa toate volumele de stocare detectate.", + "placeholder": "Selectați volumele de stocare" + }, + "tableOptions": { + "columns": { + "label": "Coloane de afișat" + }, + "columnOrder": { + "label": "Ordinea coloanei" + }, + "columnWidths": { + "label": "Lățime coloană" + }, + "enableRowSorting": { + "label": "Activează sortarea articolelor" + }, + "defaultSort": { + "label": "Coloana folosită pentru sortare în mod implicit" + }, + "invertSorting": { + "label": "Inversează sortarea" + } + } }, "video": { "name": "Stream video", @@ -2572,6 +3807,7 @@ "transcoding": "Transcodare", "paused": "Pauză", "remaining": "{minutes} min rămas", + "seasonEpisode": "{season} E{episode}", "metadata": { "title": "Statistici pentru nervi", "video": { @@ -2589,11 +3825,16 @@ "resolution": "Rezoluție", "target": "Target codec" } - } + }, + "unknownUser": "Utilizator necunoscut" + }, + "summary": { + "sessions": "{count, plural, one {# sesiune} other {# sesiuni}}", + "playing": "{count} redare", + "transcoding": "{count} transcodare" } }, "paperlessNgx": { - "name": "Ngx", "description": "Prezentare generală a arhivei tale de documente pe suport de hârtie", "documentsTotal": "Total documente", "documentsInbox": "Mesaje", @@ -2638,7 +3879,6 @@ } }, "patchmon": { - "name": "PatchMon", "description": "Prezentare generală a stării plasturelui gazdă de la PatchMon", "title": "Statistici PatchMon", "totalHosts": "Total gazde", @@ -2705,36 +3945,30 @@ "description": "Compară numărul de actualizări ale nevoilor ca valoare absolută sau procent din totalul gazde" }, "hostsNeedingUpdatesWarningAt": { - "label": "Necesită un prag de avertizare pentru actualizări", - "description": "Introduceți galben când valoarea atinge acest prag" + "label": "Necesită un prag de avertizare pentru actualizări" }, "hostsNeedingUpdatesCriticalAt": { - "label": "Necesită un prag critic pentru actualizări", - "description": "Introduceți roșu când valoarea atinge acest prag" + "label": "Necesită un prag critic pentru actualizări" }, "securityUpdatesThresholdMode": { "label": "Modul de actualizare de securitate", "description": "Compară numărul de actualizări de securitate ca valoare absolută sau procent din totalul gazdei" }, "securityUpdatesWarningAt": { - "label": "Limită de avertizare actualizări de securitate", - "description": "Introduceți galben când valoarea atinge acest prag" + "label": "Limită de avertizare actualizări de securitate" }, "securityUpdatesCriticalAt": { - "label": "Actualizări de securitate prag critic", - "description": "Introduceți roșu când valoarea atinge acest prag" + "label": "Actualizări de securitate prag critic" }, "hostsWithSecurityUpdatesThresholdMode": { "label": "Gazde cu modul actualizări de securitate", "description": "Compară numărul de gazdă ca valoare absolută sau procent din totalul gazde" }, "hostsWithSecurityUpdatesWarningAt": { - "label": "Gazde cu prag de avertizare actualizări de securitate", - "description": "Introduceți galben când valoarea atinge acest prag" + "label": "Gazde cu prag de avertizare actualizări de securitate" }, "hostsWithSecurityUpdatesCriticalAt": { - "label": "Gazde cu pragul critic pentru actualizările de securitate", - "description": "Introduceți roșu când valoarea atinge acest prag" + "label": "Gazde cu pragul critic pentru actualizările de securitate" }, "upToDateHostsThresholdMode": { "label": "Actualizare modul host-uri", @@ -2753,12 +3987,10 @@ "description": "Compară numărul de pachete învechite ca valoare absolută sau procent din totalul gazde" }, "totalOutdatedPackagesWarningAt": { - "label": "Pragul de avertizare al pachetelor învechite", - "description": "Introduceți galben când valoarea atinge acest prag" + "label": "Pragul de avertizare al pachetelor învechite" }, "totalOutdatedPackagesCriticalAt": { - "label": "Pragul critic al pachetelor învechite", - "description": "Introduceți roșu când valoarea atinge acest prag" + "label": "Pragul critic al pachetelor învechite" }, "showOsDistribution": { "label": "Arată distribuția OS", @@ -2789,6 +4021,14 @@ "bars": "Bare orizontale", "donut": "Donut chart" } + }, + "threshold": { + "warningAt": { + "description": "Introduceți galben când valoarea atinge acest prag" + }, + "criticalAt": { + "description": "Introduceți roșu când valoarea atinge acest prag" + } } }, "error": { @@ -2796,12 +4036,12 @@ } }, "bazarr": { - "name": "Bazarr", "description": "Prezentare generală a subtitrărilor lipsă şi starea de sănătate din instanţa Bazarr", "episodes": "Episoade lipsă", "movies": "Lipsesc filmele", "providers": "Probleme furnizor", "status": "Probleme de sănătate", + "announcements": "Anunţuri", "option": { "showMissingEpisodes": { "label": "Arată episoadele lipsă", @@ -2848,7 +4088,8 @@ "users": "Utilizatori", "photos": "Imagini", "videos": "Video-uri", - "storage": "Stocare utilizată" + "storage": "Stocare utilizată", + "albumLimit": "Cele mai mari albume (se afișează până la {count})" }, "immich-albumCarousel": { "name": "Album Immich", @@ -2872,24 +4113,21 @@ } }, "description": "Prezentare de imagini dintr-un album Immich sau biblioteca ta completă", - "noPhotos": "Nicio poză găsită" + "noPhotos": "Nicio poză găsită", + "albumPhoto": "Fotografie album", + "actions": { + "previousPhoto": "Fotografia precedentă", + "nextPhoto": "Fotografia următoare", + "pauseSlideshow": "Pause slideshow", + "resumeSlideshow": "Reluați prezentarea", + "toggleSlideshow": "Întrerupeți sau reluați prezentarea", + "photo": "{number} foto" + } }, "downloads": { "name": "Descarcă clientul", "description": "Vă permite să vizualizați și să gestionați descărcările de la clienții care folosesc Torrent și Usenet.", "option": { - "columns": { - "label": "Coloane de afișat" - }, - "enableRowSorting": { - "label": "Activează sortarea articolelor" - }, - "defaultSort": { - "label": "Coloana folosită pentru sortare în mod implicit" - }, - "descendingDefaultSort": { - "label": "Inversează sortarea" - }, "showCompletedUsenet": { "label": "Arată intrările de tip usenet marcate ca finalizate" }, @@ -2914,12 +4152,6 @@ "limitPerIntegration": { "label": "Limitează elementele pe integrare", "description": "Acest lucru va limita numărul de elemente afișate per integrare, nu la nivel global" - }, - "columnOrder": { - "label": "Ordinea coloanei" - }, - "columnWidths": { - "label": "Lățime coloană" } }, "errors": { @@ -3080,6 +4312,10 @@ "mediaRequests-requestList": { "name": "Listă Cereri Media", "description": "Vezi o listă cu toate cererile media de la instanțele Overseerr sau Jellyseerr", + "empty": { + "title": "Nicio cerere media încă", + "description": "Căutați un film sau o emisiune pentru a începe o cerere." + }, "option": { "linksTargetNewTab": { "label": "Deschide link-ul într-o pagină nouă" @@ -3113,12 +4349,16 @@ "failed": "Eșuat", "completed": "Completat" }, + "unknown": "Necunoscut", "toBeDetermined": "TBD" }, "mediaRequests-requestStats": { "name": "Statistici Cereri Media", "description": "Statistici despre solicitările dvs. media", - "option": {}, + "empty": { + "title": "Nicio activitate de cerere încă", + "description": "Statisticile vor apărea după prima cerere media." + }, "titles": { "stats": { "main": "Situația media", @@ -3128,8 +4368,7 @@ "declined": "Deja refuzată", "available": "Deja Disponibil", "tv": "Cereri seriale TV", - "movie": "Cereri filme", - "total": "Total" + "movie": "Cereri filme" }, "users": { "main": "Top utilizatori", @@ -3155,7 +4394,6 @@ }, "currentIndex": "{start}-{end} {total}", "healthCheck": { - "title": "Verificarea stării de sănătate", "queued": "Pus în așteptare", "status": { "healthy": "Sănătos", @@ -3164,35 +4402,30 @@ }, "panel": { "statistics": { - "empty": "Gol", - "transcodes": "Transcrieri", - "transcodesCount": "Transcoduri", - "healthChecksCount": "Controalele de sănătate", "filesCount": "Fișiere", "savedSpace": "Spațiu salvat", - "healthChecks": "Controalele de sănătate", "videoCodecs": "Codec-uri", "videoContainers": "Containere", "videoResolutions": "Rezoluţie" }, "workers": { - "empty": "Gol", "table": { - "file": "Fișier", "eta": "Timp rămas estimat", - "progress": "Progres", - "transcode": "Transcriere", - "healthCheck": "Verificarea stării de sănătate" + "progress": "Progres" } }, "queue": { - "empty": "Gol", "table": { - "file": "Fișier", - "size": "Mărime", - "transcode": "Transcriere", - "healthCheck": "Verificarea stării de sănătate" + "size": "Mărime" } + }, + "common": { + "empty": "Gol", + "file": "Fișier", + "healthCheck": "Verificarea stării de sănătate", + "transcode": "Transcriere", + "transcodes": "Transcoduri", + "healthChecks": "Controalele de sănătate" } } }, @@ -3216,7 +4449,8 @@ }, "type": { "movie": "Film", - "episode": "Episod" + "episode": "Episod", + "book": "Carte" }, "empty": { "missing": "Niciun element lipsă", @@ -3247,6 +4481,13 @@ "showPosterImage": { "label": "Afișare imagine poster" } + }, + "error": { + "allFeedsFailed": "Fluxurile RSS nu au putut fi încărcate. Verificați URL-urile fluxului și încercați din nou." + }, + "warning": { + "partial": "{count, plural, one {# Fluxul RSS nu a putut fi încărcat} other {# Fluxuri RSS nu au putut fi încărcate}}", + "stale": "Fluxurile RSS nu au putut fi reîmprospătate. Afișarea intrărilor încărcate anterior." } }, "releases": { @@ -3322,17 +4563,8 @@ "label": "Expresie regulată" } }, - "edit": { - "label": "Editare" - }, "editForm": { - "title": "Editare Repositoriu", - "cancel": { - "label": "Anulează" - }, - "confirm": { - "label": "Confirmare" - } + "title": "Editare Repositoriu" }, "importForm": { "title": "Importă din Docker" @@ -3349,8 +4581,7 @@ "label": "Furnizor jetoane", "token": "Token", "configured": "Token configurat", - "notConfigured": "Niciun token setat", - "save": "Salvează" + "notConfigured": "Niciun token setat" } } }, @@ -3377,17 +4608,32 @@ "noProviderResponse": "Niciun răspuns din partea furnizorului", "unexpected": "Eroare neașteptată la furnizor" } - } + }, + "expandDetails": "Arată detalii pentru {name}", + "collapseDetails": "Ascunde detaliile pentru {name}" }, "networkControllerSummary": { - "option": {}, - "card": { - "vpn": { - "countConnected": "{count} conectat" + "advanced": { + "updated": "Actualizat", + "metric": { + "latency": "Latență", + "ping": "Ping", + "uptime": "Uptime", + "users": "Utilizatori", + "guests": "Vizitatori" } }, + "card": { + "vpn": { + "countConnected": "{count, plural, one {# conectat} other {# conectat}}", + "label": "VPN" + }, + "wan": "WAN", + "web": "Web", + "wifi": "Wi-Fi", + "lan": "LAN" + }, "error": { - "integrationsDisconnected": "Nu există date disponibile, toate integrările sunt deconectate", "unknownContentOption": "Opțiune necunoscută de conținut pentru widget-ul sumar al controlerului de rețea: " }, "name": "Rezumatul controlorului de rețea", @@ -3424,7 +4670,6 @@ } }, "error": { - "integrationsDisconnected": "Nu există date disponibile, toate integrările sunt deconectate", "unknownContentOption": "Opțiune de conținut necunoscut pentru widget-ul stare de rețea: " }, "name": "Starea Rețelei", @@ -3454,7 +4699,6 @@ "versiontitle": "Versiuni", "cputitle": "Utilizare CPU", "memorytitle": "Utilizare memorie", - "cpu": "procesor", "memory": "Memorie", "interfaces": { "name": "nume", @@ -3462,6 +4706,16 @@ "recv": "Primit", "title": "Interfețe de rețea" } + }, + "empty": { + "noInterfaces": "Nu există încă date despre interfața de rețea" + }, + "versionUnknown": "Versiune necunoscută", + "metricAccessible": "{metric}: {value}%, {status}", + "status": { + "normal": "Normală", + "warning": "Avertizare", + "critical": "Critice" } }, "notifications": { @@ -3471,8 +4725,21 @@ "option": { "hideLogos": { "label": "Ascunde logo-uri" + }, + "messageFormat": { + "label": "Format mesaj", + "option": { + "auto": "Automat", + "plain": "Text simplu", + "markdown": "Markdown", + "html": "HTML" + } } - } + }, + "openService": "Deschide serviciul de notificare", + "deleteNotification": "Șterge notificarea din Gotify", + "deleteFailed": "Nu s-a putut șterge notificarea", + "deleteFailedMessage": "Notificarea nu a putut fi ștearsă. Încercați din nou." }, "speedtestTracker": { "name": "Tracker de accelerare", @@ -3514,7 +4781,6 @@ } }, "uptimeKuma": { - "name": "Kuma de uptime", "description": "Monitorizează statisticile uptime din pagina de stare Kuma Uptime", "option": { "showAverageUptime": { @@ -3551,10 +4817,14 @@ }, "error": { "internalServerError": "Preluarea datelor de uptime a eșuat" + }, + "status": { + "up": "Viteza de Încărcare", + "down": "Viteza de descărcare", + "paused": "În pauză" } }, "traefik": { - "name": "Traefik", "description": "Prezentare generală a routerelor Traefik, serviciilor, middleware-urilor și punctelor de intrare", "option": { "showTcp": { @@ -3575,7 +4845,6 @@ }, "resource": { "routers": "Routere", - "services": "Servicii", "middlewares": "Middlewares" }, "status": { @@ -3585,7 +4854,20 @@ }, "error": { "internalServerError": "Obținerea datelor Traefik a eșuat" - } + }, + "resourceType": { + "router": "Ruter", + "service": "Serviciu", + "middleware": "Middleware" + }, + "resourceStatus": { + "enabled": "Activat", + "disabled": "Dezactivat", + "warning": "Avertizare", + "error": "Eroare", + "unknown": "Necunoscut" + }, + "failedEndpoint": "Eșuat: {endpoint}" }, "audioStats": { "name": "Statistici audio", @@ -3651,9 +4933,7 @@ "label": "Grafice vizibile", "description": "Selectați graficele care doriți să fie vizibile.", "option": { - "cpu": "procesor", "memory": "Memorie", - "gpu": "GPU", "network": "Rețea" } }, @@ -3668,12 +4948,11 @@ } }, "card": { - "cpu": "procesor", "memory": "MEM", - "gpu": "GPU", "network": "NET", "up": "PLU", - "down": "JOS" + "down": "JOS", + "memoryTooltip": "{used} / {available} ({percent}%)" } }, "systemDisks": { @@ -3699,151 +4978,88 @@ }, "showBackgroundBar": { "label": "Arată bara de utilizare în fundal" - }, - "visibleStorageVolumes": { - "label": "Volumele de stocare vizibile", - "description": "Disponibil numai atunci când toate integrările selectate sunt sincronizate. Lăsați gol pentru a afișa toate volumele de stocare detectate.", - "placeholder": "Selectați volumele de stocare" } }, "status": { - "unhealthy": "nesănătoase" + "unhealthy": "nesănătoase", + "smart": "SMART", + "free": "{percentage}% gratuit" + } + }, + "customApi": { + "name": "Widget personalizat", + "description": "Redă o definiție JSX configurată.", + "customJsx": { + "noTemplate": "Niciun șablon JSX nu este configurat.", + "templateWarnings": "{count} avertismente șablon:", + "requestIdRequired": "Acest control de rețea necesită un ID de cerere numit.", + "unsavedPreview": "Rulează testul de solicitare inițial în editor înainte de testarea cererilor nominale.", + "invalidParams": "Parametrii solicitării sunt invalizi.", + "loading": "Se încarcă cererea...", + "loadRequest": "Solicitare de încărcare", + "requestFailed": "Solicitarea a eșuat.", + "retry": "Reîncercați solicitarea", + "actionCompleted": "Acțiune finalizată cu succes.", + "actionSimulated": "Acțiune simulată; nu s-a trimis nicio cerere.", + "actionsDisabledEditMode": "Acţiunile sunt dezactivate în timp ce secţiunea este în modul de editare.", + "widgetItemUnavailable": "Acest element de widget nu este disponibil.", + "toggle": "Comutare", + "copied": "Copiat", + "confirmDelete": "Confirmați această acțiune distructivă." + }, + "option": { + "definitionId": { + "label": "Widget personalizat" + }, + "refreshInterval": { + "label": "Interval reîmprospătare", + "description": "Cât de des să refetch datele de la API (în secunde)" + } + }, + "noDefinition": "Nicio definiție selectată", + "definitionNotFound": "Widget personalizat indisponibil", + "migrationRequired": "Acest widget personalizat moștenit este păstrat, dar trebuie migrat la personalizat JSX v2 de la Gestionare widget-uri personalizate înainte de a putea rula.", + "manageMigration": "Deschide Gestionare widget-uri personalizate", + "contactAdmin": "Contactați un administrator.", + "configurationNeedsRepair": "Opțiunile acestui widget s-au modificat. Editați widget-ul pentru a-i repara configurația.", + "removeFromBoard": "Elimină din bord", + "editModePending": "Salvați tabla pentru a încărca acest widget.", + "picker": { + "group": "Widget-uri JSX personalizate", + "empty": "Nu s-au găsit widget-uri personalizate", + "preview": "Previzualizare", + "sources": "{count, plural, one {# sursă} other {# surse}}", + "requests": "{count, plural, one {# solicitare} other {# cereri}}", + "migrationRequired": "Migrare necesară", + "migrationDescription": "Acest widget v1 plasat nu poate rula încă. Copiați fereastra redactată pe LLM, apoi lipiți singurul răspuns JSON în Homarr.", + "manageMigration": "Deschide Gestionare widget-uri personalizate", + "contactAdmin": "Contactați un administrator." + }, + "configuration": { + "needsAttention": "Configurarea necesită atenție: {message}", + "advancedOptions": "Opțiuni avansate", + "invalidJson": "JSON invalid" } }, "beszelSystemTable": { "name": "Sisteme Beszel (Tabel)", "description": "Vizualizare tabel a tuturor sistemelor monitorizate Beszel cu coloane sortabile și indicatori de stare", "option": { - "statusFilter": { - "label": "Filtru stare" - }, "sortBy": { "label": "Sortează după" }, "sortDirection": { "label": "Direcție sortare" - }, - "showCpu": { - "label": "Arată CPU" - }, - "showMemory": { - "label": "Arată memoria" - }, - "showDisk": { - "label": "Arată discul" - }, - "showGpu": { - "label": "Arată GPU" - }, - "showLoadAvg": { - "label": "Arată media de încărcare" - }, - "showNet": { - "label": "Arată rețeaua" - }, - "showTemp": { - "label": "Arată temperatura" - }, - "showBattery": { - "label": "Arată bateria" - }, - "showServices": { - "label": "Arată serviciile" - }, - "showUptime": { - "label": "Arată uptime" - }, - "showAgent": { - "label": "Arată versiunea agentului" - }, - "columnOrder": { - "label": "Ordinea coloanei" - }, - "columnWidths": { - "label": "Lățime coloană" } }, - "noRecords": "Niciun sistem găsit", "error": { - "internalServerError": "Nu s-a putut conecta la Beszel. Verificaţi setările de integrare.", "layoutSaveTitle": "Imposibil de salvat aspectul tabelei", "layoutSaveMessage": "Ordinea de coloane sau lățimile nu au putut fi salvate. Vă rugăm să încercați din nou." - }, - "column": { - "system": "Sistem", - "cpu": "CPU", - "memory": "Memorie", - "disk": "Disc", - "gpu": "GPU", - "loadAvg": "Încărcare medie", - "net": "Rețea", - "temp": "Temp", - "battery": "Bat", - "services": "Servicii", - "uptime": "Uptime", - "agent": "Agent" } }, "beszelSystemGrid": { "name": "Sisteme Beszel (Grilă)", - "description": "Vizualizare grilă carduri a tuturor sistemelor monitorizate Beszel cu metrici în timp real", - "option": { - "statusFilter": { - "label": "Filtru stare" - }, - "showCpu": { - "label": "Arată CPU" - }, - "showMemory": { - "label": "Arată memoria" - }, - "showDisk": { - "label": "Arată discul" - }, - "showGpu": { - "label": "Arată GPU" - }, - "showLoadAvg": { - "label": "Arată media de încărcare" - }, - "showNet": { - "label": "Arată rețeaua" - }, - "showTemp": { - "label": "Arată temperatura" - }, - "showBattery": { - "label": "Arată bateria" - }, - "showServices": { - "label": "Arată serviciile" - }, - "showUptime": { - "label": "Arată uptime" - }, - "showAgent": { - "label": "Arată versiunea agentului" - } - }, - "error": { - "internalServerError": "Nu s-a putut conecta la Beszel. Verificaţi setările de integrare." - }, - "empty": { - "noSystems": "Niciun sistem găsit" - }, - "metric": { - "cpu": "CPU", - "memory": "Memorie", - "disk": "Disc", - "gpu": "GPU", - "loadAvg": "Încărcare medie", - "net": "Rețea", - "temp": "Temp", - "battery": "Bat", - "services": "Servicii", - "uptime": "Uptime", - "agent": "Agent" - } + "description": "Vizualizare grilă carduri a tuturor sistemelor monitorizate Beszel cu metrici în timp real" }, "beszelAlerts": { "name": "Alerte Beszel", @@ -3857,11 +5073,12 @@ } }, "empty": "Nicio alertă configurată", - "error": { - "internalServerError": "Nu s-a putut conecta la Beszel. Verificaţi setările de integrare." - }, "history": "Istoric", "resolved": "Rezolvat", + "alertDescription": { + "statusDuration": "Jos pentru {minutes} min", + "threshold": "Depășește {value} pe {minutes} min" + }, "status": { "triggered": "Declanșat", "ok": "OK" @@ -3908,16 +5125,16 @@ "noSystems": "Niciun sistem găsit" }, "error": { - "internalServerError": "Nu s-a putut conecta la Beszel. Verificaţi setările de integrare.", "liveConnectionFailed": "Conexiunea live a eșuat. Este posibil ca instanța Beszel să nu suporte streaming.", "switchToHistorical": "Treceți la vizualizarea istorică", - "systemNotFound": "Sistemul selectat nu a fost găsit. Alege un alt sistem." + "systemNotFound": "Sistemul selectat nu a fost găsit. Alege un alt sistem.", + "selectionSaveTitle": "Imposibil de salvat selecția", + "selectionSaveMessage": "Selecția sistemului sau a perioadei de timp nu a putut fi salvată. Vă rugăm să încercați din nou." }, "chart": { "cpu": { "title": "Utilizare CPU", - "subtitle": "Utilizarea medie a CPU la nivel de sistem", - "series": "CPU" + "subtitle": "Utilizarea medie a CPU la nivel de sistem" }, "memory": { "title": "Utilizare memorie", @@ -3959,39 +5176,550 @@ "title": "I/O rețea Docker", "subtitle": "Trafic de rețea al containerelor Docker" } + }, + "period": { + "live": "Live", + "oneHour": "1h", + "twelveHours": "12h", + "oneDay": "24h", + "oneWeek": "1g", + "thirtyDays": "30d" } }, - "wud": { - "name": "Ce este Docker", - "description": "Arată câte containere vizionate au actualizări disponibile.", - "title": "Ce este Docker", - "monitored": "Monitorizat", - "updatesAvailable": "{count, plural, one {# actualizare disponibilă} other {# actualizări disponibile}}", - "updateAvailable": "Actualizare disponibilă", - "openReleaseNotes": "Deschide notele de lansare", + "assistant": { + "name": "Asistent", + "description": "Aveţi o conversaţie completă cu asistentul direct pe tablă.", + "unavailable": { + "title": "Asistent indisponibil", + "description": "Conectează-te și cere unui administrator să configureze Asistentul din panoul de administrare." + }, + "compact": { + "title": "Asistent", + "description": "Redimensionează acest widget pentru a discuta aici, sau deschide conversația completă.", + "open": "Deschide asistentul", + "openTitle": "Asistent deschis în panoul lateral", + "openDescription": "Conversația rămâne pe o suprafață activă.", + "returnToWidget": "Returnează conversația la acest widget", + "otherWidgetTitle": "Asistent activ în alt widget", + "otherWidgetDescription": "Doar o singură suprafață de conversație rămâne activă odată.", + "useHere": "Utilizaţi asistentul în acest widget" + } + }, + "beszel": { + "error": { + "internalServerError": "Nu s-a putut conecta la Beszel. Verificaţi setările de integrare." + }, + "empty": { + "noSystems": "Niciun sistem găsit" + }, + "options": { + "statusFilter": { + "label": "Filtru de stare" + }, + "showCpu": { + "label": "Arată CPU" + }, + "showMemory": { + "label": "Arată memoria" + }, + "showDisk": { + "label": "Arată disc" + }, + "showGpu": { + "label": "Arată GPU" + }, + "showLoadAvg": { + "label": "Arată media de încărcare" + }, + "showNet": { + "label": "Arată rețeaua" + }, + "showTemp": { + "label": "Afișare temperatură" + }, + "showBattery": { + "label": "Afișare baterie" + }, + "showServices": { + "label": "Afișare servicii" + }, + "showUptime": { + "label": "Arată uptime" + }, + "showAgent": { + "label": "Arată versiunea de agent" + } + }, + "metric": { + "system": "Sistem", + "source": "Integrare", + "hostname": "Hostname", + "cpuModel": "Model CPU", + "cores": "Cores", + "memoryTotal": "Total memorie", + "memory": "Memorie", + "disk": "Disc", + "loadAvg": "Încărcare medie", + "net": "Net", + "temp": "Temperatura", + "battery": "Bat", + "uptime": "Uptime", + "agent": "Agent" + } + }, + "llamacpp": { + "name": "llama.cpp", + "description": "Arătaţi sănătatea, modelul încărcat şi viteza de generare a serverului local llama.cpp.", + "title": "llama.cpp", + "status": { + "unhealthy": "Insănătos ({status})" + }, + "idle": "Inactiv", + "speedTooltip": { + "current": "Viteza generării de curent", + "average": "Viteza medie de generare de la pornire", + "request": "Viteza medie de la începerea acestei cereri" + }, + "busy": "{count, plural, one {# solicitare care rulează} other {# cereri ce rulează}}", + "modelInfo": { + "context": "Context", + "size": "Dimensiune fişier", + "parameters": "Parametri", + "model": "Model", + "quantization": "Quantizare" + }, + "stats": { + "tokensProcessed": "Tokene procesate", + "contextUsage": "Context / utilizare KV", + "cacheHitRate": "Rata de semnalizare a geocutiei", + "tokensGenerated": "Tokene generate" + }, + "error": { + "unreachable": "serverul llama-server nu este accesibil" + }, + "unit": { + "speed": "{value} t/s", + "parameters": "{value}B", + "none": "—", + "speedShort": "T/s" + }, "option": { "showTitle": { "label": "Afișare titlu" }, - "showRing": { - "label": "Arată inel de actualizare" + "showModelInfo": { + "label": "Afișare informații model" }, - "layout": { - "label": "Aspect", + "showContextUsage": { + "label": "Arată utilizarea contextului" + }, + "showCacheHitRate": { + "label": "Arată rata de atingere a geocutiei" + }, + "showSpeedStats": { + "label": "Arată statisticile de viteză" + }, + "showRequests": { + "label": "Arată solicitarea de încărcare" + }, + "showTokenStats": { + "label": "Arată totalurile simbolurilor" + }, + "showSpeculative": { + "label": "Arată decodarea speculativă" + } + }, + "advanced": { + "promptSpeed": "Viteză interogare", + "avgSpeed": "Generare medie", + "requests": "Cereri", + "deferred": "Amânat", + "slots": "{processing}/{total} sloturi ocupate", + "speculative": "Decodare speculativă", + "avgPrompt": "Ofertă medie", + "specDrafts": "Ciorne pentru specie", + "specAccepted": "Spec. jetoane acceptate", + "specDraftTokens": "Jetoane pentru specie" + } + }, + "stats": { + "name": "Statistici", + "description": "Combină statisticile din integrările tale într-un widget configurabil.", + "configure": "Configurați măsurători", + "refresh": "Reîmprospătare statistici", + "empty": "Deschideți setările widget-urilor, selectați integrările, apoi adăugați măsurători.", + "editorHelp": "Adăugați măsurători din integrările selectate pentru acest widget. Modificările sunt salvate cu tabloul de bord.", + "source": "Integrare", + "metric": "Metrice", + "noMetrics": "Nu sunt disponibile statistici pentru această integrare", + "add": "Adăugare metric", + "label": "Etichetă personalizată", + "hidden": "Hidden", + "compact": "Numere compacte", + "moveUp": "Mută în sus", + "moveDown": "Mută în jos", + "remove": "Elimină metric", + "loading": "Se încarcă…", + "unavailable": "Unavailable", + "refreshFailed": "Reîmprospătare eșuată - afișarea datelor salvate", + "stale": "Date salvate — reîmprospătează pentru actualizare", + "table": { + "value": "Valoare", + "status": "Status" + }, + "option": { + "table": { + "label": "Vizualizare tabel" + }, + "rows": { + "label": "Rânduri compacte" + }, + "showIcon": { + "label": "Arată pictograma sursă" + }, + "spacing": { + "label": "Spațiere", "option": { - "horizontal": { - "label": "Orizontal" + "xs": { + "label": "Compact" }, - "vertical": { - "label": "Verticală" + "sm": { + "label": "Comfortable" + }, + "md": { + "label": "Periculos" } } }, - "showUpdateList": { - "label": "Arată lista de actualizări containere", - "description": "Listează fiecare container monitorizat care are o actualizare a imaginii disponibilă" + "entries": { + "label": "Valori" + }, + "plain": { + "label": "Elimină fundalurile cardului" } - } + }, + "fetchFailed": "Imposibil de regăsit statisticile", + "viewOptions": "Personalizați această vizualizare", + "moreMetrics": "{count} mai mult în vizualizarea avansată", + "localHelp": "Aspectul, formatarea şi vizibilitatea se aplică numai acestui punct de vedere. Setările forumului comun rămân aceleaşi.", + "plain": "Elimină fundalurile cardului", + "resetView": "Resetare vizualizare", + "allHidden": "Toate valorile sunt ascunse în această vizualizare. Utilizați Personalizați această vizualizare pentru a le restaura." + }, + "wazuh": { + "target": { + "api": "API-ul serverului Wazuh", + "indexer": "Indexare Wazuh", + "wazuh": "Wazuh" + }, + "severity": { + "low": "scazut", + "medium": "Mediu", + "high": "Ridicat", + "critical": "Critice" + }, + "error": { + "unauthorized": { + "title": "{target} a respins acreditările", + "description": "Verificați numele de utilizator și parola salvate pe integrarea Wazuh. Serverul API (portul 55000) și indexul (portul 9200) utilizează utilizatori separați." + }, + "certificate": { + "title": "{target} certificat nu este de încredere", + "description": "Wazuh folosește în mod implicit un certificat auto-semnat. Executați \"Test connection\" pe integrare și acreditați certificatul sau adăugați CA în Setări → Certificate." + }, + "unreachable": { + "title": "Nu se poate ajunge la {target}", + "description": "Gazda a refuzat sau a renunțat la conexiune. Verificați URL, port și firewall. Indexul doar ascultă localhost într-o instalare implicită all-in-one." + }, + "timeout": { + "title": "{target} a expirat", + "description": "Fără răspuns în 15 secunde. Serviciul poate fi supraîncărcat sau adresa poate fi greșită." + }, + "status": { + "title": "{target} a returnat o eroare", + "description": "Solicitarea a eșuat cu HTTP status {status}." + }, + "invalidResponse": { + "title": "Răspuns neașteptat de la {target}", + "description": "Verifică dacă URL-ul arată API-ul serverului Wazuh sau indexer şi nu la tabloul de bord." + }, + "indexerRequired": { + "title": "Acreditările indexului Wazuh sunt necesare", + "description": "Alerte, vulnerabilități și evenimente de integritate fișier sunt citite din indexul Wazuh. Adăugați un indexer URL, nume de utilizator și parolă la integrare." + }, + "unknown": { + "title": "Nu s-au putut încărca datele de la {target}", + "description": "Verifică jurnalele Homarr pentru detalii." + } + }, + "range": { + "1h": "1h", + "24h": "24h", + "7d": "7d", + "30d": "30d" + }, + "levelTooltip": "Nivelul Regulii {level} ({severity})" + }, + "wazuhAgents": { + "name": "Medicamente Wazuh", + "description": "Lista de agenți Wazuh cu stare, OS, versiune și ultima menținere în viață", + "option": { + "statusFilter": { + "label": "Afișare agenți" + }, + "sortBy": { + "label": "Sortează după" + }, + "showVersion": { + "label": "Arată coloana cu versiuni Wazuh" + }, + "showGroups": { + "label": "Afișare coloană grupuri" + } + }, + "title": "Agenți", + "total": "{count} agenți", + "status": { + "active": "Activ", + "disconnected": "Deconectat", + "neverConnected": "Niciodată conectat", + "pending": "In asteptare" + }, + "statusLabel": { + "active": "Activ", + "disconnected": "Deconectat", + "never_connected": "Niciodată conectat", + "pending": "In asteptare", + "unknown": "Necunoscut" + }, + "live": "Live", + "snapshot": "Instantaneu {age} vechi", + "snapshotHint": "Citiți de la agentul de instantaneu Wazuh al tabloului de bord (wazuh-monitor) luat la {time}. Adăugați acreditările API ale serverului pentru date live.", + "staleSnapshot": "Agentul instantaneu din {time} este învechit. Verificați dacă este activată monitorizarea tabloului de bord Wazuh sau adăugați acreditările API ale serverului.", + "noDisconnected": "Toți agenții sunt conectați", + "empty": "Niciun agent nu se potrivește cu acest filtru", + "column": { + "status": "Status", + "name": "Numele postului", + "ip": "IP", + "os": "SG", + "version": "Versiune", + "lastKeepAlive": "Păstraţi", + "groups": "Grupuri" + }, + "outdated": "Mai vechi decât cea mai nouă versiune de agent ({version})" + }, + "wazuhAlerts": { + "name": "Feed alerte Wazuh", + "description": "Alerte Wazuh recente cu tehnicile de nivel ATT&CK MITRE, agent și sursă IP", + "option": { + "minLevel": { + "label": "Nivelul minim al regulii", + "description": "Valori Wazuh: 0-6 scăzute, 7-11 medii, 12-14 ridicate, 15+ critice" + }, + "hours": { + "label": "Fereastra de timp (ore)" + }, + "limit": { + "label": "Numărul de alerte" + }, + "showMitre": { + "label": "Show MITRE ATT&CK techniques" + }, + "showAgent": { + "label": "Afișare agent" + }, + "showSourceIp": { + "label": "Arată adresa IP sursă" + }, + "showRuleId": { + "label": "Arată ID-ul regulii" + } + }, + "title": "Alerte · nivel {level}+ · {hours}h", + "empty": "Fără alerte la acest nivel. Toată liniștea.", + "rule": "Norma {id}", + "openInDashboard": "Deschide această alertă în tabloul de bord Wazuh" + }, + "wazuhSummary": { + "name": "Gradul de alertă Wazuh", + "description": "Alertă defalcare gravitate în raport cu perioada anterioară", + "option": { + "range": { + "label": "Interval de timp" + }, + "showTrend": { + "label": "Arată tendința față de perioada anterioară" + }, + "showFooter": { + "label": "Arată subsol" + } + }, + "title": "Severitatea alertei · {range}", + "alerts": "alerte", + "none": "Fără alerte", + "trend": { + "new": "nou", + "tooltip": "Perioada anterioară: {previous}" + }, + "previous": "{range} {count}", + "maxLevel": "Nivel maxim {level}", + "health": "Indexer health: {status}", + "manager": "Manager {version}" + }, + "wazuhTimeline": { + "name": "Wazuh alerts timeline", + "description": "Graficul alertelor Wazuh în timp de severitate", + "option": { + "range": { + "label": "Interval de timp" + }, + "interval": { + "label": "Interval" + }, + "chartType": { + "label": "Tipul graficului" + }, + "yScale": { + "label": "Scara axei Y", + "description": "Rădăcina pătrată menține alerte ridicate și critice vizibile lângă cele mici de mii" + }, + "minLevel": { + "label": "Nivelul minim al regulii" + }, + "showLegend": { + "label": "Arată legenda cu totaluri" + } + }, + "title": "Alerte cronologie · {range}", + "total": "{count} alerte", + "interval": "la fiecare {interval}" + }, + "wazuhTopList": { + "name": "Lista de sus Wazuh", + "description": "Reguli de vârf, agenți, IP-uri sursă sau tactici și tehnici MITRE ATT&CK prin numărarea alertelor", + "option": { + "kind": { + "label": "Clasament" + }, + "range": { + "label": "Interval de timp" + }, + "limit": { + "label": "Număr de intrări" + }, + "minLevel": { + "label": "Nivelul minim al regulii" + }, + "showBars": { + "label": "Arată bare" + } + }, + "title": { + "rules": "Reguli de top · {range}", + "agents": "Top agenți · {range}", + "sourceIps": "IP sursă de top · {range}", + "mitreTactics": "Tactici MITRE · {range}", + "mitreTechniques": "MITRE techniques · {range}" + }, + "empty": { + "rules": "Nu există alerte în această perioadă", + "agents": "Nu există alerte în această perioadă", + "sourceIps": "Nu există alerte cu un IP sursă în această perioadă", + "mitreTactics": "Nu există alerte mapate pe ATTCK MITRE în această perioadă", + "mitreTechniques": "Nu există alerte mapate pe ATTCK MITRE în această perioadă" + }, + "totalTooltip": "{count} alerte care se potrivesc", + "private": "LAN", + "public": "Publice", + "agents": "Văzut pe {count} agenți", + "others": "{count} mai multe alerte în alte intrări" + }, + "wazuhVulnerabilities": { + "name": "Vulnerabilități Wazuh", + "description": "Vulnerabilitatea contează, CVE-urile de top și cei mai vulnerabili agenți", + "option": { + "cveOrder": { + "label": "Clasează CVE-urile după" + }, + "minSeverity": { + "label": "Severitate EACV" + }, + "cveLimit": { + "label": "Număr de vehicule utilitare" + }, + "agentLimit": { + "label": "Număr de agenți" + }, + "showAgents": { + "label": "Arată cei mai vulnerabili agenți" + } + }, + "title": "Vulnerabilități", + "topCves": "Top vehicule", + "score": "Scor", + "agentsShort": "Agenți", + "topAgents": "Cei mai vulnerabili agenți", + "criticalHigh": "Crimă / Mare", + "totalTooltip": "{count} rezultate pentru {agents} medicamente", + "affected": "{count} agenți", + "empty": "Nicio vulnerabilitate detectată", + "distribution": "Distribuția nivelurilor de severitate. Nu sunt afișate {unscored} constatări fără scor.", + "worst": "Cel mai grav: {id} ({score}) despre {agents} agenți" + }, + "wazuhFim": { + "name": "Integritatea fişierului Wazuh", + "description": "Evenimente recente de monitorizare a integrității fișierului (syscheck)", + "option": { + "range": { + "label": "Interval de timp" + }, + "event": { + "label": "Evenimente" + }, + "limit": { + "label": "Număr de evenimente" + }, + "includeRegistry": { + "label": "Include evenimentele de înregistrare Windows" + } + }, + "title": "Integritatea fișierului · {range}", + "event": { + "added": "Data adăugării", + "modified": "Modificat", + "deleted": "Șters", + "unknown": "Schimbat" + }, + "empty": "Nu sunt evenimente de integritate fișier în această perioadă", + "user": "de {user}", + "registry": "Registrul" + }, + "wazuhAuthFailures": { + "name": "Eșec de autentificare Wazuh", + "description": "Autentificări eșuate și alerte brut-forte per agent cu intervale orare de timp", + "option": { + "hours": { + "label": "Fereastra de timp (ore)" + }, + "limit": { + "label": "Număr de agenți" + }, + "showSourceIps": { + "label": "Afișare IP-uri sursă de top" + } + }, + "title": "Eșecuri de autentificare · {hours}h", + "seriesTooltip": "Toți agenții din ultimul {hours}h", + "peak": "Vârf: {count}/interval", + "empty": "Nu există autentificări nereușite în această perioadă", + "failed": "Autentificări eșuate", + "failedHint": "Autentificare eșuată unică (sshd, PAM, Windows logon, utilizatori nevalide)", + "bruteForce": "Forță brută", + "bruteForceHint": "Norme brut-forţă corelate (eşecuri multiple într-o perioadă scurtă de timp, MITRE T1110)", + "sourceIps": "IP-uri sursă", + "ipTooltip": "{ip}: {count} eșec", + "bruteForceCount": "{count} forță brută" } }, "widgetPreview": { @@ -4004,7 +5732,76 @@ } }, "board": { + "emptyState": { + "title": "Construiți-vă prima vizualizare", + "description": "Adăugați un widget sau o aplicație, sau conectați un serviciu și utilizați datele sale din această secțiune.", + "addWidget": "Adaugă widget", + "addApp": "Adaugă aplicație", + "connectService": "Conectare serviciu" + }, + "setupChecklist": { + "title": "Fă această secţiune folositoare", + "description": "Ridicaţi de unde aţi plecat. Progresul urmează conţinutul deja de pe această secţiune.", + "collapse": "Restrânge lista de instalare", + "dismiss": "Renunțați la lista de configurare", + "resume": "Continuați configurarea ({completed}/{total})", + "progress": "Progresul configurării forumului", + "step": { + "content": { + "label": "Adaugă conținut util", + "description": "Alegeți un widget și configurați-l înainte de a fi plasat." + }, + "app": { + "label": "Fixează o aplicație", + "description": "Păstraţi un serviciu sau un instrument la distanţă de această secţiune." + }, + "service": { + "label": "Conectați un serviciu", + "description": "Deblochează date live și acțiuni pentru widget-uri compatibile.", + "permissionDescription": "Un administrator poate conecta un serviciu pentru a debloca date reale.", + "action": "Conectează-te" + } + } + }, "action": { + "addContent": "Adăugare conţinut secţiune", + "settings": "Setări secţiune", + "switch": "Comută panoul", + "switcher": { + "title": "Comută panoul", + "search": { + "empty": "Nici o secţiune nu se potriveşte \"{search}\"." + }, + "results": "Secţiuni disponibile", + "preview": "Previzualizare {name} cu {count} elemente", + "currentHidden": "Panoul curent: {name}", + "keyboard": { + "navigate": "Navigate", + "open": "Deschideți", + "instructions": "Tastați pentru a filtra panourile. Utilizați tastele săgeată pentru a muta rezultatele și introduceți pentru a deschide o secţiune." + }, + "empty": { + "title": "Nicio altă secţiune", + "description": "Nu există alte secţiuni pe care să le poţi accesa." + }, + "error": "Secţiunile nu au putut fi încărcate." + }, + "create": { + "availability": { + "checking": "Verificare disponibilitate…", + "available": "{name} este disponibil" + }, + "notification": { + "success": { + "title": "Secţiune creată", + "message": "{name} a fost creat" + }, + "error": { + "title": "Imposibil de creat tabla", + "message": "{name} nu a putut fi creat" + } + } + }, "duplicate": { "title": "Duplică tabla", "message": "Aceasta va duplica secţiunea {name} cu tot conţinutul său. Dacă widget-urile integrează referinţa, pe care nu aveţi permisiunea să o folosiţi, acestea vor fi eliminate.", @@ -4020,14 +5817,19 @@ } }, "edit": { + "enter": "Editare secţiune", + "save": "Salvează tabla", + "exit": "Ieșiți din modul de editare", "notification": { "success": { - "title": "Modificări aplicate cu succes", "message": "Secţiunea a fost salvată cu succes" }, "error": { - "title": "Imposibil de aplicat modificările", "message": "Secţiunea nu a putut fi salvată" + }, + "loadError": { + "title": "Nu se poate începe editarea", + "message": "Editorul de secţiune nu a putut fi încărcat. Tabloul de bord este încă disponibil în modul vizualizare." } }, "confirmLeave": { @@ -4035,62 +5837,6 @@ "message": "Aveți modificări nesalvate, sunteți sigur că doriți să ieșiți?" } }, - "oldImport": { - "label": "Importă din homarr înainte de 1.0.0", - "notification": { - "success": { - "title": "Importare reușită", - "message": "Secţiunea a fost importată cu succes" - }, - "error": { - "title": "Importare eșuată", - "message": "Secţiunea nu a putut fi importată, verificaţi jurnalele pentru detalii suplimentare" - } - }, - "form": { - "file": { - "label": "Selectaţi fişierul JSON", - "invalidError": "Fișier de configurare nevalid" - }, - "apps": { - "label": "Aplicații", - "avoidDuplicates": { - "label": "Evită dublurile", - "description": "Ignoră aplicațiile unde există deja o aplicație cu același href" - }, - "onlyImportApps": { - "label": "Importă numai aplicații", - "description": "Doar adaugă aplicațiile, tabla trebuie să fie recreată manual" - } - }, - "name": { - "label": "Numele forumului" - }, - "screenSize": { - "label": "Dimensiune ecran", - "description": "În versiunile înainte să existe 1.0 trei moduri diferite, așa că ați putut alege numărul de coloane pentru fiecare mărime de ecran.", - "option": { - "sm": "Mic", - "md": "Mediu", - "lg": "Mare" - } - }, - "sidebarBehavior": { - "label": "Comportament bară laterală", - "description": "Sidebars au fost eliminate în 1.0, puteți selecta ce ar trebui să se întâmple cu elementele din ele.", - "option": { - "lastSection": { - "label": "Ultima secţiune", - "description": "Bara laterală va fi afișată sub ultima secțiune" - }, - "removeItems": { - "label": "Elimină elemente", - "description": "Articolele conținute în bara laterală vor fi eliminate" - } - } - } - } - }, "quickCreateApp": { "modal": { "title": "Creează o aplicație pe zbor", @@ -4098,6 +5844,12 @@ } } }, + "landmark": { + "canvas": "Pânză de bord", + "leftRail": "Cale de bord stânga", + "rightRail": "Cale feroviară din dreapta", + "items": "Elemente de panou" + }, "field": { "pageTitle": { "label": "Titlul paginii" @@ -4167,7 +5919,8 @@ } }, "primaryColor": { - "label": "Culoare de bază" + "label": "Culoare de bază", + "locked": "Administratorul tău păstrează culoarea mărcii de instanță pe fiecare tablă." }, "secondaryColor": { "label": "Culoare secundară" @@ -4207,9 +5960,6 @@ "xl": "Foarte mare" } }, - "name": { - "label": "Nume" - }, "isPublic": { "label": "Publice", "description": "Consiliile publice sunt accesibile tuturor, chiar și fără niciun cont." @@ -4229,9 +5979,44 @@ "title": "Aspect", "responsive": { "title": "Aspecte Responsive", + "description": "Fiecare aspect își păstrează propriile poziții și mărimi de widget. Mobil și bază sunt întotdeauna disponibile; adăugați layout-uri personalizate la orice întrerupere suplimentară.", "action": { "add": "Adaugă aspect" } + }, + "role": { + "mobile": "Mobil", + "base": "Baza", + "custom": "Personalizat" + }, + "custom": { + "defaultName": "Aspect personalizat" + }, + "mobile": { + "breakpointDescription": "Mobil este folosit întotdeauna de la 0px până la următorul punct de întrerupere a aspectului." + }, + "preview": { + "columns": "coloane", + "empty": "Această schemă este goală", + "dynamicSection": "Secțiune dinamică", + "editorWidthLabel": "{layoutName} · {width}px" + }, + "reset": { + "action": "Resetare din bază", + "confirm": { + "title": "Reset {layoutName}?", + "message": "Aceasta înlocuiește fiecare poziție salvată și dimensiune în acest layout cu un nou layout generat de la bază. Acest lucru nu poate fi anulat." + } + }, + "edit": { + "action": "Editare layout", + "saveAndEdit": "Salvare și editare", + "save": "Salvează aspectul", + "cancel": { + "action": "Anulează editarea aspectului", + "title": "Renunțați la modificările de aspect?", + "message": "Modificările nesalvate la acest aspect vor fi eliminate." + } } }, "background": { @@ -4268,10 +6053,7 @@ "rename": { "label": "Redenumiţi tabla", "description": "Schimbarea numelui va rupe orice link-uri către această secţiune.", - "button": "Schimbă numele", - "modal": { - "title": "Redenumiţi tabla" - } + "button": "Schimbă numele" }, "visibility": { "label": "Schimbă vizibilitatea forumului", @@ -4295,9 +6077,7 @@ } }, "delete": { - "label": "Şterge această secţiune", "description": "După ce ştergeţi o secţiune, nu există cale de întoarcere. Vă rugăm să fiţi sigur.", - "button": "Şterge această secţiune", "confirm": { "title": "Șterge planșa", "description": "Sunteţi sigur că doriţi să ştergeţi această secţiune? Acest lucru va şterge definitiv secţiunea şi tot conţinutul acesteia." @@ -4342,28 +6122,41 @@ }, "layout": { "field": { - "name": { - "label": "Nume" - }, "columnCount": { "label": "Număr de coloane" }, "breakpoint": { "label": "Breakpoint", "description": "Aspect va fi utilizat pe toate ecranele mai mari decât acest punct de întrerupere până la următorul punct de întrerupere mai mare." + }, + "gutters": { + "label": "Datoriile laterale fixe", + "description": "Rezervă până la trei coloane de tablou de bord pe fiecare parte. Restul de pânză se reface automat.", + "left": { + "label": "Left sidebar", + "description": "Păstraţi această zonă vizibilă în timp ce tabloul de bord derulează.", + "thumbLabel": "Left sidebar width" + }, + "right": { + "label": "Bara laterală dreapta", + "description": "Păstraţi această zonă vizibilă în timp ce tabloul de bord derulează.", + "thumbLabel": "Lățimea barei laterale dreapta" + }, + "width": { + "label": "Lățime în coloane" + }, + "preview": { + "label": "Previzualizare aspect tablou de bord" + } } } }, "management": { "metaTitle": "Gestionare", - "title": { - "morning": "Bună dimineața, {username}", - "afternoon": "Bună ziua, {username}", - "evening": "Bună seara, {username}" - }, "notFound": { "title": "Nu s-a găsit", - "text": "Nu am găsit resursa solicitată" + "text": "Nu am găsit resursa solicitată", + "backToHome": "Înapoi la pagina de management" }, "error": { "title": "Această pagină nu a putut fi încărcată", @@ -4372,19 +6165,10 @@ }, "navbar": { "items": { - "workshop": "Workshop", "home": "Acasă", - "boards": "Planșe", - "apps": "Aplicații", - "integrations": "Integrări", - "searchEngies": "Motoare de căutare", - "medias": "Medias", "users": { - "label": "Utilizatori", "items": { - "manage": "Gestionați", - "invites": "Invitații", - "groups": "Grupuri" + "manage": "Gestionați" } }, "tools": { @@ -4392,10 +6176,7 @@ "items": { "docker": "Doctor", "kubernetes": "Kubernetes", - "logs": "Jurnale", "api": "API & MCP", - "certificates": "Certificate", - "tasks": "Sarcini", "backup": "Copie de rezervă" } }, @@ -4409,21 +6190,12 @@ "sourceCode": "Cod sursă" } }, - "about": "Despre" + "about": "Despre", + "assistant": "Asistent" } }, "page": { "home": { - "statistic": { - "board": "Planșe", - "user": "Utilizatori", - "invite": "Invitații", - "integration": "Integrări", - "app": "Aplicații", - "group": "Grupuri", - "searchEngine": "Motoare de căutare", - "media": "Medias" - }, "statisticLabel": { "boards": "Planșe", "resources": "Resurse", @@ -4461,13 +6233,8 @@ "tooltip": "Această secţiune se va afişa ca tablă pentru mobil" } }, - "duplicate": { - "label": "Duplică tabla" - }, "delete": { - "label": "Șterge definitiv", "confirm": { - "title": "Șterge planșa", "description": "Sunteţi sigur că doriţi să ştergeţi secţiunea {name}?" } } @@ -4476,28 +6243,82 @@ "public": "Această secţiune este publică", "private": "Această secţiune este privată" }, - "noResults": { - "title": "Nicio planșă încă" + "preview": { + "label": "Previzualizare aspect pentru {name}, cu {count} elemente", + "unknownCreator": "Creator necunoscut" }, - "modal": { - "createBoard": { - "field": { - "name": { - "label": "Nume" - } - } - } + "noResults": { + "title": "Nicio planșă încă", + "description": "Creați o secţiune pentru a vă aranja aplicaţiile şi widget-urile într-un singur loc." } }, "media": { "includeFromAllUsers": "Include media de la toți utilizatorii" }, "user": { - "back": "Înapoi la utilizatori", "fieldsDisabledExternalProvider": "Anumite câmpuri sunt dezactivate deoarece sunt gestionate de un furnizor extern de autentificare.", "setting": { "general": { "title": "Generalități", + "header": { + "title": "Studio antet", + "badge": "Personal", + "description": "Trageți comenzile oriunde în rând. Stânga, centrul, și dreapta rămâneți fixe, în timp ce controalele se deplasează în jurul lor.", + "device": { + "desktop": "Birou", + "mobile": "Mobil" + }, + "zones": { + "left": "Stânga", + "center": "Centru", + "right": "Dreapta" + }, + "action": { + "hide": "Ascunde antetul", + "show": "Arată antetul", + "configure": "Mutați sau configurați {item}", + "remove": "Elimină {item}", + "dropIntoZone": "Mutați în secțiunea {zone}" + }, + "preview": { + "board": "Previzualizare tablou de bord pentru {name}", + "empty": "Nu este disponibil niciun tablou de bord" + }, + "available": { + "title": "Comenzi disponibile", + "description": "Adaugă o control, apoi glisează butonul complet în poziția de mai sus.", + "requiredAlways": "Acest control este necesar, dar îl puteţi muta oriunde în antet.", + "allAdded": "Fiecare control încorporat este deja în antetul dvs.", + "add": "Adaugă {item}", + "boardShortcut": "Scurtătură pe secţiune", + "chooseBoard": "Alege o secţiune" + }, + "configuration": { + "description": "Acest control rămâne la fel de mare ca în headerul live.", + "searchDisplay": { + "input": "Bară de căutare", + "icon": "Doar pictograma" + }, + "logoDisplay": { + "logo": "Doar logo", + "logoAndText": "Logo + text" + } + }, + "items": { + "logo": "Logo", + "search": "Caută", + "home": "Tablou principal", + "boardSwitcher": "Planșe", + "assistant": "Asistent", + "docker": "Doctor", + "boardEdit": "Editare secţiune", + "boardSettings": "Setări secţiune", + "settings": "Setările dvs.", + "themeToggle": "Activează/dezactivează tema", + "user": "Cont", + "boardUnavailable": "Secţiune indisponibilă" + } + }, "item": { "language": "Limba și regiunea", "board": { @@ -4531,14 +6352,10 @@ }, "security": { "title": "Securitate" - }, - "board": { - "title": "Planșe" } }, "list": { - "metaTitle": "Gestionați utilizatorii", - "title": "Utilizatori" + "metaTitle": "Gestionați utilizatorii" }, "edit": { "metaTitle": "Editare utilizator {username}" @@ -4592,9 +6409,6 @@ } }, "field": { - "id": { - "label": "ID" - }, "creator": { "label": "Creator" }, @@ -4618,10 +6432,7 @@ }, "setting": { "title": "Setări", - "alert": "Setările de grup sunt prioritizate de ordinea grupurilor din listă. Setările de sus suprascriu setările de jos.", - "board": { - "title": "Secţiuni" - } + "alert": "Setările de grup sunt prioritizate de ordinea grupurilor din listă. Setările de sus suprascriu setările de jos." }, "members": { "title": "Membri", @@ -4629,10 +6440,7 @@ "notFound": "Niciun membru găsit" }, "permissions": { - "title": "Permisiuni", - "form": { - "unsavedChanges": "Ai modificări nesalvate!" - } + "title": "Permisiuni" } } }, @@ -4641,12 +6449,10 @@ "notification": { "success": { "message": "Setări salvate cu succes" - }, - "error": { - "message": "Salvarea setărilor a eșuat" } }, "section": { + "analyticsDocumentation": "Vezi exact ce date analitice colectează Homarr", "analytics": { "title": "Analize", "general": { @@ -4675,7 +6481,6 @@ } }, "board": { - "title": "Planșe", "homeBoard": { "label": "Panou global acasă", "mobileLabel": "Tablou global pentru mobil", @@ -4694,7 +6499,6 @@ } }, "user": { - "title": "Utilizatori", "enableGravatar": { "label": "Activează Gravatar", "description": "Revine la avatarele utilizatorului de la Libravatar/Gravatar atunci când nu este setat nici un avatar personalizat și un e-mail este configurat" @@ -4710,12 +6514,86 @@ "appearance": { "title": "Aspect", "defaultColorScheme": { - "label": "Schema de culori implicită", + "label": "Schema de culori implicită" + } + }, + "branding": { + "title": "Schimb de instanță", + "groups": { + "identity": "Identitate", + "appearance": "Aspect", + "customCss": "Custom CSS", + "authentication": "Autentificare" + }, + "identity": { + "description": "Logo-ul aplicației este semnul mai mare folosit în aplicație, pe paginile de înregistrare și pentru aplicațiile instalate. Pictograma browser-ului (favicon) este pătratul mic folosit în taburi și semne de carte; atunci când este gol, se întoarce la logo-ul aplicației." + }, + "appName": { + "label": "Numele aplicației" + }, + "greeting": { + "label": "Salut personalizată" + }, + "logo": { + "label": "Logo-ul aplicației", + "placeholder": "/logo/logo.png" + }, + "favicon": { + "label": "Pictogramă browser (favicon)", + "placeholder": "Folosește logo-ul aplicației" + }, + "primaryColor": { + "label": "Culoare de bază" + }, + "secondaryColor": { + "label": "Accentul secundar" + }, + "lockPrimaryColor": { + "label": "Păstraţi această culoare pe fiecare placă", + "description": "Previne înlocuirea accentului de aplicaţie de către culorile forumului." + }, + "signInBackground": { + "label": "Fundal autentificare", + "placeholder": "https://example.com/background.jpg" + }, + "signInOverlay": { + "label": "Suprapunere de fundal" + }, + "defaultRadius": { + "label": "Stilul colţului", "options": { - "auto": "Auto", - "light": "Lumină", - "dark": "Întunecat" + "xs": "Strâns", + "sm": "Subtil", + "md": "Echilibru", + "lg": "Rotunjit", + "xl": "Moale" } + }, + "customCss": { + "label": "CSS personalizat global", + "description": "Aplicat la fiecare pagină. Panoul personalizat CSS îl poate înlocui." + }, + "authVisibility": { + "description": "Alegeți ce apare pe fiecare pagină de autentificare.", + "appName": "Numele aplicației", + "logo": "Logo-ul aplicației", + "greeting": "Salutare" + }, + "summary": { + "title": "Branding curent", + "cornerStyle": "Stilul colţului", + "palette": "Palette", + "backgroundConfigured": "Fundal personalizat · {overlay}% suprapunere", + "backgroundDefault": "Fundal implicit", + "greetingConfigured": "Salut personalizată", + "greetingDefault": "Salutare implicită", + "boardColorLocked": "Culoarea tablei blocată", + "boardColorFlexible": "Permis culorile tablei", + "appName": "Numele postului", + "logo": "Logo", + "greeting": "Salutare", + "on": "Activat", + "off": "Dezactivat" } }, "culture": { @@ -4723,12 +6601,177 @@ "defaultLocale": { "label": "Limba implicită" } + }, + "assistant": { + "loading": "Încărcare configurare asistent", + "title": "Asistent", + "description": "Conectați un model compatibil cu OpenAI, pentru asistentul la nivel de instanță.", + "security": { + "description": "Chei API și valorile antetului suplimentar sunt criptate în baza de date Homarr. Nu sunt niciodată returnate la browsere. Cererile de model sunt trimise de la serverul Homarr direct la punctul final configurat." + }, + "overview": { + "connectionReady": "Conexiune pregătită", + "unsavedChanges": "Modificări nesalvate", + "setupRequired": "Configurare necesară", + "disabled": "Dezactivat", + "noModel": "Niciun model selectat" + }, + "connection": { + "endpointTitle": "Furnizor și criteriu final", + "description": "Alegeți o presetare sau conectați orice serviciu care implementează API-ul OpenAI Chat Completions API.", + "save": "Salvați conexiunea furnizorului" + }, + "credentials": { + "title": "Acreditări", + "description": "Adăugați secretele pentru acest obiectiv. Valorile stocate rămân criptate și nu pot fi citite înapoi.", + "required": "Cheie necesară", + "optional": "Cheie opțională", + "workshop": "Conectare cu utilizator GitHub" + }, + "provider": { + "title": "Furnizor", + "groups": { + "free": "Liber cu Homarr", + "hosted": "Furnizori gazduiți", + "local": "Furnizori locali", + "custom": "Personalizat" + }, + "options": { + "homarr": { + "description": "Un număr limitat de utilizări asistente sunt gratuite în fiecare zi, fiind plătite de echipa Homarr. Conectează-te cu Atelierul Comunitar pentru a folosi indemnizația ta." + }, + "openrouter": { + "description": "Rutarea modelului găzduit cu un catalog de modele mari ce pot fi folosite." + }, + "openai": { + "description": "OpenAI Chat finalizează prin obiectivul oficial API." + }, + "anthropic": { + "description": "Claude prin criteriul final de compatibilitate OpenAI SDK al lui Antropical." + }, + "google-gemini": { + "description": "Gemini prin obiectivul API compatibil cu Google OpenAI." + }, + "xai": { + "description": "Model grok prin API-ul compatibil cu xAI al lui OpenAI." + }, + "groq": { + "description": "Recoltă găzduită rapid prin API OpenAI-compatibil cu Groq." + }, + "mistral": { + "description": "Modelele mistrale prin API oficial." + }, + "deepseek": { + "description": "DeepSeek modelează prin API-ul său compatibil cu OpenAI." + }, + "together": { + "description": "A găzduit modele deschise prin API-ul compatibil OpenAI." + }, + "ollama": { + "description": "Un server local sau rețea Ollama folosind API-ul său compatibil cu OpenAI." + }, + "lm-studio": { + "description": "Un server local LM Studio cu compatibilitate OpenAI activată." + }, + "llama-cpp": { + "description": "Un server local sau rețea llama.cpp folosind API-ul său compatibil cu OpenAI." + }, + "custom": { + "label": "Obiectiv personalizat", + "description": "Orice alt obiectiv compatibil cu OpenAI Chat Finalizări." + } + }, + "homarrAuth": { + "title": "Utilizările zilnice gratuite ale asistentului sunt incluse", + "description": "Nu este necesară o cheie API. Echipa Homarr acoperă un număr limitat de utilizări asistente pentru tine în fiecare zi. Conectați-vă la Atelierul comunitar pentru a vă păstra indemnizația separată." + } + }, + "baseUrl": { + "title": "URL de bază API", + "description": "Include prefixul API, de obicei /v1. În containere, gazda locală se referă la containerul Homarr." + }, + "apiKey": { + "title": "Cheie API", + "required": "Necesar de către acest furnizor. Valoarea este criptată și numai scriere.", + "optional": "Opțional pentru punctele locale final. Lăsați necompletat atunci când serviciul nu necesită autentificarea purtătorului.", + "placeholder": "Introduceți o cheie API", + "savedTitle": "Cheia API criptată salvată", + "savedDescription": "Homarr poate folosi această cheie, dar nu poate afișa sau recupera valoarea acesteia.", + "remove": "Elimină API-cheie salvat", + "removeFlow": { + "title": "Eliminați cheia API salvată?", + "description": "Acest furnizor necesită o cheie API. Eliminarea acesteia poate opri modelul de descoperire şi răspunsurile asistente până când o altă cheie este salvată.", + "optionalDescription": "Criteriul final va opri primirea autentificării la purtător după ce această cheie este eliminată. Confirmați că acceptă cereri neautentificate sau utilizează un alt antet stocat.", + "cancel": "Păstrează cheia salvată", + "confirm": "Elimină API-cheie" + } + }, + "headers": { + "title": "Antet suplimentar de cerere", + "description": "Antete opționale de autentificare sau rutare. Valorile antetului sunt criptate și numai scrise.", + "add": "Adaugă antet", + "name": "Nume antet", + "value": "Valoare antet", + "valuePlaceholder": "Valoare secretă sau dirijată", + "remove": "Elimină antet", + "configured": "Antetele criptate suplimentare sunt configurate. Adăugarea anteturilor înlocuieşte setarea completă stocată.", + "empty": "Nu sunt stocate antete suplimentare pentru acest furnizor.", + "savedBadge": "Antete salvate", + "pendingRemoval": "Eliminare în așteptare", + "clear": "Elimină antetele stocate când se salvează", + "keep": "Menține antetele stocate" + }, + "model": { + "title": "Model", + "description": "Selectați un model descoperit sau introduceți un ID de model de punct exact.", + "placeholder": "ID model", + "refresh": "Reîmprospătare modele", + "chooseModel": "Alege modelul folosit pentru conversații noi.", + "discoveryPath": "Calea pentru descoperirea modelului", + "discoveryPathDescription": "Adăugat la adresa URL de bază API. Lăsați necompletat pentru a dezactiva descoperirea și a utiliza un ID model manual.", + "manual": "Introduceți un ID model manual sau salvați conexiunea pentru a descoperi modele.", + "manualFallback": "Descoperirea nu este disponibilă. Puteți introduce un model de ID manual.", + "saveConnectionFirst": "Salvați conexiunea furnizorului înainte de a alege un model.", + "discovering": "Împrospătarea modelelor disponibile de la acest furnizor…", + "discovered": "{count, plural, one {Descoperit # model. Suportul sculei depinde de obiectivul și modelul selectat.} other {Descoperit # modele. Suportul sculei depinde de obiectivul și modelul selectat}}", + "discoveryFailed": "Descoperirea de modele nu a fost completă", + "context": "{count} fereastră context", + "toolsConfirmed": "Instrumente promovate", + "toolsUnknown": "Verifică suportul pentru unelte" + }, + "serverTools": { + "title": "Unelte server", + "webSearch": { + "label": "Căutare pe web", + "description": "Permiteți modelului să caute live web prin OpenRouter atunci când o cerere are nevoie de informații curente. Utilizarea căutării este taxată separat de către OpenRouter.", + "proxyDescription": "Trimite unealta de căutare web a serverului OpenRouter la acest final. Activați acest lucru numai atunci când obiectivul personalizat este în formatul de unelte OpenRouter de server, cum ar fi un proxy Homarr Router", + "limit": "Modelul decide când să caute, cu o limită de 3 căutări și 5 rezultate pentru fiecare solicitare." + } + }, + "enabled": { + "label": "Activează Asistentul", + "description": "Afișează asistentul tuturor utilizatorilor înregistrați. Permisiunile existente de homarr încă se aplică fiecărui apel intern." + }, + "save": "Salvează asistentul", + "notification": { + "connectionSaved": { + "title": "Conexiune furnizor salvată", + "message": "Criteriul final şi datele criptate sunt pregătite pentru selecţia modelului.", + "credentialsCleared": "Criteriul final a fost modificat, astfel încât acreditările anterioare au fost șterse. Adăugați acreditări pentru noua destinație, dacă este necesar." + }, + "saved": { + "title": "Setări asistente salvate", + "message": "Noul model și setările de disponibilitate sunt active." + }, + "error": { + "title": "Setările asistentului nu au putut fi salvate" + } + } } } }, "tool": { "tasks": { - "title": "Sarcini", "status": { "idle": "Inactiv", "running": "Rulează", @@ -4746,6 +6789,11 @@ "label": "Ping-uri" } }, + "action": { + "run": "Rulează {name} acum", + "enable": "Activează {name}", + "disable": "Dezactivează {name}" + }, "interval": { "seconds": "La fiecare {interval, plural, =1 {secundă} other {# secunde}}", "minutes": "Fiecare {interval, plural, =1 {minut} other {# minute}}", @@ -4761,13 +6809,7 @@ } } }, - "settings": { - "title": "Setări sarcină pentru {jobName}" - }, "field": { - "name": { - "label": "Nume" - }, "interval": { "label": "Interval de programare" }, @@ -4781,11 +6823,6 @@ "table": { "search": "Căutare {count} activități..." }, - "action": { - "refresh": { - "label": "Împrospătează" - } - }, "refresh": { "success": { "message": "Sarcini reîmprospătate cu succes" @@ -4819,7 +6856,6 @@ } }, "api": { - "title": "API", "modal": { "createApiToken": { "title": "Token API creat", @@ -4845,7 +6881,6 @@ }, "table": { "header": { - "id": "ID", "createdBy": "Creat de", "actions": "Acțiuni" } @@ -4901,43 +6936,12 @@ "availableTools": { "title": "Instrumente disponibile", "description": "{count} unelte disponibile. Extinde o categorie pentru a vedea uneltele individuale și descrierile lor.", - "columnType": "Tip", - "columnName": "Unelte", - "columnDescription": "Descriere" - }, - "troubleshooting": { - "title": "Depanare", - "missingHeader": { - "title": "\"Lipsă header ApiKey", - "description": "Clientul dvs. nu trimite headerul {header}. Verificați dacă secțiunea {section} din configurația MCP este corectă. Unii clienți necesită repornirea după modificarea configurării." - }, - "invalidFormat": { - "title": "\"Format ApiKey nevalid\"", - "description": "Asigurați-vă că ați copiat cheia API completă, nu doar o parte a ei." - }, - "invalidKey": { - "title": "Cheie API invalida", - "description": "ID-ul cheii nu a fost găsit sau token-ul este greșit. Chei API pot fi vizualizate doar o dată când a fost creat. Dacă ați pierdut-o, ștergeți cheia veche și creați una nouă." - }, - "connectionRefused": { - "title": "Conexiune refuzată / expirare", - "description": "Asigură-te că adresa URL este accesibilă clientului tău AI. Dacă Homarr rulează în spatele unui proxy inversat sau în Docker, utilizați URL-ul extern (nu {localhost}). Verificarea portului este corectă (implicit: 7575 pentru Docker)." - }, - "toolsNotAppearing": { - "title": "Unelte care nu apar", - "description": "Unele unelte necesită integrări specifice pentru a fi configurate (de ex. Docker, Overseerr). Lista de unelte depinde de ce este disponibil în instanța de Homarr." + "filteredDescription": "{count} se potrivesc uneltelor pe categorii extinse.", + "search": "Instrumente de căutare", + "noResults": { + "title": "Nici un instrument nu se potrivește cu această căutare", + "description": "Nicio unealtă MCP nu corespunde \"{search}\". Încercați un spațiu de nume, numele uneltelor sau descrierea." } - }, - "copy": "Copiază", - "oneClick": { - "title": "Instalează cu un singur clic", - "subtitle": "Folosește OAuth - autentifică-te în browser la prima utilizare", - "vsCode": "Instalează în VS Code", - "cursor": "Instalează în Cursor", - "copyUrl": "Copiază URL-ul MCP", - "copied": "Copiat!", - "copyHint": "Pentru ChatGPT, Claude Code sau orice client MCP", - "manualConfig": "Configurare manuală" } } } @@ -4954,47 +6958,12 @@ "title": "Export date sensibile", "warningTitle": "Acest export conține întreaga ta bază de date.", "warningBody": "Copia de rezervă include toți utilizatorii, secretele de integrare (criptate), cheile API, configurațiile planșelor și datele aplicațiilor. Păstrează fișierul exportat în siguranță și nu-l partaja.", - "typePrompt": "Tastați „{phrase}” pentru a continua", - "submit": "Exportă baza de date", - "cancel": "Anulează" + "submit": "Exportă baza de date" } }, "import": { "title": "Restaurează baza de date", - "description": "Încarcă o copie de rezervă ZIP exportată anterior pentru a restaura baza de date. Aceasta va înlocui întreaga ta bază de date. Dacă copia de rezervă a fost creată cu o cheie de criptare diferită, secretele vor fi re-criptate automat.", - "warning": "Restaurarea unei copii de rezervă va înlocui complet baza de date curentă și va reporni aplicația. Această acțiune nu poate fi anulată.", - "dropzone": { - "title": "Trage fișierul ZIP aici sau apasă pentru a căuta", - "description": "Sunt acceptate doar fișiere .zip de la o copie de rezervă SQLite Homarr" - }, - "changeFile": "Schimbă fișierul", - "button": "Restaurează baza de date", - "success": { - "title": "Restaurare completă", - "message": "Baza de date a fost restaurată cu succes. Aplicația se repornește..." - }, - "error": "Import eșuat" - }, - "preview": { - "title": "Conținutul copiei de rezervă", - "exported": "Exportat {date}", - "loading": "Se analizează fișierul de rezervă...", - "errorTitle": "Eroare de previzualizare", - "entity": "Entitate", - "count": "Număr", - "boards": "Planșe", - "entities": { - "board": "Planșe", - "user": "Utilizatori", - "app": "Aplicații", - "integration": "Integrări", - "item": "Widget-uri", - "media": "Media", - "search_engine": "Motoare de căutare" - }, - "analyzeError": "Nu s-a putut analiza fișierul de rezervă", - "invalidMissingMetadata": "Copie de rezervă invalidă: lipsește metadata.json", - "invalidMissingDb": "Copie de rezervă invalidă: lipsește db.sqlite" + "description": "Încarcă o copie de rezervă ZIP exportată anterior pentru a restaura baza de date. Aceasta va înlocui întreaga ta bază de date. Dacă copia de rezervă a fost creată cu o cheie de criptare diferită, secretele vor fi re-criptate automat." }, "restore": { "dropzone": { @@ -5004,29 +6973,20 @@ "analyzing": "Se analizează copia de rezervă...", "changeFile": "Schimbă fișierul", "continueToRestore": "Continuă la restaurare", - "tryAgain": "Încearcă din nou", "analysisError": "Eroare de analiză", "preview": { "title": "Conținutul copiei de rezervă", "exported": "Exportat {date}", "entity": "Entitate", "count": "Număr", - "boards": "Planșe", "entities": { - "board": "Planșe", - "user": "Utilizatori", - "app": "Aplicații", - "integration": "Integrări", - "item": "Widget-uri", - "media": "Media", - "search_engine": "Motoare de căutare" + "item": "Widget-uri" }, "migrationsApplied": "{count} migrare aplicată", "migrationsAppliedPlural": "{count} migrări aplicate", "migrationsOlderVersion": "Această copie de rezervă provine de la o versiune mai veche a Homarr. {count, plural, one {A fost aplicată o migrare de schemă} few {Au fost aplicate {count} migrări de schemă} other {Au fost aplicate {count} migrări de schemă}} pentru a o aduce la zi.", "migrationsOlderVersionPlural": "Această copie de rezervă provine de la o versiune mai veche Homarr. Au fost aplicate {count} migrări de schemă pentru a o aduce la zi.", "migrationsUpToDate": "Schema bazei de date este actualizată ({count} migrări aplicate)", - "upToDate": "Actualizat", "migrationsPending": "{count} în așteptare" }, "migration": { @@ -5037,21 +6997,21 @@ "title": "Acțiune distructivă", "warningTitle": "Aceasta va înlocui permanent întreaga ta bază de date.", "warningBody": "Toate planșele, utilizatorii, aplicațiile, integrările, setările și sesiunile curente vor fi pierdute. Această acțiune nu poate fi anulată. Aplicația va reporni după restaurare.", - "typePrompt": "Tastați „{phrase}” pentru a continua", - "cancel": "Anulează", "submit": "Restaurează baza de date" }, "progress": { "title": "Se restaurează baza de date...", - "extracting": "Se extrage arhiva de rezervă", - "migrating": "Se aplică migrările bazei de date", - "encrypting": "Se re-criptează secretele integrărilor", - "swapping": "Se înlocuiește fișierul bazei de date", - "restarting": "Se repornește serverul" + "restarting": "Se repornește serverul", + "relogin": "Restaurarea bazei de date a invalidat sesiunea curentă. Homarr vă va trimite să vă conectați atunci când serverul este gata." }, "complete": { "title": "Restaurare completă", - "message": "Baza de date a fost restaurată cu succes. Serverul se repornește — vă rugăm să reîmprospătați pagina în câteva secunde." + "message": "Baza de date a fost restaurată cu succes. Serverul se repornește — vă rugăm să reîmprospătați pagina în câteva secunde.", + "button": "Conectați-vă acum" + }, + "timeout": { + "title": "Serverul nu s-a întors online", + "message": "Restabilirea bazei de date s-a terminat, dar Homarr nu a mai devenit gata din nou. Verificați conexiunea sau reîmprospătați pagina manual." }, "failed": { "title": "Restaurare eșuată" @@ -5059,6 +7019,9 @@ "invalidMissingMetadata": "Copie de rezervă invalidă: lipsește metadata.json", "invalidMissingDb": "Copie de rezervă invalidă: lipsește db.sqlite", "analyzeError": "Nu s-a putut analiza copia de rezervă" + }, + "confirm": { + "typePrompt": "Scrie \"{phrase}\" pentru a continua" } } }, @@ -5093,7 +7056,11 @@ "toggleBoardEdit": "Comutare mod editare secţiune", "toggleColorScheme": "Comută modul lumină/întunecat", "saveNotebook": "Salvare notebook (doar în interiorul widget-ului pe notebook)", - "openSpotlight": "Deschide căutarea" + "openSpotlight": "Deschide căutarea", + "openSpotlightApps": "Deschideți căutarea aplicației", + "openSpotlightAssistant": "Mod asistent deschis", + "openSpotlightPreferences": "Deschide modul preferințe", + "openAssistant": "Asistent deschis" }, "note": "Sfat: Mod se referă atât la tasta Ctrl cât și la tasta q pe macOS" } @@ -5103,6 +7070,63 @@ }, "docker": { "title": "Containere", + "reconciliation": { + "title": "Setare Docker asistată", + "suggestions": "{count, plural, =0 {Nicio sugestie} one {# sugestie} other {# sugestii}}", + "attention": "{count} are nevoie de atenție", + "endpointUnavailable": "Unele servicii nu au putut fi verificate deoarece aceste criterii finale sunt indisponibile: {names}", + "empty": "Nu au fost găsite servicii docker vizibile.", + "emptyFilter": "Nu există servicii care să corespundă acestei vizualizări.", + "ambiguous": "Mai multe elemente existente se pot potrivi cu acest serviciu. Homarr nu va alege unul automat.", + "filter": { + "attention": "Necesită atenție", + "represented": "Deja configurat", + "all": "Toate" + }, + "state": { + "newRecognized": "Gata de conectare", + "newApp": "Serviciu nou", + "represented": "Deja reprezentat", + "linked": "Legat", + "moved": "Adresă schimbată" + }, + "url": { + "manual": "Introduceți o adresă manual" + }, + "health": { + "layer": { + "docker": "Doctor", + "integrationConfiguration": "Integrare", + "authentication": "Autentificare", + "apiRequest": "API", + "appRepresentation": "Aplicație", + "widgetConfiguration": "Widget", + "widgetQuery": "Interogare widget" + }, + "status": { + "available": "Disponibil", + "configured": "Configurat", + "linked": "Legat", + "missing": "Lipsă", + "changed": "Schimbat", + "unused": "Nu este folosit", + "notApplicable": "Nu este cazul", + "notObserved": "Nu s-a observat" + } + }, + "action": { + "review": "Revizuire", + "dismiss": "Renunţaţi", + "restoreDismissed": "Restaurare anulată ({count})", + "setupIntegration": "Configurați integrarea", + "reviewIntegration": "Revizuiește integrarea", + "viewRepresentation": "Vizualizare configurare" + }, + "loadError": { + "title": "Asistentul de configurare a Docker nu a putut fi încărcat", + "message": "Informațiile serviciului de Docker nu sunt disponibile. Încercați din nou fără a părăsi această pagină." + } + }, "table": { "updated": "Actualizat {when}", "refresh": { @@ -5115,9 +7139,6 @@ "totalMemory": "Total Mem: {memory}" }, "field": { - "name": { - "label": "Nume" - }, "state": { "label": "Stare", "option": { @@ -5131,9 +7152,6 @@ } }, "stats": { - "cpu": { - "label": "procesor" - }, "memory": { "label": "Memorie" } @@ -5196,8 +7214,11 @@ } }, "remove": { - "label": "Elimină", "confirm": "Click din nou pentru a elimina permanent", + "confirmation": { + "title": "{count, plural, one {Eliminați containerul # ?} other {Eliminați # containerele?}}", + "message": "{count, plural, one {Acest lucru elimină permanent containerul # {names}} other {Acest lucru elimină # containere: {names}}}" + }, "notification": { "success": { "title": "Recipiente eliminate", @@ -5209,8 +7230,13 @@ } } }, + "result": { + "failure": { + "title": "Unele acțiuni container au eșuat", + "message": "{total, plural, one {{failed} # acţiune a eşuat: {names}} other {{failed} # de acţiuni a eşuat: {names}}}" + } + }, "refresh": { - "label": "Împrospătează", "notification": { "success": { "title": "Recipiente reîmprospătate", @@ -5241,18 +7267,33 @@ }, "error": { "internalServerError": "Eșec la preluarea containerelor Docker", + "endpointUnavailable": "{count, plural, one {# Criteriu de evaluare Docker indisponibil: {names}} other {# Puncte Docker indisponibile: {names}}}", "noColumns": "Selectaţi cel puţin o coloană în setările widget-ului" } }, "kubernetes": { + "context": { + "label": "Contextul Kubernetes", + "loadError": { + "title": "Contextul Kubernetes nu a putut fi încărcat", + "message": "Informații contextuale sunt indisponibile. Încercați din nou fără a părăsi această pagină." + }, + "status": { + "available": "Disponibil", + "degraded": "Metrics unavailable", + "unavailable": "Unavailable" + }, + "unavailable": "Acest context Kubernetes nu poate fi atins. Selectați un alt context sau verificați acreditările și criteriul final.", + "metricsUnavailable": "Acest context este accesibil, dar Serverul de Metrics nu este disponibil. Inventarul rămâne disponibil fără procesor live și utilizarea memoriei." + }, "cluster": { "title": "Tablou de bord", "label": "Grup", "providers": "Furnizori", "version": "Versiune", - "architecture": "Arhitectură", "capacity": { "title": "Capacitate", + "metricsUnavailable": "Serverul de valori nu este disponibil. Inventarul și capacitatea rezervată rămân vizibile, dar procesorul live și utilizarea memoriei nu pot fi afișate.", "resource": { "reserved": "Rezervat", "used": "Utilizat" @@ -5271,38 +7312,10 @@ } }, "nodes": { - "label": "Nodes", "field": { - "name": { - "label": "Nume" - }, - "state": { - "label": "Județ", - "option": { - "ready": "Gata", - "NotReady": "Nu este gata" - } - }, - "cpu": { - "label": "procesor" - }, - "memory": { - "label": "RAM" - }, - "pods": { - "label": "Poze" - }, - "operatingSystem": { - "label": "SG" - }, - "architecture": { - "label": "Arhitectură" - }, + "metricsUnavailable": "Unavailable", "kubernetesVersion": { "label": "Versiune Kubernetes" - }, - "creationTimestamp": { - "label": "Creat" } }, "table": { @@ -5310,43 +7323,17 @@ } }, "namespaces": { - "label": "Numespaces", - "field": { - "name": { - "label": "Nume" - }, - "state": { - "label": "Județ", - "option": { - "active": "Activ", - "terminating": "Terminare" - } - }, - "creationTimestamp": { - "label": "Creat" - } - }, "table": { "search": "Căutare {count} spații de nume" } }, "ingresses": { - "label": "Ingrese", "field": { - "name": { - "label": "Nume" - }, - "namespace": { - "label": "Numespace" - }, "className": { "label": "Numele clasei" }, "rulesAndPaths": { "label": "Reguli și căi" - }, - "creationTimestamp": { - "label": "Creat" } }, "table": { @@ -5354,17 +7341,7 @@ } }, "services": { - "label": "Servicii", "field": { - "name": { - "label": "Nume" - }, - "namespace": { - "label": "Numespace" - }, - "type": { - "label": "Tip" - }, "ports": { "label": "Porturi" }, @@ -5373,9 +7350,6 @@ }, "clusterIP": { "label": "IP cluster" - }, - "creationTimestamp": { - "label": "Creat" } }, "table": { @@ -5383,25 +7357,12 @@ } }, "pods": { - "label": "Poze", "field": { - "name": { - "label": "Nume" - }, - "namespace": { - "label": "Numespace" - }, "image": { "label": "Imagine" }, "applicationType": { "label": "Tipul aplicației" - }, - "status": { - "label": "Status" - }, - "creationTimestamp": { - "label": "Creat" } }, "table": { @@ -5409,51 +7370,17 @@ } }, "secrets": { - "label": "Secrete", - "field": { - "name": { - "label": "Nume" - }, - "namespace": { - "label": "Spațiu de nume" - }, - "type": { - "label": "tip" - }, - "creationTimestamp": { - "label": "Creat" - } - }, "table": { "search": "Căutare {count} secrete" } }, "configmaps": { - "label": "ConfigMaps", - "field": { - "name": { - "label": "Nume" - }, - "namespace": { - "label": "Spațiu de nume" - }, - "creationTimestamp": { - "label": "Creat" - } - }, "table": { "search": "Căutare {count} configurație Hărți" } }, "volumes": { - "label": "Volume", "field": { - "name": { - "label": "Nume" - }, - "namespace": { - "label": "Numespace" - }, "accessModes": { "label": "Modul de acces" }, @@ -5468,12 +7395,6 @@ }, "volumeName": { "label": "Denumire volum" - }, - "status": { - "label": "Status" - }, - "creationTimestamp": { - "label": "Creat" } }, "table": { @@ -5482,6 +7403,29 @@ }, "error": { "internalServerError": "Nu s-a reușit preluarea datelor Kubernetes" + }, + "field": { + "name": { + "label": "Numele postului" + }, + "namespace": { + "label": "Numespace" + }, + "creationTimestamp": { + "label": "Creat" + }, + "state": { + "label": "Stare Job" + }, + "status": { + "label": "Status" + }, + "type": { + "label": "Descarcă tipul de client" + }, + "architecture": { + "label": "Arhitectură" + } } }, "permission": { @@ -5515,71 +7459,27 @@ }, "navigationStructure": { "manage": { - "workshop": { - "label": "Workshop" - }, "label": "Gestionați", - "boards": { - "label": "Planșe" - }, - "integrations": { - "label": "Integrări", + "custom-widgets": { "edit": { - "label": "Editare" + "flow": { + "label": "Fluxuri" + } }, - "new": { - "label": "Nou" - } - }, - "search-engines": { - "label": "Motoare de căutare", - "new": { - "label": "Nou" + "workshop": { + "label": "Atelier" }, - "edit": { - "label": "Editare" - } - }, - "medias": { - "label": "Medias" - }, - "apps": { - "label": "Aplicații", - "new": { - "label": "Nou" - }, - "edit": { - "label": "Editare" + "publish": { + "label": "Publică în Atelier" } }, "users": { - "label": "Utilizatori", - "create": { - "label": "Creează" - }, "general": "Generalități", - "security": "Securitate", - "board": "Planșe", - "groups": { - "label": "Grupuri" - }, - "invites": { - "label": "Invitații" - } + "security": "Securitate" }, "tools": { "label": "Unelte", - "tasks": { - "label": "Sarcini" - }, - "docker": { - "label": "Doctor", - "logs": { - "label": "Jurnale" - } - }, "kubernetes": { - "label": "Kubernetes", "nodes": { "label": "Nodes" }, @@ -5605,11 +7505,7 @@ "label": "Volume" } }, - "logs": { - "label": "Jurnale" - }, "certificates": { - "label": "Certificate", "hostnames": { "label": "Nume gazdă" } @@ -5620,12 +7516,60 @@ }, "about": { "label": "Despre" + }, + "assistant": { + "label": "Asistent" } } }, "search": { "placeholder": "Caută orice", "nothingFound": "Nimic găsit", + "modePicker": { + "search": { + "label": "Caută", + "placeholder": "Căutare aplicații, secțiuni, pagini, comenzi și preferințe" + }, + "apps": { + "label": "Aplicații", + "placeholder": "Caută aplicații, secțiuni și integrări" + }, + "command": { + "label": "Comenzi", + "placeholder": "Acțiuni de căutare și comenzi" + }, + "preferences": { + "label": "Preferințe", + "placeholder": "Caută și schimbă preferințele" + }, + "assistant": { + "label": "Asistent", + "placeholder": "Asistent de întrebări" + }, + "external": { + "label": "Web", + "placeholder": "Căutare cu un motor de căutare extern" + }, + "media": { + "label": "Media", + "placeholder": "Caută un film sau o emisiune", + "fallback": "Căutare media pentru \"{query}\"" + }, + "userGroup": { + "label": "Oameni", + "placeholder": "Căutare utilizatori și grupuri" + }, + "continueWith": "Continuați cu", + "dialogAriaLabel": "{mode} meniu comandă", + "navigationLabel": "Moduri de căutare", + "modeAriaLabel": "Modul {mode}", + "resultsAriaLabel": "{mode} rezultate", + "footer": { + "navigate": "Navigate", + "open": "Deschideți", + "close": "Inchide" + } + }, "error": { "fetch": "A apărut o eroare la preluarea datelor" }, @@ -5634,7 +7578,6 @@ "help": "Caută aplicații, integrări sau secțiuni", "group": { "app": { - "title": "Aplicații", "children": { "action": { "open": { @@ -5650,7 +7593,6 @@ } }, "board": { - "title": "Planșe", "children": { "action": { "open": { @@ -5670,9 +7612,6 @@ "title": "Selectează o acțiune pentru tablă" } } - }, - "integration": { - "title": "Integrări" } } }, @@ -5701,9 +7640,6 @@ "newBoard": { "label": "Creează o nouă secţiune" }, - "importBoard": { - "label": "Importă o secţiune" - }, "newApp": { "label": "Creează o aplicație nouă" }, @@ -5773,7 +7709,6 @@ } }, "defaultSearchEngineId": { - "label": "Motor de căutare implicit", "children": { "detail": { "title": "Selectați motorul de căutare implicit" @@ -5781,7 +7716,6 @@ } }, "openSearchInNewTab": { - "label": "Deschide rezultatele căutării într-o filă nouă", "children": { "detail": { "title": "Deschide rezultatele căutării într-o filă nouă" @@ -5789,7 +7723,6 @@ } }, "ddgBangs": { - "label": "Activează bang-urile DuckDuckGo", "children": { "detail": { "title": "Activează bang-urile DuckDuckGo" @@ -5804,6 +7737,13 @@ } } }, + "byteUnitSystem": { + "children": { + "detail": { + "title": "Selectați unitățile de dimensiune a datelor" + } + } + }, "homeBoardId": { "label": "Planșa principală", "children": { @@ -5821,7 +7761,6 @@ } }, "pingIconsEnabled": { - "label": "Folosește pictograme pentru ping-uri", "children": { "detail": { "title": "Folosește pictograme pentru ping-uri" @@ -5829,7 +7768,6 @@ } }, "enableRightClickOnWidgets": { - "label": "Activează clic-dreapta pe widget-uri", "children": { "detail": { "title": "Activează clic-dreapta pe widget-uri" @@ -5857,6 +7795,7 @@ "description": "Începeți să tastați pentru a căuta în integrările de solicitare media", "disabled": { "noIntegration": "Adăugați o integrare Overseerr, Jellyseerr sau Seerr pentru a activa căutarea media.", + "signInRequired": "Conectați-vă pentru a căuta integrările solicitărilor media.", "scoped": "Acest widget nu are o integrare de solicitare media accesibilă." } } @@ -5873,7 +7812,6 @@ "help": "Utilizați un motor de căutare extern", "group": { "searchEngine": { - "title": "Motoare de căutare", "tipDdgBangs": "Sfat: puteți folosi orice bang DuckDuckGo și aici, de ex. !ceva", "bang": { "searchWithQuery": "Caută „{query}” cu {label}", @@ -5924,20 +7862,6 @@ "group": { "mode": { "title": "Moduri" - }, - "help": { - "title": "Ajutor", - "option": { - "documentation": { - "label": "Documentație" - }, - "submitIssue": { - "label": "Trimite o problema" - }, - "discord": { - "label": "Comunitatea Discord" - } - } } } }, @@ -5949,9 +7873,10 @@ "other": { "label": "Căutare cu un alt motor de căutare" }, - "no-default": { - "label": "Niciun motor de căutare implicit", - "description": "Setați un motor de căutare implicit în preferințe" + "no-engines": { + "label": "Niciun motor de căutare configurat", + "descriptionCreate": "Adăugați un motor de căutare pentru a căuta din meniul de comenzi", + "descriptionUnavailable": "Cere unui administrator să configureze un motor de căutare" }, "search": { "label": "Caută \"{query}\" cu {name}" @@ -6031,7 +7956,6 @@ "help": "Caută utilizatori sau grupuri", "group": { "user": { - "title": "Utilizatori", "children": { "action": { "detail": { @@ -6044,7 +7968,6 @@ } }, "group": { - "title": "Grupuri", "children": { "action": { "detail": { @@ -6068,9 +7991,6 @@ "engine": { "search": "Găsește un motor de căutare", "field": { - "name": { - "label": "Nume" - }, "short": { "label": "Scurt" }, @@ -6083,12 +8003,19 @@ }, "page": { "list": { - "title": "Motoare de căutare", + "ariaLabel": "Motoare de căutare configurate", "noResults": { "title": "Nu există încă motoare de căutare", - "action": "Creați primul dvs. motor de căutare" + "description": "Motoarele de căutare permit Spotlight să trimită o interogare către un site sau un serviciu conectat.", + "action": "Creați primul dvs. motor de căutare", + "filteredTitle": "Niciun motor de căutare nu se potrivește căutării", + "filteredDescription": "Nici un motor de căutare nu se potrivește cu \"{search}\". Încercați un alt nume sau URL." }, - "interactive": "Interactiv, folosește o integrare" + "interactive": "Interactiv, folosește o integrare", + "type": { + "generic": "Șablon URL", + "fromIntegration": "Integrare" + } }, "create": { "title": "Motor de căutare nou", @@ -6107,11 +8034,9 @@ "title": "Editare motor de căutare", "notification": { "success": { - "title": "Modificări aplicate cu succes", "message": "Motorul de căutare a fost salvat cu succes" }, "error": { - "title": "Imposibil de aplicat modificările", "message": "Motorul de căutare nu a putut fi salvat" } }, @@ -6250,6 +8175,10 @@ } }, "log": { + "context": { + "widgetError": "Widgetul a raportat o eroare în jurul acestui timp", + "expiredWidgetError": "Jurnalele din jurul acestei erori de widget nu mai sunt reținute" + }, "level": { "option": { "debug": "Debug", @@ -6261,7 +8190,6 @@ }, "onboardingTour": { "learnMore": "Citiți documentația", - "next": "Următorul", "prev": "Înapoi", "done": "Gata", "skip": "Omite turul", @@ -6325,5 +8253,359 @@ "description": "Schimbă schema de culori, limba, planșa principală și preferințele. Poți de asemenea să sari în zona de administrare de aici." } } + }, + "metadata": { + "description": "Un tablou de bord auto-găzduit pentru *stiva arr și întregul tău homelab. Integrate cu peste 50+ servicii, widget-uri în timp real, fără fișiere de configurare.", + "dashboardTitle": "{appName} tablou de bord" + }, + "assistant": { + "title": "Asistent", + "open": "Asistent deschis", + "close": "Asistent de închidere", + "minimize": "Minimizează asistentul", + "spotlight": "Asistent de întrebări", + "spotlightDescription": "Tastați și trimiteți o promptitudine fără a părăsi meniul de comandă.", + "spotlightPrompt": { + "title": "Asistent de întrebări", + "description": "Scrie o comandă de mai sus. Introdu trimite în fundal.", + "send": "Trimite solicitare", + "empty": "Introduceți o solicitare de mai sus" + }, + "unavailable": { + "checking": "Se verifică dacă asistentul este disponibil…", + "error": "Disponibilitatea asistentului nu a putut fi verificată. Încercați din nou.", + "notConfigured": "Un administrator trebuie să configureze și să activeze asistentul mai întâi.", + "signIn": "Conectează-te pentru a utiliza Asistentul." + }, + "newConversation": "Conversație nouă", + "conversations": "Conversații", + "conversationActions": "Acțiuni conversație", + "searchConversations": "Caută conversații", + "noMatchingConversations": "Nicio conversație potrivită", + "moreActions": "Mai multe acțiuni de răspuns", + "renameConversation": { + "action": "Redenumire", + "label": "Nume conversație", + "save": "Salvează numele", + "failedTitle": "Conversația nu a putut fi redenumită", + "failedDescription": "Homarr nu a putut redenumi această conversație. Încercați din nou." + }, + "deleteConversation": { + "title": "Ștergeți conversația?", + "description": "„{title}” și mesajele sale vor fi șterse definitiv.", + "failedTitle": "Conversația nu a putut fi ștearsă", + "failedDescription": "Homarr nu a putut șterge această conversație. Încercați din nou." + }, + "closeHistory": "Închide istoricul conversațiilor", + "openHistory": "Deschide istoricul conversațiilor", + "emptyTitle": "Cu ce pot să ajut?", + "emptyDescription": "Întrebați despre configurarea Homarr, inspectați datele instanței în timp real, sau aprobați acțiunile când doriți să fac o schimbare.", + "suggestions": { + "health": { + "label": "Verifică sănătatea serviciului", + "prompt": "Verifică-mi integrările şi rezumă orice are nevoie de atenţie." + }, + "explore": { + "label": "Explorează Homarr", + "prompt": "Arată-mi ce pot vedea şi gestiona în această instanţă Homarr." + }, + "media": { + "label": "Găsește fișierele media pentru a solicita", + "prompt": "Ajută-mă să găsesc un film sau o serie pentru a solicita." + }, + "style": { + "label": "Îmbunătățește un tablou de bord", + "prompt": "Ajută-mă să îmbunătățesc aspectul unei secțiuni sau CSS personalizat. Arată-mi mai întâi secțiunile mele, apoi păstrează-mi setările curente în timp ce facem modificarea." + }, + "designWidget": { + "label": "Proiectați un widget", + "prompt": "Creează și instalează un widget personalizat pentru " + } + }, + "composerPlaceholder": "Întreabă Asistentul…", + "runtime": { + "model": "Model", + "searchModels": "Căutare modele", + "noModels": "Nu există modele disponibile", + "otherModels": "Alte modele", + "imageInput": "Acceptă introducerea de imagini", + "thinking": "Mod gândire", + "reasoning": { + "auto": "Automat", + "none": "Dezactivat", + "minimal": "Minimă", + "low": "scazut", + "medium": "Mediu", + "high": "Ridicat" + } + }, + "providerQuota": { + "title": "Furnizor de homarr", + "communityWorkshop": "Atelier de comunitate", + "dailyAllowance": "Cerere zilnică de reducere", + "remainingLabel": "{remaining} de {limit} Solicitări de furnizor de homarr rămase", + "loading": "Se încarcă indemnizația pentru furnizorul de homarr", + "signInRequired": "Conectare la atelier necesară pentru furnizorul Homarr", + "signInDescription": "Conectați-vă cu GitHub prin Atelierul comunitar pentru a primi indemnizația zilnică separată.", + "exhaustedDescription": "Alocația dvs. de furnizor de servicii de acasă este folosită astăzi. Se resetează la miezul nopții UTC.", + "unavailableDescription": "Conectați-vă la Atelier sau așteptați resetarea indemnizației de furnizor Homarr.", + "signIn": "Conectați-vă cu GitHub", + "signInError": "Conectarea GitHub nu a reușit. Încercați din nou imediat.", + "loadError": "Alocația pentru furnizorul de azil nu a putut fi încărcată.", + "reset": "Resetează {relative} la ", + "toolCalls": "Fiecare cerere de model și apel de instrumente completat folosește o cerere.", + "retry": "Reîncarcă alocația", + "level": { + "ok": "Ok", + "warning": "Avertizare", + "bad": "scazut", + "dead": "Utilizat" + } + }, + "stop": "Oprește răspunsul", + "send": "Trimite mesaj", + "copy": "Copiază răspunsul", + "copyMessage": "Copiază mesajul", + "editMessage": "Editare mesaj", + "updateMessage": "Actualizare mesaj", + "regenerate": "Regenerează răspunsul", + "helpful": "Util", + "notHelpful": "Nu este de ajutor", + "readAloud": "Citiți cu voce tare răspunsul", + "stopReading": "Oprește răspunsul de citire", + "feedbackError": "Feedback-ul dvs. nu a putut fi salvat. Încercați din nou.", + "exportMarkdown": "Exportă ca Markdown", + "exportConversation": { + "action": "Exportă conversația ca Markdown", + "failedTitle": "Conversația nu a putut fi exportată", + "failedDescription": "Homarr nu a putut încărca această conversație. Încercați din nou." + }, + "reasoning": "Gândire", + "previousResponse": "Răspunsul anterior", + "nextResponse": "Următorul răspuns", + "removeAttachment": "Elimină atașamentul", + "downloadFile": "Descarcă {name}", + "attachedImage": "Imagine atașată", + "externalImageBlocked": "Imaginea externă este blocată pentru confidențialitate", + "image": { + "loading": "Încărcare imagine", + "failed": "Această imagine nu a putut fi încărcată.", + "retry": "Încearcă imaginea din nou" + }, + "quoteSelection": "Ofertă", + "dismissQuote": "Elimină oferta", + "attachments": { + "add": "Atașează o imagine sau un document", + "errorTitle": "Atașamentul nu a putut fi adăugat", + "imageUnsupported": "Modelul selectat nu suportă introducerea imaginii." + }, + "mentions": { + "menu": "Adaugă context Homarr", + "context": "Context", + "app": "Aplicații", + "integration": "Integrări", + "board": "Planșe", + "widget": "Widget-uri", + "tools": "Instrumente disponibile" + }, + "markdown": { + "diagram": "Diagrama", + "renderingDiagram": "Redare diagrama…", + "diagramUnavailable": "Această diagramă nu a putut fi randată." + }, + "commands": { + "menu": "Comenzi asistente", + "health": "Pregătiți un control al stării de sănătate", + "explore": "Pregătiți o prezentare generală a acestei instanțe Homarr", + "media": "Pregătiți o căutare media", + "style": "Pregătiți aspectul forumului sau schimbarea personalizată a CSS", + "designWidget": "Pregătiți o versiune de Widget personalizat pentru o singură dată" + }, + "usage": { + "tokens": "jetoane", + "contextWindow": "Fereastră contextuală", + "requestDetails": "Detaliile cererii", + "used": "Ultimul pas", + "remaining": "Rămas", + "capacity": "Capacitate", + "input": "Input", + "output": "Ieșire", + "cached": "Intrare cache", + "cacheWrite": "Scriere cache", + "reasoning": "Motivare", + "inputShort": "în", + "outputShort": "afară", + "cachedShort": "geocutie", + "reasoningShort": "raționament", + "firstOutput": "Prima ieşire", + "homarrTiming": "Homarr observat", + "endToEnd": "Sfârșit până la sfârșit", + "observedThroughput": "Trecere observata", + "providerTiming": "Furnizor raportat", + "loadingProviderDetails": "Se încarcă detaliile generării…", + "providerDetailsPending": "OpenRouter încă procesează unele detalii de generare. Redeschide pentru a reîncerca.", + "providerLatency": "Furnizor latență", + "generationTime": "Timp de generare", + "moderationLatency": "Moderare", + "providerThroughput": "Furnizor de debit", + "fallbacks": "Căderi", + "fallbackLatency": "Latență de cădere", + "cacheDiscount": "Reducere cache", + "normalizedTokens": "Intrare / ieșire OpenRouter normalizată", + "byok": "BYOK", + "cost": "Cost", + "reported": "Raportat de furnizor", + "estimated": "Estimat de la modelul de tarifare", + "upstreamCost": "Inferență în amonte", + "webSearches": "Căutări pe internet", + "finishReason": "Motivul de încheiere", + "notReported": "Nu a fost raportat", + "agentSteps": "Pașii agentului", + "step": "Pasul {number}", + "generation": "Generare" + }, + "toolInput": "Input", + "toolOutput": "Ieșire", + "toolActivity": { + "iconSearch": "Căutați pictograme „{query}”", + "iconBrowse": "Navigare pictograme disponibile" + }, + "toolNavigation": { + "openPreview": "Deschide previzualizarea", + "openWidget": "Deschide widget" + }, + "webSearch": { + "title": "Căutare pe web", + "completed": "OpenRouter a căutat live web pentru acest răspuns.", + "searches": "{count, plural, one {# caută} other {# căutări}}", + "sources": "{count, plural, one {# sursă} other {# surse}}" + }, + "responseError": { + "title": "Asistentul nu a putut termina", + "description": "Încercați din nou. Dacă problema continuă, cereți administratorului să verifice criteriul final configurat al modelului." + }, + "toolPreparationError": { + "title": "Această solicitare nu a putut fi pregătită", + "description": "Modelul s-a oprit înainte de a furniza detalii complete. Reîncercați răspunsul sau descrieți din nou cererea. Nu a fost făcută nicio modificare." + }, + "busy": { + "title": "Asistentul deja functioneaza", + "description": "Așteptați răspunsul curent sau deschideți-l pentru a opri rularea." + }, + "pendingAction": { + "answerTitle": "Răspuns necesar", + "answerFallback": "Alege un răspuns pentru a continua", + "formTitle": "Revizuiește detaliile aplicației", + "boardFormTitle": "Revizuiește modificările la bord", + "review": "Revizuire", + "sendBlocked": "Rezolvați cererea în așteptare înainte de a trimite" + }, + "activity": { + "thinking": "Asistentul gândeşte", + "working": "Lucrând la solicitarea dvs.", + "ready": "Răspuns pregătit", + "completed": "Deschide răspunsul", + "approval": "Aprobare necesară", + "failed": "Asistentul are nevoie de atenție", + "expand": "Deschide răspunsul asistentului", + "dismiss": "Renunţă la activitatea asistentului" + }, + "scrollToLatest": "Derulează la ultima", + "refresh": { + "action": "Reîmprospătează vizualizarea curentă", + "working": "Reîmprospătare vizualizare curentă", + "completeTitle": "Vezi reîmprospătat", + "completeDescription": "Datele de pe Homarr vizibile au fost reîncărcate.", + "failedTitle": "Vizualizarea nu a putut fi reîmprospătată", + "failedDescription": "Schimbarea poate fi încă salvată. Încercați din nou acțiunea de reîmprospătare." + }, + "askUser": { + "preparing": "Se pregătește întrebarea", + "answered": "Răspunsul tău", + "other": "Altele", + "otherLabel": "Răspunsul tău", + "otherPlaceholder": "Introduceți un alt răspuns…", + "submit": "Trimite răspuns", + "cancelOther": "Anulează alt răspuns", + "optionKind": { + "affirmative": "Confirma", + "negative": "Refuzați", + "alternative": "Opţiune", + "custom": "Personalizat" + } + }, + "configureApp": { + "title": "Revizuiește detaliile aplicației", + "description": "Alegeți o pictogramă locală și ajustați orice înainte ca asistentul să solicite aprobarea creării.", + "preparing": "Se pregătesc detaliile aplicației", + "continue": "Utilizați aceste detalii", + "ready": "Detalii aplicație gata", + "automaticContinue": "Folosirea automată a acestor detalii ale aplicației" + }, + "configureBoardSettings": { + "title": "Revizuiește modificările la bord", + "loading": "Se încarcă setările forumului curent", + "loadErrorTitle": "Setările forumului nu au putut fi încărcate", + "loadErrorDescription": "Secţiunea nu mai există, sau este posibil să nu aveţi permisiunea să o modificaţi.", + "proposedCount": "Asistent a propus câmpurile {count}", + "changeCount": "{count} modificări gata", + "ready": "Schimbări la bord gata", + "cancelled": "Setări curente ale secţiunii păstrate", + "noChanges": "Nicio setare nu se va schimba", + "keepCurrent": "Păstrați setările curente", + "continue": "Continuați spre aprobare", + "automaticContinue": "Acceptarea automată a modificărilor propuse la bord", + "resetAll": "Resetează toate modificările", + "tabs": { + "css": "Custom CSS", + "appearance": "Aspect", + "background": "Fundal", + "general": "Generalități" + }, + "cssDescription": "Editați stilul complet. Regulile existente sunt păstrate dacă nu sunt eliminate aici.", + "cssCharacters": "{count} de 16384 de caractere", + "copyCss": "Copy CSS", + "copied": "Copiat", + "restoreCss": "Restore current CSS", + "remoteCssTitle": "Acest CSS încarcă o resursă de la distanță", + "remoteCssDescription": "Foi de stil importate și URL-uri la distanță contactați un alt server atunci când se încarcă tabla. Examinați-le înainte de a continua." + }, + "configureWidget": { + "title": "Examinați widget-ul", + "preparing": "Pregătire setări widget", + "review": "Examinați widget-ul și integrările", + "ready": "Configurarea widgetului este gata", + "cancelled": "Widgetul nu a fost adăugat", + "automaticContinue": "Se acceptă automat configurarea widgetului propus", + "definitionLoadErrorTitle": "Setările de widget nu au putut fi încărcate", + "definitionLoadErrorDescription": "Homarr nu a putut încărca setările acestui widget. Încercați din nou.", + "loadErrorTitle": "Integrările nu au putut fi încărcate", + "loadErrorDescription": "Homarr nu a putut încărca integrările disponibile pentru acest widget.", + "noIntegrationTitle": "Este necesară o integrare compatibilă", + "noIntegrationDescription": "Configurați o integrare acceptată de acest widget înainte de a o adăuga la tabloul de bord.", + "connectIntegration": "Conectare serviciu", + "manageIntegrations": "Gestionează integrările", + "skip": "Nu adăuga", + "errorTitle": "Setările de widget nu au putut fi pregătite", + "errorDescription": "Modelul nu a furnizat o configurație completă a widget-ului. Nici un widget nu a fost adăugat." + }, + "approvalRequired": "Aprobare necesară", + "complete": "Complete", + "denied": "Refuzat", + "failed": "Eșuat", + "working": "Munca", + "approvalDescription": "Examinați această modificare înainte de a rula.", + "approveAndRun": "Aprobă și rulează", + "deny": "Refuză", + "autoApproval": { + "label": "Aprobări automate", + "composerLabel": "Aproba pentru mine", + "title": "Aprobări automate", + "description": "Pregătiți automat formulare și aprobați modificările protejate pentru această conversație. Întrebările încă aşteaptă răspunsul şi permisiunile pentru Homarr încă se aplică. Acest lucru se opreşte atunci când comutaţi conversaţiile.", + "enable": "Activează pentru această conversație", + "disable": "Opriți automat aprobările", + "enabled": "Aprobările automate sunt activate", + "approving": "Aprobare automată" + } } } diff --git a/packages/translation/src/lang/ru.json b/packages/translation/src/lang/ru.json index 019ac40ec..d4fe82bd7 100644 --- a/packages/translation/src/lang/ru.json +++ b/packages/translation/src/lang/ru.json @@ -1,156 +1,246 @@ { "init": { - "step": { - "start": { - "title": "Добро пожаловать в Homarr", - "subtitle": "Давайте начнем настройку вашего экземпляра Homarr.", - "description": "Для начала выберите, как вы хотите настроить ваш экземпляр Homarr.", - "action": { - "scratch": "Начать с нуля", - "importOldmarr": "Импортировать из Homarr версии до 1.0", - "restoreSqlite": "Восстановить из резервной копии SQLite", - "restoreSqliteDescription": "Загрузите полную резервную копию базы данных SQLite из предыдущего экземпляра Homarr. Это восстановит все панели, пользователей, приложения, интеграции и настройки.", - "backToOptions": "← Назад к вариантам настройки" + "studio": { + "navigationLabel": "Разделы посадки", + "back": "Назад", + "buildBoard": "Создать доску", + "common": { + "unknownError": "Что-то пошло не так. Ваши варианты по-прежнему находятся здесь; попробуйте еще раз." + }, + "claim": { + "checking": "Обеспечение этого посадочного материала…", + "checkingTitle": "Подготовка безопасных настроек", + "lockedTitle": "Установка открыта в другом браузере", + "lockedDescription": "Продолжайте или дождитесь окончания безопасного первого запуска, прежде чем попытаться снова.", + "signInTitle": "Требуется вход администратора", + "signInDescription": "Администратор уже существует. Войдите, чтобы возобновить установку без предоставления доступа к данным или службе.", + "signIn": "Войдите и возобновите", + "errorTitle": "Настройка не может быть защищена", + "errorDescription": "Перезагрузите страницу, чтобы повторить безопасное первое запуска." + }, + "navigation": { + "essentials": "Основное", + "discover": "Узнайте", + "connect": "Подключиться", + "board": "Доска", + "extend": "Продлить", + "review": "Проверка" + }, + "welcome": { + "title": "Добро пожаловать домой.", + "description": "Добро пожаловать в Homarr v{version}. Мы проведем вас через необходимые материалы и поможем вам создать свою первую доску.", + "start": "Начать работу", + "restore": "Восстановить резервную копию", + "restoreTitle": "Восстановить из резервной копии", + "restoreDescription": "Полная резервная копия SQLite восстанавливает доски, людей, приложений, интеграцию и настройки. Homarr проверяет ее перед тем, как заменить.", + "errorTitle": "Установка не может быть запущена", + "errorDescription": "Здесь все еще есть ваши настройки. Попробуйте еще раз или перезагрузите страницу, если она продолжится." + }, + "account": { + "title": "Создайте администратора", + "description": "Укажите учетные данные для администратора системы.", + "username": "Имя администратора", + "passwordHint": "Требуется минимум 8 символов. Рекомендуются другие проверки пароля.", + "create": "Создать администратора", + "errorTitle": "Администратор не может быть создан", + "recoveryTitle": "Учетная запись администратора создана", + "recoveryDescription": "Автоматическая авторизация не завершена. Войдите в систему с учётными данными администратора, которые вы только что создали для продолжения установки.", + "recoveryAction": "Войдите и продолжите", + "unknownError": "Администратор не может быть создан." + }, + "externalGroup": { + "title": "Подключить группу администратора", + "description": "Используйте точное имя группы, отправленное LDAP или OIDC. Члены этой группы получают права администратора.", + "name": "Группа внешних администраторов", + "nameDescription": "Это чувствительно к регистру и должно соответствовать вашему поставщику идентификационных данных.", + "continue": "Сохранить группу и продолжить", + "errorTitle": "Группа не может быть сохранена", + "unknownError": "Группа администратора не может быть сохранена." + }, + "essentials": { + "title": "Начать с знакомыми по умолчанию", + "description": "Сначала установите язык и внешний вид всех видит, а затем дайте Homarr шаблону адреса, используемому вашими службами.", + "language": "Язык по умолчанию", + "theme": "Тема по умолчанию", + "themeAuto": "Система", + "themeLight": "Светлая", + "themeDark": "Тёмная", + "serverOriginHelp": "Homarr использует этот адрес для предварительного заполнения обнаруженных URL-адресов сервиса. Вы по-прежнему можете редактировать каждый сервис индивидуально.", + "serverDescription": "Это ярлык, а не ограничение. Каждый обнаруженный сервис остается редактируемым.", + "serverOrigin": "Путь к домену, IP или обратному прокси-серверу", + "serverOriginDescription": "Примеры: home.lan, 192.168.1.10 или https://home.example.com/services. Выберите, как каждый сервис добавляется ниже.", + "analytics": "Поделиться анонимной аналитикой товаров", + "analyticsDescription": "Помогает Homarr улучшить надежность. Нет учетных данных службы или содержимого приборной панели отправляются." + }, + "discover": { + "title": "Посмотреть, что может получить эта установка", + "description": "Homarr проверяет возможности на месте. Отсутствующий Docker сокет или контекст Kubernetes никогда не блокирует ручную настройку.", + "database": "База данных", + "docker": "Docker и совместимые сокеты", + "kubernetes": "Kubernetes", + "assistantWorkshop": "Помощник и практикум", + "found": "Найдено {integrations} интеграций и {apps} дополнительных приложений", + "retryKubernetes": "Проверьте Kubernetes снова", + "retryWorkshop": "Проверьте мастерскую снова", + "unknownVersion": "неизвестная версия", + "kubernetesAvailable": "Подключено к {version} Kubernetes", + "kubernetesDisabled": "Не включено; продолжить работу с Docker или ручным сервисом", + "kubernetesUnavailable": "Kubernetes включен, но не может быть достигнут из этого процесса Homarr", + "workshopAvailable": "Общинный семинар-практикум и принимающий помощник доступны", + "workshopUnavailable": "Местный и таможенный помощник остается доступным", + "partialTitle": "Некоторые источники не могут быть отсканированы", + "partialDescription": "Результаты из доступных хостов сохраняются. Проверьте разрешения сокета или вручную добавьте службы в следующем разделе.", + "status": { + "checking": "Проверка доступности…", + "available": "Доступно", + "partial": "Частично доступен", + "empty": "Доступно, не соответствует запущенным сервисам", + "disabled": "Отключено по конфигурации сервера", + "unavailable": "Недоступно из этого процесса Homarr" } }, - "import": { - "title": "Импорт данных", - "subtitle": "Вы можете импортировать данные из существующего экземпляра Homarr.", - "dropzone": { - "title": "Перетащите ZIP-файл сюда или нажмите для его выбора", - "description": "Загруженный ZIP-файл будет обработан, и вы сможете выбрать, что хотите импортировать" + "connect": { + "title": "Подключите что делает доску полезной", + "description": "Выберите несколько сервисов одновременно. Метки Docker занимают приоритет, изображения заполняют пробелы, и каждый URL и учетные данные остаются проверяемыми.", + "discoveredIntegrations": "Обнаружены экземпляры интеграции ({count})", + "detectedIntegrationLabel": "Импорт {name}, обнаружен как {kind}", + "detectedAppLabel": "Импорт обнаружен приложение {name}", + "otherIntegrations": "Добавить другую интеграцию", + "configureIntegrations": "Настройка интеграции", + "discoveredApps": "Обнаруженные приложения ({count})", + "appAddressRequired": "Добавьте адрес для {name}, или удалите его из выделения.", + "empty": "Интеграции не выбраны. Homarr всё равно создаст полезную стартовую доску с общими виджетами.", + "dockerSource": "Docker", + "manualSource": "Ручной", + "url": "URL-адрес сервиса", + "noCredentials": "Нет учетных данных", + "noCredentialsDescription": "Эта интеграция не требует учетных данных.", + "credentialMethod": "Метод авторизации", + "getApiKey": "Открыть настройки ключа API для этой службы", + "openGuide": "Открыть руководство по настройке Homarr для этого сервиса", + "testConnection": "Проверить соединение", + "testSuccess": "Соединение работает", + "testSuccessDescription": "Homarr связан с текущим адресом и учетными данными.", + "testError": "Ошибка подключения", + "testErrorDescription": "Проверьте адрес службы и учетные данные, а затем повторите попытку.", + "needsConfiguration": "Требуется конфигурация", + "tested": "Проверено подключение", + "testFailed": "Проверка соединения не удалась", + "incompleteConfirmation": "Незавершенные интеграции будут пропущены. Продолжить без них?" + }, + "board": { + "title": "Форма доски перед сборкой", + "description": "Homarr создает защищенные макеты мобильных и базовых устройств, а затем размещает приложения и совместимые виджеты из выбранных вами сервисов.", + "target": "Доска для настройки", + "targetDescription": "Выберите нужную доску для обновления.", + "targetPlaceholder": "Выберите доску", + "targetRequired": "Выберите доску для настройки перед продолжением.", + "name": "Название панели", + "nameDescription": "Используется в URL форума; только буквы, цифры, тире и знаки подчеркивания.", + "nameRequired": "Введите название доски, прежде чем продолжить.", + "primaryColor": "Основной цвет", + "secondaryColor": "Дополнительный цвет", + "resetColors": "Сбросить цвета", + "radius": "Радиус угла виджета", + "radiusOptions": { + "xs": "Тесь", + "sm": "Тонкий", + "md": "Сбалансированный", + "lg": "Скругленный", + "xl": "Мягкий" }, - "fileInfo": { - "action": { - "change": "Изменить файл" - } + "columns": "Столбцы", + "columnsDescription": "Столбцы определяют горизонтальную сетку, используемую для размера и позиции элементов. 12 достаточно для большинства людей.", + "columnCount": "{count, plural, one {# столбец} other {# столбцов}}", + "leftSidebar": "Left sidebar", + "rightSidebar": "Правая боковая панель", + "previewLabel": "Живой просмотр первого макета" + }, + "extend": { + "title": "Расширенные возможности", + "tabsLabel": "Настройка помощника, мастерской и MCP", + "assistant": "Помощник", + "workshop": "Семинар", + "assistantSetup": { + "loginTitle": "Требуется вход администратора", + "loginDescription": "Ключи провайдера и доступ к моделям. Завершите установку, войдите в систему и Homarr откроет конфигурацию Помощника напрямую.", + "loginAction": "Войдите для настройки ассистента" }, - "importSettings": { - "title": "Настройки импорта", - "description": "Настройте параметры импорта" + "workshopSetup": { + "title": "Мастерская «Гомарр»", + "description": "Просматривайте пользовательские виджеты, проверяйте их запрошенные возможности, устанавливайте их и публикуйте свою собственную работу без копирования кода между серверами.", + "available": "Доступно", + "checking": "Проверка…", + "unavailable": "Unavailable", + "discoverTitle": "Узнайте", + "discoverDescription": "Найдите виджеты, построенные для реальных рабочих процессов собственного хостинга.", + "installTitle": "Проверить и установить", + "installDescription": "Смотрите метаданные и конфигурацию перед добавлением.", + "publishTitle": "Поделиться", + "publishDescription": "Опубликовать повторно используемые виджеты в сообществе.", + "browse": "Обзор семинара" }, - "boardSelection": { - "title": "Найдено {count} панелей", - "description": "Выберите все панели с их размерами, которые вы хотите импортировать", - "action": { - "selectAll": "Выбрать все", - "unselectAll": "Снять выбор со всех" - } - }, - "summary": { - "title": "Сводка по импорту", - "description": "В приведенной ниже сводке вы можете увидеть, что будет импортировано", - "action": { - "import": "Подтвердить импорт и продолжить" - }, - "entities": { - "apps": "Приложения", - "boards": "Панели", - "integrations": "Интеграции", - "credentialUsers": "Учетные данные пользователя" - } - }, - "tokenModal": { - "title": "Введите токен импорта", - "field": { - "token": { - "label": "Токен", - "description": "Введите показанный токен импорта из вашего предыдущего экземпляра Homarr" - } - }, - "notification": { - "error": { - "title": "Недействительный токен", - "message": "Введенный токен недействителен" - } - } + "mcpSetup": { + "title": "Хомарр MCP", + "description": "Подключите Claude, Codex или другой MCP клиент к инструментам Homarr. API ключи сохраняют доступ явным и отменимым.", + "endpoint": "Проницаемая конечная точка HTTP", + "keyTitle": "Скопировать этот ключ", + "keyDescription": "Для безопасности, Homarr не может отобразить этот ключ API.", + "copyKey": "Копировать ключ API", + "createKey": "Создать MCP API ключ", + "errorTitle": "MCP API ключ не может быть создан", + "loginRequired": "Войдите как администратор после установки для создания ключа API.", + "configuration": "Конфигурация клиента", + "copy": "Копировать конфигурацию", + "copied": "Скопировано", + "advanced": "Открытые инструменты MCP, права доступа и подробности настройки" } }, - "user": { - "title": "Администратор системы", - "subtitle": "Укажите учетные данные для администратора системы.", - "notification": { - "success": { - "title": "Пользователь создан", - "message": "Пользователь успешно создан" - }, - "error": { - "title": "Не удалось создать пользователя" - } - } - }, - "group": { - "title": "Внешняя группа", - "subtitle": "Укажите группу, которая будет использоваться для внешних пользователей.", - "form": { - "name": { - "label": "Название группы", - "description": "Название должно соответствовать группе администраторов внешнего провайдера" - } - } - }, - "settings": { - "title": "Настройки", - "subtitle": "Настройте параметры сервера." - }, - "integrations": { - "title": "Интеграции", - "subtitle": "Выберите используемые сервисы.", - "description": "Выберите интеграции, которые хотите подключить. Мы автоматически настроим панель с соответствующими виджетами.", - "action": { - "continue": "Продолжить", - "skip": "Пропустить" - }, - "configure": { - "progress": "{current} из {total}", - "skip": "Пропустить эту интеграцию", - "finishing": "Настройка панели...", - "error": { - "title": "Ошибка настройки", - "message": "Что-то пошло не так при настройке панели. Пожалуйста, попробуйте снова." - }, - "helpers": { - "tooltip": "Помощники URL", - "description": "Эти помощники пытаются угадать URL ваших сервисов. Если не сработает, просто введите адрес вручную." - } - }, - "urlTemplate": { - "label": "Базовый URL", - "placeholder": "homelab.local или 192.168.1.1", - "hint": "Введите базовый домен или IP для автозаполнения URL интеграций", - "warning": "Установка базового URL сейчас автоматически заполнит все URL интеграций, сэкономив время при настройке", - "preview": "например {example}", - "mode": { - "subdomain": "Поддомен", - "hostPort": "Хост:Порт" - } - }, - "docker": { - "detected": "Docker обнаружил {count} сервисов", - "detectedBreakdown": "{integrations} интеграций · {apps} приложений", - "summary": "Homarr обнаружил {apps} приложений, {integrations} из которых имеют встроенные интеграции", - "appBadge": "Приложение", - "appSectionLabel": "Приложения для добавления на панель (выбрано {count})", - "scanning": "Сканирование Docker...", - "scanningDescription": "Поиск запущенных контейнеров в системе" + "review": { + "title": "Одна доска, построенная вокруг ваших услуг", + "description": "Homarr тестирует несохраненные соединения, импортирует выбранные приложения, применяет внешний вид и раскладки, а затем открывает именно его настройку.", + "board": "Первый форум", + "columns": "Столбцы", + "columnsValue": "{count, plural, one {# столбец} other {# столбцов}}", + "sidebars": "Боковые панели", + "sidebarsValue": "{count, plural, =0 {None} one {# sidebar} other {# sidebars}}", + "layouts": "Адаптивные макеты", + "layoutsValue": "Мобильный + базовый", + "integrations": "Интеграции", + "integrationsValue": "{count, plural, =0 {Не выбрано} one {# интеграция} other {# интеграции}}", + "apps": "Плитки", + "appsValue": "{count, plural, =0 {Только запущенные приложения} one {# аппликация} other {# плитки приложений}}", + "language": "Язык", + "theme": "Тема", + "themeAuto": "Системные настройки", + "themeLight": "Светлая", + "themeDark": "Тёмная", + "colors": "Цвета доски", + "radius": "Радиус виджета", + "automaticTitle": "Что создаст Homarr", + "automaticDescription": "Совместимые виджеты, иконки, ссылки приложений, отношения интеграции и отзывчивое размещение происходят из общего каталога Homarr. Каждый результат можно редактировать позже.", + "dockerWarningTitle": "Некоторые метки Docker изменены во время установки", + "dockerWarningDescription": "{count, plural, one {# Результат Docker не может быть применен, потому что его сервис изменен, целевая доска, или его виджет несовместим} other {# выбранные результаты Docker не могут быть применены из-за того, что службы изменены, направлены на другую доску или их виджеты несовместимы с}}", + "errorTitle": "Плата не может быть построена", + "progress": { + "applying": "Тестирование соединений и создание платы", + "done": "Ваша доска готова" } }, "finish": { - "title": "Завершение настройки", - "subtitle": "Всё готово к работе!", - "description": "Вы успешно завершили процесс настройки. Теперь вы можете начать использовать Homarr. Выберите следующее действие:", - "action": { - "goToBoard": "Перейти к панели {name}", - "createBoard": "Создать первую панель", - "inviteUser": "Пригласить других пользователей", - "docs": "Прочитать документацию" - } + "title": "Ваша первая доска готова.", + "description": "Homarr подключил выбранные части и сохранил их редактируемыми. Откройте доску прямо сейчас. Краткий обзор может показать вам режим редактирования, виджеты, раскладки и поиск.", + "openBoard": "Открыть доску", + "manageTitle": "Управление", + "manageDescription": "Настройка приложений, интеграции, досок, пользователей и параметров сервера.", + "workshopTitle": "Семинар", + "workshopDescription": "Откройте для себя и установите пользовательские виджеты сообщества.", + "docsTitle": "Выучить гомарра", + "docsDescription": "Прочитайте сфокусированные руководства для досок, виджетов, интеграции и инструментов." } - }, - "backToStart": "Вернуться к началу" + } }, "user": { - "title": "Пользователи", "name": "Пользователь", "page": { "login": { @@ -159,12 +249,10 @@ }, "invite": { "title": "Присоединиться к Homarr", + "titleWithAppName": "Присоединиться к {appName}", "subtitle": "Добро пожаловать в Homarr! Пожалуйста, создайте вашу учётную запись", + "subtitleWithAppName": "Добро пожаловать в {appName}! Пожалуйста, создайте свою учетную запись", "description": "Вас пригласил пользователь {username}" - }, - "init": { - "title": "Новая установка Homarr", - "subtitle": "Пожалуйста, создайте начального пользователя-администратора" } }, "field": { @@ -192,12 +280,17 @@ "previousPassword": { "label": "Предыдущий пароль" }, - "homeBoard": { - "label": "Домашняя панель" - }, "pingIconsEnabled": { "label": "Использовать индикаторы доступности" }, + "byteUnitSystem": { + "label": "Единицы размера данных", + "description": "Выберите, как Homarr отображает размер байтов и скорость байта. Бит ставки всегда используют десятичные единицы.", + "options": { + "binary": "Двоичный", + "decimal": "Десятичная" + } + }, "enableRightClickOnWidgets": { "label": "Включить правый клик по виджетам", "description": "Показывать контекстное меню Homarr при нажатии правой кнопкой мыши на виджете. Отключите для использования меню браузера по умолчанию (например, «Открыть ссылку в новой вкладке»)." @@ -247,7 +340,6 @@ } } }, - "create": "Создание пользователя", "changePassword": { "label": "Изменить пароль", "notification": { @@ -259,56 +351,6 @@ } } }, - "changeHomeBoard": { - "notification": { - "success": { - "message": "Домашняя панель успешно изменена" - }, - "error": { - "message": "Не удалось изменить домашнюю панель" - } - } - }, - "changeSearchPreferences": { - "notification": { - "success": { - "message": "Настройки поиска успешно изменены" - }, - "error": { - "message": "Не удается изменить настройки поиска" - } - } - }, - "changeFirstDayOfWeek": { - "notification": { - "success": { - "message": "Первый день недели успешно изменён" - }, - "error": { - "message": "Не удалось изменить первый день недели" - } - } - }, - "changePingIconsEnabled": { - "notification": { - "success": { - "message": "Отображение индикаторов доступности успешно изменено" - }, - "error": { - "message": "Не удалось изменить настройки индикаторов доступности" - } - } - }, - "changeDdgBangs": { - "notification": { - "success": { - "message": "DuckDuckGo bangs успешно переключены" - }, - "error": { - "message": "Не удалось переключить DuckDuckGo bangs" - } - } - }, "manageAvatar": { "changeImage": { "label": "Изменить изображение", @@ -338,16 +380,6 @@ } } }, - "editProfile": { - "notification": { - "success": { - "message": "Профиль успешно обновлён" - }, - "error": { - "message": "Не удалось обновить профиль" - } - } - }, "delete": { "label": "Удалить пользователя навсегда", "description": "Удаляет этого пользователя вместе с его настройками. Панели не будут удалены. Пользователь не получит уведомление.", @@ -356,18 +388,13 @@ "select": { "label": "Выбрать пользователя", "notFound": "Пользователь не найден" - }, - "transfer": { - "label": "Выбрать нового владельца" } } }, "group": { - "title": "Группы", "name": "Группа", "search": "Поиск группы", "field": { - "name": "Название", "members": "Участники", "homeBoard": { "label": "Домашняя панель", @@ -388,6 +415,19 @@ } } }, + "custom-widget": { + "title": "Пользовательские виджеты", + "item": { + "manage": { + "label": "Управление пользовательскими виджетами", + "description": "Разрешить пользователям создавать, редактировать и удалять пользовательские определения виджета" + }, + "secret-write": { + "label": "Настроить пользовательские секреты виджета", + "description": "Разрешить пользователям и их API ключи устанавливать зашифрованные пользовательские учетные данные виджетов" + } + } + }, "app": { "title": "Приложения", "item": { @@ -493,6 +533,35 @@ "description": "Разрешить участникам управлять и удалять любые поисковые системы" } } + }, + "matrix": { + "none": "Нет доступа", + "impliedHint": "Также гранты: {permissions}", + "grantedViaAdmin": "У администраторов уже есть это. Установите Администратора «Нет доступа», чтобы настроить его отдельно.", + "preset": { + "label": "Пресеты", + "viewer": "Просмотрщик", + "viewerDescription": "Только для чтения: просматривать доски, использовать уже существующие приложения и интеграции.", + "editor": "Редактор", + "editorDescription": "Ежедневное управление: создание и редактирование досок, приложений, интеграций и поисковых систем.", + "admin": "Администрирование", + "adminDescription": "Неограниченный доступ к всем функциям и настройкам, включая управление пользователями.", + "custom": "Свой" + }, + "effective": { + "title": "Действующие разрешения", + "description": "Полные, исключенные дубликаты действий членов этой группы могут выполнять, включая косвенные разрешения.", + "empty": "Не выбрано ни одного разрешения" + }, + "noneDescription": "Пользователи не имеют доступа к этой области.", + "level": { + "view": "Вид", + "use": "Использовано", + "interact": "Взаимодействие", + "modify": "Изменить", + "full": "Полностью" + }, + "capabilityIncluded": "Уже включено в “{level}”" } }, "memberNotice": { @@ -607,21 +676,24 @@ "search": "Поиск приложений", "page": { "list": { - "title": "Приложения", + "ariaLabel": "Настроенные приложения", "noResults": { "title": "Приложения пока отсутствуют", - "action": "Создать первое приложение" + "description": "Приложения - это ссылки на сервисы и инструменты, которые вы хотите использовать на ваших досках.", + "action": "Создать первое приложение", + "filteredTitle": "Нет приложений, соответствующих вашему запросу", + "filteredDescription": "Нет приложений, соответствующих \"{search}\". Попробуйте другое имя или URL-адрес.", + "createOnlyTitle": "Вы можете добавлять только приложения", + "createOnlyDescription": "Ваши разрешения позволяют создавать приложения, но не просматривать существующие. Попросите администратора получить доступ к полному списку." } }, "create": { "title": "Новое приложение", "notification": { "success": { - "title": "Приложение создано", "message": "Приложение успешно создано" }, "error": { - "title": "Не удалось создать", "message": "Не удалось создать приложение" } } @@ -630,11 +702,9 @@ "title": "Редактирование приложения", "notification": { "success": { - "title": "Изменения сохранены", "message": "Приложение успешно сохранено" }, "error": { - "title": "Не удалось сохранить", "message": "Не удалось сохранить приложение" } } @@ -644,26 +714,18 @@ "message": "Вы уверены, что хотите удалить приложение {name}?", "notification": { "success": { - "title": "Приложение удалено", "message": "Приложение успешно удалено" }, "error": { - "title": "Не удалось удалить", "message": "Не удалось удалить приложение" } } } }, "field": { - "name": { - "label": "Название" - }, "description": { "label": "Описание" }, - "url": { - "label": "URL-адрес" - }, "useDifferentUrlForPing": { "checkbox": { "label": "Использовать другой URL для проверки доступности", @@ -678,34 +740,582 @@ "search": "Поиск приложения", "noResults": "Нет результатов", "action": "Выбрать {app}", - "title": "Выберите приложение для добавления на панель" + "title": "Выберите приложение для добавления на панель", + "toggle": "Нажмите, чтобы выбрать", + "selected": "Выбрано", + "multiple": "Добавить {count}", + "selectedCount": "{count, plural, one {# выбрано} other {# выбрано}}", + "appsSelected": "{count, plural, one {# приложение выбрано} other {# приложений выбрано}}", + "selectMultiple": "Выбрать несколько", + "cancelMultiple": "Выйти из множественного списка", + "customApplication": "Пользовательское приложение", + "application": "Приложение" }, "create": { "title": "Создать приложение", "description": "Создать новое приложение ", "action": "Открыть создание приложения" + } + } + }, + "tips": { + "dismiss": "Отклонить совет", + "multiSelectApps": "Совет: удерживайте Ctrl / чтобы выбрать несколько приложений одновременно" + }, + "customWidget": { + "secretEntry": { + "title": "Настройка источника API", + "description": "Подтвердите URL сервера и введите учетные данные. Секретные значения зашифрованы Homarr и никогда не возвращаются запрашивающему агенту.", + "loading": "Загрузка безопасного запроса…", + "applying": "Применение этой конфигурации… Держите эту страницу открытой.", + "saved": "Источник API настроен. Вы можете закрыть эту страницу.", + "unavailable": "Запрос недоступен", + "saveError": "Не удается настроить источник API", + "source": "Источник API: {name}", + "baseUrl": "URL сервера", + "networkScope": "Доступ к сети", + "save": "Сохранить конфигурацию API", + "expires": "Одноразовый запрос истекает на {time}." + }, + "page": { + "list": { + "noResults": "Пока нет пользовательских виджетов. Создайте первый!", + "noDescription": "Нет описания", + "enabled": "Включено", + "disabled": "Отключено", + "disabledDescription": "Этот виджет остается настроенным, но не загружается ни на одной доске.", + "requestCount": "{count, plural, one {# запрос} other {# запросов}}", + "invalidDefinition": "Неверное определение", + "migrationRequired": "Требуется миграция", + "migrationInstructions": "Откройте действия для копирования или экспорта исходного определения v1 для ручного воспроизведения. Вы также можете использовать запрос на миграцию с LLM. Существующие площадки досок продолжают работать после перехода.", + "missingCredentials": "{count, plural, one {Учетные данные отсутствуют} other {# учетных данных отсутствуют}}", + "missingCredentialsDescription": "{count, plural, one {Этот виджет все еще нуждается в одном учетном данных} other {Этот виджет по-прежнему требует # учетных данных}} Выберите этот значок, чтобы настроить URL и зашифрованные значки." }, - "add": "Добавить приложение" + "create": { + "title": "Создать пользовательский виджет", + "subtitle": "Определите URL-адрес API, аутентификацию и способ отображения данных ответа." + }, + "tabs": { + "ariaLabel": "Разделы пользовательских виджетов", + "installed": "Установлено", + "workshop": "Семинар" + } + }, + "action": { + "pasteImportHint": "Вставьте полный JSON пользовательского виджета с помощью Ctrl+V или Command+V", + "delete": "Удалить пользовательский виджет", + "deleteConfirm": "Вы уверены, что хотите удалить «{name}»? Это действие нельзя отменить.", + "export": "Экспорт", + "duplicate": "Создать копию", + "aiPrompt": "Дизайн с помощью AI", + "copyAiPrompt": "Копировать ИИ-запрос", + "enable": "Включить", + "disable": "Выключить", + "menu": "Действия", + "downloadSkill": "Посмотреть пользовательские навыки виджета", + "publishWorkshop": "Опубликовать в Мастерской", + "migrate": "Миграция пользовательского виджета", + "configureSources": "Настройка источников", + "copyLegacyDefinition": "Копировать исходное содержимое виджета", + "exportLegacyDefinition": "Экспорт оригинального содержимого виджета", + "copyMigrationPrompt": "Копировать запрос миграции LLM", + "pasteMigration": "Вставить перенесенный виджет", + "importMigration": "Импорт перенесенного JSON файла" + }, + "sourceSetupDialog": { + "title": "Настроить источники виджетов", + "description": "Проверьте, где этот виджет подключается и добавляет или заменяет его зашифрованные учетные данные.", + "credentialsRequired": "Запросы не будут выполнены до тех пор, пока не будут добавлены необходимые учетные данные.", + "save": "Сохранить конфигурацию" + }, + "field": { + "description": "Описание" + }, + "editor": { + "errorBoundary": { + "title": "Что-то пошло не так" + }, + "action": { + "components": "Компоненты", + "format": "Формат", + "insertStarter": "Insert starter", + "redo": "Повторить", + "copied": "Скопировано", + "schema": "Схема" + }, + "reference": { + "minimal": "Минимальный пример", + "full": "Полный пример" + }, + "componentReference": { + "search": "Поиск компонентов", + "empty": "Нет подходящих компонентов", + "count": "{count, number} доступны компоненты" + }, + "status": { + "errors": "{count, number} ошибки", + "warnings": "{count, number} предупреждения", + "ready": "Замечаний не найдено", + "position": "Ln {line, number}, Col {column, number}", + "characters": "{count, number} символы", + "charactersWithLimit": "{count, number} / {limit, number}" + }, + "diagnostics": { + "title": "Диагностика шаблона", + "line": "Строка {line, number}", + "ast": "{value}", + "bindingTypeConflict": "Ввод \"{value}\" совместно с элементами управления с несовместимыми типами значений.", + "runtimeBindingTypeConflict": "Ввод \"{value}\" связан как {firstType} и {secondType}.", + "dynamicRequestId": "Требуется идентификатор запроса в литературе. Идентификаторы запроса не принимаются.", + "dynamicInputBinding": "Для связывания требуется имя ввода.", + "inlineRequestProps": "Сетевые компоненты принимают параметры requestId; встроенные URL, метод, заголовок и свойства тела блокируются.", + "invalidRequestManifest": "Именованные запросы должны быть допустимой картой запросов. {value}", + "missingRequestId": "Для этого сетевого компонента требуется идентификатор запроса.", + "templateEmpty": "Введите шаблон JSX.", + "templateTooLong": "Шаблон превышает ограничение в 50 000 символов.", + "unknownRequest": "Нет именованного запроса с ID \"{value}\" существует." + } + }, + "workbench": { + "configure": "Настроить", + "sectionNavigation": "Разделы пользовательских виджетов", + "widgetPreview": "Предпросмотр виджета", + "generalInformation": "Информация общего характера", + "invalidWidget": "Недопустимый виджет", + "section": { + "general": "Основная", + "sources": "Источники API", + "requests": "Запросы", + "options": "Опции", + "jsx": "JSX", + "preview": "Предварительный просмотр" + }, + "status": { + "unsaved": "Несохранённые изменения", + "invalid": "Требует внимания", + "ready": "Готов" + }, + "saveError": { + "title": "Виджет не сохранен", + "description": "Исправьте эти ошибки проверки и сохраните снова.", + "more": "+{count} ошибок отображаются на рабочем столе.", + "errors": "Ошибки проверки", + "copy": "Ошибка копирования", + "copied": "Ошибки скопированы" + }, + "action": { + "preview": "Тест и предпросмотр", + "previewLoading": "Тестирование запросов" + }, + "requests": { + "title": "Именованные запросы и действия", + "label": "Запросы", + "description": "Запросы загружают данные; действия выполняются только после взаимодействия с пользователями. Любой метод HTTP подходит для любого рода." + }, + "options": { + "title": "Настройки виджета" + }, + "builder": { + "advancedManifest": "Расширенный манифест сырых данных", + "advancedJson": "Расширенный JSON манифеста", + "manifestFilename": "виджет.json", + "request": "Запросить {count, number}", + "requestId": "ID запроса", + "type": "Тип", + "method": "Метод", + "source": "Источник API", + "run": "Запустить", + "runLoad": "Когда виджет нагрузки", + "runManual": "Из SubFetch", + "permission": "Права доступа", + "path": "Путь", + "pathDescription": "Используйте '{option:name}' для параметров виджета и '{param:name}' для значений вызова.", + "requestDetails": "Запросы, тело и поведение", + "queryValues": "Значения запроса", + "queryKey": "Ключ запроса", + "queryKeyInvalid": "Используйте уникальный идентификатор, который начинается с буквы и содержит только буквы, цифры, - или _.", + "valueSource": "Источник значения", + "literal": "Литература", + "widgetOption": "Опция виджета", + "invocationParameter": "Параметр вызова", + "option": "Вариант", + "parameterName": "Имя параметра", + "value": "Значение", + "removeQueryValue": "Удалить значение запроса", + "addQueryValue": "Добавить значение запроса", + "jsonBody": "JSON тело", + "jsonBodyDescription": "Необязательно. Вставьте ссылки $option и $param на любую глубину.", + "insertOptionReference": "Вставить ссылку на опцию", + "insertParameterReference": "Вставить ссылку на параметр", + "confirmation": "Сообщение подтверждения", + "invalidation": "Обновить после успеха", + "invalidationDescription": "ID запроса, разделённого запятыми", + "noAuth": "Отправить без исходной аутентификации", + "moveRequestUp": "Переместить запрос вверх", + "moveRequestDown": "Переместить запрос вниз", + "removeRequest": "Удалить запрос", + "addRequest": "Добавить запрос", + "optionName": "Название опции", + "label": "Метка", + "control": "Контроль", + "description": "Описание", + "default": "По умолчанию", + "optionDetails": "Ограничения и динамический выбор", + "minimum": "Минимум", + "maximum": "Максимум", + "step": "Шаг", + "choiceLabel": "Метка выбора", + "choiceValue": "Значение выбора", + "newChoice": "Новый выбор", + "addChoice": "Добавить выбор", + "removeChoice": "Удалить выбор", + "choicesRequest": "Загрузить выбор из запроса", + "itemsPath": "Путь к элементам", + "itemsPathPlaceholder": "элементы (опционально)", + "valuePath": "Путь к значению", + "labelPath": "Путь к метке", + "group": "Группа", + "advancedOption": "Расширенная опция", + "moveOptionUp": "Переместить вверх", + "moveOptionDown": "Опция перемещения вниз", + "removeOption": "Удалить опцию", + "addOption": "Добавить опцию", + "invalidJson": "Некорректный JSON", + "invalidWidget": "Недопустимый виджет" + }, + "jsx": { + "title": "Шаблон JSX", + "label": "Шаблон" + }, + "sources": { + "title": "Источники API и учетные данные", + "newName": "API {count, number}", + "duplicateSourceId": "Идентификаторы источника API должны быть уникальными.", + "credentialRemoved": "Учетные данные удалены", + "credentialRemovedDescription": "Сохраненное значение удалено.", + "primary": "Основной API", + "id": "ID источника", + "name": "Имя", + "baseUrl": "Базовый URL", + "baseUrlError": { + "invalid": "Введите полный URL.", + "protocol": "Использовать HTTP или HTTPS URL.", + "credentials": "Удалить имя пользователя и пароль с этого URL-адреса. Настройте учетные данные ниже.", + "queryOrFragment": "Удалить строку запроса или фрагмент из этого базового URL-адреса. Добавить значения запроса к именованному запросу." + }, + "networkScope": "Доступ к сети", + "authentication": "Аутентификация", + "headerName": "Название заголовка", + "queryParameter": "Параметр запроса", + "configured": "Конфигурация — введите замену", + "clear": "Ясно", + "remove": "Удалить источник и его запросы", + "advanced": "Расширенные", + "add": "Добавить еще один API источник", + "sourceType": "Интеграция", + "manualSource": "HTTP API", + "existingIntegration": "Существующая интеграция", + "integrationType": "Тип интеграции", + "selectIntegration": "Настроенная интеграция", + "noIntegrations": "Нет подходящих интеграций", + "integrationUnavailable": "Выбранная интеграция больше недоступна. Выберите другую интеграцию.", + "integrationDescription": "Использует сохраненные URL интеграции и учетные данные. Изменения применяются автоматически. Для выполнения запросов требуется полный доступ к интеграции." + }, + "ai": { + "title": "Создавайте или исправляйте с помощью любого ИИ", + "description": "Добавьте URL-адрес для документации API, если у вас есть. Для исправления запустите Предварительный просмотр, если это возможно. Скопируйте подсказку в любой AI; она может запросить недостающие детали. Вставьте её окончательный JSON здесь.", + "request": "Что должен сделать этот виджет?", + "documentationUrl": "URL документации API (необязательно)", + "paste": "Вставить", + "response": "AI ответ", + "manualCopyDescription": "Доступ к буферу недоступен. Выберите запрос ниже и скопируйте его вручную.", + "manualPasteDescription": "Доступ к буфере обмена недоступен или ответ нуждается в исправлении. Вставьте ответ AI в ответ здесь.", + "selectAll": "Выбрать все", + "loadResponse": "Загрузить ответ", + "loaded": "Виджет загружен в редактор", + "invalidResponse": "Буфер обмена не содержит валидный виджет v2", + "invalidResponseDetail": "Недопустимый ИИ ответ: {message}" + }, + "preview": { + "invalid": "Исправлены ошибки проверки для предварительного просмотра этого виджета.", + "fixtureError": "Ошибка предпросмотра фиксации", + "requestData": "Запросить данные", + "status": { + "idle": "Запросы не были протестированы", + "loading": "Тестирование запросов", + "success": "Все загрузки завершены", + "error": "Не удалось загрузить один или несколько запросов" + }, + "result": { + "loading": { + "title": "Тестирование API-запросов", + "description": "Homarr создает предварительный сеанс и загружает данные виджета." + }, + "success": { + "title": "Предпросмотр готов", + "description": "{succeeded, plural, =0 {У этого виджета нет запросов на загрузку.} one {# Запрос на загрузку успешно выполнен.} other {# запросы на загрузку успешно выполнены.}} Откройте данные для проверки ответа." + }, + "error": { + "title": "Предварительный просмотр завершен с ошибками запроса", + "description": "{succeeded, number} Успешно и {failed, number} не удалось открыть данные для ответа и ошибок." + } + }, + "instanceOptions": "Параметры экземпляра", + "liveActions": "Выполнить действия с настроенным API", + "liveActionsDescription": "Безопасная симуляция. Включение этой функции влияет на реальную службу.", + "noActions": "Действия не определены.", + "containedFailures": "Ошибки в работе содержатся в этом виджете. Запрашивать журналы никогда не содержит секретных значений.", + "validation": { + "title": "Проверка", + "ready": "Определение виджета является действительным." + }, + "accessibility": { + "title": "Проверка доступности", + "ready": "Не обнаружено общих упущений доступности.", + "pending": "Проверка доступности будет запущена, когда определение виджета верно.", + "imageAlt": "Добавляет alt текст для каждого изображения, используя пустой alt только для декоративных изображений.", + "actionIconLabel": "Добавьте метку или название для каждого ActionIcon.", + "inputLabel": "Добавить видимую метку или доступное имя для каждого входа." + }, + "journal": "Отправленный запрос журнал", + "actionParameters": "Параметры действия (JSON)", + "invalidParameters": "Используйте типы строк, цифр и логических параметров.", + "runDestructive": "Запуск деструктивных действий", + "runAction": "Выполнить действие", + "deleteConfirmation": "Это предпросмотр изменяет удаленные данные через сконфигурированный API.", + "simulated": "Действие симулируется", + "httpStatus": "HTTP {status, number}", + "tab": { + "widget": "Виджет", + "data": "Данные", + "options": "Опции", + "state": "Состояние задачи", + "actions": "Управление", + "diagnostics": "Диагностика" + }, + "size": { + "compact": "Компактный", + "standard": "Стандартный", + "wide": "Широкий" + }, + "fixture": { + "live": "Онлайн", + "loading": "Загрузка", + "empty": "Пусто", + "error": "Ошибка" + } + } + }, + "preview": { + "request": { + "permission": { + "view": "Вид", + "modify": "Изменить", + "full": "Полностью" + } + } + }, + "notification": { + "created": "Виджет \"{name}\" успешно создан.", + "updated": "Виджет \"{name}\" успешно обновлен.", + "deleted": "Виджет \"{name}\" удален.", + "imported": "Виджет успешно импортирован.", + "migrated": "Устаревший виджет успешно мигрирован. Существующие доски теперь используют определение v2.", + "migrationError": "Не удалось перенести старый виджет. Убедитесь, что файл использует схему homarr-custom-widget-v2.", + "legacyDefinitionCopied": "Оригинальный виджет был скопирован. Сохраненные регистрационные значения не включены.", + "legacyDefinitionCopyError": "Не удалось скопировать оригинальный контент виджета.", + "migrationPromptCopied": "Был скопирован отредактированный запрос миграции. Вставьте его в LLM, скопируйте один ответ JSON, затем выберите Вставить перенесенный виджет здесь.", + "migrationPromptCopyError": "Не удалось скопировать приглашение миграции.", + "sourcesConfigured": "Источники и учетные данные виджета сохранены.", + "sourceConfigurationError": "Не удалось настроить источники виджетов.", + "aiPromptCopiedWithCount": "Запрос ИИ скопирован в буфер обмена ({count, number} символов).", + "aiPromptCopyError": "Не удалось скопировать промпт в буфер обмена. Возможно, ваш браузер не поддерживает эту функцию.", + "aiPromptSent": "Запрос отправлен. Вы можете продолжить редактирование, пока ассистент работает в фоновом режиме.", + "updateError": "Не удалось обновить виджет. Ваши изменения не были сохранены.", + "importError": "Не удалось импортировать виджет. Убедитесь, что файл - это валидный JSON для экспорта пользовательского виджета.", + "exportError": "Не удалось экспортировать виджет.", + "duplicated": "Виджет \"{name}\" повторяется.", + "duplicateError": "Не удалось сделать копию виджета.", + "toggleError": "Не удалось переключить статус виджета.", + "deleteError": "Не удалось удалить виджет.", + "previewError": "Не удалось получить предварительный просмотр. Проверьте URL-адрес и повторите попытку." + }, + "importReview": { + "title": "Просмотр импорта пользовательских виджетов", + "description": "Проверьте, где этот виджет подключается и какие права на доску требуют его управления перед импортом.", + "migrationTitle": "Рассмотрение перенесенной замены v2", + "migrationDescription": "Просмотрите и подтвердите это определение v2. Подтверждение точечно заменяет сохраненную запись v1, сохраняя существующие доски привязанные к тому же идентификатору виджета.", + "fileLabel": "Выберите пользовательский виджет JSON файл", + "name": "Название задачи", + "origin": "Базовый источник", + "authentication": "Аутентификация", + "networkScope": "Область сети", + "methods": "Методы HTTP", + "permissions": "Необходимые разрешения на доску", + "sourceSetup": { + "title": "Настройка источников API", + "description": "Подтвердите, где этот виджет подключается и добавляет учетные данные. Приватные и зацикливаемые URL-адреса специфичны для вашей установки Homarr.", + "suggestedUrl": "Предложенный URL", + "confirmUrl": "Я подтверждаю, что адрес сервера корректен для установки Homarr", + "ready": "URL готов", + "needsUrl": "Подтвердите URL", + "credentialsMissing": "Учетные данные отсутствуют", + "credentialsOptional": "Вы можете установить без учётных данных и настроить их позже, но запросы не будут выполнены." + }, + "actionWarning": { + "title": "Этот виджет может изменять удаленные данные", + "description": "Просмотр всех именованных действий, унаследованных учетных данных и деструктивное подтверждение после импорта. Секреты не включены в файл." + }, + "cancel": "Отменить импорт", + "confirm": "Импорт виджета", + "confirmMigration": "Подтвердить замену v2" + }, + "secret": { + "apiKey": "API ключ или токен", + "username": "Имя пользователя", + "password": "Пароль", + "savedPlaceholder": "••••• (сохраненное значение, оставьте пустым для сохранения)" + } + }, + "workshop": { + "title": "Семинар", + "browseWorkshop": "Обзор семинара", + "openCommunity": "Открыть Мастерскую", + "openOnWorkshop": "Открыть {title} на сайте Мастерской", + "back": "Вернуться к мастерской", + "search": "Поиск виджетов", + "searchCss": "Поиск в CSS темах", + "sort": "Сортировка", + "sortTop": "Верхний рейтинг", + "sortNewest": "Новейшие", + "listAriaLabel": "Виджеты мастерской", + "listAriaLabelCss": "CSS темы мастерской", + "empty": "Нет виджетов, соответствующих данному поиску.", + "emptyDescription": "Виджеты сообщества опубликованы в Мастерской показаны здесь.", + "emptyFilteredTitle": "Нет виджетов, соответствующих этому поиску", + "emptyFilteredDescription": "Мастерский виджет не соответствует \"{search}\".", + "emptyCss": "CSS темы не соответствуют этому поиску.", + "unavailableTitle": "Мастерская Homarr недоступна", + "unavailable": "Возможно, служба сообщества временно недоступна. Попробуйте еще раз через некоторое время. Ваши установленные виджеты не влияют.", + "loadError": "Эта работа не может быть загружена.", + "noDescription": "Нет описания", + "author": "от {name}", + "communityMember": "Участник сообщества", + "outdated": "Устаревшие", + "outdatedWarning": "Автор отметил это сообщение устаревшим. Перед импортом внимательно просмотрите его.", + "score": "Счёт: {count, number}", + "upvote": "Upvote", + "downvote": "Голос Против", + "voteError": "Голосование не может быть сохранено.", + "signIn": "Войти через GitHub", + "signInError": "Ошибка входа в GitHub. Убедитесь, что поставщик OAuth настроен и что всплывающие окна разрешены.", + "signOut": "Выйти", + "signInHint": "Войдите, чтобы голосовать или пожаловаться. Установка не требует учетной записи Мастерской.", + "securityNotice": "Виджеты мастерской могут вызвать объявленные ими источники API и выполнить объявленные действия с учётными данными, которые вы настраиваете локально. Секреты никогда не включаются.", + "securityNoticeCss": "CSS сообщества может изменить внешний вид и удобство работы доски. Просмотрите его перед импортом; ничего не сохраняется до тех пор, пока вы не сохраните настройки.", + "install": "Установить", + "installReviewTitle": "Обзор перед установкой", + "installError": "Этот виджет не может быть установлен", + "installErrorDescription": "Представление мастерской не является допустимым виджетом пользовательского JSX v2.", + "useCss": "Import CSS", + "importCss": "Импорт CSS из Мастерской", + "importCssConfirm": "Заменить текущий CSS на \"{title}? Ничего не сохраняется до тех пор, пока вы не сохраните настройки форума.", + "screenshotAlt": "{title} скриншот {count, number}", + "screenshotViewer": "Скриншот {title}", + "screenshotsLabel": "{title} скриншоты", + "zoomScreenshot": "Посмотреть полный размер", + "previousScreenshot": "Предыдущий скриншот", + "nextScreenshot": "Следующий скриншот", + "showScreenshotThumbnails": "Показать эскизы скриншотов", + "hideScreenshotThumbnails": "Скрыть миниатюры скриншота", + "closeScreenshotViewer": "Закрыть просмотр скриншота", + "technicalDetails": "Технические детали", + "sourceCode": "Вход в мастерскую", + "export": "Экспорт", + "report": "Отчет", + "reportTitle": "Отчет о сабмите", + "reportReason": "Причина", + "reportExplanation": "Что должны знать модераторы семинара?", + "reportSend": "Отправить отчет", + "reportSent": "Отчёт отправлен", + "reportSentDescription": "Модераторы семинаров-практикумов теперь могут просматривать это представление.", + "reportCount": "{count, plural, one {# отчет} other {# отчет}}", + "reportWarning": "{count, plural, one {У этой публикации есть # открытый отчет сообщества.} few {У этой публикации есть # открытых отчета сообщества.} many {У этой публикации есть # открытых отчетов сообщества.} other {У этой публикации есть # открытых отчетов сообщества.}} Ее по-прежнему можно установить, но сначала следует проверить ее содержимое.", + "reportVisibility": "Детали отчета видны только администраторам данной публикации и мастерским.", + "reportCategory": { + "outdated": "Устаревшие или более не работающие", + "malicious": "Вредоносный", + "spam": "Спам", + "copyright": "Авторство", + "inappropriate": "Неуместно", + "other": "Прочее" + }, + "publish": { + "title": "Опубликовать в Мастерской", + "introTitle": "Поделиться этим виджетом с сообществом", + "introDescription": "Homarr экспортирует бесплатную копию текущего виджета. Добавьте четкий список, чтобы люди знали, что делает перед установкой.", + "listingDetails": "Список мастерской", + "listingDetailsDescription": "Эти данные появляются публично наряду с определением экспортированных виджетов.", + "success": "Опубликовано немедленно. Члены сообщества могут устанавливать и сообщать об этом виджете.", + "successTitle": "Ваш виджет в реальном времени", + "manageDescription": "Откройте представление, чтобы обновить свой список, просмотреть отчеты, отметить устаревшие или удалить его. Управление отправкой обрабатывается непосредственно на веб-сайте семинара.", + "viewSubmission": "Просмотр и управление отправкой", + "done": "Готово", + "signInHint": "Войдите, чтобы опубликовать в вашей Мастерской идентификации.", + "titleField": "Заголовок", + "descriptionField": "Описание", + "screenshots": "Скриншот", + "screenshotsDescription": "До пяти изображений PNG, JPEG или WebP", + "screenshotsPlaceholder": "Выбрать скриншоты", + "invalidScreenshot": "Использовать PNG, JPEG или WebP изображения не превышающие {maxSize} каждый.", + "privateSourceWarning": "Этот виджет содержит частные URL источника для: {sources}. Замените персональные хосты или IP-адреса безопасными заполнителями сервисов перед публикацией.", + "reviewSourcesTitle": "Просмотр URL приватного источника", + "privateSourceConfirmation": "Я изучил эти ссылки источника и не обнаружил детали частной инфраструктуры", + "action": "Опубликовать", + "publicationNote": "Публикация является немедленной. Вы можете управлять отправкой после этого в мастерской.", + "definitionChanged": "Виджет изменился во время подготовки публикации. Проверьте его личные URL-адреса источников, затем повторите попытку.", + "error": "Публикация не удалась" } }, "integration": { + "completion": { + "modalTitle": "Сервис готов", + "title": "{name} подключен", + "description": "Соединение прошло тест. Выберите, что показывать на этой доске.", + "connectionReady": "Услуга готова", + "appReady": "Ярлык приложения готов", + "compatibleWidgets": "{count, plural, =0 {Нет совместимых виджетов} one {# совместимый виджет} other {# совместимые виджеты}} Доступно", + "chooseWidget": "Выберите виджет", + "recipes": { + "title": "Рекомендуется для этого форума", + "description": "На основе подключенных сервисов и виджетов уже на этой доске.", + "newConnectionReason": "Теперь доступно через {integration}", + "existingConnectionReason": "Работает с уже подключенным сервисом", + "dismiss": "Отклонить рекомендации этой службы на этой доске" + } + }, "page": { "list": { - "title": "Интеграции", + "ariaLabel": "Настроенные интеграции", "search": "Поиск интеграций", + "scopedNote": "Показаны только интеграции, которыми вы можете управлять.", "noResults": { - "title": "Интеграции пока отсутствуют" + "title": "Интеграции пока отсутствуют", + "description": "Подключите сервис, чтобы использовать его данные и действия в виджетах Homarr.", + "action": "Создайте вашу первую интеграцию", + "filteredTitle": "Нет интеграций, соответствующих вашему запросу", + "filteredDescription": "Интеграции не соответствуют \"{search}\". Попробуйте другое имя, тип или URL.", + "createOnlyTitle": "Вы можете добавить только интеграцию", + "createOnlyDescription": "Ваши разрешения позволяют создавать интеграции, но не управлять существующими. Обратитесь к администратору за доступом к тем, что вам нужно." } }, "create": { "title": "Новая интеграция {name}", "notification": { "success": { - "title": "Интеграция создана", "message": "Интеграция успешно создана" }, "error": { - "title": "Не удалось создать", "message": "Не удалось создать интеграцию" } }, @@ -729,11 +1339,9 @@ "title": "Редактирование интеграции {name}", "notification": { "success": { - "title": "Изменения сохранены", "message": "Интеграция успешно сохранена" }, "error": { - "title": "Не удалось сохранить", "message": "Не удалось сохранить интеграцию" } }, @@ -750,23 +1358,15 @@ "message": "Вы уверены, что хотите удалить интеграцию {name}?", "notification": { "success": { - "title": "Интеграция удалена", "message": "Интеграция успешно удалена" }, "error": { - "title": "Не удалось удалить", "message": "Не удалось удалить интеграцию" } } } }, "field": { - "name": { - "label": "Название" - }, - "url": { - "label": "URL-адрес" - }, "attemptSearchEngineCreation": { "label": "Создать поисковую систему", "description": "Интеграцию \"{kind}\" можно использовать с поисковыми системами. Включите эту опцию для автоматической настройки поисковой системы." @@ -778,6 +1378,10 @@ "label": "Создать приложение", "description": "Создать приложение с тем же названием и значком, что и у интеграции. Оставьте поле ниже пустым, чтобы использовать URL интеграции." }, + "linkApp": { + "label": "Привязать существующее приложение", + "description": "Подключите эту интеграцию к приложению, которое вы уже можете использовать." + }, "appHref": { "placeholder": "Свой URL приложения" }, @@ -791,7 +1395,11 @@ "grid": { "widgetCount": "{count} виджетов", "noWidgets": "Нет виджетов", - "detected": "Обнаружено через Docker" + "detected": "Обнаружено через Docker", + "connected": "{count, plural, one {# подключено} other {# подключено}}", + "tiedWidgets": "Привязанные виджеты", + "more": "+{count} больше", + "loadError": "Не удалось загрузить интеграции. Попробуйте еще раз перед созданием нового соединения." }, "category": { "dnsHole": "DNS", @@ -822,7 +1430,10 @@ "analytics": "Аналитика", "vpn": "VPN", "mediaLibrary": "Медиа-библиотека", - "uptimeMonitoring": "Мониторинг доступности" + "uptimeMonitoring": "Мониторинг доступности", + "beszel": "Beszel", + "systemMonitoring": "Мониторинг системы", + "security": "Безопасность" }, "testConnection": { "action": { @@ -1107,6 +1718,22 @@ "slug": { "label": "Slug страницы статуса", "newLabel": "Новый slug страницы статуса" + }, + "wazuhIndexerUrl": { + "label": "URL индексатора", + "newLabel": "Новый адрес индексатора" + }, + "wazuhIndexerUsername": { + "label": "Имя пользователя индексатора", + "newLabel": "Новое имя пользователя индексатора" + }, + "wazuhIndexerPassword": { + "label": "Пароль индексатора", + "newLabel": "Новый пароль индексатора" + }, + "wazuhDashboardUrl": { + "label": "URL панели инструментов (необязательно)", + "newLabel": "Новый URL панели инструментов" } } }, @@ -1115,54 +1742,19 @@ "interact": "Взаимодействие с подключенными сервисами", "full": "Полное управление интеграциями" }, - "audiobookshelf": { - "name": "Audiobookshelf", - "description": "Сервер аудиокниг и подкастов с собственным хостингом" - }, - "navidrome": { - "name": "Navidrome", - "description": "Сервер потоковой музыки с собственным хостингом и совместимостью с Subsonic API" - }, - "uptimeKuma": { - "name": "Uptime Kuma", - "description": "Приложение для мониторинга работоспособности других приложений и сервисов", - "secret": { - "slug": { - "description": "Метка статуса вашей публичной страницы. \"Default\", если не установлена." - }, - "apiKey": { - "description": "Необязательный ключ API для доступа к аутентификации" - } - } - }, - "traefik": { - "name": "Traefik", - "description": "Облачный обратный прокси и балансировщик нагрузки" - }, - "paperlessNgx": { - "name": "Paperless-ngx", - "description": "Система управления документами для архивирования и организации сканированных документов" - }, - "patchmon": { - "name": "PatchMon", - "description": "Управление исправлениями и мониторинг для узлов Linux" - }, - "bazarr": { - "name": "Bazarr", - "description": "Программное дополнение к Sonarr и Radarr, которое управляет субтитрами и загружает их" - }, - "wud": { - "name": "Что же докер", - "description": "Мониторинг того, какие из контейнеров Docker доступны для обновления изображений" + "llamacpp": { + "name": "llama.cpp", + "description": "Мониторинг локального сервера llama.cpp llama-сервера: здоровье, модель и метрика генерации" } }, "media": { "plural": "Медиафайлы", "search": "Поиск медиафайлов", "field": { - "name": "Название", + "preview": "Предварительный просмотр", "size": "Размер", - "creator": "Создатель" + "creator": "Создатель", + "actions": "Управление" }, "action": { "upload": { @@ -1190,10 +1782,12 @@ } }, "copy": { - "label": "Копировать URL" + "label": "Копировать URL", + "labelNamed": "Скопировать URL для {name}" }, "open": { - "label": "Открыть медиа" + "label": "Открыть медиа", + "labelNamed": "Открыть {name}" } }, "noResults": { @@ -1208,7 +1802,6 @@ "add": "Добавить", "apply": "Применить", "backToOverview": "Вернуться к обзору", - "skip": "Пропустить", "change": "Изменить", "create": "Создать", "createAnother": "Создать и начать заново", @@ -1231,16 +1824,31 @@ "tryAgain": "Попробовать снова", "loading": "Загрузка", "show": "Показать", - "hide": "Скрыть" + "hide": "Скрыть", + "undo": "Отменить", + "editNamed": "Изменить {name}", + "deleteNamed": "Удалить {name}", + "clearSearch": "Очистить поиск", + "copy": "Копировать", + "copied": "Скопировано", + "refresh": "Обновить" + }, + "pagination": { + "pageOf": "Страница {page} из {totalPages}" }, "here": "здесь", + "serviceUrlTemplate": { + "serverTitle": "Обычный адрес сервера", + "urlModeLabel": "Шаблон служебного адреса", + "hostPort": "Один хост, разные порты", + "subdomain": "Один поддомен на сервис", + "path": "Один путь на сервис" + }, "iconPicker": { "label": "URL иконки", + "description": "Поиск в библиотеке, вставьте URL изображения или загрузите файл.", "header": "Искать изображения {countIcons} по имени", "headerLoading": "Поиск изображений по имени", - "noResults": "Нет значков, соответствующих \"{search}\".", - "error": "Не удалось загрузить иконки.", - "description": "Поиск в библиотеке, вставьте URL изображения или загрузите файл.", "clear": "Очистить изображение", "uploadImage": "Загрузить изображение", "results": "Результаты поиска изображений", @@ -1249,7 +1857,9 @@ "otherImages": "Другие изображения", "urlLoading": "Проверка изображения…", "urlReady": "Изображение готово к использованию", - "urlError": "Это изображение не может быть загружено. Проверьте URL и повторите попытку." + "urlError": "Это изображение не может быть загружено. Проверьте URL и повторите попытку.", + "noResults": "Нет значков, соответствующих \"{search}\".", + "error": "Не удалось загрузить иконки." }, "colorScheme": { "options": { @@ -1261,7 +1871,6 @@ "information": { "min": "Мин.", "max": "Макс.", - "days": "Дней", "hours": "Часов", "minutes": "Минут" }, @@ -1298,16 +1907,16 @@ }, "userAvatar": { "menu": { - "switchToDarkMode": "Переключить на тёмную тему", - "switchToLightMode": "Переключить на светлую тему", + "open": "Открыть меню аккаунта", "management": "Управление", - "docker": "Docker", "preferences": "Настройки", "logout": "Выйти", "login": "Вход", "homeBoard": "Ваша домашняя панель", - "loggedOut": "Выход выполнен", - "updateAvailable": "Доступно {countUpdates} обновлений: {tag}" + "updateAvailable": "Доступно {countUpdates} обновлений: {tag}", + "assistant": "Помощник", + "assistantThinking": "Мысль", + "modifier": "Mod" } }, "dangerZone": "Опасная зона", @@ -1355,13 +1964,66 @@ "kilometersPerHour": "км/ч", "milesPerHour": "миль/ч" } + }, + "widgetQuery": { + "loading": "Загрузка данных виджета" + }, + "total": "Всего", + "filesystemUsage": "{count, plural, one {Продемонстрируйте использование # файловой системы} other {Покажите использование # файловых систем}}", + "field": { + "name": "Название задачи" + }, + "label": { + "new": "Новый" + }, + "entity": { + "apps": "Приложения", + "boards": "Панели", + "certificates": "Сертификаты", + "customWidgets": "Пользовательские виджеты", + "groups": "Группы", + "integrations": "Интеграции", + "invites": "Приглашения", + "logs": "Логи", + "media": "Медиа", + "searchEngines": "Поисковые системы", + "tasks": "Задачи", + "users": "Пользователи" } }, "section": { - "dynamic": { + "option": { + "showLabel": { + "label": "Показать метку", + "description": "Отображать метку контейнера над его содержимым." + }, + "collapsible": { + "label": "Разрешить сворачивать", + "description": "Разрешить зрителям расширять и сворачивать этот контейнер." + }, + "showOpenAll": { + "label": "Показать действие всплывающих окон", + "description": "Показать действие, которое открывает каждое приложение в этом контейнере в новых вкладках." + }, + "scrollable": { + "label": "Прокрутка", + "description": "Сохраняйте этот контейнер в установленном размере и прокручивайте его содержимое вместо того, чтобы расти, чтобы соответствовать ему." + } + }, + "action": { + "openAllInNewTabsFor": "Открыть все приложения в {name} во вкладках" + }, + "openAllInNewTabs": { + "title": "Открыть всё в новых вкладках", + "text": "Некоторые браузеры могут блокировать массовое открытие вкладок из соображений безопасности. Homarr не смог открыть все окна, поскольку ваш браузер заблокировал это действие. Пожалуйста, разрешите \"Открывать всплывающие окна\" и повторите попытку." + }, + "container": { + "untitled": "Безымянный контейнер", "action": { - "create": "Новый динамический элемент", - "remove": "Удалить динамический элемент" + "create": "Новый контейнер", + "remove": "Удалить контейнер", + "expand": "Развернуть", + "collapse": "Свернуть" }, "option": { "title": { @@ -1375,55 +2037,12 @@ } }, "remove": { - "title": "Удалить динамический элемент", - "message": "Вы уверены, что хотите удалить этот динамический элемент? Содержимое будет перемещено в то же место в родительском элементе." - } - }, - "category": { - "field": { - "name": { - "label": "Название" - } - }, - "action": { - "create": "Новая категория", - "edit": "Переименовать категорию", - "remove": "Удалить категорию", - "moveUp": "Переместить вверх", - "moveDown": "Переместить вниз", - "createAbove": "Создать категорию выше", - "createBelow": "Создать категорию ниже", - "openAllInNewTabs": "Открыть всё в новых вкладках" - }, - "create": { - "title": "Новая категория", - "submit": "Добавить категорию" - }, - "remove": { - "title": "Удалить категорию", - "message": "Вы уверены, что хотите удалить категорию {name}?" - }, - "edit": { - "title": "Переименовать категорию", - "submit": "Переименовать категорию" - }, - "menu": { - "label": { - "create": "Новая категория", - "changePosition": "Изменить позицию", - "settings": "Настройки" - } - }, - "openAllInNewTabs": { - "title": "Открыть всё в новых вкладках", - "text": "Некоторые браузеры могут блокировать массовое открытие вкладок из соображений безопасности. Homarr не смог открыть все окна, поскольку ваш браузер заблокировал это действие. Пожалуйста, разрешите \"Открывать всплывающие окна\" и повторите попытку." + "message": "Удалить контейнер? Его содержимое переместится в окрестности." } } }, "item": { "action": { - "create": "Новый элемент", - "import": "Импортировать элемент", "edit": "Редактировать элемент", "moveResize": "Переместить / изменить размер", "duplicate": "Дублировать элемент", @@ -1432,7 +2051,7 @@ "menu": { "label": { "settings": "Настройки", - "refresh": "Обновить", + "settingsFor": "Настройки для {name}", "options": "Опции", "actions": "Действия" }, @@ -1441,21 +2060,96 @@ "error": "Ошибка", "loading": "Загрузка", "idle": "Простой" + }, + "notification": { + "saveError": { + "title": "Не удается сохранить виджет", + "message": "Изменения виджета были отменены" + } } }, "create": { "title": "Выберите тип элемента", "search": "Фильтр элементов", - "addToBoard": "Добавить на панель" + "addToBoard": "Добавить на панель", + "addAtPosition": "Добавить элемент здесь", + "destination": { + "label": "Добавить в", + "description": "Выберите, где виджет должен появиться. Вы можете переместить его позже.", + "mainCanvas": "Основной холст", + "leftRail": "Левый рельс", + "rightRail": "Правые рельсы" + }, + "connectionStatus": { + "ready": "Готов", + "needsSetup": "Требуется настройка", + "noConnectionRequired": "Подключение не требуется" + }, + "customWidget": "Пользовательский виджет", + "standalone": "Автономный", + "missingIntegration": { + "title": "Сначала подключите службу", + "noPermission": "Этот виджет требует совместимого подключения к сервису. Попросите администратора подключить один, а затем повторите попытку." + }, + "notification": { + "success": { + "title": "Виджет добавлен", + "message": "{name} был добавлен на эту доску.", + "relocatedMessage": "{name} был добавлен в {destination} , потому что выбранное место назначения недоступно." + }, + "error": { + "title": "Не удается добавить элемент", + "message": "Элемент не может быть добавлен на эту доску" + } + } + }, + "selection": { + "summary": "{count, plural, one {# выбранный предмет} other {# выбранных предметов}}", + "selected": "{count, plural, one {# выбрано} other {# выбрано}}", + "copy": "Копировать", + "copied": "{count, plural, one {# Элемент скопирован в буфер обмена} other {# Элементов скопировано в буфер обмена}}", + "copyError": "Выбранные элементы не могут быть скопированы. Ваш браузер может не разрешить доступ к буферу обмена.", + "paste": "Вставить", + "pasteShortcut": "Вставить скопированные элементы здесь (Ctrl / + V)", + "pasted": "{count, plural, one {# Элемент вставлен} other {# предметов вставлено}}", + "pasteError": "Буфер обмена не может быть прочитан. Ваш браузер может не разрешить доступ к буферу обмена.", + "pasteInvalid": "В буфере обмена нет элементов доски Homarr.", + "pasteUnavailable": "Скопированные элементы не помещаются на этой доске.", + "removed": "{count, plural, one {# элемент удален} other {# предметов удалено}}", + "move": "Переместить", + "moveTo": "Переместить выбранные элементы", + "delete": "Удалить", + "clear": "Очистить выделенное", + "clearShortcut": "Очистить выделенное (Escape)", + "saveErrorTitle": "Не удается обновить элементы", + "saveErrorMessage": "Изменения не могут быть сохранены. Доска была обновлена.", + "moveUnavailableTitle": "Не удается переместить выбранные элементы", + "moveUnavailableMessage": "В пункте назначения недостаточно места для всего выбора." }, "moveResize": { "title": "Переместить / изменить размер элемента", + "entryLabel": "{name}, столбец {column}, ряд {row}", + "target": { + "numbered": "{name}, пункт назначения {index}", + "located": "{name}, {location}, пункт назначения {index}" + }, + "keyboard": { + "instructions": "Нажмите Enter или пробел для начала редактирования клавиатуры. Используйте клавиши со стрелками для перемещения, клавиши Shift плюс стрелки для изменения размера и Escape для остановки.", + "started": "Начато редактирование клавиатуры. Используйте клавиши со стрелками для перемещения, Shift плюс клавиши со стрелками для изменения размера и Escape для остановки.", + "stopped": "Редактирование клавиатуры остановлено.", + "boundary": "Это изменение не помещается в этот раздел." + }, "field": { + "section": { + "label": "8.1.1 Секция или рельсы" + }, "width": { - "label": "Ширина" + "label": "Ширина", + "shortLabel": "В" }, "height": { - "label": "Высота" + "label": "Высота", + "shortLabel": "Н" }, "xOffset": { "label": "Смещение по X" @@ -1469,18 +2163,36 @@ "title": "Редактировать элемент", "tab": { "widget": "Редактировать виджет", - "app": "Редактировать приложение" + "app": "Редактировать приложение", + "integration": "Изменить интеграцию" }, "app": { "propagationNotice": "Изменения этого приложения будут применены везде, где оно используется на всех панелях." }, + "integration": { + "action": "Изменить соединение", + "description": "Проверить или исправить выбранное соединение не покидая этот виджет.", + "editLabel": "Редактирование интеграции {name}", + "fullAccessRequired": "Требуется полный доступ", + "propagationNotice": "Изменения в этой интеграции применяются везде, где она используется. Соединение тестируется перед сохранением.", + "loading": "Загрузка интеграции", + "loadError": "Эта интеграция не может быть загружена. Попробуйте еще раз перед изменением параметров подключения." + }, + "preview": { + "integrationRequired": "Выберите соединение для предварительного просмотра этого виджета.", + "size": "Размер файла" + }, + "settings": { + "label": "Настройки виджета" + }, "advancedOptions": { "label": "Расширенные настройки", "title": "Расширенные настройки элемента" }, "field": { "integrations": { - "label": "Интеграции" + "label": "Интеграции", + "removeLabel": "Удалить интеграцию {name}" }, "title": { "label": "Заголовок" @@ -1494,17 +2206,18 @@ } }, "remove": { - "title": "Удалить элемент", "message": "Вы уверены, что хотите удалить этот элемент?" + }, + "advancedFocus": { + "open": "Открыть расширенный вид", + "close": "Закрыть расширенный вид", + "label": "Расширенный вид {widget}" } }, "widget": { "integrationSelect": { "configureIntegrationFirst": "Сначала подключите интеграцию", - "loading": "Загрузка...", - "placeholder": "Выберите опцию", - "noResults": "Ничего не найдено", - "loadError": "Не удалось загрузить параметры" + "placeholder": "Выберите опцию" }, "app": { "name": "Приложение", @@ -1513,9 +2226,6 @@ "appId": { "label": "Выберите приложение" }, - "openInNewTab": { - "label": "Открывать в новой вкладке" - }, "showTitle": { "label": "Показывать название приложения" }, @@ -1523,11 +2233,8 @@ "label": "Включить простую проверку доступности" }, "layout": { - "label": "Расположение", "option": { - "row": "Горизонтально", "row-reverse": "Горизонтально (наоборот)", - "column": "Вертикально", "column-reverse": "Вертикально (наоборот)" } }, @@ -1552,23 +2259,60 @@ "name": "Закладки", "description": "Отображает несколько ссылок на приложение", "option": { - "title": { - "label": "Заголовок" + "showTitle": { + "label": "Показать название виджета" + }, + "titleSize": { + "label": "Размер заголовка виджета (px)" }, "layout": { "label": "Расположение", "option": { - "row": { - "label": "Горизонтально" - }, - "column": { - "label": "Вертикально" - }, - "grid": { - "label": "Сетка" + "adaptive": { + "label": "Адаптивный" }, "gridHorizontal": { "label": "Горизонтальная сетка" + }, + "icons": { + "label": "Иконки" + } + } + }, + "variant": { + "label": "Внешний вид", + "option": { + "soft": { + "label": "Мягкий" + }, + "filled": { + "label": "Заполнено" + }, + "outline": { + "label": "Контур" + }, + "plain": { + "label": "Простой" + } + } + }, + "spacing": { + "label": "Интервал карты", + "option": { + "xs": { + "label": "Очень маленький" + }, + "sm": { + "label": "Маленькое" + }, + "md": { + "label": "Среднее" + }, + "lg": { + "label": "Большое" + }, + "xl": { + "label": "Очень большой" } } }, @@ -1581,17 +2325,28 @@ "hideHostname": { "label": "Скрыть имена хостов" }, - "openNewTab": { - "label": "Открывать в новой вкладке" - }, "withBorder": { "label": "Показывать рамку" }, + "grow": { + "label": "Разверните карточки для заполнения строки" + }, + "customUrls": { + "label": "Пользовательские ссылки" + }, "items": { "label": "Закладки", - "add": "Добавить закладку" + "remove": "Удалить закладку", + "apps": { + "label": "Добавить закладки", + "description": "Вставьте URL или найдите существующие приложения. Перетащите закладки ниже, чтобы изменить их порядок.", + "placeholder": "Вставить URL-адреса или приложения для поиска", + "addUrl": "Добавить этот URL", + "hint": "Нажмите Enter для добавления URL. Вставьте URL-адрес, разделенный запятыми, или один на строку, чтобы добавить несколько." + } } - } + }, + "empty": "Добавить URL или приложение в настройках виджета" }, "archiveTeamWarrior": { "name": "ArchiveTeam Warrior", @@ -1600,33 +2355,61 @@ "showBroadcastMessage": { "label": "Показать широковещательные сообщения" } + }, + "noProjectSelected": "Проект не выбран", + "runnerStatus": "Серебряный: {status}", + "projectId": "Проект: {id}", + "sessionReceived": "Сессия получена: {value}", + "sessionSent": "Сессия отправлена: {value}", + "sessionId": "Сеанс: {id}", + "startedAt": "Запущено {date}", + "emptyItems": "Нет активных или недавних заданий в этом снимке", + "metric": { + "running": "Выполняется", + "completed": "Готово", + "failed": "Ошибка", + "canceled": "Отменено", + "download": "Скачать", + "upload": "Выгрузить" + }, + "status": { + "running": "Выполняется", + "completed": "Завершено", + "failed": "Ошибка", + "canceled": "Отменено", + "stopped": "Остановлено", + "idle": "Простой", + "unknown": "Неизвестно" + } + }, + "wud": { + "name": "Что же докер", + "description": "Показывать количество доступных обновлений в просмотренных контейнерах.", + "title": "Что же докер", + "monitored": "Мониторинг", + "updatesAvailable": "{count, plural, one {# доступно обновление} other {# доступно обновлений}}", + "updateAvailable": "Доступно обновление", + "openReleaseNotes": "Открыть примечания к релизу", + "option": { + "showRing": { + "label": "Показать обновление кольца" + }, + "showUpdateList": { + "label": "Показать список обновлений контейнеров", + "description": "Список каждого контролируемого контейнера, имеющего доступное обновление изображений" + } } }, "dnsHoleSummary": { "name": "Сводка DNS-фильтра", "description": "Отображает сводную информацию о вашем DNS-фильтре", "option": { - "layout": { - "label": "Расположение", - "option": { - "row": { - "label": "Горизонтально" - }, - "column": { - "label": "Вертикально" - }, - "grid": { - "label": "Сетка" - } - } - }, "usePiHoleColors": { "label": "Использовать цвета Pi-hole" } }, "error": { - "internalServerError": "Не удалось получить сводку DNS-фильтра", - "integrationsDisconnected": "Нет данных, все интеграции отключены" + "internalServerError": "Не удалось получить сводку DNS-фильтра" }, "data": { "adsBlockedToday": "заблокировано сегодня", @@ -1634,32 +2417,24 @@ "dnsQueriesToday": "DNS-запросов сегодня", "domainsBeingBlocked": "Доменов в списке блокировки" }, - "domainsTooltip": "Из-за наличия нескольких интеграций Homarr не может рассчитать точное количество заблокированных доменов" + "domainsTooltip": "Из-за наличия нескольких интеграций Homarr не может рассчитать точное количество заблокированных доменов", + "status": { + "enabled": "Включено", + "disabled": "Отключено", + "unknown": "Неизвестно" + } }, "dnsHoleControls": { "name": "Управление DNS-фильтром", "description": "Управляйте PiHole или AdGuard прямо с вашей панели", "option": { - "layout": { - "label": "Расположение", - "option": { - "row": { - "label": "Горизонтально" - }, - "column": { - "label": "Вертикально" - }, - "grid": { - "label": "Сетка" - } - } - }, "showToggleAllButtons": { "label": "Показывать кнопки управления защитой" } }, "error": { - "internalServerError": "Не удалось управлять DNS-фильтром" + "internalServerError": "Не удалось управлять DNS-фильтром", + "bulkActionsFailed": "{count, plural, one {# действие не удалось} other {# действия не удалось}}" }, "controls": { "enableAll": "Включить всё", @@ -1670,8 +2445,6 @@ "disabled": "Отключено", "processing": "Обработка", "disconnected": "Отключено", - "hours": "Часы", - "minutes": "Минуты", "unlimited": "Оставить пустым для неограниченного времени" } }, @@ -1683,16 +2456,10 @@ "label": "Настроить отображение заголовка/города", "description": "Показывать настраиваемый заголовок или название города/страны над часами." }, - "customTitle": { - "label": "Заголовок" - }, "is24HourFormat": { "label": "24-часовой формат", "description": "Использовать 24-часовой формат вместо 12-часового" }, - "showSeconds": { - "label": "Показывать секунды" - }, "useCustomTimezone": { "label": "Использовать другой часовой пояс" }, @@ -1711,29 +2478,295 @@ "label": "Пользовательский формат времени", "description": "Используйте формат ISO 8601 для отображения времени (это переопределит другие настройки)" }, - "customDateFormat": { - "label": "Пользовательский формат даты", - "description": "Используйте формат ISO 8601 для отображения даты (это переопределит другие настройки)" - }, "showWeather": { "label": "Показывать погоду", "description": "Отображение маленькой анимированной иконки погоды и температуры в углу карточки" }, - "weatherLocation": { - "label": "Местоположение для прогноза" - }, "isWeatherFormatFahrenheit": { "label": "Использовать шкалу Фаренгейта" + }, + "animateWeatherIcon": { + "label": "Анимация значка погоды", + "description": "Анимация значка погоды. По умолчанию отключена и всегда отключена при запросе уменьшенного движения." + }, + "colorWeatherByDayNight": { + "label": "Цвет погоды по дням и ночам", + "description": "Назначьте значок погоды и температуру с цветом дня или ночным цветом, на основе того, что сейчас день или ночь в выбранном месте." + }, + "dayWeatherColor": { + "label": "Цвет дня" + }, + "nightWeatherColor": { + "label": "Ночной цвет" + }, + "worldClockCities": { + "label": "Города часов мира", + "description": "Добавлять и заказывать до шести городов для расширенного просмотра." } + }, + "timezoneList": { + "timezone": "Часовой пояс", + "cityLabel": "Метка города", + "searchPlaceholder": "Поиск часовых поясов", + "noResults": "Часовые зоны не найдены", + "unsupportedOption": "Не поддерживается: {timeZone}", + "add": "Добавить город", + "remove": "Удалить {city}", + "reorder": "Изменить порядок {city}", + "limit": "Конфигурация {count} из {maximum} городов" + }, + "worldClock": { + "primary": "Первичные часы", + "local": "Местное время", + "today": "Сегодня", + "tomorrow": "Завтра", + "yesterday": "Вчера", + "noSecondaryCities": "Добавить города в параметры виджета, чтобы сравнить их здесь.", + "unsupportedPrimaryTitle": "Основной часовой пояс недоступен", + "unsupportedPrimary": "{timeZone} не поддерживается в этом браузере. Отображение UTC как хорошо отмеченный запас.", + "unsupportedTimeZone": "Неподдерживаемый часовой пояс: {timeZone}", + "accessibleTime": "{city}: {time}, {date}, {timeZone}", + "advancedLabel": "Расширенные часы мира", + "cities": "Мировые часы", + "cityCount": "{count} timezones", + "timeBarLabel": "24-часовая позиция дня для {city}", + "dayProgress": "Прошло {percent}% · Осталось {hours}ч {minutes}", + "phaseLegend": "Легенда времени суток", + "tick": { + "midnight": "00", + "morning": "06", + "noon": "12", + "evening": "18", + "end": "24" + }, + "phaseRange": { + "night": "00–05 · 21–24", + "dawn": "05–08", + "day": "08–18", + "dusk": "18–21" + }, + "phase": { + "night": "Ночь", + "dawn": "Рассвет", + "day": "День", + "dusk": "Сумерек" + } + } + }, + "airQuality": { + "name": "Качество воздуха и УФ", + "description": "Отображает качество воздуха, индекс ультрафиолета, загрязнители и пыльцу для местоположения.", + "option": { + "location": { + "label": "Расположение качества воздуха" + }, + "aqiStandard": { + "label": "Стандарт AQI", + "options": { + "auto": "Автоматически для локали", + "european": "Европейский AQI", + "us": "AQI США" + } + }, + "showUv": { + "label": "Показать УФ-индекс" + }, + "showPollutants": { + "label": "Показывать концентрацию загрязняющих веществ" + }, + "showPollen": { + "label": "Показать пыльцу концентрации" + } + }, + "category": { + "good": "Хорошо", + "fair": "Справедливый", + "moderate": "Модерировать", + "unhealthySensitive": "Нездоровые для чувствительных групп", + "unhealthy": "Неисправен", + "poor": "Плохое", + "veryPoor": "Очень бедный", + "veryUnhealthy": "Очень нездоровый", + "extremelyPoor": "Крайне бедный", + "hazardous": "Опасный", + "unknown": "Нет AQI чтений" + }, + "uv": { + "label": "УФ индекс", + "category": { + "low": "Низкий", + "moderate": "Модерировать", + "high": "Высокий", + "veryHigh": "Очень высокий", + "extreme": "Экстремальная", + "unknown": "Нет чтения" + } + }, + "dominantPollutant": "Dominant pollutant", + "aqiLabel": "AQI", + "strongestPollen": "Наивысшая пыльца", + "unit": { + "concentration": "{value} мкг/м³", + "pollen": "{value} зерна/м3" + }, + "pollutant": { + "pm2_5": "ТЧ2.5", + "pm10": "ТЧ10", + "ozone": "Озон", + "nitrogenDioxide": "Диоксид азота", + "sulphurDioxide": "Sulphur dioxide", + "carbonMonoxide": "моноксид углерода" + }, + "pollen": { + "alder": "Alder", + "birch": "Береза", + "grass": "Трава", + "mugwort": "Мясник", + "olive": "Олив", + "ragweed": "Редкие" + }, + "compact": { + "sixHourTrend": "Тенденция AQI на следующие шесть часов" + }, + "advanced": { + "observedAt": "Обновлено {time}", + "next24Hours": "Следующие 24 часа", + "pollutants": "Концентрация загрязняющих веществ", + "pollen": "Концентрации пыльцы", + "sevenDayForecast": "7-дневный максимальный прогноз", + "aqiValue": "AQI {value}", + "uvValue": "УФ- {value}", + "uvShort": "УФ- {value}", + "noForecast": "Прогнозируемые данные отсутствуют" + } + }, + "countdown": { + "name": "Тайм-аут", + "description": "Отслеживание предстоящих событий и текущих юбилеев.", + "option": { + "events": { + "label": "События", + "description": "Добавить и заказать до 20 одноразовых или ежегодных обратных отсчетов. Даты вносятся в выбранный часовой пояс." + }, + "showProgress": { + "label": "Показать прогресс" + }, + "showSeconds": { + "label": "Показать секунды", + "description": "Оставлять секунды видимыми для каждого предстоящего события." + } + }, + "dateTimeEventList": { + "newEvent": "Новое событие", + "add": "Добавить событие", + "remove": "Удалить {event}", + "reorder": "Изменить порядок {event}", + "eventLabel": "Метка события", + "timezone": "Часовой пояс", + "unsupportedOption": "Не поддерживается: {timeZone}", + "recurrence": "Повторы", + "recurrenceOption": { + "none": "Не повторять", + "yearly": "Каждый год" + }, + "target": "Дата и время события", + "trackProgress": "Отслеживать прогресс с даты начала", + "start": "Дата и время начала выполнения", + "confirmDateTime": "Подтвердите дату и время", + "limit": "Конфигурация {count} из {maximum} событий" + }, + "empty": { + "title": "Отсчет времени пока нет", + "description": "Добавьте событие в настройках виджета для начала обратного отсчета." + }, + "completed": "Завершено", + "yearly": "Ежегодно", + "progress": "Прогресс события", + "upcoming": "Предстоящие", + "completedEvents": "Завершенные события", + "invalid": { + "title": "Некоторые события не могут быть отображены", + "description": "{count, plural, one {У одного события неверная дата или часовой пояс не поддерживаются.} other {# событий имеют неверную дату или часовой пояс.}}", + "value": "Unavailable" + }, + "alert": { + "notifications": "Уведомления браузера", + "permissionDenied": "Уведомления заблокированы в этом браузере.", + "reached": "Достигнута цель обратного отсчета." + } + }, + "timer": { + "name": "Timer / Pomodoro", + "description": "Запускает простой таймер или настраиваемый последовательность Pomodoro.", + "option": { + "mode": { + "label": "Режим", + "options": { + "timer": "Таймер", + "pomodoro": "Pomodoro" + } + }, + "timerMinutes": { + "label": "Таймер минуты" + }, + "focusMinutes": { + "label": "Минуты фокусировки" + }, + "shortBreakMinutes": { + "label": "Короткий перерыв минут" + }, + "longBreakMinutes": { + "label": "Длинные минуты перерыва" + }, + "sessionsBeforeLongBreak": { + "label": "Фокусные сессии перед длительным перерывом" + }, + "autoStartBreaks": { + "label": "Автоматически запускать перерывы" + }, + "autoStartFocus": { + "label": "Автоматически запускать сессии фокуса" + } + }, + "phase": { + "timer": "Таймер", + "focus": "Фокус", + "shortBreak": "Короткий перерыв", + "longBreak": "Длинный перерыв" + }, + "action": { + "start": "Запустить", + "pause": "Пауза", + "reset": "Reset" + }, + "attention": { + "timerComplete": "Timer complete", + "phaseReady": "{phase} готов" + }, + "progress": "Прогресс таймера: {progress}%", + "compact": { + "completedFocus": "{count, plural, =0 {Сессии фокуса не пройдены} one {# фокус-сессия пройдена} other {# фокус-сеансы пройдены}}" + }, + "alert": { + "title": "Timer complete", + "completed": "{phase} завершен." + }, + "advanced": { + "sequence": "Pomodoro sequence", + "focusSession": "Фокус {session}", + "settings": "Постоянные настройки", + "settingsHint": "Используйте контекстное меню виджета для редактирования настроек доски.", + "localAlerts": "Местные оповещения", + "notifications": "Уведомления браузера", + "sound": "Звуки таймера", + "localAlertsHint": "Звуки таймера включены по умолчанию. Звуки и уведомления применяются только к этому виджету в этом браузере.", + "notificationsDenied": "Уведомления заблокированы в этом браузере." } }, "minecraftServerStatus": { "name": "Статус сервера Minecraft", "description": "Отображает текущий статус и информацию о сервере Minecraft", "option": { - "title": { - "label": "Заголовок" - }, "domain": { "label": "Домен сервера" }, @@ -1753,11 +2786,21 @@ "noStation": "Станция не выбрана", "option": { "baseUrl": { - "label": "URL поиска" + "label": "URL поиска", + "description": "Пользовательские URL-адреса должны иметь публичный IP-адрес. Приватные и локальные хосты отклонены." }, "station": { - "label": "Станция" + "label": "Станция", + "placeholder": "Поиск станции" } + }, + "error": { + "customSourceUnavailable": "Источник расписания недоступен. Проверьте, что его URL устраняется на публичный IP-адрес.", + "stationSearch": "Не удается найти станции. Проверьте пользовательский URL и доступ к доске." + }, + "warning": { + "stale": "Расписание не может быть обновлено. Показаны отправления последний обновленный на {time}.", + "staleCompact": "Устаревшие данные" } }, "notebook": { @@ -1789,6 +2832,9 @@ "directionRtl": "Установить направление текста справа налево", "blockquote": "Цитата", "horizontalLine": "Горизонтальная линия", + "details": "Переключить свернутую секцию", + "expandDetails": "Развернуть свертываемую секцию", + "collapseDetails": "Свернуть свертываемую секцию", "bulletList": "Маркированный список", "orderedList": "Нумерованный список", "checkList": "Список с чекбоксами", @@ -1797,16 +2843,20 @@ "link": "Ссылка", "unlink": "Удалить ссылку", "image": "Вставить изображение", - "addTable": "Добавить таблицу", + "insertTable": "Вставить таблицу", + "insertTableSize": "Вставить таблицу {columns} × {rows}", "deleteTable": "Удалить таблицу", "colorCell": "Цвет ячейки", - "mergeCell": "Объединить/разделить ячейки", + "mergeCells": "Объединить ячейки", + "splitCell": "Разделить ячейку", "addColumnLeft": "Добавить столбец слева", "addColumnRight": "Добавить столбец справа", "deleteColumn": "Удалить столбец", "addRowTop": "Добавить строку сверху", "addRowBelow": "Добавить строку снизу", - "deleteRow": "Удалить строку" + "deleteRow": "Удалить строку", + "toggleHeaderRow": "Переключить строку заголовка", + "toggleHeaderColumn": "Переключить колонку заголовка" }, "align": { "left": "По левому краю", @@ -1817,8 +2867,6 @@ "clearColor": "Сбросить цвет", "source": "Источник", "widthPlaceholder": "Значение в % или пикселях", - "columns": "Столбцы", - "rows": "Строки", "width": "Ширина", "height": "Высота" }, @@ -1830,7 +2878,9 @@ "discard": "Отменить изменения", "keepEditing": "Продолжить редактирование" } - } + }, + "saveFailed": "Не удается сохранить заметку", + "documentStats": "{words, plural, one {# слово} other {# слов}} · {characters, plural, one {# символ} other {# символов}}" }, "anchorNote": { "name": "Заметка Anchor", @@ -1839,9 +2889,6 @@ "noteId": { "label": "Заметка" }, - "showTitle": { - "label": "Показывать заголовок" - }, "showUpdatedAt": { "label": "Показывать последнее обновление" } @@ -1851,14 +2898,20 @@ "notFound": "Заметка не найдена", "noNotes": "Заметки не найдены", "integrationRequired": "Сначала выберите интеграцию Anchor", - "updatedAt": "Обновлено {date}", "untitled": "Без названия", - "edit": "Редактировать", - "save": "Сохранить", - "cancel": "Отмена", "readOnlyViewer": "У вас есть доступ только для просмотра этой заметки. Редактирование отключено.", "saveForbidden": "У вас нет прав на редактирование этой заметки.", - "saveFailed": "Не удалось сохранить эту заметку. Пожалуйста, повторите попытку." + "saveFailed": "Не удалось сохранить эту заметку. Пожалуйста, повторите попытку.", + "createdAt": "Создано {date}", + "permission": { + "owner": "Владелец", + "editor": "Редактор", + "viewer": "Просмотрщик" + }, + "status": { + "pinned": "Прикреплено", + "archived": "В архиве" + } }, "iframe": { "name": "iFrame", @@ -1917,6 +2970,25 @@ "clickable": { "label": "Кликабельный" } + }, + "state": { + "on": "На", + "off": "Выкл", + "unavailable": "Unavailable", + "unknown": "Неизвестно" + }, + "advanced": { + "entityId": "ID сущности: {id}", + "lastChanged": "Изменен {date}", + "attribute": { + "unit": "Единица измерения", + "deviceClass": "Класс устройства", + "icon": "Иконка" + } + }, + "error": { + "loadFailed": "Не удается загрузить объект", + "toggleFailed": "Не удается обновить объект" } }, "smartHome-executeAutomation": { @@ -1932,11 +3004,31 @@ }, "spotlightAction": { "run": "Запустить {name}" + }, + "advanced": { + "lastExecuted": "Последний запуск на {time}", + "automationId": "ID автоматизации: {id}", + "ready": "Готово к запуску", + "noPermission": "Нет разрешения на запуск этой автоматизации" + }, + "status": { + "running": "Запуск автоматизации", + "success": "Автоматизация завершена" + }, + "error": { + "executeFailed": "Невозможно запустить автоматизацию" } }, "stockPrice": { "name": "Цена акций", "description": "Отображает текущую цену акций компании", + "advanced": { + "currentPrice": "Текущая цена", + "previousClose": "Предыдущее закрытие", + "changePercentage": "Изменить (%)", + "minimum": "Минимум", + "maximum": "Максимум" + }, "option": { "stock": { "label": "Тикер акции" @@ -2007,6 +3099,10 @@ "label": "1 месяц" } } + }, + "showDetails": { + "label": "Показать подробности", + "description": "Показать имя, изменение и диапазон времени в компактном виде. Отключите только для символа и цены." } } }, @@ -2034,6 +3130,13 @@ "showUnmonitored": { "label": "Показывать неотслеживаемые" } + }, + "advanced": { + "previousMonth": "Показать предыдущий месяц", + "nextMonth": "Показать следующий месяц", + "eventCount": "{count, plural, one {# событие} other {# событий}}", + "loading": "Загрузка событий календаря...", + "noEvents": "В этом месяце событий нет" } }, "weather": { @@ -2046,16 +3149,18 @@ "disableTemperatureDecimals": { "label": "Отключить десятичные значения температуры" }, + "animateIcons": { + "label": "Анимация значков погоды" + }, + "showHumidity": { + "label": "Показывать влажность" + }, "showCurrentWindSpeed": { - "label": "Показать текущую скорость ветра", - "description": "Только для текущей погоды" + "label": "Показать текущую скорость ветра" }, "useImperialSpeed": { "label": "Использовать мили/ч для скорости ветра" }, - "location": { - "label": "Местоположение" - }, "showCity": { "label": "Показывать город" }, @@ -2065,13 +3170,10 @@ "forecastDayCount": { "label": "Количество дней прогноза", "description": "Если виджет недостаточно широкий, будет показано меньше дней" - }, - "dateFormat": { - "label": "Формат даты", - "description": "Как должна отображаться дата" } }, "currentWindSpeed": "{currentWindSpeed} {unit}", + "disabled": "Данные о погоде недоступны, так как исходящие подключения отключены", "dailyForecast": { "sunrise": "Восход", "sunset": "Закат", @@ -2094,6 +3196,47 @@ "thunderstorm": "Гроза", "thunderstormWithHail": "Гроза с градом", "unknown": "Неизвестно" + }, + "details": "Показать сведения о погоде", + "detailsFor": "Показать сведения о погоде для {date}", + "advanced": { + "forecast": "7-дневный прогноз", + "hourlyForecast": "Следующие 24 часа", + "day": "День", + "time": "Время", + "conditions": "Условия", + "temperature": "Температура", + "feelsLike": "Чувствуется {temperature}", + "feelsLikeLabel": "Чувства как", + "feelsLikeRange": "Такие чувства: {maximum} / {minimum}", + "highLow": "Высокая {maximum} · Низкая {minimum}", + "observedAt": "Обновлено {time}", + "humidity": "Влажность", + "averageHumidity": "Средняя влажность: {humidity}%", + "currentHumidity": "Текущая влажность", + "wind": "Ветер / Порывы ({unit})", + "currentWind": "Текущий ветер / порывы", + "windValue": "{speed} / {gusts} {unit}", + "windDetail": "Макс. ветер / порывы: {speed} / {gusts} {unit}", + "nextHourPrecipitation": "Осадки на следующий час", + "precipitationChance": "Шанс осадков", + "precipitationValue": "{probability}% · {amount} мм", + "precipitationDetail": "Осадки: {probability}% · {amount} mm", + "todayUv": "Текущий максимальный УФ индекс", + "uvIndex": "Макс. УФ индекс: {value}", + "daylight": "Дневной свет: {duration}", + "hourlyTooltip": "Такие чувства, как {feelsLike}{temperatureUnit} · {amount} mm · влажность {humidity}% · ветра {speed} {speedUnit}", + "hourlyTooltipWithoutHumidity": "Такие чувства, как {feelsLike}{temperatureUnit} · {amount} mm · Ветвь {speed} {speedUnit}", + "detailLabel": { + "feelsLike": "Чувства как", + "precipitation": "Осадки", + "humidity": "Средняя влажность", + "wind": "Макс ветер / Прыжки", + "uv": "Максимальный УФ индекс", + "daylight": "Daylight" + }, + "sun": "Восход / закат", + "noForecast": "Прогнозируемые данные отсутствуют" } }, "indexerManager": { @@ -2106,8 +3249,15 @@ }, "title": "Индексаторы", "testAll": "Проверить все", + "status": { + "healthy": "Исправно", + "unhealthy": "Неисправен", + "disabled": "Отключено", + "unknown": "Здоровье недоступно" + }, "error": { - "internalServerError": "Не удалось получить статус индексаторов" + "internalServerError": "Не удалось получить статус индексаторов", + "testAll": "Индексатор тест не удался. Попробуйте еще раз." } }, "healthMonitoring": { @@ -2136,11 +3286,6 @@ "fileSystem": { "label": "Показать информацию о файловой системе" }, - "visibleStorageVolumes": { - "label": "Видимые объемы хранения", - "description": "Доступно только тогда, когда все выбранные интеграции от Synology. Оставьте пустым, чтобы показать все обнаруженные тома хранения.", - "placeholder": "Выбрать тома хранения" - }, "defaultTab": { "label": "Вкладка по умолчанию" }, @@ -2163,17 +3308,27 @@ "minutes": "{count} минут", "used": "Использовано", "available": "Доступно", - "lastSeen": "Последнее обновление: {lastSeen}" + "lastSeen": "Последнее обновление: {lastSeen}", + "updatesAvailable": "{count, plural, one {# доступно обновление} other {# доступно обновлений}}", + "rebootRequired": "Требуется перезагрузка", + "rebootNotRequired": "Перезагрузка не требуется" + }, + "smartStatus": { + "attributesWithinThresholds": "SMART: атрибуты в пределах порога", + "attributesFailed": "SMART: {attributes} не удалось", + "noCriticalWarning": "SMART: предупреждение не сообщено SSD", + "criticalWarning": "SMART: критическое предупреждение сообщенное SSD" + }, + "gauge": { + "cpuUsage": "Использование ЦП", + "cpuTemperature": "Температура ЦП", + "memoryUsage": "Использование памяти", + "gpuUsage": "Использование GPU {name}" }, - "memory": {}, "error": { "internalServerError": "Не удалось получить данные о состоянии системы" }, "cluster": { - "summary": { - "cpu": "ЦП", - "memory": "Память" - }, "resource": { "node": { "name": "Узлы" @@ -2209,8 +3364,6 @@ "table": { "header": { "name": "Название", - "cpu": "ЦП", - "memory": "Память", "node": "Узел" } } @@ -2220,33 +3373,29 @@ "name": "Статистика Docker", "description": "Статистика контейнеров (этот виджет можно добавить только с правами администратора)", "option": { - "columns": { - "label": "Столбцы для отображения" + "endpointIds": { + "label": "Окружения докеров", + "description": "Оставьте пустым, чтобы показать контейнеры из каждой среды Docker", + "placeholder": "Все окружения Docker" }, - "enableRowSorting": { - "label": "Включить сортировку элементов" + "containerFilter": { + "label": "Контейнеры для фильтрации" + }, + "filterIsWhitelist": { + "label": "Использовать фильтр как белый список" }, "defaultSort": { - "label": "Столбец сортировки по умолчанию", "option": { "name": "Имя", "state": "Состояние", "cpuUsage": "Использование ЦП", "memoryUsage": "Использование памяти" } - }, - "descendingDefaultSort": { - "label": "Обратная сортировка" - }, - "columnOrder": { - "label": "Порядок столбцов" - }, - "columnWidths": { - "label": "Ширина колонки" } }, "error": { "internalServerError": "Не удалось получить статистику контейнеров", + "endpointsUnavailable": "Конечные точки Docker недоступны", "layoutSaveTitle": "Макет таблицы не сохранён", "layoutSaveMessage": "Не удалось сохранить расположение таблицы Docker. Попробуйте переместить или изменить расположение столбца." }, @@ -2255,7 +3404,6 @@ } }, "coolify": { - "name": "Coolify", "description": "Обзор вашего экземпляра Coolify с серверами и приложениями", "option": { "showServers": { @@ -2281,17 +3429,49 @@ "internalServerError": "Не удалось получить данные Coolify" }, "server": { - "buildServer": "Сборка" + "buildServer": "Сборка", + "resourceCounts": "{applications, plural, one {# приложение} other {# приложения}} / {services, plural, one {# услуга} other {# услуга}}", + "reachability": "Доступность", + "usability": "Удобство" + }, + "source": { + "url": "Источник: {url}", + "unavailable": "{source}: unavailable" }, "instances": { "title": "Экземпляры" + }, + "action": { + "openResource": "Открыть {name}", + "openLogs": "Открыть журналы {name}", + "showIp": "Показать IP-адрес", + "hideIp": "Скрыть IP-адрес" + }, + "status": { + "running": "Выполняется", + "stopped": "Остановлено", + "exited": "Остановлен", + "starting": "Запуск", + "restarting": "Перезапускается", + "unknown": "Неизвестно", + "online": "В сети", + "offline": "Не в сети", + "reachable": "Доступно", + "unreachable": "Недоступен", + "usable": "Доступно", + "unusable": "Неиспользуемый" } }, "vpn": { "name": "VPN", "description": "Обзор ваших VPN-подключений", "serviceUnavailable": "VPN недоступен", - "option": {} + "status": { + "running": "Выполняется", + "notRunning": "Не запущен", + "unavailable": "Unavailable", + "vpn": "VPN: {status}" + } }, "ups": { "name": "ИБП", @@ -2318,14 +3498,19 @@ "runtime": "Время работы", "load": "Нагрузка", "input": "Вход", - "output": "Выход" + "output": "Выход", + "batteryVoltage": "Напряжение батареи", + "power": "Сила", + "temperature": "Температура", + "manufacturer": "Производитель", + "model": "Модель", + "serial": "Серийный" }, "error": { "internalServerError": "Не удалось получить данные ИБП" } }, "tracearr": { - "name": "Tracearr", "description": "Мониторинг медиасервера с детальной информацией о потоках и транскодировании", "option": { "showStreams": { @@ -2413,10 +3598,7 @@ "label": "Событие", "description": "Показать общее количество вхождений определенного события", "placeholder": "Выберите событие", - "loading": "Загрузка событий...", - "noEvents": "События не найдены", - "none": "Нет событий", - "configureWebsiteFirst": "Сначала выберите веб-сайт для загрузки событий" + "none": "Нет событий" }, "chartType": { "label": "Тип диаграммы", @@ -2447,26 +3629,21 @@ "eventNames": { "label": "События", "description": "Выберите одно или несколько событий для диаграммы", - "placeholder": "Выберите события...", - "loading": "Загрузка событий...", - "noEvents": "События не найдены", - "configureWebsiteFirst": "Сначала выберите веб-сайт для загрузки событий" + "placeholder": "Выберите события..." }, "topCount": { "label": "Элементов для отображения", "description": "Количество отображаемых верхних элементов (макс. 500)" + }, + "events": { + "loading": "Загрузка событий...", + "noEvents": "События не найдены", + "configureWebsiteFirst": "Выберите сайт для загрузки событий" } }, "event": { - "occurrences": "событий", "label": "событий" }, - "topPages": { - "direct": "Прямой" - }, - "topReferrers": { - "direct": "Прямой" - }, "events": { "selectPrompt": "Выберите события для диаграммы" }, @@ -2475,6 +3652,9 @@ "noWebsite": "Веб-сайт не настроен", "noData": "Нет данных", "internalServerError": "Не удалось получить данные Umami" + }, + "top": { + "direct": "Прямо" } }, "common": { @@ -2502,7 +3682,8 @@ }, "integration": { "noData": "Интеграции не найдены", - "description": "Нажмите , чтобы создать новую интеграцию" + "description": "Нажмите , чтобы создать новую интеграцию", + "manage": "Управление интеграциями" }, "app": { "noData": "Приложения не найдены", @@ -2513,7 +3694,61 @@ "noIntegration": "Интеграция не выбрана", "noData": "Данные интеграции недоступны" }, - "option": {} + "integrationDisconnected": "Нет данных, все интеграции отключены", + "updatedAt": "Обновлено {date}", + "title": { + "label": "Заголовок" + }, + "openInNewTab": { + "label": "Открывать в новой вкладке" + }, + "showTitle": { + "label": "Показать название" + }, + "weatherLocation": { + "label": "Местоположение для прогноза" + }, + "layout": { + "label": "Макет", + "option": { + "horizontal": "Горизонтально", + "vertical": "Вертикально", + "grid": "Сетка" + } + }, + "select": { + "loading": "Загрузка...", + "loadError": "Не удалось загрузить параметры" + }, + "dateFormat": { + "label": "Формат даты", + "description": "Как должна отображаться дата" + }, + "visibleStorageVolumes": { + "label": "Видимые тома хранения", + "description": "Доступно только тогда, когда каждая выбранная интеграция является OpenMediaVault или Synology. Оставьте пустым, чтобы показать все обнаруженные тома хранения.", + "placeholder": "Выбрать тома хранения" + }, + "tableOptions": { + "columns": { + "label": "Столбцы для отображения" + }, + "columnOrder": { + "label": "Порядок столбцов" + }, + "columnWidths": { + "label": "Ширина колонки" + }, + "enableRowSorting": { + "label": "Включить сортировку элементов" + }, + "defaultSort": { + "label": "Столбец сортировки по умолчанию" + }, + "invertSorting": { + "label": "Обратная сортировка" + } + } }, "video": { "name": "Видеотрансляция", @@ -2572,6 +3807,7 @@ "transcoding": "Транскодирование", "paused": "Приостановлено", "remaining": "{minutes} мин осталось", + "seasonEpisode": "С{season} E{episode}", "metadata": { "title": "Техническая информация", "video": { @@ -2589,11 +3825,16 @@ "resolution": "Разрешение", "target": "Целевой кодек" } - } + }, + "unknownUser": "Неизвестный пользователь" + }, + "summary": { + "sessions": "{count, plural, one {# сессия} other {# сессий}}", + "playing": "{count} играет", + "transcoding": "Транскодирование {count}" } }, "paperlessNgx": { - "name": "Paperless-ngx", "description": "Обзор архива документов Paperless-ngx", "documentsTotal": "Всего документов", "documentsInbox": "Входящие", @@ -2638,7 +3879,6 @@ } }, "patchmon": { - "name": "PatchMon", "description": "Обзор состояния патча узла из PatchMon", "title": "Статистика PatchMon", "totalHosts": "Всего узлов", @@ -2705,36 +3945,30 @@ "description": "Сравнить счетчик нуждающихся в обновлении как абсолютное значение или процент от общего числа хостов" }, "hostsNeedingUpdatesWarningAt": { - "label": "Порог предупреждения о нуждающихся в обновлении", - "description": "Желтый цвет при достижении этого порога" + "label": "Порог предупреждения о нуждающихся в обновлении" }, "hostsNeedingUpdatesCriticalAt": { - "label": "Критический порог для нуждающихся в обновлении", - "description": "Красный цвет при достижении этого порога" + "label": "Критический порог для нуждающихся в обновлении" }, "securityUpdatesThresholdMode": { "label": "Режим порога обновлений безопасности", "description": "Сравнение количество нуждающихся в обновлении безопасности как абсолютного значения или процента от общего числа хостов" }, "securityUpdatesWarningAt": { - "label": "Порог предупреждения о нуждающихся в обновлении безопасности", - "description": "Желтый цвет при достижении этого порога" + "label": "Порог предупреждения о нуждающихся в обновлении безопасности" }, "securityUpdatesCriticalAt": { - "label": "Критический порог для нуждающихся в обновлении безопасности", - "description": "Красный цвет при достижении этого порога" + "label": "Критический порог для нуждающихся в обновлении безопасности" }, "hostsWithSecurityUpdatesThresholdMode": { "label": "Узлы с порогом обновлений безопасности", "description": "Сравнить количество хостов как абсолютное значение или процент от общего числа хостов" }, "hostsWithSecurityUpdatesWarningAt": { - "label": "Узлы с порогом предупреждения об обновлениях безопасности", - "description": "Желтый цвет при достижении этого порога" + "label": "Узлы с порогом предупреждения об обновлениях безопасности" }, "hostsWithSecurityUpdatesCriticalAt": { - "label": "Узлы с критическим порогом обновлений безопасности", - "description": "Красный цвет при достижении этого порога" + "label": "Узлы с критическим порогом обновлений безопасности" }, "upToDateHostsThresholdMode": { "label": "Режим порога обновленных узлов", @@ -2753,12 +3987,10 @@ "description": "Сравнить количество устаревших пакетов как абсолютное значение или процент от общего числа хостов" }, "totalOutdatedPackagesWarningAt": { - "label": "Порог предупреждения об устаревших пакетах", - "description": "Желтый цвет при достижении этого порога" + "label": "Порог предупреждения об устаревших пакетах" }, "totalOutdatedPackagesCriticalAt": { - "label": "Критический порог устаревших пакетов", - "description": "Красный цвет при достижении этого порога" + "label": "Критический порог устаревших пакетов" }, "showOsDistribution": { "label": "Показать распределение ОС", @@ -2789,6 +4021,14 @@ "bars": "Горизонтальные полосы", "donut": "Кольцевая диаграмма" } + }, + "threshold": { + "warningAt": { + "description": "Желтый цвет при достижении этого порога" + }, + "criticalAt": { + "description": "Красный цвет при достижении этого порога" + } } }, "error": { @@ -2796,12 +4036,12 @@ } }, "bazarr": { - "name": "Bazarr", "description": "Обзор недостающих субтитров и состояния вашего экземпляра Bazarr", "episodes": "Отсутствующие эпизоды", "movies": "Отсутствующие фильмы", "providers": "Проблемы провайдера", "status": "Проблемы с состоянием", + "announcements": "Объявления", "option": { "showMissingEpisodes": { "label": "Показать недостающие эпизоды", @@ -2848,7 +4088,8 @@ "users": "Пользователи", "photos": "Фото", "videos": "Видео", - "storage": "Занято" + "storage": "Занято", + "albumLimit": "Крупнейшие альбомы (до {count})" }, "immich-albumCarousel": { "name": "Альбом Immich", @@ -2872,24 +4113,21 @@ } }, "description": "Слайд-шоу фотографий из вашего альбома Immich", - "noPhotos": "В этом альбоме нет фотографий" + "noPhotos": "В этом альбоме нет фотографий", + "albumPhoto": "Фото альбома", + "actions": { + "previousPhoto": "Предыдущее фото", + "nextPhoto": "Следующее фото", + "pauseSlideshow": "Pause slideshow", + "resumeSlideshow": "Возобновить слайд-шоу", + "toggleSlideshow": "Приостановить или возобновить слайд-шоу", + "photo": "Фото {number}" + } }, "downloads": { "name": "Загрузки", "description": "Позволяет просматривать и управлять загрузками как из торрент-клиентов, так и из Usenet-клиентов.", "option": { - "columns": { - "label": "Отображаемые столбцы" - }, - "enableRowSorting": { - "label": "Включить сортировку элементов" - }, - "defaultSort": { - "label": "Столбец для сортировки по умолчанию" - }, - "descendingDefaultSort": { - "label": "Обратная сортировка" - }, "showCompletedUsenet": { "label": "Показывать завершённые задачи Usenet" }, @@ -2914,12 +4152,6 @@ "limitPerIntegration": { "label": "Лимит элементов на интеграцию", "description": "Ограничивает количество отображаемых элементов для каждой интеграции, а не глобально" - }, - "columnOrder": { - "label": "Порядок столбцов" - }, - "columnWidths": { - "label": "Ширина столбца" } }, "errors": { @@ -3080,6 +4312,10 @@ "mediaRequests-requestList": { "name": "Запросы медиаконтента", "description": "Список всех запросов на добавление медиаконтента из вашего экземпляра Overseerr или Jellyseerr", + "empty": { + "title": "Пока нет медиа запросов", + "description": "Поиск фильма или показать для начала запроса." + }, "option": { "linksTargetNewTab": { "label": "Открывать ссылки в новой вкладке" @@ -3113,12 +4349,16 @@ "failed": "Ошибка", "completed": "Завершено" }, + "unknown": "Неизвестно", "toBeDetermined": "Будет определено позже" }, "mediaRequests-requestStats": { "name": "Статистика запросов медиаконтента", "description": "Статистика по запросам медиаконтента", - "option": {}, + "empty": { + "title": "Нет активности запроса", + "description": "Статистика появится после первого запроса медиа." + }, "titles": { "stats": { "main": "Статистика медиаконтента", @@ -3128,8 +4368,7 @@ "declined": "Уже отклонено", "available": "Уже доступно", "tv": "Запросы сериалов", - "movie": "Запросы фильмов", - "total": "Всего" + "movie": "Запросы фильмов" }, "users": { "main": "Топ пользователей", @@ -3155,7 +4394,6 @@ }, "currentIndex": "{start}-{end} из {total}", "healthCheck": { - "title": "Проверка работоспособности", "queued": "В очереди", "status": { "healthy": "Исправно", @@ -3164,35 +4402,30 @@ }, "panel": { "statistics": { - "empty": "Пусто", - "transcodes": "Перекодировано", - "transcodesCount": "Перекодировано", - "healthChecksCount": "Проверок", "filesCount": "Файлов", "savedSpace": "Сэкономлено места", - "healthChecks": "Проверки работоспособности", "videoCodecs": "Кодеки", "videoContainers": "Контейнеры", "videoResolutions": "Разрешения" }, "workers": { - "empty": "Пусто", "table": { - "file": "Файл", "eta": "Осталось", - "progress": "Прогресс", - "transcode": "Перекодирование", - "healthCheck": "Проверка" + "progress": "Прогресс" } }, "queue": { - "empty": "Пусто", "table": { - "file": "Файл", - "size": "Размер", - "transcode": "Перекодирование", - "healthCheck": "Проверка" + "size": "Размер" } + }, + "common": { + "empty": "Пусто", + "file": "Файл", + "healthCheck": "Проверка", + "transcode": "Транскодирование", + "transcodes": "Транскодирования", + "healthChecks": "Проверок" } } }, @@ -3216,7 +4449,8 @@ }, "type": { "movie": "Фильм", - "episode": "Серия" + "episode": "Серия", + "book": "Книга" }, "empty": { "missing": "Нет отсутствующих элементов", @@ -3247,6 +4481,13 @@ "showPosterImage": { "label": "Показать постер" } + }, + "error": { + "allFeedsFailed": "Не удается загрузить RSS-каналы. Проверьте URL канала и повторите попытку." + }, + "warning": { + "partial": "{count, plural, one {# Не удалось загрузить RSS канал} other {# Не удалось загрузить RSS каналы}}", + "stale": "Не удалось обновить RSS-каналы. Показаны ранее загруженные записи." } }, "releases": { @@ -3322,17 +4563,8 @@ "label": "Регулярное выражение" } }, - "edit": { - "label": "Редактировать" - }, "editForm": { - "title": "Редактирование репозитория", - "cancel": { - "label": "Отмена" - }, - "confirm": { - "label": "Подтвердить" - } + "title": "Редактирование репозитория" }, "importForm": { "title": "Импорт из Docker" @@ -3349,8 +4581,7 @@ "label": "Токены провайдера", "token": "Токен", "configured": "Токен настроен", - "notConfigured": "Токен не установлен", - "save": "Сохранить" + "notConfigured": "Токен не установлен" } } }, @@ -3377,17 +4608,32 @@ "noProviderResponse": "Нет ответа от провайдера", "unexpected": "Неожиданная ошибка провайдера" } - } + }, + "expandDetails": "Показать подробности для {name}", + "collapseDetails": "Скрыть подробности для {name}" }, "networkControllerSummary": { - "option": {}, - "card": { - "vpn": { - "countConnected": "{count} подключено" + "advanced": { + "updated": "Обновлено", + "metric": { + "latency": "Задержка", + "ping": "Пинг", + "uptime": "Время работы", + "users": "Пользователи", + "guests": "Гости" } }, + "card": { + "vpn": { + "countConnected": "{count, plural, one {# подключено} other {# подключено}}", + "label": "VPN" + }, + "wan": "WAN", + "web": "Веб", + "wifi": "Wi-Fi", + "lan": "LAN" + }, "error": { - "integrationsDisconnected": "Нет данных, все интеграции отключены", "unknownContentOption": "Неизвестный параметр содержимого для виджета сводки сетевого контроллера: " }, "name": "Сводка сетевого контроллера", @@ -3424,7 +4670,6 @@ } }, "error": { - "integrationsDisconnected": "Нет данных, все интеграции отключены", "unknownContentOption": "Неизвестный параметр содержимого для виджета состояния сети: " }, "name": "Состояние сети", @@ -3454,7 +4699,6 @@ "versiontitle": "Версии", "cputitle": "Использование ЦП", "memorytitle": "Использование памяти", - "cpu": "ЦП", "memory": "Память", "interfaces": { "name": "Название", @@ -3462,6 +4706,16 @@ "recv": "Получено", "title": "Сетевые интерфейсы" } + }, + "empty": { + "noInterfaces": "Нет данных сетевого интерфейса" + }, + "versionUnknown": "Неизвестная версия", + "metricAccessible": "{metric}: {value}%, {status}", + "status": { + "normal": "Обычный", + "warning": "Предупреждение", + "critical": "Критический" } }, "notifications": { @@ -3471,8 +4725,21 @@ "option": { "hideLogos": { "label": "Скрыть логотипы" + }, + "messageFormat": { + "label": "Формат сообщения", + "option": { + "auto": "Автоматически", + "plain": "Обычный текст", + "markdown": "Markdown", + "html": "HTML" + } } - } + }, + "openService": "Открыть службу уведомлений", + "deleteNotification": "Удалить уведомление из Gotify", + "deleteFailed": "Не удалось удалить уведомление", + "deleteFailedMessage": "Не удалось удалить уведомление. Пожалуйста, попробуйте еще раз." }, "speedtestTracker": { "name": "Спидтест Трекер", @@ -3514,7 +4781,6 @@ } }, "uptimeKuma": { - "name": "Uptime Kuma", "description": "Отслеживать статистику с вашей страницы статуса Uptime Kuma", "option": { "showAverageUptime": { @@ -3551,10 +4817,14 @@ }, "error": { "internalServerError": "Не удалось получить данные" + }, + "status": { + "up": "Всего отдано", + "down": "Скорость загрузки", + "paused": "Пауза" } }, "traefik": { - "name": "Traefik", "description": "Обзор маршрутизаторов, сервисов, посреднических и контрольных точек", "option": { "showTcp": { @@ -3575,7 +4845,6 @@ }, "resource": { "routers": "Маршрутизаторы", - "services": "Сервисов", "middlewares": "Посредники" }, "status": { @@ -3585,7 +4854,20 @@ }, "error": { "internalServerError": "Не удалось получить данные Traefik" - } + }, + "resourceType": { + "router": "Роутер", + "service": "Сервис", + "middleware": "Среднее" + }, + "resourceStatus": { + "enabled": "Включено", + "disabled": "Отключено", + "warning": "Предупреждение", + "error": "Ошибка", + "unknown": "Неизвестно" + }, + "failedEndpoint": "Ошибка: {endpoint}" }, "audioStats": { "name": "Статистика аудио", @@ -3651,9 +4933,7 @@ "label": "Видимые графики", "description": "Выберите графики, которые вы хотите отображать.", "option": { - "cpu": "ЦП", "memory": "Память", - "gpu": "GPU", "network": "Сеть" } }, @@ -3668,12 +4948,11 @@ } }, "card": { - "cpu": "ЦП", "memory": "ОЗУ", - "gpu": "GPU", "network": "Сеть", "up": "Исх.", - "down": "Вх." + "down": "Вх.", + "memoryTooltip": "{used} / {available} ({percent}%)" } }, "systemDisks": { @@ -3699,151 +4978,88 @@ }, "showBackgroundBar": { "label": "Показывать фоновую шкалу использования" - }, - "visibleStorageVolumes": { - "label": "Видимые тома хранения", - "description": "Доступно только тогда, когда все выбранные интеграции от Synology. Оставьте пустым, чтобы показать все обнаруженные тома хранения.", - "placeholder": "Выбрать тома хранения" } }, "status": { - "unhealthy": "Неисправен" + "unhealthy": "Неисправен", + "smart": "УМА", + "free": "Бесплатно {percentage}%" + } + }, + "customApi": { + "name": "Пользовательский виджет", + "description": "Отображение настроенного пользовательского JSX определения.", + "customJsx": { + "noTemplate": "Не настроен JSX шаблон.", + "templateWarnings": "Предупреждения шаблона {count}:", + "requestIdRequired": "Для этого сетевого управления требуется имя идентификатора запроса.", + "unsavedPreview": "Запустите первоначальный запрос в редакторе перед тестированием именованных запросов.", + "invalidParams": "Недопустимые параметры запроса.", + "loading": "Загрузка запроса...", + "loadRequest": "Загрузить запрос", + "requestFailed": "Запрос не удался.", + "retry": "Повторить запрос", + "actionCompleted": "Действие успешно завершено.", + "actionSimulated": "Действие смоделировано; запрос не был отправлен.", + "actionsDisabledEditMode": "Действия отключены во время редактирования форума.", + "widgetItemUnavailable": "Этот элемент виджета недоступен.", + "toggle": "Переключить", + "copied": "Скопировано", + "confirmDelete": "Подтвердите это разрушительное действие." + }, + "option": { + "definitionId": { + "label": "Пользовательский виджет" + }, + "refreshInterval": { + "label": "Интервал обновления", + "description": "Как часто получать данные из API (в секундах)" + } + }, + "noDefinition": "Определение не выбрано", + "definitionNotFound": "Пользовательский виджет недоступен", + "migrationRequired": "Этот устаревший пользовательский виджет сохраняется, но он должен быть мигрирован в пользовательский JSX v2 из управления пользовательскими виджетами перед его запуском.", + "manageMigration": "Открыть управление пользовательскими виджетами", + "contactAdmin": "Связаться с администратором.", + "configurationNeedsRepair": "Настройки этого виджета изменены. Редактируйте виджет для восстановления его конфигурации.", + "removeFromBoard": "Удалить с доски", + "editModePending": "Сохраните доску, чтобы загрузить виджет.", + "picker": { + "group": "Пользовательские JSX виджеты", + "empty": "Пользовательские виджеты не найдены", + "preview": "Предварительный просмотр", + "sources": "{count, plural, one {# исходник} other {# исходников}}", + "requests": "{count, plural, one {# запрос} other {# запросов}}", + "migrationRequired": "Требуется миграция", + "migrationDescription": "Виджет версии 1 не может запуститься. Скопируйте отредактированную подсказку в LLM, а затем вставьте единый ответ JSON в Homarr.", + "manageMigration": "Открыть управление пользовательскими виджетами", + "contactAdmin": "Связаться с администратором." + }, + "configuration": { + "needsAttention": "Конфигурация требует внимания: {message}", + "advancedOptions": "Расширенные настройки", + "invalidJson": "Некорректный JSON" } }, "beszelSystemTable": { "name": "Системы Beszel (Таблица)", "description": "Табличное представление всех систем, отслеживаемых Beszel, с сортируемыми столбцами и индикаторами статуса", "option": { - "statusFilter": { - "label": "Фильтр статуса" - }, "sortBy": { "label": "Сортировать по" }, "sortDirection": { "label": "Направление сортировки" - }, - "showCpu": { - "label": "Показать ЦП" - }, - "showMemory": { - "label": "Показать память" - }, - "showDisk": { - "label": "Показать диск" - }, - "showGpu": { - "label": "Показать GPU" - }, - "showLoadAvg": { - "label": "Показать среднюю нагрузку" - }, - "showNet": { - "label": "Показать сеть" - }, - "showTemp": { - "label": "Показать температуру" - }, - "showBattery": { - "label": "Показать батарею" - }, - "showServices": { - "label": "Показать сервисы" - }, - "showUptime": { - "label": "Показать время работы" - }, - "showAgent": { - "label": "Показать версию агента" - }, - "columnOrder": { - "label": "Порядок столбцов" - }, - "columnWidths": { - "label": "Ширина столбца" } }, - "noRecords": "Системы не найдены", "error": { - "internalServerError": "Не удается подключиться к Beszel. Проверьте настройки интеграции.", "layoutSaveTitle": "Не удается сохранить макет таблицы", "layoutSaveMessage": "Не удалось сохранить порядок или ширину столбцов. Пожалуйста, попробуйте еще раз." - }, - "column": { - "system": "Система", - "cpu": "ЦП", - "memory": "Память", - "disk": "Диск", - "gpu": "GPU", - "loadAvg": "Средн. нагрузка", - "net": "Сеть", - "temp": "Темп", - "battery": "Бат", - "services": "Сервисы", - "uptime": "Время работы", - "agent": "Агент" } }, "beszelSystemGrid": { "name": "Системы Beszel (Сетка)", - "description": "Представление в виде сетки карточек всех систем, отслеживаемых Beszel, с метриками в реальном времени", - "option": { - "statusFilter": { - "label": "Фильтр статуса" - }, - "showCpu": { - "label": "Показать ЦП" - }, - "showMemory": { - "label": "Показать память" - }, - "showDisk": { - "label": "Показать диск" - }, - "showGpu": { - "label": "Показать GPU" - }, - "showLoadAvg": { - "label": "Показать среднюю нагрузку" - }, - "showNet": { - "label": "Показать сеть" - }, - "showTemp": { - "label": "Показать температуру" - }, - "showBattery": { - "label": "Показать батарею" - }, - "showServices": { - "label": "Показать сервисы" - }, - "showUptime": { - "label": "Показать время работы" - }, - "showAgent": { - "label": "Показать версию агента" - } - }, - "error": { - "internalServerError": "Не удается подключиться к Beszel. Проверьте настройки интеграции." - }, - "empty": { - "noSystems": "Систем не найдено" - }, - "metric": { - "cpu": "ЦП", - "memory": "Память", - "disk": "Диск", - "gpu": "GPU", - "loadAvg": "Средн. нагрузка", - "net": "Сеть", - "temp": "Темп", - "battery": "Бат", - "services": "Сервисы", - "uptime": "Время работы", - "agent": "Агент" - } + "description": "Представление в виде сетки карточек всех систем, отслеживаемых Beszel, с метриками в реальном времени" }, "beszelAlerts": { "name": "Оповещения Beszel", @@ -3857,11 +5073,12 @@ } }, "empty": "Нет настроенных оповещений", - "error": { - "internalServerError": "Не удается подключиться к Beszel. Проверьте настройки интеграции." - }, "history": "История", "resolved": "Решено", + "alertDescription": { + "statusDuration": "Вниз на {minutes} мин", + "threshold": "Превышает {value} в течении {minutes} мин" + }, "status": { "triggered": "Сработало", "ok": "ОК" @@ -3908,16 +5125,16 @@ "noSystems": "Систем не найдено" }, "error": { - "internalServerError": "Не удается подключиться к Beszel. Проверьте настройки интеграции.", "liveConnectionFailed": "Соединение не удалось. Ваш экземпляр Beszel может не поддерживать потоковое вещание в режиме реального времени.", "switchToHistorical": "Перейти на исторический вид", - "systemNotFound": "Выбранная система не найдена. Выберите другую систему." + "systemNotFound": "Выбранная система не найдена. Выберите другую систему.", + "selectionSaveTitle": "Не удается сохранить выбранное", + "selectionSaveMessage": "Выбор системы или периода времени не может быть сохранен. Пожалуйста, попробуйте еще раз." }, "chart": { "cpu": { "title": "Использование ЦП", - "subtitle": "Средняя загрузка ЦП всей системы", - "series": "ЦП" + "subtitle": "Средняя загрузка ЦП всей системы" }, "memory": { "title": "Использование памяти", @@ -3959,39 +5176,550 @@ "title": "Ввод-вывод сети Docker", "subtitle": "Сетевой трафик контейнеров Docker" } + }, + "period": { + "live": "Онлайн", + "oneHour": "1ч", + "twelveHours": "12 ч", + "oneDay": "24 ч", + "oneWeek": "1б", + "thirtyDays": "30д" } }, - "wud": { - "name": "Что же докер", - "description": "Показывать количество доступных обновлений в просмотренных контейнерах.", - "title": "Что же докер", - "monitored": "Мониторинг", - "updatesAvailable": "{count, plural, one {# доступно обновление} other {# доступно обновлений}}", - "updateAvailable": "Доступно обновление", - "openReleaseNotes": "Открыть примечания к релизу", + "assistant": { + "name": "Помощник", + "description": "Имейте полную беседу помощника прямо на борту.", + "unavailable": { + "title": "Помощник недоступен", + "description": "Войдите в систему и попросите администратора настроить Помощника из панели управления." + }, + "compact": { + "title": "Помощник", + "description": "Изменить размер этого виджета для чата здесь, или открыть весь разговор.", + "open": "Открыть помощника", + "openTitle": "Ассистент открыт в боковой панели", + "openDescription": "Разговор остается на одной активной поверхности.", + "returnToWidget": "Вернуть разговор этому виджету", + "otherWidgetTitle": "Ассистент активен в другом виджете", + "otherWidgetDescription": "Одновременно активна только одна беседная поверхность.", + "useHere": "Использовать помощника в этом виджете" + } + }, + "beszel": { + "error": { + "internalServerError": "Не удается подключиться к Beszel. Проверьте настройки интеграции." + }, + "empty": { + "noSystems": "Систем не найдено" + }, + "options": { + "statusFilter": { + "label": "Фильтр состояния" + }, + "showCpu": { + "label": "Показать ЦП" + }, + "showMemory": { + "label": "Показать память" + }, + "showDisk": { + "label": "Показать диск" + }, + "showGpu": { + "label": "Показать GPU" + }, + "showLoadAvg": { + "label": "Показать среднее значение нагрузки" + }, + "showNet": { + "label": "Показать сеть" + }, + "showTemp": { + "label": "Показать температуру" + }, + "showBattery": { + "label": "Показать батарею" + }, + "showServices": { + "label": "Показывать сервисы" + }, + "showUptime": { + "label": "Показывать время работы" + }, + "showAgent": { + "label": "Показать версию агента" + } + }, + "metric": { + "system": "Система", + "source": "Интеграция", + "hostname": "Имя хоста", + "cpuModel": "Модель ЦП", + "cores": "Ядер", + "memoryTotal": "Всего памяти", + "memory": "Память", + "disk": "Диск", + "loadAvg": "Средняя нагрузка", + "net": "Нетто", + "temp": "Темп", + "battery": "Летучие мыши", + "uptime": "Время работы", + "agent": "Агент" + } + }, + "llamacpp": { + "name": "llama.cpp", + "description": "Покажите здоровье, загруженную модель и скорость генерации локального сервера llama.cpp.", + "title": "llama.cpp", + "status": { + "unhealthy": "Нездоровый ({status})" + }, + "idle": "Простой", + "speedTooltip": { + "current": "Текущая скорость генерации", + "average": "Средняя скорость генерации с момента запуска", + "request": "Средняя скорость с момента начала этого запроса" + }, + "busy": "{count, plural, one {# запрос запущен} other {# запросов на выполнение}}", + "modelInfo": { + "context": "Контекст", + "size": "Размер файла", + "parameters": "Параметры", + "model": "Модель", + "quantization": "Квантизация" + }, + "stats": { + "tokensProcessed": "Токены обработаны", + "contextUsage": "Контекст / KV использование", + "cacheHitRate": "Частота попадания кэша запросов", + "tokensGenerated": "Метки сгенерированы" + }, + "error": { + "unreachable": "Сервер llama-сервера недоступен" + }, + "unit": { + "speed": "{value} т/с", + "parameters": "{value}B", + "none": "—", + "speedShort": "т/с" + }, "option": { "showTitle": { "label": "Показать название" }, - "showRing": { - "label": "Показать обновление кольца" + "showModelInfo": { + "label": "Показать информацию о модели" }, - "layout": { - "label": "Макет", + "showContextUsage": { + "label": "Показать контекстное использование" + }, + "showCacheHitRate": { + "label": "Показать частоту попадания кэша" + }, + "showSpeedStats": { + "label": "Показать статистику скорости" + }, + "showRequests": { + "label": "Показать нагрузку запроса" + }, + "showTokenStats": { + "label": "Показать итоговые токены" + }, + "showSpeculative": { + "label": "Показать спекулятивное декодирование" + } + }, + "advanced": { + "promptSpeed": "Скорость подсказки", + "avgSpeed": "Среднее поколение", + "requests": "Запросы", + "deferred": "Отложено", + "slots": "{processing}/{total} слотов занято", + "speculative": "Примерное декодирование", + "avgPrompt": "Средний запрос", + "specDrafts": "Черновики спектаклей", + "specAccepted": "Применяемые жетоны", + "specDraftTokens": "Черновик маркеров" + } + }, + "stats": { + "name": "Статистика", + "description": "Объединить статистику от интеграции в один настраиваемый виджет.", + "configure": "Настройка метрик", + "refresh": "Обновить статистику", + "empty": "Открыть настройки виджета, выбрать интеграцию, а затем добавить метрики.", + "editorHelp": "Добавьте метрики из интеграций, выбранных для этого виджета. Изменения сохраняются в панели управления.", + "source": "Интеграция", + "metric": "Метрика", + "noMetrics": "Нет доступной статистики для этой интеграции", + "add": "Добавить метрику", + "label": "Пользовательская этикетка", + "hidden": "Скрыто", + "compact": "Компактные номера", + "moveUp": "Переместить вверх", + "moveDown": "Переместить вниз", + "remove": "Удалить метрику", + "loading": "Загрузка…", + "unavailable": "Unavailable", + "refreshFailed": "Не удалось обновить — показать сохраненные данные", + "stale": "Сохраненные данные — обновите, чтобы обновить", + "table": { + "value": "Значение", + "status": "Статус" + }, + "option": { + "table": { + "label": "Просмотр таблицы" + }, + "rows": { + "label": "Компактные строки" + }, + "showIcon": { + "label": "Показать иконку источника" + }, + "spacing": { + "label": "Расстояние", "option": { - "horizontal": { - "label": "Горизонтально" + "xs": { + "label": "Компактный" }, - "vertical": { - "label": "Вертикально" + "sm": { + "label": "Удобный" + }, + "md": { + "label": "Простые" } } }, - "showUpdateList": { - "label": "Показать список обновлений контейнеров", - "description": "Список каждого контролируемого контейнера, имеющего доступное обновление изображений" + "entries": { + "label": "Метрики" + }, + "plain": { + "label": "Удалить карточный фон" } - } + }, + "fetchFailed": "Не удается получить статистику", + "viewOptions": "Изменить этот вид", + "moreMetrics": "{count} больше в расширенном виде", + "localHelp": "Формат, форматирование и видимость применяются только к этому виду. Настройки общей платы остаются прежними.", + "plain": "Удалить карточный фон", + "resetView": "Сбросить вид", + "allHidden": "Все метрики скрыты в этом представлении. Используйте Настройте этот вид для их восстановления." + }, + "wazuh": { + "target": { + "api": "Wazuh API сервера", + "indexer": "Индексатор Вазуха", + "wazuh": "Wazuh" + }, + "severity": { + "low": "Низкий", + "medium": "Среднее", + "high": "Высокий", + "critical": "Критический" + }, + "error": { + "unauthorized": { + "title": "{target} отклонил учетные данные", + "description": "Проверьте имя пользователя и пароль, сохраненные в интеграции Wazuh. API сервера (порт 55000) и индексатор (порт 9200) используют отдельных пользователей." + }, + "certificate": { + "title": "Сертификат {target} не является доверенным", + "description": "Wazuh по умолчанию использует самоподписанный сертификат. Запустите «Проверить соединение» на интеграцию и доверяйте сертификату, или добавьте ваш CA в Настройки → Сертификаты." + }, + "unreachable": { + "title": "Невозможно достичь {target}", + "description": "Хост отказал или удалил соединение. Проверьте URL, порт и брандмауэр. Индексатор прослушивает только локальный хост в стандартной установке все-в-один." + }, + "timeout": { + "title": "Истекло время ожидания {target}", + "description": "Нет ответа в течение 15 секунд. Сервис может быть перезагружен, или адрес может быть неправильным." + }, + "status": { + "title": "{target} вернул ошибку", + "description": "Запрос не удался с HTTP статусом {status}." + }, + "invalidResponse": { + "title": "Неожиданный ответ от {target}", + "description": "Проверьте, что URL-адрес указывает на API сервера Wazuh или индексатор, а не на приборную панель." + }, + "indexerRequired": { + "title": "Требуется учетная запись индексатора Wazuh", + "description": "Внимание, уязвимости и события целостности файлов читаются от индексатора Wazuh. Добавьте адрес индексатора, имя пользователя и пароль для интеграции." + }, + "unknown": { + "title": "Не удалось загрузить данные из {target}", + "description": "Подробности смотрите в журналах Homarr ." + } + }, + "range": { + "1h": "1ч", + "24h": "24 ч", + "7d": "7д", + "30d": "30д" + }, + "levelTooltip": "Уровень правил {level} ({severity})" + }, + "wazuhAgents": { + "name": "Агенты Вазух", + "description": "Сортируемый список агентов Wazuh с статусом, OS, версией и последним поддерживаемым", + "option": { + "statusFilter": { + "label": "Показать агентов" + }, + "sortBy": { + "label": "Сортировать по" + }, + "showVersion": { + "label": "Показать столбец версии Wazuh" + }, + "showGroups": { + "label": "Показать столбец групп" + } + }, + "title": "Агенты", + "total": "{count} агентов", + "status": { + "active": "Активно", + "disconnected": "Отключено", + "neverConnected": "Никогда не подключен", + "pending": "В ожидании" + }, + "statusLabel": { + "active": "Активно", + "disconnected": "Отключено", + "never_connected": "Никогда не подключен", + "pending": "В ожидании", + "unknown": "Неизвестно" + }, + "live": "Онлайн", + "snapshot": "Старая фотография {age}", + "snapshotHint": "Читать из снимка агента панели управления Вазуха (wazuh-monitoring), взятого на {time}. Добавьте учетные данные API сервера для реальных данных.", + "staleSnapshot": "Снимок агента от {time} устарел. Проверьте, что задание мониторинга панели инструментов Wazuh запущено, или добавьте учетные данные сервера.", + "noDisconnected": "Все агенты подключены", + "empty": "Нет агентов, соответствующих этому фильтру", + "column": { + "status": "Статус", + "name": "Название задачи", + "ip": "IP", + "os": "ОС", + "version": "Версия", + "lastKeepAlive": "Поддерживать", + "groups": "Группы" + }, + "outdated": "Старше, чем новая версия агента ({version})" + }, + "wazuhAlerts": { + "name": "Канал оповещений Wazuh", + "description": "Недавние Wazuh оповещения с уровнем MITRE ATT&CK техники, агента и IP источника", + "option": { + "minLevel": { + "label": "Минимальный уровень правил", + "description": "Уровень вазу: 0-6 низкий, 7-11 средний, 12-14 высокий, 15 + критический" + }, + "hours": { + "label": "Окно времени (в часах)" + }, + "limit": { + "label": "Количество оповещений" + }, + "showMitre": { + "label": "Show MITRE ATT&CK techniques" + }, + "showAgent": { + "label": "Показать агента" + }, + "showSourceIp": { + "label": "Показать исходный IP" + }, + "showRuleId": { + "label": "Показать правило ID" + } + }, + "title": "Оповещения · уровень {level}+ · {hours}ч", + "empty": "Нет оповещений на этом уровне. Все тихо.", + "rule": "Правило {id}", + "openInDashboard": "Открыть это предупреждение в панели управления Wazuh" + }, + "wazuhSummary": { + "name": "Серьезность предупреждения Вазуха", + "description": "Распределение важности оповещений с тенденцией по сравнению с предыдущим периодом", + "option": { + "range": { + "label": "Диапазон времени" + }, + "showTrend": { + "label": "Показать тренд по сравнению с предыдущим периодом" + }, + "showFooter": { + "label": "Показать нижний колонтитул" + } + }, + "title": "Серьезность оповещений · {range}", + "alerts": "оповещения", + "none": "Нет оповещений", + "trend": { + "new": "новый", + "tooltip": "Предыдущий период: {previous}" + }, + "previous": "Предыдущий {range}: {count}", + "maxLevel": "Максимальный уровень {level}", + "health": "Здоровье индексации: {status}", + "manager": "Менеджер {version}" + }, + "wazuhTimeline": { + "name": "Wazuh alerts timeline", + "description": "Накопленный график оповещений Wazuh со временем по тяжести", + "option": { + "range": { + "label": "Диапазон времени" + }, + "interval": { + "label": "Интервал" + }, + "chartType": { + "label": "Тип диаграммы" + }, + "yScale": { + "label": "Масштаб оси Y", + "description": "Квадратный корень сохраняет высокие и критические предупреждения рядом с тысячами низких" + }, + "minLevel": { + "label": "Минимальный уровень правил" + }, + "showLegend": { + "label": "Показать легенду с итогами" + } + }, + "title": "Сроки оповещений · {range}", + "total": "Оповещения {count}", + "interval": "на {interval}" + }, + "wazuhTopList": { + "name": "Список топ Wazuh", + "description": "Лучшие правила, агенты, IP-адреса источника или тактика ATT&CK и техники MITRE ATT&CK по количеству оповещений", + "option": { + "kind": { + "label": "Ранг" + }, + "range": { + "label": "Диапазон времени" + }, + "limit": { + "label": "Количество записей" + }, + "minLevel": { + "label": "Минимальный уровень правил" + }, + "showBars": { + "label": "Показать полосы" + } + }, + "title": { + "rules": "Лучшие правила · {range}", + "agents": "Топ агентов · {range}", + "sourceIps": "Топ исходников · {range}", + "mitreTactics": "Тактика MITRE · {range}", + "mitreTechniques": "MITRE techniques · {range}" + }, + "empty": { + "rules": "Нет оповещений за этот период", + "agents": "Нет оповещений за этот период", + "sourceIps": "Нет оповещений с исходным IP в этот период", + "mitreTactics": "Нет оповещений, сопоставленных с MITRE ATT&CK за этот период", + "mitreTechniques": "Нет оповещений, сопоставленных с MITRE ATT&CK за этот период" + }, + "totalTooltip": "{count} соответствующие оповещения", + "private": "LAN", + "public": "Публичная", + "agents": "Просмотрено агентов {count}", + "others": "{count} больше оповещений в других записях" + }, + "wazuhVulnerabilities": { + "name": "Уязвимости Wazuh", + "description": "Количество уязвимости, лучшие ЦВЕ, а также наиболее уязвимые агенты", + "option": { + "cveOrder": { + "label": "Ранг CVEs от" + }, + "minSeverity": { + "label": "Тяжесть CVE" + }, + "cveLimit": { + "label": "Количество CVEs" + }, + "agentLimit": { + "label": "Количество агентов" + }, + "showAgents": { + "label": "Показать наиболее уязвимые агенты" + } + }, + "title": "Уязвимости", + "topCves": "Топ CVEs", + "score": "Счет", + "agentsShort": "Агенты", + "topAgents": "Наиболее уязвимые агенты", + "criticalHigh": "Крит / Высокий", + "totalTooltip": "{count} выводов по агентам {agents}", + "affected": "{count} агентов", + "empty": "Уязвимости не обнаружены", + "distribution": "Распределение по степени серьёзности. {unscored} находок без оценки не отображаются.", + "worst": "Хуже: {id} ({score}) на {agents} агентах" + }, + "wazuhFim": { + "name": "Целостность файла Wazuh", + "description": "Недавние события мониторинга целостности файлов (syscheck)", + "option": { + "range": { + "label": "Диапазон времени" + }, + "event": { + "label": "События" + }, + "limit": { + "label": "Количество событий" + }, + "includeRegistry": { + "label": "Включить события реестра Windows" + } + }, + "title": "Целостность файлов · {range}", + "event": { + "added": "Дата добавления", + "modified": "Изменено", + "deleted": "Удалено", + "unknown": "Изменено" + }, + "empty": "Нет событий целостности файлов за этот период", + "user": "от {user}", + "registry": "Секретариат" + }, + "wazuhAuthFailures": { + "name": "Ошибка аутентификации Wazuh", + "description": "Неудачные логины и оповещения о том, что каждый агент почасово искривляются", + "option": { + "hours": { + "label": "Окно времени (в часах)" + }, + "limit": { + "label": "Количество агентов" + }, + "showSourceIps": { + "label": "Показать лучшие IP-адреса источника" + } + }, + "title": "Сбой авторизации · {hours}h", + "seriesTooltip": "Все агенты за последние {hours}ч", + "peak": "Пик {count}/ведро", + "empty": "Нет неудачных входов в этот период", + "failed": "Сбой входа", + "failedHint": "Одиночная аутентификация (sshd, PAM, Windows logon, некорректные пользователи)", + "bruteForce": "Крепкая сила", + "bruteForceHint": "Корректные правила грубой силы (несколько сбоев за короткий период, MITRE T1110)", + "sourceIps": "IP источника", + "ipTooltip": "{ip}: Сбой {count}", + "bruteForceCount": "{count} атак методом перебора" } }, "widgetPreview": { @@ -4004,7 +5732,76 @@ } }, "board": { + "emptyState": { + "title": "Создайте свой первый вид", + "description": "Добавьте виджет или приложение, или подключите сервис и используйте данные на этой площадке.", + "addWidget": "Добавить виджет", + "addApp": "Добавить приложение", + "connectService": "Подключить сервис" + }, + "setupChecklist": { + "title": "Сделать этот форум полезным", + "description": "Выберите, где вы остановились. Прогресс следует за содержанием уже на этой доске.", + "collapse": "Свернуть список контрольных настроек", + "dismiss": "Отклонить список настроек", + "resume": "Продолжить установку ({completed}/{total})", + "progress": "Прогресс настройки доски", + "step": { + "content": { + "label": "Добавить полезный контент", + "description": "Выберите виджет и настройте его перед его установкой." + }, + "app": { + "label": "Прикрепить приложение", + "description": "Держите услугу или инструмент в один клик от этого форума." + }, + "service": { + "label": "Подключить сервис", + "description": "Разблокировать живые данные и действия для совместимых виджетов.", + "permissionDescription": "Администратор может подключить сервис для разблокировки текущих данных.", + "action": "Подключиться" + } + } + }, "action": { + "addContent": "Добавить содержимое доски", + "settings": "Настройки доски", + "switch": "Переключить доску", + "switcher": { + "title": "Переключить доску", + "search": { + "empty": "Нет досок совпадающих \"{search}\"." + }, + "results": "Доступные доски", + "preview": "Предпросмотр {name} с {count} элементами", + "currentHidden": "Текущая доска: {name}", + "keyboard": { + "navigate": "Navigate", + "open": "Открыть", + "instructions": "Введите тип для фильтрации досок. Используйте клавиши со стрелками для перемещения по результатам и Enter для открытия доски." + }, + "empty": { + "title": "Нет других досок", + "description": "Нет других досок, к которым можно получить доступ." + }, + "error": "Доски не могут быть загружены." + }, + "create": { + "availability": { + "checking": "Проверка доступности…", + "available": "{name} доступен" + }, + "notification": { + "success": { + "title": "Доска создана", + "message": "Доска {name} создана" + }, + "error": { + "title": "Невозможно создать доску", + "message": "Не удалось создать доску {name}" + } + } + }, "duplicate": { "title": "Дублировать панель", "message": "Это действие создаст копию панели {name} со всем её содержимым. Если виджеты используют интеграции, к которым у вас нет доступа, они будут удалены.", @@ -4020,14 +5817,19 @@ } }, "edit": { + "enter": "Изменить доску", + "save": "Сохранить доску", + "exit": "Выйти из режима редактирования", "notification": { "success": { - "title": "Изменения применены", "message": "Панель успешно сохранена" }, "error": { - "title": "Не удалось применить изменения", "message": "Не удалось сохранить панель" + }, + "loadError": { + "title": "Не удается начать редактирование", + "message": "Редактор форума не может быть загружен. Ваша панель управления по-прежнему доступна в режиме просмотра." } }, "confirmLeave": { @@ -4035,62 +5837,6 @@ "message": "У вас есть несохранённые изменения. Вы уверены, что хотите выйти?" } }, - "oldImport": { - "label": "Импорт из версии Homarr до 1.0.0", - "notification": { - "success": { - "title": "Импорт успешно выполнен", - "message": "Панель успешно импортирована" - }, - "error": { - "title": "Импорт не удался", - "message": "Не удалось импортировать панель, проверьте логи для дополнительной информации" - } - }, - "form": { - "file": { - "label": "Выберите JSON-файл", - "invalidError": "Недействительный файл конфигурации" - }, - "apps": { - "label": "Приложения", - "avoidDuplicates": { - "label": "Избегать дубликатов", - "description": "Игнорирует приложения, для которых уже существует приложение с тем же URL-адресом" - }, - "onlyImportApps": { - "label": "Импортировать только приложения", - "description": "Добавляет только приложения, панель нужно будет создать заново вручную" - } - }, - "name": { - "label": "Название панели" - }, - "screenSize": { - "label": "Размер экрана", - "description": "В версиях до 1.0 существовало три разных режима, поэтому вы могли выбрать количество столбцов для каждого размера экрана.", - "option": { - "sm": "Маленький", - "md": "Средний", - "lg": "Большой" - } - }, - "sidebarBehavior": { - "label": "Поведение боковых панелей", - "description": "Боковые панели были удалены в версии 1.0, вы можете выбрать, что должно произойти с элементами внутри них.", - "option": { - "lastSection": { - "label": "Последний раздел", - "description": "Боковая панель будет отображаться под последним разделом" - }, - "removeItems": { - "label": "Удалить элементы", - "description": "Элементы, содержащиеся в боковой панели, будут удалены" - } - } - } - } - }, "quickCreateApp": { "modal": { "title": "Быстрое создание приложения", @@ -4098,6 +5844,12 @@ } } }, + "landmark": { + "canvas": "Холст панели инструментов", + "leftRail": "Лента левой панели", + "rightRail": "Правый приборный рельс", + "items": "Элементы панели инструментов" + }, "field": { "pageTitle": { "label": "Заголовок страницы" @@ -4167,7 +5919,8 @@ } }, "primaryColor": { - "label": "Основной цвет" + "label": "Основной цвет", + "locked": "Ваш администратор сохраняет цвет бренда экземпляра на каждой доске." }, "secondaryColor": { "label": "Дополнительный цвет" @@ -4207,9 +5960,6 @@ "xl": "Очень большое" } }, - "name": { - "label": "Название" - }, "isPublic": { "label": "Публичная", "description": "Публичные панели доступны всем, даже без учётной записи." @@ -4229,9 +5979,44 @@ "title": "Компоновка", "responsive": { "title": "Адаптивные макеты", + "description": "Каждый макет сохраняет свои позиции и размеры виджетов. Мобильные и базовые всегда доступны; добавляйте пользовательские макеты в любой дополнительной точке останова (breakpoint).", "action": { "add": "Добавить макет" } + }, + "role": { + "mobile": "Мобильная", + "base": "Основание", + "custom": "Свой" + }, + "custom": { + "defaultName": "Пользовательский макет" + }, + "mobile": { + "breakpointDescription": "Мобильный всегда используется с 0px до следующей точки останова макета." + }, + "preview": { + "columns": "столбцы", + "empty": "Этот макет пуст", + "dynamicSection": "Динамический раздел", + "editorWidthLabel": "{layoutName} · {width}px" + }, + "reset": { + "action": "Сброс с базы", + "confirm": { + "title": "Reset {layoutName}?", + "message": "Это заменяет все сохраненные позиции и размер в этом макете новым макетом, созданным из Базы. Это не может быть отменено." + } + }, + "edit": { + "action": "Редактировать макет", + "saveAndEdit": "Сохранить и редактировать", + "save": "Сохранить макет", + "cancel": { + "action": "Отменить редактирование макета", + "title": "Отменить изменения расположения?", + "message": "Ваши несохраненные изменения будут отменены." + } } }, "background": { @@ -4268,10 +6053,7 @@ "rename": { "label": "Переименовать панель", "description": "Изменение названия нарушит все существующие ссылки на эту панель.", - "button": "Изменить название", - "modal": { - "title": "Переименовать панель" - } + "button": "Изменить название" }, "visibility": { "label": "Изменить видимость панели", @@ -4295,9 +6077,7 @@ } }, "delete": { - "label": "Удалить эту панель", "description": "После удаления панели восстановление будет невозможно. Пожалуйста, будьте уверены в своём решении.", - "button": "Удалить эту панель", "confirm": { "title": "Удалить панель", "description": "Вы уверены, что хотите удалить эту панель? Действие навсегда удалит панель и всё её содержимое." @@ -4342,28 +6122,41 @@ }, "layout": { "field": { - "name": { - "label": "Название" - }, "columnCount": { "label": "Количество столбцов" }, "breakpoint": { "label": "Точка перехода", "description": "Этот макет будет применяться для экранов, ширина которых больше указанного здесь значения, вплоть до следующей заданной точки перехода с большим значением." + }, + "gutters": { + "label": "Фиксированные боковые панели", + "description": "Зарезервируйте до трех столбцов панели с любой стороны. Остальное холст автоматически включается.", + "left": { + "label": "Left sidebar", + "description": "Оставить эту область видимой при прокрутке приборной панели.", + "thumbLabel": "Left sidebar width" + }, + "right": { + "label": "Правая боковая панель", + "description": "Оставить эту область видимой при прокрутке приборной панели.", + "thumbLabel": "Ширина правой боковой панели" + }, + "width": { + "label": "Ширина в столбцах" + }, + "preview": { + "label": "Предварительный просмотр макетов" + } } } }, "management": { "metaTitle": "Управление", - "title": { - "morning": "Доброе утро, {username}", - "afternoon": "Добрый день, {username}", - "evening": "Добрый вечер, {username}" - }, "notFound": { "title": "Не найдено", - "text": "Запрошенный ресурс не найден" + "text": "Запрошенный ресурс не найден", + "backToHome": "Вернуться к управлению домом" }, "error": { "title": "Не удалось загрузить эту страницу", @@ -4372,19 +6165,10 @@ }, "navbar": { "items": { - "workshop": "Workshop", "home": "Главная", - "boards": "Панели", - "apps": "Приложения", - "integrations": "Интеграции", - "searchEngies": "Поисковые системы", - "medias": "Медиафайлы", "users": { - "label": "Пользователи", "items": { - "manage": "Управление", - "invites": "Приглашения", - "groups": "Группы" + "manage": "Управление" } }, "tools": { @@ -4392,10 +6176,7 @@ "items": { "docker": "Docker", "kubernetes": "Kubernetes", - "logs": "Логи", "api": "API", - "certificates": "Сертификаты", - "tasks": "Задачи", "backup": "Резервное копирование" } }, @@ -4409,21 +6190,12 @@ "sourceCode": "Исходный код" } }, - "about": "О программе" + "about": "О программе", + "assistant": "Помощник" } }, "page": { "home": { - "statistic": { - "board": "Панели", - "user": "Пользователи", - "invite": "Приглашения", - "integration": "Интеграции", - "app": "Приложения", - "group": "Группы", - "searchEngine": "Поисковые системы", - "media": "Медиа" - }, "statisticLabel": { "boards": "Панели", "resources": "Ресурсы", @@ -4461,13 +6233,8 @@ "tooltip": "Эта панель будет показываться как ваша домашняя панель на мобильных устройствах" } }, - "duplicate": { - "label": "Дублировать" - }, "delete": { - "label": "Удалить навсегда", "confirm": { - "title": "Удаление панели", "description": "Вы уверены, что хотите удалить панель {name}?" } } @@ -4476,28 +6243,82 @@ "public": "Эта панель публичная", "private": "Эта панель приватная" }, - "noResults": { - "title": "Панелей ещё нет" + "preview": { + "label": "Предпросмотр макета для {name}с {count} элементами", + "unknownCreator": "Неизвестный создатель" }, - "modal": { - "createBoard": { - "field": { - "name": { - "label": "Название" - } - } - } + "noResults": { + "title": "Панелей ещё нет", + "description": "Создайте доску для размещения ваших приложений и виджетов в одном месте." } }, "media": { "includeFromAllUsers": "Включая медиафайлы от всех пользователей" }, "user": { - "back": "Вернуться к пользователям", "fieldsDisabledExternalProvider": "Некоторые поля отключены, так как ими управляет внешняя система аутентификации.", "setting": { "general": { "title": "Общие", + "header": { + "title": "Заголовок студии", + "badge": "Личные сведения", + "description": "Перетащите элементы управления в любое место ряда. Влево, центр и правый оставайтесь фиксированными, а управление перемещается вокруг них.", + "device": { + "desktop": "Рабочий стол", + "mobile": "Мобильная" + }, + "zones": { + "left": "По левому краю", + "center": "По центру", + "right": "По правому краю" + }, + "action": { + "hide": "Скрыть заголовок", + "show": "Показать заголовок", + "configure": "Переместить или настроить {item}", + "remove": "Удалить {item}", + "dropIntoZone": "Переместить в раздел {zone}" + }, + "preview": { + "board": "Предварительный просмотр панели инструментов {name}", + "empty": "Нет доступных макетов панели управления" + }, + "available": { + "title": "Доступные элементы управления", + "description": "Добавьте контроль, затем перетащите его полную кнопку на позицию выше.", + "requiredAlways": "Этот контроль необходим, но вы можете переместить его в любом месте заголовка.", + "allAdded": "Каждый встроенный элемент управления уже находится в вашем заголовке.", + "add": "Добавить {item}", + "boardShortcut": "Ярлык на доске", + "chooseBoard": "Выберите доску" + }, + "configuration": { + "description": "Этот элемент управления остается тем же размером, что и в живом заголовке.", + "searchDisplay": { + "input": "Строка поиска", + "icon": "Только значок" + }, + "logoDisplay": { + "logo": "Только логотип", + "logoAndText": "Логотип + текст" + } + }, + "items": { + "logo": "Логотип", + "search": "Поиск", + "home": "Домашняя панель", + "boardSwitcher": "Панели", + "assistant": "Помощник", + "docker": "Docker", + "boardEdit": "Изменить доску", + "boardSettings": "Настройки доски", + "settings": "Ваши настройки", + "themeToggle": "Переключить тему", + "user": "Аккаунт", + "boardUnavailable": "Доска недоступна" + } + }, "item": { "language": "Язык и регион", "board": { @@ -4531,14 +6352,10 @@ }, "security": { "title": "Безопасность" - }, - "board": { - "title": "Панели" } }, "list": { - "metaTitle": "Управление пользователями", - "title": "Пользователи" + "metaTitle": "Управление пользователями" }, "edit": { "metaTitle": "Редактирование пользователя {username}" @@ -4592,9 +6409,6 @@ } }, "field": { - "id": { - "label": "ID" - }, "creator": { "label": "Создатель" }, @@ -4618,10 +6432,7 @@ }, "setting": { "title": "Настройки", - "alert": "Настройки групп имеют приоритет согласно порядку групп в списке. Верхние настройки перезаписывают нижние.", - "board": { - "title": "Панели" - } + "alert": "Настройки групп имеют приоритет согласно порядку групп в списке. Верхние настройки перезаписывают нижние." }, "members": { "title": "Участники", @@ -4629,10 +6440,7 @@ "notFound": "Участники не найдены" }, "permissions": { - "title": "Разрешения", - "form": { - "unsavedChanges": "У вас есть несохранённые изменения!" - } + "title": "Разрешения" } } }, @@ -4641,17 +6449,15 @@ "notification": { "success": { "message": "Настройки успешно сохранены" - }, - "error": { - "message": "Не удалось сохранить настройки" } }, "section": { + "analyticsDocumentation": "Посмотрите, что именно собирают аналитические данные Homarr", "analytics": { "title": "Аналитика", "general": { "title": "Отправлять анонимную аналитику", - "text": "Homarr отправляет обезличенную аналитику с помощью открытого ПО Umami. При включении собираются: версия Homarr, тип базы данных (PostgreSQL/SQLite), статус Docker/Kubernetes, включённые методы аутентификации и количество используемых функций. Все данные анонимны и агрегированы - личная информация, URL-адреса, имена и другие идентифицирующие данные никогда не собираются. Это помогает нашей команде понимать типичные сценарии использования и определять приоритеты в разработке." + "text": "Homarr отправляет обезличенную аналитику с помощью открытого ПО Umami. При включении собираются: версия Homarr, тип базы данных (MySQL/PostgreSQL/SQLite), статус Docker/Kubernetes, включённые методы аутентификации и количество используемых функций. Все данные анонимны и агрегированы - личная информация, URL-адреса, имена и другие идентифицирующие данные никогда не собираются. Это помогает нашей команде понимать типичные сценарии использования и определять приоритеты в разработке." } }, "crawlingAndIndexing": { @@ -4675,7 +6481,6 @@ } }, "board": { - "title": "Панели", "homeBoard": { "label": "Глобальная домашняя панель", "mobileLabel": "Глобальная мобильная панель", @@ -4694,7 +6499,6 @@ } }, "user": { - "title": "Пользователи", "enableGravatar": { "label": "Включить Gravatar", "description": "Использовать аватары Libravatar/Gravatar, если пользовательский аватар не задан и указан адрес электронной почты" @@ -4710,12 +6514,86 @@ "appearance": { "title": "Внешний вид", "defaultColorScheme": { - "label": "Цветовая схема по умолчанию", + "label": "Цветовая схема по умолчанию" + } + }, + "branding": { + "title": "Экземпляр брендинга", + "groups": { + "identity": "Личность", + "appearance": "Внешний вид", + "customCss": "Custom CSS", + "authentication": "Аутентификация" + }, + "identity": { + "description": "Логотип приложения - это большая марка, используемая внутри приложения, на страницах входа в сеть и для установленных приложений. Иконка браузера (favicon) - это маленький квадрат, используемый в закладках и закладках, когда пусто, он возвращается к логотипу приложения." + }, + "appName": { + "label": "Имя приложения" + }, + "greeting": { + "label": "Пользовательское приветствие" + }, + "logo": { + "label": "Логотип приложения", + "placeholder": "/логотип/логотип.png" + }, + "favicon": { + "label": "Иконка браузера (favicon)", + "placeholder": "Использует логотип приложения" + }, + "primaryColor": { + "label": "Основной цвет" + }, + "secondaryColor": { + "label": "Вторичный акцент" + }, + "lockPrimaryColor": { + "label": "Оставить этот цвет на каждой доске", + "description": "Предотвращает замену цветов на доску приложения." + }, + "signInBackground": { + "label": "Фон аутентификации", + "placeholder": "https://example.com/background.jpg" + }, + "signInOverlay": { + "label": "Фоновое наложение" + }, + "defaultRadius": { + "label": "Угловой стиль", "options": { - "auto": "Авто", - "light": "Светлая", - "dark": "Тёмная" + "xs": "Тесь", + "sm": "Тонкий", + "md": "Сбалансированный", + "lg": "Скругленный", + "xl": "Мягкий" } + }, + "customCss": { + "label": "Глобальный пользовательский CSS", + "description": "Применяется к каждой странице. CSS может переопределить его." + }, + "authVisibility": { + "description": "Выберите, что появляется на каждой странице авторизации.", + "appName": "Имя приложения", + "logo": "Логотип приложения", + "greeting": "Приветствие" + }, + "summary": { + "title": "Текущий брендинг", + "cornerStyle": "Угловой стиль", + "palette": "Palette", + "backgroundConfigured": "Пользовательский фон · наложение {overlay}%", + "backgroundDefault": "Фон по умолчанию", + "greetingConfigured": "Пользовательское приветствие", + "greetingDefault": "Приветствие по умолчанию", + "boardColorLocked": "Цвет доски заблокирован", + "boardColorFlexible": "Разрешенные цвета доски", + "appName": "Название задачи", + "logo": "Логотип", + "greeting": "Приветствие", + "on": "На", + "off": "Выкл" } }, "culture": { @@ -4723,12 +6601,177 @@ "defaultLocale": { "label": "Язык по умолчанию" } + }, + "assistant": { + "loading": "Загрузка конфигурации помощника", + "title": "Помощник", + "description": "Подключите OpenAI-совместимую конечную точку для помощника по всему миру.", + "security": { + "description": "API ключи и дополнительные значения заголовка зашифрованы в базе данных Homarr. Они никогда не возвращаются браузерам. Запросы модели отправляются с сервера Homarr непосредственно на сконфигурированную конечную точку." + }, + "overview": { + "connectionReady": "Соединение готово", + "unsavedChanges": "Несохранённые изменения", + "setupRequired": "Требуется настройка", + "disabled": "Отключено", + "noModel": "Модель не выбрана" + }, + "connection": { + "endpointTitle": "Провайдер и конечная точка", + "description": "Выберите пресет или подключите любой сервис, который реализует API завершения чата OpenAI.", + "save": "Сохранить подключение провайдера" + }, + "credentials": { + "title": "Полномочия", + "description": "Добавьте секреты для этой конечной точки. Сохраненные значения остаются зашифрованными и не могут быть прочитаны обратно.", + "required": "Требуется ключ", + "optional": "Ключ необязательный", + "workshop": "Авторизация на GitHub" + }, + "provider": { + "title": "Провайдер", + "groups": { + "free": "Бесплатно с Homarr", + "hosted": "Размещенные провайдеры", + "local": "Локальные провайдеры", + "custom": "Свой" + }, + "options": { + "homarr": { + "description": "Ограниченное число видов использования помощника бесплатно каждый день, оплачивается командой «Гомарр». Войдите в Мастерскую Сообщества для использования вашего разрешения." + }, + "openrouter": { + "description": "Размещенная модель маршрутизации с большим каталогом моделей, способным к инструменту." + }, + "openai": { + "description": "OpenAI Chat Completions через официальную точку API." + }, + "anthropic": { + "description": "Claude через конечную точку совместимости OpenAI SDK." + }, + "google-gemini": { + "description": "Gemini через Google OpenAI-совместимые API точки." + }, + "xai": { + "description": "Модели Grok через OpenAI совместимый с OpenAI-API." + }, + "groq": { + "description": "Быстрая ссылка с помощью Groq, совместимого с OpenAI-API." + }, + "mistral": { + "description": "Mistral модели через официальный API." + }, + "deepseek": { + "description": "Модели DeepSeek с помощью OpenAI-совместимого API." + }, + "together": { + "description": "Размещал открытые модели с помощью OpenAI-совместимого API." + }, + "ollama": { + "description": "Локальный или сетевой сервер Ollama с использованием OpenAI-совместимого API." + }, + "lm-studio": { + "description": "Локальный сервер LM Studio с OpenAI совместимость включена." + }, + "llama-cpp": { + "description": "Локальный или сетевой сервер llama.cpp, использующий свой OpenAI-совместимый API." + }, + "custom": { + "label": "Пользовательская конечная точка", + "description": "Любая другая конечная точка, совместимая с OpenAI чата." + } + }, + "homarrAuth": { + "title": "Включено бесплатное ежедневное использование помощника", + "description": "Ключ API не требуется. Команда Homarr охватывает ограниченное количество ассистентов для вас каждый день. Войдите в Мастерскую Сообщества, чтобы сохранить вашу надбавку отдельно." + } + }, + "baseUrl": { + "title": "Базовый URL API", + "description": "Включает префикс API, обычно /v1. В контейнерах localhost ссылается на контейнер Homarr." + }, + "apiKey": { + "title": "API ключ", + "required": "Требуется поставщик. Значение зашифровано и доступно только для записи.", + "optional": "Опционально для локальных конечных точек. Оставьте пустым, если сервис не требует аутентификации носителя.", + "placeholder": "Введите ключ API", + "savedTitle": "Зашифрованный ключ API сохранен", + "savedDescription": "Homarr может использовать этот ключ, но он не может отобразить или восстановить его значение.", + "remove": "Удалить сохраненный ключ API", + "removeFlow": { + "title": "Удалить сохраненный ключ API?", + "description": "Для этого поставщика требуется ключ API. Удаление его может остановить поиск моделей и ответы ассистента, пока не будет сохранён другой ключ.", + "optionalDescription": "Конечная точка прекратит получение аутентификации носителя после удаления этого ключа. Подтвердите, что она принимает неавторизованные запросы или использует другой сохраненный заголовок.", + "cancel": "Сохранить сохраненный ключ", + "confirm": "Удалить API ключ" + } + }, + "headers": { + "title": "Дополнительные заголовки запроса", + "description": "Необязательные заголовки аутентификации или маршрутизации. Значения заголовков шифрования и только для записи.", + "add": "Добавить заголовок", + "name": "Название заголовка", + "value": "Значение заголовка", + "valuePlaceholder": "Значение секрета или маршрутизации", + "remove": "Удалить заголовок", + "configured": "Зашифрованные заголовки настраиваются. Добавление заголовков заменяет весь сохраненный набор.", + "empty": "Дополнительных заголовков для этого поставщика не сохраняется.", + "savedBadge": "Заголовки сохранены", + "pendingRemoval": "Удаление в ожидании", + "clear": "Удалять сохраненные заголовки при сохранении", + "keep": "Хранить сохраненные заголовки" + }, + "model": { + "title": "Модель", + "description": "Выберите обнаруженную модель или введите точный ID модели конечной точки.", + "placeholder": "ID модели", + "refresh": "Обновить модели", + "chooseModel": "Выберите модель, используемую для новых обсуждений.", + "discoveryPath": "Путь обнаружения модели", + "discoveryPathDescription": "Добавлен к базовому URL API. Оставьте поле пустым, чтобы отключить поиск и использовать идентификатор модели вручную.", + "manual": "Введите ID модели вручную или сохраните соединение с моделями.", + "manualFallback": "Обнаружение недоступно. Вы по-прежнему можете ввести ID модели вручную.", + "saveConnectionFirst": "Сохраните соединение провайдера перед выбором модели.", + "discovering": "Обновление моделей, доступных для этого провайдера…", + "discovered": "{count, plural, one {Найдена модель #. Поддержка инструментов зависит от выбранной конечной точки и модели.} other {Найдено # моделей. Поддержка инструментов зависит от выбранной конечной точки и модели.}}", + "discoveryFailed": "Обнаружение модели не завершено", + "context": "Окно контекста {count}", + "toolsConfirmed": "Объявленные инструменты", + "toolsUnknown": "Проверка поддержки инструментов" + }, + "serverTools": { + "title": "Серверные инструменты", + "webSearch": { + "label": "Веб-поиск", + "description": "Разрешить OpenRouter искать модель в реальном времени через OpenRouter при запросе на текущую информацию. Стоимость использования поиска отдельно оплачивается OpenRouter.", + "proxyDescription": "Отправить инструмент веб-поиска OpenRouter на эту конечную точку. Включите это только тогда, когда пользовательская конечная точка перенаправляет формат сервера-инструментов OpenRouter (OpenRout), например прокси-сервер маршрутизатора Homarr.", + "limit": "Модель решает, когда искать, с пределом 3 поиска и 5 результатов по каждому запросу." + } + }, + "enabled": { + "label": "Включить помощника", + "description": "Показывает помощника всем зарегистрированным пользователям. Существующие разрешения Homarr по-прежнему применяются к каждому внутреннему вызову инструментов." + }, + "save": "Экономьте помощника", + "notification": { + "connectionSaved": { + "title": "Соединение провайдера сохранено", + "message": "Конечная точка и зашифрованные учетные данные готовы к выбору модели.", + "credentialsCleared": "Конечная точка изменена, так что предыдущие учетные данные были очищены. При необходимости добавляйте учетные данные для нового назначения." + }, + "saved": { + "title": "Настройки ассистента сохранены", + "message": "Новая модель и настройки доступности активны." + }, + "error": { + "title": "Настройки ассистента не могут быть сохранены" + } + } } } }, "tool": { "tasks": { - "title": "Задачи", "status": { "idle": "Ожидание", "running": "Выполняется", @@ -4746,6 +6789,11 @@ "label": "Проверка доступности" } }, + "action": { + "run": "Запустить {name} сейчас", + "enable": "Включить {name}", + "disable": "Отключить {name}" + }, "interval": { "seconds": "Каждые {interval, plural, =1 {секунду} other {# секунд}}", "minutes": "Каждые {interval, plural, =1 {минуту} other {# минут}}", @@ -4761,13 +6809,7 @@ } } }, - "settings": { - "title": "Настройки задачи {jobName}" - }, "field": { - "name": { - "label": "Название" - }, "interval": { "label": "Интервал выполнения" }, @@ -4781,11 +6823,6 @@ "table": { "search": "Поиск среди {count} задач..." }, - "action": { - "refresh": { - "label": "Обновить" - } - }, "refresh": { "success": { "message": "Задачи успешно обновлены" @@ -4819,7 +6856,6 @@ } }, "api": { - "title": "API", "modal": { "createApiToken": { "title": "API-токен создан", @@ -4845,7 +6881,6 @@ }, "table": { "header": { - "id": "ID", "createdBy": "Создан пользователем", "actions": "Действия" } @@ -4901,43 +6936,12 @@ "availableTools": { "title": "Доступные инструменты", "description": "{count} инструментов доступно. Разверните категорию для просмотра отдельных инструментов и их описаний.", - "columnType": "Тип", - "columnName": "Инструмент", - "columnDescription": "Описание" - }, - "troubleshooting": { - "title": "Устранение неполадок", - "missingHeader": { - "title": "\"Отсутствует заголовок ApiKey\"", - "description": "Ваш клиент не отправляет заголовок {header}. Проверьте раздел {section} в конфигурации MCP. Некоторые клиенты требуют перезапуска после изменения конфигурации." - }, - "invalidFormat": { - "title": "\"Неправильный формат ApiKey\"", - "description": "Убедитесь, что вы скопировали полный API-ключ, а не его часть." - }, - "invalidKey": { - "title": "\"Неверный ключ API\"", - "description": "ID ключа не найден или токен неправильный. Ключи API можно просмотреть только после создания. Если вы его потеряли, удалите старый ключ и создайте новый." - }, - "connectionRefused": { - "title": "Соединение отклонено / таймаут", - "description": "Убедитесь, что URL-адрес доступен из вашего ИИ-клиента. Если Homarr работает за обратным прокси или в Docker, используйте внешний URL (не {localhost}). Проверьте правильность порта (по умолчанию 7575 для Docker)." - }, - "toolsNotAppearing": { - "title": "Инструменты не отображаются", - "description": "Некоторые инструменты требуют определённой интеграции (например, Docker, Overseerr). Список инструментов зависит от того, что доступно в вашем экземпляре Homarr." + "filteredDescription": "{count} подходящих инструментов по разным расширенным категориям.", + "search": "Инструменты поиска", + "noResults": { + "title": "Нет инструментов, соответствующих этому поиску", + "description": "Не соответствует инструменту MCP \"{search}\". Попробуйте пространство имён, инструмент или описание." } - }, - "copy": "Копировать", - "oneClick": { - "title": "Установить в один клик", - "subtitle": "Использует OAuth — авторизоваться в вашем браузере при первом использовании", - "vsCode": "Установить в VS Code", - "cursor": "Установить в Cursor", - "copyUrl": "Копировать URL-адрес MCP", - "copied": "Скопировано!", - "copyHint": "Для ChatGPT, Claude Code или любого клиента MCP", - "manualConfig": "Ручная настройка" } } } @@ -4954,47 +6958,12 @@ "title": "Экспорт конфиденциальных данных", "warningTitle": "Этот экспорт содержит всю вашу базу данных.", "warningBody": "Резервная копия включает всех пользователей, секреты интеграций (зашифрованные), API-ключи, настройки панелей и данные приложений. Храните экспортированный файл в безопасности и не делитесь им.", - "typePrompt": "Введите \"{phrase}\" для продолжения", - "submit": "Экспорт базы данных", - "cancel": "Отмена" + "submit": "Экспорт базы данных" } }, "import": { "title": "Восстановить базу данных", - "description": "Загрузите ранее экспортированный ZIP-архив для восстановления базы данных. Это полностью заменит вашу базу данных. Если резервная копия была создана с другим ключом шифрования, секреты будут автоматически перешифрованы.", - "warning": "Восстановление резервной копии полностью заменит вашу текущую базу данных и перезапустит приложение. Это действие нельзя отменить.", - "dropzone": { - "title": "Перетащите ZIP-файл с резервной копией сюда или нажмите для выбора", - "description": "Принимаются только .zip файлы из резервной копии SQLite Homarr" - }, - "changeFile": "Изменить файл", - "button": "Восстановить базу данных", - "success": { - "title": "Восстановление завершено", - "message": "База данных успешно восстановлена. Приложение перезапускается..." - }, - "error": "Ошибка импорта" - }, - "preview": { - "title": "Содержимое резервной копии", - "exported": "Экспортировано {date}", - "loading": "Анализ файла резервной копии...", - "errorTitle": "Ошибка предпросмотра", - "entity": "Сущность", - "count": "Количество", - "boards": "Панели", - "entities": { - "board": "Панели", - "user": "Пользователи", - "app": "Приложения", - "integration": "Интеграции", - "item": "Виджеты", - "media": "Медиа", - "search_engine": "Поисковые системы" - }, - "analyzeError": "Не удалось проанализировать файл резервной копии", - "invalidMissingMetadata": "Недействительная резервная копия: отсутствует metadata.json", - "invalidMissingDb": "Недействительная резервная копия: отсутствует db.sqlite" + "description": "Загрузите ранее экспортированный ZIP-архив для восстановления базы данных. Это полностью заменит вашу базу данных. Если резервная копия была создана с другим ключом шифрования, секреты будут автоматически перешифрованы." }, "restore": { "dropzone": { @@ -5004,29 +6973,20 @@ "analyzing": "Анализ резервной копии...", "changeFile": "Изменить файл", "continueToRestore": "Перейти к восстановлению", - "tryAgain": "Попробовать снова", "analysisError": "Ошибка анализа", "preview": { "title": "Содержимое резервной копии", "exported": "Экспортировано {date}", "entity": "Сущность", "count": "Количество", - "boards": "Панели", "entities": { - "board": "Панели", - "user": "Пользователи", - "app": "Приложения", - "integration": "Интеграции", - "item": "Виджеты", - "media": "Медиа", - "search_engine": "Поисковые системы" + "item": "Виджеты" }, "migrationsApplied": "Применена {count} миграция", "migrationsAppliedPlural": "Применено {count} миграций", "migrationsOlderVersion": "Эта резервная копия была из более старой версии Homarr. Была применена {count} миграция схемы для обновления.", "migrationsOlderVersionPlural": "Эта резервная копия была из более старой версии Homarr. Было применено {count} миграций схемы для обновления.", "migrationsUpToDate": "Схема базы данных актуальна (применено {count} миграций)", - "upToDate": "Актуально", "migrationsPending": "{count} ожидает" }, "migration": { @@ -5037,21 +6997,21 @@ "title": "Деструктивное действие", "warningTitle": "Это безвозвратно заменит всю вашу базу данных.", "warningBody": "Все текущие панели, пользователи, приложения, интеграции, настройки и сеансы будут потеряны. Это действие нельзя отменить. Приложение перезапустится после восстановления.", - "typePrompt": "Введите \"{phrase}\" для продолжения", - "cancel": "Отмена", "submit": "Восстановить базу данных" }, "progress": { "title": "Восстановление базы данных...", - "extracting": "Извлечение архива резервной копии", - "migrating": "Применение миграций базы данных", - "encrypting": "Перешифрование секретов интеграций", - "swapping": "Замена файла базы данных", - "restarting": "Перезапуск сервера" + "restarting": "Перезапуск сервера", + "relogin": "Восстановление базы данных аннулировало вашу текущую сессию. Homarr отправит вам вход, когда сервер будет готов." }, "complete": { "title": "Восстановление завершено", - "message": "База данных успешно восстановлена. Сервер перезапускается — обновите страницу через несколько секунд." + "message": "База данных успешно восстановлена. Сервер перезапускается — обновите страницу через несколько секунд.", + "button": "Войти сейчас" + }, + "timeout": { + "title": "Сервер не вернулся в сеть", + "message": "Восстановление базы данных завершено, но Homarr не стал готовым снова. Повторите проверку соединения или обновите эту страницу вручную." }, "failed": { "title": "Восстановление не удалось" @@ -5059,6 +7019,9 @@ "invalidMissingMetadata": "Недействительная резервная копия: отсутствует metadata.json", "invalidMissingDb": "Недействительная резервная копия: отсутствует db.sqlite", "analyzeError": "Не удалось проанализировать резервную копию" + }, + "confirm": { + "typePrompt": "Чтобы продолжить, введите \"{phrase}\"" } } }, @@ -5093,7 +7056,11 @@ "toggleBoardEdit": "Переключить режим редактирования панели", "toggleColorScheme": "Переключить светлую/тёмную тему", "saveNotebook": "Сохранить блокнот (только внутри виджета блокнота)", - "openSpotlight": "Открыть поиск" + "openSpotlight": "Открыть поиск", + "openSpotlightApps": "Открыть поиск приложения", + "openSpotlightAssistant": "Режим \"Открыть ассистент\"", + "openSpotlightPreferences": "Режим открытых настроек", + "openAssistant": "Открыть помощника" }, "note": "Подсказка: Mod — это клавиша Ctrl или ⌘ на macOS" } @@ -5103,6 +7070,63 @@ }, "docker": { "title": "Контейнеры", + "reconciliation": { + "title": "Поддержка Docker", + "suggestions": "{count, plural, =0 {Нет предложений} one {# предложение} other {# предложения}}", + "attention": "{count} требует внимания", + "endpointUnavailable": "Некоторые службы не могут быть проверены, потому что эти конечные точки недоступны: {names}", + "empty": "Нет видимых сервисов Docker.", + "emptyFilter": "Ни один сервис не соответствует этому представлению.", + "ambiguous": "Более чем один существующий элемент может совпадать с этой службой. Homarr не будет автоматически выбирать один элемент.", + "filter": { + "attention": "Требует внимания", + "represented": "Уже настроен", + "all": "Все" + }, + "state": { + "newRecognized": "Готов к подключению", + "newApp": "Новая услуга", + "represented": "Уже представлены", + "linked": "Связанные", + "moved": "Адрес изменен" + }, + "url": { + "manual": "Введите адрес вручную" + }, + "health": { + "layer": { + "docker": "Docker", + "integrationConfiguration": "Интеграция", + "authentication": "Аутентификация", + "apiRequest": "API", + "appRepresentation": "Приложение", + "widgetConfiguration": "Виджет", + "widgetQuery": "Запрос виджета" + }, + "status": { + "available": "Доступно", + "configured": "Настроено", + "linked": "Связанные", + "missing": "Отсутствует", + "changed": "Изменено", + "unused": "Не используется", + "notApplicable": "Не применимо", + "notObserved": "Не наблюдается" + } + }, + "action": { + "review": "Проверка", + "dismiss": "Отклонить", + "restoreDismissed": "Восстановление отклонено ({count})", + "setupIntegration": "Настройка интеграции", + "reviewIntegration": "Обзор интеграции", + "viewRepresentation": "Просмотр настроек" + }, + "loadError": { + "title": "Ассистент настройки Docker не может быть загружен", + "message": "Сервис Docker недоступен. Попробуйте снова, не выходя из этой страницы." + } + }, "table": { "updated": "Обновлено {when}", "refresh": { @@ -5115,9 +7139,6 @@ "totalMemory": "Всего ОЗУ: {memory}" }, "field": { - "name": { - "label": "Название" - }, "state": { "label": "Состояние", "option": { @@ -5131,9 +7152,6 @@ } }, "stats": { - "cpu": { - "label": "ЦП" - }, "memory": { "label": "Память" } @@ -5196,8 +7214,11 @@ } }, "remove": { - "label": "Удалить", "confirm": "Нажмите снова, чтобы удалить окончательно", + "confirmation": { + "title": "{count, plural, one {Удалить # контейнер?} other {Удалить # контейнеры?}}", + "message": "{count, plural, one {Это окончательно удаляет # контейнер: {names}} other {Это навсегда удаляет # контейнеры: {names}}}" + }, "notification": { "success": { "title": "Контейнеры удалены", @@ -5209,8 +7230,13 @@ } } }, + "result": { + "failure": { + "title": "Некоторые действия контейнера не удалось", + "message": "{total, plural, one {{failed} # действие не удалось: {names}} other {{failed} # действий не удалось: {names}}}" + } + }, "refresh": { - "label": "Обновить", "notification": { "success": { "title": "Контейнеры обновлены", @@ -5241,18 +7267,33 @@ }, "error": { "internalServerError": "Произошла ошибка при обновлении данных о контейнерах", + "endpointUnavailable": "{count, plural, one {# Докер конечной точки недоступен: {names}} other {# Докер концов недоступен: {names}}}", "noColumns": "Выберите хотя бы один столбец в настройках виджета" } }, "kubernetes": { + "context": { + "label": "Контекст Кубернета", + "loadError": { + "title": "Контексты Kubernetes не могут быть загружены", + "message": "Контекстная информация недоступна. Попробуйте снова, не выходя из этой страницы." + }, + "status": { + "available": "Доступно", + "degraded": "Metrics unavailable", + "unavailable": "Unavailable" + }, + "unavailable": "Этот контекст Kubernetes не может быть достигнут. Выберите другой контекст или проверьте его учетные данные и конечную точку.", + "metricsUnavailable": "Контекст доступен, но сервер Metrics недоступен. Инвентаризация остается доступной без использования ЦП и памяти." + }, "cluster": { "title": "Панель кластера", "label": "Кластер", "providers": "Провайдеры", "version": "Версия", - "architecture": "Архитектура", "capacity": { "title": "Ёмкость", + "metricsUnavailable": "Сервер Метриков недоступен. Инвентарь и зарезервированная емкость остаются видимыми, но использование ЦП и памяти не может быть показано.", "resource": { "reserved": "Зарезервировано", "used": "Использовано" @@ -5271,38 +7312,10 @@ } }, "nodes": { - "label": "Узлы", "field": { - "name": { - "label": "Имя" - }, - "state": { - "label": "Состояние", - "option": { - "ready": "Готов", - "NotReady": "Не готов" - } - }, - "cpu": { - "label": "ЦП" - }, - "memory": { - "label": "Память" - }, - "pods": { - "label": "Поды" - }, - "operatingSystem": { - "label": "ОС" - }, - "architecture": { - "label": "Архитектура" - }, + "metricsUnavailable": "Unavailable", "kubernetesVersion": { "label": "Версия Kubernetes" - }, - "creationTimestamp": { - "label": "Создано" } }, "table": { @@ -5310,43 +7323,17 @@ } }, "namespaces": { - "label": "Пространства имён", - "field": { - "name": { - "label": "Имя" - }, - "state": { - "label": "Состояние", - "option": { - "active": "Активно", - "terminating": "Завершается" - } - }, - "creationTimestamp": { - "label": "Создано" - } - }, "table": { "search": "Поиск среди {count} пространств имён" } }, "ingresses": { - "label": "Ingresses", "field": { - "name": { - "label": "Имя" - }, - "namespace": { - "label": "Пространство имён" - }, "className": { "label": "Имя класса" }, "rulesAndPaths": { "label": "Правила и пути" - }, - "creationTimestamp": { - "label": "Создано" } }, "table": { @@ -5354,17 +7341,7 @@ } }, "services": { - "label": "Сервисы", "field": { - "name": { - "label": "Имя" - }, - "namespace": { - "label": "Пространство имён" - }, - "type": { - "label": "Тип" - }, "ports": { "label": "Порты" }, @@ -5373,9 +7350,6 @@ }, "clusterIP": { "label": "IP кластера" - }, - "creationTimestamp": { - "label": "Создано" } }, "table": { @@ -5383,25 +7357,12 @@ } }, "pods": { - "label": "Поды", "field": { - "name": { - "label": "Имя" - }, - "namespace": { - "label": "Пространство имён" - }, "image": { "label": "Образ" }, "applicationType": { "label": "Тип приложения" - }, - "status": { - "label": "Статус" - }, - "creationTimestamp": { - "label": "Создано" } }, "table": { @@ -5409,51 +7370,17 @@ } }, "secrets": { - "label": "Секреты", - "field": { - "name": { - "label": "Имя" - }, - "namespace": { - "label": "Пространство имён" - }, - "type": { - "label": "Тип" - }, - "creationTimestamp": { - "label": "Создано" - } - }, "table": { "search": "Поиск среди {count} секретов" } }, "configmaps": { - "label": "ConfigMaps", - "field": { - "name": { - "label": "Имя" - }, - "namespace": { - "label": "Пространство имён" - }, - "creationTimestamp": { - "label": "Создано" - } - }, "table": { "search": "Поиск среди {count} configMaps" } }, "volumes": { - "label": "Тома", "field": { - "name": { - "label": "Имя" - }, - "namespace": { - "label": "Пространство имён" - }, "accessModes": { "label": "Режимы доступа" }, @@ -5468,12 +7395,6 @@ }, "volumeName": { "label": "Имя тома" - }, - "status": { - "label": "Статус" - }, - "creationTimestamp": { - "label": "Создано" } }, "table": { @@ -5482,6 +7403,29 @@ }, "error": { "internalServerError": "Не удалось получить данные Kubernetes" + }, + "field": { + "name": { + "label": "Название задачи" + }, + "namespace": { + "label": "Пространство имён" + }, + "creationTimestamp": { + "label": "Создано" + }, + "state": { + "label": "Состояние задачи" + }, + "status": { + "label": "Статус" + }, + "type": { + "label": "Тип клиента загрузки" + }, + "architecture": { + "label": "Архитектура" + } } }, "permission": { @@ -5515,71 +7459,27 @@ }, "navigationStructure": { "manage": { - "workshop": { - "label": "Workshop" - }, "label": "Управление", - "boards": { - "label": "Панели" - }, - "integrations": { - "label": "Интеграции", + "custom-widgets": { "edit": { - "label": "Редактировать" + "flow": { + "label": "Поток" + } }, - "new": { - "label": "Новая" - } - }, - "search-engines": { - "label": "Поисковые системы", - "new": { - "label": "Новая" + "workshop": { + "label": "Семинар" }, - "edit": { - "label": "Редактировать" - } - }, - "medias": { - "label": "Медиафайлы" - }, - "apps": { - "label": "Приложения", - "new": { - "label": "Новое" - }, - "edit": { - "label": "Редактировать" + "publish": { + "label": "Опубликовать в Мастерской" } }, "users": { - "label": "Пользователи", - "create": { - "label": "Создать" - }, "general": "Общие", - "security": "Безопасность", - "board": "Панели", - "groups": { - "label": "Группы" - }, - "invites": { - "label": "Приглашения" - } + "security": "Безопасность" }, "tools": { "label": "Инструменты", - "tasks": { - "label": "Задачи" - }, - "docker": { - "label": "Docker", - "logs": { - "label": "Логи" - } - }, "kubernetes": { - "label": "Kubernetes", "nodes": { "label": "Узлы" }, @@ -5605,11 +7505,7 @@ "label": "Тома" } }, - "logs": { - "label": "Логи" - }, "certificates": { - "label": "Сертификаты", "hostnames": { "label": "Имена хостов" } @@ -5620,12 +7516,60 @@ }, "about": { "label": "О программе" + }, + "assistant": { + "label": "Помощник" } } }, "search": { "placeholder": "Найдётся все", "nothingFound": "Ничего не найдено", + "modePicker": { + "search": { + "label": "Поиск", + "placeholder": "Поиск приложений, досок, страниц, команд и настроек" + }, + "apps": { + "label": "Приложения", + "placeholder": "Поиск приложений, досок и интеграций" + }, + "command": { + "label": "Команды", + "placeholder": "Поиск действий и команд" + }, + "preferences": { + "label": "Настройки", + "placeholder": "Поиск и изменение настроек" + }, + "assistant": { + "label": "Помощник", + "placeholder": "Спросить помощника" + }, + "external": { + "label": "Веб", + "placeholder": "Поиск в внешней поисковой системе" + }, + "media": { + "label": "Медиа", + "placeholder": "Поиск фильма или шоу", + "fallback": "Поиск медиа для \"{query}\"" + }, + "userGroup": { + "label": "Люди", + "placeholder": "Поиск пользователей и групп" + }, + "continueWith": "Продолжить с", + "dialogAriaLabel": "{mode} командное меню", + "navigationLabel": "Режимы поиска", + "modeAriaLabel": "Режим {mode}", + "resultsAriaLabel": "{mode} результаты", + "footer": { + "navigate": "Navigate", + "open": "Открыть", + "close": "Закрыть" + } + }, "error": { "fetch": "Произошла ошибка при получении данных" }, @@ -5634,7 +7578,6 @@ "help": "Поиск приложений, интеграций или панелей", "group": { "app": { - "title": "Приложения", "children": { "action": { "open": { @@ -5650,7 +7593,6 @@ } }, "board": { - "title": "Панели", "children": { "action": { "open": { @@ -5670,9 +7612,6 @@ "title": "Выберите действие для панели" } } - }, - "integration": { - "title": "Интеграции" } } }, @@ -5701,9 +7640,6 @@ "newBoard": { "label": "Создать новую панель" }, - "importBoard": { - "label": "Импортировать панель" - }, "newApp": { "label": "Создать новое приложение" }, @@ -5773,7 +7709,6 @@ } }, "defaultSearchEngineId": { - "label": "Поисковая система по умолчанию", "children": { "detail": { "title": "Выберите поисковую систему по умолчанию" @@ -5781,7 +7716,6 @@ } }, "openSearchInNewTab": { - "label": "Открывать результаты поиска в новой вкладке", "children": { "detail": { "title": "Открывать результаты поиска в новой вкладке" @@ -5789,7 +7723,6 @@ } }, "ddgBangs": { - "label": "Включить DuckDuckGo bangs", "children": { "detail": { "title": "Включить DuckDuckGo bangs" @@ -5804,6 +7737,13 @@ } } }, + "byteUnitSystem": { + "children": { + "detail": { + "title": "Выберите единицы размера данных" + } + } + }, "homeBoardId": { "label": "Домашняя панель", "children": { @@ -5821,7 +7761,6 @@ } }, "pingIconsEnabled": { - "label": "Использовать индикаторы доступности", "children": { "detail": { "title": "Использовать индикаторы доступности" @@ -5829,7 +7768,6 @@ } }, "enableRightClickOnWidgets": { - "label": "Включить правый клик по виджетам", "children": { "detail": { "title": "Включить правый клик по виджетам" @@ -5857,6 +7795,7 @@ "description": "Начните вводить для поиска в интеграциях медиа-запросов", "disabled": { "noIntegration": "Добавьте интеграцию Overseerr, Jellyseerr или Seerr для включения поиска медиа.", + "signInRequired": "Войдите, чтобы искать интеграцию с медиа-запросом.", "scoped": "У этого виджета нет доступной интеграции медиа-запросов." } } @@ -5873,7 +7812,6 @@ "help": "Использовать внешнюю поисковую систему", "group": { "searchEngine": { - "title": "Поисковые системы", "tipDdgBangs": "Совет: Вы также можете использовать любые DuckDuckGo bangs, например !something", "bang": { "searchWithQuery": "Искать \"{query}\" с {label}", @@ -5924,20 +7862,6 @@ "group": { "mode": { "title": "Режимы" - }, - "help": { - "title": "Справка", - "option": { - "documentation": { - "label": "Документация" - }, - "submitIssue": { - "label": "Сообщить о проблеме" - }, - "discord": { - "label": "Сообщество Discord" - } - } } } }, @@ -5949,9 +7873,10 @@ "other": { "label": "Искать в другой поисковой системе" }, - "no-default": { - "label": "Нет поисковой системы по умолчанию", - "description": "Установите поисковую систему по умолчанию в настройках" + "no-engines": { + "label": "Поисковые системы не настроены", + "descriptionCreate": "Добавить поисковую систему для поиска из командного меню", + "descriptionUnavailable": "Попросить администратора настроить поисковую систему" }, "search": { "label": "Искать \"{query}\" через {name}" @@ -6031,7 +7956,6 @@ "help": "Поиск пользователей или групп", "group": { "user": { - "title": "Пользователи", "children": { "action": { "detail": { @@ -6044,7 +7968,6 @@ } }, "group": { - "title": "Группы", "children": { "action": { "detail": { @@ -6068,9 +7991,6 @@ "engine": { "search": "Найти поисковую систему", "field": { - "name": { - "label": "Название" - }, "short": { "label": "Краткое название" }, @@ -6083,12 +8003,19 @@ }, "page": { "list": { - "title": "Поисковые системы", + "ariaLabel": "Настроенные поисковые системы", "noResults": { "title": "Поисковые системы пока отсутствуют", - "action": "Создать первую поисковую систему" + "description": "Поисковые системы позволяют Spotlight отправлять запрос на сайт или подключенный сервис.", + "action": "Создать первую поисковую систему", + "filteredTitle": "Нет поисковых систем, соответствующих вашему запросу", + "filteredDescription": "Нет поисковых систем, соответствующих \"{search}\". Попробуйте другое имя или URL-адрес." }, - "interactive": "Интерактивная, использует интеграцию" + "interactive": "Интерактивная, использует интеграцию", + "type": { + "generic": "Шаблон URL", + "fromIntegration": "Интеграция" + } }, "create": { "title": "Новая поисковая система", @@ -6107,11 +8034,9 @@ "title": "Редактирование поисковой системы", "notification": { "success": { - "title": "Изменения сохранены", "message": "Поисковая система успешно сохранена" }, "error": { - "title": "Не удалось сохранить", "message": "Не удалось сохранить поисковую систему" } }, @@ -6250,6 +8175,10 @@ } }, "log": { + "context": { + "widgetError": "Виджет сообщил об ошибке на этот раз", + "expiredWidgetError": "Журналы вокруг этого виджета больше не сохраняются" + }, "level": { "option": { "debug": "Отладка", @@ -6261,7 +8190,6 @@ }, "onboardingTour": { "learnMore": "Читать документацию", - "next": "Далее", "prev": "Назад", "done": "Готово", "skip": "Пропустить тур", @@ -6325,5 +8253,359 @@ "description": "Измените цветовую схему, язык, домашнюю панель и настройки. Также можете перейти в область управления отсюда." } } + }, + "metadata": { + "description": "Инструментальная панель для *arr stack и всего вашего домашнего экрана. Интегрирует с 50+ сервисами, виджетами в реальном времени, без конфигурационных файлов.", + "dashboardTitle": "Панель инструментов {appName}" + }, + "assistant": { + "title": "Помощник", + "open": "Открыть помощника", + "close": "Закрыть помощника", + "minimize": "Свернуть помощника", + "spotlight": "Спросить помощника", + "spotlightDescription": "Введите и отправьте запрос, не выходя из меню команд.", + "spotlightPrompt": { + "title": "Спросить помощника", + "description": "Введите запрос выше. Введите его в фоновом режиме.", + "send": "Отправить запрос", + "empty": "Введите запрос выше" + }, + "unavailable": { + "checking": "Проверка наличия помощника…", + "error": "Не удалось проверить доступность помощника. Повторите попытку.", + "notConfigured": "Администратор должен сначала настроить и включить помощника.", + "signIn": "Войдите, чтобы использовать ассистента." + }, + "newConversation": "Новая беседа", + "conversations": "Разговоры", + "conversationActions": "Действия в разговоре", + "searchConversations": "Поиск в диалогах", + "noMatchingConversations": "Нет подходящих диалогов", + "moreActions": "Больше действий по реагированию", + "renameConversation": { + "action": "Переименовать", + "label": "Название разговора", + "save": "Сохранить имя", + "failedTitle": "Разговор не может быть переименован", + "failedDescription": "Homarr не может переименовать этот разговор. Попробуйте еще раз." + }, + "deleteConversation": { + "title": "Удалить диалог?", + "description": "“{title}” и его сообщения будут удалены навсегда.", + "failedTitle": "Обсуждение не может быть удалено", + "failedDescription": "Homarr не смог удалить этот разговор. Попробуйте еще раз." + }, + "closeHistory": "Закрыть историю разговоров", + "openHistory": "Открыть историю разговоров", + "emptyTitle": "Что я могу помочь?", + "emptyDescription": "Спросите о вашей конфигурации Homarr, исследовать данные в реальном времени или одобрить действия, когда вы хотите, чтобы я сделал изменения.", + "suggestions": { + "health": { + "label": "Проверьте здоровье службы", + "prompt": "Проверьте мою интеграцию и суммируйте всё, что нужно для внимания." + }, + "explore": { + "label": "Исследуйте мой Гомарр", + "prompt": "Покажите мне, что я могу просматривать и управлять в этом экземпляре Homarr." + }, + "media": { + "label": "Найти медиа для запроса", + "prompt": "Помогите мне найти фильм или серию по запросу." + }, + "style": { + "label": "Улучшить панель инструментов", + "prompt": "Помогите мне улучшить внешний вид доски или CSS. Сначала покажите мне доски, а затем сохраните свои текущие настройки, пока мы сделаем изменения." + }, + "designWidget": { + "label": "Дизайн виджета", + "prompt": "Создать и установить пользовательский виджет для " + } + }, + "composerPlaceholder": "Спросить помощника…", + "runtime": { + "model": "Модель", + "searchModels": "Модели поиска", + "noModels": "Нет доступных моделей", + "otherModels": "Другие модели", + "imageInput": "Принимает ввод изображения", + "thinking": "Режим мышления", + "reasoning": { + "auto": "Авто", + "none": "Выкл", + "minimal": "Минимальный", + "low": "Низкий", + "medium": "Среднее", + "high": "Высокий" + } + }, + "providerQuota": { + "title": "Поставщик Homarr", + "communityWorkshop": "Мастерская сообщества", + "dailyAllowance": "Ежедневная надбавка", + "remainingLabel": "Осталось {remaining} из {limit} запросов к провайдеру Homarr", + "loading": "Загрузка надбавки поставщика Homarr", + "signInRequired": "Вход в мастерскую необходим поставщику Homarr", + "signInDescription": "Войдите в GitHub через мастерскую, чтобы получить отдельную суточную надбавку.", + "exhaustedDescription": "На сегодняшний день используется ваша надбавка для поставщиков Homarr. Она сбрасывается в полночь по Гринвичу.", + "unavailableDescription": "Войдите в Мастерскую или дождитесь сброса разрешения поставщика Homarr.", + "signIn": "Войти через GitHub", + "signInError": "Ошибка входа в GitHub. Повторите попытку через некоторое время.", + "loadError": "Не удалось загрузить надбавку провайдера Homarr.", + "reset": "Сбрасывает {relative} в ", + "toolCalls": "Каждый запрос модели и выполненный вызов инструмента использует один запрос.", + "retry": "Перезагрузить допуск", + "level": { + "ok": "ОК", + "warning": "Предупреждение", + "bad": "Низкий", + "dead": "Использовано" + } + }, + "stop": "Остановить ответ", + "send": "Отправить сообщение", + "copy": "Копировать ответ", + "copyMessage": "Копировать сообщение", + "editMessage": "Изменить сообщение", + "updateMessage": "Обновить сообщение", + "regenerate": "Восстановить ответ", + "helpful": "Полезно", + "notHelpful": "Не полезно", + "readAloud": "Читать ответ вслух", + "stopReading": "Остановить чтение ответа", + "feedbackError": "Ваш отзыв не может быть сохранен. Попробуйте еще раз.", + "exportMarkdown": "Экспортировать как Markdown", + "exportConversation": { + "action": "Экспортировать разговор как Markdown", + "failedTitle": "Разговор не может быть экспортирован", + "failedDescription": "Homarr не смог загрузить этот разговор. Попробуйте еще раз." + }, + "reasoning": "Мысль", + "previousResponse": "Предыдущий ответ", + "nextResponse": "Следующий ответ", + "removeAttachment": "Удалить вложение", + "downloadFile": "Скачать {name}", + "attachedImage": "Прикрепленное изображение", + "externalImageBlocked": "Внешнее изображение заблокировано для конфиденциальности", + "image": { + "loading": "Загрузка изображения", + "failed": "Это изображение не может быть загружено.", + "retry": "Попробовать изображение снова" + }, + "quoteSelection": "Цитата", + "dismissQuote": "Удалить цитату", + "attachments": { + "add": "Прикрепить изображение или документ", + "errorTitle": "Не удалось добавить вложение", + "imageUnsupported": "Выбранная модель не поддерживает ввод изображения." + }, + "mentions": { + "menu": "Добавить контекст Homarr", + "context": "Контекст", + "app": "Приложения", + "integration": "Интеграции", + "board": "Панели", + "widget": "Виджеты", + "tools": "Доступные инструменты" + }, + "markdown": { + "diagram": "Диаграмма", + "renderingDiagram": "Отображение диаграммы…", + "diagramUnavailable": "Эта диаграмма не может быть отображена." + }, + "commands": { + "menu": "Команды помощника", + "health": "Подготовить проверку состояния здоровья", + "explore": "Подготовка обзора этого экземпляра Homarr", + "media": "Подготовить поиск медиафайлов", + "style": "Подготовить внешний вид доски или пользовательские изменения CSS", + "designWidget": "Подготовить сборку пользовательских виджетов" + }, + "usage": { + "tokens": "жетоны", + "contextWindow": "Окно контекста", + "requestDetails": "Запросить подробности", + "used": "Последний шаг", + "remaining": "Осталось", + "capacity": "Ёмкость", + "input": "Input", + "output": "Вывод", + "cached": "Кэшированный ввод", + "cacheWrite": "Запись кэша", + "reasoning": "Разумное", + "inputShort": "в", + "outputShort": "из", + "cachedShort": "кэш", + "reasoningShort": "рассуждение", + "firstOutput": "Первый выход", + "homarrTiming": "Наблюдаемый гомарр", + "endToEnd": "Конец к концу", + "observedThroughput": "Наблюдаемая пропускная способность", + "providerTiming": "Поставщик сообщил об этом", + "loadingProviderDetails": "Загрузка деталей генерации…", + "providerDetailsPending": "OpenRouter все еще обрабатывает некоторые данные генерации данных. Откройте заново для повтора.", + "providerLatency": "Задержка провайдера", + "generationTime": "Время генерации", + "moderationLatency": "Модерирование", + "providerThroughput": "Провайдер", + "fallbacks": "Отказы", + "fallbackLatency": "Резервная задержка", + "cacheDiscount": "Скидка кэша", + "normalizedTokens": "OpenRouter нормализован ввод / вывод", + "byok": "БЫК", + "cost": "Затраты", + "reported": "Сообщение от провайдера", + "estimated": "Приблизительно по типовым ценам", + "upstreamCost": "Входящее окно", + "webSearches": "Веб поиск", + "finishReason": "Причина завершения", + "notReported": "Не Жалоба", + "agentSteps": "Шаги агента", + "step": "Шаг {number}", + "generation": "Поколение" + }, + "toolInput": "Input", + "toolOutput": "Вывод", + "toolActivity": { + "iconSearch": "Ищете иконки “{query}”", + "iconBrowse": "Просмотр доступных значков" + }, + "toolNavigation": { + "openPreview": "Открыть предпросмотр", + "openWidget": "Открыть виджет" + }, + "webSearch": { + "title": "Веб-поиск", + "completed": "OpenRouter искал в прямом Интернете для этого ответа.", + "searches": "{count, plural, one {# Искать} other {# ищет}}", + "sources": "{count, plural, one {# исходник} other {# исходников}}" + }, + "responseError": { + "title": "Ассистент не смог завершить", + "description": "Попробуйте еще раз. Если проблема продолжается, попросите администратора проверить настроенную конечную точку модели." + }, + "toolPreparationError": { + "title": "Этот запрос не может быть подготовлен", + "description": "Модель остановлена до того, как она предоставила полную информацию. Повторите попытку ответа или опишите запрос снова. Никаких изменений не было сделано." + }, + "busy": { + "title": "Ассистент уже работает", + "description": "Дождитесь текущего ответа или откройте его, чтобы остановить запуск." + }, + "pendingAction": { + "answerTitle": "Требуется ответ", + "answerFallback": "Выберите ответ для продолжения", + "formTitle": "Просмотреть детали приложения", + "boardFormTitle": "Просмотр изменений на доске", + "review": "Проверка", + "sendBlocked": "Разрешите ожидающий запрос перед отправкой" + }, + "activity": { + "thinking": "Помощник думает", + "working": "Работает над вашим запросом", + "ready": "Ответ готов", + "completed": "Открыть ответ", + "approval": "Требуется подтверждение", + "failed": "Помощник нуждается в внимании", + "expand": "Открыть ответ помощника", + "dismiss": "Отклонить работу помощника" + }, + "scrollToLatest": "Прокрутка до последней", + "refresh": { + "action": "Обновить текущий вид", + "working": "Обновление текущего вида", + "completeTitle": "Просмотр обновлённого", + "completeDescription": "Видимые данные Homarr были перезагружены.", + "failedTitle": "Вид не может быть обновлен", + "failedDescription": "Изменения все еще могут быть сохранены. Попробуйте повторить действие обновления." + }, + "askUser": { + "preparing": "Подготовка вопроса", + "answered": "Ваш ответ", + "other": "Прочее", + "otherLabel": "Ваш ответ", + "otherPlaceholder": "Введите другой ответ…", + "submit": "Отправить ответ", + "cancelOther": "Отменить другой ответ", + "optionKind": { + "affirmative": "Подтвердить", + "negative": "Отклонить", + "alternative": "Вариант", + "custom": "Свой" + } + }, + "configureApp": { + "title": "Просмотреть детали приложения", + "description": "Выберите локальную иконку и настройте что-нибудь перед созданием ассистента.", + "preparing": "Подготовка сведений о приложении", + "continue": "Используйте эти данные", + "ready": "Данные приложения готовы", + "automaticContinue": "Автоматически использовать данные приложения" + }, + "configureBoardSettings": { + "title": "Просмотр изменений на доске", + "loading": "Загрузка текущих настроек доски", + "loadErrorTitle": "Не удалось загрузить настройки доски", + "loadErrorDescription": "Доска может не существовать, или у вас нет разрешения на её изменение.", + "proposedCount": "Помощник предложил поля {count}", + "changeCount": "{count} изменения готово", + "ready": "Изменения доски готово", + "cancelled": "Текущие настройки доски сохранены", + "noChanges": "Настройки не будут изменены", + "keepCurrent": "Сохранить текущие настройки", + "continue": "Продолжить утверждение", + "automaticContinue": "Автоматически утверждать изменения в совете", + "resetAll": "Сбросить все изменения", + "tabs": { + "css": "Custom CSS", + "appearance": "Внешний вид", + "background": "Фон", + "general": "Основная" + }, + "cssDescription": "Редактировать всю таблицу стилей. Существующие правила сохраняются, если они не будут удалены здесь.", + "cssCharacters": "{count} из 16384 символов", + "copyCss": "Copy CSS", + "copied": "Скопировано", + "restoreCss": "Restore current CSS", + "remoteCssTitle": "CSS загружает удаленный ресурс", + "remoteCssDescription": "Импортированные таблицы стилей и удаленные URL-адреса связываются с другим сервером, когда загрузка доски загружена. Просмотрите их, прежде чем продолжить." + }, + "configureWidget": { + "title": "Просмотр виджета", + "preparing": "Подготовка настроек виджета", + "review": "Просмотреть виджет и интеграцию", + "ready": "Конфигурация виджета готова", + "cancelled": "Виджет не был добавлен", + "automaticContinue": "Автоматически утверждать предлагаемую конфигурацию виджетов", + "definitionLoadErrorTitle": "Не удалось загрузить настройки виджетов", + "definitionLoadErrorDescription": "Homarr не смог загрузить настройки этого виджета. Попробуйте еще раз.", + "loadErrorTitle": "Интеграции не могут быть загружены", + "loadErrorDescription": "Homarr не смог загрузить интеграции, доступные для этого виджета.", + "noIntegrationTitle": "Требуется совместимая интеграция", + "noIntegrationDescription": "Настройте интеграцию, поддерживаемую этим виджетом, перед добавлением ее на приборную панель.", + "connectIntegration": "Подключить сервис", + "manageIntegrations": "Управление интеграциями", + "skip": "Не добавлять", + "errorTitle": "Настройки виджета не могут быть подготовлены", + "errorDescription": "Модель не предоставила полную конфигурацию виджета. Виджет не был добавлен." + }, + "approvalRequired": "Требуется подтверждение", + "complete": "Complete", + "denied": "Отказано", + "failed": "Ошибка", + "working": "Работает", + "approvalDescription": "Просмотрите это изменение до его запуска.", + "approveAndRun": "Утвердить и запустить", + "deny": "Запретить", + "autoApproval": { + "label": "Автоматические утверждения", + "composerLabel": "Одобрить для меня", + "title": "Автоматические утверждения", + "description": "Автоматически составлять формы и одобрять защищённые изменения для этого разговора. Вопросы всё ещё ждут вашего ответа, а права Homarr все еще применимы. Это отключается при переключении разговоров.", + "enable": "Включить для этого разговора", + "disable": "Отключить автоматические утверждения", + "enabled": "Автоматические утверждения включены", + "approving": "Подтверждение автоматически" + } } } diff --git a/packages/translation/src/lang/sk.json b/packages/translation/src/lang/sk.json index 6045b035b..a138052d4 100644 --- a/packages/translation/src/lang/sk.json +++ b/packages/translation/src/lang/sk.json @@ -1,156 +1,246 @@ { "init": { - "step": { - "start": { - "title": "Víta Vás Homár", - "subtitle": "Začnime s nastavením inštancie Homár.", - "description": "Ak chcete začať, vyberte, ako chcete nastaviť inštanciu Homár.", - "action": { - "scratch": "Začať odznova", - "importOldmarr": "Import z Homarr pred 1.0", - "restoreSqlite": "Obnoviť zo zálohy SQLite", - "restoreSqliteDescription": "Nahrajte úplnú zálohu databázy SQLite z predchádzajúcej inštancie Homarr. Tým sa obnovia všetky dosky, používatelia, aplikácie, integrácie a nastavenia.", - "backToOptions": "← Späť na možnosti nastavenia" + "studio": { + "navigationLabel": "Sekcie úvodného nastavenia", + "back": "Späť", + "buildBoard": "Vytvoriť moju tabuľu", + "common": { + "unknownError": "Niečo sa pokazilo. Vaše voľby sú stále k dispozícii; skúste to znova." + }, + "claim": { + "checking": "Zabezpečuje sa táto relácia úvodného nastavenia…", + "checkingTitle": "Pripravuje sa zabezpečené nastavenie", + "lockedTitle": "Nastavenie je otvorené v inom prehliadači", + "lockedDescription": "Pokračujte tam alebo pred ďalším pokusom počkajte, kým uplynie platnosť jeho zabezpečenej relácie prvého spustenia.", + "signInTitle": "Vyžaduje sa prihlásenie administrátora", + "signInDescription": "Administrátor už existuje. Prihláste sa a pokračujte v nastavení bez odhalenia poverení alebo prístupu k službám.", + "signIn": "Prihlásiť sa a pokračovať", + "errorTitle": "Nastavenie sa nepodarilo zabezpečiť", + "errorDescription": "Obnovte stránku a zopakujte zabezpečenú reláciu prvého spustenia." + }, + "navigation": { + "essentials": "Základné nastavenia", + "discover": "Objavovať", + "connect": "Pripojiť", + "board": "Tabuľa", + "extend": "Rozšíriť", + "review": "Prehľad" + }, + "welcome": { + "title": "Vitajte doma.", + "description": "Vitajte v Homarr v{version}. Prevedieme vás základnými nastaveniami a pomôžeme vám vytvoriť prvú tabuľu.", + "start": "Začať", + "restore": "Obnoviť zálohu", + "restoreTitle": "Obnoviť zo zálohy", + "restoreDescription": "Úplná záloha SQLite obnoví tabule, ľudí, aplikácie, integrácie a nastavenia. Homarr ju pred nahradením čohokoľvek overí.", + "errorTitle": "Nastavenie sa nepodarilo spustiť", + "errorDescription": "Vaše voľby nastavenia sú stále k dispozícii. Skúste to znova alebo obnovte stránku, ak problém pretrváva." + }, + "account": { + "title": "Vytvorte svojho administrátora", + "description": "Zadajte poverenia pre používateľa správcu.", + "username": "Používateľské meno administrátora", + "passwordHint": "Vyžaduje sa iba minimálne 8 znakov. Ostatné kontroly sily hesla sú len odporúčania.", + "create": "Vytvoriť administrátora", + "errorTitle": "Administrátora sa nepodarilo vytvoriť", + "recoveryTitle": "Účet administrátora bol vytvorený", + "recoveryDescription": "Automatické prihlásenie nebolo dokončené. Ak chcete pokračovať v nastavení, prihláste sa pomocou poverení administrátora, ktoré ste práve vytvorili.", + "recoveryAction": "Prihlásiť sa a pokračovať", + "unknownError": "Administrátora sa nepodarilo vytvoriť." + }, + "externalGroup": { + "title": "Pripojte skupinu administrátorov", + "description": "Použite presný názov skupiny odoslaný službou LDAP alebo OIDC. Členovia tejto skupiny získajú prístup administrátora.", + "name": "Externá skupina administrátorov", + "nameDescription": "Rozlišujú sa veľké a malé písmená a názov sa musí zhodovať s vaším poskytovateľom identity.", + "continue": "Uložiť skupinu a pokračovať", + "errorTitle": "Skupinu sa nepodarilo uložiť", + "unknownError": "Skupinu administrátorov sa nepodarilo uložiť." + }, + "essentials": { + "title": "Začnite so známymi predvolenými nastaveniami", + "description": "Najprv nastavte jazyk a vzhľad, ktorý všetci uvidia, a potom zadajte vzor adresy používaný vašimi službami.", + "language": "Predvolený jazyk", + "theme": "Predvolená téma", + "themeAuto": "Systém", + "themeLight": "Svetlý", + "themeDark": "Tmavý", + "serverOriginHelp": "Homarr používa túto adresu na predvyplnenie URL adries zistených služieb. Každú službu môžete naďalej upraviť samostatne.", + "serverDescription": "Je to skratka, nie obmedzenie. Každú zistenú službu môžete naďalej upravovať.", + "serverOrigin": "Doména, IP adresa alebo cesta reverzného proxy servera", + "serverOriginDescription": "Príklady: home.lan, 192.168.1.10 alebo https://home.example.com/services. Nižšie vyberte, ako sa má každá služba pripojiť.", + "analytics": "Zdieľať anonymné analytické údaje o produkte", + "analyticsDescription": "Pomáha zlepšovať spoľahlivosť funkcií Homarr. Neodosielajú sa žiadne poverenia služieb ani obsah tabule." + }, + "discover": { + "title": "Zistite, kam môže táto inštalácia skutočne pristupovať", + "description": "Homarr kontroluje dostupné možnosti priamo na mieste. Chýbajúci soket Dockeru alebo kontext Kubernetes nikdy nezablokuje manuálne nastavenie.", + "database": "Databáza", + "docker": "Docker a kompatibilné sokety", + "kubernetes": "Kubernetes", + "assistantWorkshop": "Asistent a Dielňa", + "found": "Nájdených integrácií: {integrations}; ďalších aplikácií: {apps}", + "retryKubernetes": "Znova skontrolovať Kubernetes", + "retryWorkshop": "Znova skontrolovať Dielňu", + "unknownVersion": "neznáma verzia", + "kubernetesAvailable": "Pripojené ku Kubernetes {version}", + "kubernetesDisabled": "Nie je povolené; pokračujte s Dockerom alebo manuálnymi službami", + "kubernetesUnavailable": "Kubernetes je povolený, ale z tohto procesu Homarr nie je dostupný", + "workshopAvailable": "Komunitná Dielňa a hosťované služby Asistenta sú dostupné", + "workshopUnavailable": "Lokálni a vlastné poskytovatelia Asistenta zostávajú k dispozícii", + "partialTitle": "Niektoré zdroje sa nepodarilo skontrolovať", + "partialDescription": "Výsledky z dostupných hostiteľov sa zachovajú. Skontrolujte povolenia soketov alebo v ďalšej časti pridajte služby manuálne.", + "status": { + "checking": "Kontroluje sa dostupnosť…", + "available": "K dispozícii", + "partial": "Čiastočne dostupné", + "empty": "Dostupné, ale neboli nájdené žiadne zodpovedajúce spustené služby", + "disabled": "Zakázané konfiguráciou servera", + "unavailable": "Z tohto procesu Homarr nedostupné" } }, - "import": { - "title": "Importovať dáta", - "subtitle": "Údaje môžete importovať z existujúcej inštancie aplikácie Homarr.", - "dropzone": { - "title": "Potiahnite súbor ZIP sem alebo kliknite na tlačidlo prehľadávania", - "description": "Nahraný súbor zip sa spracuje a vy si budete môcť vybrať, čo chcete importovať." + "connect": { + "title": "Pripojte to, čo robí tabuľu užitočnou", + "description": "Vyberte viacero služieb naraz. Označenia Dockeru majú prednosť, porovnávanie obrazov dopĺňa chýbajúce údaje a každú URL adresu aj poverenia môžete skontrolovať.", + "discoveredIntegrations": "Zistené inštancie integrácií ({count})", + "detectedIntegrationLabel": "Importovať {name}, zistené ako {kind}", + "detectedAppLabel": "Importovať zistenú aplikáciu {name}", + "otherIntegrations": "Pridať ďalšiu integráciu", + "configureIntegrations": "Konfigurovať integrácie", + "discoveredApps": "Zistené aplikácie ({count})", + "appAddressRequired": "Pridajte adresu pre {name} alebo ju odstráňte z výberu.", + "empty": "Nie sú vybrané žiadne integrácie. Homarr napriek tomu vytvorí užitočnú úvodnú tabuľu so všeobecnými widgetmi.", + "dockerSource": "Docker", + "manualSource": "Manuálne", + "url": "URL adresa služby", + "noCredentials": "Žiadne poverenia", + "noCredentialsDescription": "Táto integrácia nevyžaduje poverenia.", + "credentialMethod": "Metóda poverení", + "getApiKey": "Otvoriť nastavenia kľúča API pre túto službu", + "openGuide": "Otvoriť príručku nastavenia Homarr pre túto službu", + "testConnection": "Otestovať pripojenie", + "testSuccess": "Pripojenie funguje", + "testSuccessDescription": "Homarr sa pripojil pomocou aktuálnej adresy a poverení.", + "testError": "Zlyhalo pripojenie", + "testErrorDescription": "Skontrolujte adresu služby a poverenia a skúste to znova.", + "needsConfiguration": "Vyžaduje konfiguráciu", + "tested": "Pripojenie otestované", + "testFailed": "Test pripojenia zlyhal", + "incompleteConfirmation": "Nedokončené integrácie budú preskočené. Pokračovať bez nich?" + }, + "board": { + "title": "Navrhnite dosku pred jej vytvorením", + "description": "Homarr vytvorí chránené rozloženia Mobile a Base, potom umiestni aplikácie a kompatibilné widgety zo služieb, ktoré ste vybrali.", + "target": "Doska na konfiguráciu", + "targetDescription": "Vyberte presnú existujúcu dosku, ktorú má toto nastavenie aktualizovať.", + "targetPlaceholder": "Vyberte dosku", + "targetRequired": "Pred pokračovaním vyberte dosku, ktorú chcete nakonfigurovať.", + "name": "Názov dosky", + "nameDescription": "Používa sa v adrese URL tabule; povolené sú iba písmená, číslice, pomlčky a podčiarkovníky.", + "nameRequired": "Pred pokračovaním zadajte názov tabule.", + "primaryColor": "Hlavná farba", + "secondaryColor": "Sekundárna farba", + "resetColors": "Obnoviť farby", + "radius": "Polomer rohov miniaplikácií", + "radiusOptions": { + "xs": "Tesné", + "sm": "Jemné", + "md": "Vyvážené", + "lg": "Zaoblené", + "xl": "Mäkké" }, - "fileInfo": { - "action": { - "change": "Zmeniť súbor" - } + "columns": "Stĺpce tabule", + "columnsDescription": "Stĺpce určujú vodorovnú mriežku používanú na určovanie veľkosti a umiestnenia položiek. Pre väčšinu ľudí je 12 dostatok.", + "columnCount": "{count, plural, one {# stĺpec} few {# stĺpce} many {# stĺpcov} other {# stĺpca}}", + "leftSidebar": "Ľavý bočný panel", + "rightSidebar": "Pravý bočný panel", + "previewLabel": "Živý náhľad prvého rozloženia tabule" + }, + "extend": { + "title": "Pokročilé možnosti", + "tabsLabel": "Nastavenie asistenta, dielne a MCP", + "assistant": "Asistent", + "workshop": "Dielňa", + "assistantSetup": { + "loginTitle": "Vyžaduje sa prihlásenie správcu", + "loginDescription": "Prístup ku kľúčom poskytovateľov a modelom je vyhradený. Dokončite nastavenie, prihláste sa a Homarr otvorí konfiguráciu asistenta priamo.", + "loginAction": "Prihlásiť sa a nakonfigurovať asistenta" }, - "importSettings": { - "title": "Import nastavení", - "description": "Nakonfigurujte správanie importu" + "workshopSetup": { + "title": "Dielňa Homarr", + "description": "Prehliadajte komunitné vlastné miniaplikácie, skontrolujte požadované oprávnenia, nainštalujte ich a zverejnite vlastnú prácu bez kopírovania kódu medzi servermi.", + "available": "K dispozícii", + "checking": "Kontroluje sa…", + "unavailable": "Nedostupné", + "discoverTitle": "Objavujte", + "discoverDescription": "Nájdite miniaplikácie vytvorené pre skutočné samoobsluhované pracovné postupy.", + "installTitle": "Skontrolovať a nainštalovať", + "installDescription": "Pred pridaním čohokoľvek si pozrite metadáta a konfiguráciu.", + "publishTitle": "Zdieľať", + "publishDescription": "Zverejnite opakovane použiteľné miniaplikácie pre komunitu.", + "browse": "Prehľadávať dielňu" }, - "boardSelection": { - "title": "Nájdených {count} dosiek", - "description": "Vyberte všetky dosky s veľkosťou, ktorú chcete importovať", - "action": { - "selectAll": "Vybrať všetko", - "unselectAll": "Zrušiť výber" - } - }, - "summary": { - "title": "Súhrn importu", - "description": "V nasledujúcom prehľade môžete vidieť, čo sa bude importovať", - "action": { - "import": "Potvrďte import a pokračujte" - }, - "entities": { - "apps": "Aplikácie", - "boards": "Dosky", - "integrations": "Integrácie", - "credentialUsers": "Používatelia poverení" - } - }, - "tokenModal": { - "title": "Zadajte token importu", - "field": { - "token": { - "label": "Token", - "description": "Zadajte zobrazený token importu z predchádzajúcej inštancie homarr" - } - }, - "notification": { - "error": { - "title": "Neplatný token", - "message": "Zadaný token je neplatný" - } - } + "mcpSetup": { + "title": "Homarr MCP", + "description": "Pripojte Claude, Codex alebo iného klienta MCP k typovaným nástrojom Homarr. Kľúče API zabezpečujú explicitný a odvolateľný prístup.", + "endpoint": "Streamovateľný koncový bod HTTP", + "keyTitle": "Skopírujte tento kľúč teraz", + "keyDescription": "Z bezpečnostných dôvodov Homarr tento kľúč API už znova nezobrazí.", + "copyKey": "Kopírovať kľúč API", + "createKey": "Vytvoriť kľúč API MCP", + "errorTitle": "Kľúč API MCP sa nepodarilo vytvoriť", + "loginRequired": "Po nastavení sa prihláste ako správca a vytvorte kľúč API.", + "configuration": "Konfigurácia klienta", + "copy": "Kopírovať konfiguráciu", + "copied": "Skopírované", + "advanced": "Otvoriť nástroje MCP, povolenia a podrobnosti nastavenia" } }, - "user": { - "title": "Používateľ administrátora", - "subtitle": "Zadajte poverenia pre používateľa správcu.", - "notification": { - "success": { - "title": "Používateľ vytvorený", - "message": "Používateľ bol úspešne vytvorený" - }, - "error": { - "title": "Vytvorenie užívateľa zlyhalo" - } - } - }, - "group": { - "title": "Externá skupina", - "subtitle": "Zadajte skupinu, ktorá sa má použiť pre externých používateľov.", - "form": { - "name": { - "label": "Názov skupiny", - "description": "Názov sa musí zhodovať s administrátorskou skupinou externého poskytovateľa" - } - } - }, - "settings": { - "title": "Nastavenia", - "subtitle": "Nakonfigurujte nastavenia servera." - }, - "integrations": { - "title": "Integrácie", - "subtitle": "Vyberte služby, ktoré používate.", - "description": "Vyberte integrácie, ktoré chcete pripojiť. Automaticky nastavíme prístrojovú dosku so zodpovedajúcimi miniaplikáciami.", - "action": { - "continue": "Pokračovať", - "skip": "Teraz preskočiť" - }, - "configure": { - "progress": "{current} z {total}", - "skip": "Preskočiť túto integráciu", - "finishing": "Nastavuje sa prístrojová doska...", - "error": { - "title": "Nastavenie zlyhalo", - "message": "Pri nastavovaní prístrojovej dosky sa niečo pokazilo. Skúste to znova." - }, - "helpers": { - "tooltip": "Pomocníci URL", - "description": "Títo pomocníci sa snažia uhádnuť adresu URL pre vaše služby. Ak to nefunguje, jednoducho napíšte adresu ručne." - } - }, - "urlTemplate": { - "label": "Základná adresa URL", - "placeholder": "homelab.local alebo 192.168.1.1", - "hint": "Zadajte svoju základnú doménu alebo IP, aby sa automaticky vyplnili adresy URL integrácií", - "warning": "Nastavením základnej adresy URL teraz sa automaticky vyplnia všetky adresy URL integrácií, čím ušetríte čas počas nastavovania", - "preview": "napr. {example}", - "mode": { - "subdomain": "Subdoména", - "hostPort": "Hostiteľ:Port" - } - }, - "docker": { - "detected": "Docker rozpoznal {count} služieb", - "detectedBreakdown": "{integrations} integrácií · {apps} aplikácií", - "summary": "Homarr rozpoznal {apps} aplikácií, z ktorých {integrations} má vstavané integrácie", - "appBadge": "Aplikácia", - "appSectionLabel": "Aplikácie, ktoré sa pridajú na prístrojovú dosku ({count} vybratých)", - "scanning": "Skenuje sa Docker...", - "scanningDescription": "Hľadajú sa spustené kontajnery vo vašom systéme" + "review": { + "title": "Jedna tabuľa vytvorená pre vaše služby", + "description": "Homarr otestuje neuložené pripojenia, importuje vybrané aplikácie, použije vzhľad a rozloženia a potom otvorí presne nakonfigurovanú tabuľu.", + "board": "Prvá tabuľa", + "columns": "Stĺpce tabule", + "columnsValue": "{count, plural, one {# stĺpec} few {# stĺpce} many {# stĺpcov} other {# stĺpca}}", + "sidebars": "Bočné panely", + "sidebarsValue": "{count, plural, =0 {Žiadny} one {# bočný panel} few {# bočné panely} many {# bočných panelov} other {# bočného panela}}", + "layouts": "Responzívne rozloženia", + "layoutsValue": "Mobilná + základná", + "integrations": "Integrácie", + "integrationsValue": "{count, plural, =0 {Nič vybrané} one {# integrácia} few {# integrácie} many {# integrácií} other {# integrácie}}", + "apps": "Dlaždice aplikácií", + "appsValue": "{count, plural, =0 {Iba úvodné aplikácie} one {# dlaždica aplikácie} few {# dlaždice aplikácií} many {# dlaždíc aplikácií} other {# dlaždice aplikácie}}", + "language": "Jazyk", + "theme": "Motív", + "themeAuto": "Predvoľby systému", + "themeLight": "Svetlý", + "themeDark": "Tmavý", + "colors": "Farby tabule", + "radius": "Polomer miniaplikácií", + "automaticTitle": "Čo Homarr vytvorí", + "automaticDescription": "Kompatibilné miniaplikácie, ikony, odkazy na aplikácie, vzťahy integrácií a responzívne umiestnenie pochádzajú zo zdieľaného katalógu Homarr. Každý výsledok môžete neskôr upraviť.", + "dockerWarningTitle": "Niektoré štítky Dockeru sa počas nastavenia zmenili", + "dockerWarningDescription": "{count, plural, one {# vybraný výsledok Dockeru sa nedal použiť, pretože sa jeho služba zmenila, cielila na inú tabuľu alebo jeho miniaplikácia nebola kompatibilná} few {# vybrané výsledky Dockeru sa nedali použiť, pretože sa ich služby zmenili, cielili na inú tabuľu alebo ich miniaplikácie neboli kompatibilné} many {# vybraných výsledkov Dockeru sa nedalo použiť, pretože sa ich služby zmenili, cielili na inú tabuľu alebo ich miniaplikácie neboli kompatibilné} other {# vybraného výsledku Dockeru sa nedalo použiť, pretože sa jeho služba zmenila, cielila na inú tabuľu alebo jeho miniaplikácia nebola kompatibilná}}.", + "errorTitle": "Tabuľu sa nepodarilo vytvoriť", + "progress": { + "applying": "Testujú sa pripojenia a vytvára sa vaša tabuľa", + "done": "Vaša tabuľa je pripravená" } }, "finish": { - "title": "Dokončiť nastavenie", - "subtitle": "Ste pripravení vyraziť!", - "description": "Úspešne ste dokončili proces nastavenia. Teraz môžete začať používať Homarr. Vyberte ďalšiu akciu:", - "action": { - "goToBoard": "Prejdite na nástenku {name}", - "createBoard": "Vytvorte si svoju prvú nástenku", - "inviteUser": "Pozvite ďalších používateľov", - "docs": "Prečítajte si dokumentáciu" - } + "title": "Vaša prvá tabuľa je pripravená.", + "description": "Homarr prepojil vybrané časti a ponechal zvyšok upraviteľný. Otvorte tabuľu teraz; krátka prehliadka produktu vám môže ukázať režim úprav, miniaplikácie, rozloženia a vyhľadávanie.", + "openBoard": "Otvoriť moju tabuľu", + "manageTitle": "Spravovať", + "manageDescription": "Doladiť aplikácie, integrácie, tabule, používateľov a nastavenia servera.", + "workshopTitle": "Dielňa", + "workshopDescription": "Objavujte a inštalujte komunitné vlastné miniaplikácie.", + "docsTitle": "Spoznajte Homarr", + "docsDescription": "Prečítajte si stručné príručky o tabuliach, miniaplikáciách, integráciách a nástrojoch." } - }, - "backToStart": "Späť na začiatok" + } }, "user": { - "title": "Používatelia", "name": "Používateľ", "page": { "login": { @@ -159,12 +249,10 @@ }, "invite": { "title": "Pridajte sa k Homarrovi", + "titleWithAppName": "Pripojiť sa k {appName}", "subtitle": "Vítajte v Homarr! Prosím, vytvorte si účet", + "subtitleWithAppName": "Vitajte v aplikácii {appName}! Vytvorte si účet", "description": "Pozval vás {username}" - }, - "init": { - "title": "Nová inštalácia Homarr", - "subtitle": "Vytvorte počiatočného administrátora" } }, "field": { @@ -192,12 +280,17 @@ "previousPassword": { "label": "Predchádzajúce heslo" }, - "homeBoard": { - "label": "Domáca doska" - }, "pingIconsEnabled": { "label": "Používanie ikon pre pingy" }, + "byteUnitSystem": { + "label": "Jednotky veľkosti údajov", + "description": "Vyberte, ako Homarr zobrazuje veľkosti a rýchlosti prenosu bajtov. Rýchlosti v bitoch vždy používajú desiatkové jednotky.", + "options": { + "binary": "Binárne", + "decimal": "Desiatkové" + } + }, "enableRightClickOnWidgets": { "label": "", "description": "" @@ -247,7 +340,6 @@ } } }, - "create": "Vytvoriť užívateľa", "changePassword": { "label": "Zmeniť heslo", "notification": { @@ -259,56 +351,6 @@ } } }, - "changeHomeBoard": { - "notification": { - "success": { - "message": "Domovská doska sa úspešne zmenila" - }, - "error": { - "message": "Nie je možné zmeniť domovskú dosku" - } - } - }, - "changeSearchPreferences": { - "notification": { - "success": { - "message": "Predvoľby vyhľadávania sa úspešne zmenili" - }, - "error": { - "message": "Nie je možné zmeniť predvoľby vyhľadávania" - } - } - }, - "changeFirstDayOfWeek": { - "notification": { - "success": { - "message": "Prvý deň v týždni sa úspešne zmenil" - }, - "error": { - "message": "Nemožnosť zmeniť prvý deň v týždni" - } - } - }, - "changePingIconsEnabled": { - "notification": { - "success": { - "message": "Ikony Ping boli úspešne prepnuté" - }, - "error": { - "message": "Nemožno prepínať ikony ping" - } - } - }, - "changeDdgBangs": { - "notification": { - "success": { - "message": "Príkazy DuckDuckGo bang boli úspešne prepnuté" - }, - "error": { - "message": "Nemožno prepnúť príkazy DuckDuckGo bang" - } - } - }, "manageAvatar": { "changeImage": { "label": "Zmeniť obrázok", @@ -338,16 +380,6 @@ } } }, - "editProfile": { - "notification": { - "success": { - "message": "Profil bol úspešne aktualizovaný" - }, - "error": { - "message": "Nepodarilo sa aktualizovať profil" - } - } - }, "delete": { "label": "Zmazať užívateľa natrvalo", "description": "Odstráni tohto používateľa vrátane jeho preferencií. Neodstráni žiadne nástenky. Používateľ nebude upozornený.", @@ -356,18 +388,13 @@ "select": { "label": "Vyberte používateľa", "notFound": "Nenašiel sa žiadny používateľ" - }, - "transfer": { - "label": "Vyberte nového vlastníka" } } }, "group": { - "title": "Skupiny", "name": "Skupiny", "search": "Vyhľadať skupinu", "field": { - "name": "Názov", "members": "Členovia", "homeBoard": { "label": "Domáca doska", @@ -388,6 +415,19 @@ } } }, + "custom-widget": { + "title": "Vlastné miniaplikácie", + "item": { + "manage": { + "label": "Spravovať vlastné miniaplikácie", + "description": "Povoliť členom vytvárať, upravovať a odstraňovať definície vlastných miniaplikácií" + }, + "secret-write": { + "label": "Konfigurovať tajomstvá vlastných miniaplikácií", + "description": "Povoliť členom a ich kľúčom API nastavovať šifrované prihlasovacie údaje vlastných miniaplikácií" + } + } + }, "app": { "title": "Aplikácie", "item": { @@ -493,6 +533,35 @@ "description": "Umožnite členom spravovať a odstraňovať akýkoľvek vyhľadávací nástroj" } } + }, + "matrix": { + "none": "Žiadny prístup", + "impliedHint": "Udeľuje tiež: {permissions}", + "grantedViaAdmin": "Správcovia to už majú. Ak chcete nastaviť samostatnú konfiguráciu, nastavte Správcu na „Žiadny prístup“.", + "preset": { + "label": "Predvoľby", + "viewer": "Prehliadač", + "viewerDescription": "Iba na čítanie: zobrazovať tabule a médiá, používať existujúce aplikácie a integrácie.", + "editor": "Upravovač", + "editorDescription": "Každodenná správa: vytvárať a upravovať tabule, aplikácie, integrácie a vyhľadávače.", + "admin": "Správca", + "adminDescription": "Neobmedzený prístup ku každej funkcii a nastaveniu vrátane správy používateľov.", + "custom": "Vlastné" + }, + "effective": { + "title": "Efektívne oprávnenia", + "description": "Úplná, deduplikovaná množina akcií, ktoré môžu členovia tejto skupiny vykonávať, vrátane oprávnení udelených nepriamo.", + "empty": "Nie sú vybrané žiadne oprávnenia" + }, + "noneDescription": "Členovia nemajú prístup k tejto oblasti.", + "level": { + "view": "Zobraziť", + "use": "Použiť", + "interact": "Interagovať", + "modify": "Upraviť", + "full": "Úplný" + }, + "capabilityIncluded": "Už zahrnuté v „{level}“" } }, "memberNotice": { @@ -607,21 +676,24 @@ "search": "Vyhľadať aplikáciu", "page": { "list": { - "title": "Aplikácie", + "ariaLabel": "Nakonfigurované aplikácie", "noResults": { "title": "Zatiaľ tu nie sú žiadne aplikácie", - "action": "Vytvorte svoju prvú aplikáciu" + "description": "Aplikácie sú odkazy na služby a nástroje, ktoré chcete mať na svojich tabuliach.", + "action": "Vytvorte svoju prvú aplikáciu", + "filteredTitle": "Vyhľadávaniu nezodpovedajú žiadne aplikácie", + "filteredDescription": "Aplikácii nezodpovedá „{search}“. Skúste iný názov alebo URL.", + "createOnlyTitle": "Môžete iba pridávať aplikácie", + "createOnlyDescription": "Vaše oprávnenia vám umožňujú vytvárať aplikácie, ale nie prehliadať existujúce. Ak chcete zobraziť celý zoznam, požiadajte správcu o prístup k správe aplikácií." } }, "create": { "title": "Nová aplikácia", "notification": { "success": { - "title": "Vytvorenie bolo úspešné", "message": "Aplikácia bola úspešne vytvorená" }, "error": { - "title": "Vytvorenie zlyhalo", "message": "Aplikáciu nebolo možné vytvoriť" } } @@ -630,11 +702,9 @@ "title": "Upraviť aplikáciu", "notification": { "success": { - "title": "Zmeny boli úspešne použité", "message": "Aplikácia bola úspešne uložená" }, "error": { - "title": "Nie je možné použiť zmeny", "message": "Aplikáciu sa nepodarilo uložiť" } } @@ -644,26 +714,18 @@ "message": "Naozaj chcete odstrániť aplikáciu {name}?", "notification": { "success": { - "title": "Úspešne zmazané", "message": "Aplikácia bola úspešne odstránená" }, "error": { - "title": "Odstránenie zlyhalo", "message": "Aplikáciu nie je možné odstrániť" } } } }, "field": { - "name": { - "label": "Názov" - }, "description": { "label": "Popis" }, - "url": { - "label": "Url" - }, "useDifferentUrlForPing": { "checkbox": { "label": "Na ping použite inú adresu URL", @@ -678,34 +740,582 @@ "search": "Vyhľadajte aplikáciu", "noResults": "Žiadne výsledky", "action": "Vybrať {app}", - "title": "Vyberte aplikáciu, ktorú chcete pridať na túto nástenku" + "title": "Vyberte aplikáciu, ktorú chcete pridať na túto nástenku", + "toggle": "Kliknutím vyberiete", + "selected": "Vybrané", + "multiple": "Pridajte {count}", + "selectedCount": "{count, plural, one {# vybraná} few {# vybrané} many {# vybraných} other {# vybranej}}", + "appsSelected": "{count, plural, one {# vybraná aplikácia} few {# vybrané aplikácie} many {# vybraných aplikácií} other {# vybranej aplikácie}}", + "selectMultiple": "Vybrať viacero", + "cancelMultiple": "Ukončiť výber viacerých položiek", + "customApplication": "Vlastná aplikácia", + "application": "Aplikácia" }, "create": { "title": "Vytvoriť novú aplikáciu", "description": "Vytvorte novú aplikáciu ", "action": "Otvorte vytváranie aplikácií" + } + } + }, + "tips": { + "dismiss": "Zavrieť tip", + "multiSelectApps": "Tip: Podržte Ctrl / ⌘ a vyberte viacero aplikácií naraz" + }, + "customWidget": { + "secretEntry": { + "title": "Konfigurovať zdroj API", + "description": "Potvrďte URL servera a zadajte prihlasovacie údaje. Tajné hodnoty Homarr zašifruje a nikdy ich nevráti agentovi, ktorý o ne požiadal.", + "loading": "Načítava sa zabezpečená požiadavka…", + "applying": "Používa sa táto konfigurácia… Túto stránku nechajte otvorenú.", + "saved": "Zdroj API je nakonfigurovaný. Túto stránku môžete zavrieť.", + "unavailable": "Požiadavka nie je dostupná", + "saveError": "Zdroj API sa nepodarilo nakonfigurovať", + "source": "Zdroj API: {name}", + "baseUrl": "URL servera", + "networkScope": "Prístup k sieti", + "save": "Uložiť konfiguráciu API", + "expires": "Táto jednorazová požiadavka vyprší o {time}." + }, + "page": { + "list": { + "noResults": "Zatiaľ žiadne vlastné widgety. Vytvorte svoj prvý!", + "noDescription": "Žiadny popis", + "enabled": "Povolené", + "disabled": "Zakázané", + "disabledDescription": "Táto miniaplikácia zostane nakonfigurovaná, ale nenačíta sa na žiadnej tabuli.", + "requestCount": "{count, plural, one {# požiadavka} few {# požiadavky} many {# požiadaviek} other {# požiadavky}}", + "invalidDefinition": "Neplatná definícia", + "migrationRequired": "Vyžaduje sa migrácia", + "migrationInstructions": "Otvorte Akcie a skopírujte alebo exportujte pôvodnú definíciu v1 na manuálne vytvorenie. Môžete tiež použiť výzvu na migráciu s LLM. Existujúce umiestnenia na tabuliach budú po migrácii naďalej fungovať.", + "missingCredentials": "{count, plural, one {Chýbajúce prihlasovacie údaje} few {Chýbajúce # prihlasovacie údaje} many {Chýbajúcich # prihlasovacích údajov} other {Chýbajúce # prihlasovacieho údaja}}", + "missingCredentialsDescription": "{count, plural, one {Táto miniaplikácia stále potrebuje jedno prihlasovacie údaje.} few {Táto miniaplikácia stále potrebuje # prihlasovacie údaje.} many {Táto miniaplikácia stále potrebuje # prihlasovacích údajov.} other {Táto miniaplikácia stále potrebuje # prihlasovacieho údaja.}} Vyberte tento odznak a nakonfigurujte URL a šifrované hodnoty." }, - "add": "Pridajte aplikáciu" + "create": { + "title": "Vytvoriť vlastný widget", + "subtitle": "Definujte URL API, autentifikáciu a spôsob zobrazenia údajov odpovede." + }, + "tabs": { + "ariaLabel": "Sekcie vlastnej miniaplikácie", + "installed": "Nainštalované", + "workshop": "Dielňa" + } + }, + "action": { + "pasteImportHint": "Vložte úplný JSON vlastnej miniaplikácie pomocou Ctrl+V alebo Command+V", + "delete": "Odstrániť vlastný widget", + "deleteConfirm": "Naozaj chcete odstrániť \"{name}\"? Táto akcia sa nedá vrátiť späť.", + "export": "Exportovať", + "duplicate": "Duplikovať", + "aiPrompt": "Navrhovať pomocou AI", + "copyAiPrompt": "Kopírovať AI prompt", + "enable": "Povoliť", + "disable": "Zakázať", + "menu": "Akcie", + "downloadSkill": "Zobraziť zručnosť vlastnej miniaplikácie", + "publishWorkshop": "Zverejniť v dielni", + "migrate": "Migrovať vlastnú miniaplikáciu", + "configureSources": "Konfigurovať zdroje", + "copyLegacyDefinition": "Kopírovať pôvodný obsah miniaplikácie", + "exportLegacyDefinition": "Exportovať pôvodný obsah miniaplikácie", + "copyMigrationPrompt": "Kopírovať výzvu na migráciu LLM", + "pasteMigration": "Vložiť migrovanú miniaplikáciu", + "importMigration": "Importovať migrovaný súbor JSON" + }, + "sourceSetupDialog": { + "title": "Konfigurovať zdroje miniaplikácie", + "description": "Skontrolujte, kam sa táto miniaplikácia pripája, a pridajte alebo nahraďte jej šifrované prihlasovacie údaje.", + "credentialsRequired": "Požiadavky zlyhajú, kým nepridáte požadované prihlasovacie údaje.", + "save": "Uložiť konfiguráciu" + }, + "field": { + "description": "Popis" + }, + "editor": { + "errorBoundary": { + "title": "Niečo sa pokazilo" + }, + "action": { + "components": "Komponenty", + "format": "Formát", + "insertStarter": "Vložiť úvodný obsah", + "redo": "Znova vykonať", + "copied": "Skopírované", + "schema": "Schéma" + }, + "reference": { + "minimal": "Minimálny príklad", + "full": "Úplný príklad" + }, + "componentReference": { + "search": "Vyhľadať komponenty", + "empty": "Žiadne zodpovedajúce komponenty", + "count": "K dispozícii je {count, number} komponentov" + }, + "status": { + "errors": "{count, number} chýb", + "warnings": "{count, number} upozornení", + "ready": "Nenašli sa žiadne problémy", + "position": "Riadok {line, number}, stĺpec {column, number}", + "characters": "{count, number} znakov", + "charactersWithLimit": "{count, number} / {limit, number}" + }, + "diagnostics": { + "title": "Diagnostika šablóny", + "line": "Riadok {line, number}", + "ast": "{value}", + "bindingTypeConflict": "Vstup „{value}“ zdieľajú ovládacie prvky s nekompatibilnými typmi hodnôt.", + "runtimeBindingTypeConflict": "Vstup „{value}“ je viazaný ako {firstType} aj ako {secondType}.", + "dynamicRequestId": "Vyžaduje sa doslovné requestId. Dynamické ID požiadaviek nie sú podporované.", + "dynamicInputBinding": "Pre bind sa vyžaduje doslovný názov vstupu.", + "inlineRequestProps": "Sieťové komponenty prijímajú requestId a params; vložené vlastnosti URL, metódy, hlavičky a tela sú zablokované.", + "invalidRequestManifest": "Pomenované požiadavky musia byť platnou mapou požiadaviek. {value}", + "missingRequestId": "Tento sieťový komponent vyžaduje doslovné requestId.", + "templateEmpty": "Zadajte šablónu JSX.", + "templateTooLong": "Šablóna prekračuje limit 50 000 znakov.", + "unknownRequest": "Pomenovaná požiadavka s ID „{value}“ neexistuje." + } + }, + "workbench": { + "configure": "Konfigurovať", + "sectionNavigation": "Sekcie vlastnej miniaplikácie", + "widgetPreview": "Náhľad miniaplikácie", + "generalInformation": "Všeobecné informácie", + "invalidWidget": "Neplatná miniaplikácia", + "section": { + "general": "Hlavné", + "sources": "Zdroje API", + "requests": "Požiadavky", + "options": "Možnosti", + "jsx": "JSX", + "preview": "Náhľad" + }, + "status": { + "unsaved": "Neuložené zmeny", + "invalid": "Vyžaduje pozornosť", + "ready": "Pripravený" + }, + "saveError": { + "title": "Miniaplikácia sa neuložila", + "description": "Opravte tieto chyby overenia a uložte znova.", + "more": "V pracovnom priestore sa zobrazujú ešte ďalšie chyby: +{count}.", + "errors": "Chyby overenia", + "copy": "Kopírovať chyby", + "copied": "Chyby skopírované" + }, + "action": { + "preview": "Otestovať a zobraziť náhľad", + "previewLoading": "Testujú sa požiadavky" + }, + "requests": { + "title": "Pomenované dotazy a akcie", + "label": "Požiadavky", + "description": "Dotazy načítavajú údaje; akcie sa spúšťajú až po interakcii používateľa. Pre oba typy je platná ľubovoľná metóda HTTP." + }, + "options": { + "title": "Možnosti miniaplikácie" + }, + "builder": { + "advancedManifest": "Rozšírený nespracovaný manifest", + "advancedJson": "Rozšírený manifest JSON", + "manifestFilename": "widget.json", + "request": "Požiadavka {count, number}", + "requestId": "ID požiadavky", + "type": "Typ Download klienta", + "method": "Metóda", + "source": "Zdroj API", + "run": "Spustiť", + "runLoad": "Pri načítaní miniaplikácie", + "runManual": "Z podfunkcie SubFetch", + "permission": "Povolenia", + "path": "Cesta", + "pathDescription": "Pre možnosti miniaplikácie použite „{option:name}“ a pre hodnoty vyvolania „{param:name}“.", + "requestDetails": "Dotaz, telo a správanie", + "queryValues": "Hodnoty dotazu", + "queryKey": "Kľúč dotazu", + "queryKeyInvalid": "Použite jedinečné ID začínajúce písmenom, ktoré obsahuje iba písmená, číslice, - alebo _.", + "valueSource": "Zdroj hodnoty", + "literal": "Doslovná hodnota", + "widgetOption": "Možnosť miniaplikácie", + "invocationParameter": "Parameter vyvolania", + "option": "Možnosť", + "parameterName": "Názov parametra", + "value": "Hodnota", + "removeQueryValue": "Odstrániť hodnotu dotazu", + "addQueryValue": "Pridať hodnotu dotazu", + "jsonBody": "Telo JSON", + "jsonBodyDescription": "Voliteľné. Vložte odkazy $option a $param na ľubovoľnej úrovni.", + "insertOptionReference": "Vložiť odkaz na možnosť", + "insertParameterReference": "Vložiť odkaz na parameter", + "confirmation": "Potvrdzovacia správa", + "invalidation": "Obnoviť po úspechu", + "invalidationDescription": "ID dotazov oddelené čiarkami", + "noAuth": "Odoslať bez overenia zdroja", + "moveRequestUp": "Posunúť požiadavku nahor", + "moveRequestDown": "Posunúť požiadavku nadol", + "removeRequest": "Odstrániť požiadavku", + "addRequest": "Pridať požiadavku", + "optionName": "Názov možnosti", + "label": "Štítok", + "control": "Ovládací prvok", + "description": "Popis", + "default": "Predvolené", + "optionDetails": "Obmedzenia a dynamické voľby", + "minimum": "Minimálna hodnota", + "maximum": "Maximálna hodnota", + "step": "Krok", + "choiceLabel": "Štítok voľby", + "choiceValue": "Hodnota voľby", + "newChoice": "Nová voľba", + "addChoice": "Pridať voľbu", + "removeChoice": "Odstrániť voľbu", + "choicesRequest": "Načítať voľby z požiadavky", + "itemsPath": "Cesta k položkám", + "itemsPathPlaceholder": "položky (voliteľné)", + "valuePath": "Cesta k hodnote", + "labelPath": "Cesta k štítku", + "group": "Skupiny", + "advancedOption": "Rozšírená možnosť", + "moveOptionUp": "Posunúť možnosť nahor", + "moveOptionDown": "Posunúť možnosť nadol", + "removeOption": "Odstrániť možnosť", + "addOption": "Pridať možnosť", + "invalidJson": "Neplatný JSON", + "invalidWidget": "Neplatná miniaplikácia" + }, + "jsx": { + "title": "Šablóna JSX", + "label": "Šablóna" + }, + "sources": { + "title": "Zdroje API a prihlasovacie údaje", + "newName": "API {count, number}", + "duplicateSourceId": "ID zdrojov API musia byť jedinečné.", + "credentialRemoved": "Prihlasovacie údaje odstránené", + "credentialRemovedDescription": "Uložená hodnota bola odstránená.", + "primary": "Primárne API", + "id": "ID zdroja", + "name": "Názov úlohy", + "baseUrl": "Základná URL", + "baseUrlError": { + "invalid": "Zadajte úplnú URL.", + "protocol": "Použite URL s protokolom HTTP alebo HTTPS.", + "credentials": "Odstráňte z tejto URL používateľské meno a heslo. Prihlasovacie údaje nakonfigurujte nižšie.", + "queryOrFragment": "Odstráňte z tejto základnej URL reťazec dotazu alebo fragment. Hodnoty dotazu pridajte k pomenovanej požiadavke." + }, + "networkScope": "Prístup k sieti", + "authentication": "Autentifikácia", + "headerName": "Názov hlavičky", + "queryParameter": "Parameter dotazu", + "configured": "Nakonfigurované — zadajte náhradu", + "clear": "Jasno", + "remove": "Odstrániť zdroj a jeho požiadavky", + "advanced": "Rozšírené", + "add": "Pridať ďalší zdroj API", + "sourceType": "Integrácia", + "manualSource": "HTTP API", + "existingIntegration": "Existujúca integrácia", + "integrationType": "Typ integrácie", + "selectIntegration": "Nakonfigurovaná integrácia", + "noIntegrations": "Nie sú k dispozícii žiadne zodpovedajúce integrácie", + "integrationUnavailable": "Vybraná integrácia už nie je k dispozícii. Vyberte inú integráciu.", + "integrationDescription": "Používa uloženú URL a prihlasovacie údaje integrácie. Zmeny sa použijú automaticky. Na spúšťanie požiadaviek je potrebný úplný prístup k integrácii." + }, + "ai": { + "title": "Vytvoriť alebo opraviť pomocou ľubovoľnej AI", + "description": "Ak máte URL dokumentácie API, najprv ju pridajte. Pri opravách, ak je to možné, spustite náhľad. Skopírujte výzvu do ľubovoľnej AI; môže si vyžiadať chýbajúce údaje. Sem vložte jej výsledný JSON.", + "request": "Čo má táto miniaplikácia robiť?", + "documentationUrl": "URL dokumentácie API (voliteľné)", + "paste": "Vložiť", + "response": "Odpoveď AI", + "manualCopyDescription": "Prístup k schránke nie je k dispozícii. Vyberte výzvu nižšie a skopírujte ju manuálne.", + "manualPasteDescription": "Prístup k schránke nie je k dispozícii alebo skopírovaná odpoveď vyžaduje opravu. Sem vložte odpoveď AI vo formáte JSON.", + "selectAll": "Vybrať všetko", + "loadResponse": "Načítať odpoveď", + "loaded": "Widget sa načítal do editora", + "invalidResponse": "Schránka neobsahuje platný widget v2", + "invalidResponseDetail": "Odpoveď AI je neplatná: {message}" + }, + "preview": { + "invalid": "Opravte chyby validácie, aby ste mohli zobraziť náhľad tohto widgetu.", + "fixtureError": "Chyba testovacích údajov náhľadu", + "requestData": "Vyžiadať údaje", + "status": { + "idle": "Požiadavky ešte neboli otestované", + "loading": "Testujú sa požiadavky", + "success": "Všetky požiadavky na načítanie boli úspešné", + "error": "Jedna alebo viac požiadaviek na načítanie zlyhalo" + }, + "result": { + "loading": { + "title": "Testujú sa požiadavky API", + "description": "Homarr vytvára reláciu náhľadu a načítava údaje widgetu." + }, + "success": { + "title": "Náhľad je pripravený", + "description": "{succeeded, plural, =0 {Tento widget nemá žiadne požiadavky na načítanie.} one {# požiadavka na načítanie bola úspešná.} few {# požiadavky na načítanie boli úspešné.} many {# požiadaviek na načítanie bolo úspešných.} other {# požiadaviek na načítanie bolo úspešných.}} Otvorte Údaje a skontrolujte odpoveď." + }, + "error": { + "title": "Náhľad dokončený s chybami požiadaviek", + "description": "Úspešných: {succeeded, number}, neúspešných: {failed, number}. Otvorte Údaje a zobrazte podrobnosti o odpovedi a chybách." + } + }, + "instanceOptions": "Možnosti inštancie", + "liveActions": "Spúšťať akcie voči nakonfigurovanému API", + "liveActionsDescription": "Vypnuté znamená bezpečnú simuláciu. Zapnutie ovplyvní skutočnú službu.", + "noActions": "Nie sú definované žiadne akcie.", + "containedFailures": "Chyby počas behu sú uzavreté v tomto widgete. Denníky požiadaviek nikdy neobsahujú tajné hodnoty.", + "validation": { + "title": "Validácia", + "ready": "Definícia widgetu je platná." + }, + "accessibility": { + "title": "Kontroly prístupnosti", + "ready": "Neboli zistené žiadne bežné nedostatky prístupnosti.", + "pending": "Kontroly prístupnosti sa spustia, keď bude definícia widgetu platná.", + "imageAlt": "Pridajte alternatívny text ku každému obrázku; prázdny atribút alt použite iba pri dekoratívnych obrázkoch.", + "actionIconLabel": "Ku každej ikone akcie pridajte atribút aria-label alebo title.", + "inputLabel": "Ku každému vstupu pridajte viditeľný štítok alebo prístupný názov." + }, + "journal": "Redigovaný denník požiadaviek", + "actionParameters": "Parametre akcie (JSON)", + "invalidParameters": "Použite deklarované typy parametrov string, number a boolean.", + "runDestructive": "Spustiť deštruktívnu akciu", + "runAction": "Spustiť akciu", + "deleteConfirmation": "Táto akcia náhľadu mení vzdialené údaje prostredníctvom nakonfigurovaného API.", + "simulated": "Akcia simulovaná", + "httpStatus": "HTTP {status, number}", + "tab": { + "widget": "Miniaplikácia", + "data": "Údaje", + "options": "Možnosti", + "state": "Stav práce", + "actions": "Ovládacie prvky", + "diagnostics": "Diagnostika" + }, + "size": { + "compact": "Kompaktné", + "standard": "Štandardné", + "wide": "Široké" + }, + "fixture": { + "live": "Živé", + "loading": "Nahrávam", + "empty": "Prázdny", + "error": "Chyba" + } + } + }, + "preview": { + "request": { + "permission": { + "view": "Zobraziť", + "modify": "Upraviť", + "full": "Úplný prístup" + } + } + }, + "notification": { + "created": "Widget \"{name}\" bol úspešne vytvorený.", + "updated": "Widget \"{name}\" bol úspešne aktualizovaný.", + "deleted": "Widget \"{name}\" bol odstránený.", + "imported": "", + "migrated": "Starší widget bol úspešne migrovaný. Existujúce umiestnenia na nástenke teraz používajú definíciu v2.", + "migrationError": "Migrácia staršieho widgetu zlyhala. Uistite sa, že súbor používa schému homarr-custom-widget-v2.", + "legacyDefinitionCopied": "Pôvodný obsah widgetu bol skopírovaný. Uložené poverenia nie sú zahrnuté.", + "legacyDefinitionCopyError": "Kopírovanie pôvodného obsahu widgetu zlyhalo.", + "migrationPromptCopied": "Redigovaná výzva na migráciu bola skopírovaná. Vložte ju do LLM, skopírujte jeho jedinú odpoveď JSON a potom vyberte možnosť Vložiť sem migrovaný widget.", + "migrationPromptCopyError": "Kopírovanie výzvy na migráciu zlyhalo.", + "sourcesConfigured": "Zdroje widgetu a poverenia boli uložené.", + "sourceConfigurationError": "Konfigurácia zdrojov widgetu zlyhala.", + "aiPromptCopiedWithCount": "Výzva AI skopírovaná do schránky ({count, number} znakov).", + "aiPromptCopyError": "Nepodarilo sa skopírovať výzvu do schránky. Váš prehliadač možno nepodporuje túto funkciu.", + "aiPromptSent": "Výzva bola odoslaná. Počas práce asistenta na pozadí môžete pokračovať v úpravách.", + "updateError": "Nepodarilo sa aktualizovať widget. Vaše zmeny neboli uložené.", + "importError": "Nepodarilo sa importovať widget. Uistite sa, že súbor je platný JSON export vlastného widgetu.", + "exportError": "", + "duplicated": "", + "duplicateError": "", + "toggleError": "", + "deleteError": "", + "previewError": "" + }, + "importReview": { + "title": "Kontrola importu vlastného widgetu", + "description": "Pred importom skontrolujte, kam sa tento widget pripája a aký prístup k nástenke vyžadujú jeho ovládacie prvky.", + "migrationTitle": "Kontrola migrovanej náhrady v2", + "migrationDescription": "Skontrolujte a potvrďte túto vygenerovanú definíciu v2. Potvrdením sa atomicky nahradí zachovaný záznam v1, pričom existujúce umiestnenia na nástenke zostanú prepojené s rovnakým ID widgetu.", + "fileLabel": "Vyberte súbor JSON vlastného widgetu", + "name": "Názov úlohy", + "origin": "Základný pôvod", + "authentication": "Autentifikácia", + "networkScope": "Rozsah siete", + "methods": "Metódy HTTP", + "permissions": "Požadované povolenia nástenky", + "sourceSetup": { + "title": "Konfigurovať zdroje API", + "description": "Potvrďte, kam sa tento widget pripája, a pridajte poverenia. Súkromné adresy URL a adresy v slučke sú špecifické pre vašu inštaláciu Homarr.", + "suggestedUrl": "Navrhovaná URL", + "confirmUrl": "Potvrdzujem, že táto URL servera je pre moju inštaláciu Homarr správna", + "ready": "URL je pripravená", + "needsUrl": "Potvrdiť URL", + "credentialsMissing": "Chýbajú poverenia", + "credentialsOptional": "Môžete nainštalovať widget bez poverení a nakonfigurovať ich neskôr, ale požiadavky budú zlyhávať, kým ich nepridáte." + }, + "actionWarning": { + "title": "Tento widget môže meniť vzdialené údaje", + "description": "Po importe skontrolujte každú pomenovanú akciu, zdedené poverenie a potvrdenie deštruktívnej akcie. Tajomstvá nie sú súčasťou súboru." + }, + "cancel": "Zrušiť import", + "confirm": "Importovať widget", + "confirmMigration": "Potvrdiť náhradu v2" + }, + "secret": { + "apiKey": "Kľúč alebo token API", + "username": "Používateľské meno", + "password": "Heslo", + "savedPlaceholder": "••••••• (uložené, ponechajte prázdne pre zachovanie)" + } + }, + "workshop": { + "title": "Dielňa", + "browseWorkshop": "Prehľadávať dielňu", + "openCommunity": "Otvoriť dielňu", + "openOnWorkshop": "Otvoriť {title} na webovej stránke dielne", + "back": "Späť do dielne", + "search": "Hľadať widgety", + "searchCss": "Hľadať témy CSS", + "sort": "Zoradiť", + "sortTop": "Najlepšie hodnotené", + "sortNewest": "Najnovšie", + "listAriaLabel": "Widgety dielne", + "listAriaLabelCss": "Témy CSS dielne", + "empty": "Vyhľadávaniu nezodpovedajú žiadne widgety.", + "emptyDescription": "Tu sa zobrazia komunitné widgety publikované v dielni.", + "emptyFilteredTitle": "Vyhľadávaniu nezodpovedajú žiadne widgety", + "emptyFilteredDescription": "Žiadny widget dielne nezodpovedá výrazu „{search}“.", + "emptyCss": "Vyhľadávaniu nezodpovedajú žiadne témy CSS.", + "unavailableTitle": "Dielňa Homarr sa zdá byť nedostupná", + "unavailable": "Komunitná služba môže byť dočasne nedostupná. Skúste to znova o chvíľu. Vaše nainštalované widgety to neovplyvní.", + "loadError": "Toto odoslanie sa nepodarilo načítať.", + "noDescription": "Bez popisu", + "author": "od používateľa {name}", + "communityMember": "Člen komunity", + "outdated": "Zastarané", + "outdatedWarning": "Autor označil toto odoslanie ako zastarané. Pred importom ho dôkladne skontrolujte.", + "score": "Hodnotenie: {count, number}", + "upvote": "Hlasovať za", + "downvote": "Hlasovať proti", + "voteError": "Hlas sa nepodarilo uložiť.", + "signIn": "Prihlásiť sa cez GitHub", + "signInError": "Prihlásenie cez GitHub zlyhalo. Skontrolujte, či je poskytovateľ OAuth dielne nakonfigurovaný a či sú povolené kontextové okná.", + "signOut": "Odhlásiť sa", + "signInHint": "Prihláste sa a hlasujte alebo nahlasujte. Inštalácia nevyžaduje účet v dielni.", + "securityNotice": "Widgety dielne môžu volať deklarované zdroje API a vykonávať deklarované akcie s povereniami, ktoré nakonfigurujete lokálne. Tajomstvá sa nikdy nezahŕňajú.", + "securityNoticeCss": "Komunitné CSS môže meniť vzhľad a použiteľnosť nástenky. Pred importom ho skontrolujte; nič sa neuloží, kým neuložíte nastavenia nástenky.", + "install": "Nainštalovať", + "installReviewTitle": "Skontrolovať pred inštaláciou", + "installError": "Tento widget nie je možné nainštalovať", + "installErrorDescription": "Odoslanie z dielne nie je platný widget Custom JSX v2.", + "useCss": "Importovať CSS", + "importCss": "Importovať CSS z dielne", + "importCssConfirm": "Nahradiť aktuálne vlastné CSS za „{title}“? Nič sa neuloží, kým neuložíte nastavenia nástenky.", + "screenshotAlt": "Snímka obrazovky {title} {count, number}", + "screenshotViewer": "Prehliadač snímok obrazovky {title}", + "screenshotsLabel": "Snímky obrazovky {title}", + "zoomScreenshot": "Zobraziť plnú veľkosť", + "previousScreenshot": "Predchádzajúca snímka obrazovky", + "nextScreenshot": "Ďalšia snímka obrazovky", + "showScreenshotThumbnails": "Zobraziť miniatúry snímok obrazovky", + "hideScreenshotThumbnails": "Skryť miniatúry snímok obrazovky", + "closeScreenshotViewer": "Zavrieť prehliadač snímok obrazovky", + "technicalDetails": "Technické podrobnosti", + "sourceCode": "Položka dielne", + "export": "Exportovať", + "report": "Nahlásiť", + "reportTitle": "Nahlásiť odoslanie", + "reportReason": "Dôvod", + "reportExplanation": "Čo by mali moderátori dielne vedieť?", + "reportSend": "Odoslať hlásenie", + "reportSent": "Hlásenie odoslané", + "reportSentDescription": "Moderátori dielne teraz môžu skontrolovať toto odoslanie.", + "reportCount": "{count, plural, one {# hlásenie} few {# hlásenia} many {# hlásení} other {# hlásení}}", + "reportWarning": "{count, plural, one {Toto odoslanie má # otvorené komunitné hlásenie.} few {Toto odoslanie má # otvorené komunitné hlásenia.} many {Toto odoslanie má # otvorených komunitných hlásení.} other {Toto odoslanie má # otvorených komunitných hlásení.}} Stále ho možno nainštalovať, ale najprv by ste mali skontrolovať jeho obsah.", + "reportVisibility": "Podrobnosti hlásenia vidí iba autor tohto odoslania a správcovia dielne.", + "reportCategory": { + "outdated": "Zastarané alebo už nefunguje", + "malicious": "Škodlivé", + "spam": "Nevyžiadaná pošta", + "copyright": "Autorské práva", + "inappropriate": "Nevhodné", + "other": "Iné" + }, + "publish": { + "title": "Publikovať v dielni", + "introTitle": "Zdieľať tento widget s komunitou", + "introDescription": "Homarr exportuje kópiu aktuálneho widgetu bez poverení. Pridajte jasné podrobnosti, aby ľudia pred inštaláciou vedeli, čo robí.", + "listingDetails": "Záznam v dielni", + "listingDetailsDescription": "Tieto podrobnosti sa verejne zobrazia spolu s exportovanou definíciou widgetu.", + "success": "Publikované okamžite. Členovia komunity teraz môžu tento widget nainštalovať a nahlásiť.", + "successTitle": "Váš widget je aktívny", + "manageDescription": "Otvorte odoslanie a aktualizujte jeho záznam, skontrolujte hlásenia, označte ho ako zastarané alebo ho odstráňte. Správa odoslania prebieha priamo na webovej stránke dielne.", + "viewSubmission": "Zobraziť a spravovať odoslanie", + "done": "Hotovo", + "signInHint": "Prihláste sa a publikujte pod svojou identitou v dielni.", + "titleField": "Názov", + "descriptionField": "Popis", + "screenshots": "Snímky obrazovky", + "screenshotsDescription": "Najviac päť obrázkov PNG, JPEG alebo WebP", + "screenshotsPlaceholder": "Vybrať snímky obrazovky", + "invalidScreenshot": "Použite obrázky PNG, JPEG alebo WebP s veľkosťou najviac {maxSize} každý.", + "privateSourceWarning": "Tento widget obsahuje súkromné URL zdrojov pre: {sources}. Pred publikovaním nahraďte osobné hostiteľské názvy alebo IP adresy bezpečnými zástupnými symbolmi služieb.", + "reviewSourcesTitle": "Skontrolovať súkromné URL zdrojov", + "privateSourceConfirmation": "Skontroloval/-a som tieto URL zdrojov a neodhaľujú podrobnosti o súkromnej infraštruktúre", + "action": "Publikovať teraz", + "publicationNote": "Publikovanie je okamžité. Odoslanie môžete následne spravovať v dielni.", + "definitionChanged": "Widget sa počas prípravy publikovania zmenil. Znova skontrolujte jeho súkromné URL zdrojov a potom to skúste znova.", + "error": "Publikovanie zlyhalo" } }, "integration": { + "completion": { + "modalTitle": "Služba je pripravená", + "title": "{name} je pripojená", + "description": "Pripojenie prešlo testom. Vyberte, čo chcete ďalej zobraziť na tejto nástenke.", + "connectionReady": "Pripojenie služby je pripravené", + "appReady": "Skratka aplikácie je pripravená", + "compatibleWidgets": "{count, plural, =0 {Žiadne kompatibilné widgety} one {# kompatibilný widget} few {# kompatibilné widgety} many {# kompatibilných widgetov} other {# kompatibilných widgetov}} k dispozícii", + "chooseWidget": "Vybrať widget", + "recipes": { + "title": "Odporúčané pre túto nástenku", + "description": "Na základe pripojených služieb a widgetov, ktoré už sú na tejto nástenke.", + "newConnectionReason": "Teraz dostupné prostredníctvom {integration}", + "existingConnectionReason": "Funguje so službou, ktorú ste už pripojili", + "dismiss": "Skryť odporúčania pre túto službu na tejto nástenke" + } + }, "page": { "list": { - "title": "Integrácie", + "ariaLabel": "Nakonfigurované integrácie", "search": "Vyhľadať integrácie", + "scopedNote": "Zobrazujú sa iba integrácie, ktoré môžete spravovať.", "noResults": { - "title": "Zatiaľ neexistujú žiadne integrácie" + "title": "Zatiaľ neexistujú žiadne integrácie", + "description": "Pripojte službu a používajte jej údaje a akcie vo widgetoch Homarr.", + "action": "Vytvorte svoju prvú integráciu", + "filteredTitle": "Vyhľadávaniu nezodpovedajú žiadne integrácie", + "filteredDescription": "Žiadna integrácia nezodpovedá výrazu „{search}“. Skúste iný názov, typ alebo URL.", + "createOnlyTitle": "Môžete iba pridávať integrácie", + "createOnlyDescription": "Vaše povolenia vám umožňujú vytvárať integrácie, ale nie spravovať existujúce. Požiadajte správcu o prístup k tým, ktoré potrebujete." } }, "create": { "title": "Nová integrácia {name}", "notification": { "success": { - "title": "Vytvorenie bolo úspešné", "message": "Integrácia bola úspešne vytvorená" }, "error": { - "title": "Vytvorenie zlyhalo", "message": "Integráciu nebolo možné vytvoriť" } }, @@ -729,11 +1339,9 @@ "title": "Úprava integrácie {name}", "notification": { "success": { - "title": "Zmeny boli úspešne použité", "message": "Integrácia bola úspešne uložená" }, "error": { - "title": "Nie je možné použiť zmeny", "message": "Integráciu sa nepodarilo uložiť" } }, @@ -750,23 +1358,15 @@ "message": "Naozaj chcete odstrániť integráciu {name}?", "notification": { "success": { - "title": "Úspešne zmazané", "message": "Integrácia bola úspešne odstránená" }, "error": { - "title": "Odstránenie zlyhalo", "message": "Integráciu nie je možné odstrániť" } } } }, "field": { - "name": { - "label": "Názov" - }, - "url": { - "label": "Url" - }, "attemptSearchEngineCreation": { "label": "Vytvorte vyhľadávače", "description": "Integrácia \"{kind}\" môže byť použitá s vyhľadávačmi. Toto začiarknite, ak chcete automaticky nakonfigurovať vyhľadávací nástroj." @@ -778,6 +1378,10 @@ "label": "Vytvoriť aplikáciu", "description": "Vytvorte aplikáciu s rovnakým názvom a ikonou ako integrácia. Ak chcete vytvoriť aplikáciu s integračnou webovou adresou, ponechajte vstupné pole nižšie prázdne." }, + "linkApp": { + "label": "Prepojiť existujúcu aplikáciu", + "description": "Pripojte túto integráciu k aplikácii, ktorú už môžete používať." + }, "appHref": { "placeholder": "Adresa URL vlastnej aplikácie" }, @@ -791,7 +1395,11 @@ "grid": { "widgetCount": "{count} miniaplikácií", "noWidgets": "Žiadne miniaplikácie", - "detected": "Zistené pomocou Docker" + "detected": "Zistené pomocou Docker", + "connected": "{count, plural, one {# pripojená} few {# pripojené} many {# pripojených} other {# pripojených}}", + "tiedWidgets": "Prepojené widgety", + "more": "+{count} ďalších", + "loadError": "Integrácie sa nepodarilo načítať. Pred vytvorením nového pripojenia to skúste znova." }, "category": { "dnsHole": "DNS", @@ -822,7 +1430,10 @@ "analytics": "Analytika", "vpn": "", "mediaLibrary": "Knižnica médií", - "uptimeMonitoring": "Monitorovanie dostupnosti" + "uptimeMonitoring": "Monitorovanie dostupnosti", + "beszel": "Beszel", + "systemMonitoring": "Monitorovanie systému", + "security": "Bezpečnosť" }, "testConnection": { "action": { @@ -1107,6 +1718,22 @@ "slug": { "label": "Slug stavovej stránky", "newLabel": "Nový slug stavovej stránky" + }, + "wazuhIndexerUrl": { + "label": "URL indexera", + "newLabel": "Nová URL indexera" + }, + "wazuhIndexerUsername": { + "label": "Používateľské meno indexera", + "newLabel": "Nové používateľské meno indexera" + }, + "wazuhIndexerPassword": { + "label": "Heslo indexera", + "newLabel": "Nové heslo indexera" + }, + "wazuhDashboardUrl": { + "label": "URL dashboardu (voliteľné)", + "newLabel": "Nová URL dashboardu" } } }, @@ -1115,54 +1742,19 @@ "interact": "Interakcia s integráciami", "full": "Úplný prístup k integrácii" }, - "audiobookshelf": { - "name": "Audiobookshelf", - "description": "Samostatne hosťovaný server audiokníh a podcastov" - }, - "navidrome": { - "name": "Navidrome", - "description": "Samostatne hosťovaný server na streamovanie hudby s kompatibilitou so Subsonic API" - }, - "uptimeKuma": { - "name": "Uptime Kuma", - "description": "Samostatne hosťované monitorovanie dostupnosti s verejnými stavovými stránkami", - "secret": { - "slug": { - "description": "Slug vašej verejnej stavovej stránky. Predvolená hodnota je \"default\", ak nie je nastavená." - }, - "apiKey": { - "description": "Voliteľný API kľúč pre autentifikovaný prístup k /metrics" - } - } - }, - "traefik": { - "name": "", - "description": "" - }, - "paperlessNgx": { - "name": "Paperless-ngx", - "description": "Systém správy dokumentov na archiváciu a organizáciu naskenovaných dokumentov" - }, - "patchmon": { - "name": "", - "description": "" - }, - "bazarr": { - "name": "", - "description": "" - }, - "wud": { - "name": "What's Up Docker", - "description": "Sledujte, ktoré z vašich Docker kontajnerov majú k dispozícii aktualizácie obrazov" + "llamacpp": { + "name": "llama.cpp", + "description": "Monitorujte lokálny llama-server llama.cpp: stav, model a metriky generovania" } }, "media": { "plural": "Médiá", "search": "Nájsť médiá", "field": { - "name": "Názov", + "preview": "Náhľad", "size": "Veľkosť", - "creator": "Autor" + "creator": "Autor", + "actions": "Ovládacie prvky" }, "action": { "upload": { @@ -1190,10 +1782,12 @@ } }, "copy": { - "label": "Skopírovať URL" + "label": "Skopírovať URL", + "labelNamed": "Skopírovať URL pre {name}" }, "open": { - "label": "Otvoriť médiá" + "label": "Otvoriť médiá", + "labelNamed": "Otvoriť {name}" } }, "noResults": { @@ -1208,7 +1802,6 @@ "add": "Pridať", "apply": "Použiť", "backToOverview": "Späť na prehľad", - "skip": "Preskočiť", "change": "", "create": "Vytvoriť", "createAnother": "Vytvorte a začnite odznova", @@ -1231,16 +1824,31 @@ "tryAgain": "Skúste znova", "loading": "Nahrávam", "show": "Zobraziť", - "hide": "Skryť" + "hide": "Skryť", + "undo": "Späť", + "editNamed": "Upraviť {name}", + "deleteNamed": "Odstrániť {name}", + "clearSearch": "Vymazať vyhľadávanie", + "copy": "Kopírovať", + "copied": "Skopírované", + "refresh": "Obnoviť" + }, + "pagination": { + "pageOf": "Strana {page} z {totalPages}" }, "here": "tu", + "serviceUrlTemplate": { + "serverTitle": "Bežná adresa servera", + "urlModeLabel": "Vzor adresy služby", + "hostPort": "Rovnaký hostiteľ, odlišné porty", + "subdomain": "Jedna subdoména pre každú službu", + "path": "Jedna cesta pre každú službu" + }, "iconPicker": { "label": "URL ikony", + "description": "Vyhľadajte v knižnici, prilepte URL obrázka alebo nahrajte súbor.", "header": "Zadajte názov alebo objekty na filtrovanie ikon... Homarr pre vás vyhľadá ikony na stránke {countIcons} ", "headerLoading": "Vyhľadať obrázky podľa názvu", - "noResults": "", - "error": "", - "description": "Vyhľadajte v knižnici, prilepte URL obrázka alebo nahrajte súbor.", "clear": "Odstrániť obrázok", "uploadImage": "Nahrať obrázok", "results": "Výsledky vyhľadávania obrázkov", @@ -1249,7 +1857,9 @@ "otherImages": "Ostatné obrázky", "urlLoading": "Kontrolujem obrázok…", "urlReady": "Obrázok je pripravený na použitie", - "urlError": "Tento obrázok sa nepodarilo načítať. Skontrolujte adresu URL a skúste to znova." + "urlError": "Tento obrázok sa nepodarilo načítať. Skontrolujte adresu URL a skúste to znova.", + "noResults": "", + "error": "" }, "colorScheme": { "options": { @@ -1261,7 +1871,6 @@ "information": { "min": "Min", "max": "Max", - "days": "Dni", "hours": "Hodiny", "minutes": "Minúty" }, @@ -1298,16 +1907,16 @@ }, "userAvatar": { "menu": { - "switchToDarkMode": "Prepnúť na tmavý motív", - "switchToLightMode": "Prepnúť na svetlý motív", + "open": "Otvoriť ponuku používateľského avatara", "management": "Administrácia", - "docker": "", "preferences": "Vaše preferencie", "logout": "Odhlásiť", "login": "Prihlásiť sa", "homeBoard": "Vaša domovská nástenka", - "loggedOut": "Odhlásený", - "updateAvailable": "{countUpdates} dostupné aktualizácie: {tag}" + "updateAvailable": "{countUpdates} dostupné aktualizácie: {tag}", + "assistant": "Asistent", + "assistantThinking": "Premýšľa sa", + "modifier": "Modifikátor" } }, "dangerZone": "Nebezpečná zóna", @@ -1355,75 +1964,85 @@ "kilometersPerHour": "", "milesPerHour": "" } + }, + "widgetQuery": { + "loading": "Načítavajú sa údaje widgetu" + }, + "total": "Celkom", + "filesystemUsage": "{count, plural, one {Zobraziť využitie pre # súborový systém} few {Zobraziť využitie pre # súborové systémy} many {Zobraziť využitie pre # súborových systémov} other {Zobraziť využitie pre # súborových systémov}}", + "field": { + "name": "Názov úlohy" + }, + "label": { + "new": "Nový" + }, + "entity": { + "apps": "Aplikácie", + "boards": "Dosky", + "certificates": "Certifikáty", + "customWidgets": "Vlastné widgety", + "groups": "Skupiny", + "integrations": "Integrácie", + "invites": "Pozvánky", + "logs": "Záznamy", + "media": "Médiá", + "searchEngines": "Vyhľadávače", + "tasks": "Úlohy", + "users": "Používatelia" } }, "section": { - "dynamic": { + "option": { + "showLabel": { + "label": "Zobraziť štítok", + "description": "Zobraziť štítok kontajnera nad jeho obsahom." + }, + "collapsible": { + "label": "Povoliť zbalenie", + "description": "Umožniť divákom rozbaliť a zbaliť tento kontajner." + }, + "showOpenAll": { + "label": "Zobraziť akciu „otvoriť všetko“", + "description": "Zobraziť akciu, ktorá otvorí každú aplikáciu v tomto kontajneri na novej karte." + }, + "scrollable": { + "label": "Posúvateľné", + "description": "Ponechať tento kontajner v nastavenej veľkosti a namiesto jeho zväčšovania posúvať jeho obsah." + } + }, + "action": { + "openAllInNewTabsFor": "Otvoriť všetky aplikácie v {name} na kartách" + }, + "openAllInNewTabs": { + "title": "Otvoriť všetko na kartách", + "text": "Niektoré prehliadače môžu z bezpečnostných dôvodov blokovať hromadné otváranie kariet. Homarr nemohol otvoriť všetky okná, pretože váš prehliadač túto akciu zablokoval. Povoľte možnosť „Otvoriť kontextové okná“ a skúste to znova." + }, + "container": { + "untitled": "Nepomenovaný kontajner", "action": { - "create": "Nová dynamická sekcia", - "remove": "Nová dynamická sekcia" + "create": "Nový kontajner", + "remove": "Odstrániť kontajner", + "expand": "Rozbaliť", + "collapse": "Zbaliť" }, "option": { "title": { "label": "Názov" }, "customCssClasses": { - "label": "" + "label": "Vlastné css triedy" }, "borderColor": { "label": "Farba okraja" } }, "remove": { - "title": "Nová dynamická sekcia", - "message": "Naozaj chcete odstrániť túto dynamickú sekciu? Položky sa presunú na rovnaké miesto v nadradenej sekcii." - } - }, - "category": { - "field": { - "name": { - "label": "Názov" - } - }, - "action": { - "create": "Nová kategória", - "edit": "Premenovať kategóriu", - "remove": "Odstrániť kategóriu", - "moveUp": "Posunúť nahor", - "moveDown": "Posunúť nadol", - "createAbove": "Nová kategória vyššie", - "createBelow": "Nová kategória nižšie", - "openAllInNewTabs": "Otvoriť všetko na kartách" - }, - "create": { - "title": "Nová kategória", - "submit": "Pridať kategóriu" - }, - "remove": { - "title": "Odstrániť kategóriu", - "message": "Naozaj chcete odstrániť kategóriu {name}?" - }, - "edit": { - "title": "Premenovať kategóriu", - "submit": "Premenovať kategóriu" - }, - "menu": { - "label": { - "create": "Nová kategória", - "changePosition": "Zmeniť pozíciu", - "settings": "Nastavenia" - } - }, - "openAllInNewTabs": { - "title": "Otvoriť všetko na kartách", - "text": "Niektoré prehliadače môžu z bezpečnostných dôvodov blokovať hromadné otváranie kariet. Homarr nemohol otvoriť všetky okná, pretože váš prehliadač túto akciu zablokoval. Povoľte možnosť „Otvoriť kontextové okná“ a skúste to znova." + "message": "Odstrániť tento kontajner? Jeho obsah sa presunie do okolitého priestoru." } } }, "item": { "action": { - "create": "Nová položka", - "import": "Importovať položku", "edit": "Upraviť položku", "moveResize": "Presunúť / zmeniť veľkosť položky", "duplicate": "Duplikovať položku", @@ -1432,7 +2051,7 @@ "menu": { "label": { "settings": "Nastavenia", - "refresh": "", + "settingsFor": "Nastavenia pre {name}", "options": "", "actions": "" }, @@ -1441,21 +2060,96 @@ "error": "", "loading": "", "idle": "" + }, + "notification": { + "saveError": { + "title": "Widget sa nepodarilo uložiť", + "message": "Zmeny widgetu boli vrátené späť" + } } }, "create": { "title": "Vyberte položku, ktorú chcete pridať", "search": "Filtrovať položky", - "addToBoard": "Pridať na dosku" + "addToBoard": "Pridať na dosku", + "addAtPosition": "Pridať položku sem", + "destination": { + "label": "Pridať do", + "description": "Vyberte, kde sa má widget zobraziť. Neskôr ho môžete stále presunúť.", + "mainCanvas": "Hlavné plátno", + "leftRail": "Ľavý panel", + "rightRail": "Pravý panel" + }, + "connectionStatus": { + "ready": "Pripravený", + "needsSetup": "Vyžaduje nastavenie", + "noConnectionRequired": "Pripojenie nie je potrebné" + }, + "customWidget": "Vlastný widget", + "standalone": "Samostatné", + "missingIntegration": { + "title": "Najprv pripojte službu", + "noPermission": "Tento widget potrebuje kompatibilné pripojenie služby. Požiadajte správcu, aby ho pripojil, a potom to skúste znova." + }, + "notification": { + "success": { + "title": "Widget bol pridaný", + "message": "{name} bola pridaná na túto tabuľu.", + "relocatedMessage": "{name} bol pridaný do {destination}, pretože vybrané umiestnenie nebolo dostupné." + }, + "error": { + "title": "Položku sa nepodarilo pridať", + "message": "Položku sa nepodarilo pridať na túto nástenku" + } + } + }, + "selection": { + "summary": "{count, plural, one {# vybraná položka} few {# vybrané položky} many {# vybraných položiek} other {# vybraných položiek}}", + "selected": "{count, plural, one {# vybraná} few {# vybrané} many {# vybraných} other {# vybraných}}", + "copy": "Kopírovať", + "copied": "{count, plural, one {# položka skopírovaná do schránky} few {# položky skopírované do schránky} many {# položiek skopírovaných do schránky} other {# položiek skopírovaných do schránky}}", + "copyError": "Vybrané položky sa nepodarilo skopírovať. Váš prehliadač možno nepovoľuje prístup k schránke.", + "paste": "Vložiť", + "pasteShortcut": "Vložiť skopírované položky sem (Ctrl / ⌘ + V)", + "pasted": "{count, plural, one {# položka vložená} few {# položky vložené} many {# položiek vložených} other {# položiek vložených}}", + "pasteError": "Schránku sa nepodarilo prečítať. Váš prehliadač možno nepovoľuje prístup k schránke.", + "pasteInvalid": "Schránka neobsahuje platné položky nástenky Homarr.", + "pasteUnavailable": "Skopírované položky sa na túto nástenku nezmestia.", + "removed": "{count, plural, one {# položka odstránená} few {# položky odstránené} many {# položiek odstránených} other {# položiek odstránených}}", + "move": "Presunúť", + "moveTo": "Presunúť vybrané položky", + "delete": "Vymazať", + "clear": "Zrušiť výber", + "clearShortcut": "Zrušiť výber (Escape)", + "saveErrorTitle": "Položky sa nepodarilo aktualizovať", + "saveErrorMessage": "Zmeny sa nepodarilo uložiť. Nástenka bola obnovená.", + "moveUnavailableTitle": "Vybrané položky sa nepodarilo presunúť", + "moveUnavailableMessage": "V cieľovom umiestnení nie je dostatok miesta pre celý výber." }, "moveResize": { "title": "Presunúť / zmeniť veľkosť položky", + "entryLabel": "{name}, stĺpec {column}, riadok {row}", + "target": { + "numbered": "{name}, cieľ {index}", + "located": "{name}, {location}, cieľ {index}" + }, + "keyboard": { + "instructions": "Stlačením klávesu Enter alebo medzerníka spustíte úpravu klávesnicou. Pomocou šípok položku presuňte, pomocou Shiftu a šípok zmeňte jej veľkosť a stlačením Escape úpravu ukončite.", + "started": "Úprava klávesnicou sa spustila. Pomocou šípok položku presuňte, pomocou Shiftu a šípok zmeňte jej veľkosť a stlačením Escape úpravu ukončite.", + "stopped": "Úprava klávesnicou sa zastavila.", + "boundary": "Táto zmena sa do tejto sekcie nezmestí." + }, "field": { + "section": { + "label": "Sekcia alebo panel" + }, "width": { - "label": "Šírka" + "label": "Šírka", + "shortLabel": "Š" }, "height": { - "label": "Výška" + "label": "Výška", + "shortLabel": "V" }, "xOffset": { "label": "X offset" @@ -1469,18 +2163,36 @@ "title": "Upraviť položku", "tab": { "widget": "Upraviť miniaplikáciu", - "app": "Upraviť aplikáciu" + "app": "Upraviť aplikáciu", + "integration": "Upraviť integráciu" }, "app": { "propagationNotice": "Zmeny tejto aplikácie sa prejavia všade, kde sa používa na všetkých nástenkách." }, + "integration": { + "action": "Upraviť pripojenie", + "description": "Otestujte alebo opravte vybrané pripojenie bez opustenia tohto widgetu.", + "editLabel": "Úprava integrácie {name}", + "fullAccessRequired": "Vyžaduje sa úplný prístup", + "propagationNotice": "Zmeny tejto integrácie sa prejavia všade, kde sa používa. Pripojenie sa pred uložením otestuje.", + "loading": "Načítava sa integrácia", + "loadError": "Túto integráciu sa nepodarilo načítať. Pred zmenou jej nastavení pripojenia to skúste znova." + }, + "preview": { + "integrationRequired": "Vyberte pripojenie na zobrazenie náhľadu tohto widgetu.", + "size": "Veľkosť súboru" + }, + "settings": { + "label": "Nastavenia widgetu" + }, "advancedOptions": { "label": "Pokročilé možnosti", "title": "Rozšírené možnosti položiek" }, "field": { "integrations": { - "label": "Integrácie" + "label": "Integrácie", + "removeLabel": "Odstrániť integráciu {name}" }, "title": { "label": "Názov" @@ -1494,17 +2206,18 @@ } }, "remove": { - "title": "Odstrániť položku", "message": "Naozaj chcete odstrániť túto položku?" + }, + "advancedFocus": { + "open": "Otvoriť rozšírené zobrazenie", + "close": "Zavrieť rozšírené zobrazenie", + "label": "Rozšírené zobrazenie widgetu {widget}" } }, "widget": { "integrationSelect": { "configureIntegrationFirst": "", - "loading": "", - "placeholder": "", - "noResults": "", - "loadError": "" + "placeholder": "" }, "app": { "name": "Aplikácia", @@ -1513,9 +2226,6 @@ "appId": { "label": "Vybrať aplikáciu" }, - "openInNewTab": { - "label": "Otvoriť na novej karte" - }, "showTitle": { "label": "Zobraziť názov aplikácie" }, @@ -1523,11 +2233,8 @@ "label": "Povoliť jednoduchý ping" }, "layout": { - "label": "", "option": { - "row": "", "row-reverse": "", - "column": "", "column-reverse": "" } }, @@ -1552,23 +2259,60 @@ "name": "Záložky", "description": "Zobrazuje viacero odkazov na aplikácie", "option": { - "title": { - "label": "Názov" + "showTitle": { + "label": "Zobraziť názov widgetu" + }, + "titleSize": { + "label": "Veľkosť názvu widgetu (px)" }, "layout": { "label": "Rozloženie", "option": { - "row": { - "label": "Horizontálne" - }, - "column": { - "label": "Vertikálne" - }, - "grid": { - "label": "Mriežka" + "adaptive": { + "label": "Adaptívne" }, "gridHorizontal": { "label": "Mriežka horizontálna" + }, + "icons": { + "label": "Ikony" + } + } + }, + "variant": { + "label": "Vzhľad", + "option": { + "soft": { + "label": "Jemné" + }, + "filled": { + "label": "Vyplnené" + }, + "outline": { + "label": "Obrys" + }, + "plain": { + "label": "Jednoduché" + } + } + }, + "spacing": { + "label": "Rozostupy medzi kartami", + "option": { + "xs": { + "label": "Extra malé" + }, + "sm": { + "label": "Malé" + }, + "md": { + "label": "Stredné" + }, + "lg": { + "label": "Veľké" + }, + "xl": { + "label": "Extra veľké" } } }, @@ -1581,17 +2325,28 @@ "hideHostname": { "label": "Skryť názvy hostiteľov" }, - "openNewTab": { - "label": "Otvoriť na novej karte" - }, "withBorder": { "label": "Zobraziť ohraničenie" }, + "grow": { + "label": "Roztiahnuť karty tak, aby vyplnili riadok" + }, + "customUrls": { + "label": "Vlastné odkazy" + }, "items": { "label": "Záložky", - "add": "Pridať záložku" + "remove": "Odstrániť záložku", + "apps": { + "label": "Pridať záložky", + "description": "Vložte adresy URL alebo nájdite existujúce aplikácie. Potiahnutím záložiek nižšie zmeníte ich poradie.", + "placeholder": "Vložte adresy URL alebo vyhľadajte aplikácie", + "addUrl": "Pridať túto adresu URL", + "hint": "Stlačením klávesu Enter pridáte adresu URL. Ak chcete pridať viacero adries, vložte ich oddelené čiarkami alebo každú na samostatný riadok." + } } - } + }, + "empty": "Pridajte adresu URL alebo aplikáciu v nastaveniach widgetu" }, "archiveTeamWarrior": { "name": "", @@ -1600,33 +2355,61 @@ "showBroadcastMessage": { "label": "" } + }, + "noProjectSelected": "Nie je vybraný žiadny projekt", + "runnerStatus": "Spúšťač: {status}", + "projectId": "Projekt: {id}", + "sessionReceived": "Relácia prijatá: {value}", + "sessionSent": "Relácia odoslaná: {value}", + "sessionId": "Relácia: {id}", + "startedAt": "Spustené {date}", + "emptyItems": "V tejto snímke nie sú žiadne aktívne ani nedávne úlohy", + "metric": { + "running": "Spustené", + "completed": "Hotovo", + "failed": "Neúspešné", + "canceled": "Zrušené", + "download": "Stiahnutie", + "upload": "Nahratie" + }, + "status": { + "running": "Spustené", + "completed": "Dokončené", + "failed": "Neúspešné", + "canceled": "Zrušené", + "stopped": "Zastavené", + "idle": "Nečinný", + "unknown": "Neznámy" + } + }, + "wud": { + "name": "What's Up Docker", + "description": "Zobrazuje, koľko sledovaných kontajnerov má k dispozícii aktualizácie.", + "title": "What's Up Docker", + "monitored": "Sledované", + "updatesAvailable": "{count, plural, one {# aktualizácia je k dispozícii} few {# aktualizácie sú k dispozícii} many {# aktualizácií je k dispozícii} other {# aktualizácie je k dispozícii}}", + "updateAvailable": "Dostupná aktualizácia", + "openReleaseNotes": "Otvorte poznámky k vydaniu", + "option": { + "showRing": { + "label": "Zobraziť prstenec aktualizácie" + }, + "showUpdateList": { + "label": "Zobraziť zoznam aktualizácií kontajnerov", + "description": "Uvádza každý sledovaný kontajner, ktorý má dostupnú aktualizáciu obrazu" + } } }, "dnsHoleSummary": { "name": "Zhrnutie dier DNS", "description": "Zobrazí súhrn vašej diery DNS", "option": { - "layout": { - "label": "Rozloženie", - "option": { - "row": { - "label": "Horizontálne" - }, - "column": { - "label": "Vertikálne" - }, - "grid": { - "label": "Mriežka" - } - } - }, "usePiHoleColors": { "label": "Použite farby Pi-Hole" } }, "error": { - "internalServerError": "Nepodarilo sa načítať súhrn dier DNS", - "integrationsDisconnected": "Nie sú dostupné žiadne údaje, všetky integrácie sú odpojené" + "internalServerError": "Nepodarilo sa načítať súhrn dier DNS" }, "data": { "adsBlockedToday": "Zablokované dnes", @@ -1634,32 +2417,24 @@ "dnsQueriesToday": "Poziadavky dnes", "domainsBeingBlocked": "Domény na adlistoch" }, - "domainsTooltip": "Kvôli viacerým integráciám nemôže Homarr vypočítať presný počet blokovaných domén" + "domainsTooltip": "Kvôli viacerým integráciám nemôže Homarr vypočítať presný počet blokovaných domén", + "status": { + "enabled": "Povolené", + "disabled": "Zakázané", + "unknown": "Neznámy" + } }, "dnsHoleControls": { "name": "Kontrola diery DNS", "description": "Ovládajte PiHole alebo AdGuard z ovládacieho panela", "option": { - "layout": { - "label": "Rozloženie", - "option": { - "row": { - "label": "Horizontálne" - }, - "column": { - "label": "Vertikálne" - }, - "grid": { - "label": "Mriežka" - } - } - }, "showToggleAllButtons": { "label": "Zobraziť prepínač všetkých tlačidiel" } }, "error": { - "internalServerError": "Nepodarilo sa ovládať dieru DNS" + "internalServerError": "Nepodarilo sa ovládať dieru DNS", + "bulkActionsFailed": "{count, plural, one {# akcia zlyhala} few {# akcie zlyhali} many {# akcií zlyhalo} other {# akcií zlyhalo}}" }, "controls": { "enableAll": "Povoliť všetko", @@ -1670,8 +2445,6 @@ "disabled": "Zakázané", "processing": "Spracovanie", "disconnected": "Odpojené", - "hours": "Hodiny", - "minutes": "Minúty", "unlimited": "Ponechajte prázdne na neobmedzené" } }, @@ -1683,16 +2456,10 @@ "label": "Vlastné zobrazenie názvu/mesta", "description": "Pochváľte sa vlastným názvom alebo názvom mesta/krajiny v hornej časti hodín." }, - "customTitle": { - "label": "Názov" - }, "is24HourFormat": { "label": "24-hodinový formát", "description": "Namiesto 12-hodinového formátu použite 24-hodinový formát" }, - "showSeconds": { - "label": "Zobrazte sekundy" - }, "useCustomTimezone": { "label": "Použite pevné časové pásmo" }, @@ -1711,29 +2478,295 @@ "label": "Vlastný formát času", "description": "Na formátovanie času použite ISO 8601 (toto prepíše ostatné možnosti)" }, - "customDateFormat": { - "label": "Vlastný formát času", - "description": "Na formátovanie času použite ISO 8601 (toto prepíše ostatné možnosti)" - }, "showWeather": { "label": "", "description": "" }, - "weatherLocation": { - "label": "" - }, "isWeatherFormatFahrenheit": { "label": "" + }, + "animateWeatherIcon": { + "label": "Animovať ikonu počasia", + "description": "Animuje ikonu počasia. Predvolene je táto možnosť vypnutá a vždy sa vypne, keď je požadovaný obmedzený pohyb." + }, + "colorWeatherByDayNight": { + "label": "Farbiť počasie podľa dňa/noci", + "description": "Zafarbí ikonu počasia a teplotu farbou dňa alebo noci podľa toho, či je na vybranom mieste práve deň alebo noc." + }, + "dayWeatherColor": { + "label": "Farba dňa" + }, + "nightWeatherColor": { + "label": "Farba noci" + }, + "worldClockCities": { + "label": "Mestá svetových hodín", + "description": "Pridajte a usporiadajte až šesť miest pre rozšírené zobrazenie." } + }, + "timezoneList": { + "timezone": "Časové pásmo", + "cityLabel": "Označenie mesta", + "searchPlaceholder": "Vyhľadať časové pásma", + "noResults": "Nenašli sa žiadne časové pásma", + "unsupportedOption": "Nepodporované: {timeZone}", + "add": "Pridať mesto", + "remove": "Odstrániť {city}", + "reorder": "Zmeniť poradie {city}", + "limit": "Nastavené mestá: {count} z {maximum}" + }, + "worldClock": { + "primary": "Hlavné hodiny", + "local": "Miestny čas", + "today": "Dnes", + "tomorrow": "Zajtra", + "yesterday": "Včera", + "noSecondaryCities": "Ak ich chcete porovnať tu, pridajte mestá v možnostiach widgetu.", + "unsupportedPrimaryTitle": "Hlavné časové pásmo nie je k dispozícii", + "unsupportedPrimary": "{timeZone} nie je v tomto prehliadači podporované. Zobrazuje sa UTC ako jasne označená náhradná možnosť.", + "unsupportedTimeZone": "Nepodporované časové pásmo: {timeZone}", + "accessibleTime": "{city}: {time}, {date}, {timeZone}", + "advancedLabel": "Rozšírené svetové hodiny", + "cities": "Svetové hodiny", + "cityCount": "{count} časových pásiem", + "timeBarLabel": "Poloha času počas 24-hodinového dňa pre mesto {city}", + "dayProgress": "Uplynulo {percent} % · zostáva {hours} h {minutes} min", + "phaseLegend": "Legenda častí dňa", + "tick": { + "midnight": "00", + "morning": "06", + "noon": "12", + "evening": "18", + "end": "24" + }, + "phaseRange": { + "night": "00–05 · 21–24", + "dawn": "05–08", + "day": "08–18", + "dusk": "18–21" + }, + "phase": { + "night": "Noc", + "dawn": "Úsvit", + "day": "Deň", + "dusk": "Súmrak" + } + } + }, + "airQuality": { + "name": "Kvalita ovzdušia a UV žiarenie", + "description": "Zobrazuje kvalitu ovzdušia, ultrafialový index, znečisťujúce látky a peľ pre dané miesto.", + "option": { + "location": { + "label": "Miesto kvality ovzdušia" + }, + "aqiStandard": { + "label": "Štandard AQI", + "options": { + "auto": "Automaticky podľa miestnych nastavení", + "european": "Európsky AQI", + "us": "Americký AQI" + } + }, + "showUv": { + "label": "Zobraziť UV index" + }, + "showPollutants": { + "label": "Zobraziť koncentrácie znečisťujúcich látok" + }, + "showPollen": { + "label": "Zobraziť koncentrácie peľu" + } + }, + "category": { + "good": "Dobrá", + "fair": "Uspokojivá", + "moderate": "Stredná", + "unhealthySensitive": "Nezdravá pre citlivé skupiny", + "unhealthy": "Nezdravý", + "poor": "Zlá", + "veryPoor": "Veľmi zlá", + "veryUnhealthy": "Veľmi nezdravá", + "extremelyPoor": "Mimoriadne zlá", + "hazardous": "Nebezpečná", + "unknown": "Žiadne meranie AQI" + }, + "uv": { + "label": "Index UV žiarenia", + "category": { + "low": "Nízka", + "moderate": "Stredná", + "high": "Vysoká", + "veryHigh": "Veľmi vysoká", + "extreme": "Extrémna", + "unknown": "Žiadne meranie" + } + }, + "dominantPollutant": "Dominantná znečisťujúca látka", + "aqiLabel": "AQI", + "strongestPollen": "Najvyššia koncentrácia peľu", + "unit": { + "concentration": "{value} µg/m³", + "pollen": "{value} zŕn/m³" + }, + "pollutant": { + "pm2_5": "PM2.5", + "pm10": "PM10", + "ozone": "Ozón", + "nitrogenDioxide": "Oxid dusičitý", + "sulphurDioxide": "Oxid siričitý", + "carbonMonoxide": "Oxid uhoľnatý" + }, + "pollen": { + "alder": "Jelša", + "birch": "Breza", + "grass": "Trávy", + "mugwort": "Palina", + "olive": "Olivovník", + "ragweed": "Ambrózia" + }, + "compact": { + "sixHourTrend": "Trend AQI na nasledujúcich šesť hodín" + }, + "advanced": { + "observedAt": "Aktualizované o {time}", + "next24Hours": "Nasledujúcich 24 hodín", + "pollutants": "Koncentrácie znečisťujúcich látok", + "pollen": "Koncentrácie peľu", + "sevenDayForecast": "Maximálna predpoveď na 7 dní", + "aqiValue": "AQI {value}", + "uvValue": "UV {value}", + "uvShort": "UV {value}", + "noForecast": "Údaje predpovede nie sú k dispozícii" + } + }, + "countdown": { + "name": "Odpočítavania", + "description": "Sleduje nadchádzajúce udalosti a opakujúce sa výročia.", + "option": { + "events": { + "label": "Udalosti", + "description": "Pridajte a usporiadajte až 20 jednorazových alebo každoročných odpočítavaní. Dátumy sa zadávajú vo vybranom časovom pásme." + }, + "showProgress": { + "label": "Zobraziť priebeh" + }, + "showSeconds": { + "label": "Zobraziť sekundy", + "description": "Ponechať sekundy viditeľné pre každú nadchádzajúcu udalosť." + } + }, + "dateTimeEventList": { + "newEvent": "Nová udalosť", + "add": "Pridať udalosť", + "remove": "Odstrániť {event}", + "reorder": "Zmeniť poradie {event}", + "eventLabel": "Označenie udalosti", + "timezone": "Časové pásmo", + "unsupportedOption": "Nepodporované: {timeZone}", + "recurrence": "Opakovanie", + "recurrenceOption": { + "none": "Neopakuje sa", + "yearly": "Každý rok" + }, + "target": "Dátum a čas udalosti", + "trackProgress": "Sledovať priebeh od dátumu začiatku", + "start": "Dátum a čas začiatku priebehu", + "confirmDateTime": "Potvrdiť dátum a čas", + "limit": "Nakonfigurované udalosti: {count} z {maximum}" + }, + "empty": { + "title": "Zatiaľ žiadne odpočítavania", + "description": "Ak chcete začať odpočítavanie, pridajte udalosť v možnostiach widgetu." + }, + "completed": "Dokončené", + "yearly": "Ročne", + "progress": "Priebeh udalosti", + "upcoming": "Nadchádzajúce", + "completedEvents": "Dokončené udalosti", + "invalid": { + "title": "Niektoré udalosti sa nedajú zobraziť", + "description": "{count, plural, one {# udalosť má neplatný dátum alebo nepodporované časové pásmo.} few {# udalosti majú neplatný dátum alebo nepodporované časové pásmo.} many {# udalostí má neplatný dátum alebo nepodporované časové pásmo.} other {# udalostí má neplatný dátum alebo nepodporované časové pásmo.}}", + "value": "Nedostupné" + }, + "alert": { + "notifications": "Prehliadačové oznámenia", + "permissionDenied": "Oznámenia sú v tomto prehliadači zablokované.", + "reached": "Odpočítavanie dosiahlo svoj cieľ." + } + }, + "timer": { + "name": "Časovač / Pomodoro", + "description": "Spúšťa jednoduchý časovač alebo konfigurovateľnú sekvenciu Pomodoro.", + "option": { + "mode": { + "label": "Režim", + "options": { + "timer": "Časovač", + "pomodoro": "Pomodoro" + } + }, + "timerMinutes": { + "label": "Minúty časovača" + }, + "focusMinutes": { + "label": "Minúty sústredenia" + }, + "shortBreakMinutes": { + "label": "Minúty krátkej prestávky" + }, + "longBreakMinutes": { + "label": "Minúty dlhej prestávky" + }, + "sessionsBeforeLongBreak": { + "label": "Počet sústredených relácií pred dlhou prestávkou" + }, + "autoStartBreaks": { + "label": "Automaticky spúšťať prestávky" + }, + "autoStartFocus": { + "label": "Automaticky spúšťať relácie sústredenia" + } + }, + "phase": { + "timer": "Časovač", + "focus": "Sústredenie", + "shortBreak": "Krátka prestávka", + "longBreak": "Dlhá prestávka" + }, + "action": { + "start": "Spustiť", + "pause": "Pozastaviť", + "reset": "Obnoviť" + }, + "attention": { + "timerComplete": "Časovač dokončený", + "phaseReady": "{phase} pripravené" + }, + "progress": "Priebeh časovača: {progress}%", + "compact": { + "completedFocus": "{count, plural, =0 {Nebola dokončená žiadna relácia sústredenia} one {Dokončená # relácia sústredenia} few {Dokončené # relácie sústredenia} many {Dokončených # relácií sústredenia} other {Dokončených # relácií sústredenia}}" + }, + "alert": { + "title": "Časovač dokončený", + "completed": "{phase} dokončené." + }, + "advanced": { + "sequence": "Sekvencia Pomodoro", + "focusSession": "Sústredenie {session}", + "settings": "Trvalé nastavenia", + "settingsHint": "Na úpravu týchto nastavení nástenky použite kontextovú ponuku widgetu.", + "localAlerts": "Lokálne upozornenia", + "notifications": "Prehliadačové oznámenia", + "sound": "Zvuky časovača", + "localAlertsHint": "Zvuky časovača sú predvolene povolené. Zvuky a oznámenia sa týkajú iba tohto widgetu v tomto prehliadači.", + "notificationsDenied": "Oznámenia sú v tomto prehliadači zablokované." } }, "minecraftServerStatus": { "name": "Minecraft Server Stav", "description": "Zobraziť status Minecraft servera", "option": { - "title": { - "label": "Názov" - }, "domain": { "label": "Adresa servera" }, @@ -1753,11 +2786,21 @@ "noStation": "", "option": { "baseUrl": { - "label": "" + "label": "", + "description": "Vlastné URL adresy musia smerovať na verejnú IP adresu. Súkromné a lokálne hostiteľské adresy sú odmietnuté." }, "station": { - "label": "" + "label": "", + "placeholder": "Vyhľadať stanicu" } + }, + "error": { + "customSourceUnavailable": "Zdroj cestovného poriadku je nedostupný. Skontrolujte, či jeho URL adresa smeruje na verejnú IP adresu.", + "stationSearch": "Stanice sa nedajú vyhľadať. Skontrolujte vlastnú URL adresu a prístup k nástenke." + }, + "warning": { + "stale": "Cestovný poriadok sa nepodarilo obnoviť. Zobrazujú sa odchody naposledy aktualizované o {time}.", + "staleCompact": "Zastarané údaje" } }, "notebook": { @@ -1789,6 +2832,9 @@ "directionRtl": "", "blockquote": "Citát", "horizontalLine": "Horizontálna čiara", + "details": "Prepínať zbaliteľnú sekciu", + "expandDetails": "Rozbaliť zbaliteľnú sekciu", + "collapseDetails": "Zbaliť zbaliteľnú sekciu", "bulletList": "Zoznam odrážok", "orderedList": "Objednaný zoznam", "checkList": "Kontrolný zoznam", @@ -1797,16 +2843,20 @@ "link": "Odkaz", "unlink": "Odstrániť odkaz", "image": "Vložiť obrázok", - "addTable": "Pridať tabuľku", + "insertTable": "Vložiť tabuľku", + "insertTableSize": "Vložiť tabuľku {columns} × {rows}", "deleteTable": "Odstrániť tabuľku", "colorCell": "Farebná bunka", - "mergeCell": "Prepnúť zlúčenie buniek", + "mergeCells": "Zlúčiť bunky", + "splitCell": "Rozdeliť bunku", "addColumnLeft": "Pridať stĺpec pred", "addColumnRight": "Pridať stĺpec po", "deleteColumn": "Vymazať stĺpec", "addRowTop": "Pridať riadok pred", "addRowBelow": "Pridať riadok po", - "deleteRow": "Vymazať riadok" + "deleteRow": "Vymazať riadok", + "toggleHeaderRow": "Prepínať riadok hlavičky", + "toggleHeaderColumn": "Prepínať stĺpec hlavičky" }, "align": { "left": "Vľavo", @@ -1817,8 +2867,6 @@ "clearColor": "Vymazať farbu", "source": "Zdroj", "widthPlaceholder": "Hodnota v % alebo pixeloch", - "columns": "Stĺpce", - "rows": "Riadky", "width": "Šírka", "height": "Výška" }, @@ -1830,7 +2878,9 @@ "discard": "", "keepEditing": "" } - } + }, + "saveFailed": "Poznámku sa nepodarilo uložiť", + "documentStats": "{words, plural, one {# slovo} few {# slová} many {# slov} other {# slov}} · {characters, plural, one {# znak} few {# znaky} many {# znakov} other {# znakov}}" }, "anchorNote": { "name": "", @@ -1839,9 +2889,6 @@ "noteId": { "label": "" }, - "showTitle": { - "label": "" - }, "showUpdatedAt": { "label": "" } @@ -1851,14 +2898,20 @@ "notFound": "", "noNotes": "", "integrationRequired": "", - "updatedAt": "", "untitled": "", - "edit": "", - "save": "", - "cancel": "", "readOnlyViewer": "", "saveForbidden": "", - "saveFailed": "" + "saveFailed": "", + "createdAt": "Vytvorené {date}", + "permission": { + "owner": "Vlastník", + "editor": "Editor", + "viewer": "Prehliadač" + }, + "status": { + "pinned": "Pripnuté", + "archived": "Archivovaný" + } }, "iframe": { "name": "iFrame", @@ -1917,6 +2970,25 @@ "clickable": { "label": "Klikateľné" } + }, + "state": { + "on": "Zapnuté", + "off": "Vypnuté", + "unavailable": "Nedostupné", + "unknown": "Neznámy" + }, + "advanced": { + "entityId": "ID subjektu: {id}", + "lastChanged": "Zmenené {date}", + "attribute": { + "unit": "Jednotka", + "deviceClass": "Trieda zariadenia", + "icon": "Ikona" + } + }, + "error": { + "loadFailed": "Entitu sa nepodarilo načítať", + "toggleFailed": "Entitu sa nepodarilo aktualizovať" } }, "smartHome-executeAutomation": { @@ -1932,11 +3004,31 @@ }, "spotlightAction": { "run": "Spustite {name}" + }, + "advanced": { + "lastExecuted": "Naposledy spustené o {time}", + "automationId": "ID automatizácie: {id}", + "ready": "Pripravené na spustenie", + "noPermission": "Na spustenie tejto automatizácie nemáte oprávnenie" + }, + "status": { + "running": "Spúšťa sa automatizácia", + "success": "Automatizácia dokončená" + }, + "error": { + "executeFailed": "Automatizáciu sa nepodarilo spustiť" } }, "stockPrice": { "name": "Cena akcií", "description": "Zobrazuje aktuálnu cenu akcií spoločnosti", + "advanced": { + "currentPrice": "Aktuálna cena", + "previousClose": "Predchádzajúce uzavretie", + "changePercentage": "Zmena (%)", + "minimum": "Minimálna hodnota", + "maximum": "Maximálna hodnota" + }, "option": { "stock": { "label": "Symboly akcií" @@ -2007,6 +3099,10 @@ "label": "1 mesiac" } } + }, + "showDetails": { + "label": "Zobraziť podrobnosti", + "description": "V kompaktnom zobrazení zobraziť názov, zmenu a časový rozsah. Vypnutím sa zobrazí iba symbol a cena." } } }, @@ -2034,6 +3130,13 @@ "showUnmonitored": { "label": "Zobraziť nemonitorované" } + }, + "advanced": { + "previousMonth": "Zobraziť predchádzajúci mesiac", + "nextMonth": "Zobraziť nasledujúci mesiac", + "eventCount": "{count, plural, one {# udalosť} few {# udalosti} many {# udalostí} other {# udalostí}}", + "loading": "Načítavajú sa udalosti kalendára...", + "noEvents": "Tento mesiac nemá žiadne udalosti" } }, "weather": { @@ -2046,16 +3149,18 @@ "disableTemperatureDecimals": { "label": "Zakázať desatinné miesta teploty" }, + "animateIcons": { + "label": "Animovať ikony počasia" + }, + "showHumidity": { + "label": "Zobraziť vlhkosť" + }, "showCurrentWindSpeed": { - "label": "Zobraziť aktuálnu rýchlosť vetra", - "description": "Len za aktuálneho počasia" + "label": "Zobraziť aktuálnu rýchlosť vetra" }, "useImperialSpeed": { "label": "" }, - "location": { - "label": "Poloha počasia" - }, "showCity": { "label": "Zobraziť mesto" }, @@ -2065,13 +3170,10 @@ "forecastDayCount": { "label": "Počet predpovedaných dní", "description": "Keď miniaplikácia nie je dostatočne široká, zobrazí sa menej dní" - }, - "dateFormat": { - "label": "Formát Dátumu", - "description": "Ako by mal dátum vyzerať" } }, "currentWindSpeed": "{currentWindSpeed} {unit}", + "disabled": "Údaje o počasí nie sú k dispozícii, pretože odchádzajúce pripojenia sú vypnuté", "dailyForecast": { "sunrise": "Východ slnka", "sunset": "Západ slnka", @@ -2094,6 +3196,47 @@ "thunderstorm": "Búrka", "thunderstormWithHail": "Búrka s krúpami", "unknown": "Neznámy" + }, + "details": "Zobraziť podrobnosti o počasí", + "detailsFor": "Zobraziť podrobnosti o počasí pre {date}", + "advanced": { + "forecast": "Predpoveď na 7 dní", + "hourlyForecast": "Nasledujúcich 24 hodín", + "day": "Deň", + "time": "Čas", + "conditions": "Podmienky", + "temperature": "Teplota", + "feelsLike": "Pocitová teplota {temperature}", + "feelsLikeLabel": "Pocitová teplota", + "feelsLikeRange": "Pocitová teplota: {maximum} / {minimum}", + "highLow": "Najvyššia {maximum} · najnižšia {minimum}", + "observedAt": "Aktualizované o {time}", + "humidity": "Vlhkosť", + "averageHumidity": "Priemerná vlhkosť: {humidity}%", + "currentHumidity": "Aktuálna vlhkosť", + "wind": "Vietor / nárazy ({unit})", + "currentWind": "Aktuálny vietor / nárazy", + "windValue": "{speed} / {gusts} {unit}", + "windDetail": "Max. vietor / nárazy: {speed} / {gusts} {unit}", + "nextHourPrecipitation": "Zrážky počas nasledujúcej hodiny", + "precipitationChance": "Pravdepodobnosť zrážok", + "precipitationValue": "{probability}% · {amount} mm", + "precipitationDetail": "Zrážky: {probability}% · {amount} mm", + "todayUv": "Dnešný maximálny UV index", + "uvIndex": "Max. UV index: {value}", + "daylight": "Denné svetlo: {duration}", + "hourlyTooltip": "Pocitová teplota {feelsLike}{temperatureUnit} · {amount} mm · vlhkosť {humidity}% · vietor {speed} {speedUnit}", + "hourlyTooltipWithoutHumidity": "Pocitová teplota {feelsLike}{temperatureUnit} · {amount} mm · vietor {speed} {speedUnit}", + "detailLabel": { + "feelsLike": "Pocitová teplota", + "precipitation": "Zrážky", + "humidity": "Priemerná vlhkosť", + "wind": "Max. vietor / nárazy", + "uv": "Max. UV index", + "daylight": "Denné svetlo" + }, + "sun": "Východ / západ slnka", + "noForecast": "Údaje predpovede nie sú k dispozícii" } }, "indexerManager": { @@ -2106,8 +3249,15 @@ }, "title": "Správca indexovača", "testAll": "Otestujte všetky", + "status": { + "healthy": "Zdravý", + "unhealthy": "Nezdravý", + "disabled": "Zakázané", + "unknown": "Stav nie je k dispozícii" + }, "error": { - "internalServerError": "Nepodarilo sa načítať stav indexerov" + "internalServerError": "Nepodarilo sa načítať stav indexerov", + "testAll": "Test indexovača zlyhal. Skúste to znova." } }, "healthMonitoring": { @@ -2136,11 +3286,6 @@ "fileSystem": { "label": "Zobraziť informácie o súborovom systéme" }, - "visibleStorageVolumes": { - "label": "", - "description": "", - "placeholder": "" - }, "defaultTab": { "label": "Predvolená karta" }, @@ -2163,17 +3308,27 @@ "minutes": "{count} minút", "used": "Použité", "available": "K dispozícii", - "lastSeen": "Posledná aktualizácia stavu: {lastSeen}" + "lastSeen": "Posledná aktualizácia stavu: {lastSeen}", + "updatesAvailable": "{count, plural, one {K dispozícii je # aktualizácia} few {K dispozícii sú # aktualizácie} many {K dispozícii je # aktualizácií} other {K dispozícii je # aktualizácií}}", + "rebootRequired": "Vyžaduje sa reštart", + "rebootNotRequired": "Reštart sa nevyžaduje" + }, + "smartStatus": { + "attributesWithinThresholds": "SMART: atribúty sú v rámci limitov", + "attributesFailed": "SMART: {attributes} zlyhalo", + "noCriticalWarning": "SMART: SSD nehlási žiadne varovanie", + "criticalWarning": "SMART: SSD hlási kritické varovanie" + }, + "gauge": { + "cpuUsage": "Využitie CPU", + "cpuTemperature": "Teplota CPU", + "memoryUsage": "Využitie pamäte", + "gpuUsage": "Využitie GPU {name}" }, - "memory": {}, "error": { "internalServerError": "Nepodarilo sa načítať zdravotný stav" }, "cluster": { - "summary": { - "cpu": "CPU", - "memory": "RAM" - }, "resource": { "node": { "name": "Uzly" @@ -2209,8 +3364,6 @@ "table": { "header": { "name": "Názov", - "cpu": "Procesor", - "memory": "RAM", "node": "Uzol" } } @@ -2220,33 +3373,29 @@ "name": "Docker stav", "description": "Štatistiky vašich kontajnerov (Túto miniaplikáciu je možné pridať iba s oprávneniami správcu)", "option": { - "columns": { - "label": "" + "endpointIds": { + "label": "Prostredia Docker", + "description": "Ponechajte prázdne, ak chcete zobraziť kontajnery zo všetkých prostredí Docker", + "placeholder": "Všetky prostredia Docker" }, - "enableRowSorting": { - "label": "" + "containerFilter": { + "label": "Kontajnery na filtrovanie" + }, + "filterIsWhitelist": { + "label": "Filter ako biely zoznam" }, "defaultSort": { - "label": "", "option": { "name": "", "state": "", "cpuUsage": "", "memoryUsage": "" } - }, - "descendingDefaultSort": { - "label": "" - }, - "columnOrder": { - "label": "" - }, - "columnWidths": { - "label": "" } }, "error": { "internalServerError": "Nepodarilo sa načítať štatistiky kontajnerov", + "endpointsUnavailable": "Koncové body Dockeru nie sú k dispozícii", "layoutSaveTitle": "", "layoutSaveMessage": "" }, @@ -2255,7 +3404,6 @@ } }, "coolify": { - "name": "", "description": "", "option": { "showServers": { @@ -2281,17 +3429,49 @@ "internalServerError": "" }, "server": { - "buildServer": "" + "buildServer": "", + "resourceCounts": "{applications, plural, one {# aplikácia} few {# aplikácie} many {# aplikácií} other {# aplikácií}} / {services, plural, one {# služba} few {# služby} many {# služieb} other {# služieb}}", + "reachability": "Dostupnosť", + "usability": "Použiteľnosť" + }, + "source": { + "url": "Zdroj: {url}", + "unavailable": "{source}: nedostupné" }, "instances": { "title": "" + }, + "action": { + "openResource": "Otvoriť {name}", + "openLogs": "Otvoriť protokoly {name}", + "showIp": "Zobraziť IP adresu", + "hideIp": "Skryť IP adresu" + }, + "status": { + "running": "Spustené", + "stopped": "Zastavené", + "exited": "Ukončené", + "starting": "Spúšťa sa", + "restarting": "Reštartovanie", + "unknown": "Neznámy", + "online": "Online", + "offline": "Odpojené", + "reachable": "Dostupné", + "unreachable": "Nedostupné", + "usable": "Použiteľné", + "unusable": "Nepoužiteľné" } }, "vpn": { "name": "", "description": "", "serviceUnavailable": "", - "option": {} + "status": { + "running": "Spustené", + "notRunning": "Nie je spustené", + "unavailable": "Nedostupné", + "vpn": "VPN: {status}" + } }, "ups": { "name": "UPS", @@ -2318,14 +3498,19 @@ "runtime": "Výdrž", "load": "Zaťaženie", "input": "Vstup", - "output": "Výstup" + "output": "Výstup", + "batteryVoltage": "Napätie batérie", + "power": "Výkon", + "temperature": "Teplota", + "manufacturer": "Výrobca", + "model": "Model", + "serial": "Sériové číslo" }, "error": { "internalServerError": "Nepodarilo sa načítať údaje UPS" } }, "tracearr": { - "name": "", "description": "", "option": { "showStreams": { @@ -2413,10 +3598,7 @@ "label": "Udalosť", "description": "Zobraziť celkový počet výskytov konkrétnej udalosti", "placeholder": "Vyberte udalosť", - "loading": "Načítavajú sa udalosti...", - "noEvents": "Nenašli sa žiadne udalosti", - "none": "Žiadna udalosť", - "configureWebsiteFirst": "Najprv vyberte webovú stránku, aby sa načítali udalosti" + "none": "Žiadna udalosť" }, "chartType": { "label": "Typ grafu", @@ -2447,26 +3629,21 @@ "eventNames": { "label": "Udalosti", "description": "Vyberte jednu alebo viac udalostí na vytvorenie grafu", - "placeholder": "Vyberte udalosti...", - "loading": "Načítavajú sa udalosti...", - "noEvents": "Nenašli sa žiadne udalosti", - "configureWebsiteFirst": "Najprv vyberte webovú stránku, aby sa načítali udalosti" + "placeholder": "Vyberte udalosti..." }, "topCount": { "label": "Počet zobrazených položiek", "description": "Počet najlepších položiek na zobrazenie (max. 500)" + }, + "events": { + "loading": "Načítavajú sa udalosti...", + "noEvents": "Nenašli sa žiadne udalosti", + "configureWebsiteFirst": "Ak chcete načítať udalosti, najprv vyberte webovú stránku" } }, "event": { - "occurrences": "udalosti", "label": "udalosti" }, - "topPages": { - "direct": "Priame" - }, - "topReferrers": { - "direct": "Priame" - }, "events": { "selectPrompt": "Vyberte udalosti na graf" }, @@ -2475,6 +3652,9 @@ "noWebsite": "Nie je nakonfigurovaná žiadna webová stránka", "noData": "Nie sú k dispozícii žiadne údaje", "internalServerError": "Nepodarilo sa načítať údaje Umami" + }, + "top": { + "direct": "Priame" } }, "common": { @@ -2502,7 +3682,8 @@ }, "integration": { "noData": "Nenašla sa žiadna integrácia", - "description": "Kliknutím na vytvoríte novú integráciu" + "description": "Kliknutím na vytvoríte novú integráciu", + "manage": "Správa integrácií" }, "app": { "noData": "Nenašla sa žiadna aplikácia", @@ -2513,7 +3694,61 @@ "noIntegration": "Nie je vybraná žiadna integrácia", "noData": "Nie sú k dispozícii žiadne údaje o integrácii" }, - "option": {} + "integrationDisconnected": "Nie sú dostupné žiadne údaje, všetky integrácie sú odpojené", + "updatedAt": "Aktualizované {date}", + "title": { + "label": "Názov" + }, + "openInNewTab": { + "label": "Otvoriť na novej karte" + }, + "showTitle": { + "label": "Zobraziť názov" + }, + "weatherLocation": { + "label": "Poloha počasia" + }, + "layout": { + "label": "Rozloženie", + "option": { + "horizontal": "Horizontálne", + "vertical": "Vertikálne", + "grid": "Mriežka" + } + }, + "select": { + "loading": "Načítava sa...", + "loadError": "Možnosti sa nepodarilo načítať" + }, + "dateFormat": { + "label": "Formát Dátumu", + "description": "Ako by mal dátum vyzerať" + }, + "visibleStorageVolumes": { + "label": "Viditeľné úložiská", + "description": "Dostupné iba vtedy, keď je každá vybraná integrácia OpenMediaVault alebo Synology. Ponechajte prázdne, ak chcete zobraziť všetky zistené úložiská.", + "placeholder": "Vybrať úložiská" + }, + "tableOptions": { + "columns": { + "label": "Stĺpce na zobrazenie" + }, + "columnOrder": { + "label": "Poradie stĺpcov" + }, + "columnWidths": { + "label": "Šírky stĺpcov" + }, + "enableRowSorting": { + "label": "Povoliť triedenie položiek" + }, + "defaultSort": { + "label": "Stĺpec používaný na triedenie v predvolenom nastavení" + }, + "invertSorting": { + "label": "Inverzné triedenie" + } + } }, "video": { "name": "Video stream", @@ -2572,6 +3807,7 @@ "transcoding": "", "paused": "", "remaining": "", + "seasonEpisode": "S{season} E{episode}", "metadata": { "title": "", "video": { @@ -2589,11 +3825,16 @@ "resolution": "", "target": "" } - } + }, + "unknownUser": "Neznámy používateľ" + }, + "summary": { + "sessions": "{count, plural, one {# relácia} few {# relácie} many {# relácií} other {# relácií}}", + "playing": "{count} sa prehráva", + "transcoding": "{count} sa prekóduje" } }, "paperlessNgx": { - "name": "Paperless-ngx", "description": "Prehľad vášho archívu dokumentov Paperless-ngx", "documentsTotal": "Celkový počet dokumentov", "documentsInbox": "Schránka", @@ -2637,6 +3878,192 @@ "internalServerError": "Nepodarilo sa načítať údaje Paperless-ngx" } }, + "patchmon": { + "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": "" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "" + }, + "securityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "securityUpdatesWarningAt": { + "label": "" + }, + "securityUpdatesCriticalAt": { + "label": "" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "" + }, + "upToDateHostsThresholdMode": { + "label": "", + "description": "" + }, + "upToDateHostsWarningAt": { + "label": "", + "description": "" + }, + "upToDateHostsCriticalAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesWarningAt": { + "label": "" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "" + }, + "showOsDistribution": { + "label": "", + "description": "" + }, + "osDistributionLimit": { + "label": "", + "description": "", + "option": { + "3": "", + "5": "", + "10": "", + "all": "" + } + }, + "showOsVersion": { + "label": "", + "description": "" + }, + "showComplianceHero": { + "label": "", + "description": "" + }, + "osDisplayMode": { + "label": "", + "description": "", + "option": { + "bars": "", + "donut": "" + } + }, + "threshold": { + "warningAt": { + "description": "Pri dosiahnutí tejto hranice zadajte žltú hodnotu" + }, + "criticalAt": { + "description": "Pri dosiahnutí tejto hranice zadajte červenú hodnotu" + } + } + }, + "error": { + "internalServerError": "" + } + }, + "bazarr": { + "description": "", + "episodes": "", + "movies": "", + "providers": "", + "status": "", + "announcements": "Oznámenia", + "option": { + "showMissingEpisodes": { + "label": "", + "description": "" + }, + "showMissingMovies": { + "label": "", + "description": "" + }, + "showProviderIssues": { + "label": "", + "description": "" + }, + "showHealthIssues": { + "label": "", + "description": "" + } + }, + "error": { + "internalServerError": "" + } + }, "immich-serverStats": { "name": "", "description": "", @@ -2661,7 +4088,8 @@ "users": "", "photos": "", "videos": "", - "storage": "" + "storage": "", + "albumLimit": "Najväčšie albumy (zobrazuje sa najviac {count})" }, "immich-albumCarousel": { "name": "", @@ -2685,24 +4113,21 @@ } }, "description": "", - "noPhotos": "" + "noPhotos": "", + "albumPhoto": "Fotografia albumu", + "actions": { + "previousPhoto": "Predchádzajúca fotografia", + "nextPhoto": "Nasledujúca fotografia", + "pauseSlideshow": "Pozastaviť prezentáciu", + "resumeSlideshow": "Pokračovať v prezentácii", + "toggleSlideshow": "Pozastaviť alebo pokračovať v prezentácii", + "photo": "Fotografia {number}" + } }, "downloads": { "name": "Download klient", "description": "Umožňuje vám zobraziť a spravovať stiahnuté súbory z klientov Torrent aj Usenet.", "option": { - "columns": { - "label": "Stĺpce na zobrazenie" - }, - "enableRowSorting": { - "label": "Povoliť triedenie položiek" - }, - "defaultSort": { - "label": "Stĺpec používaný na triedenie v predvolenom nastavení" - }, - "descendingDefaultSort": { - "label": "Inverzné triedenie" - }, "showCompletedUsenet": { "label": "Zobrazenie záznamov v sieti Usenet označených ako dokončené" }, @@ -2727,12 +4152,6 @@ "limitPerIntegration": { "label": "Obmedzte položky na integráciu", "description": "Tým sa obmedzí počet položiek zobrazených na integráciu, nie globálne" - }, - "columnOrder": { - "label": "" - }, - "columnWidths": { - "label": "" } }, "errors": { @@ -2764,7 +4183,7 @@ }, "id": { "columnTitle": "Id", - "detailsTitle": "" + "detailsTitle": "Id" }, "integration": { "columnTitle": "Integrácia" @@ -2893,6 +4312,10 @@ "mediaRequests-requestList": { "name": "Zoznam mediálnych požiadaviek", "description": "Zobrazenie zoznamu všetkých mediálnych požiadaviek z Overseerr alebo Jellyseerr", + "empty": { + "title": "Zatiaľ žiadne požiadavky na médiá", + "description": "Ak chcete začať požiadavku, vyhľadajte film alebo seriál." + }, "option": { "linksTargetNewTab": { "label": "Otvorenie odkazov v novej karte" @@ -2926,12 +4349,16 @@ "failed": "Neúspešné", "completed": "Dokončené" }, + "unknown": "Neznámy", "toBeDetermined": "TBD" }, "mediaRequests-requestStats": { "name": "Štatistiky mediálnych žiadostí", "description": "Štatistiky o vašich požiadavkách na médiá", - "option": {}, + "empty": { + "title": "Zatiaľ žiadna aktivita požiadaviek", + "description": "Štatistiky sa zobrazia po prvej požiadavke na médium." + }, "titles": { "stats": { "main": "Štatistiky médií", @@ -2941,8 +4368,7 @@ "declined": "Už odmietnuté", "available": "Už k dispozícii", "tv": "TV požiadavky", - "movie": "Filmové požiadavky", - "total": "Celkom" + "movie": "Filmové požiadavky" }, "users": { "main": "Najlepší používatelia", @@ -2968,7 +4394,6 @@ }, "currentIndex": "{start}-{end} z {total}", "healthCheck": { - "title": "Kontrola stavu", "queued": "V poradí", "status": { "healthy": "Zdravý", @@ -2977,38 +4402,63 @@ }, "panel": { "statistics": { - "empty": "Prázdny", - "transcodes": "Transkodér", - "transcodesCount": "Transkódy", - "healthChecksCount": "Zdravotné kontroly", "filesCount": "Súbory", "savedSpace": "Ušetrené miesto", - "healthChecks": "Kontrola stavu", "videoCodecs": "Kodeky", "videoContainers": "Kontajnery", "videoResolutions": "Rozlíšenie" }, "workers": { - "empty": "Prázdny", "table": { - "file": "Súbor", "eta": "Odhad", - "progress": "Stav", - "transcode": "Transkodér", - "healthCheck": "Kontrola stavu" + "progress": "Stav" } }, "queue": { - "empty": "Prázdny", "table": { - "file": "Súbor", - "size": "Veľkosť", - "transcode": "Transkodér", - "healthCheck": "Kontrola stavu" + "size": "Veľkosť" } + }, + "common": { + "empty": "Prázdny", + "file": "Súbor", + "healthCheck": "Kontrola stavu", + "transcode": "Transkodér", + "transcodes": "Transkódy", + "healthChecks": "Zdravotné kontroly" } } }, + "mediaMissing": { + "name": "", + "description": "Zobrazuje chýbajúce a zaradené filmy, epizódy a knihy zo služieb {radarr}, {sonarr} a {bindery}", + "option": { + "showMissing": { + "label": "" + }, + "showQueued": { + "label": "" + }, + "pageSize": { + "label": "" + } + }, + "tab": { + "missing": "", + "queued": "" + }, + "type": { + "movie": "", + "episode": "", + "book": "Kniha" + }, + "empty": { + "missing": "", + "queued": "", + "noTabsEnabled": "" + }, + "timeLeft": "" + }, "rssFeed": { "name": "RSS kanály", "description": "Monitorujte a zobrazujte jeden alebo viac všeobecných informačných kanálov RSS, ATOM alebo JSON", @@ -3031,6 +4481,13 @@ "showPosterImage": { "label": "" } + }, + "error": { + "allFeedsFailed": "Kanály RSS sa nepodarilo načítať. Skontrolujte ich URL adresy a skúste to znova." + }, + "warning": { + "partial": "{count, plural, one {Nepodarilo sa načítať # kanál RSS} few {Nepodarilo sa načítať # kanály RSS} many {Nepodarilo sa načítať # kanálov RSS} other {Nepodarilo sa načítať # kanálov RSS}}", + "stale": "Kanály RSS sa nepodarilo obnoviť. Zobrazujú sa predtým načítané položky." } }, "releases": { @@ -3106,17 +4563,8 @@ "label": "Regulárny výraz" } }, - "edit": { - "label": "Upraviť" - }, "editForm": { - "title": "Upraviť úložisko", - "cancel": { - "label": "Zrušiť" - }, - "confirm": { - "label": "Potvrdiť" - } + "title": "Upraviť úložisko" }, "importForm": { "title": "Importovať z dockeru" @@ -3133,8 +4581,7 @@ "label": "", "token": "", "configured": "", - "notConfigured": "", - "save": "" + "notConfigured": "" } } }, @@ -3161,17 +4608,32 @@ "noProviderResponse": "", "unexpected": "" } - } + }, + "expandDetails": "Zobraziť podrobnosti pre {name}", + "collapseDetails": "Skryť podrobnosti pre {name}" }, "networkControllerSummary": { - "option": {}, - "card": { - "vpn": { - "countConnected": "{count} pripojený" + "advanced": { + "updated": "Aktualizované", + "metric": { + "latency": "Latencia", + "ping": "Ping", + "uptime": "Doba prevádzky", + "users": "Používatelia", + "guests": "Hostia" } }, + "card": { + "vpn": { + "countConnected": "{count, plural, one {# pripojené} few {# pripojené} many {# pripojených} other {# pripojených}}", + "label": "VPN" + }, + "wan": "WAN", + "web": "Web", + "wifi": "Wi-Fi", + "lan": "LAN" + }, "error": { - "integrationsDisconnected": "Nie sú dostupné žiadne údaje, všetky integrácie sú odpojené", "unknownContentOption": "Neznáma možnosť obsahu pre súhrnnú miniaplikáciu sieťového ovládača: " }, "name": "Zhrnutie sieťového ovládača", @@ -3208,7 +4670,6 @@ } }, "error": { - "integrationsDisconnected": "Nie sú dostupné žiadne údaje, všetky integrácie sú odpojené", "unknownContentOption": "Neznáma možnosť obsahu pre miniaplikáciu stavu siete: " }, "name": "Stav siete", @@ -3238,7 +4699,6 @@ "versiontitle": "", "cputitle": "", "memorytitle": "", - "cpu": "", "memory": "", "interfaces": { "name": "", @@ -3246,6 +4706,16 @@ "recv": "", "title": "" } + }, + "empty": { + "noInterfaces": "Zatiaľ nie sú k dispozícii údaje o sieťových rozhraniach" + }, + "versionUnknown": "Neznáma verzia", + "metricAccessible": "{metric}: {value} %, {status}", + "status": { + "normal": "Normálne", + "warning": "Varovanie", + "critical": "Kritické" } }, "notifications": { @@ -3255,8 +4725,21 @@ "option": { "hideLogos": { "label": "" + }, + "messageFormat": { + "label": "Formát správy", + "option": { + "auto": "Automaticky", + "plain": "Čistý text", + "markdown": "Markdown", + "html": "HTML" + } } - } + }, + "openService": "Otvoriť službu oznámení", + "deleteNotification": "Odstrániť oznámenie z Gotify", + "deleteFailed": "Oznámenie sa nepodarilo odstrániť", + "deleteFailedMessage": "Oznámenie sa nepodarilo odstrániť. Skúste to znova." }, "speedtestTracker": { "name": "", @@ -3298,7 +4781,6 @@ } }, "uptimeKuma": { - "name": "Uptime Kuma", "description": "Monitorovať štatistiky dostupnosti z vašej stavovej stránky Uptime Kuma", "option": { "showAverageUptime": { @@ -3335,8 +4817,58 @@ }, "error": { "internalServerError": "Nepodarilo sa načítať údaje o dostupnosti" + }, + "status": { + "up": "Celkom hore", + "down": "Rýchlosť sťahovania", + "paused": "Pozastavené" } }, + "traefik": { + "description": "", + "option": { + "showTcp": { + "label": "" + }, + "showUdp": { + "label": "" + }, + "showEntryPoints": { + "label": "" + } + }, + "instances": "", + "versionUnknown": "", + "summary": { + "routers": "", + "entryPoints": "" + }, + "resource": { + "routers": "", + "middlewares": "" + }, + "status": { + "healthy": "", + "errors": "", + "warnings": "" + }, + "error": { + "internalServerError": "" + }, + "resourceType": { + "router": "Smerovač", + "service": "Služba", + "middleware": "Medzivrstva" + }, + "resourceStatus": { + "enabled": "Povolené", + "disabled": "Zakázané", + "warning": "Varovanie", + "error": "Chyba", + "unknown": "Neznámy" + }, + "failedEndpoint": "Zlyhalo: {endpoint}" + }, "audioStats": { "name": "Audio štatistiky", "description": "Štatistiky knižnice a prehrávania z Navidrome alebo Audiobookshelf", @@ -3401,9 +4933,7 @@ "label": "", "description": "", "option": { - "cpu": "", "memory": "", - "gpu": "", "network": "" } }, @@ -3418,12 +4948,11 @@ } }, "card": { - "cpu": "", "memory": "", - "gpu": "", "network": "", "up": "", - "down": "" + "down": "", + "memoryTooltip": "{used} / {available} ({percent} %)" } }, "systemDisks": { @@ -3440,7 +4969,7 @@ "label": "" }, "absolute": { - "label": "" + "label": "Absolútne hodnoty" }, "free": { "label": "" @@ -3449,151 +4978,88 @@ }, "showBackgroundBar": { "label": "" - }, - "visibleStorageVolumes": { - "label": "", - "description": "", - "placeholder": "" } }, "status": { - "unhealthy": "" + "unhealthy": "", + "smart": "SMART", + "free": "{percentage}% voľných" + } + }, + "customApi": { + "name": "Vlastný widget", + "description": "Vykreslí nakonfigurovanú vlastnú definíciu JSX.", + "customJsx": { + "noTemplate": "Nie je nakonfigurovaná žiadna šablóna JSX.", + "templateWarnings": "Počet varovaní šablóny: {count}", + "requestIdRequired": "Tento sieťový ovládací prvok vyžaduje pomenovaný requestId.", + "unsavedPreview": "Pred testovaním pomenovaných požiadaviek spustite v editore počiatočný test požiadavky.", + "invalidParams": "Parametre požiadavky sú neplatné.", + "loading": "Načítava sa požiadavka...", + "loadRequest": "Načítať požiadavku", + "requestFailed": "Požiadavka zlyhala.", + "retry": "Zopakovať požiadavku", + "actionCompleted": "Akcia bola úspešne dokončená.", + "actionSimulated": "Akcia bola simulovaná; požiadavka sa neodoslala.", + "actionsDisabledEditMode": "Akcie sú počas režimu úprav nástenky vypnuté.", + "widgetItemUnavailable": "Táto položka widgetu nie je k dispozícii.", + "toggle": "Prepínať", + "copied": "Skopírované", + "confirmDelete": "Potvrďte túto deštruktívnu akciu." + }, + "option": { + "definitionId": { + "label": "Vlastný widget" + }, + "refreshInterval": { + "label": "", + "description": "" + } + }, + "noDefinition": "", + "definitionNotFound": "Vlastný widget nie je k dispozícii", + "migrationRequired": "Tento starší vlastný widget je zachovaný, ale pred spustením ho treba migrovať na Custom JSX v2 v časti Spravovať vlastné widgety.", + "manageMigration": "Otvoriť správu vlastných widgetov", + "contactAdmin": "Kontaktujte správcu.", + "configurationNeedsRepair": "Možnosti tohto widgetu sa zmenili. Upravte widget a opravte jeho konfiguráciu.", + "removeFromBoard": "Odstrániť z nástenky", + "editModePending": "Ak chcete načítať tento widget, uložte nástenku.", + "picker": { + "group": "Widgety Custom JSX", + "empty": "Nenašli sa žiadne vlastné widgety", + "preview": "Náhľad", + "sources": "{count, plural, one {# zdroj} few {# zdroje} many {# zdrojov} other {# zdrojov}}", + "requests": "{count, plural, one {# požiadavka} few {# požiadavky} many {# požiadaviek} other {# požiadaviek}}", + "migrationRequired": "Vyžaduje sa migrácia", + "migrationDescription": "Tento umiestnený widget v1 zatiaľ nemôže fungovať. Skopírujte jeho redigovanú výzvu do LLM a potom vložte jedinú odpoveď JSON do Homarru.", + "manageMigration": "Otvoriť správu vlastných widgetov", + "contactAdmin": "Kontaktujte správcu." + }, + "configuration": { + "needsAttention": "Konfigurácia si vyžaduje pozornosť: {message}", + "advancedOptions": "Pokročilé možnosti", + "invalidJson": "Neplatný JSON" } }, "beszelSystemTable": { "name": "Beszel systémy (tabuľka)", "description": "Tabuľkový pohľad všetkých systémov monitorovaných Beszel s triediteľnými stĺpcami a indikátormi stavu", "option": { - "statusFilter": { - "label": "Filter stavu" - }, "sortBy": { "label": "Triediť podľa" }, "sortDirection": { "label": "Smer triedenia" - }, - "showCpu": { - "label": "Zobraziť CPU" - }, - "showMemory": { - "label": "Zobraziť pamäť" - }, - "showDisk": { - "label": "Zobraziť disk" - }, - "showGpu": { - "label": "Zobraziť GPU" - }, - "showLoadAvg": { - "label": "Zobraziť priemerné zaťaženie" - }, - "showNet": { - "label": "Zobraziť sieť" - }, - "showTemp": { - "label": "Zobraziť teplotu" - }, - "showBattery": { - "label": "Zobraziť batériu" - }, - "showServices": { - "label": "Zobraziť služby" - }, - "showUptime": { - "label": "Zobraziť dobu prevádzky" - }, - "showAgent": { - "label": "Zobraziť verziu agenta" - }, - "columnOrder": { - "label": "" - }, - "columnWidths": { - "label": "" } }, - "noRecords": "Nenašli sa žiadne systémy", "error": { - "internalServerError": "", "layoutSaveTitle": "", "layoutSaveMessage": "" - }, - "column": { - "system": "Systém", - "cpu": "Procesor", - "memory": "Pamäť", - "disk": "Disk", - "gpu": "GPU", - "loadAvg": "Priem. zaťaženie", - "net": "Sieť", - "temp": "Teplota", - "battery": "Batéria", - "services": "Služby", - "uptime": "Doba prevádzky", - "agent": "Agent" } }, "beszelSystemGrid": { "name": "Beszel systémy (mriežka)", - "description": "Zobrazenie mriežky kariet všetkých systémov monitorovaných Beszel s metrikami v reálnom čase", - "option": { - "statusFilter": { - "label": "Filter stavu" - }, - "showCpu": { - "label": "Zobraziť CPU" - }, - "showMemory": { - "label": "Zobraziť pamäť" - }, - "showDisk": { - "label": "Zobraziť disk" - }, - "showGpu": { - "label": "Zobraziť GPU" - }, - "showLoadAvg": { - "label": "Zobraziť priemerné zaťaženie" - }, - "showNet": { - "label": "Zobraziť sieť" - }, - "showTemp": { - "label": "Zobraziť teplotu" - }, - "showBattery": { - "label": "Zobraziť batériu" - }, - "showServices": { - "label": "Zobraziť služby" - }, - "showUptime": { - "label": "Zobraziť dobu prevádzky" - }, - "showAgent": { - "label": "Zobraziť verziu agenta" - } - }, - "error": { - "internalServerError": "" - }, - "empty": { - "noSystems": "" - }, - "metric": { - "cpu": "Procesor", - "memory": "Pamäť", - "disk": "Disk", - "gpu": "GPU", - "loadAvg": "Priem. zaťaženie", - "net": "Sieť", - "temp": "Teplota", - "battery": "Bat", - "services": "Služby", - "uptime": "Doba prevádzky", - "agent": "Agent" - } + "description": "Zobrazenie mriežky kariet všetkých systémov monitorovaných Beszel s metrikami v reálnom čase" }, "beszelAlerts": { "name": "Beszel Upozornenia", @@ -3607,11 +5073,12 @@ } }, "empty": "Žiadne nakonfigurované upozornenia", - "error": { - "internalServerError": "" - }, "history": "História", "resolved": "Vyriešené", + "alertDescription": { + "statusDuration": "Nedostupné {minutes} min", + "threshold": "Prekračuje {value} počas {minutes} min" + }, "status": { "triggered": "Spustené", "ok": "OK" @@ -3658,16 +5125,16 @@ "noSystems": "" }, "error": { - "internalServerError": "", "liveConnectionFailed": "", "switchToHistorical": "", - "systemNotFound": "" + "systemNotFound": "", + "selectionSaveTitle": "Výber sa nepodarilo uložiť", + "selectionSaveMessage": "Výber systému alebo časového obdobia sa nepodarilo uložiť. Skúste to znova." }, "chart": { "cpu": { "title": "Využitie CPU", - "subtitle": "Priemerné využitie CPU v celom systéme", - "series": "Procesor" + "subtitle": "Priemerné využitie CPU v celom systéme" }, "memory": { "title": "Využitie pamäte", @@ -3709,289 +5176,550 @@ "title": "I/O siete Docker", "subtitle": "Sieťová prevádzka Docker kontajnerov" } + }, + "period": { + "live": "Naživo", + "oneHour": "1 h", + "twelveHours": "12 h", + "oneDay": "24 h", + "oneWeek": "1 týž.", + "thirtyDays": "30 dní" } }, - "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": "" - } - } + "assistant": { + "name": "Asistent", + "description": "Majte priamo na nástenke kompletnú konverzáciu s asistentom.", + "unavailable": { + "title": "Asistent nie je k dispozícii", + "description": "Prihláste sa a požiadajte správcu, aby nakonfiguroval Asistenta v paneli správy." }, + "compact": { + "title": "Asistent", + "description": "Zmeňte veľkosť tohto widgetu a chatujte tu alebo otvorte úplnú konverzáciu.", + "open": "Otvoriť asistenta", + "openTitle": "Asistent otvorený v bočnom paneli", + "openDescription": "Konverzácia zostáva v jednej aktívnej ploche.", + "returnToWidget": "Vrátiť konverzáciu do tohto widgetu", + "otherWidgetTitle": "Asistent je aktívny v inom widgete", + "otherWidgetDescription": "Naraz zostáva aktívna iba jedna plocha konverzácie.", + "useHere": "Použiť asistenta v tomto widgete" + } + }, + "beszel": { "error": { - "internalServerError": "" - } - }, - "bazarr": { - "name": "", - "description": "", - "episodes": "", - "movies": "", - "providers": "", - "status": "", - "option": { - "showMissingEpisodes": { - "label": "", - "description": "" - }, - "showMissingMovies": { - "label": "", - "description": "" - }, - "showProviderIssues": { - "label": "", - "description": "" - }, - "showHealthIssues": { - "label": "", - "description": "" - } - }, - "error": { - "internalServerError": "" - } - }, - "mediaMissing": { - "name": "", - "description": "", - "option": { - "showMissing": { - "label": "" - }, - "showQueued": { - "label": "" - }, - "pageSize": { - "label": "" - } - }, - "tab": { - "missing": "", - "queued": "" - }, - "type": { - "movie": "", - "episode": "" + "internalServerError": "K Beszelu sa nepodarilo pripojiť. Skontrolujte nastavenia integrácie." }, "empty": { - "missing": "", - "queued": "", - "noTabsEnabled": "" + "noSystems": "Nenašli sa žiadne systémy" }, - "timeLeft": "" - }, - "traefik": { - "name": "", - "description": "", - "option": { - "showTcp": { - "label": "" + "options": { + "statusFilter": { + "label": "Filter stavu" }, - "showUdp": { - "label": "" + "showCpu": { + "label": "Zobraziť CPU" }, - "showEntryPoints": { - "label": "" + "showMemory": { + "label": "Zobraziť pamäť" + }, + "showDisk": { + "label": "Zobraziť disk" + }, + "showGpu": { + "label": "Zobraziť GPU" + }, + "showLoadAvg": { + "label": "Zobraziť priemerné zaťaženie" + }, + "showNet": { + "label": "Zobraziť sieť" + }, + "showTemp": { + "label": "Zobraziť teplotu" + }, + "showBattery": { + "label": "Zobraziť batériu" + }, + "showServices": { + "label": "Zobraziť služby" + }, + "showUptime": { + "label": "Zobraziť dobu prevádzky" + }, + "showAgent": { + "label": "Zobraziť verziu agenta" } }, - "instances": "", - "versionUnknown": "", - "summary": { - "routers": "", - "entryPoints": "" - }, - "resource": { - "routers": "", - "services": "", - "middlewares": "" - }, - "status": { - "healthy": "", - "errors": "", - "warnings": "" - }, - "error": { - "internalServerError": "" + "metric": { + "system": "Systém", + "source": "Integrácia", + "hostname": "Hostname", + "cpuModel": "Model CPU", + "cores": "Jadrá", + "memoryTotal": "Celková pamäť", + "memory": "Pamäť", + "disk": "Disk", + "loadAvg": "Priemerné zaťaženie", + "net": "Sieť", + "temp": "Teplota", + "battery": "Batéria", + "uptime": "Doba prevádzky", + "agent": "Agent" } }, - "wud": { - "name": "What's Up Docker", - "description": "Zobrazuje, koľko sledovaných kontajnerov má k dispozícii aktualizácie.", - "title": "What's Up Docker", - "monitored": "Sledované", - "updatesAvailable": "{count, plural, one {# aktualizácia je k dispozícii} few {# aktualizácie sú k dispozícii} many {# aktualizácií je k dispozícii} other {# aktualizácie je k dispozícii}}", - "updateAvailable": "Dostupná aktualizácia", - "openReleaseNotes": "Otvorte poznámky k vydaniu", + "llamacpp": { + "name": "llama.cpp", + "description": "Zobrazte stav, načítaný model a rýchlosť generovania svojho lokálneho servera llama.cpp.", + "title": "llama.cpp", + "status": { + "unhealthy": "Nezdravé ({status})" + }, + "idle": "Nečinný", + "speedTooltip": { + "current": "Aktuálna rýchlosť generovania", + "average": "Priemerná rýchlosť generovania od spustenia", + "request": "Priemerná rýchlosť od začiatku tejto požiadavky" + }, + "busy": "{count, plural, one {Spracúva sa # požiadavka} few {Spracúvajú sa # požiadavky} many {Spracúva sa # požiadaviek} other {Spracúva sa # požiadaviek}}", + "modelInfo": { + "context": "Kontext", + "size": "Veľkosť súboru", + "parameters": "Parametre", + "model": "Model", + "quantization": "Kvantizácia" + }, + "stats": { + "tokensProcessed": "Spracované tokeny", + "contextUsage": "Využitie kontextu / KV", + "cacheHitRate": "Miera zásahov do vyrovnávacej pamäte výzvy", + "tokensGenerated": "Vygenerované tokeny" + }, + "error": { + "unreachable": "Server llama-server nie je dostupný" + }, + "unit": { + "speed": "{value} t/s", + "parameters": "{value} B", + "none": "—", + "speedShort": "t/s" + }, "option": { "showTitle": { "label": "Zobraziť názov" }, - "showRing": { - "label": "Zobraziť prstenec aktualizácie" + "showModelInfo": { + "label": "Zobraziť informácie o modeli" }, - "layout": { - "label": "Rozloženie", + "showContextUsage": { + "label": "Zobraziť využitie kontextu" + }, + "showCacheHitRate": { + "label": "Zobraziť mieru zásahov do vyrovnávacej pamäte" + }, + "showSpeedStats": { + "label": "Zobraziť štatistiky rýchlosti" + }, + "showRequests": { + "label": "Zobraziť zaťaženie požiadavkami" + }, + "showTokenStats": { + "label": "Zobraziť celkový počet tokenov" + }, + "showSpeculative": { + "label": "Zobraziť špekulatívne dekódovanie" + } + }, + "advanced": { + "promptSpeed": "Rýchlosť výzvy", + "avgSpeed": "Priemerné generovanie", + "requests": "Požiadavky", + "deferred": "Odložené", + "slots": "{processing}/{total} zaneprázdnených slotov", + "speculative": "Špekulatívne dekódovanie", + "avgPrompt": "Priemerná výzva", + "specDrafts": "Špek. koncepty", + "specAccepted": "Špek. prijaté tokeny", + "specDraftTokens": "Špek. konceptové tokeny" + } + }, + "stats": { + "name": "Statistiky", + "description": "Kombinujte integrácie do jedného konfigurovateľného widgetu štatistík.", + "configure": "Konfigurovať metriky", + "refresh": "Obnoviť štatistiky", + "empty": "Otvorte nastavenia widgetu, vyberte integrácie a potom pridajte metriky.", + "editorHelp": "Pridajte metriky z integrácií vybraných pre tento widget. Zmeny sa uložia spolu s nástenkou.", + "source": "Integrácia", + "metric": "Metrika", + "noMetrics": "Pre túto integráciu nie sú k dispozícii žiadne štatistiky", + "add": "Pridať metriku", + "label": "Vlastné označenie", + "hidden": "Skryté", + "compact": "Kompaktné čísla", + "moveUp": "Posunúť nahor", + "moveDown": "Posunúť nadol", + "remove": "Odstrániť metriku", + "loading": "Načítava sa…", + "unavailable": "Nedostupné", + "refreshFailed": "Obnovenie zlyhalo — zobrazujú sa uložené údaje", + "stale": "Uložené údaje — obnovte ich a aktualizujte", + "table": { + "value": "Hodnota", + "status": "Stav" + }, + "option": { + "table": { + "label": "Zobrazenie tabuľky" + }, + "rows": { + "label": "Kompaktné riadky" + }, + "showIcon": { + "label": "Zobraziť ikonu zdroja" + }, + "spacing": { + "label": "Rozostupy", "option": { - "horizontal": { - "label": "Horizontálne" + "xs": { + "label": "Kompaktné" }, - "vertical": { - "label": "Vertikálne" + "sm": { + "label": "Pohodlné" + }, + "md": { + "label": "Priestranné" } } }, - "showUpdateList": { - "label": "Zobraziť zoznam aktualizácií kontajnerov", - "description": "Uvádza každý sledovaný kontajner, ktorý má dostupnú aktualizáciu obrazu" + "entries": { + "label": "Metriky" + }, + "plain": { + "label": "Odstrániť pozadia kariet" } - } + }, + "fetchFailed": "Štatistiky sa nepodarilo načítať", + "viewOptions": "Prispôsobiť toto zobrazenie", + "moreMetrics": "{count} ďalších v rozšírenom zobrazení", + "localHelp": "Rozloženie, formátovanie a viditeľnosť platia iba pre toto zobrazenie. Zdieľané nastavenia nástenky zostávajú nezmenené.", + "plain": "Odstrániť pozadia kariet", + "resetView": "Obnoviť zobrazenie", + "allHidden": "V tomto zobrazení sú skryté všetky metriky. Obnovte ich pomocou možnosti Prispôsobiť toto zobrazenie." + }, + "wazuh": { + "target": { + "api": "API servera Wazuh", + "indexer": "Indexovač Wazuh", + "wazuh": "Wazuh" + }, + "severity": { + "low": "Nízka", + "medium": "Stredné", + "high": "Vysoká", + "critical": "Kritická" + }, + "error": { + "unauthorized": { + "title": "{target} odmietol poverenia", + "description": "Skontrolujte používateľské meno a heslo uložené v integrácii Wazuh. API servera (port 55000) a indexovač (port 9200) používajú samostatných používateľov." + }, + "certificate": { + "title": "Certifikát {target} nie je dôveryhodný", + "description": "Wazuh predvolene používa certifikát s vlastným podpisom. Spustite na integrácii „Test pripojenia“ a dôverujte certifikátu alebo pridajte svoju CA v časti Nastavenia → Certifikáty." + }, + "unreachable": { + "title": "{target} nie je dostupný", + "description": "Hostiteľ odmietol alebo prerušil pripojenie. Skontrolujte URL adresu, port a firewall. Indexovač v predvolenej inštalácii všetko v jednom počúva iba na localhoste." + }, + "timeout": { + "title": "Časový limit pre {target} vypršal", + "description": "Do 15 sekúnd neprišla žiadna odpoveď. Služba môže byť preťažená alebo adresa môže byť nesprávna." + }, + "status": { + "title": "{target} vrátil chybu", + "description": "Požiadavka zlyhala so stavom HTTP {status}." + }, + "invalidResponse": { + "title": "Neočakávaná odpoveď od {target}", + "description": "Skontrolujte, či URL adresa smeruje na API servera Wazuh alebo indexovač, nie na nástenku." + }, + "indexerRequired": { + "title": "Vyžadujú sa poverenia indexovača Wazuh", + "description": "Upozornenia, zraniteľnosti a udalosti integrity súborov sa čítajú z indexovača Wazuh. Pridajte do integrácie URL adresu indexovača, používateľské meno a heslo." + }, + "unknown": { + "title": "Údaje z {target} sa nepodarilo načítať", + "description": "Podrobnosti nájdete v protokoloch Homarru." + } + }, + "range": { + "1h": "1 h", + "24h": "24 h", + "7d": "7 dní", + "30d": "30 dní" + }, + "levelTooltip": "Úroveň pravidla {level} ({severity})" + }, + "wazuhAgents": { + "name": "Agenti Wazuh", + "description": "Zoraditeľný zoznam agentov Wazuh so stavom, operačným systémom, verziou a posledným signálom keepalive", + "option": { + "statusFilter": { + "label": "Zobraziť agentov" + }, + "sortBy": { + "label": "Zoradiť podľa" + }, + "showVersion": { + "label": "Zobraziť stĺpec verzie Wazuh" + }, + "showGroups": { + "label": "Zobraziť stĺpec skupín" + } + }, + "title": "Agenti", + "total": "{count} agentov", + "status": { + "active": "Aktívny", + "disconnected": "Odpojené", + "neverConnected": "Nikdy nepripojené", + "pending": "Čakajúce" + }, + "statusLabel": { + "active": "Aktívny", + "disconnected": "Odpojené", + "never_connected": "Nikdy nepripojené", + "pending": "Čakajúce", + "unknown": "Neznámy" + }, + "live": "Naživo", + "snapshot": "Snímka stará {age}", + "snapshotHint": "Načítané zo snímky agentov nástenky Wazuh (wazuh-monitoring) vytvorenej o {time}. Ak chcete živé údaje, pridajte poverenia API servera.", + "staleSnapshot": "Snímka agentov z {time} je zastaraná. Skontrolujte, či je spustená úloha monitorovania nástenky Wazuh, alebo pridajte poverenia API servera.", + "noDisconnected": "Všetci agenti sú pripojení", + "empty": "Tomuto filtru nevyhovujú žiadni agenti", + "column": { + "status": "Stav", + "name": "Názov úlohy", + "ip": "IP", + "os": "OS", + "version": "Verzia", + "lastKeepAlive": "Keepalive", + "groups": "Skupiny" + }, + "outdated": "Staršia než najnovšia verzia agenta ({version})" + }, + "wazuhAlerts": { + "name": "Kanál upozornení Wazuh", + "description": "Nedávne upozornenia Wazuh s úrovňou, technikami MITRE ATT&CK, agentom a zdrojovou IP adresou", + "option": { + "minLevel": { + "label": "Minimálna úroveň pravidla", + "description": "Úrovne Wazuh: 0 – 6 nízka, 7 – 11 stredná, 12 – 14 vysoká, 15+ kritická" + }, + "hours": { + "label": "Časové okno (hodiny)" + }, + "limit": { + "label": "Počet upozornení" + }, + "showMitre": { + "label": "Zobraziť techniky MITRE ATT&CK" + }, + "showAgent": { + "label": "Zobraziť agenta" + }, + "showSourceIp": { + "label": "Zobraziť zdrojovú IP" + }, + "showRuleId": { + "label": "Zobraziť ID pravidla" + } + }, + "title": "Upozornenia · úroveň {level}+ · {hours} h", + "empty": "Na tejto úrovni nie sú žiadne upozornenia. Všetko je pokojné.", + "rule": "Pravidlo {id}", + "openInDashboard": "Otvoriť toto upozornenie na nástenke Wazuh" + }, + "wazuhSummary": { + "name": "Závažnosť upozornení Wazuh", + "description": "Rozdelenie závažnosti upozornení s trendom v porovnaní s predchádzajúcim obdobím", + "option": { + "range": { + "label": "Časový rozsah" + }, + "showTrend": { + "label": "Zobraziť trend v porovnaní s predchádzajúcim obdobím" + }, + "showFooter": { + "label": "Zobraziť pätu" + } + }, + "title": "Závažnosť upozornení · {range}", + "alerts": "upozornení", + "none": "Žiadne upozornenia", + "trend": { + "new": "nový", + "tooltip": "Predchádzajúce obdobie: {previous}" + }, + "previous": "Predchádzajúce {range}: {count}", + "maxLevel": "Max. úroveň {level}", + "health": "Stav indexovača: {status}", + "manager": "Správca {version}" + }, + "wazuhTimeline": { + "name": "Časová os upozornení Wazuh", + "description": "Skladaný graf upozornení Wazuh v čase podľa závažnosti", + "option": { + "range": { + "label": "Časový rozsah" + }, + "interval": { + "label": "Časový interval" + }, + "chartType": { + "label": "Typ grafu" + }, + "yScale": { + "label": "Mierka osi Y", + "description": "Odmocninová mierka udržiava vysoké a kritické upozornenia viditeľné vedľa tisícov nízkych" + }, + "minLevel": { + "label": "Minimálna úroveň pravidla" + }, + "showLegend": { + "label": "Zobraziť legendu so súčtami" + } + }, + "title": "Časová os upozornení · {range}", + "total": "{count} upozornení", + "interval": "za {interval}" + }, + "wazuhTopList": { + "name": "Najčastejšie položky Wazuh", + "description": "Najčastejšie pravidlá, agenti, zdrojové IP adresy alebo taktiky a techniky MITRE ATT&CK podľa počtu upozornení", + "option": { + "kind": { + "label": "Poradie" + }, + "range": { + "label": "Časový rozsah" + }, + "limit": { + "label": "Počet položiek" + }, + "minLevel": { + "label": "Minimálna úroveň pravidla" + }, + "showBars": { + "label": "Zobraziť stĺpce" + } + }, + "title": { + "rules": "Najčastejšie pravidlá · {range}", + "agents": "Najčastejší agenti · {range}", + "sourceIps": "Najčastejšie zdrojové IP adresy · {range}", + "mitreTactics": "Taktiky MITRE · {range}", + "mitreTechniques": "Techniky MITRE · {range}" + }, + "empty": { + "rules": "V tomto období neboli zaznamenané žiadne upozornenia", + "agents": "V tomto období neboli zaznamenané žiadne upozornenia", + "sourceIps": "V tomto období neboli zaznamenané žiadne upozornenia so zdrojovou IP adresou", + "mitreTactics": "V tomto období neboli zaznamenané žiadne upozornenia priradené k MITRE ATT&CK", + "mitreTechniques": "V tomto období neboli zaznamenané žiadne upozornenia priradené k MITRE ATT&CK" + }, + "totalTooltip": "{count} zodpovedajúcich upozornení", + "private": "Lokálna sieť", + "public": "Verejné", + "agents": "Zaznamenané na {count} agentoch", + "others": "{count} ďalších upozornení v ostatných položkách" + }, + "wazuhVulnerabilities": { + "name": "Zraniteľnosti Wazuh", + "description": "Počty zraniteľností, najčastejšie CVE a najzraniteľnejší agenti", + "option": { + "cveOrder": { + "label": "Zoradiť CVE podľa" + }, + "minSeverity": { + "label": "Závažnosť CVE" + }, + "cveLimit": { + "label": "Počet CVE" + }, + "agentLimit": { + "label": "Počet agentov" + }, + "showAgents": { + "label": "Zobraziť najzraniteľnejších agentov" + } + }, + "title": "Zraniteľnosti", + "topCves": "Najčastejšie CVE", + "score": "Skóre", + "agentsShort": "Agenti", + "topAgents": "Najzraniteľnejší agenti", + "criticalHigh": "Kritické / vysoké", + "totalTooltip": "{count} nálezov na {agents} agentoch", + "affected": "{count} agentov", + "empty": "Neboli zistené žiadne zraniteľnosti", + "distribution": "Rozdelenie podľa závažnosti. {unscored} nálezov bez skóre sa nezobrazuje.", + "worst": "Najhoršie: {id} ({score}) na {agents} agentoch" + }, + "wazuhFim": { + "name": "Integrita súborov Wazuh", + "description": "Nedávne udalosti monitorovania integrity súborov (syscheck)", + "option": { + "range": { + "label": "Časový rozsah" + }, + "event": { + "label": "Udalosti" + }, + "limit": { + "label": "Počet udalostí" + }, + "includeRegistry": { + "label": "Zahrnúť udalosti registra Windows" + } + }, + "title": "Integrita súborov · {range}", + "event": { + "added": "Dátum pridania", + "modified": "Upravené", + "deleted": "Odstránené", + "unknown": "Zmenené" + }, + "empty": "V tomto období neboli zaznamenané žiadne udalosti integrity súborov", + "user": "používateľom {user}", + "registry": "Register" + }, + "wazuhAuthFailures": { + "name": "Zlyhania overenia Wazuh", + "description": "Neúspešné prihlásenia a upozornenia na útoky hrubou silou podľa agenta s hodinovými grafmi", + "option": { + "hours": { + "label": "Časové okno (hodiny)" + }, + "limit": { + "label": "Počet agentov" + }, + "showSourceIps": { + "label": "Zobraziť najčastejšie zdrojové IP adresy" + } + }, + "title": "Zlyhania overenia · {hours} h", + "seriesTooltip": "Všetci agenti za posledných {hours} h", + "peak": "Maximum {count}/interval", + "empty": "V tomto období neboli zaznamenané žiadne neúspešné prihlásenia", + "failed": "Neúspešné prihlásenia", + "failedHint": "Jednotlivé zlyhania overenia (sshd, PAM, prihlásenie do Windows, neplatní používatelia)", + "bruteForce": "Útok hrubou silou", + "bruteForceHint": "Korelované pravidlá útokov hrubou silou (viacero zlyhaní v krátkom období, MITRE T1110)", + "sourceIps": "Zdrojové IP adresy", + "ipTooltip": "{ip}: {count} zlyhaní", + "bruteForceCount": "{count} útokov hrubou silou" } }, "widgetPreview": { @@ -4004,7 +5732,76 @@ } }, "board": { + "emptyState": { + "title": "Vytvorte si prvý prehľad", + "description": "Pridajte widget alebo aplikáciu, prípadne pripojte službu a používajte jej údaje na tejto doske.", + "addWidget": "Pridať widget", + "addApp": "Pridajte aplikáciu", + "connectService": "Pripojiť službu" + }, + "setupChecklist": { + "title": "Urobte túto dosku užitočnou", + "description": "Pokračujte tam, kde ste skončili. Priebeh vychádza z obsahu, ktorý sa už na tejto doske nachádza.", + "collapse": "Zbaliť kontrolný zoznam nastavenia", + "dismiss": "", + "resume": "Pokračovať v nastavení ({completed}/{total})", + "progress": "Priebeh nastavenia dosky", + "step": { + "content": { + "label": "Pridať užitočný obsah", + "description": "Vyberte widget a nakonfigurujte ho pred jeho umiestnením." + }, + "app": { + "label": "Pripnúť aplikáciu", + "description": "Majte službu alebo nástroj dostupný na jedno kliknutie z tejto dosky." + }, + "service": { + "label": "Pripojiť službu", + "description": "Sprístupnite živé údaje a akcie pre kompatibilné widgety.", + "permissionDescription": "Správca môže pripojiť službu a sprístupniť živé údaje.", + "action": "Pripojiť" + } + } + }, "action": { + "addContent": "Pridať obsah dosky", + "settings": "Nastavenia dosky", + "switch": "Prepnúť dosku", + "switcher": { + "title": "Prepnúť dosku", + "search": { + "empty": "Žiadna doska nezodpovedá vyhľadávaniu „{search}“." + }, + "results": "Dostupné dosky", + "preview": "Ukážka dosky {name} s {count} položkami", + "currentHidden": "Aktuálna doska: {name}", + "keyboard": { + "navigate": "Navigovať", + "open": "Otvoriť", + "instructions": "Písaním filtrujte dosky. Pomocou šípok prechádzajte výsledkami a klávesom Enter otvorte dosku." + }, + "empty": { + "title": "Žiadne ďalšie dosky", + "description": "Nemáte prístup k žiadnym ďalším doskám." + }, + "error": "Dosky sa nepodarilo načítať." + }, + "create": { + "availability": { + "checking": "Kontroluje sa dostupnosť…", + "available": "{name} je k dispozícii" + }, + "notification": { + "success": { + "title": "Doska bola vytvorená", + "message": "Doska {name} bola vytvorená" + }, + "error": { + "title": "Dosku sa nepodarilo vytvoriť", + "message": "Dosku {name} sa nepodarilo vytvoriť" + } + } + }, "duplicate": { "title": "Duplikovať dosku", "message": "Tým sa duplikuje nástenka {name} s celým jej obsahom. Ak widgety odkazujú na integrácie, ktoré nemáte povolené používať, budú odstránené.", @@ -4020,14 +5817,19 @@ } }, "edit": { + "enter": "Upraviť dosku", + "save": "Uložiť dosku", + "exit": "Ukončiť režim úprav", "notification": { "success": { - "title": "Zmeny boli úspešne použité", "message": "Doska bola úspešne uložená" }, "error": { - "title": "Nie je možné použiť zmeny", "message": "Tabuľu sa nepodarilo uložiť" + }, + "loadError": { + "title": "Úpravy sa nepodarilo spustiť", + "message": "Editor dosky sa nepodarilo načítať. Váš prehľad je naďalej dostupný v režime zobrazenia." } }, "confirmLeave": { @@ -4035,62 +5837,6 @@ "message": "Máte neuložené zmeny. Naozaj chcete odísť?" } }, - "oldImport": { - "label": "Import z homarru pred 1.0.0", - "notification": { - "success": { - "title": "Import úspešný", - "message": "Doska bola úspešne importovaná" - }, - "error": { - "title": "Import zlyhal.", - "message": "Dosku sa nepodarilo importovať, ďalšie podrobnosti nájdete v záznamoch" - } - }, - "form": { - "file": { - "label": "Vyberte súbor JSON", - "invalidError": "Neplatný konfiguračný súbor" - }, - "apps": { - "label": "Aplikácie", - "avoidDuplicates": { - "label": "Vyhnite sa duplikátom", - "description": "Ignoruje aplikácie, v ktorých už existuje aplikácia s rovnakým href" - }, - "onlyImportApps": { - "label": "Importujte iba aplikácie", - "description": "Pridá len aplikácie, dosku je potrebné vytvoriť znova ručne" - } - }, - "name": { - "label": "Názov dosky" - }, - "screenSize": { - "label": "Veľkosť obrazovky", - "description": "Vo verziách pred 1.0 existovali tri rôzne režimy, takže ste si mohli vybrať množstvo stĺpcov pre každú veľkosť obrazovky.", - "option": { - "sm": "Malé", - "md": "Stredné", - "lg": "Veľké" - } - }, - "sidebarBehavior": { - "label": "Správanie bočného panela", - "description": "Bočné panely boli odstránené vo verzii 1.0, môžete si vybrať, čo sa má stať s položkami v nich.", - "option": { - "lastSection": { - "label": "Posledná sekcia", - "description": "Pod poslednou sekciou sa zobrazí bočný panel" - }, - "removeItems": { - "label": "Odstrániť položky", - "description": "Položky na bočnom paneli budú odstránené" - } - } - } - } - }, "quickCreateApp": { "modal": { "title": "Vytvorte aplikáciu za chodu", @@ -4098,6 +5844,12 @@ } } }, + "landmark": { + "canvas": "Plátno prehľadu", + "leftRail": "Ľavý panel prehľadu", + "rightRail": "Pravý panel prehľadu", + "items": "Položky prehľadu" + }, "field": { "pageTitle": { "label": "Názov stránky" @@ -4167,7 +5919,8 @@ } }, "primaryColor": { - "label": "Hlavná farba" + "label": "Hlavná farba", + "locked": "Správca zachováva farbu značky inštancie na každej doske." }, "secondaryColor": { "label": "Sekundárna farba" @@ -4207,9 +5960,6 @@ "xl": "Veľmi veľké" } }, - "name": { - "label": "Názov" - }, "isPublic": { "label": "Verejné", "description": "Verejné tabule sú prístupné každému, dokonca aj bez účtu." @@ -4229,9 +5979,44 @@ "title": "Rozloženie", "responsive": { "title": "Responzívne rozloženia", + "description": "Každé rozloženie má vlastné pozície a veľkosti widgetov. Mobilné a základné rozloženie sú vždy dostupné; pri ďalších bodoch zlomu môžete pridať vlastné rozloženia.", "action": { "add": "Pridaj Layout" } + }, + "role": { + "mobile": "Mobilná", + "base": "Základné", + "custom": "Vlastné" + }, + "custom": { + "defaultName": "Vlastné rozloženie" + }, + "mobile": { + "breakpointDescription": "Mobilné rozloženie sa vždy používa od 0 px po nasledujúci bod zlomu rozloženia." + }, + "preview": { + "columns": "stĺpce", + "empty": "Toto rozloženie je prázdne", + "dynamicSection": "Dynamická sekcia", + "editorWidthLabel": "{layoutName} · {width} px" + }, + "reset": { + "action": "Obnoviť zo základného", + "confirm": { + "title": "Obnoviť {layoutName}?", + "message": "Týmto sa každá uložená pozícia a veľkosť v tomto rozložení nahradí novým rozložením vygenerovaným zo základného rozloženia. Túto akciu nemožno vrátiť späť." + } + }, + "edit": { + "action": "Upraviť rozloženie", + "saveAndEdit": "Uložiť a upraviť", + "save": "Uložiť rozloženie", + "cancel": { + "action": "Zrušiť úpravu rozloženia", + "title": "Zahodiť zmeny rozloženia?", + "message": "Neuložené zmeny tohto rozloženia sa zahodia." + } } }, "background": { @@ -4268,10 +6053,7 @@ "rename": { "label": "Premenovať tabuľu", "description": "Zmenou názvu sa prerušia všetky odkazy na túto nástenku.", - "button": "Zmeniť názov", - "modal": { - "title": "Premenovať tabuľu" - } + "button": "Zmeniť názov" }, "visibility": { "label": "Zmena viditeľnosti dosky", @@ -4295,9 +6077,7 @@ } }, "delete": { - "label": "Odstrániť túto nástenku", "description": "Keď odstránite nástenku, už niet cesty späť. Buďte si istí.", - "button": "Odstrániť túto nástenku", "confirm": { "title": "Odstrániť dosku", "description": "Naozaj chcete odstrániť túto nástenku? Tým sa natrvalo odstráni nástenka a všetok jej obsah." @@ -4342,28 +6122,41 @@ }, "layout": { "field": { - "name": { - "label": "Názov" - }, "columnCount": { "label": "Počet stĺpcov" }, "breakpoint": { "label": "Bod prerušenia", "description": "Rozloženie sa použije na všetkých obrazovkách väčších ako tento bod prerušenia až do ďalšieho väčšieho bodu prerušenia." + }, + "gutters": { + "label": "Pevné bočné panely", + "description": "Vyhraďte až tri stĺpce prehľadu na každej strane. Zvyšné plátno sa automaticky preusporiada.", + "left": { + "label": "Ľavý bočný panel", + "description": "Táto oblasť zostane viditeľná pri posúvaní prehľadu.", + "thumbLabel": "Šírka ľavého bočného panela" + }, + "right": { + "label": "Pravý bočný panel", + "description": "Táto oblasť zostane viditeľná pri posúvaní prehľadu.", + "thumbLabel": "Šírka pravého bočného panela" + }, + "width": { + "label": "Šírka v stĺpcoch" + }, + "preview": { + "label": "Ukážka rozloženia prehľadu" + } } } }, "management": { "metaTitle": "Administrácia", - "title": { - "morning": "Dobré ráno, {username}", - "afternoon": "Dobré popoludnie, {username}", - "evening": "Dobrý večer, {username}" - }, "notFound": { "title": "Nenájdené", - "text": "Nepodarilo sa nájsť požadovaný zdroj" + "text": "Nepodarilo sa nájsť požadovaný zdroj", + "backToHome": "Späť na domovskú stránku správy" }, "error": { "title": "", @@ -4372,19 +6165,10 @@ }, "navbar": { "items": { - "workshop": "Workshop", "home": "Domovská stránka", - "boards": "Dosky", - "apps": "Aplikácie", - "integrations": "Integrácie", - "searchEngies": "Vyhľadávače", - "medias": "Médiá", "users": { - "label": "Používatelia", "items": { - "manage": "Spravovať", - "invites": "Pozvánky", - "groups": "Skupiny" + "manage": "Spravovať" } }, "tools": { @@ -4392,10 +6176,7 @@ "items": { "docker": "Docker", "kubernetes": "Kubernetes", - "logs": "Záznamy", "api": "API", - "certificates": "Certifikáty", - "tasks": "Úlohy", "backup": "Záloha" } }, @@ -4409,21 +6190,12 @@ "sourceCode": "Zdrojový kód" } }, - "about": "O aplikácii" + "about": "O aplikácii", + "assistant": "Asistent" } }, "page": { "home": { - "statistic": { - "board": "Dosky", - "user": "Používatelia", - "invite": "Pozvánky", - "integration": "Integrácie", - "app": "Aplikácie", - "group": "Skupiny", - "searchEngine": "", - "media": "" - }, "statisticLabel": { "boards": "Dosky", "resources": "Zdroje", @@ -4461,13 +6233,8 @@ "tooltip": "Táto tabuľa sa zobrazí ako vaša mobilná tabuľa" } }, - "duplicate": { - "label": "Duplikovať dosku" - }, "delete": { - "label": "Odstrániť natrvalo", "confirm": { - "title": "Odstrániť dosku", "description": "Naozaj chcete odstrániť nástenku {name} ?" } } @@ -4476,28 +6243,82 @@ "public": "Táto tabuľa je verejná", "private": "Táto tabuľa je súkromná" }, - "noResults": { - "title": "Zatiaľ žiadne dosky" + "preview": { + "label": "Ukážka rozloženia pre {name} s {count} položkami", + "unknownCreator": "Neznámy tvorca" }, - "modal": { - "createBoard": { - "field": { - "name": { - "label": "Názov" - } - } - } + "noResults": { + "title": "Zatiaľ žiadne dosky", + "description": "Vytvorte dosku na usporiadanie aplikácií a widgetov na jednom mieste." } }, "media": { "includeFromAllUsers": "Zahrnúť médiá od všetkých používateľov" }, "user": { - "back": "Späť k používateľom", "fieldsDisabledExternalProvider": "Niektoré polia sú zakázané, pretože ich spravuje externý poskytovateľ autentifikácie.", "setting": { "general": { "title": "Všeobecné", + "header": { + "title": "Editor hlavičky", + "badge": "Osobné", + "description": "Ovládacie prvky môžete presúvať kamkoľvek v riadku. Ľavá, stredová a pravá časť zostávajú pevné, zatiaľ čo ostatné prvky sa okolo nich presúvajú.", + "device": { + "desktop": "Počítač", + "mobile": "Mobilná" + }, + "zones": { + "left": "Vľavo", + "center": "Na stred", + "right": "Vpravo" + }, + "action": { + "hide": "Skryť hlavičku", + "show": "Zobraziť hlavičku", + "configure": "Presunúť alebo nakonfigurovať {item}", + "remove": "Odstrániť {item}", + "dropIntoZone": "Presunúť do sekcie {zone}" + }, + "preview": { + "board": "Ukážka prehľadu pre {name}", + "empty": "Nie je dostupné žiadne rozloženie prehľadu" + }, + "available": { + "title": "Dostupné ovládacie prvky", + "description": "Pridajte ovládací prvok a potom presuňte celé tlačidlo na požadované miesto vyššie.", + "requiredAlways": "Tento ovládací prvok je povinný, ale v hlavičke ho môžete presunúť kamkoľvek.", + "allAdded": "Všetky vstavané ovládacie prvky už máte v hlavičke.", + "add": "Pridajte {item}", + "boardShortcut": "Skratka dosky", + "chooseBoard": "Vybrať dosku" + }, + "configuration": { + "description": "Tento ovládací prvok zostáva rovnako veľký ako v aktívnej hlavičke.", + "searchDisplay": { + "input": "Panel vyhľadávania", + "icon": "Iba ikona" + }, + "logoDisplay": { + "logo": "Iba logo", + "logoAndText": "Logotyp + text" + } + }, + "items": { + "logo": "Logotyp", + "search": "Hladať", + "home": "Domáca doska", + "boardSwitcher": "Dosky", + "assistant": "Asistent", + "docker": "Docker", + "boardEdit": "Upraviť dosku", + "boardSettings": "Nastavenia dosky", + "settings": "Vaše nastavenia", + "themeToggle": "Prepnúť tému", + "user": "Účet", + "boardUnavailable": "Doska nie je k dispozícii" + } + }, "item": { "language": "Jazyk a región", "board": { @@ -4531,14 +6352,10 @@ }, "security": { "title": "Bezpečnosť" - }, - "board": { - "title": "Dosky" } }, "list": { - "metaTitle": "Spravovať používateľov", - "title": "Používatelia" + "metaTitle": "Spravovať používateľov" }, "edit": { "metaTitle": "Upraviť používateľa {username}" @@ -4592,9 +6409,6 @@ } }, "field": { - "id": { - "label": "ID" - }, "creator": { "label": "Autor" }, @@ -4618,10 +6432,7 @@ }, "setting": { "title": "Nastavenia", - "alert": "Nastavenia skupiny majú prioritu podľa poradia skupín v zozname. Najvyššie nastavenia prepíšu spodné nastavenia.", - "board": { - "title": "Dosky" - } + "alert": "Nastavenia skupiny majú prioritu podľa poradia skupín v zozname. Najvyššie nastavenia prepíšu spodné nastavenia." }, "members": { "title": "Členovia", @@ -4629,10 +6440,7 @@ "notFound": "Nenašli sa žiadni členovia" }, "permissions": { - "title": "Povolenia", - "form": { - "unsavedChanges": "Máš neuložené zmeny!" - } + "title": "Povolenia" } } }, @@ -4641,12 +6449,10 @@ "notification": { "success": { "message": "Nastavenie bolo uložené" - }, - "error": { - "message": "Nepodarilo sa uložiť nastavenia" } }, "section": { + "analyticsDocumentation": "Pozrite si, aké analytické údaje Homarr zhromažďuje", "analytics": { "title": "Analytika", "general": { @@ -4675,7 +6481,6 @@ } }, "board": { - "title": "Dosky", "homeBoard": { "label": "Globálna domovská nástenka", "mobileLabel": "Globálna mobilná doska", @@ -4694,7 +6499,6 @@ } }, "user": { - "title": "", "enableGravatar": { "label": "", "description": "" @@ -4710,12 +6514,86 @@ "appearance": { "title": "Vzhľad", "defaultColorScheme": { - "label": "Predvolená farebná schéma", + "label": "Predvolená farebná schéma" + } + }, + "branding": { + "title": "Značka inštancie", + "groups": { + "identity": "Identita", + "appearance": "Vzhľad", + "customCss": "Vlastné CSS", + "authentication": "Autentifikácia" + }, + "identity": { + "description": "Logo aplikácie je väčšia značka používaná v aplikácii, na prihlasovacích stránkach a v nainštalovaných aplikáciách. Ikona prehliadača (favicon) je malý štvorec používaný na kartách a v záložkách; ak je prázdna, použije sa logo aplikácie." + }, + "appName": { + "label": "Názov aplikácie" + }, + "greeting": { + "label": "Vlastný uvítací text" + }, + "logo": { + "label": "Logo aplikácie", + "placeholder": "/logo/logo.png" + }, + "favicon": { + "label": "Ikona prehliadača (favicon)", + "placeholder": "Používa logo aplikácie" + }, + "primaryColor": { + "label": "Hlavná farba" + }, + "secondaryColor": { + "label": "Sekundárna farba" + }, + "lockPrimaryColor": { + "label": "Použiť túto farbu na každej doske", + "description": "Zabraňuje farbám dosky nahradiť akcentovú farbu aplikácie." + }, + "signInBackground": { + "label": "Pozadie overenia", + "placeholder": "https://example.com/background.jpg" + }, + "signInOverlay": { + "label": "Prekrytie pozadia" + }, + "defaultRadius": { + "label": "Štýl rohov", "options": { - "auto": "Automaticky", - "light": "Svetlý", - "dark": "Tmavý" + "xs": "Tesné", + "sm": "Nenápadné", + "md": "Vyvážené", + "lg": "Zaoblené", + "xl": "Jemné" } + }, + "customCss": { + "label": "Globálne vlastné CSS", + "description": "Použije sa na každej stránke. Vlastné CSS dosky ho môže prepísať." + }, + "authVisibility": { + "description": "Vyberte, čo sa zobrazí na každej overovacej stránke.", + "appName": "Názov aplikácie", + "logo": "Logo aplikácie", + "greeting": "Uvítací text" + }, + "summary": { + "title": "Aktuálna značka", + "cornerStyle": "Štýl rohov", + "palette": "Paleta", + "backgroundConfigured": "Vlastné pozadie · prekrytie {overlay} %", + "backgroundDefault": "Predvolené pozadie", + "greetingConfigured": "Vlastný uvítací text", + "greetingDefault": "Predvolený uvítací text", + "boardColorLocked": "Farba dosky uzamknutá", + "boardColorFlexible": "Farby dosky povolené", + "appName": "Názov úlohy", + "logo": "Logotyp", + "greeting": "Uvítací text", + "on": "Zapnuté", + "off": "Vypnuté" } }, "culture": { @@ -4723,12 +6601,177 @@ "defaultLocale": { "label": "Predvolený jazyk" } + }, + "assistant": { + "loading": "Načítava sa konfigurácia asistenta", + "title": "Asistent", + "description": "Pripojte koncový bod modelu kompatibilný s OpenAI pre asistenta platného pre celú inštanciu.", + "security": { + "description": "Kľúče API a ďalšie hodnoty hlavičiek sú v databáze Homarr zašifrované. Nikdy sa neposielajú do prehliadačov. Požiadavky na model sa odosielajú priamo zo servera Homarr na nakonfigurovaný koncový bod." + }, + "overview": { + "connectionReady": "Pripojenie pripravené", + "unsavedChanges": "Neuložené zmeny", + "setupRequired": "Vyžaduje sa nastavenie", + "disabled": "Zakázané", + "noModel": "Nie je vybraný žiadny model" + }, + "connection": { + "endpointTitle": "Poskytovateľ a koncový bod", + "description": "Vyberte predvoľbu alebo pripojte ľubovoľnú službu, ktorá implementuje rozhranie OpenAI Chat Completions API.", + "save": "Uložiť pripojenie poskytovateľa" + }, + "credentials": { + "title": "Prihlasovacie údaje", + "description": "Pridajte tajné údaje, ktoré tento koncový bod potrebuje. Uložené hodnoty zostávajú zašifrované a nemožno ich spätne prečítať.", + "required": "Kľúč je povinný", + "optional": "Kľúč je voliteľný", + "workshop": "Prihlásenie do GitHubu podľa používateľa" + }, + "provider": { + "title": "Poskytovateľ", + "groups": { + "free": "Bezplatné s Homarr", + "hosted": "Hostovaní poskytovatelia", + "local": "Lokálni poskytovatelia", + "custom": "Vlastné" + }, + "options": { + "homarr": { + "description": "Obmedzený počet použití asistenta je každý deň bezplatný a hradí ho tím Homarr. Prihláste sa do Community Workshopu, aby ste mohli využívať svoj limit." + }, + "openrouter": { + "description": "Smerovanie hostovaných modelov s rozsiahlym katalógom modelov podporujúcich nástroje." + }, + "openai": { + "description": "OpenAI Chat Completions prostredníctvom oficiálneho koncového bodu API." + }, + "anthropic": { + "description": "Claude prostredníctvom koncového bodu kompatibility OpenAI SDK od spoločnosti Anthropic." + }, + "google-gemini": { + "description": "Gemini prostredníctvom koncového bodu API kompatibilného s OpenAI od spoločnosti Google." + }, + "xai": { + "description": "Modely Grok prostredníctvom API kompatibilného s OpenAI od spoločnosti xAI." + }, + "groq": { + "description": "Rýchle hostované inferencie prostredníctvom API kompatibilného s OpenAI od spoločnosti Groq." + }, + "mistral": { + "description": "Modely Mistral prostredníctvom oficiálneho API." + }, + "deepseek": { + "description": "Modely DeepSeek prostredníctvom jeho API kompatibilného s OpenAI." + }, + "together": { + "description": "Hostované otvorené modely prostredníctvom API kompatibilného s OpenAI od spoločnosti Together." + }, + "ollama": { + "description": "Lokálny alebo sieťový server Ollama používajúci API kompatibilné s OpenAI." + }, + "lm-studio": { + "description": "Lokálny server LM Studio so zapnutou kompatibilitou s OpenAI." + }, + "llama-cpp": { + "description": "Lokálny alebo sieťový server llama.cpp používajúci API kompatibilné s OpenAI." + }, + "custom": { + "label": "Vlastný koncový bod", + "description": "Akýkoľvek iný koncový bod kompatibilný s OpenAI Chat Completions." + } + }, + "homarrAuth": { + "title": "Zahrnuté bezplatné denné použitia asistenta", + "description": "Kľúč API nie je potrebný. Tím Homarr za vás každý deň hradí obmedzený počet použití asistenta. Prihláste sa do Community Workshopu, aby váš limit zostal oddelený." + } + }, + "baseUrl": { + "title": "Základná adresa URL API", + "description": "Zahrňte predponu API, zvyčajne /v1. V kontajneroch localhost odkazuje na kontajner Homarr." + }, + "apiKey": { + "title": "Kľúč API", + "required": "Tento poskytovateľ ho vyžaduje. Hodnota je zašifrovaná a možno do nej iba zapisovať.", + "optional": "Voliteľné pre lokálne koncové body. Ak služba nevyžaduje overenie nosičom, ponechajte pole prázdne.", + "placeholder": "Zadajte kľúč API", + "savedTitle": "Zašifrovaný kľúč API uložený", + "savedDescription": "Homarr môže tento kľúč používať, ale nemôže zobraziť ani obnoviť jeho hodnotu.", + "remove": "Odstrániť uložený kľúč API", + "removeFlow": { + "title": "Odstrániť uložený kľúč API?", + "description": "Tento poskytovateľ vyžaduje kľúč API. Jeho odstránenie môže zastaviť zisťovanie modelov a odpovede asistenta, kým sa neuloží iný kľúč.", + "optionalDescription": "Po odstránení tohto kľúča koncový bod prestane prijímať overenie nosičom. Potvrďte, že prijíma neoverené požiadavky alebo používa inú uloženú hlavičku.", + "cancel": "Ponechať uložený kľúč", + "confirm": "Odstrániť kľúč API" + } + }, + "headers": { + "title": "Ďalšie hlavičky požiadavky", + "description": "Voliteľné hlavičky na overenie alebo smerovanie. Hodnoty hlavičiek sú zašifrované a možno do nich iba zapisovať.", + "add": "Pridať hlavičku", + "name": "Názov hlavičky", + "value": "Hodnota hlavičky", + "valuePlaceholder": "Tajná hodnota alebo hodnota smerovania", + "remove": "Odstrániť hlavičku", + "configured": "Ďalšie zašifrované hlavičky sú nakonfigurované. Pridaním hlavičiek sa nahradí celá uložená množina.", + "empty": "Pre tohto poskytovateľa nie sú uložené žiadne ďalšie hlavičky.", + "savedBadge": "Hlavičky uložené", + "pendingRemoval": "Čaká sa na odstránenie", + "clear": "Pri ukladaní odstrániť uložené hlavičky", + "keep": "Ponechať uložené hlavičky" + }, + "model": { + "title": "Model", + "description": "Vyberte nájdený model alebo zadajte presné ID modelu koncového bodu.", + "placeholder": "ID modelu", + "refresh": "Obnoviť modely", + "chooseModel": "Vyberte model používaný pre nové konverzácie.", + "discoveryPath": "Cesta zisťovania modelov", + "discoveryPathDescription": "Pripojí sa k základnej adrese URL API. Ponechajte prázdne, ak chcete vypnúť zisťovanie a používať manuálne ID modelu.", + "manual": "Zadajte ID modelu manuálne alebo uložte pripojenie na vyhľadanie modelov.", + "manualFallback": "Zisťovanie nie je dostupné. Stále môžete manuálne zadať ID modelu.", + "saveConnectionFirst": "Pred výberom modelu uložte pripojenie poskytovateľa.", + "discovering": "Obnovujú sa modely dostupné od tohto poskytovateľa…", + "discovered": "{count, plural, one {Nájdený # model. Podpora nástrojov závisí od vybraného koncového bodu a modelu.} few {Nájdené # modely. Podpora nástrojov závisí od vybraného koncového bodu a modelu.} many {Nájdených # modelov. Podpora nástrojov závisí od vybraného koncového bodu a modelu.} other {Nájdených # modelov. Podpora nástrojov závisí od vybraného koncového bodu a modelu.}}", + "discoveryFailed": "Zisťovanie modelov nebolo dokončené", + "context": "{count} kontextové okno", + "toolsConfirmed": "Inzerované nástroje", + "toolsUnknown": "Overiť podporu nástrojov" + }, + "serverTools": { + "title": "Nástroje servera", + "webSearch": { + "label": "Vyhľadávanie na webe", + "description": "Povoliť modelu vyhľadávať aktuálne informácie na webe prostredníctvom OpenRoutera. Používanie vyhľadávania účtuje OpenRouter samostatne.", + "proxyDescription": "Odoslať serverový nástroj webového vyhľadávania OpenRoutera na tento koncový bod. Povoľte to iba vtedy, keď vlastný koncový bod odovzdáva formát serverových nástrojov OpenRoutera, napríklad proxy Homarr Router.", + "limit": "Model rozhoduje, kedy vyhľadávať, s limitom 3 vyhľadávaní a 5 výsledkov na vyhľadávanie pre každú požiadavku." + } + }, + "enabled": { + "label": "Povoliť asistenta", + "description": "Zobrazí asistenta všetkým prihláseným používateľom. Existujúce oprávnenia Homarr sa naďalej uplatňujú pri každom volaní interného nástroja." + }, + "save": "Uložiť asistenta", + "notification": { + "connectionSaved": { + "title": "Pripojenie poskytovateľa uložené", + "message": "Koncový bod a zašifrované prihlasovacie údaje sú pripravené na výber modelu.", + "credentialsCleared": "Koncový bod sa zmenil, preto boli predchádzajúce prihlasovacie údaje vymazané. V prípade potreby pridajte prihlasovacie údaje pre nové umiestnenie." + }, + "saved": { + "title": "Nastavenia asistenta uložené", + "message": "Nový model a nastavenia dostupnosti sú aktívne." + }, + "error": { + "title": "Nastavenia asistenta sa nepodarilo uložiť" + } + } } } }, "tool": { "tasks": { - "title": "Úlohy", "status": { "idle": "Nečinný", "running": "Spustené", @@ -4746,6 +6789,11 @@ "label": "Pingy" } }, + "action": { + "run": "Spustiť {name} teraz", + "enable": "Povoliť {name}", + "disable": "Zakázať {name}" + }, "interval": { "seconds": "", "minutes": "", @@ -4761,13 +6809,7 @@ } } }, - "settings": { - "title": "" - }, "field": { - "name": { - "label": "" - }, "interval": { "label": "" }, @@ -4781,11 +6823,6 @@ "table": { "search": "" }, - "action": { - "refresh": { - "label": "" - } - }, "refresh": { "success": { "message": "" @@ -4819,7 +6856,6 @@ } }, "api": { - "title": "API", "modal": { "createApiToken": { "title": "Vytvorený token API", @@ -4845,7 +6881,6 @@ }, "table": { "header": { - "id": "ID", "createdBy": "Vytvoril/a", "actions": "Úkony" } @@ -4901,43 +6936,12 @@ "availableTools": { "title": "Dostupné nástroje", "description": "{count} nástrojov k dispozícii. Rozbaľte kategóriu, aby ste videli jednotlivé nástroje a ich popisy.", - "columnType": "Typ", - "columnName": "Nástroj", - "columnDescription": "Popis" - }, - "troubleshooting": { - "title": "Riešenie problémov", - "missingHeader": { - "title": "\"Chýbajúca hlavička ApiKey\"", - "description": "Váš klient neodosiela hlavičku {header}. Overte, či je sekcia {section} vo vašej konfigurácii MCP správna. Niektorí klienti vyžadujú reštart po zmenách konfigurácie." - }, - "invalidFormat": { - "title": "\"Neplatný formát ApiKey\"", - "description": "Uistite sa, že ste skopírovali celý API kľúč, nielen jeho časť." - }, - "invalidKey": { - "title": "\"Neplatný API kľúč\"", - "description": "ID kľúča sa nenašlo alebo je token nesprávny. API kľúče je možné zobraziť iba raz pri vytvorení. Ak ste ho stratili, odstráňte starý kľúč a vytvorte nový." - }, - "connectionRefused": { - "title": "Odmietnuté pripojenie / časový limit", - "description": "Uistite sa, že URL je dosiahnuteľné z vášho AI klienta. Ak Homarr beží za reverzným proxy alebo v Dockeri, použite externú URL (nie {localhost}). Overte, či je port správny (predvolený: 7575 pre Docker)." - }, - "toolsNotAppearing": { - "title": "Nástroje sa nezobrazujú", - "description": "Niektoré nástroje vyžadujú nakonfigurovanie špecifických integrácií (napr. Docker, Overseerr). Zoznam nástrojov závisí od toho, čo je k dispozícii vo vašej inštancii Homarr." + "filteredDescription": "{count} zodpovedajúcich nástrojov v rozšírených kategóriách.", + "search": "Vyhľadať nástroje", + "noResults": { + "title": "Vyhľadávaniu nezodpovedajú žiadne nástroje", + "description": "Vyhľadávaniu „{search}“ nezodpovedá žiadny nástroj MCP. Skúste priestor názvov, názov nástroja alebo popis." } - }, - "copy": "Kopírovať", - "oneClick": { - "title": "Nainštalovať jedným kliknutím", - "subtitle": "Používa OAuth – autentifikujte sa vo svojom prehliadači pri prvom použití", - "vsCode": "Nainštalovať do VS Code", - "cursor": "Nainštalovať do Cursor", - "copyUrl": "Kopírovať URL MCP", - "copied": "Skopírované!", - "copyHint": "Pre ChatGPT, Claude Code alebo akéhokoľvek klienta MCP", - "manualConfig": "Manuálna konfigurácia" } } } @@ -4954,47 +6958,12 @@ "title": "Export citlivých údajov", "warningTitle": "Tento export obsahuje celú vašu databázu.", "warningBody": "Záloha obsahuje všetkých používateľov, tajomstvá integrácií (šifrované), kľúče API, konfigurácie dosiek a údaje aplikácií. Exportovaný súbor bezpečne uložte a nezdieľajte ho.", - "typePrompt": "Napíšte \"{phrase}\" pre pokračovanie", - "submit": "Exportovať databázu", - "cancel": "Zrušiť" + "submit": "Exportovať databázu" } }, "import": { "title": "Obnoviť databázu", - "description": "Nahrajte predtým exportovanú zálohu ZIP na obnovenie databázy. Tým sa nahradí celá vaša databáza. Ak bola záloha vytvorená s iným šifrovacím kľúčom, tajomstvá budú automaticky znovu zašifrované.", - "warning": "Obnovením zálohy sa úplne nahradí vaša aktuálna databáza a reštartuje sa aplikácia. Túto akciu nie je možné vrátiť späť.", - "dropzone": { - "title": "Sem presuňte svoju zálohu ZIP alebo kliknutím prehliadajte", - "description": "Prijímajú sa iba súbory .zip zo zálohy SQLite Homarr" - }, - "changeFile": "Zmeniť súbor", - "button": "Obnoviť databázu", - "success": { - "title": "Obnovenie dokončené", - "message": "Databáza bola úspešne obnovená. Aplikácia sa reštartuje..." - }, - "error": "Import zlyhal" - }, - "preview": { - "title": "Obsah zálohy", - "exported": "Exportované {date}", - "loading": "Analyzuje sa súbor zálohy...", - "errorTitle": "Chyba ukážky", - "entity": "Entita", - "count": "Počet", - "boards": "Dosky", - "entities": { - "board": "Dosky", - "user": "Používatelia", - "app": "Aplikácie", - "integration": "Integrácie", - "item": "Miniaplikácie", - "media": "Médiá", - "search_engine": "Vyhľadávače" - }, - "analyzeError": "Nepodarilo sa analyzovať súbor zálohy", - "invalidMissingMetadata": "Neplatná záloha: chýba metadata.json", - "invalidMissingDb": "Neplatná záloha: chýba db.sqlite" + "description": "Nahrajte predtým exportovanú zálohu ZIP na obnovenie databázy. Tým sa nahradí celá vaša databáza. Ak bola záloha vytvorená s iným šifrovacím kľúčom, tajomstvá budú automaticky znovu zašifrované." }, "restore": { "dropzone": { @@ -5004,29 +6973,20 @@ "analyzing": "Analyzuje sa záloha...", "changeFile": "Zmeniť súbor", "continueToRestore": "Pokračovať na obnovenie", - "tryAgain": "Skúste znova", "analysisError": "Chyba analýzy", "preview": { "title": "Obsah zálohy", "exported": "Exportované {date}", "entity": "Entita", "count": "Počet", - "boards": "Dosky", "entities": { - "board": "Dosky", - "user": "Používatelia", - "app": "Aplikácie", - "integration": "Integrácie", - "item": "Miniaplikácie", - "media": "Médiá", - "search_engine": "Vyhľadávače" + "item": "Miniaplikácie" }, "migrationsApplied": "Použitá {count} migrácia", "migrationsAppliedPlural": "Použitých {count} migrácií", "migrationsOlderVersion": "Táto záloha pochádza zo staršej verzie Homarr. Bola použitá {count} migrácia schémy na jej aktualizáciu.", "migrationsOlderVersionPlural": "Táto záloha pochádza zo staršej verzie Homarr. Bolo použitých {count} migrácií schémy na jej aktualizáciu.", "migrationsUpToDate": "Databázová schéma je aktuálna (použitých {count} migrácií)", - "upToDate": "Aktuálny", "migrationsPending": "{count} čakajúcich" }, "migration": { @@ -5037,21 +6997,21 @@ "title": "Deštruktívna akcia", "warningTitle": "Týmto sa natrvalo nahradí celá vaša databáza.", "warningBody": "Všetky aktuálne dosky, používatelia, aplikácie, integrácie, nastavenia a relácie budú stratené. Túto akciu nie je možné vrátiť späť. Aplikácia sa po obnovení reštartuje.", - "typePrompt": "Napíšte \"{phrase}\" pre pokračovanie", - "cancel": "Zrušiť", "submit": "Obnoviť databázu" }, "progress": { "title": "Obnovuje sa databáza...", - "extracting": "Rozbaľuje sa archív zálohy", - "migrating": "Aplikujú sa databázové migrácie", - "encrypting": "Znova sa šifrujú tajomstvá integrácií", - "swapping": "Nahrádza sa databázový súbor", - "restarting": "Reštartuje sa server" + "restarting": "Reštartuje sa server", + "relogin": "Obnovenie databázy zneplatnilo vašu aktuálnu reláciu. Homarr vás po pripravení servera presmeruje na prihlásenie." }, "complete": { "title": "Obnovenie dokončené", - "message": "Databáza bola úspešne obnovená. Server sa reštartuje – o niekoľko sekúnd obnovte stránku." + "message": "Databáza bola úspešne obnovená. Server sa reštartuje – o niekoľko sekúnd obnovte stránku.", + "button": "Prihlásiť sa teraz" + }, + "timeout": { + "title": "Server sa nevrátil do režimu online", + "message": "Obnovenie databázy sa dokončilo, ale Homarr sa znova nepripravil. Zopakujte kontrolu pripojenia alebo túto stránku manuálne obnovte." }, "failed": { "title": "Obnovenie zlyhalo" @@ -5059,6 +7019,9 @@ "invalidMissingMetadata": "Neplatná záloha: chýba metadata.json", "invalidMissingDb": "Neplatná záloha: chýba db.sqlite", "analyzeError": "Nepodarilo sa analyzovať zálohu" + }, + "confirm": { + "typePrompt": "Ak chcete pokračovať, zadajte „{phrase}“" } } }, @@ -5093,7 +7056,11 @@ "toggleBoardEdit": "", "toggleColorScheme": "", "saveNotebook": "", - "openSpotlight": "" + "openSpotlight": "", + "openSpotlightApps": "Otvoriť vyhľadávanie aplikácií", + "openSpotlightAssistant": "Otvoriť režim asistenta", + "openSpotlightPreferences": "Otvoriť režim preferencií", + "openAssistant": "Otvoriť asistenta" }, "note": "" } @@ -5103,6 +7070,63 @@ }, "docker": { "title": "Kontajnery", + "reconciliation": { + "title": "Asistované nastavenie Dockeru", + "suggestions": "{count, plural, =0 {Žiadne návrhy} one {# návrh} few {# návrhy} many {# návrhov} other {# návrhov}}", + "attention": "{count} vyžaduje pozornosť", + "endpointUnavailable": "Niektoré služby sa nepodarilo skontrolovať, pretože tieto koncové body nie sú dostupné: {names}", + "empty": "Nenašli sa žiadne viditeľné služby Dockeru.", + "emptyFilter": "Tomuto zobrazeniu nezodpovedajú žiadne služby.", + "ambiguous": "Tejto službe by mohlo zodpovedať viac než jedna existujúca položka. Homarr automaticky nevyberie žiadnu.", + "filter": { + "attention": "Vyžaduje pozornosť", + "represented": "Už nastavené", + "all": "Všetky" + }, + "state": { + "newRecognized": "Pripravené na pripojenie", + "newApp": "Nová služba", + "represented": "Už zastúpené", + "linked": "Prepojené", + "moved": "Adresa zmenená" + }, + "url": { + "manual": "Zadať adresu manuálne" + }, + "health": { + "layer": { + "docker": "Docker", + "integrationConfiguration": "Integrácia", + "authentication": "Autentifikácia", + "apiRequest": "API", + "appRepresentation": "Aplikácia", + "widgetConfiguration": "Miniaplikácia", + "widgetQuery": "Dotaz widgetu" + }, + "status": { + "available": "K dispozícii", + "configured": "Nakonfigurované", + "linked": "Prepojené", + "missing": "Chýba", + "changed": "Zmenené", + "unused": "Nepoužíva sa", + "notApplicable": "Neuplatňuje sa", + "notObserved": "Nepozorované" + } + }, + "action": { + "review": "Prehľad", + "dismiss": "Zamietnuť", + "restoreDismissed": "Obnoviť zamietnuté ({count})", + "setupIntegration": "Nastaviť integráciu", + "reviewIntegration": "Skontrolovať integráciu", + "viewRepresentation": "Zobraziť nastavenie" + }, + "loadError": { + "title": "Asistenta nastavenia Dockeru sa nepodarilo načítať", + "message": "Informácie o službe Docker nie sú dostupné. Skúste to znova bez opustenia tejto stránky." + } + }, "table": { "updated": "Aktualizované {when}", "refresh": { @@ -5115,9 +7139,6 @@ "totalMemory": "" }, "field": { - "name": { - "label": "Názov" - }, "state": { "label": "Stav", "option": { @@ -5131,9 +7152,6 @@ } }, "stats": { - "cpu": { - "label": "Procesor" - }, "memory": { "label": "Pamäť" } @@ -5196,8 +7214,11 @@ } }, "remove": { - "label": "Odstrániť", "confirm": "", + "confirmation": { + "title": "{count, plural, one {Odstrániť # kontajner?} few {Odstrániť # kontajnery?} many {Odstrániť # kontajnerov?} other {Odstrániť # kontajnerov?}}", + "message": "{count, plural, one {Týmto sa natrvalo odstráni # kontajner: {names}} few {Týmto sa natrvalo odstránia # kontajnery: {names}} many {Týmto sa natrvalo odstráni # kontajnerov: {names}} other {Týmto sa natrvalo odstráni # kontajnerov: {names}}}" + }, "notification": { "success": { "title": "Kontajnery boli odstránené", @@ -5209,8 +7230,13 @@ } } }, + "result": { + "failure": { + "title": "Niektoré akcie kontajnerov zlyhali", + "message": "{total, plural, one {{failed} z # akcie zlyhala: {names}} few {{failed} z # akcií zlyhali: {names}} many {{failed} z # akcií zlyhalo: {names}} other {{failed} z # akcií zlyhalo: {names}}}" + } + }, "refresh": { - "label": "Obnoviť", "notification": { "success": { "title": "Obnovenie kontajnerov", @@ -5241,18 +7267,33 @@ }, "error": { "internalServerError": "Nepodarilo sa načítať kontajnery Docker", + "endpointUnavailable": "{count, plural, one {# koncový bod Dockeru nie je dostupný: {names}} few {# koncové body Dockeru nie sú dostupné: {names}} many {# koncových bodov Dockeru nie je dostupných: {names}} other {# koncových bodov Dockeru nie je dostupných: {names}}}", "noColumns": "" } }, "kubernetes": { + "context": { + "label": "Kontext Kubernetes", + "loadError": { + "title": "Kontexty Kubernetes sa nepodarilo načítať", + "message": "Informácie o kontexte nie sú dostupné. Skúste to znova bez opustenia tejto stránky." + }, + "status": { + "available": "K dispozícii", + "degraded": "Metriky nie sú dostupné", + "unavailable": "Nedostupné" + }, + "unavailable": "Tento kontext Kubernetes nie je možné dosiahnuť. Vyberte iný kontext alebo overte jeho prihlasovacie údaje a koncový bod.", + "metricsUnavailable": "Tento kontext je dostupný, ale Metrics Server nie je k dispozícii. Inventár zostáva dostupný bez aktuálneho využitia CPU a pamäte." + }, "cluster": { "title": "Hlavný panel klastra", "label": "Klaster", "providers": "Poskytovatelia", "version": "Verzia", - "architecture": "Architektúra", "capacity": { "title": "Kapacita", + "metricsUnavailable": "Metrics Server nie je k dispozícii. Inventár a rezervovaná kapacita zostávajú viditeľné, ale aktuálne využitie CPU a pamäte nemožno zobraziť.", "resource": { "reserved": "Rezervované", "used": "Použité" @@ -5271,38 +7312,10 @@ } }, "nodes": { - "label": "Uzly", "field": { - "name": { - "label": "Názov" - }, - "state": { - "label": "Stav", - "option": { - "ready": "Pripravený", - "NotReady": "Nepripravený" - } - }, - "cpu": { - "label": "Procesor" - }, - "memory": { - "label": "RAM" - }, - "pods": { - "label": "Pods" - }, - "operatingSystem": { - "label": "OS" - }, - "architecture": { - "label": "Architektúra" - }, + "metricsUnavailable": "Nedostupné", "kubernetesVersion": { "label": "Verzia Kubernetu" - }, - "creationTimestamp": { - "label": "Vytvorené" } }, "table": { @@ -5310,43 +7323,17 @@ } }, "namespaces": { - "label": "Menné priestory", - "field": { - "name": { - "label": "Názov" - }, - "state": { - "label": "Stav", - "option": { - "active": "Aktívny", - "terminating": "Ukončenie" - } - }, - "creationTimestamp": { - "label": "Vytvorené" - } - }, "table": { "search": "Vyhľadajte {count} priestory názvov" } }, "ingresses": { - "label": "Ingreses", "field": { - "name": { - "label": "Názov" - }, - "namespace": { - "label": "Menný priestor" - }, "className": { "label": "Názov triedy" }, "rulesAndPaths": { "label": "Pravidlá a cesty" - }, - "creationTimestamp": { - "label": "Vytvorené" } }, "table": { @@ -5354,17 +7341,7 @@ } }, "services": { - "label": "Služby", "field": { - "name": { - "label": "Názov" - }, - "namespace": { - "label": "Menný priestor" - }, - "type": { - "label": "Typ" - }, "ports": { "label": "Porty" }, @@ -5373,9 +7350,6 @@ }, "clusterIP": { "label": "IP klastra" - }, - "creationTimestamp": { - "label": "Vytvorené" } }, "table": { @@ -5383,25 +7357,12 @@ } }, "pods": { - "label": "Pods", "field": { - "name": { - "label": "Názov" - }, - "namespace": { - "label": "Menný priestor" - }, "image": { "label": "Obrázok" }, "applicationType": { "label": "Typ aplikácie" - }, - "status": { - "label": "Stav" - }, - "creationTimestamp": { - "label": "Vytvorené" } }, "table": { @@ -5409,51 +7370,17 @@ } }, "secrets": { - "label": "Tajomstvá", - "field": { - "name": { - "label": "Názov" - }, - "namespace": { - "label": "menný priestor" - }, - "type": { - "label": "typ" - }, - "creationTimestamp": { - "label": "Vytvorené" - } - }, "table": { "search": "Vyhľadajte {count} tajomstvá" } }, "configmaps": { - "label": "ConfigMaps", - "field": { - "name": { - "label": "Názov" - }, - "namespace": { - "label": "menný priestor" - }, - "creationTimestamp": { - "label": "Vytvorené" - } - }, "table": { "search": "Vyhľadajte {count} configMaps" } }, "volumes": { - "label": "Disky", "field": { - "name": { - "label": "Názov" - }, - "namespace": { - "label": "Menný priestor" - }, "accessModes": { "label": "Režimy prístupu" }, @@ -5468,12 +7395,6 @@ }, "volumeName": { "label": "Názov zväzku" - }, - "status": { - "label": "Stav" - }, - "creationTimestamp": { - "label": "Vytvorené" } }, "table": { @@ -5482,6 +7403,29 @@ }, "error": { "internalServerError": "Nepodarilo sa načítať údaje Kubernetes" + }, + "field": { + "name": { + "label": "Názov úlohy" + }, + "namespace": { + "label": "Menný priestor" + }, + "creationTimestamp": { + "label": "Vytvorené" + }, + "state": { + "label": "Stav práce" + }, + "status": { + "label": "Stav" + }, + "type": { + "label": "Typ Download klienta" + }, + "architecture": { + "label": "Architektúra" + } } }, "permission": { @@ -5515,71 +7459,27 @@ }, "navigationStructure": { "manage": { - "workshop": { - "label": "Workshop" - }, "label": "Spravovať", - "boards": { - "label": "Dosky" - }, - "integrations": { - "label": "Integrácie", + "custom-widgets": { "edit": { - "label": "Upraviť" + "flow": { + "label": "" + } }, - "new": { - "label": "Nový" - } - }, - "search-engines": { - "label": "Vyhľadávače", - "new": { - "label": "Nový" + "workshop": { + "label": "Dielňa" }, - "edit": { - "label": "Upraviť" - } - }, - "medias": { - "label": "Médiá" - }, - "apps": { - "label": "Aplikácie", - "new": { - "label": "Nový" - }, - "edit": { - "label": "Upraviť" + "publish": { + "label": "Publikovať do Workshopu" } }, "users": { - "label": "Používatelia", - "create": { - "label": "Vytvoriť" - }, "general": "Všeobecné", - "security": "Bezpečnosť", - "board": "Dosky", - "groups": { - "label": "Skupiny" - }, - "invites": { - "label": "Pozvánky" - } + "security": "Bezpečnosť" }, "tools": { "label": "Nástroje", - "tasks": { - "label": "" - }, - "docker": { - "label": "Docker", - "logs": { - "label": "Denníky" - } - }, "kubernetes": { - "label": "Kubernetes", "nodes": { "label": "Uzly" }, @@ -5605,11 +7505,7 @@ "label": "Disky" } }, - "logs": { - "label": "Záznamy" - }, "certificates": { - "label": "Certifikáty", "hostnames": { "label": "Názvy hostiteľov" } @@ -5620,12 +7516,60 @@ }, "about": { "label": "O aplikácii" + }, + "assistant": { + "label": "Asistent" } } }, "search": { "placeholder": "Hľadaj čokoľvek", "nothingFound": "Nič sa nenašlo", + "modePicker": { + "search": { + "label": "Hladať", + "placeholder": "Vyhľadať aplikácie, dosky, stránky, príkazy a preferencie" + }, + "apps": { + "label": "Aplikácie", + "placeholder": "Vyhľadať aplikácie, dosky a integrácie" + }, + "command": { + "label": "Príkazy", + "placeholder": "Vyhľadať akcie a príkazy" + }, + "preferences": { + "label": "Preferencie", + "placeholder": "Vyhľadať a zmeniť preferencie" + }, + "assistant": { + "label": "Asistent", + "placeholder": "Opýtať sa asistenta" + }, + "external": { + "label": "Web", + "placeholder": "Vyhľadávať pomocou externého vyhľadávača" + }, + "media": { + "label": "Médiá", + "placeholder": "Vyhľadať film alebo seriál", + "fallback": "Vyhľadať médiá pre „{query}“" + }, + "userGroup": { + "label": "Ľudia", + "placeholder": "Vyhľadať používateľov a skupiny" + }, + "continueWith": "Pokračovať pomocou", + "dialogAriaLabel": "Ponuka príkazov režimu {mode}", + "navigationLabel": "Režimy vyhľadávania", + "modeAriaLabel": "Režim {mode}", + "resultsAriaLabel": "Výsledky režimu {mode}", + "footer": { + "navigate": "Navigovať", + "open": "Otvoriť", + "close": "Zavrieť" + } + }, "error": { "fetch": "Pri načítavaní údajov sa vyskytla chyba" }, @@ -5634,7 +7578,6 @@ "help": "Vyhľadajte aplikácie, integrácie alebo dosky", "group": { "app": { - "title": "Aplikácie", "children": { "action": { "open": { @@ -5650,7 +7593,6 @@ } }, "board": { - "title": "Dosky", "children": { "action": { "open": { @@ -5670,9 +7612,6 @@ "title": "Vyberte akciu pre dosku" } } - }, - "integration": { - "title": "Integrácie" } } }, @@ -5701,9 +7640,6 @@ "newBoard": { "label": "Vytvorte novú dosku" }, - "importBoard": { - "label": "Importujte dosku" - }, "newApp": { "label": "Vytvorte novú aplikáciu" }, @@ -5773,7 +7709,6 @@ } }, "defaultSearchEngineId": { - "label": "Predvolený vyhľadávací nástroj", "children": { "detail": { "title": "Vyberte predvolený vyhľadávací nástroj" @@ -5781,7 +7716,6 @@ } }, "openSearchInNewTab": { - "label": "Otvoriť výsledky vyhľadávania na novej karte", "children": { "detail": { "title": "Otvoriť výsledky vyhľadávania na novej karte" @@ -5789,7 +7723,6 @@ } }, "ddgBangs": { - "label": "Povoliť príkazy DuckDuckGo bang", "children": { "detail": { "title": "Povoliť príkazy DuckDuckGo bang" @@ -5804,6 +7737,13 @@ } } }, + "byteUnitSystem": { + "children": { + "detail": { + "title": "Vyberte jednotky veľkosti údajov" + } + } + }, "homeBoardId": { "label": "Domáca doska", "children": { @@ -5821,7 +7761,6 @@ } }, "pingIconsEnabled": { - "label": "Používať ikony pre pingy", "children": { "detail": { "title": "Používať ikony pre pingy" @@ -5829,7 +7768,6 @@ } }, "enableRightClickOnWidgets": { - "label": "", "children": { "detail": { "title": "" @@ -5857,6 +7795,7 @@ "description": "Začnite písať, aby ste vyhľadali svoje integrácie žiadostí o médiá", "disabled": { "noIntegration": "Pridajte integráciu Overseerr, Jellyseerr alebo Seerr, aby ste umožnili vyhľadávanie médií.", + "signInRequired": "Ak chcete vyhľadávať v médiách a požiadavkách na integrácie, prihláste sa.", "scoped": "Táto miniaplikácia nemá prístupnú integráciu žiadostí o médiá." } } @@ -5873,7 +7812,6 @@ "help": "Používanie externého vyhľadávača", "group": { "searchEngine": { - "title": "Vyhľadávače", "tipDdgBangs": "Tip: Môžete tu použiť aj akékoľvek príkazy DuckDuckGo bang, napr. !niečo", "bang": { "searchWithQuery": "Vyhľadať \"{query}\" pomocou {label}", @@ -5924,20 +7862,6 @@ "group": { "mode": { "title": "Režimy" - }, - "help": { - "title": "Pomocník", - "option": { - "documentation": { - "label": "Dokumentácia" - }, - "submitIssue": { - "label": "Odoslať problém" - }, - "discord": { - "label": "Diskord Spoločenstva" - } - } } } }, @@ -5949,9 +7873,10 @@ "other": { "label": "Hľadajte pomocou iného vyhľadávača" }, - "no-default": { - "label": "Žiadny predvolený vyhľadávací nástroj", - "description": "Nastavte predvolený vyhľadávací nástroj v preferenciách" + "no-engines": { + "label": "Nie sú nakonfigurované žiadne vyhľadávače", + "descriptionCreate": "Pridajte vyhľadávač a vyhľadávajte z ponuky príkazov", + "descriptionUnavailable": "Požiadajte správcu o konfiguráciu vyhľadávača" }, "search": { "label": "Hľadať '{query}' s {name}" @@ -6031,7 +7956,6 @@ "help": "Vyhľadajte používateľov alebo skupiny", "group": { "user": { - "title": "Používatelia", "children": { "action": { "detail": { @@ -6044,7 +7968,6 @@ } }, "group": { - "title": "Skupiny", "children": { "action": { "detail": { @@ -6068,9 +7991,6 @@ "engine": { "search": "Nájdite vyhľadávač", "field": { - "name": { - "label": "Názov" - }, "short": { "label": "Krátky" }, @@ -6083,12 +8003,19 @@ }, "page": { "list": { - "title": "Vyhľadávače", + "ariaLabel": "Nakonfigurované vyhľadávače", "noResults": { "title": "Zatiaľ neexistujú žiadne vyhľadávače", - "action": "Vytvorte si svoj prvý vyhľadávač" + "description": "Vyhľadávače umožňujú Spotlightu odoslať dotaz na stránku alebo pripojenú službu.", + "action": "Vytvorte si svoj prvý vyhľadávač", + "filteredTitle": "Vyhľadávaniu nezodpovedajú žiadne vyhľadávače", + "filteredDescription": "Vyhľadávaniu „{search}“ nezodpovedá žiadny vyhľadávač. Skúste iný názov alebo URL." }, - "interactive": "Interaktívne, používa integráciu" + "interactive": "Interaktívne, používa integráciu", + "type": { + "generic": "Šablóna URL", + "fromIntegration": "Integrácia" + } }, "create": { "title": "Nový vyhľadávač", @@ -6107,11 +8034,9 @@ "title": "Upraviť vyhľadávač", "notification": { "success": { - "title": "Zmeny boli úspešne použité", "message": "Vyhľadávač bol úspešne uložený" }, "error": { - "title": "Nie je možné použiť zmeny", "message": "Vyhľadávací nástroj sa nepodarilo uložiť" } }, @@ -6250,6 +8175,10 @@ } }, "log": { + "context": { + "widgetError": "Widget nahlásil chybu približne v tomto čase", + "expiredWidgetError": "Záznamy súvisiace s touto chybou widgetu sa už neuchovávajú" + }, "level": { "option": { "debug": "", @@ -6261,7 +8190,6 @@ }, "onboardingTour": { "learnMore": "Prečítať si dokumentáciu", - "next": "Ďalej", "prev": "Späť", "done": "Hotovo", "skip": "Preskočiť prehliadku", @@ -6325,5 +8253,359 @@ "description": "Zmeňte farebnú schému, jazyk, domovskú dosku a preferencie. Odtiaľto môžete tiež prejsť do ovládacieho panela." } } + }, + "metadata": { + "description": "Samostatne hostovaný prehľad pre balík *arr a celý váš homelab. Integruje sa s viac ako 50 službami, widgety v reálnom čase, bez konfiguračných súborov.", + "dashboardTitle": "Prehľad {appName}" + }, + "assistant": { + "title": "Asistent", + "open": "Otvoriť asistenta", + "close": "Zavrieť asistenta", + "minimize": "Minimalizovať asistenta", + "spotlight": "Opýtať sa asistenta", + "spotlightDescription": "Zadajte a odošlite požiadavku bez opustenia ponuky príkazov.", + "spotlightPrompt": { + "title": "Opýtať sa asistenta", + "description": "Zadajte požiadavku vyššie. Stlačením klávesu Enter ju odošlete na pozadí.", + "send": "Odoslať požiadavku", + "empty": "Zadajte požiadavku vyššie" + }, + "unavailable": { + "checking": "Kontroluje sa dostupnosť asistenta…", + "error": "Dostupnosť asistenta sa nepodarilo skontrolovať. Skúste to znova.", + "notConfigured": "Správca musí najprv nakonfigurovať a povoliť asistenta.", + "signIn": "Ak chcete používať asistenta, prihláste sa." + }, + "newConversation": "Nová konverzácia", + "conversations": "Konverzácie", + "conversationActions": "Akcie konverzácie", + "searchConversations": "Vyhľadať konverzácie", + "noMatchingConversations": "Žiadne zodpovedajúce konverzácie", + "moreActions": "Ďalšie akcie odpovede", + "renameConversation": { + "action": "Premenovať", + "label": "Názov konverzácie", + "save": "Uložiť názov", + "failedTitle": "Konverzáciu sa nepodarilo premenovať", + "failedDescription": "Homarr nemohol premenovať túto konverzáciu. Skúste to znova." + }, + "deleteConversation": { + "title": "Odstrániť konverzáciu?", + "description": "„{title}“ a jej správy sa natrvalo odstránia.", + "failedTitle": "Konverzáciu sa nepodarilo odstrániť", + "failedDescription": "Homarr nemohol odstrániť túto konverzáciu. Skúste to znova." + }, + "closeHistory": "Zavrieť históriu konverzácií", + "openHistory": "Otvoriť históriu konverzácií", + "emptyTitle": "S čím vám môžem pomôcť?", + "emptyDescription": "Opýtajte sa na nastavenie Homarr, skontrolujte aktuálne údaje inštancie alebo schváľte akcie, keď chcete vykonať zmenu.", + "suggestions": { + "health": { + "label": "Skontrolovať stav služby", + "prompt": "Skontrolujte moje integrácie a zhrňte všetko, čo vyžaduje pozornosť." + }, + "explore": { + "label": "Preskúmať môj Homarr", + "prompt": "Ukážte mi, čo môžem v tejto inštancii Homarr zobraziť a spravovať." + }, + "media": { + "label": "Nájsť médiá na vyžiadanie", + "prompt": "Pomôžte mi nájsť film alebo seriál na vyžiadanie." + }, + "style": { + "label": "Vylepšiť prehľad", + "prompt": "Pomôžte mi vylepšiť vzhľad dosky alebo jej vlastné CSS. Najprv mi zobrazte moje dosky a potom zachovajte aktuálne nastavenia pri vykonávaní zmeny." + }, + "designWidget": { + "label": "Navrhnúť widget", + "prompt": "Vytvoriť a nainštalovať vlastný widget pre " + } + }, + "composerPlaceholder": "Opýtať sa asistenta…", + "runtime": { + "model": "Model", + "searchModels": "Vyhľadať modely", + "noModels": "Nie sú dostupné žiadne modely", + "otherModels": "Ostatné modely", + "imageInput": "Podporuje obrazový vstup", + "thinking": "Režim premýšľania", + "reasoning": { + "auto": "Automaticky", + "none": "Vypnuté", + "minimal": "Minimálne", + "low": "Nízke", + "medium": "Stredné", + "high": "Vysoké" + } + }, + "providerQuota": { + "title": "Poskytovateľ Homarr", + "communityWorkshop": "Komunitná dielňa", + "dailyAllowance": "Denný limit požiadaviek", + "remainingLabel": "Zostáva {remaining} z {limit} požiadaviek poskytovateľa Homarr", + "loading": "Načítava sa limit poskytovateľa Homarr", + "signInRequired": "Pre poskytovateľa Homarr sa vyžaduje prihlásenie do Workshopu", + "signInDescription": "Prihláste sa pomocou GitHubu cez Community Workshop a získajte samostatný denný limit.", + "exhaustedDescription": "Denný limit poskytovateľa Homarr ste už vyčerpali. Obnoví sa o polnoci UTC.", + "unavailableDescription": "Prihláste sa do Workshopu alebo počkajte na obnovenie limitu poskytovateľa Homarr.", + "signIn": "Prihlásiť sa pomocou GitHubu", + "signInError": "Prihlásenie do GitHubu zlyhalo. Skúste to znova o chvíľu.", + "loadError": "Limit poskytovateľa Homarr sa nepodarilo načítať.", + "reset": "Obnoví sa {relative} o ", + "toolCalls": "Každá požiadavka modelu a dokončené volanie nástroja spotrebuje jednu požiadavku.", + "retry": "Znovu načítať limit", + "level": { + "ok": "V poriadku", + "warning": "Upozornenie", + "bad": "Nízke", + "dead": "Použité" + } + }, + "stop": "Zastaviť odpoveď", + "send": "Odoslať správu", + "copy": "Kopírovať odpoveď", + "copyMessage": "Kopírovať správu", + "editMessage": "Upraviť správu", + "updateMessage": "Aktualizovať správu", + "regenerate": "Znova vygenerovať odpoveď", + "helpful": "Užitočné", + "notHelpful": "NeuUžitočné", + "readAloud": "Prečítať odpoveď nahlas", + "stopReading": "Zastaviť čítanie odpovede", + "feedbackError": "Spätnú väzbu sa nepodarilo uložiť. Skúste to znova.", + "exportMarkdown": "Exportovať ako Markdown", + "exportConversation": { + "action": "Exportovať konverzáciu ako Markdown", + "failedTitle": "Konverzáciu sa nepodarilo exportovať", + "failedDescription": "Homarr nemohol načítať túto konverzáciu. Skúste to znova." + }, + "reasoning": "Premýšľanie", + "previousResponse": "Predchádzajúca odpoveď", + "nextResponse": "Nasledujúca odpoveď", + "removeAttachment": "Odstrániť prílohu", + "downloadFile": "Stiahnuť {name}", + "attachedImage": "Priložený obrázok", + "externalImageBlocked": "Externý obrázok zablokovaný z dôvodu ochrany súkromia", + "image": { + "loading": "Načítava sa obrázok", + "failed": "Tento obrázok sa nepodarilo načítať.", + "retry": "Skúsiť obrázok znova" + }, + "quoteSelection": "Citovať", + "dismissQuote": "Odstrániť citáciu", + "attachments": { + "add": "Priložiť obrázok alebo dokument", + "errorTitle": "Prílohu sa nepodarilo pridať", + "imageUnsupported": "Vybraný model nepodporuje obrazový vstup." + }, + "mentions": { + "menu": "Pridať kontext Homarr", + "context": "Kontext", + "app": "Aplikácie", + "integration": "Integrácie", + "board": "Dosky", + "widget": "Widgety", + "tools": "Dostupné nástroje" + }, + "markdown": { + "diagram": "Schéma", + "renderingDiagram": "Vykresľuje sa diagram…", + "diagramUnavailable": "Tento diagram sa nepodarilo vykresliť." + }, + "commands": { + "menu": "Príkazy asistenta", + "health": "Pripraviť kontrolu stavu služby", + "explore": "Pripraviť prehľad tejto inštancie Homarr", + "media": "Pripraviť vyhľadávanie médií", + "style": "Pripraviť zmenu vzhľadu dosky alebo vlastného CSS", + "designWidget": "Pripraviť vytvorenie vlastného widgetu v jednej požiadavke" + }, + "usage": { + "tokens": "tokeny", + "contextWindow": "Kontextové okno", + "requestDetails": "Podrobnosti požiadavky", + "used": "Posledný krok", + "remaining": "Zostáva", + "capacity": "Kapacita", + "input": "Vstup", + "output": "Výstup", + "cached": "Vstup z vyrovnávacej pamäte", + "cacheWrite": "Zápis do vyrovnávacej pamäte", + "reasoning": "Uvažovanie", + "inputShort": "vstup", + "outputShort": "výstup", + "cachedShort": "z vyrovnávacej pamäte", + "reasoningShort": "uvažovanie", + "firstOutput": "Prvý výstup", + "homarrTiming": "Homarr zaznamenal", + "endToEnd": "Od začiatku do konca", + "observedThroughput": "Zaznamenaná priepustnosť", + "providerTiming": "Nahlásené poskytovateľom", + "loadingProviderDetails": "Načítavajú sa podrobnosti generovania…", + "providerDetailsPending": "OpenRouter stále spracúva niektoré podrobnosti generovania. Znova otvorte a skúste to znova.", + "providerLatency": "Latencia poskytovateľa", + "generationTime": "Čas generovania", + "moderationLatency": "Moderovanie", + "providerThroughput": "Priepustnosť poskytovateľa", + "fallbacks": "Záložné možnosti", + "fallbackLatency": "Latencia záložnej možnosti", + "cacheDiscount": "Zľava za vyrovnávaciu pamäť", + "normalizedTokens": "Normalizovaný vstup / výstup OpenRoutera", + "byok": "BYOK", + "cost": "Náklady", + "reported": "Nahlásené poskytovateľom", + "estimated": "Odhadované podľa cien modelu", + "upstreamCost": "Inferencia upstreamu", + "webSearches": "Webové vyhľadávania", + "finishReason": "Dôvod dokončenia", + "notReported": "Nenahlásené", + "agentSteps": "Kroky agenta", + "step": "Krok {number}", + "generation": "Generovanie" + }, + "toolInput": "Vstup", + "toolOutput": "Výstup", + "toolActivity": { + "iconSearch": "Hľadajú sa ikony „{query}“", + "iconBrowse": "Prehľadávajú sa dostupné ikony" + }, + "toolNavigation": { + "openPreview": "Otvoriť náhľad", + "openWidget": "Otvoriť widget" + }, + "webSearch": { + "title": "Vyhľadávanie na webe", + "completed": "OpenRouter vyhľadal informácie na internete v reálnom čase pre túto odpoveď.", + "searches": "{count, plural, one {# vyhľadávanie} few {# vyhľadávania} many {# vyhľadávaní} other {# vyhľadávania}}", + "sources": "{count, plural, one {# zdroj} few {# zdroje} many {# zdrojov} other {# zdroja}}" + }, + "responseError": { + "title": "Asistent nemohol dokončiť úlohu", + "description": "Skúste to znova. Ak problém pretrváva, požiadajte správcu o overenie nakonfigurovaného koncového bodu modelu." + }, + "toolPreparationError": { + "title": "Túto požiadavku sa nepodarilo pripraviť", + "description": "Model sa zastavil skôr, než poskytol úplné podrobnosti. Skúste odpoveď znova alebo požiadavku opíšte ešte raz. Nebola vykonaná žiadna zmena." + }, + "busy": { + "title": "Asistent už pracuje", + "description": "Počkajte na aktuálnu odpoveď alebo ju otvorte a zastavte vykonávanie." + }, + "pendingAction": { + "answerTitle": "Vyžaduje sa odpoveď", + "answerFallback": "Ak chcete pokračovať, vyberte odpoveď", + "formTitle": "Skontrolovať podrobnosti aplikácie", + "boardFormTitle": "Skontrolovať zmeny nástenky", + "review": "Prehľad", + "sendBlocked": "Pred odoslaním vyriešte čakajúcu požiadavku" + }, + "activity": { + "thinking": "Asistent premýšľa", + "working": "Pracuje sa na vašej požiadavke", + "ready": "Odpoveď je pripravená", + "completed": "Otvoriť odpoveď", + "approval": "Vyžaduje sa schválenie", + "failed": "Asistent vyžaduje pozornosť", + "expand": "Otvoriť odpoveď asistenta", + "dismiss": "Zavrieť aktivitu asistenta" + }, + "scrollToLatest": "Prejsť na najnovšie", + "refresh": { + "action": "Obnoviť aktuálne zobrazenie", + "working": "Obnovuje sa aktuálne zobrazenie", + "completeTitle": "Zobrazenie obnovené", + "completeDescription": "Viditeľné údaje Homarr boli znova načítané.", + "failedTitle": "Zobrazenie sa nepodarilo obnoviť", + "failedDescription": "Zmena môže byť stále uložená. Skúste akciu obnovenia znova." + }, + "askUser": { + "preparing": "Pripravuje sa otázka", + "answered": "Vaša odpoveď", + "other": "Iné", + "otherLabel": "Vaša odpoveď", + "otherPlaceholder": "Zadajte inú odpoveď…", + "submit": "Odoslať odpoveď", + "cancelOther": "Zrušiť inú odpoveď", + "optionKind": { + "affirmative": "Potvrdiť", + "negative": "Odmietnuť", + "alternative": "Možnosť", + "custom": "Vlastné" + } + }, + "configureApp": { + "title": "Skontrolovať podrobnosti aplikácie", + "description": "Vyberte miestnu ikonu a pred vyžiadaním schválenia vytvorenia od asistenta upravte potrebné nastavenia.", + "preparing": "Pripravujú sa podrobnosti aplikácie", + "continue": "Použiť tieto podrobnosti", + "ready": "Podrobnosti aplikácie sú pripravené", + "automaticContinue": "Tieto podrobnosti aplikácie sa použijú automaticky" + }, + "configureBoardSettings": { + "title": "Skontrolovať zmeny nástenky", + "loading": "Načítavajú sa aktuálne nastavenia nástenky", + "loadErrorTitle": "Nastavenia nástenky sa nepodarilo načítať", + "loadErrorDescription": "Nástenka už nemusí existovať alebo nemáte povolenie na jej úpravu.", + "proposedCount": "Asistent navrhol {count} polí", + "changeCount": "{count} zmien je pripravených", + "ready": "Zmeny nástenky sú pripravené", + "cancelled": "Aktuálne nastavenia nástenky zostali zachované", + "noChanges": "Žiadne nastavenia sa nezmenia", + "keepCurrent": "Ponechať aktuálne nastavenia", + "continue": "Pokračovať na schválenie", + "automaticContinue": "Navrhované zmeny nástenky sa prijmú automaticky", + "resetAll": "Obnoviť všetky zmeny", + "tabs": { + "css": "Vlastné CSS", + "appearance": "Vzhľad", + "background": "Pozadie", + "general": "Hlavné" + }, + "cssDescription": "Upravte celý súbor štýlov. Existujúce pravidlá zostanú zachované, pokiaľ ich tu neodstránite.", + "cssCharacters": "{count} zo 16384 znakov", + "copyCss": "Kopírovať CSS", + "copied": "Skopírované", + "restoreCss": "Obnoviť aktuálne CSS", + "remoteCssTitle": "Toto CSS načítava vzdialený zdroj", + "remoteCssDescription": "Importované súbory štýlov a vzdialené adresy URL kontaktujú pri načítaní nástenky iný server. Pred pokračovaním ich skontrolujte." + }, + "configureWidget": { + "title": "Skontrolovať widget", + "preparing": "Pripravujú sa nastavenia widgetu", + "review": "Skontrolovať widget a integrácie", + "ready": "Konfigurácia widgetu je pripravená", + "cancelled": "Widget nebol pridaný", + "automaticContinue": "Navrhovaná konfigurácia widgetu sa prijme automaticky", + "definitionLoadErrorTitle": "Nastavenia widgetu sa nepodarilo načítať", + "definitionLoadErrorDescription": "Homarr nemohol načítať nastavenia tohto widgetu. Skúste to znova.", + "loadErrorTitle": "Integrácie sa nepodarilo načítať", + "loadErrorDescription": "Homarr nemohol načítať integrácie dostupné pre tento widget.", + "noIntegrationTitle": "Vyžaduje sa kompatibilná integrácia", + "noIntegrationDescription": "Pred pridaním widgetu na nástenku nakonfigurujte integráciu podporovanú týmto widgetom.", + "connectIntegration": "Pripojiť službu", + "manageIntegrations": "Správa integrácií", + "skip": "Nepridávať", + "errorTitle": "Nastavenia widgetu sa nepodarilo pripraviť", + "errorDescription": "Model neposkytol úplnú konfiguráciu widgetu. Nebol pridaný žiadny widget." + }, + "approvalRequired": "Vyžaduje sa schválenie", + "complete": "Dokončené", + "denied": "Zamietnuté", + "failed": "Neúspešné", + "working": "Prebieha", + "approvalDescription": "Pred spustením túto zmenu skontrolujte.", + "approveAndRun": "Schváliť a spustiť", + "deny": "Zamietnuť", + "autoApproval": { + "label": "Automatické schvaľovanie", + "composerLabel": "Schvaľovať za mňa", + "title": "Automatické schvaľovanie", + "description": "Automaticky pripravovať formuláre a schvaľovať chránené zmeny v tejto konverzácii. Otázky budú naďalej čakať na vašu odpoveď a vaše povolenia v Homarr zostanú v platnosti. Táto funkcia sa vypne po prepnutí konverzácie.", + "enable": "Povoliť pre túto konverzáciu", + "disable": "Vypnúť automatické schvaľovanie", + "enabled": "Automatické schvaľovanie je zapnuté", + "approving": "Schvaľuje sa automaticky" + } } } diff --git a/packages/translation/src/lang/sl.json b/packages/translation/src/lang/sl.json index a71306256..a591535a8 100644 --- a/packages/translation/src/lang/sl.json +++ b/packages/translation/src/lang/sl.json @@ -1,156 +1,246 @@ { "init": { - "step": { - "start": { - "title": "Dobrodošli v Homarru", - "subtitle": "Začnimo z nastavitvijo vašega primerka Homarr.", - "description": "Za začetek izberite, kako želite nastaviti svoj primerek Homarr.", - "action": { - "scratch": "Začni od začetka", - "importOldmarr": "Uvozi iz Homarr pred različico 1.0", - "restoreSqlite": "Obnovi iz varnostne kopije SQLite", - "restoreSqliteDescription": "Naložite celotno varnostno kopijo baze podatkov SQLite iz prejšnjega primerka Homarr. To bo obnovilo vse table, uporabnike, aplikacije, integracije in nastavitve.", - "backToOptions": "← Nazaj na možnosti nastavitve" + "studio": { + "navigationLabel": "Razdelki za uvajanje", + "back": "Nazaj", + "buildBoard": "Izdelaj mojo ploščo", + "common": { + "unknownError": "Nekaj je šlo narobe. Vaše izbire so še vedno tukaj; poskusite znova." + }, + "claim": { + "checking": "Zaščita te seje uvajanja…", + "checkingTitle": "Priprava varne nastavitve", + "lockedTitle": "Nastavitev je odprta v drugem brskalniku", + "lockedDescription": "Nadaljujte tam ali počakajte, da varna seja prvega zagona poteče, preden poskusite znova.", + "signInTitle": "Zahtevana je prijava skrbnika", + "signInDescription": "Skrbnik že obstaja. Prijavite se, da nadaljujete nastavitev brez razkrivanja poverilnic ali dostopa do storitev.", + "signIn": "Prijava in nadaljevanje", + "errorTitle": "Nastavitve ni bilo mogoče zavarovati", + "errorDescription": "Osvežite stran, da znova poskusite z varno sejo prvega zagona." + }, + "navigation": { + "essentials": "Osnove", + "discover": "Odkrijte", + "connect": "Povežite", + "board": "Plošča", + "extend": "Razširite", + "review": "Preglejte" + }, + "welcome": { + "title": "Dobrodošli doma.", + "description": "Dobrodošli v Homarr v{version}. Vodili vas bomo skozi osnove in vam pomagali izdelati prvo ploščo.", + "start": "Začnite", + "restore": "Obnovi varnostno kopijo", + "restoreTitle": "Obnovi iz varnostne kopije", + "restoreDescription": "Popolna varnostna kopija SQLite obnovi plošče, osebe, aplikacije, integracije in nastavitve. Homarr jo preveri, preden kar koli zamenja.", + "errorTitle": "Nastavitve ni bilo mogoče zagnati", + "errorDescription": "Vaše izbire nastavitev so še vedno tukaj. Poskusite znova ali osvežite stran, če se težava nadaljuje." + }, + "account": { + "title": "Ustvarite svojega skrbnika", + "description": "Navedite poverilnice za skrbniškega uporabnika.", + "username": "Uporabniško ime skrbnika", + "passwordHint": "Zahtevan je le najmanj 8-mestni zapis. Druga preverjanja varnosti gesla so priporočila.", + "create": "Ustvari skrbnika", + "errorTitle": "Skrbnika ni bilo mogoče ustvariti", + "recoveryTitle": "Skrbniški račun je ustvarjen", + "recoveryDescription": "Samodejna prijava ni bila dokončana. Za nadaljevanje nastavitve se prijavite s pravkar ustvarjenimi skrbniškimi poverilnicami.", + "recoveryAction": "Prijava in nadaljevanje", + "unknownError": "Skrbnika ni bilo mogoče ustvariti." + }, + "externalGroup": { + "title": "Povežite svojo skrbniško skupino", + "description": "Uporabite natančno ime skupine, ki ga pošilja LDAP ali OIDC. Člani te skupine dobijo skrbniški dostop.", + "name": "Zunanja skrbniška skupina", + "nameDescription": "Pri tem se razlikuje med velikimi in malimi črkami, ime pa se mora ujemati z vašim ponudnikom identitete.", + "continue": "Shrani skupino in nadaljuj", + "errorTitle": "Skupine ni bilo mogoče shraniti", + "unknownError": "Skrbniške skupine ni bilo mogoče shraniti." + }, + "essentials": { + "title": "Začnite z znanimi privzetimi nastavitvami", + "description": "Nastavite jezik in videz, ki ju vsi najprej vidijo, nato pa Homarru posredujte vzorec naslova, ki ga uporabljajo vaše storitve.", + "language": "Privzeti jezik", + "theme": "Privzeta tema", + "themeAuto": "Sistem", + "themeLight": "Svetla", + "themeDark": "Temna", + "serverOriginHelp": "Homarr ta naslov uporabi za vnaprejšnje izpolnjevanje zaznanih URL-jev storitev. Vsako storitev lahko še vedno urejate posamezno.", + "serverDescription": "To je bližnjica, ne omejitev. Vsako zaznano storitev je še vedno mogoče urejati.", + "serverOrigin": "Domena, naslov IP ali pot povratnega posredniškega strežnika", + "serverOriginDescription": "Primeri: home.lan, 192.168.1.10 ali https://home.example.com/services. Spodaj izberite, kako naj se doda posamezna storitev.", + "analytics": "Deli anonimno analitiko izdelka", + "analyticsDescription": "Homarru pomaga izboljšati zanesljivost funkcij. Poverilnice storitev ali vsebina plošče se ne pošiljajo." + }, + "discover": { + "title": "Preverite, do česa lahko ta namestitev dejansko dostopa", + "description": "Homarr preveri zmogljivosti na mestu. Manjkajoča vtičnica Docker ali kontekst Kubernetes nikoli ne blokira ročne nastavitve.", + "database": "Podatkovna zbirka", + "docker": "Združljive vtičnice Docker in druge vtičnice", + "kubernetes": "Kubernetes", + "assistantWorkshop": "Pomočnik in delavnica", + "found": "Najdenih integracij: {integrations}; dodatnih aplikacij: {apps}", + "retryKubernetes": "Znova preveri Kubernetes", + "retryWorkshop": "Znova preveri delavnico", + "unknownVersion": "neznana različica", + "kubernetesAvailable": "Povezano s Kubernetesom {version}", + "kubernetesDisabled": "Ni omogočeno; nadaljujte z Dockerjem ali ročnimi storitvami", + "kubernetesUnavailable": "Kubernetes je omogočen, vendar iz tega procesa Homarr ni dosegljiv", + "workshopAvailable": "Skupnostna delavnica in gostovane storitve pomočnika so dosegljive", + "workshopUnavailable": "Lokalni ponudniki pomočnika in ponudniki po meri ostajajo na voljo", + "partialTitle": "Nekaterih virov ni bilo mogoče pregledati", + "partialDescription": "Rezultati dosegljivih gostiteljev so ohranjeni. Preverite dovoljenja za vtičnice ali v naslednjem razdelku ročno dodajte storitve.", + "status": { + "checking": "Preverjanje razpoložljivosti…", + "available": "Na voljo", + "partial": "Delno na voljo", + "empty": "Dosegljivo, vendar ni ustreznih delujočih storitev", + "disabled": "Onemogočeno s konfiguracijo strežnika", + "unavailable": "Iz tega procesa Homarr ni na voljo" } }, - "import": { - "title": "Uvozi podatke", - "subtitle": "Podatke lahko uvozite iz obstoječega primerka Homarr.", - "dropzone": { - "title": "Datoteko ZIP povlecite sem ali kliknite za brskanje", - "description": "Naložena datoteka ZIP bo obdelana, nato pa boste lahko izbrali, kaj želite uvoziti" + "connect": { + "title": "Povežite, kar naredi ploščo uporabno", + "description": "Izberite več storitev hkrati. Oznake Docker imajo prednost, ujemanje slik zapolni vrzeli, vsak URL in vsaka poverilnica pa sta še vedno pregledna.", + "discoveredIntegrations": "Zaznane instance integracij ({count})", + "detectedIntegrationLabel": "Uvozi {name}, zaznano kot {kind}", + "detectedAppLabel": "Uvozi zaznano aplikacijo {name}", + "otherIntegrations": "Dodaj drugo integracijo", + "configureIntegrations": "Konfiguriraj integracije", + "discoveredApps": "Zaznane aplikacije ({count})", + "appAddressRequired": "Dodajte naslov za {name} ali ga odstranite iz izbora.", + "empty": "Izbrane niso nobene integracije. Homarr bo vseeno ustvaril uporabno začetno ploščo s splošnimi pripomočki.", + "dockerSource": "Docker", + "manualSource": "Ročno", + "url": "URL storitve", + "noCredentials": "Brez poverilnic", + "noCredentialsDescription": "Ta integracija ne potrebuje poverilnic.", + "credentialMethod": "Način poverilnic", + "getApiKey": "Odpri nastavitve ključa API za to storitev", + "openGuide": "Odpri Homarrjev vodnik za nastavitev te storitve", + "testConnection": "Preizkusi povezavo", + "testSuccess": "Povezava deluje", + "testSuccessDescription": "Homarr se je povezal s trenutnim naslovom in poverilnicami.", + "testError": "Povezava ni uspela", + "testErrorDescription": "Preverite naslov storitve in poverilnice, nato poskusite znova.", + "needsConfiguration": "Potrebna je konfiguracija", + "tested": "Povezava je bila preizkušena", + "testFailed": "Preizkus povezave ni uspel", + "incompleteConfirmation": "Nedokončane integracije bodo preskočene. Ali želite nadaljevati brez njih?" + }, + "board": { + "title": "Oblikujte tablo, preden jo ustvarite", + "description": "Homarr ustvari zaščiteni postavitvi Mobile in Base, nato pa umesti aplikacije in združljive pripomočke iz izbranih storitev.", + "target": "Tabla za konfiguracijo", + "targetDescription": "Izberite točno tisto obstoječo tablo, ki naj jo ta nastavitev posodobi.", + "targetPlaceholder": "Izberite tablo", + "targetRequired": "Pred nadaljevanjem izberite tablo, ki jo želite konfigurirati.", + "name": "Ime table", + "nameDescription": "Uporablja se v URL-ju plošče; dovoljene so samo črke, številke, vezaji in podčrtaji.", + "nameRequired": "Pred nadaljevanjem vnesite ime plošče.", + "primaryColor": "Osnovna barva", + "secondaryColor": "Sekundarna barva", + "resetColors": "Ponastavi barve", + "radius": "Polmer zaobljenosti gradnikov", + "radiusOptions": { + "xs": "Tesno", + "sm": "Neizrazito", + "md": "Uravnoteženo", + "lg": "Zaobljeno", + "xl": "Mehko" }, - "fileInfo": { - "action": { - "change": "Spremeni datoteko" - } + "columns": "Stolpci plošče", + "columnsDescription": "Stolpci določajo vodoravno mrežo, ki se uporablja za določanje velikosti in položaja elementov. Za večino uporabnikov je 12 dovolj.", + "columnCount": "{count, plural, one {# stolpec} two {# stolpca} few {# stolpci} other {# stolpcev}}", + "leftSidebar": "Leva stranska vrstica", + "rightSidebar": "Desna stranska vrstica", + "previewLabel": "Predogled postavitve prve plošče v živo" + }, + "extend": { + "title": "Napredne funkcije", + "tabsLabel": "Nastavitev pomočnika, delavnice in MCP", + "assistant": "Pomočnik", + "workshop": "Delavnica", + "assistantSetup": { + "loginTitle": "Zahtevana je prijava skrbnika", + "loginDescription": "Ključi ponudnikov in dostop do modelov so privilegirani. Dokončajte nastavitev, se prijavite in Homarr bo neposredno odprl konfiguracijo pomočnika.", + "loginAction": "Prijavite se za konfiguracijo pomočnika" }, - "importSettings": { - "title": "Nastavitve uvoza", - "description": "Nastavi vedenje uvoza" + "workshopSetup": { + "title": "Delavnica Homarr", + "description": "Brskajte po prilagojenih gradnikih skupnosti, preglejte njihove zahtevane zmogljivosti, jih namestite in objavite svoje delo, ne da bi kopirali kodo med strežniki.", + "available": "Na voljo", + "checking": "Preverjanje…", + "unavailable": "Ni na voljo", + "discoverTitle": "Odkrijte", + "discoverDescription": "Poiščite gradnike, izdelane za resnične poteke dela na lastnem strežniku.", + "installTitle": "Pregled in namestitev", + "installDescription": "Pred dodajanjem si oglejte metapodatke in konfiguracijo.", + "publishTitle": "Deli", + "publishDescription": "Objavite gradnike za ponovno uporabo v skupnosti.", + "browse": "Brskaj po delavnici" }, - "boardSelection": { - "title": "Najdenih tabel: {count}", - "description": "Izberite vse table z želeno velikostjo za uvoz", - "action": { - "selectAll": "Izberi vse", - "unselectAll": "Prekliči izbor vsega" - } - }, - "summary": { - "title": "Povzetek uvoza", - "description": "V spodnjem povzetku si lahko ogledate, kaj bo uvoženo", - "action": { - "import": "Potrdi uvoz in nadaljuj" - }, - "entities": { - "apps": "Aplikacije", - "boards": "Deske", - "integrations": "Integracije", - "credentialUsers": "Uporabniki poverilnic" - } - }, - "tokenModal": { - "title": "Vnesite žeton uvoza", - "field": { - "token": { - "label": "Žeton", - "description": "Vnesite prikazani žeton uvoza iz prejšnjega primerka Homarr" - } - }, - "notification": { - "error": { - "title": "Neveljaven žeton", - "message": "Vneseni žeton ni veljaven" - } - } + "mcpSetup": { + "title": "Homarr MCP", + "description": "Povežite Claude, Codex ali drugega odjemalca MCP s tipiziranimi orodji Homarr. Ključi API zagotavljajo izrecen dostop, ki ga je mogoče preklicati.", + "endpoint": "Končna točka HTTP za pretakanje", + "keyTitle": "Kopirajte ta ključ zdaj", + "keyDescription": "Zaradi varnosti Homarr tega ključa API ne more več prikazati.", + "copyKey": "Kopiraj ključ API", + "createKey": "Ustvari ključ API MCP", + "errorTitle": "Ključa API MCP ni bilo mogoče ustvariti", + "loginRequired": "Po nastavitvi se prijavite kot skrbnik, da ustvarite ključ API.", + "configuration": "Konfiguracija odjemalca", + "copy": "Kopiraj konfiguracijo", + "copied": "Kopirano", + "advanced": "Odpri orodja MCP, dovoljenja in podrobnosti nastavitve" } }, - "user": { - "title": "Skrbnik", - "subtitle": "Določite poverilnice svojega skrbniškega uporabnika.", - "notification": { - "success": { - "title": "Uporabnik ustvarjen", - "message": "Uporabnik je bil uspešno ustvarjen" - }, - "error": { - "title": "Ustvarjanje uporabnika ni uspelo" - } - } - }, - "group": { - "title": "Zunanja skupina", - "subtitle": "Določite skupino, ki bo uporabljena za zunanje uporabnike.", - "form": { - "name": { - "label": "Ime skupine", - "description": "Ime se mora ujemati s skrbniško skupino zunanjega ponudnika" - } - } - }, - "settings": { - "title": "Nastavitve", - "subtitle": "Nastavite strežniške nastavitve." - }, - "integrations": { - "title": "Integracije", - "subtitle": "Izberite storitve, ki jih uporabljate.", - "description": "Izberite integracije, ki jih želite povezati. Samodejno bomo nastavili vašo nadzorno ploščo z ustreznimi gradniki.", - "action": { - "continue": "Nadaljuj", - "skip": "Zaenkrat preskoči" - }, - "configure": { - "progress": "{current} od {total}", - "skip": "Preskoči to integracijo", - "finishing": "Nastavljanje vaše nadzorne plošče...", - "error": { - "title": "Nastavitev ni uspela", - "message": "Pri nastavljanju vaše nadzorne plošče je prišlo do napake. Poskusite znova." - }, - "helpers": { - "tooltip": "Pomočniki URL", - "description": "Ti pomočniki poskušajo uganiti URL za vaše storitve. Če ne deluje, preprosto ročno vnesite naslov." - } - }, - "urlTemplate": { - "label": "Osnovni URL", - "placeholder": "homelab.local ali 192.168.1.1", - "hint": "Vnesite svojo osnovno domeno ali IP za samodejno izpolnjevanje URL-jev integracij", - "warning": "Če zdaj nastavite osnovni URL, bodo vsi URL-ji integracij samodejno izpolnjeni, kar vam prihrani čas med nastavljanjem", - "preview": "npr. {example}", - "mode": { - "subdomain": "Pod-domena", - "hostPort": "Gostitelj:Vrata" - } - }, - "docker": { - "detected": "Docker zazna {count} storitev", - "detectedBreakdown": "{integrations} integracij · {apps} aplikacij", - "summary": "Homarr je zaznal {apps} aplikacij, od katerih ima {integrations} vgrajene integracije", - "appBadge": "Aplikacija", - "appSectionLabel": "Aplikacije za dodajanje na nadzorno ploščo ({count} izbranih)", - "scanning": "Skeniranje Dockerja...", - "scanningDescription": "Iskanje tekočih vsebnikov v vašem sistemu" + "review": { + "title": "Ena plošča, zasnovana okoli vaših storitev", + "description": "Homarr preizkusi neshranjene povezave, uvozi izbrane aplikacije, uporabi videz in postavitve ter nato odpre natančno konfigurirano ploščo.", + "board": "Prva plošča", + "columns": "Stolpci plošče", + "columnsValue": "{count, plural, one {# stolpec} two {# stolpca} few {# stolpci} other {# stolpcev}}", + "sidebars": "Stranske vrstice", + "sidebarsValue": "{count, plural, =0 {Brez} one {# stranska vrstica} two {# stranski vrstici} few {# stranske vrstice} other {# stranskih vrstic}}", + "layouts": "Predloga", + "layoutsValue": "Mobilna + osnovna", + "integrations": "Integracije", + "integrationsValue": "{count, plural, =0 {Nič izbranega} one {# integracija} two {# integraciji} few {# integracije} other {# integracij}}", + "apps": "Ploščice aplikacij", + "appsValue": "{count, plural, =0 {Samo začetne aplikacije} one {# ploščica aplikacije} two {# ploščici aplikacije} few {# ploščice aplikacij} other {# ploščic aplikacij}}", + "language": "Jezik", + "theme": "Tema", + "themeAuto": "Sistemska nastavitev", + "themeLight": "Svetla", + "themeDark": "Temna", + "colors": "Barve plošče", + "radius": "Polmer gradnikov", + "automaticTitle": "Kaj bo Homarr ustvaril", + "automaticDescription": "Združljivi gradniki, ikone, povezave do aplikacij, odnosi med integracijami in odzivna razporeditev izhajajo iz skupnega kataloga Homarr. Vsak rezultat lahko pozneje uredite.", + "dockerWarningTitle": "Nekatere oznake Docker so se med nastavitvijo spremenile", + "dockerWarningDescription": "{count, plural, one {Izbranega rezultata Docker ni bilo mogoče uporabiti, ker se je njegova storitev spremenila, ciljala na drugo ploščo ali njen gradnik ni bil združljiv} two {Izbranih rezultatov Docker ni bilo mogoče uporabiti, ker so se njihove storitve spremenile, ciljale na drugo ploščo ali njihovi gradniki niso bili združljivi} few {Izbranih rezultatov Docker ni bilo mogoče uporabiti, ker so se njihove storitve spremenile, ciljale na drugo ploščo ali njihovi gradniki niso bili združljivi} other {Izbranih rezultatov Docker ni bilo mogoče uporabiti, ker so se storitve spremenile, ciljale na drugo ploščo ali njihovi gradniki niso bili združljivi}}.", + "errorTitle": "Plošče ni bilo mogoče ustvariti", + "progress": { + "applying": "Preizkušanje povezav in ustvarjanje plošče", + "done": "Vaša plošča je pripravljena" } }, "finish": { - "title": "Dokončaj nastavitev", - "subtitle": "Pripravljeni ste!", - "description": "Postopek nastavitve ste uspešno dokončali. Zdaj lahko začnete uporabljati Homarr. Izberite naslednje dejanje:", - "action": { - "goToBoard": "Pojdi na tablo {name}", - "createBoard": "Ustvari svojo prvo tablo", - "inviteUser": "Povabi druge uporabnike", - "docs": "Preberi dokumentacijo" - } + "title": "Vaša prva plošča je pripravljena.", + "description": "Homarr je povezal izbrane dele, preostali del pa je mogoče urejati. Odprite ploščo; kratek ogled izdelka vam lahko pokaže način urejanja, gradnike, postavitve in iskanje.", + "openBoard": "Odpri mojo ploščo", + "manageTitle": "Upravljanje", + "manageDescription": "Natančno nastavite aplikacije, integracije, plošče, uporabnike in nastavitve strežnika.", + "workshopTitle": "Delavnica", + "workshopDescription": "Odkrijte in namestite prilagojene gradnike skupnosti.", + "docsTitle": "Spoznajte Homarr", + "docsDescription": "Preberite osredotočene vodnike za plošče, gradnike, integracije in orodja." } - }, - "backToStart": "Nazaj na začetek" + } }, "user": { - "title": "Uporabniki", "name": "Uporabnik", "page": { "login": { @@ -159,12 +249,10 @@ }, "invite": { "title": "Pridruži se Homarr", + "titleWithAppName": "Pridružite se {appName}", "subtitle": "Dobrodošli v Homarr! Prosimo, ustvarite svoj račun", + "subtitleWithAppName": "Dobrodošli v {appName}! Ustvarite svoj račun", "description": "Povabil vas je {username}" - }, - "init": { - "title": "Nova namestitev Homarr", - "subtitle": "Prosimo, ustvarite začetnega skrbniškega uporabnika" } }, "field": { @@ -192,12 +280,17 @@ "previousPassword": { "label": "Prejšnje geslo" }, - "homeBoard": { - "label": "Domača tabla" - }, "pingIconsEnabled": { "label": "Uporabi ikone za ping" }, + "byteUnitSystem": { + "label": "Enote velikosti podatkov", + "description": "Izberite, kako Homarr prikazuje velikosti in hitrosti v bajtih. Bitne hitrosti vedno uporabljajo decimalne enote.", + "options": { + "binary": "Binarno", + "decimal": "Decimalno" + } + }, "enableRightClickOnWidgets": { "label": "Omogoči desni klik na pripomočkih", "description": "Prikaži kontekstni meni Homarr ob desnem kliku pripomočka. Onemogočite za uporabo privzetega menija brskalnika (npr. »Odpri povezavo v novem zavihku«)." @@ -247,7 +340,6 @@ } } }, - "create": "Ustvari uporabnika", "changePassword": { "label": "Spremeni geslo", "notification": { @@ -259,56 +351,6 @@ } } }, - "changeHomeBoard": { - "notification": { - "success": { - "message": "Domača tabla je bila uspešno spremenjena" - }, - "error": { - "message": "Domače table ni mogoče spremeniti" - } - } - }, - "changeSearchPreferences": { - "notification": { - "success": { - "message": "Nastavitve iskanja so bile uspešno spremenjene" - }, - "error": { - "message": "Nastavitev iskanja ni mogoče spremeniti" - } - } - }, - "changeFirstDayOfWeek": { - "notification": { - "success": { - "message": "Prvi dan v tednu je bil uspešno spremenjen" - }, - "error": { - "message": "Prvega dne v tednu ni mogoče spremeniti" - } - } - }, - "changePingIconsEnabled": { - "notification": { - "success": { - "message": "Ikone za ping so uspešno preklopljene" - }, - "error": { - "message": "Ikon za ping ni mogoče preklopiti" - } - } - }, - "changeDdgBangs": { - "notification": { - "success": { - "message": "DuckDuckGo bangi uspešno preklopljeni" - }, - "error": { - "message": "Preklop DuckDuckGo bangov ni mogoč" - } - } - }, "manageAvatar": { "changeImage": { "label": "Spremeni sliko", @@ -338,16 +380,6 @@ } } }, - "editProfile": { - "notification": { - "success": { - "message": "Profil je bil uspešno posodobljen" - }, - "error": { - "message": "Profila ni mogoče posodobiti" - } - } - }, "delete": { "label": "Trajno izbriši uporabnika", "description": "Izbriše tega uporabnika skupaj z njegovimi nastavitvami. Ne bo izbrisal nobenih tabel. Uporabnik ne bo obveščen.", @@ -356,18 +388,13 @@ "select": { "label": "Izberi uporabnika", "notFound": "Uporabnika ni mogoče najti" - }, - "transfer": { - "label": "Izberi novega lastnika" } } }, "group": { - "title": "Skupine", "name": "Skupina", "search": "Poišči skupino", "field": { - "name": "Ime", "members": "Člani", "homeBoard": { "label": "Domača tabla", @@ -388,6 +415,19 @@ } } }, + "custom-widget": { + "title": "Prilagojeni gradniki", + "item": { + "manage": { + "label": "Upravljaj prilagojene gradnike", + "description": "Članom dovoli ustvarjanje, urejanje in brisanje definicij prilagojenih gradnikov" + }, + "secret-write": { + "label": "Konfiguriraj skrivnosti prilagojenih gradnikov", + "description": "Članom in njihovim ključem API dovoli nastavljanje šifriranih poverilnic prilagojenih gradnikov" + } + } + }, "app": { "title": "Aplikacije", "item": { @@ -493,6 +533,35 @@ "description": "Članom dovoli upravljanje in brisanje katerega koli iskalnika" } } + }, + "matrix": { + "none": "Brez dostopa", + "impliedHint": "Podeli tudi: {permissions}", + "grantedViaAdmin": "Skrbniki to že imajo. Nastavite skrbnika na »Brez dostopa«, da to konfigurirate ločeno.", + "preset": { + "label": "Prednastavitve", + "viewer": "Pregledovalnik", + "viewerDescription": "Samo za branje: oglejte si plošče in predstavnost ter uporabljajte obstoječe aplikacije in integracije.", + "editor": "Urejevalnik", + "editorDescription": "Vsakodnevno upravljanje: ustvarjanje in urejanje plošč, aplikacij, integracij in iskalnikov.", + "admin": "Skrbnik", + "adminDescription": "Neomejen dostop do vseh funkcij in nastavitev, vključno z upravljanjem uporabnikov.", + "custom": "Po meri" + }, + "effective": { + "title": "Učinkovita dovoljenja", + "description": "Celoten, podvojenih elementov očiščen nabor dejanj, ki jih lahko izvajajo člani te skupine, vključno z dovoljenji, podeljenimi posredno.", + "empty": "Nobeno dovoljenje ni izbrano" + }, + "noneDescription": "Člani nimajo dostopa do tega območja.", + "level": { + "view": "Ogled", + "use": "Uporaba", + "interact": "Interakcija", + "modify": "Spreminjanje", + "full": "Polni dostop" + }, + "capabilityIncluded": "Že vključeno v »{level}«" } }, "memberNotice": { @@ -607,21 +676,24 @@ "search": "Poišči aplikacijo", "page": { "list": { - "title": "Aplikacije", + "ariaLabel": "Konfigurirane aplikacije", "noResults": { "title": "Ni še nobenih aplikacij", - "action": "Ustvari svojo prvo aplikacijo" + "description": "Aplikacije so povezave do storitev in orodij, ki jih želite na svojih ploščah.", + "action": "Ustvari svojo prvo aplikacijo", + "filteredTitle": "Iskanju ne ustreza nobena aplikacija", + "filteredDescription": "Iskanju »{search}« ne ustreza nobena aplikacija. Poskusite z drugim imenom ali URL-jem.", + "createOnlyTitle": "Dodate lahko samo aplikacije", + "createOnlyDescription": "Vaša dovoljenja omogočajo ustvarjanje aplikacij, ne pa tudi brskanja po obstoječih. Za ogled celotnega seznama prosite skrbnika za dostop do upravljanja aplikacij." } }, "create": { "title": "Nova aplikacija", "notification": { "success": { - "title": "Ustvarjanje uspešno", "message": "Aplikacija je bila uspešno ustvarjena" }, "error": { - "title": "Ustvarjanje ni uspelo", "message": "Aplikacije ni bilo mogoče ustvariti" } } @@ -630,11 +702,9 @@ "title": "Uredi aplikacijo", "notification": { "success": { - "title": "Spremembe so bile uspešno uveljavljene", "message": "Aplikacija je bila uspešno shranjena" }, "error": { - "title": "Sprememb ni mogoče uveljaviti", "message": "Aplikacije ni bilo mogoče shraniti" } } @@ -644,26 +714,18 @@ "message": "Ali ste prepričani, da želite izbrisati aplikacijo {name}?", "notification": { "success": { - "title": "Brisanje uspešno", "message": "Aplikacija je bila uspešno izbrisana" }, "error": { - "title": "Brisanje ni uspelo", "message": "Aplikacije ni mogoče izbrisati" } } } }, "field": { - "name": { - "label": "Ime" - }, "description": { "label": "Opis" }, - "url": { - "label": "Url" - }, "useDifferentUrlForPing": { "checkbox": { "label": "Uporabi drug URL za preverjanje dosegljivosti", @@ -678,34 +740,582 @@ "search": "Iskanje aplikacije", "noResults": "Ni rezultatov", "action": "Izberi {app}", - "title": "Izberite aplikacijo, ki jo želite dodati na to tablo" + "title": "Izberite aplikacijo, ki jo želite dodati na to tablo", + "toggle": "Kliknite za izbiro", + "selected": "Izbrano", + "multiple": "Dodaj {count}", + "selectedCount": "{count, plural, one {# izbran} two {# izbrana} few {# izbrani} other {# izbranih}}", + "appsSelected": "{count, plural, one {# izbrana aplikacija} two {# izbrani aplikaciji} few {# izbrane aplikacije} other {# izbranih aplikacij}}", + "selectMultiple": "Izberi več", + "cancelMultiple": "Izhod iz večkratne izbire", + "customApplication": "Prilagojena aplikacija", + "application": "Aplikacija" }, "create": { "title": "Ustvari novo aplikacijo", "description": "Ustvari novo aplikacijo ", "action": "Odpri ustvarjanje aplikacije" + } + } + }, + "tips": { + "dismiss": "Opusti namig", + "multiSelectApps": "Namig: pridržite Ctrl / ⌘ za izbiro več aplikacij hkrati" + }, + "customWidget": { + "secretEntry": { + "title": "Konfiguriraj vir API", + "description": "Potrdite URL strežnika in vnesite poverilnice. Homarr šifrira skrivne vrednosti in jih nikoli ne vrne agentu, ki jih je zahteval.", + "loading": "Nalaganje varne zahteve…", + "applying": "Uveljavljanje te konfiguracije… To stran pustite odprto.", + "saved": "Vir API je konfiguriran. To stran lahko zaprete.", + "unavailable": "Zahteva ni na voljo", + "saveError": "Vira API ni bilo mogoče konfigurirati", + "source": "Vir API: {name}", + "baseUrl": "URL strežnika", + "networkScope": "Omrežni dostop", + "save": "Shrani konfiguracijo API", + "expires": "Ta enkratna zahteva poteče ob {time}." + }, + "page": { + "list": { + "noResults": "Pripomočkov po meri še ni. Ustvarite svojega prvega!", + "noDescription": "Brez opisa", + "enabled": "Omogočeno", + "disabled": "Invalidi", + "disabledDescription": "Ta gradnik ostane konfiguriran, vendar se ne bo naložil na nobeni plošči.", + "requestCount": "{count, plural, one {# zahteva} two {# zahtevi} few {# zahteve} other {# zahtev}}", + "invalidDefinition": "Neveljavna definicija", + "migrationRequired": "Zahtevana je migracija", + "migrationInstructions": "Odprite Dejanja, da kopirate ali izvozite izvirno definicijo v1 za ročno poustvaritev. Uporabite lahko tudi poziv za migracijo z LLM. Obstoječe umestitve na ploščah bodo po migraciji še naprej delovale.", + "missingCredentials": "{count, plural, one {Manjka poverilnica} two {Manjkati morata # poverilnici} few {Manjkajo # poverilnice} other {Manjka # poverilnic}}", + "missingCredentialsDescription": "{count, plural, one {Ta gradnik še vedno potrebuje eno poverilnico.} two {Ta gradnik še vedno potrebuje # poverilnici.} few {Ta gradnik še vedno potrebuje # poverilnice.} other {Ta gradnik še vedno potrebuje # poverilnic.}} Izberite to značko za konfiguracijo URL-ja in šifriranih vrednosti." }, - "add": "Dodaj aplikacijo" + "create": { + "title": "Ustvari pripomoček po meri", + "subtitle": "Določite URL API-ja, preverjanje pristnosti in način prikaza podatkov odgovora." + }, + "tabs": { + "ariaLabel": "Razdelki prilagojenega gradnika", + "installed": "Nameščeno", + "workshop": "Delavnica" + } + }, + "action": { + "pasteImportHint": "Prilepite celoten JSON prilagojenega gradnika s Ctrl+V ali Command+V", + "delete": "Izbriši pripomoček po meri", + "deleteConfirm": "Ali ste prepričani, da želite izbrisati »{name}«? Tega dejanja ni mogoče razveljaviti.", + "export": "Izvozi", + "duplicate": "Podvoji", + "aiPrompt": "Oblikuj z UI", + "copyAiPrompt": "Kopiraj poziv AI", + "enable": "Omogoči", + "disable": "Onemogoči", + "menu": "Dejanja", + "downloadSkill": "Ogled veščine prilagojenega gradnika", + "publishWorkshop": "Objavi v delavnici", + "migrate": "Preseli prilagojeni gradnik", + "configureSources": "Konfiguriraj vire", + "copyLegacyDefinition": "Kopiraj izvirno vsebino gradnika", + "exportLegacyDefinition": "Izvozi izvirno vsebino gradnika", + "copyMigrationPrompt": "Kopiraj poziv za migracijo LLM", + "pasteMigration": "Prilepi preseljeni gradnik", + "importMigration": "Uvozi preseljeno datoteko JSON" + }, + "sourceSetupDialog": { + "title": "Konfiguriraj vire gradnika", + "description": "Preverite, kam se ta gradnik povezuje, ter dodajte ali zamenjajte njegove šifrirane poverilnice.", + "credentialsRequired": "Zahteve ne bodo uspešne, dokler ne dodate zahtevanih poverilnic.", + "save": "Shrani konfiguracijo" + }, + "field": { + "description": "Opis" + }, + "editor": { + "errorBoundary": { + "title": "Nekaj je šlo narobe" + }, + "action": { + "components": "Komponente", + "format": "Oblikuj", + "insertStarter": "Vstavi začetni primer", + "redo": "Ponovi", + "copied": "Kopirano", + "schema": "Shema" + }, + "reference": { + "minimal": "Minimalni primer", + "full": "Celoten primer" + }, + "componentReference": { + "search": "Išči komponente", + "empty": "Ni ustreznih komponent", + "count": "Na voljo je {count, number} komponent" + }, + "status": { + "errors": "{count, number} napak", + "warnings": "{count, number} opozoril", + "ready": "Težav ni bilo mogoče najti", + "position": "Vrstica {line, number}, stolpec {column, number}", + "characters": "{count, number} znakov", + "charactersWithLimit": "{count, number} / {limit, number}" + }, + "diagnostics": { + "title": "Diagnostika predloge", + "line": "Vrstica {line, number}", + "ast": "{value}", + "bindingTypeConflict": "Vnos »{value}« si delijo kontrolniki z nezdružljivimi vrstami vrednosti.", + "runtimeBindingTypeConflict": "Vnos »{value}« je vezan kot {firstType} in {secondType}.", + "dynamicRequestId": "Zahtevan je dobesedni requestId. Dinamični ID-ji zahtev niso sprejeti.", + "dynamicInputBinding": "Za bind je zahtevano dobesedno ime vnosa.", + "inlineRequestProps": "Omrežne komponente sprejemajo requestId in params; vgrajene lastnosti URL, method, header in body so blokirane.", + "invalidRequestManifest": "Poimenovane zahteve morajo biti veljaven zemljevid zahtev. {value}", + "missingRequestId": "Ta omrežna komponenta zahteva dobesedni requestId.", + "templateEmpty": "Vnesite predlogo JSX.", + "templateTooLong": "Predloga presega omejitev 50.000 znakov.", + "unknownRequest": "Poimenovana zahteva z ID-jem »{value}« ne obstaja." + } + }, + "workbench": { + "configure": "Konfiguriraj", + "sectionNavigation": "Razdelki prilagojenega gradnika", + "widgetPreview": "Predogled gradnika", + "generalInformation": "Splošne informacije", + "invalidWidget": "Neveljaven gradnik", + "section": { + "general": "Splošno", + "sources": "Viri API", + "requests": "Zahteve", + "options": "Možnosti", + "jsx": "JSX", + "preview": "Predogled" + }, + "status": { + "unsaved": "Neshranjene spremembe", + "invalid": "Zahteva pozornost", + "ready": "Pripravljeno" + }, + "saveError": { + "title": "Gradnik ni bil shranjen", + "description": "Odpravite te napake pri preverjanju in znova shranite.", + "more": "V delovni mizi je prikazanih še +{count} napak.", + "errors": "Napake pri preverjanju", + "copy": "Kopiraj napake", + "copied": "Napake so kopirane" + }, + "action": { + "preview": "Preizkusi in predoglej", + "previewLoading": "Preizkušanje zahtev" + }, + "requests": { + "title": "Poimenovane poizvedbe in dejanja", + "label": "Zahteve", + "description": "Poizvedbe naložijo podatke; dejanja se izvedejo šele po interakciji uporabnika. Za obe vrsti je veljavna katera koli metoda HTTP." + }, + "options": { + "title": "Možnosti gradnika" + }, + "builder": { + "advancedManifest": "Napredni neobdelani manifest", + "advancedJson": "Napredni manifest JSON", + "manifestFilename": "widget.json", + "request": "Zahteva {count, number}", + "requestId": "ID zahteve", + "type": "Vrsta odjemalca za prenose", + "method": "Metoda", + "source": "Vir API", + "run": "Zaženi", + "runLoad": "Ob nalaganju gradnika", + "runManual": "Iz SubFetch", + "permission": "Dovoljenje", + "path": "Pot", + "pathDescription": "Za možnosti gradnika uporabite »{option:name}«, za vrednosti priklica pa »{param:name}«.", + "requestDetails": "Poizvedba, telo in vedenje", + "queryValues": "Vrednosti poizvedbe", + "queryKey": "Ključ poizvedbe", + "queryKeyInvalid": "Uporabite enolični ID, ki se začne s črko in vsebuje samo črke, številke, - ali _.", + "valueSource": "Vir vrednosti", + "literal": "Dobesedna vrednost", + "widgetOption": "Možnost gradnika", + "invocationParameter": "Parameter priklica", + "option": "Možnost", + "parameterName": "Ime parametra", + "value": "Vrednost", + "removeQueryValue": "Odstrani vrednost poizvedbe", + "addQueryValue": "Dodaj vrednost poizvedbe", + "jsonBody": "Telo JSON", + "jsonBodyDescription": "Izbirno. Vstavite sklice $option in $param na kateri koli globini.", + "insertOptionReference": "Vstavi sklic na možnost", + "insertParameterReference": "Vstavi sklic na parameter", + "confirmation": "Potrditveno sporočilo", + "invalidation": "Osveži po uspehu", + "invalidationDescription": "ID-ji poizvedb, ločeni z vejicami", + "noAuth": "Pošlji brez preverjanja pristnosti vira", + "moveRequestUp": "Premakni zahtevo navzgor", + "moveRequestDown": "Premakni zahtevo navzdol", + "removeRequest": "Odstrani zahtevo", + "addRequest": "Dodaj zahtevo", + "optionName": "Ime možnosti", + "label": "Oznaka", + "control": "Kontrolnik", + "description": "Opis", + "default": "Privzeto", + "optionDetails": "Omejitve in dinamične izbire", + "minimum": "Najmanj", + "maximum": "Največ", + "step": "Korak", + "choiceLabel": "Oznaka izbire", + "choiceValue": "Vrednost izbire", + "newChoice": "Nova izbira", + "addChoice": "Dodaj izbiro", + "removeChoice": "Odstrani izbiro", + "choicesRequest": "Naloži izbire iz zahteve", + "itemsPath": "Pot elementov", + "itemsPathPlaceholder": "elementi (izbirno)", + "valuePath": "Pot vrednosti", + "labelPath": "Pot oznake", + "group": "Skupina", + "advancedOption": "Napredna možnost", + "moveOptionUp": "Premakni možnost navzgor", + "moveOptionDown": "Premakni možnost navzdol", + "removeOption": "Odstrani možnost", + "addOption": "Dodaj možnost", + "invalidJson": "Neveljaven JSON", + "invalidWidget": "Neveljaven gradnik" + }, + "jsx": { + "title": "Predloga JSX", + "label": "Predloga" + }, + "sources": { + "title": "Viri API in poverilnice", + "newName": "API {count, number}", + "duplicateSourceId": "ID-ji virov API morajo biti enolični.", + "credentialRemoved": "Poverilnica odstranjena", + "credentialRemovedDescription": "Shranjena vrednost je bila izbrisana.", + "primary": "Primarni API", + "id": "ID vira", + "name": "Ime opravila", + "baseUrl": "Osnovni URL", + "baseUrlError": { + "invalid": "Vnesite celoten URL.", + "protocol": "Uporabite URL HTTP ali HTTPS.", + "credentials": "Iz tega URL-ja odstranite uporabniško ime in geslo. Poverilnice namesto tega konfigurirajte spodaj.", + "queryOrFragment": "Iz tega osnovnega URL-ja odstranite poizvedbeni niz ali fragment. Vrednosti poizvedbe dodajte imenovani zahtevi." + }, + "networkScope": "Omrežni dostop", + "authentication": "Preverjanje pristnosti", + "headerName": "Ime glave", + "queryParameter": "Parameter poizvedbe", + "configured": "Konfigurirano — vnesite zamenjavo", + "clear": "Počisti", + "remove": "Odstrani vir in njegove zahteve", + "advanced": "Napredno", + "add": "Dodaj drug vir API", + "sourceType": "Integracija", + "manualSource": "API HTTP", + "existingIntegration": "Obstoječa integracija", + "integrationType": "Vrsta integracije", + "selectIntegration": "Konfigurirana integracija", + "noIntegrations": "Ustrezne integracije niso na voljo", + "integrationUnavailable": "Izbrana integracija ni več na voljo. Izberite drugo integracijo.", + "integrationDescription": "Uporablja shranjeni URL in poverilnice integracije. Spremembe se uporabijo samodejno. Za izvajanje zahtev je potreben polni dostop do integracije." + }, + "ai": { + "title": "Ustvarite ali popravite s katerim koli UI", + "description": "Najprej dodajte URL dokumentacije API, če ga imate. Za popravke po možnosti zaženite predogled. Poziv kopirajte v kateri koli UI; ta lahko zahteva manjkajoče podrobnosti. Končni JSON prilepite sem.", + "request": "Kaj naj ta gradnik počne?", + "documentationUrl": "URL dokumentacije API (izbirno)", + "paste": "Prilepi", + "response": "Odgovor UI", + "manualCopyDescription": "Dostop do odložišča ni na voljo. Izberite spodnji poziv in ga ročno kopirajte.", + "manualPasteDescription": "Dostop do odložišča ni na voljo ali pa je treba kopirani odgovor popraviti. Sem prilepite odgovor UI v obliki JSON.", + "selectAll": "Izberi vse", + "loadResponse": "Naloži odgovor", + "loaded": "Gradnik je naložen v urejevalnik", + "invalidResponse": "Odložišče ne vsebuje veljavnega gradnika v2.", + "invalidResponseDetail": "Odgovor umetne inteligence ni veljaven: {message}" + }, + "preview": { + "invalid": "Odpravite napake preverjanja, da si ogledate predogled tega gradnika.", + "fixtureError": "Napaka testnih podatkov predogleda", + "requestData": "Zahtevaj podatke", + "status": { + "idle": "Zahteve še niso bile preizkušene", + "loading": "Preizkušanje zahtev", + "success": "Vse zahteve za nalaganje so bile uspešne", + "error": "Ena ali več zahtev za nalaganje ni uspela" + }, + "result": { + "loading": { + "title": "Preizkušanje zahtev API-ja", + "description": "Homarr ustvarja sejo predogleda in nalaga podatke gradnika." + }, + "success": { + "title": "Predogled je pripravljen", + "description": "{succeeded, plural, =0 {Ta gradnik nima zahtev za nalaganje.} one {# zahteva za nalaganje je bila uspešna.} two {# zahtevi za nalaganje sta bili uspešni.} few {# zahteve za nalaganje so bile uspešne.} other {# zahtev za nalaganje je bilo uspešnih.}} Odprite Podatke za pregled odgovora." + }, + "error": { + "title": "Predogled je končan z napakami zahtev", + "description": "Uspešnih: {succeeded, number}, neuspešnih: {failed, number}. Odprite Podatke za ogled podrobnosti o odgovoru in napakah." + } + }, + "instanceOptions": "Možnosti primerka", + "liveActions": "Zaženite dejanja v konfiguriranem API-ju", + "liveActionsDescription": "Izklop pomeni varno simulacijo. Vklop vpliva na dejansko storitev.", + "noActions": "Dejanja niso določena.", + "containedFailures": "Napake med izvajanjem ostanejo znotraj tega gradnika. Dnevniki zahtev nikoli ne vsebujejo skrivnih vrednosti.", + "validation": { + "title": "Preverjanje", + "ready": "Definicija gradnika je veljavna." + }, + "accessibility": { + "title": "Preverjanja dostopnosti", + "ready": "Pogoste pomanjkljivosti dostopnosti niso bile zaznane.", + "pending": "Preverjanja dostopnosti se bodo izvedla, ko bo definicija gradnika veljavna.", + "imageAlt": "Vsaki sliki dodajte nadomestno besedilo; prazno nadomestno besedilo uporabite le pri okrasnih slikah.", + "actionIconLabel": "Vsakemu ActionIcon dodajte aria-label ali naslov.", + "inputLabel": "Vsakemu vnosu dodajte vidno oznako ali dostopno ime." + }, + "journal": "Zapisnik zahtev z odstranjenimi občutljivimi podatki", + "actionParameters": "Parametri dejanja (JSON)", + "invalidParameters": "Uporabite deklarirane tipe parametrov: niz, število in logična vrednost.", + "runDestructive": "Zaženi destruktivno dejanje", + "runAction": "Zaženi dejanje", + "deleteConfirmation": "To dejanje predogleda spremeni oddaljene podatke prek konfiguriranega API-ja.", + "simulated": "Dejanje je simulirano", + "httpStatus": "HTTP {status, number}", + "tab": { + "widget": "Gradnik", + "data": "Podatki", + "options": "Možnosti", + "state": "Stanje opravila", + "actions": "Kontrolniki", + "diagnostics": "Diagnostika" + }, + "size": { + "compact": "Kompaktno", + "standard": "Standardno", + "wide": "Široko" + }, + "fixture": { + "live": "V živo", + "loading": "Nalaganje", + "empty": "Prazno", + "error": "Napaka" + } + } + }, + "preview": { + "request": { + "permission": { + "view": "Ogled", + "modify": "Spreminjanje", + "full": "Poln dostop" + } + } + }, + "notification": { + "created": "Pripomoček »{name}« je bil uspešno ustvarjen.", + "updated": "Pripomoček »{name}« je bil uspešno posodobljen.", + "deleted": "Pripomoček »{name}« je izbrisan.", + "imported": "Pripomoček je bil uspešno uvožen.", + "migrated": "Podedovani gradnik je bil uspešno preseljen. Obstoječe umestitve na nadzorni plošči zdaj uporabljajo definicijo v2.", + "migrationError": "Selitev podedovanega gradnika ni uspela. Prepričajte se, da datoteka uporablja shemo homarr-custom-widget-v2.", + "legacyDefinitionCopied": "Vsebina izvirnega gradnika je bila kopirana. Shranjene poverilnice niso vključene.", + "legacyDefinitionCopyError": "Kopiranje izvirne vsebine gradnika ni uspelo.", + "migrationPromptCopied": "Poziv za selitev z odstranjenimi občutljivimi podatki je bil kopiran. Prilepite ga v LLM, kopirajte njegov edini odgovor JSON in nato izberite »Sem prilepi preseljeni gradnik«.", + "migrationPromptCopyError": "Kopiranje poziva za selitev ni uspelo.", + "sourcesConfigured": "Viri gradnika in poverilnice so shranjeni.", + "sourceConfigurationError": "Konfiguriranje virov gradnika ni uspelo.", + "aiPromptCopiedWithCount": "Poziv UI je kopiran v odložišče ({count, number} znakov).", + "aiPromptCopyError": "Poziva ni bilo mogoče kopirati v odložišče. Vaš brskalnik morda ne podpira te funkcije.", + "aiPromptSent": "Poziv je poslan. Med delom pomočnika v ozadju lahko nadaljujete z urejanjem.", + "updateError": "Pripomočka ni bilo mogoče posodobiti. Spremembe niso bile shranjene.", + "importError": "Pripomočka ni bilo mogoče uvoziti. Prepričajte se, da je datoteka veljaven izvoz pripomočka po meri JSON.", + "exportError": "Pripomočka ni bilo mogoče izvoziti.", + "duplicated": "Pripomoček »{name}« je podvojen.", + "duplicateError": "Pripomočka ni bilo mogoče podvojiti.", + "toggleError": "Stanja pripomočka ni bilo mogoče preklopiti.", + "deleteError": "Pripomočka ni bilo mogoče izbrisati.", + "previewError": "Predogleda ni bilo mogoče pridobiti. Preverite URL in poskusite znova." + }, + "importReview": { + "title": "Pregled uvoza gradnika po meri", + "description": "Pred uvozom preverite, kam se ta gradnik povezuje in kakšen dostop do nadzorne plošče zahtevajo njegovi kontrolniki.", + "migrationTitle": "Pregled preseljenega nadomestnega gradnika v2", + "migrationDescription": "Preglejte in potrdite to ustvarjeno definicijo v2. S potrditvijo se atomsko zamenja ohranjeni zapis v1, obstoječe umestitve na nadzorni plošči pa ostanejo povezane z istim ID-jem gradnika.", + "fileLabel": "Izberite datoteko JSON gradnika po meri", + "name": "Ime opravila", + "origin": "Osnovno izhodišče", + "authentication": "Preverjanje pristnosti", + "networkScope": "Obseg omrežja", + "methods": "Metode HTTP", + "permissions": "Zahtevana dovoljenja za nadzorno ploščo", + "sourceSetup": { + "title": "Konfiguriranje virov API-ja", + "description": "Potrdite, kam se ta gradnik povezuje, in dodajte poverilnice. Zasebni URL-ji in URL-ji povratne zanke so značilni za vašo namestitev Homarr.", + "suggestedUrl": "Predlagani URL", + "confirmUrl": "Potrjujem, da je ta URL strežnika pravilen za mojo namestitev Homarr", + "ready": "URL je pripravljen", + "needsUrl": "Potrdi URL", + "credentialsMissing": "Poverilnice manjkajo", + "credentialsOptional": "Namestite lahko brez poverilnic in jih konfigurirate pozneje, vendar bodo zahteve do njihovega dodajanja neuspešne." + }, + "actionWarning": { + "title": "Ta gradnik lahko spreminja oddaljene podatke", + "description": "Po uvozu preglejte vsako poimenovano dejanje, podedovano poverilnico in potrditev destruktivnega dejanja. Skrivnosti niso vključene v datoteko." + }, + "cancel": "Prekliči uvoz", + "confirm": "Uvozi gradnik", + "confirmMigration": "Potrdi zamenjavo v2" + }, + "secret": { + "apiKey": "Ključ API-ja ali žeton", + "username": "Uporabniško ime", + "password": "Geslo", + "savedPlaceholder": "••••••• (shranjeno, pustite prazno, da ohranite)" + } + }, + "workshop": { + "title": "Delavnica", + "browseWorkshop": "Prebrskaj delavnico", + "openCommunity": "Odpri delavnico", + "openOnWorkshop": "Odpri {title} na spletnem mestu delavnice", + "back": "Nazaj na delavnico", + "search": "Iskanje gradnikov", + "searchCss": "Iskanje tem CSS", + "sort": "Razvrsti", + "sortTop": "Najbolje ocenjeni", + "sortNewest": "Najnovejši", + "listAriaLabel": "Gradniki delavnice", + "listAriaLabelCss": "Teme CSS delavnice", + "empty": "Temu iskanju ne ustreza noben gradnik.", + "emptyDescription": "Gradniki skupnosti, objavljeni v delavnici, so prikazani tukaj.", + "emptyFilteredTitle": "Temu iskanju ne ustreza noben gradnik", + "emptyFilteredDescription": "Noben gradnik delavnice ne ustreza »{search}«.", + "emptyCss": "Temu iskanju ne ustreza nobena tema CSS.", + "unavailableTitle": "Delavnica Homarr ni na voljo", + "unavailable": "Storitev skupnosti je morda začasno nedosegljiva. Poskusite znova čez trenutek. To ne vpliva na nameščene gradnike.", + "loadError": "Tega prispevka ni bilo mogoče naložiti.", + "noDescription": "Brez opisa", + "author": "od {name}", + "communityMember": "Član skupnosti", + "outdated": "Zastarelo", + "outdatedWarning": "Avtor je ta prispevek označil kot zastarel. Pred uvozom ga natančno preglejte.", + "score": "Ocena: {count, number}", + "upvote": "Glas za", + "downvote": "Glas proti", + "voteError": "Glasovanja ni bilo mogoče shraniti.", + "signIn": "Prijava z GitHubom", + "signInError": "Prijava v GitHub ni uspela. Preverite, ali je ponudnik OAuth za delavnico konfiguriran in ali so pojavna okna dovoljena.", + "signOut": "Odjava", + "signInHint": "Prijavite se za glasovanje ali prijavo. Za namestitev račun delavnice ni potreben.", + "securityNotice": "Gradniki delavnice lahko kličejo svoje deklarirane vire API-ja in izvajajo deklarirana dejanja s poverilnicami, ki jih konfigurirate lokalno. Skrivnosti niso nikoli vključene.", + "securityNoticeCss": "CSS skupnosti lahko spremeni videz in uporabnost nadzorne plošče. Pred uvozom ga preglejte; nič ni shranjeno, dokler ne shranite nastavitev nadzorne plošče.", + "install": "Namesti", + "installReviewTitle": "Preglej pred namestitvijo", + "installError": "Tega gradnika ni mogoče namestiti", + "installErrorDescription": "Prispevek v delavnici ni veljaven gradnik Custom JSX v2.", + "useCss": "Uvozi CSS", + "importCss": "Uvozi CSS iz delavnice", + "importCssConfirm": "Zamenjam trenutni CSS z »{title}«? Nič ni shranjeno, dokler ne shranite nastavitev nadzorne plošče.", + "screenshotAlt": "Posnetek zaslona {title}, {count, number}", + "screenshotViewer": "Pregledovalnik posnetkov zaslona {title}", + "screenshotsLabel": "Posnetki zaslona {title}", + "zoomScreenshot": "Prikaži polno velikost", + "previousScreenshot": "Prejšnji posnetek zaslona", + "nextScreenshot": "Naslednji posnetek zaslona", + "showScreenshotThumbnails": "Prikaži sličice posnetkov zaslona", + "hideScreenshotThumbnails": "Skrij sličice posnetkov zaslona", + "closeScreenshotViewer": "Zapri pregledovalnik posnetkov zaslona", + "technicalDetails": "Tehnične podrobnosti", + "sourceCode": "Vnos v delavnici", + "export": "Izvozi", + "report": "Prijavi", + "reportTitle": "Prijavi prispevek", + "reportReason": "Razlog", + "reportExplanation": "Kaj morajo moderatorji delavnice vedeti?", + "reportSend": "Pošlji prijavo", + "reportSent": "Prijava poslana", + "reportSentDescription": "Moderatorji delavnice lahko zdaj pregledajo ta prispevek.", + "reportCount": "{count, plural, one {# prijava} two {# prijavi} few {# prijave} other {# prijav}}", + "reportWarning": "{count, plural, one {Ta prispevek ima # odprto prijavo skupnosti.} two {Ta prispevek ima # odprti prijavi skupnosti.} few {Ta prispevek ima # odprte prijave skupnosti.} other {Ta prispevek ima # odprtih prijav skupnosti.}} Še vedno ga je mogoče namestiti, vendar najprej preglejte njegovo vsebino.", + "reportVisibility": "Podrobnosti prijave so vidne le avtorju tega prispevka in skrbnikom delavnice.", + "reportCategory": { + "outdated": "Zastarelo ali ne deluje več", + "malicious": "Zlonamerno", + "spam": "Neželena pošta", + "copyright": "Avtorske pravice", + "inappropriate": "Neprimerno", + "other": "Drugo" + }, + "publish": { + "title": "Objavi v delavnici", + "introTitle": "Deli ta gradnik s skupnostjo", + "introDescription": "Homarr izvozi kopijo trenutnega gradnika brez poverilnic. Dodajte jasne podrobnosti vnosa, da bodo uporabniki pred namestitvijo vedeli, kaj gradnik počne.", + "listingDetails": "Vnos v delavnici", + "listingDetailsDescription": "Te podrobnosti so javno prikazane skupaj z izvoženo definicijo gradnika.", + "success": "Objavljeno takoj. Člani skupnosti lahko zdaj namestijo in prijavijo ta gradnik.", + "successTitle": "Vaš gradnik je objavljen", + "manageDescription": "Odprite prispevek, da posodobite njegov vnos, pregledate prijave, ga označite kot zastarelega ali izbrišete. Upravljanje prispevka poteka neposredno na spletnem mestu delavnice.", + "viewSubmission": "Ogled in upravljanje prispevka", + "done": "Končano", + "signInHint": "Prijavite se za objavo pod svojo identiteto v delavnici.", + "titleField": "Naslov", + "descriptionField": "Opis", + "screenshots": "Posnetki zaslona", + "screenshotsDescription": "Do pet slik PNG, JPEG ali WebP", + "screenshotsPlaceholder": "Izberite posnetke zaslona", + "invalidScreenshot": "Uporabite slike PNG, JPEG ali WebP, velike največ {maxSize} vsaka.", + "privateSourceWarning": "Ta gradnik vsebuje zasebne izvorne URL-je za: {sources}. Pred objavo zamenjajte osebne gostitelje ali naslove IP z varnimi nadomestnimi mesti storitev.", + "reviewSourcesTitle": "Preglej zasebne izvorne URL-je", + "privateSourceConfirmation": "Pregledal/-a sem te izvorne URL-je in ne razkrivajo podrobnosti zasebne infrastrukture", + "action": "Objavi zdaj", + "publicationNote": "Objava je takojšnja. Prispevek lahko nato upravljate v delavnici.", + "definitionChanged": "Gradnik se je med pripravo objave spremenil. Znova preglejte njegove zasebne izvorne URL-je in poskusite znova.", + "error": "Objava ni uspela" } }, "integration": { + "completion": { + "modalTitle": "Storitev je pripravljena", + "title": "{name} je povezan", + "description": "Povezava je uspešno prestala preizkus. Izberite, kaj želite naslednje prikazati na tej nadzorni plošči.", + "connectionReady": "Povezava s storitvijo je pripravljena", + "appReady": "Bližnjica aplikacije je pripravljena", + "compatibleWidgets": "{count, plural, =0 {Na voljo ni združljivih gradnikov} one {Na voljo je # združljiv gradnik} two {Na voljo sta # združljiva gradnika} few {Na voljo so # združljivi gradniki} other {Na voljo je # združljivih gradnikov}}", + "chooseWidget": "Izberite gradnik", + "recipes": { + "title": "Priporočeno za to nadzorno ploščo", + "description": "Na podlagi povezanih storitev in gradnikov, ki so že na tej nadzorni plošči.", + "newConnectionReason": "Zdaj na voljo prek {integration}", + "existingConnectionReason": "Deluje s storitvijo, ki ste jo že povezali", + "dismiss": "Opusti priporočila za to storitev na tej nadzorni plošči" + } + }, "page": { "list": { - "title": "Integracije", + "ariaLabel": "Konfigurirane integracije", "search": "Išči integracije", + "scopedNote": "Prikazane so samo integracije, ki jih lahko upravljate.", "noResults": { - "title": "Ni še nobenih integracij" + "title": "Ni še nobenih integracij", + "description": "Povežite storitev, da boste lahko njene podatke in dejanja uporabljali v gradnikih Homarr.", + "action": "Ustvari prvo integracijo", + "filteredTitle": "Nobena integracija ne ustreza vašemu iskanju", + "filteredDescription": "Nobena integracija ne ustreza »{search}«. Poskusite z drugim imenom, vrsto ali URL-jem.", + "createOnlyTitle": "Dodate lahko samo integracije", + "createOnlyDescription": "Vaša dovoljenja omogočajo ustvarjanje integracij, ne pa tudi upravljanja obstoječih. Skrbnika prosite za dostop do tistih, ki jih potrebujete." } }, "create": { "title": "Nova integracija {name}", "notification": { "success": { - "title": "Ustvarjanje uspešno", "message": "Integracija je bila uspešno ustvarjena" }, "error": { - "title": "Ustvarjanje ni uspelo", "message": "Integracije ni bilo mogoče ustvariti" } }, @@ -729,11 +1339,9 @@ "title": "Uredi integracijo {name}", "notification": { "success": { - "title": "Spremembe uspešno uveljavljene", "message": "Integracija je bila uspešno shranjena" }, "error": { - "title": "Sprememb ni mogoče uveljaviti", "message": "Integracije ni bilo mogoče shraniti" } }, @@ -750,23 +1358,15 @@ "message": "Ali ste prepričani, da želite izbrisati integracijo {name}?", "notification": { "success": { - "title": "Brisanje uspešno", "message": "Integracija je bila uspešno izbrisana" }, "error": { - "title": "Brisanje ni uspelo", "message": "Integracije ni mogoče izbrisati" } } } }, "field": { - "name": { - "label": "Ime" - }, - "url": { - "label": "Url" - }, "attemptSearchEngineCreation": { "label": "Ustvari iskalnik", "description": "Integracijo »{kind}« je mogoče uporabljati z iskalniki. Potrdite to možnost za samodejno nastavitev iskalnika." @@ -778,6 +1378,10 @@ "label": "Ustvari apl.", "description": "Ustvarite aplikacijo z enakim imenom in ikono kot integracija. Če spodnje vnosno polje pustite prazno, bo aplikacija ustvarjena z URL-jem integracije." }, + "linkApp": { + "label": "Poveži obstoječo aplikacijo", + "description": "To integracijo povežite z aplikacijo, ki jo že lahko uporabljate." + }, "appHref": { "placeholder": "URL aplikacije po meri" }, @@ -791,7 +1395,11 @@ "grid": { "widgetCount": "{count, plural, one {# gradnik} two {# gradnika} few {# gradniki} other {# gradnikov}}", "noWidgets": "Ni gradnikov", - "detected": "Zaznano prek Dockerja" + "detected": "Zaznano prek Dockerja", + "connected": "{count, plural, one {# povezana} two {# povezani} few {# povezane} other {# povezanih}}", + "tiedWidgets": "Povezani gradniki", + "more": "+{count} več", + "loadError": "Integracij ni bilo mogoče naložiti. Pred ustvarjanjem nove povezave poskusite znova." }, "category": { "dnsHole": "DNS", @@ -822,7 +1430,10 @@ "analytics": "Analitika", "vpn": "VPN", "mediaLibrary": "Knjižnica predstavnosti", - "uptimeMonitoring": "Spremljanje razpoložljivosti" + "uptimeMonitoring": "Spremljanje razpoložljivosti", + "beszel": "Beszel", + "systemMonitoring": "Sistemsko spremljanje", + "security": "Varnost" }, "testConnection": { "action": { @@ -1107,6 +1718,22 @@ "slug": { "label": "Kratko ime strani stanja", "newLabel": "Novo kratko ime strani stanja" + }, + "wazuhIndexerUrl": { + "label": "URL indeksatorja", + "newLabel": "Nov URL indeksatorja" + }, + "wazuhIndexerUsername": { + "label": "Uporabniško ime indeksatorja", + "newLabel": "Novo uporabniško ime indeksatorja" + }, + "wazuhIndexerPassword": { + "label": "Geslo indeksatorja", + "newLabel": "Novo geslo indeksatorja" + }, + "wazuhDashboardUrl": { + "label": "URL nadzorne plošče (izbirno)", + "newLabel": "Nov URL nadzorne plošče" } } }, @@ -1115,54 +1742,19 @@ "interact": "Interakcija z integracijami", "full": "Popoln dostop do integracij" }, - "audiobookshelf": { - "name": "Audiobookshelf", - "description": "Samostojno gostujoči strežnik zvočnih knjig in podkastov" - }, - "navidrome": { - "name": "Navidrome", - "description": "Samostojno gostujoči strežnik za pretakanje glasbe z združljivostjo z API-jem Subsonic" - }, - "uptimeKuma": { - "name": "Uptime Kuma", - "description": "Samostojno gostujoče spremljanje razpoložljivosti z javnimi stranmi stanja", - "secret": { - "slug": { - "description": "Kratko ime javne strani stanja. Če ni nastavljeno, je privzeta vrednost »default«." - }, - "apiKey": { - "description": "Neobvezen ključ API za overjeni dostop do /metrics" - } - } - }, - "traefik": { - "name": "Traefik", - "description": "Povratni posredniški strežnik in izravnalnik obremenitve, zasnovan za oblak" - }, - "paperlessNgx": { - "name": "Paperless-ngx", - "description": "Sistem za upravljanje dokumentov ter arhiviranje in urejanje optično prebranih dokumentov" - }, - "patchmon": { - "name": "PatchMon", - "description": "Upravljanje popravkov in spremljanje gostiteljev Linux" - }, - "bazarr": { - "name": "Bazarr", - "description": "Spremljevalna aplikacija za Sonarr in Radarr, ki upravlja in prenaša podnapise" - }, - "wud": { - "name": "What's Up Docker", - "description": "Spremljajte, kateri vaši Docker vsebniki imajo na voljo posodobitve slik" + "llamacpp": { + "name": "llama.cpp", + "description": "Spremljajte lokalni llama-server llama.cpp: meritve zdravja, modela in ustvarjanja" } }, "media": { "plural": "Mediji", "search": "Poišči medij", "field": { - "name": "Ime", + "preview": "Predogled", "size": "Velikost", - "creator": "Ustvarjalec" + "creator": "Ustvarjalec", + "actions": "Kontrolniki" }, "action": { "upload": { @@ -1190,10 +1782,12 @@ } }, "copy": { - "label": "Kopiraj URL" + "label": "Kopiraj URL", + "labelNamed": "Kopiraj URL za {name}" }, "open": { - "label": "Odpri medij" + "label": "Odpri medij", + "labelNamed": "Odpri {name}" } }, "noResults": { @@ -1208,7 +1802,6 @@ "add": "Dodaj", "apply": "Uporabi", "backToOverview": "Nazaj na pregled", - "skip": "Preskoči", "change": "Spremeni", "create": "Ustvarite spletno stran", "createAnother": "Ustvari in začni znova", @@ -1231,16 +1824,31 @@ "tryAgain": "Poskusite znova", "loading": "Nalaganje", "show": "Prikaži", - "hide": "Skrij" + "hide": "Skrij", + "undo": "Razveljavi", + "editNamed": "Uredi {name}", + "deleteNamed": "Izbriši {name}", + "clearSearch": "Počisti iskanje", + "copy": "Kopiraj", + "copied": "Kopirano", + "refresh": "Osveži" + }, + "pagination": { + "pageOf": "Stran {page} od {totalPages}" }, "here": "tukaj", + "serviceUrlTemplate": { + "serverTitle": "Običajni naslov strežnika", + "urlModeLabel": "Vzorec naslova storitve", + "hostPort": "Isti gostitelj, drugačna vrata", + "subdomain": "Ena poddomena za vsako storitev", + "path": "Ena pot za vsako storitev" + }, "iconPicker": { "label": "URL ikone", + "description": "Iščite po knjižnici, prilepite URL slike ali naložite datoteko.", "header": "Vnesite ime ali predmete za filtriranje ikon... Homarr bo za vas iskal med {countIcons} ikonami", "headerLoading": "Išči slike po imenu", - "noResults": "Nobena ikona se ne ujema z »{search}«.", - "error": "Ikon ni bilo mogoče naložiti.", - "description": "Iščite po knjižnici, prilepite URL slike ali naložite datoteko.", "clear": "Počisti sliko", "uploadImage": "Naloži sliko", "results": "Rezultati iskanja slik", @@ -1249,7 +1857,9 @@ "otherImages": "Druge slike", "urlLoading": "Preverjanje slike…", "urlReady": "Slika je pripravljena za uporabo", - "urlError": "Te slike ni bilo mogoče naložiti. Preverite URL in poskusite znova." + "urlError": "Te slike ni bilo mogoče naložiti. Preverite URL in poskusite znova.", + "noResults": "Nobena ikona se ne ujema z »{search}«.", + "error": "Ikon ni bilo mogoče naložiti." }, "colorScheme": { "options": { @@ -1261,7 +1871,6 @@ "information": { "min": "Najmanj", "max": "Največ", - "days": "Dnevi", "hours": "Ure", "minutes": "Minute" }, @@ -1298,16 +1907,16 @@ }, "userAvatar": { "menu": { - "switchToDarkMode": "Preklopi na temni način", - "switchToLightMode": "Svetli način", + "open": "Odpri meni uporabniškega avatarja", "management": "Nastavitve", - "docker": "Docker", "preferences": "Prilagoditev", "logout": "Odjava", "login": "Prijava", "homeBoard": "Vaša nadzorna plošča", - "loggedOut": "Odjava uspešna", - "updateAvailable": "Na voljo je {countUpdates} posodobitev: {tag}" + "updateAvailable": "Na voljo je {countUpdates} posodobitev: {tag}", + "assistant": "Pomočnik", + "assistantThinking": "Razmišljanje", + "modifier": "Moderator" } }, "dangerZone": "Nevarno območje", @@ -1355,13 +1964,66 @@ "kilometersPerHour": "km/h", "milesPerHour": "mph" } + }, + "widgetQuery": { + "loading": "Nalaganje podatkov gradnika" + }, + "total": "Skupaj", + "filesystemUsage": "{count, plural, one {Prikaži uporabo za # datotečni sistem} two {Prikaži uporabo za # datotečna sistema} few {Prikaži uporabo za # datotečne sisteme} other {Prikaži uporabo za # datotečnih sistemov}}", + "field": { + "name": "Ime opravila" + }, + "label": { + "new": "Novo" + }, + "entity": { + "apps": "Aplikacije", + "boards": "Deske", + "certificates": "Potrdila", + "customWidgets": "Gradniki po meri", + "groups": "Skupine", + "integrations": "Integracije", + "invites": "Vabi", + "logs": "Dnevniki", + "media": "Predstavnost", + "searchEngines": "Iskalniki", + "tasks": "Opravila", + "users": "Uporabniki" } }, "section": { - "dynamic": { + "option": { + "showLabel": { + "label": "Prikaži oznako", + "description": "Prikaži oznako vsebnika nad njegovo vsebino." + }, + "collapsible": { + "label": "Dovoli strnjevanje", + "description": "Gledalcem omogočite razširjanje in strnjevanje tega vsebnika." + }, + "showOpenAll": { + "label": "Prikaži dejanje »Odpri vse«", + "description": "Prikaži dejanje, ki odpre vsako aplikacijo v tem vsebniku v novih zavihkih." + }, + "scrollable": { + "label": "Z drsnim trakom", + "description": "Ohrani nastavljeno velikost vsebnika in pomikaj njegovo vsebino, namesto da bi vsebnik zrasel, da bi jo vseboval." + } + }, + "action": { + "openAllInNewTabsFor": "Odpri vse aplikacije v {name} v zavihkih" + }, + "openAllInNewTabs": { + "title": "Odpri vse v zavihkih", + "text": "Nekateri brskalniki lahko zaradi varnostnih razlogov blokirajo množično odpiranje zavihkov. Homarr ni mogel odpreti vseh oken, ker je brskalnik to dejanje blokiral. Dovolite »Odpri pojavna okna« in poskusite znova." + }, + "container": { + "untitled": "Vsebnik brez naslova", "action": { - "create": "Nova dinamična vsebina", - "remove": "Odstrani dinamični odsek" + "create": "Nov vsebnik", + "remove": "Odstrani vsebnik", + "expand": "Razširi", + "collapse": "Strni" }, "option": { "title": { @@ -1375,55 +2037,12 @@ } }, "remove": { - "title": "Odstrani dinamični odsek", - "message": "Ali ste prepričani, da želite odstraniti ta dinamični odsek? Elementi bodo premaknjeni na isto mesto v nadrejenem odseku." - } - }, - "category": { - "field": { - "name": { - "label": "Ime" - } - }, - "action": { - "create": "Nova kategorija", - "edit": "Preimenuj kategorijo", - "remove": "Odstrani kategorijo", - "moveUp": "Premaknite se navzgor", - "moveDown": "Premaknite se navzdol", - "createAbove": "Nova kategorija zgoraj", - "createBelow": "Nova kategorija spodaj", - "openAllInNewTabs": "Odpri vse v zavihkih" - }, - "create": { - "title": "Nova kategorija", - "submit": "Dodaj kategorijo" - }, - "remove": { - "title": "Odstrani kategorijo", - "message": "Ali ste prepričani, da želite odstraniti kategorijo {name}?" - }, - "edit": { - "title": "Preimenuj kategorijo", - "submit": "Preimenuj kategorijo" - }, - "menu": { - "label": { - "create": "Nova kategorija", - "changePosition": "Spremeni položaj", - "settings": "Nastavitve" - } - }, - "openAllInNewTabs": { - "title": "Odpri vse v zavihkih", - "text": "Nekateri brskalniki lahko zaradi varnostnih razlogov blokirajo množično odpiranje zavihkov. Homarr ni mogel odpreti vseh oken, ker je brskalnik to dejanje blokiral. Dovolite možnost »Odpri pojavna okna« in poskusite znova." + "message": "Odstranim ta vsebnik? Njegova vsebina bo premaknjena v okoliško območje." } } }, "item": { "action": { - "create": "Nova vsebina", - "import": "Uvozi element", "edit": "Uredi gradnik", "moveResize": "Premakni/spremeni", "duplicate": "Podvoji", @@ -1432,7 +2051,7 @@ "menu": { "label": { "settings": "Nastavitve", - "refresh": "Osveži", + "settingsFor": "Nastavitve za {name}", "options": "Možnosti", "actions": "Dejanja" }, @@ -1441,21 +2060,96 @@ "error": "Napaka", "loading": "Nalaganje", "idle": "Nedejavno" + }, + "notification": { + "saveError": { + "title": "Gradnika ni bilo mogoče shraniti", + "message": "Spremembe gradnika so bile razveljavljene" + } } }, "create": { "title": "Izberite element za dodajanje", "search": "Filtriraj postavke", - "addToBoard": "Dodaj na tablo" + "addToBoard": "Dodaj na tablo", + "addAtPosition": "Dodaj element sem", + "destination": { + "label": "Dodaj v", + "description": "Izberite, kje naj se prikaže gradnik. Pozneje ga lahko še vedno premaknete.", + "mainCanvas": "Glavno platno", + "leftRail": "Levi stolpec", + "rightRail": "Desni stolpec" + }, + "connectionStatus": { + "ready": "Pripravljeno", + "needsSetup": "Potrebna je nastavitev", + "noConnectionRequired": "Povezava ni potrebna" + }, + "customWidget": "Gradnik po meri", + "standalone": "Samostojno", + "missingIntegration": { + "title": "Najprej povežite storitev", + "noPermission": "Ta gradnik potrebuje združljivo povezavo s storitvijo. Prosite skrbnika, naj jo poveže, nato poskusite znova." + }, + "notification": { + "success": { + "title": "Gradnik je dodan", + "message": "{name} je bil dodan na to ploščo.", + "relocatedMessage": "{name} je bil dodan v {destination}, ker izbrani cilj ni bil na voljo." + }, + "error": { + "title": "Elementa ni bilo mogoče dodati", + "message": "Elementa ni bilo mogoče dodati na to nadzorno ploščo" + } + } + }, + "selection": { + "summary": "{count, plural, one {# izbrani element} two {# izbrana elementa} few {# izbrani elementi} other {# izbranih elementov}}", + "selected": "{count, plural, one {# izbran} two {# izbrana} few {# izbrani} other {# izbranih}}", + "copy": "Kopiraj", + "copied": "{count, plural, one {# element je kopiran v odložišče} two {# elementa sta kopirana v odložišče} few {# elementi so kopirani v odložišče} other {# elementov je kopiranih v odložišče}}", + "copyError": "Izbranih elementov ni bilo mogoče kopirati. Brskalnik morda ne dovoljuje dostopa do odložišča.", + "paste": "Prilepi", + "pasteShortcut": "Prilepi kopirane elemente sem (Ctrl / ⌘ + V)", + "pasted": "{count, plural, one {# element je prilepljen} two {# elementa sta prilepljena} few {# elementi so prilepljeni} other {# elementov je prilepljenih}}", + "pasteError": "Odložišča ni bilo mogoče prebrati. Brskalnik morda ne dovoljuje dostopa do odložišča.", + "pasteInvalid": "Odložišče ne vsebuje veljavnih elementov plošče Homarr.", + "pasteUnavailable": "Kopirani elementi ne ustrezajo tej nadzorni plošči.", + "removed": "{count, plural, one {# element je odstranjen} two {# elementa sta odstranjena} few {# elementi so odstranjeni} other {# elementov je odstranjenih}}", + "move": "Premakni", + "moveTo": "Premakni izbrane elemente", + "delete": "Izbriši", + "clear": "Počisti izbor", + "clearShortcut": "Počisti izbor (Escape)", + "saveErrorTitle": "Elementov ni bilo mogoče posodobiti", + "saveErrorMessage": "Sprememb ni bilo mogoče shraniti. Nadzorna plošča je bila osvežena.", + "moveUnavailableTitle": "Izbranih elementov ni bilo mogoče premakniti", + "moveUnavailableMessage": "Na cilju ni dovolj prostora za celoten izbor." }, "moveResize": { "title": "Premakni / spremeni velikost elementa", + "entryLabel": "{name}, stolpec {column}, vrstica {row}", + "target": { + "numbered": "{name}, cilj {index}", + "located": "{name}, {location}, cilj {index}" + }, + "keyboard": { + "instructions": "Pritisnite Enter ali preslednico za začetek urejanja s tipkovnico. Za premikanje uporabite puščične tipke, za spreminjanje velikosti Shift in puščične tipke, za končanje pa Escape.", + "started": "Urejanje s tipkovnico se je začelo. Za premikanje uporabite puščične tipke, za spreminjanje velikosti Shift in puščične tipke, za končanje pa Escape.", + "stopped": "Urejanje s tipkovnico je ustavljeno.", + "boundary": "Ta sprememba ne ustreza temu razdelku." + }, "field": { + "section": { + "label": "Razdelek ali stolpec" + }, "width": { - "label": "Širina" + "label": "Širina", + "shortLabel": "Š" }, "height": { - "label": "Višina" + "label": "Višina", + "shortLabel": "V" }, "xOffset": { "label": "Odmik X" @@ -1469,18 +2163,36 @@ "title": "Uredi element", "tab": { "widget": "Uredi gradnik", - "app": "Uredi aplikacijo" + "app": "Uredi aplikacijo", + "integration": "Uredi integracijo" }, "app": { "propagationNotice": "Spremembe te aplikacije bodo uporabljene povsod, kjer se uporablja na vseh nadzornih ploščah." }, + "integration": { + "action": "Uredi povezavo", + "description": "Preizkusite ali popravite izbrano povezavo, ne da bi zapustili ta gradnik.", + "editLabel": "Uredi integracijo {name}", + "fullAccessRequired": "Potreben je poln dostop", + "propagationNotice": "Spremembe te integracije veljajo povsod, kjer se uporablja. Povezava se preizkusi, preden se shrani.", + "loading": "Nalaganje integracije", + "loadError": "Te integracije ni bilo mogoče naložiti. Pred spreminjanjem nastavitev povezave poskusite znova." + }, + "preview": { + "integrationRequired": "Izberite povezavo za predogled tega gradnika.", + "size": "Velikost datot." + }, + "settings": { + "label": "Nastavitve gradnika" + }, "advancedOptions": { "label": "Napredne možnosti", "title": "Napredne možnosti elementa" }, "field": { "integrations": { - "label": "Integracije" + "label": "Integracije", + "removeLabel": "Odstrani integracijo {name}" }, "title": { "label": "Naslov" @@ -1494,17 +2206,18 @@ } }, "remove": { - "title": "Odstrani element", "message": "Ali ste prepričani, da želite odstraniti ta element?" + }, + "advancedFocus": { + "open": "Odpri napredni pogled", + "close": "Zapri napredni pogled", + "label": "Napredni pogled gradnika {widget}" } }, "widget": { "integrationSelect": { "configureIntegrationFirst": "Najprej povežite integracijo", - "loading": "Nalaganje...", - "placeholder": "Izberite možnost", - "noResults": "Ni rezultatov", - "loadError": "Možnosti ni bilo mogoče naložiti" + "placeholder": "Izberite možnost" }, "app": { "name": "Aplikacija", @@ -1513,9 +2226,6 @@ "appId": { "label": "Izberi aplikacijo" }, - "openInNewTab": { - "label": "Odprite v novem zavihku" - }, "showTitle": { "label": "Pokaži ime aplikacije" }, @@ -1523,11 +2233,8 @@ "label": "Omogoči preverjanje stanja" }, "layout": { - "label": "Postavitev", "option": { - "row": "Vodoravno", "row-reverse": "Vodoravno (obrnjeno)", - "column": "Navpično", "column-reverse": "Navpično (obrnjeno)" } }, @@ -1552,23 +2259,60 @@ "name": "Zaznamki", "description": "Prikaže več povezav aplikacij", "option": { - "title": { - "label": "Naslov" + "showTitle": { + "label": "Prikaži naslov gradnika" + }, + "titleSize": { + "label": "Velikost naslova gradnika (px)" }, "layout": { "label": "Postavitev", "option": { - "row": { - "label": "Vodoravno" - }, - "column": { - "label": "Navpično" - }, - "grid": { - "label": "Mreža" + "adaptive": { + "label": "Prilagodljivo" }, "gridHorizontal": { "label": "Vodoravna mreža" + }, + "icons": { + "label": "Ikone" + } + } + }, + "variant": { + "label": "Videz", + "option": { + "soft": { + "label": "Nežno" + }, + "filled": { + "label": "Zapolnjeno" + }, + "outline": { + "label": "Oris" + }, + "plain": { + "label": "Preprosto" + } + } + }, + "spacing": { + "label": "Razmik med karticami", + "option": { + "xs": { + "label": "Zelo majhen" + }, + "sm": { + "label": "Majhna" + }, + "md": { + "label": "Srednja" + }, + "lg": { + "label": "Velika" + }, + "xl": { + "label": "Zelo velik" } } }, @@ -1581,17 +2325,28 @@ "hideHostname": { "label": "Skrij imena gostiteljev" }, - "openNewTab": { - "label": "Odpri v novem zavihku" - }, "withBorder": { "label": "Pokaži obrobo" }, + "grow": { + "label": "Razširi kartice, da zapolnijo vrstico" + }, + "customUrls": { + "label": "Povezave po meri" + }, "items": { "label": "Zaznamki", - "add": "Dodaj zaznamek" + "remove": "Odstrani zaznamek", + "apps": { + "label": "Dodaj zaznamke", + "description": "Prilepi URL-je ali poišči obstoječe aplikacije. Spodnje zaznamke povleci, da jih prerazporediš.", + "placeholder": "Prilepi URL-je ali poišči aplikacije", + "addUrl": "Dodaj ta URL", + "hint": "Pritisni Enter za dodajanje URL-ja. Prilepi URL-je, ločene z vejicami ali vsak URL v svojo vrstico, da jih dodaš več." + } } - } + }, + "empty": "Dodaj URL ali aplikacijo v nastavitvah gradnika" }, "archiveTeamWarrior": { "name": "ArchiveTeam Warrior", @@ -1600,33 +2355,61 @@ "showBroadcastMessage": { "label": "Prikaži oddajna sporočila" } + }, + "noProjectSelected": "Noben projekt ni izbran", + "runnerStatus": "Izvajalnik: {status}", + "projectId": "Projekt: {id}", + "sessionReceived": "Seja prejeta: {value}", + "sessionSent": "Seja poslana: {value}", + "sessionId": "Seja: {id}", + "startedAt": "Zagnano: {date}", + "emptyItems": "V tem posnetku ni aktivnih ali nedavnih opravil", + "metric": { + "running": "Se izvaja", + "completed": "Dokončano", + "failed": "Neuspešno", + "canceled": "Preklicano", + "download": "Prenos", + "upload": "Nalaganje" + }, + "status": { + "running": "Se izvaja", + "completed": "Zaključeno", + "failed": "Neuspešno", + "canceled": "Preklicano", + "stopped": "Ustavljeno", + "idle": "Nedejavno", + "unknown": "Neznano" + } + }, + "wud": { + "name": "What's Up Docker", + "description": "Prikaže, koliko spremljanih vsebnikov ima na voljo posodobitve.", + "title": "What's Up Docker", + "monitored": "Spremljani", + "updatesAvailable": "{count, plural, one {# posodobitev na voljo} two {# posodobitvi na voljo} few {# posodobitve na voljo} other {# posodobitev na voljo}}", + "updateAvailable": "Na voljo je posodobitev", + "openReleaseNotes": "Odpri opombe ob izdaji", + "option": { + "showRing": { + "label": "Pokaži obroč posodobitev" + }, + "showUpdateList": { + "label": "Pokaži seznam posodobitev vsebnikov", + "description": "Prikaže seznam vseh nadzorovanih vsebnikov, ki imajo na voljo posodobitev slike" + } } }, "dnsHoleSummary": { "name": "Povzetek DNS luknje", "description": "Prikaže povzetek vaše DNS luknje", "option": { - "layout": { - "label": "Postavitev", - "option": { - "row": { - "label": "Vodoravno" - }, - "column": { - "label": "Navpično" - }, - "grid": { - "label": "Mreža" - } - } - }, "usePiHoleColors": { "label": "Uporabi barve Pi-Hole" } }, "error": { - "internalServerError": "Pridobivanje povzetka DNS luknje ni uspelo", - "integrationsDisconnected": "Ni podatkov, vse integracije so prekinjene" + "internalServerError": "Pridobivanje povzetka DNS luknje ni uspelo" }, "data": { "adsBlockedToday": "Blokirano danes", @@ -1634,32 +2417,24 @@ "dnsQueriesToday": "Poizvedbe danes", "domainsBeingBlocked": "Domene na blokiranem seznamu" }, - "domainsTooltip": "Zaradi več integracij Homarr ne more izračunati natančnega števila blokiranih domen" + "domainsTooltip": "Zaradi več integracij Homarr ne more izračunati natančnega števila blokiranih domen", + "status": { + "enabled": "Omogočeno", + "disabled": "Invalidi", + "unknown": "Neznano" + } }, "dnsHoleControls": { "name": "Nadzor DNS luknje", "description": "Nadzorujte PiHole ali AdGuard iz nadzorne plošče", "option": { - "layout": { - "label": "Postavitev", - "option": { - "row": { - "label": "Vodoravno" - }, - "column": { - "label": "Navpično" - }, - "grid": { - "label": "Mreža" - } - } - }, "showToggleAllButtons": { "label": "Pokaži gumbe za preklop vseh" } }, "error": { - "internalServerError": "Nadzor DNS luknje ni uspel" + "internalServerError": "Nadzor DNS luknje ni uspel", + "bulkActionsFailed": "{count, plural, one {# dejanje ni uspelo} two {# dejanji nista uspeli} few {# dejanja niso uspela} other {# dejanj ni uspelo}}" }, "controls": { "enableAll": "Omogoči vse", @@ -1670,8 +2445,6 @@ "disabled": "Invalidi", "processing": "Obdelovanje", "disconnected": "Prekinjeno", - "hours": "Ure", - "minutes": "Minute", "unlimited": "Pustite prazno za neomejeno" } }, @@ -1683,16 +2456,10 @@ "label": "Prikaz naslova/mesta po meri", "description": "Prikažite naslov po meri ali ime mesta/države na vrhu ure." }, - "customTitle": { - "label": "Naslov" - }, "is24HourFormat": { "label": "24-urni format", "description": "Uporabi 24-urni format namesto 12-urnega" }, - "showSeconds": { - "label": "Prikaži sekunde" - }, "useCustomTimezone": { "label": "Uporabi fiksni časovni pas" }, @@ -1711,29 +2478,295 @@ "label": "Oblika časa po meri", "description": "Za oblikovanje časa uporabi ISO 8601 (to bo preglasilo druge možnosti)" }, - "customDateFormat": { - "label": "Oblika datuma po meri", - "description": "Za oblikovanje datuma uporabi ISO 8601 (to bo preglasilo druge možnosti)" - }, "showWeather": { "label": "Prikaži vreme", "description": "V kotu kartice prikaži majhno animirano ikono vremena in temperaturo" }, - "weatherLocation": { - "label": "Lokacija vremena" - }, "isWeatherFormatFahrenheit": { "label": "Uporabi Fahrenheit" + }, + "animateWeatherIcon": { + "label": "Animiraj vremensko ikono", + "description": "Animiraj vremensko ikono. Privzeto je onemogočena in vedno onemogočena, ko je zahtevano zmanjšano gibanje." + }, + "colorWeatherByDayNight": { + "label": "Barva vremena glede na dan/noč", + "description": "Vremensko ikono in temperaturo obarvaj z dnevno ali nočno barvo glede na to, ali je na izbrani lokaciji trenutno dan ali noč." + }, + "dayWeatherColor": { + "label": "Dnevna barva" + }, + "nightWeatherColor": { + "label": "Nočna barva" + }, + "worldClockCities": { + "label": "Mesta svetovne ure", + "description": "Za napredni pogled dodaj in razvrsti do šest mest." } + }, + "timezoneList": { + "timezone": "Časovni pas", + "cityLabel": "Oznaka mesta", + "searchPlaceholder": "Išči časovne pasove", + "noResults": "Časovnih pasov ni mogoče najti", + "unsupportedOption": "Nepodprto: {timeZone}", + "add": "Dodaj mesto", + "remove": "Odstrani {city}", + "reorder": "Spremeni vrstni red mesta {city}", + "limit": "Konfiguriranih mest: {count} od {maximum}" + }, + "worldClock": { + "primary": "Primarna ura", + "local": "Lokalni čas", + "today": "Danes", + "tomorrow": "Jutri", + "yesterday": "Včeraj", + "noSecondaryCities": "Dodaj mesta v možnostih gradnika, da jih primerjaš tukaj.", + "unsupportedPrimaryTitle": "Primarni časovni pas ni na voljo", + "unsupportedPrimary": "{timeZone} v tem brskalniku ni podprt. Prikazan je UTC kot jasno označena nadomestna možnost.", + "unsupportedTimeZone": "Nepodprt časovni pas: {timeZone}", + "accessibleTime": "{city}: {time}, {date}, {timeZone}", + "advancedLabel": "Napredna svetovna ura", + "cities": "Svetovne ure", + "cityCount": "Časovni pasovi: {count}", + "timeBarLabel": "Položaj časa v dnevu na 24-urni lestvici za mesto {city}", + "dayProgress": "Preteklo: {percent} % · Preostalo: {hours} h {minutes} min", + "phaseLegend": "Legenda časa v dnevu", + "tick": { + "midnight": "00", + "morning": "06", + "noon": "12", + "evening": "18", + "end": "24" + }, + "phaseRange": { + "night": "00–05 · 21–24", + "dawn": "05–08", + "day": "08–18", + "dusk": "18–21" + }, + "phase": { + "night": "Noč", + "dawn": "Zora", + "day": "Dan", + "dusk": "Mrak" + } + } + }, + "airQuality": { + "name": "Kakovost zraka in UV", + "description": "Prikazuje kakovost zraka, ultravijolični indeks, onesnaževala in cvetni prah za lokacijo.", + "option": { + "location": { + "label": "Lokacija kakovosti zraka" + }, + "aqiStandard": { + "label": "Standard AQI", + "options": { + "auto": "Samodejno glede na jezikovne nastavitve", + "european": "Evropski AQI", + "us": "Ameriški AQI" + } + }, + "showUv": { + "label": "Prikaži UV-indeks" + }, + "showPollutants": { + "label": "Prikaži koncentracije onesnaževal" + }, + "showPollen": { + "label": "Prikaži koncentracije cvetnega prahu" + } + }, + "category": { + "good": "Dobro", + "fair": "Sprejemljivo", + "moderate": "Zmerno", + "unhealthySensitive": "Nezdravo za občutljive skupine", + "unhealthy": "Nezdravo", + "poor": "Slabo", + "veryPoor": "Zelo slabo", + "veryUnhealthy": "Zelo nezdravo", + "extremelyPoor": "Izjemno slabo", + "hazardous": "Nevarno", + "unknown": "Odčitek AQI ni na voljo" + }, + "uv": { + "label": "UV-indeks", + "category": { + "low": "Nizko", + "moderate": "Zmerno", + "high": "Visoko", + "veryHigh": "Zelo visoko", + "extreme": "Ekstremno", + "unknown": "Odčitek ni na voljo" + } + }, + "dominantPollutant": "Prevladujoče onesnaževalo", + "aqiLabel": "AQI", + "strongestPollen": "Najvišja koncentracija cvetnega prahu", + "unit": { + "concentration": "{value} µg/m³", + "pollen": "{value} zrn/m³" + }, + "pollutant": { + "pm2_5": "PM2.5", + "pm10": "PM10", + "ozone": "Ozon", + "nitrogenDioxide": "Dušikov dioksid", + "sulphurDioxide": "Žveplov dioksid", + "carbonMonoxide": "Ogljikov monoksid" + }, + "pollen": { + "alder": "Jelša", + "birch": "Breza", + "grass": "Trava", + "mugwort": "Pelin", + "olive": "Oljka", + "ragweed": "Ambrozija" + }, + "compact": { + "sixHourTrend": "Trend AQI za naslednjih šest ur" + }, + "advanced": { + "observedAt": "Posodobljeno ob {time}", + "next24Hours": "Naslednjih 24 ur", + "pollutants": "Koncentracije onesnaževal", + "pollen": "Koncentracije cvetnega prahu", + "sevenDayForecast": "Napoved najvišjih vrednosti za 7 dni", + "aqiValue": "AQI {value}", + "uvValue": "UV {value}", + "uvShort": "UV {value}", + "noForecast": "Podatki napovedi niso na voljo" + } + }, + "countdown": { + "name": "Odštevalniki", + "description": "Spremlja prihajajoče dogodke in ponavljajoče se obletnice.", + "option": { + "events": { + "label": "Dogodki", + "description": "Dodajte in razvrstite do 20 enkratnih ali letnih odštevalnikov. Datumi se vnesejo v izbranem časovnem pasu." + }, + "showProgress": { + "label": "Prikaži napredek" + }, + "showSeconds": { + "label": "Prikaži sekunde", + "description": "Sekunde naj ostanejo vidne pri vsakem prihajajočem dogodku." + } + }, + "dateTimeEventList": { + "newEvent": "Nov dogodek", + "add": "Dodaj dogodek", + "remove": "Odstrani {event}", + "reorder": "Spremeni vrstni red {event}", + "eventLabel": "Oznaka dogodka", + "timezone": "Časovni pas", + "unsupportedOption": "Ni podprto: {timeZone}", + "recurrence": "Ponavljanje", + "recurrenceOption": { + "none": "Se ne ponavlja", + "yearly": "Vsako leto" + }, + "target": "Datum in čas dogodka", + "trackProgress": "Spremljaj napredek od začetnega datuma", + "start": "Začetni datum in čas napredka", + "confirmDateTime": "Potrdi datum in čas", + "limit": "Nastavljeni dogodki: {count} od {maximum}" + }, + "empty": { + "title": "Odštevalnikov še ni", + "description": "V možnostih gradnika dodajte dogodek, da začnete odštevanje." + }, + "completed": "Zaključeno", + "yearly": "Letno", + "progress": "Napredek dogodka", + "upcoming": "Prihajajoči", + "completedEvents": "Dokončani dogodki", + "invalid": { + "title": "Nekaterih dogodkov ni mogoče prikazati", + "description": "{count, plural, one {En dogodek ima neveljaven datum ali nepodprt časovni pas.} two {# dogodka imata neveljaven datum ali nepodprt časovni pas.} few {# dogodki imajo neveljaven datum ali nepodprt časovni pas.} other {# dogodkov ima neveljaven datum ali nepodprt časovni pas.}}", + "value": "Ni na voljo" + }, + "alert": { + "notifications": "Obvestila brskalnika", + "permissionDenied": "Obvestila so v tem brskalniku blokirana.", + "reached": "Odštevalnik je dosegel cilj." + } + }, + "timer": { + "name": "Časovnik / Pomodoro", + "description": "Izvaja preprost časovnik ali nastavljivo zaporedje Pomodoro.", + "option": { + "mode": { + "label": "Način", + "options": { + "timer": "Časovnik", + "pomodoro": "Pomodoro" + } + }, + "timerMinutes": { + "label": "Minute časovnika" + }, + "focusMinutes": { + "label": "Minute osredotočanja" + }, + "shortBreakMinutes": { + "label": "Minute kratkega odmora" + }, + "longBreakMinutes": { + "label": "Minute dolgega odmora" + }, + "sessionsBeforeLongBreak": { + "label": "Seje osredotočanja pred dolgim odmorom" + }, + "autoStartBreaks": { + "label": "Samodejno začni odmore" + }, + "autoStartFocus": { + "label": "Samodejno začni seje osredotočanja" + } + }, + "phase": { + "timer": "Časovnik", + "focus": "Osredotočanje", + "shortBreak": "Kratek odmor", + "longBreak": "Dolg odmor" + }, + "action": { + "start": "Zaženi", + "pause": "Začasno ustavi", + "reset": "Ponastavi" + }, + "attention": { + "timerComplete": "Časovnik je končan", + "phaseReady": "{phase} je pripravljena" + }, + "progress": "Napredek časovnika: {progress}%", + "compact": { + "completedFocus": "{count, plural, =0 {Dokončanih sej osredotočanja ni} one {Dokončana je # seja osredotočanja} two {Dokončani sta # seji osredotočanja} few {Dokončane so # seje osredotočanja} other {Dokončanih je # sej osredotočanja}}" + }, + "alert": { + "title": "Časovnik je končan", + "completed": "{phase} je končana." + }, + "advanced": { + "sequence": "Zaporedje Pomodoro", + "focusSession": "Osredotočanje {session}", + "settings": "Trajne nastavitve", + "settingsHint": "Za urejanje teh nastavitev table uporabite kontekstni meni gradnika.", + "localAlerts": "Lokalna opozorila", + "notifications": "Obvestila brskalnika", + "sound": "Zvoki časovnika", + "localAlertsHint": "Zvoki časovnika so privzeto omogočeni. Zvoki in obvestila veljajo samo za ta gradnik v tem brskalniku.", + "notificationsDenied": "Obvestila so v tem brskalniku blokirana." } }, "minecraftServerStatus": { "name": "Stanje strežnika Minecraft", "description": "Prikazuje stanje strežnika Minecraft", "option": { - "title": { - "label": "Naslov" - }, "domain": { "label": "Naslov strežnika" }, @@ -1753,11 +2786,21 @@ "noStation": "Postaja ni izbrana", "option": { "baseUrl": { - "label": "URL Search.ch" + "label": "URL Search.ch", + "description": "URL-ji po meri se morajo razrešiti v javni naslov IP. Zasebni in lokalni gostitelji so zavrnjeni." }, "station": { - "label": "Postaja" + "label": "Postaja", + "placeholder": "Poiščite postajo" } + }, + "error": { + "customSourceUnavailable": "Vir voznega reda ni na voljo. Preverite, ali se njegov URL razreši v javni naslov IP.", + "stationSearch": "Postaj ni mogoče iskati. Preverite URL po meri in svoj dostop do table." + }, + "warning": { + "stale": "Voznega reda ni bilo mogoče osvežiti. Prikazani so odhodi, nazadnje posodobljeni ob {time}.", + "staleCompact": "Zastareli podatki" } }, "notebook": { @@ -1789,6 +2832,9 @@ "directionRtl": "Nastavi smer besedila z desne proti levi", "blockquote": "Blokovni citat", "horizontalLine": "Vodoravna črta", + "details": "Preklopi zložljivi razdelek", + "expandDetails": "Razširi zložljivi razdelek", + "collapseDetails": "Strni zložljivi razdelek", "bulletList": "Seznam kroglic", "orderedList": "Naročeni seznam", "checkList": "Kontrolni seznam", @@ -1797,16 +2843,20 @@ "link": "Povezava", "unlink": "Odstrani povezavo", "image": "Vstavljanje slik", - "addTable": "Dodajte mizo", + "insertTable": "Vstavi tabelo", + "insertTableSize": "Vstavi tabelo {columns} × {rows}", "deleteTable": "Brisanje tabele", "colorCell": "Barvna celica", - "mergeCell": "Preklapljanje združevanja celic", + "mergeCells": "Spoji celice", + "splitCell": "Razdeli celico", "addColumnLeft": "Dodajte stolpec pred", "addColumnRight": "Dodajte stolpec za", "deleteColumn": "Brisanje stolpca", "addRowTop": "Dodajte vrstico pred", "addRowBelow": "Dodajte vrstico za", - "deleteRow": "Brisanje vrstice" + "deleteRow": "Brisanje vrstice", + "toggleHeaderRow": "Preklopi vrstico glave", + "toggleHeaderColumn": "Preklopi stolpec glave" }, "align": { "left": "Leva stran", @@ -1817,8 +2867,6 @@ "clearColor": "Čista barva", "source": "Vir", "widthPlaceholder": "Vrednost v % ali pikslih", - "columns": "Stolpci", - "rows": "Vrstice", "width": "Širina", "height": "Višina" }, @@ -1830,7 +2878,9 @@ "discard": "Zavrzi spremembe", "keepEditing": "Nadaljuj z urejanjem" } - } + }, + "saveFailed": "Opombe ni mogoče shraniti", + "documentStats": "{words, plural, one {# beseda} two {# besedi} few {# besede} other {# besed}} · {characters, plural, one {# znak} two {# znaka} few {# znaki} other {# znakov}}" }, "anchorNote": { "name": "Opomba Anchor", @@ -1839,9 +2889,6 @@ "noteId": { "label": "Opomba" }, - "showTitle": { - "label": "Prikaži naslov" - }, "showUpdatedAt": { "label": "Prikaži zadnjo posodobitev" } @@ -1851,14 +2898,20 @@ "notFound": "Opombe ni bilo mogoče najti", "noNotes": "Opomb ni bilo mogoče najti", "integrationRequired": "Najprej izberite integracijo Anchor", - "updatedAt": "Posodobljeno {date}", "untitled": "Brez naslova", - "edit": "Uredi", - "save": "Shrani", - "cancel": "Prekliči", "readOnlyViewer": "Za to opombo imate dostop za ogled. Urejanje je onemogočeno.", "saveForbidden": "Nimate dovoljenja za urejanje te opombe.", - "saveFailed": "Opombe ni bilo mogoče shraniti. Poskusite znova." + "saveFailed": "Opombe ni bilo mogoče shraniti. Poskusite znova.", + "createdAt": "Ustvarjeno {date}", + "permission": { + "owner": "Lastnik", + "editor": "Urejevalnik", + "viewer": "Pregledovalec" + }, + "status": { + "pinned": "Pripeto", + "archived": "Arhivirano" + } }, "iframe": { "name": "iFrame", @@ -1917,6 +2970,25 @@ "clickable": { "label": "Klikljivo" } + }, + "state": { + "on": "Vklopljeno", + "off": "Izklopljeno", + "unavailable": "Ni na voljo", + "unknown": "Neznano" + }, + "advanced": { + "entityId": "ID entitete: {id}", + "lastChanged": "Spremenjeno {date}", + "attribute": { + "unit": "Enota", + "deviceClass": "Razred naprave", + "icon": "Ikona" + } + }, + "error": { + "loadFailed": "Entitete ni mogoče naložiti", + "toggleFailed": "Entitete ni mogoče posodobiti" } }, "smartHome-executeAutomation": { @@ -1932,11 +3004,31 @@ }, "spotlightAction": { "run": "Zaženi {name}" + }, + "advanced": { + "lastExecuted": "Nazadnje izvedeno ob {time}", + "automationId": "ID avtomatizacije: {id}", + "ready": "Pripravljeno za zagon", + "noPermission": "Za zagon te avtomatizacije nimate dovoljenja" + }, + "status": { + "running": "Izvajanje avtomatizacije", + "success": "Avtomatizacija je končana" + }, + "error": { + "executeFailed": "Avtomatizacije ni mogoče zagnati" } }, "stockPrice": { "name": "Cena delnice", "description": "Prikazuje trenutno ceno delnice podjetja", + "advanced": { + "currentPrice": "Trenutna cena", + "previousClose": "Prejšnje zaprtje", + "changePercentage": "Sprememba (%)", + "minimum": "Najmanj", + "maximum": "Največ" + }, "option": { "stock": { "label": "Simbol delnice" @@ -2007,6 +3099,10 @@ "label": "1 mesec" } } + }, + "showDetails": { + "label": "Prikaži podrobnosti", + "description": "V strnjenem pogledu prikaži ime, spremembo in časovno obdobje. Izklopite za prikaz samo simbola in cene." } } }, @@ -2034,6 +3130,13 @@ "showUnmonitored": { "label": "Prikaži nespremljane" } + }, + "advanced": { + "previousMonth": "Prikaži prejšnji mesec", + "nextMonth": "Prikaži naslednji mesec", + "eventCount": "{count, plural, one {# dogodek} two {# dogodka} few {# dogodki} other {# dogodkov}}", + "loading": "Nalaganje dogodkov...", + "noEvents": "Ta mesec ni dogodkov" } }, "weather": { @@ -2046,16 +3149,18 @@ "disableTemperatureDecimals": { "label": "Onemogoči decimalke temperature" }, + "animateIcons": { + "label": "Animiraj vremenske ikone" + }, + "showHumidity": { + "label": "Prikaži vlažnost" + }, "showCurrentWindSpeed": { - "label": "Prikaži trenutno hitrost vetra", - "description": "Samo pri trenutnem vremenu" + "label": "Prikaži trenutno hitrost vetra" }, "useImperialSpeed": { "label": "Uporabi mph za hitrost vetra" }, - "location": { - "label": "Lokacija vremena" - }, "showCity": { "label": "Prikaži mesto" }, @@ -2065,13 +3170,10 @@ "forecastDayCount": { "label": "Število dni napovedi", "description": "Ko pripomoček ni dovolj širok, je prikazanih manj dni" - }, - "dateFormat": { - "label": "Oblika datuma", - "description": "Kako naj bo datum videti" } }, "currentWindSpeed": "{currentWindSpeed} {unit}", + "disabled": "Vremenski podatki niso na voljo, ker so odhodne povezave onemogočene", "dailyForecast": { "sunrise": "Sončni vzhod", "sunset": "Sončni zah.", @@ -2094,6 +3196,47 @@ "thunderstorm": "Nevihta", "thunderstormWithHail": "Nevihta s točo", "unknown": "Neznano" + }, + "details": "Prikaži podrobnosti vremena", + "detailsFor": "Prikaži podrobnosti vremena za {date}", + "advanced": { + "forecast": "Napoved za 7 dni", + "hourlyForecast": "Naslednjih 24 ur", + "day": "Dan", + "time": "Čas", + "conditions": "Razmere", + "temperature": "Temperatura", + "feelsLike": "Občutek temperature: {temperature}", + "feelsLikeLabel": "Občutek temperature", + "feelsLikeRange": "Občutek temperature: {maximum} / {minimum}", + "highLow": "Najvišja {maximum} · najnižja {minimum}", + "observedAt": "Posodobljeno ob {time}", + "humidity": "Vlažnost", + "averageHumidity": "Povprečna vlažnost: {humidity}%", + "currentHumidity": "Trenutna vlažnost", + "wind": "Veter / sunki ({unit})", + "currentWind": "Trenutni veter / sunki", + "windValue": "{speed} / {gusts} {unit}", + "windDetail": "Najmočnejši veter / sunki: {speed} / {gusts} {unit}", + "nextHourPrecipitation": "Padavine v naslednji uri", + "precipitationChance": "Verjetnost padavin", + "precipitationValue": "{probability}% · {amount} mm", + "precipitationDetail": "Padavine: {probability}% · {amount} mm", + "todayUv": "Današnji najvišji indeks UV", + "uvIndex": "Najvišji indeks UV: {value}", + "daylight": "Dnevna svetloba: {duration}", + "hourlyTooltip": "Občutek temperature {feelsLike}{temperatureUnit} · {amount} mm · vlažnost {humidity}% · veter {speed} {speedUnit}", + "hourlyTooltipWithoutHumidity": "Občutek temperature {feelsLike}{temperatureUnit} · {amount} mm · veter {speed} {speedUnit}", + "detailLabel": { + "feelsLike": "Občutek temperature", + "precipitation": "Padavine", + "humidity": "Povprečna vlažnost", + "wind": "Najmočnejši veter / sunki", + "uv": "Najvišji indeks UV", + "daylight": "Dnevna svetloba" + }, + "sun": "Sončni vzhod / zahod", + "noForecast": "Podatki napovedi niso na voljo" } }, "indexerManager": { @@ -2106,8 +3249,15 @@ }, "title": "Upravitelj indekserjev", "testAll": "Preizkusi vse", + "status": { + "healthy": "Zdrav", + "unhealthy": "Nezdrav", + "disabled": "Invalidi", + "unknown": "Stanje zdravja ni na voljo" + }, "error": { - "internalServerError": "Pridobivanje stanja indekserjev ni uspelo" + "internalServerError": "Pridobivanje stanja indekserjev ni uspelo", + "testAll": "Preizkus indeksatorja ni uspel. Poskusite znova." } }, "healthMonitoring": { @@ -2136,11 +3286,6 @@ "fileSystem": { "label": "Prikaži informacije o datotečnem sistemu" }, - "visibleStorageVolumes": { - "label": "Vidni nosilci shrambe", - "description": "Na voljo samo, če so vse izbrane integracije Synology. Pustite prazno, da prikažete vse zaznane nosilce shrambe.", - "placeholder": "Izberite nosilce shrambe" - }, "defaultTab": { "label": "Privzeti zavihek" }, @@ -2163,17 +3308,27 @@ "minutes": "{count} minut", "used": "Uporabljeno", "available": "Na voljo", - "lastSeen": "Zadnja posodobitev stanja: {lastSeen}" + "lastSeen": "Zadnja posodobitev stanja: {lastSeen}", + "updatesAvailable": "{count, plural, one {Na voljo je # posodobitev} two {Na voljo sta # posodobitvi} few {Na voljo so # posodobitve} other {Na voljo je # posodobitev}}", + "rebootRequired": "Potreben je ponovni zagon", + "rebootNotRequired": "Ponovni zagon ni potreben" + }, + "smartStatus": { + "attributesWithinThresholds": "SMART: atributi so znotraj pragov", + "attributesFailed": "SMART: neuspešnih atributov: {attributes}", + "noCriticalWarning": "SMART: SSD ni poročal o opozorilu", + "criticalWarning": "SMART: SSD je poročal o kritičnem opozorilu" + }, + "gauge": { + "cpuUsage": "Obremenitev CPE", + "cpuTemperature": "Temperatura CPE", + "memoryUsage": "Poraba pomnilnika", + "gpuUsage": "Poraba GPE {name}" }, - "memory": {}, "error": { "internalServerError": "Pridobivanje stanja zdravja ni uspelo" }, "cluster": { - "summary": { - "cpu": "CPE", - "memory": "RAM" - }, "resource": { "node": { "name": "Vozlišča" @@ -2209,8 +3364,6 @@ "table": { "header": { "name": "Ime", - "cpu": "CPE", - "memory": "RAM", "node": "Vozl." } } @@ -2220,33 +3373,29 @@ "name": "Statistika Dockerja", "description": "Statistika vaših vsebnikov (ta pripomoček je mogoče dodati samo s skrbniškimi pravicami)", "option": { - "columns": { - "label": "Stolpci za prikaz" + "endpointIds": { + "label": "Dockerjeva okolja", + "description": "Pustite prazno za prikaz vsebnikov iz vseh Dockerjevih okolij", + "placeholder": "Vsa Dockerjeva okolja" }, - "enableRowSorting": { - "label": "Omogoči razvrščanje elementov" + "containerFilter": { + "label": "Vsebniki za filtriranje" + }, + "filterIsWhitelist": { + "label": "Filtriraj kot seznam dovoljenih" }, "defaultSort": { - "label": "Stolpec, uporabljen za privzeto razvrščanje", "option": { "name": "Ime", "state": "Stanje", "cpuUsage": "Uporaba CPE", "memoryUsage": "Uporaba pomnilnika" } - }, - "descendingDefaultSort": { - "label": "Obrni razvrščanje" - }, - "columnOrder": { - "label": "Vrstni red stolpcev" - }, - "columnWidths": { - "label": "Širine stolpcev" } }, "error": { "internalServerError": "Statistike vsebnikov ni bilo mogoče pridobiti", + "endpointsUnavailable": "Dockerjeve končne točke niso na voljo", "layoutSaveTitle": "Postavitev tabele ni shranjena", "layoutSaveMessage": "Postavitve tabele Docker ni bilo mogoče shraniti. Poskusite znova premakniti ali spremeniti velikost stolpca." }, @@ -2255,7 +3404,6 @@ } }, "coolify": { - "name": "Coolify", "description": "Pregled vaše instance Coolify s strežniki in aplikacijami", "option": { "showServers": { @@ -2281,17 +3429,49 @@ "internalServerError": "Podatkov Coolify ni bilo mogoče pridobiti" }, "server": { - "buildServer": "Izgradi" + "buildServer": "Izgradi", + "resourceCounts": "{applications, plural, one {# aplikacija} two {# aplikaciji} few {# aplikacije} other {# aplikacij}} / {services, plural, one {# storitev} two {# storitvi} few {# storitve} other {# storitev}}", + "reachability": "Dosegljivost", + "usability": "Uporabnost" + }, + "source": { + "url": "Vir: {url}", + "unavailable": "{source}: ni na voljo" }, "instances": { "title": "Instance" + }, + "action": { + "openResource": "Odpri {name}", + "openLogs": "Odpri dnevnike {name}", + "showIp": "Prikaži naslov IP", + "hideIp": "Skrij naslov IP" + }, + "status": { + "running": "Se izvaja", + "stopped": "Ustavljeno", + "exited": "Končano", + "starting": "Zaganjanje", + "restarting": "Ponovno zaganjam", + "unknown": "Neznano", + "online": "Vzpostavljeno", + "offline": "Brez povezave", + "reachable": "Dosegljivo", + "unreachable": "Nedosegljivo", + "usable": "Uporabno", + "unusable": "Neuporabno" } }, "vpn": { "name": "VPN", "description": "Pregled povezav VPN", "serviceUnavailable": "VPN ni na voljo", - "option": {} + "status": { + "running": "Se izvaja", + "notRunning": "Ne deluje", + "unavailable": "Ni na voljo", + "vpn": "VPN: {status}" + } }, "ups": { "name": "UPS", @@ -2318,14 +3498,19 @@ "runtime": "Čas delovanja", "load": "Obremenitev", "input": "Vhod", - "output": "Izhod" + "output": "Izhod", + "batteryVoltage": "Napetost baterije", + "power": "Moč", + "temperature": "Temperatura", + "manufacturer": "Proizvajalec", + "model": "Model", + "serial": "Serijska številka" }, "error": { "internalServerError": "Pridobivanje podatkov UPS ni uspelo" } }, "tracearr": { - "name": "Tracearr", "description": "Izboljšano spremljanje predstavnostnega strežnika s podrobnimi podatki o tokovih in prekodiranju", "option": { "showStreams": { @@ -2413,10 +3598,7 @@ "label": "Dogodek", "description": "Pokaži skupno število pojavitev določenega dogodka", "placeholder": "Izberite dogodek", - "loading": "Nalaganje dogodkov...", - "noEvents": "Ni najdenih dogodkov", - "none": "Ni dogodka", - "configureWebsiteFirst": "Najprej izberite spletno mesto za nalaganje dogodkov" + "none": "Ni dogodka" }, "chartType": { "label": "Vrsta grafikona", @@ -2447,26 +3629,21 @@ "eventNames": { "label": "Dogodki", "description": "Izberite enega ali več dogodkov za grafikon", - "placeholder": "Izberite dogodke...", - "loading": "Nalaganje dogodkov...", - "noEvents": "Ni najdenih dogodkov", - "configureWebsiteFirst": "Najprej izberite spletno mesto za nalaganje dogodkov" + "placeholder": "Izberite dogodke..." }, "topCount": { "label": "Elementi za prikaz", "description": "Število najboljših elementov za prikaz (največ 500)" + }, + "events": { + "loading": "Nalaganje dogodkov...", + "noEvents": "Dogodkov ni mogoče najti", + "configureWebsiteFirst": "Najprej izberite spletno mesto za nalaganje dogodkov" } }, "event": { - "occurrences": "dogodki", "label": "dogodki" }, - "topPages": { - "direct": "Neposredno" - }, - "topReferrers": { - "direct": "Neposredno" - }, "events": { "selectPrompt": "Izberite dogodke za grafikon" }, @@ -2475,6 +3652,9 @@ "noWebsite": "Spletno mesto ni konfigurirano", "noData": "Ni razpoložljivih podatkov", "internalServerError": "Pridobivanje podatkov Umami ni uspelo" + }, + "top": { + "direct": "Neposredno" } }, "common": { @@ -2502,7 +3682,8 @@ }, "integration": { "noData": "Ni najdene integracije", - "description": "Kliknite , da ustvarite novo integracijo" + "description": "Kliknite , da ustvarite novo integracijo", + "manage": "Upravljaj integracije" }, "app": { "noData": "Ni najdene aplikacije", @@ -2513,7 +3694,61 @@ "noIntegration": "Nobena integracija ni izbrana", "noData": "Ni podatkov o integraciji" }, - "option": {} + "integrationDisconnected": "Podatki niso na voljo, vse integracije so prekinjene", + "updatedAt": "Posodobljeno {date}", + "title": { + "label": "Naslov" + }, + "openInNewTab": { + "label": "Odprite v novem zavihku" + }, + "showTitle": { + "label": "Prikaži naslov" + }, + "weatherLocation": { + "label": "Lokacija vremena" + }, + "layout": { + "label": "Postavitev", + "option": { + "horizontal": "Vodoravno", + "vertical": "Navpično", + "grid": "Mreža" + } + }, + "select": { + "loading": "Nalaganje...", + "loadError": "Možnosti ni mogoče naložiti" + }, + "dateFormat": { + "label": "Oblika datuma", + "description": "Kako naj bo datum prikazan" + }, + "visibleStorageVolumes": { + "label": "Vidni nosilci za shranjevanje", + "description": "Na voljo samo, če je vsaka izbrana integracija OpenMediaVault ali Synology. Pustite prazno za prikaz vseh zaznanih nosilcev za shranjevanje.", + "placeholder": "Izberite nosilce za shranjevanje" + }, + "tableOptions": { + "columns": { + "label": "Stolpci za prikaz" + }, + "columnOrder": { + "label": "Vrstni red stolpcev" + }, + "columnWidths": { + "label": "Širine stolpcev" + }, + "enableRowSorting": { + "label": "Omogoči razvrščanje elementov" + }, + "defaultSort": { + "label": "Stolpec, po katerem je privzeto razvrščeno" + }, + "invertSorting": { + "label": "Obrni razvrščanje" + } + } }, "video": { "name": "Video tok", @@ -2572,6 +3807,7 @@ "transcoding": "Prekodiranje", "paused": "Začasno ustavljeno", "remaining": "Preostali čas: {minutes} min", + "seasonEpisode": "S{season} E{episode}", "metadata": { "title": "Statistika za radovedne", "video": { @@ -2589,11 +3825,16 @@ "resolution": "Ločljivost", "target": "Ciljni kodek" } - } + }, + "unknownUser": "Neznan uporabnik" + }, + "summary": { + "sessions": "{count, plural, one {# seja} two {# seji} few {# seje} other {# sej}}", + "playing": "{count} predvajanih", + "transcoding": "{count} prekodiranih" } }, "paperlessNgx": { - "name": "Paperless-ngx", "description": "Pregled arhiva dokumentov Paperless-ngx", "documentsTotal": "Skupaj dokumentov", "documentsInbox": "Prejeto", @@ -2638,7 +3879,6 @@ } }, "patchmon": { - "name": "PatchMon", "description": "Pregled stanja popravkov gostiteljev iz PatchMona", "title": "Statistika PatchMona", "totalHosts": "Skupaj gostiteljev", @@ -2705,36 +3945,30 @@ "description": "Primerjajte število potrebnih posodobitev kot absolutno vrednost ali odstotek vseh gostiteljev" }, "hostsNeedingUpdatesWarningAt": { - "label": "Opozorilni prag potrebnih posodobitev", - "description": "Ko vrednost doseže ta prag, prikaži rumeno" + "label": "Opozorilni prag potrebnih posodobitev" }, "hostsNeedingUpdatesCriticalAt": { - "label": "Kritični prag potrebnih posodobitev", - "description": "Ko vrednost doseže ta prag, prikaži rdeče" + "label": "Kritični prag potrebnih posodobitev" }, "securityUpdatesThresholdMode": { "label": "Način praga varnostnih posodobitev", "description": "Primerjajte število varnostnih posodobitev kot absolutno vrednost ali odstotek vseh gostiteljev" }, "securityUpdatesWarningAt": { - "label": "Opozorilni prag varnostnih posodobitev", - "description": "Ko vrednost doseže ta prag, prikaži rumeno" + "label": "Opozorilni prag varnostnih posodobitev" }, "securityUpdatesCriticalAt": { - "label": "Kritični prag varnostnih posodobitev", - "description": "Ko vrednost doseže ta prag, prikaži rdeče" + "label": "Kritični prag varnostnih posodobitev" }, "hostsWithSecurityUpdatesThresholdMode": { "label": "Način praga gostiteljev z varnostnimi posodobitvami", "description": "Primerjajte število gostiteljev kot absolutno vrednost ali odstotek vseh gostiteljev" }, "hostsWithSecurityUpdatesWarningAt": { - "label": "Opozorilni prag gostiteljev z varnostnimi posodobitvami", - "description": "Ko vrednost doseže ta prag, prikaži rumeno" + "label": "Opozorilni prag gostiteljev z varnostnimi posodobitvami" }, "hostsWithSecurityUpdatesCriticalAt": { - "label": "Kritični prag gostiteljev z varnostnimi posodobitvami", - "description": "Ko vrednost doseže ta prag, prikaži rdeče" + "label": "Kritični prag gostiteljev z varnostnimi posodobitvami" }, "upToDateHostsThresholdMode": { "label": "Način praga posodobljenih gostiteljev", @@ -2753,12 +3987,10 @@ "description": "Primerjajte število zastarelih paketov kot absolutno vrednost ali odstotek vseh gostiteljev" }, "totalOutdatedPackagesWarningAt": { - "label": "Opozorilni prag zastarelih paketov", - "description": "Ko vrednost doseže ta prag, prikaži rumeno" + "label": "Opozorilni prag zastarelih paketov" }, "totalOutdatedPackagesCriticalAt": { - "label": "Kritični prag zastarelih paketov", - "description": "Ko vrednost doseže ta prag, prikaži rdeče" + "label": "Kritični prag zastarelih paketov" }, "showOsDistribution": { "label": "Prikaži distribucijo operacijskega sistema", @@ -2789,6 +4021,14 @@ "bars": "Vodoravne vrstice", "donut": "Kolobarni grafikon" } + }, + "threshold": { + "warningAt": { + "description": "Vnesite rumeno, ko vrednost doseže ta prag" + }, + "criticalAt": { + "description": "Vnesite rdečo, ko vrednost doseže ta prag" + } } }, "error": { @@ -2796,12 +4036,12 @@ } }, "bazarr": { - "name": "Bazarr", "description": "Pregled manjkajočih podnapisov in stanja zdravja vašega primerka Bazarr", "episodes": "Manjkajoče epizode", "movies": "Manjkajoči filmi", "providers": "Težave ponudnikov", "status": "Težave zdravja", + "announcements": "Obvestila", "option": { "showMissingEpisodes": { "label": "Prikaži manjkajoče epizode", @@ -2848,7 +4088,8 @@ "users": "Uporabniki", "photos": "Fotografije", "videos": "Videoposnetki", - "storage": "Uporabljena shramba" + "storage": "Uporabljena shramba", + "albumLimit": "Največji albumi (prikazanih največ {count})" }, "immich-albumCarousel": { "name": "Album Immich", @@ -2872,24 +4113,21 @@ } }, "description": "Diaprojekcija slik iz albuma Immich ali celotne knjižnice", - "noPhotos": "Fotografij ni bilo mogoče najti" + "noPhotos": "Fotografij ni bilo mogoče najti", + "albumPhoto": "Fotografija albuma", + "actions": { + "previousPhoto": "Prejšnja fotografija", + "nextPhoto": "Naslednja fotografija", + "pauseSlideshow": "Začasno ustavi diaprojekcijo", + "resumeSlideshow": "Nadaljuj diaprojekcijo", + "toggleSlideshow": "Začasno ustavi ali nadaljuj diaprojekcijo", + "photo": "Fotografija {number}" + } }, "downloads": { "name": "Odjemalec za prenose", "description": "Omogoča ogled in upravljanje prenosov iz odjemalcev Torrent in Usenet.", "option": { - "columns": { - "label": "Stolpci za prikaz" - }, - "enableRowSorting": { - "label": "Omogoči razvrščanje elementov" - }, - "defaultSort": { - "label": "Privzeto uporabljen stolpec za razvrščanje" - }, - "descendingDefaultSort": { - "label": "Obrni razvrščanje" - }, "showCompletedUsenet": { "label": "Prikaži vnose usenet, označene kot dokončane" }, @@ -2914,12 +4152,6 @@ "limitPerIntegration": { "label": "Omeji elemente na integracijo", "description": "To bo omejilo število prikazanih elementov na integracijo, ne globalno" - }, - "columnOrder": { - "label": "Vrstni red stolpcev" - }, - "columnWidths": { - "label": "Širine stolpcev" } }, "errors": { @@ -2950,7 +4182,7 @@ "detailsTitle": "Trenutni indeks znotraj odjemalca" }, "id": { - "columnTitle": "ID", + "columnTitle": "Podrobnosti ID-ja elementa", "detailsTitle": "Podrobnosti ID-ja elementa" }, "integration": { @@ -3080,6 +4312,10 @@ "mediaRequests-requestList": { "name": "Seznam zahtevkov za predstavnost", "description": "Oglejte si seznam vseh zahtevkov za medije iz vašega primera Overseerr ali Jellyseerr", + "empty": { + "title": "Predstavnostnih zahtevkov še ni", + "description": "Za začetek zahtevka poiščite film ali oddajo." + }, "option": { "linksTargetNewTab": { "label": "Odprite povezave v novem zavihku" @@ -3113,12 +4349,16 @@ "failed": "Neuspešno", "completed": "Zaključeno" }, + "unknown": "Neznano", "toBeDetermined": "TBD" }, "mediaRequests-requestStats": { "name": "Stat. medijskih zahtev", "description": "Statistični podatki o vaših zahtevah za medije", - "option": {}, + "empty": { + "title": "Dejavnosti zahtevkov še ni", + "description": "Statistika se bo prikazala po prvem predstavnostnem zahtevku." + }, "titles": { "stats": { "main": "Statistika medijev", @@ -3128,8 +4368,7 @@ "declined": "Že zavrnjeno", "available": "Že na voljo", "tv": "Prošnje za televizijo", - "movie": "Prošnje za filme", - "total": "Skupaj" + "movie": "Prošnje za filme" }, "users": { "main": "Najboljši uporabniki", @@ -3155,7 +4394,6 @@ }, "currentIndex": "{start}–{end} od {total}", "healthCheck": { - "title": "Preverjanje stanja", "queued": "", "status": { "healthy": "Zdravo", @@ -3164,35 +4402,30 @@ }, "panel": { "statistics": { - "empty": "Prazno", - "transcodes": "Prekodiranja", - "transcodesCount": "Prekodiranja", - "healthChecksCount": "Preverjanja stanja", "filesCount": "Datoteke", "savedSpace": "Prihranjen prostor", - "healthChecks": "Preverjanja stanja", "videoCodecs": "Kodeki", "videoContainers": "Vsebniki", "videoResolutions": "Ločljivosti" }, "workers": { - "empty": "Prazno", "table": { - "file": "Datot.", "eta": "ETA", - "progress": "Napredek", - "transcode": "Prekodiranje", - "healthCheck": "Preverjanje stanja" + "progress": "Napredek" } }, "queue": { - "empty": "Prazno", "table": { - "file": "Datot.", - "size": "Velikost", - "transcode": "Prekodiranje", - "healthCheck": "Preverjanje stanja" + "size": "Velikost" } + }, + "common": { + "empty": "Prazno", + "file": "Datoteka", + "healthCheck": "Preverjanje zdravja", + "transcode": "Prekodiraj", + "transcodes": "Prekodiranja", + "healthChecks": "Preverjanja zdravja" } } }, @@ -3216,7 +4449,8 @@ }, "type": { "movie": "Film", - "episode": "Epizoda" + "episode": "Epizoda", + "book": "Knjiga" }, "empty": { "missing": "Ni manjkajočih elementov", @@ -3247,6 +4481,13 @@ "showPosterImage": { "label": "Prikaži sliko plakata" } + }, + "error": { + "allFeedsFailed": "Virov RSS ni mogoče naložiti. Preverite URL-je virov in poskusite znova." + }, + "warning": { + "partial": "{count, plural, one {# vira RSS ni bilo mogoče naložiti} two {# virov RSS ni bilo mogoče naložiti} few {# virov RSS ni bilo mogoče naložiti} other {# virov RSS ni bilo mogoče naložiti}}", + "stale": "Virov RSS ni bilo mogoče osvežiti. Prikazani so prej naloženi vnosi." } }, "releases": { @@ -3322,17 +4563,8 @@ "label": "Regularni izraz" } }, - "edit": { - "label": "Uredi" - }, "editForm": { - "title": "Uredi repozitorij", - "cancel": { - "label": "Prekliči" - }, - "confirm": { - "label": "Potrdi" - } + "title": "Uredi repozitorij" }, "importForm": { "title": "Uvozi iz Dockerja" @@ -3349,8 +4581,7 @@ "label": "Žetoni ponudnika", "token": "Žeton", "configured": "Žeton je konfiguriran", - "notConfigured": "Žeton ni nastavljen", - "save": "Shrani" + "notConfigured": "Žeton ni nastavljen" } } }, @@ -3377,17 +4608,32 @@ "noProviderResponse": "Ponudnik ni odgovoril", "unexpected": "Nepričakovana napaka ponudnika" } - } + }, + "expandDetails": "Prikaži podrobnosti za {name}", + "collapseDetails": "Skrij podrobnosti za {name}" }, "networkControllerSummary": { - "option": {}, - "card": { - "vpn": { - "countConnected": "Povezanih: {count}" + "advanced": { + "updated": "Posodobljeno", + "metric": { + "latency": "Zakasnitev", + "ping": "Ping", + "uptime": "Čas delovanja", + "users": "Uporabniki", + "guests": "Gostje" } }, + "card": { + "vpn": { + "countConnected": "{count, plural, one {# povezan} two {# povezana} few {# povezani} other {# povezanih}}", + "label": "VPN" + }, + "wan": "WAN", + "web": "Splet", + "wifi": "Wi‑Fi", + "lan": "LAN" + }, "error": { - "integrationsDisconnected": "Podatki niso na voljo, vse integracije so prekinjene", "unknownContentOption": "Neznana možnost vsebine pripomočka s povzetkom omrežnega krmilnika: " }, "name": "Povzetek omrežnega krmilnika", @@ -3424,7 +4670,6 @@ } }, "error": { - "integrationsDisconnected": "Podatki niso na voljo, vse integracije so prekinjene", "unknownContentOption": "Neznana možnost vsebine pripomočka s stanjem omrežja: " }, "name": "Stanje omrežja", @@ -3454,7 +4699,6 @@ "versiontitle": "Različice", "cputitle": "Uporaba CPE", "memorytitle": "Uporaba pomnilnika", - "cpu": "CPE", "memory": "Pomnilnik", "interfaces": { "name": "ime", @@ -3462,6 +4706,16 @@ "recv": "Prejeto", "title": "Omrežni vmesniki" } + }, + "empty": { + "noInterfaces": "Podatkov o omrežnih vmesnikih še ni" + }, + "versionUnknown": "Neznana različica", + "metricAccessible": "{metric}: {value} %, {status}", + "status": { + "normal": "Običajno", + "warning": "Opozorilo", + "critical": "Kritično" } }, "notifications": { @@ -3471,8 +4725,21 @@ "option": { "hideLogos": { "label": "Skrij logotipe" + }, + "messageFormat": { + "label": "Oblika sporočila", + "option": { + "auto": "Samodejno", + "plain": "Navadno besedilo", + "markdown": "Markdown", + "html": "HTML" + } } - } + }, + "openService": "Odpri storitev obvestil", + "deleteNotification": "Izbriši obvestilo iz Gotifyja", + "deleteFailed": "Obvestila ni mogoče izbrisati", + "deleteFailedMessage": "Obvestila ni bilo mogoče izbrisati. Poskusite znova." }, "speedtestTracker": { "name": "Speedtest Tracker", @@ -3514,7 +4781,6 @@ } }, "uptimeKuma": { - "name": "Uptime Kuma", "description": "Spremljajte statistiko razpoložljivosti na strani stanja Uptime Kuma", "option": { "showAverageUptime": { @@ -3551,10 +4817,14 @@ }, "error": { "internalServerError": "Podatkov o razpoložljivosti ni bilo mogoče pridobiti" + }, + "status": { + "up": "Skupaj poslano", + "down": "Hitrost prenosa", + "paused": "Začasno ustavljeno" } }, "traefik": { - "name": "Traefik", "description": "Pregled usmerjevalnikov, storitev, vmesne programske opreme in vstopnih točk Traefika", "option": { "showTcp": { @@ -3575,7 +4845,6 @@ }, "resource": { "routers": "Usmerjevalniki", - "services": "Storitve", "middlewares": "Vmesna programska oprema" }, "status": { @@ -3585,7 +4854,20 @@ }, "error": { "internalServerError": "Podatkov Traefik ni bilo mogoče pridobiti" - } + }, + "resourceType": { + "router": "Usmerjevalnik", + "service": "Storitev", + "middleware": "Vmesna programska oprema" + }, + "resourceStatus": { + "enabled": "Omogočeno", + "disabled": "Invalidi", + "warning": "Opozorilo", + "error": "Napaka", + "unknown": "Neznano" + }, + "failedEndpoint": "Neuspeh: {endpoint}" }, "audioStats": { "name": "Statistika zvoka", @@ -3651,9 +4933,7 @@ "label": "Vidni grafikoni", "description": "Izberite grafikone, ki naj bodo vidni.", "option": { - "cpu": "CPE", "memory": "Pomnilnik", - "gpu": "GPE", "network": "Omrežje" } }, @@ -3668,12 +4948,11 @@ } }, "card": { - "cpu": "CPE", "memory": "POM", - "gpu": "GPE", "network": "OMR", "up": "ODH", - "down": "PREJ" + "down": "PREJ", + "memoryTooltip": "{used} / {available} ({percent} %)" } }, "systemDisks": { @@ -3699,151 +4978,88 @@ }, "showBackgroundBar": { "label": "Prikaži vrstico uporabe v ozadju" - }, - "visibleStorageVolumes": { - "label": "Vidni nosilci shrambe", - "description": "Na voljo samo, če so vse izbrane integracije Synology. Pustite prazno, da prikažete vse zaznane nosilce shrambe.", - "placeholder": "Izberite nosilce shrambe" } }, "status": { - "unhealthy": "Nezdravo" + "unhealthy": "Nezdravo", + "smart": "SMART", + "free": "{percentage}% prostega prostora" + } + }, + "customApi": { + "name": "Gradnik po meri", + "description": "Izriše nastavljeno definicijo JSX po meri.", + "customJsx": { + "noTemplate": "Predloga JSX ni nastavljena.", + "templateWarnings": "Opozorila predloge: {count}:", + "requestIdRequired": "Ta omrežni krmilnik zahteva poimenovan requestId.", + "unsavedPreview": "Pred testiranjem poimenovanih zahtev izvedite začetni preizkus zahteve v urejevalniku.", + "invalidParams": "Parametri zahteve niso veljavni.", + "loading": "Nalaganje zahteve...", + "loadRequest": "Naloži zahtevo", + "requestFailed": "Zahteva ni uspela.", + "retry": "Ponovi zahtevo", + "actionCompleted": "Dejanje je bilo uspešno dokončano.", + "actionSimulated": "Dejanje je simulirano; zahteva ni bila poslana.", + "actionsDisabledEditMode": "Dejanja so onemogočena, ko je tabla v načinu urejanja.", + "widgetItemUnavailable": "Ta element gradnika ni na voljo.", + "toggle": "Preklopi", + "copied": "Kopirano", + "confirmDelete": "Potrdite to dejanje z uničujočimi posledicami." + }, + "option": { + "definitionId": { + "label": "Gradnik po meri" + }, + "refreshInterval": { + "label": "Interval osveževanja", + "description": "Kako pogosto se podatki znova pridobijo iz API-ja (v sekundah)" + } + }, + "noDefinition": "Definicija ni izbrana", + "definitionNotFound": "Gradnik po meri ni na voljo", + "migrationRequired": "Ta starejši gradnik po meri je ohranjen, vendar ga je treba pred zagonom preseliti v Custom JSX v2 v razdelku Upravljanje gradnikov po meri.", + "manageMigration": "Odpri upravljanje gradnikov po meri", + "contactAdmin": "Obrnite se na skrbnika.", + "configurationNeedsRepair": "Možnosti tega gradnika so se spremenile. Uredite gradnik, da popravite njegovo konfiguracijo.", + "removeFromBoard": "Odstrani s table", + "editModePending": "Shranite tablo, da naložite ta gradnik.", + "picker": { + "group": "Gradniki Custom JSX", + "empty": "Gradnikov po meri ni mogoče najti", + "preview": "Predogled", + "sources": "{count, plural, one {# vir} two {# vira} few {# viri} other {# virov}}", + "requests": "{count, plural, one {# zahteva} two {# zahtevi} few {# zahteve} other {# zahtev}}", + "migrationRequired": "Potrebna je preselitev", + "migrationDescription": "Ta nameščeni gradnik v1 še ne more delovati. Kopirajte njegov anonimizirani poziv v LLM, nato pa en sam odgovor JSON prilepite v Homarr.", + "manageMigration": "Odpri upravljanje gradnikov po meri", + "contactAdmin": "Obrnite se na skrbnika." + }, + "configuration": { + "needsAttention": "Konfiguracija zahteva pozornost: {message}", + "advancedOptions": "Napredne možnosti", + "invalidJson": "Neveljaven JSON" } }, "beszelSystemTable": { "name": "Beszel sistemi (tabela)", "description": "Tabelarni pogled vseh sistemov, ki jih spremlja Beszel, z razvrščljivimi stolpci in indikatorji stanja", "option": { - "statusFilter": { - "label": "Filter stanja" - }, "sortBy": { "label": "Razvrsti po" }, "sortDirection": { "label": "Smer razvrščanja" - }, - "showCpu": { - "label": "Pokaži CPU" - }, - "showMemory": { - "label": "Pokaži pomnilnik" - }, - "showDisk": { - "label": "Pokaži disk" - }, - "showGpu": { - "label": "Pokaži GPU" - }, - "showLoadAvg": { - "label": "Pokaži povprečno obremenitev" - }, - "showNet": { - "label": "Pokaži omrežje" - }, - "showTemp": { - "label": "Pokaži temperaturo" - }, - "showBattery": { - "label": "Pokaži baterijo" - }, - "showServices": { - "label": "Pokaži storitve" - }, - "showUptime": { - "label": "Pokaži čas delovanja" - }, - "showAgent": { - "label": "Pokaži različico agenta" - }, - "columnOrder": { - "label": "Vrstni red stolpcev" - }, - "columnWidths": { - "label": "Širine stolpcev" } }, - "noRecords": "Ni najdenih sistemov", "error": { - "internalServerError": "Povezava z Beszelom ni mogoča. Preverite nastavitve integracije.", "layoutSaveTitle": "Postavitve tabele ni mogoče shraniti", "layoutSaveMessage": "Vrstnega reda ali širin stolpcev ni bilo mogoče shraniti. Poskusite znova." - }, - "column": { - "system": "Sistem", - "cpu": "CPU", - "memory": "Pomnilnik", - "disk": "Disk", - "gpu": "GPU", - "loadAvg": "Povp. obr", - "net": "Omrežje", - "temp": "Temp", - "battery": "Bat", - "services": "Storitve", - "uptime": "Čas delovanja", - "agent": "Agent" } }, "beszelSystemGrid": { "name": "Beszel sistemi (mreža)", - "description": "Mrežni pogled kartic vseh sistemov, ki jih spremlja Beszel, z meritvami v realnem času", - "option": { - "statusFilter": { - "label": "Filter stanja" - }, - "showCpu": { - "label": "Pokaži CPU" - }, - "showMemory": { - "label": "Pokaži pomnilnik" - }, - "showDisk": { - "label": "Pokaži disk" - }, - "showGpu": { - "label": "Pokaži GPU" - }, - "showLoadAvg": { - "label": "Pokaži povprečno obremenitev" - }, - "showNet": { - "label": "Pokaži omrežje" - }, - "showTemp": { - "label": "Pokaži temperaturo" - }, - "showBattery": { - "label": "Pokaži baterijo" - }, - "showServices": { - "label": "Pokaži storitve" - }, - "showUptime": { - "label": "Pokaži čas delovanja" - }, - "showAgent": { - "label": "Pokaži različico agenta" - } - }, - "error": { - "internalServerError": "Povezava z Beszelom ni mogoča. Preverite nastavitve integracije." - }, - "empty": { - "noSystems": "Sistemov ni bilo mogoče najti" - }, - "metric": { - "cpu": "CPU", - "memory": "Pomnilnik", - "disk": "Disk", - "gpu": "GPU", - "loadAvg": "Povp. obr", - "net": "Omrežje", - "temp": "Temp", - "battery": "Bat", - "services": "Storitve", - "uptime": "Čas delovanja", - "agent": "Agent" - } + "description": "Mrežni pogled kartic vseh sistemov, ki jih spremlja Beszel, z meritvami v realnem času" }, "beszelAlerts": { "name": "Beszel opozorila", @@ -3857,11 +5073,12 @@ } }, "empty": "Opozorila niso konfigurirana", - "error": { - "internalServerError": "Povezava z Beszelom ni mogoča. Preverite nastavitve integracije." - }, "history": "Zgodovina", "resolved": "Razrešeno", + "alertDescription": { + "statusDuration": "Nedosegljivo {minutes} min", + "threshold": "Presega {value} v {minutes} min" + }, "status": { "triggered": "Sproženo", "ok": "V redu" @@ -3908,16 +5125,16 @@ "noSystems": "Sistemov ni bilo mogoče najti" }, "error": { - "internalServerError": "Povezava z Beszelom ni mogoča. Preverite nastavitve integracije.", "liveConnectionFailed": "Povezava v živo ni uspela. Vaš primerek Beszel morda ne podpira pretakanja v realnem času.", "switchToHistorical": "Preklopi na zgodovinski pogled", - "systemNotFound": "Izbranega sistema ni bilo mogoče najti. Izberite drug sistem." + "systemNotFound": "Izbranega sistema ni bilo mogoče najti. Izberite drug sistem.", + "selectionSaveTitle": "Izbire ni mogoče shraniti", + "selectionSaveMessage": "Izbire sistema ali časovnega obdobja ni bilo mogoče shraniti. Poskusite znova." }, "chart": { "cpu": { "title": "Poraba CPE", - "subtitle": "Povprečna sistemska obremenitev CPE", - "series": "CPE" + "subtitle": "Povprečna sistemska obremenitev CPE" }, "memory": { "title": "Poraba pomnilnika", @@ -3959,39 +5176,550 @@ "title": "V/I omrežja Dockerja", "subtitle": "Omrežni promet vsebnikov Docker" } + }, + "period": { + "live": "V živo", + "oneHour": "1 h", + "twelveHours": "12 h", + "oneDay": "24 h", + "oneWeek": "1 t", + "thirtyDays": "30 d" } }, - "wud": { - "name": "What's Up Docker", - "description": "Prikaže, koliko spremljanih vsebnikov ima na voljo posodobitve.", - "title": "What's Up Docker", - "monitored": "Spremljani", - "updatesAvailable": "{count, plural, one {# posodobitev na voljo} two {# posodobitvi na voljo} few {# posodobitve na voljo} other {# posodobitev na voljo}}", - "updateAvailable": "Na voljo je posodobitev", - "openReleaseNotes": "Odpri opombe ob izdaji", + "assistant": { + "name": "Pomočnik", + "description": "Popoln pogovor s pomočnikom neposredno na vaši tabli.", + "unavailable": { + "title": "Pomočnik ni na voljo", + "description": "Prijavite se in prosite skrbnika, naj pomočnika nastavi v upravljalni plošči." + }, + "compact": { + "title": "Pomočnik", + "description": "Povečajte ta gradnik za klepet tukaj ali odprite celoten pogovor.", + "open": "Odpri pomočnika", + "openTitle": "Pomočnik je odprt v stranski plošči", + "openDescription": "Pogovor ostane na eni aktivni površini.", + "returnToWidget": "Vrni pogovor v ta gradnik", + "otherWidgetTitle": "Pomočnik je aktiven v drugem gradniku", + "otherWidgetDescription": "Hkrati ostane aktivna samo ena pogovorna površina.", + "useHere": "Uporabi pomočnika v tem gradniku" + } + }, + "beszel": { + "error": { + "internalServerError": "Povezava z Beszelom ni mogoča. Preverite nastavitve integracije." + }, + "empty": { + "noSystems": "Sistemov ni mogoče najti" + }, + "options": { + "statusFilter": { + "label": "Filter stanja" + }, + "showCpu": { + "label": "Prikaži CPE" + }, + "showMemory": { + "label": "Prikaži pomnilnik" + }, + "showDisk": { + "label": "Prikaži disk" + }, + "showGpu": { + "label": "Prikaži GPE" + }, + "showLoadAvg": { + "label": "Prikaži povprečno obremenitev" + }, + "showNet": { + "label": "Prikaži omrežje" + }, + "showTemp": { + "label": "Prikaži temperaturo" + }, + "showBattery": { + "label": "Prikaži baterijo" + }, + "showServices": { + "label": "Prikaži storitve" + }, + "showUptime": { + "label": "Prikaži čas delovanja" + }, + "showAgent": { + "label": "Prikaži različico agenta" + } + }, + "metric": { + "system": "Sistem", + "source": "Integracija", + "hostname": "Ime gostitelja", + "cpuModel": "Model CPE", + "cores": "Jedra", + "memoryTotal": "Skupni pomnilnik", + "memory": "Pomnilnik", + "disk": "Disk", + "loadAvg": "Povp. obr", + "net": "Omrežje", + "temp": "Temp", + "battery": "Baterija", + "uptime": "Čas delovanja", + "agent": "Agent" + } + }, + "llamacpp": { + "name": "llama.cpp", + "description": "Prikažite stanje, naloženi model in hitrost ustvarjanja vašega lokalnega strežnika llama.cpp.", + "title": "llama.cpp", + "status": { + "unhealthy": "Nezdrav ({status})" + }, + "idle": "Nedejavno", + "speedTooltip": { + "current": "Trenutna hitrost ustvarjanja", + "average": "Povprečna hitrost ustvarjanja od zagona", + "request": "Povprečna hitrost od začetka te zahteve" + }, + "busy": "{count, plural, one {# zahteva v izvajanju} two {# zahtevi v izvajanju} few {# zahteve v izvajanju} other {# zahtev v izvajanju}}", + "modelInfo": { + "context": "Kontekst", + "size": "Velikost datoteke", + "parameters": "Parametri", + "model": "Model", + "quantization": "Kvantizacija" + }, + "stats": { + "tokensProcessed": "Obdelani žetoni", + "contextUsage": "Poraba konteksta / KV", + "cacheHitRate": "Stopnja zadetkov predpomnilnika pozivov", + "tokensGenerated": "Ustvarjeni žetoni" + }, + "error": { + "unreachable": "llama-server ni dosegljiv" + }, + "unit": { + "speed": "{value} ž/s", + "parameters": "{value}B", + "none": "—", + "speedShort": "ž/s" + }, "option": { "showTitle": { - "label": "Pokaži naslov" + "label": "Prikaži naslov" }, - "showRing": { - "label": "Pokaži obroč posodobitev" + "showModelInfo": { + "label": "Prikaži podatke o modelu" }, - "layout": { - "label": "Postavitev", + "showContextUsage": { + "label": "Prikaži porabo konteksta" + }, + "showCacheHitRate": { + "label": "Prikaži stopnjo zadetkov predpomnilnika" + }, + "showSpeedStats": { + "label": "Prikaži statistiko hitrosti" + }, + "showRequests": { + "label": "Prikaži obremenitev zahtev" + }, + "showTokenStats": { + "label": "Prikaži skupno število žetonov" + }, + "showSpeculative": { + "label": "Prikaži spekulativno dekodiranje" + } + }, + "advanced": { + "promptSpeed": "Hitrost poziva", + "avgSpeed": "Povp. ustvarjanje", + "requests": "Zahteve", + "deferred": "Odloženo", + "slots": "Zasedena mesta: {processing}/{total}", + "speculative": "Spekulativno dekodiranje", + "avgPrompt": "Povp. poziv", + "specDrafts": "Spek. osnutki", + "specAccepted": "Sprejeti spek. žetoni", + "specDraftTokens": "Žetoni spek. osnutka" + } + }, + "stats": { + "name": "Statistika", + "description": "Združite statistične podatke svojih integracij v enem nastavljivem gradniku.", + "configure": "Konfiguriraj meritve", + "refresh": "Osveži statistiko", + "empty": "Odprite nastavitve gradnika, izberite integracije in dodajte meritve.", + "editorHelp": "Dodajte meritve iz integracij, izbranih za ta gradnik. Spremembe se shranijo z vašo nadzorno ploščo.", + "source": "Integracija", + "metric": "Meritev", + "noMetrics": "Za to integracijo statistika ni na voljo", + "add": "Dodaj meritev", + "label": "Oznaka po meri", + "hidden": "Skrito", + "compact": "Strnjena števila", + "moveUp": "Premaknite se navzgor", + "moveDown": "Premaknite se navzdol", + "remove": "Odstrani meritev", + "loading": "Nalaganje…", + "unavailable": "Ni na voljo", + "refreshFailed": "Osveževanje ni uspelo — prikazani so shranjeni podatki", + "stale": "Shranjeni podatki — osvežite za posodobitev", + "table": { + "value": "Vrednost", + "status": "Stanje" + }, + "option": { + "table": { + "label": "Pogled tabele" + }, + "rows": { + "label": "Strnjene vrstice" + }, + "showIcon": { + "label": "Prikaži ikono vira" + }, + "spacing": { + "label": "Razmik", "option": { - "horizontal": { - "label": "Vodoravno" + "xs": { + "label": "Strnjeno" }, - "vertical": { - "label": "Navpično" + "sm": { + "label": "Udobno" + }, + "md": { + "label": "Prostorno" } } }, - "showUpdateList": { - "label": "Pokaži seznam posodobitev vsebnikov", - "description": "Prikaže seznam vseh nadzorovanih vsebnikov, ki imajo na voljo posodobitev slike" + "entries": { + "label": "Meritve" + }, + "plain": { + "label": "Odstrani ozadja kartic" } - } + }, + "fetchFailed": "Statistike ni mogoče pridobiti", + "viewOptions": "Prilagodi ta pogled", + "moreMetrics": "Še {count} v naprednem pogledu", + "localHelp": "Postavitev, oblikovanje in vidnost veljajo samo za ta pogled. Skupne nastavitve table ostanejo enake.", + "plain": "Odstrani ozadja kartic", + "resetView": "Ponastavi pogled", + "allHidden": "V tem pogledu so vse meritve skrite. Uporabite »Prilagodi ta pogled«, da jih obnovite." + }, + "wazuh": { + "target": { + "api": "API strežnika Wazuh", + "indexer": "Indeksator Wazuh", + "wazuh": "Wazuh" + }, + "severity": { + "low": "Nizko", + "medium": "Srednja", + "high": "Visoko", + "critical": "Kritično" + }, + "error": { + "unauthorized": { + "title": "{target} je zavrnil poverilnice", + "description": "Preverite uporabniško ime in geslo, shranjena v integraciji Wazuh. API strežnika (vrata 55000) in indeksator (vrata 9200) uporabljata ločena uporabnika." + }, + "certificate": { + "title": "Certifikat {target} ni zaupanja vreden", + "description": "Wazuh privzeto uporablja samopodpisan certifikat. V integraciji zaženite »Preizkusi povezavo« in zaupajte certifikatu ali dodajte svoj overitelj pod Nastavitve → Certifikati." + }, + "unreachable": { + "title": "{target} ni dosegljiv", + "description": "Gostitelj je zavrnil ali prekinil povezavo. Preverite URL, vrata in požarni zid. Indeksator v privzeti namestitvi vse-v-enem posluša samo na localhostu." + }, + "timeout": { + "title": "Časovna omejitev za {target}", + "description": "V 15 sekundah ni bilo odgovora. Storitev je morda preobremenjena ali pa je naslov napačen." + }, + "status": { + "title": "{target} je vrnil napako", + "description": "Zahteva ni uspela s stanjem HTTP {status}." + }, + "invalidResponse": { + "title": "Nepričakovan odgovor od {target}", + "description": "Preverite, ali URL kaže na API strežnika Wazuh ali indeksator in ne na nadzorno ploščo." + }, + "indexerRequired": { + "title": "Potrebne so poverilnice indeksatorja Wazuh", + "description": "Opozorila, ranljivosti in dogodki celovitosti datotek se berejo iz indeksatorja Wazuh. Integraciji dodajte URL indeksatorja, uporabniško ime in geslo." + }, + "unknown": { + "title": "Podatkov iz {target} ni mogoče naložiti", + "description": "Za podrobnosti preverite dnevnike Homarr." + } + }, + "range": { + "1h": "1 h", + "24h": "24 h", + "7d": "7 d", + "30d": "30 d" + }, + "levelTooltip": "Raven pravila {level} ({severity})" + }, + "wazuhAgents": { + "name": "Agenti Wazuh", + "description": "Razvrstljiv seznam agentov Wazuh s stanjem, operacijskim sistemom, različico in zadnjim ohranjanjem povezave", + "option": { + "statusFilter": { + "label": "Prikaži agente" + }, + "sortBy": { + "label": "Razvrsti po" + }, + "showVersion": { + "label": "Prikaži stolpec različice Wazuh" + }, + "showGroups": { + "label": "Prikaži stolpec skupin" + } + }, + "title": "Agenti", + "total": "{count, plural, one {# agent} two {# agenta} few {# agenti} other {# agentov}}", + "status": { + "active": "Aktivni", + "disconnected": "Prekinjena povezava", + "neverConnected": "Nikoli povezan", + "pending": "Na čakanju" + }, + "statusLabel": { + "active": "Aktivni", + "disconnected": "Prekinjena povezava", + "never_connected": "Nikoli povezan", + "pending": "Na čakanju", + "unknown": "Neznano" + }, + "live": "V živo", + "snapshot": "Posnetek, star {age}", + "snapshotHint": "Prebrano iz posnetka agentov nadzorne plošče Wazuh (wazuh-monitoring), ustvarjenega ob {time}. Za podatke v živo dodajte poverilnice API-ja strežnika.", + "staleSnapshot": "Posnetek agentov z dne {time} je zastarel. Preverite, ali opravilo za spremljanje nadzorne plošče Wazuh deluje, ali dodajte poverilnice API-ja strežnika.", + "noDisconnected": "Vsi agenti so povezani", + "empty": "Noben agent ne ustreza temu filtru", + "column": { + "status": "Stanje", + "name": "Ime opravila", + "ip": "IP", + "os": "OS", + "version": "Različica", + "lastKeepAlive": "Ohranjanje povezave", + "groups": "Skupine" + }, + "outdated": "Starejše od najnovejše različice agenta ({version})" + }, + "wazuhAlerts": { + "name": "Vir opozoril Wazuh", + "description": "Nedavna opozorila Wazuh z ravnjo, tehnikami MITRE ATT&CK, agentom in izvornim IP-jem", + "option": { + "minLevel": { + "label": "Najnižja raven pravila", + "description": "Ravni Wazuh: 0–6 nizko, 7–11 srednje, 12–14 visoko, 15+ kritično" + }, + "hours": { + "label": "Časovno okno (ure)" + }, + "limit": { + "label": "Število opozoril" + }, + "showMitre": { + "label": "Prikaži tehnike MITRE ATT&CK" + }, + "showAgent": { + "label": "Prikaži agenta" + }, + "showSourceIp": { + "label": "Prikaži izvorni IP" + }, + "showRuleId": { + "label": "Prikaži ID pravila" + } + }, + "title": "Opozorila · raven {level}+ · {hours} h", + "empty": "Na tej ravni ni opozoril. Vse je mirno.", + "rule": "Pravilo {id}", + "openInDashboard": "Odpri to opozorilo v nadzorni plošči Wazuh" + }, + "wazuhSummary": { + "name": "Resnost opozoril Wazuh", + "description": "Razčlenitev resnosti opozoril s trendom glede na prejšnje obdobje", + "option": { + "range": { + "label": "Časovno obdobje" + }, + "showTrend": { + "label": "Prikaži trend glede na prejšnje obdobje" + }, + "showFooter": { + "label": "Prikaži nogo" + } + }, + "title": "Resnost opozoril · {range}", + "alerts": "opozoril", + "none": "Ni opozoril", + "trend": { + "new": "novih", + "tooltip": "Prejšnje obdobje: {previous}" + }, + "previous": "Prejšnjih {range}: {count}", + "maxLevel": "Najvišja raven {level}", + "health": "Stanje indeksatorja: {status}", + "manager": "Upravitelj {version}" + }, + "wazuhTimeline": { + "name": "Časovnica opozoril Wazuh", + "description": "Sestavljeni grafikon opozoril Wazuh skozi čas po resnosti", + "option": { + "range": { + "label": "Časovno obdobje" + }, + "interval": { + "label": "Interval" + }, + "chartType": { + "label": "Vrsta grafikona" + }, + "yScale": { + "label": "Merilo osi Y", + "description": "Kvadratni koren ohrani visoka in kritična opozorila vidna ob tisočih nizkih opozorilih" + }, + "minLevel": { + "label": "Najnižja raven pravila" + }, + "showLegend": { + "label": "Prikaži legendo s seštevki" + } + }, + "title": "Časovnica opozoril · {range}", + "total": "{count, plural, one {# opozorilo} two {# opozorili} few {# opozorila} other {# opozoril}}", + "interval": "na {interval}" + }, + "wazuhTopList": { + "name": "Najpogostejši seznam Wazuh", + "description": "Najpogostejša pravila, agenti, izvorni naslovi IP ali taktike in tehnike MITRE ATT&CK glede na število opozoril", + "option": { + "kind": { + "label": "Razvrstitev" + }, + "range": { + "label": "Časovno obdobje" + }, + "limit": { + "label": "Število vnosov" + }, + "minLevel": { + "label": "Najnižja raven pravila" + }, + "showBars": { + "label": "Prikaži stolpce" + } + }, + "title": { + "rules": "Najboljša pravila · {range}", + "agents": "Najboljši agenti · {range}", + "sourceIps": "Najboljši izvorni naslovi IP · {range}", + "mitreTactics": "Taktike MITRE · {range}", + "mitreTechniques": "Tehnike MITRE · {range}" + }, + "empty": { + "rules": "V tem obdobju ni opozoril", + "agents": "V tem obdobju ni opozoril", + "sourceIps": "V tem obdobju ni opozoril z izvornim naslovom IP", + "mitreTactics": "V tem obdobju ni opozoril, povezanih z MITRE ATT&CK", + "mitreTechniques": "V tem obdobju ni opozoril, povezanih z MITRE ATT&CK" + }, + "totalTooltip": "Ujemajoča se opozorila: {count}", + "private": "Lokalno omrežje", + "public": "Javna stran", + "agents": "Zaznano pri agentih: {count}", + "others": "Še {count} opozoril v drugih vnosih" + }, + "wazuhVulnerabilities": { + "name": "Ranljivosti Wazuh", + "description": "Število ranljivosti, najboljši CVE-ji in najbolj ranljivi agenti", + "option": { + "cveOrder": { + "label": "Razvrsti CVE-je glede na" + }, + "minSeverity": { + "label": "Resnost CVE-ja" + }, + "cveLimit": { + "label": "Število CVE-jev" + }, + "agentLimit": { + "label": "Število agentov" + }, + "showAgents": { + "label": "Prikaži najbolj ranljive agente" + } + }, + "title": "Ranljivosti", + "topCves": "Najboljši CVE-ji", + "score": "Ocena", + "agentsShort": "Agenti", + "topAgents": "Najbolj ranljivi agenti", + "criticalHigh": "Kritične / visoke", + "totalTooltip": "{count} najdb pri {agents} agentih", + "affected": "{count} agentov", + "empty": "Ranljivosti niso bile zaznane", + "distribution": "Porazdelitev resnosti. Najdbe brez ocene {unscored} niso prikazane.", + "worst": "Najslabše: {id} ({score}) pri {agents} agentih" + }, + "wazuhFim": { + "name": "Celovitost datotek Wazuh", + "description": "Nedavni dogodki spremljanja celovitosti datotek (syscheck)", + "option": { + "range": { + "label": "Časovno obdobje" + }, + "event": { + "label": "Dogodki" + }, + "limit": { + "label": "Število dogodkov" + }, + "includeRegistry": { + "label": "Vključi dogodke registra Windows" + } + }, + "title": "Celovitost datotek · {range}", + "event": { + "added": "Datum dodajanja", + "modified": "Spremenjeno", + "deleted": "Izbrisano", + "unknown": "Spremenjeno" + }, + "empty": "V tem obdobju ni dogodkov celovitosti datotek", + "user": "uporabnik: {user}", + "registry": "Register" + }, + "wazuhAuthFailures": { + "name": "Neuspešne avtentikacije Wazuh", + "description": "Neuspešne prijave in opozorila o napadih s surovo silo po agentih z urnimi grafikoni", + "option": { + "hours": { + "label": "Časovno okno (ure)" + }, + "limit": { + "label": "Število agentov" + }, + "showSourceIps": { + "label": "Prikaži najboljše izvorne naslove IP" + } + }, + "title": "Neuspešne avtentikacije · {hours} h", + "seriesTooltip": "Vsi agenti v zadnjih {hours} h", + "peak": "Vrhunec {count}/interval", + "empty": "V tem obdobju ni bilo neuspešnih prijav", + "failed": "Neuspešne prijave", + "failedHint": "Posamezne neuspešne avtentikacije (sshd, PAM, prijava v Windows, neveljavni uporabniki)", + "bruteForce": "Napad s surovo silo", + "bruteForceHint": "Povezana pravila za napade s surovo silo (več neuspehov v kratkem obdobju, MITRE T1110)", + "sourceIps": "Izvorni naslovi IP", + "ipTooltip": "{ip}: {count} neuspehov", + "bruteForceCount": "{count} napadov s surovo silo" } }, "widgetPreview": { @@ -4004,7 +5732,76 @@ } }, "board": { + "emptyState": { + "title": "Ustvarite svoj prvi pogled", + "description": "Dodajte gradnik ali aplikacijo oziroma povežite storitev in uporabite njene podatke na tej nadzorni plošči.", + "addWidget": "Dodaj gradnik", + "addApp": "Dodaj aplikacijo", + "connectService": "Poveži storitev" + }, + "setupChecklist": { + "title": "Naredite to nadzorno ploščo uporabno", + "description": "Nadaljujte tam, kjer ste končali. Napredek sledi vsebini, ki je že na tej nadzorni plošči.", + "collapse": "Strni kontrolni seznam za nastavitev", + "dismiss": "", + "resume": "Nadaljuj nastavitev ({completed}/{total})", + "progress": "Napredek nastavitve nadzorne plošče", + "step": { + "content": { + "label": "Dodaj uporabno vsebino", + "description": "Izberite gradnik in ga konfigurirajte, preden bo umeščen." + }, + "app": { + "label": "Pripni aplikacijo", + "description": "Storitev ali orodje naj bo na tej nadzorni plošči oddaljeno le en klik." + }, + "service": { + "label": "Poveži storitev", + "description": "Odklenite podatke v živo in dejanja za združljive gradnike.", + "permissionDescription": "Skrbnik lahko poveže storitev in tako omogoči podatke v živo.", + "action": "Poveži" + } + } + }, "action": { + "addContent": "Dodaj vsebino nadzorne plošče", + "settings": "Nastavitve nadzorne plošče", + "switch": "Preklopi nadzorno ploščo", + "switcher": { + "title": "Preklopi nadzorno ploščo", + "search": { + "empty": "Nobena nadzorna plošča se ne ujema z »{search}«." + }, + "results": "Razpoložljive nadzorne plošče", + "preview": "Predogled {name} z elementi: {count}", + "currentHidden": "Trenutna nadzorna plošča: {name}", + "keyboard": { + "navigate": "Pomikanje", + "open": "Odpri", + "instructions": "Vnesite besedilo za filtriranje nadzornih plošč. S puščičnimi tipkami se pomikajte po rezultatih, z Enterjem pa odprite nadzorno ploščo." + }, + "empty": { + "title": "Ni drugih nadzornih plošč", + "description": "Ni drugih nadzornih plošč, do katerih bi lahko dostopali." + }, + "error": "Nadzornih plošč ni bilo mogoče naložiti." + }, + "create": { + "availability": { + "checking": "Preverjanje razpoložljivosti…", + "available": "{name} je na voljo" + }, + "notification": { + "success": { + "title": "Nadzorna plošča je ustvarjena", + "message": "Nadzorna plošča {name} je bila ustvarjena" + }, + "error": { + "title": "Nadzorne plošče ni mogoče ustvariti", + "message": "Nadzorne plošče {name} ni bilo mogoče ustvariti" + } + } + }, "duplicate": { "title": "Podvoji tablo", "message": "To bo podvojilo tablo {name} z vso njeno vsebino. Če se pripomočki sklicujejo na integracije, ki jih ne smete uporabljati, bodo te odstranjene.", @@ -4020,14 +5817,19 @@ } }, "edit": { + "enter": "Uredi nadzorno ploščo", + "save": "Shrani nadzorno ploščo", + "exit": "Izhod iz načina urejanja", "notification": { "success": { - "title": "Spremembe so uveljavljene", "message": "Vsebina je bila uspšeno shranjena" }, "error": { - "title": "Sprememb ni mogoče uveljaviti", "message": "Table ni bilo mogoče shraniti" + }, + "loadError": { + "title": "Urejanja ni mogoče začeti", + "message": "Urejevalnika nadzorne plošče ni bilo mogoče naložiti. Nadzorna plošča je še vedno na voljo v načinu ogleda." } }, "confirmLeave": { @@ -4035,62 +5837,6 @@ "message": "Vsebina ni shranjena, želite nadaljevati?" } }, - "oldImport": { - "label": "Uvozi iz Homarr pred različico 1.0.0", - "notification": { - "success": { - "title": "Uvoz uspešen", - "message": "Tabla je bila uspešno uvožena" - }, - "error": { - "title": "Uvoz ni uspel", - "message": "Table ni bilo mogoče uvoziti; za več podrobnosti preverite dnevnike" - } - }, - "form": { - "file": { - "label": "Izberite datoteko JSON", - "invalidError": "Neveljavna konfiguracijska datoteka" - }, - "apps": { - "label": "Aplikacije", - "avoidDuplicates": { - "label": "Prepreči podvajanje", - "description": "Prezre aplikacije, če aplikacija z enakim href že obstaja" - }, - "onlyImportApps": { - "label": "Uvozi samo aplikacije", - "description": "Doda samo aplikacije; tablo je treba ustvariti ročno" - } - }, - "name": { - "label": "Ime table" - }, - "screenSize": { - "label": "Velikost zaslona", - "description": "V različicah pred 1.0 so obstajali trije različni načini, zato ste lahko izbrali število stolpcev za vsako velikost zaslona.", - "option": { - "sm": "Majhna", - "md": "Srednja", - "lg": "Velika" - } - }, - "sidebarBehavior": { - "label": "Delovanje stranske vrstice", - "description": "Stranske vrstice so bile v različici 1.0 odstranjene; izberete lahko, kaj naj se zgodi s postavkami v njih.", - "option": { - "lastSection": { - "label": "Zadnji razdelek", - "description": "Stranska vrstica bo prikazana pod zadnjim razdelkom" - }, - "removeItems": { - "label": "Odstrani postavke", - "description": "Postavke v stranski vrstici bodo odstranjene" - } - } - } - } - }, "quickCreateApp": { "modal": { "title": "Ustvari aplikacijo sproti", @@ -4098,6 +5844,12 @@ } } }, + "landmark": { + "canvas": "Platno nadzorne plošče", + "leftRail": "Levi rob nadzorne plošče", + "rightRail": "Desni rob nadzorne plošče", + "items": "Elementi nadzorne plošče" + }, "field": { "pageTitle": { "label": "Naslov strani" @@ -4167,7 +5919,8 @@ } }, "primaryColor": { - "label": "Osnovna barva" + "label": "Osnovna barva", + "locked": "Skrbnik ohrani barvo blagovne znamke primerka na vsaki nadzorni plošči." }, "secondaryColor": { "label": "Sekundarna barva" @@ -4207,9 +5960,6 @@ "xl": "Zelo veliko" } }, - "name": { - "label": "Ime" - }, "isPublic": { "label": "Javna stran", "description": "Javne table so dostopne vsem, tudi brez računa." @@ -4229,9 +5979,44 @@ "title": "Postavitev", "responsive": { "title": "Predloga", + "description": "Vsaka postavitev ohrani lastne položaje in velikosti gradnikov. Mobilna in osnovna postavitev sta vedno na voljo; na drugih dodatnih prelomnih točkah lahko dodate postavitve po meri.", "action": { "add": "Dodaj predlogo" } + }, + "role": { + "mobile": "Mobilno", + "base": "Osnovno", + "custom": "Po meri" + }, + "custom": { + "defaultName": "Postavitev po meri" + }, + "mobile": { + "breakpointDescription": "Mobilna postavitev se vedno uporablja od 0 slikovnih pik do naslednje prelomne točke postavitve." + }, + "preview": { + "columns": "stolpci", + "empty": "Ta postavitev je prazna", + "dynamicSection": "Dinamični razdelek", + "editorWidthLabel": "{layoutName} · {width} slik. pik" + }, + "reset": { + "action": "Ponastavi iz osnovne postavitve", + "confirm": { + "title": "Ponastavim {layoutName}?", + "message": "S tem boste vsak shranjeni položaj in velikost v tej postavitvi zamenjali z novo postavitvijo, ustvarjeno iz osnovne. Tega ni mogoče razveljaviti." + } + }, + "edit": { + "action": "Uredi postavitev", + "saveAndEdit": "Shrani in uredi", + "save": "Shrani postavitev", + "cancel": { + "action": "Prekliči urejanje postavitve", + "title": "Zavržem spremembe postavitve?", + "message": "Neshranjene spremembe te postavitve bodo zavržene." + } } }, "background": { @@ -4268,10 +6053,7 @@ "rename": { "label": "Preimenuj tablo", "description": "Sprememba imena bo prekinila vse povezave do te table.", - "button": "Spremeni ime", - "modal": { - "title": "Preimenuj tablo" - } + "button": "Spremeni ime" }, "visibility": { "label": "Spremeni vidnost table", @@ -4295,9 +6077,7 @@ } }, "delete": { - "label": "Izbriši to tablo", "description": "Ko tablo izbrišete, poti nazaj ni. Prepričajte se, da to res želite.", - "button": "Izbriši to tablo", "confirm": { "title": "Izbriši tablo", "description": "Ali ste prepričani, da želite izbrisati to tablo? Tabla in vsa njena vsebina bosta trajno izbrisani." @@ -4342,28 +6122,41 @@ }, "layout": { "field": { - "name": { - "label": "Ime" - }, "columnCount": { "label": "Število stolpcev" }, "breakpoint": { "label": "Prekinitvene točke", "description": "Postavitev bo uporabljena na vseh zaslonih, večjih od te prelomne točke, do naslednje večje prelomne točke." + }, + "gutters": { + "label": "Fiksne stranske vrstice", + "description": "Na vsaki strani rezervirajte največ tri stolpce nadzorne plošče. Preostalo platno se samodejno prerazporedi.", + "left": { + "label": "Leva stranska vrstica", + "description": "To območje naj ostane vidno med pomikanjem po nadzorni plošči.", + "thumbLabel": "Širina leve stranske vrstice" + }, + "right": { + "label": "Desna stranska vrstica", + "description": "To območje naj ostane vidno med pomikanjem po nadzorni plošči.", + "thumbLabel": "Širina desne stranske vrstice" + }, + "width": { + "label": "Širina v stolpcih" + }, + "preview": { + "label": "Predogled postavitve nadzorne plošče" + } } } }, "management": { "metaTitle": "Upravljanje", - "title": { - "morning": "Dobro jutro, {username}", - "afternoon": "Dober dan, {username}", - "evening": "Dober večer, {username}" - }, "notFound": { "title": "Ni najdeno", - "text": "Zahtevanega vira ni bilo mogoče najti" + "text": "Zahtevanega vira ni bilo mogoče najti", + "backToHome": "Nazaj na začetno stran upravljanja" }, "error": { "title": "Te strani ni bilo mogoče naložiti", @@ -4372,19 +6165,10 @@ }, "navbar": { "items": { - "workshop": "Workshop", "home": "Domov", - "boards": "Deske", - "apps": "Aplikacije", - "integrations": "Integracije", - "searchEngies": "Iskalniki", - "medias": "Mediji", "users": { - "label": "Uporabniki", "items": { - "manage": "Upravljanje", - "invites": "Vabi", - "groups": "Skupine" + "manage": "Upravljanje" } }, "tools": { @@ -4392,10 +6176,7 @@ "items": { "docker": "Docker", "kubernetes": "Kubernetes", - "logs": "", "api": "API in MCP", - "certificates": "Potrdila", - "tasks": "Opravila", "backup": "Varnostno kopiranje" } }, @@ -4409,21 +6190,12 @@ "sourceCode": "Izvorna koda" } }, - "about": "O programu" + "about": "O programu", + "assistant": "Pomočnik" } }, "page": { "home": { - "statistic": { - "board": "Deske", - "user": "Uporabniki", - "invite": "Vabi", - "integration": "Integracije", - "app": "Aplikacije", - "group": "Skupine", - "searchEngine": "Iskalniki", - "media": "Mediji" - }, "statisticLabel": { "boards": "Deske", "resources": "Viri", @@ -4461,13 +6233,8 @@ "tooltip": "Ta tabla bo prikazana kot vaša mobilna tabla" } }, - "duplicate": { - "label": "Podvoji tablo" - }, "delete": { - "label": "Trajno izbriši", "confirm": { - "title": "Izbriši tablo", "description": "Ali ste prepričani, da želite izbrisati tablo {name}?" } } @@ -4476,28 +6243,82 @@ "public": "Ta tabla je javna", "private": "Ta tabla je zasebna" }, - "noResults": { - "title": "Še ni tabel" + "preview": { + "label": "Predogled postavitve za {name} z elementi: {count}", + "unknownCreator": "Neznani ustvarjalec" }, - "modal": { - "createBoard": { - "field": { - "name": { - "label": "Ime" - } - } - } + "noResults": { + "title": "Še ni tabel", + "description": "Ustvarite nadzorno ploščo za ureditev aplikacij in gradnikov na enem mestu." } }, "media": { "includeFromAllUsers": "Vključi predstavnost vseh uporabnikov" }, "user": { - "back": "Nazaj na uporabnike", "fieldsDisabledExternalProvider": "Nekatera polja so onemogočena, ker jih upravlja zunanji ponudnik preverjanja pristnosti.", "setting": { "general": { "title": "Splošno", + "header": { + "title": "Studio glave", + "badge": "Osebno", + "description": "Povlecite kontrolnike kamor koli v vrstici. Levi, sredinski in desni ostanejo fiksni, drugi kontrolniki pa se premikajo okoli njih.", + "device": { + "desktop": "Namizje", + "mobile": "Mobilno" + }, + "zones": { + "left": "Leva stran", + "center": "Sredina", + "right": "Desno" + }, + "action": { + "hide": "Skrij glavo", + "show": "Prikaži glavo", + "configure": "Premakni ali konfiguriraj {item}", + "remove": "Odstrani {item}", + "dropIntoZone": "Premakni v razdelek {zone}" + }, + "preview": { + "board": "Predogled nadzorne plošče za {name}", + "empty": "Postavitev nadzorne plošče ni na voljo" + }, + "available": { + "title": "Razpoložljivi kontrolniki", + "description": "Dodajte kontrolnik in nato povlecite njegov celoten gumb na zgornje mesto.", + "requiredAlways": "Ta kontrolnik je zahtevan, vendar ga lahko premaknete kamor koli v glavi.", + "allAdded": "Vsi vgrajeni kontrolniki so že v vaši glavi.", + "add": "Dodaj {item}", + "boardShortcut": "Bližnjica do nadzorne plošče", + "chooseBoard": "Izberite nadzorno ploščo" + }, + "configuration": { + "description": "Ta kontrolnik ostane enako velik kot v glavi v živo.", + "searchDisplay": { + "input": "Iskalna vrstica", + "icon": "Samo ikona" + }, + "logoDisplay": { + "logo": "Samo logotip", + "logoAndText": "Logotip + besedilo" + } + }, + "items": { + "logo": "Logotip", + "search": "Iskanje", + "home": "Domača nadzorna plošča", + "boardSwitcher": "Deske", + "assistant": "Pomočnik", + "docker": "Docker", + "boardEdit": "Uredi nadzorno ploščo", + "boardSettings": "Nastavitve nadzorne plošče", + "settings": "Vaše nastavitve", + "themeToggle": "Preklopi temo", + "user": "Račun", + "boardUnavailable": "Nadzorna plošča ni na voljo" + } + }, "item": { "language": "Jezik in regija", "board": { @@ -4531,14 +6352,10 @@ }, "security": { "title": "Varnost" - }, - "board": { - "title": "Deske" } }, "list": { - "metaTitle": "Upravljanje uporabnikov", - "title": "Uporabniki" + "metaTitle": "Upravljanje uporabnikov" }, "edit": { "metaTitle": "Uredi uporabnika {username}" @@ -4592,9 +6409,6 @@ } }, "field": { - "id": { - "label": "ID" - }, "creator": { "label": "Ustvarjalec" }, @@ -4618,10 +6432,7 @@ }, "setting": { "title": "Nastavitve", - "alert": "Nastavitve skupin imajo prednost glede na vrstni red skupin na seznamu. Zgornje nastavitve prepišejo spodnje nastavitve.", - "board": { - "title": "Table" - } + "alert": "Nastavitve skupin imajo prednost glede na vrstni red skupin na seznamu. Zgornje nastavitve prepišejo spodnje nastavitve." }, "members": { "title": "Člani", @@ -4629,10 +6440,7 @@ "notFound": "Članov ni mogoče najti" }, "permissions": { - "title": "Dovoljenja", - "form": { - "unsavedChanges": "Imate neshranjene spremembe!" - } + "title": "Dovoljenja" } } }, @@ -4641,12 +6449,10 @@ "notification": { "success": { "message": "Nastavitve so bile uspešno shranjene" - }, - "error": { - "message": "Shranjevanje nastavitev ni uspelo" } }, "section": { + "analyticsDocumentation": "Oglejte si, katere analitične podatke zbira Homarr", "analytics": { "title": "Analitika", "general": { @@ -4675,7 +6481,6 @@ } }, "board": { - "title": "Deske", "homeBoard": { "label": "Globalna domača tabla", "mobileLabel": "Globalna mobilna tabla", @@ -4694,7 +6499,6 @@ } }, "user": { - "title": "Uporab.", "enableGravatar": { "label": "Omogoči Gravatar", "description": "Ko ni nastavljen avatar po meri in je konfiguriran e-poštni naslov, uporabi avatar uporabnika iz Libravatarja/Gravatarja" @@ -4710,12 +6514,86 @@ "appearance": { "title": "Videz", "defaultColorScheme": { - "label": "Privzeta barvna shema", + "label": "Privzeta barvna shema" + } + }, + "branding": { + "title": "Blagovna znamka primerka", + "groups": { + "identity": "Identiteta", + "appearance": "Videz", + "customCss": "CSS po meri", + "authentication": "Preverjanje pristnosti" + }, + "identity": { + "description": "Logotip aplikacije je večja oznaka, ki se uporablja v aplikaciji, na straneh za prijavo in pri nameščenih aplikacijah. Ikona brskalnika (favicon) je majhen kvadrat, ki se uporablja v zavihkih in zaznamkih; če je prazna, se uporabi logotip aplikacije." + }, + "appName": { + "label": "Ime aplikacije" + }, + "greeting": { + "label": "Pozdrav po meri" + }, + "logo": { + "label": "Logotip aplikacije", + "placeholder": "/logo/logo.png" + }, + "favicon": { + "label": "Ikona brskalnika (favicon)", + "placeholder": "Uporablja logotip aplikacije" + }, + "primaryColor": { + "label": "Osnovna barva" + }, + "secondaryColor": { + "label": "Sekundarni poudarek" + }, + "lockPrimaryColor": { + "label": "Ohrani to barvo na vsaki nadzorni plošči", + "description": "Prepreči, da bi barve nadzornih plošč zamenjale poudarjeno barvo aplikacije." + }, + "signInBackground": { + "label": "Ozadje preverjanja pristnosti", + "placeholder": "https://example.com/background.jpg" + }, + "signInOverlay": { + "label": "Prekrivanje ozadja" + }, + "defaultRadius": { + "label": "Slog vogalov", "options": { - "auto": "Samodejno", - "light": "Svetla", - "dark": "Temna" + "xs": "Tesno", + "sm": "Neizrazito", + "md": "Uravnoteženo", + "lg": "Zaobljeno", + "xl": "Mehko" } + }, + "customCss": { + "label": "Globalni CSS po meri", + "description": "Uporablja se na vsaki strani. CSS po meri nadzorne plošče ga lahko preglasi." + }, + "authVisibility": { + "description": "Izberite, kaj se prikaže na vsaki strani za preverjanje pristnosti.", + "appName": "Ime aplikacije", + "logo": "Logotip aplikacije", + "greeting": "Pozdrav" + }, + "summary": { + "title": "Trenutna blagovna znamka", + "cornerStyle": "Slog vogalov", + "palette": "Barvna paleta", + "backgroundConfigured": "Ozadje po meri · prekrivanje {overlay} %", + "backgroundDefault": "Privzeto ozadje", + "greetingConfigured": "Pozdrav po meri", + "greetingDefault": "Privzeti pozdrav", + "boardColorLocked": "Barva nadzorne plošče zaklenjena", + "boardColorFlexible": "Barve nadzorne plošče dovoljene", + "appName": "Ime opravila", + "logo": "Logotip", + "greeting": "Pozdrav", + "on": "Vklopljeno", + "off": "Izklopljeno" } }, "culture": { @@ -4723,12 +6601,177 @@ "defaultLocale": { "label": "Privzeti jezik" } + }, + "assistant": { + "loading": "Nalaganje konfiguracije pomočnika", + "title": "Pomočnik", + "description": "Povežite končno točko modela, združljivo z OpenAI, za pomočnika za celoten primerek.", + "security": { + "description": "Ključi API in dodatne vrednosti glav so šifrirani v zbirki podatkov Homarr. Brskalnikom se nikoli ne vrnejo. Zahteve za modele se pošljejo neposredno iz strežnika Homarr na konfigurirano končno točko." + }, + "overview": { + "connectionReady": "Povezava je pripravljena", + "unsavedChanges": "Neshranjene spremembe", + "setupRequired": "Nastavitev je zahtevana", + "disabled": "Invalidi", + "noModel": "Model ni izbran" + }, + "connection": { + "endpointTitle": "Ponudnik in končna točka", + "description": "Izberite prednastavitev ali povežite katero koli storitev, ki izvaja API OpenAI Chat Completions.", + "save": "Shrani povezavo s ponudnikom" + }, + "credentials": { + "title": "Poverilnice", + "description": "Dodajte skrivnosti, ki jih potrebuje ta končna točka. Shranjene vrednosti ostanejo šifrirane in jih ni mogoče prebrati.", + "required": "Ključ je zahtevan", + "optional": "Ključ ni obvezen", + "workshop": "Prijava v GitHub za vsakega uporabnika" + }, + "provider": { + "title": "Ponudnik", + "groups": { + "free": "Brezplačno s Homarr", + "hosted": "Gostujoči ponudniki", + "local": "Lokalni ponudniki", + "custom": "Po meri" + }, + "options": { + "homarr": { + "description": "Omejeno število uporab pomočnika je vsak dan brezplačnih, stroške pa krije ekipa Homarr. Prijavite se v Community Workshop in uporabite svojo kvoto." + }, + "openrouter": { + "description": "Usmerjanje gostujočih modelov z obsežnim katalogom modelov, ki podpirajo orodja." + }, + "openai": { + "description": "OpenAI Chat Completions prek uradne končne točke API." + }, + "anthropic": { + "description": "Claude prek končne točke združljivosti SDK OpenAI podjetja Anthropic." + }, + "google-gemini": { + "description": "Gemini prek Googlove končne točke API, združljive z OpenAI." + }, + "xai": { + "description": "Modeli Grok prek API podjetja xAI, združljivega z OpenAI." + }, + "groq": { + "description": "Hitro gostovano izvajanje prek API podjetja Groq, združljivega z OpenAI." + }, + "mistral": { + "description": "Modeli Mistral prek uradnega API." + }, + "deepseek": { + "description": "Modeli DeepSeek prek njegovega API, združljivega z OpenAI." + }, + "together": { + "description": "Gostovani odprti modeli prek API podjetja Together, združljivega z OpenAI." + }, + "ollama": { + "description": "Lokalni ali omrežni strežnik Ollama z njegovim API, združljivim z OpenAI." + }, + "lm-studio": { + "description": "Lokalni strežnik LM Studio z omogočeno združljivostjo z OpenAI." + }, + "llama-cpp": { + "description": "Lokalni ali omrežni strežnik llama.cpp z njegovim API, združljivim z OpenAI." + }, + "custom": { + "label": "Končna točka po meri", + "description": "Katera koli druga končna točka, združljiva z OpenAI Chat Completions." + } + }, + "homarrAuth": { + "title": "Vključene so brezplačne dnevne uporabe pomočnika", + "description": "Ključ API ni potreben. Ekipa Homarr vam vsak dan krije omejeno število uporab pomočnika. Prijavite se v Community Workshop, da bo vaša kvota ločena." + } + }, + "baseUrl": { + "title": "Osnovni URL API", + "description": "Vključite predpono API, običajno /v1. V vsebnikih se localhost nanaša na vsebnik Homarr." + }, + "apiKey": { + "title": "Ključ API", + "required": "Ta ponudnik ga zahteva. Vrednost je šifrirana in jo je mogoče samo zapisati.", + "optional": "Izbirno za lokalne končne točke. Pustite prazno, če storitev ne zahteva preverjanja pristnosti z nosilcem.", + "placeholder": "Vnesite ključ API", + "savedTitle": "Šifrirani ključ API je shranjen", + "savedDescription": "Homarr lahko uporablja ta ključ, vendar njegove vrednosti ne more prikazati ali obnoviti.", + "remove": "Odstrani shranjeni ključ API", + "removeFlow": { + "title": "Odstranim shranjeni ključ API?", + "description": "Ta ponudnik zahteva ključ API. Če ga odstranite, se lahko odkrivanje modelov in odgovori pomočnika ustavijo, dokler ne shranite drugega ključa.", + "optionalDescription": "Po odstranitvi tega ključa končna točka ne bo več prejemala preverjanja pristnosti z nosilcem. Preverite, ali sprejema neavtenticirane zahteve ali uporablja drugo shranjeno glavo.", + "cancel": "Ohrani shranjeni ključ", + "confirm": "Odstrani ključ API" + } + }, + "headers": { + "title": "Dodatne glave zahtev", + "description": "Izbirne glave za preverjanje pristnosti ali usmerjanje. Vrednosti glav so šifrirane in jih je mogoče samo zapisati.", + "add": "Dodaj glavo", + "name": "Ime glave", + "value": "Vrednost glave", + "valuePlaceholder": "Skrivna vrednost ali vrednost usmerjanja", + "remove": "Odstrani glavo", + "configured": "Konfigurirane so dodatne šifrirane glave. Če dodate glave, se celoten shranjeni nabor zamenja.", + "empty": "Za tega ponudnika ni shranjenih dodatnih glav.", + "savedBadge": "Glave so shranjene", + "pendingRemoval": "Odstranitev v čakanju", + "clear": "Pri shranjevanju odstrani shranjene glave", + "keep": "Ohrani shranjene glave" + }, + "model": { + "title": "Model", + "description": "Izberite odkriti model ali vnesite natančen ID modela končne točke.", + "placeholder": "ID modela", + "refresh": "Osveži modele", + "chooseModel": "Izberite model, ki bo uporabljen za nove pogovore.", + "discoveryPath": "Pot odkrivanja modelov", + "discoveryPathDescription": "Doda se osnovnemu URL-ju API. Pustite prazno, da onemogočite odkrivanje in uporabite ročni ID modela.", + "manual": "Ročno vnesite ID modela ali shranite povezavo za odkrivanje modelov.", + "manualFallback": "Odkrivanje ni na voljo. Še vedno lahko ročno vnesete ID modela.", + "saveConnectionFirst": "Pred izbiro modela shranite povezavo s ponudnikom.", + "discovering": "Osveževanje modelov, ki so na voljo pri tem ponudniku…", + "discovered": "{count, plural, one {Odkrit je bil # model. Podpora za orodja je odvisna od izbrane končne točke in modela.} two {Odkrita sta bila # modela. Podpora za orodja je odvisna od izbrane končne točke in modela.} few {Odkriti so bili # modeli. Podpora za orodja je odvisna od izbrane končne točke in modela.} other {Odkritih je bilo # modelov. Podpora za orodja je odvisna od izbrane končne točke in modela.}}", + "discoveryFailed": "Odkrivanje modelov ni bilo dokončano", + "context": "{count} kontekstno okno", + "toolsConfirmed": "Oglaševana orodja", + "toolsUnknown": "Preveri podporo za orodja" + }, + "serverTools": { + "title": "Orodja strežnika", + "webSearch": { + "label": "Spletno iskanje", + "description": "Dovoli modelu iskanje po spletu v živo prek OpenRouterja, kadar zahteva potrebuje aktualne informacije. Uporaba iskanja se pri OpenRouterju zaračuna ločeno.", + "proxyDescription": "Pošlji strežniško orodje za spletno iskanje OpenRouterja na to končno točko. To omogočite le, če končna točka po meri posreduje obliko strežniških orodij OpenRouter, na primer posrednik Homarr Router.", + "limit": "Model določi, kdaj bo izvedel iskanje, pri čemer je za vsako zahtevo omejen na 3 iskanja in 5 rezultatov na iskanje." + } + }, + "enabled": { + "label": "Omogoči pomočnika", + "description": "Pomočnik je prikazan vsem prijavljenim uporabnikom. Obstoječa dovoljenja Homarr še vedno veljajo za vsak notranji klic orodja." + }, + "save": "Shrani pomočnika", + "notification": { + "connectionSaved": { + "title": "Povezava s ponudnikom je shranjena", + "message": "Končna točka in šifrirane poverilnice so pripravljene za izbiro modela.", + "credentialsCleared": "Končna točka se je spremenila, zato so bile prejšnje poverilnice izbrisane. Po potrebi dodajte poverilnice za nov cilj." + }, + "saved": { + "title": "Nastavitve pomočnika so shranjene", + "message": "Novi model in nastavitve razpoložljivosti so aktivni." + }, + "error": { + "title": "Nastavitev pomočnika ni bilo mogoče shraniti" + } + } } } }, "tool": { "tasks": { - "title": "Opravila", "status": { "idle": "Nedej.", "running": "Se izvaja", @@ -4746,6 +6789,11 @@ "label": "Pingi" } }, + "action": { + "run": "Zaženi {name} zdaj", + "enable": "Omogoči {name}", + "disable": "Onemogoči {name}" + }, "interval": { "seconds": "Vsako {interval, plural, =1 {sekundo} two {2 sekundi} few {# sekunde} other {# sekund}}", "minutes": "Vsako {interval, plural, =1 {minuto} two {2 minuti} few {# minute} other {# minut}}", @@ -4761,13 +6809,7 @@ } } }, - "settings": { - "title": "Nastavitve opravila {jobName}" - }, "field": { - "name": { - "label": "Ime" - }, "interval": { "label": "Interval razporeda" }, @@ -4781,11 +6823,6 @@ "table": { "search": "Išči {count} opravil..." }, - "action": { - "refresh": { - "label": "Osveži" - } - }, "refresh": { "success": { "message": "Opravila so bila uspešno osvežena" @@ -4819,7 +6856,6 @@ } }, "api": { - "title": "API", "modal": { "createApiToken": { "title": "Žeton API ustvarjen", @@ -4845,7 +6881,6 @@ }, "table": { "header": { - "id": "ID", "createdBy": "Ustvaril/-a", "actions": "Dejanja" } @@ -4901,43 +6936,12 @@ "availableTools": { "title": "Razpoložljiva orodja", "description": "Na voljo je {count} orodij. Razširite kategorijo, da si ogledate posamezna orodja in njihove opise.", - "columnType": "Vrsta", - "columnName": "Orodje", - "columnDescription": "Opis" - }, - "troubleshooting": { - "title": "Odpravljanje težav", - "missingHeader": { - "title": "»Manjka glava ApiKey«", - "description": "Vaš odjemalec ne pošilja glave {header}. Preverite, ali je razdelek {section} v konfiguraciji MCP pravilen. Nekateri odjemalci zahtevajo ponovni zagon po spremembah konfiguracije." - }, - "invalidFormat": { - "title": "»Neveljavna oblika ApiKey«", - "description": "Prepričajte se, da ste kopirali celoten ključ API in ne le njegovega dela." - }, - "invalidKey": { - "title": "»Neveljaven ključ API«", - "description": "ID ključa ni bil najden ali pa je žeton napačen. Ključe API si je mogoče ogledati samo enkrat ob ustvarjanju. Če ste ga izgubili, izbrišite stari ključ in ustvarite novega." - }, - "connectionRefused": { - "title": "Povezava zavrnjena / časovna omejitev", - "description": "Prepričajte se, da je URL dosegljiv iz vašega odjemalca umetne inteligence. Če Homarr deluje za povratnim posredniškim strežnikom ali v Dockerju, uporabite zunanji URL (ne {localhost}). Preverite, ali so vrata pravilna (privzeto: 7575 za Docker)." - }, - "toolsNotAppearing": { - "title": "Orodja niso prikazana", - "description": "Nekatera orodja zahtevajo konfiguracijo določenih integracij (npr. Docker, Overseerr). Seznam orodij je odvisen od tega, kaj je na voljo v vašem primerku Homarr." + "filteredDescription": "{count} ujemajočih se orodij v razširjenih kategorijah.", + "search": "Išči orodja", + "noResults": { + "title": "Nobeno orodje se ne ujema s tem iskanjem", + "description": "Nobeno orodje MCP se ne ujema z »{search}«. Poskusite z imenskim prostorom, imenom orodja ali opisom." } - }, - "copy": "Kopiraj", - "oneClick": { - "title": "Namesti z enim klikom", - "subtitle": "Uporablja OAuth — ob prvi uporabi se preverite v brskalniku", - "vsCode": "Namesti v VS Code", - "cursor": "Namesti v Cursor", - "copyUrl": "Kopiraj URL MCP", - "copied": "Kopirano!", - "copyHint": "Za ChatGPT, Claude Code ali katerega koli odjemalca MCP", - "manualConfig": "Ročna konfiguracija" } } } @@ -4954,47 +6958,12 @@ "title": "Izvoz občutljivih podatkov", "warningTitle": "Ta izvoz vsebuje celotno vašo bazo podatkov.", "warningBody": "Varnostna kopija vključuje vse uporabnike, skrivnosti integracij (šifrirane), API ključe, konfiguracije tabel in podatke aplikacij. Izvoženo datoteko shranite varno in je ne delite.", - "typePrompt": "Vnesite »{phrase}« za nadaljevanje", - "submit": "Izvozi bazo podatkov", - "cancel": "Prekliči" + "submit": "Izvozi bazo podatkov" } }, "import": { "title": "Obnovi bazo podatkov", - "description": "Naložite predhodno izvoženo varnostno kopijo ZIP za obnovitev vaše baze podatkov. To bo zamenjalo celotno vašo bazo podatkov. Če je bila varnostna kopija ustvarjena z drugim šifrirnim ključem, bodo skrivnosti samodejno ponovno šifrirane.", - "warning": "Obnovitev varnostne kopije bo popolnoma zamenjala vašo trenutno bazo podatkov in znova zagnala aplikacijo. Tega dejanja ni mogoče razveljaviti.", - "dropzone": { - "title": "Spustite svojo varnostno kopijo ZIP tukaj ali kliknite za brskanje", - "description": "Sprejete so samo datoteke .zip iz varnostne kopije SQLite Homarr" - }, - "changeFile": "Spremeni datoteko", - "button": "Obnovi bazo podatkov", - "success": { - "title": "Obnovitev končana", - "message": "Baza podatkov je bila uspešno obnovljena. Aplikacija se ponovno zaganja..." - }, - "error": "Uvoz ni uspel" - }, - "preview": { - "title": "Vsebina varnostne kopije", - "exported": "Izvoženo {date}", - "loading": "Analiziranje datoteke varnostne kopije...", - "errorTitle": "Napaka predogleda", - "entity": "Entiteta", - "count": "Število", - "boards": "Table", - "entities": { - "board": "Table", - "user": "Uporabniki", - "app": "Aplikacije", - "integration": "Integracije", - "item": "Gradniki", - "media": "Mediji", - "search_engine": "Iskalniki" - }, - "analyzeError": "Analiza datoteke varnostne kopije ni uspela", - "invalidMissingMetadata": "Neveljavna varnostna kopija: manjka metadata.json", - "invalidMissingDb": "Neveljavna varnostna kopija: manjka db.sqlite" + "description": "Naložite predhodno izvoženo varnostno kopijo ZIP za obnovitev vaše baze podatkov. To bo zamenjalo celotno vašo bazo podatkov. Če je bila varnostna kopija ustvarjena z drugim šifrirnim ključem, bodo skrivnosti samodejno ponovno šifrirane." }, "restore": { "dropzone": { @@ -5004,29 +6973,20 @@ "analyzing": "Analiziranje varnostne kopije...", "changeFile": "Spremeni datoteko", "continueToRestore": "Nadaljujte na obnovitev", - "tryAgain": "Poskusite znova", "analysisError": "Napaka analize", "preview": { "title": "Vsebina varnostne kopije", "exported": "Izvoženo {date}", "entity": "Entiteta", "count": "Število", - "boards": "Table", "entities": { - "board": "Table", - "user": "Uporabniki", - "app": "Aplikacije", - "integration": "Integracije", - "item": "Gradniki", - "media": "Mediji", - "search_engine": "Iskalniki" + "item": "Gradniki" }, "migrationsApplied": "{count, plural, one {# migracija uporabljena} two {# migraciji uporabljeni} few {# migracije uporabljene} other {# migracij uporabljenih}}", "migrationsAppliedPlural": "{count, plural, one {# migracija uporabljena} two {# migraciji uporabljeni} few {# migracije uporabljene} other {# migracij uporabljenih}}", "migrationsOlderVersion": "Ta varnostna kopija je bila iz starejše različice Homarr. Uporabljena je bila {count, plural, one {# shematska migracija} two {# shematski migraciji} few {# shematske migracije} other {# shematskih migracij}}, da se posodobi.", "migrationsOlderVersionPlural": "Ta varnostna kopija je bila iz starejše različice Homarr. Uporabljenih je bilo {count, plural, one {# shematska migracija} two {# shematski migraciji} few {# shematske migracije} other {# shematskih migracij}}, da se posodobi.", "migrationsUpToDate": "Shema baze podatkov je posodobljena ({count, plural, one {# migracija uporabljena} two {# migraciji uporabljeni} few {# migracije uporabljene} other {# migracij uporabljenih}})", - "upToDate": "Posodobljeno", "migrationsPending": "{count, plural, one {# čaka} two {# čakata} few {# čakajo} other {# čaka}}" }, "migration": { @@ -5037,21 +6997,21 @@ "title": "Uničujoče dejanje", "warningTitle": "To bo trajno zamenjalo celotno vašo bazo podatkov.", "warningBody": "Vse trenutne table, uporabniki, aplikacije, integracije, nastavitve in seje bodo izgubljene. Tega dejanja ni mogoče razveljaviti. Aplikacija se bo po obnovitvi znova zagnala.", - "typePrompt": "Vnesite »{phrase}« za nadaljevanje", - "cancel": "Prekliči", "submit": "Obnovi bazo podatkov" }, "progress": { "title": "Obnavljanje baze podatkov...", - "extracting": "Razširjanje arhiva varnostne kopije", - "migrating": "Uporabljanje migracij baze podatkov", - "encrypting": "Ponovno šifriranje skrivnosti integracij", - "swapping": "Zamenjava datoteke baze podatkov", - "restarting": "Ponovni zagon strežnika" + "restarting": "Ponovni zagon strežnika", + "relogin": "Obnovitev zbirke podatkov je razveljavila vašo trenutno sejo. Homarr vas bo preusmeril na prijavo, ko bo strežnik pripravljen." }, "complete": { "title": "Obnovitev končana", - "message": "Baza podatkov je bila uspešno obnovljena. Strežnik se ponovno zaganja – osvežite stran čez nekaj sekund." + "message": "Baza podatkov je bila uspešno obnovljena. Strežnik se ponovno zaganja – osvežite stran čez nekaj sekund.", + "button": "Prijavite se zdaj" + }, + "timeout": { + "title": "Strežnik se ni vrnil v splet", + "message": "Obnovitev zbirke podatkov je končana, vendar Homarr znova ni bil pripravljen. Znova poskusite preveriti povezavo ali ročno osvežite to stran." }, "failed": { "title": "Obnovitev ni uspela" @@ -5059,6 +7019,9 @@ "invalidMissingMetadata": "Neveljavna varnostna kopija: manjka metadata.json", "invalidMissingDb": "Neveljavna varnostna kopija: manjka db.sqlite", "analyzeError": "Analiza varnostne kopije ni uspela" + }, + "confirm": { + "typePrompt": "Za nadaljevanje vnesite »{phrase}«" } } }, @@ -5093,7 +7056,11 @@ "toggleBoardEdit": "Preklopi način urejanja table", "toggleColorScheme": "Preklopi svetli/temni način", "saveNotebook": "Shrani beležnico (samo znotraj pripomočka beležnice)", - "openSpotlight": "Odpri iskanje" + "openSpotlight": "Odpri iskanje", + "openSpotlightApps": "Odpri iskanje aplikacij", + "openSpotlightAssistant": "Odpri način pomočnika", + "openSpotlightPreferences": "Odpri način nastavitev", + "openAssistant": "Odpri pomočnika" }, "note": "Namig: Mod se nanaša tako na tipko Ctrl kot na tipko ⌘ v sistemu macOS" } @@ -5103,6 +7070,63 @@ }, "docker": { "title": "Vsebniki", + "reconciliation": { + "title": "Pomočnik za nastavitev Dockerja", + "suggestions": "{count, plural, =0 {Ni predlogov} one {# predlog} two {# predloga} few {# predlogi} other {# predlogov}}", + "attention": "{count} zahteva pozornost", + "endpointUnavailable": "Nekaterih storitev ni bilo mogoče preveriti, ker te končne točke niso na voljo: {names}", + "empty": "Vidnih storitev Dockerja ni bilo mogoče najti.", + "emptyFilter": "Tej pogojni izbiri ne ustreza nobena storitev.", + "ambiguous": "Tej storitvi bi lahko ustrezalo več obstoječih elementov. Homarr ne bo samodejno izbral nobenega.", + "filter": { + "attention": "Zahteva pozornost", + "represented": "Že nastavljeno", + "all": "Vse" + }, + "state": { + "newRecognized": "Pripravljeno za povezavo", + "newApp": "Nova storitev", + "represented": "Že predstavljeno", + "linked": "Povezano", + "moved": "Naslov je spremenjen" + }, + "url": { + "manual": "Naslov vnesite ročno" + }, + "health": { + "layer": { + "docker": "Docker", + "integrationConfiguration": "Integracija", + "authentication": "Preverjanje pristnosti", + "apiRequest": "API", + "appRepresentation": "Aplikacija", + "widgetConfiguration": "Gradnik", + "widgetQuery": "Poizvedba gradnika" + }, + "status": { + "available": "Na voljo", + "configured": "Konfigurirano", + "linked": "Povezano", + "missing": "Manjka", + "changed": "Spremenjeno", + "unused": "Ni v uporabi", + "notApplicable": "Ni na voljo", + "notObserved": "Ni opaženo" + } + }, + "action": { + "review": "Preglej", + "dismiss": "Opusti", + "restoreDismissed": "Obnovi opuščeno ({count})", + "setupIntegration": "Nastavi integracijo", + "reviewIntegration": "Preglej integracijo", + "viewRepresentation": "Ogled nastavitve" + }, + "loadError": { + "title": "Pomočnika za nastavitev Dockerja ni bilo mogoče naložiti", + "message": "Podatki o storitvah Dockerja niso na voljo. Poskusite znova, ne da bi zapustili to stran." + } + }, "table": { "updated": "Posodobljeno {when}", "refresh": { @@ -5115,9 +7139,6 @@ "totalMemory": "Skupaj pomnilnika: {memory}" }, "field": { - "name": { - "label": "Ime" - }, "state": { "label": "Stanje", "option": { @@ -5131,9 +7152,6 @@ } }, "stats": { - "cpu": { - "label": "CPE" - }, "memory": { "label": "Pomnilnik" } @@ -5196,8 +7214,11 @@ } }, "remove": { - "label": "Odstrani", "confirm": "Kliknite znova za trajno odstranitev", + "confirmation": { + "title": "{count, plural, one {Odstranim # vsebnik?} two {Odstranim # vsebnika?} few {Odstranim # vsebnike?} other {Odstranim # vsebnikov?}}", + "message": "{count, plural, one {S tem boste trajno odstranili # vsebnik: {names}} two {S tem boste trajno odstranili # vsebnika: {names}} few {S tem boste trajno odstranili # vsebnike: {names}} other {S tem boste trajno odstranili # vsebnikov: {names}}}" + }, "notification": { "success": { "title": "Vsebniki odstranjeni", @@ -5209,8 +7230,13 @@ } } }, + "result": { + "failure": { + "title": "Nekatera dejanja za vsebnike niso uspela", + "message": "{total, plural, one {{failed} od # dejanja ni uspelo: {names}} two {{failed} od # dejanj nista uspeli: {names}} few {{failed} od # dejanj niso uspela: {names}} other {{failed} od # dejanj ni uspelo: {names}}}" + } + }, "refresh": { - "label": "Osveži", "notification": { "success": { "title": "Vsebniki osveženi", @@ -5241,18 +7267,33 @@ }, "error": { "internalServerError": "Pridobivanje vsebnikov Docker ni uspelo", + "endpointUnavailable": "{count, plural, one {# končna točka Dockerja ni na voljo: {names}} two {# končni točki Dockerja nista na voljo: {names}} few {# končne točke Dockerja niso na voljo: {names}} other {# končnih točk Dockerja ni na voljo: {names}}}", "noColumns": "V nastavitvah pripomočka izberite vsaj en stolpec" } }, "kubernetes": { + "context": { + "label": "Kontekst Kubernetes", + "loadError": { + "title": "Kontekstov Kubernetes ni bilo mogoče naložiti", + "message": "Podatki o kontekstu niso na voljo. Poskusite znova, ne da bi zapustili to stran." + }, + "status": { + "available": "Na voljo", + "degraded": "Meritve niso na voljo", + "unavailable": "Ni na voljo" + }, + "unavailable": "Do tega konteksta Kubernetes ni mogoče dostopati. Izberite drug kontekst ali preverite njegove poverilnice in končno točko.", + "metricsUnavailable": "Ta kontekst je dosegljiv, vendar strežnik Metrics Server ni na voljo. Inventar ostaja na voljo brez podatkov o trenutni uporabi CPE-ja in pomnilnika." + }, "cluster": { "title": "Nadzorna plošča gruče", "label": "Gruča", "providers": "Ponudniki", "version": "Različica", - "architecture": "Arhitektura", "capacity": { "title": "Zmogljivost", + "metricsUnavailable": "Metrics Server ni na voljo. Inventar in rezervirana zmogljivost sta še vedno vidna, vendar trenutne uporabe CPE-ja in pomnilnika ni mogoče prikazati.", "resource": { "reserved": "Rezervirano", "used": "Porab." @@ -5271,38 +7312,10 @@ } }, "nodes": { - "label": "Vozlišča", "field": { - "name": { - "label": "Ime" - }, - "state": { - "label": "Stanje", - "option": { - "ready": "Na voljo", - "NotReady": "Ni pripravljeno" - } - }, - "cpu": { - "label": "CPE" - }, - "memory": { - "label": "RAM" - }, - "pods": { - "label": "Podi" - }, - "operatingSystem": { - "label": "OS" - }, - "architecture": { - "label": "Arhitektura" - }, + "metricsUnavailable": "Ni na voljo", "kubernetesVersion": { "label": "Različica Kubernetes" - }, - "creationTimestamp": { - "label": "Ustvarjeno" } }, "table": { @@ -5310,43 +7323,17 @@ } }, "namespaces": { - "label": "Imenski prostori", - "field": { - "name": { - "label": "Ime" - }, - "state": { - "label": "Stanje", - "option": { - "active": "Aktivno", - "terminating": "Prekinjanje" - } - }, - "creationTimestamp": { - "label": "Ustvarjeno" - } - }, "table": { "search": "Iskanje imenskih prostorov: {count}" } }, "ingresses": { - "label": "Ingressi", "field": { - "name": { - "label": "Ime" - }, - "namespace": { - "label": "Imenski prostor" - }, "className": { "label": "Ime razreda" }, "rulesAndPaths": { "label": "Pravila in poti" - }, - "creationTimestamp": { - "label": "Ustvarjeno" } }, "table": { @@ -5354,17 +7341,7 @@ } }, "services": { - "label": "Storitve", "field": { - "name": { - "label": "Ime" - }, - "namespace": { - "label": "Imenski prostor" - }, - "type": { - "label": "Vrsta" - }, "ports": { "label": "Vrata" }, @@ -5373,9 +7350,6 @@ }, "clusterIP": { "label": "IP gruče" - }, - "creationTimestamp": { - "label": "Ustvarjeno" } }, "table": { @@ -5383,25 +7357,12 @@ } }, "pods": { - "label": "Podi", "field": { - "name": { - "label": "Ime" - }, - "namespace": { - "label": "Imenski prostor" - }, "image": { "label": "Slika" }, "applicationType": { "label": "Vrsta aplikacije" - }, - "status": { - "label": "Stanje" - }, - "creationTimestamp": { - "label": "Ustvarjeno" } }, "table": { @@ -5409,51 +7370,17 @@ } }, "secrets": { - "label": "Skrivnosti", - "field": { - "name": { - "label": "Ime" - }, - "namespace": { - "label": "imenski prostor" - }, - "type": { - "label": "vrsta" - }, - "creationTimestamp": { - "label": "Ustvarjeno" - } - }, "table": { "search": "Iskanje skrivnosti: {count}" } }, "configmaps": { - "label": "ConfigMaps", - "field": { - "name": { - "label": "Ime" - }, - "namespace": { - "label": "imenski prostor" - }, - "creationTimestamp": { - "label": "Ustvarjeno" - } - }, "table": { "search": "Iskanje ConfigMaps: {count}" } }, "volumes": { - "label": "Nosilci", "field": { - "name": { - "label": "Ime" - }, - "namespace": { - "label": "Imenski prostor" - }, "accessModes": { "label": "Načini dostopa" }, @@ -5468,12 +7395,6 @@ }, "volumeName": { "label": "Ime nosilca" - }, - "status": { - "label": "Stanje" - }, - "creationTimestamp": { - "label": "Ustvarjeno" } }, "table": { @@ -5482,6 +7403,29 @@ }, "error": { "internalServerError": "Podatkov Kubernetes ni bilo mogoče pridobiti" + }, + "field": { + "name": { + "label": "Ime opravila" + }, + "namespace": { + "label": "Imenski prostor" + }, + "creationTimestamp": { + "label": "Ustvarjeno" + }, + "state": { + "label": "Stanje opravila" + }, + "status": { + "label": "Stanje" + }, + "type": { + "label": "Vrsta odjemalca za prenose" + }, + "architecture": { + "label": "Arhitektura" + } } }, "permission": { @@ -5515,71 +7459,27 @@ }, "navigationStructure": { "manage": { - "workshop": { - "label": "Workshop" - }, "label": "Upravljanje", - "boards": { - "label": "Deske" - }, - "integrations": { - "label": "Integracije", + "custom-widgets": { "edit": { - "label": "Uredi" + "flow": { + "label": "Potek" + } }, - "new": { - "label": "Novo" - } - }, - "search-engines": { - "label": "Iskalniki", - "new": { - "label": "Novo" + "workshop": { + "label": "Delavnica" }, - "edit": { - "label": "Uredi" - } - }, - "medias": { - "label": "Mediji" - }, - "apps": { - "label": "Aplikacije", - "new": { - "label": "Novo" - }, - "edit": { - "label": "Uredi" + "publish": { + "label": "Objavi v delavnico" } }, "users": { - "label": "Uporabniki", - "create": { - "label": "Ustvarite spletno stran" - }, "general": "Splošno", - "security": "Varnost", - "board": "Deske", - "groups": { - "label": "Skupine" - }, - "invites": { - "label": "Vabi" - } + "security": "Varnost" }, "tools": { "label": "Orodja", - "tasks": { - "label": "Opravila" - }, - "docker": { - "label": "Docker", - "logs": { - "label": "Dnevniki" - } - }, "kubernetes": { - "label": "Kubernetes", "nodes": { "label": "Vozlišča" }, @@ -5605,11 +7505,7 @@ "label": "Nosilci" } }, - "logs": { - "label": "" - }, "certificates": { - "label": "Potrdila", "hostnames": { "label": "Gostitelji" } @@ -5620,12 +7516,60 @@ }, "about": { "label": "O programu" + }, + "assistant": { + "label": "Pomočnik" } } }, "search": { "placeholder": "Iskanje vsebine", "nothingFound": "Ni zadetkov", + "modePicker": { + "search": { + "label": "Iskanje", + "placeholder": "Išči aplikacije, table, strani, ukaze in nastavitve" + }, + "apps": { + "label": "Aplikacije", + "placeholder": "Išči aplikacije, table in integracije" + }, + "command": { + "label": "Ukazi", + "placeholder": "Išči dejanja in ukaze" + }, + "preferences": { + "label": "Nastavitve", + "placeholder": "Išči nastavitve in jih spreminjaj" + }, + "assistant": { + "label": "Pomočnik", + "placeholder": "Vprašaj pomočnika" + }, + "external": { + "label": "Splet", + "placeholder": "Išči z zunanjim iskalnikom" + }, + "media": { + "label": "Predstavnost", + "placeholder": "Išči film ali oddajo", + "fallback": "Išči predstavnost za »{query}«" + }, + "userGroup": { + "label": "Ljudje", + "placeholder": "Išči uporabnike in skupine" + }, + "continueWith": "Nadaljuj z", + "dialogAriaLabel": "Meni ukazov za način {mode}", + "navigationLabel": "Načini iskanja", + "modeAriaLabel": "Način {mode}", + "resultsAriaLabel": "Rezultati za {mode}", + "footer": { + "navigate": "Pomikanje", + "open": "Odpri", + "close": "Zapri" + } + }, "error": { "fetch": "Pri pridobivanju podatkov je prišlo do napake" }, @@ -5634,7 +7578,6 @@ "help": "Iščite aplikacije, integracije ali table", "group": { "app": { - "title": "Aplikacije", "children": { "action": { "open": { @@ -5650,7 +7593,6 @@ } }, "board": { - "title": "Deske", "children": { "action": { "open": { @@ -5670,9 +7612,6 @@ "title": "Izberite dejanje za tablo" } } - }, - "integration": { - "title": "Integracije" } } }, @@ -5701,9 +7640,6 @@ "newBoard": { "label": "Ustvari novo tablo" }, - "importBoard": { - "label": "Uvozi tablo" - }, "newApp": { "label": "Ustvari novo aplikacijo" }, @@ -5773,7 +7709,6 @@ } }, "defaultSearchEngineId": { - "label": "Privzeti iskalnik", "children": { "detail": { "title": "Izberite privzeti iskalnik" @@ -5781,7 +7716,6 @@ } }, "openSearchInNewTab": { - "label": "Odpri rezultate iskanja v novem zavihku", "children": { "detail": { "title": "Odpri rezultate iskanja v novem zavihku" @@ -5789,7 +7723,6 @@ } }, "ddgBangs": { - "label": "Omogoči DuckDuckGo bange", "children": { "detail": { "title": "Omogoči DuckDuckGo bange" @@ -5804,6 +7737,13 @@ } } }, + "byteUnitSystem": { + "children": { + "detail": { + "title": "Izberite enote za velikost podatkov" + } + } + }, "homeBoardId": { "label": "Domača tabla", "children": { @@ -5821,7 +7761,6 @@ } }, "pingIconsEnabled": { - "label": "Uporabi ikone za ping", "children": { "detail": { "title": "Uporabi ikone za ping" @@ -5829,7 +7768,6 @@ } }, "enableRightClickOnWidgets": { - "label": "Omogoči desni klik na pripomočkih", "children": { "detail": { "title": "Omogoči desni klik na pripomočkih" @@ -5857,6 +7795,7 @@ "description": "Začnite tipkati za iskanje svojih integracij za zahteve medijev", "disabled": { "noIntegration": "Dodajte integracijo Overseerr, Jellyseerr ali Seerr za omogočanje iskanja medijev.", + "signInRequired": "Za iskanje predstavnosti se prijavite v integracije zahtevkov.", "scoped": "Ta gradnik nima dostopne integracije za zahteve medijev." } } @@ -5873,7 +7812,6 @@ "help": "Uporabi zunanji iskalnik", "group": { "searchEngine": { - "title": "Iskalniki", "tipDdgBangs": "Namig: tukaj lahko uporabite tudi kateri koli DuckDuckGo bang, npr. !something", "bang": { "searchWithQuery": "Išči »{query}« s/z {label}", @@ -5924,20 +7862,6 @@ "group": { "mode": { "title": "Načini" - }, - "help": { - "title": "Pomoč", - "option": { - "documentation": { - "label": "Dokumentacija" - }, - "submitIssue": { - "label": "Pošlji prijavo težave" - }, - "discord": { - "label": "Skupnost Discord" - } - } } } }, @@ -5949,9 +7873,10 @@ "other": { "label": "Išči z drugim iskalnikom" }, - "no-default": { - "label": "Ni privzetega iskalnika", - "description": "V nastavitvah nastavite privzeti iskalnik" + "no-engines": { + "label": "Iskalniki niso konfigurirani", + "descriptionCreate": "Dodajte iskalnik za iskanje v meniju ukazov", + "descriptionUnavailable": "Prosite skrbnika, naj konfigurira iskalnik" }, "search": { "label": "Išči »{query}« z {name}" @@ -6031,7 +7956,6 @@ "help": "Išči uporabnike ali skupine", "group": { "user": { - "title": "Uporabniki", "children": { "action": { "detail": { @@ -6044,7 +7968,6 @@ } }, "group": { - "title": "Skupine", "children": { "action": { "detail": { @@ -6068,9 +7991,6 @@ "engine": { "search": "Poišči iskalnik", "field": { - "name": { - "label": "Ime" - }, "short": { "label": "Kratko" }, @@ -6083,12 +8003,19 @@ }, "page": { "list": { - "title": "Iskalniki", + "ariaLabel": "Konfigurirani iskalniki", "noResults": { "title": "Iskalnikov še ni", - "action": "Ustvari prvi iskalnik" + "description": "Iskalniki omogočajo Spotlightu pošiljanje poizvedb na spletno mesto ali v povezano storitev.", + "action": "Ustvari prvi iskalnik", + "filteredTitle": "Noben iskalnik ne ustreza vašemu iskanju", + "filteredDescription": "Noben iskalnik ne ustreza iskanju »{search}«. Poskusite z drugim imenom ali URL-jem." }, - "interactive": "Interaktivno, uporablja integracijo" + "interactive": "Interaktivno, uporablja integracijo", + "type": { + "generic": "Predloga URL-ja", + "fromIntegration": "Integracija" + } }, "create": { "title": "Nov iskalnik", @@ -6107,11 +8034,9 @@ "title": "Uredi iskalnik", "notification": { "success": { - "title": "Spremembe so bile uspešno uveljavljene", "message": "Iskalnik je bil uspešno shranjen" }, "error": { - "title": "Sprememb ni mogoče uveljaviti", "message": "Iskalnika ni bilo mogoče shraniti" } }, @@ -6250,6 +8175,10 @@ } }, "log": { + "context": { + "widgetError": "Gradnik je približno ob tem času sporočil napako", + "expiredWidgetError": "Dnevniki o tej napaki gradnika se ne hranijo več" + }, "level": { "option": { "debug": "Razhrošč.", @@ -6261,7 +8190,6 @@ }, "onboardingTour": { "learnMore": "Preberite dokumentacijo", - "next": "Naprej", "prev": "Nazaj", "done": "Končano", "skip": "Preskoči vodnik", @@ -6325,5 +8253,359 @@ "description": "Spremenite barvno shemo, jezik, domačo tablo in nastavitve. Od tu lahko tudi skočite v upravljalno območje." } } + }, + "metadata": { + "description": "Nadzorna plošča za lastno gostovanje sklada *arr in celotnega domačega laboratorija. Vključuje več kot 50 storitev, gradnike v realnem času in ne zahteva konfiguracijskih datotek.", + "dashboardTitle": "Nadzorna plošča {appName}" + }, + "assistant": { + "title": "Pomočnik", + "open": "Odpri pomočnika", + "close": "Zapri pomočnika", + "minimize": "Skrči pomočnika", + "spotlight": "Vprašaj pomočnika", + "spotlightDescription": "Vnesite in pošljite poziv, ne da bi zapustili meni ukazov.", + "spotlightPrompt": { + "title": "Vprašaj pomočnika", + "description": "Vnesite poziv zgoraj. S tipko Enter ga pošljete v ozadju.", + "send": "Pošlji poziv", + "empty": "Vnesite poziv zgoraj" + }, + "unavailable": { + "checking": "Preverjanje razpoložljivosti pomočnika…", + "error": "Razpoložljivosti pomočnika ni bilo mogoče preveriti. Poskusite znova.", + "notConfigured": "Skrbnik mora najprej konfigurirati in omogočiti pomočnika.", + "signIn": "Za uporabo pomočnika se prijavite." + }, + "newConversation": "Nov pogovor", + "conversations": "Pogovori", + "conversationActions": "Dejanja pogovora", + "searchConversations": "Išči pogovore", + "noMatchingConversations": "Ni ustreznih pogovorov", + "moreActions": "Več dejanj odgovora", + "renameConversation": { + "action": "Preimenuj", + "label": "Ime pogovora", + "save": "Shrani ime", + "failedTitle": "Pogovora ni bilo mogoče preimenovati", + "failedDescription": "Homarr tega pogovora ni mogel preimenovati. Poskusite znova." + }, + "deleteConversation": { + "title": "Izbrišem pogovor?", + "description": "»{title}« in njegova sporočila bodo trajno izbrisana.", + "failedTitle": "Pogovora ni bilo mogoče izbrisati", + "failedDescription": "Homarr tega pogovora ni mogel izbrisati. Poskusite znova." + }, + "closeHistory": "Zapri zgodovino pogovorov", + "openHistory": "Odpri zgodovino pogovorov", + "emptyTitle": "Kako vam lahko pomagam?", + "emptyDescription": "Vprašajte o nastavitvi Homarr, preglejte podatke delujočega primerka ali odobrite dejanja, ko želite, da izvedem spremembo.", + "suggestions": { + "health": { + "label": "Preveri stanje storitev", + "prompt": "Preveri moje integracije in povzemite vse, kar zahteva pozornost." + }, + "explore": { + "label": "Razišči moj Homarr", + "prompt": "Pokaži mi, kaj si lahko ogledam in upravljam v tem primerku Homarr." + }, + "media": { + "label": "Poišči predstavnost za zahtevek", + "prompt": "Pomagaj mi najti film ali serijo za zahtevek." + }, + "style": { + "label": "Izboljšaj nadzorno ploščo", + "prompt": "Pomagaj mi izboljšati videz table ali CSS po meri. Najprej mi pokaži moje table, nato pa med spremembo ohrani moje trenutne nastavitve." + }, + "designWidget": { + "label": "Oblikuj gradnik", + "prompt": "Ustvari in namesti gradnik po meri za " + } + }, + "composerPlaceholder": "Vprašaj pomočnika…", + "runtime": { + "model": "Model", + "searchModels": "Išči modele", + "noModels": "Modeli niso na voljo", + "otherModels": "Drugi modeli", + "imageInput": "Sprejema slikovni vnos", + "thinking": "Način razmišljanja", + "reasoning": { + "auto": "Samodejno", + "none": "Izklopljeno", + "minimal": "Minimalno", + "low": "Nizko", + "medium": "Srednja", + "high": "Visoko" + } + }, + "providerQuota": { + "title": "Ponudnik Homarr", + "communityWorkshop": "Delavnica skupnosti", + "dailyAllowance": "Dnevna kvota zahtev", + "remainingLabel": "Preostalih zahtev ponudnika Homarr: {remaining} od {limit}", + "loading": "Nalaganje kvote ponudnika Homarr", + "signInRequired": "Za ponudnika Homarr je potrebna prijava v delavnico", + "signInDescription": "Prijavite se z GitHubom prek delavnice skupnosti, da prejmete ločeno dnevno kvoto.", + "exhaustedDescription": "Vaša kvota ponudnika Homarr je za danes porabljena. Ponastavi se ob polnoči UTC.", + "unavailableDescription": "Prijavite se v delavnico ali počakajte, da se vaša kvota ponudnika Homarr ponastavi.", + "signIn": "Prijava z GitHubom", + "signInError": "Prijava z GitHubom ni uspela. Čez trenutek poskusite znova.", + "loadError": "Kvota ponudnika Homarr ni bila naložena.", + "reset": "Ponastavi se {relative} ob ", + "toolCalls": "Vsaka zahteva modela in vsak dokončan klic orodja porabi eno zahtevo.", + "retry": "Znova naloži kvoto", + "level": { + "ok": "V redu", + "warning": "Opozorilo", + "bad": "Nizko", + "dead": "Porabljeno" + } + }, + "stop": "Ustavi odgovor", + "send": "Pošlji sporočilo", + "copy": "Kopiraj odgovor", + "copyMessage": "Kopiraj sporočilo", + "editMessage": "Uredi sporočilo", + "updateMessage": "Posodobi sporočilo", + "regenerate": "Znova ustvari odgovor", + "helpful": "Koristno", + "notHelpful": "Ni koristno", + "readAloud": "Preberi odgovor na glas", + "stopReading": "Ustavi branje odgovora", + "feedbackError": "Vaših povratnih informacij ni bilo mogoče shraniti. Poskusite znova.", + "exportMarkdown": "Izvozi kot Markdown", + "exportConversation": { + "action": "Izvozi pogovor kot Markdown", + "failedTitle": "Pogovora ni bilo mogoče izvoziti", + "failedDescription": "Homarr tega pogovora ni mogel naložiti. Poskusite znova." + }, + "reasoning": "Razmišljanje", + "previousResponse": "Prejšnji odgovor", + "nextResponse": "Naslednji odgovor", + "removeAttachment": "Odstrani priponko", + "downloadFile": "Prenesi {name}", + "attachedImage": "Priložena slika", + "externalImageBlocked": "Zunanja slika je zaradi zasebnosti blokirana", + "image": { + "loading": "Nalaganje slike", + "failed": "Te slike ni bilo mogoče naložiti.", + "retry": "Poskusi znova naložiti sliko" + }, + "quoteSelection": "Citat", + "dismissQuote": "Odstrani citat", + "attachments": { + "add": "Priložite sliko ali dokument", + "errorTitle": "Priponke ni bilo mogoče dodati", + "imageUnsupported": "Izbrani model ne podpira slikovnega vnosa." + }, + "mentions": { + "menu": "Dodaj kontekst Homarr", + "context": "Kontekst", + "app": "Aplikacije", + "integration": "Integracije", + "board": "Deske", + "widget": "Gradniki", + "tools": "Razpoložljiva orodja" + }, + "markdown": { + "diagram": "Diagram", + "renderingDiagram": "Izrisovanje diagrama…", + "diagramUnavailable": "Tega diagrama ni bilo mogoče izrisati." + }, + "commands": { + "menu": "Ukazi pomočnika", + "health": "Pripravi preverjanje stanja storitev", + "explore": "Pripravi pregled tega primerka Homarr", + "media": "Pripravi iskanje predstavnosti", + "style": "Pripravi spremembo videza table ali CSS-ja po meri", + "designWidget": "Pripravi izdelavo gradnika po meri z enim pozivom" + }, + "usage": { + "tokens": "žetoni", + "contextWindow": "Kontekstno okno", + "requestDetails": "Podrobnosti zahteve", + "used": "Najnovejši korak", + "remaining": "Preostalo", + "capacity": "Zmogljivost", + "input": "Vnos", + "output": "Izhod", + "cached": "Predpomnjeni vnos", + "cacheWrite": "Zapis v predpomnilnik", + "reasoning": "Razmišljanje", + "inputShort": "vhod", + "outputShort": "izhod", + "cachedShort": "predpomnjeno", + "reasoningShort": "razmišljanje", + "firstOutput": "Prvi izhod", + "homarrTiming": "Zabeležil Homarr", + "endToEnd": "Od začetka do konca", + "observedThroughput": "Zabeležena prepustnost", + "providerTiming": "Poročal ponudnik", + "loadingProviderDetails": "Nalaganje podrobnosti ustvarjanja…", + "providerDetailsPending": "OpenRouter še vedno obdeluje nekatere podrobnosti ustvarjanja. Znova odprite za ponovni poskus.", + "providerLatency": "Zakasnitev ponudnika", + "generationTime": "Čas ustvarjanja", + "moderationLatency": "Moderiranje", + "providerThroughput": "Prepustnost ponudnika", + "fallbacks": "Rezervne možnosti", + "fallbackLatency": "Zakasnitev rezervne možnosti", + "cacheDiscount": "Popust predpomnilnika", + "normalizedTokens": "Normalizirani vhodni/izhodni žetoni OpenRouterja", + "byok": "BYOK", + "cost": "Cena", + "reported": "Poročal ponudnik", + "estimated": "Ocenjeno na podlagi cen modela", + "upstreamCost": "Sklepanje na nadrejeni storitvi", + "webSearches": "Spletna iskanja", + "finishReason": "Razlog zaključka", + "notReported": "Ni poročano", + "agentSteps": "Koraki agenta", + "step": "Korak {number}", + "generation": "Generiranje" + }, + "toolInput": "Vnos", + "toolOutput": "Izhod", + "toolActivity": { + "iconSearch": "Iskanje ikon za »{query}«", + "iconBrowse": "Brskanje po ikonah, ki so na voljo" + }, + "toolNavigation": { + "openPreview": "Odpri predogled", + "openWidget": "Odpri gradnik" + }, + "webSearch": { + "title": "Spletno iskanje", + "completed": "OpenRouter je za ta odgovor preiskal splet v živo.", + "searches": "{count, plural, one {# iskanje} two {# iskanji} few {# iskanja} other {# iskanj}}", + "sources": "{count, plural, one {# vir} two {# vira} few {# viri} other {# virov}}" + }, + "responseError": { + "title": "Pomočnik ni mogel dokončati opravila", + "description": "Poskusite znova. Če se težava nadaljuje, prosite skrbnika, naj preveri konfigurirano končno točko modela." + }, + "toolPreparationError": { + "title": "Te zahteve ni bilo mogoče pripraviti", + "description": "Model se je ustavil, preden je posredoval popolne podrobnosti. Poskusite odgovor znova ali znova opišite zahtevo. Spremembe niso bile izvedene." + }, + "busy": { + "title": "Pomočnik že dela", + "description": "Počakajte na trenutni odgovor ali ga odprite, da ustavite izvajanje." + }, + "pendingAction": { + "answerTitle": "Potreben je odgovor", + "answerFallback": "Za nadaljevanje izberite odgovor", + "formTitle": "Pregled podrobnosti aplikacije", + "boardFormTitle": "Pregled sprememb nadzorne plošče", + "review": "Preglej", + "sendBlocked": "Pred pošiljanjem razrešite čakajočo zahtevo" + }, + "activity": { + "thinking": "Pomočnik razmišlja", + "working": "Obdelava vašega poziva", + "ready": "Odgovor je pripravljen", + "completed": "Odpri odgovor", + "approval": "Potrebna je odobritev", + "failed": "Pomočnik potrebuje vašo pozornost", + "expand": "Odpri odgovor pomočnika", + "dismiss": "Opusti dejavnost pomočnika" + }, + "scrollToLatest": "Pomakni se na najnovejše", + "refresh": { + "action": "Osveži trenutni pogled", + "working": "Osveževanje trenutnega pogleda", + "completeTitle": "Pogled je osvežen", + "completeDescription": "Vidni podatki Homarr so bili znova naloženi.", + "failedTitle": "Pogleda ni bilo mogoče osvežiti", + "failedDescription": "Sprememba je morda še vedno shranjena. Znova poskusite osvežiti pogled." + }, + "askUser": { + "preparing": "Priprava vprašanja", + "answered": "Vaš odgovor", + "other": "Drugo", + "otherLabel": "Vaš odgovor", + "otherPlaceholder": "Vnesite drug odgovor…", + "submit": "Pošlji odgovor", + "cancelOther": "Prekliči drug odgovor", + "optionKind": { + "affirmative": "Potrdi", + "negative": "Zavrni", + "alternative": "Možnost", + "custom": "Po meri" + } + }, + "configureApp": { + "title": "Pregled podrobnosti aplikacije", + "description": "Izberite lokalno ikono in po potrebi prilagodite podrobnosti, preden pomočnik zahteva odobritev za ustvarjanje.", + "preparing": "Priprava podrobnosti aplikacije", + "continue": "Uporabi te podrobnosti", + "ready": "Podrobnosti aplikacije so pripravljene", + "automaticContinue": "Samodejna uporaba teh podrobnosti aplikacije" + }, + "configureBoardSettings": { + "title": "Pregled sprememb nadzorne plošče", + "loading": "Nalaganje trenutnih nastavitev nadzorne plošče", + "loadErrorTitle": "Nastavitev nadzorne plošče ni bilo mogoče naložiti", + "loadErrorDescription": "Nadzorna plošča morda ne obstaja več ali pa nimate dovoljenja za njeno spreminjanje.", + "proposedCount": "Pomočnik je predlagal {count} polj", + "changeCount": "Pripravljenih je {count} sprememb", + "ready": "Spremembe nadzorne plošče so pripravljene", + "cancelled": "Trenutne nastavitve nadzorne plošče so ohranjene", + "noChanges": "Nobena nastavitev se ne bo spremenila", + "keepCurrent": "Ohrani trenutne nastavitve", + "continue": "Nadaljuj na odobritev", + "automaticContinue": "Samodejno sprejemanje predlaganih sprememb nadzorne plošče", + "resetAll": "Ponastavi vse spremembe", + "tabs": { + "css": "CSS po meri", + "appearance": "Videz", + "background": "Ozadje", + "general": "Splošno" + }, + "cssDescription": "Uredite celoten slogovni list. Obstoječa pravila se ohranijo, razen če jih odstranite tukaj.", + "cssCharacters": "{count} od 16384 znakov", + "copyCss": "Kopiraj CSS", + "copied": "Kopirano", + "restoreCss": "Obnovi trenutni CSS", + "remoteCssTitle": "Ta CSS nalaga oddaljeni vir", + "remoteCssDescription": "Uvoženi slogovni listi in oddaljeni URL-ji vzpostavijo stik z drugim strežnikom, ko se nadzorna plošča naloži. Pred nadaljevanjem jih preglejte." + }, + "configureWidget": { + "title": "Pregled gradnika", + "preparing": "Priprava nastavitev gradnika", + "review": "Pregled gradnika in integracij", + "ready": "Konfiguracija gradnika je pripravljena", + "cancelled": "Gradnik ni bil dodan", + "automaticContinue": "Samodejno sprejemanje predlagane konfiguracije gradnika", + "definitionLoadErrorTitle": "Nastavitev gradnika ni bilo mogoče naložiti", + "definitionLoadErrorDescription": "Homarr ni mogel naložiti nastavitev tega gradnika. Poskusite znova.", + "loadErrorTitle": "Integracij ni bilo mogoče naložiti", + "loadErrorDescription": "Homarr ni mogel naložiti integracij, ki so na voljo za ta gradnik.", + "noIntegrationTitle": "Potrebna je združljiva integracija", + "noIntegrationDescription": "Preden gradnik dodate na nadzorno ploščo, konfigurirajte integracijo, ki jo gradnik podpira.", + "connectIntegration": "Poveži storitev", + "manageIntegrations": "Upravljaj integracije", + "skip": "Ne dodaj", + "errorTitle": "Nastavitev gradnika ni bilo mogoče pripraviti", + "errorDescription": "Model ni posredoval popolne konfiguracije gradnika. Gradnik ni bil dodan." + }, + "approvalRequired": "Potrebna je odobritev", + "complete": "Zaključeno", + "denied": "Zavrnjeno", + "failed": "Spodletelo", + "working": "V teku", + "approvalDescription": "Pred izvajanjem preglejte to spremembo.", + "approveAndRun": "Odobri in zaženi", + "deny": "Zavrni", + "autoApproval": { + "label": "Samodejne odobritve", + "composerLabel": "Odobri namesto mene", + "title": "Samodejne odobritve", + "description": "Samodejno pripravi obrazce in odobri zaščitene spremembe za ta pogovor. Vprašanja bodo še vedno čakala na vaš odgovor, upoštevana pa bodo tudi vaša dovoljenja v Homarru. Ta možnost se izklopi, ko preklopite na drug pogovor.", + "enable": "Omogoči za ta pogovor", + "disable": "Izklopi samodejne odobritve", + "enabled": "Samodejne odobritve so vklopljene", + "approving": "Samodejno odobravanje" + } } } diff --git a/packages/translation/src/lang/sv.json b/packages/translation/src/lang/sv.json index e83a6a3c6..01451d339 100644 --- a/packages/translation/src/lang/sv.json +++ b/packages/translation/src/lang/sv.json @@ -1,156 +1,246 @@ { "init": { - "step": { - "start": { - "title": "Välkommen till Homarr", - "subtitle": "Låt oss komma igång med att sätta upp din installation av Homarr.", - "description": "För att komma igång, välj hur du vill ställa in din Homarr-installation.", - "action": { - "scratch": "Börja från början", - "importOldmarr": "Importera från Homarr äldre än version 1.0", - "restoreSqlite": "Återställ från SQLite-säkerhetskopia", - "restoreSqliteDescription": "Ladda upp en fullständig SQLite-databassäkerhetskopia från en tidigare Homarr-instans. Detta återställer alla tavlor, användare, appar, integrationer och inställningar.", - "backToOptions": "← Tillbaka till installationsalternativ" + "studio": { + "navigationLabel": "Onboarding sektioner", + "back": "Tillbaka", + "buildBoard": "Bygg min tavla", + "common": { + "unknownError": "Något gick fel. Dina val är fortfarande här; försök igen." + }, + "claim": { + "checking": "Säkrar denna registreringssession…", + "checkingTitle": "Förbereder säker installation", + "lockedTitle": "Installationen är öppen i en annan webbläsare", + "lockedDescription": "Fortsätt där, eller vänta på dess säkra första kör-session att löpa ut innan du försöker igen.", + "signInTitle": "Inloggning av administratör krävs", + "signInDescription": "En administratör finns redan. Logga in för att återuppta installationen utan att avslöja användaruppgifter eller tjänståtkomst.", + "signIn": "Logga in och fortsätt", + "errorTitle": "Installationen kunde inte säkras", + "errorDescription": "Ladda om sidan för att försöka igen den säkra första-run-sessionen." + }, + "navigation": { + "essentials": "Grundläggande", + "discover": "Upptäck", + "connect": "Anslut", + "board": "Bräde", + "extend": "Förläng", + "review": "Granska" + }, + "welcome": { + "title": "Välkommen hem.", + "description": "Välkommen till Homarr v{version}. Vi guidar dig genom det viktigaste och hjälper dig att bygga din första styrelse.", + "start": "Kom igång", + "restore": "Återställ säkerhetskopia", + "restoreTitle": "Återställ från backup", + "restoreDescription": "En fullständig SQLite-säkerhetskopiering återställer tavlor, människor, appar, integrationer och inställningar. Homarr validerar det innan du ersätter något.", + "errorTitle": "Installationen kunde inte starta", + "errorDescription": "Dina inställningsval är fortfarande här. Försök igen eller ladda om sidan om detta fortsätter." + }, + "account": { + "title": "Skapa din administratör", + "description": "Ange inloggningsuppgifter för administratören.", + "username": "Administratörens användarnamn", + "passwordHint": "Endast minst 8 tecken. De andra lösenordskontrollerna är förslag.", + "create": "Skapa administratör", + "errorTitle": "Administratören kunde inte skapas", + "recoveryTitle": "Administratörskonto skapat", + "recoveryDescription": "Automatisk inloggning slutfördes inte. Logga in med administratörsuppgifter som du just har skapat för att fortsätta installationen.", + "recoveryAction": "Logga in och fortsätt", + "unknownError": "Administratören kunde inte skapas." + }, + "externalGroup": { + "title": "Anslut din administratörsgrupp", + "description": "Använd det exakta gruppnamnet som skickats av LDAP eller OIDC. Medlemmar i denna grupp får administratörsåtkomst.", + "name": "Extern administratörsgrupp", + "nameDescription": "Detta är skiftlägeskänsligt och måste matcha din identitetsleverantör.", + "continue": "Spara grupp och fortsätt", + "errorTitle": "Gruppen kunde inte sparas", + "unknownError": "Administratörsgruppen kunde inte sparas." + }, + "essentials": { + "title": "Börja med bekanta standardinställningar", + "description": "Ställ in språket och utseendet alla ser först, sedan ge Homarr adressmönstret som används av dina tjänster.", + "language": "Standard språk", + "theme": "Förvalt tema", + "themeAuto": "System", + "themeLight": "Ljus", + "themeDark": "Mörk", + "serverOriginHelp": "Homarr använder denna adress för att förfylla upptäckta tjänst-URL:er. Du kan fortfarande redigera varje tjänst individuellt.", + "serverDescription": "Detta är en genväg, inte en begränsning. Varje upptäckt tjänst förblir redigerbar.", + "serverOrigin": "Sökväg för domän, IP eller reverse-proxy", + "serverOriginDescription": "Exempel: home.lan, 192.168.1.10 eller https://home.example.com/services. Välj hur varje tjänst läggs till nedan.", + "analytics": "Dela anonym produktanalys", + "analyticsDescription": "Hjälper Homarr att förbättra funktionens tillförlitlighet. Inga tjänstuppgifter eller innehåll på instrumentpanelen skickas." + }, + "discover": { + "title": "Se vad denna installation faktiskt kan nå", + "description": "Homarr kontroller funktioner på plats. En saknad Docker uttag eller Kubernetes sammanhang aldrig blockerar en manuell inställning.", + "database": "Databas", + "docker": "Docker och kompatibla uttag", + "kubernetes": "Kubernetes", + "assistantWorkshop": "Assistent och verkstad", + "found": "Hittade {integrations} integrationer och {apps} ytterligare appar", + "retryKubernetes": "Kontrollera Kubernetes igen", + "retryWorkshop": "Kontrollera verkstaden igen", + "unknownVersion": "okänd version", + "kubernetesAvailable": "Ansluten till Kubernetes {version}", + "kubernetesDisabled": "Inte aktiverad; fortsätta med Docker eller manuella tjänster", + "kubernetesUnavailable": "Kubernetes är aktiverat men kan inte nås från denna Homarr process", + "workshopAvailable": "Community Workshop och värd assistent tjänster kan nås", + "workshopUnavailable": "Lokala och anpassade assistentleverantörer är fortfarande tillgängliga", + "partialTitle": "Vissa källor kunde inte skannas", + "partialDescription": "Resultat från nåbara värdar behålls. Kontrollera uttag behörigheter eller lägg till tjänster manuellt i nästa avsnitt.", + "status": { + "checking": "Kontrollerar tillgänglighet…", + "available": "Tillgänglig", + "partial": "Delvis tillgänglig", + "empty": "Nåväl, inga matchande körningstjänster", + "disabled": "Inaktiverad av serverkonfiguration", + "unavailable": "Ej tillgänglig från denna Homarr process" } }, - "import": { - "title": "Importera data", - "subtitle": "Du kan importera data från en befintlig installation av Homarr.", - "dropzone": { - "title": "Dra ZIP-filen hit eller klicka för att bläddra", - "description": "Den uppladdade ZIP-filen kommer att bearbetas och du kommer att kunna välja vad du vill importera" + "connect": { + "title": "Koppla ihop det som gör tavlan användbar", + "description": "Välj flera tjänster samtidigt. Dockeretiketter prioriteras, bildmatchning fyller luckor och varje URL och referens förblir granskbart.", + "discoveredIntegrations": "Upptäckta integrationsinstanser ({count})", + "detectedIntegrationLabel": "Importera {name}, upptäckt som {kind}", + "detectedAppLabel": "Importera upptäckt app {name}", + "otherIntegrations": "Lägg till en annan integration", + "configureIntegrations": "Konfigurera integrationer", + "discoveredApps": "Upptäckta appar ({count})", + "appAddressRequired": "Lägg till en adress för {name}eller ta bort den från urvalet.", + "empty": "Inga integrationer valda. Homarr kommer fortfarande att skapa ett användbart startkort med allmänna widgetar.", + "dockerSource": "Docker", + "manualSource": "Manuell", + "url": "Tjänstens URL", + "noCredentials": "Inga inloggningsuppgifter", + "noCredentialsDescription": "Denna integration behöver inga referenser.", + "credentialMethod": "Credential metod", + "getApiKey": "Öppna API-nyckelinställningarna för denna tjänst", + "openGuide": "Öppna Homarr's installationsguide för denna tjänst", + "testConnection": "Testa anslutning", + "testSuccess": "Anslutning fungerar", + "testSuccessDescription": "Homarr ansluten med nuvarande adress och referenser.", + "testError": "Anslutningen misslyckades", + "testErrorDescription": "Kontrollera serviceadressen och användaruppgifterna och försök sedan igen.", + "needsConfiguration": "Kräver konfiguration", + "tested": "Anslutning testad", + "testFailed": "Anslutningstest misslyckades", + "incompleteConfirmation": "Oavslutade integrationer kommer att hoppas över. Fortsätt utan dem?" + }, + "board": { + "title": "Forma brädet innan det är byggt", + "description": "Homarr skapar skyddade Mobile och Base layouter, sedan placerar appar och kompatibla widgets från de tjänster du valt.", + "target": "Tavla att konfigurera", + "targetDescription": "Välj det exakta befintliga forumet som den här installationen ska uppdatera.", + "targetPlaceholder": "Välj en tavla", + "targetRequired": "Välj tavla att konfigurera innan du fortsätter.", + "name": "Forumets namn", + "nameDescription": "Används i forumets URL; bokstäver, siffror, bindestreck och understreck bara.", + "nameRequired": "Ange ett forumnamn innan du fortsätter.", + "primaryColor": "Primärfärg", + "secondaryColor": "Sekundärfärg", + "resetColors": "Återställ färger", + "radius": "Widget hörnradie", + "radiusOptions": { + "xs": "Snäll", + "sm": "Subtila", + "md": "Balanserad", + "lg": "Avrundad", + "xl": "Mjuk" }, - "fileInfo": { - "action": { - "change": "Byt fil" - } + "columns": "Kolumner för tavlor", + "columnsDescription": "Kolumner definierar det horisontella nätet som används för storlek och position objekt. 12 är gott för de flesta.", + "columnCount": "{count, plural, one {# kolumn} other {# kolumner}}", + "leftSidebar": "Left sidebar", + "rightSidebar": "Höger sidofält", + "previewLabel": "Live förhandsgranskning av den första tavellayouten" + }, + "extend": { + "title": "Avancerade funktioner", + "tabsLabel": "Assistent, Workshop och MCP installation", + "assistant": "Assistent", + "workshop": "Verkstad", + "assistantSetup": { + "loginTitle": "Inloggning av administratör krävs", + "loginDescription": "Leverantörsnycklar och modellåtkomst är privilegierade. Slutför konfigurationen, logga in och Homarr kommer att öppna Assistentkonfigurationen direkt.", + "loginAction": "Logga in för att konfigurera assistent" }, - "importSettings": { - "title": "Importera inställningar", - "description": "Konfigurera hur importen skall genomföras" + "workshopSetup": { + "title": "Homarr Verkstad", + "description": "Bläddra bland användaranpassade widgets, inspektera deras begärda funktioner, installera dem och publicera ditt eget arbete utan att kopiera koden mellan servrarna.", + "available": "Tillgänglig", + "checking": "Kontrollerar…", + "unavailable": "Unavailable", + "discoverTitle": "Upptäck", + "discoverDescription": "Hitta widgetar byggda för riktiga arbetsflöden.", + "installTitle": "Granska och installera", + "installDescription": "Se metadata och konfiguration innan du lägger till något.", + "publishTitle": "Dela", + "publishDescription": "Publicera återanvändbara widgetar tillbaka till gemenskapen.", + "browse": "Bläddra i verkstad" }, - "boardSelection": { - "title": "Hittade {count} tavlor", - "description": "Välj alla tavlor med den storlek du vill importera", - "action": { - "selectAll": "Välj alla", - "unselectAll": "Avmarkera alla" - } - }, - "summary": { - "title": "Summering av importen", - "description": "I sammanfattningen nedan kan du se vad som kommer att importeras", - "action": { - "import": "Bekräfta importen och fortsätt" - }, - "entities": { - "apps": "Applikationer", - "boards": "Tavlor", - "integrations": "Integrationer", - "credentialUsers": "Användaruppgifter" - } - }, - "tokenModal": { - "title": "Ange 'Token' för importen", - "field": { - "token": { - "label": "Token", - "description": "Ange 'import-token' från din tidigare installation av Homarr" - } - }, - "notification": { - "error": { - "title": "Felaktig 'Token'", - "message": "Den 'Token' som du angivit är felaktig" - } - } + "mcpSetup": { + "title": "Homarr MCP", + "description": "Anslut Claude, Codex eller en annan MCP-klient till Homarars skrivna verktyg. API-nycklar håller åtkomst explicit och avbrytbart.", + "endpoint": "Effektiviserbar HTTP-slutpunkt", + "keyTitle": "Kopiera denna nyckel nu", + "keyDescription": "För säkerhets skull kan Homarr inte visa denna API-nyckel igen.", + "copyKey": "Kopiera API-nyckel", + "createKey": "Skapa en MCP API-nyckel", + "errorTitle": "MCP API-nyckel kunde inte skapas", + "loginRequired": "Logga in som administratör efter installation för att skapa en API-nyckel.", + "configuration": "Klient konfiguration", + "copy": "Kopiera konfiguration", + "copied": "Kopierad", + "advanced": "Öppna MCP-verktyg, behörigheter och installationsdetaljer" } }, - "user": { - "title": "Administratör", - "subtitle": "Ange inloggningsuppgifter för administratören.", - "notification": { - "success": { - "title": "Användare har adderats", - "message": "Användaren adderades" - }, - "error": { - "title": "Misslyckades med att addera användaren" - } - } - }, - "group": { - "title": "Extern grupp", - "subtitle": "Ange vilken grupp som skall användas för externa användare.", - "form": { - "name": { - "label": "Gruppens namn", - "description": "Namnet måste matcha admin-grupp i extern tjänst" - } - } - }, - "settings": { - "title": "Inställningar", - "subtitle": "Konfigurera serverinställningar." - }, - "integrations": { - "title": "Integrationer", - "subtitle": "Välj de tjänster du använder.", - "description": "Välj de integrationer du vill ansluta. Vi konfigurerar automatiskt instrumentpanelen med matchande widgetar.", - "action": { - "continue": "Fortsätt", - "skip": "Hoppa över för nu" - }, - "configure": { - "progress": "{current} av {total}", - "skip": "Hoppa över denna integration", - "finishing": "Konfigurerar instrumentpanelen...", - "error": { - "title": "Konfigurationen misslyckades", - "message": "Något gick fel vid konfigurationen av instrumentpanelen. Försök igen." - }, - "helpers": { - "tooltip": "URL-hjälpare", - "description": "Dessa hjälpare gissar URL: en för dina tjänster. Om det inte fungerar, ange adressen manuellt." - } - }, - "urlTemplate": { - "label": "Bas-URL", - "placeholder": "homelab.local eller 192.168.1.1", - "hint": "Ange din basdomän eller IP för att automatiskt fylla i integrations-URL: er", - "warning": "Om du anger din bas-URL nu fylls alla integrations-URL: er i automatiskt, vilket sparar tid under installationen", - "preview": "t.ex. {example}", - "mode": { - "subdomain": "Subdomän", - "hostPort": "Värd:Port" - } - }, - "docker": { - "detected": "Docker upptäckte {count} tjänster", - "detectedBreakdown": "{integrations} integrationer · {apps} appar", - "summary": "Homarr upptäckte {apps} appar, varav {integrations} har inbyggda integrationer", - "appBadge": "Applikation", - "appSectionLabel": "Appar att lägga till på instrumentpanelen ({count} valda)", - "scanning": "Söker igenom Docker...", - "scanningDescription": "Letar efter körande behållare på ditt system" + "review": { + "title": "En styrelse, byggd kring dina tjänster", + "description": "Homarr testar osparade anslutningar, importerar de valda apparna, tillämpar utseende och layouter, sedan öppnar den exakta styrelsen den konfigurerade.", + "board": "Första tavlan", + "columns": "Kolumner för tavlor", + "columnsValue": "{count, plural, one {# kolumn} other {# kolumner}}", + "sidebars": "Sidofält", + "sidebarsValue": "{count, plural, =0 {None} one {# sidebar} other {# sidebars}}", + "layouts": "Responsiv layout", + "layoutsValue": "Mobil + bas", + "integrations": "Integrationer", + "integrationsValue": "{count, plural, =0 {Ingen vald} one {# integration} other {# integrationer}}", + "apps": "Appens rutor", + "appsValue": "{count, plural, =0 {Endast startappar} one {# appbricka} other {# appbrickor}}", + "language": "Språk", + "theme": "Tema", + "themeAuto": "Systeminställningar", + "themeLight": "Ljus", + "themeDark": "Mörk", + "colors": "Brädans färger", + "radius": "Widget radie", + "automaticTitle": "Vad Homarr kommer att skapa", + "automaticDescription": "Kompatibla widgets, ikoner, applänkar, integrationsrelationer och responsiv placering kommer från den delade Homarr katalogen. Du kan redigera varje resultat senare.", + "dockerWarningTitle": "Vissa Docker-etiketter har ändrats under installationen", + "dockerWarningDescription": "{count, plural, one {# valda Docker resultat kunde inte tillämpas eftersom dess tjänst ändrades, riktade en annan tavla, eller dess widget var inkompatibel} other {# valda Docker resultat kunde inte tillämpas eftersom tjänster ändras, riktade en annan tavla, eller deras widgets var inkompatibla}}.", + "errorTitle": "Tavlan kunde inte byggas", + "progress": { + "applying": "Testa anslutningar och bygg ditt kort", + "done": "Din tavla är redo" } }, "finish": { - "title": "Slutför installationen", - "subtitle": "Du är redo att sätta igång!", - "description": "Du har slutfört installationen. Du kan nu börja använda Homarr. Välj din nästa åtgärd:", - "action": { - "goToBoard": "Gå till tavlan {name}", - "createBoard": "Addera din första tavla", - "inviteUser": "Bjud in andra användare", - "docs": "Läs dokumentationen" - } + "title": "Din första tavla är klar.", + "description": "Homarr kopplade bitarna du valt och höll resten redigerbar. Öppna tavlan nu; den korta in-product tour kan visa dig redigeringsläge, widgets, layouter och sökning.", + "openBoard": "Öppna min tavla", + "manageTitle": "Hantera", + "manageDescription": "Finjustera appar, integrationer, tavlor, användare och serverinställningar.", + "workshopTitle": "Verkstad", + "workshopDescription": "Upptäck och installera gemenskapen Anpassade widgets.", + "docsTitle": "Lär dig Homarr", + "docsDescription": "Läs de fokuserade guiderna för brädor, widgets, integrationer och verktyg." } - }, - "backToStart": "Tillbaka till början" + } }, "user": { - "title": "Användare", "name": "Användare", "page": { "login": { @@ -159,12 +249,10 @@ }, "invite": { "title": "Gå med i Homarr", + "titleWithAppName": "Gå med i {appName}", "subtitle": "Välkommen till Homarr! Vänligen addera ditt konto", + "subtitleWithAppName": "Välkommen till {appName}! Skapa ditt konto", "description": "Du har blivit inbjuden av {username}" - }, - "init": { - "title": "Ny installation av Homarr", - "subtitle": "Vänligen addera den första administratören" } }, "field": { @@ -192,12 +280,17 @@ "previousPassword": { "label": "Föregående lösenord" }, - "homeBoard": { - "label": "Starttavla" - }, "pingIconsEnabled": { "label": "Använd ikoner för \"onlinekontroll\" (pings)" }, + "byteUnitSystem": { + "label": "Enheter för datastorlek", + "description": "Välj hur Homarr visar byte-storlekar och byte-hastigheter. Bit-priser använder alltid decimaler.", + "options": { + "binary": "Binär", + "decimal": "Decimal" + } + }, "enableRightClickOnWidgets": { "label": "Aktivera högerklick på widgetar", "description": "Visa Homarrs snabbmeny när du högerklickar på en widget. Inaktivera för att använda webbläsarens standardmeny (t.ex. \"Öppna länk i ny flik\")." @@ -247,7 +340,6 @@ } } }, - "create": "Addera användare", "changePassword": { "label": "Ändra lösenordet", "notification": { @@ -259,56 +351,6 @@ } } }, - "changeHomeBoard": { - "notification": { - "success": { - "message": "Startsidan har uppdaterats" - }, - "error": { - "message": "Misslyckades med att ändra startsidan" - } - } - }, - "changeSearchPreferences": { - "notification": { - "success": { - "message": "Inställningar för sökning har sparats" - }, - "error": { - "message": "Det gick inte att spara inställningar för sökning" - } - } - }, - "changeFirstDayOfWeek": { - "notification": { - "success": { - "message": "Inställning av veckans första dag har sparats" - }, - "error": { - "message": "Det gick inte att spara veckans första dag" - } - } - }, - "changePingIconsEnabled": { - "notification": { - "success": { - "message": "Inställning av ikon för onlinekontroll har sparats" - }, - "error": { - "message": "Inställning av onlinekontroll kunde inte sparas" - } - } - }, - "changeDdgBangs": { - "notification": { - "success": { - "message": "DuckDuckGo bangs inställningen ändrad" - }, - "error": { - "message": "DuckDuckGo bangs inställningen kunde inte ändras" - } - } - }, "manageAvatar": { "changeImage": { "label": "Byt bild", @@ -338,16 +380,6 @@ } } }, - "editProfile": { - "notification": { - "success": { - "message": "Profilen har uppdaterats" - }, - "error": { - "message": "Det gick inte att uppdatera profilen" - } - } - }, "delete": { "label": "Ta bort användare permanent", "description": "Att radera användaren inkluderar användarens inställningar. Inga tavlor kommer att raderas. Användaren kommer inte att underrättas.", @@ -356,18 +388,13 @@ "select": { "label": "Välj användare", "notFound": "Ingen användare hittad" - }, - "transfer": { - "label": "Välj ny ägare" } } }, "group": { - "title": "Grupper", "name": "Grupp", "search": "Hitta en grupp", "field": { - "name": "Namn", "members": "Medlemmar", "homeBoard": { "label": "Starttavla", @@ -388,6 +415,19 @@ } } }, + "custom-widget": { + "title": "Anpassade widgetar", + "item": { + "manage": { + "label": "Hantera anpassade widgetar", + "description": "Tillåt medlemmar att skapa, redigera och ta bort anpassade widgetdefinitioner" + }, + "secret-write": { + "label": "Konfigurera anpassade widgethemligheter", + "description": "Tillåt medlemmar och deras API-nycklar att ställa in krypterade anpassade widget-uppgifter" + } + } + }, "app": { "title": "Applikationer", "item": { @@ -493,6 +533,35 @@ "description": "Tillåt att medlemmar hanterar och raderar alla sökmotorer" } } + }, + "matrix": { + "none": "Ingen åtkomst", + "impliedHint": "Bidrag: {permissions}", + "grantedViaAdmin": "Administratörer har redan detta. Sätt Admin till “No access” för att konfigurera det separat.", + "preset": { + "label": "Förval", + "viewer": "Läsare", + "viewerDescription": "Skrivskydd: visa tavlor och medier, använda appar och integrationer som redan finns.", + "editor": "Redigerare", + "editorDescription": "Daglig hantering: skapa och redigera tavlor, appar, integrationer och sökmotorer.", + "admin": "Administratör", + "adminDescription": "Obegränsad åtkomst till alla funktioner och inställningar, inklusive användarhantering.", + "custom": "Anpassad" + }, + "effective": { + "title": "Effektiva behörigheter", + "description": "Den fullständiga, deduplicerade uppsättning åtgärder som medlemmar i denna grupp kan utföra, inklusive tillstånd som beviljats indirekt.", + "empty": "Inga behörigheter valda" + }, + "noneDescription": "Medlemmar får ingen tillgång till detta område.", + "level": { + "view": "Visa", + "use": "Använd", + "interact": "Interagera", + "modify": "Ändra", + "full": "Fullt" + }, + "capabilityIncluded": "Redan inkluderad i ”{level}”" } }, "memberNotice": { @@ -607,21 +676,24 @@ "search": "Sök efter en applikation", "page": { "list": { - "title": "Applikationer", + "ariaLabel": "Konfigurerade appar", "noResults": { "title": "Det finns inga appar ännu", - "action": "Skapa din första app" + "description": "Appar är länkar till de tjänster och verktyg du vill ha på dina tavlor.", + "action": "Skapa din första app", + "filteredTitle": "Inga appar matchar din sökning", + "filteredDescription": "Inga appar matchar \"{search}\". Prova ett annat namn eller URL.", + "createOnlyTitle": "Du kan bara lägga till appar", + "createOnlyDescription": "Dina behörigheter låter dig skapa appar men inte bläddra bland befintliga. Be en administratör om åtkomst till apphantering för att se hela listan." } }, "create": { "title": "Addera applikation", "notification": { "success": { - "title": "Skapandet lyckades", "message": "Appen skapades framgångsrikt" }, "error": { - "title": "Skapandet misslyckades", "message": "Appen kunde inte skapas" } } @@ -630,11 +702,9 @@ "title": "Redigera applikationen", "notification": { "success": { - "title": "Ändringarna har sparats", "message": "Appen sparades" }, "error": { - "title": "Misslyckades med att spara ändringarna", "message": "Appen kunde inte sparas" } } @@ -644,26 +714,18 @@ "message": "Är du säker på att du vill ta bort applikationen {name}?", "notification": { "success": { - "title": "Borttagning lyckades", "message": "Appen har tagits bort" }, "error": { - "title": "Borttagning misslyckades", "message": "Kunde inte ta bort appen" } } } }, "field": { - "name": { - "label": "Namn" - }, "description": { "label": "Beskrivning" }, - "url": { - "label": "URL" - }, "useDifferentUrlForPing": { "checkbox": { "label": "Använd annan URL för ping", @@ -678,34 +740,582 @@ "search": "Sök efter en applikation", "noResults": "Inga resultat", "action": "Välj {app}", - "title": "Välj en applikation att lägga till på tavlan" + "title": "Välj en applikation att lägga till på tavlan", + "toggle": "Klicka för att välja", + "selected": "Vald", + "multiple": "Lägg till {count}", + "selectedCount": "{count, plural, one {# valda} other {# valda}}", + "appsSelected": "{count, plural, one {# app vald} other {# appar valda}}", + "selectMultiple": "Välj flera", + "cancelMultiple": "Avsluta multi-select", + "customApplication": "Anpassad applikation", + "application": "Applikation" }, "create": { "title": "Addera en ny applikation", "description": "Addera en ny applikation ", "action": "Addera applikation" + } + } + }, + "tips": { + "dismiss": "Avfärda tips", + "multiSelectApps": "Tips: Håll Ctrl / för att välja flera appar samtidigt" + }, + "customWidget": { + "secretEntry": { + "title": "Konfigurera API-källa", + "description": "Bekräfta serverns URL och ange uppgifter. Hemliga värden krypteras av Homarr och returneras aldrig till den begärande agenten.", + "loading": "Laddar säker förfrågan…", + "applying": "Tillämpar denna konfiguration… Håll denna sida öppen.", + "saved": "API-källa konfigurerad. Du kan stänga denna sida.", + "unavailable": "Begäran inte tillgänglig", + "saveError": "Det går inte att konfigurera API-källa", + "source": "API källa: {name}", + "baseUrl": "Server URL", + "networkScope": "Nätverksåtkomst", + "save": "Spara API-konfiguration", + "expires": "Denna engångsförfrågan löper ut på {time}." + }, + "page": { + "list": { + "noResults": "Inga anpassade widgetar ännu. Skapa din första!", + "noDescription": "Ingen beskrivning", + "enabled": "Aktiverad", + "disabled": "Inaktiverad", + "disabledDescription": "Denna widget förblir konfigurerad men kommer inte att laddas på något kort.", + "requestCount": "{count, plural, one {# begär} other {# begär}}", + "invalidDefinition": "Ogiltig definition", + "migrationRequired": "Migrering krävs", + "migrationInstructions": "Öppna åtgärder för att kopiera eller exportera den ursprungliga v1-definitionen för manuell rekreation. Du kan också använda migreringsprompten med en LLM. Befintliga placeringar av tavlor fortsätter att fungera efter migration.", + "missingCredentials": "{count, plural, one {Användaruppgifter saknas} other {# Användaruppgifter saknas}}", + "missingCredentialsDescription": "{count, plural, one {Denna widget behöver fortfarande en autentiseringsuppgift.} other {Denna widget behöver fortfarande # uppgifter.}} Välj detta märke för att konfigurera URL och krypterade värden." }, - "add": "Lägg till en applikation" + "create": { + "title": "Skapa anpassad widget", + "subtitle": "Definiera en API-URL, autentisering och hur svarsdata ska visas." + }, + "tabs": { + "ariaLabel": "Anpassade widgetsektioner", + "installed": "Installerad", + "workshop": "Verkstad" + } + }, + "action": { + "pasteImportHint": "Klistra in en komplett anpassad widget JSON med Ctrl+V eller Command+V", + "delete": "Ta bort anpassad widget", + "deleteConfirm": "Är du säker på att du vill ta bort \"{name}\"? Den här åtgärden kan inte ångras.", + "export": "Exportera", + "duplicate": "Duplicera", + "aiPrompt": "Designa med AI", + "copyAiPrompt": "Kopiera AI-prompt", + "enable": "Aktivera", + "disable": "Inaktivera", + "menu": "Åtgärder", + "downloadSkill": "Visa anpassad Widget-färdighet", + "publishWorkshop": "Publicera till Workshop", + "migrate": "Migrera anpassad widget", + "configureSources": "Konfigurera källor", + "copyLegacyDefinition": "Kopiera originalwidgetens innehåll", + "exportLegacyDefinition": "Exportera ursprungligt widgetinnehåll", + "copyMigrationPrompt": "Kopiera migreringsprompten för LLM", + "pasteMigration": "Klistra in migrerad widget", + "importMigration": "Importera migrerad JSON-fil" + }, + "sourceSetupDialog": { + "title": "Konfigurera widget-källor", + "description": "Granska var denna widget ansluter och lägga till eller ersätta dess krypterade uppgifter.", + "credentialsRequired": "Förfrågningar kommer att misslyckas tills de nödvändiga uppgifterna har lagts till.", + "save": "Spara konfiguration" + }, + "field": { + "description": "Beskrivning" + }, + "editor": { + "errorBoundary": { + "title": "Något gick fel" + }, + "action": { + "components": "Komponenter", + "format": "Formatera", + "insertStarter": "Insert starter", + "redo": "Gör om", + "copied": "Kopierad", + "schema": "Schema" + }, + "reference": { + "minimal": "Minimalt exempel", + "full": "Fullt exempel" + }, + "componentReference": { + "search": "Sök komponenter", + "empty": "Inga matchande komponenter", + "count": "{count, number} Komponenter tillgängliga" + }, + "status": { + "errors": "{count, number} fel", + "warnings": "{count, number} varningar", + "ready": "Inga problem hittades", + "position": "Ln {line, number}, Col {column, number}", + "characters": "{count, number} tecken", + "charactersWithLimit": "{count, number} / {limit, number}" + }, + "diagnostics": { + "title": "Mall diagnostik", + "line": "Rad {line, number}", + "ast": "{value}", + "bindingTypeConflict": "Inmatningen \"{value}\" delas av kontroller med inkompatibla värdestyper.", + "runtimeBindingTypeConflict": "Inmatningen \"{value}\" är bunden som både {firstType} och {secondType}.", + "dynamicRequestId": "En bokstavlig begäran Id krävs. Dynamiska begäran ID accepteras inte.", + "dynamicInputBinding": "Ett bokstavligt inmatningsnamn krävs för bindning.", + "inlineRequestProps": "Nätverkskomponenter accepterar requestId och parametrar; inline URL, metod, rubrik och kroppen rekvisita blockeras.", + "invalidRequestManifest": "Namngivna förfrågningar måste vara en giltig förfrågningskarta. {value}", + "missingRequestId": "Denna nätverkskomponent kräver en bokstavlig förfrågnings-Id.", + "templateEmpty": "Ange en JSX-mall.", + "templateTooLong": "Mallen överskrider gränsen på 50.000 tecken.", + "unknownRequest": "Ingen namngiven begäran med ID \"{value}\" finns." + } + }, + "workbench": { + "configure": "Konfigurera", + "sectionNavigation": "Anpassade widgetsektioner", + "widgetPreview": "Förhandsgranskning av widget", + "generalInformation": "Allmän information", + "invalidWidget": "Ogiltig widget", + "section": { + "general": "Generellt", + "sources": "API källor", + "requests": "Förfrågningar", + "options": "Alternativ", + "jsx": "JSX", + "preview": "Förhandsgranska" + }, + "status": { + "unsaved": "Osparade ändringar", + "invalid": "Behöver uppmärksamhet", + "ready": "Redo" + }, + "saveError": { + "title": "Widget sparades inte", + "description": "Fixa dessa valideringsfel och spara igen.", + "more": "+{count} fler fel visas i arbetsbänken.", + "errors": "Valideringsfel", + "copy": "Kopiera fel", + "copied": "Fel har kopierats" + }, + "action": { + "preview": "Testa och förhandsgranska", + "previewLoading": "Testar förfrågningar" + }, + "requests": { + "title": "Namngivna frågor och åtgärder", + "label": "Förfrågningar", + "description": "Frågor laddar data; åtgärder som endast körs efter användarinteraktion. Varje HTTP-metod är giltig för endera typen." + }, + "options": { + "title": "Widget alternativ" + }, + "builder": { + "advancedManifest": "Avancerat raw-manifest", + "advancedJson": "Avancerat manifest JSON", + "manifestFilename": "widget.json", + "request": "Begär {count, number}", + "requestId": "Begär ID", + "type": "Nedladdningsklientens typ", + "method": "Metod", + "source": "API källa", + "run": "Kör", + "runLoad": "När widgeten laddar", + "runManual": "Från SubFetch", + "permission": "Behörighet", + "path": "Sökväg", + "pathDescription": "Använd '{option:name}' för widgetalternativ och '{param:name}' för anropsvärden.", + "requestDetails": "Fråga, kropp och beteende", + "queryValues": "Frågevärden", + "queryKey": "Frågenyckel", + "queryKeyInvalid": "Använd ett unikt ID som börjar med en bokstav och innehåller endast bokstäver, siffror, - eller _.", + "valueSource": "Värdekälla", + "literal": "Bokstavlig", + "widgetOption": "Widget alternativ", + "invocationParameter": "Invocation parameter", + "option": "Alternativ", + "parameterName": "Parameternamn", + "value": "Värde", + "removeQueryValue": "Ta bort frågevärde", + "addQueryValue": "Lägg till frågevärde", + "jsonBody": "JSON kropp", + "jsonBodyDescription": "Valfri. Infoga $option och $param referenser på något djup.", + "insertOptionReference": "Infoga alternativ referens", + "insertParameterReference": "Infoga parameterreferens", + "confirmation": "Bekräftelse meddelande", + "invalidation": "Uppdatera efter framgång", + "invalidationDescription": "Kommaseparerade fråge-ID", + "noAuth": "Skicka utan källautentisering", + "moveRequestUp": "Flytta begäran uppåt", + "moveRequestDown": "Flytta förfrågan nedåt", + "removeRequest": "Ta bort förfrågan", + "addRequest": "Lägg till förfrågan", + "optionName": "Alternativ namn", + "label": "Etikett", + "control": "Kontroll", + "description": "Beskrivning", + "default": "Standard", + "optionDetails": "Begränsningar och dynamiska val", + "minimum": "Minsta", + "maximum": "Maximal", + "step": "Steg", + "choiceLabel": "Val etikett", + "choiceValue": "Val värde", + "newChoice": "Nytt val", + "addChoice": "Lägg till val", + "removeChoice": "Ta bort val", + "choicesRequest": "Ladda val från begäran", + "itemsPath": "Sökväg för objekt", + "itemsPathPlaceholder": "objekt (valfritt)", + "valuePath": "Sökväg för värde", + "labelPath": "Sökväg för etiketter", + "group": "Grupp", + "advancedOption": "Avancerat alternativ", + "moveOptionUp": "Flytta upp alternativet", + "moveOptionDown": "Flytta alternativet nedåt", + "removeOption": "Ta bort alternativ", + "addOption": "Lägg till alternativ", + "invalidJson": "Ogiltig JSON", + "invalidWidget": "Ogiltig widget" + }, + "jsx": { + "title": "JSX mall", + "label": "Mall" + }, + "sources": { + "title": "API-källor och uppgifter", + "newName": "API {count, number}", + "duplicateSourceId": "API-källkod måste vara unik.", + "credentialRemoved": "Uppgifter borttagen", + "credentialRemovedDescription": "Det lagrade värdet har tagits bort.", + "primary": "Primär API", + "id": "Källans ID", + "name": "Jobbnamn", + "baseUrl": "Bas URL", + "baseUrlError": { + "invalid": "Ange en komplett URL.", + "protocol": "Använd en HTTP eller HTTPS URL.", + "credentials": "Ta bort användarnamn och lösenord från denna URL. Konfigurera autentiseringsuppgifter nedan istället.", + "queryOrFragment": "Ta bort frågesträng eller fragment från denna bas-URL. Lägg till frågevärden till en namngiven begäran." + }, + "networkScope": "Nätverksåtkomst", + "authentication": "Autentisering", + "headerName": "Rubrik namn", + "queryParameter": "Frågeparameter", + "configured": "Konfigurerade — ange en ersättare", + "clear": "Klart", + "remove": "Ta bort källa och dess förfrågningar", + "advanced": "Avancerat", + "add": "Lägg till en annan API-källa", + "sourceType": "Integration", + "manualSource": "HTTP API", + "existingIntegration": "Befintlig integration", + "integrationType": "Integrationstyp", + "selectIntegration": "Konfigurerad integration", + "noIntegrations": "Inga matchande integreringar tillgängliga", + "integrationUnavailable": "Den valda integrationen är inte längre tillgänglig. Välj en annan integration.", + "integrationDescription": "Använder den sparade integrations-URL och referenser. Ändringar gäller automatiskt. Fullständig integrationsåtkomst krävs för att köra förfrågningar." + }, + "ai": { + "title": "Skapa eller fixa med någon AI", + "description": "Lägg till en API-docs URL först om du har en. För korrigeringar, kör Förhandsgranska om möjligt. Kopiera prompten till någon AI; den kan be om saknade detaljer. Klistra in dess slutliga JSON här.", + "request": "Vad ska denna widget göra?", + "documentationUrl": "API dokumentations-URL (valfritt)", + "paste": "Klistra in", + "response": "AI svar", + "manualCopyDescription": "Åtkomst till urklipp är inte tillgänglig. Välj prompten nedan och kopiera den manuellt.", + "manualPasteDescription": "Åtkomst till urklipp är otillgänglig eller det kopierade svaret behöver korrigeras. Klistra in AI: s JSON svar här.", + "selectAll": "Välj alla", + "loadResponse": "Ladda svar", + "loaded": "Widget laddad till redigeraren", + "invalidResponse": "Urklipp innehåller inte en giltig v2-widget", + "invalidResponseDetail": "AI svaret är ogiltigt: {message}" + }, + "preview": { + "invalid": "Fixa valideringsfel för att förhandsgranska denna widget.", + "fixtureError": "Förhandsgranska fixturfel", + "requestData": "Begär data", + "status": { + "idle": "Förfrågningar har inte testats", + "loading": "Testar förfrågningar", + "success": "Alla belastningsförfrågningar lyckades", + "error": "En eller flera belastningsförfrågningar misslyckades" + }, + "result": { + "loading": { + "title": "Testa API-förfrågningar", + "description": "Homarr skapar en förhandsgranskningssession och laddar widgetdata." + }, + "success": { + "title": "Förhandsgranskning klar", + "description": "{succeeded, plural, =0 {Denna widget har inga laddnings förfrågningar.} one {# laddnings begäran lyckades.} other {# laddnings förfrågningar lyckades.}} Öppna data för att inspektera svaret." + }, + "error": { + "title": "Förhandsgranskning slutförd med förfrågningsfel", + "description": "{succeeded, number} lyckades och {failed, number} misslyckades. Öppna data för information om svar och fel." + } + }, + "instanceOptions": "Instans alternativ", + "liveActions": "Kör åtgärder mot det konfigurerade API", + "liveActionsDescription": "Sätta på detta påverkar den verkliga tjänsten.", + "noActions": "Inga åtgärder är definierade.", + "containedFailures": "Körtidsfel ingår i denna widget. Begär tidskrifter innehåller aldrig hemliga värden.", + "validation": { + "title": "Validering", + "ready": "Definitionen av widget är giltig." + }, + "accessibility": { + "title": "Tillgänglighetskontroller", + "ready": "Inga gemensamma tillgänglighetsutelämnanden upptäckta.", + "pending": "Tillgänglighetskontroller kommer att köras när widgetdefinitionen är giltig.", + "imageAlt": "Lägg till alt text till varje bild, med en tom alt endast för dekorativa bilder.", + "actionIconLabel": "Lägg till en aria-etikett eller titel till varje ActionIcon.", + "inputLabel": "Lägg till en synlig etikett eller ett tillgängligt namn till varje inmatning." + }, + "journal": "Redaktionell tidskrift för begäran", + "actionParameters": "Åtgärdsparametrar (JSON)", + "invalidParameters": "Använd deklarerad sträng, antal och booleska parametertyper.", + "runDestructive": "Kör destruktiva åtgärder", + "runAction": "Kör åtgärd", + "deleteConfirmation": "Den här förhandsgranskningsåtgärden ändrar fjärrdata genom det konfigurerade API.", + "simulated": "Åtgärd simulerad", + "httpStatus": "HTTP {status, number}", + "tab": { + "widget": "Widget", + "data": "Data", + "options": "Alternativ", + "state": "Jobbstatus", + "actions": "Kontroller", + "diagnostics": "Diagnostik" + }, + "size": { + "compact": "Kompakt", + "standard": "Standard", + "wide": "Bred" + }, + "fixture": { + "live": "Live", + "loading": "Laddar", + "empty": "Tom", + "error": "Fel" + } + } + }, + "preview": { + "request": { + "permission": { + "view": "Visa", + "modify": "Ändra", + "full": "Fullt" + } + } + }, + "notification": { + "created": "Widgeten \"{name}\" skapades.", + "updated": "Widgeten \"{name}\" uppdaterades.", + "deleted": "Widgeten \"{name}\" togs bort.", + "imported": "Widgeten importerades.", + "migrated": "Äldre widget har migrerats. Befintliga placeringar av tavlor använder nu v2-definitionen.", + "migrationError": "Det gick inte att migrera äldre widget. Se till att filen använder homarr-custom-widget-v2-schemat.", + "legacyDefinitionCopied": "Den ursprungliga widget innehåll kopierades. Lagrade värden ingår inte.", + "legacyDefinitionCopyError": "Det gick inte att kopiera innehållet i den ursprungliga widgeten.", + "migrationPromptCopied": "En redigerad migrationstakt kopierades. Klistra in den i en LLM, kopiera dess enda JSON-svar, välj sedan Klistra in migrerad widget här.", + "migrationPromptCopyError": "Det gick inte att kopiera migreringsprompten.", + "sourcesConfigured": "Widget-källor och uppgifter sparade.", + "sourceConfigurationError": "Det gick inte att konfigurera widget-källor.", + "aiPromptCopiedWithCount": "AI-prompten kopierades till urklipp ({count, number} tecken).", + "aiPromptCopyError": "Det gick inte att kopiera prompten till urklipp. Din webbläsare kanske inte stöder den här funktionen.", + "aiPromptSent": "Fråga skickat. Du kan fortsätta redigera medan assistenten arbetar i bakgrunden.", + "updateError": "Det gick inte att uppdatera widgeten. Dina ändringar sparades inte.", + "importError": "Det gick inte att importera widgeten. Kontrollera att filen är en giltig JSON-export av en anpassad widget.", + "exportError": "Det gick inte att exportera widgeten.", + "duplicated": "Widgeten \"{name}\" duplicerades.", + "duplicateError": "Det gick inte att duplicera widgeten.", + "toggleError": "Det gick inte att växla widgetens status.", + "deleteError": "Det gick inte att ta bort widgeten.", + "previewError": "Det gick inte att hämta förhandsgranskningen. Kontrollera URL:en och försök igen." + }, + "importReview": { + "title": "Granska anpassad widget import", + "description": "Kontrollera var denna widget ansluter och vilken styrelse åtkomst dess kontroller kräver innan du importerar den.", + "migrationTitle": "Granska migrerad v2-ersättning", + "migrationDescription": "Granska och bekräfta denna genererade v2-definition. Bekräftande atomiskt ersätter den bevarade v1-posten samtidigt som befintliga styrelseplaceringar kopplade till samma widget-ID.", + "fileLabel": "Välj en anpassad widget JSON-fil", + "name": "Jobbnamn", + "origin": "Bas ursprung", + "authentication": "Autentisering", + "networkScope": "Nätverkets omfattning", + "methods": "HTTP-metoder", + "permissions": "Behörigheter för forumet krävs", + "sourceSetup": { + "title": "Konfigurera API-källor", + "description": "Bekräfta var denna widget ansluter och lägga till uppgifter. Privata URL:er och loopback är specifika för din Homarr installation.", + "suggestedUrl": "Föreslagen URL", + "confirmUrl": "Jag bekräftar att denna server URL är korrekt för min Homarr installation", + "ready": "URL klar", + "needsUrl": "Bekräfta URL", + "credentialsMissing": "Användaruppgifter saknas", + "credentialsOptional": "Du kan installera utan inloggningsuppgifter och konfigurera dem senare, men förfrågningar kommer att misslyckas tills de läggs till." + }, + "actionWarning": { + "title": "Denna widget kan ändra fjärrdata", + "description": "Granska varje namngiven åtgärd, ärvd autentisering och destruktiv bekräftelse efter import. Hemligheter ingår inte i filen." + }, + "cancel": "Avbryt import", + "confirm": "Importera widget", + "confirmMigration": "Bekräfta utbyte av v2" + }, + "secret": { + "apiKey": "API-nyckel eller token", + "username": "Användarnamn", + "password": "Lösenord", + "savedPlaceholder": "••••••• (sparad, lämna tomt för att behålla)" + } + }, + "workshop": { + "title": "Verkstad", + "browseWorkshop": "Bläddra i verkstad", + "openCommunity": "Öppen verkstad", + "openOnWorkshop": "Öppna {title} på verkstadens webbplats", + "back": "Tillbaka till Workshop", + "search": "Sök widgetar", + "searchCss": "Sök CSS-teman", + "sort": "Sortera", + "sortTop": "Högst rankad", + "sortNewest": "Nyaste", + "listAriaLabel": "Verkstad widgetar", + "listAriaLabelCss": "Verkstadens CSS-teman", + "empty": "Inga widgetar matchar denna sökning.", + "emptyDescription": "Gemenskapswidgetar publicerade till Workshopen visas här.", + "emptyFilteredTitle": "Inga widgetar matchar denna sökning", + "emptyFilteredDescription": "Ingen Workshop-widget matchar \"{search}\".", + "emptyCss": "Inga CSS-teman matchar denna sökning.", + "unavailableTitle": "Homarr Workshop verkar vara otillgänglig", + "unavailable": "Gemenskapstjänsten kan vara tillfälligt nere. Försök igen om ett ögonblick. Dina installerade widgetar påverkas inte.", + "loadError": "Denna inlämning kunde inte laddas.", + "noDescription": "Ingen beskrivning", + "author": "av {name}", + "communityMember": "Medlem i gemenskapen", + "outdated": "Föråldrade", + "outdatedWarning": "Författaren markerade denna inlämning som föråldrad. Granska den noggrant innan import.", + "score": "Poäng: {count, number}", + "upvote": "Upvote", + "downvote": "Nedröstning", + "voteError": "Omröstningen kunde inte sparas.", + "signIn": "Logga in med GitHub", + "signInError": "GitHub-inloggning misslyckades. Kontrollera att verkstaden OAuth leverantören är konfigurerad och att popups är tillåtna.", + "signOut": "Logga ut", + "signInHint": "Logga in för att rösta eller rapportera. Installationen kräver inget Workshop-konto.", + "securityNotice": "Workshop-widgetar kan ringa sina deklarerade API-källor och utföra deklarerade åtgärder med autentiseringsuppgifter som du konfigurerar lokalt. Hemligheter ingår aldrig.", + "securityNoticeCss": "Gemenskapens CSS kan ändra utseendet och användbarheten på en tavla. Granska den innan du importerar; ingenting sparas förrän du sparar tavelinställningar.", + "install": "Installera", + "installReviewTitle": "Granska innan installation", + "installError": "Denna widget kan inte installeras", + "installErrorDescription": "Verkstadens inlämning är inte en giltig JSX v2-widget.", + "useCss": "Import CSS", + "importCss": "Importera CSS från Workshop", + "importCssConfirm": "Ersätt nuvarande anpassade CSS med \"{title}\"? Ingenting sparas tills du sparar foruminställningarna.", + "screenshotAlt": "{title} skärmdump {count, number}", + "screenshotViewer": "{title} skärmdump visare", + "screenshotsLabel": "{title} skärmdumpar", + "zoomScreenshot": "Visa full storlek", + "previousScreenshot": "Föregående skärmdump", + "nextScreenshot": "Nästa skärmdump", + "showScreenshotThumbnails": "Visa miniatyrer för skärmdump", + "hideScreenshotThumbnails": "Dölj miniatyrer för skärmdump", + "closeScreenshotViewer": "Stäng skärmdump viewer", + "technicalDetails": "Tekniska detaljer", + "sourceCode": "Verkstad post", + "export": "Exportera", + "report": "Rapportera", + "reportTitle": "Rapportera inlämning", + "reportReason": "Anledning", + "reportExplanation": "Vad ska workshopens moderatorer veta?", + "reportSend": "Skicka rapport", + "reportSent": "Rapport skickad", + "reportSentDescription": "Workshop-moderatorer kan nu granska denna inlämning.", + "reportCount": "{count, plural, one {# rapport} other {# rapporter}}", + "reportWarning": "{count, plural, one {Denna inlämning har # öppna gemenskapsrapport.} other {Denna inlämning har # öppna gemenskapsrapporter.}} Den förblir installerbar, men du bör granska dess innehåll först.", + "reportVisibility": "Rapportdetaljer är endast synliga för denna inlämnings författare och Workshop-administratörer.", + "reportCategory": { + "outdated": "Föråldrat eller inte längre fungerar", + "malicious": "Skadlig", + "spam": "Spam", + "copyright": "Upphovsrätt", + "inappropriate": "Olämplig", + "other": "Annat" + }, + "publish": { + "title": "Publicera till Workshop", + "introTitle": "Dela denna widget med communityn", + "introDescription": "Homarr exporterar en autentiseringsfri kopia av den aktuella widgeten. Lägg till tydliga uppgifter om listning så att folk vet vad det gör innan du installerar den.", + "listingDetails": "Verkstad lista", + "listingDetailsDescription": "Dessa uppgifter visas offentligt vid sidan av den exporterade widgetdefinitionen.", + "success": "Publiceras omedelbart. Gemenskapsmedlemmar kan nu installera och rapportera denna widget.", + "successTitle": "Din widget är live", + "manageDescription": "Öppna inlämningen för att uppdatera sin listning, granska rapporter, markera den föråldrad eller ta bort den. Inlämningshantering hanteras direkt på Workshopens webbplats.", + "viewSubmission": "Visa och hantera inlämning", + "done": "Klar", + "signInHint": "Logga in för att publicera under din Workshop-identitet.", + "titleField": "Titel", + "descriptionField": "Beskrivning", + "screenshots": "Skärmdumpar", + "screenshotsDescription": "Upp till fem PNG, JPEG eller WebP bilder", + "screenshotsPlaceholder": "Välj skärmdumpar", + "invalidScreenshot": "Använd PNG, JPEG eller WebP bilder inte större än {maxSize} vardera.", + "privateSourceWarning": "Denna widget innehåller URL:er för privat källa: {sources}. Ersätt personliga värdar eller IP-adresser med säkra tjänstplatshållare innan publicering.", + "reviewSourcesTitle": "Granska privata URL:er för källkod", + "privateSourceConfirmation": "Jag granskade dessa käll-URL:er och de avslöjar inte information om privat infrastruktur", + "action": "Publicera nu", + "publicationNote": "Publicering är omedelbart. Du kan hantera inlämningen efteråt i Workshop.", + "definitionChanged": "Widgeten ändrades medan publikationen förbereddes. Granska dess privata källa webbadresser igen, sedan försök igen.", + "error": "Publicering misslyckades" } }, "integration": { + "completion": { + "modalTitle": "Tjänsten klar", + "title": "{name} är ansluten", + "description": "Anslutningen klarade testet. Välj vad som ska visas på tavlan nästa.", + "connectionReady": "Service-anslutningen är klar", + "appReady": "Genvägen till appen är klar", + "compatibleWidgets": "{count, plural, =0 {Inga kompatibla widgets} one {# kompatibla widget} other {# kompatibla widgets}} tillgängliga", + "chooseWidget": "Välj widget", + "recipes": { + "title": "Rekommenderas för denna tavla", + "description": "Baserat på uppkopplade tjänster och widgetar redan på denna tavla.", + "newConnectionReason": "Nu tillgänglig via {integration}", + "existingConnectionReason": "Fungerar med en tjänst som du redan har anslutit", + "dismiss": "Avfärda rekommendationer för denna tjänst på denna tavla" + } + }, "page": { "list": { - "title": "Integrationer", + "ariaLabel": "Konfigurerade integrationer", "search": "Sök integrationer", + "scopedNote": "Visar endast de integrationer du får hantera.", "noResults": { - "title": "Det finns inga integrationer ännu" + "title": "Det finns inga integrationer ännu", + "description": "Anslut en tjänst för att använda sina data och åtgärder i Homarr widgets.", + "action": "Skapa din första integration", + "filteredTitle": "Inga integrationer matchar din sökning", + "filteredDescription": "Inga integrationer matchar \"{search}\". Prova ett annat namn, typ, eller URL.", + "createOnlyTitle": "Du kan bara lägga till integrationer", + "createOnlyDescription": "Dina behörigheter låter dig skapa integrationer men inte hantera befintliga. Be en administratör om åtkomst till dem du behöver." } }, "create": { "title": "Ny {name} integration", "notification": { "success": { - "title": "Skapandet lyckades", "message": "Integrationen har skapats" }, "error": { - "title": "Skapandet misslyckades", "message": "Integrationen kunde inte skapas" } }, @@ -729,11 +1339,9 @@ "title": "Redigera {name} integration", "notification": { "success": { - "title": "Ändringarna har sparats", "message": "Integrationen sparad" }, "error": { - "title": "Kunde inte tillämpa ändringar", "message": "Integrationen kunde inte sparas" } }, @@ -750,23 +1358,15 @@ "message": "Är du säker på att du vill ta bort integrationen {name}?", "notification": { "success": { - "title": "Borttagning lyckades", "message": "Integrationen har tagits bort" }, "error": { - "title": "Borttagning misslyckades", "message": "Kunde inte ta bort integrationen" } } } }, "field": { - "name": { - "label": "Namn" - }, - "url": { - "label": "URL" - }, "attemptSearchEngineCreation": { "label": "Skapa sökmotor", "description": "Integrationen \"{kind}\" kan inte användas med sökmotorer. Markera detta för att automatiskt konfigurera sökmotorn." @@ -778,6 +1378,10 @@ "label": "Skapa app", "description": "Skapa en app med samma namn och ikon som integrationen. Lämna fältet nedan tomt för att skapa en app med integrationens URL." }, + "linkApp": { + "label": "Länka en befintlig app", + "description": "Anslut integrationen till en app som du redan kan använda." + }, "appHref": { "placeholder": "Egen app-URL" }, @@ -791,7 +1395,11 @@ "grid": { "widgetCount": "{count} widgetar", "noWidgets": "Inga widgetar", - "detected": "Upptäckt via Docker" + "detected": "Upptäckt via Docker", + "connected": "{count, plural, one {# ansluten} other {# ansluten}}", + "tiedWidgets": "Bundna widgetar", + "more": "+{count} fler", + "loadError": "Integrationer kunde inte laddas. Försök igen innan du skapar en ny anslutning." }, "category": { "dnsHole": "DNS", @@ -822,7 +1430,10 @@ "analytics": "Analys", "vpn": "VPN", "mediaLibrary": "Mediebibliotek", - "uptimeMonitoring": "Uppetidsövervakning" + "uptimeMonitoring": "Uppetidsövervakning", + "beszel": "Beszel", + "systemMonitoring": "Systemövervakning", + "security": "Säkerhet" }, "testConnection": { "action": { @@ -1107,6 +1718,22 @@ "slug": { "label": "Status-sidans slug", "newLabel": "Ny status-sidans slug" + }, + "wazuhIndexerUrl": { + "label": "Indexerare URL", + "newLabel": "Ny indexeraradress" + }, + "wazuhIndexerUsername": { + "label": "Användarnamn för indexerare", + "newLabel": "Nytt användarnamn för indexerare" + }, + "wazuhIndexerPassword": { + "label": "Indexerare lösenord", + "newLabel": "Nytt lösenord för indexerare" + }, + "wazuhDashboardUrl": { + "label": "Dashboard URL (valfritt)", + "newLabel": "Ny URL för instrumentpanelen" } } }, @@ -1115,54 +1742,19 @@ "interact": "Interagera med integrationer", "full": "Fullständig åtkomst till integrationer" }, - "audiobookshelf": { - "name": "Audiobookshelf", - "description": "Självhostad ljudboks- och podcastserver" - }, - "navidrome": { - "name": "Navidrome", - "description": "Självhostad musikstreamingserver med Subsonic API-kompatibilitet" - }, - "uptimeKuma": { - "name": "Uptime Kuma", - "description": "Självhostad uppetidsövervakning med offentliga statussidor", - "secret": { - "slug": { - "description": "Sluggen för din offentliga statussida. Standardvärdet är \"default\" om det inte anges." - }, - "apiKey": { - "description": "Valfri API-nyckel för autentiserad /metrics-åtkomst" - } - } - }, - "traefik": { - "name": "Traefik", - "description": "Molnbaserad reverse proxy och lastbalanserare" - }, - "paperlessNgx": { - "name": "Paperless-ngx", - "description": "Dokumenthanteringssystem för arkivering och organisering av skannade dokument" - }, - "patchmon": { - "name": "PatchMon", - "description": "Korrigeringshantering och övervakning för Linux-värdar" - }, - "bazarr": { - "name": "Bazarr", - "description": "Ledsagarprogram till Sonarr och Radarr som hanterar och laddar ner undertexter" - }, - "wud": { - "name": "Vad är Upp Docker", - "description": "Övervaka vilken av dina Docker behållare har bilduppdateringar tillgängliga" + "llamacpp": { + "name": "llama.cpp", + "description": "Övervaka en lokal llama.cpp llama-server: hälso-, modell- och generationsmått" } }, "media": { "plural": "Media", "search": "Hitta media", "field": { - "name": "Namn", + "preview": "Förhandsgranska", "size": "Storlek", - "creator": "Adderad av" + "creator": "Adderad av", + "actions": "Kontroller" }, "action": { "upload": { @@ -1190,10 +1782,12 @@ } }, "copy": { - "label": "Kopiera URL" + "label": "Kopiera URL", + "labelNamed": "Kopiera URL för {name}" }, "open": { - "label": "Öppna media" + "label": "Öppna media", + "labelNamed": "Öppna {name}" } }, "noResults": { @@ -1208,7 +1802,6 @@ "add": "Lägg till", "apply": "Använd", "backToOverview": "Tillbaka till översikten", - "skip": "Hoppa över", "change": "Ändra", "create": "Addera", "createAnother": "Addera och börja om", @@ -1231,16 +1824,31 @@ "tryAgain": "Försök igen", "loading": "Laddar", "show": "Visa", - "hide": "Dölj" + "hide": "Dölj", + "undo": "Ångra", + "editNamed": "Redigera {name}", + "deleteNamed": "Ta bort {name}", + "clearSearch": "Rensa sökning", + "copy": "Kopiera", + "copied": "Kopierad", + "refresh": "Uppdatera" + }, + "pagination": { + "pageOf": "Sida {page} av {totalPages}" }, "here": "här", + "serviceUrlTemplate": { + "serverTitle": "Vanlig serveradress", + "urlModeLabel": "Namn på tjänstens adress", + "hostPort": "Samma värd, olika portar", + "subdomain": "En underdomän per tjänst", + "path": "En sökväg per tjänst" + }, "iconPicker": { "label": "Ikon-URL", + "description": "Sök i biblioteket, klistra in en bild-URL eller ladda upp en fil.", "header": "Sök {countIcons} bilder efter namn", "headerLoading": "Sök bilder med namn", - "noResults": "Inga ikoner matchar \"{search}\".", - "error": "Det gick inte att läsa in ikoner.", - "description": "Sök i biblioteket, klistra in en bild-URL eller ladda upp en fil.", "clear": "Rensa bild", "uploadImage": "Ladda upp bild", "results": "Sökresultat för bild", @@ -1249,7 +1857,9 @@ "otherImages": "Andra bilder", "urlLoading": "Kontrollerar bild…", "urlReady": "Bilden är klar att användas", - "urlError": "Bilden kunde inte laddas. Kontrollera URL:en och försök igen." + "urlError": "Bilden kunde inte laddas. Kontrollera URL:en och försök igen.", + "noResults": "Inga ikoner matchar \"{search}\".", + "error": "Det gick inte att läsa in ikoner." }, "colorScheme": { "options": { @@ -1261,7 +1871,6 @@ "information": { "min": "Min", "max": "Max", - "days": "Dagar", "hours": "Timmar", "minutes": "Minuter" }, @@ -1298,16 +1907,16 @@ }, "userAvatar": { "menu": { - "switchToDarkMode": "Byt till mörkt läge", - "switchToLightMode": "Byt till ljust läge", + "open": "Öppna kontomenyn", "management": "Administration", - "docker": "Docker", "preferences": "Dina inställningar", "logout": "Logga ut", "login": "Logga in", "homeBoard": "Din starttavla", - "loggedOut": "Utloggad", - "updateAvailable": "{countUpdates} uppdateringar tillgängliga: {tag}" + "updateAvailable": "{countUpdates} uppdateringar tillgängliga: {tag}", + "assistant": "Assistent", + "assistantThinking": "Tänker", + "modifier": "Mod" } }, "dangerZone": "Kritiska inställningar", @@ -1355,13 +1964,66 @@ "kilometersPerHour": "km/h", "milesPerHour": "mph" } + }, + "widgetQuery": { + "loading": "Laddar widgetdata" + }, + "total": "Totalt", + "filesystemUsage": "{count, plural, one {Visa användning för # filsystem} other {Visa användning för # filsystem}}", + "field": { + "name": "Jobbnamn" + }, + "label": { + "new": "Ny" + }, + "entity": { + "apps": "Applikationer", + "boards": "Tavlor", + "certificates": "Certifikat", + "customWidgets": "Anpassade widgetar", + "groups": "Grupper", + "integrations": "Integrationer", + "invites": "Inbjudningar", + "logs": "Loggning", + "media": "Media", + "searchEngines": "Sökmotorer", + "tasks": "Uppgifter", + "users": "Användare" } }, "section": { - "dynamic": { + "option": { + "showLabel": { + "label": "Visa etikett", + "description": "Visa behållarens etikett över dess innehåll." + }, + "collapsible": { + "label": "Tillåt kollaps", + "description": "Låt tittarna expandera och kollapsa denna behållare." + }, + "showOpenAll": { + "label": "Visa öppen åtgärd", + "description": "Visa en åtgärd som öppnar varje app i denna behållare i nya flikar." + }, + "scrollable": { + "label": "Rullbar", + "description": "Håll den här behållaren på sin fastställda storlek och bläddra dess innehåll i stället för att växa för att passa dem." + } + }, + "action": { + "openAllInNewTabsFor": "Öppna alla appar i {name} i flikar" + }, + "openAllInNewTabs": { + "title": "Öppna alla i flikar", + "text": "Vissa webbläsare kan blockera bulk-öppning av flikar av säkerhetsskäl. Homarr kunde inte öppna alla fönster, eftersom din webbläsare blockerade denna åtgärd. Vänligen tillåta \"Öppna popup-fönster\" och försök igen." + }, + "container": { + "untitled": "Namnlös behållare", "action": { - "create": "Ny dynamisk sektion", - "remove": "Ta bort dynamisk sektion" + "create": "Ny behållare", + "remove": "Ta bort behållare", + "expand": "Expandera", + "collapse": "Komprimera" }, "option": { "title": { @@ -1371,59 +2033,16 @@ "label": "Egna CSS-klasser" }, "borderColor": { - "label": "Kantfärg" + "label": "Färg på kantlinje" } }, "remove": { - "title": "Ta bort dynamisk sektion", - "message": "Är du säker på att du vill ta bort den här dynamiska sektionen? Objekten flyttas till samma plats i den överordnade sektionen." - } - }, - "category": { - "field": { - "name": { - "label": "Namn" - } - }, - "action": { - "create": "Ny kategori", - "edit": "Byt namn på kategori", - "remove": "Ta bort kategori", - "moveUp": "Flytta uppåt", - "moveDown": "Flytta nedåt", - "createAbove": "Ny kategori ovanför", - "createBelow": "Ny kategori nedanför", - "openAllInNewTabs": "Öppna alla i flikar" - }, - "create": { - "title": "Ny kategori", - "submit": "Lägg till kategori" - }, - "remove": { - "title": "Ta bort kategori", - "message": "Är du säker du vill ta bort kategorin {name}?" - }, - "edit": { - "title": "Byt namn på kategori", - "submit": "Byt namn på kategori" - }, - "menu": { - "label": { - "create": "Ny kategori", - "changePosition": "Ändra position", - "settings": "Inställningar" - } - }, - "openAllInNewTabs": { - "title": "Öppna alla i flikar", - "text": "Vissa webbläsare kan blockera massöppning av flikar av säkerhetsskäl. Homarr kunde inte öppna alla fönster eftersom webbläsaren blockerade åtgärden. Tillåt \"Öppna popup-fönster\" och försök igen." + "message": "Ta bort denna behållare? Dess innehåll kommer att flytta in i det omgivande området." } } }, "item": { "action": { - "create": "Nytt objekt", - "import": "Importera objekt", "edit": "Redigera objekt", "moveResize": "Flytta/ändra storlek på objekt", "duplicate": "Duplicera objekt", @@ -1432,7 +2051,7 @@ "menu": { "label": { "settings": "Inställningar", - "refresh": "Uppdatera", + "settingsFor": "Inställningar för {name}", "options": "Alternativ", "actions": "Åtgärder" }, @@ -1441,21 +2060,96 @@ "error": "Fel", "loading": "Läser in", "idle": "Inaktiv" + }, + "notification": { + "saveError": { + "title": "Det går inte att spara widget", + "message": "Widgetändringarna rullades tillbaka" + } } }, "create": { "title": "Välj objekt du vill lägga till", "search": "Filtrera objekt", - "addToBoard": "Lägg till på tavlan" + "addToBoard": "Lägg till på tavlan", + "addAtPosition": "Lägg till objekt här", + "destination": { + "label": "Lägg till i", + "description": "Välj var widgeten ska visas. Du kan fortfarande flytta den senare.", + "mainCanvas": "Huvudduk", + "leftRail": "Vänster räls", + "rightRail": "Höger räls" + }, + "connectionStatus": { + "ready": "Redo", + "needsSetup": "Behöver konfigureras", + "noConnectionRequired": "Ingen anslutning krävs" + }, + "customWidget": "Anpassad widget", + "standalone": "Standalone", + "missingIntegration": { + "title": "Anslut en tjänst först", + "noPermission": "Denna widget behöver en kompatibel serviceanslutning. Be en administratör att ansluta en, försök sedan igen." + }, + "notification": { + "success": { + "title": "Widget tillagd", + "message": "{name} lades till i denna tavla.", + "relocatedMessage": "{name} lades till i {destination} eftersom det valda målet inte var tillgängligt." + }, + "error": { + "title": "Kunde inte lägga till objekt", + "message": "Objektet kunde inte läggas till i denna tavla" + } + } + }, + "selection": { + "summary": "{count, plural, one {# valt objekt} other {# valda objekt}}", + "selected": "{count, plural, one {# valda} other {# valda}}", + "copy": "Kopiera", + "copied": "{count, plural, one {# objekt kopierades till urklipp} other {# objekt kopierades till urklipp}}", + "copyError": "De valda objekten kunde inte kopieras. Din webbläsare kanske inte tillåter urklipp åtkomst.", + "paste": "Klistra in", + "pasteShortcut": "Klistra in kopierade objekt här (Ctrl / + V)", + "pasted": "{count, plural, one {# objekt klistrade in} other {# objekt klistrade in}}", + "pasteError": "Urklipp kunde inte läsas. Din webbläsare kanske inte tillåter urklipp åtkomst.", + "pasteInvalid": "Urklipp innehåller inte giltiga Homarr board objekt.", + "pasteUnavailable": "De kopierade objekten passar inte på denna tavla.", + "removed": "{count, plural, one {# objekt borttagna} other {# objekt borttagna}}", + "move": "Flytta", + "moveTo": "Flytta valda objekt", + "delete": "Ta bort", + "clear": "Rensa markering", + "clearShortcut": "Rensa markering (Escape)", + "saveErrorTitle": "Det gick inte att uppdatera objekt", + "saveErrorMessage": "Ändringarna kunde inte sparas. Tavlan har uppdaterats.", + "moveUnavailableTitle": "Kunde inte flytta valda objekt", + "moveUnavailableMessage": "Destinationen har inte tillräckligt med utrymme för hela urvalet." }, "moveResize": { "title": "Flytta/ändra storlek på objekt", + "entryLabel": "{name}, kolumn {column}, rad {row}", + "target": { + "numbered": "{name}, destination {index}", + "located": "{name}, {location}, destination {index}" + }, + "keyboard": { + "instructions": "Tryck Enter eller mellanslag för att starta tangentbordsredigering. Använd piltangenterna för att flytta, Shift plus piltangenterna för att ändra storlek och fly för att stanna.", + "started": "Tangentbords redigering startade. Använd piltangenterna för att flytta, Shift plus piltangenterna för att ändra storlek och fly för att stanna.", + "stopped": "Tangentbords redigering stoppad.", + "boundary": "Den ändringen passar inte in i detta avsnitt." + }, "field": { + "section": { + "label": "Avsnitt eller räls" + }, "width": { - "label": "Bredd" + "label": "Bredd", + "shortLabel": "W" }, "height": { - "label": "Höjd" + "label": "Höjd", + "shortLabel": "H" }, "xOffset": { "label": "X-förskjutning" @@ -1469,18 +2163,36 @@ "title": "Redigera objekt", "tab": { "widget": "Redigera widget", - "app": "Redigera app" + "app": "Redigera app", + "integration": "Redigera integration" }, "app": { "propagationNotice": "Ändringar av denna app tillämpas överallt där den används på alla instrumentpaneler." }, + "integration": { + "action": "Redigera kontakt", + "description": "Testa eller reparera en vald anslutning utan att lämna denna widget.", + "editLabel": "Redigera {name} integration", + "fullAccessRequired": "Full åtkomst krävs", + "propagationNotice": "Ändringar i denna integration gäller överallt där den används. Anslutningen testas innan den sparas.", + "loading": "Laddar integration", + "loadError": "Denna integration kunde inte laddas. Försök igen innan du ändrar dess anslutningsinställningar." + }, + "preview": { + "integrationRequired": "Välj en anslutning för att förhandsgranska denna widget.", + "size": "Filstorlek" + }, + "settings": { + "label": "Widget inställningar" + }, "advancedOptions": { "label": "Avancerade inställningar", "title": "Avancerade inställningar för objektet" }, "field": { "integrations": { - "label": "Integrationer" + "label": "Integrationer", + "removeLabel": "Ta bort {name} integration" }, "title": { "label": "Titel" @@ -1494,17 +2206,18 @@ } }, "remove": { - "title": "Ta bort objekt", "message": "Är du säker på att du vill ta bort detta objekt?" + }, + "advancedFocus": { + "open": "Öppna avancerad vy", + "close": "Stäng avancerad vy", + "label": "{widget} avancerad vy" } }, "widget": { "integrationSelect": { "configureIntegrationFirst": "Anslut en integrering först", - "loading": "Läser in...", - "placeholder": "Välj ett alternativ", - "noResults": "Hittade inga resultat", - "loadError": "Det gick inte att läsa in alternativen" + "placeholder": "Välj ett alternativ" }, "app": { "name": "App", @@ -1513,9 +2226,6 @@ "appId": { "label": "Välj applikation" }, - "openInNewTab": { - "label": "Öppna i ny flik" - }, "showTitle": { "label": "Visa applikationsnamn" }, @@ -1523,11 +2233,8 @@ "label": "Aktivera statuskontroll" }, "layout": { - "label": "Layout", "option": { - "row": "Horisontell", "row-reverse": "Horisontell (omvänd)", - "column": "Vertikal", "column-reverse": "Vertikal (omvänd)" } }, @@ -1552,23 +2259,60 @@ "name": "Bokmärken", "description": "Visar länkar till flera applikationer", "option": { - "title": { - "label": "Titel" + "showTitle": { + "label": "Visa widgetens titel" + }, + "titleSize": { + "label": "Widgetens titelstorlek (px)" }, "layout": { "label": "Layout", "option": { - "row": { - "label": "Horisontell" - }, - "column": { - "label": "Vertikal" - }, - "grid": { - "label": "Rutnät" + "adaptive": { + "label": "Adaptiv" }, "gridHorizontal": { "label": "Horisontellt rutnät" + }, + "icons": { + "label": "Ikoner" + } + } + }, + "variant": { + "label": "Utseende", + "option": { + "soft": { + "label": "Mjuk" + }, + "filled": { + "label": "Fylld" + }, + "outline": { + "label": "Kontur" + }, + "plain": { + "label": "Oformaterad" + } + } + }, + "spacing": { + "label": "Kortavstånd", + "option": { + "xs": { + "label": "Extra liten" + }, + "sm": { + "label": "Liten" + }, + "md": { + "label": "Mellan" + }, + "lg": { + "label": "Stor" + }, + "xl": { + "label": "Extra stor" } } }, @@ -1581,17 +2325,28 @@ "hideHostname": { "label": "Dölj värdnamn" }, - "openNewTab": { - "label": "Öppna i en ny flik" - }, "withBorder": { "label": "Visa kantlinje" }, + "grow": { + "label": "Expandera kort för att fylla rad" + }, + "customUrls": { + "label": "Anpassade länkar" + }, "items": { "label": "Bokmärken", - "add": "Addera bokmärke" + "remove": "Ta bort bokmärke", + "apps": { + "label": "Lägg till bokmärken", + "description": "Klistra in URL:er eller hitta befintliga appar. Dra bokmärkena nedan för att ändra ordning på dem.", + "placeholder": "Klistra in webbadresser eller sök Appar", + "addUrl": "Lägg till denna URL", + "hint": "Tryck på Enter för att lägga till en URL. Klistra in kommaseparerade eller en-per-line-URL:er för att lägga till flera." + } } - } + }, + "empty": "Lägg till en URL eller app i widgetinställningarna" }, "archiveTeamWarrior": { "name": "ArchiveTeam Warrior", @@ -1600,33 +2355,61 @@ "showBroadcastMessage": { "label": "Visa sändningsmeddelanden" } + }, + "noProjectSelected": "Inget projekt valt", + "runnerStatus": "Löpare: {status}", + "projectId": "Projekt: {id}", + "sessionReceived": "Sessionen mottagen: {value}", + "sessionSent": "Session skickad: {value}", + "sessionId": "Session: {id}", + "startedAt": "Startade {date}", + "emptyItems": "Inga aktiva eller senaste jobb i denna ögonblicksbild", + "metric": { + "running": "Körs", + "completed": "Klar", + "failed": "Misslyckades", + "canceled": "Avbruten", + "download": "Hämta", + "upload": "Ladda upp" + }, + "status": { + "running": "Körs", + "completed": "Slutförd", + "failed": "Misslyckades", + "canceled": "Avbruten", + "stopped": "Stoppad", + "idle": "Inaktiv", + "unknown": "Okänt" + } + }, + "wud": { + "name": "Vad är Upp Docker", + "description": "Visa hur många bevakade behållare som har uppdateringar tillgängliga.", + "title": "Vad är Upp Docker", + "monitored": "Övervakad", + "updatesAvailable": "{count, plural, one {# uppdatering tillgänglig} other {# uppdateringar tillgängliga}}", + "updateAvailable": "Uppdatering tillgänglig", + "openReleaseNotes": "Öppna versionsfakta", + "option": { + "showRing": { + "label": "Visa uppdateringsring" + }, + "showUpdateList": { + "label": "Visa uppdateringslista för behållare", + "description": "Listar varje övervakad behållare som har en bild uppdatering tillgänglig" + } } }, "dnsHoleSummary": { "name": "DNS Hole-sammanfattning", "description": "Visar en sammanfattning av din DNS Hole", "option": { - "layout": { - "label": "Layout", - "option": { - "row": { - "label": "Horisontell" - }, - "column": { - "label": "Vertikal" - }, - "grid": { - "label": "Rutnät" - } - } - }, "usePiHoleColors": { "label": "Använd Pi-Hole-färger" } }, "error": { - "internalServerError": "Kunde inte hämta DNS Hole-sammanfattningen", - "integrationsDisconnected": "Inga data tillgängliga, alla integrationer är frånkopplade" + "internalServerError": "Kunde inte hämta DNS Hole-sammanfattningen" }, "data": { "adsBlockedToday": "Blockerade idag", @@ -1634,32 +2417,24 @@ "dnsQueriesToday": "Förfrågningar idag", "domainsBeingBlocked": "Domäner på blockeringslistan" }, - "domainsTooltip": "På grund av flera integrationer kan Homarr inte beräkna det exakta antalet blockerade domäner" + "domainsTooltip": "På grund av flera integrationer kan Homarr inte beräkna det exakta antalet blockerade domäner", + "status": { + "enabled": "Aktiverad", + "disabled": "Inaktiverad", + "unknown": "Okänt" + } }, "dnsHoleControls": { "name": "DNS Hole-kontroller", "description": "Styr PiHole eller AdGuard från din tavla", "option": { - "layout": { - "label": "Layout", - "option": { - "row": { - "label": "Horisontell" - }, - "column": { - "label": "Vertikal" - }, - "grid": { - "label": "Rutnät" - } - } - }, "showToggleAllButtons": { "label": "Visa knappar för att växla alla" } }, "error": { - "internalServerError": "Kunde inte styra DNS Hole" + "internalServerError": "Kunde inte styra DNS Hole", + "bulkActionsFailed": "{count, plural, one {# åtgärd misslyckades} other {# åtgärder misslyckades}}" }, "controls": { "enableAll": "Aktivera alla", @@ -1670,8 +2445,6 @@ "disabled": "Inaktiverad", "processing": "Bearbetar", "disconnected": "Frånkopplad", - "hours": "Timmar", - "minutes": "Minuter", "unlimited": "Lämna tomt för obegränsat" } }, @@ -1683,16 +2456,10 @@ "label": "Anpassad titel/stadvisning", "description": "Visa en anpassad titel eller namnet på staden/landet ovanför klockan." }, - "customTitle": { - "label": "Titel" - }, "is24HourFormat": { "label": "24-timmarsformat", "description": "Använd 24-timmarsformat i stället för 12-timmarsformat" }, - "showSeconds": { - "label": "Visa sekunder" - }, "useCustomTimezone": { "label": "Använd en fast tidszon" }, @@ -1711,29 +2478,295 @@ "label": "Anpassat tidsformat", "description": "Använd ISO 8601 för att formatera tiden (detta åsidosätter andra alternativ)" }, - "customDateFormat": { - "label": "Anpassat datumformat", - "description": "Använd ISO 8601 för att formatera datumet (detta åsidosätter andra alternativ)" - }, "showWeather": { "label": "Visa väder", "description": "Visa en liten animerad väderikon och temperatur i kortets hörn" }, - "weatherLocation": { - "label": "Väderplats" - }, "isWeatherFormatFahrenheit": { "label": "Använd Fahrenheit" + }, + "animateWeatherIcon": { + "label": "Animera väder-ikon", + "description": "Animera väderikonen. Inaktiverad som standard och inaktiveras alltid när nedsatt rörelse begärs." + }, + "colorWeatherByDayNight": { + "label": "Färg väder per dag/natt", + "description": "Färga på väderikonen och temperaturen med en dagfärg eller en nattfärg, baserat på om det är för närvarande dag eller natt på den valda platsen." + }, + "dayWeatherColor": { + "label": "Dag färg" + }, + "nightWeatherColor": { + "label": "Natt färg" + }, + "worldClockCities": { + "label": "Världsklocka städer", + "description": "Lägg till och beställ upp till sex städer för avancerad vy." } + }, + "timezoneList": { + "timezone": "Tidszon", + "cityLabel": "Ort etikett", + "searchPlaceholder": "Sök tidszoner", + "noResults": "Inga tidszoner hittades", + "unsupportedOption": "Stöds inte: {timeZone}", + "add": "Lägg till stad", + "remove": "Ta bort {city}", + "reorder": "Ordna om {city}", + "limit": "{count} av {maximum} städer konfigurerade" + }, + "worldClock": { + "primary": "Primär klocka", + "local": "Lokal tid", + "today": "Idag", + "tomorrow": "Imorgon", + "yesterday": "Igår", + "noSecondaryCities": "Lägg till städer i widgetalternativ för att jämföra dem här.", + "unsupportedPrimaryTitle": "Primär tidszon är inte tillgänglig", + "unsupportedPrimary": "{timeZone} stöds inte i denna webbläsare. Visar UTC som en tydligt markerad reservation.", + "unsupportedTimeZone": "Tidszonen stöds inte: {timeZone}", + "accessibleTime": "{city}: {time}, {date}, {timeZone}", + "advancedLabel": "Avancerad världsklocka", + "cities": "Världsklockor", + "cityCount": "{count} timezones", + "timeBarLabel": "Tidsfristen dygnet runt för {city}", + "dayProgress": "{percent}% förflutit · {hours}h {minutes}m kvar", + "phaseLegend": "Time-of-day legend", + "tick": { + "midnight": "00", + "morning": "06", + "noon": "12", + "evening": "18", + "end": "24" + }, + "phaseRange": { + "night": "00–05 · 21–24", + "dawn": "05–08", + "day": "08–18", + "dusk": "18–21" + }, + "phase": { + "night": "Natt", + "dawn": "Gryning", + "day": "Dag", + "dusk": "Skymning" + } + } + }, + "airQuality": { + "name": "Luftkvalitet & UV", + "description": "Visar luftkvalitet, ultraviolett index, föroreningar och pollen för en plats.", + "option": { + "location": { + "label": "Plats för luftkvalitet" + }, + "aqiStandard": { + "label": "AQI standard", + "options": { + "auto": "Automatisk för språk", + "european": "Europeisk AQI", + "us": "US AQI" + } + }, + "showUv": { + "label": "Visa UV-index" + }, + "showPollutants": { + "label": "Visa halter av föroreningar" + }, + "showPollen": { + "label": "Visa pollenkoncentrationer" + } + }, + "category": { + "good": "Bra", + "fair": "Rättvis", + "moderate": "Måttlig", + "unhealthySensitive": "Ohälsosamt för känsliga grupper", + "unhealthy": "Ej hälsosam", + "poor": "Dålig", + "veryPoor": "Mycket dålig", + "veryUnhealthy": "Mycket ohälsosamt", + "extremelyPoor": "Extremt dålig", + "hazardous": "Farligt", + "unknown": "Ingen AQI läser" + }, + "uv": { + "label": "UV-index", + "category": { + "low": "Låg", + "moderate": "Måttlig", + "high": "Hög", + "veryHigh": "Mycket hög", + "extreme": "Extrem", + "unknown": "Ingen läsning" + } + }, + "dominantPollutant": "Dominant pollutant", + "aqiLabel": "AQI", + "strongestPollen": "Högsta pollen", + "unit": { + "concentration": "{value} μg/m3", + "pollen": "{value} korn/m3" + }, + "pollutant": { + "pm2_5": "PM2.5", + "pm10": "PM10", + "ozone": "Ozon", + "nitrogenDioxide": "Kvävedioxid", + "sulphurDioxide": "Sulphur dioxide", + "carbonMonoxide": "Kolmonoxid" + }, + "pollen": { + "alder": "Alder", + "birch": "Björk", + "grass": "Gräs", + "mugwort": "Muggorm", + "olive": "Oliv", + "ragweed": "Ragweed" + }, + "compact": { + "sixHourTrend": "AQI trend för de kommande sex timmarna" + }, + "advanced": { + "observedAt": "Uppdaterad på {time}", + "next24Hours": "Nästa 24 timmar", + "pollutants": "Förorenande koncentrationer", + "pollen": "Pollen koncentrationer", + "sevenDayForecast": "7-dagars maximal prognos", + "aqiValue": "AQI {value}", + "uvValue": "UV {value}", + "uvShort": "UV {value}", + "noForecast": "Inga prognosdata tillgängliga" + } + }, + "countdown": { + "name": "Nedräkningar", + "description": "Spårar kommande händelser och återkommande årsdagar.", + "option": { + "events": { + "label": "Händelser", + "description": "Lägg till och beställ upp till 20 engångs- eller årliga nedräkningar. Datum anges i vald tidszon." + }, + "showProgress": { + "label": "Visa framsteg" + }, + "showSeconds": { + "label": "Visa sekunder", + "description": "Håll sekunder synliga för varje kommande händelse." + } + }, + "dateTimeEventList": { + "newEvent": "Ny händelse", + "add": "Lägg till händelse", + "remove": "Ta bort {event}", + "reorder": "Ordna om {event}", + "eventLabel": "Händelse etikett", + "timezone": "Tidszon", + "unsupportedOption": "Stöds inte: {timeZone}", + "recurrence": "Upprepningar", + "recurrenceOption": { + "none": "Upprepar inte", + "yearly": "Varje år" + }, + "target": "Händelse datum och tid", + "trackProgress": "Spåra framsteg från ett startdatum", + "start": "Förloppets startdatum och tid", + "confirmDateTime": "Bekräfta datum och tid", + "limit": "{count} av {maximum} händelser konfigurerade" + }, + "empty": { + "title": "Inga nedräkningar ännu", + "description": "Lägg till en händelse i widget-alternativ för att börja räkna ner." + }, + "completed": "Slutförd", + "yearly": "Årligen", + "progress": "Händelse framsteg", + "upcoming": "Kommande", + "completedEvents": "Avslutade händelser", + "invalid": { + "title": "Vissa händelser kan inte visas", + "description": "{count, plural, one {En händelse har ett ogiltigt datum eller ej stödd tidszon.} other {# händelser har ett ogiltigt datum eller ej stödd tidszon.}}", + "value": "Unavailable" + }, + "alert": { + "notifications": "Webbläsarens aviseringar", + "permissionDenied": "Aviseringar är blockerade i den här webbläsaren.", + "reached": "Nedräkningen har nått sitt mål." + } + }, + "timer": { + "name": "Timer / Pomodoro", + "description": "Kör en enkel timer eller en konfigurerbar Pomodoro sekvens.", + "option": { + "mode": { + "label": "Läge", + "options": { + "timer": "Timer", + "pomodoro": "Pomodoro" + } + }, + "timerMinutes": { + "label": "Timer minuter" + }, + "focusMinutes": { + "label": "Fokusera minuter" + }, + "shortBreakMinutes": { + "label": "Kort paus minuter" + }, + "longBreakMinutes": { + "label": "Långa pausminuter" + }, + "sessionsBeforeLongBreak": { + "label": "Fokusera sessioner innan en lång paus" + }, + "autoStartBreaks": { + "label": "Starta pauser automatiskt" + }, + "autoStartFocus": { + "label": "Starta fokussessioner automatiskt" + } + }, + "phase": { + "timer": "Timer", + "focus": "Fokus", + "shortBreak": "Kort paus", + "longBreak": "Lång paus" + }, + "action": { + "start": "Starta", + "pause": "Pausa", + "reset": "Reset" + }, + "attention": { + "timerComplete": "Timer complete", + "phaseReady": "{phase} redo" + }, + "progress": "Timer framsteg: {progress}%", + "compact": { + "completedFocus": "{count, plural, =0 {Inga fokussessioner slutförda} one {# fokussessionen slutförd} other {# fokussessioner slutförda}}" + }, + "alert": { + "title": "Timer complete", + "completed": "{phase} slutförd." + }, + "advanced": { + "sequence": "Pomodoro sequence", + "focusSession": "Fokusera {session}", + "settings": "Permanenta inställningar", + "settingsHint": "Använd widget-snabbmenyn för att redigera dessa tavelinställningar.", + "localAlerts": "Lokala varningar", + "notifications": "Webbläsarens aviseringar", + "sound": "Timerljud", + "localAlertsHint": "Timerljud är aktiverade som standard. Ljud och aviseringar gäller endast för denna widget i denna webbläsare.", + "notificationsDenied": "Aviseringar är blockerade i den här webbläsaren." } }, "minecraftServerStatus": { "name": "Minecraft-serverstatus", "description": "Visar statusen för en Minecraft-server", "option": { - "title": { - "label": "Titel" - }, "domain": { "label": "Serveradress" }, @@ -1753,11 +2786,21 @@ "noStation": "Ingen station vald", "option": { "baseUrl": { - "label": "Search.ch-URL" + "label": "Search.ch-URL", + "description": "Anpassade URL:er måste lösas till en offentlig IP-adress. Privata och lokala värdar avvisas." }, "station": { - "label": "Station" + "label": "Station", + "placeholder": "Sök efter en station" } + }, + "error": { + "customSourceUnavailable": "Tidtabellen källan är inte tillgänglig. Kontrollera att dess URL löser sig till en publik IP-adress.", + "stationSearch": "Det gick inte att söka på stationer. Kontrollera den anpassade URL:en och din forumåtkomst." + }, + "warning": { + "stale": "Tidtabellen kunde inte uppdateras. Visar avgångar senast uppdaterade på {time}.", + "staleCompact": "Skala data" } }, "notebook": { @@ -1789,6 +2832,9 @@ "directionRtl": "Ställ in textriktningen från höger till vänster", "blockquote": "Blockcitat", "horizontalLine": "Horisontell linje", + "details": "Växla kollapsbart avsnitt", + "expandDetails": "Expandera kollapsbart avsnitt", + "collapseDetails": "Komprimera kollapsbart avsnitt", "bulletList": "Punktlista", "orderedList": "Sorterad lista", "checkList": "Checklista", @@ -1797,16 +2843,20 @@ "link": "Länk", "unlink": "Ta bort länk", "image": "Infoga en bild", - "addTable": "Lägg till tabell", + "insertTable": "Infoga tabell", + "insertTableSize": "Infoga {columns} × {rows} tabell", "deleteTable": "Ta bort tabell", "colorCell": "Färg på cell", - "mergeCell": "Växla sammanslagning av celler", + "mergeCells": "Slå samman celler", + "splitCell": "Delad cell", "addColumnLeft": "Lägg till kolumn före", "addColumnRight": "Lägg till kolumn efter", "deleteColumn": "Radera kolumn", "addRowTop": "Lägg till rad före", "addRowBelow": "Lägg till rad efter", - "deleteRow": "Radera rad" + "deleteRow": "Radera rad", + "toggleHeaderRow": "Växla sidhuvudsrad", + "toggleHeaderColumn": "Växla rubrikkolumn" }, "align": { "left": "Vänster", @@ -1817,8 +2867,6 @@ "clearColor": "Ta bort färg", "source": "Källa", "widthPlaceholder": "Värde i % eller pixlar", - "columns": "Kolumner", - "rows": "Rader", "width": "Bredd", "height": "Höjd" }, @@ -1830,7 +2878,9 @@ "discard": "Kasta ändringar", "keepEditing": "Fortsätt redigera" } - } + }, + "saveFailed": "Det gick inte att spara anteckningen", + "documentStats": "{words, plural, one {# ord} other {# ord}} · {characters, plural, one {# tecken} other {# tecken}}" }, "anchorNote": { "name": "Anchor-anteckning", @@ -1839,9 +2889,6 @@ "noteId": { "label": "Anteckning" }, - "showTitle": { - "label": "Visa titel" - }, "showUpdatedAt": { "label": "Visa senast uppdaterad" } @@ -1851,14 +2898,20 @@ "notFound": "Anteckningen hittades inte", "noNotes": "Inga anteckningar hittades", "integrationRequired": "Välj först en Anchor-integration", - "updatedAt": "Uppdaterad {date}", "untitled": "Utan titel", - "edit": "Redigera", - "save": "Spara", - "cancel": "Avbryt", "readOnlyViewer": "Du har visningsåtkomst till den här anteckningen. Redigering är inaktiverad.", "saveForbidden": "Du saknar behörighet att redigera den här anteckningen.", - "saveFailed": "Det gick inte att spara anteckningen. Försök igen." + "saveFailed": "Det gick inte att spara anteckningen. Försök igen.", + "createdAt": "Skapad {date}", + "permission": { + "owner": "Ägare", + "editor": "Redigerare", + "viewer": "Läsare" + }, + "status": { + "pinned": "Klistrad", + "archived": "Arkiverad" + } }, "iframe": { "name": "iFrame", @@ -1917,6 +2970,25 @@ "clickable": { "label": "Klickbar" } + }, + "state": { + "on": "På", + "off": "Av", + "unavailable": "Unavailable", + "unknown": "Okänt" + }, + "advanced": { + "entityId": "Entity-ID: {id}", + "lastChanged": "Ändrat {date}", + "attribute": { + "unit": "Enhet", + "deviceClass": "Enhetsklass", + "icon": "Ikon" + } + }, + "error": { + "loadFailed": "Det går inte att ladda enheten", + "toggleFailed": "Det går inte att uppdatera enheten" } }, "smartHome-executeAutomation": { @@ -1932,11 +3004,31 @@ }, "spotlightAction": { "run": "Kör {name}" + }, + "advanced": { + "lastExecuted": "Senaste körning på {time}", + "automationId": "Automations-ID: {id}", + "ready": "Redo att köra", + "noPermission": "Ingen behörighet att köra denna automatisering" + }, + "status": { + "running": "Kör automatisering", + "success": "Automatisering slutförd" + }, + "error": { + "executeFailed": "Kunde inte köra automatisering" } }, "stockPrice": { "name": "Aktiekurs", "description": "Visar det aktuella aktiepriset för ett företag", + "advanced": { + "currentPrice": "Nuvarande pris", + "previousClose": "Stäng tidigare", + "changePercentage": "Ändra (%)", + "minimum": "Minsta", + "maximum": "Maximal" + }, "option": { "stock": { "label": "Aktiesymbol" @@ -2007,6 +3099,10 @@ "label": "1 månad" } } + }, + "showDetails": { + "label": "Visa detaljer", + "description": "Visa namn, förändring och tidsintervall i den kompakta vyn. Stäng av för bara symbolen och priset." } } }, @@ -2034,6 +3130,13 @@ "showUnmonitored": { "label": "Visa även det som ej monitoreras" } + }, + "advanced": { + "previousMonth": "Visa föregående månad", + "nextMonth": "Visa nästa månad", + "eventCount": "{count, plural, one {# händelse} other {# händelser}}", + "loading": "Laddar kalenderhändelser...", + "noEvents": "Inga händelser i denna månad" } }, "weather": { @@ -2046,16 +3149,18 @@ "disableTemperatureDecimals": { "label": "Inaktivera temperaturdecimaler" }, + "animateIcons": { + "label": "Animera väder-ikoner" + }, + "showHumidity": { + "label": "Visa fuktighet" + }, "showCurrentWindSpeed": { - "label": "Visa aktuell vindhastighet", - "description": "Endast för aktuellt väder" + "label": "Visa aktuell vindhastighet" }, "useImperialSpeed": { "label": "Använd mph för vindhastighet" }, - "location": { - "label": "Plats för väder" - }, "showCity": { "label": "Visa stad" }, @@ -2065,13 +3170,10 @@ "forecastDayCount": { "label": "Antal prognosdagar", "description": "När widgeten inte är tillräckligt bred visas färre dagar" - }, - "dateFormat": { - "label": "Datumformat", - "description": "Hur datumet ska se ut" } }, "currentWindSpeed": "{currentWindSpeed} {unit}", + "disabled": "Väderdata är inte tillgänglig eftersom utgående anslutningar är inaktiverade", "dailyForecast": { "sunrise": "Soluppgång", "sunset": "Solnedgång", @@ -2094,6 +3196,47 @@ "thunderstorm": "Åska", "thunderstormWithHail": "Åskväder med hagel", "unknown": "Okänt" + }, + "details": "Visa väderdetaljer", + "detailsFor": "Visa väderdetaljer för {date}", + "advanced": { + "forecast": "7-dagars prognos", + "hourlyForecast": "Nästa 24 timmar", + "day": "Dag", + "time": "Tid", + "conditions": "Villkor", + "temperature": "Temperatur", + "feelsLike": "Känns som {temperature}", + "feelsLikeLabel": "Känns som", + "feelsLikeRange": "Känns som: {maximum} / {minimum}", + "highLow": "Hög {maximum} · låg {minimum}", + "observedAt": "Uppdaterad på {time}", + "humidity": "Luftfuktighet", + "averageHumidity": "Genomsnittlig luftfuktighet: {humidity}%", + "currentHumidity": "Aktuell luftfuktighet", + "wind": "Vind / byar ({unit})", + "currentWind": "Aktuell vind / byar", + "windValue": "{speed} / {gusts} {unit}", + "windDetail": "Max vind / byar: {speed} / {gusts} {unit}", + "nextHourPrecipitation": "Nederbörd nästa timme", + "precipitationChance": "Nederbördschans", + "precipitationValue": "{probability}% · {amount} mm", + "precipitationDetail": "Nederbörd: {probability}% · {amount} mm", + "todayUv": "Dagens max UV-index", + "uvIndex": "Max UV-index: {value}", + "daylight": "Dagsljus: {duration}", + "hourlyTooltip": "Känns som {feelsLike}{temperatureUnit} · {amount} mm · {humidity}% luftfuktighet · {speed} {speedUnit} vind", + "hourlyTooltipWithoutHumidity": "Känns som {feelsLike}{temperatureUnit} · {amount} mm · {speed} {speedUnit} vind", + "detailLabel": { + "feelsLike": "Känns som", + "precipitation": "Nederbörd", + "humidity": "Genomsnittlig fuktighet", + "wind": "Max vind / byar", + "uv": "Max UV-index", + "daylight": "Daylight" + }, + "sun": "Soluppgång / solnedgång", + "noForecast": "Inga prognosdata tillgängliga" } }, "indexerManager": { @@ -2106,8 +3249,15 @@ }, "title": "Hantering av index", "testAll": "Testa alla", + "status": { + "healthy": "Hälsosam", + "unhealthy": "Ej hälsosam", + "disabled": "Inaktiverad", + "unknown": "Hälsa otillgänglig" + }, "error": { - "internalServerError": "Kunde inte hämta indexerarstatus" + "internalServerError": "Kunde inte hämta indexerarstatus", + "testAll": "Indexerartestet misslyckades. Försök igen." } }, "healthMonitoring": { @@ -2136,11 +3286,6 @@ "fileSystem": { "label": "Visa information om filsystemet" }, - "visibleStorageVolumes": { - "label": "Synliga lagringsvolymer", - "description": "Endast tillgängligt när alla valda integreringar är Synology. Lämna tomt för att visa alla upptäckta lagringsvolymer.", - "placeholder": "Välj lagringsvolymer" - }, "defaultTab": { "label": "Standardflik" }, @@ -2163,17 +3308,27 @@ "minutes": "{count} minuter", "used": "Använt", "available": "Tillgänglig", - "lastSeen": "Senaste statusuppdatering: {lastSeen}" + "lastSeen": "Senaste statusuppdatering: {lastSeen}", + "updatesAvailable": "{count, plural, one {# uppdatering tillgänglig} other {# uppdateringar tillgängliga}}", + "rebootRequired": "Omstart krävs", + "rebootNotRequired": "Ingen omstart krävs" + }, + "smartStatus": { + "attributesWithinThresholds": "SMART: attribut inom tröskelvärden", + "attributesFailed": "SMART: {attributes} misslyckades", + "noCriticalWarning": "SMART: Ingen varning rapporteras av SSD", + "criticalWarning": "SMART: kritisk varning rapporteras av SSD" + }, + "gauge": { + "cpuUsage": "CPU användning", + "cpuTemperature": "CPU temperatur", + "memoryUsage": "Minnesanvändning", + "gpuUsage": "{name} GPU-användning" }, - "memory": {}, "error": { "internalServerError": "Kunde inte hämta hälsostatus" }, "cluster": { - "summary": { - "cpu": "CPU", - "memory": "RAM" - }, "resource": { "node": { "name": "Noder" @@ -2209,8 +3364,6 @@ "table": { "header": { "name": "Namn", - "cpu": "CPU", - "memory": "RAM", "node": "Nod" } } @@ -2220,33 +3373,29 @@ "name": "Docker-statistik", "description": "Statistik för dina containrar (Denna widget kan endast läggas till med administratörsbehörighet)", "option": { - "columns": { - "label": "Kolumner att visa" + "endpointIds": { + "label": "Docker miljöer", + "description": "Lämna tomt för att visa behållare från alla Docker-miljöer", + "placeholder": "Alla Docker-miljöer" }, - "enableRowSorting": { - "label": "Aktivera sortering av poster" + "containerFilter": { + "label": "Behållare att filtrera" + }, + "filterIsWhitelist": { + "label": "Filtrera som vitlista" }, "defaultSort": { - "label": "Kolumn som används för standardsortering", "option": { "name": "Namn", "state": "Status", "cpuUsage": "CPU-användning", "memoryUsage": "Minnesanvändning" } - }, - "descendingDefaultSort": { - "label": "Invertera sortering" - }, - "columnOrder": { - "label": "Kolumnordning" - }, - "columnWidths": { - "label": "Kolumnbredder" } }, "error": { "internalServerError": "Kunde inte hämta containerstatistik", + "endpointsUnavailable": "Docker slutpunkter är inte tillgängliga", "layoutSaveTitle": "Tabellayouten sparades inte", "layoutSaveMessage": "Docker-tabellayouten kunde inte sparas. Försök flytta eller ändra storlek på kolumnen igen." }, @@ -2255,7 +3404,6 @@ } }, "coolify": { - "name": "Coolify", "description": "Översikt över din Coolify-instans med servrar och applikationer", "option": { "showServers": { @@ -2281,17 +3429,49 @@ "internalServerError": "Kunde inte hämta Coolify-data" }, "server": { - "buildServer": "Bygg" + "buildServer": "Bygg", + "resourceCounts": "{applications, plural, one {# app} other {# apps}} / {services, plural, one {# service} other {# services}}", + "reachability": "Nöjbarhet", + "usability": "Användbarhet" + }, + "source": { + "url": "Källa: {url}", + "unavailable": "{source}: unavailable" }, "instances": { "title": "Instanser" + }, + "action": { + "openResource": "Öppna {name}", + "openLogs": "Öppna {name} loggar", + "showIp": "Visa IP-adress", + "hideIp": "Dölj IP-adress" + }, + "status": { + "running": "Körs", + "stopped": "Stoppad", + "exited": "Avslutad", + "starting": "Startar", + "restarting": "Startar om", + "unknown": "Okänt", + "online": "Online", + "offline": "Offline", + "reachable": "Oåtkomlig", + "unreachable": "Onåbar", + "usable": "Användbar", + "unusable": "Oanvändbar" } }, "vpn": { "name": "VPN", "description": "Översikt över dina VPN-anslutningar", "serviceUnavailable": "VPN ej tillgängligt", - "option": {} + "status": { + "running": "Körs", + "notRunning": "Kör inte", + "unavailable": "Unavailable", + "vpn": "VPN: {status}" + } }, "ups": { "name": "UPS", @@ -2318,14 +3498,19 @@ "runtime": "Driftstid", "load": "Belastning", "input": "Ingång", - "output": "Utgång" + "output": "Utgång", + "batteryVoltage": "Batteri spänning", + "power": "Ström", + "temperature": "Temperatur", + "manufacturer": "Tillverkare", + "model": "Modell", + "serial": "Seriell" }, "error": { "internalServerError": "Kunde inte hämta UPS-data" } }, "tracearr": { - "name": "Tracearr", "description": "Förbättrad övervakning av medieservrar med detaljerad information om strömmar och omkodning", "option": { "showStreams": { @@ -2413,10 +3598,7 @@ "label": "Händelse", "description": "Visa totala förekomster av en specifik händelse", "placeholder": "Välj en händelse", - "loading": "Laddar händelser...", - "noEvents": "Inga händelser hittades", - "none": "Ingen händelse", - "configureWebsiteFirst": "Välj en webbplats först för att ladda händelser" + "none": "Ingen händelse" }, "chartType": { "label": "Diagramtyp", @@ -2447,26 +3629,21 @@ "eventNames": { "label": "Händelser", "description": "Välj en eller flera händelser att visa", - "placeholder": "Välj händelser...", - "loading": "Laddar händelser...", - "noEvents": "Inga händelser hittades", - "configureWebsiteFirst": "Välj en webbplats först för att ladda händelser" + "placeholder": "Välj händelser..." }, "topCount": { "label": "Objekt att visa", "description": "Antal toppobjekt att visa (max 500)" + }, + "events": { + "loading": "Laddar händelser...", + "noEvents": "Inga händelser hittades", + "configureWebsiteFirst": "Välj en webbplats först för att läsa in händelser" } }, "event": { - "occurrences": "händelser", "label": "händelser" }, - "topPages": { - "direct": "Direkt" - }, - "topReferrers": { - "direct": "Direkt" - }, "events": { "selectPrompt": "Välj händelser att visa i diagram" }, @@ -2475,6 +3652,9 @@ "noWebsite": "Ingen webbplats konfigurerad", "noData": "Ingen data tillgänglig", "internalServerError": "Kunde inte hämta Umami-data" + }, + "top": { + "direct": "Direkt" } }, "common": { @@ -2502,7 +3682,8 @@ }, "integration": { "noData": "Ingen integration hittades", - "description": "Klicka på för att skapa en ny integration" + "description": "Klicka på för att skapa en ny integration", + "manage": "Hantera integrationer" }, "app": { "noData": "Ingen app hittades", @@ -2513,7 +3694,61 @@ "noIntegration": "Ingen integration har valts", "noData": "Inga integrationsdata tillgängliga" }, - "option": {} + "integrationDisconnected": "Inga data tillgängliga, alla integreringar frånkopplade", + "updatedAt": "Uppdaterad {date}", + "title": { + "label": "Titel" + }, + "openInNewTab": { + "label": "Öppna i en ny flik" + }, + "showTitle": { + "label": "Visa titel" + }, + "weatherLocation": { + "label": "Plats för väder" + }, + "layout": { + "label": "Layout", + "option": { + "horizontal": "Horisontell", + "vertical": "Vertikal", + "grid": "Rutnät" + } + }, + "select": { + "loading": "Laddar...", + "loadError": "Det gick inte att ladda alternativ" + }, + "dateFormat": { + "label": "Datumformat", + "description": "Hur datumet ska se ut" + }, + "visibleStorageVolumes": { + "label": "Synliga lagringsvolymer", + "description": "Endast tillgängligt när varje vald integration är OpenMediaVault eller Synology. Lämna tomt för att visa alla upptäckta lagringsvolymer.", + "placeholder": "Välj lagringsvolymer" + }, + "tableOptions": { + "columns": { + "label": "Kolumner att visa" + }, + "columnOrder": { + "label": "Kolumn ordning" + }, + "columnWidths": { + "label": "Kolumnens bredder" + }, + "enableRowSorting": { + "label": "Aktivera sortering av objekt" + }, + "defaultSort": { + "label": "Kolumn som används för sortering som standard" + }, + "invertSorting": { + "label": "Invertera sortering" + } + } }, "video": { "name": "Videoström", @@ -2572,6 +3807,7 @@ "transcoding": "Omkodning", "paused": "Pausad", "remaining": "{minutes} min kvar", + "seasonEpisode": "S{season} E{episode}", "metadata": { "title": "Nördstatistik", "video": { @@ -2589,11 +3825,16 @@ "resolution": "Upplösning", "target": "Målkodek" } - } + }, + "unknownUser": "Okänd användare" + }, + "summary": { + "sessions": "{count, plural, one {# session} other {# sessioner}}", + "playing": "{count} spelar", + "transcoding": "{count} omkodning" } }, "paperlessNgx": { - "name": "Paperless-ngx", "description": "Översikt över ditt Paperless-ngx-dokumentarkiv", "documentsTotal": "Totalt antal dokument", "documentsInbox": "Inkorg", @@ -2638,7 +3879,6 @@ } }, "patchmon": { - "name": "PatchMon", "description": "Översikt över värdarnas korrigeringsstatus från PatchMon", "title": "PatchMon-statistik", "totalHosts": "Totalt antal värdar", @@ -2705,36 +3945,30 @@ "description": "Jämför antalet värdar som behöver uppdateringar som ett absolut värde eller en procentandel av det totala antalet värdar" }, "hostsNeedingUpdatesWarningAt": { - "label": "Varningströskel för behöver uppdateringar", - "description": "Visa gult när värdet når den här tröskeln" + "label": "Varningströskel för behöver uppdateringar" }, "hostsNeedingUpdatesCriticalAt": { - "label": "Kritisk tröskel för behöver uppdateringar", - "description": "Visa rött när värdet når den här tröskeln" + "label": "Kritisk tröskel för behöver uppdateringar" }, "securityUpdatesThresholdMode": { "label": "Tröskelläge för säkerhetsuppdateringar", "description": "Jämför antalet säkerhetsuppdateringar som ett absolut värde eller en procentandel av det totala antalet värdar" }, "securityUpdatesWarningAt": { - "label": "Varningströskel för säkerhetsuppdateringar", - "description": "Visa gult när värdet når den här tröskeln" + "label": "Varningströskel för säkerhetsuppdateringar" }, "securityUpdatesCriticalAt": { - "label": "Kritisk tröskel för säkerhetsuppdateringar", - "description": "Visa rött när värdet når den här tröskeln" + "label": "Kritisk tröskel för säkerhetsuppdateringar" }, "hostsWithSecurityUpdatesThresholdMode": { "label": "Tröskelläge för värdar med säkerhetsuppdateringar", "description": "Jämför antalet värdar som ett absolut värde eller en procentandel av det totala antalet värdar" }, "hostsWithSecurityUpdatesWarningAt": { - "label": "Varningströskel för värdar med säkerhetsuppdateringar", - "description": "Visa gult när värdet når den här tröskeln" + "label": "Varningströskel för värdar med säkerhetsuppdateringar" }, "hostsWithSecurityUpdatesCriticalAt": { - "label": "Kritisk tröskel för värdar med säkerhetsuppdateringar", - "description": "Visa rött när värdet når den här tröskeln" + "label": "Kritisk tröskel för värdar med säkerhetsuppdateringar" }, "upToDateHostsThresholdMode": { "label": "Tröskelläge för uppdaterade värdar", @@ -2753,12 +3987,10 @@ "description": "Jämför antalet föråldrade paket som ett absolut värde eller en procentandel av det totala antalet värdar" }, "totalOutdatedPackagesWarningAt": { - "label": "Varningströskel för föråldrade paket", - "description": "Visa gult när värdet når den här tröskeln" + "label": "Varningströskel för föråldrade paket" }, "totalOutdatedPackagesCriticalAt": { - "label": "Kritisk tröskel för föråldrade paket", - "description": "Visa rött när värdet når den här tröskeln" + "label": "Kritisk tröskel för föråldrade paket" }, "showOsDistribution": { "label": "Visa OS-distribution", @@ -2789,6 +4021,14 @@ "bars": "Horisontella staplar", "donut": "Ringdiagram" } + }, + "threshold": { + "warningAt": { + "description": "Ange gul när värdet når denna tröskel" + }, + "criticalAt": { + "description": "Ange rött när värdet når denna tröskel" + } } }, "error": { @@ -2796,12 +4036,12 @@ } }, "bazarr": { - "name": "Bazarr", "description": "Översikt över saknade undertexter och hälsostatus från din Bazarr-instans", "episodes": "Saknade avsnitt", "movies": "Saknade filmer", "providers": "Leverantörsproblem", "status": "Hälsoproblem", + "announcements": "Meddelanden", "option": { "showMissingEpisodes": { "label": "Visa saknade avsnitt", @@ -2848,7 +4088,8 @@ "users": "Användare", "photos": "Foton", "videos": "Videor", - "storage": "Använd lagring" + "storage": "Använd lagring", + "albumLimit": "Största album (upp till {count} visas)" }, "immich-albumCarousel": { "name": "Immich-album", @@ -2872,24 +4113,21 @@ } }, "description": "Bildspel med foton från ett Immich-album eller hela ditt bibliotek", - "noPhotos": "Inga foton hittades" + "noPhotos": "Inga foton hittades", + "albumPhoto": "Album foto", + "actions": { + "previousPhoto": "Föregående foto", + "nextPhoto": "Nästa foto", + "pauseSlideshow": "Pause slideshow", + "resumeSlideshow": "Återuppta bildspel", + "toggleSlideshow": "Pausa eller återuppta bildspel", + "photo": "Foto {number}" + } }, "downloads": { "name": "Nedladdningsklient", "description": "Gör det möjligt att visa och hantera dina nedladdningar från både torrent- och Usenet-klienter.", "option": { - "columns": { - "label": "Kolumner att visa" - }, - "enableRowSorting": { - "label": "Aktivera sortering av objekt" - }, - "defaultSort": { - "label": "Kolumn som används för standardsortering" - }, - "descendingDefaultSort": { - "label": "Invertera sortering" - }, "showCompletedUsenet": { "label": "Visa Usenet-poster markerade som slutförda" }, @@ -2914,12 +4152,6 @@ "limitPerIntegration": { "label": "Begränsa poster per integration", "description": "Detta begränsar antalet poster som visas per integration, inte globalt" - }, - "columnOrder": { - "label": "Kolumnordning" - }, - "columnWidths": { - "label": "Kolumnbredder" } }, "errors": { @@ -2950,7 +4182,7 @@ "detailsTitle": "Aktuellt index i klienten" }, "id": { - "columnTitle": "ID", + "columnTitle": "Objekt-ID", "detailsTitle": "Objekt-ID" }, "integration": { @@ -3080,6 +4312,10 @@ "mediaRequests-requestList": { "name": "Lista över medieförfrågningar", "description": "Se en lista över alla medieförfrågningar från din installation av Overseerr- eller Jellyseerr", + "empty": { + "title": "Inga mediaförfrågningar ännu", + "description": "Sök efter en film eller show för att starta en begäran." + }, "option": { "linksTargetNewTab": { "label": "Öppna länkar i ny flik" @@ -3113,12 +4349,16 @@ "failed": "Misslyckad", "completed": "Slutförd" }, + "unknown": "Okänt", "toBeDetermined": "" }, "mediaRequests-requestStats": { "name": "Statistik för medieförfrågningar", "description": "Statistik över dina medieförfrågningar", - "option": {}, + "empty": { + "title": "Ingen aktivitet på begäran ännu", + "description": "Statistik kommer att visas efter den första mediebegäran." + }, "titles": { "stats": { "main": "Mediestatistik", @@ -3128,8 +4368,7 @@ "declined": "Redan avslagen", "available": "Redan tillgänglig", "tv": "TV-förfrågningar", - "movie": "Filmförfrågningar", - "total": "Totalt" + "movie": "Filmförfrågningar" }, "users": { "main": "Mest aktiva användare", @@ -3155,7 +4394,6 @@ }, "currentIndex": "{start}–{end} av {total}", "healthCheck": { - "title": "Hälsokontroll", "queued": "Placerad i kö", "status": { "healthy": "Hälsosam", @@ -3164,35 +4402,30 @@ }, "panel": { "statistics": { - "empty": "Tom", - "transcodes": "Omkodning", - "transcodesCount": "Omkodningar", - "healthChecksCount": "Hälsokontroller", "filesCount": "Filer", "savedSpace": "Sparat utrymme", - "healthChecks": "Hälsokontroller", "videoCodecs": "Kodekar", "videoContainers": "Containrar", "videoResolutions": "Upplösningar" }, "workers": { - "empty": "Tom", "table": { - "file": "Fil", "eta": "Beräknad sluttid", - "progress": "Förlopp", - "transcode": "Omkoda", - "healthCheck": "Hälsokontroll" + "progress": "Förlopp" } }, "queue": { - "empty": "Tom", "table": { - "file": "Fil", - "size": "Storlek", - "transcode": "Omkoda", - "healthCheck": "Hälsokontroll" + "size": "Storlek" } + }, + "common": { + "empty": "Tom", + "file": "Fil", + "healthCheck": "Hälsokontroll", + "transcode": "Omkoda", + "transcodes": "Omkodning", + "healthChecks": "Hälsokontroller" } } }, @@ -3216,7 +4449,8 @@ }, "type": { "movie": "Film", - "episode": "Avsnitt" + "episode": "Avsnitt", + "book": "Bok" }, "empty": { "missing": "Inga saknade objekt", @@ -3247,6 +4481,13 @@ "showPosterImage": { "label": "Visa affischbild" } + }, + "error": { + "allFeedsFailed": "Det gick inte att ladda RSS-flöden. Kontrollera flödets URLer och försök igen." + }, + "warning": { + "partial": "{count, plural, one {# RSS-flöde kunde inte laddas} other {# RSS-flöden kunde inte laddas}}", + "stale": "RSS-flöden kunde inte uppdateras. Visar tidigare laddade poster." } }, "releases": { @@ -3322,17 +4563,8 @@ "label": "Reguljärt uttryck" } }, - "edit": { - "label": "Ändra" - }, "editForm": { - "title": "Redigera arkiv", - "cancel": { - "label": "Avbryt" - }, - "confirm": { - "label": "Bekräfta" - } + "title": "Redigera arkiv" }, "importForm": { "title": "Importera från Docker" @@ -3349,8 +4581,7 @@ "label": "Leverantörstoken", "token": "Token", "configured": "Token konfigurerad", - "notConfigured": "Ingen token angiven", - "save": "Spara" + "notConfigured": "Ingen token angiven" } } }, @@ -3377,17 +4608,32 @@ "noProviderResponse": "Inget svar från leverantören", "unexpected": "Oväntat leverantörsfel" } - } + }, + "expandDetails": "Visa detaljer för {name}", + "collapseDetails": "Dölj detaljer för {name}" }, "networkControllerSummary": { - "option": {}, - "card": { - "vpn": { - "countConnected": "{count} anslutna" + "advanced": { + "updated": "Uppdaterad", + "metric": { + "latency": "Latens", + "ping": "Ping", + "uptime": "Drifttid", + "users": "Användare", + "guests": "Gäster" } }, + "card": { + "vpn": { + "countConnected": "{count, plural, one {# ansluten} other {# ansluten}}", + "label": "VPN" + }, + "wan": "WAN", + "web": "Webb", + "wifi": "Wi-Fi", + "lan": "LAN" + }, "error": { - "integrationsDisconnected": "Inga data tillgängliga, alla integrationer är frånkopplade", "unknownContentOption": "Okänt innehållsalternativ för widgeten med nätverkskontrollersammanfattning: " }, "name": "Sammanfattning av nätverkskontroller", @@ -3424,7 +4670,6 @@ } }, "error": { - "integrationsDisconnected": "Inga data tillgängliga, alla integrationer är frånkopplade", "unknownContentOption": "Okänt innehållsalternativ för widgeten med nätverksstatus: " }, "name": "Nätverksstatus", @@ -3454,7 +4699,6 @@ "versiontitle": "Versioner", "cputitle": "CPU-användning", "memorytitle": "Minnesanvändning", - "cpu": "CPU", "memory": "Minne", "interfaces": { "name": "namn", @@ -3462,6 +4706,16 @@ "recv": "Mottaget", "title": "Nätverksgränssnitt" } + }, + "empty": { + "noInterfaces": "Inget nätverksgränssnitt data ännu" + }, + "versionUnknown": "Okänd version", + "metricAccessible": "{metric}: {value}%, {status}", + "status": { + "normal": "Normal", + "warning": "Varning", + "critical": "Kritisk" } }, "notifications": { @@ -3471,8 +4725,21 @@ "option": { "hideLogos": { "label": "Dölj logotyper" + }, + "messageFormat": { + "label": "Formatet för meddelande", + "option": { + "auto": "Automatisk", + "plain": "Oformaterad text", + "markdown": "Markdown", + "html": "HTML" + } } - } + }, + "openService": "Öppna meddelandetjänst", + "deleteNotification": "Ta bort avisering från Gotify", + "deleteFailed": "Kunde inte ta bort avisering", + "deleteFailedMessage": "Meddelandet kunde inte raderas. Försök igen." }, "speedtestTracker": { "name": "Speedtest Tracker", @@ -3514,7 +4781,6 @@ } }, "uptimeKuma": { - "name": "Uptime Kuma", "description": "Övervaka drifttidsstatistik från din Uptime Kuma-statussida", "option": { "showAverageUptime": { @@ -3551,10 +4817,14 @@ }, "error": { "internalServerError": "Det gick inte att hämta drifttidsdata" + }, + "status": { + "up": "Totalt upp", + "down": "Nedladdningshastighet ", + "paused": "Pausad" } }, "traefik": { - "name": "Traefik", "description": "Översikt över Traefik-routrar, tjänster, middleware och ingångspunkter", "option": { "showTcp": { @@ -3575,7 +4845,6 @@ }, "resource": { "routers": "Routrar", - "services": "Tjänster", "middlewares": "Middleware" }, "status": { @@ -3585,7 +4854,20 @@ }, "error": { "internalServerError": "Det gick inte att hämta Traefik-data" - } + }, + "resourceType": { + "router": "Router", + "service": "Tjänst", + "middleware": "Middleware" + }, + "resourceStatus": { + "enabled": "Aktiverad", + "disabled": "Inaktiverad", + "warning": "Varning", + "error": "Fel", + "unknown": "Okänt" + }, + "failedEndpoint": "Misslyckades: {endpoint}" }, "audioStats": { "name": "Ljudstatistik", @@ -3651,9 +4933,7 @@ "label": "Synliga diagram", "description": "Välj de diagram som ska vara synliga.", "option": { - "cpu": "CPU", "memory": "Minne", - "gpu": "GPU", "network": "Nätverk" } }, @@ -3668,12 +4948,11 @@ } }, "card": { - "cpu": "CPU", "memory": "MINNE", - "gpu": "GPU", "network": "NÄT", "up": "UPP", - "down": "NER" + "down": "NER", + "memoryTooltip": "{used} / {available} ({percent}%)" } }, "systemDisks": { @@ -3699,151 +4978,88 @@ }, "showBackgroundBar": { "label": "Visa bakgrundsfält för användning" - }, - "visibleStorageVolumes": { - "label": "Synliga lagringsvolymer", - "description": "Endast tillgängligt när alla valda integreringar är Synology. Lämna tomt för att visa alla upptäckta lagringsvolymer.", - "placeholder": "Välj lagringsvolymer" } }, "status": { - "unhealthy": "Ohälsosam" + "unhealthy": "Ohälsosam", + "smart": "SMART", + "free": "{percentage}% gratis" + } + }, + "customApi": { + "name": "Anpassad widget", + "description": "Rendera en konfigurerad Custom JSX-definition.", + "customJsx": { + "noTemplate": "Ingen JSX-mall är konfigurerad.", + "templateWarnings": "{count} mallvarningar:", + "requestIdRequired": "Denna nätverkskontroll kräver en namngiven requestId.", + "unsavedPreview": "Kör det första förfrågningstestet i editorn innan du testar namngivna förfrågningar.", + "invalidParams": "Parametrarna för begäran är ogiltiga.", + "loading": "Laddar förfrågan...", + "loadRequest": "Ladda begäran", + "requestFailed": "Begäran misslyckades.", + "retry": "Begäran om försök igen", + "actionCompleted": "Åtgärden slutfördes.", + "actionSimulated": "Åtgärd simulerad; ingen begäran skickades.", + "actionsDisabledEditMode": "Åtgärder är inaktiverade medan tavlan är i redigeringsläge.", + "widgetItemUnavailable": "Denna widget är inte tillgänglig.", + "toggle": "Växla", + "copied": "Kopierad", + "confirmDelete": "Bekräfta denna destruktiva handling." + }, + "option": { + "definitionId": { + "label": "Anpassad widget" + }, + "refreshInterval": { + "label": "Uppdateringsintervall", + "description": "Hur ofta data ska hämtas från API:t (i sekunder)" + } + }, + "noDefinition": "Ingen definition har valts", + "definitionNotFound": "Anpassad widget ej tillgänglig", + "migrationRequired": "Detta äldre anpassade widget är bevarad, men det måste migreras till Custom JSX v2 från Hantera anpassade widgets innan det kan köras.", + "manageMigration": "Öppna Hantera anpassade widgetar", + "contactAdmin": "Kontakta en administratör.", + "configurationNeedsRepair": "Denna widget alternativ ändrats. Redigera widgeten för att reparera dess konfiguration.", + "removeFromBoard": "Ta bort från tavlan", + "editModePending": "Spara tavlan för att ladda denna widget.", + "picker": { + "group": "Anpassade JSX-widgetar", + "empty": "Inga anpassade widgetar hittades", + "preview": "Förhandsgranska", + "sources": "{count, plural, one {# källa} other {# källor}}", + "requests": "{count, plural, one {# begär} other {# begär}}", + "migrationRequired": "Migrering krävs", + "migrationDescription": "Denna placerade v1-widget kan inte köras ännu. Kopiera dess redigerade prompt till en LLM, klistra sedan in den enda JSON-responsen i Homarr.", + "manageMigration": "Öppna Hantera anpassade widgetar", + "contactAdmin": "Kontakta en administratör." + }, + "configuration": { + "needsAttention": "Konfigurationen behöver uppmärksamhet: {message}", + "advancedOptions": "Avancerade inställningar", + "invalidJson": "Ogiltig JSON" } }, "beszelSystemTable": { "name": "Beszel-system (tabell)", "description": "Tabellvy över alla Beszel-övervakade system med sorterbara kolumner och statusindikatorer", "option": { - "statusFilter": { - "label": "Statusfilter" - }, "sortBy": { "label": "Sortera efter" }, "sortDirection": { "label": "Sorteringsriktning" - }, - "showCpu": { - "label": "Visa CPU" - }, - "showMemory": { - "label": "Visa minne" - }, - "showDisk": { - "label": "Visa disk" - }, - "showGpu": { - "label": "Visa GPU" - }, - "showLoadAvg": { - "label": "Visa lastmedel" - }, - "showNet": { - "label": "Visa nätverk" - }, - "showTemp": { - "label": "Visa temperatur" - }, - "showBattery": { - "label": "Visa batteri" - }, - "showServices": { - "label": "Visa tjänster" - }, - "showUptime": { - "label": "Visa drifttid" - }, - "showAgent": { - "label": "Visa agentversion" - }, - "columnOrder": { - "label": "Kolumnordning" - }, - "columnWidths": { - "label": "Kolumnbredder" } }, - "noRecords": "Inga system hittades", "error": { - "internalServerError": "Det gick inte att ansluta till Beszel. Kontrollera integreringsinställningarna.", "layoutSaveTitle": "Tabellayouten kunde inte sparas", "layoutSaveMessage": "Kolumnordningen eller kolumnbredderna kunde inte sparas. Försök igen." - }, - "column": { - "system": "System", - "cpu": "CPU", - "memory": "Minne", - "disk": "Disk", - "gpu": "GPU", - "loadAvg": "Lastmedel", - "net": "Nät", - "temp": "Temp", - "battery": "Bat", - "services": "Tjänster", - "uptime": "Drifttid", - "agent": "Agent" } }, "beszelSystemGrid": { "name": "Beszel-system (rutnät)", - "description": "Kortrutnätsvy över alla Beszel-övervakade system med realtidsmått", - "option": { - "statusFilter": { - "label": "Statusfilter" - }, - "showCpu": { - "label": "Visa CPU" - }, - "showMemory": { - "label": "Visa minne" - }, - "showDisk": { - "label": "Visa disk" - }, - "showGpu": { - "label": "Visa GPU" - }, - "showLoadAvg": { - "label": "Visa lastmedel" - }, - "showNet": { - "label": "Visa nätverk" - }, - "showTemp": { - "label": "Visa temperatur" - }, - "showBattery": { - "label": "Visa batteri" - }, - "showServices": { - "label": "Visa tjänster" - }, - "showUptime": { - "label": "Visa drifttid" - }, - "showAgent": { - "label": "Visa agentversion" - } - }, - "error": { - "internalServerError": "Det gick inte att ansluta till Beszel. Kontrollera integreringsinställningarna." - }, - "empty": { - "noSystems": "Inga system hittades" - }, - "metric": { - "cpu": "CPU", - "memory": "Minne", - "disk": "Disk", - "gpu": "GPU", - "loadAvg": "Lastmedel", - "net": "Nät", - "temp": "Temp", - "battery": "Bat", - "services": "Tjänster", - "uptime": "Drifttid", - "agent": "Agent" - } + "description": "Kortrutnätsvy över alla Beszel-övervakade system med realtidsmått" }, "beszelAlerts": { "name": "Beszel-larm", @@ -3857,11 +5073,12 @@ } }, "empty": "Inga larm konfigurerade", - "error": { - "internalServerError": "Det gick inte att ansluta till Beszel. Kontrollera integreringsinställningarna." - }, "history": "Historik", "resolved": "Löst", + "alertDescription": { + "statusDuration": "Ner för {minutes} min", + "threshold": "Överskrider {value} över {minutes} min" + }, "status": { "triggered": "Utlöst", "ok": "OK" @@ -3908,16 +5125,16 @@ "noSystems": "Inga system hittades" }, "error": { - "internalServerError": "Det gick inte att ansluta till Beszel. Kontrollera integreringsinställningarna.", "liveConnectionFailed": "Liveanslutningen misslyckades. Din Beszel-instans kanske inte stöder realtidsströmning.", "switchToHistorical": "Växla till historisk vy", - "systemNotFound": "Det valda systemet hittades inte. Välj ett annat system." + "systemNotFound": "Det valda systemet hittades inte. Välj ett annat system.", + "selectionSaveTitle": "Det går inte att spara markeringen", + "selectionSaveMessage": "Ditt system eller val av tidsperiod kunde inte sparas. Försök igen." }, "chart": { "cpu": { "title": "CPU-användning", - "subtitle": "Genomsnittlig systemomfattande CPU-användning", - "series": "CPU" + "subtitle": "Genomsnittlig systemomfattande CPU-användning" }, "memory": { "title": "Minnesanvändning", @@ -3959,39 +5176,550 @@ "title": "Docker nätverks-I/O", "subtitle": "Nätverkstrafik för docker-behållare" } + }, + "period": { + "live": "Live", + "oneHour": "1 tim", + "twelveHours": "12 tim", + "oneDay": "24t", + "oneWeek": "1w", + "thirtyDays": "30d" } }, - "wud": { - "name": "Vad är Upp Docker", - "description": "Visa hur många bevakade behållare som har uppdateringar tillgängliga.", - "title": "Vad är Upp Docker", - "monitored": "Övervakad", - "updatesAvailable": "{count, plural, one {# uppdatering tillgänglig} other {# uppdateringar tillgängliga}}", - "updateAvailable": "Uppdatering tillgänglig", - "openReleaseNotes": "Öppna versionsfakta", + "assistant": { + "name": "Assistent", + "description": "Ha en komplett assistent samtal direkt på tavlan.", + "unavailable": { + "title": "Assistent ej tillgänglig", + "description": "Logga in och be en administratör att konfigurera Assistenten från hanteringspanelen." + }, + "compact": { + "title": "Assistent", + "description": "Ändra storlek på denna widget för att chatta här, eller öppna hela konversationen.", + "open": "Öppna assistent", + "openTitle": "Assistent öppen i sidopanel", + "openDescription": "Samtalet förblir i en aktiv yta.", + "returnToWidget": "Returnera konversationen till denna widget", + "otherWidgetTitle": "Assistent aktiv i en annan widget", + "otherWidgetDescription": "Endast en konversationsyta förblir aktiv åt gången.", + "useHere": "Använd assistenten i denna widget" + } + }, + "beszel": { + "error": { + "internalServerError": "Kunde inte ansluta till Beszel. Kontrollera dina integreringsinställningar." + }, + "empty": { + "noSystems": "Inga system hittades" + }, + "options": { + "statusFilter": { + "label": "Statusfilter" + }, + "showCpu": { + "label": "Visa CPU" + }, + "showMemory": { + "label": "Visa minne" + }, + "showDisk": { + "label": "Visa disk" + }, + "showGpu": { + "label": "Visa GPU" + }, + "showLoadAvg": { + "label": "Visa lastmedelvärde" + }, + "showNet": { + "label": "Visa nätverk" + }, + "showTemp": { + "label": "Visa temperatur" + }, + "showBattery": { + "label": "Visa batteri" + }, + "showServices": { + "label": "Visa tjänster" + }, + "showUptime": { + "label": "Visa drifttid" + }, + "showAgent": { + "label": "Visa agentversion" + } + }, + "metric": { + "system": "System", + "source": "Integration", + "hostname": "Hostname", + "cpuModel": "CPU modell", + "cores": "Cores", + "memoryTotal": "Totalt minne", + "memory": "Minne", + "disk": "Diskett", + "loadAvg": "Ladda genomsnittet", + "net": "Netto", + "temp": "Temp", + "battery": "Fladdermus", + "uptime": "Drifttid", + "agent": "Agentkommando" + } + }, + "llamacpp": { + "name": "llama.cpp", + "description": "Visa hälsa, laddad modell och generationshastighet av din lokala llama.cpp server.", + "title": "llama.cpp", + "status": { + "unhealthy": "Ohälsosamt ({status})" + }, + "idle": "Inaktiv", + "speedTooltip": { + "current": "Nuvarande generationshastighet", + "average": "Genomsnittlig generationshastighet sedan start", + "request": "Genomsnittlig hastighet sedan denna förfrågan började" + }, + "busy": "{count, plural, one {# begäran som körs} other {# begäran som körs}}", + "modelInfo": { + "context": "Kontext", + "size": "Filens storlek", + "parameters": "Parametrar", + "model": "Modell", + "quantization": "Kvantisering" + }, + "stats": { + "tokensProcessed": "Tokens bearbetade", + "contextUsage": "Sammanhang / KV användning", + "cacheHitRate": "Fråga fram cachens träfffrekvens", + "tokensGenerated": "Tokens genererade" + }, + "error": { + "unreachable": "llama-servern kan inte nås" + }, + "unit": { + "speed": "{value} t/s", + "parameters": "{value}B", + "none": "—", + "speedShort": "t/s" + }, "option": { "showTitle": { "label": "Visa titel" }, - "showRing": { - "label": "Visa uppdateringsring" + "showModelInfo": { + "label": "Visa modellinfo" }, - "layout": { - "label": "Layout", + "showContextUsage": { + "label": "Visa kontextanvändning" + }, + "showCacheHitRate": { + "label": "Visa cachens träfffrekvens" + }, + "showSpeedStats": { + "label": "Visa hastighetsstatistik" + }, + "showRequests": { + "label": "Visa begäran belastning" + }, + "showTokenStats": { + "label": "Visa token summor" + }, + "showSpeculative": { + "label": "Visa spekulativ avkodning" + } + }, + "advanced": { + "promptSpeed": "Snabb hastighet", + "avgSpeed": "Genomsnittlig generation", + "requests": "Förfrågningar", + "deferred": "Uppskjuten", + "slots": "{processing}/{total} platser upptagna", + "speculative": "Spekulativ avkodning", + "avgPrompt": "Genomsnittlig prompt", + "specDrafts": "Specifikation utkast", + "specAccepted": "Spec. accepterade tokens", + "specDraftTokens": "Spec. utkast tokens" + } + }, + "stats": { + "name": "Statistik", + "description": "Kombinera statistik från dina integrationer i en konfigurerbar widget.", + "configure": "Konfigurera mätvärden", + "refresh": "Uppdatera statistik", + "empty": "Öppna widgetinställningar, välj integrationer och lägg sedan till mätvärden.", + "editorHelp": "Lägg till mätvärden från de integrationer som valts för denna widget. Ändringar sparas med din instrumentpanel.", + "source": "Integration", + "metric": "Metrisk", + "noMetrics": "Ingen statistik tillgänglig för denna integration", + "add": "Lägg till metrisk", + "label": "Anpassad etikett", + "hidden": "Hidden", + "compact": "Kompakta nummer", + "moveUp": "Flytta uppåt", + "moveDown": "Flytta nedåt", + "remove": "Ta bort metriska", + "loading": "Laddar…", + "unavailable": "Unavailable", + "refreshFailed": "Uppdatering misslyckades — visar sparade data", + "stale": "Sparad data — uppdatera för att uppdatera", + "table": { + "value": "Värde", + "status": "Status" + }, + "option": { + "table": { + "label": "Tabell vy" + }, + "rows": { + "label": "Kompakta rader" + }, + "showIcon": { + "label": "Visa käll-ikon" + }, + "spacing": { + "label": "Avstånd", "option": { - "horizontal": { - "label": "Horisontell" + "xs": { + "label": "Kompakt" }, - "vertical": { - "label": "Vertikal" + "sm": { + "label": "Bekväm" + }, + "md": { + "label": "Rymlig" } } }, - "showUpdateList": { - "label": "Visa uppdateringslista för behållare", - "description": "Listar varje övervakad behållare som har en bild uppdatering tillgänglig" + "entries": { + "label": "Meter" + }, + "plain": { + "label": "Ta bort kortbakgrunder" } - } + }, + "fetchFailed": "Det gick inte att hämta statistik", + "viewOptions": "Anpassa denna vy", + "moreMetrics": "{count} mer i avancerad vy", + "localHelp": "Layout, formatering och synlighet gäller endast för denna vy. Delade tavelinställningar förblir desamma.", + "plain": "Ta bort kortbakgrunder", + "resetView": "Återställ vy", + "allHidden": "Alla mätvärden är dolda i den här vyn. Använd Anpassa denna vy för att återställa dem." + }, + "wazuh": { + "target": { + "api": "Wazuh server API", + "indexer": "Wazuh indexerare", + "wazuh": "Wazuh" + }, + "severity": { + "low": "Låg", + "medium": "Mellan", + "high": "Hög", + "critical": "Kritisk" + }, + "error": { + "unauthorized": { + "title": "{target} avvisade inloggningsuppgifterna", + "description": "Kontrollera användarnamn och lösenord som sparats på Wazuh-integreringen. Server-API (port 55000) och indexeraren (port 9200) använder separata användare." + }, + "certificate": { + "title": "{target} certifikatet är inte betrott", + "description": "Wazuh använder ett självsignerat certifikat som standard. Kör \"Testanslutning\" på integreringen och lita på certifikatet, eller lägg till ditt CA-certifikat under Inställningar → Certifikat." + }, + "unreachable": { + "title": "Kan inte nå {target}", + "description": "Värden vägrade eller tappade anslutningen. Kontrollera URL, port och brandvägg. Indexeraren lyssnar bara på localhost i en standard allt-i-ett-installation." + }, + "timeout": { + "title": "{target} tidsinställd", + "description": "Inget svar inom 15 sekunder. Tjänsten kan överbelastas eller adressen kan vara felaktig." + }, + "status": { + "title": "{target} returnerade ett fel", + "description": "Begäran misslyckades med HTTP-status {status}." + }, + "invalidResponse": { + "title": "Oväntat svar från {target}", + "description": "Kontrollera att URL:en pekar på Wazuh-serverns API eller indexerare och inte på instrumentpanelen." + }, + "indexerRequired": { + "title": "Wazuh indexeringsuppgifter krävs", + "description": "Varningar, sårbarheter och filintegritetshändelser läses från Wazuh-indexeraren. Lägg till en indexer-URL, användarnamn och lösenord till integreringen." + }, + "unknown": { + "title": "Kunde inte ladda data från {target}", + "description": "Kontrollera Homarr loggar för detaljer." + } + }, + "range": { + "1h": "1 tim", + "24h": "24t", + "7d": "7d", + "30d": "30d" + }, + "levelTooltip": "Regelnivå {level} ({severity})" + }, + "wazuhAgents": { + "name": "Wazuh agenter", + "description": "Sorterbar lista över Wazuh agenter med status, OS, version och senaste förvaring", + "option": { + "statusFilter": { + "label": "Visa agenter" + }, + "sortBy": { + "label": "Sortera efter" + }, + "showVersion": { + "label": "Visa Wazuh versionskolumn" + }, + "showGroups": { + "label": "Visa gruppkolumn" + } + }, + "title": "Agenter", + "total": "{count} agenter", + "status": { + "active": "Aktiv", + "disconnected": "Frånkopplad", + "neverConnected": "Aldrig ansluten", + "pending": "Väntande" + }, + "statusLabel": { + "active": "Aktiv", + "disconnected": "Frånkopplad", + "never_connected": "Aldrig ansluten", + "pending": "Väntande", + "unknown": "Okänt" + }, + "live": "Live", + "snapshot": "Ögonblicksbild {age} gammal", + "snapshotHint": "Läs från Wazuh-instrumentpanelens agent ögonblicksbild (wazuh-monitoring) tagen på {time}. Lägg till API-uppgifter för live data.", + "staleSnapshot": "Agenten ögonblicksbild från {time} är föråldrad. Kontrollera att övervakningsjobbet för Wazuh körs eller lägg till API-uppgifter för servern.", + "noDisconnected": "Alla agenter är anslutna", + "empty": "Inga agenter matchar detta filter", + "column": { + "status": "Status", + "name": "Jobbnamn", + "ip": "IP", + "os": "OS", + "version": "Version", + "lastKeepAlive": "Håller liv", + "groups": "Grupper" + }, + "outdated": "Äldre än den nyaste agentversionen ({version})" + }, + "wazuhAlerts": { + "name": "Wazuh varningar feed", + "description": "Nya Wazuh varningar med nivå, MITRE ATT&CK tekniker, agent och källa IP", + "option": { + "minLevel": { + "label": "Minsta regelnivå", + "description": "Wazuh nivåer: 0-6 låg, 7-11 medium, 12-14 hög, 15+ kritisk" + }, + "hours": { + "label": "Tidsfönster (timmar)" + }, + "limit": { + "label": "Antal varningar" + }, + "showMitre": { + "label": "Show MITRE ATT&CK techniques" + }, + "showAgent": { + "label": "Visa agent" + }, + "showSourceIp": { + "label": "Visa käll-IP" + }, + "showRuleId": { + "label": "Visa regel-ID" + } + }, + "title": "Varningar · nivå {level}+ · {hours}h", + "empty": "Inga varningar på denna nivå. Allt tyst.", + "rule": "Regel {id}", + "openInDashboard": "Öppna denna varning i Wazuh-instrumentpanelen" + }, + "wazuhSummary": { + "name": "Wazuh varningens svårighetsgrad", + "description": "Uppvärmning av svårighetsgrad med en trend mot föregående period", + "option": { + "range": { + "label": "Tidsintervall" + }, + "showTrend": { + "label": "Visa trenden mot föregående period" + }, + "showFooter": { + "label": "Visa sidfot" + } + }, + "title": "Varningens svårighetsgrad · {range}", + "alerts": "varningar", + "none": "Inga varningar", + "trend": { + "new": "ny", + "tooltip": "Föregående period: {previous}" + }, + "previous": "Föregående {range}: {count}", + "maxLevel": "Max nivå {level}", + "health": "Indexerare hälsa: {status}", + "manager": "Chef {version}" + }, + "wazuhTimeline": { + "name": "Wazuh alerts timeline", + "description": "Staplat diagram över Wazuh varningar över tiden genom svårighetsgrad", + "option": { + "range": { + "label": "Tidsintervall" + }, + "interval": { + "label": "Intervall" + }, + "chartType": { + "label": "Typ av diagram" + }, + "yScale": { + "label": "Y axel skala", + "description": "Kvadratrot håller höga och kritiska varningar synliga bredvid tusentals låga" + }, + "minLevel": { + "label": "Minsta regelnivå" + }, + "showLegend": { + "label": "Visa legend med summor" + } + }, + "title": "Varningar tidslinje · {range}", + "total": "{count} varningar", + "interval": "per {interval}" + }, + "wazuhTopList": { + "name": "Wazuh topplista", + "description": "Topp regler, agenter, källa IPs eller MITRE ATT&CK taktik och tekniker genom varning räkna", + "option": { + "kind": { + "label": "Rankning" + }, + "range": { + "label": "Tidsintervall" + }, + "limit": { + "label": "Antal poster" + }, + "minLevel": { + "label": "Minsta regelnivå" + }, + "showBars": { + "label": "Visa staplar" + } + }, + "title": { + "rules": "Topp regler · {range}", + "agents": "Bästa agenter · {range}", + "sourceIps": "Topp källkods-IP-adresser · {range}", + "mitreTactics": "MITRE taktik · {range}", + "mitreTechniques": "MITRE techniques · {range}" + }, + "empty": { + "rules": "Inga varningar i denna period", + "agents": "Inga varningar i denna period", + "sourceIps": "Inga varningar med en källa IP i denna period", + "mitreTactics": "Inga varningar mappade till MITRE ATT&CK i denna period", + "mitreTechniques": "Inga varningar mappade till MITRE ATT&CK i denna period" + }, + "totalTooltip": "{count} matchande varningar", + "private": "LAN", + "public": "Allmän", + "agents": "Sett på {count} agenter", + "others": "{count} fler varningar i andra poster" + }, + "wazuhVulnerabilities": { + "name": "Wazuh sårbarheter", + "description": "Sårbarhet räknas, topp CVEs och de mest sårbara agenterna", + "option": { + "cveOrder": { + "label": "Rank CVEs av" + }, + "minSeverity": { + "label": "CVE svårighetsgrad" + }, + "cveLimit": { + "label": "Antal CVEs" + }, + "agentLimit": { + "label": "Antal agenter" + }, + "showAgents": { + "label": "Visa mest sårbara agenter" + } + }, + "title": "Sårbarhet", + "topCves": "Topp CVE:er", + "score": "Poäng", + "agentsShort": "Agenter", + "topAgents": "Mest sårbara agenter", + "criticalHigh": "Korn / Hög", + "totalTooltip": "{count} resultat på {agents} agenter", + "affected": "{count} agenter", + "empty": "Inga sårbarheter upptäckta", + "distribution": "Allvarlighetsfördelning. {unscored} resultat utan poäng visas inte.", + "worst": "Värst: {id} ({score}) på {agents} agenter" + }, + "wazuhFim": { + "name": "Wazuh filintegritet", + "description": "Senaste filintegritetskontroll (syscheck) händelser", + "option": { + "range": { + "label": "Tidsintervall" + }, + "event": { + "label": "Händelser" + }, + "limit": { + "label": "Antal händelser" + }, + "includeRegistry": { + "label": "Inkludera händelser i Windows-registret" + } + }, + "title": "Filintegritet · {range}", + "event": { + "added": "Datum har adderats", + "modified": "Ändrad", + "deleted": "Borttagen", + "unknown": "Ändrad" + }, + "empty": "Inga filintegritetshändelser under denna period", + "user": "av {user}", + "registry": "Registret" + }, + "wazuhAuthFailures": { + "name": "Wazuh autentiseringsfel", + "description": "Misslyckade inloggningar och brute-force varningar per agent med timvis sparklines", + "option": { + "hours": { + "label": "Tidsfönster (timmar)" + }, + "limit": { + "label": "Antal agenter" + }, + "showSourceIps": { + "label": "Visa topp-källans IP-adresser" + } + }, + "title": "Auto-fel · {hours}h", + "seriesTooltip": "Alla agenter under senaste {hours}h", + "peak": "Topplista {count}/hink", + "empty": "Inga misslyckade inloggningar under denna period", + "failed": "Misslyckade inloggningar", + "failedHint": "Enda autentiseringsfel (sshd, PAM, Windows-inloggning, ogiltiga användare)", + "bruteForce": "Brute force", + "bruteForceHint": "Korrelerade brute-force regler (flera fel på kort tid, MITRE T1110)", + "sourceIps": "Källans IPs", + "ipTooltip": "{ip}: {count} fel", + "bruteForceCount": "{count} brute force" } }, "widgetPreview": { @@ -4004,7 +5732,76 @@ } }, "board": { + "emptyState": { + "title": "Bygg din första vy", + "description": "Lägg till en widget eller app, eller anslut en tjänst och använd dess data på denna tavla.", + "addWidget": "Lägg till widget", + "addApp": "Lägg till app", + "connectService": "Anslut tjänst" + }, + "setupChecklist": { + "title": "Gör denna tavla användbar", + "description": "Plocka upp där du slutade. Framsteg följer innehållet som redan finns på denna tavla.", + "collapse": "Komprimera checklista för inställningar", + "dismiss": "Avfärda inställningskontrolllista", + "resume": "Fortsätt installationen ({completed}/{total})", + "progress": "Framsteg för tavelkonfigurationen", + "step": { + "content": { + "label": "Lägg till användbart innehåll", + "description": "Välj en widget och konfigurera den innan den är placerad." + }, + "app": { + "label": "Fäst en app", + "description": "Håll en tjänst eller ett verktyg ett klick bort från denna tavla." + }, + "service": { + "label": "Anslut en tjänst", + "description": "Lås upp levande data och åtgärder för kompatibla widgets.", + "permissionDescription": "En administratör kan ansluta en tjänst för att låsa upp levande data.", + "action": "Anslut" + } + } + }, "action": { + "addContent": "Lägg till tavelinnehåll", + "settings": "Forumets inställningar", + "switch": "Växla tavla", + "switcher": { + "title": "Växla tavla", + "search": { + "empty": "Inga tavlor matchar \"{search}\"." + }, + "results": "Lediga tavlor", + "preview": "Förhandsgranskning av {name} med {count} objekt", + "currentHidden": "Nuvarande forum: {name}", + "keyboard": { + "navigate": "Navigate", + "open": "Öppna", + "instructions": "Skriv för att filtrera tavlor. Använd piltangenterna för att flytta igenom resultaten och Enter för att öppna en tavla." + }, + "empty": { + "title": "Inga andra tavlor", + "description": "Det finns inga andra tavlor du kan komma åt." + }, + "error": "Tavlor kunde inte laddas." + }, + "create": { + "availability": { + "checking": "Kontrollerar tillgänglighet…", + "available": "{name} är tillgänglig" + }, + "notification": { + "success": { + "title": "Tavla skapad", + "message": "Styrelsen {name} har skapats" + }, + "error": { + "title": "Kunde inte skapa tavla", + "message": "Brädet {name} kunde inte skapas" + } + } + }, "duplicate": { "title": "Duplicera tavla", "message": "Detta duplicerar tavlan {name} med allt innehåll. Om widgetar hänvisar till integrationer som du inte har behörighet att använda tas de bort.", @@ -4020,14 +5817,19 @@ } }, "edit": { + "enter": "Redigera tavla", + "save": "Spara tavla", + "exit": "Avsluta redigeringsläge", "notification": { "success": { - "title": "Ändringarna har sparats", "message": "Tavlan sparades" }, "error": { - "title": "Kunde inte tillämpa ändringar", "message": "Tavlan kunde inte sparas" + }, + "loadError": { + "title": "Det gick inte att börja redigera", + "message": "Det gick inte att ladda forumredigeraren. Din instrumentpanel är fortfarande tillgänglig i visningsläge." } }, "confirmLeave": { @@ -4035,62 +5837,6 @@ "message": "Du har ändringar som inte har sparats. Är du säker på att du vill fortsätta?" } }, - "oldImport": { - "label": "Importera från Homarr före 1.0.0", - "notification": { - "success": { - "title": "Importen lyckades", - "message": "Tavlan har importerats" - }, - "error": { - "title": "Importen misslyckades", - "message": "Tavlan kunde inte importeras, kontrollera loggarna för mer information" - } - }, - "form": { - "file": { - "label": "Välj JSON-fil", - "invalidError": "Ogiltig konfigurationsfil" - }, - "apps": { - "label": "Applikationer", - "avoidDuplicates": { - "label": "Undvik dubbletter", - "description": "Ignorera applikationer där en applikation med samma href redan finns" - }, - "onlyImportApps": { - "label": "Importera endast appar", - "description": "Lägger endast till applikationerna; tavlan måste återskapas manuellt" - } - }, - "name": { - "label": "Tavlans namn" - }, - "screenSize": { - "label": "Skärmstorlek", - "description": "I versioner äldre än version 1.0 fanns tre olika lägen, så du kunde välja antalet kolumner för varje skärmstorlek.", - "option": { - "sm": "Liten", - "md": "Mellan", - "lg": "Stor" - } - }, - "sidebarBehavior": { - "label": "Sidofältets beteende", - "description": "Sidofält togs bort i 1.0. Du kan välja vad som ska hända med objekten i dem.", - "option": { - "lastSection": { - "label": "Senaste sektionen", - "description": "Sidofältet visas under den senaste sektionen" - }, - "removeItems": { - "label": "Ta bort objekt", - "description": "Objekt i sidofältet tas bort" - } - } - } - } - }, "quickCreateApp": { "modal": { "title": "Skapa applikation direkt", @@ -4098,6 +5844,12 @@ } } }, + "landmark": { + "canvas": "Instrumentpanel duk", + "leftRail": "Vänster instrumentpanel räls", + "rightRail": "Höger instrumentpanel skena", + "items": "Objekt i kontrollpanelen" + }, "field": { "pageTitle": { "label": "Namn på sidan" @@ -4167,7 +5919,8 @@ } }, "primaryColor": { - "label": "Primärfärg" + "label": "Primärfärg", + "locked": "Administratören håller instansen varumärkesfärg på varje tavla." }, "secondaryColor": { "label": "Sekundärfärg" @@ -4207,9 +5960,6 @@ "xl": "Mycket stor" } }, - "name": { - "label": "Namn" - }, "isPublic": { "label": "Allmän", "description": "Offentliga tavlor är tillgängliga för alla, även till de utan ett konto." @@ -4229,9 +5979,44 @@ "title": "Layout", "responsive": { "title": "Responsiv layout", + "description": "Varje layout behåller sina egna widget positioner och storlekar. Mobil och bas är alltid tillgängliga; lägga till anpassade layouter vid någon ytterligare brytpunkt.", "action": { "add": "Lägg till layout" } + }, + "role": { + "mobile": "Mobil", + "base": "Bas", + "custom": "Anpassad" + }, + "custom": { + "defaultName": "Anpassad layout" + }, + "mobile": { + "breakpointDescription": "Mobil används alltid från 0px till nästa layout brytpunkt." + }, + "preview": { + "columns": "kolumner", + "empty": "Denna layout är tom", + "dynamicSection": "Dynamisk sektion", + "editorWidthLabel": "{layoutName} · {width}px" + }, + "reset": { + "action": "Återställ från bas", + "confirm": { + "title": "Reset {layoutName}?", + "message": "Detta ersätter varje sparad position och storlek i denna layout med en ny layout genererad från Basen. Detta kan inte ångras." + } + }, + "edit": { + "action": "Redigera layout", + "saveAndEdit": "Spara och redigera", + "save": "Spara layout", + "cancel": { + "action": "Avbryt layoutredigering", + "title": "Ignorera ändringar i layouten?", + "message": "Dina osparade ändringar i denna layout kommer att kasseras." + } } }, "background": { @@ -4268,10 +6053,7 @@ "rename": { "label": "Byt namn på tavla", "description": "Om du ändrar namnet slutar alla länkar till den här tavlan att fungera.", - "button": "Ändra namn", - "modal": { - "title": "Byt namn på tavla" - } + "button": "Ändra namn" }, "visibility": { "label": "Ändra tavlans synlighet", @@ -4295,9 +6077,7 @@ } }, "delete": { - "label": "Ta bort den här tavlan", "description": "När du tar bort en tavla går det inte att ångra. Var därför säker innan du fortsätter.", - "button": "Ta bort den här tavlan", "confirm": { "title": "Ta bort tavla", "description": "Är du säker på att du vill ta bort denna tavla? Detta kommer att permanent ta bort tavlan och allt dess innehåll." @@ -4342,28 +6122,41 @@ }, "layout": { "field": { - "name": { - "label": "Namn" - }, "columnCount": { "label": "Antal kolumner" }, "breakpoint": { "label": "Gränsvärde", "description": "Layouten kommer att användas på alla skärmar större än detta gränsvärde tills nästa större gränsvärde." + }, + "gutters": { + "label": "Fasta sidofält", + "description": "Reservera upp till tre dashboard kolumner på vardera sidan. Den återstående duken reflekteras automatiskt.", + "left": { + "label": "Left sidebar", + "description": "Håll detta område synligt medan instrumentbrädan rullar.", + "thumbLabel": "Left sidebar width" + }, + "right": { + "label": "Höger sidofält", + "description": "Håll detta område synligt medan instrumentbrädan rullar.", + "thumbLabel": "Höger sidofältets bredd" + }, + "width": { + "label": "Bredd i kolumner" + }, + "preview": { + "label": "Förhandsgranskning av infopanellayout" + } } } }, "management": { "metaTitle": "Administration", - "title": { - "morning": "God morgon, {username}", - "afternoon": "God eftermiddag, {username}", - "evening": "God kväll, {username}" - }, "notFound": { "title": "Hittades ej", - "text": "Den efterfrågade resursen kunde inte hittas" + "text": "Den efterfrågade resursen kunde inte hittas", + "backToHome": "Tillbaka till ledningen hem" }, "error": { "title": "Den här sidan kunde inte läsas in", @@ -4372,19 +6165,10 @@ }, "navbar": { "items": { - "workshop": "Workshop", "home": "Hem", - "boards": "Tavlor", - "apps": "Applikationer", - "integrations": "Integrationer", - "searchEngies": "Sökmotorer", - "medias": "Media", "users": { - "label": "Användare", "items": { - "manage": "Hantera", - "invites": "Inbjudningar", - "groups": "Grupper" + "manage": "Hantera" } }, "tools": { @@ -4392,10 +6176,7 @@ "items": { "docker": "Docker", "kubernetes": "Kubernetes", - "logs": "Loggning", "api": "API", - "certificates": "Certifikat", - "tasks": "Uppgifter", "backup": "Säkerhetskopiering" } }, @@ -4409,21 +6190,12 @@ "sourceCode": "Källkod" } }, - "about": "Om" + "about": "Om", + "assistant": "Assistent" } }, "page": { "home": { - "statistic": { - "board": "Tavlor", - "user": "Användare", - "invite": "Inbjudningar", - "integration": "Integrationer", - "app": "Applikationer", - "group": "Grupper", - "searchEngine": "Sökmotorer", - "media": "Medier" - }, "statisticLabel": { "boards": "Tavlor", "resources": "Resurser", @@ -4461,13 +6233,8 @@ "tooltip": "Den här tavlan kommer att användas som din mobila starttavla" } }, - "duplicate": { - "label": "Duplicera tavlan" - }, "delete": { - "label": "Radera permanent", "confirm": { - "title": "Ta bort tavla", "description": "Är du säker på att du vill ta bort tavlan {name}?" } } @@ -4476,28 +6243,82 @@ "public": "Den här tavlan är offentlig", "private": "Den här tavlan är privat" }, - "noResults": { - "title": "Inga tavlor än" + "preview": { + "label": "Förhandsgranskning av layouten för {name}med {count} objekt", + "unknownCreator": "Okänd skapare" }, - "modal": { - "createBoard": { - "field": { - "name": { - "label": "Namn" - } - } - } + "noResults": { + "title": "Inga tavlor än", + "description": "Skapa en tavla för att ordna dina appar och widgetar på ett ställe." } }, "media": { "includeFromAllUsers": "Inkludera media från alla användare" }, "user": { - "back": "Tillbaka till användare", "fieldsDisabledExternalProvider": "Vissa fält är inaktiverade eftersom de hanteras av en extern autentiseringsleverantör.", "setting": { "general": { "title": "Allmänt", + "header": { + "title": "Rubrik studio", + "badge": "Personligt", + "description": "Dra kontrollerna var som helst i raden. Vänster, Mitten och höger håll fast medan kontrollerna skiftar runt dem.", + "device": { + "desktop": "Skrivbord", + "mobile": "Mobil" + }, + "zones": { + "left": "Vänster", + "center": "Centrera", + "right": "Höger" + }, + "action": { + "hide": "Dölj sidhuvudet", + "show": "Visa sidhuvudet", + "configure": "Flytta eller konfigurera {item}", + "remove": "Ta bort {item}", + "dropIntoZone": "Flytta till {zone} sektionen" + }, + "preview": { + "board": "Förhandsgranskning av instrumentpanel för {name}", + "empty": "Ingen översiktslayout finns tillgänglig" + }, + "available": { + "title": "Tillgängliga kontroller", + "description": "Lägg till en kontroll, dra sedan hela knappen till positionen ovan.", + "requiredAlways": "Denna kontroll krävs, men du kan flytta den var som helst i huvudet.", + "allAdded": "Varje inbyggd kontroll finns redan i ditt huvud.", + "add": "Lägg till {item}", + "boardShortcut": "Genväg till tavlan", + "chooseBoard": "Välj en tavla" + }, + "configuration": { + "description": "Denna kontroll förblir samma storlek som den gör i live-huvudet.", + "searchDisplay": { + "input": "Sök i fältet", + "icon": "Endast ikon" + }, + "logoDisplay": { + "logo": "Endast logotyp", + "logoAndText": "Logotyp + text" + } + }, + "items": { + "logo": "Logotyp", + "search": "Sökning", + "home": "Starttavla", + "boardSwitcher": "Tavlor", + "assistant": "Assistent", + "docker": "Docker", + "boardEdit": "Redigera tavla", + "boardSettings": "Forumets inställningar", + "settings": "Dina inställningar", + "themeToggle": "Växla tema", + "user": "Konto", + "boardUnavailable": "Brädan är inte tillgänglig" + } + }, "item": { "language": "Språk och region", "board": { @@ -4531,14 +6352,10 @@ }, "security": { "title": "Säkerhet" - }, - "board": { - "title": "Tavlor" } }, "list": { - "metaTitle": "Hantera användare", - "title": "Användare" + "metaTitle": "Hantera användare" }, "edit": { "metaTitle": "Redigera användare {username}" @@ -4592,9 +6409,6 @@ } }, "field": { - "id": { - "label": "ID" - }, "creator": { "label": "Adderad av" }, @@ -4618,10 +6432,7 @@ }, "setting": { "title": "Inställningar", - "alert": "Gruppinställningar prioriteras av ordningen på grupperna i listan. De övre inställningarna prioriteras högre än de nedre inställningarna.", - "board": { - "title": "Tavlor" - } + "alert": "Gruppinställningar prioriteras av ordningen på grupperna i listan. De övre inställningarna prioriteras högre än de nedre inställningarna." }, "members": { "title": "Medlemmar", @@ -4629,10 +6440,7 @@ "notFound": "Inga medlemmar hittades" }, "permissions": { - "title": "Behörigheter", - "form": { - "unsavedChanges": "Du har ändringar som inte sparats!" - } + "title": "Behörigheter" } } }, @@ -4641,12 +6449,10 @@ "notification": { "success": { "message": "Inställningarna har sparats" - }, - "error": { - "message": "Kunde inte spara inställningarna" } }, "section": { + "analyticsDocumentation": "Se exakt vad analytics data Homarr samlar in", "analytics": { "title": "Analys", "general": { @@ -4675,7 +6481,6 @@ } }, "board": { - "title": "Tavlor", "homeBoard": { "label": "Global starttavla", "mobileLabel": "Global mobil tavla", @@ -4694,7 +6499,6 @@ } }, "user": { - "title": "Användare", "enableGravatar": { "label": "Aktivera Gravatar", "description": "Använder användaravatarer från Libravatar/Gravatar när ingen egen avatar har angetts och en e-postadress är konfigurerad" @@ -4710,12 +6514,86 @@ "appearance": { "title": "Utseende", "defaultColorScheme": { - "label": "Standardfärgschema", + "label": "Standardfärgschema" + } + }, + "branding": { + "title": "Instans branding", + "groups": { + "identity": "Identitet", + "appearance": "Utseende", + "customCss": "Custom CSS", + "authentication": "Autentisering" + }, + "identity": { + "description": "Applikationslogotypen är det större märket som används i appen, på inloggningssidor och för installerade appar. Webbläsarikonen (favicon) är den lilla torget som används i flikar och bokmärken; när den är tom, faller den tillbaka till applikationens logotyp." + }, + "appName": { + "label": "Programmets namn" + }, + "greeting": { + "label": "Anpassad hälsning" + }, + "logo": { + "label": "Applikationens logotyp", + "placeholder": "/logo/logo.png" + }, + "favicon": { + "label": "Webbläsar-ikon (favicon)", + "placeholder": "Använder applikationens logotyp" + }, + "primaryColor": { + "label": "Primärfärg" + }, + "secondaryColor": { + "label": "Sekundär accent" + }, + "lockPrimaryColor": { + "label": "Behåll denna färg på varje bräda", + "description": "Förhindrar brädans färger från att ersätta applikationens accent." + }, + "signInBackground": { + "label": "Autentisering bakgrund", + "placeholder": "https://example.com/background.jpg" + }, + "signInOverlay": { + "label": "Bakgrundsöverlagring" + }, + "defaultRadius": { + "label": "Hörnstil", "options": { - "auto": "Automatisk", - "light": "Ljus", - "dark": "Mörk" + "xs": "Snäll", + "sm": "Subtila", + "md": "Balanserad", + "lg": "Avrundad", + "xl": "Mjuk" } + }, + "customCss": { + "label": "Globala anpassade CSS", + "description": "Tillämpas på varje sida. Styrelsen anpassade CSS kan åsidosätta det." + }, + "authVisibility": { + "description": "Välj vad som visas på varje autentiseringssida.", + "appName": "Programmets namn", + "logo": "Applikationens logotyp", + "greeting": "Hälsning" + }, + "summary": { + "title": "Nuvarande varumärke", + "cornerStyle": "Hörnstil", + "palette": "Palette", + "backgroundConfigured": "Anpassad bakgrund · {overlay}% överlagring", + "backgroundDefault": "Standard bakgrund", + "greetingConfigured": "Anpassad hälsning", + "greetingDefault": "Förvald hälsning", + "boardColorLocked": "Tavlans färg låst", + "boardColorFlexible": "Färger tillåtna", + "appName": "Jobbnamn", + "logo": "Logotyp", + "greeting": "Hälsning", + "on": "På", + "off": "Av" } }, "culture": { @@ -4723,12 +6601,177 @@ "defaultLocale": { "label": "Standardspråk" } + }, + "assistant": { + "loading": "Laddar assisterande konfiguration", + "title": "Assistent", + "description": "Anslut en OpenAI-kompatibel modell-slutpunkt för den instansvida assistenten.", + "security": { + "description": "API-nycklar och ytterligare header-värden krypteras i Homarr databasen. De returneras aldrig till webbläsare. Modellförfrågningar skickas från Homarr servern direkt till den konfigurerade slutpunkten." + }, + "overview": { + "connectionReady": "Anslutning klar", + "unsavedChanges": "Osparade ändringar", + "setupRequired": "Konfiguration krävs", + "disabled": "Inaktiverad", + "noModel": "Ingen modell vald" + }, + "connection": { + "endpointTitle": "Leverantör och slutpunkt", + "description": "Välj en förinställning eller anslut någon tjänst som implementerar OpenAI Chat Completions API.", + "save": "Spara leverantörsanslutning" + }, + "credentials": { + "title": "Användaruppgifter", + "description": "Lägg till hemligheter som denna slutpunkt behöver. Lagrade värden förblir krypterade och kan inte läsas tillbaka.", + "required": "Nyckel krävs", + "optional": "Nyckel valfri", + "workshop": "GitHub-inloggning per användare" + }, + "provider": { + "title": "Leverantör", + "groups": { + "free": "Gratis med Homarr", + "hosted": "Hostade leverantörer", + "local": "Lokala leverantörer", + "custom": "Anpassad" + }, + "options": { + "homarr": { + "description": "Ett begränsat antal assisterande användningsområden är gratis varje dag, som betalas av Homarr teamet. Logga in med Community Workshop för att använda din ersättning." + }, + "openrouter": { + "description": "Hostad modellrouting med en stor verktygssäker modellkatalog." + }, + "openai": { + "description": "OpenAI Chatt slutförd via den officiella API-slutpunkten." + }, + "anthropic": { + "description": "Claude genom Anthropics OpenAI SDK kompatibilitetsslutpunkt." + }, + "google-gemini": { + "description": "Gemini via Googles OpenAI-kompatibla API-slutpunkt." + }, + "xai": { + "description": "Grok modeller genom xAI:s OpenAI-kompatibla API." + }, + "groq": { + "description": "Snabb inferens via Groqs OpenAI-kompatibla API." + }, + "mistral": { + "description": "Mistral modeller genom det officiella API." + }, + "deepseek": { + "description": "DeepSeek modeller genom dess OpenAI-kompatibla API." + }, + "together": { + "description": "Hosted öppna modeller genom Tillsammans OpenAI-kompatibla API." + }, + "ollama": { + "description": "En lokal eller nätverk Ollama-server med hjälp av dess OpenAI-kompatibla API." + }, + "lm-studio": { + "description": "En lokal LM Studio server med OpenAI-kompatibilitet aktiverad." + }, + "llama-cpp": { + "description": "En lokal eller nätverk llama.cpp server med dess OpenAI-kompatibla API." + }, + "custom": { + "label": "Anpassad slutpunkt", + "description": "Alla andra slutpunkter som är kompatibla med OpenAI-chatten." + } + }, + "homarrAuth": { + "title": "Gratis daglig assistent användning ingår", + "description": "Ingen API-nyckel behövs. Homarr-teamet täcker ett begränsat antal assisterande användningsområden för dig varje dag. Logga in med Community Workshop för att hålla din ersättning åtskild." + } + }, + "baseUrl": { + "title": "API bas-URL", + "description": "Inkludera API-prefixet, vanligtvis /v1. I behållare, hänvisar localhost till Homarr behållaren." + }, + "apiKey": { + "title": "API nyckel", + "required": "Krävs av denna leverantör. Värdet är krypterat och skrivbart.", + "optional": "Valfritt för lokala slutpunkter. Lämna tomt när tjänsten inte kräver bärarautentisering.", + "placeholder": "Ange en API-nyckel", + "savedTitle": "Krypterad API-nyckel sparad", + "savedDescription": "Homarr kan använda denna nyckel, men den kan inte visa eller återställa sitt värde.", + "remove": "Ta bort sparad API-nyckel", + "removeFlow": { + "title": "Ta bort den sparade API-nyckeln?", + "description": "Denna leverantör kräver en API-nyckel. Ta bort den kan stoppa modellupptäckten och assistentsvaren tills en annan nyckel sparas.", + "optionalDescription": "Slutpunkten kommer att sluta ta emot bärarautentisering efter att denna nyckel har tagits bort. Bekräfta att den accepterar oautentiserade förfrågningar eller använder ett annat sparat huvud.", + "cancel": "Behåll sparad nyckel", + "confirm": "Ta bort API-nyckel" + } + }, + "headers": { + "title": "Ytterligare förfrågningsrubriker", + "description": "Valfri autentisering eller routing headers. Header värden är krypterade och skrivskyddade.", + "add": "Lägg till sidhuvud", + "name": "Rubrik namn", + "value": "Header värde", + "valuePlaceholder": "Hemligt eller routing värde", + "remove": "Ta bort sidhuvud", + "configured": "Ytterligare krypterade headers är konfigurerade. Lägga till headers ersätter den kompletta lagrade uppsättningen.", + "empty": "Inga ytterligare rubriker lagras för denna leverantör.", + "savedBadge": "Sidhuvuden sparade", + "pendingRemoval": "Avvaktande borttagning", + "clear": "Ta bort sparade sidhuvuden när du sparar", + "keep": "Behåll sparade rubriker" + }, + "model": { + "title": "Modell", + "description": "Välj en upptäckt modell eller ange ett exakt slutpunkts-modell-ID.", + "placeholder": "Modell ID", + "refresh": "Uppdatera modeller", + "chooseModel": "Välj modell som används för nya konversationer.", + "discoveryPath": "Modell upptäcktsväg", + "discoveryPathDescription": "Tillagd till API-basens URL. Lämna tomt för att inaktivera upptäckten och använda en manuell modell-ID.", + "manual": "Ange ett modell-ID manuellt eller spara anslutningen för att upptäcka modeller.", + "manualFallback": "Upptäckten är inte tillgänglig. Du kan fortfarande ange ett modell-ID manuellt.", + "saveConnectionFirst": "Spara leverantörsanslutningen innan du väljer en modell.", + "discovering": "Uppdaterar de modeller som finns tillgängliga från denna leverantör…", + "discovered": "{count, plural, one {Upptäckt # modell. Verktygsstöd beror på vald slutpunkt och modell.} other {Upptäckta # modeller. Verktygsstöd beror på vald slutpunkt och modell.}}", + "discoveryFailed": "Modellupptäckten slutfördes inte", + "context": "{count} kontextfönster", + "toolsConfirmed": "Verktyg annonserade", + "toolsUnknown": "Verifiera verktygsstöd" + }, + "serverTools": { + "title": "Server verktyg", + "webSearch": { + "label": "Sök på webben", + "description": "Tillåt modellen att söka i live webb via OpenRouter när en begäran behöver aktuell information. Sökanvändningen debiteras separat av OpenRouter.", + "proxyDescription": "Skicka OpenRouters web-search server-verktyg till denna slutpunkt. Aktivera detta endast när den anpassade slutpunkten framåt OpenRouter server-tools format, såsom en Homarr Router proxy.", + "limit": "Modellen bestämmer när man ska söka, med en gräns på 3 sökningar och 5 sökresultat per sökning." + } + }, + "enabled": { + "label": "Aktivera assistent", + "description": "Visar assistenten för alla inloggade användare. Befintliga Homarr behörigheter gäller fortfarande för varje internt verktygssamtal." + }, + "save": "Spara assistent", + "notification": { + "connectionSaved": { + "title": "Leverantörsanslutning sparad", + "message": "Slutpunkten och krypterade autentiseringsuppgifter är redo för modellval.", + "credentialsCleared": "Slutpunkten ändrades, så tidigare autentiseringsuppgifter har rensats. Lägg till autentiseringsuppgifter för den nya destinationen om det behövs." + }, + "saved": { + "title": "Assistentens inställningar sparade", + "message": "Den nya modellen och tillgänglighetsinställningarna är aktiva." + }, + "error": { + "title": "Assistentens inställningar kunde inte sparas" + } + } } } }, "tool": { "tasks": { - "title": "Uppgifter", "status": { "idle": "Inaktiv", "running": "Körs", @@ -4746,6 +6789,11 @@ "label": "Pingar" } }, + "action": { + "run": "Kör {name} nu", + "enable": "Aktivera {name}", + "disable": "Inaktivera {name}" + }, "interval": { "seconds": "", "minutes": "", @@ -4761,13 +6809,7 @@ } } }, - "settings": { - "title": "Aktivitetsinställningar för {jobName}" - }, "field": { - "name": { - "label": "Namn" - }, "interval": { "label": "Schemaläggningsintervall" }, @@ -4781,11 +6823,6 @@ "table": { "search": "Sök bland {count} uppgifter..." }, - "action": { - "refresh": { - "label": "Uppdatera" - } - }, "refresh": { "success": { "message": "Uppgifterna har uppdaterats" @@ -4819,7 +6856,6 @@ } }, "api": { - "title": "API", "modal": { "createApiToken": { "title": "API-token skapad", @@ -4845,7 +6881,6 @@ }, "table": { "header": { - "id": "ID", "createdBy": "Skapad av", "actions": "Åtgärder" } @@ -4901,43 +6936,12 @@ "availableTools": { "title": "Tillgängliga verktyg", "description": "{count} verktyg tillgängliga. Expandera en kategori för att se enskilda verktyg och deras beskrivningar.", - "columnType": "Typ", - "columnName": "Verktyg", - "columnDescription": "Beskrivning" - }, - "troubleshooting": { - "title": "Felsökning", - "missingHeader": { - "title": "\"ApiKey-huvud saknas\"", - "description": "Din klient skickar inte huvudet {header}. Kontrollera att avsnittet {section} i MCP-konfigurationen är korrekt. Vissa klienter måste startas om efter konfigurationsändringar." - }, - "invalidFormat": { - "title": "\"Ogiltigt ApiKey-format\"", - "description": "Kontrollera att du kopierade hela API-nyckeln, inte bara en del av den." - }, - "invalidKey": { - "title": "\"Ogiltig API-nyckel\"", - "description": "Nyckel-ID:t hittades inte eller så är token felaktig. API-nycklar kan endast visas en gång när de skapas. Om du har förlorat den kan du ta bort den gamla nyckeln och skapa en ny." - }, - "connectionRefused": { - "title": "Anslutning nekades / tidsgränsen överskreds", - "description": "Kontrollera att URL:en kan nås från din AI-klient. Om Homarr körs bakom en reverse proxy eller i Docker ska du använda den externa URL:en (inte {localhost}). Kontrollera att porten är korrekt (standard: 7575 för Docker)." - }, - "toolsNotAppearing": { - "title": "Verktyg visas inte", - "description": "Vissa verktyg kräver att specifika integreringar har konfigurerats (t.ex. Docker, Overseerr). Verktygslistan beror på vad som är tillgängligt i din Homarr-instans." + "filteredDescription": "{count} matchande verktyg i utökade kategorier.", + "search": "Sök verktyg", + "noResults": { + "title": "Inga verktyg matchar denna sökning", + "description": "Inga MCP-verktyg matchar \"{search}\". Prova ett namn, verktygsnamn eller beskrivning." } - }, - "copy": "Kopiera", - "oneClick": { - "title": "Installera med ett klick", - "subtitle": "Använder OAuth – autentisera i webbläsaren vid första användningen", - "vsCode": "Installera i VS Code", - "cursor": "Installera i Cursor", - "copyUrl": "Kopiera MCP-URL", - "copied": "Kopierat!", - "copyHint": "För ChatGPT, Claude Code eller valfri MCP-klient", - "manualConfig": "Manuell konfiguration" } } } @@ -4954,47 +6958,12 @@ "title": "Export av känslig data", "warningTitle": "Denna export innehåller hela din databas.", "warningBody": "Säkerhetskopian inkluderar alla användare, integrationshemligheter (krypterade), API-nycklar, tavelkonfigurationer och appdata. Förvara den exporterade filen säkert och dela den inte.", - "typePrompt": "Skriv \"{phrase}\" för att fortsätta", - "submit": "Exportera databas", - "cancel": "Avbryt" + "submit": "Exportera databas" } }, "import": { "title": "Återställ databas", - "description": "Ladda upp en tidigare exporterad säkerhetskopia ZIP för att återställa din databas. Detta ersätter hela din databas. Om säkerhetskopian skapades med en annan krypteringsnyckel kommer hemligheter automatiskt att krypteras om.", - "warning": "Att återställa en säkerhetskopia kommer helt att ersätta din nuvarande databas och starta om applikationen. Denna åtgärd kan inte ångras.", - "dropzone": { - "title": "Släpp din säkerhetskopia ZIP här eller klicka för att bläddra", - "description": "Endast .zip-filer från en Homarr SQLite-säkerhetskopia accepteras" - }, - "changeFile": "Byt fil", - "button": "Återställ databas", - "success": { - "title": "Återställning slutförd", - "message": "Databasen har återställts framgångsrikt. Applikationen startar om..." - }, - "error": "Import misslyckades" - }, - "preview": { - "title": "Innehåll i säkerhetskopian", - "exported": "Exporterad {date}", - "loading": "Analyserar säkerhetskopian...", - "errorTitle": "Förhandsgranskningsfel", - "entity": "Entitet", - "count": "Antal", - "boards": "Tavlor", - "entities": { - "board": "Tavlor", - "user": "Användare", - "app": "Appar", - "integration": "Integrationer", - "item": "Widgetar", - "media": "Media", - "search_engine": "Sökmotorer" - }, - "analyzeError": "Kunde inte analysera säkerhetskopian", - "invalidMissingMetadata": "Ogiltig säkerhetskopia: metadata.json saknas", - "invalidMissingDb": "Ogiltig säkerhetskopia: db.sqlite saknas" + "description": "Ladda upp en tidigare exporterad säkerhetskopia ZIP för att återställa din databas. Detta ersätter hela din databas. Om säkerhetskopian skapades med en annan krypteringsnyckel kommer hemligheter automatiskt att krypteras om." }, "restore": { "dropzone": { @@ -5004,29 +6973,20 @@ "analyzing": "Analyserar säkerhetskopia...", "changeFile": "Byt fil", "continueToRestore": "Fortsätt till återställning", - "tryAgain": "Försök igen", "analysisError": "Analysfel", "preview": { "title": "Innehåll i säkerhetskopian", "exported": "Exporterad {date}", "entity": "Entitet", "count": "Antal", - "boards": "Tavlor", "entities": { - "board": "Tavlor", - "user": "Användare", - "app": "Appar", - "integration": "Integrationer", - "item": "Widgetar", - "media": "Media", - "search_engine": "Sökmotorer" + "item": "Widgetar" }, "migrationsApplied": "{count} migrering tillämpad", "migrationsAppliedPlural": "{count} migreringar tillämpade", "migrationsOlderVersion": "Denna säkerhetskopia var från en äldre Homarr-version. {count} schemamigrering tillämpades för att uppdatera den.", "migrationsOlderVersionPlural": "Denna säkerhetskopia var från en äldre Homarr-version. {count} schemamigreringar tillämpades för att uppdatera den.", "migrationsUpToDate": "Databasschemat är uppdaterat ({count} migreringar tillämpade)", - "upToDate": "Uppdaterad", "migrationsPending": "{count} väntar" }, "migration": { @@ -5037,21 +6997,21 @@ "title": "Destruktiv åtgärd", "warningTitle": "Detta kommer permanent att ersätta hela din databas.", "warningBody": "Alla nuvarande tavlor, användare, appar, integrationer, inställningar och sessioner kommer att förloras. Denna åtgärd kan inte ångras. Applikationen kommer att starta om efter återställningen.", - "typePrompt": "Skriv \"{phrase}\" för att fortsätta", - "cancel": "Avbryt", "submit": "Återställ databas" }, "progress": { "title": "Återställer databasen...", - "extracting": "Extraherar säkerhetskopian", - "migrating": "Tillämpar databasmigreringar", - "encrypting": "Krypterar om integrationshemligheter", - "swapping": "Ersätter databasfilen", - "restarting": "Startar om servern" + "restarting": "Startar om servern", + "relogin": "Återställa databasen ogiltigförklarade din nuvarande session. Homarr kommer att skicka dig att logga in när servern är klar." }, "complete": { "title": "Återställning slutförd", - "message": "Databasen har återställts framgångsrikt. Servern startar om — vänligen uppdatera sidan om några sekunder." + "message": "Databasen har återställts framgångsrikt. Servern startar om — vänligen uppdatera sidan om några sekunder.", + "button": "Logga in nu" + }, + "timeout": { + "title": "Servern kom inte tillbaka online", + "message": "Databasen återställning slutförd, men Homarr blev inte redo igen. Försök igen anslutningskontrollen eller uppdatera denna sida manuellt." }, "failed": { "title": "Återställning misslyckades" @@ -5059,6 +7019,9 @@ "invalidMissingMetadata": "Ogiltig säkerhetskopia: metadata.json saknas", "invalidMissingDb": "Ogiltig säkerhetskopia: db.sqlite saknas", "analyzeError": "Kunde inte analysera säkerhetskopian" + }, + "confirm": { + "typePrompt": "Skriv \"{phrase}\" för att fortsätta" } } }, @@ -5093,7 +7056,11 @@ "toggleBoardEdit": "Växla redigeringsläge för tavlan", "toggleColorScheme": "Växla mellan ljust och mörkt läge", "saveNotebook": "Spara anteckningsbok (endast i anteckningsbokswidgeten)", - "openSpotlight": "Öppna sökning" + "openSpotlight": "Öppna sökning", + "openSpotlightApps": "Öppna appsökning", + "openSpotlightAssistant": "Öppet assistentläge", + "openSpotlightPreferences": "Öppna inställningsläge", + "openAssistant": "Öppen assistent" }, "note": "Tips: Mod syftar både på Ctrl-tangenten och ⌘-tangenten i macOS" } @@ -5103,6 +7070,63 @@ }, "docker": { "title": "Containrar", + "reconciliation": { + "title": "Assisterad dockerkonfiguration", + "suggestions": "{count, plural, =0 {Inga förslag} one {# förslag} other {# förslag}}", + "attention": "{count} behöver uppmärksamhet", + "endpointUnavailable": "Vissa tjänster kunde inte kontrolleras eftersom dessa slutpunkter inte är tillgängliga: {names}", + "empty": "Inga synliga Docker-tjänster hittades.", + "emptyFilter": "Inga tjänster matchar den här vyn.", + "ambiguous": "Mer än ett befintligt objekt kunde matcha denna tjänst. Homarr kommer inte att välja en automatiskt.", + "filter": { + "attention": "Behöver uppmärksamhet", + "represented": "Redan konfigurerad", + "all": "Alla" + }, + "state": { + "newRecognized": "Redo att ansluta", + "newApp": "Ny tjänst", + "represented": "Redan representerad", + "linked": "Länkad", + "moved": "Adress ändrad" + }, + "url": { + "manual": "Ange en adress manuellt" + }, + "health": { + "layer": { + "docker": "Docker", + "integrationConfiguration": "Integration", + "authentication": "Autentisering", + "apiRequest": "API", + "appRepresentation": "App", + "widgetConfiguration": "Widget", + "widgetQuery": "Widget fråga" + }, + "status": { + "available": "Tillgänglig", + "configured": "Konfigurerad", + "linked": "Länkad", + "missing": "Saknas", + "changed": "Ändrad", + "unused": "Används ej", + "notApplicable": "Ej tillämplig", + "notObserved": "Inte observerad" + } + }, + "action": { + "review": "Granska", + "dismiss": "Avfärda", + "restoreDismissed": "Återställ avfärdad ({count})", + "setupIntegration": "Konfigurera integration", + "reviewIntegration": "Granska integration", + "viewRepresentation": "Visa inställningar" + }, + "loadError": { + "title": "Konfigurationsassistenten för Docker kunde inte laddas", + "message": "Information om Docker tjänsten är inte tillgänglig. Försök igen utan att lämna denna sida." + } + }, "table": { "updated": "Uppdaterad {when}", "refresh": { @@ -5115,9 +7139,6 @@ "totalMemory": "Totalt minne: {memory}" }, "field": { - "name": { - "label": "Namn" - }, "state": { "label": "Status", "option": { @@ -5131,9 +7152,6 @@ } }, "stats": { - "cpu": { - "label": "CPU" - }, "memory": { "label": "Minne" } @@ -5196,8 +7214,11 @@ } }, "remove": { - "label": "Ta bort", "confirm": "Klicka igen för att ta bort permanent", + "confirmation": { + "title": "{count, plural, one {Ta bort # behållare?} other {Ta bort # behållare?}}", + "message": "{count, plural, one {Detta tar permanent bort # behållare: {names}} other {Detta tar permanent bort # behållare: {names}}}" + }, "notification": { "success": { "title": "Containrar borttagna", @@ -5209,8 +7230,13 @@ } } }, + "result": { + "failure": { + "title": "Vissa behållaråtgärder misslyckades", + "message": "{total, plural, one {{failed} av # åtgärd misslyckades: {names}} other {{failed} av # åtgärder misslyckades: {names}}}" + } + }, "refresh": { - "label": "Uppdatera", "notification": { "success": { "title": "Containrar uppdaterade", @@ -5241,18 +7267,33 @@ }, "error": { "internalServerError": "Kunde inte hämta Docker-containrar", + "endpointUnavailable": "{count, plural, one {# Docker slutpunkt otillgänglig: {names}} other {# Docker slutpunkter otillgängliga: {names}}}", "noColumns": "Välj minst en kolumn i widgetinställningarna" } }, "kubernetes": { + "context": { + "label": "Kubernetes kontext", + "loadError": { + "title": "Kubernetes kontexter kunde inte laddas", + "message": "Kontextinformationen är inte tillgänglig. Försök igen utan att lämna den här sidan." + }, + "status": { + "available": "Tillgänglig", + "degraded": "Metrics unavailable", + "unavailable": "Unavailable" + }, + "unavailable": "Denna Kubernetes kontext kan inte nås. Välj en annan kontext eller verifiera dess uppgifter och slutpunkt.", + "metricsUnavailable": "Denna kontext är nåbar, men Metrics Server är inte tillgänglig. Inventering förblir tillgänglig utan levande CPU och minnesanvändning." + }, "cluster": { "title": "Klusterinstrumentpanel", "label": "Kluster", "providers": "Leverantörer", "version": "Version", - "architecture": "Arkitektur", "capacity": { "title": "Kapacitet", + "metricsUnavailable": "Metrics Server är inte tillgänglig. Inventering och reserverad kapacitet förblir synlig, men levande CPU och minnesanvändning kan inte visas.", "resource": { "reserved": "Reserverat", "used": "Använt" @@ -5271,38 +7312,10 @@ } }, "nodes": { - "label": "Noder", "field": { - "name": { - "label": "Namn" - }, - "state": { - "label": "Status", - "option": { - "ready": "Redo", - "NotReady": "Inte redo" - } - }, - "cpu": { - "label": "CPU" - }, - "memory": { - "label": "RAM" - }, - "pods": { - "label": "Podar" - }, - "operatingSystem": { - "label": "OS" - }, - "architecture": { - "label": "Arkitektur" - }, + "metricsUnavailable": "Unavailable", "kubernetesVersion": { "label": "Kubernetes-version" - }, - "creationTimestamp": { - "label": "Skapad" } }, "table": { @@ -5310,43 +7323,17 @@ } }, "namespaces": { - "label": "Namnområden", - "field": { - "name": { - "label": "Namn" - }, - "state": { - "label": "Status", - "option": { - "active": "Aktiv", - "terminating": "Avslutas" - } - }, - "creationTimestamp": { - "label": "Skapad" - } - }, "table": { "search": "Sök bland {count} namnområden" } }, "ingresses": { - "label": "Ingressar", "field": { - "name": { - "label": "Namn" - }, - "namespace": { - "label": "Namnområde" - }, "className": { "label": "Klassnamn" }, "rulesAndPaths": { "label": "Regler och sökvägar" - }, - "creationTimestamp": { - "label": "Skapad" } }, "table": { @@ -5354,17 +7341,7 @@ } }, "services": { - "label": "Tjänster", "field": { - "name": { - "label": "Namn" - }, - "namespace": { - "label": "Namnområde" - }, - "type": { - "label": "Typ" - }, "ports": { "label": "Portar" }, @@ -5373,9 +7350,6 @@ }, "clusterIP": { "label": "Kluster-IP" - }, - "creationTimestamp": { - "label": "Skapad" } }, "table": { @@ -5383,25 +7357,12 @@ } }, "pods": { - "label": "Podar", "field": { - "name": { - "label": "Namn" - }, - "namespace": { - "label": "Namnområde" - }, "image": { "label": "Bild" }, "applicationType": { "label": "Applikationstyp" - }, - "status": { - "label": "Status" - }, - "creationTimestamp": { - "label": "Skapad" } }, "table": { @@ -5409,51 +7370,17 @@ } }, "secrets": { - "label": "Hemligheter", - "field": { - "name": { - "label": "Namn" - }, - "namespace": { - "label": "namnområde" - }, - "type": { - "label": "typ" - }, - "creationTimestamp": { - "label": "Skapad" - } - }, "table": { "search": "Sök bland {count} hemligheter" } }, "configmaps": { - "label": "ConfigMaps", - "field": { - "name": { - "label": "Namn" - }, - "namespace": { - "label": "namnområde" - }, - "creationTimestamp": { - "label": "Skapad" - } - }, "table": { "search": "Sök bland {count} ConfigMaps" } }, "volumes": { - "label": "Volymer", "field": { - "name": { - "label": "Namn" - }, - "namespace": { - "label": "Namnområde" - }, "accessModes": { "label": "Åtkomstlägen" }, @@ -5468,12 +7395,6 @@ }, "volumeName": { "label": "Volymnamn" - }, - "status": { - "label": "Status" - }, - "creationTimestamp": { - "label": "Skapad" } }, "table": { @@ -5482,6 +7403,29 @@ }, "error": { "internalServerError": "Kunde inte hämta Kubernetes-data" + }, + "field": { + "name": { + "label": "Jobbnamn" + }, + "namespace": { + "label": "Namnplats" + }, + "creationTimestamp": { + "label": "Adderad" + }, + "state": { + "label": "Jobbstatus" + }, + "status": { + "label": "Status" + }, + "type": { + "label": "Nedladdningsklientens typ" + }, + "architecture": { + "label": "Arkitektur" + } } }, "permission": { @@ -5515,71 +7459,27 @@ }, "navigationStructure": { "manage": { - "workshop": { - "label": "Workshop" - }, "label": "Hantera", - "boards": { - "label": "Tavlor" - }, - "integrations": { - "label": "Integrationer", + "custom-widgets": { "edit": { - "label": "Redigera" + "flow": { + "label": "Flöde" + } }, - "new": { - "label": "Ny" - } - }, - "search-engines": { - "label": "Sökmotorer", - "new": { - "label": "Ny" + "workshop": { + "label": "Verkstad" }, - "edit": { - "label": "Redigera" - } - }, - "medias": { - "label": "Media" - }, - "apps": { - "label": "Applikationer", - "new": { - "label": "Ny" - }, - "edit": { - "label": "Redigera" + "publish": { + "label": "Publicera till Workshop" } }, "users": { - "label": "Användare", - "create": { - "label": "Addera" - }, "general": "Allmänt", - "security": "Säkerhet", - "board": "Tavlor", - "groups": { - "label": "Grupper" - }, - "invites": { - "label": "Inbjudningar" - } + "security": "Säkerhet" }, "tools": { "label": "Verktyg", - "tasks": { - "label": "Uppgifter" - }, - "docker": { - "label": "Docker", - "logs": { - "label": "Loggar" - } - }, "kubernetes": { - "label": "Kubernetes", "nodes": { "label": "Noder" }, @@ -5605,11 +7505,7 @@ "label": "Volymer" } }, - "logs": { - "label": "Loggar" - }, "certificates": { - "label": "Certifikat", "hostnames": { "label": "Värdnamn" } @@ -5620,12 +7516,60 @@ }, "about": { "label": "Om" + }, + "assistant": { + "label": "Assistent" } } }, "search": { "placeholder": "Sök efter vad som helst", "nothingFound": "Inget hittades", + "modePicker": { + "search": { + "label": "Sökning", + "placeholder": "Sök efter appar, tavlor, sidor, kommandon och inställningar" + }, + "apps": { + "label": "Applikationer", + "placeholder": "Sök efter appar, tavlor och integrationer" + }, + "command": { + "label": "Kommandon", + "placeholder": "Sök åtgärder och kommandon" + }, + "preferences": { + "label": "Inställningar", + "placeholder": "Sök och ändra inställningar" + }, + "assistant": { + "label": "Assistent", + "placeholder": "Fråga assistent" + }, + "external": { + "label": "Webb", + "placeholder": "Sök med en extern sökmotor" + }, + "media": { + "label": "Media", + "placeholder": "Sök efter en film eller serie", + "fallback": "Sök media efter \"{query}\"" + }, + "userGroup": { + "label": "Personer", + "placeholder": "Sök användare och grupper" + }, + "continueWith": "Fortsätt med", + "dialogAriaLabel": "{mode} kommandomeny", + "navigationLabel": "Sök lägen", + "modeAriaLabel": "{mode} läge", + "resultsAriaLabel": "{mode} resultat", + "footer": { + "navigate": "Navigate", + "open": "Öppna", + "close": "Stäng" + } + }, "error": { "fetch": "Ett fel uppstod när data hämtades" }, @@ -5634,7 +7578,6 @@ "help": "Sök efter applikationer, integrationer eller tavlor", "group": { "app": { - "title": "Applikationer", "children": { "action": { "open": { @@ -5650,7 +7593,6 @@ } }, "board": { - "title": "Tavlor", "children": { "action": { "open": { @@ -5670,9 +7612,6 @@ "title": "Välj en åtgärd för tavlan" } } - }, - "integration": { - "title": "Integrationer" } } }, @@ -5701,9 +7640,6 @@ "newBoard": { "label": "Addera en grupp" }, - "importBoard": { - "label": "Importera en tavla" - }, "newApp": { "label": "Addera en ny applikation" }, @@ -5773,7 +7709,6 @@ } }, "defaultSearchEngineId": { - "label": "Förvald sökmotor", "children": { "detail": { "title": "Välj din förvalda sökmotor" @@ -5781,7 +7716,6 @@ } }, "openSearchInNewTab": { - "label": "Öppna sökresultat i ny flik", "children": { "detail": { "title": "Öppna sökresultat i ny flik" @@ -5789,7 +7723,6 @@ } }, "ddgBangs": { - "label": "Aktivera DuckDuckGo bangs", "children": { "detail": { "title": "Aktivera DuckDuckGo bangs" @@ -5804,6 +7737,13 @@ } } }, + "byteUnitSystem": { + "children": { + "detail": { + "title": "Välj enheter för datastorlek" + } + } + }, "homeBoardId": { "label": "Starttavla", "children": { @@ -5821,7 +7761,6 @@ } }, "pingIconsEnabled": { - "label": "Använd ikoner för pings", "children": { "detail": { "title": "Använd ikoner för pings" @@ -5829,7 +7768,6 @@ } }, "enableRightClickOnWidgets": { - "label": "Aktivera högerklick på widgetar", "children": { "detail": { "title": "Aktivera högerklick på widgetar" @@ -5857,6 +7795,7 @@ "description": "Börja skriva för att söka i dina mediaintegrationer", "disabled": { "noIntegration": "Lägg till en Overseerr-, Jellyseerr- eller Seerr-integration för att aktivera mediasökning.", + "signInRequired": "Logga in för att söka efter integreringar.", "scoped": "Denna widget har ingen tillgänglig mediaintegration för begäran." } } @@ -5873,7 +7812,6 @@ "help": "Använd en extern sökmotor", "group": { "searchEngine": { - "title": "Sökmotorer", "tipDdgBangs": "Tips: Du kan också använda DuckDuckGo bangs här, t.ex. !something", "bang": { "searchWithQuery": "Sök \"{query}\" med {label}", @@ -5924,20 +7862,6 @@ "group": { "mode": { "title": "Lägen" - }, - "help": { - "title": "Hjälp", - "option": { - "documentation": { - "label": "Dokumentation" - }, - "submitIssue": { - "label": "Skicka in ett ärende" - }, - "discord": { - "label": "Community Discord" - } - } } } }, @@ -5949,9 +7873,10 @@ "other": { "label": "Sök med en annan sökmotor" }, - "no-default": { - "label": "Ingen standardsökmotor", - "description": "Ange en standardsökmotor i inställningarna" + "no-engines": { + "label": "Inga sökmotorer konfigurerade", + "descriptionCreate": "Lägg till en sökmotor till sök från kommandomenyn", + "descriptionUnavailable": "Be en administratör att konfigurera en sökmotor" }, "search": { "label": "Sök efter \"{query}\" med {name}" @@ -6031,7 +7956,6 @@ "help": "Sök efter användare eller grupper", "group": { "user": { - "title": "Användare", "children": { "action": { "detail": { @@ -6044,7 +7968,6 @@ } }, "group": { - "title": "Grupper", "children": { "action": { "detail": { @@ -6068,9 +7991,6 @@ "engine": { "search": "Hitta en sökmotor", "field": { - "name": { - "label": "Namn" - }, "short": { "label": "Kort" }, @@ -6083,12 +8003,19 @@ }, "page": { "list": { - "title": "Sökmotorer", + "ariaLabel": "Konfigurerade sökmotorer", "noResults": { "title": "Det finns inga sökmotorer ännu", - "action": "Skapa din första sökmotor" + "description": "Sökmotorer låter Spotlight skicka en fråga till en webbplats eller ansluten tjänst.", + "action": "Skapa din första sökmotor", + "filteredTitle": "Inga sökmotorer matchar din sökning", + "filteredDescription": "Inga sökmotorer matchar \"{search}\". Prova ett annat namn eller URL." }, - "interactive": "Interaktiv, använder en integration" + "interactive": "Interaktiv, använder en integration", + "type": { + "generic": "URL mall", + "fromIntegration": "Integration" + } }, "create": { "title": "Ny sökmotor", @@ -6107,11 +8034,9 @@ "title": "Redigera sökmotor", "notification": { "success": { - "title": "Ändringarna har sparats", "message": "Sökmotorn har sparats" }, "error": { - "title": "Kunde inte tillämpa ändringar", "message": "Sökmotorn kunde inte sparas" } }, @@ -6250,6 +8175,10 @@ } }, "log": { + "context": { + "widgetError": "Widget rapporterade ett fel runt denna gång", + "expiredWidgetError": "Loggar runt denna widget fel behålls inte längre" + }, "level": { "option": { "debug": "Felsök", @@ -6261,7 +8190,6 @@ }, "onboardingTour": { "learnMore": "Läs dokumentationen", - "next": "Nästa", "prev": "Bakåt", "done": "Klar", "skip": "Hoppa över tur", @@ -6325,5 +8253,359 @@ "description": "Ändra ditt färgschema, språk, starttavla och inställningar. Du kan också hoppa till administrationsområdet härifrån." } } + }, + "metadata": { + "description": "En egen instrumentbräda för *arr stack och hela ditt hem. Integrerar med 50 + tjänster, realtids-widgets, inga konfigurationsfiler.", + "dashboardTitle": "{appName} Översikt" + }, + "assistant": { + "title": "Assistent", + "open": "Öppen assistent", + "close": "Stäng assistenten", + "minimize": "Minimera assistent", + "spotlight": "Fråga assistent", + "spotlightDescription": "Skriv och skicka en fråga utan att lämna kommandomenyn.", + "spotlightPrompt": { + "title": "Fråga assistent", + "description": "Skriv in en fråga ovan. Skriv in den i bakgrunden.", + "send": "Skicka prompt", + "empty": "Skriv en fråga ovan" + }, + "unavailable": { + "checking": "Kontrollerar om assistenten är tillgänglig…", + "error": "Assistentens tillgänglighet kunde inte kontrolleras. Försök igen.", + "notConfigured": "En administratör måste konfigurera och aktivera assistenten först.", + "signIn": "Logga in för att använda assistent." + }, + "newConversation": "Ny konversation", + "conversations": "Konversationer", + "conversationActions": "Konversation åtgärder", + "searchConversations": "Sök konversationer", + "noMatchingConversations": "Inga matchande konversationer", + "moreActions": "Fler svarsåtgärder", + "renameConversation": { + "action": "Döp om", + "label": "Konversationens namn", + "save": "Spara namn", + "failedTitle": "Konversationen kunde inte döpas om", + "failedDescription": "Homarr kunde inte byta namn på denna konversation. Försök igen." + }, + "deleteConversation": { + "title": "Ta bort konversation?", + "description": "”{title}” och dess meddelanden kommer att raderas permanent.", + "failedTitle": "Konversationen kunde inte tas bort", + "failedDescription": "Homarr kunde inte ta bort denna konversation. Försök igen." + }, + "closeHistory": "Stäng konversationshistorik", + "openHistory": "Öppna konversationshistorik", + "emptyTitle": "Vad kan jag hjälpa till med?", + "emptyDescription": "Fråga om din Homarr inställning, inspektera live-instansdata, eller godkänna åtgärder när du vill att jag ska göra en ändring.", + "suggestions": { + "health": { + "label": "Kontrollera tjänstens hälsa", + "prompt": "Kontrollera mina integrationer och sammanfatta allt som behöver uppmärksammas." + }, + "explore": { + "label": "Utforska min hembygd", + "prompt": "Visa mig vad jag kan se och hantera i denna Homarr instans." + }, + "media": { + "label": "Hitta media att begära", + "prompt": "Hjälp mig att hitta en film eller serie på begäran." + }, + "style": { + "label": "Förbättra en instrumentpanel", + "prompt": "Hjälp mig att förbättra en tavels utseende eller anpassade CSS. Visa mig mina tavlor först, bevara sedan mina nuvarande inställningar medan vi gör ändringen." + }, + "designWidget": { + "label": "Designa en widget", + "prompt": "Skapa och installera en anpassad widget för " + } + }, + "composerPlaceholder": "Fråga assistent…", + "runtime": { + "model": "Modell", + "searchModels": "Sök modeller", + "noModels": "Inga modeller tillgängliga", + "otherModels": "Andra modeller", + "imageInput": "Accepterar bildinmatning", + "thinking": "Tänker läge", + "reasoning": { + "auto": "Automatiskt", + "none": "Av", + "minimal": "Minimal", + "low": "Låg", + "medium": "Mellan", + "high": "Hög" + } + }, + "providerQuota": { + "title": "Homarr leverantör", + "communityWorkshop": "Gemenskapens verkstad", + "dailyAllowance": "Daglig begäran ersättning", + "remainingLabel": "{remaining} av {limit} Homarr förfrågningar kvar", + "loading": "Laddar Homarr leverantörsersättning", + "signInRequired": "Inloggning av verkstad krävs för leverantören av Homarr", + "signInDescription": "Logga in med GitHub genom Community Workshop för att få din separata dagtraktamente.", + "exhaustedDescription": "Din Homarr leverantörsersättning används för idag. Den återställs vid midnatt UTC.", + "unavailableDescription": "Logga in på Workshopen eller vänta på att din leverantörsersättning för Homarr återställs.", + "signIn": "Logga in med GitHub", + "signInError": "GitHub-inloggning misslyckades. Försök igen om ett ögonblick.", + "loadError": "Leverantörsersättningen för Homarr kunde inte laddas.", + "reset": "Återställer {relative} på ", + "toolCalls": "Varje modellförfrågan och avslutat verktygssamtal använder en begäran.", + "retry": "Ladda om ersättning", + "level": { + "ok": "Ok", + "warning": "Varning", + "bad": "Låg", + "dead": "Använt" + } + }, + "stop": "Stoppa svar", + "send": "Skicka meddelande", + "copy": "Kopiera svar", + "copyMessage": "Kopiera meddelande", + "editMessage": "Redigera meddelande", + "updateMessage": "Uppdatera meddelande", + "regenerate": "Återskapa svar", + "helpful": "Hjälpsam", + "notHelpful": "Inte till hjälp", + "readAloud": "Läs svaret högt", + "stopReading": "Sluta läsa svar", + "feedbackError": "Din feedback kunde inte sparas. Försök igen.", + "exportMarkdown": "Exportera som markdown", + "exportConversation": { + "action": "Exportera konversation som markdown", + "failedTitle": "Konversationen kunde inte exporteras", + "failedDescription": "Homarr kunde inte ladda denna konversation. Försök igen." + }, + "reasoning": "Tänker", + "previousResponse": "Föregående svar", + "nextResponse": "Nästa svar", + "removeAttachment": "Ta bort bilaga", + "downloadFile": "Ladda ner {name}", + "attachedImage": "Bifogad bild", + "externalImageBlocked": "Extern bild blockerad för sekretess", + "image": { + "loading": "Laddar bild", + "failed": "Bilden kunde inte laddas.", + "retry": "Försök igen" + }, + "quoteSelection": "Offert", + "dismissQuote": "Ta bort offert", + "attachments": { + "add": "Bifoga en bild eller ett dokument", + "errorTitle": "Bilagan kunde inte läggas till", + "imageUnsupported": "Den valda modellen stöder inte bildinmatning." + }, + "mentions": { + "menu": "Lägg till Homarr kontext", + "context": "Kontext", + "app": "Applikationer", + "integration": "Integrationer", + "board": "Tavlor", + "widget": "Widgetar", + "tools": "Tillgängliga verktyg" + }, + "markdown": { + "diagram": "Diagram", + "renderingDiagram": "Renderar diagram…", + "diagramUnavailable": "Detta diagram kunde inte renderas." + }, + "commands": { + "menu": "Assistant kommandon", + "health": "Förbered en service-hälsa kontroll", + "explore": "Förbered en översikt över denna Homarr instans", + "media": "Förbered en mediasökning", + "style": "Förbered ett utseende på tavlan eller anpassad CSS-ändring", + "designWidget": "Förbered en en-prompt anpassad widget" + }, + "usage": { + "tokens": "tokens", + "contextWindow": "Kontext fönster", + "requestDetails": "Begär detaljer", + "used": "Senaste steg", + "remaining": "Återstående", + "capacity": "Kapacitet", + "input": "Input", + "output": "Utdata", + "cached": "Cachad inmatning", + "cacheWrite": "Skriva cacher", + "reasoning": "Resonerar", + "inputShort": "i", + "outputShort": "ut", + "cachedShort": "cachad", + "reasoningShort": "resonemang", + "firstOutput": "Första utmatning", + "homarrTiming": "Homarr observerad", + "endToEnd": "Slut till slut", + "observedThroughput": "Observerad genomströmning", + "providerTiming": "Leverantör rapporterad", + "loadingProviderDetails": "Laddar generationsdetaljer…", + "providerDetailsPending": "OpenRouter bearbetar fortfarande några generationsdetaljer. Återöppna för att försöka igen.", + "providerLatency": "Leverantörens latens", + "generationTime": "Generation tid", + "moderationLatency": "Moderering", + "providerThroughput": "Leverantörens genomströmning", + "fallbacks": "Fallbackar", + "fallbackLatency": "Fallback latens", + "cacheDiscount": "Cache rabatt", + "normalizedTokens": "OpenRouter normaliserad indata / utdata", + "byok": "Åk", + "cost": "Kostnad", + "reported": "Rapporterat av leverantör", + "estimated": "Beräknad från modellprissättning", + "upstreamCost": "Uppströms inferens", + "webSearches": "Webbsökningar", + "finishReason": "Slutför anledningen", + "notReported": "Ej rapporterad", + "agentSteps": "Agentkommando", + "step": "Steg {number}", + "generation": "Generation" + }, + "toolInput": "Input", + "toolOutput": "Utdata", + "toolActivity": { + "iconSearch": "Letar efter ”{query}” ikoner", + "iconBrowse": "Surfa tillgängliga ikoner" + }, + "toolNavigation": { + "openPreview": "Öppna förhandsgranskning", + "openWidget": "Öppna widget" + }, + "webSearch": { + "title": "Sök på webben", + "completed": "OpenRouter sökte på live webb för detta svar.", + "searches": "{count, plural, one {# sök} other {# söker}}", + "sources": "{count, plural, one {# källa} other {# källor}}" + }, + "responseError": { + "title": "Assistenten kunde inte avsluta", + "description": "Försök igen. Om problemet fortsätter, be en administratör att verifiera den konfigurerade modellslutpunkten." + }, + "toolPreparationError": { + "title": "Denna begäran kunde inte förberedas", + "description": "Modellen stannade innan den levererade fullständiga detaljer. Försök igen svaret eller beskriv begäran igen. Ingen ändring gjordes." + }, + "busy": { + "title": "Assistenten arbetar redan", + "description": "Vänta på det aktuella svaret eller öppna det för att stoppa körningen." + }, + "pendingAction": { + "answerTitle": "Svar behövs", + "answerFallback": "Välj ett svar för att fortsätta", + "formTitle": "Granska appdetaljer", + "boardFormTitle": "Granska ändringar i tavlan", + "review": "Granska", + "sendBlocked": "Lös den väntande begäran innan du skickar" + }, + "activity": { + "thinking": "Assistenten tänker", + "working": "Arbetar på din fråga", + "ready": "Svar redo", + "completed": "Öppna svaret", + "approval": "Godkännande behövs", + "failed": "Assistenten behöver uppmärksamhet", + "expand": "Öppna assistentens svar", + "dismiss": "Avfärda assistent aktivitet" + }, + "scrollToLatest": "Bläddra till senaste", + "refresh": { + "action": "Uppdatera aktuell vy", + "working": "Uppdaterar aktuell vy", + "completeTitle": "Visa uppdaterat", + "completeDescription": "Synlig Homarr data har laddats om.", + "failedTitle": "Vyn kunde inte uppdateras", + "failedDescription": "Ändringen kan fortfarande sparas. Försök att uppdatera åtgärden igen." + }, + "askUser": { + "preparing": "Förbereder fråga", + "answered": "Ditt svar", + "other": "Annat", + "otherLabel": "Ditt svar", + "otherPlaceholder": "Skriv ett annat svar…", + "submit": "Skicka svar", + "cancelOther": "Avbryt annat svar", + "optionKind": { + "affirmative": "Bekräfta", + "negative": "Avböj", + "alternative": "Alternativ", + "custom": "Anpassad" + } + }, + "configureApp": { + "title": "Granska appdetaljer", + "description": "Välj en lokal ikon och justera allt innan assistenten begär godkännande.", + "preparing": "Förbereder appdetaljer", + "continue": "Använd dessa detaljer", + "ready": "App detaljer redo", + "automaticContinue": "Använda dessa appdetaljer automatiskt" + }, + "configureBoardSettings": { + "title": "Granska ändringar i tavlan", + "loading": "Laddar aktuella foruminställningar", + "loadErrorTitle": "Forumets inställningar kunde inte laddas", + "loadErrorDescription": "Tavlan kanske inte längre finns eller så har du inte behörighet att ändra den.", + "proposedCount": "Assistent föreslagna {count} fält", + "changeCount": "{count} ändringar redo", + "ready": "Styrelsens ändringar redo", + "cancelled": "Nuvarande inställningar för tavlan hålls", + "noChanges": "Inga inställningar ändras", + "keepCurrent": "Behåll nuvarande inställningar", + "continue": "Fortsätt till godkännande", + "automaticContinue": "Godkännande av föreslagna ändringar automatiskt", + "resetAll": "Återställ alla ändringar", + "tabs": { + "css": "Custom CSS", + "appearance": "Utseende", + "background": "Bakgrund", + "general": "Generellt" + }, + "cssDescription": "Redigera hela stilmallen. Befintliga regler hålls om de inte tas bort här.", + "cssCharacters": "{count} av 16384 tecken", + "copyCss": "Copy CSS", + "copied": "Kopierad", + "restoreCss": "Restore current CSS", + "remoteCssTitle": "Denna CSS laddar en fjärrresurs", + "remoteCssDescription": "Importerade stilmallar och fjärr-URL:er kontaktar en annan server när forumet laddas. Granska dem innan du fortsätter." + }, + "configureWidget": { + "title": "Granska widget", + "preparing": "Förbereder widgetinställningar", + "review": "Granska widget och integrationer", + "ready": "Widgetens konfiguration klar", + "cancelled": "Widget lades inte till", + "automaticContinue": "Accepterar den föreslagna widgetkonfigurationen automatiskt", + "definitionLoadErrorTitle": "Widgetens inställningar kunde inte laddas", + "definitionLoadErrorDescription": "Homarr kunde inte ladda widgetens inställningar. Försök igen.", + "loadErrorTitle": "Integrationer kunde inte laddas", + "loadErrorDescription": "Homarr kunde inte ladda integrationer tillgängliga för denna widget.", + "noIntegrationTitle": "En kompatibel integration krävs", + "noIntegrationDescription": "Konfigurera en integration som stöds av denna widget innan du lägger till den i instrumentpanelen.", + "connectIntegration": "Anslut tjänst", + "manageIntegrations": "Hantera integrationer", + "skip": "Lägg inte till", + "errorTitle": "Widgetens inställningar kunde inte förberedas", + "errorDescription": "Modellen gav inte en komplett widget konfiguration. Ingen widget har lagts till." + }, + "approvalRequired": "Godkännande krävs", + "complete": "Complete", + "denied": "Nekad", + "failed": "Misslyckades", + "working": "Arbetar", + "approvalDescription": "Granska ändringen innan den körs.", + "approveAndRun": "Godkänn och kör", + "deny": "Neka", + "autoApproval": { + "label": "Automatiska godkännande", + "composerLabel": "Godkänn för mig", + "title": "Automatiska godkännande", + "description": "Skapa formulär automatiskt och godkänn skyddade ändringar för den här konversationen. Frågor väntar fortfarande på ditt svar, och dina Homarr behörigheter gäller fortfarande. Detta stängs av när du byter konversationer.", + "enable": "Aktivera för denna konversation", + "disable": "Stäng av automatiska godkännanden", + "enabled": "Automatiska godkännanden är på", + "approving": "Godkänner automatiskt" + } } } diff --git a/packages/translation/src/lang/tr.json b/packages/translation/src/lang/tr.json index 1711d964f..509fc21c6 100644 --- a/packages/translation/src/lang/tr.json +++ b/packages/translation/src/lang/tr.json @@ -1,156 +1,246 @@ { "init": { - "step": { - "start": { - "title": "Homarr'a Hoş Geldiniz", - "subtitle": "Homarr örneğinizi kurmaya başlayalım.", - "description": "Başlamak için lütfen Homarr örneğinizi nasıl kurmak istediğinizi seçin.", - "action": { - "scratch": "Sıfırdan Başla", - "importOldmarr": "Homarr 1.0'dan Önceki Yedeğinizi İçe Aktarın", - "restoreSqlite": "SQLite yedeklemesinden geri yükle", - "restoreSqliteDescription": "Önceki bir Homarr örneğinden tam SQLite veritabanı yedeklemesi yükleyin. Bu, tüm panoları, kullanıcıları, uygulamaları, entegrasyonları ve ayarları geri yükler.", - "backToOptions": "← Kurulum seçeneklerine geri dön" + "studio": { + "navigationLabel": "Kurulum bölümleri", + "back": "Geri", + "buildBoard": "Panomu oluşturun", + "common": { + "unknownError": "Bir şeyler ters gitti. Seçimleriniz hâlâ burada; tekrar deneyin." + }, + "claim": { + "checking": "Bu ilk kullanım oturumu güvenli hâle getiriliyor…", + "checkingTitle": "Güvenli kurulum hazırlanıyor", + "lockedTitle": "Kurulum başka bir tarayıcıda açık", + "lockedDescription": "Orada devam edin veya tekrar denemeden önce güvenli ilk kullanım oturumunun süresinin dolmasını bekleyin.", + "signInTitle": "Yönetici girişi gerekli", + "signInDescription": "Zaten bir yönetici mevcut. Kimlik bilgilerini veya hizmet erişimini açığa çıkarmadan kuruluma devam etmek için giriş yapın.", + "signIn": "Giriş yap ve devam et", + "errorTitle": "Kurulum güvenli hâle getirilemedi", + "errorDescription": "Güvenli ilk kullanım oturumunu yeniden denemek için sayfayı yenileyin." + }, + "navigation": { + "essentials": "Temel özellikler", + "discover": "Keşfet", + "connect": "Bağlan", + "board": "Pano", + "extend": "Genişlet", + "review": "Gözden geçir" + }, + "welcome": { + "title": "Evinize hoş geldiniz.", + "description": "Homarr v{version} sürümüne hoş geldiniz. Temel özellikler konusunda size rehberlik edecek ve ilk panonuzu oluşturmanıza yardımcı olacağız.", + "start": "Başlayın", + "restore": "Yedeği geri yükle", + "restoreTitle": "Yedekten geri yükle", + "restoreDescription": "Tam bir SQLite yedeği panoları, kişileri, uygulamaları, entegrasyonları ve ayarları geri yükler. Homarr, herhangi bir şeyi değiştirmeden önce yedeği doğrular.", + "errorTitle": "Kurulum başlatılamadı", + "errorDescription": "Kurulum seçimleriniz hâlâ burada. Tekrar deneyin veya sorun devam ederse sayfayı yenileyin." + }, + "account": { + "title": "Yöneticinizi oluşturun", + "description": "Yönetici kullanıcınız için kimlik bilgilerini girin.", + "username": "Yönetici kullanıcı adı", + "passwordHint": "Yalnızca en az 8 karakter gereklidir. Diğer parola gücü kontrolleri öneri niteliğindedir.", + "create": "Yönetici oluştur", + "errorTitle": "Yönetici oluşturulamadı", + "recoveryTitle": "Yönetici hesabı oluşturuldu", + "recoveryDescription": "Otomatik giriş tamamlanamadı. Kuruluma devam etmek için az önce oluşturduğunuz yönetici kimlik bilgileriyle giriş yapın.", + "recoveryAction": "Giriş yap ve devam et", + "unknownError": "Yönetici oluşturulamadı." + }, + "externalGroup": { + "title": "Yönetici grubunuzu bağlayın", + "description": "LDAP veya OIDC tarafından gönderilen tam grup adını kullanın. Bu grubun üyeleri yönetici erişimi elde eder.", + "name": "Harici yönetici grubu", + "nameDescription": "Bu alan büyük/küçük harfe duyarlıdır ve kimlik sağlayıcınızla eşleşmelidir.", + "continue": "Grubu kaydet ve devam et", + "errorTitle": "Grup kaydedilemedi", + "unknownError": "Yönetici grubu kaydedilemedi." + }, + "essentials": { + "title": "Tanıdık varsayılanlarla başlayın", + "description": "Önce herkesin göreceği dili ve görünümü ayarlayın, ardından Homarr'a hizmetleriniz tarafından kullanılan adres biçimini verin.", + "language": "Öntanımlı Dil", + "theme": "Varsayılan tema", + "themeAuto": "Sistem", + "themeLight": "Aydınlık", + "themeDark": "Koyu", + "serverOriginHelp": "Homarr, algılanan hizmet URL'lerini önceden doldurmak için bu adresi kullanır. Her hizmeti yine de ayrı ayrı düzenleyebilirsiniz.", + "serverDescription": "Bu bir kısayoldur, kısıtlama değildir. Algılanan her hizmet düzenlenebilir.", + "serverOrigin": "Etki alanı, IP veya ters proxy yolu", + "serverOriginDescription": "Örnekler: home.lan, 192.168.1.10 veya https://home.example.com/services. Aşağıda her hizmetin nasıl ekleneceğini seçin.", + "analytics": "Anonim ürün analizlerini paylaş", + "analyticsDescription": "Homarr'ın özellik güvenilirliğini geliştirmesine yardımcı olur. Hizmet kimlik bilgileri veya pano içeriği gönderilmez." + }, + "discover": { + "title": "Bu kurulumun gerçekte nelerle iletişim kurabildiğini görün", + "description": "Homarr, özellikleri bulunduğu ortamda kontrol eder. Eksik bir Docker yuvası veya Kubernetes bağlamı, manuel kurulumu hiçbir zaman engellemez.", + "database": "Veritabanı", + "docker": "Docker ve uyumlu yuvalar", + "kubernetes": "Kubernetes", + "assistantWorkshop": "Yardımcı ve Atölye", + "found": "{integrations} entegrasyon ve {apps} ek uygulama bulundu", + "retryKubernetes": "Kubernetes'i tekrar kontrol et", + "retryWorkshop": "Atölye'yi tekrar kontrol et", + "unknownVersion": "bilinmeyen sürüm", + "kubernetesAvailable": "Kubernetes'e {version} ile bağlandı", + "kubernetesDisabled": "Etkin değil; Docker veya manuel hizmetlerle devam edin", + "kubernetesUnavailable": "Kubernetes etkin ancak bu Homarr işlemi tarafından erişilemiyor", + "workshopAvailable": "Topluluk Atölyesi'ne ve barındırılan Yardımcı hizmetlerine erişilebiliyor", + "workshopUnavailable": "Yerel ve özel Yardımcı sağlayıcıları kullanılmaya devam edilebilir", + "partialTitle": "Bazı kaynaklar taranamadı", + "partialDescription": "Erişilebilen ana bilgisayarlardan alınan sonuçlar korunur. Yuva izinlerini kontrol edin veya sonraki bölümde hizmetleri manuel olarak ekleyin.", + "status": { + "checking": "Kullanılabilirlik kontrol ediliyor…", + "available": "Kullanılabilir", + "partial": "Kısmen kullanılabilir", + "empty": "Erişilebilir, eşleşen çalışan hizmet yok", + "disabled": "Sunucu yapılandırması tarafından devre dışı bırakıldı", + "unavailable": "Bu Homarr işleminden erişilemiyor" } }, - "import": { - "title": "Verileri İçe Aktar", - "subtitle": "Mevcut bir Homarr örneğinden veri içe aktarabilirsiniz.", - "dropzone": { - "title": "Zip dosyasını buraya sürükleyin veya göz atmak için tıklayın", - "description": "Seçtiğiniz zip işlenecek ve içe aktarmak istediğiniz verileri seçebileceksiniz" + "connect": { + "title": "Panoyu kullanışlı kılanları bağlayın", + "description": "Birden fazla hizmeti aynı anda seçin. Docker etiketleri önceliklidir, görüntü eşleştirme eksikleri tamamlar ve her URL ile kimlik bilgisi incelenebilir durumda kalır.", + "discoveredIntegrations": "Algılanan entegrasyon örnekleri ({count})", + "detectedIntegrationLabel": "{name} içe aktarılıyor; {kind} olarak algılandı", + "detectedAppLabel": "Algılanan {name} uygulamasını içe aktar", + "otherIntegrations": "Başka bir entegrasyon ekle", + "configureIntegrations": "Entegrasyonları yapılandır", + "discoveredApps": "Algılanan uygulamalar ({count})", + "appAddressRequired": "{name} için bir adres ekleyin veya onu seçimden kaldırın.", + "empty": "Hiçbir entegrasyon seçilmedi. Homarr yine de genel bileşenlerle kullanışlı bir başlangıç panosu oluşturur.", + "dockerSource": "Docker", + "manualSource": "Manuel", + "url": "Hizmet URL'si", + "noCredentials": "Kimlik bilgisi yok", + "noCredentialsDescription": "Bu entegrasyon kimlik bilgisi gerektirmez.", + "credentialMethod": "Kimlik bilgisi yöntemi", + "getApiKey": "Bu hizmet için API anahtarı ayarlarını açın", + "openGuide": "Bu hizmet için Homarr kurulum kılavuzunu açın", + "testConnection": "Bağlantıyı test et", + "testSuccess": "Bağlantı çalışıyor", + "testSuccessDescription": "Homarr mevcut adres ve kimlik bilgileriyle bağlandı.", + "testError": "Bağlantı başarısız oldu", + "testErrorDescription": "Hizmet adresini ve kimlik bilgilerini kontrol edip tekrar deneyin.", + "needsConfiguration": "Yapılandırma gerekiyor", + "tested": "Bağlantı test edildi", + "testFailed": "Bağlantı testi başarısız oldu", + "incompleteConfirmation": "Tamamlanmamış entegrasyonlar atlanacak. Bunlar olmadan devam edilsin mi?" + }, + "board": { + "title": "Oluşturmadan önce panoyu şekillendirin", + "description": "Homarr, korumalı Mobil ve Temel düzenleri oluşturur, ardından seçtiğiniz hizmetlerdeki uygulamaları ve uyumlu widget'ları yerleştirir.", + "target": "Yapılandırılacak pano", + "targetDescription": "Bu kurulumun güncellemesi gereken mevcut panoyu tam olarak seçin.", + "targetPlaceholder": "Bir pano seçin", + "targetRequired": "Devam etmeden önce yapılandırılacak panoyu seçin.", + "name": "Panel adı", + "nameDescription": "Pano URL'sinde kullanılır; yalnızca harf, rakam, kısa çizgi ve alt çizgi kullanılabilir.", + "nameRequired": "Devam etmeden önce bir pano adı girin.", + "primaryColor": "Birincil renk", + "secondaryColor": "İkincil renk", + "resetColors": "Renkleri sıfırla", + "radius": "Widget köşe yarıçapı", + "radiusOptions": { + "xs": "Sıkı", + "sm": "Hafif", + "md": "Dengeli", + "lg": "Yuvarlak", + "xl": "Yumuşak" }, - "fileInfo": { - "action": { - "change": "Dosyayı Değiştir" - } + "columns": "Pano sütunları", + "columnsDescription": "Sütunlar, öğeleri boyutlandırmak ve konumlandırmak için kullanılan yatay ızgarayı tanımlar. Çoğu kişi için 12 sütun yeterlidir.", + "columnCount": "{count, plural, one {# sütun} other {# sütun}}", + "leftSidebar": "Sol kenar çubuğu", + "rightSidebar": "Sağ kenar çubuğu", + "previewLabel": "İlk pano düzeninin canlı önizlemesi" + }, + "extend": { + "title": "Gelişmiş özellikler", + "tabsLabel": "Asistan, Workshop ve MCP kurulumu", + "assistant": "Asistan", + "workshop": "Atölye", + "assistantSetup": { + "loginTitle": "Yönetici olarak oturum açmak gerekli", + "loginDescription": "Sağlayıcı anahtarları ve model erişimi ayrıcalıklıdır. Kurulumu tamamlayın ve oturum açın; Homarr doğrudan Asistan yapılandırmasını açacaktır.", + "loginAction": "Asistanı yapılandırmak için oturum açın" }, - "importSettings": { - "title": "İçe Aktarma Ayarları", - "description": "İçe Aktarma İşlevlerini Yapılandır" + "workshopSetup": { + "title": "Homarr Atölyesi", + "description": "Topluluk tarafından oluşturulan Özel Widget'lara göz atın, istedikleri yetenekleri inceleyin, bunları yükleyin ve sunucular arasında kod kopyalamadan kendi çalışmalarınızı yayımlayın.", + "available": "Kullanılabilir", + "checking": "Kontrol ediliyor…", + "unavailable": "Kullanılamıyor", + "discoverTitle": "Keşfet", + "discoverDescription": "Gerçek, kendi kendine barındırılan iş akışları için oluşturulmuş widget'ları bulun.", + "installTitle": "İncele ve yükle", + "installDescription": "Herhangi bir şey eklemeden önce meta verileri ve yapılandırmayı görün.", + "publishTitle": "Paylaş", + "publishDescription": "Yeniden kullanılabilir widget'ları topluluğa geri yayımlayın.", + "browse": "Workshop'a göz at" }, - "boardSelection": { - "title": "{count} Panel Bulundu", - "description": "İçe Aktarılacak Tüm Panellerin Boyutlarını Seçin", - "action": { - "selectAll": "Tümünü Seç", - "unselectAll": "Tüm Seçimi Kaldır" - } - }, - "summary": { - "title": "İçe Aktarma Özeti", - "description": "Aşağıdaki Özeti Kontrol Ederek İçe Aktarılacak İşlevleri Görebilirsiniz", - "action": { - "import": "İçe Aktarmayı Onayla ve Devam Et" - }, - "entities": { - "apps": "Uygulamalar", - "boards": "Paneller", - "integrations": "Entegrasyonlar", - "credentialUsers": "Kullanıcı Kimlik Bilgileri" - } - }, - "tokenModal": { - "title": "İçe Aktarma Anahtarını Girin", - "field": { - "token": { - "label": "Token Anahtarı", - "description": "Önceki Homarr Örneğinizden Aldığınız İçe Aktarma Anahtarı girin" - } - }, - "notification": { - "error": { - "title": "Token", - "message": "Girdiğiniz Token Anahtarı Geçersiz" - } - } + "mcpSetup": { + "title": "Homarr MCP", + "description": "Claude, Codex veya başka bir MCP istemcisini Homarr'ın türlendirilmiş araçlarına bağlayın. API anahtarları, erişimin açıkça tanımlanmasını ve iptal edilebilmesini sağlar.", + "endpoint": "Akış Destekli HTTP uç noktası", + "keyTitle": "Bu anahtarı şimdi kopyalayın", + "keyDescription": "Güvenlik nedeniyle Homarr bu API anahtarını tekrar gösteremez.", + "copyKey": "API anahtarını kopyala", + "createKey": "MCP API anahtarı oluştur", + "errorTitle": "MCP API anahtarı oluşturulamadı", + "loginRequired": "API anahtarı oluşturmak için kurulumdan sonra yönetici olarak oturum açın.", + "configuration": "İstemci yapılandırması", + "copy": "Yapılandırmayı kopyala", + "copied": "Kopyalandı", + "advanced": "MCP araçlarını, izinleri ve kurulum ayrıntılarını aç" } }, - "user": { - "title": "Yönetici", - "subtitle": "Yönetici kullanıcınız için kimlik bilgilerini girin.", - "notification": { - "success": { - "title": "Kullanıcı oluşturuldu", - "message": "Kullanıcı başarıyla oluşturuldu" - }, - "error": { - "title": "Kullanıcı oluşturma başarısız" - } - } - }, - "group": { - "title": "Harici grup", - "subtitle": "Harici kullanıcılar için kullanılacak grubu belirtin.", - "form": { - "name": { - "label": "Grup adı", - "description": "Ad, harici sağlayıcının yönetici grubuyla eşleşmelidir" - } - } - }, - "settings": { - "title": "Ayarlar", - "subtitle": "Sunucu ayarlarınızı yapılandırın." - }, - "integrations": { - "title": "Entegrasyonlar", - "subtitle": "Kullandığınız hizmetleri seçin.", - "description": "Bağlanmak istediğiniz entegrasyonları seçin. Panonuzu eşleşen widget'larla otomatik olarak kuracağız.", - "action": { - "continue": "Devam Et", - "skip": "Şimdilik atla" - }, - "configure": { - "progress": "{current} / {total}", - "skip": "Bu entegrasyonu atla", - "finishing": "Panonuz kuruluyor...", - "error": { - "title": "Kurulum başarısız oldu", - "message": "Panonuzu kurarken bir şeyler yanlış gitti. Lütfen tekrar deneyin." - }, - "helpers": { - "tooltip": "URL yardımcıları", - "description": "Bu yardımcılar, hizmetlerinizin URL'sini tahmin etmeye çalışır. Çalışmazsa, adresi manuel olarak yazın." - } - }, - "urlTemplate": { - "label": "Temel URL", - "placeholder": "homelab.local veya 192.168.1.1", - "hint": "Entegrasyon URL'lerini otomatik doldurmak için temel alan adınızı veya IP'nizi girin", - "warning": "Temel URL'nizi şimdi ayarlamak, tüm entegrasyon URL'lerini otomatik olarak dolduracak ve kurulum sırasında zaman kazandıracak", - "preview": "örn. {example}", - "mode": { - "subdomain": "Alt alan adı", - "hostPort": "Ana Bilgisayar:Port" - } - }, - "docker": { - "detected": "Docker {count} hizmet tespit etti", - "detectedBreakdown": "{integrations} entegrasyon · {apps} uygulama", - "summary": "Homarr {apps} uygulama tespit etti, bunların {integrations} tanesinde entegrasyon yerleşik", - "appBadge": "Uygulama", - "appSectionLabel": "Panoya eklenecek uygulamalar ({count} seçili)", - "scanning": "Docker taranıyor...", - "scanningDescription": "Sisteminizdeki çalışan konteynerler aranıyor" + "review": { + "title": "Hizmetleriniz için tasarlanmış tek pano", + "description": "Homarr kaydedilmemiş bağlantıları test eder, seçilen uygulamaları içe aktarır, görünüm ve düzenleri uygular, ardından yapılandırdığı panoyu doğrudan açar.", + "board": "İlk pano", + "columns": "Pano sütunları", + "columnsValue": "{count, plural, one {# sütun} other {# sütun}}", + "sidebars": "Kenar çubukları", + "sidebarsValue": "{count, plural, =0 {Yok} one {# kenar çubuğu} other {# kenar çubuğu}}", + "layouts": "Duyarlı yerleşimler", + "layoutsValue": "Mobil + Temel", + "integrations": "Entegrasyonlar", + "integrationsValue": "{count, plural, =0 {Hiçbiri seçilmedi} one {# entegrasyon} other {# entegrasyon}}", + "apps": "Uygulama kutucukları", + "appsValue": "{count, plural, =0 {Yalnızca başlangıç uygulamaları} one {# uygulama kutucuğu} other {# uygulama kutucuğu}}", + "language": "Dil", + "theme": "Tema", + "themeAuto": "Sistem tercihi", + "themeLight": "Aydınlık", + "themeDark": "Koyu", + "colors": "Pano renkleri", + "radius": "Widget yarıçapı", + "automaticTitle": "Homarr ne oluşturacak", + "automaticDescription": "Uyumlu widget'lar, simgeler, uygulama bağlantıları, entegrasyon ilişkileri ve duyarlı konumlandırma, paylaşılan Homarr kataloğundan gelir. Her sonucu daha sonra düzenleyebilirsiniz.", + "dockerWarningTitle": "Kurulum sırasında bazı Docker etiketleri değişti", + "dockerWarningDescription": "{count, plural, one {# seçili Docker sonucu, hizmeti değiştiği, başka bir panoyu hedeflediği veya widget'ı uyumsuz olduğu için uygulanamadı} other {# seçili Docker sonucu, hizmetler değiştiği, başka panoları hedeflediği veya widget'ları uyumsuz olduğu için uygulanamadı}}.", + "errorTitle": "Pano oluşturulamadı", + "progress": { + "applying": "Bağlantılar test ediliyor ve panonuz oluşturuluyor", + "done": "Panonuz hazır" } }, "finish": { - "title": "Kurulumu Bitir", - "subtitle": "Başlamaya Hazırsınız!", - "description": "Kurulum sürecini başarıyla tamamladınız. Artık Homarr'ı kullanmaya başlayabilirsiniz. Sonraki eyleminizi seçin:", - "action": { - "goToBoard": "{name} Paneline Git", - "createBoard": "İlk Panelinizi Oluşturun", - "inviteUser": "Yeni Kullanıcı Davet Et", - "docs": "Dokümanları Oku" - } + "title": "İlk panonuz hazır.", + "description": "Homarr, seçtiğiniz bileşenleri bağladı ve geri kalanını düzenlenebilir tuttu. Panoyu şimdi açın; kısa ürün içi tur, düzenleme modunu, widget'ları, düzenleri ve aramayı gösterebilir.", + "openBoard": "Panomu aç", + "manageTitle": "Yönet", + "manageDescription": "Uygulamaları, entegrasyonları, panoları, kullanıcıları ve sunucu ayarlarını ince ayarlayın.", + "workshopTitle": "Atölye", + "workshopDescription": "Topluluk Özel Widget'larını keşfedin ve yükleyin.", + "docsTitle": "Homarr'ı öğren", + "docsDescription": "Panolar, widget'lar, entegrasyonlar ve araçlar için hazırlanmış kılavuzları okuyun." } - }, - "backToStart": "Başlangıca Geri Dön" + } }, "user": { - "title": "Kullanıcılar", "name": "Kullanıcı", "page": { "login": { @@ -159,12 +249,10 @@ }, "invite": { "title": "Homarr'a Katıl", + "titleWithAppName": "{appName} uygulamasına katıl", "subtitle": "Homarr'a hoş geldiniz! Lütfen hesabınızı oluşturun", + "subtitleWithAppName": "{appName} uygulamasına hoş geldiniz! Lütfen hesabınızı oluşturun", "description": "{username} tarafından davet edildiniz" - }, - "init": { - "title": "Yeni Homarr Kurulumu", - "subtitle": "Lütfen yönetici için kullanıcı oluşturun" } }, "field": { @@ -192,12 +280,17 @@ "previousPassword": { "label": "Eski Parola" }, - "homeBoard": { - "label": "Ana panel" - }, "pingIconsEnabled": { "label": "Pingler İçin Simge Kullanın" }, + "byteUnitSystem": { + "label": "Veri boyutu birimleri", + "description": "Homarr'ın bayt boyutlarını ve bayt hızlarını nasıl görüntüleyeceğini seçin. Bit hızlarında her zaman ondalık birimler kullanılır.", + "options": { + "binary": "İkili", + "decimal": "Ondalık" + } + }, "enableRightClickOnWidgets": { "label": "Widget'lara sağ tıklamayı etkinleştir", "description": "Bir widget'a sağ tıklandığında Homarr bağlam menüsünü gösterir. Tarayıcının varsayılan menüsünü (ör. “Bağlantıyı yeni sekmede aç”) kullanmak için devre dışı bırakın." @@ -247,7 +340,6 @@ } } }, - "create": "Kullanıcı ekle", "changePassword": { "label": "Parolayı değiştir", "notification": { @@ -259,56 +351,6 @@ } } }, - "changeHomeBoard": { - "notification": { - "success": { - "message": "Öntanımlı panel başarıyla değiştirildi" - }, - "error": { - "message": "Öntanımlı panel değiştirilemiyor" - } - } - }, - "changeSearchPreferences": { - "notification": { - "success": { - "message": "Arama tercihleri ​​başarıyla değiştirildi" - }, - "error": { - "message": "Arama tercihleri ​​değiştirilemiyor" - } - } - }, - "changeFirstDayOfWeek": { - "notification": { - "success": { - "message": "Haftanın ilk günü başarıyla değiştirildi" - }, - "error": { - "message": "Haftanın ilk günü değiştirilemiyor" - } - } - }, - "changePingIconsEnabled": { - "notification": { - "success": { - "message": "Ping simgeleri başarıyla değiştirildi" - }, - "error": { - "message": "Ping simgeleri değiştirilemiyor" - } - } - }, - "changeDdgBangs": { - "notification": { - "success": { - "message": "DuckDuckGo bang'leri başarıyla değiştirildi" - }, - "error": { - "message": "DuckDuckGo bang'leri değiştirilemiyor" - } - } - }, "manageAvatar": { "changeImage": { "label": "Görseli değiştir", @@ -338,16 +380,6 @@ } } }, - "editProfile": { - "notification": { - "success": { - "message": "Profil başarıyla güncellendi" - }, - "error": { - "message": "Profil güncellenemiyor" - } - } - }, "delete": { "label": "Kullanıcıyı kalıcı olarak sil", "description": "Bu kullanıcıyı tercihleriyle birlikte siler. Hiçbir panel silinmeyecektir. Kullanıcı bilgilendirilmez.", @@ -356,18 +388,13 @@ "select": { "label": "Kullanıcı seç", "notFound": "Kullanıcı bulunmadı" - }, - "transfer": { - "label": "Yeni sahibi seç" } } }, "group": { - "title": "Gruplar", "name": "Grup", "search": "Grup bul", "field": { - "name": "İsim", "members": "Üyeler", "homeBoard": { "label": "Ana Panel", @@ -388,6 +415,19 @@ } } }, + "custom-widget": { + "title": "Özel widget'lar", + "item": { + "manage": { + "label": "Özel widget'ları yönet", + "description": "Üyelerin özel widget tanımlarını oluşturmasına, düzenlemesine ve silmesine izin ver" + }, + "secret-write": { + "label": "Özel widget gizli bilgilerini yapılandır", + "description": "Üyelerin ve API anahtarlarının şifrelenmiş özel widget kimlik bilgilerini ayarlamasına izin ver" + } + } + }, "app": { "title": "Uygulamalar", "item": { @@ -493,6 +533,35 @@ "description": "Üyelerin herhangi bir arama motorunu yönetmesine ve silmesine izin ver" } } + }, + "matrix": { + "none": "Erişim yok", + "impliedHint": "Ayrıca verir: {permissions}", + "grantedViaAdmin": "Yöneticilerde bu zaten var. Ayrı yapılandırmak için Yönetici'yi “Erişim yok” olarak ayarlayın.", + "preset": { + "label": "Ön ayarlar", + "viewer": "Görüntüleyici", + "viewerDescription": "Salt okunur: panoları ve medyaları görüntüleyin, mevcut uygulamaları ve entegrasyonları kullanın.", + "editor": "Düzenleyici", + "editorDescription": "Günlük yönetim: panoları, uygulamaları, entegrasyonları ve arama motorlarını oluşturun ve düzenleyin.", + "admin": "Yönetici", + "adminDescription": "Kullanıcı yönetimi dahil olmak üzere her özelliğe ve ayara sınırsız erişim.", + "custom": "Özel" + }, + "effective": { + "title": "Etkin izinler", + "description": "Dolaylı olarak verilen izinler de dahil olmak üzere, bu grubun üyelerinin gerçekleştirebileceği eylemlerin yinelenenleri kaldırılmış tam kümesi.", + "empty": "Hiçbir izin seçilmedi" + }, + "noneDescription": "Üyelerin bu alana erişimi yoktur.", + "level": { + "view": "Görünüm", + "use": "Kullan", + "interact": "Etkileşim kur", + "modify": "Değiştir", + "full": "Tam" + }, + "capabilityIncluded": "“{level}” içinde zaten mevcut" } }, "memberNotice": { @@ -607,21 +676,24 @@ "search": "Uygulama Bulun", "page": { "list": { - "title": "Uygulamalar", + "ariaLabel": "Yapılandırılmış uygulamalar", "noResults": { "title": "Henüz uygulama oluşturulmadı", - "action": "İlk uygulamanızı oluşturun" + "description": "Uygulamalar, panolarınızda görmek istediğiniz hizmetlere ve araçlara bağlantıdır.", + "action": "İlk uygulamanızı oluşturun", + "filteredTitle": "Aramanızla eşleşen uygulama yok", + "filteredDescription": "\"{search}\" ile eşleşen uygulama yok. Başka bir ad veya URL deneyin.", + "createOnlyTitle": "Yalnızca uygulama ekleyebilirsiniz", + "createOnlyDescription": "İzinleriniz uygulama oluşturmanıza izin veriyor ancak mevcut uygulamalara göz atmanıza izin vermiyor. Listenin tamamını görmek için bir yöneticiden uygulama yönetimi erişimi isteyin." } }, "create": { "title": "Yeni Uygulama", "notification": { "success": { - "title": "Oluşturma başarılı", "message": "Uygulama başarıyla oluşturuldu" }, "error": { - "title": "Oluşturma başarısız oldu", "message": "Uygulama oluşturulamadı" } } @@ -630,11 +702,9 @@ "title": "Uygulamayı düzenle", "notification": { "success": { - "title": "Değişiklikler başarıyla uygulandı", "message": "Uygulama başarıyla kaydedildi" }, "error": { - "title": "Değişiklikler uygulanamıyor", "message": "Uygulama kaydedilemedi" } } @@ -644,26 +714,18 @@ "message": "{name} uygulamasını silmek istediğinizden emin misiniz?", "notification": { "success": { - "title": "Silme başarılı", "message": "Uygulama başarıyla silindi" }, "error": { - "title": "Silme başarısız oldu", "message": "Uygulama silinemiyor" } } } }, "field": { - "name": { - "label": "İsim" - }, "description": { "label": "Tanım" }, - "url": { - "label": "URL" - }, "useDifferentUrlForPing": { "checkbox": { "label": "Ping için farklı URL kullan", @@ -678,34 +740,582 @@ "search": "Uygulama bul", "noResults": "Sonuç bulunamadı", "action": "{app} uygulamasını seç", - "title": "Bu panele eklemek üzere bir uygulama seçin" + "title": "Bu panele eklemek üzere bir uygulama seçin", + "toggle": "Seçmek için tıklayın", + "selected": "Seçildi", + "multiple": "{count} ekle", + "selectedCount": "{count, plural, one {# seçildi} other {# seçildi}}", + "appsSelected": "{count, plural, one {# uygulama seçildi} other {# uygulama seçildi}}", + "selectMultiple": "Birden fazla seç", + "cancelMultiple": "Çoklu seçimden çık", + "customApplication": "Özel uygulama", + "application": "Uygulama" }, "create": { "title": "Yeni uygulama oluştur", "description": "Yeni bir uygulama oluştur ", "action": "Uygulama oluşturmayı başlat" + } + } + }, + "tips": { + "dismiss": "İpucunu kapat", + "multiSelectApps": "İpucu: Aynı anda birden fazla uygulama seçmek için Ctrl / ⌘ tuşunu basılı tutun" + }, + "customWidget": { + "secretEntry": { + "title": "API kaynağını yapılandır", + "description": "Sunucu URL'sini onaylayın ve kimlik bilgilerini girin. Gizli değerler Homarr tarafından şifrelenir ve istekte bulunan aracıya asla geri gönderilmez.", + "loading": "Güvenli istek yükleniyor…", + "applying": "Bu yapılandırma uygulanıyor… Bu sayfayı açık tutun.", + "saved": "API kaynağı yapılandırıldı. Bu sayfayı kapatabilirsiniz.", + "unavailable": "İstek kullanılamıyor", + "saveError": "API kaynağı yapılandırılamadı", + "source": "API kaynağı: {name}", + "baseUrl": "Sunucu URL'si", + "networkScope": "Ağ erişimi", + "save": "API yapılandırmasını kaydet", + "expires": "Bu tek seferlik isteğin süresi {time} tarihinde doluyor." + }, + "page": { + "list": { + "noResults": "Henüz özel widget yok. İlk widget'ınızı oluşturun!", + "noDescription": "Açıklama yok", + "enabled": "Etkin", + "disabled": "Pasif", + "disabledDescription": "Bu widget yapılandırılmış olarak kalır ancak hiçbir panoda yüklenmez.", + "requestCount": "{count, plural, one {# istek} other {# istek}}", + "invalidDefinition": "Geçersiz tanım", + "migrationRequired": "Geçiş gerekli", + "migrationInstructions": "El ile yeniden oluşturmak için özgün v1 tanımını kopyalamak veya dışa aktarmak üzere Eylemler'i açın. Ayrıca bir LLM ile geçiş istemini kullanabilirsiniz. Mevcut pano yerleşimleri, geçişten sonra da çalışmaya devam eder.", + "missingCredentials": "{count, plural, one {Kimlik bilgisi eksik} other {# kimlik bilgisi eksik}}", + "missingCredentialsDescription": "{count, plural, one {Bu widget'ın hâlâ bir kimlik bilgisine ihtiyacı var.} other {Bu widget'ın hâlâ # kimlik bilgisine ihtiyacı var.}} URL'yi ve şifrelenmiş değerleri yapılandırmak için bu rozeti seçin." }, - "add": "Bir uygulama ekle" + "create": { + "title": "Özel Widget Oluştur", + "subtitle": "API URL'sini, kimlik doğrulamasını ve yanıt verilerinin nasıl görüntüleneceğini tanımlayın." + }, + "tabs": { + "ariaLabel": "Özel widget bölümleri", + "installed": "Yüklendi", + "workshop": "Atölye" + } + }, + "action": { + "pasteImportHint": "Ctrl+V veya Command+V ile tam bir özel widget JSON'u yapıştırın", + "delete": "Özel Widget'ı Sil", + "deleteConfirm": "“{name}” adlı widget'ı silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.", + "export": "Dışa aktar", + "duplicate": "Çoğalt", + "aiPrompt": "Yapay zekâ ile tasarla", + "copyAiPrompt": "Yapay zekâ istemini kopyala", + "enable": "Etkinleştir", + "disable": "Devre dışı bırak", + "menu": "Eylemler", + "downloadSkill": "Özel Widget Yeteneğini Görüntüle", + "publishWorkshop": "Workshop'a yayımla", + "migrate": "Özel Widget'ı geçir", + "configureSources": "Kaynakları yapılandır", + "copyLegacyDefinition": "Özgün widget içeriğini kopyala", + "exportLegacyDefinition": "Özgün widget içeriğini dışa aktar", + "copyMigrationPrompt": "LLM geçiş istemini kopyala", + "pasteMigration": "Geçirilmiş widget'ı yapıştır", + "importMigration": "Geçirilmiş JSON dosyasını içe aktar" + }, + "sourceSetupDialog": { + "title": "Widget kaynaklarını yapılandır", + "description": "Bu widget'ın nereye bağlandığını inceleyin ve şifrelenmiş kimlik bilgilerini ekleyin veya değiştirin.", + "credentialsRequired": "Gerekli kimlik bilgileri eklenene kadar istekler başarısız olur.", + "save": "Yapılandırmayı kaydet" + }, + "field": { + "description": "Açıklama" + }, + "editor": { + "errorBoundary": { + "title": "Bir şeyler yanlış gitti" + }, + "action": { + "components": "Bileşenler", + "format": "Biçim", + "insertStarter": "Başlangıç şablonu ekle", + "redo": "Yinele", + "copied": "Kopyalandı", + "schema": "Şema" + }, + "reference": { + "minimal": "Minimal örnek", + "full": "Tam örnek" + }, + "componentReference": { + "search": "Bileşenlerde ara", + "empty": "Eşleşen bileşen yok", + "count": "{count, number} bileşen mevcut" + }, + "status": { + "errors": "{count, number} hata", + "warnings": "{count, number} uyarı", + "ready": "Sorun bulunamadı", + "position": "Satır {line, number}, Sütun {column, number}", + "characters": "{count, number} karakter", + "charactersWithLimit": "{count, number} / {limit, number}" + }, + "diagnostics": { + "title": "Şablon tanılama bilgileri", + "line": "{line, number}. satır", + "ast": "{value}", + "bindingTypeConflict": "\"{value}\" girdisi, uyumsuz değer türlerine sahip denetimler tarafından paylaşılıyor.", + "runtimeBindingTypeConflict": "\"{value}\" girdisi hem {firstType} hem de {secondType} olarak bağlanmış.", + "dynamicRequestId": "Değişmez bir requestId gereklidir. Dinamik istek kimlikleri kabul edilmez.", + "dynamicInputBinding": "bind için değişmez bir girdi adı gereklidir.", + "inlineRequestProps": "Ağ bileşenleri requestId ve params kabul eder; satır içi URL, yöntem, başlık ve gövde özellikleri engellenir.", + "invalidRequestManifest": "Adlandırılmış istekler geçerli bir istek eşlemesi olmalıdır. {value}", + "missingRequestId": "Bu ağ bileşeni değişmez bir requestId gerektirir.", + "templateEmpty": "Bir JSX şablonu girin.", + "templateTooLong": "Şablon 50.000 karakter sınırını aşıyor.", + "unknownRequest": "\"{value}\" kimliğine sahip adlandırılmış istek yok." + } + }, + "workbench": { + "configure": "Yapılandır", + "sectionNavigation": "Özel widget bölümleri", + "widgetPreview": "Widget önizlemesi", + "generalInformation": "Genel bilgiler", + "invalidWidget": "Geçersiz widget", + "section": { + "general": "Genel", + "sources": "API kaynakları", + "requests": "Talepler", + "options": "Seçenekler", + "jsx": "JSX", + "preview": "Önizleme" + }, + "status": { + "unsaved": "Kaydedilmemiş değişiklikler", + "invalid": "İlgilenilmesi gerekiyor", + "ready": "Hazır" + }, + "saveError": { + "title": "Widget kaydedilmedi", + "description": "Bu doğrulama hatalarını düzeltin ve tekrar kaydedin.", + "more": "Çalışma alanında {count} hata daha gösteriliyor.", + "errors": "Doğrulama hataları", + "copy": "Hataları kopyala", + "copied": "Hatalar kopyalandı" + }, + "action": { + "preview": "Test et ve önizle", + "previewLoading": "İstekler test ediliyor" + }, + "requests": { + "title": "Adlandırılmış sorgular ve eylemler", + "label": "Talepler", + "description": "Sorgular verileri yükler; eylemler yalnızca kullanıcı etkileşiminden sonra çalışır. Her HTTP yöntemi her iki tür için de geçerlidir." + }, + "options": { + "title": "Widget seçenekleri" + }, + "builder": { + "advancedManifest": "Gelişmiş ham bildirim", + "advancedJson": "Gelişmiş bildirim JSON'u", + "manifestFilename": "widget.json", + "request": "İstek {count, number}", + "requestId": "İstek kimliği", + "type": "Tip", + "method": "Yöntem", + "source": "API kaynağı", + "run": "Çalıştır", + "runLoad": "Widget yüklendiğinde", + "runManual": "SubFetch'ten", + "permission": "İzin", + "path": "Yol", + "pathDescription": "Widget seçenekleri için '{option:name}', çağrı değerleri için '{param:name}' kullanın.", + "requestDetails": "Sorgu, gövde ve davranış", + "queryValues": "Sorgu değerleri", + "queryKey": "Sorgu anahtarı", + "queryKeyInvalid": "Bir harfle başlayan ve yalnızca harf, rakam, - veya _ içeren benzersiz bir kimlik kullanın.", + "valueSource": "Değer kaynağı", + "literal": "Değişmez", + "widgetOption": "Widget seçeneği", + "invocationParameter": "Çağrı parametresi", + "option": "Seçenek", + "parameterName": "Parametre adı", + "value": "Değer", + "removeQueryValue": "Sorgu değerini kaldır", + "addQueryValue": "Sorgu değeri ekle", + "jsonBody": "JSON gövdesi", + "jsonBodyDescription": "İsteğe bağlı. Her derinlikte $option ve $param başvuruları ekleyin.", + "insertOptionReference": "Seçenek başvurusu ekle", + "insertParameterReference": "Parametre başvurusu ekle", + "confirmation": "Onay mesajı", + "invalidation": "Başarılı işlemden sonra yenile", + "invalidationDescription": "Virgülle ayrılmış sorgu kimlikleri", + "noAuth": "Kaynak kimlik doğrulaması olmadan gönder", + "moveRequestUp": "İsteği yukarı taşı", + "moveRequestDown": "İsteği aşağı taşı", + "removeRequest": "İsteği kaldır", + "addRequest": "İstek ekle", + "optionName": "Seçenek adı", + "label": "Etiket", + "control": "Denetim", + "description": "Açıklama", + "default": "Varsayılan", + "optionDetails": "Kısıtlamalar ve dinamik seçenekler", + "minimum": "En düşük", + "maximum": "Maksimum", + "step": "Adım", + "choiceLabel": "Seçim etiketi", + "choiceValue": "Seçim değeri", + "newChoice": "Yeni seçim", + "addChoice": "Seçim ekle", + "removeChoice": "Seçimi kaldır", + "choicesRequest": "Seçimleri istekten yükle", + "itemsPath": "Öğe yolu", + "itemsPathPlaceholder": "öğeler (isteğe bağlı)", + "valuePath": "Değer yolu", + "labelPath": "Etiket yolu", + "group": "Grup", + "advancedOption": "Gelişmiş seçenek", + "moveOptionUp": "Seçeneği yukarı taşı", + "moveOptionDown": "Seçeneği aşağı taşı", + "removeOption": "Seçeneği kaldır", + "addOption": "Seçenek ekle", + "invalidJson": "Geçersiz JSON", + "invalidWidget": "Geçersiz widget" + }, + "jsx": { + "title": "JSX şablonu", + "label": "Şablon" + }, + "sources": { + "title": "API kaynakları ve kimlik bilgileri", + "newName": "API {count, number}", + "duplicateSourceId": "API kaynak kimlikleri benzersiz olmalıdır.", + "credentialRemoved": "Kimlik bilgisi kaldırıldı", + "credentialRemovedDescription": "Kayıtlı değer silindi.", + "primary": "Birincil API", + "id": "Kaynak kimliği", + "name": "Ad", + "baseUrl": "Temel URL", + "baseUrlError": { + "invalid": "Tam bir URL girin.", + "protocol": "HTTP veya HTTPS URL'si kullanın.", + "credentials": "Kullanıcı adını ve parolayı bu URL'den kaldırın. Bunun yerine kimlik bilgilerini aşağıda yapılandırın.", + "queryOrFragment": "Sorgu dizesini veya parçayı bu temel URL'den kaldırın. Sorgu değerlerini adlandırılmış bir isteğe ekleyin." + }, + "networkScope": "Ağ erişimi", + "authentication": "Kimlik Doğrulama", + "headerName": "Başlık adı", + "queryParameter": "Sorgu parametresi", + "configured": "Yapılandırıldı — bir değiştirme değeri girin", + "clear": "Açık", + "remove": "Kaynağı ve isteklerini kaldır", + "advanced": "Gelişmiş", + "add": "Başka bir API kaynağı ekle", + "sourceType": "Entegrasyon", + "manualSource": "HTTP API'si", + "existingIntegration": "Mevcut entegrasyon", + "integrationType": "Entegrasyon türü", + "selectIntegration": "Yapılandırılmış entegrasyon", + "noIntegrations": "Eşleşen entegrasyon yok", + "integrationUnavailable": "Seçilen entegrasyon artık kullanılamıyor. Başka bir entegrasyon seçin.", + "integrationDescription": "Kaydedilmiş entegrasyon URL'sini ve kimlik bilgilerini kullanır. Değişiklikler otomatik olarak uygulanır. İstekleri çalıştırmak için tam entegrasyon erişimi gereklidir." + }, + "ai": { + "title": "Herhangi bir yapay zekâ ile oluşturun veya düzeltin", + "description": "Varsa önce bir API belgeleri URL'si ekleyin. Düzeltmeler için mümkünse Önizleme'yi çalıştırın. İstemi herhangi bir yapay zekâya kopyalayın; eksik ayrıntıları sorabilir. Son JSON'u buraya yapıştırın.", + "request": "Bu widget ne yapmalı?", + "documentationUrl": "API belgeleri URL'si (isteğe bağlı)", + "paste": "Yapıştır", + "response": "Yapay zekâ yanıtı", + "manualCopyDescription": "Pano erişimi kullanılamıyor. Aşağıdaki istemi seçip elle kopyalayın.", + "manualPasteDescription": "Pano erişimi kullanılamıyor veya kopyalanan yanıtın düzeltilmesi gerekiyor. Yapay zekânın JSON yanıtını buraya yapıştırın.", + "selectAll": "Tümünü seç", + "loadResponse": "Yanıtı yükle", + "loaded": "Widget düzenleyiciye yüklendi", + "invalidResponse": "Panoda geçerli bir v2 widget'ı yok", + "invalidResponseDetail": "Yapay zekâ yanıtı geçersiz: {message}" + }, + "preview": { + "invalid": "Bu widget'ı önizlemek için doğrulama hatalarını düzeltin.", + "fixtureError": "Önizleme fikstür hatası", + "requestData": "İstek verileri", + "status": { + "idle": "İstekler henüz test edilmedi", + "loading": "İstekler test ediliyor", + "success": "Tüm yükleme istekleri başarılı oldu", + "error": "Bir veya daha fazla yükleme isteği başarısız oldu" + }, + "result": { + "loading": { + "title": "API istekleri test ediliyor", + "description": "Homarr bir önizleme oturumu oluşturuyor ve widget verilerini yüklüyor." + }, + "success": { + "title": "Önizleme hazır", + "description": "{succeeded, plural, =0 {Bu widget'ın yükleme isteği yok.} one {# yükleme isteği başarılı oldu.} other {# yükleme isteği başarılı oldu.}} Yanıtı incelemek için Veriler'i açın." + }, + "error": { + "title": "Önizleme istek hatalarıyla tamamlandı", + "description": "{succeeded, number} başarılı, {failed, number} başarısız. Yanıt ve hata ayrıntıları için Veriler'i açın." + } + }, + "instanceOptions": "Örnek seçenekleri", + "liveActions": "Yapılandırılmış API'ye karşı eylemleri çalıştır", + "liveActionsDescription": "Kapalı, güvenli simülasyondur. Bunu açmak gerçek hizmeti etkiler.", + "noActions": "Hiçbir eylem tanımlanmadı.", + "containedFailures": "Çalışma zamanı hataları bu widget içinde tutulur. İstek günlükleri gizli değerleri asla içermez.", + "validation": { + "title": "Doğrulama", + "ready": "Widget tanımı geçerli." + }, + "accessibility": { + "title": "Erişilebilirlik kontrolleri", + "ready": "Yaygın erişilebilirlik eksiklikleri tespit edilmedi.", + "pending": "Erişilebilirlik kontrolleri, widget tanımı geçerli olduğunda çalıştırılır.", + "imageAlt": "Her Image bileşenine alternatif metin ekleyin; boş alt değerini yalnızca dekoratif görseller için kullanın.", + "actionIconLabel": "Her ActionIcon'a bir aria-label veya başlık ekleyin.", + "inputLabel": "Her girdiye görünür bir etiket veya erişilebilir ad ekleyin." + }, + "journal": "Redakte edilmiş istek günlüğü", + "actionParameters": "Eylem parametreleri (JSON)", + "invalidParameters": "Tanımlanan dize, sayı ve boole parametre türlerini kullanın.", + "runDestructive": "Yıkıcı eylemi çalıştır", + "runAction": "Eylemi çalıştır", + "deleteConfirmation": "Bu önizleme eylemi, yapılandırılmış API üzerinden uzak verileri değiştirir.", + "simulated": "Eylem simüle edildi", + "httpStatus": "HTTP {status, number}", + "tab": { + "widget": "Bileşen", + "data": "Veriler", + "options": "Seçenekler", + "state": "İş Durumu", + "actions": "Kontroller", + "diagnostics": "Tanılama" + }, + "size": { + "compact": "Kompakt", + "standard": "Standart", + "wide": "Geniş" + }, + "fixture": { + "live": "Canlı", + "loading": "Yükleniyor", + "empty": "Boş", + "error": "Hata" + } + } + }, + "preview": { + "request": { + "permission": { + "view": "Görünüm", + "modify": "Değiştir", + "full": "Tam" + } + } + }, + "notification": { + "created": "“{name}” widget'ı başarıyla oluşturuldu.", + "updated": "“{name}” widget'ı başarıyla güncellendi.", + "deleted": "“{name}” widget'ı silindi.", + "imported": "Widget başarıyla içe aktarıldı.", + "migrated": "Eski widget başarıyla geçirildi. Mevcut pano yerleşimleri artık v2 tanımını kullanıyor.", + "migrationError": "Eski widget geçirilemedi. Dosyanın homarr-custom-widget-v2 şemasını kullandığından emin olun.", + "legacyDefinitionCopied": "Özgün widget içeriği kopyalandı. Kayıtlı kimlik bilgisi değerleri dahil edilmedi.", + "legacyDefinitionCopyError": "Özgün widget içeriği kopyalanamadı.", + "migrationPromptCopied": "Redakte edilmiş bir geçiş istemi kopyalandı. Bunu bir LLM'ye yapıştırın, tek JSON yanıtını kopyalayın ve ardından Geçirilmiş widget'ı buraya yapıştır'ı seçin.", + "migrationPromptCopyError": "Geçiş istemi kopyalanamadı.", + "sourcesConfigured": "Widget kaynakları ve kimlik bilgileri kaydedildi.", + "sourceConfigurationError": "Widget kaynakları yapılandırılamadı.", + "aiPromptCopiedWithCount": "Yapay zekâ istemi panoya kopyalandı ({count, number} karakter).", + "aiPromptCopyError": "İstem panoya kopyalanamadı. Tarayıcınız bu özelliği desteklemiyor olabilir.", + "aiPromptSent": "İstem gönderildi. Asistan arka planda çalışırken düzenlemeye devam edebilirsiniz.", + "updateError": "Widget güncellenemedi. Değişiklikleriniz kaydedilmedi.", + "importError": "Widget içe aktarılamadı. Dosyanın geçerli bir özel widget JSON dışa aktarımı olduğundan emin olun.", + "exportError": "Widget dışa aktarılamadı.", + "duplicated": "“{name}” widget'ı çoğaltıldı.", + "duplicateError": "Widget çoğaltılamadı.", + "toggleError": "Widget durumu değiştirilemedi.", + "deleteError": "Widget silinemedi.", + "previewError": "Önizleme alınamadı. URL'yi kontrol edip yeniden deneyin." + }, + "importReview": { + "title": "Özel widget içe aktarmasını incele", + "description": "İçe aktarmadan önce bu widget'ın nereye bağlandığını ve denetimlerinin hangi pano erişimini gerektirdiğini kontrol edin.", + "migrationTitle": "Geçirilmiş v2 değişimini incele", + "migrationDescription": "Oluşturulan bu v2 tanımını inceleyip onaylayın. Onaylama, korunan v1 kaydını atomik olarak değiştirir ve mevcut pano yerleşimlerini aynı widget kimliğine bağlı tutar.", + "fileLabel": "Bir özel widget JSON dosyası seçin", + "name": "İş adı", + "origin": "Temel kaynak", + "authentication": "Kimlik Doğrulama", + "networkScope": "Ağ kapsamı", + "methods": "HTTP yöntemleri", + "permissions": "Gerekli pano izinleri", + "sourceSetup": { + "title": "API kaynaklarını yapılandır", + "description": "Bu widget'ın nereye bağlandığını onaylayın ve kimlik bilgilerini ekleyin. Özel ve loopback URL'leri Homarr kurulumunuza özeldir.", + "suggestedUrl": "Önerilen URL", + "confirmUrl": "Bu sunucu URL'sinin Homarr kurulumum için doğru olduğunu onaylıyorum", + "ready": "URL hazır", + "needsUrl": "URL'yi onayla", + "credentialsMissing": "Kimlik bilgileri eksik", + "credentialsOptional": "Kimlik bilgileri olmadan yükleyebilir ve bunları daha sonra yapılandırabilirsiniz; ancak eklenene kadar istekler başarısız olur." + }, + "actionWarning": { + "title": "Bu widget uzak verileri değiştirebilir", + "description": "İçe aktardıktan sonra tüm adlandırılmış eylemleri, devralınan kimlik bilgilerini ve yıkıcı onayları inceleyin. Gizli bilgiler dosyaya dahil edilmez." + }, + "cancel": "İçe aktarmayı iptal et", + "confirm": "Widget'ı içe aktar", + "confirmMigration": "V2 değişimini onayla" + }, + "secret": { + "apiKey": "API anahtarı veya token", + "username": "Kullanıcı adı", + "password": "Parola", + "savedPlaceholder": "••••••• (kaydedildi, korumak için boş bırakın)" + } + }, + "workshop": { + "title": "Atölye", + "browseWorkshop": "Workshop'a göz at", + "openCommunity": "Workshop'u aç", + "openOnWorkshop": "{title} başlığını Workshop web sitesinde aç", + "back": "Workshop'a geri dön", + "search": "Widget'larda ara", + "searchCss": "CSS temalarında ara", + "sort": "Sırala", + "sortTop": "En yüksek puanlı", + "sortNewest": "En yeni", + "listAriaLabel": "Workshop widget'ları", + "listAriaLabelCss": "Workshop CSS temaları", + "empty": "Bu aramayla eşleşen widget yok.", + "emptyDescription": "Workshop'ta yayımlanan topluluk widget'ları burada görünür.", + "emptyFilteredTitle": "Bu aramayla eşleşen widget yok", + "emptyFilteredDescription": "\"{search}\" ile eşleşen Workshop widget'ı yok.", + "emptyCss": "Bu aramayla eşleşen CSS teması yok.", + "unavailableTitle": "Homarr Workshop kullanılamıyor gibi görünüyor", + "unavailable": "Topluluk hizmeti geçici olarak kullanılamıyor olabilir. Biraz sonra tekrar deneyin. Yüklü widget'larınız etkilenmez.", + "loadError": "Bu gönderi yüklenemedi.", + "noDescription": "Açıklama yok", + "author": "{name} tarafından", + "communityMember": "Topluluk üyesi", + "outdated": "Güncel değil", + "outdatedWarning": "Yazar bu gönderiyi güncel değil olarak işaretledi. İçe aktarmadan önce dikkatlice inceleyin.", + "score": "Puan: {count, number}", + "upvote": "Olumlu oy ver", + "downvote": "Olumsuz oy ver", + "voteError": "Oy kaydedilemedi.", + "signIn": "GitHub ile oturum aç", + "signInError": "GitHub oturum açma işlemi başarısız oldu. Workshop OAuth sağlayıcısının yapılandırıldığını ve açılır pencerelere izin verildiğini kontrol edin.", + "signOut": "Oturumu kapat", + "signInHint": "Oy vermek veya bildirmek için oturum açın. Yükleme için Workshop hesabı gerekmez.", + "securityNotice": "Workshop widget'ları, tanımlanmış API kaynaklarını çağırabilir ve yerel olarak yapılandırdığınız kimlik bilgileriyle tanımlanmış eylemleri gerçekleştirebilir. Gizli bilgiler asla dahil edilmez.", + "securityNoticeCss": "Topluluk CSS'i bir panonun görünümünü ve kullanılabilirliğini değiştirebilir. İçe aktarmadan önce inceleyin; pano ayarlarını kaydedene kadar hiçbir şey kaydedilmez.", + "install": "Yükle", + "installReviewTitle": "Yüklemeden önce incele", + "installError": "Bu widget yüklenemiyor", + "installErrorDescription": "Workshop gönderisi geçerli bir Özel JSX v2 widget'ı değil.", + "useCss": "CSS'yi içe aktar", + "importCss": "CSS'yi Workshop'tan içe aktar", + "importCssConfirm": "Mevcut özel CSS \"{title}\" ile değiştirilsin mi? Pano ayarlarını kaydedene kadar hiçbir şey kaydedilmez.", + "screenshotAlt": "{title} ekran görüntüsü {count, number}", + "screenshotViewer": "{title} ekran görüntüsü görüntüleyicisi", + "screenshotsLabel": "{title} ekran görüntüleri", + "zoomScreenshot": "Tam boyutu görüntüle", + "previousScreenshot": "Önceki ekran görüntüsü", + "nextScreenshot": "Sonraki ekran görüntüsü", + "showScreenshotThumbnails": "Ekran görüntüsü küçük resimlerini göster", + "hideScreenshotThumbnails": "Ekran görüntüsü küçük resimlerini gizle", + "closeScreenshotViewer": "Ekran görüntüsü görüntüleyicisini kapat", + "technicalDetails": "Teknik ayrıntılar", + "sourceCode": "Workshop gönderisi", + "export": "Dışa aktar", + "report": "Bildir", + "reportTitle": "Gönderiyi bildir", + "reportReason": "Neden", + "reportExplanation": "Workshop moderatörleri ne bilmeli?", + "reportSend": "Bildirimi gönder", + "reportSent": "Bildirim gönderildi", + "reportSentDescription": "Workshop moderatörleri artık bu gönderiyi inceleyebilir.", + "reportCount": "{count, plural, one {# bildirim} other {# bildirim}}", + "reportWarning": "{count, plural, one {Bu gönderi için # açık topluluk bildirimi var.} other {Bu gönderi için # açık topluluk bildirimi var.}} Yüklenebilir durumda ancak önce içeriğini incelemelisiniz.", + "reportVisibility": "Bildirim ayrıntıları yalnızca bu gönderinin yazarı ve Workshop yöneticileri tarafından görülebilir.", + "reportCategory": { + "outdated": "Güncel değil veya artık çalışmıyor", + "malicious": "Kötü amaçlı", + "spam": "Spam", + "copyright": "Telif hakkı", + "inappropriate": "Uygunsuz", + "other": "Diğer" + }, + "publish": { + "title": "Workshop'a yayımla", + "introTitle": "Bu widget'ı toplulukla paylaş", + "introDescription": "Homarr, mevcut widget'ın kimlik bilgileri içermeyen bir kopyasını dışa aktarır. Yüklemeden önce ne yaptığını anlamaları için net listeleme ayrıntıları ekleyin.", + "listingDetails": "Workshop listelemesi", + "listingDetailsDescription": "Bu ayrıntılar, dışa aktarılan widget tanımının yanında herkese açık olarak görünür.", + "success": "Hemen yayımlandı. Topluluk üyeleri artık bu widget'ı yükleyebilir ve bildirebilir.", + "successTitle": "Widget'ınız yayında", + "manageDescription": "Listelemesini güncellemek, bildirimleri incelemek, güncel değil olarak işaretlemek veya silmek için gönderiyi açın. Gönderi yönetimi doğrudan Workshop web sitesinde yapılır.", + "viewSubmission": "Gönderiyi görüntüle ve yönet", + "done": "Tamam", + "signInHint": "Workshop kimliğinizle yayımlamak için oturum açın.", + "titleField": "Başlık", + "descriptionField": "Açıklama", + "screenshots": "Ekran görüntüleri", + "screenshotsDescription": "En fazla beş PNG, JPEG veya WebP görseli", + "screenshotsPlaceholder": "Ekran görüntülerini seç", + "invalidScreenshot": "Her biri {maxSize} boyutundan büyük olmayan PNG, JPEG veya WebP görselleri kullanın.", + "privateSourceWarning": "Bu widget şu özel kaynak URL'lerini içeriyor: {sources}. Yayımlamadan önce kişisel ana bilgisayarları veya IP adreslerini güvenli hizmet yer tutucularıyla değiştirin.", + "reviewSourcesTitle": "Özel kaynak URL'lerini incele", + "privateSourceConfirmation": "Bu kaynak URL'lerini inceledim ve özel altyapı ayrıntılarını açığa çıkarmıyorlar", + "action": "Şimdi yayımla", + "publicationNote": "Yayımlama hemen gerçekleşir. Gönderiyi daha sonra Workshop'ta yönetebilirsiniz.", + "definitionChanged": "Yayımlama hazırlanırken widget değişti. Özel kaynak URL'lerini tekrar inceleyin ve yeniden deneyin.", + "error": "Yayımlama başarısız oldu" } }, "integration": { + "completion": { + "modalTitle": "Hizmet hazır", + "title": "{name} bağlandı", + "description": "Bağlantı testten geçti. Sırada bu panoda ne gösterileceğini seçin.", + "connectionReady": "Hizmet bağlantısı hazır", + "appReady": "Uygulama kısayolu hazır", + "compatibleWidgets": "{count, plural, =0 {Uyumlu widget yok} one {# uyumlu widget} other {# uyumlu widget}} kullanılabilir.", + "chooseWidget": "Widget seç", + "recipes": { + "title": "Bu panel için önerilenler", + "description": "Bu panelde zaten bağlı olan hizmetlere ve widget'lara göre.", + "newConnectionReason": "Artık {integration} üzerinden kullanılabilir", + "existingConnectionReason": "Zaten bağladığınız bir hizmetle çalışır", + "dismiss": "Bu panelde bu hizmet için önerileri kapat" + } + }, "page": { "list": { - "title": "Entegrasyonlar", + "ariaLabel": "Yapılandırılmış entegrasyonlar", "search": "Entegrasyon ara", + "scopedNote": "Yalnızca yönetme izniniz olan entegrasyonlar gösteriliyor.", "noResults": { - "title": "Henüz entegrasyon oluşturulmadı" + "title": "Henüz entegrasyon oluşturulmadı", + "description": "Homarr widget'larında verilerini ve eylemlerini kullanmak için bir hizmet bağlayın.", + "action": "İlk entegrasyonunuzu oluşturun", + "filteredTitle": "Aramanızla eşleşen entegrasyon yok", + "filteredDescription": "\"{search}\" ile eşleşen entegrasyon yok. Başka bir ad, tür veya URL deneyin.", + "createOnlyTitle": "Yalnızca entegrasyon ekleyebilirsiniz", + "createOnlyDescription": "İzinleriniz entegrasyon oluşturmanıza izin veriyor, ancak mevcut olanları yönetmenize izin vermiyor. İhtiyacınız olanlara erişim için bir yöneticiden yardım isteyin." } }, "create": { "title": "Yeni {name} Entegrasyonu", "notification": { "success": { - "title": "Oluşturma başarılı", "message": "Entegrasyon başarıyla oluşturuldu" }, "error": { - "title": "Oluşturma başarısız oldu", "message": "Entegrasyon oluşturulamadı" } }, @@ -729,11 +1339,9 @@ "title": "{name} entegrasyonu düzenle", "notification": { "success": { - "title": "Değişiklikler başarıyla uygulandı", "message": "Entegrasyon başarıyla kaydedildi" }, "error": { - "title": "Değişiklikler uygulanamıyor", "message": "Entegrasyon kaydedilemedi" } }, @@ -750,23 +1358,15 @@ "message": "{name} entegrasyonunu silmek istediğinizden emin misiniz?", "notification": { "success": { - "title": "Silme başarılı", "message": "Entegrasyon başarıyla silindi" }, "error": { - "title": "Silme başarısız oldu", "message": "Entegrasyon silinemiyor" } } } }, "field": { - "name": { - "label": "İsim" - }, - "url": { - "label": "URL" - }, "attemptSearchEngineCreation": { "label": "Arama Motoru Oluştur", "description": "\"{kind}\" entegrasyonu arama motorlarıyla kullanılabilir. Arama motorunu otomatik olarak yapılandırmak için bunu işaretleyin." @@ -778,6 +1378,10 @@ "label": "Uygulama oluştur", "description": "Entegrasyon ile aynı adı ve simgeyi taşıyan bir uygulama oluşturun. Uygulamayı entegrasyon URL'si ile oluşturmak için aşağıdaki alanını boş bırakın." }, + "linkApp": { + "label": "Mevcut bir uygulamayı bağla", + "description": "Bu entegrasyonu zaten kullanabileceğiniz bir uygulamaya bağlayın." + }, "appHref": { "placeholder": "Özel Uygulama URL'si" }, @@ -791,7 +1395,11 @@ "grid": { "widgetCount": "{count} widget", "noWidgets": "Widget yok", - "detected": "Docker üzerinden tespit edildi" + "detected": "Docker üzerinden tespit edildi", + "connected": "{count, plural, one {# bağlı} other {# bağlı}}", + "tiedWidgets": "Bağlı widget'lar", + "more": "+{count} tane daha", + "loadError": "Entegrasyonlar yüklenemedi. Yeni bir bağlantı oluşturmadan önce tekrar deneyin." }, "category": { "dnsHole": "DNS", @@ -822,7 +1430,10 @@ "analytics": "Analiz", "vpn": "VPN", "mediaLibrary": "Medya Kütüphanesi", - "uptimeMonitoring": "Çalışma Süresi İzleme" + "uptimeMonitoring": "Çalışma Süresi İzleme", + "beszel": "Beszel", + "systemMonitoring": "Sistem İzleme", + "security": "Güvenlik" }, "testConnection": { "action": { @@ -1107,6 +1718,22 @@ "slug": { "label": "Durum sayfası kısa adı", "newLabel": "Yeni durum sayfası kısa adı" + }, + "wazuhIndexerUrl": { + "label": "İndeksleyici URL'si", + "newLabel": "Yeni indeksleyici URL'si" + }, + "wazuhIndexerUsername": { + "label": "İndeksleyici kullanıcı adı", + "newLabel": "Yeni indeksleyici kullanıcı adı" + }, + "wazuhIndexerPassword": { + "label": "İndeksleyici parolası", + "newLabel": "Yeni indeksleyici parolası" + }, + "wazuhDashboardUrl": { + "label": "Kontrol paneli URL'si (isteğe bağlı)", + "newLabel": "Yeni kontrol paneli URL'si" } } }, @@ -1115,54 +1742,19 @@ "interact": "Entegrasyonlarla etkileşim kurun", "full": "Tam entegrasyon erişimi" }, - "audiobookshelf": { - "name": "Audiobookshelf", - "description": "Kendi sunucunuzda barındırılan sesli kitap ve podcast sunucusu" - }, - "navidrome": { - "name": "Navidrome", - "description": "Subsonic API uyumlu, kendi sunucunuzda barındırılan müzik akış sunucusu" - }, - "uptimeKuma": { - "name": "Uptime Kuma", - "description": "Herkese açık durum sayfaları sunan, kendi sunucunuzda barındırılan çalışma süresi izleme sistemi", - "secret": { - "slug": { - "description": "Herkese açık durum sayfanızın kısa adı. Ayarlanmazsa varsayılan olarak “default” kullanılır." - }, - "apiKey": { - "description": "Kimlik doğrulamalı /metrics erişimi için isteğe bağlı API anahtarı" - } - } - }, - "traefik": { - "name": "Traefik", - "description": "Bulut tabanlı ters proxy ve yük dengeleyici" - }, - "paperlessNgx": { - "name": "Paperless-ngx", - "description": "Taranmış belgeleri arşivlemek ve düzenlemek için belge yönetim sistemi" - }, - "patchmon": { - "name": "PatchMon", - "description": "Linux ana makineleri için yama yönetimi ve izleme" - }, - "bazarr": { - "name": "Bazarr", - "description": "Altyazıları yöneten ve indiren Sonarr ve Radarr yardımcı uygulaması" - }, - "wud": { - "name": "What's Up Docker", - "description": "Docker konteynerlerinizden hangilerinde imaj güncellemeleri olduğunu izleyin" + "llamacpp": { + "name": "llama.cpp", + "description": "Yerel bir llama.cpp llama-server'ı izleyin: sağlık, model ve üretim ölçümleri" } }, "media": { "plural": "Medyalar", "search": "Bir medya bul", "field": { - "name": "İsim", + "preview": "Önizleme", "size": "Boyut", - "creator": "Oluşturan" + "creator": "Oluşturan", + "actions": "Kontroller" }, "action": { "upload": { @@ -1190,10 +1782,12 @@ } }, "copy": { - "label": "URL'yi kopyala" + "label": "URL'yi kopyala", + "labelNamed": "{name} için URL'yi kopyala" }, "open": { - "label": "Medyayı aç" + "label": "Medyayı aç", + "labelNamed": "{name} uygulamasını aç" } }, "noResults": { @@ -1208,7 +1802,6 @@ "add": "Ekle", "apply": "Uygula", "backToOverview": "Genel bakışa dön", - "skip": "Atla", "change": "Değiştir", "create": "Oluştur", "createAnother": "Kaydet ve Yeni Oluştur", @@ -1231,16 +1824,31 @@ "tryAgain": "Tekrar Deneyin", "loading": "Yükleniyor", "show": "Göster", - "hide": "Gizle" + "hide": "Gizle", + "undo": "Geri al", + "editNamed": "{name} öğesini düzenle", + "deleteNamed": "{name} öğesini sil", + "clearSearch": "Aramayı temizle", + "copy": "Kopyala", + "copied": "Kopyalandı", + "refresh": "Yenile" + }, + "pagination": { + "pageOf": "{totalPages} sayfanın {page}. sayfası" }, "here": "buraya", + "serviceUrlTemplate": { + "serverTitle": "Normal sunucu adresi", + "urlModeLabel": "Hizmet adresi kalıbı", + "hostPort": "Aynı ana bilgisayar, farklı bağlantı noktaları", + "subdomain": "Her hizmet için bir alt alan adı", + "path": "Her hizmet için bir yol" + }, "iconPicker": { "label": "Simge URL'si", + "description": "Kütüphanede arayın, bir görsel URL'si yapıştırın veya bir dosya yükleyin.", "header": "Simgeleri filtrelemek için isim veya nesne yazın... Homarr sizin için {countIcons} simge arasında arama yapacaktır", "headerLoading": "Simge aramak için yazın", - "noResults": "“{search}” aramasıyla eşleşen simge yok.", - "error": "Simgeler yüklenemedi.", - "description": "Kütüphanede arayın, bir görsel URL'si yapıştırın veya bir dosya yükleyin.", "clear": "Görseli temizle", "uploadImage": "Görsel yükle", "results": "Görsel arama sonuçları", @@ -1249,7 +1857,9 @@ "otherImages": "Diğer görseller", "urlLoading": "Görsel kontrol ediliyor…", "urlReady": "Görsel kullanıma hazır", - "urlError": "Bu görsel yüklenemedi. URL'yi kontrol edip yeniden deneyin." + "urlError": "Bu görsel yüklenemedi. URL'yi kontrol edip yeniden deneyin.", + "noResults": "“{search}” aramasıyla eşleşen simge yok.", + "error": "Simgeler yüklenemedi." }, "colorScheme": { "options": { @@ -1261,7 +1871,6 @@ "information": { "min": "En Düşük", "max": "En Yüksek", - "days": "Gün", "hours": "Saat", "minutes": "Dakika" }, @@ -1298,16 +1907,16 @@ }, "userAvatar": { "menu": { - "switchToDarkMode": "Koyu Temaya Geç", - "switchToLightMode": "Aydınlık Temaya Geç", + "open": "Hesap menüsünü aç", "management": "Yönetim", - "docker": "Docker", "preferences": "Tercihleriniz", "logout": "Oturumu kapat", "login": "Giriş", "homeBoard": "Öntanımlı Panel", - "loggedOut": "Oturum kapatıldı", - "updateAvailable": "{countUpdates} güncelleme mevcut: {tag}" + "updateAvailable": "{countUpdates} güncelleme mevcut: {tag}", + "assistant": "Asistan", + "assistantThinking": "Düşünüyor", + "modifier": "Değiştirici" } }, "dangerZone": "Tehlikeli Bölge", @@ -1355,13 +1964,66 @@ "kilometersPerHour": "km/sa", "milesPerHour": "mil/sa" } + }, + "widgetQuery": { + "loading": "Widget verileri yükleniyor" + }, + "total": "Toplam", + "filesystemUsage": "{count, plural, one {# dosya sisteminin kullanımını göster} other {# dosya sisteminin kullanımını göster}}", + "field": { + "name": "İş adı" + }, + "label": { + "new": "Yeni" + }, + "entity": { + "apps": "Uygulamalar", + "boards": "Paneller", + "certificates": "Sertifikalar", + "customWidgets": "Özel widget'lar", + "groups": "Gruplar", + "integrations": "Entegrasyonlar", + "invites": "Davetler", + "logs": "Günlükler", + "media": "Medya", + "searchEngines": "Arama motorları", + "tasks": "Görevler", + "users": "Kullanıcılar" } }, "section": { - "dynamic": { + "option": { + "showLabel": { + "label": "Etiketi göster", + "description": "Konteyner etiketini içeriğinin üzerinde göster." + }, + "collapsible": { + "label": "Daraltmaya izin ver", + "description": "İzleyicilerin bu konteyneri genişletip daraltmasına izin verin." + }, + "showOpenAll": { + "label": "Tümünü aç eylemini göster", + "description": "Bu konteynerdeki her uygulamayı yeni sekmelerde açan bir eylem göster." + }, + "scrollable": { + "label": "Kaydırılabilir", + "description": "Bu konteyneri ayarlanan boyutunda tutun ve sığacak şekilde büyütmek yerine içeriğini kaydırın." + } + }, + "action": { + "openAllInNewTabsFor": "{name} içindeki tüm uygulamaları sekmelerde aç" + }, + "openAllInNewTabs": { + "title": "Tümünü sekmelerde aç", + "text": "Bazı tarayıcılar güvenlik nedeniyle sekmelerin toplu olarak açılmasını engelleyebilir. Homarr tüm pencereleri açamadı, çünkü tarayıcınız bu eylemi engelledi. Lütfen \"Açılır pencereleri aç\"a izin verin ve tekrar deneyin." + }, + "container": { + "untitled": "Başlıksız konteyner", "action": { - "create": "Yeni Dinamik Bölüm", - "remove": "Dinamik bölümü kaldır" + "create": "Yeni konteyner", + "remove": "Konteyneri kaldır", + "expand": "Genişlet", + "collapse": "Daralt" }, "option": { "title": { @@ -1375,55 +2037,12 @@ } }, "remove": { - "title": "Dinamik bölümü kaldır", - "message": "Bu dinamik bölümü kaldırmak istediğinizden emin misiniz? Öğeler üst bölümdeki aynı konuma taşınacaktır." - } - }, - "category": { - "field": { - "name": { - "label": "İsim" - } - }, - "action": { - "create": "Yeni Kategori", - "edit": "Kategoriyi Yeniden Adlandır", - "remove": "Kategoriyi kaldır", - "moveUp": "Yukarı taşı", - "moveDown": "Aşağı taşı", - "createAbove": "Yukarı Yeni Kategori", - "createBelow": "Aşağı Yeni Kategori", - "openAllInNewTabs": "Tümünü sekmelerde aç" - }, - "create": { - "title": "Yeni Kategori", - "submit": "Kategori ekle" - }, - "remove": { - "title": "Kategoriyi kaldır", - "message": "{name} kategorisini kaldırmak istediğinizden emin misiniz?" - }, - "edit": { - "title": "Kategoriyi Yeniden Adlandır", - "submit": "Kategoriyi Yeniden Adlandır" - }, - "menu": { - "label": { - "create": "Yeni Kategori", - "changePosition": "Pozisyonu değiştir", - "settings": "Ayarlar" - } - }, - "openAllInNewTabs": { - "title": "Tümünü sekmelerde aç", - "text": "Bazı tarayıcılar güvenlik nedeniyle sekmelerin toplu olarak açılmasını engelleyebilir. Homarr tüm pencereleri açamadı, çünkü tarayıcınız bu eylemi engelledi. Lütfen \"Açılır pencereleri aç\"a izin verin ve tekrar deneyin." + "message": "Bu konteyner kaldırılsın mı? İçeriği çevresindeki alana taşınacak." } } }, "item": { "action": { - "create": "Yeni Öğe", - "import": "Öğeleri İçe Aktar", "edit": "Öğeyi Düzenle", "moveResize": "Öğeyi Taşı / Yeniden Boyutlandır", "duplicate": "Öğeyi Çoğalt", @@ -1432,7 +2051,7 @@ "menu": { "label": { "settings": "Ayarlar", - "refresh": "Yenile", + "settingsFor": "{name} için ayarlar", "options": "Seçenekler", "actions": "Eylemler" }, @@ -1441,21 +2060,96 @@ "error": "Hata", "loading": "Yükleniyor", "idle": "Boşta" + }, + "notification": { + "saveError": { + "title": "Widget kaydedilemiyor", + "message": "Widget değişiklikleri geri alındı" + } } }, "create": { "title": "Eklenecek öğeyi seçin", "search": "Öğeleri Filtrele", - "addToBoard": "Panele Ekle" + "addToBoard": "Panele Ekle", + "addAtPosition": "Buraya öğe ekle", + "destination": { + "label": "Eklenecek yer", + "description": "Widget'ın görünmesi gereken yeri seçin. Daha sonra yine taşıyabilirsiniz.", + "mainCanvas": "Ana tuval", + "leftRail": "Sol kenar çubuğu", + "rightRail": "Sağ kenar çubuğu" + }, + "connectionStatus": { + "ready": "Hazır", + "needsSetup": "Kurulum gerekiyor", + "noConnectionRequired": "Bağlantı gerekmiyor" + }, + "customWidget": "Özel widget", + "standalone": "Bağımsız", + "missingIntegration": { + "title": "Önce bir hizmet bağlayın", + "noPermission": "Bu widget'ın uyumlu bir hizmet bağlantısına ihtiyacı var. Bir yöneticiden bağlantı kurmasını isteyin ve ardından tekrar deneyin." + }, + "notification": { + "success": { + "title": "Widget eklendi", + "message": "{name} bu panele eklendi.", + "relocatedMessage": "Seçilen hedef kullanılamadığı için {name}, {destination} konumuna eklendi." + }, + "error": { + "title": "Öğe eklenemiyor", + "message": "Öğe bu panele eklenemedi" + } + } + }, + "selection": { + "summary": "{count, plural, one {# öğe seçildi} other {# öğe seçildi}}", + "selected": "{count, plural, one {# seçildi} other {# seçildi}}", + "copy": "Kopyala", + "copied": "{count, plural, one {# öğe panoya kopyalandı} other {# öğe panoya kopyalandı}}", + "copyError": "Seçilen öğeler kopyalanamadı. Tarayıcınız pano erişimine izin vermiyor olabilir.", + "paste": "Yapıştır", + "pasteShortcut": "Kopyalanan öğeleri buraya yapıştırın (Ctrl / ⌘ + V)", + "pasted": "{count, plural, one {# öğe yapıştırıldı} other {# öğe yapıştırıldı}}", + "pasteError": "Pano okunamadı. Tarayıcınız pano erişimine izin vermiyor olabilir.", + "pasteInvalid": "Panoda geçerli Homarr panel öğeleri yok.", + "pasteUnavailable": "Kopyalanan öğeler bu panele sığmıyor.", + "removed": "{count, plural, one {# öğe kaldırıldı} other {# öğe kaldırıldı}}", + "move": "Taşı", + "moveTo": "Seçilen öğeleri taşı", + "delete": "Sil", + "clear": "Seçimi temizle", + "clearShortcut": "Seçimi temizle (Escape)", + "saveErrorTitle": "Öğeler güncellenemiyor", + "saveErrorMessage": "Değişiklikler kaydedilemedi. Panel yenilendi.", + "moveUnavailableTitle": "Seçilen öğeler taşınamıyor", + "moveUnavailableMessage": "Hedefte seçimin tamamı için yeterli alan yok." }, "moveResize": { "title": "Öğeyi Taşı / Yeniden Boyutlandır", + "entryLabel": "{name}, sütun {column}, satır {row}", + "target": { + "numbered": "{name}, hedef {index}", + "located": "{name}, {location}, hedef {index}" + }, + "keyboard": { + "instructions": "Klavye düzenlemesini başlatmak için Enter veya Boşluk tuşuna basın. Taşımak için ok tuşlarını, yeniden boyutlandırmak için Shift ve ok tuşlarını kullanın; durdurmak için Escape tuşuna basın.", + "started": "Klavye düzenlemesi başlatıldı. Taşımak için ok tuşlarını, yeniden boyutlandırmak için Shift ve ok tuşlarını kullanın; durdurmak için Escape tuşuna basın.", + "stopped": "Klavye düzenlemesi durduruldu.", + "boundary": "Bu değişiklik bu bölümün içine sığmıyor." + }, "field": { + "section": { + "label": "Bölüm veya kenar çubuğu" + }, "width": { - "label": "Genişlik" + "label": "Genişlik", + "shortLabel": "G" }, "height": { - "label": "Yükseklik" + "label": "Yükseklik", + "shortLabel": "Y" }, "xOffset": { "label": "X Ekseni" @@ -1469,18 +2163,36 @@ "title": "Öğeyi Düzenle", "tab": { "widget": "Widget'ı düzenle", - "app": "Uygulamayı düzenle" + "app": "Uygulamayı düzenle", + "integration": "Entegrasyonu düzenle" }, "app": { "propagationNotice": "Bu uygulamada yapılan değişiklikler, tüm panolarda kullanıldığı her yerde uygulanacaktır." }, + "integration": { + "action": "Bağlantıyı düzenle", + "description": "Bu widget'tan ayrılmadan seçilen bağlantıyı test edin veya onarın.", + "editLabel": "{name} entegrasyonu düzenle", + "fullAccessRequired": "Tam erişim gerekli", + "propagationNotice": "Bu entegrasyonda yapılan değişiklikler, kullanıldığı her yere uygulanır. Bağlantı kaydedilmeden önce test edilir.", + "loading": "Entegrasyon yükleniyor", + "loadError": "Bu entegrasyon yüklenemedi. Bağlantı ayarlarını değiştirmeden önce tekrar deneyin." + }, + "preview": { + "integrationRequired": "Bu widget'ı önizlemek için bir bağlantı seçin.", + "size": "Dosya Boyutu" + }, + "settings": { + "label": "Widget ayarları" + }, "advancedOptions": { "label": "Gelişmiş seçenekler", "title": "Gelişmiş öğe seçenekleri" }, "field": { "integrations": { - "label": "Entegrasyonlar" + "label": "Entegrasyonlar", + "removeLabel": "{name} entegrasyonunu kaldır" }, "title": { "label": "Başlık" @@ -1494,17 +2206,18 @@ } }, "remove": { - "title": "Öğeyi kaldır", "message": "Bu öğeyi kaldırmak istediğinizden emin misiniz?" + }, + "advancedFocus": { + "open": "Gelişmiş görünümü aç", + "close": "Gelişmiş görünümü kapat", + "label": "{widget} gelişmiş görünümü" } }, "widget": { "integrationSelect": { "configureIntegrationFirst": "Önce bir entegrasyon bağlayın", - "loading": "Yükleniyor...", - "placeholder": "Bir seçenek belirleyin", - "noResults": "Sonuç bulunamadı", - "loadError": "Seçenekler yüklenemedi" + "placeholder": "Bir seçenek belirleyin" }, "app": { "name": "Uygulama", @@ -1513,9 +2226,6 @@ "appId": { "label": "Uygulama seç" }, - "openInNewTab": { - "label": "Yeni Sekmede Aç" - }, "showTitle": { "label": "Uygulama adını göster" }, @@ -1523,11 +2233,8 @@ "label": "Durum denetimini etkinleştir" }, "layout": { - "label": "Düzen", "option": { - "row": "Yatay", "row-reverse": "Yatay (ters)", - "column": "Dikey", "column-reverse": "Dikey (ters)" } }, @@ -1552,23 +2259,60 @@ "name": "Yer İmleri", "description": "Birden fazla uygulama bağlantısını görüntüler", "option": { - "title": { - "label": "Başlık" + "showTitle": { + "label": "Widget başlığını göster" + }, + "titleSize": { + "label": "Widget başlık boyutu (px)" }, "layout": { "label": "Düzen", "option": { - "row": { - "label": "Yatay" - }, - "column": { - "label": "Dikey" - }, - "grid": { - "label": "Izgara" + "adaptive": { + "label": "Uyarlanabilir" }, "gridHorizontal": { "label": "Yatay ızgara" + }, + "icons": { + "label": "Simgeler" + } + } + }, + "variant": { + "label": "Görünüm", + "option": { + "soft": { + "label": "Yumuşak" + }, + "filled": { + "label": "Dolu" + }, + "outline": { + "label": "Çerçeveli" + }, + "plain": { + "label": "Düz" + } + } + }, + "spacing": { + "label": "Kart aralığı", + "option": { + "xs": { + "label": "Ekstra küçük" + }, + "sm": { + "label": "Küçük" + }, + "md": { + "label": "Orta" + }, + "lg": { + "label": "Büyük" + }, + "xl": { + "label": "Ekstra büyük" } } }, @@ -1581,17 +2325,28 @@ "hideHostname": { "label": "Ana bilgisayar adlarını gizle" }, - "openNewTab": { - "label": "Yeni sekmede aç" - }, "withBorder": { "label": "Kenarlık göster" }, + "grow": { + "label": "Kartları satırı dolduracak şekilde genişlet" + }, + "customUrls": { + "label": "Özel bağlantılar" + }, "items": { "label": "Yer İmleri", - "add": "Yer imi ekle" + "remove": "Yer imini kaldır", + "apps": { + "label": "Yer imi ekle", + "description": "URL'leri yapıştırın veya mevcut uygulamaları bulun. Yeniden sıralamak için aşağıdaki yer imlerini sürükleyin.", + "placeholder": "URL'leri yapıştırın veya uygulamalarda arayın", + "addUrl": "Bu URL'yi ekle", + "hint": "URL eklemek için Enter'a basın. Birkaç URL eklemek için virgülle ayrılmış veya satır başına bir URL yapıştırın." + } } - } + }, + "empty": "Widget ayarlarından bir URL veya uygulama ekleyin" }, "archiveTeamWarrior": { "name": "ArchiveTeam Warrior", @@ -1600,33 +2355,61 @@ "showBroadcastMessage": { "label": "Yayın mesajlarını göster" } + }, + "noProjectSelected": "Proje seçilmedi", + "runnerStatus": "Çalıştırıcı: {status}", + "projectId": "Proje: {id}", + "sessionReceived": "Oturum alındı: {value}", + "sessionSent": "Oturum gönderildi: {value}", + "sessionId": "Oturum: {id}", + "startedAt": "{date} tarihinde başlatıldı", + "emptyItems": "Bu anlık görüntüde etkin veya yakın tarihli iş yok", + "metric": { + "running": "Çalışıyor", + "completed": "Tamam", + "failed": "Başarısız", + "canceled": "İptal edildi", + "download": "İndirme", + "upload": "Yükleme" + }, + "status": { + "running": "Çalışıyor", + "completed": "Tamamlandı", + "failed": "Başarısız", + "canceled": "İptal edildi", + "stopped": "Durduruldu", + "idle": "Boşta", + "unknown": "Bilinmeyen" + } + }, + "wud": { + "name": "What's Up Docker", + "description": "İzlenen konteynerlerin kaçında güncelleme mevcut olduğunu gösterir.", + "title": "What's Up Docker", + "monitored": "İzlenen", + "updatesAvailable": "{count, plural, one {# güncelleme mevcut} other {# güncelleme mevcut}}", + "updateAvailable": "Güncelleme mevcut", + "openReleaseNotes": "Sürüm notlarını aç", + "option": { + "showRing": { + "label": "Güncelleme halkasını göster" + }, + "showUpdateList": { + "label": "Konteyner güncelleme listesini göster", + "description": "İmaj güncellemesi mevcut olan her izlenen konteyneri listeler" + } } }, "dnsHoleSummary": { "name": "DNS Çözümleyici Özeti", "description": "DNS Çözümleyici özetini görüntüler", "option": { - "layout": { - "label": "Düzen", - "option": { - "row": { - "label": "Yatay" - }, - "column": { - "label": "Dikey" - }, - "grid": { - "label": "Izgara" - } - } - }, "usePiHoleColors": { "label": "Pi-Hole renklerini kullan" } }, "error": { - "internalServerError": "DNS Çözümleyici Özeti alınamadı", - "integrationsDisconnected": "Veri Bulunamadı, Tüm Entegrasyonların Bağlantısı Kesildi" + "internalServerError": "DNS Çözümleyici Özeti alınamadı" }, "data": { "adsBlockedToday": "Bugün engellenenler", @@ -1634,32 +2417,24 @@ "dnsQueriesToday": "Bugünkü Sorgular", "domainsBeingBlocked": "Engelleme listesindeki alan adları" }, - "domainsTooltip": "Birden fazla entegrasyon nedeniyle Homarr, engellenen alan adlarının tam sayısını hesaplayamıyor" + "domainsTooltip": "Birden fazla entegrasyon nedeniyle Homarr, engellenen alan adlarının tam sayısını hesaplayamıyor", + "status": { + "enabled": "Etkin", + "disabled": "Pasif", + "unknown": "Bilinmeyen" + } }, "dnsHoleControls": { "name": "DNS Çözümleyici Kontrolleri", "description": "Kontrol panelinizden PiHole veya AdGuard'ı kontrol edin", "option": { - "layout": { - "label": "Düzen", - "option": { - "row": { - "label": "Yatay" - }, - "column": { - "label": "Dikey" - }, - "grid": { - "label": "Izgara" - } - } - }, "showToggleAllButtons": { "label": "Tüm Geçiş Yap Düğmelerini Göster" } }, "error": { - "internalServerError": "DNS Çözümleyici kontrol edilemedi" + "internalServerError": "DNS Çözümleyici kontrol edilemedi", + "bulkActionsFailed": "{count, plural, one {# eylem başarısız oldu} other {# eylem başarısız oldu}}" }, "controls": { "enableAll": "Tümünü Etkinleştir", @@ -1670,8 +2445,6 @@ "disabled": "Pasif", "processing": "İşlemde", "disconnected": "Bağlantısı kesildi", - "hours": "Saat", - "minutes": "Dakika", "unlimited": "Limitsiz olması için boş bırakın" } }, @@ -1683,16 +2456,10 @@ "label": "Özel Başlık/Şehir göster", "description": "Saatin üstüne özel bir başlık veya şehir/ülke adı ekleminizi sağlar." }, - "customTitle": { - "label": "Başlık" - }, "is24HourFormat": { "label": "24 saatlik biçim", "description": "12 saatlik format yerine 24 saatlik biçimi kullanın" }, - "showSeconds": { - "label": "Saniyeleri göster" - }, "useCustomTimezone": { "label": "Sabit zaman dilimi kullan" }, @@ -1711,29 +2478,295 @@ "label": "Özel zaman biçimi", "description": "Zaman biçimini değiştirmek için ISO 8601 standardını kullanın (bu diğer seçenekleri geçersiz kılacaktır)" }, - "customDateFormat": { - "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)" - }, "showWeather": { "label": "Hava durumunu göster", "description": "Kartın köşesinde küçük, hareketli bir hava durumu simgesi ve sıcaklık gösterir" }, - "weatherLocation": { - "label": "Hava durumu konumu" - }, "isWeatherFormatFahrenheit": { "label": "Fahrenhayt kullan" + }, + "animateWeatherIcon": { + "label": "Hava durumu simgesini canlandır", + "description": "Hava durumu simgesini canlandırın. Varsayılan olarak devre dışıdır ve azaltılmış hareket istendiğinde her zaman devre dışı bırakılır." + }, + "colorWeatherByDayNight": { + "label": "Hava durumunu gündüz/geceye göre renklendir", + "description": "Seçilen konumda o anda gündüz veya gece olmasına bağlı olarak hava durumu simgesini ve sıcaklığı gündüz ya da gece rengiyle renklendirin." + }, + "dayWeatherColor": { + "label": "Gündüz rengi" + }, + "nightWeatherColor": { + "label": "Gece rengi" + }, + "worldClockCities": { + "label": "Dünya saati şehirleri", + "description": "Gelişmiş görünüm için en fazla altı şehir ekleyin ve sıralayın." } + }, + "timezoneList": { + "timezone": "Saat dilimi", + "cityLabel": "Şehir etiketi", + "searchPlaceholder": "Saat dilimlerinde ara", + "noResults": "Saat dilimi bulunamadı", + "unsupportedOption": "Desteklenmiyor: {timeZone}", + "add": "Şehir ekle", + "remove": "{city} şehrini kaldır", + "reorder": "{city} şehrini yeniden sırala", + "limit": "{count}/{maximum} şehir yapılandırıldı" + }, + "worldClock": { + "primary": "Birincil saat", + "local": "Yerel saat", + "today": "Bugün", + "tomorrow": "Yarın", + "yesterday": "Dün", + "noSecondaryCities": "Burada karşılaştırmak için widget seçeneklerinden şehir ekleyin.", + "unsupportedPrimaryTitle": "Birincil saat dilimi kullanılamıyor", + "unsupportedPrimary": "{timeZone} bu tarayıcıda desteklenmiyor. Açıkça işaretlenmiş bir alternatif olarak UTC gösteriliyor.", + "unsupportedTimeZone": "Desteklenmeyen saat dilimi: {timeZone}", + "accessibleTime": "{city}: {time}, {date}, {timeZone}", + "advancedLabel": "Gelişmiş dünya saati", + "cities": "Dünya saatleri", + "cityCount": "{count} saat dilimi", + "timeBarLabel": "{city} için 24 saatlik gün içindeki konum", + "dayProgress": "{percent}% geçti · {hours} sa {minutes} dk kaldı", + "phaseLegend": "Günün saati açıklaması", + "tick": { + "midnight": "00", + "morning": "06", + "noon": "12", + "evening": "18", + "end": "24" + }, + "phaseRange": { + "night": "00–05 · 21–24", + "dawn": "05–08", + "day": "08–18", + "dusk": "18–21" + }, + "phase": { + "night": "Gece", + "dawn": "Şafak", + "day": "Gün", + "dusk": "Alacakaranlık" + } + } + }, + "airQuality": { + "name": "Hava Kalitesi ve UV", + "description": "Bir konum için hava kalitesini, ultraviyole indeksini, kirleticileri ve polenleri gösterir.", + "option": { + "location": { + "label": "Hava kalitesi konumu" + }, + "aqiStandard": { + "label": "HAİ standardı", + "options": { + "auto": "Yerel ayar için otomatik", + "european": "Avrupa HAİ'si", + "us": "ABD HAİ'si" + } + }, + "showUv": { + "label": "UV indeksini göster" + }, + "showPollutants": { + "label": "Kirletici yoğunluklarını göster" + }, + "showPollen": { + "label": "Polen yoğunluklarını göster" + } + }, + "category": { + "good": "İyi", + "fair": "Orta iyi", + "moderate": "Orta", + "unhealthySensitive": "Hassas gruplar için sağlıksız", + "unhealthy": "Sağlıksız", + "poor": "Kötü", + "veryPoor": "Çok kötü", + "veryUnhealthy": "Çok sağlıksız", + "extremelyPoor": "Son derece kötü", + "hazardous": "Tehlikeli", + "unknown": "HAİ ölçümü yok" + }, + "uv": { + "label": "UV indeksi", + "category": { + "low": "Düşük", + "moderate": "Orta", + "high": "Yüksek", + "veryHigh": "Çok yüksek", + "extreme": "Aşırı", + "unknown": "Ölçüm yok" + } + }, + "dominantPollutant": "Baskın kirletici", + "aqiLabel": "Hava Kalitesi İndeksi (AQI)", + "strongestPollen": "En yüksek polen", + "unit": { + "concentration": "{value} µg/m³", + "pollen": "{value} tanecik/m³" + }, + "pollutant": { + "pm2_5": "PM2.5", + "pm10": "PM10", + "ozone": "Ozon", + "nitrogenDioxide": "Azot dioksit", + "sulphurDioxide": "Kükürt dioksit", + "carbonMonoxide": "Karbon monoksit" + }, + "pollen": { + "alder": "Kızılağaç", + "birch": "Huş", + "grass": "Çim", + "mugwort": "Pelint", + "olive": "Zeytin", + "ragweed": "Ambrosia" + }, + "compact": { + "sixHourTrend": "Önümüzdeki altı saat için AQI eğilimi" + }, + "advanced": { + "observedAt": "{time} tarihinde güncellendi", + "next24Hours": "Önümüzdeki 24 saat", + "pollutants": "Kirletici konsantrasyonları", + "pollen": "Polen konsantrasyonları", + "sevenDayForecast": "7 günlük maksimum tahmin", + "aqiValue": "AQI {value}", + "uvValue": "UV {value}", + "uvShort": "UV {value}", + "noForecast": "Tahmin verisi mevcut değil" + } + }, + "countdown": { + "name": "Geri sayımlar", + "description": "Yaklaşan etkinlikleri ve yinelenen yıl dönümlerini takip eder.", + "option": { + "events": { + "label": "Etkinlikler", + "description": "20 adede kadar tek seferlik veya yıllık geri sayım ekleyin ve sıralayın. Tarihler seçilen saat dilimine göre girilir." + }, + "showProgress": { + "label": "İlerlemeyi göster" + }, + "showSeconds": { + "label": "Saniyeleri göster", + "description": "Yaklaşan her etkinlik için saniyeleri görünür tut." + } + }, + "dateTimeEventList": { + "newEvent": "Yeni etkinlik", + "add": "Etkinlik ekle", + "remove": "{event} etkinliğini kaldır", + "reorder": "{event} etkinliğini yeniden sırala", + "eventLabel": "Etkinlik etiketi", + "timezone": "Saat dilimi", + "unsupportedOption": "Desteklenmiyor: {timeZone}", + "recurrence": "Yinelenme", + "recurrenceOption": { + "none": "Yinelenmiyor", + "yearly": "Her yıl" + }, + "target": "Etkinlik tarihi ve saati", + "trackProgress": "Başlangıç tarihinden itibaren ilerlemeyi takip et", + "start": "İlerleme başlangıç tarihi ve saati", + "confirmDateTime": "Tarih ve saati onayla", + "limit": "{maximum} etkinlikten {count} tanesi yapılandırıldı" + }, + "empty": { + "title": "Henüz geri sayım yok", + "description": "Geri saymaya başlamak için widget seçeneklerinden bir etkinlik ekleyin." + }, + "completed": "Tamamlandı", + "yearly": "Yıllık", + "progress": "Etkinlik ilerlemesi", + "upcoming": "Yaklaşan", + "completedEvents": "Tamamlanan etkinlikler", + "invalid": { + "title": "Bazı etkinlikler görüntülenemiyor", + "description": "{count, plural, one {Bir etkinliğin tarihi geçersiz veya saat dilimi desteklenmiyor.} other {# etkinliğin tarihi geçersiz veya saat dilimi desteklenmiyor.}}", + "value": "Kullanılamıyor" + }, + "alert": { + "notifications": "Tarayıcı bildirimleri", + "permissionDenied": "Bu tarayıcıda bildirimler engellendi.", + "reached": "Geri sayım hedefine ulaştı." + } + }, + "timer": { + "name": "Zamanlayıcı / Pomodoro", + "description": "Basit bir zamanlayıcı veya yapılandırılabilir bir Pomodoro dizisi çalıştırır.", + "option": { + "mode": { + "label": "Mod", + "options": { + "timer": "Zamanlayıcı", + "pomodoro": "Pomodoro" + } + }, + "timerMinutes": { + "label": "Zamanlayıcı dakikaları" + }, + "focusMinutes": { + "label": "Odaklanma dakikaları" + }, + "shortBreakMinutes": { + "label": "Kısa mola dakikaları" + }, + "longBreakMinutes": { + "label": "Uzun mola dakikaları" + }, + "sessionsBeforeLongBreak": { + "label": "Uzun moladan önceki odaklanma oturumları" + }, + "autoStartBreaks": { + "label": "Molaları otomatik başlat" + }, + "autoStartFocus": { + "label": "Odaklanma oturumlarını otomatik başlat" + } + }, + "phase": { + "timer": "Zamanlayıcı", + "focus": "Odaklanma", + "shortBreak": "Kısa mola", + "longBreak": "Uzun mola" + }, + "action": { + "start": "Başlat", + "pause": "Duraklat", + "reset": "Sıfırla" + }, + "attention": { + "timerComplete": "Zamanlayıcı tamamlandı", + "phaseReady": "{phase} hazır" + }, + "progress": "Zamanlayıcı ilerlemesi: {progress}%", + "compact": { + "completedFocus": "{count, plural, =0 {Tamamlanan odaklanma oturumu yok} one {# odaklanma oturumu tamamlandı} other {# odaklanma oturumu tamamlandı}}" + }, + "alert": { + "title": "Zamanlayıcı tamamlandı", + "completed": "{phase} tamamlandı." + }, + "advanced": { + "sequence": "Pomodoro dizisi", + "focusSession": "Odaklanma {session}", + "settings": "Kalıcı ayarlar", + "settingsHint": "Bu pano ayarlarını düzenlemek için widget bağlam menüsünü kullanın.", + "localAlerts": "Yerel uyarılar", + "notifications": "Tarayıcı bildirimleri", + "sound": "Zamanlayıcı sesleri", + "localAlertsHint": "Zamanlayıcı sesleri varsayılan olarak etkindir. Sesler ve bildirimler yalnızca bu tarayıcıdaki bu widget için geçerlidir.", + "notificationsDenied": "Bu tarayıcıda bildirimler engellendi." } }, "minecraftServerStatus": { "name": "Minecraft Sunucu Durumu", "description": "Minecraft sunucusunuzun durumunu görüntüler", "option": { - "title": { - "label": "Başlık" - }, "domain": { "label": "Sunucu adresi" }, @@ -1753,11 +2786,21 @@ "noStation": "İstasyon seçilmedi", "option": { "baseUrl": { - "label": "Search.ch URL'si" + "label": "Search.ch URL'si", + "description": "Özel URL'ler genel bir IP adresine çözümlenmelidir. Özel ve yerel ana bilgisayarlar reddedilir." }, "station": { - "label": "İstasyon" + "label": "İstasyon", + "placeholder": "İstasyon ara" } + }, + "error": { + "customSourceUnavailable": "Sefer tarifesi kaynağı kullanılamıyor. URL'sinin genel bir IP adresine çözümlendiğini kontrol edin.", + "stationSearch": "İstasyonlar aranamadı. Özel URL'yi ve pano erişiminizi kontrol edin." + }, + "warning": { + "stale": "Sefer tarifesi yenilenemedi. Son olarak {time} tarihinde güncellenen kalkışlar gösteriliyor.", + "staleCompact": "Güncel olmayan veriler" } }, "notebook": { @@ -1789,6 +2832,9 @@ "directionRtl": "Metin yönünü sağdan sola ayarla", "blockquote": "Blok alıntı", "horizontalLine": "Yatay çizgi", + "details": "Daraltılabilir bölümü aç/kapat", + "expandDetails": "Daraltılabilir bölümü genişlet", + "collapseDetails": "Daraltılabilir bölümü daralt", "bulletList": "Maddeli liste", "orderedList": "Sıralı liste", "checkList": "Kontrol listesi", @@ -1797,16 +2843,20 @@ "link": "Bağlantı", "unlink": "Bağlantıyı kaldır", "image": "Görsel Yerleştir", - "addTable": "Tablo ekle", + "insertTable": "Tablo ekle", + "insertTableSize": "{columns} × {rows} tablo ekle", "deleteTable": "Tablo Sil", "colorCell": "Renk Hücresi", - "mergeCell": "Hücre birleştirmeyi aç / kapat", + "mergeCells": "Hücreleri birleştir", + "splitCell": "Hücreyi böl", "addColumnLeft": "Öncesine sütun ekle", "addColumnRight": "Sonrasına sütun ekle", "deleteColumn": "Sütunu sil", "addRowTop": "Öncesine satır ekle", "addRowBelow": "Sonrasına satır ekle", - "deleteRow": "Satırı sil" + "deleteRow": "Satırı sil", + "toggleHeaderRow": "Başlık satırını aç/kapat", + "toggleHeaderColumn": "Başlık sütununu aç/kapat" }, "align": { "left": "Sol", @@ -1817,8 +2867,6 @@ "clearColor": "Rengi temizle", "source": "Kaynak", "widthPlaceholder": "% veya piksel cinsinden değer", - "columns": "Sütunlar", - "rows": "Satırlar", "width": "Genişlik", "height": "Yükseklik" }, @@ -1830,7 +2878,9 @@ "discard": "Değişiklileri at", "keepEditing": "Düzenlemeyi sürdür" } - } + }, + "saveFailed": "Not kaydedilemedi", + "documentStats": "{words, plural, one {# kelime} other {# kelime}} · {characters, plural, one {# karakter} other {# karakter}}" }, "anchorNote": { "name": "Anchor Notu", @@ -1839,9 +2889,6 @@ "noteId": { "label": "Not" }, - "showTitle": { - "label": "Başlığı göster" - }, "showUpdatedAt": { "label": "Son güncellenmeyi göster" } @@ -1851,14 +2898,20 @@ "notFound": "Not bulunamadı", "noNotes": "Not bulunamadı", "integrationRequired": "Önce bir Anchor entegrasyonu seçin", - "updatedAt": "Güncellendi: {date}", "untitled": "Başlıksız", - "edit": "Düzenle", - "save": "Kaydet", - "cancel": "İptal", "readOnlyViewer": "Bu nota görüntüleyici erişiminiz var. Düzenleme devre dışı bırakıldı.", "saveForbidden": "Bu notu düzenleme izniniz yok.", - "saveFailed": "Not kaydedilemedi. Lütfen tekrar deneyin." + "saveFailed": "Not kaydedilemedi. Lütfen tekrar deneyin.", + "createdAt": "{date} tarihinde oluşturuldu", + "permission": { + "owner": "Sahip", + "editor": "Düzenleyici", + "viewer": "Görüntüleyici" + }, + "status": { + "pinned": "Sabitlendi", + "archived": "Arşivlenmiş" + } }, "iframe": { "name": "iFrame", @@ -1917,6 +2970,25 @@ "clickable": { "label": "Bir ögenin tıklanabilir olup olmadığı" } + }, + "state": { + "on": "Açık", + "off": "Kapalı", + "unavailable": "Kullanılamıyor", + "unknown": "Bilinmeyen" + }, + "advanced": { + "entityId": "Varlık kimliği: {id}", + "lastChanged": "{date} tarihinde değiştirildi", + "attribute": { + "unit": "Birim", + "deviceClass": "Cihaz sınıfı", + "icon": "Simge" + } + }, + "error": { + "loadFailed": "Varlık yüklenemedi", + "toggleFailed": "Varlık güncellenemedi" } }, "smartHome-executeAutomation": { @@ -1932,11 +3004,31 @@ }, "spotlightAction": { "run": "Çalıştır {name}" + }, + "advanced": { + "lastExecuted": "Son çalıştırma: {time}", + "automationId": "Otomasyon kimliği: {id}", + "ready": "Çalıştırılmaya hazır", + "noPermission": "Bu otomasyonu çalıştırma izni yok" + }, + "status": { + "running": "Otomasyon çalışıyor", + "success": "Otomasyon tamamlandı" + }, + "error": { + "executeFailed": "Otomasyon çalıştırılamadı" } }, "stockPrice": { "name": "Hisse Senedi Fiyatı", "description": "Bir şirketin güncel hisse senedi fiyatını görüntüler", + "advanced": { + "currentPrice": "Geçerli fiyat", + "previousClose": "Önceki kapanış", + "changePercentage": "Değişim (%)", + "minimum": "Minimum", + "maximum": "Maksimum" + }, "option": { "stock": { "label": "Hisse senedi sembolü" @@ -2007,6 +3099,10 @@ "label": "1 Ay" } } + }, + "showDetails": { + "label": "Ayrıntıları göster", + "description": "Kompakt görünümde adı, değişimi ve zaman aralığını gösterir. Yalnızca sembol ve fiyat için kapatın." } } }, @@ -2034,6 +3130,13 @@ "showUnmonitored": { "label": "Takip edilmeyenleri göster" } + }, + "advanced": { + "previousMonth": "Önceki ayı göster", + "nextMonth": "Sonraki ayı göster", + "eventCount": "{count, plural, one {# etkinlik} other {# etkinlik}}", + "loading": "Takvim etkinlikleri yükleniyor...", + "noEvents": "Bu ayda etkinlik yok" } }, "weather": { @@ -2046,16 +3149,18 @@ "disableTemperatureDecimals": { "label": "Sıcaklıklarda ondalıkları gösterme" }, + "animateIcons": { + "label": "Hava durumu simgelerini canlandır" + }, + "showHumidity": { + "label": "Nemi göster" + }, "showCurrentWindSpeed": { - "label": "Mevcut rüzgar hızını göster", - "description": "Yalnızca mevcut hava durumunda" + "label": "Mevcut rüzgar hızını göster" }, "useImperialSpeed": { "label": "Rüzgâr hızı için mil/sa kullan" }, - "location": { - "label": "Hava durumu konumu" - }, "showCity": { "label": "Şehri göster" }, @@ -2065,13 +3170,10 @@ "forecastDayCount": { "label": "Tahmin edilen gün sayısı", "description": "Widget yeterince geniş olmadığında daha az gün gösterilir" - }, - "dateFormat": { - "label": "Tarih Biçimi", - "description": "Görüntülenecek tarihin biçimi" } }, "currentWindSpeed": "{currentWindSpeed} {unit}", + "disabled": "Giden bağlantılar devre dışı olduğundan hava durumu verileri kullanılamıyor", "dailyForecast": { "sunrise": "Gün Doğumu", "sunset": "Gün Batımı", @@ -2094,6 +3196,47 @@ "thunderstorm": "Fırtına", "thunderstormWithHail": "Dolu Yağışlı Fırtına", "unknown": "Bilinmeyen" + }, + "details": "Hava durumu ayrıntılarını göster", + "detailsFor": "{date} için hava durumu ayrıntılarını göster", + "advanced": { + "forecast": "7 günlük tahmin", + "hourlyForecast": "Önümüzdeki 24 saat", + "day": "Gün", + "time": "Saat", + "conditions": "Koşullar", + "temperature": "Sıcaklık", + "feelsLike": "Hissedilen {temperature}", + "feelsLikeLabel": "Hissedilen", + "feelsLikeRange": "Hissedilen: {maximum} / {minimum}", + "highLow": "Yüksek {maximum} · düşük {minimum}", + "observedAt": "{time} tarihinde güncellendi", + "humidity": "Nem", + "averageHumidity": "Ortalama nem: {humidity}%", + "currentHumidity": "Mevcut nem", + "wind": "Rüzgâr / hamleler ({unit})", + "currentWind": "Mevcut rüzgâr / hamleler", + "windValue": "{speed} / {gusts} {unit}", + "windDetail": "Maks. rüzgâr / hamleler: {speed} / {gusts} {unit}", + "nextHourPrecipitation": "Önümüzdeki saat için yağış", + "precipitationChance": "Yağış ihtimali", + "precipitationValue": "{probability}% · {amount} mm", + "precipitationDetail": "Yağış: {probability}% · {amount} mm", + "todayUv": "Bugünün maksimum UV endeksi", + "uvIndex": "Maks. UV endeksi: {value}", + "daylight": "Gün ışığı: {duration}", + "hourlyTooltip": "Hissedilen {feelsLike}{temperatureUnit} · {amount} mm · nem %{humidity} · {speed} {speedUnit} rüzgâr", + "hourlyTooltipWithoutHumidity": "Hissedilen {feelsLike}{temperatureUnit} · {amount} mm · {speed} {speedUnit} rüzgâr", + "detailLabel": { + "feelsLike": "Hissedilen", + "precipitation": "Yağış", + "humidity": "Ortalama nem", + "wind": "Maks. rüzgâr / hamleler", + "uv": "Maks. UV endeksi", + "daylight": "Gün ışığı" + }, + "sun": "Gün doğumu / gün batımı", + "noForecast": "Tahmin verisi mevcut değil" } }, "indexerManager": { @@ -2106,8 +3249,15 @@ }, "title": "İndeksleyici Yöneticisi", "testAll": "Tümünü test et", + "status": { + "healthy": "Sağlıklı", + "unhealthy": "Sağlıksız", + "disabled": "Pasif", + "unknown": "Sağlık bilgisi kullanılamıyor" + }, "error": { - "internalServerError": "İndeksleyicilerin durumu alınamadı" + "internalServerError": "İndeksleyicilerin durumu alınamadı", + "testAll": "Dizinleyici testi başarısız oldu. Yeniden deneyin." } }, "healthMonitoring": { @@ -2136,11 +3286,6 @@ "fileSystem": { "label": "Dosya Sistemi Bilgilerini Göster" }, - "visibleStorageVolumes": { - "label": "Görünür depolama birimleri", - "description": "Yalnızca seçilen entegrasyonların tümü Synology olduğunda kullanılabilir. Algılanan tüm depolama birimlerini göstermek için boş bırakın.", - "placeholder": "Depolama birimlerini seçin" - }, "defaultTab": { "label": "Varsayılan sekme" }, @@ -2163,17 +3308,27 @@ "minutes": "{count} dakika", "used": "Kullanılan", "available": "Kullanılabilir", - "lastSeen": "Son durum güncellemesi: {lastSeen}" + "lastSeen": "Son durum güncellemesi: {lastSeen}", + "updatesAvailable": "{count, plural, one {# güncelleme mevcut} other {# güncelleme mevcut}}", + "rebootRequired": "Yeniden başlatma gerekli", + "rebootNotRequired": "Yeniden başlatma gerekli değil" + }, + "smartStatus": { + "attributesWithinThresholds": "SMART: öznitelikler eşikler içinde", + "attributesFailed": "SMART: {attributes} başarısız oldu", + "noCriticalWarning": "SMART: SSD tarafından uyarı bildirilmedi", + "criticalWarning": "SMART: SSD tarafından kritik uyarı bildirildi" + }, + "gauge": { + "cpuUsage": "CPU kullanımı", + "cpuTemperature": "CPU sıcaklığı", + "memoryUsage": "Bellek kullanımı", + "gpuUsage": "{name} GPU kullanımı" }, - "memory": {}, "error": { "internalServerError": "Sağlık durumu alınamadı" }, "cluster": { - "summary": { - "cpu": "İşlemci", - "memory": "BELLEK" - }, "resource": { "node": { "name": "Düğümler" @@ -2209,8 +3364,6 @@ "table": { "header": { "name": "İsim", - "cpu": "İşlemci", - "memory": "BELLEK", "node": "Düğüm" } } @@ -2220,33 +3373,29 @@ "name": "Docker istatistikleri", "description": "Konteynerlerinizin istatistikleri (Bu widget yalnızca yönetici ayrıcalıklarıyla eklenebilir)", "option": { - "columns": { - "label": "Gösterilecek sütunlar" + "endpointIds": { + "label": "Docker ortamları", + "description": "Her Docker ortamındaki konteynerleri göstermek için boş bırakın", + "placeholder": "Tüm Docker ortamları" }, - "enableRowSorting": { - "label": "Öğeleri sıralamayı etkinleştir" + "containerFilter": { + "label": "Filtrelenecek konteynerler" + }, + "filterIsWhitelist": { + "label": "Beyaz liste olarak filtrele" }, "defaultSort": { - "label": "Varsayılan sıralama sütunu", "option": { "name": "Ad", "state": "Durum", "cpuUsage": "CPU kullanımı", "memoryUsage": "Bellek kullanımı" } - }, - "descendingDefaultSort": { - "label": "Sıralamayı ters çevir" - }, - "columnOrder": { - "label": "Sütun sırası" - }, - "columnWidths": { - "label": "Sütun genişlikleri" } }, "error": { "internalServerError": "Konteyner istatistikleri alınamadı", + "endpointsUnavailable": "Docker uç noktaları kullanılamıyor", "layoutSaveTitle": "Tablo düzeni kaydedilemedi", "layoutSaveMessage": "Docker tablo düzeni kaydedilemedi. Sütunu yeniden taşımayı veya boyutlandırmayı deneyin." }, @@ -2255,7 +3404,6 @@ } }, "coolify": { - "name": "Coolify", "description": "Sunucular ve uygulamalarla birlikte Coolify örneğinizin genel görünümü", "option": { "showServers": { @@ -2281,17 +3429,49 @@ "internalServerError": "Coolify verileri alınamadı" }, "server": { - "buildServer": "Derleme" + "buildServer": "Derleme", + "resourceCounts": "{applications, plural, one {# uygulama} other {# uygulama}} / {services, plural, one {# hizmet} other {# hizmet}}", + "reachability": "Erişilebilirlik", + "usability": "Kullanılabilirlik" + }, + "source": { + "url": "Kaynak: {url}", + "unavailable": "{source}: kullanılamıyor" }, "instances": { "title": "Örnekler" + }, + "action": { + "openResource": "{name} öğesini aç", + "openLogs": "{name} günlüklerini aç", + "showIp": "IP adresini göster", + "hideIp": "IP adresini gizle" + }, + "status": { + "running": "Çalışıyor", + "stopped": "Durduruldu", + "exited": "Durduruldu", + "starting": "Başlatılıyor", + "restarting": "Yeniden Başlatılıyor", + "unknown": "Bilinmeyen", + "online": "Çevrimiçi", + "offline": "Çevrimdışı", + "reachable": "Erişilebilir", + "unreachable": "Erişilemiyor", + "usable": "Kullanılabilir", + "unusable": "Kullanılamaz" } }, "vpn": { "name": "VPN", "description": "VPN bağlantılarınızın genel görünümü", "serviceUnavailable": "VPN kullanılamıyor", - "option": {} + "status": { + "running": "Çalışıyor", + "notRunning": "Çalışmıyor", + "unavailable": "Kullanılamıyor", + "vpn": "VPN: {status}" + } }, "ups": { "name": "UPS", @@ -2318,14 +3498,19 @@ "runtime": "Çalışma Süresi", "load": "Yük", "input": "Giriş", - "output": "Çıkış" + "output": "Çıkış", + "batteryVoltage": "Pil voltajı", + "power": "Güç", + "temperature": "Sıcaklık", + "manufacturer": "Üretici", + "model": "Model", + "serial": "Seri numarası" }, "error": { "internalServerError": "UPS verileri alınamadı" } }, "tracearr": { - "name": "Tracearr", "description": "Ayrıntılı yayın ve kod dönüştürme verileriyle gelişmiş medya sunucusu izleme", "option": { "showStreams": { @@ -2413,10 +3598,7 @@ "label": "Etkinlik", "description": "Belirli bir etkinliğin toplam oluşum sayısını göster", "placeholder": "Bir etkinlik seçin", - "loading": "Etkinlikler yükleniyor...", - "noEvents": "Etkinlik bulunamadı", - "none": "Etkinlik yok", - "configureWebsiteFirst": "Etkinlikleri yüklemek için önce bir web sitesi seçin" + "none": "Etkinlik yok" }, "chartType": { "label": "Grafik türü", @@ -2447,26 +3629,21 @@ "eventNames": { "label": "Etkinlikler", "description": "Grafik için bir veya daha fazla etkinlik seçin", - "placeholder": "Etkinlik seç...", - "loading": "Etkinlikler yükleniyor...", - "noEvents": "Etkinlik bulunamadı", - "configureWebsiteFirst": "Etkinlikleri yüklemek için önce bir web sitesi seçin" + "placeholder": "Etkinlik seç..." }, "topCount": { "label": "Gösterilecek öğeler", "description": "Gösterilecek en fazla öğe sayısı (en çok 500)" + }, + "events": { + "loading": "Etkinlikler yükleniyor...", + "noEvents": "Etkinlik bulunamadı", + "configureWebsiteFirst": "Etkinlikleri yüklemek için önce bir web sitesi seçin" } }, "event": { - "occurrences": "etkinlik", "label": "etkinlik" }, - "topPages": { - "direct": "Doğrudan" - }, - "topReferrers": { - "direct": "Doğrudan" - }, "events": { "selectPrompt": "Grafik için etkinlik seçin" }, @@ -2475,6 +3652,9 @@ "noWebsite": "Web sitesi yapılandırılmadı", "noData": "Veri yok", "internalServerError": "Umami verileri alınamadı" + }, + "top": { + "direct": "Doğrudan" } }, "common": { @@ -2502,7 +3682,8 @@ }, "integration": { "noData": "Hiçbir entegrasyon bulunamadı", - "description": "Yeni bir entegrasyon oluşturmak için tıklayın" + "description": "Yeni bir entegrasyon oluşturmak için tıklayın", + "manage": "Entegrasyonları yönet" }, "app": { "noData": "Uygulama bulunamadı", @@ -2513,7 +3694,61 @@ "noIntegration": "Hiçbir entegrasyon seçilmedi", "noData": "Entegrasyon verisi mevcut değil" }, - "option": {} + "integrationDisconnected": "Veri bulunamadı, tüm entegrasyonların bağlantısı kesildi", + "updatedAt": "Güncellendi: {date}", + "title": { + "label": "Başlık" + }, + "openInNewTab": { + "label": "Yeni sekmede aç" + }, + "showTitle": { + "label": "Başlığı göster" + }, + "weatherLocation": { + "label": "Hava durumu konumu" + }, + "layout": { + "label": "Düzen", + "option": { + "horizontal": "Yatay", + "vertical": "Dikey", + "grid": "Izgara" + } + }, + "select": { + "loading": "Yükleniyor...", + "loadError": "Seçenekler yüklenemedi" + }, + "dateFormat": { + "label": "Tarih Biçimi", + "description": "Görüntülenecek tarihin biçimi" + }, + "visibleStorageVolumes": { + "label": "Görünür depolama birimleri", + "description": "Yalnızca seçilen entegrasyonların tümü OpenMediaVault veya Synology olduğunda kullanılabilir. Algılanan tüm depolama birimlerini göstermek için boş bırakın.", + "placeholder": "Depolama birimlerini seçin" + }, + "tableOptions": { + "columns": { + "label": "Gösterilecek sütunlar" + }, + "columnOrder": { + "label": "Sütun sırası" + }, + "columnWidths": { + "label": "Sütun genişlikleri" + }, + "enableRowSorting": { + "label": "Öğeleri sıralamayı etkinleştir" + }, + "defaultSort": { + "label": "Varsayılan sıralama sütunu" + }, + "invertSorting": { + "label": "Sıralamayı ters çevir" + } + } }, "video": { "name": "Video Akışı", @@ -2572,6 +3807,7 @@ "transcoding": "Kod dönüştürülüyor", "paused": "Duraklatıldı", "remaining": "{minutes} dk kaldı", + "seasonEpisode": "S{season} B{episode}", "metadata": { "title": "Meraklısı için istatistikler", "video": { @@ -2589,11 +3825,16 @@ "resolution": "Çözünürlük", "target": "Hedef Kodek" } - } + }, + "unknownUser": "Bilinmeyen kullanıcı" + }, + "summary": { + "sessions": "{count, plural, one {# oturum} other {# oturum}}", + "playing": "{count} oynatılıyor", + "transcoding": "{count} kod dönüştürülüyor" } }, "paperlessNgx": { - "name": "Paperless-ngx", "description": "Paperless-ngx belge arşivinizin genel görünümü", "documentsTotal": "Toplam Belge", "documentsInbox": "Gelen Kutusu", @@ -2637,6 +3878,192 @@ "internalServerError": "Paperless-ngx verileri alınamadı" } }, + "patchmon": { + "description": "PatchMon'daki ana makine yama durumunun genel görünümü", + "title": "PatchMon İstatistikleri", + "totalHosts": "Toplam Ana Makine", + "hostsNeedingUpdates": "Güncelleme Gerekiyor", + "securityUpdates": "Güvenlik Güncellemeleri", + "upToDateHosts": "Güncel Ana Makineler", + "hostsWithSecurityUpdates": "Güvenlik Güncellemesi Olan Ana Makineler", + "recentUpdates24h": "Güncellemeler (24 sa.)", + "totalOutdatedPackages": "Güncel Olmayan Paketler", + "totalRepos": "Depolar", + "osDistribution": "İşletim Sistemi Dağılımı", + "compliance": "Yama Uyumluluğu", + "complianceRatio": "{upToDate} / {total}", + "lastUpdated": "Güncellendi: {time}", + "option": { + "showTotalHosts": { + "label": "Toplam ana makine sayısını göster", + "description": "İzlenen toplam ana makine sayısını gösterir" + }, + "showHostsNeedingUpdates": { + "label": "Güncelleme gereken ana makineleri göster", + "description": "En az bir güncel olmayan paketi bulunan ana makineleri gösterir" + }, + "showSecurityUpdates": { + "label": "Güvenlik güncellemelerini göster", + "description": "Kullanılabilir toplam güvenlik güncellemesi sayısını gösterir" + }, + "showUpToDateHosts": { + "label": "Güncel ana makineleri göster", + "description": "Güncel olmayan paketi bulunmayan ana makineleri gösterir" + }, + "showHostsWithSecurityUpdates": { + "label": "Güvenlik güncellemesi olan ana makineleri göster", + "description": "Güvenlik yaması gereken ana makineleri gösterir" + }, + "showRecentUpdates24h": { + "label": "Son güncellemeleri göster (24 sa.)", + "description": "Son 24 saatte uygulanan güncelleme sayısını gösterir" + }, + "showTotalOutdatedPackages": { + "label": "Güncel olmayan paketleri göster", + "description": "Tüm ana makinelerdeki güncel olmayan paketlerin toplam sayısını gösterir" + }, + "showTotalRepos": { + "label": "Depoları göster", + "description": "İzlenen etkin depo sayısını gösterir" + }, + "enableThresholdColors": { + "label": "Eşik renklerini etkinleştir", + "description": "İstatistik değerlerini önem düzeyi ön ayarlarına göre yeşil, sarı veya kırmızı renklendirir" + }, + "useCustomThresholds": { + "label": "Gelişmiş eşikler", + "description": "Her istatistik için uyarı ve kritik eşikleri mutlak sayılarla veya toplam ana makine yüzdesiyle özelleştirin" + }, + "thresholdMode": { + "option": { + "absolute": "Mutlak sayı", + "percent": "Toplam ana makinelerin yüzdesi" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "Güncelleme gereksinimi eşik modu", + "description": "Güncelleme gerekenlerin sayısını mutlak değer veya toplam ana makinelerin yüzdesi olarak karşılaştırır" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "Güncelleme gereksinimi uyarı eşiği" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "Güncelleme gereksinimi kritik eşiği" + }, + "securityUpdatesThresholdMode": { + "label": "Güvenlik güncellemeleri eşik modu", + "description": "Güvenlik güncellemesi sayısını mutlak değer veya toplam ana makinelerin yüzdesi olarak karşılaştırır" + }, + "securityUpdatesWarningAt": { + "label": "Güvenlik güncellemeleri uyarı eşiği" + }, + "securityUpdatesCriticalAt": { + "label": "Güvenlik güncellemeleri kritik eşiği" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "Güvenlik güncellemesi olan ana makineler için eşik modu", + "description": "Ana makine sayısını mutlak değer veya toplam ana makinelerin yüzdesi olarak karşılaştırır" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "Güvenlik güncellemesi olan ana makineler için uyarı eşiği" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "Güvenlik güncellemesi olan ana makineler için kritik eşik" + }, + "upToDateHostsThresholdMode": { + "label": "Güncel ana makineler için eşik modu", + "description": "Güncel ana makine sayısını mutlak değer veya toplam ana makinelerin yüzdesi olarak karşılaştırır" + }, + "upToDateHostsWarningAt": { + "label": "Güncel ana makineler için uyarı eşiği", + "description": "Değer bu eşikte veya üzerinde, ancak tam kapsamanın altındaysa sarı renge geçer" + }, + "upToDateHostsCriticalAt": { + "label": "Güncel ana makineler için kritik eşik", + "description": "Değer bu eşiğin altına düştüğünde kırmızı renge geçer" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "Güncel olmayan paketler için eşik modu", + "description": "Güncel olmayan paketlerin sayısını mutlak değer veya toplam ana makinelerin yüzdesi olarak karşılaştırır" + }, + "totalOutdatedPackagesWarningAt": { + "label": "Güncel olmayan paketler için uyarı eşiği" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "Güncel olmayan paketler için kritik eşik" + }, + "showOsDistribution": { + "label": "İşletim sistemi dağılımını göster", + "description": "İzlenen ana makinelerin işletim sistemine göre dağılımını gösterir" + }, + "osDistributionLimit": { + "label": "İşletim sistemi dağılımı sınırı", + "description": "Gösterilecek en fazla işletim sistemi sayısı", + "option": { + "3": "İlk 3", + "5": "İlk 5", + "10": "İlk 10", + "all": "Tümü" + } + }, + "showOsVersion": { + "label": "İşletim sistemi sürümünü göster", + "description": "Mevcut olduğunda işletim sistemi sürümünü her dağılım etiketine ekler" + }, + "showComplianceHero": { + "label": "Uyumluluk özetini göster", + "description": "Güncel ana makinelerin yüzdesini gösteren bir uyumluluk halkası görüntüler" + }, + "osDisplayMode": { + "label": "İşletim sistemi görüntüleme modu", + "description": "İşletim sistemi dağılımının nasıl gösterileceğini seçin", + "option": { + "bars": "Yatay çubuklar", + "donut": "Halka grafik" + } + }, + "threshold": { + "warningAt": { + "description": "Değer bu eşiğe ulaştığında sarı renge geçer" + }, + "criticalAt": { + "description": "Değer bu eşiğe ulaştığında kırmızı renge geçer" + } + } + }, + "error": { + "internalServerError": "PatchMon verileri alınamadı" + } + }, + "bazarr": { + "description": "Bazarr örneğinizdeki eksik altyazıların ve sağlık durumunun genel görünümü", + "episodes": "Eksik Bölümler", + "movies": "Eksik Filmler", + "providers": "Sağlayıcı Sorunları", + "status": "Sağlık Sorunları", + "announcements": "Duyurular", + "option": { + "showMissingEpisodes": { + "label": "Eksik bölümleri göster", + "description": "Altyazısı eksik bölüm sayısını gösterir" + }, + "showMissingMovies": { + "label": "Eksik filmleri göster", + "description": "Altyazısı eksik film sayısını gösterir" + }, + "showProviderIssues": { + "label": "Sağlayıcı sorunlarını göster", + "description": "Sorun yaşayan altyazı sağlayıcılarının sayısını gösterir" + }, + "showHealthIssues": { + "label": "Sağlık sorunlarını göster", + "description": "Bazarr sağlık sorunlarının sayısını gösterir" + } + }, + "error": { + "internalServerError": "Bazarr verileri alınamadı" + } + }, "immich-serverStats": { "name": "Immich Sunucu İstatistikleri", "description": "Immich örneğiniz hakkında bilgiler", @@ -2661,7 +4088,8 @@ "users": "Kullanıcılar", "photos": "Fotoğraflar", "videos": "Videolar", - "storage": "Kullanılan Depolama" + "storage": "Kullanılan Depolama", + "albumLimit": "En büyük albümler ({count} adede kadar gösterilir)" }, "immich-albumCarousel": { "name": "Immich Albümü", @@ -2685,24 +4113,21 @@ } }, "description": "Bir Immich albümündeki veya tüm kütüphanenizdeki fotoğrafların slayt gösterisi", - "noPhotos": "Fotoğraf bulunamadı" + "noPhotos": "Fotoğraf bulunamadı", + "albumPhoto": "Albüm fotoğrafı", + "actions": { + "previousPhoto": "Önceki fotoğraf", + "nextPhoto": "Sonraki fotoğraf", + "pauseSlideshow": "Slayt gösterisini duraklat", + "resumeSlideshow": "Slayt gösterisini sürdür", + "toggleSlideshow": "Slayt gösterisini duraklat veya sürdür", + "photo": "Fotoğraf {number}" + } }, "downloads": { "name": "İndirme İstemcisi", "description": "Hem Torrent hem de Usenet istemcilerinden indirdiklerinizi görüntülemenizi ve yönetmenizi sağlar.", "option": { - "columns": { - "label": "Gösterilecek sütunlar" - }, - "enableRowSorting": { - "label": "Öğelerin sıralanmasını etkinleştir" - }, - "defaultSort": { - "label": "Öntanımlı olarak sıralama için kullanılan sütun" - }, - "descendingDefaultSort": { - "label": "Ters sıralama" - }, "showCompletedUsenet": { "label": "Tamamlanmış olarak işaretlenmiş usenet girdilerini göster" }, @@ -2727,12 +4152,6 @@ "limitPerIntegration": { "label": "Her entegrasyon için öğe sınırı", "description": "Bu, gösterilecek öğe sayısını tüm entegrasyonlar için değil, her entegrasyon özelinde sınırlar" - }, - "columnOrder": { - "label": "Sütun sırası" - }, - "columnWidths": { - "label": "Sütun genişlikleri" } }, "errors": { @@ -2893,6 +4312,10 @@ "mediaRequests-requestList": { "name": "Medya İstekleri Listesi", "description": "Overseerr veya Jellyseerr uygulamanızdan gelen tüm medya taleplerinin bir listesini görün", + "empty": { + "title": "Henüz medya isteği yok", + "description": "İstek başlatmak için bir film veya dizi arayın." + }, "option": { "linksTargetNewTab": { "label": "Bağlantıları yeni sekmede aç" @@ -2926,12 +4349,16 @@ "failed": "Başarısız", "completed": "Tamamlandı" }, + "unknown": "Bilinmeyen", "toBeDetermined": "-Yapım Aşamasında-" }, "mediaRequests-requestStats": { "name": "Medya Talep İstatistikleri", "description": "Medya talepleriyle ilgili istatistikler", - "option": {}, + "empty": { + "title": "Henüz istek etkinliği yok", + "description": "İstatistikler ilk medya isteğinden sonra görünür." + }, "titles": { "stats": { "main": "Medya İstatistikleri", @@ -2941,8 +4368,7 @@ "declined": "Reddedilen", "available": "Mevcut", "tv": "Dizi talepleri", - "movie": "Film talepleri", - "total": "Toplam" + "movie": "Film talepleri" }, "users": { "main": "En İyi Kullanıcılar", @@ -2968,7 +4394,6 @@ }, "currentIndex": "{start}-{end} / {total}", "healthCheck": { - "title": "Sağlık kontrolü", "queued": "Sıraya alındı", "status": { "healthy": "Sağlıklı", @@ -2977,38 +4402,63 @@ }, "panel": { "statistics": { - "empty": "Boş", - "transcodes": "Kod dönüştürmeler", - "transcodesCount": "Kod dönüştürmeler", - "healthChecksCount": "Sağlık kontrolleri", "filesCount": "Dosyalar", "savedSpace": "Kaydedilen alan", - "healthChecks": "Sağlık kontrolleri", "videoCodecs": "Kodek'ler", "videoContainers": "Konteyner", "videoResolutions": "Çözünürlükler" }, "workers": { - "empty": "Boş", "table": { - "file": "Dosya", "eta": "ETA (Kalan Süre)", - "progress": "İlerleme", - "transcode": "Kod dönüştürme", - "healthCheck": "Sağlık kontrolü" + "progress": "İlerleme" } }, "queue": { - "empty": "Boş", "table": { - "file": "Dosya", - "size": "Boyut", - "transcode": "Kod dönüştürme", - "healthCheck": "Sağlık kontrolü" + "size": "Boyut" } + }, + "common": { + "empty": "Boş", + "file": "Dosya", + "healthCheck": "Sağlık kontrolü", + "transcode": "Kod Dönüştürme", + "transcodes": "Kod Dönüştürmeler", + "healthChecks": "Sağlık kontrolleri" } } }, + "mediaMissing": { + "name": "Eksik ve Kuyruktaki Medya", + "description": "Radarr ve Sonarr'daki eksik ve kuyruğa alınmış film ve bölümleri gösterir", + "option": { + "showMissing": { + "label": "Eksik öğeleri göster" + }, + "showQueued": { + "label": "Kuyruktaki öğeleri göster" + }, + "pageSize": { + "label": "Sayfa başına öğe" + } + }, + "tab": { + "missing": "Eksik", + "queued": "Kuyrukta" + }, + "type": { + "movie": "Film", + "episode": "Bölüm", + "book": "Kitap" + }, + "empty": { + "missing": "Eksik öğe yok", + "queued": "Kuyrukta öğe yok", + "noTabsEnabled": "Widget ayarlarında en az bir sekmeyi etkinleştirin" + }, + "timeLeft": "Kalan süre" + }, "rssFeed": { "name": "RSS Beslemeleri", "description": "Bir veya daha fazla RSS, ATOM veya JSON beslemesini takip edin ve görüntüleyin", @@ -3031,6 +4481,13 @@ "showPosterImage": { "label": "Afiş görselini göster" } + }, + "error": { + "allFeedsFailed": "RSS akışları yüklenemedi. Akış URL'lerini kontrol edip yeniden deneyin." + }, + "warning": { + "partial": "{count, plural, one {# RSS akışı yüklenemedi} other {# RSS akışı yüklenemedi}}", + "stale": "RSS akışları yenilenemedi. Önceden yüklenen girdiler gösteriliyor." } }, "releases": { @@ -3106,17 +4563,8 @@ "label": "Düzenli İfade" } }, - "edit": { - "label": "Düzenle" - }, "editForm": { - "title": "Depoyu Düzenle", - "cancel": { - "label": "Vazgeç" - }, - "confirm": { - "label": "Onayla" - } + "title": "Depoyu Düzenle" }, "importForm": { "title": "Docker'dan içe aktar" @@ -3133,8 +4581,7 @@ "label": "Sağlayıcı Tokenları", "token": "Token", "configured": "Token yapılandırıldı", - "notConfigured": "Token ayarlanmadı", - "save": "Kaydet" + "notConfigured": "Token ayarlanmadı" } } }, @@ -3161,17 +4608,32 @@ "noProviderResponse": "Sağlayıcıdan yanıt alınamadı", "unexpected": "Beklenmeyen sağlayıcı hatası" } - } + }, + "expandDetails": "{name} için ayrıntıları göster", + "collapseDetails": "{name} için ayrıntıları gizle" }, "networkControllerSummary": { - "option": {}, - "card": { - "vpn": { - "countConnected": "{count} bağlantı" + "advanced": { + "updated": "Güncellendi", + "metric": { + "latency": "Gecikme", + "ping": "Ping", + "uptime": "Çalışma Süresi", + "users": "Kullanıcılar", + "guests": "Misafirler" } }, + "card": { + "vpn": { + "countConnected": "{count, plural, one {# bağlı} other {# bağlı}}", + "label": "VPN" + }, + "wan": "WAN", + "web": "Web", + "wifi": "Kablosuz", + "lan": "LAN" + }, "error": { - "integrationsDisconnected": "Veri bulunamadı, tüm entegrasyonların bağlantısı kesildi", "unknownContentOption": "Ağ denetleyicisi özet widget'ında bilinmeyen içerik ayarı: " }, "name": "Ağ Denetleyicisi Özeti", @@ -3208,7 +4670,6 @@ } }, "error": { - "integrationsDisconnected": "Veri bulunamadı, tüm entegrasyonların bağlantısı kesildi", "unknownContentOption": "Ağ durumu widget'ı için bilinmeyen içerik seçeneği: " }, "name": "Ağ Durumu", @@ -3238,7 +4699,6 @@ "versiontitle": "Sürümler", "cputitle": "CPU kullanımı", "memorytitle": "Bellek kullanımı", - "cpu": "İşlemci", "memory": "Bellek", "interfaces": { "name": "i̇sim", @@ -3246,6 +4706,16 @@ "recv": "Alınan", "title": "Ağ Arayüzleri" } + }, + "empty": { + "noInterfaces": "Henüz ağ arayüzü verisi yok" + }, + "versionUnknown": "Bilinmeyen sürüm", + "metricAccessible": "{metric}: {value}%, {status}", + "status": { + "normal": "Normal", + "warning": "Uyarı", + "critical": "Kritik" } }, "notifications": { @@ -3255,8 +4725,21 @@ "option": { "hideLogos": { "label": "Logoları gizle" + }, + "messageFormat": { + "label": "İleti biçimi", + "option": { + "auto": "Otomatik", + "plain": "Düz metin", + "markdown": "Markdown", + "html": "HTML" + } } - } + }, + "openService": "Bildirim hizmetini aç", + "deleteNotification": "Gotify'dan bildirimi sil", + "deleteFailed": "Bildirim silinemedi", + "deleteFailedMessage": "Bildirim silinemedi. Lütfen yeniden deneyin." }, "speedtestTracker": { "name": "Speedtest Tracker", @@ -3298,7 +4781,6 @@ } }, "uptimeKuma": { - "name": "Uptime Kuma", "description": "Uptime Kuma durum sayfanızdaki çalışma süresi istatistiklerini izleyin", "option": { "showAverageUptime": { @@ -3335,8 +4817,58 @@ }, "error": { "internalServerError": "Çalışma süresi verileri alınamadı" + }, + "status": { + "up": "Toplam gönderilen", + "down": "Toplam İndirme", + "paused": "Duraklatıldı" } }, + "traefik": { + "description": "Traefik yönlendiricilerinin, hizmetlerinin, ara yazılımlarının ve giriş noktalarının genel görünümü", + "option": { + "showTcp": { + "label": "TCP'yi göster" + }, + "showUdp": { + "label": "UDP'yi göster" + }, + "showEntryPoints": { + "label": "Giriş noktalarını göster" + } + }, + "instances": "Traefik örnekleri", + "versionUnknown": "Sürüm bilinmiyor", + "summary": { + "routers": "Yönlendiriciler", + "entryPoints": "Giriş noktaları" + }, + "resource": { + "routers": "Yönlendiriciler", + "middlewares": "Ara Yazılımlar" + }, + "status": { + "healthy": "Sağlıklı", + "errors": "{count} hata", + "warnings": "{count} uyarı" + }, + "error": { + "internalServerError": "Traefik verileri alınamadı" + }, + "resourceType": { + "router": "Yönlendirici", + "service": "Hizmet", + "middleware": "Ara yazılım" + }, + "resourceStatus": { + "enabled": "Etkin", + "disabled": "Pasif", + "warning": "Uyarı", + "error": "Hata", + "unknown": "Bilinmeyen" + }, + "failedEndpoint": "Başarısız: {endpoint}" + }, "audioStats": { "name": "Ses İstatistikleri", "description": "Navidrome veya Audiobookshelf'ten kütüphane ve oynatma istatistikleri", @@ -3401,9 +4933,7 @@ "label": "Görünür grafikler", "description": "Görünür olmasını istediğiniz grafikleri seçin.", "option": { - "cpu": "İşlemci", "memory": "Bellek", - "gpu": "GPU", "network": "Ağ" } }, @@ -3418,12 +4948,11 @@ } }, "card": { - "cpu": "İşlemci", "memory": "BELLEK", - "gpu": "GPU", "network": "AĞ", "up": "YÜKLEME", - "down": "İNDİRME" + "down": "İNDİRME", + "memoryTooltip": "{used} / {available} ({percent}%)" } }, "systemDisks": { @@ -3449,151 +4978,88 @@ }, "showBackgroundBar": { "label": "Arka plan kullanım çubuğunu göster" - }, - "visibleStorageVolumes": { - "label": "Görünür depolama birimleri", - "description": "Yalnızca seçilen entegrasyonların tümü Synology olduğunda kullanılabilir. Algılanan tüm depolama birimlerini göstermek için boş bırakın.", - "placeholder": "Depolama birimlerini seçin" } }, "status": { - "unhealthy": "Sağlıksız" + "unhealthy": "Sağlıksız", + "smart": "SMART", + "free": "{percentage}% boş" + } + }, + "customApi": { + "name": "Özel widget", + "description": "Yapılandırılmış bir Özel JSX tanımı oluşturur.", + "customJsx": { + "noTemplate": "JSX şablonu yapılandırılmamış.", + "templateWarnings": "{count} şablon uyarısı:", + "requestIdRequired": "Bu ağ denetimi, adlandırılmış bir requestId gerektirir.", + "unsavedPreview": "Adlandırılmış istekleri test etmeden önce düzenleyicide ilk istek testini çalıştırın.", + "invalidParams": "İstek parametreleri geçersiz.", + "loading": "İstek yükleniyor...", + "loadRequest": "İsteği yükle", + "requestFailed": "İstek başarısız oldu.", + "retry": "İsteği yeniden dene", + "actionCompleted": "Eylem başarıyla tamamlandı.", + "actionSimulated": "Eylem benzetildi; istek gönderilmedi.", + "actionsDisabledEditMode": "Pano düzenleme modundayken eylemler devre dışıdır.", + "widgetItemUnavailable": "Bu widget öğesi kullanılamıyor.", + "toggle": "Aç/kapat", + "copied": "Kopyalandı", + "confirmDelete": "Bu yıkıcı eylemi onaylayın." + }, + "option": { + "definitionId": { + "label": "Özel widget" + }, + "refreshInterval": { + "label": "Yenileme aralığı", + "description": "Verilerin API'den hangi sıklıkta yeniden alınacağı (saniye)" + } + }, + "noDefinition": "Tanım seçilmedi", + "definitionNotFound": "Özel widget kullanılamıyor", + "migrationRequired": "Bu eski özel widget korunmuştur, ancak çalışabilmesi için Özel widget'ları yönet bölümünden Özel JSX v2'ye geçirilmesi gerekir.", + "manageMigration": "Özel widget'ları yönet bölümünü aç", + "contactAdmin": "Bir yöneticiyle iletişime geçin.", + "configurationNeedsRepair": "Bu widget'ın seçenekleri değişti. Yapılandırmasını düzeltmek için widget'ı düzenleyin.", + "removeFromBoard": "Panodan kaldır", + "editModePending": "Bu widget'ı yüklemek için panoyu kaydedin.", + "picker": { + "group": "Özel JSX widget'ları", + "empty": "Özel widget bulunamadı", + "preview": "Önizleme", + "sources": "{count, plural, one {# kaynak} other {# kaynak}}", + "requests": "{count, plural, one {# istek} other {# istek}}", + "migrationRequired": "Geçiş gerekli", + "migrationDescription": "Bu yerleştirilmiş v1 widget'ı henüz çalışamaz. Redakte edilmiş istemini bir LLM'ye kopyalayın, ardından tek JSON yanıtını Homarr'a yapıştırın.", + "manageMigration": "Özel widget'ları yönet bölümünü aç", + "contactAdmin": "Bir yöneticiyle iletişime geçin." + }, + "configuration": { + "needsAttention": "Yapılandırmanın ilgilenilmesi gerekiyor: {message}", + "advancedOptions": "Gelişmiş seçenekler", + "invalidJson": "Geçersiz JSON" } }, "beszelSystemTable": { "name": "Beszel Sistemleri (Tablo)", "description": "Sıralanabilir sütunlar ve durum göstergeleri ile tüm Beszel tarafından izlenen sistemlerin tablo görünümü", "option": { - "statusFilter": { - "label": "Durum filtresi" - }, "sortBy": { "label": "Sıralama ölçütü" }, "sortDirection": { "label": "Sıralama yönü" - }, - "showCpu": { - "label": "CPU'yu göster" - }, - "showMemory": { - "label": "Belleği göster" - }, - "showDisk": { - "label": "Disk göster" - }, - "showGpu": { - "label": "GPU'yu göster" - }, - "showLoadAvg": { - "label": "Yük ortalamasını göster" - }, - "showNet": { - "label": "Ağı göster" - }, - "showTemp": { - "label": "Sıcaklığı göster" - }, - "showBattery": { - "label": "Pili göster" - }, - "showServices": { - "label": "Hizmetleri göster" - }, - "showUptime": { - "label": "Çalışma süresini göster" - }, - "showAgent": { - "label": "Ajan sürümünü göster" - }, - "columnOrder": { - "label": "Sütun sırası" - }, - "columnWidths": { - "label": "Sütun genişlikleri" } }, - "noRecords": "Sistem bulunamadı", "error": { - "internalServerError": "Beszel'e bağlanılamadı. Entegrasyon ayarlarınızı kontrol edin.", "layoutSaveTitle": "Tablo düzeni kaydedilemedi", "layoutSaveMessage": "Sütun sırası veya genişlikleri kaydedilemedi. Lütfen yeniden deneyin." - }, - "column": { - "system": "Sistem", - "cpu": "İşlemci", - "memory": "Bellek", - "disk": "Disk", - "gpu": "GPU", - "loadAvg": "Yük Ort", - "net": "Ağ", - "temp": "Sıc", - "battery": "Pil", - "services": "Hizmetler", - "uptime": "Çalışma Süresi", - "agent": "Ajan" } }, "beszelSystemGrid": { "name": "Beszel Sistemleri (Izgara)", - "description": "Gerçek zamanlı metrikler ile tüm Beszel tarafından izlenen sistemlerin kart ızgara görünümü", - "option": { - "statusFilter": { - "label": "Durum filtresi" - }, - "showCpu": { - "label": "CPU'yu göster" - }, - "showMemory": { - "label": "Belleği göster" - }, - "showDisk": { - "label": "Disk göster" - }, - "showGpu": { - "label": "GPU'yu göster" - }, - "showLoadAvg": { - "label": "Yük ortalamasını göster" - }, - "showNet": { - "label": "Ağı göster" - }, - "showTemp": { - "label": "Sıcaklığı göster" - }, - "showBattery": { - "label": "Pili göster" - }, - "showServices": { - "label": "Hizmetleri göster" - }, - "showUptime": { - "label": "Çalışma süresini göster" - }, - "showAgent": { - "label": "Ajan sürümünü göster" - } - }, - "error": { - "internalServerError": "Beszel'e bağlanılamadı. Entegrasyon ayarlarınızı kontrol edin." - }, - "empty": { - "noSystems": "Sistem bulunamadı" - }, - "metric": { - "cpu": "CPU", - "memory": "Bellek", - "disk": "Disk", - "gpu": "GPU", - "loadAvg": "Ort. Yük", - "net": "Ağ", - "temp": "Sıcaklık", - "battery": "Pil", - "services": "Hizmetler", - "uptime": "Çalışma Süresi", - "agent": "Ajan" - } + "description": "Gerçek zamanlı metrikler ile tüm Beszel tarafından izlenen sistemlerin kart ızgara görünümü" }, "beszelAlerts": { "name": "Beszel Uyarıları", @@ -3607,11 +5073,12 @@ } }, "empty": "Yapılandırılmış uyarı yok", - "error": { - "internalServerError": "Beszel'e bağlanılamadı. Entegrasyon ayarlarınızı kontrol edin." - }, "history": "Geçmiş", "resolved": "Çözüldü", + "alertDescription": { + "statusDuration": "{minutes} dakikadır çalışmıyor", + "threshold": "{minutes} dakika boyunca {value} değerini aşıyor" + }, "status": { "triggered": "Tetiklendi", "ok": "Tamam" @@ -3658,16 +5125,16 @@ "noSystems": "Sistem bulunamadı" }, "error": { - "internalServerError": "Beszel'e bağlanılamadı. Entegrasyon ayarlarınızı kontrol edin.", "liveConnectionFailed": "Canlı bağlantı başarısız oldu. Beszel örneğiniz gerçek zamanlı akışı desteklemiyor olabilir.", "switchToHistorical": "Geçmiş görünümüne geç", - "systemNotFound": "Seçilen sistem bulunamadı. Farklı bir sistem seçin." + "systemNotFound": "Seçilen sistem bulunamadı. Farklı bir sistem seçin.", + "selectionSaveTitle": "Seçim kaydedilemedi", + "selectionSaveMessage": "Sistem veya zaman aralığı seçiminiz kaydedilemedi. Lütfen yeniden deneyin." }, "chart": { "cpu": { "title": "CPU Kullanımı", - "subtitle": "Sistem genelindeki ortalama CPU kullanımı", - "series": "CPU" + "subtitle": "Sistem genelindeki ortalama CPU kullanımı" }, "memory": { "title": "Bellek Kullanımı", @@ -3709,289 +5176,550 @@ "title": "Docker Ağ G/Ç", "subtitle": "Docker konteynerlerinin ağ trafiği" } + }, + "period": { + "live": "Canlı", + "oneHour": "1 sa", + "twelveHours": "12 sa", + "oneDay": "24 sa", + "oneWeek": "1 hf", + "thirtyDays": "30 gün" } }, - "patchmon": { - "name": "PatchMon", - "description": "PatchMon'daki ana makine yama durumunun genel görünümü", - "title": "PatchMon İstatistikleri", - "totalHosts": "Toplam Ana Makine", - "hostsNeedingUpdates": "Güncelleme Gerekiyor", - "securityUpdates": "Güvenlik Güncellemeleri", - "upToDateHosts": "Güncel Ana Makineler", - "hostsWithSecurityUpdates": "Güvenlik Güncellemesi Olan Ana Makineler", - "recentUpdates24h": "Güncellemeler (24 sa.)", - "totalOutdatedPackages": "Güncel Olmayan Paketler", - "totalRepos": "Depolar", - "osDistribution": "İşletim Sistemi Dağılımı", - "compliance": "Yama Uyumluluğu", - "complianceRatio": "{upToDate} / {total}", - "lastUpdated": "Güncellendi: {time}", - "option": { - "showTotalHosts": { - "label": "Toplam ana makine sayısını göster", - "description": "İzlenen toplam ana makine sayısını gösterir" - }, - "showHostsNeedingUpdates": { - "label": "Güncelleme gereken ana makineleri göster", - "description": "En az bir güncel olmayan paketi bulunan ana makineleri gösterir" - }, - "showSecurityUpdates": { - "label": "Güvenlik güncellemelerini göster", - "description": "Kullanılabilir toplam güvenlik güncellemesi sayısını gösterir" - }, - "showUpToDateHosts": { - "label": "Güncel ana makineleri göster", - "description": "Güncel olmayan paketi bulunmayan ana makineleri gösterir" - }, - "showHostsWithSecurityUpdates": { - "label": "Güvenlik güncellemesi olan ana makineleri göster", - "description": "Güvenlik yaması gereken ana makineleri gösterir" - }, - "showRecentUpdates24h": { - "label": "Son güncellemeleri göster (24 sa.)", - "description": "Son 24 saatte uygulanan güncelleme sayısını gösterir" - }, - "showTotalOutdatedPackages": { - "label": "Güncel olmayan paketleri göster", - "description": "Tüm ana makinelerdeki güncel olmayan paketlerin toplam sayısını gösterir" - }, - "showTotalRepos": { - "label": "Depoları göster", - "description": "İzlenen etkin depo sayısını gösterir" - }, - "enableThresholdColors": { - "label": "Eşik renklerini etkinleştir", - "description": "İstatistik değerlerini önem düzeyi ön ayarlarına göre yeşil, sarı veya kırmızı renklendirir" - }, - "useCustomThresholds": { - "label": "Gelişmiş eşikler", - "description": "Her istatistik için uyarı ve kritik eşikleri mutlak sayılarla veya toplam ana makine yüzdesiyle özelleştirin" - }, - "thresholdMode": { - "option": { - "absolute": "Mutlak sayı", - "percent": "Toplam ana makinelerin yüzdesi" - } - }, - "hostsNeedingUpdatesThresholdMode": { - "label": "Güncelleme gereksinimi eşik modu", - "description": "Güncelleme gerekenlerin sayısını mutlak değer veya toplam ana makinelerin yüzdesi olarak karşılaştırır" - }, - "hostsNeedingUpdatesWarningAt": { - "label": "Güncelleme gereksinimi uyarı eşiği", - "description": "Değer bu eşiğe ulaştığında sarı renge geçer" - }, - "hostsNeedingUpdatesCriticalAt": { - "label": "Güncelleme gereksinimi kritik eşiği", - "description": "Değer bu eşiğe ulaştığında kırmızı renge geçer" - }, - "securityUpdatesThresholdMode": { - "label": "Güvenlik güncellemeleri eşik modu", - "description": "Güvenlik güncellemesi sayısını mutlak değer veya toplam ana makinelerin yüzdesi olarak karşılaştırır" - }, - "securityUpdatesWarningAt": { - "label": "Güvenlik güncellemeleri uyarı eşiği", - "description": "Değer bu eşiğe ulaştığında sarı renge geçer" - }, - "securityUpdatesCriticalAt": { - "label": "Güvenlik güncellemeleri kritik eşiği", - "description": "Değer bu eşiğe ulaştığında kırmızı renge geçer" - }, - "hostsWithSecurityUpdatesThresholdMode": { - "label": "Güvenlik güncellemesi olan ana makineler için eşik modu", - "description": "Ana makine sayısını mutlak değer veya toplam ana makinelerin yüzdesi olarak karşılaştırır" - }, - "hostsWithSecurityUpdatesWarningAt": { - "label": "Güvenlik güncellemesi olan ana makineler için uyarı eşiği", - "description": "Değer bu eşiğe ulaştığında sarı renge geçer" - }, - "hostsWithSecurityUpdatesCriticalAt": { - "label": "Güvenlik güncellemesi olan ana makineler için kritik eşik", - "description": "Değer bu eşiğe ulaştığında kırmızı renge geçer" - }, - "upToDateHostsThresholdMode": { - "label": "Güncel ana makineler için eşik modu", - "description": "Güncel ana makine sayısını mutlak değer veya toplam ana makinelerin yüzdesi olarak karşılaştırır" - }, - "upToDateHostsWarningAt": { - "label": "Güncel ana makineler için uyarı eşiği", - "description": "Değer bu eşikte veya üzerinde, ancak tam kapsamanın altındaysa sarı renge geçer" - }, - "upToDateHostsCriticalAt": { - "label": "Güncel ana makineler için kritik eşik", - "description": "Değer bu eşiğin altına düştüğünde kırmızı renge geçer" - }, - "totalOutdatedPackagesThresholdMode": { - "label": "Güncel olmayan paketler için eşik modu", - "description": "Güncel olmayan paketlerin sayısını mutlak değer veya toplam ana makinelerin yüzdesi olarak karşılaştırır" - }, - "totalOutdatedPackagesWarningAt": { - "label": "Güncel olmayan paketler için uyarı eşiği", - "description": "Değer bu eşiğe ulaştığında sarı renge geçer" - }, - "totalOutdatedPackagesCriticalAt": { - "label": "Güncel olmayan paketler için kritik eşik", - "description": "Değer bu eşiğe ulaştığında kırmızı renge geçer" - }, - "showOsDistribution": { - "label": "İşletim sistemi dağılımını göster", - "description": "İzlenen ana makinelerin işletim sistemine göre dağılımını gösterir" - }, - "osDistributionLimit": { - "label": "İşletim sistemi dağılımı sınırı", - "description": "Gösterilecek en fazla işletim sistemi sayısı", - "option": { - "3": "İlk 3", - "5": "İlk 5", - "10": "İlk 10", - "all": "Tümü" - } - }, - "showOsVersion": { - "label": "İşletim sistemi sürümünü göster", - "description": "Mevcut olduğunda işletim sistemi sürümünü her dağılım etiketine ekler" - }, - "showComplianceHero": { - "label": "Uyumluluk özetini göster", - "description": "Güncel ana makinelerin yüzdesini gösteren bir uyumluluk halkası görüntüler" - }, - "osDisplayMode": { - "label": "İşletim sistemi görüntüleme modu", - "description": "İşletim sistemi dağılımının nasıl gösterileceğini seçin", - "option": { - "bars": "Yatay çubuklar", - "donut": "Halka grafik" - } - } + "assistant": { + "name": "Asistan", + "description": "Doğrudan panonuzda eksiksiz bir asistan görüşmesi gerçekleştirin.", + "unavailable": { + "title": "Asistan kullanılamıyor", + "description": "Oturum açın ve bir yöneticiden yönetim panelinden Asistan'ı yapılandırmasını isteyin." }, + "compact": { + "title": "Asistan", + "description": "Burada sohbet etmek için bu widget'ı yeniden boyutlandırın veya tam görüşmeyi açın.", + "open": "Asistanı aç", + "openTitle": "Asistan yan panelde açık", + "openDescription": "Görüşme tek bir etkin yüzeyde kalır.", + "returnToWidget": "Görüşmeyi bu widget'a geri getir", + "otherWidgetTitle": "Asistan başka bir widget'ta etkin", + "otherWidgetDescription": "Aynı anda yalnızca bir görüşme yüzeyi etkin kalır.", + "useHere": "Asistanı bu widget'ta kullan" + } + }, + "beszel": { "error": { - "internalServerError": "PatchMon verileri alınamadı" - } - }, - "bazarr": { - "name": "Bazarr", - "description": "Bazarr örneğinizdeki eksik altyazıların ve sağlık durumunun genel görünümü", - "episodes": "Eksik Bölümler", - "movies": "Eksik Filmler", - "providers": "Sağlayıcı Sorunları", - "status": "Sağlık Sorunları", - "option": { - "showMissingEpisodes": { - "label": "Eksik bölümleri göster", - "description": "Altyazısı eksik bölüm sayısını gösterir" - }, - "showMissingMovies": { - "label": "Eksik filmleri göster", - "description": "Altyazısı eksik film sayısını gösterir" - }, - "showProviderIssues": { - "label": "Sağlayıcı sorunlarını göster", - "description": "Sorun yaşayan altyazı sağlayıcılarının sayısını gösterir" - }, - "showHealthIssues": { - "label": "Sağlık sorunlarını göster", - "description": "Bazarr sağlık sorunlarının sayısını gösterir" - } - }, - "error": { - "internalServerError": "Bazarr verileri alınamadı" - } - }, - "mediaMissing": { - "name": "Eksik ve Kuyruktaki Medya", - "description": "Radarr ve Sonarr'daki eksik ve kuyruğa alınmış film ve bölümleri gösterir", - "option": { - "showMissing": { - "label": "Eksik öğeleri göster" - }, - "showQueued": { - "label": "Kuyruktaki öğeleri göster" - }, - "pageSize": { - "label": "Sayfa başına öğe" - } - }, - "tab": { - "missing": "Eksik", - "queued": "Kuyrukta" - }, - "type": { - "movie": "Film", - "episode": "Bölüm" + "internalServerError": "Beszel'e bağlanılamadı. Entegrasyon ayarlarınızı kontrol edin." }, "empty": { - "missing": "Eksik öğe yok", - "queued": "Kuyrukta öğe yok", - "noTabsEnabled": "Widget ayarlarında en az bir sekmeyi etkinleştirin" + "noSystems": "Sistem bulunamadı" }, - "timeLeft": "Kalan süre" - }, - "traefik": { - "name": "Traefik", - "description": "Traefik yönlendiricilerinin, hizmetlerinin, ara yazılımlarının ve giriş noktalarının genel görünümü", - "option": { - "showTcp": { - "label": "TCP'yi göster" + "options": { + "statusFilter": { + "label": "Durum filtresi" }, - "showUdp": { - "label": "UDP'yi göster" + "showCpu": { + "label": "CPU'yu göster" }, - "showEntryPoints": { - "label": "Giriş noktalarını göster" + "showMemory": { + "label": "Belleği göster" + }, + "showDisk": { + "label": "Disk göster" + }, + "showGpu": { + "label": "GPU'yu göster" + }, + "showLoadAvg": { + "label": "Yük ortalamasını göster" + }, + "showNet": { + "label": "Ağı göster" + }, + "showTemp": { + "label": "Sıcaklığı göster" + }, + "showBattery": { + "label": "Pili göster" + }, + "showServices": { + "label": "Hizmetleri göster" + }, + "showUptime": { + "label": "Çalışma süresini göster" + }, + "showAgent": { + "label": "Ajan sürümünü göster" } }, - "instances": "Traefik örnekleri", - "versionUnknown": "Sürüm bilinmiyor", - "summary": { - "routers": "Yönlendiriciler", - "entryPoints": "Giriş noktaları" - }, - "resource": { - "routers": "Yönlendiriciler", - "services": "Hizmetler", - "middlewares": "Ara Yazılımlar" - }, - "status": { - "healthy": "Sağlıklı", - "errors": "{count} hata", - "warnings": "{count} uyarı" - }, - "error": { - "internalServerError": "Traefik verileri alınamadı" + "metric": { + "system": "Sistem", + "source": "Entegrasyon", + "hostname": "Sunucu", + "cpuModel": "CPU modeli", + "cores": "Çekirdekler", + "memoryTotal": "Toplam bellek", + "memory": "Bellek", + "disk": "Disk", + "loadAvg": "Yük Ort", + "net": "Ağ", + "temp": "Sıc", + "battery": "Pil", + "uptime": "Çalışma Süresi", + "agent": "Ajan" } }, - "wud": { - "name": "What's Up Docker", - "description": "İzlenen konteynerlerin kaçında güncelleme mevcut olduğunu gösterir.", - "title": "What's Up Docker", - "monitored": "İzlenen", - "updatesAvailable": "{count, plural, one {# güncelleme mevcut} other {# güncelleme mevcut}}", - "updateAvailable": "Güncelleme mevcut", - "openReleaseNotes": "Sürüm notlarını aç", + "llamacpp": { + "name": "llama.cpp", + "description": "Yerel llama.cpp sunucunuzun sağlık durumunu, yüklenen modelini ve üretim hızını gösterir.", + "title": "llama.cpp", + "status": { + "unhealthy": "Sağlıksız ({status})" + }, + "idle": "Boşta", + "speedTooltip": { + "current": "Mevcut üretim hızı", + "average": "Başlangıçtan bu yana ortalama üretim hızı", + "request": "Bu istek başladığından beri ortalama hız" + }, + "busy": "{count, plural, one {# istek çalışıyor} other {# istek çalışıyor}}", + "modelInfo": { + "context": "Bağlam", + "size": "Dosya boyutu", + "parameters": "Parametreler", + "model": "Model", + "quantization": "Niceleme" + }, + "stats": { + "tokensProcessed": "İşlenen belirteçler", + "contextUsage": "Bağlam / KV kullanımı", + "cacheHitRate": "İstem önbelleği isabet oranı", + "tokensGenerated": "Oluşturulan belirteçler" + }, + "error": { + "unreachable": "llama-server'a erişilemiyor" + }, + "unit": { + "speed": "{value} t/sn", + "parameters": "{value}B", + "none": "—", + "speedShort": "t/sn" + }, "option": { "showTitle": { "label": "Başlığı göster" }, - "showRing": { - "label": "Güncelleme halkasını göster" + "showModelInfo": { + "label": "Model bilgilerini göster" }, - "layout": { - "label": "Düzen", + "showContextUsage": { + "label": "Bağlam kullanımını göster" + }, + "showCacheHitRate": { + "label": "Önbellek isabet oranını göster" + }, + "showSpeedStats": { + "label": "Hız istatistiklerini göster" + }, + "showRequests": { + "label": "İstek yükünü göster" + }, + "showTokenStats": { + "label": "Belirteç toplamlarını göster" + }, + "showSpeculative": { + "label": "Spekülatif kod çözmeyi göster" + } + }, + "advanced": { + "promptSpeed": "İstem hızı", + "avgSpeed": "Ort. üretim", + "requests": "Talepler", + "deferred": "Ertelendi", + "slots": "{processing}/{total} yuva meşgul", + "speculative": "Spekülatif kod çözme", + "avgPrompt": "Ort. istem", + "specDrafts": "Spek. taslakları", + "specAccepted": "Spek. kabul edilen belirteçler", + "specDraftTokens": "Spek. taslak belirteçleri" + } + }, + "stats": { + "name": "İstatistik", + "description": "Entegrasyonlarınızdaki istatistikleri tek bir yapılandırılabilir widget'ta birleştirin.", + "configure": "Metrikleri yapılandır", + "refresh": "İstatistikleri yenile", + "empty": "Widget ayarlarını açın, entegrasyonları seçin ve ardından metrik ekleyin.", + "editorHelp": "Bu widget için seçilen entegrasyonlardan metrik ekleyin. Değişiklikler panonuzla birlikte kaydedilir.", + "source": "Entegrasyon", + "metric": "Metrik", + "noMetrics": "Bu entegrasyon için kullanılabilir istatistik yok", + "add": "Metrik ekle", + "label": "Özel etiket", + "hidden": "Gizli", + "compact": "Kompakt sayılar", + "moveUp": "Yukarı taşı", + "moveDown": "Aşağı taşı", + "remove": "Metrik kaldır", + "loading": "Yükleniyor…", + "unavailable": "Kullanılamıyor", + "refreshFailed": "Yenileme başarısız oldu — kaydedilen veriler gösteriliyor", + "stale": "Kaydedilen veriler — güncellemek için yenileyin", + "table": { + "value": "Değer", + "status": "Durum" + }, + "option": { + "table": { + "label": "Tablo görünümü" + }, + "rows": { + "label": "Kompakt satırlar" + }, + "showIcon": { + "label": "Kaynak simgesini göster" + }, + "spacing": { + "label": "Aralık", "option": { - "horizontal": { - "label": "Yatay" + "xs": { + "label": "Kompakt" }, - "vertical": { - "label": "Dikey" + "sm": { + "label": "Rahat" + }, + "md": { + "label": "Geniş" } } }, - "showUpdateList": { - "label": "Konteyner güncelleme listesini göster", - "description": "İmaj güncellemesi mevcut olan her izlenen konteyneri listeler" + "entries": { + "label": "Metrikler" + }, + "plain": { + "label": "Kart arka planlarını kaldır" } - } + }, + "fetchFailed": "İstatistikler alınamadı", + "viewOptions": "Bu görünümü özelleştir", + "moreMetrics": "Gelişmiş görünümde {count} tane daha", + "localHelp": "Düzen, biçimlendirme ve görünürlük yalnızca bu görünüm için geçerlidir. Paylaşılan pano ayarları aynı kalır.", + "plain": "Kart arka planlarını kaldır", + "resetView": "Görünümü sıfırla", + "allHidden": "Bu görünümde tüm metrikler gizli. Geri yüklemek için Bu görünümü özelleştir seçeneğini kullanın." + }, + "wazuh": { + "target": { + "api": "Wazuh sunucu API'si", + "indexer": "Wazuh dizinleyicisi", + "wazuh": "Wazuh" + }, + "severity": { + "low": "Düşük", + "medium": "Orta", + "high": "Yüksek", + "critical": "Kritik" + }, + "error": { + "unauthorized": { + "title": "{target} kimlik bilgilerini reddetti", + "description": "Wazuh entegrasyonunda kayıtlı kullanıcı adını ve parolayı kontrol edin. Sunucu API'si (55000 numaralı bağlantı noktası) ile dizinleyici (9200 numaralı bağlantı noktası) ayrı kullanıcılar kullanır." + }, + "certificate": { + "title": "{target} sertifikasına güvenilmiyor", + "description": "Wazuh varsayılan olarak kendinden imzalı bir sertifika kullanır. Entegrasyonda \"Bağlantıyı test et\" seçeneğini çalıştırıp sertifikaya güvenin veya CA'nızı Ayarlar → Sertifikalar bölümüne ekleyin." + }, + "unreachable": { + "title": "{target} öğesine erişilemiyor", + "description": "Ana bilgisayar bağlantıyı reddetti veya kesti. URL'yi, bağlantı noktasını ve güvenlik duvarını kontrol edin. Varsayılan hepsi bir arada kurulumda dizinleyici yalnızca localhost'u dinler." + }, + "timeout": { + "title": "{target} zaman aşımına uğradı", + "description": "15 saniye içinde yanıt alınamadı. Hizmet aşırı yüklenmiş veya adres yanlış olabilir." + }, + "status": { + "title": "{target} bir hata döndürdü", + "description": "İstek HTTP {status} durumuyla başarısız oldu." + }, + "invalidResponse": { + "title": "{target} öğesinden beklenmeyen yanıt", + "description": "URL'nin panoya değil, Wazuh sunucu API'sine veya dizinleyiciye işaret ettiğini kontrol edin." + }, + "indexerRequired": { + "title": "Wazuh dizinleyici kimlik bilgileri gerekli", + "description": "Uyarılar, güvenlik açıkları ve dosya bütünlüğü etkinlikleri Wazuh dizinleyicisinden okunur. Entegrasyona bir dizinleyici URL'si, kullanıcı adı ve parola ekleyin." + }, + "unknown": { + "title": "{target} kaynağından veriler yüklenemedi", + "description": "Ayrıntılar için Homarr günlüklerini kontrol edin." + } + }, + "range": { + "1h": "1 sa", + "24h": "24 sa", + "7d": "7 gün", + "30d": "30 gün" + }, + "levelTooltip": "Kural düzeyi {level} ({severity})" + }, + "wazuhAgents": { + "name": "Wazuh ajanları", + "description": "Durum, işletim sistemi, sürüm ve son canlılık bilgisine sahip sıralanabilir Wazuh ajanları listesi", + "option": { + "statusFilter": { + "label": "Ajanları göster" + }, + "sortBy": { + "label": "Sıralama ölçütü" + }, + "showVersion": { + "label": "Wazuh sürümü sütununu göster" + }, + "showGroups": { + "label": "Gruplar sütununu göster" + } + }, + "title": "Ajanlar", + "total": "{count} ajan", + "status": { + "active": "Aktif", + "disconnected": "Bağlantısı kesildi", + "neverConnected": "Hiç bağlanmadı", + "pending": "Bekleyen" + }, + "statusLabel": { + "active": "Aktif", + "disconnected": "Bağlantısı kesildi", + "never_connected": "Hiç bağlanmadı", + "pending": "Bekleyen", + "unknown": "Bilinmeyen" + }, + "live": "Canlı", + "snapshot": "{age} eski anlık görüntü", + "snapshotHint": "Wazuh panosunun {time} tarihinde alınan ajan anlık görüntüsünden (wazuh-monitoring) okunur. Canlı veriler için sunucu API kimlik bilgilerini ekleyin.", + "staleSnapshot": "{time} tarihli ajan anlık görüntüsü güncel değil. Wazuh panosu izleme işinin çalıştığını kontrol edin veya sunucu API kimlik bilgilerini ekleyin.", + "noDisconnected": "Tüm ajanlar bağlı", + "empty": "Bu filtreyle eşleşen ajan yok", + "column": { + "status": "Durum", + "name": "İş adı", + "ip": "IP", + "os": "İşletim Sistemi", + "version": "Sürüm", + "lastKeepAlive": "Canlılık", + "groups": "Gruplar" + }, + "outdated": "En yeni ajan sürümünden daha eski ({version})" + }, + "wazuhAlerts": { + "name": "Wazuh uyarı akışı", + "description": "Düzey, MITRE ATT&CK teknikleri, ajan ve kaynak IP ile son Wazuh uyarıları", + "option": { + "minLevel": { + "label": "Minimum kural düzeyi", + "description": "Wazuh düzeyleri: 0-6 düşük, 7-11 orta, 12-14 yüksek, 15+ kritik" + }, + "hours": { + "label": "Zaman aralığı (saat)" + }, + "limit": { + "label": "Uyarı sayısı" + }, + "showMitre": { + "label": "MITRE ATT&CK tekniklerini göster" + }, + "showAgent": { + "label": "Ajanı göster" + }, + "showSourceIp": { + "label": "Kaynak IP'yi göster" + }, + "showRuleId": { + "label": "Kural kimliğini göster" + } + }, + "title": "Uyarılar · düzey {level}+ · {hours} sa", + "empty": "Bu düzeyde uyarı yok. Her şey sakin.", + "rule": "Kural {id}", + "openInDashboard": "Bu uyarıyı Wazuh panosunda aç" + }, + "wazuhSummary": { + "name": "Wazuh uyarı önem derecesi", + "description": "Önceki döneme göre eğilim içeren uyarı önem derecesi dökümü", + "option": { + "range": { + "label": "Zaman aralığı" + }, + "showTrend": { + "label": "Önceki döneme göre eğilimi göster" + }, + "showFooter": { + "label": "Alt bilgiyi göster" + } + }, + "title": "Uyarı önem derecesi · {range}", + "alerts": "uyarılar", + "none": "Uyarı yok", + "trend": { + "new": "yeni", + "tooltip": "Önceki dönem: {previous}" + }, + "previous": "Önceki {range}: {count}", + "maxLevel": "Maks. düzey {level}", + "health": "Dizinleyici sağlığı: {status}", + "manager": "Yönetici {version}" + }, + "wazuhTimeline": { + "name": "Wazuh uyarıları zaman çizelgesi", + "description": "Önem derecesine göre zaman içindeki Wazuh uyarılarının yığılmış grafiği", + "option": { + "range": { + "label": "Zaman aralığı" + }, + "interval": { + "label": "Aralık" + }, + "chartType": { + "label": "Grafik türü" + }, + "yScale": { + "label": "Y ekseni ölçeği", + "description": "Karekök ölçeği, binlerce düşük düzeyli uyarının yanında yüksek ve kritik uyarıların görünür kalmasını sağlar" + }, + "minLevel": { + "label": "Minimum kural düzeyi" + }, + "showLegend": { + "label": "Toplamlarla birlikte göstergeyi göster" + } + }, + "title": "Uyarı zaman çizelgesi · {range}", + "total": "{count} uyarı", + "interval": "{interval} başına" + }, + "wazuhTopList": { + "name": "Wazuh en iyi listesi", + "description": "Uyarı sayısına göre en popüler kurallar, ajanlar, kaynak IP'leri veya MITRE ATT&CK taktikleri ve teknikleri", + "option": { + "kind": { + "label": "Sıralama" + }, + "range": { + "label": "Zaman Aralığı" + }, + "limit": { + "label": "Girdi sayısı" + }, + "minLevel": { + "label": "Minimum kural düzeyi" + }, + "showBars": { + "label": "Çubukları göster" + } + }, + "title": { + "rules": "En üst kurallar · {range}", + "agents": "En üst ajanlar · {range}", + "sourceIps": "En üst kaynak IP'leri · {range}", + "mitreTactics": "MITRE taktikleri · {range}", + "mitreTechniques": "MITRE teknikleri · {range}" + }, + "empty": { + "rules": "Bu dönemde uyarı yok", + "agents": "Bu dönemde uyarı yok", + "sourceIps": "Bu dönemde kaynak IP'si olan uyarı yok", + "mitreTactics": "Bu dönemde MITRE ATT&CK ile eşleştirilmiş uyarı yok", + "mitreTechniques": "Bu dönemde MITRE ATT&CK ile eşleştirilmiş uyarı yok" + }, + "totalTooltip": "{count} eşleşen uyarı", + "private": "Yerel ağ", + "public": "Herkese açık", + "agents": "{count} ajan üzerinde görüldü", + "others": "Diğer girdilerde {count} uyarı daha var" + }, + "wazuhVulnerabilities": { + "name": "Wazuh güvenlik açıkları", + "description": "Güvenlik açığı sayıları, en üst CVE'ler ve en savunmasız ajanlar", + "option": { + "cveOrder": { + "label": "CVE'leri şuna göre sırala" + }, + "minSeverity": { + "label": "CVE önem derecesi" + }, + "cveLimit": { + "label": "CVE sayısı" + }, + "agentLimit": { + "label": "Ajan sayısı" + }, + "showAgents": { + "label": "En savunmasız ajanları göster" + } + }, + "title": "Güvenlik açıkları", + "topCves": "En üst CVE'ler", + "score": "Puan", + "agentsShort": "Ajanlar", + "topAgents": "En savunmasız ajanlar", + "criticalHigh": "Kritik / Yüksek", + "totalTooltip": "{agents} ajan üzerinde {count} bulgu", + "affected": "{count} ajan", + "empty": "Güvenlik açığı algılanmadı", + "distribution": "Önem derecesi dağılımı. Puanı olmayan {unscored} bulgu gösterilmez.", + "worst": "En kötü: {agents} ajan üzerinde {id} ({score})" + }, + "wazuhFim": { + "name": "Wazuh dosya bütünlüğü", + "description": "Son dosya bütünlüğü izleme (syscheck) olayları", + "option": { + "range": { + "label": "Zaman Aralığı" + }, + "event": { + "label": "Etkinlikler" + }, + "limit": { + "label": "Olay sayısı" + }, + "includeRegistry": { + "label": "Windows kayıt defteri olaylarını dahil et" + } + }, + "title": "Dosya bütünlüğü · {range}", + "event": { + "added": "Eklenme Tarihi", + "modified": "Değiştirildi", + "deleted": "Silinen", + "unknown": "Değişti" + }, + "empty": "Bu dönemde dosya bütünlüğü olayı yok", + "user": "{user} tarafından", + "registry": "Kayıt defteri" + }, + "wazuhAuthFailures": { + "name": "Wazuh kimlik doğrulama başarısızlıkları", + "description": "Ajan başına başarısız oturum açmalar ve saatlik mini grafiklerle kaba kuvvet uyarıları", + "option": { + "hours": { + "label": "Zaman aralığı (saat)" + }, + "limit": { + "label": "Ajan sayısı" + }, + "showSourceIps": { + "label": "En üst kaynak IP'lerini göster" + } + }, + "title": "Kimlik doğrulama başarısızlıkları · {hours}s", + "seriesTooltip": "Son {hours} saat içinde tüm ajanlar", + "peak": "Tepe {count}/paket", + "empty": "Bu dönemde başarısız oturum açma yok", + "failed": "Başarısız oturum açmalar", + "failedHint": "Tekil kimlik doğrulama başarısızlıkları (sshd, PAM, Windows oturumu, geçersiz kullanıcılar)", + "bruteForce": "Kaba kuvvet", + "bruteForceHint": "İlişkilendirilmiş kaba kuvvet kuralları (kısa sürede birden çok başarısızlık, MITRE T1110)", + "sourceIps": "Kaynak IP'leri", + "ipTooltip": "{ip}: {count} başarısızlık", + "bruteForceCount": "{count} kaba kuvvet olayı" } }, "widgetPreview": { @@ -4004,7 +5732,76 @@ } }, "board": { + "emptyState": { + "title": "İlk görünümünüzü oluşturun", + "description": "Bir widget veya uygulama ekleyin ya da bir hizmet bağlayıp verilerini bu panoda kullanın.", + "addWidget": "Widget ekle", + "addApp": "Uygulama ekle", + "connectService": "Hizmet bağla" + }, + "setupChecklist": { + "title": "Bu panoyu kullanışlı hale getirin", + "description": "Kaldığınız yerden devam edin. İlerleme, bu panoda zaten bulunan içeriğe göre belirlenir.", + "collapse": "Kurulum kontrol listesini daralt", + "dismiss": "", + "resume": "Kuruluma devam et ({completed}/{total})", + "progress": "Pano kurulum ilerlemesi", + "step": { + "content": { + "label": "Kullanışlı içerik ekle", + "description": "Yerleştirilmeden önce bir widget seçin ve yapılandırın." + }, + "app": { + "label": "Uygulama sabitle", + "description": "Bir hizmeti veya aracı bu panodan tek tıklama uzağında tutun." + }, + "service": { + "label": "Hizmet bağla", + "description": "Uyumlu widget'lar için canlı verilerin ve eylemlerin kilidini açın.", + "permissionDescription": "Bir yönetici, canlı verilerin kilidini açmak için bir hizmet bağlayabilir.", + "action": "Bağla" + } + } + }, "action": { + "addContent": "Pano içeriği ekle", + "settings": "Panel Ayarları", + "switch": "Panoyu değiştir", + "switcher": { + "title": "Panoyu değiştir", + "search": { + "empty": "\"{search}\" aramasıyla eşleşen pano yok." + }, + "results": "Kullanılabilir panolar", + "preview": "{count} öğe içeren {name} önizlemesi", + "currentHidden": "Geçerli pano: {name}", + "keyboard": { + "navigate": "Gezin", + "open": "Aç", + "instructions": "Panoları filtrelemek için yazın. Sonuçlar arasında gezinmek için ok tuşlarını, pano açmak için Enter'ı kullanın." + }, + "empty": { + "title": "Başka pano yok", + "description": "Erişebileceğiniz başka pano yok." + }, + "error": "Panolar yüklenemedi." + }, + "create": { + "availability": { + "checking": "Kullanılabilirlik kontrol ediliyor…", + "available": "{name} kullanılabilir" + }, + "notification": { + "success": { + "title": "Pano oluşturuldu", + "message": "{name} panosu oluşturuldu" + }, + "error": { + "title": "Pano oluşturulamıyor", + "message": "{name} panosu oluşturulamadı" + } + } + }, "duplicate": { "title": "Paneli Kopyala", "message": "{name} panelini tüm içerikleri ile birlikte kopyalamayı seçtiniz. Kullanım yetkiniz olmayan entegrasyonlar ve bunları içeren araçlar dahil edilmeyecektir.", @@ -4020,14 +5817,19 @@ } }, "edit": { + "enter": "Panoyu düzenle", + "save": "Panoyu kaydet", + "exit": "Düzenleme modundan çık", "notification": { "success": { - "title": "Değişiklikler başarıyla uygulandı", "message": "Panel başarıyla kaydedildi" }, "error": { - "title": "Değişiklikler uygulanamıyor", "message": "Panel kaydedilemedi" + }, + "loadError": { + "title": "Düzenleme başlatılamıyor", + "message": "Pano düzenleyicisi yüklenemedi. Panonuz görüntüleme modunda hâlâ kullanılabilir." } }, "confirmLeave": { @@ -4035,62 +5837,6 @@ "message": "Kaydedilmemiş değişiklikleriniz var, çıkmak istediğinizden emin misiniz?" } }, - "oldImport": { - "label": "Homarr 1.0'dan önceki yedeğinizi içe aktarın", - "notification": { - "success": { - "title": "İçe aktarma başarılı", - "message": "Panel başarıyla içe aktarıldı" - }, - "error": { - "title": "İçe aktarma başarısız oldu", - "message": "Panel içe aktarılamadı, daha fazla ayrıntı için günlükleri kontrol edin" - } - }, - "form": { - "file": { - "label": "JSON Dosyası Seç", - "invalidError": "Geçersiz yapılandırma dosyası" - }, - "apps": { - "label": "Uygulamalar", - "avoidDuplicates": { - "label": "Tekrarlardan kaçının", - "description": "Aynı href'e sahip bir uygulamanın zaten mevcut olduğu uygulamaları yok sayar" - }, - "onlyImportApps": { - "label": "Yalnızca uygulamaları içe aktar", - "description": "Sadece uygulamaları ekler, panelin manuel olarak yeniden oluşturulması gerekir" - } - }, - "name": { - "label": "Panel adı" - }, - "screenSize": { - "label": "Ekran boyutu", - "description": "1.0'dan önceki sürümlerde üç farklı mod mevcuttu, yani her ekran boyutu için sütun miktarını seçebiliyordunuz.", - "option": { - "sm": "Küçük", - "md": "Orta", - "lg": "Büyük" - } - }, - "sidebarBehavior": { - "label": "Kenar çubuğu davranışı", - "description": "Kenar çubukları 1.0'da kaldırıldı, içlerindeki öğelere ne olacağını seçebilirsiniz.", - "option": { - "lastSection": { - "label": "Son bölüm", - "description": "Kenar çubuğu son bölümün altında görüntülenecektir" - }, - "removeItems": { - "label": "Öğeleri kaldır", - "description": "Kenar çubuğunda bulunan öğeler kaldırılacak" - } - } - } - } - }, "quickCreateApp": { "modal": { "title": "Anında uygulama oluştur", @@ -4098,6 +5844,12 @@ } } }, + "landmark": { + "canvas": "Pano çalışma alanı", + "leftRail": "Sol pano kenar çubuğu", + "rightRail": "Sağ pano kenar çubuğu", + "items": "Pano öğeleri" + }, "field": { "pageTitle": { "label": "Sayfa Başlığı" @@ -4167,7 +5919,8 @@ } }, "primaryColor": { - "label": "Birincil renk" + "label": "Birincil renk", + "locked": "Yöneticiniz her panoda örnek marka rengini korur." }, "secondaryColor": { "label": "İkincil renk" @@ -4207,9 +5960,6 @@ "xl": "Çok büyük" } }, - "name": { - "label": "İsim" - }, "isPublic": { "label": "Herkese açık", "description": "Herkese açık panellere, henüz hesap oluşturmamış kullanıcılar erişebilir." @@ -4229,9 +5979,44 @@ "title": "Düzen", "responsive": { "title": "Duyarlı yerleşimler", + "description": "Her yerleşim kendi widget konumlarını ve boyutlarını korur. Mobil ve Temel her zaman kullanılabilir; ek kesme noktalarında özel yerleşimler ekleyin.", "action": { "add": "Yerleşim Ekle" } + }, + "role": { + "mobile": "Mobil", + "base": "Temel", + "custom": "Özel" + }, + "custom": { + "defaultName": "Özel yerleşim" + }, + "mobile": { + "breakpointDescription": "Mobil, 0 px'ten sonraki yerleşim kesme noktasına kadar her zaman kullanılır." + }, + "preview": { + "columns": "sütunlar", + "empty": "Bu yerleşim boş", + "dynamicSection": "Dinamik bölüm", + "editorWidthLabel": "{layoutName} · {width}px" + }, + "reset": { + "action": "Temel'den sıfırla", + "confirm": { + "title": "{layoutName} sıfırlansın mı?", + "message": "Bu işlem, bu yerleşimdeki kaydedilmiş tüm konum ve boyutları Temel'den oluşturulan yeni bir yerleşimle değiştirir. Bu işlem geri alınamaz." + } + }, + "edit": { + "action": "Yerleşimi düzenle", + "saveAndEdit": "Kaydet ve düzenle", + "save": "Yerleşimi kaydet", + "cancel": { + "action": "Yerleşim düzenlemesini iptal et", + "title": "Yerleşim değişiklikleri atılsın mı?", + "message": "Bu yerleşimdeki kaydedilmemiş değişiklikleriniz atılacak." + } } }, "background": { @@ -4268,10 +6053,7 @@ "rename": { "label": "Panelin ismini değiştir", "description": "İsmin değiştirilmesi bu panele olan tüm bağlantıların kopmasına neden olacaktır.", - "button": "İsmi değiştir", - "modal": { - "title": "Panelin ismini değiştir" - } + "button": "İsmi değiştir" }, "visibility": { "label": "Panelin görünürlüğünü değiştir", @@ -4295,9 +6077,7 @@ } }, "delete": { - "label": "Bu paneli sil", "description": "Panel silmenin geri dönüşü yoktur. Lütfen emin olun.", - "button": "Bu paneli sil", "confirm": { "title": "Paneli sil", "description": "Bu paneli silmek istediğinizden emin misiniz? Bu, paneli ve tüm içeriğini kalıcı olarak silecektir." @@ -4342,28 +6122,41 @@ }, "layout": { "field": { - "name": { - "label": "İsim" - }, "columnCount": { "label": "Sütun Sayısı" }, "breakpoint": { "label": "Kesme Noktası", "description": "Bu kesme noktasından daha büyük tüm ekranlarda, bir sonraki büyük kesme noktasına kadar bu yerleşim kullanılacaktır." + }, + "gutters": { + "label": "Sabit kenar çubukları", + "description": "Her iki tarafta en fazla üç pano sütunu ayırın. Kalan çalışma alanı otomatik olarak yeniden düzenlenir.", + "left": { + "label": "Sol kenar çubuğu", + "description": "Pano kaydırılırken bu alanı görünür tutun.", + "thumbLabel": "Sol kenar çubuğu genişliği" + }, + "right": { + "label": "Sağ kenar çubuğu", + "description": "Pano kaydırılırken bu alanı görünür tutun.", + "thumbLabel": "Sağ kenar çubuğu genişliği" + }, + "width": { + "label": "Sütun cinsinden genişlik" + }, + "preview": { + "label": "Pano yerleşimi önizlemesi" + } } } }, "management": { "metaTitle": "Yönetim", - "title": { - "morning": "Günaydın, {username}", - "afternoon": "İyi günler, {username}", - "evening": "İyi akşamlar, {username}" - }, "notFound": { "title": "Bulunamadı", - "text": "İstenen kaynak bulunamadı" + "text": "İstenen kaynak bulunamadı", + "backToHome": "Yönetim ana sayfasına dön" }, "error": { "title": "Bu sayfa yüklenemedi", @@ -4372,19 +6165,10 @@ }, "navbar": { "items": { - "workshop": "Workshop", "home": "Ana Sayfa", - "boards": "Paneller", - "apps": "Uygulamalar", - "integrations": "Entegrasyonlar", - "searchEngies": "Arama Motorları", - "medias": "Medyalar", "users": { - "label": "Kullanıcılar", "items": { - "manage": "Yönet", - "invites": "Davetler", - "groups": "Gruplar" + "manage": "Yönet" } }, "tools": { @@ -4392,10 +6176,7 @@ "items": { "docker": "Docker", "kubernetes": "Kubernetes", - "logs": "Günlükler", "api": "API ve MCP", - "certificates": "Sertifikalar", - "tasks": "Görevler", "backup": "Yedekleme" } }, @@ -4409,21 +6190,12 @@ "sourceCode": "Kaynak Kodu" } }, - "about": "Hakkında" + "about": "Hakkında", + "assistant": "Asistan" } }, "page": { "home": { - "statistic": { - "board": "Paneller", - "user": "Kullanıcılar", - "invite": "Davetler", - "integration": "Entegrasyonlar", - "app": "Uygulamalar", - "group": "Gruplar", - "searchEngine": "Arama motorları", - "media": "Medya" - }, "statisticLabel": { "boards": "Paneller", "resources": "Kaynaklar", @@ -4461,13 +6233,8 @@ "tooltip": "Bu panel sizin mobil paneliniz olarak görüntülenecektir" } }, - "duplicate": { - "label": "Paneli Kopyala" - }, "delete": { - "label": "Kalıcı olarak sil", "confirm": { - "title": "Paneli sil", "description": "{name} panelini silmek istediğinizden emin misiniz?" } } @@ -4476,28 +6243,82 @@ "public": "Bu panel herkese açıktır", "private": "Bu panel özeldir" }, - "noResults": { - "title": "Henüz panel yok" + "preview": { + "label": "{count} öğeli {name} yerleşimi önizlemesi", + "unknownCreator": "Bilinmeyen oluşturucu" }, - "modal": { - "createBoard": { - "field": { - "name": { - "label": "İsim" - } - } - } + "noResults": { + "title": "Henüz panel yok", + "description": "Uygulamalarınızı ve widget'larınızı tek bir yerde düzenlemek için bir pano oluşturun." } }, "media": { "includeFromAllUsers": "Tüm kullanıcıların medyalarını dahil et" }, "user": { - "back": "Kullanıcılara geri dön", "fieldsDisabledExternalProvider": "Bazı alanlar harici bir kimlik doğrulama sağlayıcısı tarafından yönetildiği için devre dışıdır.", "setting": { "general": { "title": "Genel", + "header": { + "title": "Üst bilgi stüdyosu", + "badge": "Kişisel", + "description": "Satırın herhangi bir yerindeki denetimleri sürükleyin. Sol, Orta ve Sağ sabit kalırken denetimler bunların etrafında hareket eder.", + "device": { + "desktop": "Masaüstü", + "mobile": "Mobil" + }, + "zones": { + "left": "Sol", + "center": "Merkez", + "right": "Sağ" + }, + "action": { + "hide": "Üst bilgiyi gizle", + "show": "Üst bilgiyi göster", + "configure": "{item} öğesini taşı veya yapılandır", + "remove": "{item} öğesini kaldır", + "dropIntoZone": "{zone} bölümüne taşı" + }, + "preview": { + "board": "{name} için pano önizlemesi", + "empty": "Kullanılabilir pano yerleşimi yok" + }, + "available": { + "title": "Kullanılabilir denetimler", + "description": "Bir denetim ekleyin, ardından üstteki düğmenin tamamını konumuna sürükleyin.", + "requiredAlways": "Bu denetim gereklidir ancak üst bilgide istediğiniz yere taşıyabilirsiniz.", + "allAdded": "Yerleşik tüm denetimler zaten üst bilginizde.", + "add": "{item} ekle", + "boardShortcut": "Pano kısayolu", + "chooseBoard": "Bir pano seçin" + }, + "configuration": { + "description": "Bu denetim, canlı üst bilgideki boyutunu korur.", + "searchDisplay": { + "input": "Arama çubuğu", + "icon": "Yalnızca simge" + }, + "logoDisplay": { + "logo": "Yalnızca logo", + "logoAndText": "Logo + metin" + } + }, + "items": { + "logo": "Amblem", + "search": "Arama", + "home": "Ana Panel", + "boardSwitcher": "Paneller", + "assistant": "Asistan", + "docker": "Docker", + "boardEdit": "Panoyu düzenle", + "boardSettings": "Panel Ayarları", + "settings": "Ayarlarınız", + "themeToggle": "Temayı değiştir", + "user": "Hesap", + "boardUnavailable": "Pano kullanılamıyor" + } + }, "item": { "language": "Dil & Bölge", "board": { @@ -4531,14 +6352,10 @@ }, "security": { "title": "Güvenlik" - }, - "board": { - "title": "Paneller" } }, "list": { - "metaTitle": "Kullanıcıları yönet", - "title": "Kullanıcılar" + "metaTitle": "Kullanıcıları yönet" }, "edit": { "metaTitle": "Kullanıcıyı düzenle {username}" @@ -4592,9 +6409,6 @@ } }, "field": { - "id": { - "label": "Kimlik" - }, "creator": { "label": "Oluşturan" }, @@ -4618,10 +6432,7 @@ }, "setting": { "title": "Ayarlar", - "alert": "Grup ayarları, listedeki grupların sırasına göre önceliklendirilir. En üstteki ayarlar en alttaki ayarları geçersiz kılar.", - "board": { - "title": "Paneller" - } + "alert": "Grup ayarları, listedeki grupların sırasına göre önceliklendirilir. En üstteki ayarlar en alttaki ayarları geçersiz kılar." }, "members": { "title": "Üyeler", @@ -4629,10 +6440,7 @@ "notFound": "Üye bulunamadı" }, "permissions": { - "title": "İzinler", - "form": { - "unsavedChanges": "Kaydedilmemiş değişiklikleriniz var!" - } + "title": "İzinler" } } }, @@ -4641,12 +6449,10 @@ "notification": { "success": { "message": "Ayarlar başarıyla kaydedildi" - }, - "error": { - "message": "Ayarlar kaydedilemedi" } }, "section": { + "analyticsDocumentation": "Homarr'ın topladığı analiz verilerini tam olarak görün", "analytics": { "title": "Analiz", "general": { @@ -4675,7 +6481,6 @@ } }, "board": { - "title": "Paneller", "homeBoard": { "label": "Genel öntanımlı panel", "mobileLabel": "Genel öntanımlı mobil panel", @@ -4694,7 +6499,6 @@ } }, "user": { - "title": "Kullanıcılar", "enableGravatar": { "label": "Gravatar'ı etkinleştir", "description": "Özel avatar ayarlanmadığında ve bir e-posta adresi tanımlandığında Libravatar/Gravatar kullanıcı avatarları kullanılır" @@ -4710,12 +6514,86 @@ "appearance": { "title": "Görünüm", "defaultColorScheme": { - "label": "Öntanımlı Renk Düzeni", + "label": "Öntanımlı Renk Düzeni" + } + }, + "branding": { + "title": "Örnek markası", + "groups": { + "identity": "Kimlik", + "appearance": "Görünüm", + "customCss": "Özel CSS", + "authentication": "Kimlik Doğrulama" + }, + "identity": { + "description": "Uygulama logosu, uygulama içinde, oturum açma sayfalarında ve yüklü uygulamalarda kullanılan büyük işarettir. Tarayıcı simgesi (favicon), sekmelerde ve yer imlerinde kullanılan küçük kare simgedir; boş bırakıldığında uygulama logosu kullanılır." + }, + "appName": { + "label": "Uygulama adı" + }, + "greeting": { + "label": "Özel karşılama" + }, + "logo": { + "label": "Uygulama logosu", + "placeholder": "/logo/logo.png" + }, + "favicon": { + "label": "Tarayıcı simgesi (favicon)", + "placeholder": "Uygulama logosunu kullanır" + }, + "primaryColor": { + "label": "Birincil renk" + }, + "secondaryColor": { + "label": "İkincil vurgu" + }, + "lockPrimaryColor": { + "label": "Bu rengi her panoda koru", + "description": "Pano renklerinin uygulama vurgu renginin yerini almasını önler." + }, + "signInBackground": { + "label": "Kimlik doğrulama arka planı", + "placeholder": "https://example.com/background.jpg" + }, + "signInOverlay": { + "label": "Arka plan kaplaması" + }, + "defaultRadius": { + "label": "Köşe stili", "options": { - "auto": "Otomatik", - "light": "Aydınlık", - "dark": "Koyu" + "xs": "Sıkı", + "sm": "Hafif", + "md": "Dengeli", + "lg": "Yuvarlatılmış", + "xl": "Yumuşak" } + }, + "customCss": { + "label": "Genel özel CSS", + "description": "Her sayfaya uygulanır. Pano özel CSS'si bunu geçersiz kılabilir." + }, + "authVisibility": { + "description": "Her kimlik doğrulama sayfasında ne görüneceğini seçin.", + "appName": "Uygulama adı", + "logo": "Uygulama logosu", + "greeting": "Karşılama" + }, + "summary": { + "title": "Geçerli marka", + "cornerStyle": "Köşe stili", + "palette": "Renk paleti", + "backgroundConfigured": "Özel arka plan · {overlay}% kaplama", + "backgroundDefault": "Varsayılan arka plan", + "greetingConfigured": "Özel karşılama", + "greetingDefault": "Varsayılan karşılama", + "boardColorLocked": "Pano rengi kilitli", + "boardColorFlexible": "Pano renklerine izin veriliyor", + "appName": "İş adı", + "logo": "Amblem", + "greeting": "Karşılama", + "on": "Açık", + "off": "Kapalı" } }, "culture": { @@ -4723,12 +6601,177 @@ "defaultLocale": { "label": "Öntanımlı Dil" } + }, + "assistant": { + "loading": "Asistan yapılandırması yükleniyor", + "title": "Asistan", + "description": "Örnek genelindeki asistan için OpenAI uyumlu bir model uç noktası bağlayın.", + "security": { + "description": "API anahtarları ve ek üst bilgi değerleri Homarr veritabanında şifrelenir. Tarayıcılara hiçbir zaman gönderilmezler. Model istekleri Homarr sunucusundan yapılandırılmış uç noktaya doğrudan gönderilir." + }, + "overview": { + "connectionReady": "Bağlantı hazır", + "unsavedChanges": "Kaydedilmemiş değişiklikler", + "setupRequired": "Kurulum gerekli", + "disabled": "Pasif", + "noModel": "Model seçilmedi" + }, + "connection": { + "endpointTitle": "Sağlayıcı ve uç nokta", + "description": "Bir hazır ayar seçin veya OpenAI Chat Completions API'sini uygulayan herhangi bir hizmeti bağlayın.", + "save": "Sağlayıcı bağlantısını kaydet" + }, + "credentials": { + "title": "Kimlik bilgileri", + "description": "Bu uç noktanın ihtiyaç duyduğu gizli bilgileri ekleyin. Kaydedilen değerler şifreli kalır ve tekrar okunamaz.", + "required": "Anahtar gerekli", + "optional": "Anahtar isteğe bağlı", + "workshop": "Kullanıcı başına GitHub oturumu" + }, + "provider": { + "title": "Sağlayıcı", + "groups": { + "free": "Homarr ile ücretsiz", + "hosted": "Barındırılan sağlayıcılar", + "local": "Yerel sağlayıcılar", + "custom": "Özel" + }, + "options": { + "homarr": { + "description": "Her gün sınırlı sayıda Asistan kullanımı ücretsizdir ve Homarr ekibi tarafından karşılanır. Kotanızı kullanmak için Community Workshop ile oturum açın." + }, + "openrouter": { + "description": "Geniş araç destekli model kataloğuyla barındırılan model yönlendirme." + }, + "openai": { + "description": "Resmî API uç noktası üzerinden OpenAI Chat Completions." + }, + "anthropic": { + "description": "Anthropic'in OpenAI SDK uyumluluk uç noktası üzerinden Claude." + }, + "google-gemini": { + "description": "Google'ın OpenAI uyumlu API uç noktası üzerinden Gemini." + }, + "xai": { + "description": "Grok modelleri, xAI'nin OpenAI uyumlu API'si üzerinden." + }, + "groq": { + "description": "Groq'un OpenAI uyumlu API'si üzerinden hızlı barındırılan çıkarım." + }, + "mistral": { + "description": "Resmî API üzerinden Mistral modelleri." + }, + "deepseek": { + "description": "OpenAI uyumlu API'si üzerinden DeepSeek modelleri." + }, + "together": { + "description": "Together'ın OpenAI uyumlu API'si üzerinden barındırılan açık modeller." + }, + "ollama": { + "description": "OpenAI uyumlu API'sini kullanan yerel veya ağ üzerindeki Ollama sunucusu." + }, + "lm-studio": { + "description": "OpenAI uyumluluğu etkin bir LM Studio yerel sunucusu." + }, + "llama-cpp": { + "description": "OpenAI uyumlu API'sini kullanan yerel veya ağ üzerindeki llama.cpp sunucusu." + }, + "custom": { + "label": "Özel uç nokta", + "description": "OpenAI Chat Completions ile uyumlu diğer tüm uç noktalar." + } + }, + "homarrAuth": { + "title": "Günlük ücretsiz Asistan kullanımları dahil", + "description": "API anahtarı gerekmez. Homarr ekibi her gün sizin için sınırlı sayıda Asistan kullanımını karşılar. Kotanızı ayrı tutmak için Community Workshop ile oturum açın." + } + }, + "baseUrl": { + "title": "API temel URL'si", + "description": "Genellikle /v1 olan API ön ekini dahil edin. Kapsayıcılarda localhost, Homarr kapsayıcısını ifade eder." + }, + "apiKey": { + "title": "API anahtarı", + "required": "Bu sağlayıcı tarafından gerekli. Değer şifrelenir ve yalnızca yazılabilir.", + "optional": "Yerel uç noktalar için isteğe bağlıdır. Hizmet bearer kimlik doğrulaması gerektirmiyorsa boş bırakın.", + "placeholder": "Bir API anahtarı girin", + "savedTitle": "Şifrelenmiş API anahtarı kaydedildi", + "savedDescription": "Homarr bu anahtarı kullanabilir ancak değerini görüntüleyemez veya kurtaramaz.", + "remove": "Kayıtlı API anahtarını kaldır", + "removeFlow": { + "title": "Kayıtlı API anahtarı kaldırılsın mı?", + "description": "Bu sağlayıcı bir API anahtarı gerektirir. Kaldırılması, başka bir anahtar kaydedilene kadar model keşfini ve asistan yanıtlarını durdurabilir.", + "optionalDescription": "Bu anahtar kaldırıldıktan sonra uç nokta bearer kimlik doğrulaması almayı durdurur. Kimlik doğrulamasız istekleri kabul ettiğini veya başka bir kayıtlı üst bilgi kullandığını doğrulayın.", + "cancel": "Kayıtlı anahtarı koru", + "confirm": "API anahtarını kaldır" + } + }, + "headers": { + "title": "Ek istek üst bilgileri", + "description": "İsteğe bağlı kimlik doğrulama veya yönlendirme üst bilgileri. Üst bilgi değerleri şifrelenir ve yalnızca yazılabilir.", + "add": "Üst bilgi ekle", + "name": "Üst bilgi adı", + "value": "Üst bilgi değeri", + "valuePlaceholder": "Gizli veya yönlendirme değeri", + "remove": "Üst bilgiyi kaldır", + "configured": "Ek şifrelenmiş üst bilgiler yapılandırıldı. Üst bilgi eklemek, kaydedilen kümenin tamamını değiştirir.", + "empty": "Bu sağlayıcı için ek üst bilgi kaydedilmedi.", + "savedBadge": "Üst bilgiler kaydedildi", + "pendingRemoval": "Kaldırma bekleniyor", + "clear": "Kaydederken kayıtlı üst bilgileri kaldır", + "keep": "Kayıtlı üst bilgileri koru" + }, + "model": { + "title": "Model adı", + "description": "Keşfedilen bir model seçin veya tam bir uç nokta model kimliği girin.", + "placeholder": "Model kimliği", + "refresh": "Modelleri yenile", + "chooseModel": "Yeni konuşmalar için kullanılacak modeli seçin.", + "discoveryPath": "Model keşif yolu", + "discoveryPathDescription": "API temel URL'sine eklenir. Keşfi devre dışı bırakmak ve manuel model kimliği kullanmak için boş bırakın.", + "manual": "Manuel olarak bir model kimliği girin veya modelleri keşfetmek için bağlantıyı kaydedin.", + "manualFallback": "Keşif kullanılamıyor. Yine de manuel olarak bir model kimliği girebilirsiniz.", + "saveConnectionFirst": "Model seçmeden önce sağlayıcı bağlantısını kaydedin.", + "discovering": "Bu sağlayıcıda kullanılabilir modeller yenileniyor…", + "discovered": "{count, plural, one {# model keşfedildi. Araç desteği seçilen uç noktaya ve modele bağlıdır.} other {# model keşfedildi. Araç desteği seçilen uç noktaya ve modele bağlıdır.}}", + "discoveryFailed": "Model keşfi tamamlanmadı", + "context": "{count} bağlam penceresi", + "toolsConfirmed": "Duyurulan araçlar", + "toolsUnknown": "Araç desteğini doğrula" + }, + "serverTools": { + "title": "Sunucu araçları", + "webSearch": { + "label": "Web araması", + "description": "Bir istek güncel bilgi gerektirdiğinde modelin OpenRouter üzerinden canlı web'de arama yapmasına izin verin. Arama kullanımı OpenRouter tarafından ayrıca ücretlendirilir.", + "proxyDescription": "OpenRouter'ın web araması sunucu aracını bu uç noktaya gönderin. Bunu yalnızca özel uç nokta, Homarr Router proxy gibi OpenRouter sunucu araçları biçimini iletiyorsa etkinleştirin.", + "limit": "Model, istek başına en fazla 3 arama ve arama başına 5 sonuç sınırıyla ne zaman arama yapacağına karar verir." + } + }, + "enabled": { + "label": "Asistanı etkinleştir", + "description": "Asistanı oturum açmış tüm kullanıcılara gösterir. Mevcut Homarr izinleri her dahili araç çağrısı için geçerliliğini korur." + }, + "save": "Asistanı kaydet", + "notification": { + "connectionSaved": { + "title": "Sağlayıcı bağlantısı kaydedildi", + "message": "Uç nokta ve şifrelenmiş kimlik bilgileri model seçimi için hazır.", + "credentialsCleared": "Uç nokta değiştiği için önceki kimlik bilgileri temizlendi. Gerekirse yeni hedef için kimlik bilgileri ekleyin." + }, + "saved": { + "title": "Asistan ayarları kaydedildi", + "message": "Yeni model ve kullanılabilirlik ayarları etkin." + }, + "error": { + "title": "Asistan ayarları kaydedilemedi" + } + } } } }, "tool": { "tasks": { - "title": "Görevler", "status": { "idle": "Boşta", "running": "Çalışıyor", @@ -4746,6 +6789,11 @@ "label": "Pingler" } }, + "action": { + "run": "{name} öğesini şimdi çalıştır", + "enable": "{name} öğesini etkinleştir", + "disable": "{name} öğesini devre dışı bırak" + }, "interval": { "seconds": "Her {interval, plural, =1 {saniye} other {# saniyede bir}}", "minutes": "Her {interval, plural, =1 {dakika} other {# dakikada bir}}", @@ -4761,13 +6809,7 @@ } } }, - "settings": { - "title": "{jobName} için görev ayarları" - }, "field": { - "name": { - "label": "İsim" - }, "interval": { "label": "Zamanlama aralığı" }, @@ -4781,11 +6823,6 @@ "table": { "search": "{count} görevi ara..." }, - "action": { - "refresh": { - "label": "Yenile" - } - }, "refresh": { "success": { "message": "Görevler başarıyla yenilendi" @@ -4819,7 +6856,6 @@ } }, "api": { - "title": "API", "modal": { "createApiToken": { "title": "API anahtarı oluşturuldu", @@ -4845,7 +6881,6 @@ }, "table": { "header": { - "id": "Kimlik", "createdBy": "Tarafından oluşturuldu", "actions": "Eylemler" } @@ -4901,43 +6936,12 @@ "availableTools": { "title": "Kullanılabilir Araçlar", "description": "{count} araç kullanılabilir. Araçları ve açıklamalarını görmek için bir kategoriyi genişletin.", - "columnType": "Tür", - "columnName": "Araç", - "columnDescription": "Açıklama" - }, - "troubleshooting": { - "title": "Sorun Giderme", - "missingHeader": { - "title": "“ApiKey üst bilgisi eksik”", - "description": "İstemciniz {header} üst bilgisini göndermiyor. MCP yapılandırmanızdaki {section} bölümünün doğru olduğunu doğrulayın. Bazı istemcilerin yapılandırma değişikliklerinden sonra yeniden başlatılması gerekir." - }, - "invalidFormat": { - "title": "“Geçersiz ApiKey biçimi”", - "description": "API anahtarının yalnızca bir bölümünü değil tamamını kopyaladığınızdan emin olun." - }, - "invalidKey": { - "title": "“Geçersiz API anahtarı”", - "description": "Anahtar kimliği bulunamadı veya token yanlış. API anahtarları oluşturulduklarında yalnızca bir kez görüntülenebilir. Anahtarı kaybettiyseniz eskisini silip yenisini oluşturun." - }, - "connectionRefused": { - "title": "Bağlantı reddedildi / zaman aşımı", - "description": "URL'nin yapay zekâ istemcinizden erişilebilir olduğundan emin olun. Homarr ters proxy arkasında veya Docker'da çalışıyorsa {localhost} yerine harici URL'yi kullanın. Portun doğru olduğunu doğrulayın (Docker için varsayılan: 7575)." - }, - "toolsNotAppearing": { - "title": "Araçlar görünmüyor", - "description": "Bazı araçlar belirli entegrasyonların yapılandırılmasını gerektirir (ör. Docker, Overseerr). Araç listesi Homarr örneğinizde kullanılabilir olanlara bağlıdır." + "filteredDescription": "Genişletilmiş kategorilerde {count} eşleşen araç.", + "search": "Araçlarda ara", + "noResults": { + "title": "Bu aramayla eşleşen araç yok", + "description": "\"{search}\" ile eşleşen MCP aracı yok. Bir ad alanı, araç adı veya açıklama deneyin." } - }, - "copy": "Kopyala", - "oneClick": { - "title": "Tek Tıkla Kur", - "subtitle": "OAuth kullanır; ilk kullanımda tarayıcınızda kimlik doğrulayın", - "vsCode": "VS Code'a Kur", - "cursor": "Cursor'a Kur", - "copyUrl": "MCP URL'sini Kopyala", - "copied": "Kopyalandı!", - "copyHint": "ChatGPT, Claude Code veya herhangi bir MCP istemcisi için", - "manualConfig": "Manuel Yapılandırma" } } } @@ -4954,47 +6958,12 @@ "title": "Hassas veri dışa aktarımı", "warningTitle": "Bu dışa aktarma tüm veritabanınızı içerir.", "warningBody": "Yedekleme, tüm kullanıcıları, entegrasyon gizli anahtarlarını (şifrelenmiş), API anahtarlarını, panel yapılandırmalarını ve uygulama verilerini içerir. Dışa aktarılan dosyayı güvenli bir şekilde saklayın ve paylaşmayın.", - "typePrompt": "Devam etmek için \"{phrase}\" yazın", - "submit": "Veritabanını Dışa Aktar", - "cancel": "İptal" + "submit": "Veritabanını Dışa Aktar" } }, "import": { "title": "Veritabanını Geri Yükle", - "description": "Veritabanınızı geri yüklemek için daha önce dışa aktarılmış bir yedek ZIP dosyası yükleyin. Bu, tüm veritabanınızı değiştirir. Yedekleme farklı bir şifreleme anahtarıyla oluşturulmuşsa, gizli anahtarlar otomatik olarak yeniden şifrelenir.", - "warning": "Bir yedeklemeyi geri yüklemek, mevcut veritabanınızı tamamen değiştirir ve uygulamayı yeniden başlatır. Bu eylem geri alınamaz.", - "dropzone": { - "title": "Yedekleme ZIP dosyanızı buraya bırakın veya göz atmak için tıklayın", - "description": "Yalnızca bir Homarr SQLite yedeklemesinden gelen .zip dosyaları kabul edilir" - }, - "changeFile": "Dosyayı değiştir", - "button": "Veritabanını Geri Yükle", - "success": { - "title": "Geri Yükleme Tamamlandı", - "message": "Veritabanı başarıyla geri yüklendi. Uygulama yeniden başlatılıyor..." - }, - "error": "İçe aktarma başarısız oldu" - }, - "preview": { - "title": "Yedekleme İçeriği", - "exported": "Dışa aktarıldı {date}", - "loading": "Yedekleme dosyası analiz ediliyor...", - "errorTitle": "Önizleme Hatası", - "entity": "Varlık", - "count": "Sayı", - "boards": "Paneller", - "entities": { - "board": "Paneller", - "user": "Kullanıcılar", - "app": "Uygulamalar", - "integration": "Entegrasyonlar", - "item": "Widget'lar", - "media": "Medya", - "search_engine": "Arama Motorları" - }, - "analyzeError": "Yedekleme dosyası analiz edilemedi", - "invalidMissingMetadata": "Geçersiz yedekleme: metadata.json eksik", - "invalidMissingDb": "Geçersiz yedekleme: db.sqlite eksik" + "description": "Veritabanınızı geri yüklemek için daha önce dışa aktarılmış bir yedek ZIP dosyası yükleyin. Bu, tüm veritabanınızı değiştirir. Yedekleme farklı bir şifreleme anahtarıyla oluşturulmuşsa, gizli anahtarlar otomatik olarak yeniden şifrelenir." }, "restore": { "dropzone": { @@ -5004,29 +6973,20 @@ "analyzing": "Yedekleme analiz ediliyor...", "changeFile": "Dosyayı değiştir", "continueToRestore": "Geri yüklemeye devam et", - "tryAgain": "Tekrar dene", "analysisError": "Analiz Hatası", "preview": { "title": "Yedekleme İçeriği", "exported": "Dışa aktarıldı {date}", "entity": "Varlık", "count": "Sayı", - "boards": "Paneller", "entities": { - "board": "Paneller", - "user": "Kullanıcılar", - "app": "Uygulamalar", - "integration": "Entegrasyonlar", - "item": "Widget'lar", - "media": "Medya", - "search_engine": "Arama Motorları" + "item": "Widget'lar" }, "migrationsApplied": "{count} geçiş uygulandı", "migrationsAppliedPlural": "{count} geçiş uygulandı", "migrationsOlderVersion": "Bu yedekleme daha eski bir Homarr sürümündendi. Güncellemek için {count} şema geçişi uygulandı.", "migrationsOlderVersionPlural": "Bu yedekleme daha eski bir Homarr sürümündendi. Güncellemek için {count} şema geçişi uygulandı.", "migrationsUpToDate": "Veritabanı şeması güncel ({count} geçiş uygulandı)", - "upToDate": "Güncel", "migrationsPending": "{count} bekleyen" }, "migration": { @@ -5037,21 +6997,21 @@ "title": "Yıkıcı eylem", "warningTitle": "Bu, tüm veritabanınızı kalıcı olarak değiştirir.", "warningBody": "Tüm mevcut panolar, kullanıcılar, uygulamalar, entegrasyonlar, ayarlar ve oturumlar kaybolacaktır. Bu eylem geri alınamaz. Uygulama, geri yüklemeden sonra yeniden başlatılacaktır.", - "typePrompt": "Devam etmek için \"{phrase}\" yazın", - "cancel": "İptal", "submit": "Veritabanını Geri Yükle" }, "progress": { "title": "Veritabanı geri yükleniyor...", - "extracting": "Yedekleme arşivi çıkarılıyor", - "migrating": "Veritabanı geçişleri uygulanıyor", - "encrypting": "Entegrasyon gizli anahtarları yeniden şifreleniyor", - "swapping": "Veritabanı dosyası değiştiriliyor", - "restarting": "Sunucu yeniden başlatılıyor" + "restarting": "Sunucu yeniden başlatılıyor", + "relogin": "Veritabanını geri yüklemek mevcut oturumunuzu geçersiz kıldı. Sunucu hazır olduğunda Homarr sizi oturum açmaya yönlendirecek." }, "complete": { "title": "Geri Yükleme Tamamlandı", - "message": "Veritabanı başarıyla geri yüklendi. Sunucu yeniden başlatılıyor — lütfen birkaç saniye içinde sayfayı yenileyin." + "message": "Veritabanı başarıyla geri yüklendi. Sunucu yeniden başlatılıyor — lütfen birkaç saniye içinde sayfayı yenileyin.", + "button": "Şimdi oturum aç" + }, + "timeout": { + "title": "Sunucu tekrar çevrimiçi olmadı", + "message": "Veritabanı geri yükleme tamamlandı ancak Homarr yeniden hazır olmadı. Bağlantı kontrolünü yeniden deneyin veya bu sayfayı manuel olarak yenileyin." }, "failed": { "title": "Geri Yükleme Başarısız Oldu" @@ -5059,6 +7019,9 @@ "invalidMissingMetadata": "Geçersiz yedekleme: metadata.json eksik", "invalidMissingDb": "Geçersiz yedekleme: db.sqlite eksik", "analyzeError": "Yedekleme analiz edilemedi" + }, + "confirm": { + "typePrompt": "Devam etmek için \"{phrase}\" yazın" } } }, @@ -5093,7 +7056,11 @@ "toggleBoardEdit": "Panonun düzenleme modunu değiştir", "toggleColorScheme": "Aydınlık/karanlık mod", "saveNotebook": "Not defterini kaydet (sadece not defteri widget'ının içinde)", - "openSpotlight": "Aramayı aç" + "openSpotlight": "Aramayı aç", + "openSpotlightApps": "Uygulama aramasını aç", + "openSpotlightAssistant": "Asistan modunu aç", + "openSpotlightPreferences": "Tercihler modunu aç", + "openAssistant": "Asistanı aç" }, "note": "İpucu: Mod, macOS'ta hem Ctrl tuşunu hem de ⌘ tuşunu ifade eder" } @@ -5103,6 +7070,63 @@ }, "docker": { "title": "Konteynerler", + "reconciliation": { + "title": "Destekli Docker kurulumu", + "suggestions": "{count, plural, =0 {Öneri yok} one {# öneri} other {# öneri}}", + "attention": "{count} ilgilenilmesi gerekiyor", + "endpointUnavailable": "Şu uç noktalar kullanılamadığı için bazı hizmetler kontrol edilemedi: {names}", + "empty": "Görünür Docker hizmeti bulunamadı.", + "emptyFilter": "Bu görünümle eşleşen hizmet yok.", + "ambiguous": "Birden fazla mevcut öğe bu hizmetle eşleşebilir. Homarr otomatik olarak seçim yapmayacak.", + "filter": { + "attention": "İlgilenilmesi gerekiyor", + "represented": "Zaten kuruldu", + "all": "Tümü" + }, + "state": { + "newRecognized": "Bağlanmaya hazır", + "newApp": "Yeni hizmet", + "represented": "Zaten temsil ediliyor", + "linked": "Bağlandı", + "moved": "Adres değişti" + }, + "url": { + "manual": "Adresi manuel olarak girin" + }, + "health": { + "layer": { + "docker": "Docker", + "integrationConfiguration": "Entegrasyon", + "authentication": "Kimlik Doğrulama", + "apiRequest": "API", + "appRepresentation": "Uygulama", + "widgetConfiguration": "Bileşen", + "widgetQuery": "Widget sorgusu" + }, + "status": { + "available": "Kullanılabilir", + "configured": "Yapılandırıldı", + "linked": "Bağlandı", + "missing": "Eksik", + "changed": "Değiştirildi", + "unused": "Kullanılmıyor", + "notApplicable": "Uygulanamaz", + "notObserved": "Gözlemlenmedi" + } + }, + "action": { + "review": "Gözden geçir", + "dismiss": "Yok say", + "restoreDismissed": "Yok sayılanları geri yükle ({count})", + "setupIntegration": "Entegrasyonu kur", + "reviewIntegration": "Entegrasyonu incele", + "viewRepresentation": "Kurulumu görüntüle" + }, + "loadError": { + "title": "Docker kurulum asistanı yüklenemedi", + "message": "Docker hizmet bilgileri kullanılamıyor. Bu sayfadan ayrılmadan tekrar deneyin." + } + }, "table": { "updated": "{when} Güncellendi", "refresh": { @@ -5115,9 +7139,6 @@ "totalMemory": "Toplam Bellek: {memory}" }, "field": { - "name": { - "label": "İsim" - }, "state": { "label": "Durum", "option": { @@ -5131,9 +7152,6 @@ } }, "stats": { - "cpu": { - "label": "İşlemci" - }, "memory": { "label": "Bellek" } @@ -5196,8 +7214,11 @@ } }, "remove": { - "label": "Kaldır", "confirm": "Kalıcı olarak kaldırmak için yeniden tıklayın", + "confirmation": { + "title": "{count, plural, one {# kapsayıcı kaldırılsın mı?} other {# kapsayıcı kaldırılsın mı?}}", + "message": "{count, plural, one {Bu işlem # kapsayıcıyı kalıcı olarak kaldırır: {names}} other {Bu işlem # kapsayıcıyı kalıcı olarak kaldırır: {names}}}" + }, "notification": { "success": { "title": "Konteynerler kaldırıldı", @@ -5209,8 +7230,13 @@ } } }, + "result": { + "failure": { + "title": "Bazı kapsayıcı eylemleri başarısız oldu", + "message": "{total, plural, one {{failed} eylemden # tanesi başarısız oldu: {names}} other {{failed} eylemden # tanesi başarısız oldu: {names}}}" + } + }, "refresh": { - "label": "Yenile", "notification": { "success": { "title": "Konteynerler yenilendi", @@ -5241,18 +7267,33 @@ }, "error": { "internalServerError": "Docker konteynerlerları getirilemedi", + "endpointUnavailable": "{count, plural, one {# Docker uç noktası kullanılamıyor: {names}} other {# Docker uç noktası kullanılamıyor: {names}}}", "noColumns": "Widget ayarlarında en az bir sütun seçin" } }, "kubernetes": { + "context": { + "label": "Kubernetes bağlamı", + "loadError": { + "title": "Kubernetes bağlamları yüklenemedi", + "message": "Bağlam bilgileri kullanılamıyor. Bu sayfadan ayrılmadan tekrar deneyin." + }, + "status": { + "available": "Kullanılabilir", + "degraded": "Metrikler kullanılamıyor", + "unavailable": "Kullanılamıyor" + }, + "unavailable": "Bu Kubernetes bağlamına erişilemiyor. Başka bir bağlam seçin veya kimlik bilgilerini ve uç noktayı doğrulayın.", + "metricsUnavailable": "Bu bağlama erişilebiliyor ancak Metrics Server kullanılamıyor. Envanter, canlı CPU ve bellek kullanımı olmadan kullanılabilirliğini korur." + }, "cluster": { "title": "Küme Panosu", "label": "Küme", "providers": "Sağlayıcılar", "version": "Sürüm", - "architecture": "Mimari", "capacity": { "title": "Kapasite", + "metricsUnavailable": "Metrics Server kullanılamıyor. Envanter ve ayrılan kapasite görünür olmaya devam eder ancak canlı CPU ve bellek kullanımı gösterilemez.", "resource": { "reserved": "Rezerve", "used": "Kullanılan" @@ -5271,38 +7312,10 @@ } }, "nodes": { - "label": "Node'lar", "field": { - "name": { - "label": "İsim" - }, - "state": { - "label": "Durum", - "option": { - "ready": "Hazır", - "NotReady": "Hazır Değil" - } - }, - "cpu": { - "label": "İşlemci" - }, - "memory": { - "label": "BELLEK" - }, - "pods": { - "label": "Pod'lar" - }, - "operatingSystem": { - "label": "İşletim Sistemi" - }, - "architecture": { - "label": "Mimari" - }, + "metricsUnavailable": "Kullanılamıyor", "kubernetesVersion": { "label": "Kubernetes Sürümü" - }, - "creationTimestamp": { - "label": "Oluşturuldu" } }, "table": { @@ -5310,43 +7323,17 @@ } }, "namespaces": { - "label": "İsim Alanları", - "field": { - "name": { - "label": "İsim" - }, - "state": { - "label": "Durum", - "option": { - "active": "Aktif", - "terminating": "Sonlandırma" - } - }, - "creationTimestamp": { - "label": "Oluşturuldu" - } - }, "table": { "search": "{count} isim alanı içinde ara" } }, "ingresses": { - "label": "Ingress'ler", "field": { - "name": { - "label": "İsim" - }, - "namespace": { - "label": "İsim Alanı" - }, "className": { "label": "Sınıf ismi" }, "rulesAndPaths": { "label": "Kurallar & yollar" - }, - "creationTimestamp": { - "label": "Oluşturuldu" } }, "table": { @@ -5354,17 +7341,7 @@ } }, "services": { - "label": "Hizmetler", "field": { - "name": { - "label": "İsim" - }, - "namespace": { - "label": "İsim Alanı" - }, - "type": { - "label": "Tip" - }, "ports": { "label": "Bağlantı noktaları" }, @@ -5373,9 +7350,6 @@ }, "clusterIP": { "label": "Küme IP'si" - }, - "creationTimestamp": { - "label": "Oluşturuldu" } }, "table": { @@ -5383,25 +7357,12 @@ } }, "pods": { - "label": "Pod'lar", "field": { - "name": { - "label": "İsim" - }, - "namespace": { - "label": "İsim Alanı" - }, "image": { "label": "İmaj" }, "applicationType": { "label": "Uygulama Türü" - }, - "status": { - "label": "Durum" - }, - "creationTimestamp": { - "label": "Oluşturuldu" } }, "table": { @@ -5409,51 +7370,17 @@ } }, "secrets": { - "label": "Gizli anahtarlar", - "field": { - "name": { - "label": "İsim" - }, - "namespace": { - "label": "i̇sim Alanı" - }, - "type": { - "label": "tür" - }, - "creationTimestamp": { - "label": "Oluşturuldu" - } - }, "table": { "search": "{count} gizli anahtar içerisinde ara" } }, "configmaps": { - "label": "ConfigMap'ler", - "field": { - "name": { - "label": "İsim" - }, - "namespace": { - "label": "İsim Alanı" - }, - "creationTimestamp": { - "label": "Oluşturuldu" - } - }, "table": { "search": "{count} configMap içinde ara" } }, "volumes": { - "label": "Birimler", "field": { - "name": { - "label": "İsim" - }, - "namespace": { - "label": "İsim Alanı" - }, "accessModes": { "label": "Erişim Modları" }, @@ -5468,12 +7395,6 @@ }, "volumeName": { "label": "Birim Adı" - }, - "status": { - "label": "Durum" - }, - "creationTimestamp": { - "label": "Oluşturuldu" } }, "table": { @@ -5482,6 +7403,29 @@ }, "error": { "internalServerError": "Kubernetes verileri alınamadı" + }, + "field": { + "name": { + "label": "İş adı" + }, + "namespace": { + "label": "İsim Alanı" + }, + "creationTimestamp": { + "label": "Oluşturuldu" + }, + "state": { + "label": "İş Durumu" + }, + "status": { + "label": "Durum" + }, + "type": { + "label": "İndirme İstemcisi türü" + }, + "architecture": { + "label": "Mimari" + } } }, "permission": { @@ -5515,71 +7459,27 @@ }, "navigationStructure": { "manage": { - "workshop": { - "label": "Workshop" - }, "label": "Yönet", - "boards": { - "label": "Paneller" - }, - "integrations": { - "label": "Entegrasyonlar", + "custom-widgets": { "edit": { - "label": "Düzenle" + "flow": { + "label": "Akış" + } }, - "new": { - "label": "Yeni" - } - }, - "search-engines": { - "label": "Arama Motorları", - "new": { - "label": "Yeni" + "workshop": { + "label": "Atölye" }, - "edit": { - "label": "Düzenle" - } - }, - "medias": { - "label": "Medyalar" - }, - "apps": { - "label": "Uygulamalar", - "new": { - "label": "Yeni" - }, - "edit": { - "label": "Düzenle" + "publish": { + "label": "Workshop'ta yayınla" } }, "users": { - "label": "Kullanıcılar", - "create": { - "label": "Oluştur" - }, "general": "Genel", - "security": "Güvenlik", - "board": "Paneller", - "groups": { - "label": "Gruplar" - }, - "invites": { - "label": "Davetler" - } + "security": "Güvenlik" }, "tools": { "label": "Araçlar", - "tasks": { - "label": "Görevler" - }, - "docker": { - "label": "Docker", - "logs": { - "label": "Günlükler" - } - }, "kubernetes": { - "label": "Kubernetes", "nodes": { "label": "Node'lar" }, @@ -5605,11 +7505,7 @@ "label": "Birimler" } }, - "logs": { - "label": "Günlükler" - }, "certificates": { - "label": "Sertifikalar", "hostnames": { "label": "Ana makine adları" } @@ -5620,12 +7516,60 @@ }, "about": { "label": "Hakkında" + }, + "assistant": { + "label": "Asistan" } } }, "search": { "placeholder": "Aramak için yaz", "nothingFound": "Hiçbir şey bulunamadı", + "modePicker": { + "search": { + "label": "Arama", + "placeholder": "Uygulamalarda, panolarda, sayfalarda, komutlarda ve tercihlerde ara" + }, + "apps": { + "label": "Uygulamalar", + "placeholder": "Uygulamalarda, panolarda ve entegrasyonlarda ara" + }, + "command": { + "label": "Komutlar", + "placeholder": "Eylemlerde ve komutlarda ara" + }, + "preferences": { + "label": "Tercihler", + "placeholder": "Tercihleri ara ve değiştir" + }, + "assistant": { + "label": "Asistan", + "placeholder": "Asistana sor" + }, + "external": { + "label": "İnternet", + "placeholder": "Harici bir arama motoruyla ara" + }, + "media": { + "label": "Medya", + "placeholder": "Bir film veya dizi ara", + "fallback": "\"{query}\" için medyada ara" + }, + "userGroup": { + "label": "Kişiler", + "placeholder": "Kullanıcılarda ve gruplarda ara" + }, + "continueWith": "Şununla devam et", + "dialogAriaLabel": "{mode} komut menüsü", + "navigationLabel": "Arama modları", + "modeAriaLabel": "{mode} modu", + "resultsAriaLabel": "{mode} sonuçları", + "footer": { + "navigate": "Gezin", + "open": "Aç", + "close": "Kapat" + } + }, "error": { "fetch": "Veriler alınırken bir hata oluştu" }, @@ -5634,7 +7578,6 @@ "help": "Uygulamalar, entegrasyonlar veya panellerde ara", "group": { "app": { - "title": "Uygulamalar", "children": { "action": { "open": { @@ -5650,7 +7593,6 @@ } }, "board": { - "title": "Paneller", "children": { "action": { "open": { @@ -5670,9 +7612,6 @@ "title": "Panel için bir eylem seçin" } } - }, - "integration": { - "title": "Entegrasyonlar" } } }, @@ -5701,9 +7640,6 @@ "newBoard": { "label": "Yeni Panel Oluştur" }, - "importBoard": { - "label": "Bir paneli içe aktar" - }, "newApp": { "label": "Yeni Uygulama Oluştur" }, @@ -5773,7 +7709,6 @@ } }, "defaultSearchEngineId": { - "label": "Öntanımlı arama motoru", "children": { "detail": { "title": "Öntanımlı arama motorunuzu seçin" @@ -5781,7 +7716,6 @@ } }, "openSearchInNewTab": { - "label": "Arama sonuçlarını yeni sekmede aç", "children": { "detail": { "title": "Arama sonuçlarını yeni sekmede aç" @@ -5789,7 +7723,6 @@ } }, "ddgBangs": { - "label": "DuckDuckGo bang'lerini etkinleştir", "children": { "detail": { "title": "DuckDuckGo bang'lerini etkinleştir" @@ -5804,6 +7737,13 @@ } } }, + "byteUnitSystem": { + "children": { + "detail": { + "title": "Veri boyutu birimlerinizi seçin" + } + } + }, "homeBoardId": { "label": "Ana Panel", "children": { @@ -5821,7 +7761,6 @@ } }, "pingIconsEnabled": { - "label": "Pingler için simge kullan", "children": { "detail": { "title": "Pingler için simge kullan" @@ -5829,7 +7768,6 @@ } }, "enableRightClickOnWidgets": { - "label": "Widget'lara sağ tıklamayı etkinleştir", "children": { "detail": { "title": "Widget'lara sağ tıklamayı etkinleştir" @@ -5857,6 +7795,7 @@ "description": "Medya talep entegrasyonlarınızı aramak için yazmaya başlayın", "disabled": { "noIntegration": "Medya aramasını etkinleştirmek için bir Overseerr, Jellyseerr veya Seerr entegrasyonu ekleyin.", + "signInRequired": "Medya istek entegrasyonlarında arama yapmak için oturum açın.", "scoped": "Bu widget'ın erişilebilir bir medya talep entegrasyonu yok." } } @@ -5873,7 +7812,6 @@ "help": "Harici bir arama motoru kullanın", "group": { "searchEngine": { - "title": "Arama Motorları", "tipDdgBangs": "İpucu: Burada DuckDuckGo bang'lerini de kullanabilirsiniz, örn. !something", "bang": { "searchWithQuery": "\"{query}\" ifadesini {label} ile ara", @@ -5924,20 +7862,6 @@ "group": { "mode": { "title": "Modlar" - }, - "help": { - "title": "Yardım", - "option": { - "documentation": { - "label": "Dokümantasyon" - }, - "submitIssue": { - "label": "Bir Hata Gönder" - }, - "discord": { - "label": "Discord Topluluğu" - } - } } } }, @@ -5949,9 +7873,10 @@ "other": { "label": "Farklı bir arama motoruyla arama yap" }, - "no-default": { - "label": "Öntanımlı arama motoru yapılandırılmadı", - "description": "Tercihlerde öntanımlı arama motoru belirleyin" + "no-engines": { + "label": "Yapılandırılmış arama motoru yok", + "descriptionCreate": "Komut menüsünden arama yapmak için bir arama motoru ekleyin", + "descriptionUnavailable": "Bir yöneticiden arama motoru yapılandırmasını isteyin" }, "search": { "label": "{name} kullanarak \"{query}\" terimini ara" @@ -6031,7 +7956,6 @@ "help": "Kullanıcı veya gruplarda ara", "group": { "user": { - "title": "Kullanıcılar", "children": { "action": { "detail": { @@ -6044,7 +7968,6 @@ } }, "group": { - "title": "Gruplar", "children": { "action": { "detail": { @@ -6068,9 +7991,6 @@ "engine": { "search": "Bir arama motoru bulun", "field": { - "name": { - "label": "İsim" - }, "short": { "label": "Kısa Yol" }, @@ -6083,12 +8003,19 @@ }, "page": { "list": { - "title": "Arama Motorları", + "ariaLabel": "Yapılandırılmış arama motorları", "noResults": { "title": "Henüz bir arama motoru yapılandırılmadı", - "action": "İlk arama motorunuzu oluşturun" + "description": "Arama motorları, Spotlight'ın bir siteye veya bağlı hizmete sorgu göndermesini sağlar.", + "action": "İlk arama motorunuzu oluşturun", + "filteredTitle": "Aramanızla eşleşen arama motoru yok", + "filteredDescription": "\"{search}\" ile eşleşen arama motoru yok. Başka bir ad veya URL deneyin." }, - "interactive": "Etkileşimli, entegrasyon kullanır" + "interactive": "Etkileşimli, entegrasyon kullanır", + "type": { + "generic": "URL şablonu", + "fromIntegration": "Entegrasyon" + } }, "create": { "title": "Yeni Arama Motoru", @@ -6107,11 +8034,9 @@ "title": "Arama motorunu düzenle", "notification": { "success": { - "title": "Değişiklikler başarıyla uygulandı", "message": "Arama motoru başarıyla kaydedildi" }, "error": { - "title": "Değişiklikler uygulanamıyor", "message": "Arama motoru kaydedilemedi" } }, @@ -6250,6 +8175,10 @@ } }, "log": { + "context": { + "widgetError": "Widget bu sırada bir hata bildirdi", + "expiredWidgetError": "Bu widget hatasıyla ilgili günlükler artık saklanmıyor" + }, "level": { "option": { "debug": "Hata ayıklama", @@ -6261,7 +8190,6 @@ }, "onboardingTour": { "learnMore": "Belgeleri oku", - "next": "İleri", "prev": "Geri", "done": "Tamam", "skip": "Turu atla", @@ -6325,5 +8253,359 @@ "description": "Renk şemanızı, dilinizi, ana panelinizi ve tercihlerinizi değiştirin. Buradan yönetim alanına da geçebilirsiniz." } } + }, + "metadata": { + "description": "*arr yığını ve tüm homelab ortamınız için kendi barındırdığınız pano. 50'den fazla hizmet, gerçek zamanlı widget'lar ve yapılandırma dosyası yok.", + "dashboardTitle": "{appName} Panosu" + }, + "assistant": { + "title": "Asistan", + "open": "Asistanı aç", + "close": "Asistanı kapat", + "minimize": "Asistanı küçült", + "spotlight": "Asistana sor", + "spotlightDescription": "Komut menüsünden ayrılmadan bir istem yazıp gönderin.", + "spotlightPrompt": { + "title": "Asistana sor", + "description": "Yukarıya bir istem yazın. Enter, istemi arka planda gönderir.", + "send": "İstemi gönder", + "empty": "Yukarıya bir istem yazın" + }, + "unavailable": { + "checking": "Asistanın kullanılabilirliği kontrol ediliyor…", + "error": "Asistanın kullanılabilirliği kontrol edilemedi. Tekrar deneyin.", + "notConfigured": "Bir yönetici önce asistanı yapılandırmalı ve etkinleştirmelidir.", + "signIn": "Asistanı kullanmak için oturum açın." + }, + "newConversation": "Yeni konuşma", + "conversations": "Konuşmalar", + "conversationActions": "Konuşma eylemleri", + "searchConversations": "Konuşmalarda ara", + "noMatchingConversations": "Eşleşen konuşma yok", + "moreActions": "Daha fazla yanıt eylemi", + "renameConversation": { + "action": "Yeniden adlandır", + "label": "Konuşma adı", + "save": "Adı kaydet", + "failedTitle": "Konuşma yeniden adlandırılamadı", + "failedDescription": "Homarr bu konuşmayı yeniden adlandıramadı. Tekrar deneyin." + }, + "deleteConversation": { + "title": "Konuşma silinsin mi?", + "description": "“{title}” ve mesajları kalıcı olarak silinecek.", + "failedTitle": "Konuşma silinemedi", + "failedDescription": "Homarr bu konuşmayı silemedi. Tekrar deneyin." + }, + "closeHistory": "Konuşma geçmişini kapat", + "openHistory": "Konuşma geçmişini aç", + "emptyTitle": "Size nasıl yardımcı olabilirim?", + "emptyDescription": "Homarr kurulumunuz hakkında soru sorun, canlı örnek verilerini inceleyin veya değişiklik yapmamı istediğinizde eylemleri onaylayın.", + "suggestions": { + "health": { + "label": "Hizmet durumunu kontrol et", + "prompt": "Entegrasyonlarımı kontrol et ve ilgilenilmesi gerekenleri özetle." + }, + "explore": { + "label": "Homarr'ımı keşfet", + "prompt": "Bu Homarr örneğinde neleri görüntüleyebileceğimi ve yönetebileceğimi göster." + }, + "media": { + "label": "Talep edilecek medya bul", + "prompt": "Talep etmek için bir film veya dizi bulmama yardım et." + }, + "style": { + "label": "Bir panoyu geliştir", + "prompt": "Bir panonun görünümünü veya özel CSS'sini geliştirmeme yardım et. Önce panolarımı göster, ardından değişikliği yaparken mevcut ayarlarımı koru." + }, + "designWidget": { + "label": "Bir widget tasarla", + "prompt": "Şunun için Özel Widget oluştur ve yükle " + } + }, + "composerPlaceholder": "Asistan'a sor…", + "runtime": { + "model": "Yapay zekâ modeli", + "searchModels": "Modelleri ara", + "noModels": "Kullanılabilir model yok", + "otherModels": "Diğer modeller", + "imageInput": "Görüntü girdisini kabul eder", + "thinking": "Düşünme modu", + "reasoning": { + "auto": "Otomatik", + "none": "Kapalı", + "minimal": "Minimum", + "low": "Düşük", + "medium": "Orta", + "high": "Yüksek" + } + }, + "providerQuota": { + "title": "Homarr sağlayıcısı", + "communityWorkshop": "Topluluk Atölyesi", + "dailyAllowance": "Günlük istek kotası", + "remainingLabel": "{remaining} / {limit} Homarr sağlayıcısı isteği kaldı", + "loading": "Homarr sağlayıcısı kotası yükleniyor", + "signInRequired": "Homarr sağlayıcısı için Atölye'de oturum açılması gerekiyor", + "signInDescription": "Ayrı günlük kotanızı almak için Topluluk Atölyesi üzerinden GitHub ile oturum açın.", + "exhaustedDescription": "Homarr sağlayıcısı kotanızı bugün için kullandınız. Kota UTC gece yarısında sıfırlanır.", + "unavailableDescription": "Atölye'de oturum açın veya Homarr sağlayıcısı kotanızın sıfırlanmasını bekleyin.", + "signIn": "GitHub ile oturum aç", + "signInError": "GitHub ile oturum açılamadı. Biraz sonra tekrar deneyin.", + "loadError": "Homarr sağlayıcısı kotası yüklenemedi.", + "reset": "{relative} sonra tarihinde sıfırlanır", + "toolCalls": "Her model isteği ve tamamlanan araç çağrısı bir istek kullanır.", + "retry": "Kotayı yeniden yükle", + "level": { + "ok": "Tamam", + "warning": "Uyarı", + "bad": "Düşük", + "dead": "Kullanılan" + } + }, + "stop": "Yanıtı durdur", + "send": "Mesaj gönder", + "copy": "Yanıtı kopyala", + "copyMessage": "Mesajı kopyala", + "editMessage": "Mesajı düzenle", + "updateMessage": "Mesajı güncelle", + "regenerate": "Yanıtı yeniden oluştur", + "helpful": "Yararlı", + "notHelpful": "Yararlı değil", + "readAloud": "Yanıtı sesli oku", + "stopReading": "Yanıtın okunmasını durdur", + "feedbackError": "Geri bildiriminiz kaydedilemedi. Tekrar deneyin.", + "exportMarkdown": "Markdown olarak dışa aktar", + "exportConversation": { + "action": "Sohbeti Markdown olarak dışa aktar", + "failedTitle": "Sohbet dışa aktarılamadı", + "failedDescription": "Homarr bu sohbeti yükleyemedi. Tekrar deneyin." + }, + "reasoning": "Düşünüyor", + "previousResponse": "Önceki yanıt", + "nextResponse": "Sonraki yanıt", + "removeAttachment": "Eki kaldır", + "downloadFile": "{name} indir", + "attachedImage": "Ekli görüntü", + "externalImageBlocked": "Gizlilik nedeniyle harici görüntü engellendi", + "image": { + "loading": "Görüntü yükleniyor", + "failed": "Bu görüntü yüklenemedi.", + "retry": "Görüntüyü tekrar dene" + }, + "quoteSelection": "Alıntıla", + "dismissQuote": "Alıntıyı kaldır", + "attachments": { + "add": "Bir görüntü veya belge ekle", + "errorTitle": "Ek eklenemedi", + "imageUnsupported": "Seçilen model görüntü girdisini desteklemiyor." + }, + "mentions": { + "menu": "Homarr bağlamı ekle", + "context": "Bağlam", + "app": "Uygulamalar", + "integration": "Entegrasyonlar", + "board": "Paneller", + "widget": "Widget'lar", + "tools": "Kullanılabilir araçlar" + }, + "markdown": { + "diagram": "Diyagram", + "renderingDiagram": "Diyagram oluşturuluyor…", + "diagramUnavailable": "Bu diyagram oluşturulamadı." + }, + "commands": { + "menu": "Asistan komutları", + "health": "Hizmet durumu denetimi hazırla", + "explore": "Bu Homarr örneğine genel bakış hazırla", + "media": "Medya araması hazırla", + "style": "Pano görünümü veya özel CSS değişikliği hazırla", + "designWidget": "Tek istemle Özel Widget oluşturma hazırla" + }, + "usage": { + "tokens": "token", + "contextWindow": "Bağlam penceresi", + "requestDetails": "İstek ayrıntıları", + "used": "Son adım", + "remaining": "Kalan", + "capacity": "Kapasite", + "input": "Giriş", + "output": "Çıkış", + "cached": "Önbelleğe alınmış girdi", + "cacheWrite": "Önbellek yazma", + "reasoning": "Akıl yürütme", + "inputShort": "girdi", + "outputShort": "çıktı", + "cachedShort": "önbelleğe alınmış", + "reasoningShort": "akıl yürütme", + "firstOutput": "İlk çıktı", + "homarrTiming": "Homarr gözlemi", + "endToEnd": "Uçtan uca", + "observedThroughput": "Gözlemlenen aktarım hızı", + "providerTiming": "Sağlayıcı tarafından bildirildi", + "loadingProviderDetails": "Oluşturma ayrıntıları yükleniyor…", + "providerDetailsPending": "OpenRouter bazı oluşturma ayrıntılarını işlemeye devam ediyor. Yeniden denemek için tekrar açın.", + "providerLatency": "Sağlayıcı gecikmesi", + "generationTime": "Oluşturma süresi", + "moderationLatency": "Moderasyon", + "providerThroughput": "Sağlayıcı aktarım hızı", + "fallbacks": "Geri dönüşler", + "fallbackLatency": "Geri dönüş gecikmesi", + "cacheDiscount": "Önbellek indirimi", + "normalizedTokens": "OpenRouter normalleştirilmiş girdi / çıktı", + "byok": "Kendi anahtarını getir (BYOK)", + "cost": "Maliyet", + "reported": "Sağlayıcı tarafından bildirildi", + "estimated": "Model fiyatlandırmasına göre tahmini", + "upstreamCost": "Üst akış çıkarımı", + "webSearches": "Web aramaları", + "finishReason": "Bitiş nedeni", + "notReported": "Bildirilmiyor", + "agentSteps": "Aracı adımları", + "step": "{number}. adım", + "generation": "Oluşturma" + }, + "toolInput": "Giriş", + "toolOutput": "Çıkış", + "toolActivity": { + "iconSearch": "“{query}” simgeleri aranıyor", + "iconBrowse": "Kullanılabilir simgelere göz atılıyor" + }, + "toolNavigation": { + "openPreview": "Önizlemeyi aç", + "openWidget": "Widget'ı aç" + }, + "webSearch": { + "title": "Web araması", + "completed": "OpenRouter bu yanıt için canlı web'de arama yaptı.", + "searches": "{count, plural, one {# arama} other {# arama}}", + "sources": "{count, plural, one {# kaynak} other {# kaynak}}" + }, + "responseError": { + "title": "Asistan işlemi tamamlayamadı", + "description": "Tekrar deneyin. Sorun devam ederse yapılandırılmış model uç noktasını doğrulaması için bir yöneticiden yardım isteyin." + }, + "toolPreparationError": { + "title": "Bu istek hazırlanamadı", + "description": "Model, tüm ayrıntıları sağlamadan durdu. Yanıtı yeniden deneyin veya isteği tekrar açıklayın. Hiçbir değişiklik yapılmadı." + }, + "busy": { + "title": "Asistan zaten çalışıyor", + "description": "Mevcut yanıtı bekleyin veya çalışmayı durdurmak için açın." + }, + "pendingAction": { + "answerTitle": "Yanıt gerekli", + "answerFallback": "Devam etmek için bir yanıt seçin", + "formTitle": "Uygulama ayrıntılarını incele", + "boardFormTitle": "Pano değişikliklerini incele", + "review": "Gözden geçir", + "sendBlocked": "Göndermeden önce bekleyen isteği çözün" + }, + "activity": { + "thinking": "Asistan düşünüyor", + "working": "İsteminiz üzerinde çalışılıyor", + "ready": "Yanıt hazır", + "completed": "Yanıtı aç", + "approval": "Onay gerekli", + "failed": "Asistanın ilgilenmesi gerekiyor", + "expand": "Asistan yanıtını aç", + "dismiss": "Asistan etkinliğini kapat" + }, + "scrollToLatest": "En yeniye kaydır", + "refresh": { + "action": "Geçerli görünümü yenile", + "working": "Geçerli görünüm yenileniyor", + "completeTitle": "Görünüm yenilendi", + "completeDescription": "Görünür Homarr verileri yeniden yüklendi.", + "failedTitle": "Görünüm yenilenemedi", + "failedDescription": "Değişiklik yine de kaydedilmiş olabilir. Yenileme eylemini tekrar deneyin." + }, + "askUser": { + "preparing": "Soru hazırlanıyor", + "answered": "Yanıtınız", + "other": "Diğer", + "otherLabel": "Yanıtınız", + "otherPlaceholder": "Başka bir yanıt yazın…", + "submit": "Yanıtı gönder", + "cancelOther": "Başka yanıtı iptal et", + "optionKind": { + "affirmative": "Onayla", + "negative": "Reddet", + "alternative": "Seçenek", + "custom": "Özel" + } + }, + "configureApp": { + "title": "Uygulama ayrıntılarını incele", + "description": "Asistan oluşturma onayı istemeden önce yerel bir simge seçin ve istediğiniz değişiklikleri yapın.", + "preparing": "Uygulama ayrıntıları hazırlanıyor", + "continue": "Bu ayrıntıları kullan", + "ready": "Uygulama ayrıntıları hazır", + "automaticContinue": "Bu uygulama ayrıntıları otomatik olarak kullanılıyor" + }, + "configureBoardSettings": { + "title": "Pano değişikliklerini incele", + "loading": "Mevcut pano ayarları yükleniyor", + "loadErrorTitle": "Pano ayarları yüklenemedi", + "loadErrorDescription": "Pano artık mevcut olmayabilir veya panoyu değiştirme izniniz olmayabilir.", + "proposedCount": "Asistan {count} alan önerdi", + "changeCount": "{count} değişiklik hazır", + "ready": "Pano değişiklikleri hazır", + "cancelled": "Mevcut pano ayarları korundu", + "noChanges": "Hiçbir ayar değiştirilmeyecek", + "keepCurrent": "Mevcut ayarları koru", + "continue": "Onaya devam et", + "automaticContinue": "Önerilen pano değişiklikleri otomatik olarak kabul ediliyor", + "resetAll": "Tüm değişiklikleri sıfırla", + "tabs": { + "css": "Özel CSS", + "appearance": "Görünüm", + "background": "Arkaplan", + "general": "Genel" + }, + "cssDescription": "Tam stil sayfasını düzenleyin. Buradan kaldırılmadığı sürece mevcut kurallar korunur.", + "cssCharacters": "{count} / 16384 karakter", + "copyCss": "CSS'yi kopyala", + "copied": "Kopyalandı", + "restoreCss": "Mevcut CSS'yi geri yükle", + "remoteCssTitle": "Bu CSS uzak bir kaynak yüklüyor", + "remoteCssDescription": "İçe aktarılan stil sayfaları ve uzak URL'ler, pano yüklendiğinde başka bir sunucuyla iletişim kurar. Devam etmeden önce bunları inceleyin." + }, + "configureWidget": { + "title": "Widget'ı incele", + "preparing": "Widget ayarları hazırlanıyor", + "review": "Widget'ı ve entegrasyonları incele", + "ready": "Widget yapılandırması hazır", + "cancelled": "Widget eklenmedi", + "automaticContinue": "Önerilen widget yapılandırması otomatik olarak kabul ediliyor", + "definitionLoadErrorTitle": "Widget ayarları yüklenemedi", + "definitionLoadErrorDescription": "Homarr bu widget'ın ayarlarını yükleyemedi. Tekrar deneyin.", + "loadErrorTitle": "Entegrasyonlar yüklenemedi", + "loadErrorDescription": "Homarr bu widget için kullanılabilir entegrasyonları yükleyemedi.", + "noIntegrationTitle": "Uyumlu bir entegrasyon gerekli", + "noIntegrationDescription": "Panoya eklemeden önce bu widget tarafından desteklenen bir entegrasyonu yapılandırın.", + "connectIntegration": "Hizmeti bağla", + "manageIntegrations": "Entegrasyonları yönet", + "skip": "Ekleme", + "errorTitle": "Widget ayarları hazırlanamadı", + "errorDescription": "Model eksiksiz bir widget yapılandırması sağlamadı. Hiçbir widget eklenmedi." + }, + "approvalRequired": "Onay gerekli", + "complete": "Tamamlandı", + "denied": "Reddedildi", + "failed": "Başarısız", + "working": "Çalışıyor", + "approvalDescription": "Çalıştırmadan önce bu değişikliği inceleyin.", + "approveAndRun": "Onayla ve çalıştır", + "deny": "Reddet", + "autoApproval": { + "label": "Otomatik onaylar", + "composerLabel": "Benim için onayla", + "title": "Otomatik onaylar", + "description": "Bu konuşma için formları otomatik olarak hazırlayın ve korumalı değişiklikleri onaylayın. Sorular yine yanıtınızı bekler ve Homarr izinleriniz geçerliliğini korur. Konuşmalar arasında geçiş yaptığınızda bu özellik kapanır.", + "enable": "Bu konuşma için etkinleştir", + "disable": "Otomatik onayları kapat", + "enabled": "Otomatik onaylar açık", + "approving": "Otomatik olarak onaylanıyor" + } } } diff --git a/packages/translation/src/lang/uk.json b/packages/translation/src/lang/uk.json index 29bd4d4ba..1f0e434d5 100644 --- a/packages/translation/src/lang/uk.json +++ b/packages/translation/src/lang/uk.json @@ -1,156 +1,246 @@ { "init": { - "step": { - "start": { - "title": "Ласкаво просимо до Homarr", - "subtitle": "Почнемо з налаштування вашого Homarr.", - "description": "Щоб почати, будь ласка, виберіть спосіб налаштування Вашого Homarr.", - "action": { - "scratch": "Почати з нуля", - "importOldmarr": "Імпорт з Homarr пре-1.0", - "restoreSqlite": "Відновлення з резервної копії SQLite", - "restoreSqliteDescription": "Завантажте повну резервну копію бази даних SQLite з попереднього екземпляра Homarr. Це відновить усі дошки, користувачів, програми, інтеграції та налаштування.", - "backToOptions": "Назад до параметрів налаштування" + "studio": { + "navigationLabel": "Ознайомлення", + "back": "Назад", + "buildBoard": "Побудуйте мою дошку", + "common": { + "unknownError": "Щось пішло не так. Ваш вибір все ще тут; спробуйте ще раз." + }, + "claim": { + "checking": "Безпека цього сеансу відкриття…", + "checkingTitle": "Підготовка безпечних налаштувань", + "lockedTitle": "У іншому браузері", + "lockedDescription": "Продовжуйте там, або чекайте завершення своєї безпечної першочергової сесії, перш ніж спробувати ще раз.", + "signInTitle": "Потрібно ввійти адміністратора", + "signInDescription": "Адміністратор уже існує. Увійдіть для відновлення налаштування без надання даних або доступу до сервісу.", + "signIn": "Увійти та продовжити", + "errorTitle": "Налаштування не може бути захищене", + "errorDescription": "Перезавантажте сторінку, щоб повторити вдалі сеанси в першому запуску." + }, + "navigation": { + "essentials": "Необхідності", + "discover": "Відкрийте для себе", + "connect": "Підключитися", + "board": "Дошка", + "extend": "Продовжити", + "review": "Огляд" + }, + "welcome": { + "title": "Ласкаво просимо додому.", + "description": "Ласкаво просимо на Homarr v{version}. Ми проведемо вас крізь основи і допоможемо вам побудувати свою першу дошку.", + "start": "Початок роботи", + "restore": "Відновити з резервної копії", + "restoreTitle": "Відновити з резервної копії", + "restoreDescription": "Повна резервна копія SQLite відновлює дошки, люди, програми, інтеграції і параметри. Homarr перевіряє їх перед заміною нічого.", + "errorTitle": "Налаштування не вдалося запустити", + "errorDescription": "Ваш варіант налаштування все ще тут. Спробуйте ще раз або оновіть сторінку, якщо продовжиться." + }, + "account": { + "title": "Створити адміністратора", + "description": "Вкажіть облікові дані для вашого адміністратора.", + "username": "Ім'я користувача адміністратора", + "passwordHint": "Потрібна лише мінімум 8-ти символів. Інші перевірки сили пароля є пропозиціями.", + "create": "Створити адміністратора", + "errorTitle": "Не вдалося створити адміністратора", + "recoveryTitle": "Створено обліковий запис адміністратора", + "recoveryDescription": "Автоматичний вхід не завершений. Увійдіть за допомогою облікових даних адміністратора для продовження налаштування.", + "recoveryAction": "Увійти та продовжити", + "unknownError": "Адміністратор не був створений." + }, + "externalGroup": { + "title": "Під'єднайте вашу групу адміністратора", + "description": "Використовуйте точну назву групи, яку відправляють LDAP або OIDC. Члени цієї групи отримують доступ адміністратора.", + "name": "Зовнішня група адміністратора", + "nameDescription": "Це чутливий до регістру і має відповідати вашому провайдеру ідентифікації.", + "continue": "Зберегти групу та продовжити", + "errorTitle": "Не вдалося зберегти групу", + "unknownError": "Неможливо зберегти групу адміністраторів." + }, + "essentials": { + "title": "Запускати зі стандартних значень", + "description": "Встановіть мову, і подивіться всі бачить спочатку, а потім дайте Гомарру шаблон адрес, який використовуються вашими сервісами.", + "language": "Стандартна мова", + "theme": "Стандартна тема", + "themeAuto": "Система", + "themeLight": "Світла", + "themeDark": "Темна", + "serverOriginHelp": "Homarr використовує цю адресу для попереднього заповнення URL-адрес. Ви все ще можете відредагувати всі сервіси.", + "serverDescription": "Це ярлик, а не обмеження. Кожна виявлена служба залишається редагованою.", + "serverOrigin": "Домен, IP або шлях до зворотного проксі", + "serverOriginDescription": "Приклад: home.lan, 192.168.1.10 або https://home.example.com/services. Виберіть, як правильно додається кожна послуга.", + "analytics": "Поділитися анонімною аналітикою продукту", + "analyticsDescription": "Допомагає Головному поліпшенню функцій. Облікові дані сервісів не надсилаються." + }, + "discover": { + "title": "Погляньте, на що ця інсталяція дійсно може досягти", + "description": "Homarr перевіряє можливості в місці. Недоступний Docker або Kubernetes context ніколи не блокує ручну настройку.", + "database": "База даних", + "docker": "Докер і сумісні сокети", + "kubernetes": "Kubernetes", + "assistantWorkshop": "Помічник і Майстерня", + "found": "Знайдені додаткові програми {integrations} та {apps}", + "retryKubernetes": "Перевірити Kubernetes знову", + "retryWorkshop": "Ще раз перевірити Майстерню", + "unknownVersion": "невідома версія", + "kubernetesAvailable": "Підключено до Kubernetes {version}", + "kubernetesDisabled": "Не ввімкнено; продовжити роботу з Docker або ручних сервісами", + "kubernetesUnavailable": "Kubernetes увімкнено, але це неможливо отримати з цього процесу Homarr", + "workshopAvailable": "Громадська Майстерня та розміщення асистентів доступні", + "workshopUnavailable": "Місцеві та користувацькі провайдери залишаються доступними", + "partialTitle": "Не вдалося відсканувати деякі джерела", + "partialDescription": "Результати з доступних хостів зберігаються. Перевірте дозволи сокету або додайте послуги вручну в наступному розділі.", + "status": { + "checking": "Перевірка доступності…", + "available": "Доступно", + "partial": "Частково доступно", + "empty": "Доступний, немає відповідних запущених сервісів", + "disabled": "Вимкнено конфігурацією сервера", + "unavailable": "Недоступно для цього процесу Homarr" } }, - "import": { - "title": "Імпорт даних", - "subtitle": "Ви можете імпортувати дані з наявного екземпляра Homarr.", - "dropzone": { - "title": "Перетягніть zip-файл сюди або клікніть для пошуку", - "description": "Завантажений zip буде оброблений і ви зможете вибрати що ви хочете імпортувати" + "connect": { + "title": "Підключіть те, що зробить дошку корисною", + "description": "Вибрати декілька служб одразу. Мітки Docker мають пріоритет, зображення заповнюють прогалини, а також кожне посилання і облікові дані можуть бути переглянуті.", + "discoveredIntegrations": "Виявлені екземпляри інтеграції ({count})", + "detectedIntegrationLabel": "Імпорт {name}виявилося як {kind}", + "detectedAppLabel": "Імпортувати виявлений додаток {name}", + "otherIntegrations": "Додати ще одну інтеграцію", + "configureIntegrations": "Налаштування інтеграції", + "discoveredApps": "Виявлені програми ({count})", + "appAddressRequired": "Додайте адресу для {name}або видаліть її з виділеного.", + "empty": "Інтеграції не вибрані. Homarr як і раніше створить корисну стартову дошку з загальними віджетами.", + "dockerSource": "Docker", + "manualSource": "Вручну", + "url": "Сервіс URL", + "noCredentials": "Немає облікових даних", + "noCredentialsDescription": "Ця інтеграція не потребує облікових даних.", + "credentialMethod": "Спосіб вводу облікових даних", + "getApiKey": "Відкрити налаштування ключа API для цієї служби", + "openGuide": "Відкрити керівництво з налаштування для цієї служби", + "testConnection": "Перевірка підключення", + "testSuccess": "З'єднання працює", + "testSuccessDescription": "Homarr підключений до поточної адреси та облікових даних.", + "testError": "Помилка підключення", + "testErrorDescription": "Перевірте адресу та облікові дані, потім повторіть спробу.", + "needsConfiguration": "Потрібна конфігурація", + "tested": "Перевірка підключення", + "testFailed": "Помилка тестування підключення", + "incompleteConfirmation": "Незавершена інтеграція буде пропущена. Продовжити без них?" + }, + "board": { + "title": "Об’єднайте дошку до її будівництва", + "description": "Homarr створює захищені захищені мобільні та базові макети, потім розміщує додатки й сумісні віджети із вибраних сервісів.", + "target": "Дошка для налаштування", + "targetDescription": "Оберіть точну квитанцію, яку слід оновити.", + "targetPlaceholder": "Виберіть дошку", + "targetRequired": "Виберіть дошку для налаштування перед продовженням.", + "name": "Назва дошки", + "nameDescription": "Використовується в URL дошки; літери, цифри, тире та підкреслення тільки.", + "nameRequired": "Введіть назву дошки перед продовженням.", + "primaryColor": "Основний колір", + "secondaryColor": "Вторинний колір", + "resetColors": "Скинути кольори", + "radius": "Радіус кута віджета", + "radiusOptions": { + "xs": "Теренд", + "sm": "Тонкий", + "md": "Збалансований", + "lg": "Округлі", + "xl": "М'яко" }, - "fileInfo": { - "action": { - "change": "Змінити файл" - } + "columns": "Стовпці дошки", + "columnsDescription": "Колонки визначають горизонтальну сітку, яка використовується для розмірів та позиціонування. 12 - це достатньо для більшості людей.", + "columnCount": "{count, plural, one {# стовпець} other {# стовпчиків}}", + "leftSidebar": "Left sidebar", + "rightSidebar": "Права бічна панель", + "previewLabel": "Попередній перегляд першого макету дошки" + }, + "extend": { + "title": "Розширені функції", + "tabsLabel": "Помічник, Майстерня та налаштування MCP", + "assistant": "Помічник", + "workshop": "Майстерня", + "assistantSetup": { + "loginTitle": "Потрібно ввійти адміністратора", + "loginDescription": "Ключі провайдера та доступ до моделі мають привілегії. Завершіть налаштування, увійдіть та Homarr відкриє конфігурацію Асистента.", + "loginAction": "Увійдіть, щоб налаштувати помічника" }, - "importSettings": { - "title": "Імпортувати налаштування", - "description": "Конфігурація імпорту" + "workshopSetup": { + "title": "Гомарр-Майстерня", + "description": "Переглядайте Користувальницькі Віджети спільноти, огляньте потрібні можливості, встановіть їх та публікуйте власну роботу без копіювання коду між серверами.", + "available": "Доступно", + "checking": "Перевірка…", + "unavailable": "Unavailable", + "discoverTitle": "Відкрийте для себе", + "discoverDescription": "Знайти віджети побудовані для справжніх робочих процесів самозапуску.", + "installTitle": "Перегляд та встановлення", + "installDescription": "Перед додаванням будь-яких метаданих і конфігурацій.", + "publishTitle": "Поділитись", + "publishDescription": "Опублікувати повторно застосовувані віджети до спільноти.", + "browse": "Огляд Майстерні" }, - "boardSelection": { - "title": "Знайдено {count} дощок", - "description": "Оберіть всі дошки з розміром які ви хочете імпортувати", - "action": { - "selectAll": "Вибрати все", - "unselectAll": "Прибрати всі" - } - }, - "summary": { - "title": "Підсумок імпорту", - "description": "У наведеному нижче розділі ви можете побачити, що буде імпортовано", - "action": { - "import": "Підтвердить імпорт та продовжуйте" - }, - "entities": { - "apps": "Додатки", - "boards": "Дошки", - "integrations": "Інтеграції", - "credentialUsers": "Облікові записи" - } - }, - "tokenModal": { - "title": "Введіть токен імпорту", - "field": { - "token": { - "label": "Токен", - "description": "Введіть показаний токен імпорту з вашого попереднього екземпляра homarr" - } - }, - "notification": { - "error": { - "title": "Невірний токен", - "message": "Введений вами токен невірний" - } - } + "mcpSetup": { + "title": "Омар MCP", + "description": "Підключіть Claude, Codex, або іншого клієнта MCP до інструментів, які використовують Homarr. Ключі API підтримують доступ до явного і відкликають.", + "endpoint": "Потокова кінцева точка HTTP", + "keyTitle": "Скопіюйте цей ключ зараз", + "keyDescription": "Для безпеки, Homarr не може показати цей ключ API знову.", + "copyKey": "Копіювати ключ API", + "createKey": "Створити ключ MCP API", + "errorTitle": "Не вдалося створити ключ API MCP", + "loginRequired": "Увійдіть як адміністратор після встановлення, щоб створити ключ API.", + "configuration": "Налаштування клієнта", + "copy": "Копіювати конфігурацію", + "copied": "Скопійовано", + "advanced": "Відкрийте інструменти MCP, дозволи та налаштування" } }, - "user": { - "title": "Адміністратор", - "subtitle": "Вкажіть облікові дані для вашого адміністратора.", - "notification": { - "success": { - "title": "Користувача створено", - "message": "Користувача успішно створено" - }, - "error": { - "title": "Не вдалося створити користувача" - } - } - }, - "group": { - "title": "Зовнішня група", - "subtitle": "Вкажіть групу, яку слід використовувати для зовнішніх користувачів.", - "form": { - "name": { - "label": "Назва групи", - "description": "Ім'я має відповідати групі адміністраторів зовнішнього провайдера" - } - } - }, - "settings": { - "title": "Налаштування", - "subtitle": "Налаштування сервера." - }, - "integrations": { - "title": "Інтеграції", - "subtitle": "Виберіть сервіси, якими ви користуєтеся.", - "description": "Виберіть інтеграції, які ви хочете під'єднати. Ми автоматично налаштуємо вашу інформаційну панель з відповідними віджетами.", - "action": { - "continue": "Продовжити", - "skip": "Пропустити поки що" - }, - "configure": { - "progress": "{current} з {total}", - "skip": "Пропустити цю інтеграцію", - "finishing": "Налаштування панелі інструментів...", - "error": { - "title": "Не вдалося налаштувати", - "message": "Під час налаштування вашої інформаційної панелі сталася помилка. Спробуйте ще раз." - }, - "helpers": { - "tooltip": "Помічники URL-адрес", - "description": "Ці помічники намагаються вгадати URL-адресу ваших послуг. Якщо це не працює, просто введіть адресу вручну." - } - }, - "urlTemplate": { - "label": "Базовий URL", - "placeholder": "homelab.local або 192.168.1.1", - "hint": "Введіть свій базовий домен або IP-адресу для автоматичного заповнення URL-адрес інтеграції", - "warning": "Якщо встановити базову URL-адресу зараз, усі URL-адреси інтеграції будуть автоматично заповнені, що заощадить ваш час під час налаштування", - "preview": "напр. {example}", - "mode": { - "subdomain": "Субдомен", - "hostPort": "Хост:Порт" - } - }, - "docker": { - "detected": "Docker виявив {count} служб", - "detectedBreakdown": "{integrations} інтеграцій - {apps} програм", - "summary": "Homarr виявив {apps} програми, {integrations} з яких мають вбудовану інтеграцію", - "appBadge": "Додаток", - "appSectionLabel": "Додатки для додавання на інформаційну панель (вибрано {count})", - "scanning": "Сканування Docker...", - "scanningDescription": "Пошук запущених контейнерів у вашій системі" + "review": { + "title": "Одна плата, побудована на обслуговуванні", + "description": "Протести на Homarr незбережені підключення, імпортуйте вибрані програми, викликає зовнішній вигляд і макети, а потім відкриває точну дошку яку він налаштовував.", + "board": "Перша дошка", + "columns": "Стовпці дошки", + "columnsValue": "{count, plural, one {# стовпець} other {# стовпчиків}}", + "sidebars": "Бічні панелі", + "sidebarsValue": "{count, plural, =0 {None} one {# sidebar} other {# sidebars}}", + "layouts": "Адаптивні макети", + "layoutsValue": "Мобільний + Базовий", + "integrations": "Інтеграції", + "integrationsValue": "{count, plural, =0 {Жодна обрана} one {# інтеграція} other {# інтеграція}}", + "apps": "Плитки додатку", + "appsValue": "{count, plural, =0 {Стартувати додатки тільки} one {# плитка застосунку} other {# плитки застосунку}}", + "language": "Мова", + "theme": "Тема", + "themeAuto": "Системні налаштування", + "themeLight": "Світла", + "themeDark": "Темна", + "colors": "Колір дошки", + "radius": "Радіус віджета", + "automaticTitle": "Що створить Гомарр", + "automaticDescription": "Сумісні віджети, іконки, посилання до додатку, інтеграційні зв'язки та реагне розміщення надходять із спільного каталогу Homarr. Ви можете редагувати кожен результат пізніше.", + "dockerWarningTitle": "Деякі мітки Docker були змінені під час налаштування", + "dockerWarningDescription": "{count, plural, one {# вибраний результат Docker не може бути застосований через зміну сервісу, націлений на іншу дошку, або його віджет був несумісний з} other {# вибраних результатів Docker не можуть бути застосовані через зміну служб, націлені на іншу дошку, або їх віджети несумісні}}", + "errorTitle": "Дошка не може бути побудована", + "progress": { + "applying": "Тестування підключень і побудова вашої дошки", + "done": "Ваша плата готова" } }, "finish": { - "title": "Завершити налаштування", - "subtitle": "Все готово!", - "description": "Ви завершили процес налаштування. Тепер ви можете почати використовувати Homarr. Виберіть наступну дію:", - "action": { - "goToBoard": "Перейти на {name} дошку", - "createBoard": "Створіть свою першу дошку", - "inviteUser": "Запросити інших користувачів", - "docs": "Ознайомитися з документацією" - } + "title": "Ваша перша плата готова.", + "description": "Homarr з'єднав вибрані вами частини та зберігши їх у редакторі. Зараз відкривайте дошку (поки що короткий огляд в продукті) покаже вам режим редагування, віджети, макети і пошук.", + "openBoard": "Відкрити мою дошку", + "manageTitle": "Керувати", + "manageDescription": "Розширені налаштування додатків, інтеграцій, користувачів і параметрів сервера.", + "workshopTitle": "Майстерня", + "workshopDescription": "Відкрийте для себе та встановіть користувацькі віджети спільноти.", + "docsTitle": "Вивчити Homarr", + "docsDescription": "Прочитайте фокусовані інструкції для дошк, віджетів, інтеграцій та інструментів." } - }, - "backToStart": "На початок" + } }, "user": { - "title": "Користувачі", "name": "Користувач", "page": { "login": { @@ -159,12 +249,10 @@ }, "invite": { "title": "Приєднатися до Homarr", + "titleWithAppName": "Приєднатися до {appName}", "subtitle": "Ласкаво просимо до Homarr! Створіть обліковий запис", + "subtitleWithAppName": "Ласкаво просимо на {appName}! Будь ласка, створіть свій обліковий запис", "description": "Вас запросив {username}" - }, - "init": { - "title": "Нова інсталяція Homarr", - "subtitle": "Будь ласка, створіть користувача-адміністратора" } }, "field": { @@ -192,12 +280,17 @@ "previousPassword": { "label": "Старий пароль" }, - "homeBoard": { - "label": "Домашня дошка" - }, "pingIconsEnabled": { "label": "Використовувати значки для ping" }, + "byteUnitSystem": { + "label": "Одиниці розміру даних", + "description": "Виберіть, як Homarr відображає розмір байтів та бітові ставки. Стани завжди використовують десяткові одиниці.", + "options": { + "binary": "Двійковий", + "decimal": "Десятковий" + } + }, "enableRightClickOnWidgets": { "label": "Увімкнути клацанням правою кнопкою миші на віджетах", "description": "Показувати контекстне меню Homarr при клацанні правою кнопкою миші на віджеті. Вимкніть, щоб використовувати меню браузера за замовчуванням (наприклад, «Відкрити посилання в новій вкладці»)." @@ -247,7 +340,6 @@ } } }, - "create": "Створити користувача", "changePassword": { "label": "Змінити пароль", "notification": { @@ -259,56 +351,6 @@ } } }, - "changeHomeBoard": { - "notification": { - "success": { - "message": "Домашню дошку змінено" - }, - "error": { - "message": "Не вдалося змінити домашню дошку" - } - } - }, - "changeSearchPreferences": { - "notification": { - "success": { - "message": "Налаштування пошуку успішно змінено" - }, - "error": { - "message": "Не вдалося змінити налаштування пошуку" - } - } - }, - "changeFirstDayOfWeek": { - "notification": { - "success": { - "message": "Початок тижня успішно змінено" - }, - "error": { - "message": "Не вдається змінити перший день тижня" - } - } - }, - "changePingIconsEnabled": { - "notification": { - "success": { - "message": "Іконки ping перемкнуто успішно" - }, - "error": { - "message": "Не вдалося перемикнути ping-іконки" - } - } - }, - "changeDdgBangs": { - "notification": { - "success": { - "message": "Чубчик DuckDuckGo успішно змінено" - }, - "error": { - "message": "Неможливо перемкнути чубчик DuckDuckGo" - } - } - }, "manageAvatar": { "changeImage": { "label": "Змінити зображення", @@ -338,16 +380,6 @@ } } }, - "editProfile": { - "notification": { - "success": { - "message": "Профіль оновлено" - }, - "error": { - "message": "Не вдалося оновити профіль" - } - } - }, "delete": { "label": "Видалити користувача назавжди", "description": "Видаляє цього користувача, включаючи його налаштування. Не буде видалено жодної дошки. Користувач не буде сповіщений.", @@ -356,18 +388,13 @@ "select": { "label": "Вибрати користувача", "notFound": "Користувача не знайдено" - }, - "transfer": { - "label": "Виберіть нового власника" } } }, "group": { - "title": "Групи", "name": "Група", "search": "Знайти групу", "field": { - "name": "Ім’я", "members": "Учасники", "homeBoard": { "label": "Домашня дошка", @@ -388,6 +415,19 @@ } } }, + "custom-widget": { + "title": "Користувальницькі віджети", + "item": { + "manage": { + "label": "Керування користувацькими віджетами", + "description": "Дозволити учасникам створювати, змінювати та видаляти користувацькі визначення віджетів" + }, + "secret-write": { + "label": "Налаштування користувацьких секретів віджетів", + "description": "Дозволити учасникам та їх ключам встановити зашифровані облікові дані користувацького віджета" + } + } + }, "app": { "title": "Додатки", "item": { @@ -493,6 +533,35 @@ "description": "Дозволити учасникам керувати та видаляти будь-які пошукові системи" } } + }, + "matrix": { + "none": "Немає доступу", + "impliedHint": "Також надходи: {permissions}", + "grantedViaAdmin": "Адміністратори вже мають. Встановіть \"Адміністратора для налаштування його окремо.", + "preset": { + "label": "Шаблони", + "viewer": "Переглядач", + "viewerDescription": "Тільки для читання: перегляд дошок та медіа, використання програм та інтеграцій, які вже існують.", + "editor": "Редактор", + "editorDescription": "Щоденне управління: створювати та редагувати дошки, додатки, інтеграції та пошукові сервіси.", + "admin": "Адміністратор", + "adminDescription": "Необмежений доступ до кожної функції і налаштування, включаючи управління користувачем.", + "custom": "Користувацька" + }, + "effective": { + "title": "Ефективні дозволи", + "description": "Повний дедубльований набір дій, які можуть виконати, включаючи дозволи, надані непрямо.", + "empty": "Немає вибраних дозволів" + }, + "noneDescription": "Учасники не отримують доступу до цієї області.", + "level": { + "view": "Вигляд", + "use": "Використати", + "interact": "Взаємодіяти", + "modify": "Змінити", + "full": "Повна" + }, + "capabilityIncluded": "Вже включено «{level}”" } }, "memberNotice": { @@ -607,21 +676,24 @@ "search": "Пошук додатків", "page": { "list": { - "title": "Додатки", + "ariaLabel": "Настроєні додатки", "noResults": { "title": "Поки що немає додатків", - "action": "Створити свій перший додаток" + "description": "Додатки це посилання на сервіси та інструменти, які ви хочете на своїх дошках.", + "action": "Створити свій перший додаток", + "filteredTitle": "Жодна програма не відповідає вашому пошуку", + "filteredDescription": "Немає додатків з відповіддю \"{search}\". Спробуйте інше ім'я або URL.", + "createOnlyTitle": "Ви можете додавати лише програми", + "createOnlyDescription": "Ваші права дозволяють створювати програми, але не переглядайте існуючі. Зверніться до адміністратора для управління додатками, щоб побачити повний список." } }, "create": { "title": "Новий додаток", "notification": { "success": { - "title": "Успішно", "message": "Додаток створено" }, "error": { - "title": "Не вдалося створити", "message": "Не вдалося створити додаток" } } @@ -630,11 +702,9 @@ "title": "Редагувати додаток", "notification": { "success": { - "title": "Зміни застосовано", "message": "Додаток збережено" }, "error": { - "title": "Не вдалося застосувати зміни", "message": "Не вдалося зберегти додаток" } } @@ -644,26 +714,18 @@ "message": "Ви дійсно бажаєте видалити додаток {name}?", "notification": { "success": { - "title": "Успішно видалено", "message": "Додаток видалено" }, "error": { - "title": "Не вдалося видалити", "message": "Неможливо видалити додаток" } } } }, "field": { - "name": { - "label": "Ім’я" - }, "description": { "label": "Опис" }, - "url": { - "label": "URL-адреса" - }, "useDifferentUrlForPing": { "checkbox": { "label": "Використовуйте іншу URL-адресу для ping", @@ -678,44 +740,582 @@ "search": "Пошук програми", "noResults": "Результатів немає", "action": "Оберіть {app}", - "title": "Оберіть додаток, щоб додати на цю дошку" + "title": "Оберіть додаток, щоб додати на цю дошку", + "toggle": "Натисніть для вибору", + "selected": "Вибрано", + "multiple": "Додати {count}", + "selectedCount": "{count, plural, one {# вибрано} other {# вибрано}}", + "appsSelected": "{count, plural, one {# додаток вибрано} other {# програм вибрано}}", + "selectMultiple": "Вибрати кілька", + "cancelMultiple": "Вийти з множинного вибору", + "customApplication": "Користувацька програма", + "application": "Програма" }, "create": { "title": "Створити новий додаток", "description": "Створити новий додаток ", "action": "Відкрийте створення додатку" - }, - "add": "Додати додаток" + } } }, + "tips": { + "dismiss": "Відхилити підказку", + "multiSelectApps": "Порада: Утримуйте Ctrl / TouchPal, щоб одночасно вибрати декілька програм" + }, "customWidget": { + "secretEntry": { + "title": "Налаштувати джерело API", + "description": "Підтвердіть URL-адресу сервера та введіть облікові дані. Секретні значення шифруються Homarr і ніколи не повертаються до запитуючого агента.", + "loading": "Завантаження захищеного запиту…", + "applying": "Застосування конфігурації… Тримайте цю сторінку відкритою.", + "saved": "API джерело налаштовано. Ви можете закрити цю сторінку.", + "unavailable": "Запит недоступний", + "saveError": "Не вдалося налаштувати джерело API", + "source": "Джерело API: {name}", + "baseUrl": "URL-адреса сервера", + "networkScope": "Доступ до мережі", + "save": "Зберегти конфігурацію API", + "expires": "Термін дії цього одноразового запиту спливає о {time}." + }, "page": { "list": { - "title": "Власні віджети" + "noResults": "Поки що немає власних віджетів. Створіть свій перший!", + "noDescription": "Без опису", + "enabled": "Увімкнено", + "disabled": "Вимкнено", + "disabledDescription": "Цей віджет залишається налаштованим, але не буде завантажуватись на будь-який дошку.", + "requestCount": "{count, plural, one {# запит} other {# запитів}}", + "invalidDefinition": "Неправильне визначення", + "migrationRequired": "Потрібна міграція", + "migrationInstructions": "Відкрити дії, щоб скопіювати або експортувати оригінальне визначення v1 для ручного відновлення. Ви також можете використовувати міграційний запит з LLM. Існуючі місця посадки продовжують працювати після міграції.", + "missingCredentials": "{count, plural, one {Облікові дані відсутні} other {# реквізити відсутні}}", + "missingCredentialsDescription": "{count, plural, one {Для цього віджету все ще потрібно одне облікові дані} other {Цей віджет все ще потребує # облікових даних.}} Виберіть цей значок, щоб налаштувати URL та зашифровані значення." + }, + "create": { + "title": "Створити власний віджет", + "subtitle": "Визначте URL-адресу API, автентифікацію та спосіб показу даних відповіді." + }, + "tabs": { + "ariaLabel": "Користувацькі розділи віджетів", + "installed": "Встановлено", + "workshop": "Майстерня" + } + }, + "action": { + "pasteImportHint": "Вставити повний користувальницький JSON віджета за допомогою Ctrl+V або Command+V", + "delete": "Видалити власний віджет", + "deleteConfirm": "Ви впевнені, що хочете видалити \"{name}\"? Цю дію неможливо скасувати.", + "export": "Експорт", + "duplicate": "Дублікат", + "aiPrompt": "Дизайн з ШІ", + "copyAiPrompt": "Копіювати запит AI", + "enable": "Увімкнути", + "disable": "Вимкнути", + "menu": "Дії", + "downloadSkill": "Переглянути власні Вміння Віджета", + "publishWorkshop": "Опублікувати в Майстерні", + "migrate": "Перенесення користувацького віджета", + "configureSources": "Налаштування джерел", + "copyLegacyDefinition": "Копіювати оригінальний вміст віджета", + "exportLegacyDefinition": "Експортувати оригінальний вміст віджета", + "copyMigrationPrompt": "Скопіювати запит на міграцію по LLM", + "pasteMigration": "Вставити зміщений віджет", + "importMigration": "Імпортувати перенесений JSON файл" + }, + "sourceSetupDialog": { + "title": "Налаштування джерел віджетів", + "description": "Повторіть, куди цей віджет з'єднує його і додає або замінює зашифровані облікові дані.", + "credentialsRequired": "Запити не виконуватимуться, доки додаються необхідні облікові дані.", + "save": "Зберегти конфігурацію" + }, + "field": { + "description": "Опис" + }, + "editor": { + "errorBoundary": { + "title": "Сталася помилка" + }, + "action": { + "components": "Компоненти", + "format": "Форматувати", + "insertStarter": "Insert starter", + "redo": "Повторити дію", + "copied": "Скопійовано", + "schema": "Схема" + }, + "reference": { + "minimal": "Мінімальний приклад", + "full": "Повний приклад" + }, + "componentReference": { + "search": "Пошук компонентів", + "empty": "Немає відповідних компонентів", + "count": "{count, number} доступні компоненти" + }, + "status": { + "errors": "{count, number} помилки", + "warnings": "{count, number} попередження", + "ready": "Проблеми не знайдено", + "position": "Ln {line, number}, Col {column, number}", + "characters": "{count, number} символи", + "charactersWithLimit": "{count, number} / {limit, number}" + }, + "diagnostics": { + "title": "Діагностика шаблону", + "line": "Рядок {line, number}", + "ast": "{value}", + "bindingTypeConflict": "Вхідний \"{value}є спільним контролем з несумісними типами значень.", + "runtimeBindingTypeConflict": "Вхідний \"{value}\" прив'язаний як {firstType} і {secondType}.", + "dynamicRequestId": "Потрібен текстовий запит. Ідентифікатори динамічного запиту не приймаються.", + "dynamicInputBinding": "Потрібне літерне ім'я для бінгу.", + "inlineRequestProps": "Мережеві компоненти приймають запит Id або параметри; вбудована URL-адреса, метод, заголовок та об'єкти тіла заблоковані.", + "invalidRequestManifest": "Іменовані запити мають бути допустимою мапою. {value}", + "missingRequestId": "Цей мережевий компонент потребує конкретного запиту.", + "templateEmpty": "Введіть шаблон JSX в JSX.", + "templateTooLong": "Шаблон перевищує обмеження з 50 000 символів.", + "unknownRequest": "Немає запиту на ім'я з ID \"{value}\" існує." + } + }, + "workbench": { + "configure": "Настроїти", + "sectionNavigation": "Користувацькі розділи віджетів", + "widgetPreview": "Попередній перегляд віджета", + "generalInformation": "Загальна інформація", + "invalidWidget": "Невірний віджет", + "section": { + "general": "Загальна", + "sources": "Джерела API", + "requests": "Запити", + "options": "Опції", + "jsx": "JSX", + "preview": "Попередній перегляд" + }, + "status": { + "unsaved": "Незбережені зміни", + "invalid": "Потребує уваги", + "ready": "Готово" + }, + "saveError": { + "title": "Віджет не збережено", + "description": "Виправляти помилки перевірки і зберегти ще раз.", + "more": "+{count} більше помилок відображається на робочому столі.", + "errors": "Помилки при ліквідації", + "copy": "Копіювати помилки", + "copied": "Помилки скопійовано" + }, + "action": { + "preview": "Тест та перегляд", + "previewLoading": "Тестування запитів" + }, + "requests": { + "title": "Іменовані запити і дії", + "label": "Запити", + "description": "Завдання завантажують дані; дії виконуються лише після взаємодії користувача. Будь-який метод HTTP діє для подібного роду." + }, + "options": { + "title": "Параметри віджета" + }, + "builder": { + "advancedManifest": "Розширений сирий маніфест", + "advancedJson": "Розширений JSON маніфесту", + "manifestFilename": "widget.json", + "request": "Запит {count, number}", + "requestId": "Номер запиту", + "type": "Тип клієнта", + "method": "Метод", + "source": "Джерело API", + "run": "Ран", + "runLoad": "Коли віджет завантажується", + "runManual": "З анкети", + "permission": "Дозвіл", + "path": "Шлях", + "pathDescription": "Використовуйте '{option:name}' для варіантів віджета та '{param:name}' для значення запрошення.", + "requestDetails": "Query, тіло і поведінка", + "queryValues": "Значення запиту", + "queryKey": "Ключ запиту", + "queryKeyInvalid": "Використайте унікальний ID що починається з букви і містить тільки літери, цифри - або _.", + "valueSource": "Джерело значення", + "literal": "Літерал", + "widgetOption": "Опції віджета", + "invocationParameter": "Параметр запрошень", + "option": "Опція", + "parameterName": "Ім'я параметра", + "value": "Цінність", + "removeQueryValue": "Видалити значення запиту", + "addQueryValue": "Додати значення запиту", + "jsonBody": "Тіло JSON", + "jsonBodyDescription": "Необов'язково. Вставте посилання $option та $param в будь-яку глибину.", + "insertOptionReference": "Вставте посилання на параметр", + "insertParameterReference": "Вставити посилання на параметр", + "confirmation": "Повідомлення підтвердження", + "invalidation": "Оновитися після успішного", + "invalidationDescription": "ID запитів, розділених комами", + "noAuth": "Відправляти без аутентифікації", + "moveRequestUp": "Перемістити запит вгору", + "moveRequestDown": "Перемістити запит вниз", + "removeRequest": "Видалити запит", + "addRequest": "Додати запит", + "optionName": "Назва опції", + "label": "Мітка", + "control": "Контроль", + "description": "Опис", + "default": "Типово", + "optionDetails": "Обмеження і динамічний вибір", + "minimum": "Мінімум", + "maximum": "Максимум", + "step": "Крок", + "choiceLabel": "Вибір мітки", + "choiceValue": "Значення вибору", + "newChoice": "Новий вибір", + "addChoice": "Додати вибір", + "removeChoice": "Видалити вибір", + "choicesRequest": "Завантажити вибір із запиту", + "itemsPath": "Шлях до елементів", + "itemsPathPlaceholder": "елементи (не обов'язково)", + "valuePath": "Значення шляху", + "labelPath": "Шлях до мітки", + "group": "Група", + "advancedOption": "Розширена опція", + "moveOptionUp": "Перемістити налаштування вгору", + "moveOptionDown": "Перемістити вниз", + "removeOption": "Видалити параметр", + "addOption": "Додати опцію", + "invalidJson": "Невірний JSON", + "invalidWidget": "Невірний віджет" + }, + "jsx": { + "title": "Шаблон JSX", + "label": "Шаблон" + }, + "sources": { + "title": "Джерела API і облікові дані", + "newName": "API {count, number}", + "duplicateSourceId": "Ідентифікатори джерел API повинні бути унікальними.", + "credentialRemoved": "Облікові дані видалені", + "credentialRemovedDescription": "Збережене значення видалено.", + "primary": "Основний API", + "id": "ID джерела", + "name": "Назва", + "baseUrl": "Базовий URL", + "baseUrlError": { + "invalid": "Введіть повну URL-адресу.", + "protocol": "Використовувати HTTP-або HTTPS URL.", + "credentials": "Видалити ім'я користувача і пароль з цієї URL-адреси. Додайте наступні облікові дані.", + "queryOrFragment": "Видалити рядок запиту або фрагмент з цієї базової URL-адреси. Додайте значення запиту до імені запиту." + }, + "networkScope": "Доступ до мережі", + "authentication": "Аутентифікація", + "headerName": "Назва заголовка", + "queryParameter": "Параметр запиту", + "configured": "Налаштовано - введіть заміну", + "clear": "Ясно", + "remove": "Видалити вихідні запити та їх", + "advanced": "Додатково", + "add": "Додати інше джерело API", + "sourceType": "Інтеграція", + "manualSource": "HTTP API", + "existingIntegration": "Існуюча інтеграція", + "integrationType": "Тип інтеграції", + "selectIntegration": "Налаштована інтеграція", + "noIntegrations": "Відповідних інтеграцій немає", + "integrationUnavailable": "Вибрана інтеграція більше не доступна. Виберіть іншу інтеграцію.", + "integrationDescription": "Застосовує URL збереженої інтеграції та облікові дані. Зміни застосовуються автоматично. Для запуску запитів необхідний повний доступ до інтеграції." + }, + "ai": { + "title": "Створити або виправити з будь-яким ШІ", + "description": "Спочатку додайте URL в документацію API, якщо у вас є. Для виправлень запустіть Попередній перегляд, якщо це можливо. Скопіюйте запит в будь-який AI; він може попросити пропущені деталі. Вставте його остаточний JSON тут.", + "request": "Що слід зробити цей віджет?", + "documentationUrl": "URL-адреса API документації (необов'язково)", + "paste": "Вставити", + "response": "Відповідь ШІ", + "manualCopyDescription": "Доступ до буфера обміну недоступний. Виберіть запит нижче та скопіюйте його вручну.", + "manualPasteDescription": "Доступ до буфера обміну недоступний, або скопійована відповідь потребує виправлення. Вставте відповідь AI JSON в ньому тут.", + "selectAll": "Обрати все", + "loadResponse": "Завантажити відповідь", + "loaded": "Віджет завантажений у редактор", + "invalidResponse": "Буфер обміну не містить дійсний віджет v2", + "invalidResponseDetail": "Відповідь ШІ недійсна: {message}" + }, + "preview": { + "invalid": "Виправити помилки перевірки для попереднього перегляду цього віджету.", + "fixtureError": "Помилка попереднього перегляду", + "requestData": "Запит даних", + "status": { + "idle": "Запити не тестовані", + "loading": "Тестування запитів", + "success": "Усі запити на завантаження успішне", + "error": "Не вдалося виконати один або кілька запитів завантаження" + }, + "result": { + "loading": { + "title": "Тестування API запитів", + "description": "Homarr створює сесію для перегляду і завантажує дані віджету." + }, + "success": { + "title": "Попередній перегляд готовий", + "description": "{succeeded, plural, =0 {Цей віджет не має запитів на завантаження!} one {# запит на завантаження успішне.} other {# запитів на завантаження успішно.}} Відкрийте дані, щоб перевірити відповідь." + }, + "error": { + "title": "Попередній перегляд завершений через помилки запиту", + "description": "{succeeded, number} успіх і {failed, number} Не вдалося. Відкриті дані для відповіді і деталі про помилку." + } + }, + "instanceOptions": "Налаштування інстанса", + "liveActions": "Виконання дій проти налаштованого API", + "liveActionsDescription": "Вимкнено безпечне моделювання. Увімкнення цього впливає на реальну службу.", + "noActions": "Не визначено жодних дій.", + "containedFailures": "Помилки Runtime містяться у цьому віджеті. Журнали запиту ніколи не включають в себе секретні значення.", + "validation": { + "title": "Валідація", + "ready": "Неприпустиме визначення віджету." + }, + "accessibility": { + "title": "Перевірка доступності", + "ready": "Не виявлено загальних ступенів доступності.", + "pending": "Перевірка доступності буде запущена, коли буде дійсне визначення віджета.", + "imageAlt": "Додати текст Alt до кожного малюнку, використовуючи порожню сітку лише для декоративних зображень.", + "actionIconLabel": "Додати ару мітку або заголовок до кожної піктограми дій.", + "inputLabel": "Додати видиму мітку мітку або назву недоступне з кожного входу." + }, + "journal": "Записаний журнал запиту", + "actionParameters": "Параметри дії (JSON)", + "invalidParameters": "Використовувати оголошений рядок, номер та булеві типи параметрів.", + "runDestructive": "Запустити руйнівну дію", + "runAction": "Виконати дію", + "deleteConfirmation": "Ця попередній перегляд змінює віддалені дані через налаштований API.", + "simulated": "Дія симуляція", + "httpStatus": "HTTP {status, number}", + "tab": { + "widget": "Віджет", + "data": "Дані", + "options": "Опції", + "state": "Стан", + "actions": "Управління", + "diagnostics": "Діагностика" + }, + "size": { + "compact": "Компактний", + "standard": "Стандартна", + "wide": "Широкий" + }, + "fixture": { + "live": "Наживо", + "loading": "Завантаження", + "empty": "Пусто", + "error": "Помилка" + } + } + }, + "preview": { + "request": { + "permission": { + "view": "Вигляд", + "modify": "Змінити", + "full": "Повна" + } } }, "notification": { - "toggleError": "Не вдалося змінити стан віджету." + "created": "Віджет \"{name}\" успішно створено.", + "updated": "Віджет \"{name}\" успішно оновлено.", + "deleted": "Віджет \"{name}\" видалено.", + "imported": "Віджет успішно імпортовано.", + "migrated": "Сумісний віджет успішно переміщено дошки. Розміри дошки тепер використовують значення v2.", + "migrationError": "Не вдалося перенести попередній віджет. Переконайтеся, що файл використовує схему homarr-custom-v2.", + "legacyDefinitionCopied": "Оригінальний вміст віджета було скопійовано. Збережені облікові дані не включено.", + "legacyDefinitionCopyError": "Не вдалося скопіювати оригінальний зміст віджету.", + "migrationPromptCopied": "Було скопійовано черговий запит щодо міграції. Вставте його в ОЛМ, скопіюйте свій єдиний JSON-відповідь, а потім виберіть вставлений віджет тут.", + "migrationPromptCopyError": "Не вдалося скопіювати запит про міграцію.", + "sourcesConfigured": "Джерела віджета та облікових даних збережено.", + "sourceConfigurationError": "Не вдалося налаштувати джерела віджетів.", + "aiPromptCopiedWithCount": "AI запит був скопійований в буфер обміну ({count, number} символів).", + "aiPromptCopyError": "Не вдалося скопіювати запит до буфера обміну. Можливо, ваш браузер не підтримує цю функцію.", + "aiPromptSent": "Запит надіслано. Ви можете редагувати поки асистент працює на задньому плані.", + "updateError": "Неможливо оновити віджет. Зміни не збережено.", + "importError": "Неможливо імпортувати віджет. Переконайтеся, що файл є допустимим експортом користувацьких віджетів JSON.", + "exportError": "Не вдалося експортувати віджет.", + "duplicated": "Віджет \"{name}\" продубльовано.", + "duplicateError": "Не вдалося продублювати віджет.", + "toggleError": "Не вдалося змінити стан віджету.", + "deleteError": "Не вдалося видалити віджет.", + "previewError": "Не вдалося отримати попередній перегляд. Перевірте URL-адресу та повторіть спробу." + }, + "importReview": { + "title": "Переглянути користувацький імпорт віджетів", + "description": "Перевірте куди цей віджет підключається і яким чином потрібно мати контроль над його доступом, перед імпортом.", + "migrationTitle": "Переглядати мігнуту заміну v2", + "migrationDescription": "Перевірте та підтвердіть це згенероване визначення v2. Підтвердження атомічно замінює збережений запис v1 дошки, зберігаючи існуючі місця на тій же ID віджета.", + "fileLabel": "Виберіть JSON файл користувацького віджета", + "name": "Назва", + "origin": "Основне джерело", + "authentication": "Аутентифікація", + "networkScope": "Область використання мережі", + "methods": "Методи HTTP", + "permissions": "Обов'язкові дозволи на форуми", + "sourceSetup": { + "title": "Налаштування джерел API", + "description": "Підтвердіть, де цей віджет може з'єднатися і додати облікові дані. URL приватного і петлі характерні для вашої установки Homarr.", + "suggestedUrl": "Запропонований URL", + "confirmUrl": "Я підтверджую, що на цьому сервері правильний URL для моєї установки Homarr", + "ready": "URL-адреса готова", + "needsUrl": "Підтвердіть URL-адресу", + "credentialsMissing": "Облікові дані відсутні", + "credentialsOptional": "Ви можете встановити без облікових даних і налаштувати їх пізніше, але запити не спрацюють, поки вони не додаються." + }, + "actionWarning": { + "title": "Цей віджет може змінювати віддалені дані", + "description": "У файлі не враховуються всі іменовані дії, успадковані облікові дані та руйнівне підтвердження. Секрети в цьому файлі не включаються." + }, + "cancel": "Скасувати імпорт", + "confirm": "Імпорт віджета", + "confirmMigration": "Підтвердіть заміну v2" + }, + "secret": { + "apiKey": "Ключ API або токен", + "username": "Ім'я користувача", + "password": "Пароль", + "savedPlaceholder": "• • • • • • (збережено, залиште порожнім, щоб зберегти)" + } + }, + "workshop": { + "title": "Майстерня", + "browseWorkshop": "Огляд Майстерні", + "openCommunity": "Відкрити Майстерню", + "openOnWorkshop": "Відкрити {title} на сайті Майстерні", + "back": "Повернутися до Майстерні", + "search": "Пошук віджетів", + "searchCss": "Пошук в CSS темах", + "sort": "Упорядкувати", + "sortTop": "Найвищий рейтинг", + "sortNewest": "Найновіші", + "listAriaLabel": "Віджети Майстерні", + "listAriaLabelCss": "CSS-теми в Майстерні", + "empty": "Не знайдено віджетів.", + "emptyDescription": "Віджети спільноти опубліковані у Майстерні, що з'являються тут.", + "emptyFilteredTitle": "Немає віджетів з таким запитом", + "emptyFilteredDescription": "Не відповідає віджету Майстерні \"{search}\".", + "emptyCss": "Не знайдено жодної CSS теми з таким запитом.", + "unavailableTitle": "Homarr Workshop здається недоступний", + "unavailable": "Сервіс спільноти може бути тимчасово недоступний. Спробуйте ще раз через кілька установлених віджетів не завадить.", + "loadError": "Не вдалося завантажити це повідомлення.", + "noDescription": "Без опису", + "author": "від {name}", + "communityMember": "Учасник спільноти", + "outdated": "Застарілий", + "outdatedWarning": "Автор позначив цей запит як застарілий. уважно перегляньте його.", + "score": "Рахунок: {count, number}", + "upvote": "Upvote", + "downvote": "Голос Проти", + "voteError": "Голос не вдалося зберегти.", + "signIn": "Увійти за допомогою GitHub", + "signInError": "Не вдалося увійти на GitHub. Перевірте налаштування провайдера Workshop OAuth і що спливаючі вікна дозволені.", + "signOut": "Вийти", + "signInHint": "Увійти до голосування чи звіту. Встановлення не потребує облікового запису у Майстерні.", + "securityNotice": "Віджети Майстерні можуть викликати свої оголошені джерела API і виконати оголошені дії з налаштуваннями локально. Секрети ніколи не включені.", + "securityNoticeCss": "Спільнота CSS може змінити зовнішній вигляд та можливість використання панелі. Перегляньте його перед імпортом; нічого не збережено, доки ви не збережете налаштування панелі.", + "install": "Інсталювати", + "installReviewTitle": "Відгук перед встановленням", + "installError": "Неможливо встановити цей віджет", + "installErrorDescription": "Обробка Workshop не є допустимим віджетом JSX v2.", + "useCss": "Import CSS", + "importCss": "Імпортувати CSS з Майстерні", + "importCssConfirm": "Замінити поточний користувацький CSS на \"{title}\"? Нічого не зберігається, поки ви не збережете налаштування форуму.", + "screenshotAlt": "{title} скріншот {count, number}", + "screenshotViewer": "Переглядач скріншотів {title}", + "screenshotsLabel": "Скріншоти {title}", + "zoomScreenshot": "Перегляд в повний розмір", + "previousScreenshot": "Попередній скріншот", + "nextScreenshot": "Наступний скріншот", + "showScreenshotThumbnails": "Показувати мініатюри екрану", + "hideScreenshotThumbnails": "Приховати мініатюри екрану", + "closeScreenshotViewer": "Закрити переглядач знімків екрану", + "technicalDetails": "Технічні деталі", + "sourceCode": "Запис в Майстерні", + "export": "Експорт", + "report": "Доповісти", + "reportTitle": "Повідомити про ухвалення", + "reportReason": "Підстава", + "reportExplanation": "Що повинні знати модератори Майстерні?", + "reportSend": "Надіслати звіт", + "reportSent": "Скаргу відправлено", + "reportSentDescription": "Модератори семінару тепер можуть переглядати цю пропозицію.", + "reportCount": "{count, plural, one {# звіт} other {# звітів}}", + "reportWarning": "{count, plural, one {Ця робота має # відкритий звіт спільноти.} other {Ця робота має # відкриті звіти спільноти.}} Він залишається встановленим, але ви повинні спочатку переглянути його вміст.", + "reportVisibility": "Дані про скаргу відображаються лише для адміністраторів цього представника і в Майстерні.", + "reportCategory": { + "outdated": "Застарілий або більше не працює", + "malicious": "Зловмисне", + "spam": "Спам", + "copyright": "Авторське право", + "inappropriate": "Невідповідність", + "other": "Інше" + }, + "publish": { + "title": "Опублікувати в Майстерні", + "introTitle": "Поділитися цим віджетом зі спільнотою", + "introDescription": "Homarr експортує копію вільного даних поточного віджету. Додайте чіткі деталі, щоб люди знали, що роблять перед його встановленням.", + "listingDetails": "Список Майстерні", + "listingDetailsDescription": "Ці дані публічно з’являються з експортованим визначенням віджету.", + "success": "Негайно опубліковано. Учасники спільноти можуть встановити та повідомити про цей віджет.", + "successTitle": "Ваш віджет живий", + "manageDescription": "Відкрийте сабміт, щоб оновити звіти про перегляди, позначити застарілі або видалити його. Керування публікацією обробляється безпосередньо на веб-сайті у Майстерні.", + "viewSubmission": "Перегляд та керування сабмітом", + "done": "Готово", + "signInHint": "Увійдіть, щоб опублікувати свою особу в Майстерні.", + "titleField": "Заголовок", + "descriptionField": "Опис", + "screenshots": "Скріншоти", + "screenshotsDescription": "До п'яти PNG, JPEG, або WebP зображень", + "screenshotsPlaceholder": "Вибрати знімки екрану", + "invalidScreenshot": "Використовуйте зображення PNG, JPEG або WebP розміром не більше {maxSize} кожне.", + "privateSourceWarning": "Цей віджет містить приватні адреси для: {sources}. Замініть особисті хости або IP-адреси безпечними наповнювачами послуг перед публікацією.", + "reviewSourcesTitle": "Огляд приватних URL джерел", + "privateSourceConfirmation": "Я переглянув ці URL джерела, і вони не викривають деталі приватної інфраструктури", + "action": "Опублікувати зараз", + "publicationNote": "Публікація негайна. Після цього ви можете управляти сабмітом в Майстерні.", + "definitionChanged": "Віджет змінено під час публікації був підготовлений. Перегляньте його приватні URL-адреси знову, а потім спробуйте ще раз.", + "error": "Документ не вдалося" } }, "integration": { + "completion": { + "modalTitle": "Сервіс готовий", + "title": "{name} підключено", + "description": "З'єднання пройшло його випробування. Виберіть, що показати на цій дошці далі.", + "connectionReady": "Підключення до служби готовий", + "appReady": "Ярлик додатку готовий", + "compatibleWidgets": "{count, plural, =0 {Сумісні віджети} one {# сумісний віджет} other {# сумісних віджетів}}", + "chooseWidget": "Вибрати віджет", + "recipes": { + "title": "Рекомендовано для цієї дошки", + "description": "На основі підключених сервісів та віджетів на цій дошці.", + "newConnectionReason": "Тепер доступно через {integration}", + "existingConnectionReason": "Працює з сервісом, який ви вже підключили", + "dismiss": "Відхилити рекомендації для даної служби на цьому форумі" + } + }, "page": { "list": { - "title": "Інтеграції", + "ariaLabel": "Налаштовані інтеграції", "search": "Пошук інтеграцій", + "scopedNote": "Відображаються тільки інтеграції, які вам дозволено керувати.", "noResults": { - "title": "Тут ще немає інтеграції" + "title": "Тут ще немає інтеграції", + "description": "Підключіть сервіс, щоб використовувати його дані та дії в Homarr віджетах.", + "action": "Створити ваш перший інтегрування", + "filteredTitle": "Немає інтеграцій, які б відповідали вашому пошуку", + "filteredDescription": "Немає збігів з \"{search}\". Спробуйте інше ім'я, тип або URL.", + "createOnlyTitle": "Ви можете додати тільки інтеграції", + "createOnlyDescription": "Ваші дозволи дозволяють створювати інтеграції, але не керувати існуючими. Попросіть адміністратора отримати доступ до потрібних Вам користувачів." } }, "create": { "title": "Нова інтеграція з {name}", "notification": { "success": { - "title": "Успішно створено", "message": "Інтеграцію створено" }, "error": { - "title": "Не вдалося створити", "message": "Не вдалося створити інтеграцію" } }, @@ -739,11 +1339,9 @@ "title": "Редагування інтеграцію {name}", "notification": { "success": { - "title": "Зміни застосовано", "message": "Інтеграція успішно збережена" }, "error": { - "title": "Не вдалося застосувати зміни", "message": "Не вдалося зберегти інтеграцію" } }, @@ -760,23 +1358,15 @@ "message": "Ви впевнені, що хочете видалити інтеграцію {name}?", "notification": { "success": { - "title": "Успішно видалено", "message": "Інтеграцію успішно видалено" }, "error": { - "title": "Не вдалося видалити", "message": "Не вдалося видалити інтеграцію" } } } }, "field": { - "name": { - "label": "Ім’я" - }, - "url": { - "label": "URL-адреса" - }, "attemptSearchEngineCreation": { "label": "Створення пошукових систем", "description": "Інтеграцію \"{kind}\" можна використовувати з пошуковими системами. Позначте цей пункт, щоб автоматично налаштувати пошукову систему." @@ -788,6 +1378,10 @@ "label": "Створити застосунок", "description": "Створіть застосунок з такою ж назвою та піктограмою, як і інтеграція. Залиште поле введення нижче порожнім, щоб створити застосунок з URL-адресою інтеграції." }, + "linkApp": { + "label": "Прив'язати існуючу програму", + "description": "Під'єднайте цю інтеграцію до програми, яку ви вже можете використовувати." + }, "appHref": { "placeholder": "Власний URL додатку" }, @@ -801,7 +1395,11 @@ "grid": { "widgetCount": "Віджети {count}", "noWidgets": "Без віджетів", - "detected": "Виявлено через Docker" + "detected": "Виявлено через Docker", + "connected": "{count, plural, one {# підключено} other {# підключено}}", + "tiedWidgets": "Приручені віджети", + "more": "+{count} більше", + "loadError": "Неможливо завантажити інтеграції. Спробуйте ще раз перед створенням нового з'єднання." }, "category": { "dnsHole": "ДНС", @@ -832,7 +1430,10 @@ "analytics": "Аналітика", "vpn": "VPN", "mediaLibrary": "Медіа бібліотека", - "uptimeMonitoring": "Моніторинг безперебійної роботи" + "uptimeMonitoring": "Моніторинг безперебійної роботи", + "beszel": "Beszel", + "systemMonitoring": "Системний моніторинг", + "security": "Безпека" }, "testConnection": { "action": { @@ -1117,6 +1718,22 @@ "slug": { "label": "Слаг сторінки статусу", "newLabel": "Новий слаг сторінки статусу" + }, + "wazuhIndexerUrl": { + "label": "URL індексування", + "newLabel": "Новий URL індексатора" + }, + "wazuhIndexerUsername": { + "label": "Indexer ім'я користувача", + "newLabel": "Нове ім'я користувача індексатора" + }, + "wazuhIndexerPassword": { + "label": "Пароль індексатора", + "newLabel": "Новий пароль індексатора" + }, + "wazuhDashboardUrl": { + "label": "URL-адреса панелі (необов’язково)", + "newLabel": "Нова URL-адреса панелі керування" } } }, @@ -1125,54 +1742,19 @@ "interact": "Взаємодія з інтеграціями", "full": "Повний доступ до інтеграції" }, - "audiobookshelf": { - "name": "Аудіокнижкова полиця", - "description": "Авторизований аудіо і сервер подкастів" - }, - "navidrome": { - "name": "Навідром", - "description": "Сервер трансляції музичних трансляцій з сумісністю з підзвуковим API" - }, - "uptimeKuma": { - "name": "Час безперебійної роботи Кума", - "description": "Моніторинг безвідмовної роботи на власному хостингу з публічними сторінками стану", - "secret": { - "slug": { - "description": "Слаґ вашої публічної сторінки статусу. За замовчуванням \"default\", якщо не вказано." - }, - "apiKey": { - "description": "Необов'язковий ключ API для авторизованого доступу до /metrics" - } - } - }, - "traefik": { - "name": "Traefik", - "description": "Хмарний зворотний проксі-сервер та балансувальник навантаження" - }, - "paperlessNgx": { - "name": "Безпаперовий ngx", - "description": "Система керування документами для архівування та організації відсканованих документів" - }, - "patchmon": { - "name": "PatchMon", - "description": "Керування та моніторинг патчів для хостів Linux" - }, - "bazarr": { - "name": "Bazarr", - "description": "Супутній додаток до Sonarr та Radarr, який керує субтитрами та завантажує їх" - }, - "wud": { - "name": "Що таке Docker", - "description": "Контролювати контейнери Docker мають доступні оновлення зображення" + "llamacpp": { + "name": "llama.cpp", + "description": "Стежити за локальними llama.cpp llama-server: здоров'я, моделями і показниками покоління" } }, "media": { "plural": "Медіа", "search": "Пошук медіафайлів", "field": { - "name": "Ім’я", + "preview": "Попередній перегляд", "size": "Розмір", - "creator": "Творець" + "creator": "Творець", + "actions": "Управління" }, "action": { "upload": { @@ -1200,10 +1782,12 @@ } }, "copy": { - "label": "Копіювати URL" + "label": "Копіювати URL", + "labelNamed": "Скопіювати URL для {name}" }, "open": { - "label": "Відкрити медіа" + "label": "Відкрити медіа", + "labelNamed": "Відкрити {name}" } }, "noResults": { @@ -1218,7 +1802,6 @@ "add": "Додати", "apply": "Застосувати", "backToOverview": "Назад до огляду", - "skip": "Пропустити", "change": "Змінити", "create": "Створити", "createAnother": "Створити та почати спочатку", @@ -1241,16 +1824,31 @@ "tryAgain": "Повторіть спробу", "loading": "Завантаження", "show": "Показати", - "hide": "Приховати" + "hide": "Приховати", + "undo": "Скасувати", + "editNamed": "Редагувати {name}", + "deleteNamed": "Видалити {name}", + "clearSearch": "Очистити пошук", + "copy": "Копіювати", + "copied": "Скопійовано", + "refresh": "Оновити" + }, + "pagination": { + "pageOf": "Сторінка {page} з {totalPages}" }, "here": "тут", + "serviceUrlTemplate": { + "serverTitle": "Адреса серверу Usual", + "urlModeLabel": "Шаблони адрес служби", + "hostPort": "Той же хост, різні порти", + "subdomain": "Один піддомен на послугу", + "path": "Один шлях на сервіс" + }, "iconPicker": { "label": "URL іконки", + "description": "Знайдіть бібліотеку, вставте URL-адресу зображення або завантажте файл.", "header": "Шукати зображення {countIcons} за назвою", "headerLoading": "Пошук зображень за назвою", - "noResults": "Немає іконок, що відповідають{search}\".", - "error": "Не вдалося завантажити іконки.", - "description": "Знайдіть бібліотеку, вставте URL-адресу зображення або завантажте файл.", "clear": "Очистити зображення", "uploadImage": "Вивантажити зображення", "results": "Результати пошуку зображень", @@ -1259,7 +1857,9 @@ "otherImages": "Інші зображення", "urlLoading": "Перевірка зображень…", "urlReady": "Зображення можна використовувати", - "urlError": "Це зображення не може бути завантажене. Перевірте URL-адресу та повторіть спробу." + "urlError": "Це зображення не може бути завантажене. Перевірте URL-адресу та повторіть спробу.", + "noResults": "Немає іконок, що відповідають{search}\".", + "error": "Не вдалося завантажити іконки." }, "colorScheme": { "options": { @@ -1271,7 +1871,6 @@ "information": { "min": "Мін", "max": "Макс", - "days": "Днів", "hours": "Годин", "minutes": "Хвилин" }, @@ -1308,16 +1907,16 @@ }, "userAvatar": { "menu": { - "switchToDarkMode": "Перемикнути на темну тему", - "switchToLightMode": "Перемикнути на світлу тему", + "open": "Відкрити меню облікового запису", "management": "Управління", - "docker": "Docker", "preferences": "Ваші налаштування", "logout": "Вийти", "login": "Логін", "homeBoard": "Ваша домашня дошка", - "loggedOut": "Ви вийшли", - "updateAvailable": "{countUpdates} оновлень доступно: {tag}" + "updateAvailable": "{countUpdates} оновлень доступно: {tag}", + "assistant": "Помічник", + "assistantThinking": "Мислення", + "modifier": "Mod" } }, "dangerZone": "Небезпечна зона", @@ -1365,13 +1964,66 @@ "kilometersPerHour": "км/год", "milesPerHour": "миль/год" } + }, + "widgetQuery": { + "loading": "Завантаження даних віджета" + }, + "total": "Всього", + "filesystemUsage": "{count, plural, one {Показати використання # файлової системи} other {Показувати використання для # файлової системи}}", + "field": { + "name": "Назва" + }, + "label": { + "new": "Новий" + }, + "entity": { + "apps": "Додатки", + "boards": "Контури", + "certificates": "Сертифікати", + "customWidgets": "Користувальницькі віджети", + "groups": "Групи", + "integrations": "Інтеграції", + "invites": "Запрошення", + "logs": "Журнали", + "media": "Медіа", + "searchEngines": "Пошукові системи", + "tasks": "Завдання", + "users": "Користувачі" } }, "section": { - "dynamic": { + "option": { + "showLabel": { + "label": "Показати мітку", + "description": "Показувати мітку контейнера над його вмістом." + }, + "collapsible": { + "label": "Дозволити згорнути", + "description": "Дозвольте глядачам розширюватися і руйнувати контейнер." + }, + "showOpenAll": { + "label": "Показати всі відкриті дії", + "description": "Показати дію, яка відкриває кожен додаток у цьому контейнері в нових вкладках." + }, + "scrollable": { + "label": "Прокручування", + "description": "Підтримує цей контейнер у своєму встановленому розмірі і прокручує його вміст замість того, щоб відповідати йому." + } + }, + "action": { + "openAllInNewTabsFor": "Відкрити всі додатки в вкладках {name}" + }, + "openAllInNewTabs": { + "title": "Відкрити все у вкладках", + "text": "Деякі браузери можуть блокувати маркове відкриття вкладок з міркувань безпеки. Homarr не може відкрити всі вікна, тому що ваш браузер заблокував цю дію. Будь ласка, дозвольте \"Відкрити виринаючі вік\" і спробуйте ще раз." + }, + "container": { + "untitled": "Безіменний контейнер", "action": { - "create": "Нова динамічна секція", - "remove": "Видалити динамічну секцію" + "create": "Новий контейнер", + "remove": "Видалити контейнер", + "expand": "Розгорнути", + "collapse": "Згорнути" }, "option": { "title": { @@ -1385,55 +2037,12 @@ } }, "remove": { - "title": "Видалити динамічний розділ", - "message": "Ви впевнені, що хочете видалити цей динамічний розділ? Елементи будуть переміщені в те саме місце в батьківському розділі." - } - }, - "category": { - "field": { - "name": { - "label": "Ім’я" - } - }, - "action": { - "create": "Нова категорія", - "edit": "Перейменувати категорію", - "remove": "Видалити категорію", - "moveUp": "Перемістити вгору", - "moveDown": "Перемістити вниз", - "createAbove": "Нові категорії зверху", - "createBelow": "Нова категорія знизу", - "openAllInNewTabs": "Відкрити все у вкладках" - }, - "create": { - "title": "Нова категорія", - "submit": "Додати категорію" - }, - "remove": { - "title": "Видалити категорію", - "message": "Ви впевнені, що хочете видалити категорію {name}?" - }, - "edit": { - "title": "Перейменувати категорію", - "submit": "Перейменувати категорію" - }, - "menu": { - "label": { - "create": "Нова категорія", - "changePosition": "Змінити положення", - "settings": "Налаштування" - } - }, - "openAllInNewTabs": { - "title": "Відкрити все у вкладках", - "text": "Деякі браузери можуть блокувати маркове відкриття вкладок з міркувань безпеки. Homarr не може відкрити всі вікна, тому що ваш браузер заблокував цю дію. Будь ласка, дозвольте \"Відкрити виринаючі вік\" і спробуйте ще раз." + "message": "Видалити цей контейнер? Вміст буде переміщено в навколишню зону." } } }, "item": { "action": { - "create": "Новий елемент", - "import": "Імпортувати елемент", "edit": "Редагувати елемент", "moveResize": "Перемістити/змінити розмір", "duplicate": "Дублювати елемент", @@ -1442,7 +2051,7 @@ "menu": { "label": { "settings": "Налаштування", - "refresh": "Оновити", + "settingsFor": "Налаштування для {name}", "options": "Опції", "actions": "Дії" }, @@ -1451,21 +2060,96 @@ "error": "Помилка", "loading": "Завантаження", "idle": "Неактивно" + }, + "notification": { + "saveError": { + "title": "Не вдалося зберегти віджет", + "message": "Зміни віджетів були повернуті назад" + } } }, "create": { "title": "Виберіть елемент для додавання", "search": "Фільтр елементів", - "addToBoard": "Додати до дошки" + "addToBoard": "Додати до дошки", + "addAtPosition": "Додати елемент тут", + "destination": { + "label": "Додати до", + "description": "Виберіть, де з'явиться віджет. Ви можете перемістити його пізніше.", + "mainCanvas": "Основне полотно", + "leftRail": "Ліва рейка", + "rightRail": "Права рейка" + }, + "connectionStatus": { + "ready": "Готово", + "needsSetup": "Потребує налаштування", + "noConnectionRequired": "Немає потрібного з'єднання" + }, + "customWidget": "Користувацький віджет", + "standalone": "Автономний", + "missingIntegration": { + "title": "Спочатку під'єднайте сервіс", + "noPermission": "Для цього віджета потрібне сумісне підключення до сервісу. Попросіть адміністратора з'єднатися ще раз, а тоді спробуйте ще раз." + }, + "notification": { + "success": { + "title": "Віджет додано", + "message": "{name} було додано до цієї дошки.", + "relocatedMessage": "{name} було додано до {destination} , тому що обране місце призначення було недоступне." + }, + "error": { + "title": "Не вдалося додати елемент", + "message": "Не вдалося додати товар до цієї дошки" + } + } + }, + "selection": { + "summary": "{count, plural, one {# обраний елемент} other {# вибраних елементів}}", + "selected": "{count, plural, one {# вибрано} other {# вибрано}}", + "copy": "Копіювати", + "copied": "{count, plural, one {# об'єкт скопійовано в буфер обміну} other {# елементів скопійовано до буфера обміну}}", + "copyError": "Вибрані елементи не можуть бути скопійовані. Ваш браузер може не дозволити доступ до буфера обміну.", + "paste": "Вставити", + "pasteShortcut": "Вставити скопійовані елементи тут (Ctrl / Е + V)", + "pasted": "{count, plural, one {# об'єкт вставлено в} other {# елементів вставлено в}}", + "pasteError": "Не вдалося прочитати буфер обміну. Можливо, ваш браузер заборонив доступ до буфера обміну.", + "pasteInvalid": "Буфер обміну не містить дійсні елементи Домару.", + "pasteUnavailable": "скопійовані елементи не вміщаються на цій дошці.", + "removed": "{count, plural, one {# файл видалено} other {# елементів видалено}}", + "move": "Пересунути", + "moveTo": "Пересунути відмічене", + "delete": "Видалити", + "clear": "Очистити вибране", + "clearShortcut": "Очистити вибір (альбомна)", + "saveErrorTitle": "Не вдалося оновити елементи", + "saveErrorMessage": "Зміни не вдалося зберегти. Дошка була оновлена.", + "moveUnavailableTitle": "Не вдалося перемістити вибрані елементи", + "moveUnavailableMessage": "Призначення не має достатньо місця для усього виділення." }, "moveResize": { "title": "Перемістити/змінити розмір", + "entryLabel": "{name}, стовпець {column}, рядок {row}", + "target": { + "numbered": "{name}, призначення {index}", + "located": "{name}, {location}, призначення {index}" + }, + "keyboard": { + "instructions": "Натисніть Enter або пробіл, щоб почати редагування. Використовуйте клавіші зі стрілками, щоб рухатись, Shift + клавіші зі стрілками для зміни розміру.", + "started": "Режим редагування клавіатури запущено. Використовуйте клавіші зі стрілками для переміщення, Shift + клавіші зі стрілками, щоб змінити розмір і вийти.", + "stopped": "Редагування клавіатури зупинено.", + "boundary": "Ця зміна не міститься всередині цього розділу." + }, "field": { + "section": { + "label": "Секція або залізниця" + }, "width": { - "label": "Ширина" + "label": "Ширина", + "shortLabel": "Пт" }, "height": { - "label": "Висота" + "label": "Висота", + "shortLabel": "Н" }, "xOffset": { "label": "Зміщення по осі X" @@ -1479,18 +2163,36 @@ "title": "Редагувати елемент", "tab": { "widget": "Редагувати віджет", - "app": "Редагувати застосунок" + "app": "Редагувати застосунок", + "integration": "Редагувати інтеграцію" }, "app": { "propagationNotice": "Зміни до цього застосунку будуть застосовані скрізь, де вони використовуються на всіх панелях." }, + "integration": { + "action": "Редагувати", + "description": "Тест або відновлення вибраного підключення не залишаючи цей віджет.", + "editLabel": "Редагування інтеграцію {name}", + "fullAccessRequired": "Необхідний повний доступ", + "propagationNotice": "Зміни до цієї інтеграції застосовуються скрізь. З'єднання перевіряється перед її збереженням.", + "loading": "Завантаження інтеграції", + "loadError": "Ця інтеграція не може бути завантажена. Повторіть спробу перед зміною параметрів підключення." + }, + "preview": { + "integrationRequired": "Виберіть з'єднання для перегляду цього віджету.", + "size": "Розмір файлу" + }, + "settings": { + "label": "Налаштування віджета" + }, "advancedOptions": { "label": "Розширені налаштування", "title": "Розширені налаштування елемента" }, "field": { "integrations": { - "label": "Інтеграції" + "label": "Інтеграції", + "removeLabel": "Видалити інтеграцію з {name}" }, "title": { "label": "Заголовок" @@ -1504,17 +2206,18 @@ } }, "remove": { - "title": "Видалити елемент", "message": "Ви впевнені, що хочете видалити цей елемент?" + }, + "advancedFocus": { + "open": "Відкрити розширений вигляд", + "close": "Закрити розширений вигляд", + "label": "Розширений вигляд {widget}" } }, "widget": { "integrationSelect": { "configureIntegrationFirst": "Спочатку під'єднайте інтеграцію", - "loading": "Завантаження...", - "placeholder": "Виберіть значення", - "noResults": "Результатів не знайдено", - "loadError": "Не вдалося завантажити параметри" + "placeholder": "Виберіть значення" }, "app": { "name": "Додаток", @@ -1523,9 +2226,6 @@ "appId": { "label": "Виберіть додаток" }, - "openInNewTab": { - "label": "Відкрити в новій вкладці" - }, "showTitle": { "label": "Показувати назву додатка" }, @@ -1533,11 +2233,8 @@ "label": "Увімкнути перевірку статусу" }, "layout": { - "label": "Макет", "option": { - "row": "Горизонтально", "row-reverse": "Горизонтально (зворотнє)", - "column": "Вертикально", "column-reverse": "Вертикальна (перевернута)" } }, @@ -1562,23 +2259,60 @@ "name": "Закладки", "description": "Показує декілька посилань додатка", "option": { - "title": { - "label": "Назва" + "showTitle": { + "label": "Показувати назву віджета" + }, + "titleSize": { + "label": "Розмір заголовка віджета (px)" }, "layout": { "label": "Макет", "option": { - "row": { - "label": "Горизонтальний" - }, - "column": { - "label": "Вертикальний" - }, - "grid": { - "label": "Сітка" + "adaptive": { + "label": "Адаптивний колір" }, "gridHorizontal": { "label": "Горизонтальна сітка" + }, + "icons": { + "label": "Іконки" + } + } + }, + "variant": { + "label": "Вигляд", + "option": { + "soft": { + "label": "М'яко" + }, + "filled": { + "label": "Заповнений" + }, + "outline": { + "label": "Контур" + }, + "plain": { + "label": "Рівнина" + } + } + }, + "spacing": { + "label": "Інтервал карток", + "option": { + "xs": { + "label": "Дуже малий" + }, + "sm": { + "label": "Малий" + }, + "md": { + "label": "Середній" + }, + "lg": { + "label": "Великий" + }, + "xl": { + "label": "Надвеликий" } } }, @@ -1591,17 +2325,28 @@ "hideHostname": { "label": "Приховати імена хостів" }, - "openNewTab": { - "label": "Відкрити в новій вкладці" - }, "withBorder": { "label": "Показати рамку" }, + "grow": { + "label": "Розгорнути картки, щоб заповнити рядок" + }, + "customUrls": { + "label": "Користувацькі посилання" + }, "items": { "label": "Закладки", - "add": "Додати закладку" + "remove": "Видалити з обраного", + "apps": { + "label": "Додати закладки", + "description": "Вставте URL-адреси або знайти наявні додатки. Перетягніть закладки нижче, щоб змінити їх порядок.", + "placeholder": "Вставити URL-адреси або пошуковий додаток", + "addUrl": "Додати цю адресу", + "hint": "Натисніть Enter щоб додати посилання. Вставте розділені комами або окремо окрему окрему URL-адресу, щоб додати діапазон посилань." + } } - } + }, + "empty": "Додати URL-адресу або програму у налаштуваннях віджета" }, "archiveTeamWarrior": { "name": "ArchiveTeam Warrior", @@ -1610,33 +2355,61 @@ "showBroadcastMessage": { "label": "Показати розсилку повідомлень" } + }, + "noProjectSelected": "Жоден проект не вибрано", + "runnerStatus": "Runner: {status}", + "projectId": "Проєкт: {id}", + "sessionReceived": "Сеанс отримано: {value}", + "sessionSent": "Сеанс надіслано: {value}", + "sessionId": "Сеанс: {id}", + "startedAt": "Запущено {date}", + "emptyItems": "Немає активних або останніх завдань", + "metric": { + "running": "Запущено", + "completed": "Готово", + "failed": "Невдало", + "canceled": "Скасовано", + "download": "Завантажити", + "upload": "Вивантаж" + }, + "status": { + "running": "Запущено", + "completed": "Завершено", + "failed": "Невдало", + "canceled": "Скасовано", + "stopped": "Зупинено", + "idle": "Неактивне", + "unknown": "Невідомо" + } + }, + "wud": { + "name": "Що таке Docker", + "description": "Показати скільки переглянутих контейнерів мають доступні оновлення.", + "title": "Що таке Docker", + "monitored": "Відстежено", + "updatesAvailable": "{count, plural, one {# оновлення доступні} other {# оновлень доступні}}", + "updateAvailable": "Доступне оновлення", + "openReleaseNotes": "Відкрити замітки до випуску", + "option": { + "showRing": { + "label": "Показати кільце оновлення" + }, + "showUpdateList": { + "label": "Показати список оновлень контейнерів", + "description": "Відображає список кожного моніторного контейнера, у якого є доступне оновлення зображення" + } } }, "dnsHoleSummary": { "name": "Звіт DNS-Hole", "description": "Відображає резюме вашого DNS Hole", "option": { - "layout": { - "label": "Макет", - "option": { - "row": { - "label": "Горизонтальний" - }, - "column": { - "label": "Вертикальний" - }, - "grid": { - "label": "Сітка" - } - } - }, "usePiHoleColors": { "label": "Використовувати кольори для Pi-Hole" } }, "error": { - "internalServerError": "Не вдалося отримати резюме DNS Hole", - "integrationsDisconnected": "Немає даних, всі інтеграції відключені" + "internalServerError": "Не вдалося отримати резюме DNS Hole" }, "data": { "adsBlockedToday": "Заблоковано сьогодні", @@ -1644,32 +2417,24 @@ "dnsQueriesToday": "Запити за сьогодні", "domainsBeingBlocked": "Домени в заблокованому списку" }, - "domainsTooltip": "Через численні інтеграції Homarr не може розрахувати точну кількість заблокованих доменів" + "domainsTooltip": "Через численні інтеграції Homarr не може розрахувати точну кількість заблокованих доменів", + "status": { + "enabled": "Увімкнено", + "disabled": "Вимкнено", + "unknown": "Невідомо" + } }, "dnsHoleControls": { "name": "Управління DNS Hole", "description": "Керуйте PiHole або AdGuard за допомогою головної панелі", "option": { - "layout": { - "label": "Макет", - "option": { - "row": { - "label": "Горизонтальний" - }, - "column": { - "label": "Вертикальний" - }, - "grid": { - "label": "Сітка" - } - } - }, "showToggleAllButtons": { "label": "Показати всі кнопки" } }, "error": { - "internalServerError": "Помилка контролю над DNS Hole" + "internalServerError": "Помилка контролю над DNS Hole", + "bulkActionsFailed": "{count, plural, one {# дія не вдалася} other {# дій не вдалося}}" }, "controls": { "enableAll": "Увімкнути все", @@ -1680,8 +2445,6 @@ "disabled": "Вимкнено", "processing": "Обробка", "disconnected": "Відключено", - "hours": "Годин", - "minutes": "Хвилин", "unlimited": "Залишіть порожнім для необмеженого" } }, @@ -1693,16 +2456,10 @@ "label": "Налаштувати відображення назви міста", "description": "Відобразити свою назву чи назву міста/країни зверху годинника." }, - "customTitle": { - "label": "Назва" - }, "is24HourFormat": { "label": "24-годинний формат", "description": "Використовувати 24-годинний формат замість 12-годинного" }, - "showSeconds": { - "label": "Показувати секунди" - }, "useCustomTimezone": { "label": "Використовувати фіксований часовий пояс" }, @@ -1721,29 +2478,295 @@ "label": "Власний формат часу", "description": "Використовувати ISO 8601 для формату часу (це перевизначить інші параметри)" }, - "customDateFormat": { - "label": "Власний формат дати", - "description": "Використовувати ISO 8601 для формату (це перевизначить інші параметри)" - }, "showWeather": { "label": "Відображувати погоду", "description": "Відображати невелику анімовану піктограму погоди та температуру у кутку карти" }, - "weatherLocation": { - "label": "Погода розташування" - }, "isWeatherFormatFahrenheit": { "label": "Температура в Фаренгейтах" + }, + "animateWeatherIcon": { + "label": "Анімація погоди", + "description": "Анімуйте піктограму погоди. Вимкнено за замовчуванням і завжди вимкнено при зниженні руху за замовчуванням." + }, + "colorWeatherByDayNight": { + "label": "Колір за дне/вночі", + "description": "Щодо іконки погоди і температури на денному або нічному кольорі, залежно від того, чи це зараз день чи ніч у вибраному районі." + }, + "dayWeatherColor": { + "label": "Колір дня" + }, + "nightWeatherColor": { + "label": "Нічний колір" + }, + "worldClockCities": { + "label": "Міста Світового часу", + "description": "Додавання та замовлення до шести міст для розширеного перегляду." } + }, + "timezoneList": { + "timezone": "Часовий пояс", + "cityLabel": "Мітка міста", + "searchPlaceholder": "Пошук часових поясів", + "noResults": "Часові зони не знайдені", + "unsupportedOption": "Не підтримується: {timeZone}", + "add": "Додати місто", + "remove": "Видалити {city}", + "reorder": "Замовити {city}", + "limit": "Налаштування {count} міст {maximum}" + }, + "worldClock": { + "primary": "Первинний годинник", + "local": "Місцевий час", + "today": "Сьогодні", + "tomorrow": "Завтра", + "yesterday": "Вчора", + "noSecondaryCities": "Додайте міста у параметри віджета для їх порівняння.", + "unsupportedPrimaryTitle": "Основний часовий пояс недоступний", + "unsupportedPrimary": "{timeZone} не підтримується в цьому браузері. Показано UTC як чітко позначене fallback.", + "unsupportedTimeZone": "Непідтримуваний часовий пояс: {timeZone}", + "accessibleTime": "{city}: {time}, {date}, {timeZone}", + "advancedLabel": "Передовий світовий годинник", + "cities": "Світовий час", + "cityCount": "{count} timezones", + "timeBarLabel": "24-годинна позиція на день для {city}", + "dayProgress": "Минуло {percent}% · залишилося {hours} год {minutes} хв", + "phaseLegend": "Кінцева легенда часу", + "tick": { + "midnight": "00", + "morning": "06", + "noon": "12", + "evening": "18", + "end": "24" + }, + "phaseRange": { + "night": "00–05 · 21–24", + "dawn": "05–08", + "day": "08–18", + "dusk": "18–21" + }, + "phase": { + "night": "Ніч", + "dawn": "Зоря", + "day": "День", + "dusk": "Сутінки" + } + } + }, + "airQuality": { + "name": "Якість повітря та UV", + "description": "Відображає якість повітря, ультрафіолетовий індекс, забруднювачі та пилюки для місця.", + "option": { + "location": { + "label": "Місце розташування якості повітря" + }, + "aqiStandard": { + "label": "AQI стандарт", + "options": { + "auto": "Автоматично для мови", + "european": "Європейський AQI", + "us": "ІЯП США" + } + }, + "showUv": { + "label": "Показати індекс UV" + }, + "showPollutants": { + "label": "Показувати забруднюючі концентрації" + }, + "showPollen": { + "label": "Показувати концентрацію пилкового екрана" + } + }, + "category": { + "good": "Хороший", + "fair": "Ярмарок", + "moderate": "Помірний", + "unhealthySensitive": "Нездорово для чутливих груп", + "unhealthy": "Нездоровий", + "poor": "Бідний", + "veryPoor": "Дуже бідне", + "veryUnhealthy": "Дуже нездоровий", + "extremelyPoor": "Надзвичайно бідне", + "hazardous": "Небезпечно", + "unknown": "Немає AQI читання" + }, + "uv": { + "label": "Індекс УФ", + "category": { + "low": "Низька", + "moderate": "Помірний", + "high": "Високий", + "veryHigh": "Дуже висока", + "extreme": "Надмірний", + "unknown": "Жодних прочитань" + } + }, + "dominantPollutant": "Dominant pollutant", + "aqiLabel": "ІЯП", + "strongestPollen": "Найбільше пилок", + "unit": { + "concentration": "{value} Допоміжний g/m3", + "pollen": "{value} зернів/m3" + }, + "pollutant": { + "pm2_5": "УДЧ PM2.5", + "pm10": "УДПМ10", + "ozone": "Озон", + "nitrogenDioxide": "Оксид азоту", + "sulphurDioxide": "Sulphur dioxide", + "carbonMonoxide": "Монооксид вуглецю" + }, + "pollen": { + "alder": "Alder", + "birch": "Береза", + "grass": "Трава", + "mugwort": "Мугорт", + "olive": "Оливковий", + "ragweed": "Амброзія" + }, + "compact": { + "sixHourTrend": "AQI тренд наступні шість годин" + }, + "advanced": { + "observedAt": "Оновлено о {time}", + "next24Hours": "Наступні 24 години", + "pollutants": "Забруднюючі концентрації", + "pollen": "Полярна концентрація пилка", + "sevenDayForecast": "7-денний максимальний прогноз", + "aqiValue": "AQI {value}", + "uvValue": "УФ {value}", + "uvShort": "УФ {value}", + "noForecast": "Немає даних про прогноз" + } + }, + "countdown": { + "name": "Зворотний відлік", + "description": "Відслідковує майбутні події та повторювані ювілеї.", + "option": { + "events": { + "label": "Події", + "description": "Додати та замовити до 20 одноразових або щорічних відліків. Дати введені в вибрані часові пояси." + }, + "showProgress": { + "label": "Показати прогрес" + }, + "showSeconds": { + "label": "Показати секунди", + "description": "Показувати секунди на кожній майбутній події." + } + }, + "dateTimeEventList": { + "newEvent": "Нова подія", + "add": "Додати подію", + "remove": "Видалити {event}", + "reorder": "Замовити {event}", + "eventLabel": "Мітка події", + "timezone": "Часовий пояс", + "unsupportedOption": "Не підтримується: {timeZone}", + "recurrence": "Повторює", + "recurrenceOption": { + "none": "Не повторювати", + "yearly": "Щороку" + }, + "target": "Дата і час події", + "trackProgress": "Відслідковувати прогрес із дати початку", + "start": "Дата і час початку прогресу", + "confirmDateTime": "Підтвердити дату та час", + "limit": "Налаштування {count} подій {maximum}" + }, + "empty": { + "title": "Зворотних відліків поки немає", + "description": "Додайте подію до параметрів віджета для початку відліку." + }, + "completed": "Завершено", + "yearly": "За рік", + "progress": "Прогрес події", + "upcoming": "Майбутні", + "completedEvents": "Завершені події", + "invalid": { + "title": "Деякі події не можуть бути відображені", + "description": "{count, plural, one {Одна подія має невірну дату або непідтримувану часову зону.} other {# події мають некоректну дату або непідтримувану часову зону.}}", + "value": "Unavailable" + }, + "alert": { + "notifications": "Сповіщення браузера", + "permissionDenied": "Сповіщення заблоковано в цьому браузері.", + "reached": "Зворотний відлік досяг своєї мети." + } + }, + "timer": { + "name": "Timer / Pomodoro", + "description": "Запускає простий таймер або налаштовуваний Pomodoro послідовності.", + "option": { + "mode": { + "label": "Режим", + "options": { + "timer": "Таймер", + "pomodoro": "Pomodoro" + } + }, + "timerMinutes": { + "label": "Хвилини таймера" + }, + "focusMinutes": { + "label": "Фокус хвилини" + }, + "shortBreakMinutes": { + "label": "Короткі перерви хвилин" + }, + "longBreakMinutes": { + "label": "Довгі хвилини перерви" + }, + "sessionsBeforeLongBreak": { + "label": "Сфокусуватися на сесії до довгої перерви" + }, + "autoStartBreaks": { + "label": "Автоматично запускати перерви" + }, + "autoStartFocus": { + "label": "Автоматично запускати сесії" + } + }, + "phase": { + "timer": "Таймер", + "focus": "Фокус", + "shortBreak": "Короткий перерва", + "longBreak": "Довга перерва" + }, + "action": { + "start": "Пуск", + "pause": "Пауза", + "reset": "Reset" + }, + "attention": { + "timerComplete": "Timer complete", + "phaseReady": "{phase} готовий" + }, + "progress": "Прогрес таймер: {progress}%", + "compact": { + "completedFocus": "{count, plural, =0 {Немає фокусів завершених сесій} one {# фокус завершено} other {# фокус завершені}}" + }, + "alert": { + "title": "Timer complete", + "completed": "{phase} виконано." + }, + "advanced": { + "sequence": "Pomodoro sequence", + "focusSession": "Фокус {session}", + "settings": "Постійні налаштування", + "settingsHint": "Використовуйте контекстне меню віджета, щоб редагувати ці налаштування форуму.", + "localAlerts": "Оповіщення", + "notifications": "Сповіщення браузера", + "sound": "Звук таймера", + "localAlertsHint": "Звуки таймера увімкнено за замовчуванням. Звуки і сповіщення застосовуються тільки до цього віджета у цьому браузері.", + "notificationsDenied": "Сповіщення заблоковано в цьому браузері." } }, "minecraftServerStatus": { "name": "Статус сервера Minecraft", "description": "Відображає статус сервера Minecraft", "option": { - "title": { - "label": "Назва" - }, "domain": { "label": "Адреса сервера" }, @@ -1763,11 +2786,21 @@ "noStation": "Станція не вибрана", "option": { "baseUrl": { - "label": "Шукати URL" + "label": "Шукати URL", + "description": "Користувацькі URL-адреси повинні вирішити за публічною IP-адресою. Приватні та локальні хости відхилені." }, "station": { - "label": "Станція" + "label": "Станція", + "placeholder": "Шукати станцію" } + }, + "error": { + "customSourceUnavailable": "Джерело розрахунку, що розкладається, не доступне. Перевірте, чи його URL-адреса вирішує публічну IP-адресу.", + "stationSearch": "Неможливо знайти станції. Перевірте URL адресу та доступ до форуму." + }, + "warning": { + "stale": "Не вдалося оновити розклад. Відображаються відправлення, востаннє оновлені о {time}.", + "staleCompact": "Застарілі дані" } }, "notebook": { @@ -1799,6 +2832,9 @@ "directionRtl": "Встановити напрямок тексту справа наліво", "blockquote": "Цитата", "horizontalLine": "Горизонтальна лінія", + "details": "Увімкнути рухомий розділ", + "expandDetails": "Розгорнути згорнуту секцію", + "collapseDetails": "Згорнути згорнутий розділ", "bulletList": "Маркований список", "orderedList": "Упорядкований список", "checkList": "Контрольний список", @@ -1807,16 +2843,20 @@ "link": "Посилання", "unlink": "Видалити посилання", "image": "Вбудувати зображення", - "addTable": "Додати таблицю", + "insertTable": "Вставити таблицю", + "insertTableSize": "Вставити {columns} × {rows} таблиці", "deleteTable": "Видалити таблицю", "colorCell": "Кольорова клітинка", - "mergeCell": "Ввімкнути/вимкнути об'єднання клітини", + "mergeCells": "Об'єднати клітинки", + "splitCell": "Розділити клітинку", "addColumnLeft": "Додати стовпець перед", "addColumnRight": "Додати стовпець після", "deleteColumn": "Видалити стовпець", "addRowTop": "Додати рядок перед", "addRowBelow": "Додати рядок після", - "deleteRow": "Видалити рядок" + "deleteRow": "Видалити рядок", + "toggleHeaderRow": "Перемкнути рядок заголовків", + "toggleHeaderColumn": "Перемкнути колонку заголовка" }, "align": { "left": "Ліворуч", @@ -1827,8 +2867,6 @@ "clearColor": "Прибрати колір", "source": "Джерело", "widthPlaceholder": "Значення в % або пікселях", - "columns": "Стовпці", - "rows": "Рядки", "width": "Ширина", "height": "Висота" }, @@ -1840,7 +2878,9 @@ "discard": "Відхилити зміни", "keepEditing": "Продовжити редагування" } - } + }, + "saveFailed": "Не вдалося зберегти нотатку", + "documentStats": "{words, plural, one {# слова} other {# слова!}} · {characters, plural, one {# символ} other {# символів}}" }, "anchorNote": { "name": "Нотатка прив’язки", @@ -1849,9 +2889,6 @@ "noteId": { "label": "Нотатка" }, - "showTitle": { - "label": "Показати назву" - }, "showUpdatedAt": { "label": "Показати останні оновлення" } @@ -1861,14 +2898,20 @@ "notFound": "Нотатку не знайдено", "noNotes": "Не знайдено жодних нотаток", "integrationRequired": "Спочатку виберіть інтеграцію з прив’язкою", - "updatedAt": "Оновлено {date}", "untitled": "Без назви", - "edit": "Редагувати", - "save": "Зберегти", - "cancel": "Скасувати", "readOnlyViewer": "У вас є доступ до цієї замітки. Редагування вимкнено.", "saveForbidden": "У вас немає дозволу на редагування цієї нотатки.", - "saveFailed": "Неможливо зберегти цю нотатку. Будь ласка, спробуйте ще раз." + "saveFailed": "Неможливо зберегти цю нотатку. Будь ласка, спробуйте ще раз.", + "createdAt": "Створено {date}", + "permission": { + "owner": "Власник", + "editor": "Редактор", + "viewer": "Переглядач" + }, + "status": { + "pinned": "Закріплено", + "archived": "Архівовано" + } }, "iframe": { "name": "iFrame", @@ -1927,6 +2970,25 @@ "clickable": { "label": "Клікабельний" } + }, + "state": { + "on": "Увімк", + "off": "Вимкнено", + "unavailable": "Unavailable", + "unknown": "Невідомо" + }, + "advanced": { + "entityId": "Ідентифікатор об'єкта: {id}", + "lastChanged": "Змінено {date}", + "attribute": { + "unit": "Одиниця", + "deviceClass": "Клас пристрою", + "icon": "Іконка" + } + }, + "error": { + "loadFailed": "Не вдалося завантажити об'єкт", + "toggleFailed": "Неможливо оновити об'єкт" } }, "smartHome-executeAutomation": { @@ -1942,11 +3004,31 @@ }, "spotlightAction": { "run": "Запустити {name}" + }, + "advanced": { + "lastExecuted": "Останній запуск в {time}", + "automationId": "Ідентифікатор автоматизації: {id}", + "ready": "Готовий до запуску", + "noPermission": "Немає дозволу на запуск цієї автоматизації" + }, + "status": { + "running": "Запуск автоматизації", + "success": "Автоматизацію завершено" + }, + "error": { + "executeFailed": "Не вдалося запустити автоматизацію" } }, "stockPrice": { "name": "Ціна за акції", "description": "Відображає поточну ціну акції компанії", + "advanced": { + "currentPrice": "Поточна ціна", + "previousClose": "Попередня закриття", + "changePercentage": "Зміна (%)", + "minimum": "Мінімум", + "maximum": "Максимум" + }, "option": { "stock": { "label": "Символ Акцій" @@ -2017,6 +3099,10 @@ "label": "1 місяць" } } + }, + "showDetails": { + "label": "Детальніше про твіт", + "description": "Показувати назву, зміну і часовий діапазон у вигляді компактного. Вимкніть лише для символу і ціни." } } }, @@ -2044,6 +3130,13 @@ "showUnmonitored": { "label": "Показувати контрольовані" } + }, + "advanced": { + "previousMonth": "Показати попередній місяць", + "nextMonth": "Показати наступний місяць", + "eventCount": "{count, plural, one {# подія} other {# події}}", + "loading": "Завантаження подій календаря...", + "noEvents": "Немає подій у цьому місяці" } }, "weather": { @@ -2056,16 +3149,18 @@ "disableTemperatureDecimals": { "label": "Вимкнути десяткові дроби температури" }, + "animateIcons": { + "label": "Анімація значків погоди" + }, + "showHumidity": { + "label": "Показувати вологість" + }, "showCurrentWindSpeed": { - "label": "Показати поточну швидкість вітру", - "description": "Тільки при поточній погоді" + "label": "Показати поточну швидкість вітру" }, "useImperialSpeed": { "label": "Використання милі/год для швидкості вітру" }, - "location": { - "label": "Погодна локація" - }, "showCity": { "label": "Показувати місто" }, @@ -2075,13 +3170,10 @@ "forecastDayCount": { "label": "Кількість днів прогнозу", "description": "Якщо віджет недостатньо широкий, відображається менше днів" - }, - "dateFormat": { - "label": "Формат дати", - "description": "Як має виглядати дата" } }, "currentWindSpeed": "{currentWindSpeed} {unit}", + "disabled": "Дані про погоду недоступні, оскільки вихідні підключення відключені", "dailyForecast": { "sunrise": "Схід сонця", "sunset": "Захід сонця", @@ -2104,6 +3196,47 @@ "thunderstorm": "Гроза", "thunderstormWithHail": "Гроза з градом", "unknown": "Невідомо" + }, + "details": "Показати подробиці погоди", + "detailsFor": "Показати відомості про погоду на {date}", + "advanced": { + "forecast": "7-денний прогноз", + "hourlyForecast": "Наступні 24 години", + "day": "День", + "time": "Час", + "conditions": "Умови", + "temperature": "Температура", + "feelsLike": "Відчутки {temperature}", + "feelsLikeLabel": "Відчуваки як", + "feelsLikeRange": "Таким чином: {maximum} / {minimum}", + "highLow": "Максимум {maximum} · мінімум {minimum}", + "observedAt": "Оновлено о {time}", + "humidity": "Вологість", + "averageHumidity": "Середня вологість: {humidity}%", + "currentHumidity": "Поточна вологість", + "wind": "Вітрові / пориви ({unit})", + "currentWind": "Поточні пориви", + "windValue": "{speed} / {gusts} {unit}", + "windDetail": "Максимальний вітер / gusts: {speed} / {gusts} {unit}", + "nextHourPrecipitation": "Наступна година", + "precipitationChance": "Шанс отримати опади", + "precipitationValue": "{probability}% · {amount} мм", + "precipitationDetail": "Опацівник: {probability}% · {amount} мм", + "todayUv": "Сьогодні максимальний індекс UV", + "uvIndex": "Макс UV індекс: {value}", + "daylight": "Денний світло: {duration}", + "hourlyTooltip": "Нічого подібного {feelsLike}{temperatureUnit} · {amount} мм · {humidity}% вологісті · {speed} {speedUnit} вітер", + "hourlyTooltipWithoutHumidity": "Відчуження типу {feelsLike}{temperatureUnit} · {amount} мм · {speed} {speedUnit} вітер", + "detailLabel": { + "feelsLike": "Відчуваки як", + "precipitation": "Атмосферні опади", + "humidity": "Середня вологість", + "wind": "Максимальний вітер і порив", + "uv": "Макс. індекс UV", + "daylight": "Daylight" + }, + "sun": "Схід/захід сонця", + "noForecast": "Немає даних про прогноз" } }, "indexerManager": { @@ -2116,8 +3249,15 @@ }, "title": "Менеджер індексації", "testAll": "Перевірте все", + "status": { + "healthy": "Здоровий", + "unhealthy": "Нездоровий", + "disabled": "Вимкнено", + "unknown": "Здоров'я недоступний" + }, "error": { - "internalServerError": "Не вдалося отримати статус індексування" + "internalServerError": "Не вдалося отримати статус індексування", + "testAll": "Тест індексування не вдався. Повторіть спробу." } }, "healthMonitoring": { @@ -2146,11 +3286,6 @@ "fileSystem": { "label": "Показувати відомості про файл системи" }, - "visibleStorageVolumes": { - "label": "Видимі об'єми сховища", - "description": "Доступно лише тоді, коли всі вибрані інтеграції – це Synology. Залиште поле порожнім, щоб відобразити всі виявлені томи сховища.", - "placeholder": "Оберіть томи сховища" - }, "defaultTab": { "label": "Вкладка за замовчуванням" }, @@ -2173,17 +3308,27 @@ "minutes": "{count} хвилин(и)", "used": "Використано", "available": "Доступно", - "lastSeen": "Останнє оновлення статусу: {lastSeen}" + "lastSeen": "Останнє оновлення статусу: {lastSeen}", + "updatesAvailable": "{count, plural, one {# оновлення доступні} other {# оновлень доступні}}", + "rebootRequired": "Потрібне перезавантаження", + "rebootNotRequired": "Перезавантаження не потрібне" + }, + "smartStatus": { + "attributesWithinThresholds": "SMART: атрибути в межах порогу", + "attributesFailed": "SMART: {attributes} не вдалося", + "noCriticalWarning": "SMART: немає попередження від SSD скарги", + "criticalWarning": "SMART: критичне попередження повідомляється від SSD" + }, + "gauge": { + "cpuUsage": "Використання CPU", + "cpuTemperature": "Температура процесора", + "memoryUsage": "Використання пам’яті", + "gpuUsage": "Використання {name} GPU" }, - "memory": {}, "error": { "internalServerError": "Не вдалося отримати дані про стан системи" }, "cluster": { - "summary": { - "cpu": "ЦП", - "memory": "Оперативна пам'ять" - }, "resource": { "node": { "name": "Вузли" @@ -2219,8 +3364,6 @@ "table": { "header": { "name": "Назва", - "cpu": "ЦП", - "memory": "Оперативна пам'ять", "node": "Вузол" } } @@ -2230,33 +3373,29 @@ "name": "Статистика Docker", "description": "Статистика ваших контейнерів (цей віджет може бути додано тільки з правами адміністратора)", "option": { - "columns": { - "label": "Стовпці для показу" + "endpointIds": { + "label": "Докер середовищ", + "description": "Залиште порожнім для показу контейнерів з кожного середовища Docker", + "placeholder": "Всі середовища Docker" }, - "enableRowSorting": { - "label": "Увімкнути сортування елементів" + "containerFilter": { + "label": "Контейнери для фільтрації" + }, + "filterIsWhitelist": { + "label": "Додати до білого списку" }, "defaultSort": { - "label": "Стовпець для сортування за замовчуванням", "option": { "name": "Назва", "state": "Стан", "cpuUsage": "Використання CPU", "memoryUsage": "Використання пам’яті" } - }, - "descendingDefaultSort": { - "label": "Інверсія сортування" - }, - "columnOrder": { - "label": "Порядок стовпців" - }, - "columnWidths": { - "label": "Ширина стовпців" } }, "error": { "internalServerError": "Не вдалося отримати статистику контейнерів", + "endpointsUnavailable": "Кінцеві точки Docker недоступні", "layoutSaveTitle": "Макет таблиці не збережено", "layoutSaveMessage": "Не вдалося зберегти макет таблиці Docker. Спробуйте ще раз перемістити або змінити розмір стовпця." }, @@ -2265,7 +3404,6 @@ } }, "coolify": { - "name": "Охолодити", "description": "Огляд вашого Coolify екземпляра з серверами та додатками", "option": { "showServers": { @@ -2291,17 +3429,49 @@ "internalServerError": "Не вдалося отримати дані Coolify" }, "server": { - "buildServer": "Побудова" + "buildServer": "Побудова", + "resourceCounts": "{applications, plural, one {# додаток} other {# додатки}} / {services, plural, one {# послуга} other {# служби}}", + "reachability": "Доступність", + "usability": "Зручність використання" + }, + "source": { + "url": "Джерело: {url}", + "unavailable": "{source}: unavailable" }, "instances": { "title": "Iнстанси" + }, + "action": { + "openResource": "Відкрити {name}", + "openLogs": "Відкрити журнал {name}", + "showIp": "Показати IP-адресу", + "hideIp": "Приховати IP-адресу" + }, + "status": { + "running": "Запущено", + "stopped": "Зупинено", + "exited": "Вийшов", + "starting": "Запускається", + "restarting": "Перезапуск", + "unknown": "Невідомо", + "online": "Онлайн", + "offline": "Офлайн", + "reachable": "Доступний", + "unreachable": "Недоступний", + "usable": "Доступно", + "unusable": "Непридатне" } }, "vpn": { "name": "VPN", "description": "Огляд ваших VPN з'єднань", "serviceUnavailable": "VPN недоступний", - "option": {} + "status": { + "running": "Запущено", + "notRunning": "Не працює", + "unavailable": "Unavailable", + "vpn": "VPN: {status}" + } }, "ups": { "name": "ДБЖ", @@ -2328,14 +3498,19 @@ "runtime": "Час виконання", "load": "Завантажити", "input": "Ввід", - "output": "Вивід" + "output": "Вивід", + "batteryVoltage": "Напруга акумулятора", + "power": "Потужність", + "temperature": "Температура", + "manufacturer": "Виробник", + "model": "Модель", + "serial": "Серійний номер" }, "error": { "internalServerError": "Не вдалося отримати дані UPS" } }, "tracearr": { - "name": "Tracearr", "description": "Покращений моніторинг медіа-сервера з детальними даними потоку та перекодування", "option": { "showStreams": { @@ -2423,10 +3598,7 @@ "label": "Подія", "description": "Показати усі входження певної події", "placeholder": "Виберіть подію", - "loading": "Завантаження подій...", - "noEvents": "Події не знайдено", - "none": "Події відсутні", - "configureWebsiteFirst": "Виберіть спочатку веб-сайт, щоб завантажити події" + "none": "Події відсутні" }, "chartType": { "label": "Тип графіку", @@ -2457,26 +3629,21 @@ "eventNames": { "label": "Події", "description": "Оберіть одну або кілька подій для графіку", - "placeholder": "Оберіть події...", - "loading": "Завантаження подій...", - "noEvents": "Події не знайдено", - "configureWebsiteFirst": "Виберіть спочатку веб-сайт, щоб завантажити події" + "placeholder": "Оберіть події..." }, "topCount": { "label": "Елементи для показу", "description": "Кількість найпопулярніших елементів для відображення (максимум 500)" + }, + "events": { + "loading": "Завантаження подій...", + "noEvents": "Події не знайдено", + "configureWebsiteFirst": "Виберіть спочатку веб-сайт, щоб завантажити події" } }, "event": { - "occurrences": "події", "label": "події" }, - "topPages": { - "direct": "Прямий" - }, - "topReferrers": { - "direct": "Прямий" - }, "events": { "selectPrompt": "Оберіть події для графіку" }, @@ -2485,6 +3652,9 @@ "noWebsite": "Немає налаштованого веб-сайту", "noData": "Немає доступних даних", "internalServerError": "Не вдалося отримати дані Umami" + }, + "top": { + "direct": "Прямий" } }, "common": { @@ -2512,7 +3682,8 @@ }, "integration": { "noData": "Не знайдено інтеграції", - "description": "Натисніть для створення нової інтеграції" + "description": "Натисніть для створення нової інтеграції", + "manage": "Керування інтеграціями" }, "app": { "noData": "Додаток не знайдено", @@ -2523,7 +3694,61 @@ "noIntegration": "Інтеграція не вибрана", "noData": "Немає даних про інтеграцію" }, - "option": {} + "integrationDisconnected": "Дані недоступні, всі інтеграції відключені", + "updatedAt": "Оновлено {date}", + "title": { + "label": "Заголовок" + }, + "openInNewTab": { + "label": "Відкрити в новій вкладці" + }, + "showTitle": { + "label": "Показати назву" + }, + "weatherLocation": { + "label": "Погода розташування" + }, + "layout": { + "label": "Макет", + "option": { + "horizontal": "Горизонтально", + "vertical": "Вертикально", + "grid": "Сітка" + } + }, + "select": { + "loading": "Завантаження...", + "loadError": "Не вдалося завантажити параметри" + }, + "dateFormat": { + "label": "Формат дати", + "description": "Як має виглядати дата" + }, + "visibleStorageVolumes": { + "label": "Видимі об'єми сховища", + "description": "Доступно тільки коли кожна вибрана інтеграція являє собою OpenMediaVault або Synology. Залиште порожнім, щоб показати всі виявлені обсяги зберігання.", + "placeholder": "Оберіть томи сховища" + }, + "tableOptions": { + "columns": { + "label": "Стовпці для показу" + }, + "columnOrder": { + "label": "Порядок стовпця" + }, + "columnWidths": { + "label": "Ширина стовпця" + }, + "enableRowSorting": { + "label": "Увімкнути сортування елементів" + }, + "defaultSort": { + "label": "Стовпець для сортування за замовчуванням" + }, + "invertSorting": { + "label": "Інверсія сортування" + } + } }, "video": { "name": "Потокова трансляція відео", @@ -2582,6 +3807,7 @@ "transcoding": "Транскодування", "paused": "Призупинено", "remaining": "Залишилося {minutes} хв", + "seasonEpisode": "С{season} Е{episode}", "metadata": { "title": "Статистика ботів", "video": { @@ -2599,11 +3825,16 @@ "resolution": "Роздільна здатність", "target": "Цільовий кодек" } - } + }, + "unknownUser": "Невідомий користувач" + }, + "summary": { + "sessions": "{count, plural, one {# сеанс} other {# сесій}}", + "playing": "Відтворюється: {count}", + "transcoding": "Транскодування {count}" } }, "paperlessNgx": { - "name": "Безпаперовий ngx", "description": "Огляд архіву документів Paperless-ngx", "documentsTotal": "Всього документів", "documentsInbox": "Вхідні", @@ -2647,6 +3878,192 @@ "internalServerError": "Не вдалося отримати дані Paperless-ngx" } }, + "patchmon": { + "description": "Огляд стану патчів хоста від PatchMon", + "title": "Статистика PatchMon", + "totalHosts": "Всього хостів", + "hostsNeedingUpdates": "Потребує оновлення", + "securityUpdates": "Оновлення безпеки", + "upToDateHosts": "Оновлені хости", + "hostsWithSecurityUpdates": "Хости з оновленнями безпеки", + "recentUpdates24h": "Оновлення (24г)", + "totalOutdatedPackages": "Застарілі пакети", + "totalRepos": "Репозитарії", + "osDistribution": "Розподіл ОС", + "compliance": "Відповідність патчам", + "complianceRatio": "{upToDate} / {total}", + "lastUpdated": "Оновлено {time}", + "option": { + "showTotalHosts": { + "label": "Показати хости загалом", + "description": "Відображати загальну кількість контрольованих хостів" + }, + "showHostsNeedingUpdates": { + "label": "Показувати потрібні оновлення хостів", + "description": "Відображати хости з принаймні одним застарілим пакетом" + }, + "showSecurityUpdates": { + "label": "Показати оновлення безпеки", + "description": "Відображати загальну кількість доступних оновлень безпеки" + }, + "showUpToDateHosts": { + "label": "Показувати актуальні хости", + "description": "Відображати хостингові системи без застарілих пакетів" + }, + "showHostsWithSecurityUpdates": { + "label": "Показувати хости з оновленнями безпеки", + "description": "Показувати хости, які потребують патчів безпеки" + }, + "showRecentUpdates24h": { + "label": "Показати останні оновлення (24h)", + "description": "Відображати кількість оновлень, застосованих за останні 24 години" + }, + "showTotalOutdatedPackages": { + "label": "Показати застарілі пакети", + "description": "Відображати загальну кількість застарілих пакетів у всіх хостах" + }, + "showTotalRepos": { + "label": "Показати репозиторії", + "description": "Відображати кількість активних репозиторіїв, що відслідковуються" + }, + "enableThresholdColors": { + "label": "Увімкнути кольори порогових значень", + "description": "Значення колірних характеристик: зелений, жовтий або червоний, залежно від пресетів серйозності" + }, + "useCustomThresholds": { + "label": "Розширені пороги", + "description": "Налаштуйте пороги попереджень та критичних значень для кожної статистики, використовуючи абсолютні показники або відсотки від загальної кількості хостів" + }, + "thresholdMode": { + "option": { + "absolute": "Абсолютна кількість", + "percent": "Відсоток від загальної кількості хостів" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "Потрібен поріг оновлення", + "description": "Порівняйте оновлення як абсолютне значення або відсоток від загальної кількості хостів" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "Поріг попередження про нові оновлення" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "Потребує оновлення критичного порогу" + }, + "securityUpdatesThresholdMode": { + "label": "Режим оновлення системи безпеки", + "description": "Порівняйте оновлення безпеки як абсолютне значення або відсоток від загальної кількості хостів" + }, + "securityUpdatesWarningAt": { + "label": "Поріг попередження про оновлення безпеки" + }, + "securityUpdatesCriticalAt": { + "label": "Критичний поріг оновлення системи безпеки" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "Хости з режимом порогу оновлень безпеки", + "description": "Порівняйте кількість хостів як абсолютне значення або відсоток від загальної кількості хостів" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "Хости з попередженням про оновлення безпеки" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "Хости з критичним порогом оновлення безпеки" + }, + "upToDateHostsThresholdMode": { + "label": "Оновлений режим порогового хостів", + "description": "Порівняйте актуальний хост як абсолютне значення або відсоток від загальної кількості хостів" + }, + "upToDateHostsWarningAt": { + "label": "Поріг попередження для актуальних хостів", + "description": "Вмикається жовтий колір, коли значення дорівнює або перевищує цей поріг, але нижче повного покриття" + }, + "upToDateHostsCriticalAt": { + "label": "Критичний поріг для оновлених хостів", + "description": "Вмикається червоний, коли значення падає нижче цього порогу" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "Режим порогу застарілих пакетів", + "description": "Порівняйте застарілі пакети як абсолютне значення або відсоток від загальної кількості хостів" + }, + "totalOutdatedPackagesWarningAt": { + "label": "Поріг попередження про застарілі пакети" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "Критичний поріг застарілих пакетів" + }, + "showOsDistribution": { + "label": "Показати розподіл ОС", + "description": "Показати розподіл контрольованих хостів операційною системою" + }, + "osDistributionLimit": { + "label": "Обмеження розподілу ОС", + "description": "Максимальна кількість операційних систем для відображення", + "option": { + "3": "Топ 3", + "5": "Тор 5", + "10": "Топ 10", + "all": "Усі" + } + }, + "showOsVersion": { + "label": "Показати версію ОС", + "description": "Додавати версію ОС до кожної мітки дистрибуції, коли вона стане доступною" + }, + "showComplianceHero": { + "label": "Показати героя відповідності", + "description": "Відображати кільце відповідності, яке показує відсоток оновлених хостів" + }, + "osDisplayMode": { + "label": "Режим відображення ОС", + "description": "Виберіть спосіб відображення дистрибутива операційної системи", + "option": { + "bars": "Горизонтальні смуги", + "donut": "Кільцева діаграма" + } + }, + "threshold": { + "warningAt": { + "description": "Вмикається жовтий, коли значення досягає цього порогу" + }, + "criticalAt": { + "description": "Вмикається червоний, коли значення досягає цього порогу" + } + } + }, + "error": { + "internalServerError": "Не вдалося отримати дані PatchMon" + } + }, + "bazarr": { + "description": "Огляд відсутніх субтитрів та стану справності вашого екземпляра Bazarr", + "episodes": "Відсутні епізоди", + "movies": "Відсутні фільми", + "providers": "Проблеми p постачальником", + "status": "Проблеми зі здоров'ям", + "announcements": "Оголошення", + "option": { + "showMissingEpisodes": { + "label": "Показати відсутні епізоди", + "description": "Відображати кількість епізодів без субтититрів" + }, + "showMissingMovies": { + "label": "Показати відсутні фільми", + "description": "Відобразити кількість фільмів без субтитрів" + }, + "showProviderIssues": { + "label": "Показати проблеми постачальника", + "description": "Відображати кількість постачальника субтитрів з проблемами" + }, + "showHealthIssues": { + "label": "Показувати проблеми зі здоров’ям", + "description": "Відображати кількість проблем зі здоров’ям Bazarr" + } + }, + "error": { + "internalServerError": "Не вдалося отримати дані Bazarr" + } + }, "immich-serverStats": { "name": "Статистика Immich на сервері", "description": "Інформація про Ваш екземпляр Immich", @@ -2671,7 +4088,8 @@ "users": "Користувачі", "photos": "Фото", "videos": "Відео", - "storage": "Використане сховище" + "storage": "Використане сховище", + "albumLimit": "Найбільші альбоми (показано до {count})" }, "immich-albumCarousel": { "name": "Immich альбом", @@ -2695,24 +4113,21 @@ } }, "description": "Слайд-шоу зображень з альбому Immich або повної бібліотеки", - "noPhotos": "Фотографії не знайдено" + "noPhotos": "Фотографії не знайдено", + "albumPhoto": "Фото альбому", + "actions": { + "previousPhoto": "Попереднє фото", + "nextPhoto": "Наступне фото", + "pauseSlideshow": "Pause slideshow", + "resumeSlideshow": "Відновити слайд-шоу", + "toggleSlideshow": "Призупинити чи відновити слайд-шоу", + "photo": "Фото {number}" + } }, "downloads": { "name": "Завантаження", "description": "Дозволяє переглядати та керувати завантаженнями від клієнтів Torrent та Usenet.", "option": { - "columns": { - "label": "Стовпці, що відображаються" - }, - "enableRowSorting": { - "label": "Увімкнути сортування елементів" - }, - "defaultSort": { - "label": "Стовпець для сортування за замовчуванням" - }, - "descendingDefaultSort": { - "label": "Зворотнє сортування" - }, "showCompletedUsenet": { "label": "Відображати записи usenet відмічені як завершені" }, @@ -2737,12 +4152,6 @@ "limitPerIntegration": { "label": "Обмежити елементи за інтегрування", "description": "Це обмежить кількість елементів, що відображаються для кожної інтеграції, а не глобально" - }, - "columnOrder": { - "label": "Порядок стовпців" - }, - "columnWidths": { - "label": "Ширина стовпців" } }, "errors": { @@ -2903,6 +4312,10 @@ "mediaRequests-requestList": { "name": "Список медіа запитів", "description": "Перегляньте список усіх медіазапитів від ваших Overseerr або Jellyseerr", + "empty": { + "title": "Поки немає мультимедійних запитів", + "description": "Пошук фільму або шоу, щоб розпочати запит." + }, "option": { "linksTargetNewTab": { "label": "Відкрийте посилання в новій вкладці" @@ -2936,12 +4349,16 @@ "failed": "Невдало", "completed": "Завершено" }, + "unknown": "Невідомо", "toBeDetermined": "Буде визначено" }, "mediaRequests-requestStats": { "name": "Статистика медіазапитів", "description": "Статистика ваших запитів у медіа", - "option": {}, + "empty": { + "title": "Запиту поки немає", + "description": "Статистика з'явиться після першого запиту медіа." + }, "titles": { "stats": { "main": "Медіа-статистика", @@ -2951,8 +4368,7 @@ "declined": "Вже відхилено", "available": "Вже доступно", "tv": "Запити на серіали", - "movie": "Запити на фільми", - "total": "Всього" + "movie": "Запити на фільми" }, "users": { "main": "Найкращі користувачі", @@ -2978,7 +4394,6 @@ }, "currentIndex": "{start}-{end} з {total}", "healthCheck": { - "title": "Перевірка працездатності", "queued": "У черзі", "status": { "healthy": "Здоровий", @@ -2987,38 +4402,63 @@ }, "panel": { "statistics": { - "empty": "Пусто", - "transcodes": "Перекодує", - "transcodesCount": "Перекодування", - "healthChecksCount": "Перевірка працездатності", "filesCount": "Файли", "savedSpace": "Збережений простір", - "healthChecks": "Перевірка працездатності", "videoCodecs": "Кодеки", "videoContainers": "Контейнери", "videoResolutions": "Роздільна здатність" }, "workers": { - "empty": "Пусто", "table": { - "file": "Файл", "eta": "Залишилося", - "progress": "Прогрес", - "transcode": "Перекодувати", - "healthCheck": "Перевірка працездатності" + "progress": "Прогрес" } }, "queue": { - "empty": "Пусто", "table": { - "file": "Файл", - "size": "Розмір", - "transcode": "Перекодувати", - "healthCheck": "Перевірка працездатності" + "size": "Розмір" } + }, + "common": { + "empty": "Пусто", + "file": "Файл", + "healthCheck": "Перевірка працездатності", + "transcode": "Перекодувати", + "transcodes": "Перекодування", + "healthChecks": "Перевірка працездатності" } } }, + "mediaMissing": { + "name": "Відсутня медіа в черзі", + "description": "Показує відсутні і в черзі фільми і епізоди з Radarr і Sonarr", + "option": { + "showMissing": { + "label": "Показати відсутні елементи" + }, + "showQueued": { + "label": "Показати елементи в черзі" + }, + "pageSize": { + "label": "Елементів на сторінці" + } + }, + "tab": { + "missing": "Відсутні", + "queued": "У черзі" + }, + "type": { + "movie": "Фільм", + "episode": "Епізод", + "book": "Книжка" + }, + "empty": { + "missing": "Немає відсутніх елементів", + "queued": "Немає елементів у черзі", + "noTabsEnabled": "Увімкнути принаймні одну вкладку в налаштуваннях віджету" + }, + "timeLeft": "Залишилося часу" + }, "rssFeed": { "name": "RSS-канали", "description": "Моніторинг та відображення однієї або кількох загальних RSS-, ATOM- або JSON-стрічок", @@ -3041,6 +4481,13 @@ "showPosterImage": { "label": "Показати зображення постеру" } + }, + "error": { + "allFeedsFailed": "Не вдалося завантажити RSS канали. Перевірте URL-адреси каналів і спробуйте ще раз." + }, + "warning": { + "partial": "{count, plural, one {# RSS стрічка не може бути завантажена} other {# RSS-стрічок не вдалося завантажити}}", + "stale": "Неможливо оновити RSS канали. Показано раніше завантажені записи." } }, "releases": { @@ -3116,17 +4563,8 @@ "label": "Регулярний вираз" } }, - "edit": { - "label": "Редагувати" - }, "editForm": { - "title": "Редагувати репозиторій", - "cancel": { - "label": "Скасувати" - }, - "confirm": { - "label": "Підтвердити" - } + "title": "Редагувати репозиторій" }, "importForm": { "title": "Імпортувати з Docker" @@ -3143,8 +4581,7 @@ "label": "Токени постачальника", "token": "Токен", "configured": "Токен налаштовано", - "notConfigured": "Токен не встановлено", - "save": "Зберегти" + "notConfigured": "Токен не встановлено" } } }, @@ -3171,17 +4608,32 @@ "noProviderResponse": "Немає відповіді від провайдера", "unexpected": "Неочікувана помилка провайдера" } - } + }, + "expandDetails": "Показати деталі для {name}", + "collapseDetails": "Приховати деталі для {name}" }, "networkControllerSummary": { - "option": {}, - "card": { - "vpn": { - "countConnected": "{count} підключено" + "advanced": { + "updated": "Оновлено", + "metric": { + "latency": "Латентність", + "ping": "Пінг", + "uptime": "Час роботи", + "users": "Користувачі", + "guests": "Гості" } }, + "card": { + "vpn": { + "countConnected": "{count, plural, one {# підключено} other {# підключено}}", + "label": "VPN" + }, + "wan": "WAN", + "web": "Веб", + "wifi": "Wi-Fi", + "lan": "LAN" + }, "error": { - "integrationsDisconnected": "Дані недоступні, всі інтеграції відключені", "unknownContentOption": "Невідомий вміст для віджета зведення мережевого контролера: " }, "name": "Зведення мережного контролера", @@ -3218,7 +4670,6 @@ } }, "error": { - "integrationsDisconnected": "Дані недоступні, всі інтеграції відключені", "unknownContentOption": "Невідомий параметр вмісту для віджету стану мережі: " }, "name": "Статус мережі", @@ -3248,7 +4699,6 @@ "versiontitle": "Версії", "cputitle": "Використання CPU", "memorytitle": "Використання пам’яті", - "cpu": "ЦП", "memory": "Пам'ять", "interfaces": { "name": "назва", @@ -3256,6 +4706,16 @@ "recv": "Отримано", "title": "Мережеві інтерфейси" } + }, + "empty": { + "noInterfaces": "Немає даних інтерфейсу мережі" + }, + "versionUnknown": "Невідома версія", + "metricAccessible": "{metric}: {value}%, {status}", + "status": { + "normal": "Нормальний", + "warning": "Застереження", + "critical": "Критичний" } }, "notifications": { @@ -3265,8 +4725,21 @@ "option": { "hideLogos": { "label": "Сховати логотипи" + }, + "messageFormat": { + "label": "Формат повідомлення", + "option": { + "auto": "Автоматично", + "plain": "Простий текст", + "markdown": "Markdown", + "html": "Вікі формату HTML" + } } - } + }, + "openService": "Відкрити службу сповіщень", + "deleteNotification": "Видалити сповіщення з Gotify", + "deleteFailed": "Не вдалося видалити сповіщення", + "deleteFailedMessage": "Сповіщення не вдалося видалити. Будь ласка, спробуйте ще раз." }, "speedtestTracker": { "name": "Трекер швидкості", @@ -3308,7 +4781,6 @@ } }, "uptimeKuma": { - "name": "Час безперебійної роботи Кума", "description": "Відстежуйте статистику безвідмовної роботи на сторінці стану Uptime Kuma", "option": { "showAverageUptime": { @@ -3345,8 +4817,58 @@ }, "error": { "internalServerError": "Не вдалося отримати дані про час роботи" + }, + "status": { + "up": "Швидкість вивантаження", + "down": "Швидкість завантаження", + "paused": "Призупинено" } }, + "traefik": { + "description": "Огляд маршрутизаторів, сервісів, проміжного програмного забезпечення та точок входу Traefik", + "option": { + "showTcp": { + "label": "Показати TCP" + }, + "showUdp": { + "label": "Show UDP" + }, + "showEntryPoints": { + "label": "Показувати точки входу" + } + }, + "instances": "Traefik екземпляри", + "versionUnknown": "Версія невідома", + "summary": { + "routers": "Маршрутизатори", + "entryPoints": "Точки входу" + }, + "resource": { + "routers": "Маршрутизатори", + "middlewares": "Проміжне програмне забезпечення" + }, + "status": { + "healthy": "Здоровий", + "errors": "{count} помилок", + "warnings": "{count} застережень" + }, + "error": { + "internalServerError": "Неможливо отримати дані Traefik" + }, + "resourceType": { + "router": "Маршрутизатор", + "service": "Послуга", + "middleware": "Середня програма" + }, + "resourceStatus": { + "enabled": "Увімкнено", + "disabled": "Вимкнено", + "warning": "Застереження", + "error": "Помилка", + "unknown": "Невідомо" + }, + "failedEndpoint": "Помилка: {endpoint}" + }, "audioStats": { "name": "Статистика аудіо", "description": "Бібліотека і відтворення статистики з Navidrome або Audiobookf", @@ -3411,9 +4933,7 @@ "label": "Видимі графіки", "description": "Оберіть графіки, які хочете бачити.", "option": { - "cpu": "ЦП", "memory": "Оперативна Пам'ять", - "gpu": "Графічний процесор", "network": "Мережа" } }, @@ -3428,12 +4948,11 @@ } }, "card": { - "cpu": "ЦП", "memory": "ПАМ", - "gpu": "Графічний процесор", "network": "Мережа", "up": "Відвантаження", - "down": "Завантаження" + "down": "Завантаження", + "memoryTooltip": "{used} / {available} ({percent}%)" } }, "systemDisks": { @@ -3459,151 +4978,88 @@ }, "showBackgroundBar": { "label": "Показувати фонову панель використання" - }, - "visibleStorageVolumes": { - "label": "Видимі обсяги сховища", - "description": "Доступно лише тоді, коли всі вибрані інтеграції – це Synology. Залиште поле порожнім, щоб відобразити всі виявлені томи сховища.", - "placeholder": "Оберіть томи сховища" } }, "status": { - "unhealthy": "Нездоровий" + "unhealthy": "Нездоровий", + "smart": "РОЗУМНИЙ", + "free": "{percentage}% вільно" + } + }, + "customApi": { + "name": "Користувацький віджет", + "description": "Візуалізувати налаштоване визначення JSX.", + "customJsx": { + "noTemplate": "Шаблон JSX не налаштовано.", + "templateWarnings": "Шаблон {count} попереджень:", + "requestIdRequired": "Для цього керування мережею потрібен називався запит Id.", + "unsavedPreview": "Запустіть тест початкового запиту в редакторі перед тестуванням названих запитів.", + "invalidParams": "Неприпустимі параметри запиту.", + "loading": "Завантажую запит...", + "loadRequest": "Завантажувати запит", + "requestFailed": "Не вдалося виконати запит.", + "retry": "Запит повторної спроби", + "actionCompleted": "Дія успішно виконана.", + "actionSimulated": "Симульовані дії; запит не відправлено.", + "actionsDisabledEditMode": "Дії вимкнені у режимі редагування.", + "widgetItemUnavailable": "Цей елемент віджета недоступний.", + "toggle": "Переключити", + "copied": "Скопійовано", + "confirmDelete": "Підтвердіть цю руйнівну дію." + }, + "option": { + "definitionId": { + "label": "Користувацький віджет" + }, + "refreshInterval": { + "label": "Інтервал оновлення", + "description": "Як часто слід оновлювати дані з API (в секундах)" + } + }, + "noDefinition": "Не обрано визначення", + "definitionNotFound": "Користувальницький віджет недоступний", + "migrationRequired": "Застарілий користувацький віджет зберігається, але його необхідно мігрувати в Custom JSX v2 із управління користувацькими віджетами, перш ніж він зможе працювати.", + "manageMigration": "Відкрити керування віджетами", + "contactAdmin": "Зверніться до адміністратора.", + "configurationNeedsRepair": "Параметри віджета змінені. Змініть віджет для відновлення його конфігурації.", + "removeFromBoard": "Видалити з дошки", + "editModePending": "Збережіть дошку, щоб завантажити цей віджет.", + "picker": { + "group": "Користувацькі віджети JSX", + "empty": "Не знайдено користувацьких віджетів", + "preview": "Попередній перегляд", + "sources": "{count, plural, one {# джерело} other {# джерела}}", + "requests": "{count, plural, one {# запит} other {# запитів}}", + "migrationRequired": "Потрібна міграція", + "migrationDescription": "Цей розміщений віджет v1 ще не може запуститися. Скопіюйте свій червоний командний рядок в LLM, а потім вставте єдиний JSON відповідь у Homarr.", + "manageMigration": "Відкрити керування віджетами", + "contactAdmin": "Зверніться до адміністратора." + }, + "configuration": { + "needsAttention": "Конфігурація потребує уваги: {message}", + "advancedOptions": "Розширені налаштування", + "invalidJson": "Невірний JSON" } }, "beszelSystemTable": { "name": "Beszel системи (Таблиця)", "description": "Вид таблиць всіх систем, що контролюються в Beszel, з сортованими стовпцями і індикатори стану", "option": { - "statusFilter": { - "label": "Фільтри статусу" - }, "sortBy": { "label": "Сортувати за" }, "sortDirection": { "label": "Порядок сортування" - }, - "showCpu": { - "label": "Показати ЦП" - }, - "showMemory": { - "label": "Показати оперативну пам'ять" - }, - "showDisk": { - "label": "Показати диск" - }, - "showGpu": { - "label": "Показати графічний процесор" - }, - "showLoadAvg": { - "label": "Показати середній рівень навантаження" - }, - "showNet": { - "label": "Показати мережу" - }, - "showTemp": { - "label": "Показувати температуру" - }, - "showBattery": { - "label": "Показати заряд батареї" - }, - "showServices": { - "label": "Показати сервіси" - }, - "showUptime": { - "label": "Показати час роботи" - }, - "showAgent": { - "label": "Показати версію агента" - }, - "columnOrder": { - "label": "Порядок стовпців" - }, - "columnWidths": { - "label": "Ширина стовпців" } }, - "noRecords": "Системи не знайдені", "error": { - "internalServerError": "Не вдається підключитися до Beszel. Перевірте параметри інтеграції.", "layoutSaveTitle": "Не вдалося зберегти макет таблиці", "layoutSaveMessage": "Не вдалося зберегти порядок або ширину стовпців. Спробуйте ще раз." - }, - "column": { - "system": "Система", - "cpu": "ЦП", - "memory": "Оперативна Пам'ять", - "disk": "Диск", - "gpu": "Графічний процесор", - "loadAvg": "Сер. навантаження", - "net": "Мережа", - "temp": "Темп", - "battery": "Бат", - "services": "Сервіси", - "uptime": "Час роботи", - "agent": "Агент" } }, "beszelSystemGrid": { "name": "Beszel система (Сітка)", - "description": "Таблиця карток усіх систем, що контролюються Beszel, з показниками в режимі реального часу", - "option": { - "statusFilter": { - "label": "Фільтри статусу" - }, - "showCpu": { - "label": "Показати ЦП" - }, - "showMemory": { - "label": "Показати оперативну пам'ять" - }, - "showDisk": { - "label": "Показати диск" - }, - "showGpu": { - "label": "Показати графічний процесор" - }, - "showLoadAvg": { - "label": "Показати середнє навантаження" - }, - "showNet": { - "label": "Показати мережу" - }, - "showTemp": { - "label": "Показувати температуру" - }, - "showBattery": { - "label": "Показати заряд батареї" - }, - "showServices": { - "label": "Показати сервіси" - }, - "showUptime": { - "label": "Показати час роботи" - }, - "showAgent": { - "label": "Показати версію агента" - } - }, - "error": { - "internalServerError": "Не вдається підключитися до Beszel. Перевірте параметри інтеграції." - }, - "empty": { - "noSystems": "Системи не знайдені" - }, - "metric": { - "cpu": "ЦП", - "memory": "Оперативна Пам'ять", - "disk": "Диск", - "gpu": "Графічний процесор", - "loadAvg": "Сер. навантаження", - "net": "Мережа", - "temp": "Темп", - "battery": "Бат", - "services": "Служби", - "uptime": "Час роботи", - "agent": "Агент" - } + "description": "Таблиця карток усіх систем, що контролюються Beszel, з показниками в режимі реального часу" }, "beszelAlerts": { "name": "Beszel сповіщення", @@ -3617,11 +5073,12 @@ } }, "empty": "Сповіщення не налаштовані", - "error": { - "internalServerError": "Не вдається підключитися до Beszel. Перевірте параметри інтеграції." - }, "history": "Історія", "resolved": "Вирішено", + "alertDescription": { + "statusDuration": "Недоступно протягом {minutes} хв", + "threshold": "Перевищує {value} протягом {minutes} хв" + }, "status": { "triggered": "Активовано", "ok": "ОК" @@ -3668,16 +5125,16 @@ "noSystems": "Системи не знайдені" }, "error": { - "internalServerError": "Не вдається підключитися до Beszel. Перевірте параметри інтеграції.", "liveConnectionFailed": "Помилка з'єднання. Ваш екземпляр Beszel може не підтримувати потоки в реальному часі.", "switchToHistorical": "Перейти до історії перегляду", - "systemNotFound": "Вибрану систему не знайдено. Виберіть іншу систему." + "systemNotFound": "Вибрану систему не знайдено. Виберіть іншу систему.", + "selectionSaveTitle": "Не вдалося зберегти вибране", + "selectionSaveMessage": "Не вдалося зберегти вашу систему або період часу. Будь ласка, спробуйте ще раз." }, "chart": { "cpu": { "title": "Використання ЦП", - "subtitle": "Середнє системне завантаження ЦП", - "series": "ЦП" + "subtitle": "Середнє системне завантаження ЦП" }, "memory": { "title": "Використання пам'яті", @@ -3719,289 +5176,550 @@ "title": "Мережа Docker ввід/вивід", "subtitle": "Мережевий трафік Docker контейнерів" } + }, + "period": { + "live": "Наживо", + "oneHour": "1 год", + "twelveHours": "12 год", + "oneDay": "24 год", + "oneWeek": "1 тис", + "thirtyDays": "30д" } }, - "patchmon": { - "name": "ПатчМон", - "description": "Огляд стану патчів хоста від PatchMon", - "title": "Статистика PatchMon", - "totalHosts": "Всього хостів", - "hostsNeedingUpdates": "Потребує оновлення", - "securityUpdates": "Оновлення безпеки", - "upToDateHosts": "Оновлені хости", - "hostsWithSecurityUpdates": "Хости з оновленнями безпеки", - "recentUpdates24h": "Оновлення (24г)", - "totalOutdatedPackages": "Застарілі пакети", - "totalRepos": "Репозитарії", - "osDistribution": "Розподіл ОС", - "compliance": "Відповідність патчам", - "complianceRatio": "{upToDate} / {total}", - "lastUpdated": "Оновлено {time}", - "option": { - "showTotalHosts": { - "label": "Показати хости загалом", - "description": "Відображати загальну кількість контрольованих хостів" - }, - "showHostsNeedingUpdates": { - "label": "Показувати потрібні оновлення хостів", - "description": "Відображати хости з принаймні одним застарілим пакетом" - }, - "showSecurityUpdates": { - "label": "Показати оновлення безпеки", - "description": "Відображати загальну кількість доступних оновлень безпеки" - }, - "showUpToDateHosts": { - "label": "Показувати актуальні хости", - "description": "Відображати хостингові системи без застарілих пакетів" - }, - "showHostsWithSecurityUpdates": { - "label": "Показувати хости з оновленнями безпеки", - "description": "Показувати хости, які потребують патчів безпеки" - }, - "showRecentUpdates24h": { - "label": "Показати останні оновлення (24h)", - "description": "Відображати кількість оновлень, застосованих за останні 24 години" - }, - "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": "Топ 3", - "5": "Тор 5", - "10": "Топ 10", - "all": "Усі" - } - }, - "showOsVersion": { - "label": "Показати версію ОС", - "description": "Додавати версію ОС до кожної мітки дистрибуції, коли вона стане доступною" - }, - "showComplianceHero": { - "label": "Показати героя відповідності", - "description": "Відображати кільце відповідності, яке показує відсоток оновлених хостів" - }, - "osDisplayMode": { - "label": "Режим відображення ОС", - "description": "Виберіть спосіб відображення дистрибутива операційної системи", - "option": { - "bars": "Горизонтальні смуги", - "donut": "Кільцева діаграма" - } - } + "assistant": { + "name": "Помічник", + "description": "Отримуйте повний асистент бесіди безпосередньо на вашій дошці.", + "unavailable": { + "title": "Помічник недоступний", + "description": "Увійдіть і попросіть адміністратора налаштувати помічника на панелі управління." }, + "compact": { + "title": "Помічник", + "description": "Змінити розмір цього віджета для спілкування тут або відкрити повну розмову.", + "open": "Відкрити помічника", + "openTitle": "Помічник відкритий бічною панеллю", + "openDescription": "Розмова залишається на одній активній поверхні.", + "returnToWidget": "Повернути розмову з цього віджета", + "otherWidgetTitle": "Помічник активний на іншому віджеті", + "otherWidgetDescription": "Тільки одна розмова залишається активною одночасно.", + "useHere": "Використовувати асистента на цьому віджеті" + } + }, + "beszel": { "error": { - "internalServerError": "Не вдалося отримати дані PatchMon" - } - }, - "bazarr": { - "name": "Bazarr", - "description": "Огляд відсутніх субтитрів та стану справності вашого екземпляра Bazarr", - "episodes": "Відсутні епізоди", - "movies": "Відсутні фільми", - "providers": "Проблеми p постачальником", - "status": "Проблеми зі здоров'ям", - "option": { - "showMissingEpisodes": { - "label": "Показати відсутні епізоди", - "description": "Відображати кількість епізодів без субтититрів" - }, - "showMissingMovies": { - "label": "Показати відсутні фільми", - "description": "Відобразити кількість фільмів без субтитрів" - }, - "showProviderIssues": { - "label": "Показати проблеми постачальника", - "description": "Відображати кількість постачальника субтитрів з проблемами" - }, - "showHealthIssues": { - "label": "Показувати проблеми зі здоров’ям", - "description": "Відображати кількість проблем зі здоров’ям Bazarr" - } - }, - "error": { - "internalServerError": "Не вдалося отримати дані Bazarr" - } - }, - "mediaMissing": { - "name": "Відсутня медіа в черзі", - "description": "Показує відсутні і в черзі фільми і епізоди з Radarr і Sonarr", - "option": { - "showMissing": { - "label": "Показати відсутні елементи" - }, - "showQueued": { - "label": "Показати елементи в черзі" - }, - "pageSize": { - "label": "Елементів на сторінці" - } - }, - "tab": { - "missing": "Відсутні", - "queued": "У черзі" - }, - "type": { - "movie": "Фільм", - "episode": "Епізод" + "internalServerError": "Не вдається підключитися до Beszel. Перевірте параметри інтеграції." }, "empty": { - "missing": "Немає відсутніх елементів", - "queued": "Немає елементів у черзі", - "noTabsEnabled": "Увімкнути принаймні одну вкладку в налаштуваннях віджету" + "noSystems": "Системи не знайдені" }, - "timeLeft": "Залишилося часу" - }, - "traefik": { - "name": "Трафік", - "description": "Огляд маршрутизаторів, сервісів, проміжного програмного забезпечення та точок входу Traefik", - "option": { - "showTcp": { - "label": "Показати TCP" + "options": { + "statusFilter": { + "label": "Фільтри статусу" }, - "showUdp": { - "label": "Show UDP" + "showCpu": { + "label": "Показати ЦП" }, - "showEntryPoints": { - "label": "Показувати точки входу" + "showMemory": { + "label": "Показати оперативну пам'ять" + }, + "showDisk": { + "label": "Показати диск" + }, + "showGpu": { + "label": "Показати графічний процесор" + }, + "showLoadAvg": { + "label": "Показати середнє навантаження" + }, + "showNet": { + "label": "Показати мережу" + }, + "showTemp": { + "label": "Показувати температуру" + }, + "showBattery": { + "label": "Показувати заряд батереї" + }, + "showServices": { + "label": "Показати сервіси" + }, + "showUptime": { + "label": "Показати час роботи" + }, + "showAgent": { + "label": "Показати версію агента" } }, - "instances": "Traefik екземпляри", - "versionUnknown": "Версія невідома", - "summary": { - "routers": "Маршрутизатори", - "entryPoints": "Точки входу" - }, - "resource": { - "routers": "Маршрутизатори", - "services": "Служби", - "middlewares": "Проміжне програмне забезпечення" - }, - "status": { - "healthy": "Здоровий", - "errors": "{count} помилок", - "warnings": "{count} застережень" - }, - "error": { - "internalServerError": "Неможливо отримати дані Traefik" + "metric": { + "system": "Система", + "source": "Інтеграція", + "hostname": "Назва хоста", + "cpuModel": "Модель ЦП", + "cores": "Ядра", + "memoryTotal": "Всього пам'яті", + "memory": "Оперативна Пам'ять", + "disk": "Диск", + "loadAvg": "Сер. навантаження", + "net": "Net", + "temp": "Темп", + "battery": "Бат", + "uptime": "Час роботи", + "agent": "Агент" } }, - "wud": { - "name": "Що таке Docker", - "description": "Показати скільки переглянутих контейнерів мають доступні оновлення.", - "title": "Що таке Docker", - "monitored": "Відстежено", - "updatesAvailable": "{count, plural, one {# оновлення доступні} other {# оновлень доступні}}", - "updateAvailable": "Доступне оновлення", - "openReleaseNotes": "Відкрити замітки до випуску", + "llamacpp": { + "name": "llama.cpp", + "description": "Показати здоров'я, завантажену модель і швидкість генерування вашого локального llama.cppp-сервера.", + "title": "llama.cpp", + "status": { + "unhealthy": "Нездоровий ({status})" + }, + "idle": "Неактивне", + "speedTooltip": { + "current": "Поточна швидкість генерації", + "average": "Середня швидкість створення з моменту запуску", + "request": "Середня швидкість починаючи з цього запиту" + }, + "busy": "{count, plural, one {# запит виконується} other {# запитів виконується}}", + "modelInfo": { + "context": "Контекст", + "size": "Розмір файлу", + "parameters": "Параметри", + "model": "Модель", + "quantization": "Квантування" + }, + "stats": { + "tokensProcessed": "Оброблено токенів", + "contextUsage": "Контекст / KV використання", + "cacheHitRate": "Запитувати рівень керування кешем", + "tokensGenerated": "Створені токени" + }, + "error": { + "unreachable": "llama-сервер недоступний" + }, + "unit": { + "speed": "{value} т/с", + "parameters": "{value} Б", + "none": "—", + "speedShort": "/с" + }, "option": { "showTitle": { "label": "Показати назву" }, - "showRing": { - "label": "Показати кільце оновлення" + "showModelInfo": { + "label": "Показати інформацію про модель" }, - "layout": { - "label": "Макет", + "showContextUsage": { + "label": "Показати використання контексту" + }, + "showCacheHitRate": { + "label": "Показувати швидкість розвороту кешу" + }, + "showSpeedStats": { + "label": "Показати статистику швидкості" + }, + "showRequests": { + "label": "Показати запит завантаження" + }, + "showTokenStats": { + "label": "Показувати загальні токени" + }, + "showSpeculative": { + "label": "Показати спекулятивне декодування" + } + }, + "advanced": { + "promptSpeed": "Запитувати швидкість", + "avgSpeed": "Середня генерація", + "requests": "Запити", + "deferred": "Відкладено", + "slots": "{processing}/{total} слоти зайняті", + "speculative": "Спекулятивне декодування", + "avgPrompt": "Середній запит", + "specDrafts": "Спец. чернетки", + "specAccepted": "Спец. прийняті токени", + "specDraftTokens": "Специфічні маркери" + } + }, + "stats": { + "name": "Статистика", + "description": "Об’єднайте статистику з ваших інтеграцій за одним налаштованим віджетом.", + "configure": "Налаштувати метрики", + "refresh": "Оновити статистику", + "empty": "Відкрити налаштування віджетів, виберіть інтеграції, а потім додайте метрики.", + "editorHelp": "Додати метрики з інтеграцій, вибраних для цього віджета. Зміни збережено за допомогою панелі управління.", + "source": "Інтеграція", + "metric": "Метрична система", + "noMetrics": "Немає статистичних даних для цієї інтеграції", + "add": "Додати метрику", + "label": "Власна мітка", + "hidden": "Приховати", + "compact": "Стиснені номери", + "moveUp": "Перемістити вгору", + "moveDown": "Перемістити вниз", + "remove": "Видалити метрику", + "loading": "Завантаження…", + "unavailable": "Unavailable", + "refreshFailed": "Помилка оновлення — показ збережених даних", + "stale": "Збережені дані — оновлення", + "table": { + "value": "Цінність", + "status": "Статус" + }, + "option": { + "table": { + "label": "Вигляд таблиці" + }, + "rows": { + "label": "Стиснуті рядки" + }, + "showIcon": { + "label": "Показати вихідний значок" + }, + "spacing": { + "label": "Інтервал", "option": { - "horizontal": { - "label": "Горизонтально" + "xs": { + "label": "Компактний" }, - "vertical": { - "label": "Вертикально" + "sm": { + "label": "Комфортний" + }, + "md": { + "label": "Специус" } } }, - "showUpdateList": { - "label": "Показати список оновлень контейнерів", - "description": "Відображає список кожного моніторного контейнера, у якого є доступне оновлення зображення" + "entries": { + "label": "Метрика" + }, + "plain": { + "label": "Видалити тло картки" } - } + }, + "fetchFailed": "Неможливо отримати статистику", + "viewOptions": "Налаштувати цей вигляд", + "moreMetrics": "{count} більше у розширеному вигляді", + "localHelp": "Макет, форматування і видимість застосовуються лише до цього перегляду. Загальні налаштування дошки залишаються незмінними.", + "plain": "Видалити тло картки", + "resetView": "Скинути вигляд", + "allHidden": "Всі метрики приховані у цьому вигляді. Для їх відновлення використовуйте цей представ." + }, + "wazuh": { + "target": { + "api": "Wazuh сервер API", + "indexer": "Індексор Wazu", + "wazuh": "Wazuh" + }, + "severity": { + "low": "Низька", + "medium": "Середній", + "high": "Високий", + "critical": "Критичний" + }, + "error": { + "unauthorized": { + "title": "{target} відхилив облікові дані", + "description": "Перевірте ім'я користувача та пароль, які збережено при інтеграції Wazuh. API сервера (порт 55000) та індексатор (порт 9200) використовують окремих користувачів." + }, + "certificate": { + "title": "Сертифікат {target} ненадійний", + "description": "Wazuh використовує самостійно підписаний сертифікат. Запустіть \"Перевірити підключення\" при інтеграції і довіряйте сертифікату, або додайте свою CA в налаштуваннях → Сертифікати." + }, + "unreachable": { + "title": "Не вдалося зв’язатися з {target}", + "description": "Хост відмовив або скинув з'єднання. Перевірте URL, порт та брандмауер. Індекс лише слухає на localhost в установці за замовчуванням за замовчуванням." + }, + "timeout": { + "title": "Минув час очікування {target}", + "description": "Відповідь не може бути перевантажена через 15 секунд." + }, + "status": { + "title": "{target} повернув помилку", + "description": "Помилка запиту з станом HTTP {status}." + }, + "invalidResponse": { + "title": "Неочікувана відповідь від {target}", + "description": "Перевірити, що URL-адреса вказує на Wazuh сервер API або індексатор (індексатора)." + }, + "indexerRequired": { + "title": "Необхідні облікові дані індексатора Wazuh", + "description": "Оповідайте, вразливості та події цілісності файлів читаються з програми Wazuh indexer. Додайте URL індексатора, ім'я користувача і пароль до інтеграції." + }, + "unknown": { + "title": "Не вдалося завантажити дані з {target}", + "description": "Перевірте журнал Homarr для деталей." + } + }, + "range": { + "1h": "1 год", + "24h": "24 год", + "7d": "7 днів", + "30d": "30д" + }, + "levelTooltip": "Рівень правила {level} ({severity})" + }, + "wazuhAgents": { + "name": "Вазухові агенти", + "description": "Список Wazuh агентів зі статусом, ОС, версія і остання підтримка", + "option": { + "statusFilter": { + "label": "Показати агентів" + }, + "sortBy": { + "label": "Сортувати за" + }, + "showVersion": { + "label": "Показати колонку версій Wazuh" + }, + "showGroups": { + "label": "Показувати стовпчик груп" + } + }, + "title": "Агенти", + "total": "Агенти {count}", + "status": { + "active": "Активно", + "disconnected": "Відключено", + "neverConnected": "Ніколи не підключено", + "pending": "Очікує підтвердження" + }, + "statusLabel": { + "active": "Активно", + "disconnected": "Відключено", + "never_connected": "Ніколи не підключено", + "pending": "Очікує підтвердження", + "unknown": "Невідомо" + }, + "live": "Наживо", + "snapshot": "Знімок {age} старий", + "snapshotHint": "Читайте з Wazuh dashshot (wazuh-monitoring) в системі {time}. Додайте облікові дані сервера для живих даних.", + "staleSnapshot": "Agent: snapshot з {time} є застарілим. Перевірте, чи працює робота з моніторингом Wazuh або додайте серверні облікові дані API.", + "noDisconnected": "Всі агенти підключені", + "empty": "Немає агентів, які відповідають цьому фільтру", + "column": { + "status": "Статус", + "name": "Назва", + "ip": "Адреса IP", + "os": "ОС", + "version": "Версія", + "lastKeepAlive": "Не потребує підтримки", + "groups": "Групи" + }, + "outdated": "Старіші за найновішу версію агента ({version})" + }, + "wazuhAlerts": { + "name": "Журнал сповіщень Wazu", + "description": "Останні повідомлення про Wazuh з рівнем використання, техніки MITRE ATT&CK, агент і хост IP джерела", + "option": { + "minLevel": { + "label": "Мінімальний рівень правила", + "description": "Рівень Wazu: 0-6 низький, 7-11 середній, 12-14 високий, 15 + критичний" + }, + "hours": { + "label": "Вікно часу (години)" + }, + "limit": { + "label": "Кількість оповіщень" + }, + "showMitre": { + "label": "Show MITRE ATT&CK techniques" + }, + "showAgent": { + "label": "Показати агента" + }, + "showSourceIp": { + "label": "Показати IP джерела" + }, + "showRuleId": { + "label": "Показати ідентифікатор правила" + } + }, + "title": "Оповіщення · Рівень {level}+ · {hours}год", + "empty": "Немає сповіщень на цьому рівні. Усе тихо.", + "rule": "Правило {id}", + "openInDashboard": "Відкрити це повідомлення у меню налаштувань Wazuh" + }, + "wazuhSummary": { + "name": "Вазуховий рівень", + "description": "Попередження про серйозність розриву з тенденцією проти попереднього періоду", + "option": { + "range": { + "label": "Проміжок часу" + }, + "showTrend": { + "label": "Показати тенденцію проти попереднього періоду" + }, + "showFooter": { + "label": "Показати футер" + } + }, + "title": "Рівень тривоги · {range}", + "alerts": "Сповіщення", + "none": "Немає сповіщень", + "trend": { + "new": "новий", + "tooltip": "Попередній період: {previous}" + }, + "previous": "Попередній {range}: {count}", + "maxLevel": "Максимальний рівень {level}", + "health": "Стан індексатора: {status}", + "manager": "Менеджер {version}" + }, + "wazuhTimeline": { + "name": "Wazuh alerts timeline", + "description": "Необроблені графіки Wazu сповіщень з часом за допомогою тяжкості", + "option": { + "range": { + "label": "Проміжок часу" + }, + "interval": { + "label": "Проміжок" + }, + "chartType": { + "label": "Тип графіку" + }, + "yScale": { + "label": "Масштаб осі Y", + "description": "Квадратний корінь зберігає високі і критичні оповіщення, видимі поруч із тисячами низьких" + }, + "minLevel": { + "label": "Мінімальний рівень правила" + }, + "showLegend": { + "label": "Показати легенду з загальним підсумком" + } + }, + "title": "Часова шкала попереджень · {range}", + "total": "Сповіщення {count}", + "interval": "на {interval}" + }, + "wazuhTopList": { + "name": "Список верхніх елементів Wazu", + "description": "Найкращі правила, агенти, вихідні адреси або MITRE ATT&CK тактики та методи, за допомогою лічильника попереджень", + "option": { + "kind": { + "label": "Ранг" + }, + "range": { + "label": "Проміжок часу" + }, + "limit": { + "label": "Кількість матеріалів" + }, + "minLevel": { + "label": "Мінімальний рівень правила" + }, + "showBars": { + "label": "Показувати панелі" + } + }, + "title": { + "rules": "Кращі правила · {range}", + "agents": "Найкращі агенти · {range}", + "sourceIps": "IP з найвищого джерела · {range}", + "mitreTactics": "MITRE тактика · {range}", + "mitreTechniques": "MITRE techniques · {range}" + }, + "empty": { + "rules": "У цьому періоді немає сповіщень", + "agents": "У цьому періоді немає сповіщень", + "sourceIps": "Немає сповіщень з вихідним IP в цьому періоді", + "mitreTactics": "За цей період немає сповіщень, змінених для MITRE ATT&CK", + "mitreTechniques": "За цей період немає сповіщень, змінених для MITRE ATT&CK" + }, + "totalTooltip": "Сповіщення {count}", + "private": "LAN", + "public": "Публічний", + "agents": "На агентах з {count}", + "others": "{count} більше попереджень у інших записах" + }, + "wazuhVulnerabilities": { + "name": "Уразливості в Wazuh", + "description": "Кількість вразливих верств населення, провідних веж та найбільш вразливих агентів", + "option": { + "cveOrder": { + "label": "Рейтинги CVEs по" + }, + "minSeverity": { + "label": "CVE серйозність" + }, + "cveLimit": { + "label": "Кількість веж" + }, + "agentLimit": { + "label": "Кількість агентів" + }, + "showAgents": { + "label": "Показувати найбільш уразливих агентів" + } + }, + "title": "Вразливості", + "topCves": "Кращі опубліковані", + "score": "Рахунок", + "agentsShort": "Агенти", + "topAgents": "Найвразливіші агенти", + "criticalHigh": "Тістечко / Високе", + "totalTooltip": "{count} виявлених проблем у {agents} агентів", + "affected": "Агенти {count}", + "empty": "вразливостей не виявлено", + "distribution": "Розподіл серйозності. знахідки {unscored} без рахунку не відображаються.", + "worst": "Гірше: {id} ({score}) на агентах {agents}" + }, + "wazuhFim": { + "name": "Wazuh цілісність файлу", + "description": "Останні події моніторингу цілісності файлів (syscheck)", + "option": { + "range": { + "label": "Проміжок часу" + }, + "event": { + "label": "Події" + }, + "limit": { + "label": "Кількість подій" + }, + "includeRegistry": { + "label": "Включати події в реєстрі Windows" + } + }, + "title": "Цілісність файлу · {range}", + "event": { + "added": "Дата додавання", + "modified": "Змінено", + "deleted": "Видалити", + "unknown": "Змінено" + }, + "empty": "Немає події цілісності файлу у цьому періоді", + "user": "від {user}", + "registry": "Реєстр" + }, + "wazuhAuthFailures": { + "name": "Помилка автентифікації Wazuh", + "description": "Помилка входів і жорстоких оповіщень 1 агента з погодинними іскрколініями", + "option": { + "hours": { + "label": "Вікно часу (години)" + }, + "limit": { + "label": "Кількість агентів" + }, + "showSourceIps": { + "label": "Показати IP з найточніших джерел" + } + }, + "title": "Невдачі автентифікації · {hours}год", + "seriesTooltip": "Усі агенти за останні {hours} год", + "peak": "Пік {count}/bucket", + "empty": "За цей період немає помилок", + "failed": "Помилка входу", + "failedHint": "Помилка самоперевірки автентичності (shd, PAM, Windows logon, невірні користувачі)", + "bruteForce": "Груба сила", + "bruteForceHint": "Правило жорстокої сили (кілька невдач в короткий період, MITRE T1110)", + "sourceIps": "IP джерела", + "ipTooltip": "{ip}: {count} невдачі", + "bruteForceCount": "{count} груба сила" } }, "widgetPreview": { @@ -4014,7 +5732,76 @@ } }, "board": { + "emptyState": { + "title": "Побудуйте свій перший вигляд", + "description": "Додати віджет чи додаток, або під’єднати службу та використовувати їх дані на дошці.", + "addWidget": "Додати віджет", + "addApp": "Додати застосунок", + "connectService": "Підключити службу" + }, + "setupChecklist": { + "title": "Зробити цю дошку корисною", + "description": "Підняти, де ви зупинилися. Прогрес слідує за вмістом вже на цій дошці.", + "collapse": "Згорнути список встановлення", + "dismiss": "Відхилити установку списку", + "resume": "Продовжити налаштування ({completed}/{total})", + "progress": "Прогрес налаштування дошки", + "step": { + "content": { + "label": "Додати корисний вміст", + "description": "Виберіть віджет і налаштуйте його перед його розміщенням." + }, + "app": { + "label": "Закріпити додаток", + "description": "Тримайте сервіс чи інструмент в один клік від цієї дошки." + }, + "service": { + "label": "Підключити службу", + "description": "Розблокуйте живі дані та дії для сумісних віджетів.", + "permissionDescription": "Адміністратор може підключити сервіс для розблокування живих даних.", + "action": "Підключитися" + } + } + }, "action": { + "addContent": "Додати вміст дошки", + "settings": "Налаштування дошки", + "switch": "Перемкнути дошку", + "switcher": { + "title": "Перемкнути дошку", + "search": { + "empty": "Жодні дошки не збігаються \"{search}\"." + }, + "results": "Доступні дошки", + "preview": "Попередній перегляд {name} за допомогою елементів {count}", + "currentHidden": "Поточна панель: {name}", + "keyboard": { + "navigate": "Navigate", + "open": "Відкриті", + "instructions": "Введіть, щоб фільтрувати дошки. Використовуйте клавіші зі стрілками для переміщення по результатах і Enter щоб відкрити дошку." + }, + "empty": { + "title": "Немає інших дошок", + "description": "Немає інших дощок, до яких ви можете отримати доступ." + }, + "error": "Неможливо завантажити плату." + }, + "create": { + "availability": { + "checking": "Перевірка доступності…", + "available": "{name} доступний" + }, + "notification": { + "success": { + "title": "Дошка створена", + "message": "Створено дошку {name}" + }, + "error": { + "title": "Не вдалося створити дошку", + "message": "Не вдалося створити форум {name}" + } + } + }, "duplicate": { "title": "Скопіювати дошку", "message": "Це продублює дошку {name} з усім її вмістом. Якщо віджети посилаються на інтеграції, які ви не можете використовувати, їх буде видалено.", @@ -4030,14 +5817,19 @@ } }, "edit": { + "enter": "Редагувати дошку", + "save": "Зберегти дошку", + "exit": "Вийти з режиму редагування", "notification": { "success": { - "title": "Зміни успішно застосовано", "message": "Дошка успішно збережена" }, "error": { - "title": "Не вдалося застосувати зміни", "message": "Не вдалося зберегти дошку" + }, + "loadError": { + "title": "Не вдалося почати редагування", + "message": "Не вдалося завантажити редактор дошки. Панель управління доступна в режимі перегляду." } }, "confirmLeave": { @@ -4045,62 +5837,6 @@ "message": "У вас є незбережені зміни. Ви впевнені, що хочете вийти?" } }, - "oldImport": { - "label": "Імпорт з homarr до версії 1.0.0", - "notification": { - "success": { - "title": "Успішно імпортовано", - "message": "Дошка успішно імпортована" - }, - "error": { - "title": "Помилка імпорту", - "message": "Дошка не може бути імпортована, перегляньте журнали для подальших деталей" - } - }, - "form": { - "file": { - "label": "Обрати файл JSON", - "invalidError": "Неправильний файл конфігурації" - }, - "apps": { - "label": "Додатки", - "avoidDuplicates": { - "label": "Уникати дублікатів", - "description": "Ігнорує додатки, якщо додаток з таким самим посиланням вже існує" - }, - "onlyImportApps": { - "label": "Імпортувати лише додатки", - "description": "Додавати лише додатки, дошка повинна бути перестворена вручну" - } - }, - "name": { - "label": "Назва дошки" - }, - "screenSize": { - "label": "Розмір екрану", - "description": "У версіях до 1.0 існувало три різні режими, тому ви могли вибрати кількість стовпців для кожного розміру екрана.", - "option": { - "sm": "Малий", - "md": "Середній", - "lg": "Великий" - } - }, - "sidebarBehavior": { - "label": "Налаштування бічної панелі", - "description": "Бічні панелі видалені з версії 1.0, ви можете вибрати, що має статися з елементами всередині них.", - "option": { - "lastSection": { - "label": "Останній розділ", - "description": "Бічна панель буде відображатися під останнім розділом" - }, - "removeItems": { - "label": "Видалити елементи", - "description": "Елементи, що містяться в бічній панелі, будуть видалені" - } - } - } - } - }, "quickCreateApp": { "modal": { "title": "Створити програму на льоту", @@ -4108,6 +5844,12 @@ } } }, + "landmark": { + "canvas": "Полотно на панелі керування", + "leftRail": "Панель навігації зліва", + "rightRail": "Панель навігації справа", + "items": "Елементи меню налаштувань" + }, "field": { "pageTitle": { "label": "Назва сторінки" @@ -4177,7 +5919,8 @@ } }, "primaryColor": { - "label": "Основний колір" + "label": "Основний колір", + "locked": "Адміністратор зберігає колір бренду інстансу на кожній дошці." }, "secondaryColor": { "label": "Вторинний колір" @@ -4217,9 +5960,6 @@ "xl": "Дуже великий" } }, - "name": { - "label": "Ім’я" - }, "isPublic": { "label": "Публічний", "description": "Публічні дошки доступні всім, навіть без облікового запису." @@ -4239,9 +5979,44 @@ "title": "Макет", "responsive": { "title": "Адаптивні макети", + "description": "Кожен макет зберігає власні позиції і розміри. Усі мобільні макети завжди доступні і бази; додавати користувацькі макети в будь-якій додаткової точки зупинки.", "action": { "add": "Додати розміщення" } + }, + "role": { + "mobile": "Мобільна", + "base": "Основи", + "custom": "Користувацька" + }, + "custom": { + "defaultName": "Користувацька розмітка" + }, + "mobile": { + "breakpointDescription": "Мобільний завжди використовується з 0px до наступної точки зупинки." + }, + "preview": { + "columns": "стовпці", + "empty": "Ця розкладка порожня", + "dynamicSection": "Динамічна секція", + "editorWidthLabel": "{layoutName} · {width}px" + }, + "reset": { + "action": "Скидання з основи", + "confirm": { + "title": "Reset {layoutName}?", + "message": "Це замінює будь-яку збережену позицію та розмір цієї макет з створеною з Бази. Це не можна буде скасувати." + } + }, + "edit": { + "action": "Редагувати макет", + "saveAndEdit": "Зберегти та редагувати", + "save": "Зберегти розкладку", + "cancel": { + "action": "Відмінити редагування макета", + "title": "Скасувати зміни макета?", + "message": "Ваші незбережені зміни буде скасовано." + } } }, "background": { @@ -4278,10 +6053,7 @@ "rename": { "label": "Перейменувати дошку", "description": "Зміна назви призведе до розірвання всіх посилань на цю дошку.", - "button": "Змінити назву", - "modal": { - "title": "Перейменувати дошку" - } + "button": "Змінити назву" }, "visibility": { "label": "Змінити видимість дошки", @@ -4305,9 +6077,7 @@ } }, "delete": { - "label": "Видалити цю дошку", "description": "Як тільки ви видалите дошку, вона вже не повернеться. Будь ласка, будьте певні.", - "button": "Видалити цю дошку", "confirm": { "title": "Видалити дошку", "description": "Ви впевнені, що хочете видалити цю дошку? Ця дія остаточно видалить дошку з усім її вмістом." @@ -4352,28 +6122,41 @@ }, "layout": { "field": { - "name": { - "label": "Назва" - }, "columnCount": { "label": "Кількість стовпців" }, "breakpoint": { "label": "Точка зупинки", "description": "Макет буде використовуватися на всіх екранах більше, ніж ця точка зупинки до більшої точки зупинки." + }, + "gutters": { + "label": "Фіксована бічна панель", + "description": "Зарезервовано до трьох панелей на обох сторонах. Залишилося полотно автоматично посилиться.", + "left": { + "label": "Left sidebar", + "description": "Залишати цю область видимою під час гортання панелі керування.", + "thumbLabel": "Left sidebar width" + }, + "right": { + "label": "Права бічна панель", + "description": "Залишати цю область видимою під час гортання панелі керування.", + "thumbLabel": "Ширина правої бічної панелі" + }, + "width": { + "label": "Ширина в стовпчиках" + }, + "preview": { + "label": "Попередній перегляд панелі" + } } } }, "management": { "metaTitle": "Управління", - "title": { - "morning": "Доброго ранку, {username}", - "afternoon": "Доброго дня, {username}", - "evening": "Доброго вечора, {username}" - }, "notFound": { "title": "Не знайдено", - "text": "Не вдалося знайти запитуваний ресурс" + "text": "Не вдалося знайти запитуваний ресурс", + "backToHome": "Додому" }, "error": { "title": "Не вдалося завантажити цю сторінку", @@ -4382,19 +6165,10 @@ }, "navbar": { "items": { - "workshop": "Workshop", "home": "Головна", - "boards": "Дошки", - "apps": "Додатки", - "integrations": "Інтеграції", - "searchEngies": "Пошукові системи", - "medias": "Медіа", "users": { - "label": "Користувачі", "items": { - "manage": "Керувати", - "invites": "Запрошує", - "groups": "Групи" + "manage": "Керувати" } }, "tools": { @@ -4402,10 +6176,7 @@ "items": { "docker": "Докер", "kubernetes": "Kubernetes", - "logs": "Логи", "api": "API", - "certificates": "Сертифікати", - "tasks": "Завдання", "backup": "Резервна копія" } }, @@ -4419,21 +6190,12 @@ "sourceCode": "Вихідний код" } }, - "about": "Про програму" + "about": "Про програму", + "assistant": "Помічник" } }, "page": { "home": { - "statistic": { - "board": "Дошки", - "user": "Користувачі", - "invite": "Запрошення", - "integration": "Інтеграції", - "app": "Додатки", - "group": "Групи", - "searchEngine": "Пошукові системи", - "media": "Медіа" - }, "statisticLabel": { "boards": "Дошки", "resources": "Ресурси", @@ -4471,13 +6233,8 @@ "tooltip": "Ця дошка буде вашою мобільною дошкою" } }, - "duplicate": { - "label": "Скопіювати дошку" - }, "delete": { - "label": "Видалити назавжди", "confirm": { - "title": "Видалити дошку", "description": "Ви впевнені, що хочете видалити дошку {name}?" } } @@ -4486,28 +6243,82 @@ "public": "Ця дошка є публічною", "private": "Ця дошка є приватною" }, - "noResults": { - "title": "У вас ще немає дошок" + "preview": { + "label": "Попередній перегляд макету для {name}з елементами {count}", + "unknownCreator": "Невідомий творець" }, - "modal": { - "createBoard": { - "field": { - "name": { - "label": "Ім’я" - } - } - } + "noResults": { + "title": "У вас ще немає дошок", + "description": "Створіть дошку для організації програм та віджетів." } }, "media": { "includeFromAllUsers": "Включити медіа від усіх користувачів" }, "user": { - "back": "Назад до користувачів", "fieldsDisabledExternalProvider": "Деякі поля вимкнено через управління зовнішньою автентифікацією провайдера.", "setting": { "general": { "title": "Загальне", + "header": { + "title": "Заголовок студії", + "badge": "Особисті дані", + "description": "Перетягніть елементи керування в будь-якому місці ряду. Лівий центр, а також справа залишається фіксованою, якщо контроль переміщується навколо них.", + "device": { + "desktop": "Стільниця", + "mobile": "Мобільна" + }, + "zones": { + "left": "Ліворуч", + "center": "Центр", + "right": "Праворуч" + }, + "action": { + "hide": "Сховати заголовок", + "show": "Показати заголовок", + "configure": "Перемістити або налаштувати {item}", + "remove": "Видалити {item}", + "dropIntoZone": "Перемістити в розділ {zone}" + }, + "preview": { + "board": "Попередній перегляд панелі керування для {name}", + "empty": "Немає доступної панелі" + }, + "available": { + "title": "Доступні елементи керування", + "description": "Додати елементи керування і перетягніть його повну кнопку до позиції вище.", + "requiredAlways": "Цей параметр необхідний для контролю, але ви можете переміщувати його будь-де в заголовку.", + "allAdded": "Кожна вбудована система управління вже у вашому заголовку.", + "add": "Додати {item}", + "boardShortcut": "Ярлик дошки", + "chooseBoard": "Виберіть дошку" + }, + "configuration": { + "description": "Цей елемент керування залишається таким же розміром, як і в живому заголовку.", + "searchDisplay": { + "input": "Рядок пошуку", + "icon": "Тільки значок" + }, + "logoDisplay": { + "logo": "Тільки логотип", + "logoAndText": "Логотип + текст" + } + }, + "items": { + "logo": "Логотип", + "search": "Пошук", + "home": "Домашня дошка", + "boardSwitcher": "Контури", + "assistant": "Помічник", + "docker": "Docker", + "boardEdit": "Редагувати дошку", + "boardSettings": "Налаштування дошки", + "settings": "Ваші налаштування", + "themeToggle": "Перемкнути тему", + "user": "Обліковий запис", + "boardUnavailable": "Дошка недоступна" + } + }, "item": { "language": "Мова та Регіон", "board": { @@ -4541,14 +6352,10 @@ }, "security": { "title": "Безпека" - }, - "board": { - "title": "Дошки" } }, "list": { - "metaTitle": "Керування користувачами", - "title": "Користувачі" + "metaTitle": "Керування користувачами" }, "edit": { "metaTitle": "Редагувати користувача {username}" @@ -4602,9 +6409,6 @@ } }, "field": { - "id": { - "label": "ІДЕНТИФІКАТОР" - }, "creator": { "label": "Творець" }, @@ -4628,10 +6432,7 @@ }, "setting": { "title": "Налаштування", - "alert": "Налаштування групи є пріоритетними за порядком груп у списку. Верхні налаштування перезаписують нижні налаштування.", - "board": { - "title": "Дошки" - } + "alert": "Налаштування групи є пріоритетними за порядком груп у списку. Верхні налаштування перезаписують нижні налаштування." }, "members": { "title": "Учасники", @@ -4639,10 +6440,7 @@ "notFound": "Учасників не знайдено" }, "permissions": { - "title": "Дозволи", - "form": { - "unsavedChanges": "У вас є незбережені зміни!" - } + "title": "Дозволи" } } }, @@ -4651,12 +6449,10 @@ "notification": { "success": { "message": "Налаштування успішно збережено" - }, - "error": { - "message": "Не вдалося зберегти налаштування" } }, "section": { + "analyticsDocumentation": "Дивіться саме те, які дані аналітики збирають Homarr", "analytics": { "title": "Аналітика", "general": { @@ -4685,7 +6481,6 @@ } }, "board": { - "title": "Дошки", "homeBoard": { "label": "Глобальна домашня дошка", "mobileLabel": "Глобальна мобільна дошка", @@ -4704,7 +6499,6 @@ } }, "user": { - "title": "Користувачі", "enableGravatar": { "label": "Увімкнути Gravatar", "description": "Повертається до аватарів користувачів з Libravatar/Gravatar, якщо не встановлено власний аватар, а налаштовано електронну адресу" @@ -4720,12 +6514,86 @@ "appearance": { "title": "Вигляд", "defaultColorScheme": { - "label": "Стандартна кольорова тема", + "label": "Стандартна кольорова тема" + } + }, + "branding": { + "title": "Обробка інстанса", + "groups": { + "identity": "Тотожність", + "appearance": "Вигляд", + "customCss": "Custom CSS", + "authentication": "Аутентифікація" + }, + "identity": { + "description": "Логотип програми є більшою міткою, яка використовується в додатку, на сторінці входу та встановлених програм. Іконка браузера (favicon) - це невеликий квадрат, що використовується у вкладках і закладках; коли порожньо, вона повертається до логотипу програми." + }, + "appName": { + "label": "Назва програми" + }, + "greeting": { + "label": "Користувальницьке привітання" + }, + "logo": { + "label": "Логотип застосунку", + "placeholder": "/logo/logo.png" + }, + "favicon": { + "label": "Іконка браузера (іконка)", + "placeholder": "Використовувати логотип програми" + }, + "primaryColor": { + "label": "Основний колір" + }, + "secondaryColor": { + "label": "Додатковий акцент" + }, + "lockPrimaryColor": { + "label": "Зберегти цей колір на кожній дошці", + "description": "Запобігає зміні акценту додатка на дошках." + }, + "signInBackground": { + "label": "Фон аутентифікації", + "placeholder": "https://example.com/background.jpg" + }, + "signInOverlay": { + "label": "Накладення тла" + }, + "defaultRadius": { + "label": "Кутовий стиль", "options": { - "auto": "Авто", - "light": "Світла", - "dark": "Темна" + "xs": "Теренд", + "sm": "Тонкий", + "md": "Збалансований", + "lg": "Округлі", + "xl": "М'яко" } + }, + "customCss": { + "label": "Глобальний користувацький CSS", + "description": "Застосовується на кожній сторінці. Постійний CSS може змінити її." + }, + "authVisibility": { + "description": "Виберіть, що з'являється на кожній сторінці автентифікації.", + "appName": "Назва програми", + "logo": "Логотип застосунку", + "greeting": "Привітання" + }, + "summary": { + "title": "Поточний брендинг", + "cornerStyle": "Кутовий стиль", + "palette": "Palette", + "backgroundConfigured": "Свій фон · {overlay}% накладання", + "backgroundDefault": "Стандартний фон", + "greetingConfigured": "Користувальницьке привітання", + "greetingDefault": "Стандартне привітання", + "boardColorLocked": "Колір дошки заблоковано", + "boardColorFlexible": "Дозволено кольори дошки", + "appName": "Назва", + "logo": "Логотип", + "greeting": "Привітання", + "on": "Увімк", + "off": "Вимкнено" } }, "culture": { @@ -4733,12 +6601,177 @@ "defaultLocale": { "label": "Стандартна мова" } + }, + "assistant": { + "loading": "Завантаження конфігурації асистента", + "title": "Помічник", + "description": "Під'єднайте кінцеву точку моделі OpenAI-сумісної для цього асистента по всьому екземпляру.", + "security": { + "description": "Ключі API та додаткові значення заголовків шифруються в базі даних Homarr. Вони ніколи не повертаються до браузерів. На сервері Homarr надсилаються запити моделей з серверу Homarr безпосередньо до налаштованої кінцевої точки." + }, + "overview": { + "connectionReady": "Підключення готове", + "unsavedChanges": "Незбережені зміни", + "setupRequired": "Потрібне налаштування", + "disabled": "Вимкнено", + "noModel": "Не вибрано жодної моделі" + }, + "connection": { + "endpointTitle": "Провайдер і кінцева точка", + "description": "Виберіть шаблон або підключіть будь-яку послугу, яка реалізує API Completions OpenAI Chat", + "save": "Зберегти зв'язок із провайдером" + }, + "credentials": { + "title": "Дані доступу", + "description": "Додайте секрети ці потреби в кінцевій точці. Збережені значення залишаються зашифрованими і не можуть бути прочитані.", + "required": "Потрібно ключ", + "optional": "Ключові символи", + "workshop": "Per-user GitHub вхід" + }, + "provider": { + "title": "Постачальник", + "groups": { + "free": "Безкоштовно з Омарром", + "hosted": "Розміщені провайдери", + "local": "Локальні постачальники", + "custom": "Користувацька" + }, + "options": { + "homarr": { + "description": "Обмежена кількість використань помічників щодня безкоштовно, сплачуючи команду Homarr. Увійдіть за допомогою майстерні Спільнотства щоб використовувати ваше дозвол." + }, + "openrouter": { + "description": "Розміщена модель, яка маршрутизувала з великим каталогом моделей, здатним до інструментів." + }, + "openai": { + "description": "OpenAI Chat Completions через офіційну API кінцеву точку." + }, + "anthropic": { + "description": "Кінцева точка сумісності з даними OpenAI SDK." + }, + "google-gemini": { + "description": "Gemini через кінцеву точку API OpenAI-сумісного з Google." + }, + "xai": { + "description": "В рок-моделях через OpenAI-сумісний з API." + }, + "groq": { + "description": "Швидкі налаштування хостингу через API сумісний з Groq." + }, + "mistral": { + "description": "Містральні моделі через офіційний API." + }, + "deepseek": { + "description": "Моделі DeepSeek через API сумісний з OpenAI." + }, + "together": { + "description": "Розміщення відкритих моделей за допомогою OpenAI-сумісного API." + }, + "ollama": { + "description": "Локальний або мережевий сервер Ollama з використанням сумісного з OpenAI-інтерфейсом." + }, + "lm-studio": { + "description": "Локальний сервер LM Studio з увімкненим сумісністю OpenAI." + }, + "llama-cpp": { + "description": "Локальний або мережевий сервер llama.cpp використовуючи його OpenAI-сумісний API." + }, + "custom": { + "label": "Користувацька кінцева точка", + "description": "Будь-яка інша кінцева точка, сумісна з закінченням чату OpenAI." + } + }, + "homarrAuth": { + "title": "Безкоштовні щоденні помічники використовуються", + "description": "Не потрібен ключ API. Команда Homarr охоплює обмежену кількість використань помічників для вас щодня. Увійдіть за допомогою майстерні Спільнотства, щоб зберегти вашу допомогу." + } + }, + "baseUrl": { + "title": "URL-адреса бази API", + "description": "Включити API префікс, як правило, /v1. У контейнерах localhost посилається на контейнер Homarr." + }, + "apiKey": { + "title": "API ключ", + "required": "Потрібно від цього постачальника. Значення зашифроване та тільки для запису.", + "optional": "Необов'язкові для локальних кінцевих точок. Залиште його порожнім, коли сервіс не потребує справжньої автентифікації.", + "placeholder": "Введіть ключ API", + "savedTitle": "Зашифрований ключ API збережено", + "savedDescription": "Homarr може використовувати цей ключ, але він не може відобразити або відновити його значення.", + "remove": "Видалити збережений ключ API", + "removeFlow": { + "title": "Видалити збережений ключ API?", + "description": "Цей постачальник вимагає ключ API. Видалення він може зупинити виявлення моделі і допомогти відповісти до тих пір, поки інший ключ не буде збережений.", + "optionalDescription": "Кінцева точка перестане отримувати коротшу аутентифікацію після видалення цього ключа. Підтвердіть, що він прийме неавторизовані запити або використовує інший збережений заголовок.", + "cancel": "Тримати збережений ключ", + "confirm": "Видалити ключ API" + } + }, + "headers": { + "title": "Додаткові заголовки запиту", + "description": "Необов'язкова автентифікація або маршрутизація заголовків. Значення заголовка зашифровані і тільки для запису.", + "add": "Додати заголовок", + "name": "Назва заголовка", + "value": "Значення заголовка", + "valuePlaceholder": "Значення секретного або маршрутизації", + "remove": "Видалити заголовок", + "configured": "Додаткові зашифровані заголовки налаштовано. Додавання заголовків замінює повний збережений набір.", + "empty": "Для цього провайдера немає додаткових заголовків.", + "savedBadge": "Заголовки збережено", + "pendingRemoval": "Видалення в очікуванні", + "clear": "Вилучити збережені заголовки при збереженні", + "keep": "Зберігати збережені заголовки" + }, + "model": { + "title": "Модель", + "description": "Оберіть знайдену модель або введіть ID точної кінцевої моделі.", + "placeholder": "ID моделі", + "refresh": "Оновити моделі", + "chooseModel": "Виберіть модель, що використовується для нових розмов.", + "discoveryPath": "Шлях виявлення моделей", + "discoveryPathDescription": "Доданий до базового URL API. Залиште порожнім, щоб вимкнути виявлення та використовувати вручну ідентифікатор моделі.", + "manual": "Введіть ID моделі вручну або збережіть з'єднання, щоб виявити моделі.", + "manualFallback": "Відкриття недоступне. Ви можете ввести ID моделі вручну.", + "saveConnectionFirst": "Зберегти зв'язок постачальника перед вибором моделі.", + "discovering": "Оновлення списку доступних моделей від цього постачальника…", + "discovered": "{count, plural, one {Виявлено # модель. Підтримка інструментів залежить від вибраної кінцевої точки і моделі.} other {Виявлено # моделей. Підтримка інструментів залежить від вибраної кінцевої точки і моделі.}}", + "discoveryFailed": "Модельне відкриття не завершено", + "context": "{count} контекстне вікно", + "toolsConfirmed": "Інструменти, що рекламуються", + "toolsUnknown": "Підтримка коду підтвердження" + }, + "serverTools": { + "title": "Інструменти сервера", + "webSearch": { + "label": "Веб-пошук", + "description": "Дозволяти моделі шукати в прямому інтернеті через OpenRouter, коли запит потребує актуальної інформації. Використання пошуку перераховується окремо від OpenRouter.", + "proxyDescription": "Надіслати інструмент веб-пошуку OpenRouter в цю кінцеву точку. Увімкнути це тільки коли користувацька кінцева точка переходить формат інструментів сервера OpenRouter, наприклад proxy Homarr Router.", + "limit": "Модель вирішує, чи потрібно пошукувати, обмежуючи 3 пошукові запити і 5 результатів за кожне запит." + } + }, + "enabled": { + "label": "Увімкнути помічника", + "description": "Показує помічника для всіх користувачів. Існуючи дозволи Homarr все ще застосовуються до кожного внутрішнього інструменту." + }, + "save": "Зберегти помічник", + "notification": { + "connectionSaved": { + "title": "З'єднання постачальника збережено", + "message": "Для вибору моделі готові кінцеві та зашифровані облікові дані.", + "credentialsCleared": "Всі попередні облікові дані були видалені з кінцевої точки. Якщо потрібно, додайте облікові дані для нового призначення." + }, + "saved": { + "title": "Налаштування асистента збережено", + "message": "Нова модель і налаштування доступності активні." + }, + "error": { + "title": "Не вдалося зберегти налаштування помічника" + } + } } } }, "tool": { "tasks": { - "title": "Завдання", "status": { "idle": "Неактивне", "running": "Запущено", @@ -4756,6 +6789,11 @@ "label": "Пінги" } }, + "action": { + "run": "Запустити {name} зараз", + "enable": "Увімкнути {name}", + "disable": "Вимкнути {name}" + }, "interval": { "seconds": "Кожні {interval, plural, =1 {секунда} other {# секунд}}", "minutes": "Кожні {interval, plural, =1 {хвилина} other {# хвилин}}", @@ -4771,13 +6809,7 @@ } } }, - "settings": { - "title": "Налаштування завдання для {jobName}" - }, "field": { - "name": { - "label": "Назва" - }, "interval": { "label": "Інтервал розкладу" }, @@ -4791,11 +6823,6 @@ "table": { "search": "Шукати завдання {count}..." }, - "action": { - "refresh": { - "label": "Оновити" - } - }, "refresh": { "success": { "message": "Завдання успішно оновлені" @@ -4829,7 +6856,6 @@ } }, "api": { - "title": "API", "modal": { "createApiToken": { "title": "API токен створено", @@ -4855,7 +6881,6 @@ }, "table": { "header": { - "id": "ІДЕНТИФІКАТОР", "createdBy": "Створено", "actions": "Дії" } @@ -4911,43 +6936,12 @@ "availableTools": { "title": "Доступні інструменти", "description": "Інструменти {count} доступні. Розширте категорію, щоб побачити окремі інструменти та їх описи.", - "columnType": "Тип", - "columnName": "Інструмент", - "columnDescription": "Опис" - }, - "troubleshooting": { - "title": "Усунення несправностей", - "missingHeader": { - "title": "\"Відсутній заголовок ApiKey\"", - "description": "Ваш клієнт не надсилає заголовок {header}. Перевірте правильність розділу {section} у конфігурації MCP. Деякі клієнти потребують перезавантаження після змін конфігурації." - }, - "invalidFormat": { - "title": "\"Неприпустимий формат ApiKey\"", - "description": "Переконайтеся, що ви скопіювали повний ключ API, а не просто його частину." - }, - "invalidKey": { - "title": "\"Неправильний ключ API\"", - "description": "Ідентифікатор ключа не знайдено або токен неправильний. Ключі API можна переглядати лише один раз при створенні. Якщо ви його втратили, видаліть старий ключ і створіть новий." - }, - "connectionRefused": { - "title": "Тайм-аут з'єднання розірваного / час очікування", - "description": "Переконайтеся, що URL-адреса доступна з вашого клієнта штучного інтелекту. Якщо Homarr працює за зворотним проксі-сервером або в Docker, використовуйте зовнішню URL-адресу (не {localhost}). Перевірте правильність порту (за замовчуванням: 7575 для Docker)." - }, - "toolsNotAppearing": { - "title": "Інструменти не відображаються", - "description": "Деякі інструменти потребують настроювання спеціальних інтеграцій (напр. Docker, Overseerr). Список інструментів залежить від того, що є у вашому екземплярі Homarr." + "filteredDescription": "{count} відповідні інструменти в розширених категоріях.", + "search": "Інструменти пошуку", + "noResults": { + "title": "Не знайдено жодних інструментів, що відповідають цьому пошуку", + "description": "Жоден інструмент MCP не відповідає \"{search}\". Спробуйте простір імен, ім'я інструменту чи опис." } - }, - "copy": "Копіювати", - "oneClick": { - "title": "Встановити в один дотик", - "subtitle": "Використовує OAuth - авторизація в браузері при першому використанні", - "vsCode": "Встановити у VS Code", - "cursor": "Встановити в курсор", - "copyUrl": "Копіювати URL-адресу MCP", - "copied": "Скопійовано!", - "copyHint": "Для ChatGPT, Claude Code, або будь-якого MCP клієнта", - "manualConfig": "Ручне налаштування" } } } @@ -4964,47 +6958,12 @@ "title": "Експорт конфіденційних даних", "warningTitle": "Цей експорт містить всю вашу базу даних.", "warningBody": "Резервне копіювання включає в себе всіх користувачів, секрети інтегрування (зашифровані), ключі API, конфігурації сайту і дані застосунків. Зберігайте експортований файл надійно і не поширюйте його.", - "typePrompt": "Введіть \"{phrase}\", щоб продовжити", - "submit": "Експорт бази даних", - "cancel": "Скасувати" + "submit": "Експорт бази даних" } }, "import": { "title": "Відновлення бази даних", - "description": "Завантажити раніше експортовану резервну копію ZIP для відновлення бази даних. Це замінить усю вашу базу даних. Якщо резервне копіювання було створено за допомогою іншого ключа шифрування, секрети будуть автоматично зашифровані.", - "warning": "Відновлення резервної копії повністю замінить поточну базу даних і перезавантаже додаток. Цю дію не можна скасувати.", - "dropzone": { - "title": "Перетягніть резервну копію ZIP сюди або натисніть, щоб переглянути його", - "description": "Дозволені лише .zip файли з резервної копії Homarr SQLite" - }, - "changeFile": "Змінити файл", - "button": "Відновлення бази даних", - "success": { - "title": "Відновлення завершено", - "message": "База даних була успішно відновлена. Програма перезавантажується..." - }, - "error": "Помилка імпорту" - }, - "preview": { - "title": "Вміст резервної копії", - "exported": "Експортовано {date}", - "loading": "Аналіз файлу резервної копії...", - "errorTitle": "Помилка попереднього перегляду", - "entity": "Сутність", - "count": "Кількість", - "boards": "Контури", - "entities": { - "board": "Контури", - "user": "Користувачі", - "app": "Додатки", - "integration": "Інтеграції", - "item": "Віджети", - "media": "Медіа", - "search_engine": "Пошукові системи" - }, - "analyzeError": "Не вдалося проаналізувати файл резервної копії", - "invalidMissingMetadata": "Неправильна резервна копія: метадатa.json немає", - "invalidMissingDb": "Неправильна резервна копія: відсутній db.sqlite" + "description": "Завантажити раніше експортовану резервну копію ZIP для відновлення бази даних. Це замінить усю вашу базу даних. Якщо резервне копіювання було створено за допомогою іншого ключа шифрування, секрети будуть автоматично зашифровані." }, "restore": { "dropzone": { @@ -5014,29 +6973,20 @@ "analyzing": "Аналіз резервної копії...", "changeFile": "Змінити файл", "continueToRestore": "Перейти до відновлення", - "tryAgain": "Повторіть спробу", "analysisError": "Помилка Аналізу", "preview": { "title": "Вміст резервної копії", "exported": "Експортовано {date}", "entity": "Сутність", "count": "Кількість", - "boards": "Контури", "entities": { - "board": "Контури", - "user": "Користувачі", - "app": "Додатки", - "integration": "Інтеграції", - "item": "Віджети", - "media": "Медіа", - "search_engine": "Пошукові системи" + "item": "Віджети" }, "migrationsApplied": "Застосовано міграцію {count}", "migrationsAppliedPlural": "Застосовано міграції {count}", "migrationsOlderVersion": "Цей бекап був із старої версії Homarr. Для її оновлення було застосовано {count} міграцію схеми.", "migrationsOlderVersionPlural": "Ця резервна копія була зі старішої версії Homarr. Для її оновлення було застосовано {count} міграцій схеми.", "migrationsUpToDate": "Схема бази даних є актуальною (застосовується{count} міграцій)", - "upToDate": "Остання версія", "migrationsPending": "{count} очікується" }, "migration": { @@ -5047,21 +6997,21 @@ "title": "Руйнівна дія", "warningTitle": "Це назавжди замінить всю вашу базу даних.", "warningBody": "Усі поточні дошки, користувачі, програми, інтеграції, налаштування і сеанси буде втрачено. Цю дію не можна скасувати. Програма буде перезавантажена після відновлення.", - "typePrompt": "Введіть \"{phrase}\", щоб продовжити", - "cancel": "Скасувати", "submit": "Відновлення бази даних" }, "progress": { "title": "Відновлення бази даних...", - "extracting": "Розпакування архіву резервної копії", - "migrating": "Застосування міграцій бази даних", - "encrypting": "Повторне шифрування інтеграційних секретів", - "swapping": "Заміна файлу бази даних", - "restarting": "Перезапуск сервера" + "restarting": "Перезапуск сервера", + "relogin": "Відновлення бази даних анульувало ваше поточне заняття. Homarr відправить вас до входу в систему, коли сервер буде готовий." }, "complete": { "title": "Відновлення завершено", - "message": "База даних була успішно відновлена. Сервер перезавантажиться - будь ласка, оновіть сторінку за декілька секунд." + "message": "База даних була успішно відновлена. Сервер перезавантажиться - будь ласка, оновіть сторінку за декілька секунд.", + "button": "Увійти зараз" + }, + "timeout": { + "title": "Сервер не повернувся в мережі", + "message": "Відновлення бази даних завершено, але Homarr не став готовий знову. Повторіть спробу підключення або оновіть цю сторінку вручну." }, "failed": { "title": "Помилка відновлення" @@ -5069,6 +7019,9 @@ "invalidMissingMetadata": "Неправильна резервна копія: метадатa.json немає", "invalidMissingDb": "Неправильна резервна копія: відсутній db.sqlite", "analyzeError": "Не вдалося проаналізувати резервну копію" + }, + "confirm": { + "typePrompt": "Введіть \"{phrase}\", щоб продовжити" } } }, @@ -5103,7 +7056,11 @@ "toggleBoardEdit": "Перемикання режиму редагування дошки", "toggleColorScheme": "Увімкнути або вимкнути світлий/темний режим", "saveNotebook": "Зберегти блокнот (тільки всередині віджету)", - "openSpotlight": "Відкрити пошук" + "openSpotlight": "Відкрити пошук", + "openSpotlightApps": "Відкрити пошук додатків", + "openSpotlightAssistant": "Відкрити режим помічника", + "openSpotlightPreferences": "Відкрийте режим налаштувань", + "openAssistant": "Відкрити помічника" }, "note": "Порада: Mod стосується як клавіші Ctrl, так і клавіші ⌘ у macOS" } @@ -5113,6 +7070,63 @@ }, "docker": { "title": "Контейнери", + "reconciliation": { + "title": "Допоміжні налаштування Docker", + "suggestions": "{count, plural, =0 {Немає пропозицій} one {# пропозиції} other {# пропозиції}}", + "attention": "{count} потребують уваги", + "endpointUnavailable": "Не вдалося перевірити деякі послуги, тому що ці кінцеві точки недоступні: {names}", + "empty": "Не знайдено видимих Docker сервісів.", + "emptyFilter": "Жоден сервіс не відповідає цьому перегляду.", + "ambiguous": "Більш ніж один існуючий елемент може співпадати з цією службою. Homarr не буде вибирати один автоматично.", + "filter": { + "attention": "Потребує уваги", + "represented": "Вже створено", + "all": "Усі" + }, + "state": { + "newRecognized": "Готовий до з’єднання", + "newApp": "Нова послуга", + "represented": "Вже представлено", + "linked": "З’єднані", + "moved": "Адресу змінено" + }, + "url": { + "manual": "Введіть адресу вручну" + }, + "health": { + "layer": { + "docker": "Docker", + "integrationConfiguration": "Інтеграція", + "authentication": "Аутентифікація", + "apiRequest": "API", + "appRepresentation": "Додаток", + "widgetConfiguration": "Віджет", + "widgetQuery": "Запит віджета" + }, + "status": { + "available": "Доступно", + "configured": "Налаштовано", + "linked": "З’єднані", + "missing": "Відсутні", + "changed": "Змінено", + "unused": "Не використовується", + "notApplicable": "Непридатне", + "notObserved": "Не знайдено" + } + }, + "action": { + "review": "Огляд", + "dismiss": "Відхилити", + "restoreDismissed": "Відновлення відхилено ({count})", + "setupIntegration": "Налаштувати інтеграцію", + "reviewIntegration": "Інтеграція з відгуком", + "viewRepresentation": "Переглянути налаштування" + }, + "loadError": { + "title": "Docker установка асистента не вдалося завантажити", + "message": "Інформація про сервіс Docker недоступна. Повторіть спробу без виходу з цієї сторінки." + } + }, "table": { "updated": "Оновлено {when}", "refresh": { @@ -5125,9 +7139,6 @@ "totalMemory": "Всього оперативної пам'яті: {memory}" }, "field": { - "name": { - "label": "Ім’я" - }, "state": { "label": "Стан", "option": { @@ -5141,9 +7152,6 @@ } }, "stats": { - "cpu": { - "label": "ЦП" - }, "memory": { "label": "Оперативна Пам'ять" } @@ -5206,8 +7214,11 @@ } }, "remove": { - "label": "Видалити", "confirm": "Натисніть ще раз, щоб видалити остаточно", + "confirmation": { + "title": "{count, plural, one {Видалити # контейнер?} other {Видалити # контейнери?}}", + "message": "{count, plural, one {Це постійно видаляє # контейнер: {names}} other {Це остаточно видалить # контейнери: {names}}}" + }, "notification": { "success": { "title": "Контейнери видалено", @@ -5219,8 +7230,13 @@ } } }, + "result": { + "failure": { + "title": "Не вдалося виконати деякі дії контейнера", + "message": "{total, plural, one {{failed} # дія не вдалося: {names}} other {{failed} # дій не вдалося: {names}}}" + } + }, "refresh": { - "label": "Оновити", "notification": { "success": { "title": "Контейнери оновлено", @@ -5251,18 +7267,33 @@ }, "error": { "internalServerError": "Не вдалося отримати Docker контейнери", + "endpointUnavailable": "{count, plural, one {# кінцева точка Docker недоступна: {names}} few {# кінцеві точки Docker недоступні: {names}} many {# кінцевих точок Docker недоступно: {names}} other {# кінцевих точок Docker недоступно: {names}}}", "noColumns": "Виберіть хоча б один стовпець в налаштуваннях віджета" } }, "kubernetes": { + "context": { + "label": "Контекст Kubernetes", + "loadError": { + "title": "Контекст Kubernetes не вдалося завантажити", + "message": "Контекстна інформація недоступна. Спробуйте ще раз, не залишивши цю сторінку." + }, + "status": { + "available": "Доступно", + "degraded": "Metrics unavailable", + "unavailable": "Unavailable" + }, + "unavailable": "Цей контекст Kubernetes не може бути досягнутий. Виберіть інший контекст, або перевірте його облікові дані та кінцеву точку.", + "metricsUnavailable": "Цей контекст доступний, але сервер Metrics недоступний. Інвентар залишається доступним без використання ЦП та пам'яті." + }, "cluster": { "title": "Панель кластера", "label": "Кластер", "providers": "Постачальники", "version": "Версія", - "architecture": "Архітектура", "capacity": { "title": "Місткість", + "metricsUnavailable": "Сервер Metrics недоступний. Інвентар і зарезервована ємність залишається видимою, але не можна використовувати в реальному часі ЦП та пам’яті.", "resource": { "reserved": "Зарезервовано", "used": "Використано" @@ -5281,38 +7312,10 @@ } }, "nodes": { - "label": "Вузли", "field": { - "name": { - "label": "Назва" - }, - "state": { - "label": "Область", - "option": { - "ready": "Готово", - "NotReady": "Не готово" - } - }, - "cpu": { - "label": "ЦП" - }, - "memory": { - "label": "Оперативна пам'ять" - }, - "pods": { - "label": "Стручки" - }, - "operatingSystem": { - "label": "ОС" - }, - "architecture": { - "label": "Архітектура" - }, + "metricsUnavailable": "Unavailable", "kubernetesVersion": { "label": "Версія Kubernetes" - }, - "creationTimestamp": { - "label": "Створено" } }, "table": { @@ -5320,43 +7323,17 @@ } }, "namespaces": { - "label": "Простори назв", - "field": { - "name": { - "label": "Назва" - }, - "state": { - "label": "Область", - "option": { - "active": "Активно", - "terminating": "Завершення" - } - }, - "creationTimestamp": { - "label": "Створено" - } - }, "table": { "search": "Шукати простори назв {count}" } }, "ingresses": { - "label": "Вхідні дані", "field": { - "name": { - "label": "Назва" - }, - "namespace": { - "label": "Простір назв" - }, "className": { "label": "Назва класу" }, "rulesAndPaths": { "label": "Правила та шляхи" - }, - "creationTimestamp": { - "label": "Створено" } }, "table": { @@ -5364,17 +7341,7 @@ } }, "services": { - "label": "Служби", "field": { - "name": { - "label": "Назва" - }, - "namespace": { - "label": "Простір назв" - }, - "type": { - "label": "Тип" - }, "ports": { "label": "Стручки" }, @@ -5383,9 +7350,6 @@ }, "clusterIP": { "label": "Кластер IP" - }, - "creationTimestamp": { - "label": "Створено" } }, "table": { @@ -5393,25 +7357,12 @@ } }, "pods": { - "label": "Капсули", "field": { - "name": { - "label": "Назва" - }, - "namespace": { - "label": "Простір імен" - }, "image": { "label": "Зображення" }, "applicationType": { "label": "Тип застосунку" - }, - "status": { - "label": "Статус" - }, - "creationTimestamp": { - "label": "Створено" } }, "table": { @@ -5419,51 +7370,17 @@ } }, "secrets": { - "label": "Секрети", - "field": { - "name": { - "label": "Назва" - }, - "namespace": { - "label": "простір імен" - }, - "type": { - "label": "тип" - }, - "creationTimestamp": { - "label": "Створено" - } - }, "table": { "search": "Шукати секрети {count}" } }, "configmaps": { - "label": "Карти конфігурації", - "field": { - "name": { - "label": "Назва" - }, - "namespace": { - "label": "простір імен" - }, - "creationTimestamp": { - "label": "Створено" - } - }, "table": { "search": "Шукати карти конфігурацій {count}" } }, "volumes": { - "label": "Гучність", "field": { - "name": { - "label": "Назва" - }, - "namespace": { - "label": "Простір імен" - }, "accessModes": { "label": "Режим доступу" }, @@ -5478,12 +7395,6 @@ }, "volumeName": { "label": "Назва тому" - }, - "status": { - "label": "Статус" - }, - "creationTimestamp": { - "label": "Створено" } }, "table": { @@ -5492,6 +7403,29 @@ }, "error": { "internalServerError": "Не вдалося отримати дані Kubernetes" + }, + "field": { + "name": { + "label": "Назва" + }, + "namespace": { + "label": "Простір імен" + }, + "creationTimestamp": { + "label": "Створено" + }, + "state": { + "label": "Стан" + }, + "status": { + "label": "Статус" + }, + "type": { + "label": "Тип клієнта" + }, + "architecture": { + "label": "Архітектура" + } } }, "permission": { @@ -5525,71 +7459,27 @@ }, "navigationStructure": { "manage": { - "workshop": { - "label": "Workshop" - }, "label": "Керувати", - "boards": { - "label": "Дошки" - }, - "integrations": { - "label": "Інтеграції", + "custom-widgets": { "edit": { - "label": "Редагувати" + "flow": { + "label": "Потік" + } }, - "new": { - "label": "Нова" - } - }, - "search-engines": { - "label": "Пошукові системи", - "new": { - "label": "Нова" + "workshop": { + "label": "Майстерня" }, - "edit": { - "label": "Редагувати" - } - }, - "medias": { - "label": "Медіа" - }, - "apps": { - "label": "Додатки", - "new": { - "label": "Новий" - }, - "edit": { - "label": "Редагувати" + "publish": { + "label": "Опублікувати в Майстерні" } }, "users": { - "label": "Користувачі", - "create": { - "label": "Створити" - }, "general": "Загальне", - "security": "Безпека", - "board": "Дошки", - "groups": { - "label": "Групи" - }, - "invites": { - "label": "Запрошення" - } + "security": "Безпека" }, "tools": { "label": "Інструменти", - "tasks": { - "label": "Завдання" - }, - "docker": { - "label": "Докер", - "logs": { - "label": "Журнали" - } - }, "kubernetes": { - "label": "Kubernetes", "nodes": { "label": "Вузли" }, @@ -5615,11 +7505,7 @@ "label": "Гучність" } }, - "logs": { - "label": "Логи" - }, "certificates": { - "label": "Сертифікати", "hostnames": { "label": "Назви хостів" } @@ -5630,12 +7516,60 @@ }, "about": { "label": "Про програму" + }, + "assistant": { + "label": "Помічник" } } }, "search": { "placeholder": "Пошук всього", "nothingFound": "Нічого не знайдено", + "modePicker": { + "search": { + "label": "Пошук", + "placeholder": "Пошук додатків, дошки, сторінок, команд та параметрів" + }, + "apps": { + "label": "Додатки", + "placeholder": "Пошук додатків, правління та інтеграцій" + }, + "command": { + "label": "Команди", + "placeholder": "Пошук дій та команд" + }, + "preferences": { + "label": "Налаштування", + "placeholder": "Налаштування пошуку і зміни" + }, + "assistant": { + "label": "Помічник", + "placeholder": "Запитати помічника" + }, + "external": { + "label": "Веб", + "placeholder": "Пошук за допомогою зовнішньої системи пошуку" + }, + "media": { + "label": "Медіа", + "placeholder": "Шукати фільм або показати", + "fallback": "Шукати в медіа для \"{query}\"" + }, + "userGroup": { + "label": "Люди", + "placeholder": "Пошук користувачів і груп" + }, + "continueWith": "Продовжити", + "dialogAriaLabel": "Меню команди {mode}", + "navigationLabel": "Пошук режимів", + "modeAriaLabel": "Режим {mode}", + "resultsAriaLabel": "{mode} результатів", + "footer": { + "navigate": "Navigate", + "open": "Відкриті", + "close": "Закрити" + } + }, "error": { "fetch": "Під час отримання даних сталася помилка." }, @@ -5644,7 +7578,6 @@ "help": "Пошук додатків, інтеграцій, або дошок", "group": { "app": { - "title": "Додатки", "children": { "action": { "open": { @@ -5660,7 +7593,6 @@ } }, "board": { - "title": "Дошки", "children": { "action": { "open": { @@ -5680,9 +7612,6 @@ "title": "Оберіть дію для дошки" } } - }, - "integration": { - "title": "Інтеграції" } } }, @@ -5711,9 +7640,6 @@ "newBoard": { "label": "Створити нову дошку" }, - "importBoard": { - "label": "Імпортувати дошку" - }, "newApp": { "label": "Створити новий додаток" }, @@ -5783,7 +7709,6 @@ } }, "defaultSearchEngineId": { - "label": "Пошукова система за умовчанням", "children": { "detail": { "title": "Обрати пошукову систему за умовчанням" @@ -5791,7 +7716,6 @@ } }, "openSearchInNewTab": { - "label": "Відкрити результати пошуку в новій вкладці", "children": { "detail": { "title": "Відкрити результати пошуку в новій вкладці" @@ -5799,7 +7723,6 @@ } }, "ddgBangs": { - "label": "Увімкнути Бан DuckGos", "children": { "detail": { "title": "Увімкнути Бан DuckGos" @@ -5814,6 +7737,13 @@ } } }, + "byteUnitSystem": { + "children": { + "detail": { + "title": "Виберіть одиниці розміру даних" + } + } + }, "homeBoardId": { "label": "Домашня дошка", "children": { @@ -5831,7 +7761,6 @@ } }, "pingIconsEnabled": { - "label": "Використовувати значки для пінгу", "children": { "detail": { "title": "Використовувати значки для пінгу" @@ -5839,7 +7768,6 @@ } }, "enableRightClickOnWidgets": { - "label": "Увімкнути клацання правою кнопкою миші на віджетах", "children": { "detail": { "title": "Увімкнути клацання правою кнопкою миші на віджетах" @@ -5867,6 +7795,7 @@ "description": "Почніть вводити для пошуку інтеграції запитів", "disabled": { "noIntegration": "Додати інтеграцію Overseerr, Jellyseerr, або Seerr, щоб увімкнути пошук медіа.", + "signInRequired": "Увійдіть для пошуку інтеграцій з медіа-запитами.", "scoped": "Цей віджет не має доступної інтеграції запитів до медіа." } } @@ -5883,7 +7812,6 @@ "help": "Використовувати зовнішню пошукову систему", "group": { "searchEngine": { - "title": "Пошукові системи", "tipDdgBangs": "Порада: можна використовувати і будь-які банди DuckDuckGo тут, наприклад, !something", "bang": { "searchWithQuery": "Шукати \"{query}\" з {label}", @@ -5934,20 +7862,6 @@ "group": { "mode": { "title": "Режими" - }, - "help": { - "title": "Допомога", - "option": { - "documentation": { - "label": "Документація" - }, - "submitIssue": { - "label": "Повідомити про проблему" - }, - "discord": { - "label": "Discord" - } - } } } }, @@ -5959,9 +7873,10 @@ "other": { "label": "Пошук за допомогою іншої пошукової системи" }, - "no-default": { - "label": "Немає стандартної пошукової системи", - "description": "Встановіть пошукову систему за замовчуванням у налаштуваннях" + "no-engines": { + "label": "Немає налаштованих пошукових систем", + "descriptionCreate": "Додати пошукову систему для пошуку з меню команд", + "descriptionUnavailable": "Попросіть адміністратора налаштувати засіб пошуку" }, "search": { "label": "Пошук \"{query}\" з {name}" @@ -6041,7 +7956,6 @@ "help": "Пошук користувачів або груп", "group": { "user": { - "title": "Користувачі", "children": { "action": { "detail": { @@ -6054,7 +7968,6 @@ } }, "group": { - "title": "Групи", "children": { "action": { "detail": { @@ -6078,9 +7991,6 @@ "engine": { "search": "Знайти пошукову систему", "field": { - "name": { - "label": "Ім’я" - }, "short": { "label": "Короткий" }, @@ -6093,12 +8003,19 @@ }, "page": { "list": { - "title": "Пошукові системи", + "ariaLabel": "Налаштовані пошукові системи", "noResults": { "title": "Пошукових систем поки що немає", - "action": "Створити свою першу пошукову систему" + "description": "Пошукові системи дозволяють Spotlight надсилати запит на сайт або підключений сервіс.", + "action": "Створити свою першу пошукову систему", + "filteredTitle": "Немає пошукових систем, які відповідають вашому пошуку", + "filteredDescription": "Немає пошукових систем відповідності \"{search}\". Спробуйте інше ім'я або URL." }, - "interactive": "Інтерактивне, використовує інтеграцію" + "interactive": "Інтерактивне, використовує інтеграцію", + "type": { + "generic": "Шаблон URL", + "fromIntegration": "Інтеграція" + } }, "create": { "title": "Нова пошукова система", @@ -6117,11 +8034,9 @@ "title": "Редагувати систему пошуку", "notification": { "success": { - "title": "Зміни успішно застосовано", "message": "Пошукову систему успішно збережено" }, "error": { - "title": "Не вдалося застосувати зміни", "message": "Не вдалося зберегти пошукову систему" } }, @@ -6260,6 +8175,10 @@ } }, "log": { + "context": { + "widgetError": "Віджет повідомляв про помилку навколо цього часу", + "expiredWidgetError": "Журнали навколо цієї помилки віджета більше не зберігаються" + }, "level": { "option": { "debug": "Налагодження", @@ -6271,7 +8190,6 @@ }, "onboardingTour": { "learnMore": "Переглянути документацію", - "next": "Далі", "prev": "Назад", "done": "Готово", "skip": "Пропустити тур", @@ -6335,5 +8253,359 @@ "description": "Змініть свою схему кольорів, мову, домашню дошку та налаштування. Ви також можете перейти до області керування звідси." } } + }, + "metadata": { + "description": "Панель самостійного хостингу для стеку * arr і всієї вашої батьківщини. Інтегрується з 50+ послугами, у реальному часі віджети, без конфігураційних файлів.", + "dashboardTitle": "Панель керування {appName}" + }, + "assistant": { + "title": "Помічник", + "open": "Відкрити помічника", + "close": "Закрити помічник", + "minimize": "Мінімізувати асистент", + "spotlight": "Запитати помічника", + "spotlightDescription": "Введіть і надішліть запит, не залишаючи меню команди.", + "spotlightPrompt": { + "title": "Запитати помічника", + "description": "Введіть запит вище. Введіть текст відправляє його в фоні.", + "send": "Надіслати запит", + "empty": "Введіть запит вище" + }, + "unavailable": { + "checking": "Перевіряє, чи доступний асистент…", + "error": "Неможливо перевірити доступність помічника. Спробуйте ще раз.", + "notConfigured": "Адміністратор повинен спочатку налаштувати і включити помічник.", + "signIn": "Увійдіть, щоб скористатися помічником." + }, + "newConversation": "Нова розмова", + "conversations": "Бесіди", + "conversationActions": "Дії при бесіді", + "searchConversations": "Пошук бесід", + "noMatchingConversations": "Немає відповідних розмов", + "moreActions": "Більше дій з відповідями", + "renameConversation": { + "action": "Перейменувати", + "label": "Ім'я розмови", + "save": "Зберегти назву", + "failedTitle": "Не вдалося перейменувати розмову", + "failedDescription": "Домашня сторінка не може перейменувати цю розмову. Спробуйте ще раз." + }, + "deleteConversation": { + "title": "Видалити розмову?", + "description": "“{title}, і його повідомлення буде остаточно видалено.", + "failedTitle": "Неможливо видалити розмову", + "failedDescription": "Homarr не вдалося видалити цю розмову. Повторіть спробу." + }, + "closeHistory": "Закрити історію розмови", + "openHistory": "Відкрити історію розмови", + "emptyTitle": "З чим я можу допомогти?", + "emptyDescription": "Запитайте про налаштування Homarr, перевірте дані реального інстансу або затвердіть дії, якщо хочете, щоб я мала зміну.", + "suggestions": { + "health": { + "label": "Перевірка стану сервісу", + "prompt": "Перевірте мої інтеграції і узагальніть все, що потребує уваги." + }, + "explore": { + "label": "Досліджуй мій Омар", + "prompt": "Покажіть мені, що я можу бачити та керувати цим екземпляром Homarr." + }, + "media": { + "label": "Пошук медіа-файлів для запиту", + "prompt": "Допоможіть мені знайти фільм або серію для прохання." + }, + "style": { + "label": "Покращити інформаційну панель", + "prompt": "Допоможіть мені покращити зовнішній вигляд дошки або користувальницький CSS. Покажіть мені свої дошки спочатку, а потім збережіть мої поточні налаштування, поки ми змінюємо її." + }, + "designWidget": { + "label": "Розробка віджета", + "prompt": "Створити та встановити свій віджет для " + } + }, + "composerPlaceholder": "Запитати асистента…", + "runtime": { + "model": "Модель", + "searchModels": "Пошук моделей", + "noModels": "Немає доступних моделей", + "otherModels": "Інші моделі", + "imageInput": "Приймає введення зображення", + "thinking": "Режим мислення", + "reasoning": { + "auto": "Авто", + "none": "Вимкнено", + "minimal": "Мінімальні", + "low": "Низька", + "medium": "Середній", + "high": "Високий" + } + }, + "providerQuota": { + "title": "Омарр-провайдер", + "communityWorkshop": "Майстерня спільноти", + "dailyAllowance": "Денний дозвол", + "remainingLabel": "Залишилося {remaining} із {limit} запитів до постачальника Homarr", + "loading": "Завантаження дозволу провайдера Homarr", + "signInRequired": "Для провайдера Homarr потрібно увійти в Майстерню", + "signInDescription": "Увійдіть за допомогою GitHub через Майстерню Спільнотства щоб отримати вашу окрему щоденну допомогу.", + "exhaustedDescription": "Ваша дозволена кількість провайдера Homarr використовується на сьогодні. Вона скидається опівночі UTC.", + "unavailableDescription": "Увійдіть до Майстерні або зачекайте доступу до списку Homarr для скидання.", + "signIn": "Увійти за допомогою GitHub", + "signInError": "Не вдалося увійти на GitHub. Спробуйте ще раз за мить.", + "loadError": "Не вдалося завантажити дозвіл провайдера.", + "reset": "Скидання {relative} о ", + "toolCalls": "Кожен запит моделі і завершений інструмент здійснення дзвінка використовує один запит.", + "retry": "Дозвіл на перезавантаження", + "level": { + "ok": "OK", + "warning": "Застереження", + "bad": "Низька", + "dead": "Використання" + } + }, + "stop": "Зупинити відповідь", + "send": "Відправити повідомлення", + "copy": "Копіювати відповідь", + "copyMessage": "Копіювати повідомлення", + "editMessage": "Редагувати повідомлення", + "updateMessage": "Оновити повідомлення", + "regenerate": "Відновити відповідь", + "helpful": "Корисна", + "notHelpful": "Не корисна", + "readAloud": "Прочитати відповідь вголос", + "stopReading": "Зупинити читання відповіді", + "feedbackError": "Не вдалося зберегти ваш відгук. Спробуйте ще раз.", + "exportMarkdown": "Експортувати як Markdown", + "exportConversation": { + "action": "Експортувати розмову як Markdown", + "failedTitle": "Не вдалося експортувати розмову", + "failedDescription": "Homarr не зміг завантажити цю розмову. Спробуйте ще раз." + }, + "reasoning": "Мислення", + "previousResponse": "Попередня відповідь", + "nextResponse": "Наступна відповідь", + "removeAttachment": "Видалити вкладення", + "downloadFile": "Завантажити {name}", + "attachedImage": "Прикріплене зображення", + "externalImageBlocked": "Зовнішні зображення, заблоковані для конфіденційності", + "image": { + "loading": "Завантаження зображення", + "failed": "Не вдалося завантажити зображення.", + "retry": "Повторіть спробу зображення" + }, + "quoteSelection": "Цитувати", + "dismissQuote": "Видалити цитату", + "attachments": { + "add": "Прикріпити зображення або документ", + "errorTitle": "Не вдалося додати вкладення", + "imageUnsupported": "Вибрана модель не підтримує введення зображення." + }, + "mentions": { + "menu": "Додати контекст Homarr", + "context": "Контекст", + "app": "Додатки", + "integration": "Інтеграції", + "board": "Контури", + "widget": "Віджети", + "tools": "Доступні інструменти" + }, + "markdown": { + "diagram": "Діаграма", + "renderingDiagram": "Відображення діаграми…", + "diagramUnavailable": "Не вдалося відобразити цю діаграму." + }, + "commands": { + "menu": "Команди помічників", + "health": "Підготуйте перевірку працездатності служби", + "explore": "Підготувати огляд цього екземпляра Homarr", + "media": "Підготувати медіа пошук", + "style": "Підготуйте зовнішній вигляд дошки або користувацькі зміни CSS", + "designWidget": "Підготувати індивідуальну збірку віджетів до єдиного запиту" + }, + "usage": { + "tokens": "токени", + "contextWindow": "Контекстне вікно", + "requestDetails": "Запросити подробиці", + "used": "Останній крок", + "remaining": "Залишилось", + "capacity": "Місткість", + "input": "Ввід", + "output": "Вивід", + "cached": "Кешований ввід", + "cacheWrite": "Кеш запису", + "reasoning": "Причини", + "inputShort": "за", + "outputShort": "витрати", + "cachedShort": "кешовано", + "reasoningShort": "міркування", + "firstOutput": "Перший вихід", + "homarrTiming": "Омарський обстеження", + "endToEnd": "Кінець до кінця", + "observedThroughput": "Спостережуване виконання позначення.", + "providerTiming": "Постачальник доповів", + "loadingProviderDetails": "Завантаження відомостей про генерацію…", + "providerDetailsPending": "OpenRouter все ще обробляє деякі деталі генерації. Перевідкрийте знову, щоб повторити.", + "providerLatency": "Постачальник затримки", + "generationTime": "Час генерування", + "moderationLatency": "Модерація", + "providerThroughput": "Провідник", + "fallbacks": "Резервні копії", + "fallbackLatency": "Fallback затримка", + "cacheDiscount": "Кеш знижки", + "normalizedTokens": "Openроутер нормалізовано вводу/вивід", + "byok": "ЧОК", + "cost": "Собівартість", + "reported": "Повідомлено провайдера", + "estimated": "Орієнтовна ціна за моделлю", + "upstreamCost": "Upstream висновування", + "webSearches": "Веб-пошук", + "finishReason": "Кінцева причина", + "notReported": "На скаргу немає", + "agentSteps": "Agent: steps", + "step": "Крок {number}", + "generation": "Покоління" + }, + "toolInput": "Ввід", + "toolOutput": "Вивід", + "toolActivity": { + "iconSearch": "Шукаємо значок “{query}", + "iconBrowse": "Перегляд доступних значків" + }, + "toolNavigation": { + "openPreview": "Попередній перегляд", + "openWidget": "Відкрити віджет" + }, + "webSearch": { + "title": "Веб-пошук", + "completed": "OpenRouter здійснив пошук в живій мережі для цієї відповіді.", + "searches": "{count, plural, one {# пошук} other {# пошуків}}", + "sources": "{count, plural, one {# джерело} other {# джерела}}" + }, + "responseError": { + "title": "Помічник не зміг завершити", + "description": "Спробуйте знову. Якщо проблема продовжиться, попросіть адміністратора підтвердити налаштовану кінцеву точку моделі." + }, + "toolPreparationError": { + "title": "Не вдалося підготувати цей запит", + "description": "Модель зупинена, перш ніж вона надає повні деталі. Повторіть спробу відповіді або опишіть запит знову. Не було внесено змін." + }, + "busy": { + "title": "Помічник вже працює", + "description": "Зачекайте на поточну відповідь або відкрийте її, щоб зупинити запуск." + }, + "pendingAction": { + "answerTitle": "Потрібна відповідь", + "answerFallback": "Виберіть відповідь, щоб продовжити", + "formTitle": "Переглянути подробиці програми", + "boardFormTitle": "Переглянути зміни дошки", + "review": "Огляд", + "sendBlocked": "Виконайте відкладений запит перед надсиланням" + }, + "activity": { + "thinking": "Помічник думає", + "working": "Працює за вашим запитом", + "ready": "Відповідь готова", + "completed": "Відкрити відповідь", + "approval": "Потрібне затвердження", + "failed": "Помічник потребує уваги", + "expand": "Відкрити відповідь асистента", + "dismiss": "Закрити асистент діяльності" + }, + "scrollToLatest": "Прокрутити до останнього", + "refresh": { + "action": "Оновити поточний вигляд", + "working": "Оновлення поточного вигляду", + "completeTitle": "Перегляд оновлено", + "completeDescription": "Видимі дані Homarr були перезавантажені.", + "failedTitle": "Не вдалося оновити вигляд", + "failedDescription": "Зміни все ще можуть бути збережені. Спробуйте дію оновлення ще раз." + }, + "askUser": { + "preparing": "Підготовка питання", + "answered": "Ваша відповідь", + "other": "Інше", + "otherLabel": "Ваша відповідь", + "otherPlaceholder": "Введіть іншу відповідь…", + "submit": "Надіслати відповідь", + "cancelOther": "Скасувати іншу відповідь", + "optionKind": { + "affirmative": "Підтвердити", + "negative": "Відмовитись", + "alternative": "Опція", + "custom": "Користувацька" + } + }, + "configureApp": { + "title": "Переглянути подробиці програми", + "description": "Оберіть локальну піктограму і відкоригуйте що-небудь до схвалення заявки на створення помічника.", + "preparing": "Підготовка деталей програми", + "continue": "Використати дані", + "ready": "Інформація про програму доступна", + "automaticContinue": "Автоматично використовувати ці дані" + }, + "configureBoardSettings": { + "title": "Переглянути зміни дошки", + "loading": "Завантаження поточних параметрів дошки", + "loadErrorTitle": "Не вдалося завантажити налаштування дошки", + "loadErrorDescription": "Дошка може більше не існувати, або у Вас немає прав на її зміну.", + "proposedCount": "Помічник запропонував {count} поля", + "changeCount": "{count} зміни готові", + "ready": "Зміни дошки готові", + "cancelled": "Поточні налаштування дошки зберігаються", + "noChanges": "Ніякі налаштування не зміняться", + "keepCurrent": "Зберегти поточні налаштування", + "continue": "Продовжити затвердження", + "automaticContinue": "Прийняття запропонованих змін дошки автоматично", + "resetAll": "Скинути всі зміни", + "tabs": { + "css": "Custom CSS", + "appearance": "Вигляд", + "background": "Фон", + "general": "Загальна" + }, + "cssDescription": "Редагувати повну таблицю стилів. Існуючі правила залишаються, якщо їх не видалили тут.", + "cssCharacters": "{count} з 16384 символів", + "copyCss": "Copy CSS", + "copied": "Скопійовано", + "restoreCss": "Restore current CSS", + "remoteCssTitle": "Цей CSS завантажує віддалений ресурс", + "remoteCssDescription": "Імпортовані стилі та віддалені URL-адреси контактують з іншим сервером під час завантаження дошки. Перегляньте їх, перш ніж продовжити." + }, + "configureWidget": { + "title": "Переглянути віджет", + "preparing": "Підготовка параметрів віджета", + "review": "Переглянути віджети і інтеграції", + "ready": "Налаштування віджета доступні", + "cancelled": "Віджет не був доданий", + "automaticContinue": "Прийняття запропонованої конфігурації віджета автоматично", + "definitionLoadErrorTitle": "Не вдалося завантажити налаштування віджета", + "definitionLoadErrorDescription": "Homarr не зміг завантажити налаштування цього віджета. Повторіть спробу.", + "loadErrorTitle": "Не вдалося завантажити інтеграції", + "loadErrorDescription": "Homarr не зміг завантажити інтеграції, доступний для цього віджета.", + "noIntegrationTitle": "Потрібна сумісна інтеграція", + "noIntegrationDescription": "Налаштуйте інтеграцію, яку підтримує цей віджет, перед додаванням до панелі керування.", + "connectIntegration": "Підключити службу", + "manageIntegrations": "Керування інтеграціями", + "skip": "Не додавати", + "errorTitle": "Налаштування віджета не можуть бути підготовлені", + "errorDescription": "Модель не забезпечила повної конфігурації віджету. Віджет не було додано." + }, + "approvalRequired": "Потрібне затвердження", + "complete": "Complete", + "denied": "Відмовлено", + "failed": "Невдало", + "working": "Працюю", + "approvalDescription": "Переглянути зміни до її запуску.", + "approveAndRun": "Затвердити та запустити", + "deny": "Відмовити", + "autoApproval": { + "label": "Автоматичне схвалення", + "composerLabel": "Затвердити для мене", + "title": "Автоматичне схвалення", + "description": "Автоматично підготувати форми та затверджувати захищені зміни для цієї розмови. Питання все ще чекають вашої відповіді, і ваші права Homarr все ще застосовуються. Вимикають, коли ви змінюєте розмови.", + "enable": "Увімкнути для цієї розмови", + "disable": "Вимкнути автоматичне схвалення", + "enabled": "Автоматичне схвалення ввімкнено", + "approving": "Затвердження автоматично" + } } } diff --git a/packages/translation/src/lang/vi.json b/packages/translation/src/lang/vi.json index f3eda3876..db478c354 100644 --- a/packages/translation/src/lang/vi.json +++ b/packages/translation/src/lang/vi.json @@ -1,156 +1,246 @@ { "init": { - "step": { - "start": { - "title": "Chào mừng đến với Homarr", - "subtitle": "Hãy bắt đầu cài đặt ứng dụng Homarr của bạn.", - "description": "Để bắt đầu, hãy chọn cách bạn muốn cài đặt ứng dụng Homarr của mình.", - "action": { - "scratch": "Bắt đầu từ đầu", - "importOldmarr": "Nhập dữ liệu từ Homarr phiên bản trước 1.0", - "restoreSqlite": "Khôi phục từ bản sao lưu SQLite", - "restoreSqliteDescription": "Tải lên bản sao lưu cơ sở dữ liệu SQLite đầy đủ từ phiên bản Homarr trước. Thao tác này sẽ khôi phục tất cả bảng, người dùng, ứng dụng, tích hợp và cài đặt.", - "backToOptions": "← Quay lại tùy chọn thiết lập" + "studio": { + "navigationLabel": "Các mục hướng dẫn bắt đầu", + "back": "Quay lại", + "buildBoard": "Xây dựng bảng của tôi", + "common": { + "unknownError": "Đã xảy ra lỗi. Các lựa chọn của bạn vẫn còn đó; hãy thử lại." + }, + "claim": { + "checking": "Đang bảo mật phiên thiết lập này…", + "checkingTitle": "Đang chuẩn bị thiết lập bảo mật", + "lockedTitle": "Thiết lập đang được mở trong trình duyệt khác", + "lockedDescription": "Tiếp tục ở đó hoặc chờ phiên chạy lần đầu bảo mật hết hạn rồi thử lại.", + "signInTitle": "Yêu cầu đăng nhập quản trị viên", + "signInDescription": "Quản trị viên đã tồn tại. Hãy đăng nhập để tiếp tục thiết lập mà không làm lộ thông tin đăng nhập hoặc quyền truy cập dịch vụ.", + "signIn": "Đăng nhập và tiếp tục", + "errorTitle": "Không thể bảo mật thiết lập", + "errorDescription": "Tải lại trang để thử lại phiên chạy lần đầu bảo mật." + }, + "navigation": { + "essentials": "Thiết yếu", + "discover": "Khám phá", + "connect": "Kết nối", + "board": "Bảng", + "extend": "Mở rộng", + "review": "Đánh giá" + }, + "welcome": { + "title": "Chào mừng về nhà.", + "description": "Chào mừng đến với Homarr v{version}. Chúng tôi sẽ hướng dẫn bạn qua những thiết lập thiết yếu và giúp bạn xây dựng bảng đầu tiên.", + "start": "Bắt đầu", + "restore": "Khôi phục bản sao lưu", + "restoreTitle": "Khôi phục từ bản sao lưu", + "restoreDescription": "Bản sao lưu SQLite đầy đủ sẽ khôi phục các bảng, người dùng, ứng dụng, tích hợp và cài đặt. Homarr sẽ xác thực bản sao lưu trước khi thay thế bất kỳ dữ liệu nào.", + "errorTitle": "Không thể bắt đầu thiết lập", + "errorDescription": "Các lựa chọn thiết lập của bạn vẫn còn đó. Hãy thử lại hoặc tải lại trang nếu sự cố vẫn tiếp diễn." + }, + "account": { + "title": "Tạo quản trị viên", + "description": "Chỉ định thông tin đăng nhập cho người dùng quản trị viên của bạn.", + "username": "Tên người dùng quản trị viên", + "passwordHint": "Chỉ yêu cầu tối thiểu 8 ký tự. Các kiểm tra độ mạnh mật khẩu khác chỉ mang tính gợi ý.", + "create": "Tạo quản trị viên", + "errorTitle": "Không thể tạo quản trị viên", + "recoveryTitle": "Đã tạo tài khoản quản trị viên", + "recoveryDescription": "Đăng nhập tự động chưa hoàn tất. Hãy đăng nhập bằng thông tin đăng nhập quản trị viên bạn vừa tạo để tiếp tục thiết lập.", + "recoveryAction": "Đăng nhập và tiếp tục", + "unknownError": "Không thể tạo quản trị viên." + }, + "externalGroup": { + "title": "Kết nối nhóm quản trị viên", + "description": "Sử dụng chính xác tên nhóm do LDAP hoặc OIDC gửi. Thành viên của nhóm này sẽ được cấp quyền quản trị viên.", + "name": "Nhóm quản trị viên bên ngoài", + "nameDescription": "Tên này phân biệt chữ hoa chữ thường và phải khớp với nhà cung cấp danh tính của bạn.", + "continue": "Lưu nhóm và tiếp tục", + "errorTitle": "Không thể lưu nhóm", + "unknownError": "Không thể lưu nhóm quản trị viên." + }, + "essentials": { + "title": "Bắt đầu với các thiết lập mặc định quen thuộc", + "description": "Đặt ngôn ngữ và giao diện mà mọi người nhìn thấy trước tiên, sau đó cung cấp cho Homarr mẫu địa chỉ được các dịch vụ của bạn sử dụng.", + "language": "Ngôn ngữ mặc định", + "theme": "Chủ đề mặc định", + "themeAuto": "Hệ thống", + "themeLight": "Sáng", + "themeDark": "Tối", + "serverOriginHelp": "Homarr sử dụng địa chỉ này để điền sẵn URL của các dịch vụ được phát hiện. Bạn vẫn có thể chỉnh sửa từng dịch vụ.", + "serverDescription": "Đây là lối tắt, không phải giới hạn. Mọi dịch vụ được phát hiện vẫn có thể chỉnh sửa.", + "serverOrigin": "Tên miền, IP hoặc đường dẫn reverse proxy", + "serverOriginDescription": "Ví dụ: home.lan, 192.168.1.10 hoặc https://home.example.com/services. Chọn cách thêm từng dịch vụ bên dưới.", + "analytics": "Chia sẻ dữ liệu phân tích sản phẩm ẩn danh", + "analyticsDescription": "Giúp Homarr cải thiện độ tin cậy của tính năng. Không gửi thông tin đăng nhập dịch vụ hoặc nội dung bảng điều khiển." + }, + "discover": { + "title": "Xem những gì bản cài đặt này thực sự có thể truy cập", + "description": "Homarr kiểm tra các khả năng tại chỗ. Việc thiếu socket Docker hoặc ngữ cảnh Kubernetes sẽ không bao giờ ngăn cản thiết lập thủ công.", + "database": "Cơ sở dữ liệu", + "docker": "Docker và các socket tương thích", + "kubernetes": "Kubernetes", + "assistantWorkshop": "Trợ lý và Workshop", + "found": "Đã tìm thấy {integrations} tích hợp và {apps} ứng dụng bổ sung", + "retryKubernetes": "Kiểm tra lại Kubernetes", + "retryWorkshop": "Kiểm tra lại Workshop", + "unknownVersion": "phiên bản không xác định", + "kubernetesAvailable": "Đã kết nối với Kubernetes {version}", + "kubernetesDisabled": "Chưa bật; tiếp tục với Docker hoặc các dịch vụ thủ công", + "kubernetesUnavailable": "Kubernetes đã được bật nhưng không thể truy cập từ tiến trình Homarr này", + "workshopAvailable": "Có thể truy cập Workshop cộng đồng và các dịch vụ Trợ lý được lưu trữ", + "workshopUnavailable": "Các nhà cung cấp Trợ lý cục bộ và tùy chỉnh vẫn khả dụng", + "partialTitle": "Không thể quét một số nguồn", + "partialDescription": "Kết quả từ các máy chủ có thể truy cập được giữ lại. Hãy kiểm tra quyền socket hoặc thêm dịch vụ thủ công trong phần tiếp theo.", + "status": { + "checking": "Đang kiểm tra khả dụng…", + "available": "Khả dụng", + "partial": "Khả dụng một phần", + "empty": "Có thể truy cập, không có dịch vụ đang chạy phù hợp", + "disabled": "Bị tắt bởi cấu hình máy chủ", + "unavailable": "Không khả dụng từ tiến trình Homarr này" } }, - "import": { - "title": "Nhập dữ liệu", - "subtitle": "Bạn có thể nhập dữ liệu từ một phiên bản Homarr có sẵn.", - "dropzone": { - "title": "Kéo tệp tin zip vào đây hoặc nhấp chuột để chọn", - "description": "Tệp tin zip đã tải lên sẽ được xử lý và bạn sẽ có thể chọn những gì bạn muốn nhập" + "connect": { + "title": "Kết nối những thành phần làm cho bảng trở nên hữu ích", + "description": "Chọn nhiều dịch vụ cùng lúc. Nhãn Docker được ưu tiên, việc đối chiếu hình ảnh sẽ bổ sung phần còn thiếu, và mọi URL cùng thông tin đăng nhập đều có thể xem lại.", + "discoveredIntegrations": "Các phiên bản tích hợp được phát hiện ({count})", + "detectedIntegrationLabel": "Nhập {name}, được phát hiện là {kind}", + "detectedAppLabel": "Nhập ứng dụng được phát hiện {name}", + "otherIntegrations": "Thêm một tích hợp khác", + "configureIntegrations": "Định cấu hình tích hợp", + "discoveredApps": "Các ứng dụng được phát hiện ({count})", + "appAddressRequired": "Thêm địa chỉ cho {name} hoặc xóa ứng dụng này khỏi lựa chọn.", + "empty": "Chưa chọn tích hợp nào. Homarr vẫn sẽ tạo một bảng khởi đầu hữu ích với các widget chung.", + "dockerSource": "Docker", + "manualSource": "Thủ công", + "url": "URL dịch vụ", + "noCredentials": "Không có thông tin đăng nhập", + "noCredentialsDescription": "Tích hợp này không cần thông tin đăng nhập.", + "credentialMethod": "Phương thức thông tin đăng nhập", + "getApiKey": "Mở cài đặt khóa API cho dịch vụ này", + "openGuide": "Mở hướng dẫn thiết lập Homarr cho dịch vụ này", + "testConnection": "Kiểm tra kết nối", + "testSuccess": "Kết nối hoạt động", + "testSuccessDescription": "Homarr đã kết nối bằng địa chỉ và thông tin đăng nhập hiện tại.", + "testError": "Kết nối thất bại", + "testErrorDescription": "Kiểm tra địa chỉ dịch vụ và thông tin đăng nhập, sau đó thử lại.", + "needsConfiguration": "Cần cấu hình", + "tested": "Đã kiểm tra kết nối", + "testFailed": "Kiểm tra kết nối thất bại", + "incompleteConfirmation": "Các tích hợp chưa hoàn tất sẽ bị bỏ qua. Tiếp tục mà không có chúng?" + }, + "board": { + "title": "Định hình bảng trước khi tạo", + "description": "Homarr tạo các bố cục Mobile và Base được bảo vệ, sau đó đặt các ứng dụng và tiện ích tương thích từ những dịch vụ bạn đã chọn.", + "target": "Bảng cần cấu hình", + "targetDescription": "Chọn chính xác bảng hiện có mà thiết lập này sẽ cập nhật.", + "targetPlaceholder": "Chọn một bảng", + "targetRequired": "Chọn bảng cần cấu hình trước khi tiếp tục.", + "name": "Tên bảng điều khiển", + "nameDescription": "Được sử dụng trong URL bảng; chỉ cho phép chữ cái, số, dấu gạch ngang và dấu gạch dưới.", + "nameRequired": "Nhập tên bảng trước khi tiếp tục.", + "primaryColor": "Màu chính", + "secondaryColor": "Màu thứ cấp", + "resetColors": "Đặt lại màu sắc", + "radius": "Bán kính góc tiện ích", + "radiusOptions": { + "xs": "Sát", + "sm": "Tinh tế", + "md": "Cân bằng", + "lg": "Bo tròn", + "xl": "Mềm mại" }, - "fileInfo": { - "action": { - "change": "Thay đổi tập tin" - } + "columns": "Cột bảng", + "columnsDescription": "Các cột xác định lưới ngang dùng để định kích thước và vị trí các mục. 12 cột là đủ cho hầu hết mọi người.", + "columnCount": "{count, plural, other {# cột}}", + "leftSidebar": "Thanh bên trái", + "rightSidebar": "Thanh bên phải", + "previewLabel": "Bản xem trước trực tiếp của bố cục bảng đầu tiên" + }, + "extend": { + "title": "Tính năng nâng cao", + "tabsLabel": "Thiết lập Trợ lý, Workshop và MCP", + "assistant": "Trợ lý", + "workshop": "Yêu cầu đăng nhập quản trị viên", + "assistantSetup": { + "loginTitle": "Yêu cầu đăng nhập quản trị viên", + "loginDescription": "Khóa nhà cung cấp và quyền truy cập mô hình là các tính năng đặc quyền. Hãy hoàn tất thiết lập, đăng nhập và Homarr sẽ mở trực tiếp phần cấu hình Trợ lý.", + "loginAction": "Đăng nhập để cấu hình Trợ lý" }, - "importSettings": { - "title": "Nhập cài đặt", - "description": "Cấu hình hành vi nhập dữ liệu" + "workshopSetup": { + "title": "Xưởng Homarr", + "description": "Duyệt các Tiện ích tùy chỉnh của cộng đồng, xem các khả năng được yêu cầu, cài đặt chúng và xuất bản sản phẩm của bạn mà không cần sao chép mã giữa các máy chủ.", + "available": "Khả dụng", + "checking": "Đang kiểm tra…", + "unavailable": "Không khả dụng", + "discoverTitle": "Khám phá", + "discoverDescription": "Tìm các tiện ích được xây dựng cho quy trình tự lưu trữ thực tế.", + "installTitle": "Xem xét và cài đặt", + "installDescription": "Xem siêu dữ liệu và cấu hình trước khi thêm bất kỳ thứ gì.", + "publishTitle": "Chia sẻ", + "publishDescription": "Xuất bản các tiện ích có thể tái sử dụng cho cộng đồng.", + "browse": "Duyệt Workshop" }, - "boardSelection": { - "title": "Tìm thấy {count} bảng", - "description": "Chọn tất cả các bảng với kích thước bạn muốn nhập", - "action": { - "selectAll": "Chọn tất cả", - "unselectAll": "Bỏ chọn tất cả" - } - }, - "summary": { - "title": "Tóm tắt nhập", - "description": "Trong phần tóm tắt bên dưới, bạn có thể xem những gì sẽ được nhập", - "action": { - "import": "Xác nhận nhập và tiếp tục" - }, - "entities": { - "apps": "Ứng dụng", - "boards": "Bảng", - "integrations": "Tích hợp", - "credentialUsers": "User xác thực" - } - }, - "tokenModal": { - "title": "Nhập token nhập", - "field": { - "token": { - "label": "Mã thông báo", - "description": "Nhập token nhập được hiển thị từ phiên bản homarr trước đó của bạn" - } - }, - "notification": { - "error": { - "title": "Token không hợp lệ", - "message": "Token bạn nhập không đúng" - } - } + "mcpSetup": { + "title": "MCP của Homarr", + "description": "Kết nối Claude, Codex hoặc ứng dụng khách MCP khác với các công cụ có kiểu dữ liệu của Homarr. Khóa API giúp quyền truy cập luôn rõ ràng và có thể thu hồi.", + "endpoint": "Điểm cuối HTTP có thể truyền dữ liệu", + "keyTitle": "Sao chép khóa này ngay", + "keyDescription": "Vì lý do bảo mật, Homarr không thể hiển thị lại khóa API này.", + "copyKey": "Sao chép khóa API", + "createKey": "Tạo khóa API MCP", + "errorTitle": "Không thể tạo khóa API MCP", + "loginRequired": "Đăng nhập với tư cách quản trị viên sau khi thiết lập để tạo khóa API.", + "configuration": "Cấu hình ứng dụng khách", + "copy": "Sao chép cấu hình", + "copied": "Đã sao chép", + "advanced": "Mở các công cụ, quyền và chi tiết thiết lập MCP" } }, - "user": { - "title": "Người dùng quản trị", - "subtitle": "Chỉ định thông tin xác thực cho tài khoản quản trị viên.", - "notification": { - "success": { - "title": "Đã tạo người dùng", - "message": "Người dùng đã được tạo thành công" - }, - "error": { - "title": "Tạo người dùng không thành công" - } - } - }, - "group": { - "title": "Nhóm bên ngoài", - "subtitle": "Chỉ định nhóm sẽ được sử dụng cho người dùng bên ngoài.", - "form": { - "name": { - "label": "Tên nhóm", - "description": "Tên phải khớp với nhóm quản trị viên của nhà cung cấp bên ngoài" - } - } - }, - "settings": { - "title": "Cài đặt", - "subtitle": "Cấu hình cài đặt máy chủ." - }, - "integrations": { - "title": "Tích hợp", - "subtitle": "Chọn dịch vụ bạn dùng.", - "description": "Chọn các tích hợp bạn muốn kết nối. Chúng tôi sẽ tự động thiết lập bảng với widget phù hợp.", - "action": { - "continue": "Tiếp tục", - "skip": "Bỏ qua lúc này" - }, - "configure": { - "progress": "{current} của {total}", - "skip": "Bỏ qua tích hợp này", - "finishing": "Đang thiết lập bảng của bạn...", - "error": { - "title": "Thiết lập thất bại", - "message": "Đã xảy ra lỗi khi thiết lập bảng. Vui lòng thử lại." - }, - "helpers": { - "tooltip": "Trợ giúp URL", - "description": "Những trợ giúp này cố gắng đoán URL cho dịch vụ của bạn. Nếu không hiệu quả, hãy nhập địa chỉ thủ công." - } - }, - "urlTemplate": { - "label": "URL cơ sở", - "placeholder": "homelab.local hoặc 192.168.1.1", - "hint": "Nhập tên miền cơ sở hoặc IP để tự động điền URL tích hợp", - "warning": "Đặt URL cơ sở bây giờ sẽ tự động điền tất cả URL tích hợp, tiết kiệm thời gian thiết lập", - "preview": "ví dụ: {example}", - "mode": { - "subdomain": "Tên miền phụ", - "hostPort": "Máy:Cổng" - } - }, - "docker": { - "detected": "Docker phát hiện {count} dịch vụ", - "detectedBreakdown": "{integrations} tích hợp · {apps} ứng dụng", - "summary": "Homarr phát hiện {apps} ứng dụng, {integrations} trong đó có tích hợp sẵn", - "appBadge": "Ứng dụng", - "appSectionLabel": "Ứng dụng thêm vào bảng ({count} đã chọn)", - "scanning": "Đang quét Docker...", - "scanningDescription": "Đang tìm container đang chạy trên hệ thống của bạn" + "review": { + "title": "Một bảng, được xây dựng xoay quanh các dịch vụ của bạn", + "description": "Homarr kiểm tra các kết nối chưa lưu, nhập các ứng dụng đã chọn, áp dụng giao diện và bố cục, rồi mở chính xác bảng đã cấu hình.", + "board": "Bảng đầu tiên", + "columns": "Cột bảng", + "columnsValue": "{count, plural, other {# cột}}", + "sidebars": "Thanh bên", + "sidebarsValue": "{count, plural, =0 {Không có} other {# thanh bên}}", + "layouts": "Bố cục đáp ứng", + "layoutsValue": "Di động + Cơ bản", + "integrations": "Tích hợp", + "integrationsValue": "{count, plural, =0 {Chưa chọn} other {# tích hợp}}", + "apps": "Ô ứng dụng", + "appsValue": "{count, plural, =0 {Chỉ ứng dụng khởi đầu} other {# ô ứng dụng}}", + "language": "Ngôn ngữ", + "theme": "Chủ đề", + "themeAuto": "Tùy chọn hệ thống", + "themeLight": "Sáng", + "themeDark": "Tối", + "colors": "Màu bảng", + "radius": "Bán kính tiện ích", + "automaticTitle": "Homarr sẽ tạo gì", + "automaticDescription": "Các tiện ích tương thích, biểu tượng, liên kết ứng dụng, mối quan hệ tích hợp và vị trí đáp ứng được lấy từ danh mục Homarr dùng chung. Bạn có thể chỉnh sửa mọi kết quả sau đó.", + "dockerWarningTitle": "Một số nhãn Docker đã thay đổi trong quá trình thiết lập", + "dockerWarningDescription": "{count, plural, other {Không thể áp dụng # kết quả Docker đã chọn vì các dịch vụ đã thay đổi, nhắm đến bảng khác hoặc tiện ích không tương thích}}.", + "errorTitle": "Không thể xây dựng bảng", + "progress": { + "applying": "Đang kiểm tra kết nối và xây dựng bảng của bạn", + "done": "Bảng của bạn đã sẵn sàng" } }, "finish": { - "title": "Hoàn tất cài đặt", - "subtitle": "Bạn đã sẵn sàng để tiếp tục!", - "description": "Bạn đã hoàn tất quá trình thiết lập thành công. Bây giờ bạn có thể bắt đầu sử dụng Homarr. Hãy chọn thao tác tiếp theo:", - "action": { - "goToBoard": "Đi đến bảng {name}", - "createBoard": "Tạo bảng đầu tiên của bạn", - "inviteUser": "Mời người dùng khác", - "docs": "Đọc tài liệu hướng dẫn" - } + "title": "Bảng đầu tiên của bạn đã sẵn sàng.", + "description": "Homarr đã kết nối các thành phần bạn chọn và vẫn cho phép chỉnh sửa phần còn lại. Mở bảng ngay; chuyến tham quan ngắn trong ứng dụng có thể hướng dẫn bạn về chế độ chỉnh sửa, tiện ích, bố cục và tìm kiếm.", + "openBoard": "Mở bảng của tôi", + "manageTitle": "Quản lý", + "manageDescription": "Tinh chỉnh ứng dụng, tích hợp, bảng, người dùng và cài đặt máy chủ.", + "workshopTitle": "Xưởng", + "workshopDescription": "Khám phá và cài đặt Tiện ích tùy chỉnh của cộng đồng.", + "docsTitle": "Tìm hiểu Homarr", + "docsDescription": "Đọc các hướng dẫn chuyên sâu về bảng, tiện ích, tích hợp và công cụ." } - }, - "backToStart": "Trở lại từ đầu" + } }, "user": { - "title": "Người dùng", "name": "Người dùng", "page": { "login": { @@ -159,12 +249,10 @@ }, "invite": { "title": "Tham gia Homarr", + "titleWithAppName": "Tham gia {appName}", "subtitle": "Chào mừng đến với Homarr! Hãy tạo tài khoản của bạn", + "subtitleWithAppName": "Chào mừng đến với {appName}! Vui lòng tạo tài khoản của bạn", "description": "Bạn được mời bởi {username}" - }, - "init": { - "title": "Cài đặt Homarr mới", - "subtitle": "Hãy tạo tài khoản quản trị ban đầu" } }, "field": { @@ -192,12 +280,17 @@ "previousPassword": { "label": "Mật khẩu trước đây" }, - "homeBoard": { - "label": "Bảng chính" - }, "pingIconsEnabled": { "label": "Sử dụng biểu tượng cho ping" }, + "byteUnitSystem": { + "label": "Đơn vị kích thước dữ liệu", + "description": "Chọn cách Homarr hiển thị kích thước và tốc độ byte. Tốc độ bit luôn sử dụng đơn vị thập phân.", + "options": { + "binary": "Nhị phân", + "decimal": "Thập phân" + } + }, "enableRightClickOnWidgets": { "label": "Bật nhấp chuột phải trên tiện ích", "description": "Hiển thị menu ngữ cảnh của Homarr khi nhấp chuột phải vào tiện ích. Tắt để sử dụng menu mặc định của trình duyệt (ví dụ: \"Mở liên kết trong tab mới\")." @@ -247,7 +340,6 @@ } } }, - "create": "Tạo người dùng", "changePassword": { "label": "Thay đổi mật khẩu", "notification": { @@ -259,56 +351,6 @@ } } }, - "changeHomeBoard": { - "notification": { - "success": { - "message": "Đã thay đổi bảng chính thành công" - }, - "error": { - "message": "Không thể thay đổi bảng chính" - } - } - }, - "changeSearchPreferences": { - "notification": { - "success": { - "message": "Cài đặt tìm kiếm đã được thay đổi thành công" - }, - "error": { - "message": "Không thể thay đổi cài đặt tìm kiếm" - } - } - }, - "changeFirstDayOfWeek": { - "notification": { - "success": { - "message": "Ngày đầu tiên của tuần đã được thay đổi thành công" - }, - "error": { - "message": "Không thể thay đổi ngày đầu tiên của tuần" - } - } - }, - "changePingIconsEnabled": { - "notification": { - "success": { - "message": "Đã bật/tắt biểu tượng ping thành công" - }, - "error": { - "message": "Không thể bật/tắt biểu tượng ping" - } - } - }, - "changeDdgBangs": { - "notification": { - "success": { - "message": "Đã bật/tắt DuckDuckGo bangs thành công" - }, - "error": { - "message": "Không thể bật/tắt DuckDuckGo bangs" - } - } - }, "manageAvatar": { "changeImage": { "label": "Thay đổi hình ảnh", @@ -338,16 +380,6 @@ } } }, - "editProfile": { - "notification": { - "success": { - "message": "Hô sơ được cập nhật thành công" - }, - "error": { - "message": "Không thể cập nhật hồ sơ" - } - } - }, "delete": { "label": "Xóa người dùng vĩnh viễn", "description": "Xóa người dùng này và những cài đặt cá nhân của họ. Hành động này sẽ không xóa các bảng. Người dùng bị xóa sẽ không nhận thông báo.", @@ -356,18 +388,13 @@ "select": { "label": "Chọn tài khoản", "notFound": "Không tìm thấy tài khoản" - }, - "transfer": { - "label": "Chọn chủ sở hữu mới" } } }, "group": { - "title": "Các nhóm", "name": "Nhóm", "search": "Tìm một nhóm", "field": { - "name": "Tên", "members": "Thành viên", "homeBoard": { "label": "Bảng chính", @@ -388,6 +415,19 @@ } } }, + "custom-widget": { + "title": "Tiện ích tùy chỉnh", + "item": { + "manage": { + "label": "Quản lý tiện ích tùy chỉnh", + "description": "Cho phép thành viên tạo, chỉnh sửa và xóa định nghĩa tiện ích tùy chỉnh" + }, + "secret-write": { + "label": "Cấu hình bí mật của tiện ích tùy chỉnh", + "description": "Cho phép thành viên và khóa API của họ đặt thông tin xác thực tiện ích tùy chỉnh được mã hóa" + } + } + }, "app": { "title": "Ứng dụng", "item": { @@ -493,6 +533,35 @@ "description": "Cho phép thành viên quản lý và xóa mọi công cụ tìm kiếm" } } + }, + "matrix": { + "none": "Không có quyền truy cập", + "impliedHint": "Cũng cấp: {permissions}", + "grantedViaAdmin": "Quản trị viên đã có quyền này. Đặt Quản trị viên thành “Không có quyền truy cập” để cấu hình riêng.", + "preset": { + "label": "Cài đặt sẵn", + "viewer": "Người xem", + "viewerDescription": "Chỉ đọc: xem bảng và phương tiện, sử dụng các ứng dụng và tích hợp đã tồn tại.", + "editor": "Biên tập viên", + "editorDescription": "Quản lý hằng ngày: tạo và chỉnh sửa bảng, ứng dụng, tích hợp và công cụ tìm kiếm.", + "admin": "Quản trị viên", + "adminDescription": "Quyền truy cập không hạn chế vào mọi tính năng và cài đặt, bao gồm quản lý người dùng.", + "custom": "Tùy chỉnh" + }, + "effective": { + "title": "Quyền hiệu lực", + "description": "Toàn bộ tập hợp hành động không trùng lặp mà thành viên của nhóm này có thể thực hiện, bao gồm cả các quyền được cấp gián tiếp.", + "empty": "Chưa chọn quyền nào" + }, + "noneDescription": "Thành viên không có quyền truy cập khu vực này.", + "level": { + "view": "Xem", + "use": "Sử dụng", + "interact": "Tương tác", + "modify": "Sửa đổi", + "full": "Toàn bộ" + }, + "capabilityIncluded": "Đã bao gồm trong “{level}”" } }, "memberNotice": { @@ -607,21 +676,24 @@ "search": "Tim một ứng dụng", "page": { "list": { - "title": "Ứng dụng", + "ariaLabel": "Các ứng dụng đã cấu hình", "noResults": { "title": "Chưa có ứng dụng nào cả", - "action": "Tạo ứng dụng của bạn trước" + "description": "Ứng dụng là các liên kết đến dịch vụ và công cụ bạn muốn trên bảng.", + "action": "Tạo ứng dụng của bạn trước", + "filteredTitle": "Không có ứng dụng nào khớp với tìm kiếm", + "filteredDescription": "Không có ứng dụng nào khớp với \"{search}\". Hãy thử tên hoặc URL khác.", + "createOnlyTitle": "Bạn chỉ có thể thêm ứng dụng", + "createOnlyDescription": "Quyền của bạn cho phép tạo ứng dụng nhưng không cho phép duyệt các ứng dụng hiện có. Hãy yêu cầu quản trị viên cấp quyền quản lý ứng dụng để xem danh sách đầy đủ." } }, "create": { "title": "Ứng dụng mới", "notification": { "success": { - "title": "Tạo thành công", "message": "Ứng dụng đã được tạo thành công" }, "error": { - "title": "Tạo không thành công", "message": "Không thể tạo ứng dụng" } } @@ -630,11 +702,9 @@ "title": "Chỉnh sửa ứng dụng", "notification": { "success": { - "title": "Thay đổi đã được áp dụng thành công", "message": "Ứng dụng đã được lưu thành công" }, "error": { - "title": "Không thể áp dụng thay đổi", "message": "Không thể lưu ứng dụng" } } @@ -644,26 +714,18 @@ "message": "Bạn có chắc chắn muốn xóa ứng dụng {name} không?", "notification": { "success": { - "title": "Xóa thành công", "message": "Ứng dụng đã được xóa thành công" }, "error": { - "title": "Xóa không thành công", "message": "Không thể xóa ứng dụng" } } } }, "field": { - "name": { - "label": "Tên" - }, "description": { "label": "Mô tả" }, - "url": { - "label": "Url" - }, "useDifferentUrlForPing": { "checkbox": { "label": "Sử dụng URL khác để ping", @@ -678,34 +740,582 @@ "search": "Tìm một ứng dụng", "noResults": "Không có kết quả", "action": "Chọn {app}", - "title": "Chọn ứng dụng để thêm vào bảng này" + "title": "Chọn ứng dụng để thêm vào bảng này", + "toggle": "Nhấp để chọn", + "selected": "Đã chọn", + "multiple": "Thêm {count}", + "selectedCount": "{count, plural, other {# mục đã chọn}}", + "appsSelected": "{count, plural, other {# ứng dụng đã chọn}}", + "selectMultiple": "Chọn nhiều mục", + "cancelMultiple": "Thoát chế độ chọn nhiều", + "customApplication": "Ứng dụng tùy chỉnh", + "application": "Ứng dụng" }, "create": { "title": "Tạo ứng dụng mới", "description": "Tạo ứng dụng mới ", "action": "Mở trình tạo ứng dụng" + } + } + }, + "tips": { + "dismiss": "Bỏ qua mẹo", + "multiSelectApps": "Mẹo: Giữ Ctrl / ⌘ để chọn nhiều ứng dụng cùng lúc" + }, + "customWidget": { + "secretEntry": { + "title": "Cấu hình nguồn API", + "description": "Xác nhận URL máy chủ và nhập thông tin xác thực. Homarr mã hóa các giá trị bí mật và không bao giờ trả chúng về cho tác nhân yêu cầu.", + "loading": "Đang tải yêu cầu bảo mật…", + "applying": "Đang áp dụng cấu hình này… Hãy để trang này mở.", + "saved": "Đã cấu hình nguồn API. Bạn có thể đóng trang này.", + "unavailable": "Yêu cầu không khả dụng", + "saveError": "Không thể cấu hình nguồn API", + "source": "Nguồn API: {name}", + "baseUrl": "URL máy chủ", + "networkScope": "Quyền truy cập mạng", + "save": "Lưu cấu hình API", + "expires": "Yêu cầu dùng một lần này hết hạn lúc {time}." + }, + "page": { + "list": { + "noResults": "Chưa có tiện ích tùy chỉnh. Hãy tạo tiện ích đầu tiên của bạn!", + "noDescription": "Không có mô tả", + "enabled": "Bật", + "disabled": "Tắt", + "disabledDescription": "Tiện ích này vẫn được cấu hình nhưng sẽ không tải trên bất kỳ bảng nào.", + "requestCount": "{count, plural, other {# yêu cầu}}", + "invalidDefinition": "Định nghĩa không hợp lệ", + "migrationRequired": "Yêu cầu di chuyển", + "migrationInstructions": "Mở Hành động để sao chép hoặc xuất định nghĩa v1 ban đầu nhằm tạo lại thủ công. Bạn cũng có thể sử dụng lời nhắc di chuyển với LLM. Các vị trí hiện có trên bảng vẫn hoạt động sau khi di chuyển.", + "missingCredentials": "{count, plural, other {Thiếu # thông tin xác thực}}", + "missingCredentialsDescription": "{count, plural, other {Tiện ích này vẫn cần # thông tin xác thực.}} Chọn huy hiệu này để cấu hình URL và các giá trị được mã hóa." }, - "add": "Thêm ứng dụng" + "create": { + "title": "Tạo tiện ích tùy chỉnh", + "subtitle": "Xác định URL API, thông tin xác thực và cách hiển thị dữ liệu phản hồi." + }, + "tabs": { + "ariaLabel": "Các phần tiện ích tùy chỉnh", + "installed": "Đã cài đặt", + "workshop": "Xưởng" + } + }, + "action": { + "pasteImportHint": "Dán toàn bộ JSON tiện ích tùy chỉnh bằng Ctrl+V hoặc Command+V", + "delete": "Xóa tiện ích tùy chỉnh", + "deleteConfirm": "Bạn có chắc muốn xóa \"{name}\" không? Không thể hoàn tác thao tác này.", + "export": "Xuất", + "duplicate": "Nhân bản", + "aiPrompt": "Thiết kế bằng AI", + "copyAiPrompt": "Sao chép lời nhắc AI", + "enable": "Bật", + "disable": "Tắt", + "menu": "Thao tác", + "downloadSkill": "Xem Kỹ năng tiện ích tùy chỉnh", + "publishWorkshop": "Xuất bản lên Workshop", + "migrate": "Di chuyển tiện ích tùy chỉnh", + "configureSources": "Cấu hình nguồn", + "copyLegacyDefinition": "Sao chép nội dung tiện ích gốc", + "exportLegacyDefinition": "Xuất nội dung tiện ích gốc", + "copyMigrationPrompt": "Sao chép lời nhắc di chuyển LLM", + "pasteMigration": "Dán tiện ích đã di chuyển", + "importMigration": "Nhập tệp JSON đã di chuyển" + }, + "sourceSetupDialog": { + "title": "Cấu hình nguồn tiện ích", + "description": "Xem lại nơi tiện ích này kết nối và thêm hoặc thay thế thông tin xác thực được mã hóa.", + "credentialsRequired": "Yêu cầu sẽ thất bại cho đến khi thêm thông tin xác thực bắt buộc.", + "save": "Lưu cấu hình" + }, + "field": { + "description": "Mô tả" + }, + "editor": { + "errorBoundary": { + "title": "Đã xảy ra lỗi" + }, + "action": { + "components": "Thành phần", + "format": "Định dạng", + "insertStarter": "Chèn mẫu khởi đầu", + "redo": "Làm lại", + "copied": "Đã sao chép", + "schema": "Lược đồ" + }, + "reference": { + "minimal": "Ví dụ tối giản", + "full": "Ví dụ đầy đủ" + }, + "componentReference": { + "search": "Tìm kiếm thành phần", + "empty": "Không có thành phần phù hợp", + "count": "Có sẵn {count, number} thành phần" + }, + "status": { + "errors": "{count, number} lỗi", + "warnings": "{count, number} cảnh báo", + "ready": "Không tìm thấy vấn đề nào", + "position": "Dòng {line, number}, Cột {column, number}", + "characters": "{count, number} ký tự", + "charactersWithLimit": "{count, number} / {limit, number}" + }, + "diagnostics": { + "title": "Chẩn đoán mẫu", + "line": "Dòng {line, number}", + "ast": "{value}", + "bindingTypeConflict": "Đầu vào \"{value}\" được chia sẻ bởi các điều khiển có kiểu giá trị không tương thích.", + "runtimeBindingTypeConflict": "Đầu vào \"{value}\" được liên kết vừa với {firstType} vừa với {secondType}.", + "dynamicRequestId": "Yêu cầu requestId dạng cố định. Không chấp nhận ID yêu cầu động.", + "dynamicInputBinding": "Cần có tên đầu vào dạng literal để bind.", + "inlineRequestProps": "Các thành phần mạng chấp nhận requestId và params; các thuộc tính URL, method, header và body nội tuyến bị chặn.", + "invalidRequestManifest": "Các yêu cầu có tên phải là một ánh xạ yêu cầu hợp lệ. {value}", + "missingRequestId": "Thành phần mạng này yêu cầu requestId dạng cố định.", + "templateEmpty": "Nhập mẫu JSX.", + "templateTooLong": "Mẫu vượt quá giới hạn 50.000 ký tự.", + "unknownRequest": "Không tồn tại yêu cầu có tên với ID \"{value}\"." + } + }, + "workbench": { + "configure": "Cấu hình", + "sectionNavigation": "Các phần tiện ích tùy chỉnh", + "widgetPreview": "Bản xem trước tiện ích", + "generalInformation": "Thông tin chung", + "invalidWidget": "Tiện ích không hợp lệ", + "section": { + "general": "Chung", + "sources": "Nguồn API", + "requests": "Yêu cầu", + "options": "Tùy chọn", + "jsx": "JSX", + "preview": "Bản xem trước" + }, + "status": { + "unsaved": "Thay đổi chưa lưu", + "invalid": "Cần chú ý", + "ready": "Sẵn sàng" + }, + "saveError": { + "title": "Chưa lưu tiện ích", + "description": "Hãy khắc phục các lỗi xác thực rồi lưu lại.", + "more": "+{count} lỗi khác được hiển thị trong workbench.", + "errors": "Lỗi xác thực", + "copy": "Sao chép lỗi", + "copied": "Đã sao chép lỗi" + }, + "action": { + "preview": "Kiểm thử và xem trước", + "previewLoading": "Đang kiểm thử các yêu cầu" + }, + "requests": { + "title": "Truy vấn và hành động được đặt tên", + "label": "Yêu cầu", + "description": "Truy vấn tải dữ liệu; hành động chỉ chạy sau khi người dùng tương tác. Mọi phương thức HTTP đều hợp lệ cho cả hai loại." + }, + "options": { + "title": "Tùy chọn tiện ích" + }, + "builder": { + "advancedManifest": "Manifest thô nâng cao", + "advancedJson": "JSON manifest nâng cao", + "manifestFilename": "widget.json", + "request": "Yêu cầu {count, number}", + "requestId": "ID yêu cầu", + "type": "Loại Trình tải xuống", + "method": "Phương thức", + "source": "Nguồn API", + "run": "Chạy", + "runLoad": "Khi tiện ích tải", + "runManual": "Từ SubFetch", + "permission": "Quyền", + "path": "Đường dẫn", + "pathDescription": "Dùng '{option:name}' cho tùy chọn tiện ích và '{param:name}' cho các giá trị gọi.", + "requestDetails": "Truy vấn, nội dung và hành vi", + "queryValues": "Giá trị truy vấn", + "queryKey": "Khóa truy vấn", + "queryKeyInvalid": "Dùng ID duy nhất bắt đầu bằng chữ cái và chỉ chứa chữ cái, số, - hoặc _.", + "valueSource": "Nguồn giá trị", + "literal": "Giá trị cố định", + "widgetOption": "Tùy chọn tiện ích", + "invocationParameter": "Tham số gọi", + "option": "Tùy chọn", + "parameterName": "Tên tham số", + "value": "Giá trị", + "removeQueryValue": "Xóa giá trị truy vấn", + "addQueryValue": "Thêm giá trị truy vấn", + "jsonBody": "Nội dung JSON", + "jsonBodyDescription": "Tùy chọn. Chèn tham chiếu $option và $param ở bất kỳ cấp độ nào.", + "insertOptionReference": "Chèn tham chiếu tùy chọn", + "insertParameterReference": "Chèn tham chiếu tham số", + "confirmation": "Thông báo xác nhận", + "invalidation": "Làm mới sau khi thành công", + "invalidationDescription": "ID truy vấn, phân tách bằng dấu phẩy", + "noAuth": "Gửi mà không xác thực nguồn", + "moveRequestUp": "Di chuyển yêu cầu lên", + "moveRequestDown": "Di chuyển yêu cầu xuống", + "removeRequest": "Xóa yêu cầu", + "addRequest": "Thêm yêu cầu", + "optionName": "Tên tùy chọn", + "label": "Nhãn", + "control": "Điều khiển", + "description": "Mô tả", + "default": "Mặc định", + "optionDetails": "Ràng buộc và lựa chọn động", + "minimum": "Tối thiểu", + "maximum": "Tối đa", + "step": "Bước", + "choiceLabel": "Nhãn lựa chọn", + "choiceValue": "Giá trị lựa chọn", + "newChoice": "Lựa chọn mới", + "addChoice": "Thêm lựa chọn", + "removeChoice": "Xóa lựa chọn", + "choicesRequest": "Tải lựa chọn từ yêu cầu", + "itemsPath": "Đường dẫn mục", + "itemsPathPlaceholder": "mục (tùy chọn)", + "valuePath": "Đường dẫn giá trị", + "labelPath": "Đường dẫn nhãn", + "group": "Nhóm", + "advancedOption": "Tùy chọn nâng cao", + "moveOptionUp": "Di chuyển tùy chọn lên", + "moveOptionDown": "Di chuyển tùy chọn xuống", + "removeOption": "Xóa tùy chọn", + "addOption": "Thêm tùy chọn", + "invalidJson": "JSON không hợp lệ", + "invalidWidget": "Tiện ích không hợp lệ" + }, + "jsx": { + "title": "Mẫu JSX", + "label": "Mẫu" + }, + "sources": { + "title": "Nguồn API và thông tin xác thực", + "newName": "API {count, number}", + "duplicateSourceId": "ID nguồn API phải là duy nhất.", + "credentialRemoved": "Đã xóa thông tin xác thực", + "credentialRemovedDescription": "Giá trị đã lưu đã bị xóa.", + "primary": "API chính", + "id": "ID nguồn", + "name": "Tên công việc", + "baseUrl": "URL cơ sở", + "baseUrlError": { + "invalid": "Nhập URL đầy đủ.", + "protocol": "Sử dụng URL HTTP hoặc HTTPS.", + "credentials": "Xóa tên người dùng và mật khẩu khỏi URL này. Thay vào đó, hãy cấu hình thông tin xác thực bên dưới.", + "queryOrFragment": "Xóa chuỗi truy vấn hoặc fragment khỏi URL cơ sở này. Thêm các giá trị truy vấn vào một yêu cầu được đặt tên." + }, + "networkScope": "Truy cập mạng", + "authentication": "Xác thực", + "headerName": "Tên header", + "queryParameter": "Tham số truy vấn", + "configured": "Đã cấu hình — nhập giá trị thay thế", + "clear": "Quang đãng", + "remove": "Xóa nguồn và các yêu cầu của nguồn", + "advanced": "Nâng cao", + "add": "Thêm nguồn API khác", + "sourceType": "Tích hợp", + "manualSource": "API HTTP", + "existingIntegration": "Tích hợp hiện có", + "integrationType": "Loại tích hợp", + "selectIntegration": "Tích hợp đã cấu hình", + "noIntegrations": "Không có tích hợp phù hợp", + "integrationUnavailable": "Tích hợp đã chọn không còn khả dụng. Hãy chọn một tích hợp khác.", + "integrationDescription": "Sử dụng URL và thông tin xác thực của tích hợp đã lưu. Thay đổi được áp dụng tự động. Cần có quyền truy cập đầy đủ vào tích hợp để chạy yêu cầu." + }, + "ai": { + "title": "Tạo hoặc sửa bằng bất kỳ AI nào", + "description": "Trước tiên, hãy thêm URL tài liệu API nếu có. Để sửa lỗi, hãy chạy Xem trước nếu có thể. Sao chép lời nhắc vào bất kỳ AI nào; AI có thể yêu cầu thêm thông tin. Dán JSON cuối cùng của AI vào đây.", + "request": "Tiện ích này nên làm gì?", + "documentationUrl": "URL tài liệu API (tùy chọn)", + "paste": "Dán", + "response": "Phản hồi của AI", + "manualCopyDescription": "Không thể truy cập bảng nhớ tạm. Hãy chọn lời nhắc bên dưới và sao chép thủ công.", + "manualPasteDescription": "Không thể truy cập bảng nhớ tạm hoặc phản hồi đã sao chép cần được sửa. Hãy dán phản hồi JSON của AI vào đây.", + "selectAll": "Chọn tất cả", + "loadResponse": "Tải phản hồi", + "loaded": "Đã tải tiện ích vào trình chỉnh sửa", + "invalidResponse": "Bảng nhớ tạm không chứa tiện ích v2 hợp lệ", + "invalidResponseDetail": "Phản hồi AI không hợp lệ: {message}" + }, + "preview": { + "invalid": "Khắc phục lỗi xác thực để xem trước tiện ích này.", + "fixtureError": "Lỗi dữ liệu xem trước", + "requestData": "Dữ liệu yêu cầu", + "status": { + "idle": "Chưa kiểm thử các yêu cầu", + "loading": "Đang kiểm thử các yêu cầu", + "success": "Tất cả yêu cầu tải đều thành công", + "error": "Một hoặc nhiều yêu cầu tải thất bại" + }, + "result": { + "loading": { + "title": "Đang kiểm thử các yêu cầu API", + "description": "Homarr đang tạo phiên xem trước và tải dữ liệu tiện ích." + }, + "success": { + "title": "Đã sẵn sàng xem trước", + "description": "" + }, + "error": { + "title": "Hoàn tất xem trước nhưng có lỗi yêu cầu", + "description": "Thành công {succeeded, number} và thất bại {failed, number}. Mở Dữ liệu để xem phản hồi và thông tin lỗi." + } + }, + "instanceOptions": "Tùy chọn phiên bản", + "liveActions": "Chạy hành động trên API đã cấu hình", + "liveActionsDescription": "Tắt là mô phỏng an toàn. Bật tùy chọn này sẽ ảnh hưởng đến dịch vụ thực.", + "noActions": "Chưa xác định hành động nào.", + "containedFailures": "Các lỗi khi chạy được giới hạn trong tiện ích này. Nhật ký yêu cầu không bao giờ chứa giá trị bí mật.", + "validation": { + "title": "Xác thực", + "ready": "Định nghĩa tiện ích hợp lệ." + }, + "accessibility": { + "title": "Kiểm tra trợ năng", + "ready": "Không phát hiện thiếu sót trợ năng phổ biến nào.", + "pending": "Kiểm tra trợ năng sẽ chạy khi định nghĩa tiện ích hợp lệ.", + "imageAlt": "Thêm văn bản alt cho mọi Image, chỉ dùng alt rỗng cho hình ảnh trang trí.", + "actionIconLabel": "Thêm aria-label hoặc title cho mọi ActionIcon.", + "inputLabel": "Thêm nhãn hiển thị hoặc tên trợ năng cho mọi đầu vào." + }, + "journal": "Nhật ký yêu cầu đã ẩn thông tin", + "actionParameters": "Tham số hành động (JSON)", + "invalidParameters": "Sử dụng các kiểu tham số chuỗi, số và boolean đã khai báo.", + "runDestructive": "Chạy hành động phá hoại", + "runAction": "Chạy hành động", + "deleteConfirmation": "Hành động xem trước này thay đổi dữ liệu từ xa thông qua API đã cấu hình.", + "simulated": "Đã mô phỏng hành động", + "httpStatus": "HTTP {status, number}", + "tab": { + "widget": "Tiện ích", + "data": "Dữ liệu", + "options": "Tùy chọn", + "state": "Trạng thái công việc", + "actions": "Điều khiển", + "diagnostics": "Chẩn đoán" + }, + "size": { + "compact": "Thu gọn", + "standard": "Tiêu chuẩn", + "wide": "Rộng" + }, + "fixture": { + "live": "Trực tiếp", + "loading": "Đang tải", + "empty": "Trống", + "error": "Lỗi" + } + } + }, + "preview": { + "request": { + "permission": { + "view": "Xem", + "modify": "Sửa đổi", + "full": "Đầy đủ" + } + } + }, + "notification": { + "created": "Đã tạo tiện ích \"{name}\" thành công.", + "updated": "Đã cập nhật tiện ích \"{name}\" thành công.", + "deleted": "Đã xóa tiện ích \"{name}\".", + "imported": "Đã nhập tiện ích thành công.", + "migrated": "Đã di chuyển tiện ích cũ thành công. Các vị trí hiện có trên bảng hiện sử dụng định nghĩa v2.", + "migrationError": "Không thể di chuyển tiện ích cũ. Hãy đảm bảo tệp sử dụng lược đồ homarr-custom-widget-v2.", + "legacyDefinitionCopied": "Nội dung tiện ích gốc đã được sao chép. Các giá trị thông tin xác thực đã lưu không được bao gồm.", + "legacyDefinitionCopyError": "Không thể sao chép nội dung tiện ích gốc.", + "migrationPromptCopied": "Đã sao chép lời nhắc di chuyển đã ẩn thông tin. Dán lời nhắc vào LLM, sao chép phản hồi JSON duy nhất của nó, rồi chọn Dán tiện ích đã di chuyển vào đây.", + "migrationPromptCopyError": "Không thể sao chép lời nhắc di chuyển.", + "sourcesConfigured": "Đã lưu nguồn và thông tin xác thực của tiện ích.", + "sourceConfigurationError": "Không thể cấu hình nguồn tiện ích.", + "aiPromptCopiedWithCount": "Đã sao chép lời nhắc AI vào bảng nhớ tạm ({count, number} ký tự).", + "aiPromptCopyError": "Không thể sao chép lời nhắc vào bảng nhớ tạm. Trình duyệt của bạn có thể không hỗ trợ tính năng này.", + "aiPromptSent": "Đã gửi lời nhắc. Bạn có thể tiếp tục chỉnh sửa trong khi trợ lý hoạt động ở chế độ nền.", + "updateError": "Không thể cập nhật tiện ích. Các thay đổi của bạn chưa được lưu.", + "importError": "Không thể nhập tiện ích. Đảm bảo tệp là bản xuất JSON tiện ích tùy chỉnh hợp lệ.", + "exportError": "Không thể xuất tiện ích.", + "duplicated": "Đã nhân bản tiện ích \"{name}\".", + "duplicateError": "Không thể nhân bản tiện ích.", + "toggleError": "Không thể chuyển đổi trạng thái tiện ích.", + "deleteError": "Không thể xóa tiện ích.", + "previewError": "Không thể tải bản xem trước. Hãy kiểm tra URL và thử lại." + }, + "importReview": { + "title": "Xem lại việc nhập tiện ích tùy chỉnh", + "description": "Kiểm tra nơi tiện ích này kết nối và quyền truy cập bảng mà các điều khiển của nó yêu cầu trước khi nhập.", + "migrationTitle": "Xem lại bản thay thế v2 đã di chuyển", + "migrationDescription": "Xem lại và xác nhận định nghĩa v2 được tạo này. Việc xác nhận sẽ thay thế nguyên tử bản ghi v1 được bảo lưu, đồng thời giữ các vị trí bảng hiện có liên kết với cùng ID tiện ích.", + "fileLabel": "Chọn tệp JSON tiện ích tùy chỉnh", + "name": "Tên công việc", + "origin": "Nguồn gốc cơ sở", + "authentication": "Xác thực", + "networkScope": "Phạm vi mạng", + "methods": "Phương thức HTTP", + "permissions": "Quyền bảng bắt buộc", + "sourceSetup": { + "title": "Cấu hình nguồn API", + "description": "Xác nhận nơi tiện ích này kết nối và thêm thông tin xác thực. URL riêng tư và loopback dành riêng cho cài đặt Homarr của bạn.", + "suggestedUrl": "URL được đề xuất", + "confirmUrl": "Tôi xác nhận URL máy chủ này chính xác cho cài đặt Homarr của mình", + "ready": "URL đã sẵn sàng", + "needsUrl": "Xác nhận URL", + "credentialsMissing": "Thiếu thông tin xác thực", + "credentialsOptional": "Bạn có thể cài đặt mà không cần thông tin xác thực và cấu hình sau, nhưng các yêu cầu sẽ thất bại cho đến khi chúng được thêm vào." + }, + "actionWarning": { + "title": "Tiện ích này có thể thay đổi dữ liệu từ xa", + "description": "Xem lại mọi hành động được đặt tên, thông tin xác thực kế thừa và xác nhận phá hoại sau khi nhập. Bí mật không được bao gồm trong tệp." + }, + "cancel": "Hủy nhập", + "confirm": "Nhập tiện ích", + "confirmMigration": "Xác nhận thay thế v2" + }, + "secret": { + "apiKey": "Khóa API hoặc token", + "username": "Tên người dùng", + "password": "Mật khẩu", + "savedPlaceholder": "••••••• (đã lưu, để trống để giữ nguyên)" + } + }, + "workshop": { + "title": "Xưởng", + "browseWorkshop": "Duyệt Workshop", + "openCommunity": "Mở Workshop", + "openOnWorkshop": "Mở {title} trên trang web Workshop", + "back": "Quay lại Workshop", + "search": "Tìm kiếm tiện ích", + "searchCss": "Tìm kiếm giao diện CSS", + "sort": "Sắp xếp", + "sortTop": "Được đánh giá cao nhất", + "sortNewest": "Mới nhất", + "listAriaLabel": "Các tiện ích Workshop", + "listAriaLabelCss": "Các giao diện CSS Workshop", + "empty": "Không có tiện ích nào khớp với tìm kiếm này.", + "emptyDescription": "Các tiện ích cộng đồng được đăng lên Workshop sẽ xuất hiện ở đây.", + "emptyFilteredTitle": "Không có tiện ích nào khớp với tìm kiếm này", + "emptyFilteredDescription": "Không có tiện ích Workshop nào khớp với \"{search}\".", + "emptyCss": "Không có giao diện CSS nào khớp với tìm kiếm này.", + "unavailableTitle": "Workshop Homarr dường như không khả dụng", + "unavailable": "Dịch vụ cộng đồng có thể tạm thời ngừng hoạt động. Hãy thử lại sau giây lát. Các tiện ích đã cài đặt không bị ảnh hưởng.", + "loadError": "Không thể tải nội dung gửi này.", + "noDescription": "Không có mô tả", + "author": "bởi {name}", + "communityMember": "Thành viên cộng đồng", + "outdated": "Lỗi thời", + "outdatedWarning": "Tác giả đã đánh dấu nội dung gửi này là lỗi thời. Hãy xem xét cẩn thận trước khi nhập.", + "score": "Điểm: {count, number}", + "upvote": "Tán thành", + "downvote": "Phản đối", + "voteError": "Không thể lưu lượt bình chọn.", + "signIn": "Đăng nhập bằng GitHub", + "signInError": "Đăng nhập GitHub thất bại. Hãy kiểm tra nhà cung cấp OAuth của Workshop đã được cấu hình và cửa sổ bật lên được cho phép.", + "signOut": "Đăng xuất", + "signInHint": "Đăng nhập để bình chọn hoặc báo cáo. Không cần tài khoản Workshop để cài đặt.", + "securityNotice": "Các tiện ích Workshop có thể gọi các nguồn API đã khai báo và thực hiện các hành động đã khai báo bằng thông tin xác thực bạn cấu hình cục bộ. Bí mật không bao giờ được đưa vào.", + "securityNoticeCss": "CSS cộng đồng có thể thay đổi giao diện và khả năng sử dụng của bảng. Hãy xem xét trước khi nhập; không có gì được lưu cho đến khi bạn lưu cài đặt bảng.", + "install": "Cài đặt", + "installReviewTitle": "Xem lại trước khi cài đặt", + "installError": "Không thể cài đặt tiện ích này", + "installErrorDescription": "Nội dung gửi Workshop không phải là tiện ích Custom JSX v2 hợp lệ.", + "useCss": "Nhập CSS", + "importCss": "Nhập CSS từ Workshop", + "importCssConfirm": "Thay thế CSS tùy chỉnh hiện tại bằng \"{title}\"? Chưa có gì được lưu cho đến khi bạn lưu cài đặt bảng.", + "screenshotAlt": "Ảnh chụp màn hình {title} {count, number}", + "screenshotViewer": "Trình xem ảnh chụp màn hình {title}", + "screenshotsLabel": "Ảnh chụp màn hình {title}", + "zoomScreenshot": "Xem kích thước đầy đủ", + "previousScreenshot": "Ảnh chụp màn hình trước", + "nextScreenshot": "Ảnh chụp màn hình tiếp theo", + "showScreenshotThumbnails": "Hiển thị hình thu nhỏ ảnh chụp màn hình", + "hideScreenshotThumbnails": "Ẩn hình thu nhỏ ảnh chụp màn hình", + "closeScreenshotViewer": "Đóng trình xem ảnh chụp màn hình", + "technicalDetails": "Chi tiết kỹ thuật", + "sourceCode": "Mục Workshop", + "export": "Xuất", + "report": "Báo cáo", + "reportTitle": "Báo cáo nội dung gửi", + "reportReason": "Lý do", + "reportExplanation": "Bạn muốn các kiểm duyệt viên Workshop biết điều gì?", + "reportSend": "Gửi báo cáo", + "reportSent": "Đã gửi báo cáo", + "reportSentDescription": "Các kiểm duyệt viên Workshop hiện có thể xem xét nội dung gửi này.", + "reportCount": "{count, plural, other {# báo cáo}}", + "reportWarning": "{count, plural, other {Nội dung gửi này có # báo cáo cộng đồng đang mở.}} Nội dung vẫn có thể cài đặt, nhưng trước tiên bạn nên xem xét nội dung.", + "reportVisibility": "Chi tiết báo cáo chỉ hiển thị với tác giả nội dung gửi này và quản trị viên Workshop.", + "reportCategory": { + "outdated": "Lỗi thời hoặc không còn hoạt động", + "malicious": "Độc hại", + "spam": "Thư rác", + "copyright": "Bản quyền", + "inappropriate": "Không phù hợp", + "other": "Khác" + }, + "publish": { + "title": "Đăng lên Workshop", + "introTitle": "Chia sẻ tiện ích này với cộng đồng", + "introDescription": "Homarr xuất một bản sao tiện ích hiện tại không chứa thông tin xác thực. Hãy thêm thông tin danh sách rõ ràng để mọi người biết tiện ích này làm gì trước khi cài đặt.", + "listingDetails": "Danh sách Workshop", + "listingDetailsDescription": "Các chi tiết này xuất hiện công khai cùng với định nghĩa tiện ích đã xuất.", + "success": "Đã đăng ngay. Thành viên cộng đồng hiện có thể cài đặt và báo cáo tiện ích này.", + "successTitle": "Tiện ích của bạn đang hoạt động", + "manageDescription": "Mở nội dung gửi để cập nhật danh sách, xem xét báo cáo, đánh dấu là lỗi thời hoặc xóa. Việc quản lý nội dung gửi được thực hiện trực tiếp trên trang web Workshop.", + "viewSubmission": "Xem và quản lý nội dung gửi", + "done": "Xong", + "signInHint": "Đăng nhập để đăng dưới danh tính Workshop của bạn.", + "titleField": "Tiêu đề", + "descriptionField": "Mô tả", + "screenshots": "Ảnh chụp màn hình", + "screenshotsDescription": "Tối đa năm ảnh PNG, JPEG hoặc WebP", + "screenshotsPlaceholder": "Chọn ảnh chụp màn hình", + "invalidScreenshot": "Sử dụng ảnh PNG, JPEG hoặc WebP, mỗi ảnh không lớn hơn {maxSize}.", + "privateSourceWarning": "Tiện ích này chứa URL nguồn riêng tư cho: {sources}. Hãy thay thế máy chủ cá nhân hoặc địa chỉ IP bằng trình giữ chỗ dịch vụ an toàn trước khi xuất bản.", + "reviewSourcesTitle": "Xem lại URL nguồn riêng tư", + "privateSourceConfirmation": "Tôi đã xem xét các URL nguồn này và chúng không tiết lộ chi tiết cơ sở hạ tầng riêng tư", + "action": "Đăng ngay", + "publicationNote": "Việc đăng diễn ra ngay lập tức. Bạn có thể quản lý nội dung gửi sau đó trên Workshop.", + "definitionChanged": "Tiện ích đã thay đổi trong khi chuẩn bị đăng. Hãy xem lại URL nguồn riêng tư rồi thử lại.", + "error": "Đăng thất bại" } }, "integration": { + "completion": { + "modalTitle": "Dịch vụ đã sẵn sàng", + "title": "{name} đã được kết nối", + "description": "Kết nối đã vượt qua kiểm tra. Tiếp theo, hãy chọn nội dung muốn hiển thị trên bảng này.", + "connectionReady": "Kết nối dịch vụ đã sẵn sàng", + "appReady": "Phím tắt ứng dụng đã sẵn sàng", + "compatibleWidgets": "", + "chooseWidget": "Chọn tiện ích", + "recipes": { + "title": "Được đề xuất cho bảng này", + "description": "Dựa trên các dịch vụ đã kết nối và tiện ích hiện có trên bảng này.", + "newConnectionReason": "Hiện có qua {integration}", + "existingConnectionReason": "Hoạt động với dịch vụ bạn đã kết nối", + "dismiss": "Bỏ đề xuất cho dịch vụ này trên bảng này" + } + }, "page": { "list": { - "title": "Tích hợp", + "ariaLabel": "Các tích hợp đã cấu hình", "search": "Tìm kiếm tích hợp", + "scopedNote": "Chỉ hiển thị các tích hợp mà bạn được phép quản lý.", "noResults": { - "title": "Chưa có tích hợp nào" + "title": "Chưa có tích hợp nào", + "description": "Kết nối một dịch vụ để sử dụng dữ liệu và hành động của dịch vụ đó trong các tiện ích Homarr.", + "action": "Tạo tích hợp đầu tiên", + "filteredTitle": "Không có tích hợp nào khớp với tìm kiếm", + "filteredDescription": "Không có tích hợp nào khớp với \"{search}\". Hãy thử tên, loại hoặc URL khác.", + "createOnlyTitle": "Bạn chỉ có thể thêm tích hợp", + "createOnlyDescription": "Quyền của bạn cho phép tạo tích hợp nhưng không quản lý các tích hợp hiện có. Hãy yêu cầu quản trị viên cấp quyền truy cập vào những tích hợp bạn cần." } }, "create": { "title": "Tích hợp {name} mới", "notification": { "success": { - "title": "Tạo thành công", "message": "Tích hợp đã được tạo thành công" }, "error": { - "title": "Tạo không thành công", "message": "Không thể tạo tích hợp" } }, @@ -729,11 +1339,9 @@ "title": "Chỉnh sửa tích hợp {name}", "notification": { "success": { - "title": "Thay đổi đã được áp dụng thành công", "message": "Tích hợp đã được lưu thành công" }, "error": { - "title": "Không thể áp dụng thay đổi", "message": "Không thể lưu tích hợp" } }, @@ -750,23 +1358,15 @@ "message": "Bạn có chắc chắn muốn xóa tích hợp {name} không?", "notification": { "success": { - "title": "Xóa thành công", "message": "Tích hợp đã được xóa thành công" }, "error": { - "title": "Xóa không thành công", "message": "Không thể xóa tích hợp" } } } }, "field": { - "name": { - "label": "Tên" - }, - "url": { - "label": "Url" - }, "attemptSearchEngineCreation": { "label": "Tạo công cụ tìm kiếm", "description": "Tích hợp “{kind}” có thể được sử dụng với các công cụ tìm kiếm. Chọn tùy chọn này để tự động cấu hình công cụ tìm kiếm." @@ -778,6 +1378,10 @@ "label": "Tạo ứng dụng", "description": "Tạo ứng dụng có cùng tên và biểu tượng với tích hợp. Để trống trường nhập bên dưới để tạo ứng dụng bằng URL của tích hợp." }, + "linkApp": { + "label": "Liên kết ứng dụng hiện có", + "description": "Kết nối tích hợp này với một ứng dụng bạn đã có thể sử dụng." + }, "appHref": { "placeholder": "URL ứng dụng tùy chỉnh" }, @@ -791,7 +1395,11 @@ "grid": { "widgetCount": "{count} widget", "noWidgets": "Không có widget", - "detected": "Phát hiện qua Docker" + "detected": "Phát hiện qua Docker", + "connected": "{count, plural, other {Đã kết nối {count, number}}}", + "tiedWidgets": "Tiện ích liên kết", + "more": "+{count} mục khác", + "loadError": "Không thể tải các tích hợp. Hãy thử lại trước khi tạo kết nối mới." }, "category": { "dnsHole": "DNS", @@ -822,7 +1430,10 @@ "analytics": "Phân tích", "vpn": "VPN", "mediaLibrary": "Thư viện phương tiện", - "uptimeMonitoring": "Giám sát thời gian hoạt động" + "uptimeMonitoring": "Giám sát thời gian hoạt động", + "beszel": "Beszel", + "systemMonitoring": "Giám sát hệ thống", + "security": "Bảo mật" }, "testConnection": { "action": { @@ -1107,6 +1718,22 @@ "slug": { "label": "Slug trang trạng thái", "newLabel": "Slug trang trạng thái mới" + }, + "wazuhIndexerUrl": { + "label": "URL trình lập chỉ mục", + "newLabel": "URL trình lập chỉ mục mới" + }, + "wazuhIndexerUsername": { + "label": "Tên người dùng trình lập chỉ mục", + "newLabel": "Tên người dùng trình lập chỉ mục mới" + }, + "wazuhIndexerPassword": { + "label": "Mật khẩu trình lập chỉ mục", + "newLabel": "Mật khẩu trình lập chỉ mục mới" + }, + "wazuhDashboardUrl": { + "label": "URL bảng điều khiển (tùy chọn)", + "newLabel": "URL bảng điều khiển mới" } } }, @@ -1115,54 +1742,19 @@ "interact": "Tương tác với tích hợp", "full": "Toàn quyền truy cập tích hợp" }, - "audiobookshelf": { - "name": "Audiobookshelf", - "description": "Máy chủ sách nói và podcast tự lưu trữ" - }, - "navidrome": { - "name": "Navidrome", - "description": "Máy chủ phát nhạc tự lưu trữ, tương thích với API Subsonic" - }, - "uptimeKuma": { - "name": "Uptime Kuma", - "description": "Giám sát thời gian hoạt động tự lưu trữ với các trang trạng thái công khai", - "secret": { - "slug": { - "description": "Slug của trang trạng thái công khai. Mặc định là \"default\" nếu chưa thiết lập." - }, - "apiKey": { - "description": "Khóa API tùy chọn để truy cập /metrics có xác thực" - } - } - }, - "traefik": { - "name": "Traefik", - "description": "Reverse proxy và bộ cân bằng tải nền tảng đám mây" - }, - "paperlessNgx": { - "name": "Paperless-ngx", - "description": "Hệ thống quản lý tài liệu để lưu trữ và sắp xếp các tài liệu đã quét" - }, - "patchmon": { - "name": "PatchMon", - "description": "Quản lý bản vá và giám sát máy chủ Linux" - }, - "bazarr": { - "name": "Bazarr", - "description": "Ứng dụng bổ trợ cho Sonarr và Radarr, dùng để quản lý và tải phụ đề" - }, - "wud": { - "name": "What's Up Docker", - "description": "Theo dõi các container Docker của bạn có bản cập nhật hình ảnh" + "llamacpp": { + "name": "llama.cpp", + "description": "Giám sát một llama-server llama.cpp cục bộ: tình trạng, mô hình và các chỉ số sinh nội dung" } }, "media": { "plural": "Media", "search": "Tìm media", "field": { - "name": "Tên", + "preview": "Xem trước", "size": "Kích cỡ", - "creator": "Người sáng tạo" + "creator": "Người sáng tạo", + "actions": "Điều khiển" }, "action": { "upload": { @@ -1190,10 +1782,12 @@ } }, "copy": { - "label": "Sao chép URL" + "label": "Sao chép URL", + "labelNamed": "Sao chép URL của {name}" }, "open": { - "label": "Mở media" + "label": "Mở media", + "labelNamed": "Mở {name}" } }, "noResults": { @@ -1208,7 +1802,6 @@ "add": "Thêm", "apply": "Áp dụng", "backToOverview": "Trở về mục tổng quan", - "skip": "Bỏ qua", "change": "Thay đổi", "create": "Tạo nên", "createAnother": "Tạo và bắt đầu lại", @@ -1231,16 +1824,31 @@ "tryAgain": "Thử lại", "loading": "Đang tải", "show": "Hiện", - "hide": "Ẩn" + "hide": "Ẩn", + "undo": "Hoàn tác", + "editNamed": "Chỉnh sửa {name}", + "deleteNamed": "Xóa {name}", + "clearSearch": "Xóa tìm kiếm", + "copy": "Sao chép", + "copied": "Đã sao chép", + "refresh": "Làm mới" + }, + "pagination": { + "pageOf": "Trang {page} trên {totalPages}" }, "here": "tại đây", + "serviceUrlTemplate": { + "serverTitle": "Địa chỉ máy chủ thông thường", + "urlModeLabel": "Mẫu địa chỉ dịch vụ", + "hostPort": "Cùng máy chủ, cổng khác nhau", + "subdomain": "Mỗi dịch vụ một tên miền phụ", + "path": "Mỗi dịch vụ một đường dẫn" + }, "iconPicker": { "label": "URL biểu tượng", + "description": "Tìm kiếm trong thư viện, dán URL hình ảnh hoặc tải lên tệp.", "header": "Nhập tên hoặc đối tượng để lọc biểu tượng... Homarr sẽ tìm qua {countIcons} biểu tượng cho bạn", "headerLoading": "Tìm kiếm hình ảnh theo tên", - "noResults": "Không có biểu tượng nào khớp với \"{search}\".", - "error": "Không thể tải biểu tượng.", - "description": "Tìm kiếm trong thư viện, dán URL hình ảnh hoặc tải lên tệp.", "clear": "Xóa hình ảnh", "uploadImage": "Tải lên hình ảnh", "results": "Kết quả tìm kiếm hình ảnh", @@ -1249,7 +1857,9 @@ "otherImages": "Hình ảnh khác", "urlLoading": "Đang kiểm tra hình ảnh…", "urlReady": "Hình ảnh đã sẵn sàng để sử dụng", - "urlError": "Không thể tải hình ảnh này. Kiểm tra URL và thử lại." + "urlError": "Không thể tải hình ảnh này. Kiểm tra URL và thử lại.", + "noResults": "Không có biểu tượng nào khớp với \"{search}\".", + "error": "Không thể tải biểu tượng." }, "colorScheme": { "options": { @@ -1261,7 +1871,6 @@ "information": { "min": "Tối thiểu", "max": "Tối đa", - "days": "Ngày", "hours": "Giờ", "minutes": "Phút" }, @@ -1298,16 +1907,16 @@ }, "userAvatar": { "menu": { - "switchToDarkMode": "Chuyển sang chế độ tối", - "switchToLightMode": "Đổi qua chế độ nền sáng", + "open": "Mở menu tài khoản", "management": "Quản lý", - "docker": "Docker", "preferences": "Cá nhân hoá", "logout": "Đăng xuất", "login": "Đăng nhập", "homeBoard": "Bảng chính của bạn", - "loggedOut": "Đã đăng xuất", - "updateAvailable": "Có {countUpdates} bản cập nhật: {tag}" + "updateAvailable": "Có {countUpdates} bản cập nhật: {tag}", + "assistant": "Trợ lý", + "assistantThinking": "Đang suy nghĩ", + "modifier": "Bộ sửa đổi" } }, "dangerZone": "Khu vực nguy hiểm", @@ -1355,75 +1964,85 @@ "kilometersPerHour": "km/h", "milesPerHour": "mph" } + }, + "widgetQuery": { + "loading": "Đang tải dữ liệu tiện ích" + }, + "total": "Tổng cộng", + "filesystemUsage": "{count, plural, other {Hiển thị mức sử dụng cho {count, number} hệ thống tệp}}", + "field": { + "name": "Tên công việc" + }, + "label": { + "new": "Mới" + }, + "entity": { + "apps": "Ứng dụng", + "boards": "Bảng", + "certificates": "Chứng chỉ", + "customWidgets": "Tiện ích tùy chỉnh", + "groups": "Các nhóm", + "integrations": "Tích hợp", + "invites": "Mời", + "logs": "Nhật ký", + "media": "Phương tiện", + "searchEngines": "Công cụ tìm kiếm", + "tasks": "Tác vụ", + "users": "Người dùng" } }, "section": { - "dynamic": { + "option": { + "showLabel": { + "label": "Hiển thị nhãn", + "description": "Hiển thị nhãn vùng chứa phía trên nội dung." + }, + "collapsible": { + "label": "Cho phép thu gọn", + "description": "Cho phép người xem mở rộng và thu gọn vùng chứa này." + }, + "showOpenAll": { + "label": "Hiển thị hành động mở tất cả", + "description": "Hiển thị hành động mở mọi ứng dụng trong vùng chứa này ở các tab mới." + }, + "scrollable": { + "label": "Có thể cuộn", + "description": "Giữ vùng chứa này ở kích thước đã đặt và cuộn nội dung thay vì mở rộng để vừa với nội dung." + } + }, + "action": { + "openAllInNewTabsFor": "Mở tất cả ứng dụng trong {name} ở các tab" + }, + "openAllInNewTabs": { + "title": "Mở tất cả trong các thẻ", + "text": "Một số trình duyệt có thể chặn việc mở hàng loạt thẻ vì lý do bảo mật. Homarr không thể mở tất cả cửa sổ vì trình duyệt đã chặn thao tác này. Vui lòng cho phép \"Mở cửa sổ bật lên\" rồi thử lại." + }, + "container": { + "untitled": "Vùng chứa chưa có tiêu đề", "action": { - "create": "Phần động mới", - "remove": "Xóa phần động" + "create": "Vùng chứa mới", + "remove": "Xóa vùng chứa", + "expand": "Mở rộng", + "collapse": "Thu gọn" }, "option": { "title": { "label": "Tiêu đề" }, "customCssClasses": { - "label": "Lớp CSS tùy chỉnh" + "label": "Các lớp CSS tùy chỉnh" }, "borderColor": { "label": "Màu viền" } }, "remove": { - "title": "Xóa phần động", - "message": "Bạn có chắc chắn muốn xóa phần động này không? Các mục sẽ được chuyển đến cùng vị trí trong phần cha." - } - }, - "category": { - "field": { - "name": { - "label": "Tên" - } - }, - "action": { - "create": "Danh mục mới", - "edit": "Đổi tên danh mục", - "remove": "Xóa danh mục", - "moveUp": "Đi lên", - "moveDown": "Đi xuống", - "createAbove": "Danh mục mới phía trên", - "createBelow": "Danh mục mới phía dưới", - "openAllInNewTabs": "Mở tất cả trong các tab" - }, - "create": { - "title": "Danh mục mới", - "submit": "Thêm danh mục" - }, - "remove": { - "title": "Xóa danh mục", - "message": "Bạn có chắc chắn muốn xóa danh mục {name} không?" - }, - "edit": { - "title": "Đổi tên danh mục", - "submit": "Đổi tên danh mục" - }, - "menu": { - "label": { - "create": "Danh mục mới", - "changePosition": "Đổi vị trí", - "settings": "Cài đặt" - } - }, - "openAllInNewTabs": { - "title": "Mở tất cả trong các tab", - "text": "Một số trình duyệt có thể chặn việc mở hàng loạt tab vì lý do bảo mật. Homarr không thể mở tất cả cửa sổ vì trình duyệt đã chặn thao tác này. Vui lòng cho phép “Mở cửa sổ bật lên” rồi thử lại." + "message": "Xóa vùng chứa này? Nội dung của vùng chứa sẽ chuyển vào khu vực xung quanh." } } }, "item": { "action": { - "create": "Mục mới", - "import": "Nhập mục", "edit": "Chỉnh sửa mục", "moveResize": "Di chuyển / đổi cỡ mục", "duplicate": "Nhân bản mục", @@ -1432,7 +2051,7 @@ "menu": { "label": { "settings": "Cài đặt", - "refresh": "Làm mới", + "settingsFor": "Cài đặt cho {name}", "options": "Tùy chọn", "actions": "Thao tác" }, @@ -1441,21 +2060,96 @@ "error": "Lỗi", "loading": "Đang tải", "idle": "Nhàn rỗi" + }, + "notification": { + "saveError": { + "title": "Không thể lưu tiện ích", + "message": "Các thay đổi của tiện ích đã được khôi phục" + } } }, "create": { "title": "Chọn mục để thêm", "search": "Lọc mục", - "addToBoard": "Thêm vào bảng" + "addToBoard": "Thêm vào bảng", + "addAtPosition": "Thêm mục tại đây", + "destination": { + "label": "Thêm vào", + "description": "Chọn nơi tiện ích sẽ xuất hiện. Bạn vẫn có thể di chuyển tiện ích sau.", + "mainCanvas": "Canvas chính", + "leftRail": "Thanh bên trái", + "rightRail": "Thanh bên phải" + }, + "connectionStatus": { + "ready": "Sẵn sàng", + "needsSetup": "Cần thiết lập", + "noConnectionRequired": "Không yêu cầu kết nối" + }, + "customWidget": "Tiện ích tùy chỉnh", + "standalone": "Độc lập", + "missingIntegration": { + "title": "Trước tiên hãy kết nối dịch vụ", + "noPermission": "Tiện ích này cần kết nối dịch vụ tương thích. Hãy yêu cầu quản trị viên kết nối một dịch vụ rồi thử lại." + }, + "notification": { + "success": { + "title": "Đã thêm tiện ích", + "message": "{name} đã được thêm vào bảng này.", + "relocatedMessage": "{name} đã được thêm vào {destination} vì đích đã chọn không khả dụng." + }, + "error": { + "title": "Không thể thêm mục", + "message": "Không thể thêm mục vào bảng này" + } + } + }, + "selection": { + "summary": "{count, plural, other {Đã chọn {count, number} mục}}", + "selected": "{count, plural, other {Đã chọn {count, number}}}", + "copy": "Sao chép", + "copied": "{count, plural, other {Đã sao chép {count, number} mục vào bảng nhớ tạm}}", + "copyError": "Không thể sao chép các mục đã chọn. Trình duyệt của bạn có thể không cho phép truy cập bảng nhớ tạm.", + "paste": "Dán", + "pasteShortcut": "Dán các mục đã sao chép vào đây (Ctrl / ⌘ + V)", + "pasted": "{count, plural, other {Đã dán {count, number} mục}}", + "pasteError": "Không thể đọc bảng nhớ tạm. Trình duyệt của bạn có thể không cho phép truy cập bảng nhớ tạm.", + "pasteInvalid": "Bảng nhớ tạm không chứa các mục bảng Homarr hợp lệ.", + "pasteUnavailable": "Các mục đã sao chép không vừa trên bảng này.", + "removed": "{count, plural, other {Đã xóa {count, number} mục}}", + "move": "Di chuyển", + "moveTo": "Di chuyển các mục đã chọn", + "delete": "Xóa", + "clear": "Xóa lựa chọn", + "clearShortcut": "Xóa lựa chọn (Escape)", + "saveErrorTitle": "Không thể cập nhật các mục", + "saveErrorMessage": "Không thể lưu thay đổi. Bảng đã được làm mới.", + "moveUnavailableTitle": "Không thể di chuyển các mục đã chọn", + "moveUnavailableMessage": "Đích không đủ chỗ cho toàn bộ lựa chọn." }, "moveResize": { "title": "Di chuyển / đổi cỡ mục", + "entryLabel": "{name}, cột {column}, hàng {row}", + "target": { + "numbered": "{name}, đích {index}", + "located": "{name}, {location}, đích {index}" + }, + "keyboard": { + "instructions": "Nhấn Enter hoặc Space để bắt đầu chỉnh sửa bằng bàn phím. Dùng phím mũi tên để di chuyển, Shift cùng phím mũi tên để đổi kích thước và Escape để dừng.", + "started": "Đã bắt đầu chỉnh sửa bằng bàn phím. Dùng phím mũi tên để di chuyển, Shift cùng phím mũi tên để đổi kích thước và Escape để dừng.", + "stopped": "Đã dừng chỉnh sửa bằng bàn phím.", + "boundary": "Thay đổi đó không vừa trong phần này." + }, "field": { + "section": { + "label": "Phần hoặc thanh bên" + }, "width": { - "label": "Chiều rộng" + "label": "Chiều rộng", + "shortLabel": "R" }, "height": { - "label": "Chiều cao" + "label": "Chiều cao", + "shortLabel": "C" }, "xOffset": { "label": "Dịch chuyển X" @@ -1469,18 +2163,36 @@ "title": "Chỉnh sửa mục", "tab": { "widget": "Chỉnh sửa widget", - "app": "Chỉnh sửa ứng dụng" + "app": "Chỉnh sửa ứng dụng", + "integration": "Chỉnh sửa tích hợp" }, "app": { "propagationNotice": "Thay đổi ứng dụng này sẽ áp dụng cho mọi nơi nó được dùng trên tất cả bảng." }, + "integration": { + "action": "Chỉnh sửa kết nối", + "description": "Kiểm thử hoặc sửa kết nối đã chọn mà không rời khỏi tiện ích này.", + "editLabel": "Chỉnh sửa tích hợp {name}", + "fullAccessRequired": "Yêu cầu quyền truy cập đầy đủ", + "propagationNotice": "Các thay đổi đối với tích hợp này được áp dụng ở mọi nơi tích hợp được sử dụng. Kết nối sẽ được kiểm thử trước khi lưu.", + "loading": "Đang tải tích hợp", + "loadError": "Không thể tải tích hợp này. Hãy thử lại trước khi thay đổi cài đặt kết nối." + }, + "preview": { + "integrationRequired": "Chọn một kết nối để xem trước tiện ích này.", + "size": "Kích thước tệp" + }, + "settings": { + "label": "Cài đặt tiện ích" + }, "advancedOptions": { "label": "Tùy chọn nâng cao", "title": "Tùy chọn mục nâng cao" }, "field": { "integrations": { - "label": "Tích hợp" + "label": "Tích hợp", + "removeLabel": "Xóa tích hợp {name}" }, "title": { "label": "Tiêu đề" @@ -1494,17 +2206,18 @@ } }, "remove": { - "title": "Xóa mục", "message": "Bạn có chắc chắn muốn xóa mục này không?" + }, + "advancedFocus": { + "open": "Mở chế độ xem nâng cao", + "close": "Đóng chế độ xem nâng cao", + "label": "Chế độ xem nâng cao của {widget}" } }, "widget": { "integrationSelect": { "configureIntegrationFirst": "Trước tiên hãy kết nối một tích hợp", - "loading": "Đang tải...", - "placeholder": "Chọn một tùy chọn", - "noResults": "Không tìm thấy kết quả", - "loadError": "Không thể tải các tùy chọn" + "placeholder": "Chọn một tùy chọn" }, "app": { "name": "Ứng dụng", @@ -1513,9 +2226,6 @@ "appId": { "label": "Chọn ứng dụng" }, - "openInNewTab": { - "label": "Mở trong tab mới" - }, "showTitle": { "label": "Hiện tên ứng dụng" }, @@ -1523,11 +2233,8 @@ "label": "Bật kiểm tra trạng thái" }, "layout": { - "label": "Bố cục", "option": { - "row": "Ngang", "row-reverse": "Ngang (đảo ngược)", - "column": "Dọc", "column-reverse": "Dọc (đảo ngược)" } }, @@ -1552,23 +2259,60 @@ "name": "Dấu trang", "description": "Hiển thị nhiều liên kết ứng dụng", "option": { - "title": { - "label": "Tiêu đề" + "showTitle": { + "label": "Hiển thị tiêu đề tiện ích" + }, + "titleSize": { + "label": "Kích thước tiêu đề tiện ích (px)" }, "layout": { "label": "Bố cục", "option": { - "row": { - "label": "Nằm ngang" - }, - "column": { - "label": "Thẳng đứng" - }, - "grid": { - "label": "Lưới" + "adaptive": { + "label": "Thích ứng" }, "gridHorizontal": { "label": "Lưới ngang" + }, + "icons": { + "label": "Biểu tượng" + } + } + }, + "variant": { + "label": "Hiển thị", + "option": { + "soft": { + "label": "Mềm" + }, + "filled": { + "label": "Đã tô" + }, + "outline": { + "label": "Viền" + }, + "plain": { + "label": "Đơn giản" + } + } + }, + "spacing": { + "label": "Khoảng cách thẻ", + "option": { + "xs": { + "label": "Cực nhỏ" + }, + "sm": { + "label": "Bé nhỏ" + }, + "md": { + "label": "Trung bình" + }, + "lg": { + "label": "Lớn" + }, + "xl": { + "label": "Cực lớn" } } }, @@ -1581,17 +2325,28 @@ "hideHostname": { "label": "Ẩn tên máy chủ" }, - "openNewTab": { - "label": "Mở trong tab mới" - }, "withBorder": { "label": "Hiển thị viền" }, + "grow": { + "label": "Mở rộng thẻ để lấp đầy hàng" + }, + "customUrls": { + "label": "Liên kết tùy chỉnh" + }, "items": { "label": "Dấu trang", - "add": "Thêm dấu trang" + "remove": "Xóa dấu trang", + "apps": { + "label": "Thêm dấu trang", + "description": "Dán URL hoặc tìm Ứng dụng hiện có. Kéo các dấu trang bên dưới để sắp xếp lại.", + "placeholder": "Dán URL hoặc tìm kiếm Ứng dụng", + "addUrl": "Thêm URL này", + "hint": "Nhấn Enter để thêm URL. Dán các URL phân tách bằng dấu phẩy hoặc mỗi dòng một URL để thêm nhiều URL." + } } - } + }, + "empty": "Thêm URL hoặc Ứng dụng trong cài đặt tiện ích" }, "archiveTeamWarrior": { "name": "ArchiveTeam Warrior", @@ -1600,33 +2355,61 @@ "showBroadcastMessage": { "label": "Hiển thị tin nhắn phát sóng" } + }, + "noProjectSelected": "Chưa chọn dự án", + "runnerStatus": "Trình chạy: {status}", + "projectId": "Dự án: {id}", + "sessionReceived": "Đã nhận phiên: {value}", + "sessionSent": "Đã gửi phiên: {value}", + "sessionId": "Phiên: {id}", + "startedAt": "Đã bắt đầu {date}", + "emptyItems": "Không có tác vụ đang hoạt động hoặc gần đây trong ảnh chụp này", + "metric": { + "running": "Đang chạy", + "completed": "Hoàn tất", + "failed": "Không thành công", + "canceled": "Đã hủy", + "download": "Tải xuống", + "upload": "Tải lên" + }, + "status": { + "running": "Đang chạy", + "completed": "Đã hoàn thành", + "failed": "Không thành công", + "canceled": "Đã hủy", + "stopped": "Đã dừng", + "idle": "Nhàn rỗi", + "unknown": "Không rõ" + } + }, + "wud": { + "name": "What's Up Docker", + "description": "Hiển thị số container được theo dõi có bản cập nhật.", + "title": "What's Up Docker", + "monitored": "Đã theo dõi", + "updatesAvailable": "{count, plural, other {# bản cập nhật có sẵn}}", + "updateAvailable": "Có bản cập nhật", + "openReleaseNotes": "Mở ghi chú phát hành", + "option": { + "showRing": { + "label": "Hiển thị vòng cập nhật" + }, + "showUpdateList": { + "label": "Hiển thị danh sách cập nhật container", + "description": "Liệt kê từng container được giám sát có bản cập nhật image sẵn có" + } } }, "dnsHoleSummary": { "name": "Tổng quan DNS Hole", "description": "Hiển thị tổng quan về DNS Hole của bạn", "option": { - "layout": { - "label": "Bố cục", - "option": { - "row": { - "label": "Nằm ngang" - }, - "column": { - "label": "Thẳng đứng" - }, - "grid": { - "label": "Lưới" - } - } - }, "usePiHoleColors": { "label": "Sử dụng màu Pi-Hole" } }, "error": { - "internalServerError": "Không thể lấy Tổng quan DNS Hole", - "integrationsDisconnected": "Không có dữ liệu, tất cả tích hợp bị ngắt kết nối" + "internalServerError": "Không thể lấy Tổng quan DNS Hole" }, "data": { "adsBlockedToday": "Đã chặn hôm nay", @@ -1634,32 +2417,24 @@ "dnsQueriesToday": "Truy vấn hôm nay", "domainsBeingBlocked": "Tên miền trong danh sách chặn" }, - "domainsTooltip": "Do có nhiều tích hợp, Homarr không thể tính chính xác số lượng miền đang bị chặn" + "domainsTooltip": "Do có nhiều tích hợp, Homarr không thể tính chính xác số lượng miền đang bị chặn", + "status": { + "enabled": "Bật", + "disabled": "Tắt", + "unknown": "Không rõ" + } }, "dnsHoleControls": { "name": "Điều khiển DNS Hole", "description": "Kiểm soát PiHole hoặc AdGuard từ bảng điều khiển của bạn", "option": { - "layout": { - "label": "Bố cục", - "option": { - "row": { - "label": "Nằm ngang" - }, - "column": { - "label": "Thẳng đứng" - }, - "grid": { - "label": "Lưới" - } - } - }, "showToggleAllButtons": { "label": "Hiện nút Bật/Tắt Tất cả" } }, "error": { - "internalServerError": "Không thể điều khiển DNS Hole" + "internalServerError": "Không thể điều khiển DNS Hole", + "bulkActionsFailed": "{count, plural, other {# thao tác không thành công}}" }, "controls": { "enableAll": "Bật tất cả", @@ -1670,8 +2445,6 @@ "disabled": "Tắt", "processing": "Đang xử lý", "disconnected": "Đã ngắt kết nối", - "hours": "Giờ", - "minutes": "Phút", "unlimited": "Để trống để không giới hạn" } }, @@ -1683,16 +2456,10 @@ "label": "Hiển thị tiêu đề/thành phố tùy chỉnh", "description": "Hiển thị tiêu đề tùy chỉnh hoặc tên thành phố/quốc gia phía trên đồng hồ." }, - "customTitle": { - "label": "Tiêu đề" - }, "is24HourFormat": { "label": "Định dạng 24 giờ", "description": "Sử dụng định dạng 24 giờ thay vì 12 giờ" }, - "showSeconds": { - "label": "Hiển thị giây" - }, "useCustomTimezone": { "label": "Sử dụng múi giờ cố định" }, @@ -1711,29 +2478,295 @@ "label": "Định dạng thời gian tùy chỉnh", "description": "Sử dụng ISO 8601 để định dạng thời gian (sẽ ghi đè các tùy chọn khác)" }, - "customDateFormat": { - "label": "Định dạng ngày tùy chỉnh", - "description": "Sử dụng ISO 8601 để định dạng ngày (sẽ ghi đè các tùy chọn khác)" - }, "showWeather": { "label": "Hiển thị thời tiết", "description": "Hiển thị biểu tượng thời tiết động nhỏ và nhiệt độ ở góc thẻ" }, - "weatherLocation": { - "label": "Vị trí thời tiết" - }, "isWeatherFormatFahrenheit": { "label": "Sử dụng Fahrenheit" + }, + "animateWeatherIcon": { + "label": "Tạo hiệu ứng động cho biểu tượng thời tiết", + "description": "Tạo hiệu ứng động cho biểu tượng thời tiết. Tắt theo mặc định và luôn tắt khi yêu cầu giảm chuyển động." + }, + "colorWeatherByDayNight": { + "label": "Tô màu thời tiết theo ngày/đêm", + "description": "Đổi màu biểu tượng thời tiết và nhiệt độ theo màu ban ngày hoặc ban đêm, dựa trên việc địa điểm đã chọn hiện đang là ngày hay đêm." + }, + "dayWeatherColor": { + "label": "Màu ban ngày" + }, + "nightWeatherColor": { + "label": "Màu ban đêm" + }, + "worldClockCities": { + "label": "Các thành phố trên đồng hồ thế giới", + "description": "Thêm và sắp xếp tối đa sáu thành phố cho chế độ xem nâng cao." } + }, + "timezoneList": { + "timezone": "Múi giờ", + "cityLabel": "Nhãn thành phố", + "searchPlaceholder": "Tìm kiếm múi giờ", + "noResults": "Không tìm thấy múi giờ", + "unsupportedOption": "Không được hỗ trợ: {timeZone}", + "add": "Thêm thành phố", + "remove": "Xóa {city}", + "reorder": "Sắp xếp lại {city}", + "limit": "Đã cấu hình {count} trên {maximum} thành phố" + }, + "worldClock": { + "primary": "Đồng hồ chính", + "local": "Giờ địa phương", + "today": "Hôm nay", + "tomorrow": "Ngày mai", + "yesterday": "Hôm qua", + "noSecondaryCities": "Thêm thành phố trong tùy chọn tiện ích để so sánh tại đây.", + "unsupportedPrimaryTitle": "Không có múi giờ chính", + "unsupportedPrimary": "{timeZone} không được trình duyệt này hỗ trợ. Đang hiển thị UTC làm phương án dự phòng được đánh dấu rõ ràng.", + "unsupportedTimeZone": "Múi giờ không được hỗ trợ: {timeZone}", + "accessibleTime": "{city}: {time}, {date}, {timeZone}", + "advancedLabel": "Đồng hồ thế giới nâng cao", + "cities": "Đồng hồ thế giới", + "cityCount": "{count} múi giờ", + "timeBarLabel": "Vị trí trong ngày theo 24 giờ của {city}", + "dayProgress": "Đã trôi qua {percent}% · còn lại {hours} giờ {minutes} phút", + "phaseLegend": "Chú giải thời gian trong ngày", + "tick": { + "midnight": "00", + "morning": "06", + "noon": "12", + "evening": "18", + "end": "24" + }, + "phaseRange": { + "night": "00–05 · 21–24", + "dawn": "05–08", + "day": "08–18", + "dusk": "18–21" + }, + "phase": { + "night": "Đêm", + "dawn": "Bình minh", + "day": "Ngày", + "dusk": "Chạng vạng" + } + } + }, + "airQuality": { + "name": "Chất lượng không khí & UV", + "description": "Hiển thị chất lượng không khí, chỉ số tia cực tím, chất ô nhiễm và phấn hoa cho một địa điểm.", + "option": { + "location": { + "label": "Địa điểm chất lượng không khí" + }, + "aqiStandard": { + "label": "Tiêu chuẩn AQI", + "options": { + "auto": "Tự động theo ngôn ngữ", + "european": "AQI châu Âu", + "us": "AQI Hoa Kỳ" + } + }, + "showUv": { + "label": "Hiển thị chỉ số UV" + }, + "showPollutants": { + "label": "Hiển thị nồng độ chất ô nhiễm" + }, + "showPollen": { + "label": "Hiển thị nồng độ phấn hoa" + } + }, + "category": { + "good": "Tốt", + "fair": "Khá", + "moderate": "Trung bình", + "unhealthySensitive": "Không lành mạnh đối với nhóm nhạy cảm", + "unhealthy": "Không lành mạnh", + "poor": "Kém", + "veryPoor": "Rất kém", + "veryUnhealthy": "Rất không lành mạnh", + "extremelyPoor": "Cực kỳ kém", + "hazardous": "Nguy hiểm", + "unknown": "Không có chỉ số AQI" + }, + "uv": { + "label": "Chỉ số UV", + "category": { + "low": "Thấp", + "moderate": "Trung bình", + "high": "Cao", + "veryHigh": "Rất cao", + "extreme": "Cực cao", + "unknown": "Không có chỉ số" + } + }, + "dominantPollutant": "Chất ô nhiễm chính", + "aqiLabel": "AQI", + "strongestPollen": "Phấn hoa nhiều nhất", + "unit": { + "concentration": "{value} µg/m³", + "pollen": "{value} hạt/m³" + }, + "pollutant": { + "pm2_5": "PM2.5", + "pm10": "PM10", + "ozone": "Ôzôn", + "nitrogenDioxide": "Nitơ điôxít", + "sulphurDioxide": "Lưu huỳnh điôxít", + "carbonMonoxide": "Cacbon monoxit" + }, + "pollen": { + "alder": "Trăn", + "birch": "Bạch dương", + "grass": "Cỏ", + "mugwort": "Ngải cứu", + "olive": "Ô liu", + "ragweed": "Cỏ phấn hương" + }, + "compact": { + "sixHourTrend": "Xu hướng AQI trong sáu giờ tới" + }, + "advanced": { + "observedAt": "Cập nhật lúc {time}", + "next24Hours": "24 giờ tới", + "pollutants": "Nồng độ chất ô nhiễm", + "pollen": "Nồng độ phấn hoa", + "sevenDayForecast": "Dự báo mức tối đa trong 7 ngày", + "aqiValue": "AQI {value}", + "uvValue": "UV {value}", + "uvShort": "UV {value}", + "noForecast": "Không có dữ liệu dự báo" + } + }, + "countdown": { + "name": "Đếm ngược", + "description": "Theo dõi các sự kiện sắp tới và ngày kỷ niệm lặp lại.", + "option": { + "events": { + "label": "Sự kiện", + "description": "Thêm và sắp xếp tối đa 20 lần đếm ngược một lần hoặc hằng năm. Ngày được nhập theo múi giờ đã chọn." + }, + "showProgress": { + "label": "Hiển thị tiến độ" + }, + "showSeconds": { + "label": "Hiển thị giây", + "description": "Giữ giây hiển thị cho mọi sự kiện sắp tới." + } + }, + "dateTimeEventList": { + "newEvent": "Sự kiện mới", + "add": "Thêm sự kiện", + "remove": "Xóa {event}", + "reorder": "Sắp xếp lại {event}", + "eventLabel": "Nhãn sự kiện", + "timezone": "Múi giờ", + "unsupportedOption": "Không được hỗ trợ: {timeZone}", + "recurrence": "Lặp lại", + "recurrenceOption": { + "none": "Không lặp lại", + "yearly": "Hằng năm" + }, + "target": "Ngày và giờ sự kiện", + "trackProgress": "Theo dõi tiến độ từ ngày bắt đầu", + "start": "Ngày và giờ bắt đầu tiến độ", + "confirmDateTime": "Xác nhận ngày và giờ", + "limit": "Đã cấu hình {count} trên {maximum} sự kiện" + }, + "empty": { + "title": "Chưa có lịch đếm ngược", + "description": "Thêm sự kiện trong tùy chọn tiện ích để bắt đầu đếm ngược." + }, + "completed": "Đã hoàn thành", + "yearly": "Hằng năm", + "progress": "Tiến độ sự kiện", + "upcoming": "Sắp tới", + "completedEvents": "Sự kiện đã hoàn tất", + "invalid": { + "title": "Một số sự kiện không thể hiển thị", + "description": "{count, plural, other {# sự kiện có ngày không hợp lệ hoặc múi giờ không được hỗ trợ.}}", + "value": "Không khả dụng" + }, + "alert": { + "notifications": "Thông báo trình duyệt", + "permissionDenied": "Thông báo bị chặn trong trình duyệt này.", + "reached": "Đã đến thời điểm đích của bộ đếm ngược." + } + }, + "timer": { + "name": "Bộ hẹn giờ / Pomodoro", + "description": "Chạy bộ hẹn giờ đơn giản hoặc chuỗi Pomodoro có thể cấu hình.", + "option": { + "mode": { + "label": "Chế độ", + "options": { + "timer": "Bộ hẹn giờ", + "pomodoro": "Pomodoro" + } + }, + "timerMinutes": { + "label": "Số phút hẹn giờ" + }, + "focusMinutes": { + "label": "Số phút tập trung" + }, + "shortBreakMinutes": { + "label": "Số phút nghỉ ngắn" + }, + "longBreakMinutes": { + "label": "Số phút nghỉ dài" + }, + "sessionsBeforeLongBreak": { + "label": "Số phiên tập trung trước khi nghỉ dài" + }, + "autoStartBreaks": { + "label": "Tự động bắt đầu giờ nghỉ" + }, + "autoStartFocus": { + "label": "Tự động bắt đầu phiên tập trung" + } + }, + "phase": { + "timer": "Hẹn giờ", + "focus": "Tập trung", + "shortBreak": "Nghỉ ngắn", + "longBreak": "Nghỉ dài" + }, + "action": { + "start": "Bắt đầu", + "pause": "Tạm dừng", + "reset": "Đặt lại" + }, + "attention": { + "timerComplete": "Hẹn giờ hoàn tất", + "phaseReady": "{phase} đã sẵn sàng" + }, + "progress": "Tiến trình hẹn giờ: {progress}%", + "compact": { + "completedFocus": "" + }, + "alert": { + "title": "Hẹn giờ hoàn tất", + "completed": "Đã hoàn tất {phase}." + }, + "advanced": { + "sequence": "Chuỗi Pomodoro", + "focusSession": "Tập trung {session}", + "settings": "Cài đặt cố định", + "settingsHint": "Sử dụng menu ngữ cảnh của tiện ích để chỉnh sửa các cài đặt bảng này.", + "localAlerts": "Cảnh báo cục bộ", + "notifications": "Thông báo trình duyệt", + "sound": "Âm thanh hẹn giờ", + "localAlertsHint": "Âm thanh hẹn giờ được bật theo mặc định. Âm thanh và thông báo chỉ áp dụng cho tiện ích này trong trình duyệt này.", + "notificationsDenied": "Thông báo bị chặn trong trình duyệt này." } }, "minecraftServerStatus": { "name": "Trạng thái máy chủ Minecraft", "description": "Hiển thị trạng thái của máy chủ Minecraft", "option": { - "title": { - "label": "Tiêu đề" - }, "domain": { "label": "Địa chỉ máy chủ" }, @@ -1753,11 +2786,21 @@ "noStation": "Chưa chọn ga", "option": { "baseUrl": { - "label": "URL Search.ch" + "label": "URL Search.ch", + "description": "URL tùy chỉnh phải trỏ đến địa chỉ IP công khai. Máy chủ riêng tư và cục bộ sẽ bị từ chối." }, "station": { - "label": "Ga" + "label": "Ga", + "placeholder": "Tìm ga" } + }, + "error": { + "customSourceUnavailable": "Nguồn lịch trình không khả dụng. Hãy kiểm tra để URL trỏ đến địa chỉ IP công khai.", + "stationSearch": "Không thể tìm ga. Hãy kiểm tra URL tùy chỉnh và quyền truy cập bảng của bạn." + }, + "warning": { + "stale": "Không thể làm mới thời gian biểu. Đang hiển thị các chuyến khởi hành được cập nhật lần cuối lúc {time}.", + "staleCompact": "Dữ liệu cũ" } }, "notebook": { @@ -1789,6 +2832,9 @@ "directionRtl": "Đặt hướng văn bản từ phải sang trái", "blockquote": "Trích dẫn", "horizontalLine": "Kẻ ngang", + "details": "Bật/tắt phần có thể thu gọn", + "expandDetails": "Mở rộng phần có thể thu gọn", + "collapseDetails": "Thu gọn phần có thể thu gọn", "bulletList": "Danh sách kiểu ký hiệu", "orderedList": "Danh sách đánh số", "checkList": "Danh sách kiểm tra", @@ -1797,16 +2843,20 @@ "link": "Liên kết", "unlink": "Gỡ bỏ liên kết", "image": "Nhúng hình ảnh", - "addTable": "Thêm bảng", + "insertTable": "Chèn bảng", + "insertTableSize": "Chèn bảng {columns} × {rows}", "deleteTable": "Xóa bảng", "colorCell": "Màu ô", - "mergeCell": "Bật/tắt hợp nhất ô", + "mergeCells": "Hợp nhất ô", + "splitCell": "Tách ô", "addColumnLeft": "Thêm cột trước", "addColumnRight": "Thêm cột sau", "deleteColumn": "Xóa cột", "addRowTop": "Thêm dòng bên trên", "addRowBelow": "Thêm dòng bên dưới", - "deleteRow": "Xóa dòng" + "deleteRow": "Xóa dòng", + "toggleHeaderRow": "Bật/tắt hàng tiêu đề", + "toggleHeaderColumn": "Bật/tắt cột tiêu đề" }, "align": { "left": "Bên trái", @@ -1817,8 +2867,6 @@ "clearColor": "Xóa màu", "source": "Nguồn", "widthPlaceholder": "Giá trị tính bằng % hoặc pixel", - "columns": "Cột", - "rows": "Dòng", "width": "Chiều rộng", "height": "Chiều cao" }, @@ -1830,7 +2878,9 @@ "discard": "Hủy thay đổi", "keepEditing": "Tiếp tục chỉnh sửa" } - } + }, + "saveFailed": "Không thể lưu ghi chú", + "documentStats": "{words, plural, other {# từ}} · {characters, plural, other {# ký tự}}" }, "anchorNote": { "name": "Ghi chú Anchor", @@ -1839,9 +2889,6 @@ "noteId": { "label": "Ghi chú" }, - "showTitle": { - "label": "Hiển thị tiêu đề" - }, "showUpdatedAt": { "label": "Hiển thị thời điểm cập nhật gần nhất" } @@ -1851,14 +2898,20 @@ "notFound": "Không tìm thấy ghi chú", "noNotes": "Không tìm thấy ghi chú nào", "integrationRequired": "Trước tiên hãy chọn một tích hợp Anchor", - "updatedAt": "Đã cập nhật {date}", "untitled": "Chưa có tiêu đề", - "edit": "Sửa", - "save": "Lưu", - "cancel": "Hủy", "readOnlyViewer": "Bạn chỉ có quyền xem ghi chú này. Tính năng chỉnh sửa đã bị tắt.", "saveForbidden": "Bạn không có quyền chỉnh sửa ghi chú này.", - "saveFailed": "Không thể lưu ghi chú này. Vui lòng thử lại." + "saveFailed": "Không thể lưu ghi chú này. Vui lòng thử lại.", + "createdAt": "Đã tạo {date}", + "permission": { + "owner": "Chủ", + "editor": "Biên tập viên", + "viewer": "Người xem" + }, + "status": { + "pinned": "Đã ghim", + "archived": "Đã lưu trữ" + } }, "iframe": { "name": "iFrame", @@ -1917,6 +2970,25 @@ "clickable": { "label": "Có thể nhấp" } + }, + "state": { + "on": "Bật", + "off": "Tắt", + "unavailable": "Không khả dụng", + "unknown": "Không rõ" + }, + "advanced": { + "entityId": "ID thực thể: {id}", + "lastChanged": "Đã thay đổi {date}", + "attribute": { + "unit": "Đơn vị", + "deviceClass": "Loại thiết bị", + "icon": "Biểu tượng" + } + }, + "error": { + "loadFailed": "Không thể tải thực thể", + "toggleFailed": "Không thể cập nhật thực thể" } }, "smartHome-executeAutomation": { @@ -1932,11 +3004,31 @@ }, "spotlightAction": { "run": "Chạy {name}" + }, + "advanced": { + "lastExecuted": "Lần chạy cuối lúc {time}", + "automationId": "ID tự động hóa: {id}", + "ready": "Sẵn sàng chạy", + "noPermission": "Không có quyền chạy tự động hóa này" + }, + "status": { + "running": "Đang chạy tự động hóa", + "success": "Tự động hóa đã hoàn tất" + }, + "error": { + "executeFailed": "Không thể chạy tự động hóa" } }, "stockPrice": { "name": "Giá cổ phiếu", "description": "Hiển thị giá cổ phiếu hiện tại của một công ty", + "advanced": { + "currentPrice": "Giá hiện tại", + "previousClose": "Giá đóng cửa trước đó", + "changePercentage": "Thay đổi (%)", + "minimum": "Tối thiểu", + "maximum": "Tối đa" + }, "option": { "stock": { "label": "Mã cổ phiếu" @@ -2007,6 +3099,10 @@ "label": "1 tháng" } } + }, + "showDetails": { + "label": "Hiển thị chi tiết", + "description": "Hiển thị tên, thay đổi và khoảng thời gian trong chế độ xem thu gọn. Tắt để chỉ hiển thị mã và giá." } } }, @@ -2034,6 +3130,13 @@ "showUnmonitored": { "label": "Hiển thị mục chưa giám sát" } + }, + "advanced": { + "previousMonth": "Hiển thị tháng trước", + "nextMonth": "Hiển thị tháng sau", + "eventCount": "{count, plural, other {# sự kiện}}", + "loading": "Đang tải sự kiện lịch...", + "noEvents": "Không có sự kiện trong tháng này" } }, "weather": { @@ -2046,16 +3149,18 @@ "disableTemperatureDecimals": { "label": "Tắt số thập phân của nhiệt độ" }, + "animateIcons": { + "label": "Tạo hiệu ứng động cho các biểu tượng thời tiết" + }, + "showHumidity": { + "label": "Hiển thị độ ẩm" + }, "showCurrentWindSpeed": { - "label": "Hiển thị tốc độ gió hiện tại", - "description": "Chỉ trong thời tiết hiện tại" + "label": "Hiển thị tốc độ gió hiện tại" }, "useImperialSpeed": { "label": "Dùng mph cho tốc độ gió" }, - "location": { - "label": "Vị trí thời tiết" - }, "showCity": { "label": "Hiển thị thành phố" }, @@ -2065,13 +3170,10 @@ "forecastDayCount": { "label": "Số ngày dự báo", "description": "Khi widget không đủ rộng, sẽ hiển thị ít ngày hơn" - }, - "dateFormat": { - "label": "Định dạng ngày", - "description": "Ngày tháng sẽ hiển thị như thế nào" } }, "currentWindSpeed": "{currentWindSpeed} {unit}", + "disabled": "Dữ liệu thời tiết không khả dụng vì kết nối ra ngoài bị tắt", "dailyForecast": { "sunrise": "Bình minh", "sunset": "Hoàng hôn", @@ -2094,6 +3196,47 @@ "thunderstorm": "Bão", "thunderstormWithHail": "Sấm sét kèm mưa đá", "unknown": "Không rõ" + }, + "details": "Hiển thị chi tiết thời tiết", + "detailsFor": "Hiển thị chi tiết thời tiết cho {date}", + "advanced": { + "forecast": "Dự báo 7 ngày", + "hourlyForecast": "24 giờ tới", + "day": "Ngày", + "time": "Thời gian", + "conditions": "Điều kiện", + "temperature": "Nhiệt độ", + "feelsLike": "Cảm giác như {temperature}", + "feelsLikeLabel": "Cảm giác như", + "feelsLikeRange": "Cảm giác như: {maximum} / {minimum}", + "highLow": "Cao nhất {maximum} · thấp nhất {minimum}", + "observedAt": "Cập nhật lúc {time}", + "humidity": "Độ ẩm", + "averageHumidity": "Độ ẩm trung bình: {humidity}%", + "currentHumidity": "Độ ẩm hiện tại", + "wind": "Gió / giật ({unit})", + "currentWind": "Gió hiện tại / gió giật", + "windValue": "{speed} / {gusts} {unit}", + "windDetail": "Gió tối đa / giật: {speed} / {gusts} {unit}", + "nextHourPrecipitation": "Lượng mưa trong giờ tới", + "precipitationChance": "Khả năng có mưa", + "precipitationValue": "{probability}% · {amount} mm", + "precipitationDetail": "Lượng mưa: {probability}% · {amount} mm", + "todayUv": "Chỉ số UV tối đa hôm nay", + "uvIndex": "Chỉ số UV tối đa: {value}", + "daylight": "Ánh sáng ban ngày: {duration}", + "hourlyTooltip": "Cảm giác như {feelsLike}{temperatureUnit} · {amount} mm · độ ẩm {humidity}% · gió {speed} {speedUnit}", + "hourlyTooltipWithoutHumidity": "Cảm giác như {feelsLike}{temperatureUnit} · {amount} mm · gió {speed} {speedUnit}", + "detailLabel": { + "feelsLike": "Cảm giác như", + "precipitation": "Lượng mưa", + "humidity": "Độ ẩm trung bình", + "wind": "Gió tối đa / gió giật", + "uv": "Chỉ số UV tối đa", + "daylight": "Ánh sáng ban ngày" + }, + "sun": "Bình minh / hoàng hôn", + "noForecast": "Không có dữ liệu dự báo" } }, "indexerManager": { @@ -2106,8 +3249,15 @@ }, "title": "Quản lý indexer", "testAll": "Kiểm tra tất cả", + "status": { + "healthy": "Lành mạnh", + "unhealthy": "Không lành mạnh", + "disabled": "Tắt", + "unknown": "Tình trạng không khả dụng" + }, "error": { - "internalServerError": "Không thể lấy trạng thái indexer" + "internalServerError": "Không thể lấy trạng thái indexer", + "testAll": "Kiểm tra trình lập chỉ mục thất bại. Hãy thử lại." } }, "healthMonitoring": { @@ -2136,11 +3286,6 @@ "fileSystem": { "label": "Hiển thị thông tin Hệ thống tệp" }, - "visibleStorageVolumes": { - "label": "Ổ lưu trữ hiển thị", - "description": "Chỉ khả dụng khi tất cả tích hợp đã chọn là Synology. Để trống để hiển thị tất cả ổ lưu trữ được phát hiện.", - "placeholder": "Chọn ổ lưu trữ" - }, "defaultTab": { "label": "Tab mặc định" }, @@ -2163,17 +3308,27 @@ "minutes": "{count} phút", "used": "Đã sử dụng", "available": "Khả dụng", - "lastSeen": "Cập nhật trạng thái lần cuối: {lastSeen}" + "lastSeen": "Cập nhật trạng thái lần cuối: {lastSeen}", + "updatesAvailable": "{count, plural, other {Có # bản cập nhật}}", + "rebootRequired": "Cần khởi động lại", + "rebootNotRequired": "Không cần khởi động lại" + }, + "smartStatus": { + "attributesWithinThresholds": "SMART: các thuộc tính nằm trong ngưỡng", + "attributesFailed": "SMART: lấy thuộc tính {attributes} không thành công", + "noCriticalWarning": "SMART: SSD không báo cảnh báo", + "criticalWarning": "SMART: SSD báo cảnh báo nghiêm trọng" + }, + "gauge": { + "cpuUsage": "Mức sử dụng CPU", + "cpuTemperature": "Nhiệt độ CPU", + "memoryUsage": "Mức sử dụng bộ nhớ", + "gpuUsage": "Mức sử dụng GPU của {name}" }, - "memory": {}, "error": { "internalServerError": "Không thể lấy trạng thái sức khỏe" }, "cluster": { - "summary": { - "cpu": "CPU", - "memory": "RAM" - }, "resource": { "node": { "name": "Node" @@ -2209,8 +3364,6 @@ "table": { "header": { "name": "Tên", - "cpu": "CPU", - "memory": "RAM", "node": "Node" } } @@ -2220,33 +3373,29 @@ "name": "Thống kê Docker", "description": "Thống kê các container của bạn (chỉ quản trị viên mới có thể thêm tiện ích này)", "option": { - "columns": { - "label": "Các cột cần hiển thị" + "endpointIds": { + "label": "Môi trường Docker", + "description": "Để trống để hiển thị các container từ mọi môi trường Docker", + "placeholder": "Tất cả môi trường Docker" }, - "enableRowSorting": { - "label": "Bật sắp xếp mục" + "containerFilter": { + "label": "Các container cần lọc" + }, + "filterIsWhitelist": { + "label": "Lọc dưới dạng danh sách cho phép" }, "defaultSort": { - "label": "Cột dùng để sắp xếp mặc định", "option": { "name": "Tên", "state": "", "cpuUsage": "Mức sử dụng CPU", "memoryUsage": "Mức sử dụng bộ nhớ" } - }, - "descendingDefaultSort": { - "label": "Đảo ngược thứ tự sắp xếp" - }, - "columnOrder": { - "label": "Thứ tự cột" - }, - "columnWidths": { - "label": "Độ rộng cột" } }, "error": { "internalServerError": "Không thể lấy thống kê container", + "endpointsUnavailable": "Các endpoint Docker không khả dụng", "layoutSaveTitle": "Chưa lưu bố cục bảng", "layoutSaveMessage": "Không thể lưu bố cục bảng Docker. Hãy thử di chuyển hoặc thay đổi kích thước cột lần nữa." }, @@ -2255,7 +3404,6 @@ } }, "coolify": { - "name": "Coolify", "description": "Tổng quan về phiên bản Coolify của bạn với các máy chủ và ứng dụng", "option": { "showServers": { @@ -2281,17 +3429,49 @@ "internalServerError": "Không thể lấy dữ liệu Coolify" }, "server": { - "buildServer": "Xây dựng" + "buildServer": "Xây dựng", + "resourceCounts": "{applications, plural, other {# ứng dụng}} / {services, plural, other {# dịch vụ}}", + "reachability": "Khả năng truy cập", + "usability": "Khả năng sử dụng" + }, + "source": { + "url": "Nguồn: {url}", + "unavailable": "{source}: không khả dụng" }, "instances": { "title": "Các phiên bản" + }, + "action": { + "openResource": "Mở {name}", + "openLogs": "Mở nhật ký {name}", + "showIp": "Hiển thị địa chỉ IP", + "hideIp": "Ẩn địa chỉ IP" + }, + "status": { + "running": "Đang chạy", + "stopped": "Đã dừng", + "exited": "Đã thoát", + "starting": "Đang khởi động", + "restarting": "Đang khởi động lại", + "unknown": "Không rõ", + "online": "Trực tuyến", + "offline": "Ngoại tuyến", + "reachable": "Có thể truy cập", + "unreachable": "Không thể truy cập", + "usable": "Có thể sử dụng", + "unusable": "Không thể sử dụng" } }, "vpn": { "name": "VPN", "description": "Tổng quan về các kết nối VPN của bạn", "serviceUnavailable": "VPN không khả dụng", - "option": {} + "status": { + "running": "Đang chạy", + "notRunning": "Không chạy", + "unavailable": "Không khả dụng", + "vpn": "VPN: {status}" + } }, "ups": { "name": "UPS", @@ -2318,14 +3498,19 @@ "runtime": "Thời gian chạy", "load": "Tải", "input": "Đầu vào", - "output": "Đầu ra" + "output": "Đầu ra", + "batteryVoltage": "Điện áp pin", + "power": "Công suất", + "temperature": "Nhiệt độ", + "manufacturer": "Nhà sản xuất", + "model": "Mô hình", + "serial": "Số sê-ri" }, "error": { "internalServerError": "Không thể lấy dữ liệu UPS" } }, "tracearr": { - "name": "Tracearr", "description": "Giám sát máy chủ phương tiện nâng cao với dữ liệu chi tiết về luồng và chuyển mã", "option": { "showStreams": { @@ -2413,10 +3598,7 @@ "label": "Sự kiện", "description": "Hiển thị tổng số lần xuất hiện của một sự kiện cụ thể", "placeholder": "Chọn một sự kiện", - "loading": "Đang tải sự kiện...", - "noEvents": "Không tìm thấy sự kiện", - "none": "Không có sự kiện", - "configureWebsiteFirst": "Chọn một trang web trước để tải sự kiện" + "none": "Không có sự kiện" }, "chartType": { "label": "Loại biểu đồ", @@ -2447,26 +3629,21 @@ "eventNames": { "label": "Sự kiện", "description": "Chọn một hoặc nhiều sự kiện để vẽ biểu đồ", - "placeholder": "Chọn sự kiện...", - "loading": "Đang tải sự kiện...", - "noEvents": "Không tìm thấy sự kiện", - "configureWebsiteFirst": "Chọn một trang web trước để tải sự kiện" + "placeholder": "Chọn sự kiện..." }, "topCount": { "label": "Số mục hiển thị", "description": "Số mục hàng đầu cần hiển thị (tối đa 500)" + }, + "events": { + "loading": "Đang tải sự kiện...", + "noEvents": "Không tìm thấy sự kiện", + "configureWebsiteFirst": "Trước tiên hãy chọn một website để tải sự kiện" } }, "event": { - "occurrences": "sự kiện", "label": "sự kiện" }, - "topPages": { - "direct": "Trực tiếp" - }, - "topReferrers": { - "direct": "Trực tiếp" - }, "events": { "selectPrompt": "Chọn sự kiện để vẽ biểu đồ" }, @@ -2475,6 +3652,9 @@ "noWebsite": "Chưa cấu hình trang web", "noData": "Không có dữ liệu", "internalServerError": "Không thể lấy dữ liệu Umami" + }, + "top": { + "direct": "Trực tiếp" } }, "common": { @@ -2502,7 +3682,8 @@ }, "integration": { "noData": "Không tìm thấy tích hợp", - "description": "Nhấp để tạo tích hợp mới" + "description": "Nhấp để tạo tích hợp mới", + "manage": "Quản lý các tích hợp" }, "app": { "noData": "Không tìm thấy ứng dụng", @@ -2513,7 +3694,61 @@ "noIntegration": "Chưa chọn tích hợp", "noData": "Không có dữ liệu tích hợp" }, - "option": {} + "integrationDisconnected": "Không có dữ liệu, tất cả tích hợp đều đã ngắt kết nối", + "updatedAt": "Đã cập nhật {date}", + "title": { + "label": "Tiêu đề" + }, + "openInNewTab": { + "label": "Mở trong tab mới" + }, + "showTitle": { + "label": "Hiển thị tiêu đề" + }, + "weatherLocation": { + "label": "Vị trí thời tiết" + }, + "layout": { + "label": "Bố cục", + "option": { + "horizontal": "Nằm ngang", + "vertical": "Thẳng đứng", + "grid": "Lưới" + } + }, + "select": { + "loading": "Đang tải...", + "loadError": "Không thể tải tùy chọn" + }, + "dateFormat": { + "label": "Định dạng ngày", + "description": "Cách hiển thị ngày" + }, + "visibleStorageVolumes": { + "label": "Ổ lưu trữ hiển thị", + "description": "Chỉ khả dụng khi mọi tích hợp được chọn là OpenMediaVault hoặc Synology. Để trống để hiển thị tất cả ổ lưu trữ được phát hiện.", + "placeholder": "Chọn ổ lưu trữ" + }, + "tableOptions": { + "columns": { + "label": "Các cột cần hiển thị" + }, + "columnOrder": { + "label": "Thứ tự cột" + }, + "columnWidths": { + "label": "Độ rộng cột" + }, + "enableRowSorting": { + "label": "Bật sắp xếp mục" + }, + "defaultSort": { + "label": "Cột dùng để sắp xếp mặc định" + }, + "invertSorting": { + "label": "Đảo ngược thứ tự sắp xếp" + } + } }, "video": { "name": "Luồng video", @@ -2572,6 +3807,7 @@ "transcoding": "Chuyển mã", "paused": "Tạm dừng", "remaining": "Còn {minutes} phút", + "seasonEpisode": "M{season} T{episode}", "metadata": { "title": "Thống kê chuyên sâu", "video": { @@ -2589,11 +3825,16 @@ "resolution": "Độ phân giải", "target": "Bộ giải mã đích" } - } + }, + "unknownUser": "Người dùng không xác định" + }, + "summary": { + "sessions": "{count, plural, other {# phiên}}", + "playing": "{count} đang phát", + "transcoding": "{count} đang chuyển mã" } }, "paperlessNgx": { - "name": "Paperless-ngx", "description": "Tổng quan về kho lưu trữ tài liệu Paperless-ngx của bạn", "documentsTotal": "Tổng số tài liệu", "documentsInbox": "Hộp thư đến", @@ -2638,7 +3879,6 @@ } }, "patchmon": { - "name": "PatchMon", "description": "Tổng quan về trạng thái bản vá máy chủ từ PatchMon", "title": "Thống kê PatchMon", "totalHosts": "Tổng số máy chủ", @@ -2705,36 +3945,30 @@ "description": "So sánh số lượng cần cập nhật dưới dạng giá trị tuyệt đối hoặc phần trăm tổng số máy chủ" }, "hostsNeedingUpdatesWarningAt": { - "label": "Ngưỡng cảnh báo cần cập nhật", - "description": "Chuyển sang màu vàng khi giá trị đạt ngưỡng này" + "label": "Ngưỡng cảnh báo cần cập nhật" }, "hostsNeedingUpdatesCriticalAt": { - "label": "Ngưỡng nghiêm trọng cần cập nhật", - "description": "Chuyển sang màu đỏ khi giá trị đạt ngưỡng này" + "label": "Ngưỡng nghiêm trọng cần cập nhật" }, "securityUpdatesThresholdMode": { "label": "Chế độ ngưỡng cập nhật bảo mật", "description": "So sánh số lượng cập nhật bảo mật dưới dạng giá trị tuyệt đối hoặc phần trăm tổng số máy chủ" }, "securityUpdatesWarningAt": { - "label": "Ngưỡng cảnh báo cập nhật bảo mật", - "description": "Chuyển sang màu vàng khi giá trị đạt ngưỡng này" + "label": "Ngưỡng cảnh báo cập nhật bảo mật" }, "securityUpdatesCriticalAt": { - "label": "Ngưỡng nghiêm trọng cập nhật bảo mật", - "description": "Chuyển sang màu đỏ khi giá trị đạt ngưỡng này" + "label": "Ngưỡng nghiêm trọng cập nhật bảo mật" }, "hostsWithSecurityUpdatesThresholdMode": { "label": "Chế độ ngưỡng máy chủ có cập nhật bảo mật", "description": "So sánh số lượng máy chủ dưới dạng giá trị tuyệt đối hoặc phần trăm tổng số máy chủ" }, "hostsWithSecurityUpdatesWarningAt": { - "label": "Ngưỡng cảnh báo máy chủ có cập nhật bảo mật", - "description": "Chuyển sang màu vàng khi giá trị đạt ngưỡng này" + "label": "Ngưỡng cảnh báo máy chủ có cập nhật bảo mật" }, "hostsWithSecurityUpdatesCriticalAt": { - "label": "Ngưỡng nghiêm trọng máy chủ có cập nhật bảo mật", - "description": "Chuyển sang màu đỏ khi giá trị đạt ngưỡng này" + "label": "Ngưỡng nghiêm trọng máy chủ có cập nhật bảo mật" }, "upToDateHostsThresholdMode": { "label": "Chế độ ngưỡng máy chủ đã cập nhật", @@ -2753,12 +3987,10 @@ "description": "So sánh số lượng gói lỗi thời dưới dạng giá trị tuyệt đối hoặc phần trăm tổng số máy chủ" }, "totalOutdatedPackagesWarningAt": { - "label": "Ngưỡng cảnh báo gói lỗi thời", - "description": "Chuyển sang màu vàng khi giá trị đạt ngưỡng này" + "label": "Ngưỡng cảnh báo gói lỗi thời" }, "totalOutdatedPackagesCriticalAt": { - "label": "Ngưỡng nghiêm trọng gói lỗi thời", - "description": "Chuyển sang màu đỏ khi giá trị đạt ngưỡng này" + "label": "Ngưỡng nghiêm trọng gói lỗi thời" }, "showOsDistribution": { "label": "Hiển thị phân phối hệ điều hành", @@ -2789,6 +4021,14 @@ "bars": "Thanh ngang", "donut": "Biểu đồ vòng khuyên" } + }, + "threshold": { + "warningAt": { + "description": "Nhập màu vàng khi giá trị đạt ngưỡng này" + }, + "criticalAt": { + "description": "Nhập màu đỏ khi giá trị đạt ngưỡng này" + } } }, "error": { @@ -2796,12 +4036,12 @@ } }, "bazarr": { - "name": "Bazarr", "description": "Tổng quan về phụ đề còn thiếu và tình trạng hệ thống từ phiên bản Bazarr của bạn", "episodes": "Tập còn thiếu", "movies": "Phim còn thiếu", "providers": "Sự cố nhà cung cấp", "status": "Sự cố tình trạng hệ thống", + "announcements": "Thông báo", "option": { "showMissingEpisodes": { "label": "Hiển thị tập còn thiếu", @@ -2848,7 +4088,8 @@ "users": "Người dùng", "photos": "Ảnh", "videos": "Video", - "storage": "Dung lượng đã sử dụng" + "storage": "Dung lượng đã sử dụng", + "albumLimit": "Album lớn nhất (hiển thị tối đa {count})" }, "immich-albumCarousel": { "name": "Album Immich", @@ -2872,24 +4113,21 @@ } }, "description": "Trình chiếu ảnh từ album Immich hoặc toàn bộ thư viện của bạn", - "noPhotos": "Không tìm thấy ảnh" + "noPhotos": "Không tìm thấy ảnh", + "albumPhoto": "Ảnh album", + "actions": { + "previousPhoto": "Ảnh trước", + "nextPhoto": "Ảnh tiếp theo", + "pauseSlideshow": "Tạm dừng trình chiếu", + "resumeSlideshow": "Tiếp tục trình chiếu", + "toggleSlideshow": "Tạm dừng hoặc tiếp tục trình chiếu", + "photo": "Ảnh {number}" + } }, "downloads": { "name": "Trình tải xuống", "description": "Cho phép bạn xem và quản lý các tải xuống từ cả Torrent và Usenet.", "option": { - "columns": { - "label": "Các cột cần hiển thị" - }, - "enableRowSorting": { - "label": "Bật sắp xếp mục" - }, - "defaultSort": { - "label": "Cột dùng để sắp xếp mặc định" - }, - "descendingDefaultSort": { - "label": "Đảo ngược sắp xếp" - }, "showCompletedUsenet": { "label": "Hiển thị các mục usenet đã hoàn thành" }, @@ -2914,12 +4152,6 @@ "limitPerIntegration": { "label": "Giới hạn mục trên mỗi tích hợp", "description": "Tùy chọn này sẽ giới hạn số mục hiển thị trên mỗi tích hợp, không phải trên toàn hệ thống" - }, - "columnOrder": { - "label": "Thứ tự cột" - }, - "columnWidths": { - "label": "Độ rộng cột" } }, "errors": { @@ -2950,7 +4182,7 @@ "detailsTitle": "Chỉ mục hiện tại trong client" }, "id": { - "columnTitle": "ID", + "columnTitle": "ID mục", "detailsTitle": "ID mục" }, "integration": { @@ -3080,6 +4312,10 @@ "mediaRequests-requestList": { "name": "Danh sách Yêu cầu Media", "description": "Xem danh sách các yêu cầu đa phương tiện từ Overseerr hoặc Jellyseerr của bạn", + "empty": { + "title": "Chưa có yêu cầu phương tiện", + "description": "Tìm kiếm phim hoặc chương trình để bắt đầu yêu cầu." + }, "option": { "linksTargetNewTab": { "label": "Mở liên kết trong tab mới" @@ -3113,12 +4349,16 @@ "failed": "Thất bại", "completed": "Đã hoàn thành" }, + "unknown": "Không rõ", "toBeDetermined": "Chưa xác định" }, "mediaRequests-requestStats": { "name": "Thống kê Yêu cầu Media", "description": "Thống kê về các yêu cầu đa phương tiện của bạn", - "option": {}, + "empty": { + "title": "Chưa có hoạt động yêu cầu", + "description": "Thống kê sẽ xuất hiện sau yêu cầu phương tiện đầu tiên." + }, "titles": { "stats": { "main": "Thống kê truyền thông", @@ -3128,8 +4368,7 @@ "declined": "Đã bị từ chối", "available": "Đã có sẵn", "tv": "Yêu cầu TV", - "movie": "Yêu cầu phim", - "total": "Tổng cộng" + "movie": "Yêu cầu phim" }, "users": { "main": "Người dùng hàng đầu", @@ -3155,7 +4394,6 @@ }, "currentIndex": "{start}–{end} trên tổng số {total}", "healthCheck": { - "title": "Kiểm tra tình trạng", "queued": "Đang chờ", "status": { "healthy": "Khỏe mạnh", @@ -3164,35 +4402,30 @@ }, "panel": { "statistics": { - "empty": "Trống", - "transcodes": "Lượt chuyển mã", - "transcodesCount": "Lượt chuyển mã", - "healthChecksCount": "Lần kiểm tra tình trạng", "filesCount": "Tệp", "savedSpace": "", - "healthChecks": "Lần kiểm tra tình trạng", "videoCodecs": "Bộ mã hóa", "videoContainers": "Container video", "videoResolutions": "Độ phân giải" }, "workers": { - "empty": "Trống", "table": { - "file": "Tệp", "eta": "Thời gian dự kiến", - "progress": "Tiến độ", - "transcode": "Chuyển mã", - "healthCheck": "Kiểm tra tình trạng" + "progress": "Tiến độ" } }, "queue": { - "empty": "Trống", "table": { - "file": "Tệp", - "size": "Kích cỡ", - "transcode": "Chuyển mã", - "healthCheck": "Kiểm tra tình trạng" + "size": "Kích cỡ" } + }, + "common": { + "empty": "Trống", + "file": "Tệp", + "healthCheck": "Kiểm tra tình trạng", + "transcode": "Chuyển mã", + "transcodes": "Các bản chuyển mã", + "healthChecks": "Các lần kiểm tra tình trạng" } } }, @@ -3216,7 +4449,8 @@ }, "type": { "movie": "Phim", - "episode": "Tập" + "episode": "Tập", + "book": "Sách" }, "empty": { "missing": "Không có mục còn thiếu", @@ -3247,6 +4481,13 @@ "showPosterImage": { "label": "Hiển thị ảnh áp phích" } + }, + "error": { + "allFeedsFailed": "Không thể tải nguồn cấp RSS. Hãy kiểm tra URL nguồn cấp và thử lại." + }, + "warning": { + "partial": "{count, plural, other {Không thể tải # nguồn cấp RSS}}", + "stale": "Không thể làm mới nguồn cấp RSS. Đang hiển thị các mục đã tải trước đó." } }, "releases": { @@ -3322,17 +4563,8 @@ "label": "Biểu thức chính quy" } }, - "edit": { - "label": "Sửa" - }, "editForm": { - "title": "Sửa kho lưu trữ", - "cancel": { - "label": "Hủy" - }, - "confirm": { - "label": "Xác nhận" - } + "title": "Sửa kho lưu trữ" }, "importForm": { "title": "Nhập từ Docker" @@ -3349,8 +4581,7 @@ "label": "Token nhà cung cấp", "token": "Mã thông báo", "configured": "Đã cấu hình token", - "notConfigured": "Chưa đặt token", - "save": "Lưu" + "notConfigured": "Chưa đặt token" } } }, @@ -3377,17 +4608,32 @@ "noProviderResponse": "Không có phản hồi từ nhà cung cấp", "unexpected": "Lỗi nhà cung cấp không mong muốn" } - } + }, + "expandDetails": "Hiển thị chi tiết của {name}", + "collapseDetails": "Ẩn chi tiết của {name}" }, "networkControllerSummary": { - "option": {}, - "card": { - "vpn": { - "countConnected": "Đã kết nối: {count}" + "advanced": { + "updated": "Đã cập nhật", + "metric": { + "latency": "Độ trễ", + "ping": "Ping", + "uptime": "Thời gian hoạt động", + "users": "Người dùng", + "guests": "Khách" } }, + "card": { + "vpn": { + "countConnected": "{count, plural, other {# kết nối}}", + "label": "VPN" + }, + "wan": "WAN", + "web": "Web", + "wifi": "Mạng Wi-Fi", + "lan": "LAN" + }, "error": { - "integrationsDisconnected": "Không có dữ liệu, tất cả tích hợp đều đã ngắt kết nối", "unknownContentOption": "Tùy chọn nội dung không xác định cho widget tóm tắt bộ điều khiển mạng: " }, "name": "Tóm tắt bộ điều khiển mạng", @@ -3424,7 +4670,6 @@ } }, "error": { - "integrationsDisconnected": "Không có dữ liệu, tất cả tích hợp đều đã ngắt kết nối", "unknownContentOption": "Tùy chọn nội dung không xác định cho widget trạng thái mạng: " }, "name": "Trạng thái mạng", @@ -3454,7 +4699,6 @@ "versiontitle": "Các phiên bản", "cputitle": "Mức sử dụng CPU", "memorytitle": "Mức sử dụng bộ nhớ", - "cpu": "CPU", "memory": "Bộ nhớ", "interfaces": { "name": "Tên", @@ -3462,6 +4706,16 @@ "recv": "Đã nhận", "title": "Giao diện mạng" } + }, + "empty": { + "noInterfaces": "Chưa có dữ liệu giao diện mạng" + }, + "versionUnknown": "Phiên bản không xác định", + "metricAccessible": "{metric}: {value}%, {status}", + "status": { + "normal": "Bình thường", + "warning": "Cảnh báo", + "critical": "Nghiêm trọng" } }, "notifications": { @@ -3471,8 +4725,21 @@ "option": { "hideLogos": { "label": "Ẩn logo" + }, + "messageFormat": { + "label": "Định dạng thông báo", + "option": { + "auto": "Tự động", + "plain": "Văn bản thuần túy", + "markdown": "Markdown", + "html": "HTML" + } } - } + }, + "openService": "Mở dịch vụ thông báo", + "deleteNotification": "Xóa thông báo khỏi Gotify", + "deleteFailed": "Không thể xóa thông báo", + "deleteFailedMessage": "Không thể xóa thông báo. Vui lòng thử lại." }, "speedtestTracker": { "name": "Speedtest Tracker", @@ -3514,7 +4781,6 @@ } }, "uptimeKuma": { - "name": "Uptime Kuma", "description": "Theo dõi thống kê thời gian hoạt động từ trang trạng thái Uptime Kuma của bạn", "option": { "showAverageUptime": { @@ -3551,10 +4817,14 @@ }, "error": { "internalServerError": "Không thể tải dữ liệu thời gian hoạt động" + }, + "status": { + "up": "Tốc độ tải lên", + "down": "Tốc độ tải", + "paused": "Tạm dừng" } }, "traefik": { - "name": "Traefik", "description": "Tổng quan về router, dịch vụ, middleware và entry point của Traefik", "option": { "showTcp": { @@ -3575,7 +4845,6 @@ }, "resource": { "routers": "Router", - "services": "Dịch vụ", "middlewares": "Middleware" }, "status": { @@ -3585,7 +4854,20 @@ }, "error": { "internalServerError": "Không thể tải dữ liệu Traefik" - } + }, + "resourceType": { + "router": "Bộ định tuyến", + "service": "Dịch vụ", + "middleware": "Phần mềm trung gian" + }, + "resourceStatus": { + "enabled": "Bật", + "disabled": "Tắt", + "warning": "Cảnh báo", + "error": "Lỗi", + "unknown": "Không rõ" + }, + "failedEndpoint": "Thất bại: {endpoint}" }, "audioStats": { "name": "Thống kê âm thanh", @@ -3651,9 +4933,7 @@ "label": "Biểu đồ hiển thị", "description": "Chọn các biểu đồ bạn muốn hiển thị.", "option": { - "cpu": "CPU", "memory": "Bộ nhớ", - "gpu": "GPU", "network": "Mạng" } }, @@ -3668,12 +4948,11 @@ } }, "card": { - "cpu": "CPU", "memory": "BỘ NHỚ", - "gpu": "GPU", "network": "MẠNG", "up": "LÊN", - "down": "XUỐNG" + "down": "XUỐNG", + "memoryTooltip": "{used} / {available} ({percent}%)" } }, "systemDisks": { @@ -3699,151 +4978,88 @@ }, "showBackgroundBar": { "label": "Hiển thị thanh mức sử dụng nền" - }, - "visibleStorageVolumes": { - "label": "Ổ lưu trữ hiển thị", - "description": "Chỉ khả dụng khi tất cả tích hợp đã chọn là Synology. Để trống để hiển thị tất cả ổ lưu trữ được phát hiện.", - "placeholder": "Chọn ổ lưu trữ" } }, "status": { - "unhealthy": "Không ổn định" + "unhealthy": "Không ổn định", + "smart": "SMART", + "free": "Còn trống {percentage}%" + } + }, + "customApi": { + "name": "Tiện ích tùy chỉnh", + "description": "Hiển thị định nghĩa JSX tùy chỉnh đã cấu hình.", + "customJsx": { + "noTemplate": "Chưa cấu hình mẫu JSX.", + "templateWarnings": "{count} cảnh báo mẫu:", + "requestIdRequired": "Điều khiển mạng này yêu cầu requestId có tên.", + "unsavedPreview": "Chạy kiểm tra yêu cầu ban đầu trong trình chỉnh sửa trước khi kiểm tra các yêu cầu có tên.", + "invalidParams": "Tham số yêu cầu không hợp lệ.", + "loading": "Đang tải yêu cầu...", + "loadRequest": "Tải yêu cầu", + "requestFailed": "Yêu cầu thất bại.", + "retry": "Thử lại yêu cầu", + "actionCompleted": "Tác vụ đã hoàn tất thành công.", + "actionSimulated": "Đã mô phỏng tác vụ; không gửi yêu cầu.", + "actionsDisabledEditMode": "Các tác vụ bị tắt khi bảng ở chế độ chỉnh sửa.", + "widgetItemUnavailable": "Mục tiện ích này không khả dụng.", + "toggle": "Bật/tắt", + "copied": "Đã sao chép", + "confirmDelete": "Xác nhận tác vụ có tính phá hủy này." + }, + "option": { + "definitionId": { + "label": "Tiện ích tùy chỉnh" + }, + "refreshInterval": { + "label": "Khoảng thời gian làm mới", + "description": "Tần suất tải lại dữ liệu từ API (tính bằng giây)" + } + }, + "noDefinition": "Chưa chọn định nghĩa", + "definitionNotFound": "Tiện ích tùy chỉnh không khả dụng", + "migrationRequired": "Tiện ích tùy chỉnh cũ này được giữ lại nhưng phải được chuyển sang Custom JSX v2 từ mục Quản lý tiện ích tùy chỉnh trước khi có thể chạy.", + "manageMigration": "Mở Quản lý tiện ích tùy chỉnh", + "contactAdmin": "Liên hệ quản trị viên.", + "configurationNeedsRepair": "Các tùy chọn của tiện ích này đã thay đổi. Hãy chỉnh sửa tiện ích để sửa cấu hình.", + "removeFromBoard": "Xóa khỏi bảng", + "editModePending": "Lưu bảng để tải tiện ích này.", + "picker": { + "group": "Tiện ích Custom JSX", + "empty": "Không tìm thấy tiện ích tùy chỉnh", + "preview": "Xem trước", + "sources": "{count, plural, other {# nguồn}}", + "requests": "{count, plural, other {# yêu cầu}}", + "migrationRequired": "Cần chuyển đổi", + "migrationDescription": "Tiện ích v1 này chưa thể chạy. Sao chép lời nhắc đã ẩn thông tin nhạy cảm vào một LLM, sau đó dán phản hồi JSON duy nhất vào Homarr.", + "manageMigration": "Mở Quản lý tiện ích tùy chỉnh", + "contactAdmin": "Liên hệ quản trị viên." + }, + "configuration": { + "needsAttention": "Cần chú ý đến cấu hình: {message}", + "advancedOptions": "Tùy chọn nâng cao", + "invalidJson": "JSON không hợp lệ" } }, "beszelSystemTable": { "name": "Beszel Systems (Bảng)", "description": "Dạng bảng của tất cả hệ thống được Beszel giám sát với các cột có thể sắp xếp và chỉ báo trạng thái", "option": { - "statusFilter": { - "label": "Bộ lọc trạng thái" - }, "sortBy": { "label": "Sắp xếp theo" }, "sortDirection": { "label": "Hướng sắp xếp" - }, - "showCpu": { - "label": "Hiển thị CPU" - }, - "showMemory": { - "label": "Hiển thị bộ nhớ" - }, - "showDisk": { - "label": "Hiển thị đĩa" - }, - "showGpu": { - "label": "Hiển thị GPU" - }, - "showLoadAvg": { - "label": "Hiển thị tải trung bình" - }, - "showNet": { - "label": "Hiển thị mạng" - }, - "showTemp": { - "label": "Hiển thị nhiệt độ" - }, - "showBattery": { - "label": "Hiển thị pin" - }, - "showServices": { - "label": "Hiển thị dịch vụ" - }, - "showUptime": { - "label": "Hiển thị thời gian hoạt động" - }, - "showAgent": { - "label": "Hiển thị phiên bản tác tử" - }, - "columnOrder": { - "label": "Thứ tự cột" - }, - "columnWidths": { - "label": "Độ rộng cột" } }, - "noRecords": "Không tìm thấy hệ thống", "error": { - "internalServerError": "Không thể kết nối với Beszel. Hãy kiểm tra cài đặt tích hợp.", "layoutSaveTitle": "Không thể lưu bố cục bảng", "layoutSaveMessage": "Không thể lưu thứ tự hoặc độ rộng cột. Vui lòng thử lại." - }, - "column": { - "system": "Hệ thống", - "cpu": "CPU", - "memory": "Bộ nhớ", - "disk": "Đĩa", - "gpu": "GPU", - "loadAvg": "Tải Trung Bình", - "net": "Mạng", - "temp": "Nhiệt độ", - "battery": "Pin", - "services": "Dịch vụ", - "uptime": "Thời gian hoạt động", - "agent": "Tác tử" } }, "beszelSystemGrid": { "name": "Beszel Systems (Lưới)", - "description": "Dạng lưới thẻ của tất cả hệ thống được Beszel giám sát với các số liệu thời gian thực", - "option": { - "statusFilter": { - "label": "Bộ lọc trạng thái" - }, - "showCpu": { - "label": "Hiển thị CPU" - }, - "showMemory": { - "label": "Hiển thị bộ nhớ" - }, - "showDisk": { - "label": "Hiển thị đĩa" - }, - "showGpu": { - "label": "Hiển thị GPU" - }, - "showLoadAvg": { - "label": "Hiển thị tải trung bình" - }, - "showNet": { - "label": "Hiển thị mạng" - }, - "showTemp": { - "label": "Hiển thị nhiệt độ" - }, - "showBattery": { - "label": "Hiển thị pin" - }, - "showServices": { - "label": "Hiển thị dịch vụ" - }, - "showUptime": { - "label": "Hiển thị thời gian hoạt động" - }, - "showAgent": { - "label": "Hiển thị phiên bản tác tử" - } - }, - "error": { - "internalServerError": "Không thể kết nối với Beszel. Hãy kiểm tra cài đặt tích hợp." - }, - "empty": { - "noSystems": "Không tìm thấy hệ thống" - }, - "metric": { - "cpu": "CPU", - "memory": "Bộ nhớ", - "disk": "Đĩa", - "gpu": "GPU", - "loadAvg": "Tải Trung Bình", - "net": "Mạng", - "temp": "Nhiệt độ", - "battery": "Pin", - "services": "Dịch vụ", - "uptime": "Thời gian hoạt động", - "agent": "Tác tử" - } + "description": "Dạng lưới thẻ của tất cả hệ thống được Beszel giám sát với các số liệu thời gian thực" }, "beszelAlerts": { "name": "Cảnh báo Beszel", @@ -3857,11 +5073,12 @@ } }, "empty": "Không có cảnh báo nào được cấu hình", - "error": { - "internalServerError": "Không thể kết nối với Beszel. Hãy kiểm tra cài đặt tích hợp." - }, "history": "Lịch sử", "resolved": "Đã giải quyết", + "alertDescription": { + "statusDuration": "Ngừng hoạt động trong {minutes} phút", + "threshold": "Vượt quá {value} trong {minutes} phút" + }, "status": { "triggered": "Đã kích hoạt", "ok": "OK" @@ -3908,16 +5125,16 @@ "noSystems": "Không tìm thấy hệ thống" }, "error": { - "internalServerError": "Không thể kết nối với Beszel. Hãy kiểm tra cài đặt tích hợp.", "liveConnectionFailed": "Kết nối trực tiếp thất bại. Phiên bản Beszel của bạn có thể không hỗ trợ truyền dữ liệu theo thời gian thực.", "switchToHistorical": "Chuyển sang chế độ xem lịch sử", - "systemNotFound": "Không tìm thấy hệ thống đã chọn. Hãy chọn hệ thống khác." + "systemNotFound": "Không tìm thấy hệ thống đã chọn. Hãy chọn hệ thống khác.", + "selectionSaveTitle": "Không thể lưu lựa chọn", + "selectionSaveMessage": "Không thể lưu lựa chọn hệ thống hoặc khoảng thời gian. Vui lòng thử lại." }, "chart": { "cpu": { "title": "Mức sử dụng CPU", - "subtitle": "Mức sử dụng CPU trung bình trên toàn hệ thống", - "series": "CPU" + "subtitle": "Mức sử dụng CPU trung bình trên toàn hệ thống" }, "memory": { "title": "Mức sử dụng bộ nhớ", @@ -3959,39 +5176,550 @@ "title": "I/O mạng Docker", "subtitle": "Lưu lượng mạng của các container Docker" } + }, + "period": { + "live": "Trực tiếp", + "oneHour": "1 giờ", + "twelveHours": "12 giờ", + "oneDay": "24 giờ", + "oneWeek": "1 tuần", + "thirtyDays": "30 ngày" } }, - "wud": { - "name": "What's Up Docker", - "description": "Hiển thị số container được theo dõi có bản cập nhật.", - "title": "What's Up Docker", - "monitored": "Đã theo dõi", - "updatesAvailable": "{count, plural, other {# bản cập nhật có sẵn}}", - "updateAvailable": "Có bản cập nhật", - "openReleaseNotes": "Mở ghi chú phát hành", + "assistant": { + "name": "Trợ lý", + "description": "Có một cuộc trò chuyện hoàn chỉnh với trợ lý ngay trên bảng của bạn.", + "unavailable": { + "title": "Trợ lý không khả dụng", + "description": "Đăng nhập và yêu cầu quản trị viên cấu hình Trợ lý từ bảng quản lý." + }, + "compact": { + "title": "Trợ lý", + "description": "Thay đổi kích thước tiện ích này để trò chuyện tại đây hoặc mở cuộc trò chuyện đầy đủ.", + "open": "Mở trợ lý", + "openTitle": "Trợ lý đang mở trong bảng bên", + "openDescription": "Cuộc trò chuyện vẫn nằm trong một giao diện đang hoạt động.", + "returnToWidget": "Đưa cuộc trò chuyện trở lại tiện ích này", + "otherWidgetTitle": "Trợ lý đang hoạt động trong tiện ích khác", + "otherWidgetDescription": "Mỗi lần chỉ có một giao diện trò chuyện hoạt động.", + "useHere": "Sử dụng trợ lý trong tiện ích này" + } + }, + "beszel": { + "error": { + "internalServerError": "Không thể kết nối với Beszel. Hãy kiểm tra cài đặt tích hợp." + }, + "empty": { + "noSystems": "Không tìm thấy hệ thống" + }, + "options": { + "statusFilter": { + "label": "Bộ lọc trạng thái" + }, + "showCpu": { + "label": "Hiển thị CPU" + }, + "showMemory": { + "label": "Hiển thị bộ nhớ" + }, + "showDisk": { + "label": "Hiển thị ổ đĩa" + }, + "showGpu": { + "label": "Hiển thị GPU" + }, + "showLoadAvg": { + "label": "Hiển thị tải trung bình" + }, + "showNet": { + "label": "Hiển thị mạng" + }, + "showTemp": { + "label": "Hiển thị nhiệt độ" + }, + "showBattery": { + "label": "Hiển thị pin" + }, + "showServices": { + "label": "Hiển thị dịch vụ" + }, + "showUptime": { + "label": "Hiển thị thời gian hoạt động" + }, + "showAgent": { + "label": "Hiển thị phiên bản agent" + } + }, + "metric": { + "system": "Hệ thống", + "source": "Tích hợp", + "hostname": "Tên máy chủ", + "cpuModel": "Mẫu CPU", + "cores": "Lõi", + "memoryTotal": "Tổng bộ nhớ", + "memory": "Bộ nhớ", + "disk": "Ổ đĩa", + "loadAvg": "Tải trung bình", + "net": "Mạng", + "temp": "Nhiệt độ", + "battery": "Pin", + "uptime": "Thời gian hoạt động", + "agent": "Tác nhân" + } + }, + "llamacpp": { + "name": "llama.cpp", + "description": "Hiển thị tình trạng, mô hình đã tải và tốc độ sinh nội dung của máy chủ llama.cpp cục bộ.", + "title": "llama.cpp", + "status": { + "unhealthy": "Không lành mạnh ({status})" + }, + "idle": "Nhàn rỗi", + "speedTooltip": { + "current": "Tốc độ sinh hiện tại", + "average": "Tốc độ sinh trung bình kể từ khi khởi động", + "request": "Tốc độ trung bình kể từ khi yêu cầu này bắt đầu" + }, + "busy": "{count, plural, other {# yêu cầu đang chạy}}", + "modelInfo": { + "context": "Ngữ cảnh", + "size": "Kích thước tệp", + "parameters": "Tham số", + "model": "Mô hình", + "quantization": "Lượng tử hóa" + }, + "stats": { + "tokensProcessed": "Số token đã xử lý", + "contextUsage": "Mức sử dụng ngữ cảnh / KV", + "cacheHitRate": "Tỷ lệ truy cập bộ nhớ đệm lời nhắc", + "tokensGenerated": "Số token đã sinh" + }, + "error": { + "unreachable": "llama-server không thể kết nối được" + }, + "unit": { + "speed": "{value} t/s", + "parameters": "{value}B", + "none": "—", + "speedShort": "t/s" + }, "option": { "showTitle": { "label": "Hiển thị tiêu đề" }, - "showRing": { - "label": "Hiển thị vòng cập nhật" + "showModelInfo": { + "label": "Hiển thị thông tin mô hình" }, - "layout": { - "label": "Bố cục", + "showContextUsage": { + "label": "Hiển thị mức sử dụng ngữ cảnh" + }, + "showCacheHitRate": { + "label": "Hiển thị tỷ lệ truy cập bộ nhớ đệm" + }, + "showSpeedStats": { + "label": "Hiển thị số liệu tốc độ" + }, + "showRequests": { + "label": "Hiển thị tải yêu cầu" + }, + "showTokenStats": { + "label": "Hiển thị tổng số token" + }, + "showSpeculative": { + "label": "Hiển thị giải mã suy đoán" + } + }, + "advanced": { + "promptSpeed": "Tốc độ lời nhắc", + "avgSpeed": "Sinh trung bình", + "requests": "Yêu cầu", + "deferred": "Đã hoãn", + "slots": "{processing}/{total} vùng đang bận", + "speculative": "Giải mã suy đoán", + "avgPrompt": "Lời nhắc trung bình", + "specDrafts": "Bản nháp suy đoán", + "specAccepted": "Token suy đoán được chấp nhận", + "specDraftTokens": "Token bản nháp suy đoán" + } + }, + "stats": { + "name": "Thống kê", + "description": "Kết hợp số liệu thống kê từ các tích hợp trong một tiện ích có thể cấu hình.", + "configure": "Cấu hình số liệu", + "refresh": "Làm mới số liệu thống kê", + "empty": "Mở cài đặt tiện ích, chọn các tích hợp, sau đó thêm số liệu.", + "editorHelp": "Thêm số liệu từ các tích hợp được chọn cho tiện ích này. Thay đổi được lưu cùng bảng điều khiển.", + "source": "Tích hợp", + "metric": "Số liệu", + "noMetrics": "Không có số liệu thống kê cho tích hợp này", + "add": "Thêm số liệu", + "label": "Nhãn tùy chỉnh", + "hidden": "Đã ẩn", + "compact": "Số dạng thu gọn", + "moveUp": "Đi lên", + "moveDown": "Đi xuống", + "remove": "Xóa số liệu", + "loading": "Đang tải…", + "unavailable": "Không khả dụng", + "refreshFailed": "Làm mới thất bại — đang hiển thị dữ liệu đã lưu", + "stale": "Dữ liệu đã lưu — làm mới để cập nhật", + "table": { + "value": "Giá trị", + "status": "Trạng thái" + }, + "option": { + "table": { + "label": "Chế độ xem bảng" + }, + "rows": { + "label": "Các hàng thu gọn" + }, + "showIcon": { + "label": "Hiển thị biểu tượng nguồn" + }, + "spacing": { + "label": "Khoảng cách", "option": { - "horizontal": { - "label": "Nằm ngang" + "xs": { + "label": "Thu gọn" }, - "vertical": { - "label": "Thẳng đứng" + "sm": { + "label": "Thoải mái" + }, + "md": { + "label": "Rộng rãi" } } }, - "showUpdateList": { - "label": "Hiển thị danh sách cập nhật container", - "description": "Liệt kê từng container được giám sát có bản cập nhật image sẵn có" + "entries": { + "label": "Số liệu" + }, + "plain": { + "label": "Xóa nền thẻ" } - } + }, + "fetchFailed": "Không thể truy xuất số liệu thống kê", + "viewOptions": "Tùy chỉnh chế độ xem này", + "moreMetrics": "{count} chỉ số khác trong chế độ xem nâng cao", + "localHelp": "Bố cục, định dạng và khả năng hiển thị chỉ áp dụng cho chế độ xem này. Cài đặt bảng dùng chung không thay đổi.", + "plain": "Xóa nền thẻ", + "resetView": "Đặt lại chế độ xem", + "allHidden": "Tất cả số liệu đều bị ẩn trong chế độ xem này. Sử dụng Tùy chỉnh chế độ xem này để khôi phục." + }, + "wazuh": { + "target": { + "api": "API máy chủ Wazuh", + "indexer": "Trình lập chỉ mục Wazuh", + "wazuh": "Wazuh" + }, + "severity": { + "low": "Thấp", + "medium": "Trung bình", + "high": "Cao", + "critical": "Nghiêm trọng" + }, + "error": { + "unauthorized": { + "title": "{target} đã từ chối thông tin xác thực", + "description": "Kiểm tra tên người dùng và mật khẩu đã lưu trong tích hợp Wazuh. API máy chủ (cổng 55000) và trình lập chỉ mục (cổng 9200) sử dụng người dùng riêng biệt." + }, + "certificate": { + "title": "Chứng chỉ của {target} không được tin cậy", + "description": "Theo mặc định, Wazuh sử dụng chứng chỉ tự ký. Chạy \"Kiểm tra kết nối\" trên tích hợp và tin cậy chứng chỉ, hoặc thêm CA của bạn trong Cài đặt → Chứng chỉ." + }, + "unreachable": { + "title": "Không thể kết nối đến {target}", + "description": "Máy chủ đã từ chối hoặc ngắt kết nối. Hãy kiểm tra URL, cổng và tường lửa. Trình lập chỉ mục chỉ lắng nghe trên localhost trong bản cài đặt tất cả-trong-một mặc định." + }, + "timeout": { + "title": "{target} đã hết thời gian chờ", + "description": "Không có phản hồi trong 15 giây. Dịch vụ có thể đang quá tải hoặc địa chỉ có thể không đúng." + }, + "status": { + "title": "{target} trả về lỗi", + "description": "Yêu cầu thất bại với mã trạng thái HTTP {status}." + }, + "invalidResponse": { + "title": "Phản hồi không mong đợi từ {target}", + "description": "Hãy kiểm tra URL trỏ đến API máy chủ Wazuh hoặc trình lập chỉ mục, không phải bảng điều khiển." + }, + "indexerRequired": { + "title": "Cần thông tin xác thực trình lập chỉ mục Wazuh", + "description": "Cảnh báo, lỗ hổng và sự kiện toàn vẹn tệp được đọc từ trình lập chỉ mục Wazuh. Thêm URL, tên người dùng và mật khẩu trình lập chỉ mục vào tích hợp." + }, + "unknown": { + "title": "Không thể tải dữ liệu từ {target}", + "description": "Kiểm tra nhật ký Homarr để biết chi tiết." + } + }, + "range": { + "1h": "1 giờ", + "24h": "24 giờ", + "7d": "7 ngày", + "30d": "30 ngày" + }, + "levelTooltip": "Cấp độ quy tắc {level} ({severity})" + }, + "wazuhAgents": { + "name": "Agent Wazuh", + "description": "Danh sách agent Wazuh có thể sắp xếp, cùng trạng thái, hệ điều hành, phiên bản và lần duy trì kết nối gần nhất", + "option": { + "statusFilter": { + "label": "Hiển thị agent" + }, + "sortBy": { + "label": "Sắp xếp theo" + }, + "showVersion": { + "label": "Hiển thị cột phiên bản Wazuh" + }, + "showGroups": { + "label": "Hiển thị cột nhóm" + } + }, + "title": "Tác nhân", + "total": "{count} tác nhân", + "status": { + "active": "Đang hoạt động", + "disconnected": "Đã ngắt kết nối", + "neverConnected": "Chưa từng kết nối", + "pending": "Đang chờ" + }, + "statusLabel": { + "active": "Đang hoạt động", + "disconnected": "Đã ngắt kết nối", + "never_connected": "Chưa từng kết nối", + "pending": "Đang chờ", + "unknown": "Không rõ" + }, + "live": "Trực tiếp", + "snapshot": "Ảnh chụp {age} đã cũ", + "snapshotHint": "Đọc từ ảnh chụp tác nhân của bảng điều khiển Wazuh (wazuh-monitoring) được tạo lúc {time}. Thêm thông tin xác thực API máy chủ để nhận dữ liệu trực tiếp.", + "staleSnapshot": "Ảnh chụp tác nhân từ {time} đã lỗi thời. Kiểm tra xem tác vụ giám sát bảng điều khiển Wazuh có đang chạy không hoặc thêm thông tin xác thực API máy chủ.", + "noDisconnected": "Tất cả tác nhân đều đã kết nối", + "empty": "Không có tác nhân nào khớp với bộ lọc này", + "column": { + "status": "Trạng thái", + "name": "Tên công việc", + "ip": "Địa chỉ IP", + "os": "Hệ điều hành", + "version": "Phiên bản", + "lastKeepAlive": "Duy trì kết nối", + "groups": "Các nhóm" + }, + "outdated": "Cũ hơn phiên bản tác nhân mới nhất ({version})" + }, + "wazuhAlerts": { + "name": "Nguồn cấp cảnh báo Wazuh", + "description": "Các cảnh báo Wazuh gần đây cùng mức độ, kỹ thuật MITRE ATT&CK, tác nhân và IP nguồn", + "option": { + "minLevel": { + "label": "Mức quy tắc tối thiểu", + "description": "Mức Wazuh: 0–6 thấp, 7–11 trung bình, 12–14 cao, từ 15 nghiêm trọng" + }, + "hours": { + "label": "Khoảng thời gian (giờ)" + }, + "limit": { + "label": "Số lượng cảnh báo" + }, + "showMitre": { + "label": "Hiển thị kỹ thuật MITRE ATT&CK" + }, + "showAgent": { + "label": "Hiển thị tác nhân" + }, + "showSourceIp": { + "label": "Hiển thị IP nguồn" + }, + "showRuleId": { + "label": "Hiển thị ID quy tắc" + } + }, + "title": "Cảnh báo · cấp độ {level}+ · {hours} giờ", + "empty": "Không có cảnh báo ở mức này. Mọi thứ đều yên ắng.", + "rule": "Quy tắc {id}", + "openInDashboard": "Mở cảnh báo này trong bảng điều khiển Wazuh" + }, + "wazuhSummary": { + "name": "Mức độ nghiêm trọng của cảnh báo Wazuh", + "description": "Phân tích mức độ nghiêm trọng của cảnh báo cùng xu hướng so với kỳ trước", + "option": { + "range": { + "label": "Khoảng thời gian" + }, + "showTrend": { + "label": "Hiển thị xu hướng so với kỳ trước" + }, + "showFooter": { + "label": "Hiển thị chân trang" + } + }, + "title": "Mức độ nghiêm trọng của cảnh báo · {range}", + "alerts": "cảnh báo", + "none": "Không có cảnh báo", + "trend": { + "new": "mới", + "tooltip": "Kỳ trước: {previous}" + }, + "previous": "{range} trước: {count}", + "maxLevel": "Cấp độ tối đa {level}", + "health": "Tình trạng Indexer: {status}", + "manager": "Trình quản lý {version}" + }, + "wazuhTimeline": { + "name": "Dòng thời gian cảnh báo Wazuh", + "description": "Biểu đồ xếp chồng các cảnh báo Wazuh theo thời gian và mức độ nghiêm trọng", + "option": { + "range": { + "label": "Khoảng thời gian" + }, + "interval": { + "label": "Khoảng thời gian" + }, + "chartType": { + "label": "Loại biểu đồ" + }, + "yScale": { + "label": "Tỷ lệ trục Y", + "description": "Căn bậc hai giúp các cảnh báo cao và nghiêm trọng vẫn hiển thị cạnh hàng nghìn cảnh báo thấp" + }, + "minLevel": { + "label": "Mức quy tắc tối thiểu" + }, + "showLegend": { + "label": "Hiển thị chú giải kèm tổng số" + } + }, + "title": "Dòng thời gian cảnh báo · {range}", + "total": "{count} cảnh báo", + "interval": "mỗi {interval}" + }, + "wazuhTopList": { + "name": "Danh sách Wazuh hàng đầu", + "description": "Các quy tắc, tác nhân, IP nguồn hoặc chiến thuật và kỹ thuật MITRE ATT&CK hàng đầu theo số lượng cảnh báo", + "option": { + "kind": { + "label": "Xếp hạng" + }, + "range": { + "label": "Khoảng thời gian" + }, + "limit": { + "label": "Số mục" + }, + "minLevel": { + "label": "Mức quy tắc tối thiểu" + }, + "showBars": { + "label": "Hiển thị thanh" + } + }, + "title": { + "rules": "Quy tắc hàng đầu · {range}", + "agents": "Tác nhân hàng đầu · {range}", + "sourceIps": "IP nguồn hàng đầu · {range}", + "mitreTactics": "Chiến thuật MITRE · {range}", + "mitreTechniques": "Kỹ thuật MITRE · {range}" + }, + "empty": { + "rules": "Không có cảnh báo trong khoảng thời gian này", + "agents": "Không có cảnh báo trong khoảng thời gian này", + "sourceIps": "Không có cảnh báo nào có IP nguồn trong khoảng thời gian này", + "mitreTactics": "Không có cảnh báo nào được ánh xạ tới MITRE ATT&CK trong khoảng thời gian này", + "mitreTechniques": "Không có cảnh báo nào được ánh xạ tới MITRE ATT&CK trong khoảng thời gian này" + }, + "totalTooltip": "{count} cảnh báo phù hợp", + "private": "Mạng LAN", + "public": "Công khai", + "agents": "Được ghi nhận trên {count} tác nhân", + "others": "Còn {count} cảnh báo trong các mục khác" + }, + "wazuhVulnerabilities": { + "name": "Lỗ hổng Wazuh", + "description": "Số lượng lỗ hổng, CVE hàng đầu và các tác nhân dễ bị tấn công nhất", + "option": { + "cveOrder": { + "label": "Xếp hạng CVE theo" + }, + "minSeverity": { + "label": "Mức độ nghiêm trọng của CVE" + }, + "cveLimit": { + "label": "Số CVE" + }, + "agentLimit": { + "label": "Số tác nhân" + }, + "showAgents": { + "label": "Hiển thị các tác nhân dễ bị tấn công nhất" + } + }, + "title": "Lỗ hổng", + "topCves": "CVE hàng đầu", + "score": "Điểm số", + "agentsShort": "Tác nhân", + "topAgents": "Các tác nhân dễ bị tấn công nhất", + "criticalHigh": "Nghiêm trọng / Cao", + "totalTooltip": "{count} phát hiện trên {agents} tác nhân", + "affected": "{count} tác nhân", + "empty": "Không phát hiện lỗ hổng", + "distribution": "Phân bổ mức độ nghiêm trọng. Không hiển thị {unscored} phát hiện không có điểm số.", + "worst": "Tệ nhất: {id} ({score}) trên {agents} tác nhân" + }, + "wazuhFim": { + "name": "Tính toàn vẹn tệp Wazuh", + "description": "Các sự kiện giám sát tính toàn vẹn tệp gần đây (syscheck)", + "option": { + "range": { + "label": "Khoảng thời gian" + }, + "event": { + "label": "Sự kiện" + }, + "limit": { + "label": "Số sự kiện" + }, + "includeRegistry": { + "label": "Bao gồm sự kiện sổ đăng ký Windows" + } + }, + "title": "Tính toàn vẹn tệp · {range}", + "event": { + "added": "Ngày thêm", + "modified": "Đã sửa đổi", + "deleted": "Đã xóa", + "unknown": "Đã thay đổi" + }, + "empty": "Không có sự kiện toàn vẹn tệp trong khoảng thời gian này", + "user": "bởi {user}", + "registry": "Sổ đăng ký" + }, + "wazuhAuthFailures": { + "name": "Lỗi xác thực Wazuh", + "description": "Đăng nhập thất bại và cảnh báo brute-force theo tác nhân, kèm biểu đồ theo giờ", + "option": { + "hours": { + "label": "Khoảng thời gian (giờ)" + }, + "limit": { + "label": "Số tác nhân" + }, + "showSourceIps": { + "label": "Hiển thị IP nguồn hàng đầu" + } + }, + "title": "Lỗi xác thực · {hours} giờ", + "seriesTooltip": "Tất cả tác nhân trong {hours} giờ qua", + "peak": "Đỉnh {count}/khoảng", + "empty": "Không có lần đăng nhập thất bại trong khoảng thời gian này", + "failed": "Đăng nhập thất bại", + "failedHint": "Các lỗi xác thực đơn lẻ (sshd, PAM, đăng nhập Windows, người dùng không hợp lệ)", + "bruteForce": "Brute-force", + "bruteForceHint": "Các quy tắc brute-force tương quan (nhiều lần thất bại trong thời gian ngắn, MITRE T1110)", + "sourceIps": "IP nguồn", + "ipTooltip": "{ip}: {count} lần thất bại", + "bruteForceCount": "{count} lần brute-force" } }, "widgetPreview": { @@ -4004,7 +5732,76 @@ } }, "board": { + "emptyState": { + "title": "Xây dựng chế độ xem đầu tiên", + "description": "Thêm tiện ích hoặc ứng dụng, hoặc kết nối dịch vụ và sử dụng dữ liệu của dịch vụ trên bảng này.", + "addWidget": "Thêm tiện ích", + "addApp": "Thêm ứng dụng", + "connectService": "Kết nối dịch vụ" + }, + "setupChecklist": { + "title": "Làm cho bảng này hữu ích", + "description": "Tiếp tục từ nơi bạn dừng lại. Tiến trình dựa trên nội dung đã có trên bảng này.", + "collapse": "Thu gọn danh sách thiết lập", + "dismiss": "", + "resume": "Tiếp tục thiết lập ({completed}/{total})", + "progress": "Tiến trình thiết lập bảng", + "step": { + "content": { + "label": "Thêm nội dung hữu ích", + "description": "Chọn và cấu hình một tiện ích trước khi đặt tiện ích đó." + }, + "app": { + "label": "Ghim ứng dụng", + "description": "Đặt một dịch vụ hoặc công cụ trong tầm một lần nhấp từ bảng này." + }, + "service": { + "label": "Kết nối dịch vụ", + "description": "Mở khóa dữ liệu trực tiếp và các thao tác cho những tiện ích tương thích.", + "permissionDescription": "Quản trị viên có thể kết nối dịch vụ để mở khóa dữ liệu trực tiếp.", + "action": "Kết nối" + } + } + }, "action": { + "addContent": "Thêm nội dung bảng", + "settings": "Cài đặt bảng", + "switch": "Chuyển bảng", + "switcher": { + "title": "Chuyển bảng", + "search": { + "empty": "Không có bảng nào khớp với \"{search}\"." + }, + "results": "Các bảng khả dụng", + "preview": "Bản xem trước của {name} với {count} mục", + "currentHidden": "Bảng hiện tại: {name}", + "keyboard": { + "navigate": "Điều hướng", + "open": "Mở", + "instructions": "Nhập để lọc bảng. Dùng phím mũi tên để di chuyển qua các kết quả và Enter để mở bảng." + }, + "empty": { + "title": "Không có bảng nào khác", + "description": "Bạn không thể truy cập bảng nào khác." + }, + "error": "Không thể tải các bảng." + }, + "create": { + "availability": { + "checking": "Đang kiểm tra tính khả dụng…", + "available": "{name} khả dụng" + }, + "notification": { + "success": { + "title": "Đã tạo bảng", + "message": "Đã tạo bảng {name}" + }, + "error": { + "title": "Không thể tạo bảng", + "message": "Không thể tạo bảng {name}" + } + } + }, "duplicate": { "title": "Nhân bản bảng", "message": "Thao tác này sẽ nhân bản bảng {name} cùng toàn bộ nội dung. Nếu widget tham chiếu đến các tích hợp mà bạn không được phép sử dụng, chúng sẽ bị xóa.", @@ -4020,14 +5817,19 @@ } }, "edit": { + "enter": "Chỉnh sửa bảng", + "save": "Lưu bảng", + "exit": "Thoát chế độ chỉnh sửa", "notification": { "success": { - "title": "Thay đổi đã được áp dụng thành công", "message": "Bảng đã được lưu thành công" }, "error": { - "title": "Không thể áp dụng thay đổi", "message": "Không thể lưu bảng" + }, + "loadError": { + "title": "Không thể bắt đầu chỉnh sửa", + "message": "Không thể tải trình chỉnh sửa bảng. Bảng điều khiển của bạn vẫn khả dụng ở chế độ xem." } }, "confirmLeave": { @@ -4035,62 +5837,6 @@ "message": "Bạn có thay đổi chưa lưu, bạn có chắc chắn muốn rời đi không?" } }, - "oldImport": { - "label": "Nhập từ Homarr trước 1.0.0", - "notification": { - "success": { - "title": "Nhập thành công", - "message": "Bảng đã được nhập thành công" - }, - "error": { - "title": "Nhập không thành công", - "message": "Không thể nhập bảng, kiểm tra nhật ký để biết chi tiết" - } - }, - "form": { - "file": { - "label": "Chọn tệp JSON", - "invalidError": "Tệp cấu hình không hợp lệ" - }, - "apps": { - "label": "Ứng dụng", - "avoidDuplicates": { - "label": "Tránh trùng lặp", - "description": "Bỏ qua ứng dụng nếu đã có ứng dụng cùng href" - }, - "onlyImportApps": { - "label": "Chỉ nhập ứng dụng", - "description": "Chỉ thêm ứng dụng, cần tạo lại bảng thủ công" - } - }, - "name": { - "label": "Tên bảng" - }, - "screenSize": { - "label": "Kích thước màn hình", - "description": "Trong các phiên bản trước 1.0, có ba chế độ khác nhau, vì vậy bạn có thể chọn số cột cho từng kích thước màn hình.", - "option": { - "sm": "Bé nhỏ", - "md": "Trung bình", - "lg": "Lớn" - } - }, - "sidebarBehavior": { - "label": "Hành vi thanh bên", - "description": "Thanh bên đã bị loại bỏ trong 1.0, bạn có thể chọn điều gì xảy ra với các mục bên trong.", - "option": { - "lastSection": { - "label": "Phần cuối cùng", - "description": "Thanh bên sẽ hiển thị bên dưới phần cuối cùng" - }, - "removeItems": { - "label": "Xóa mục", - "description": "Các mục trong thanh bên sẽ bị xóa" - } - } - } - } - }, "quickCreateApp": { "modal": { "title": "Tạo ứng dụng nhanh", @@ -4098,6 +5844,12 @@ } } }, + "landmark": { + "canvas": "Khung bảng điều khiển", + "leftRail": "Thanh bên trái của bảng điều khiển", + "rightRail": "Thanh bên phải của bảng điều khiển", + "items": "Các mục trên bảng điều khiển" + }, "field": { "pageTitle": { "label": "Tiêu đề trang" @@ -4167,7 +5919,8 @@ } }, "primaryColor": { - "label": "Màu chính" + "label": "Màu chính", + "locked": "Quản trị viên giữ màu thương hiệu của phiên bản trên mọi bảng." }, "secondaryColor": { "label": "Màu thứ cấp" @@ -4207,9 +5960,6 @@ "xl": "Rất lớn" } }, - "name": { - "label": "Tên" - }, "isPublic": { "label": "Công khai", "description": "Bảng công khai có thể được mọi người truy cập, ngay cả khi không có tài khoản." @@ -4229,9 +5979,44 @@ "title": "Bố cục", "responsive": { "title": "Bố cục đáp ứng", + "description": "Mỗi bố cục giữ vị trí và kích thước tiện ích riêng. Mobile và Base luôn khả dụng; thêm bố cục tùy chỉnh tại mọi điểm ngắt bổ sung.", "action": { "add": "Thêm bố cục" } + }, + "role": { + "mobile": "Di động", + "base": "Cơ sở", + "custom": "Tùy chỉnh" + }, + "custom": { + "defaultName": "Bố cục tùy chỉnh" + }, + "mobile": { + "breakpointDescription": "Mobile luôn được sử dụng từ 0px đến điểm ngắt bố cục tiếp theo." + }, + "preview": { + "columns": "cột", + "empty": "Bố cục này trống", + "dynamicSection": "Phần động", + "editorWidthLabel": "{layoutName} · {width}px" + }, + "reset": { + "action": "Đặt lại từ Base", + "confirm": { + "title": "Đặt lại {layoutName}?", + "message": "Thao tác này thay thế mọi vị trí và kích thước đã lưu trong bố cục bằng bố cục mới được tạo từ Base. Không thể hoàn tác." + } + }, + "edit": { + "action": "Chỉnh sửa bố cục", + "saveAndEdit": "Lưu và chỉnh sửa", + "save": "Lưu bố cục", + "cancel": { + "action": "Hủy chỉnh sửa bố cục", + "title": "Hủy các thay đổi bố cục?", + "message": "Các thay đổi chưa lưu đối với bố cục này sẽ bị hủy." + } } }, "background": { @@ -4268,10 +6053,7 @@ "rename": { "label": "Đổi tên bảng", "description": "Việc đổi tên sẽ làm hỏng mọi liên kết đến bảng này.", - "button": "Đổi tên", - "modal": { - "title": "Đổi tên bảng" - } + "button": "Đổi tên" }, "visibility": { "label": "Thay đổi chế độ hiển thị bảng", @@ -4295,9 +6077,7 @@ } }, "delete": { - "label": "Xóa bảng này", "description": "Sau khi xóa bảng, bạn sẽ không thể hoàn tác. Hãy chắc chắn trước khi tiếp tục.", - "button": "Xóa bảng này", "confirm": { "title": "Xóa bảng", "description": "Bạn có chắc muốn xóa bảng này không? Bảng và toàn bộ nội dung sẽ bị xóa vĩnh viễn." @@ -4342,28 +6122,41 @@ }, "layout": { "field": { - "name": { - "label": "Tên" - }, "columnCount": { "label": "Số cột" }, "breakpoint": { "label": "Điểm ngắt", "description": "Bố cục sẽ được sử dụng trên mọi màn hình lớn hơn điểm ngắt này cho đến điểm ngắt lớn hơn tiếp theo." + }, + "gutters": { + "label": "Thanh bên cố định", + "description": "Dành tối đa ba cột bảng điều khiển ở mỗi bên. Khung còn lại sẽ tự động sắp xếp lại.", + "left": { + "label": "Thanh bên trái", + "description": "Giữ khu vực này hiển thị khi bảng điều khiển cuộn.", + "thumbLabel": "Chiều rộng thanh bên trái" + }, + "right": { + "label": "Thanh bên phải", + "description": "Giữ khu vực này hiển thị khi bảng điều khiển cuộn.", + "thumbLabel": "Chiều rộng thanh bên phải" + }, + "width": { + "label": "Chiều rộng theo cột" + }, + "preview": { + "label": "Bản xem trước bố cục bảng điều khiển" + } } } }, "management": { "metaTitle": "Quản lý", - "title": { - "morning": "Chào buổi sáng, {username}", - "afternoon": "Chào buổi chiều, {username}", - "evening": "Chào buổi tối, {username}" - }, "notFound": { "title": "Không tìm thấy", - "text": "Không tìm thấy tài nguyên được yêu cầu" + "text": "Không tìm thấy tài nguyên được yêu cầu", + "backToHome": "Quay lại trang chính quản lý" }, "error": { "title": "Không thể tải trang này", @@ -4372,19 +6165,10 @@ }, "navbar": { "items": { - "workshop": "Workshop", "home": "Trang chủ", - "boards": "Bảng", - "apps": "Ứng dụng", - "integrations": "Tích hợp", - "searchEngies": "Công cụ tìm kiếm", - "medias": "Media", "users": { - "label": "Người dùng", "items": { - "manage": "Quản lý", - "invites": "Mời", - "groups": "Các nhóm" + "manage": "Quản lý" } }, "tools": { @@ -4392,10 +6176,7 @@ "items": { "docker": "Docker", "kubernetes": "Kubernetes", - "logs": "Nhật ký", "api": "API & MCP", - "certificates": "Chứng chỉ", - "tasks": "Tác vụ", "backup": "Sao lưu" } }, @@ -4409,21 +6190,12 @@ "sourceCode": "Mã nguồn" } }, - "about": "Về chúng tôi" + "about": "Về chúng tôi", + "assistant": "Trợ lý" } }, "page": { "home": { - "statistic": { - "board": "Bảng", - "user": "Người dùng", - "invite": "Mời", - "integration": "Tích hợp", - "app": "Ứng dụng", - "group": "Các nhóm", - "searchEngine": "Công cụ tìm kiếm", - "media": "Phương tiện" - }, "statisticLabel": { "boards": "Bảng", "resources": "Tài nguyên", @@ -4461,13 +6233,8 @@ "tooltip": "Bảng này sẽ được hiển thị làm bảng di động của bạn" } }, - "duplicate": { - "label": "Nhân bản bảng" - }, "delete": { - "label": "Xóa vĩnh viễn", "confirm": { - "title": "Xóa bảng", "description": "Bạn có chắc muốn xóa bảng {name} không?" } } @@ -4476,28 +6243,82 @@ "public": "Bảng này công khai", "private": "Bảng này riêng tư" }, - "noResults": { - "title": "Chưa có bảng" + "preview": { + "label": "Bản xem trước bố cục của {name}, với {count} mục", + "unknownCreator": "Tác giả không xác định" }, - "modal": { - "createBoard": { - "field": { - "name": { - "label": "Tên" - } - } - } + "noResults": { + "title": "Chưa có bảng", + "description": "Tạo bảng để sắp xếp ứng dụng và tiện ích của bạn ở một nơi." } }, "media": { "includeFromAllUsers": "Bao gồm media từ tất cả người dùng" }, "user": { - "back": "Về danh sách user", "fieldsDisabledExternalProvider": "Một số trường bị vô hiệu hóa vì được quản lý bởi nhà cung cấp xác thực bên ngoài.", "setting": { "general": { "title": "Chung", + "header": { + "title": "Trình thiết kế tiêu đề", + "badge": "Cá nhân", + "description": "Kéo các điều khiển đến bất kỳ đâu trong hàng. Trái, Giữa và Phải cố định trong khi các điều khiển di chuyển quanh chúng.", + "device": { + "desktop": "Máy tính để bàn", + "mobile": "Di động" + }, + "zones": { + "left": "Bên trái", + "center": "Giữa", + "right": "Phải" + }, + "action": { + "hide": "Ẩn tiêu đề", + "show": "Hiển thị tiêu đề", + "configure": "Di chuyển hoặc cấu hình {item}", + "remove": "Xóa {item}", + "dropIntoZone": "Di chuyển vào phần {zone}" + }, + "preview": { + "board": "Bản xem trước bảng điều khiển của {name}", + "empty": "Không có bố cục bảng điều khiển khả dụng" + }, + "available": { + "title": "Các điều khiển khả dụng", + "description": "Thêm một điều khiển, sau đó kéo toàn bộ nút của điều khiển đó vào vị trí bên trên.", + "requiredAlways": "Điều khiển này là bắt buộc, nhưng bạn có thể di chuyển nó đến bất kỳ đâu trong tiêu đề.", + "allAdded": "Mọi điều khiển tích hợp đều đã có trong tiêu đề của bạn.", + "add": "Thêm {item}", + "boardShortcut": "Phím tắt bảng", + "chooseBoard": "Chọn một bảng" + }, + "configuration": { + "description": "Điều khiển này giữ nguyên kích thước như trong tiêu đề trực tiếp.", + "searchDisplay": { + "input": "Thanh tìm kiếm", + "icon": "Chỉ biểu tượng" + }, + "logoDisplay": { + "logo": "Chỉ logo", + "logoAndText": "Logo + văn bản" + } + }, + "items": { + "logo": "Biểu trưng", + "search": "Tìm", + "home": "Bảng chính", + "boardSwitcher": "Bảng", + "assistant": "Trợ lý", + "docker": "Nền tảng Docker", + "boardEdit": "Chỉnh sửa bảng", + "boardSettings": "Cài đặt bảng", + "settings": "Cài đặt của bạn", + "themeToggle": "Chuyển đổi giao diện", + "user": "Tài khoản", + "boardUnavailable": "Bảng không khả dụng" + } + }, "item": { "language": "Ngôn ngữ & Khu vực", "board": { @@ -4531,14 +6352,10 @@ }, "security": { "title": "Bảo mật" - }, - "board": { - "title": "Bảng" } }, "list": { - "metaTitle": "Quản lý người dùng", - "title": "Người dùng" + "metaTitle": "Quản lý người dùng" }, "edit": { "metaTitle": "Chỉnh sửa người dùng {username}" @@ -4592,9 +6409,6 @@ } }, "field": { - "id": { - "label": "NHẬN DẠNG" - }, "creator": { "label": "Người sáng tạo" }, @@ -4618,10 +6432,7 @@ }, "setting": { "title": "Cài đặt", - "alert": "Cài đặt nhóm được ưu tiên theo thứ tự nhóm trong danh sách. Cài đặt ở trên sẽ ghi đè cài đặt ở dưới.", - "board": { - "title": "Các bảng" - } + "alert": "Cài đặt nhóm được ưu tiên theo thứ tự nhóm trong danh sách. Cài đặt ở trên sẽ ghi đè cài đặt ở dưới." }, "members": { "title": "Thành viên", @@ -4629,10 +6440,7 @@ "notFound": "Không tìm thấy thành viên" }, "permissions": { - "title": "Quyền", - "form": { - "unsavedChanges": "Bạn có thay đổi chưa lưu!" - } + "title": "Quyền" } } }, @@ -4641,12 +6449,10 @@ "notification": { "success": { "message": "Đã lưu cài đặt thành công" - }, - "error": { - "message": "Không thể lưu cài đặt" } }, "section": { + "analyticsDocumentation": "Xem chính xác dữ liệu phân tích mà Homarr thu thập", "analytics": { "title": "Phân tích", "general": { @@ -4675,7 +6481,6 @@ } }, "board": { - "title": "Bảng", "homeBoard": { "label": "Bảng chính toàn cục", "mobileLabel": "Bảng di động toàn cục", @@ -4694,7 +6499,6 @@ } }, "user": { - "title": "", "enableGravatar": { "label": "Bật Gravatar", "description": "Sử dụng ảnh đại diện người dùng từ Libravatar/Gravatar khi chưa đặt ảnh đại diện tùy chỉnh và đã cấu hình email" @@ -4710,12 +6514,86 @@ "appearance": { "title": "Hiển thị", "defaultColorScheme": { - "label": "Bảng màu mặc định", + "label": "Bảng màu mặc định" + } + }, + "branding": { + "title": "Thương hiệu phiên bản", + "groups": { + "identity": "Nhận diện", + "appearance": "Hiển thị", + "customCss": "CSS tùy chỉnh", + "authentication": "Xác thực" + }, + "identity": { + "description": "Logo ứng dụng là dấu hiệu lớn hơn được dùng bên trong ứng dụng, trên các trang đăng nhập và cho ứng dụng đã cài đặt. Biểu tượng trình duyệt (favicon) là hình vuông nhỏ dùng trong thẻ và dấu trang; khi để trống, biểu tượng này sẽ dùng logo ứng dụng." + }, + "appName": { + "label": "Tên ứng dụng" + }, + "greeting": { + "label": "Lời chào tùy chỉnh" + }, + "logo": { + "label": "Logo ứng dụng", + "placeholder": "/logo/logo.png" + }, + "favicon": { + "label": "Biểu tượng trình duyệt (favicon)", + "placeholder": "Sử dụng logo ứng dụng" + }, + "primaryColor": { + "label": "Màu chính" + }, + "secondaryColor": { + "label": "Màu nhấn phụ" + }, + "lockPrimaryColor": { + "label": "Giữ màu này trên mọi bảng", + "description": "Ngăn màu bảng thay thế màu nhấn của ứng dụng." + }, + "signInBackground": { + "label": "Nền xác thực", + "placeholder": "https://example.com/background.jpg" + }, + "signInOverlay": { + "label": "Lớp phủ nền" + }, + "defaultRadius": { + "label": "Kiểu góc", "options": { - "auto": "Tự động", - "light": "Sáng", - "dark": "Tối" + "xs": "Hẹp", + "sm": "Tinh tế", + "md": "Cân bằng", + "lg": "Bo tròn", + "xl": "Mềm" } + }, + "customCss": { + "label": "CSS tùy chỉnh toàn cục", + "description": "Áp dụng cho mọi trang. CSS tùy chỉnh của bảng có thể ghi đè." + }, + "authVisibility": { + "description": "Chọn nội dung hiển thị trên mọi trang xác thực.", + "appName": "Tên ứng dụng", + "logo": "Logo ứng dụng", + "greeting": "Lời chào" + }, + "summary": { + "title": "Thương hiệu hiện tại", + "cornerStyle": "Kiểu góc", + "palette": "Bảng màu", + "backgroundConfigured": "Nền tùy chỉnh · lớp phủ {overlay}%", + "backgroundDefault": "Nền mặc định", + "greetingConfigured": "Lời chào tùy chỉnh", + "greetingDefault": "Lời chào mặc định", + "boardColorLocked": "Đã khóa màu bảng", + "boardColorFlexible": "Cho phép màu bảng", + "appName": "Tên công việc", + "logo": "Biểu trưng", + "greeting": "Lời chào", + "on": "Bật", + "off": "Tắt" } }, "culture": { @@ -4723,12 +6601,177 @@ "defaultLocale": { "label": "Ngôn ngữ mặc định" } + }, + "assistant": { + "loading": "Đang tải cấu hình trợ lý", + "title": "Trợ lý", + "description": "Kết nối điểm cuối mô hình tương thích OpenAI cho trợ lý toàn phiên bản.", + "security": { + "description": "Khóa API và các giá trị tiêu đề bổ sung được mã hóa trong cơ sở dữ liệu Homarr. Chúng không bao giờ được gửi lại cho trình duyệt. Yêu cầu mô hình được gửi trực tiếp từ máy chủ Homarr đến điểm cuối đã cấu hình." + }, + "overview": { + "connectionReady": "Kết nối sẵn sàng", + "unsavedChanges": "Thay đổi chưa lưu", + "setupRequired": "Cần thiết lập", + "disabled": "Tắt", + "noModel": "Chưa chọn mô hình" + }, + "connection": { + "endpointTitle": "Nhà cung cấp và điểm cuối", + "description": "Chọn preset hoặc kết nối bất kỳ dịch vụ nào triển khai API Chat Completions của OpenAI.", + "save": "Lưu kết nối nhà cung cấp" + }, + "credentials": { + "title": "Thông tin xác thực", + "description": "Thêm các bí mật mà điểm cuối này cần. Giá trị được lưu giữ ở dạng mã hóa và không thể đọc lại.", + "required": "Bắt buộc có khóa", + "optional": "Khóa tùy chọn", + "workshop": "Đăng nhập GitHub theo người dùng" + }, + "provider": { + "title": "Nhà cung cấp", + "groups": { + "free": "Miễn phí với Homarr", + "hosted": "Nhà cung cấp được lưu trữ", + "local": "Nhà cung cấp cục bộ", + "custom": "Tùy chỉnh" + }, + "options": { + "homarr": { + "description": "Mỗi ngày có một số lượt dùng Trợ lý miễn phí có giới hạn, do đội ngũ Homarr chi trả. Đăng nhập bằng Community Workshop để sử dụng hạn mức của bạn." + }, + "openrouter": { + "description": "Định tuyến mô hình được lưu trữ với danh mục lớn các mô hình hỗ trợ công cụ." + }, + "openai": { + "description": "OpenAI Chat Completions qua điểm cuối API chính thức." + }, + "anthropic": { + "description": "Claude qua điểm cuối tương thích SDK OpenAI của Anthropic." + }, + "google-gemini": { + "description": "Gemini qua điểm cuối API tương thích OpenAI của Google." + }, + "xai": { + "description": "Các mô hình Grok qua API tương thích OpenAI của xAI." + }, + "groq": { + "description": "Suy luận nhanh được lưu trữ qua API tương thích OpenAI của Groq." + }, + "mistral": { + "description": "Các mô hình Mistral qua API chính thức." + }, + "deepseek": { + "description": "Các mô hình DeepSeek qua API tương thích OpenAI của dịch vụ này." + }, + "together": { + "description": "Các mô hình mở được lưu trữ qua API tương thích OpenAI của Together." + }, + "ollama": { + "description": "Máy chủ Ollama cục bộ hoặc mạng sử dụng API tương thích OpenAI." + }, + "lm-studio": { + "description": "Máy chủ LM Studio cục bộ đã bật khả năng tương thích OpenAI." + }, + "llama-cpp": { + "description": "Máy chủ llama.cpp cục bộ hoặc mạng sử dụng API tương thích OpenAI." + }, + "custom": { + "label": "Điểm cuối tùy chỉnh", + "description": "Bất kỳ điểm cuối nào khác tương thích với Chat Completions của OpenAI." + } + }, + "homarrAuth": { + "title": "Đã bao gồm lượt dùng Trợ lý miễn phí hằng ngày", + "description": "Không cần khóa API. Đội ngũ Homarr chi trả một số lượt dùng Trợ lý có giới hạn cho bạn mỗi ngày. Đăng nhập bằng Community Workshop để giữ riêng hạn mức của bạn." + } + }, + "baseUrl": { + "title": "URL cơ sở API", + "description": "Bao gồm tiền tố API, thường là /v1. Trong container, localhost trỏ đến container Homarr." + }, + "apiKey": { + "title": "Khóa API", + "required": "Nhà cung cấp này yêu cầu. Giá trị được mã hóa và chỉ có thể ghi.", + "optional": "Tùy chọn cho các điểm cuối cục bộ. Để trống khi dịch vụ không yêu cầu xác thực bearer.", + "placeholder": "Nhập khóa API", + "savedTitle": "Đã lưu khóa API được mã hóa", + "savedDescription": "Homarr có thể sử dụng khóa này nhưng không thể hiển thị hoặc khôi phục giá trị của khóa.", + "remove": "Xóa khóa API đã lưu", + "removeFlow": { + "title": "Xóa khóa API đã lưu?", + "description": "Nhà cung cấp này yêu cầu khóa API. Việc xóa khóa có thể khiến quá trình tìm kiếm mô hình và phản hồi của trợ lý dừng lại cho đến khi lưu khóa khác.", + "optionalDescription": "Điểm cuối sẽ ngừng nhận xác thực bearer sau khi xóa khóa này. Hãy xác nhận rằng điểm cuối chấp nhận yêu cầu không xác thực hoặc sử dụng tiêu đề đã lưu khác.", + "cancel": "Giữ khóa đã lưu", + "confirm": "Xóa khóa API" + } + }, + "headers": { + "title": "Tiêu đề yêu cầu bổ sung", + "description": "Tiêu đề xác thực hoặc định tuyến tùy chọn. Giá trị tiêu đề được mã hóa và chỉ có thể ghi.", + "add": "Thêm tiêu đề", + "name": "Tên tiêu đề", + "value": "Giá trị tiêu đề", + "valuePlaceholder": "Giá trị bí mật hoặc định tuyến", + "remove": "Xóa tiêu đề", + "configured": "Đã cấu hình các tiêu đề mã hóa bổ sung. Việc thêm tiêu đề sẽ thay thế toàn bộ tập hợp đã lưu.", + "empty": "Không có tiêu đề bổ sung nào được lưu cho nhà cung cấp này.", + "savedBadge": "Đã lưu tiêu đề", + "pendingRemoval": "Đang chờ xóa", + "clear": "Xóa tiêu đề đã lưu khi lưu", + "keep": "Giữ tiêu đề đã lưu" + }, + "model": { + "title": "Mô hình", + "description": "Chọn mô hình được phát hiện hoặc nhập chính xác ID mô hình của điểm cuối.", + "placeholder": "ID mô hình", + "refresh": "Làm mới mô hình", + "chooseModel": "Chọn mô hình được sử dụng cho các cuộc trò chuyện mới.", + "discoveryPath": "Đường dẫn tìm kiếm mô hình", + "discoveryPathDescription": "Được nối vào URL cơ sở API. Để trống để tắt tìm kiếm và sử dụng ID mô hình thủ công.", + "manual": "Nhập ID mô hình thủ công hoặc lưu kết nối để tìm kiếm mô hình.", + "manualFallback": "Không thể tìm kiếm. Bạn vẫn có thể nhập ID mô hình thủ công.", + "saveConnectionFirst": "Hãy lưu kết nối nhà cung cấp trước khi chọn mô hình.", + "discovering": "Đang làm mới các mô hình khả dụng từ nhà cung cấp này…", + "discovered": "{count, plural, other {Đã phát hiện # mô hình. Khả năng hỗ trợ công cụ phụ thuộc vào endpoint và mô hình đã chọn.}}", + "discoveryFailed": "Tìm kiếm mô hình chưa hoàn tất", + "context": "{count} cửa sổ ngữ cảnh", + "toolsConfirmed": "Công cụ được quảng bá", + "toolsUnknown": "Xác minh hỗ trợ công cụ" + }, + "serverTools": { + "title": "Công cụ máy chủ", + "webSearch": { + "label": "Tìm kiếm web", + "description": "Cho phép mô hình tìm kiếm web trực tiếp qua OpenRouter khi yêu cầu cần thông tin hiện tại. Việc tìm kiếm được OpenRouter tính phí riêng.", + "proxyDescription": "Gửi công cụ máy chủ tìm kiếm web của OpenRouter đến điểm cuối này. Chỉ bật khi điểm cuối tùy chỉnh chuyển tiếp định dạng công cụ máy chủ OpenRouter, chẳng hạn proxy Homarr Router.", + "limit": "Mô hình quyết định thời điểm tìm kiếm, tối đa 3 lần tìm kiếm và 5 kết quả mỗi lần tìm kiếm cho mỗi yêu cầu." + } + }, + "enabled": { + "label": "Bật Trợ lý", + "description": "Hiển thị trợ lý cho tất cả người dùng đã đăng nhập. Các quyền Homarr hiện có vẫn áp dụng cho mọi lần gọi công cụ nội bộ." + }, + "save": "Lưu trợ lý", + "notification": { + "connectionSaved": { + "title": "Đã lưu kết nối nhà cung cấp", + "message": "Điểm cuối và thông tin xác thực được mã hóa đã sẵn sàng để chọn mô hình.", + "credentialsCleared": "Điểm cuối đã thay đổi nên thông tin xác thực trước đó đã được xóa. Nếu cần, hãy thêm thông tin xác thực cho đích mới." + }, + "saved": { + "title": "Đã lưu cài đặt trợ lý", + "message": "Mô hình mới và cài đặt tính khả dụng đã được kích hoạt." + }, + "error": { + "title": "Không thể lưu cài đặt trợ lý" + } + } } } }, "tool": { "tasks": { - "title": "Tác vụ", "status": { "idle": "Rảnh", "running": "Đang chạy", @@ -4746,6 +6789,11 @@ "label": "Ping" } }, + "action": { + "run": "Chạy {name} ngay", + "enable": "Bật {name}", + "disable": "Tắt {name}" + }, "interval": { "seconds": "", "minutes": "", @@ -4761,13 +6809,7 @@ } } }, - "settings": { - "title": "Cài đặt tác vụ cho {jobName}" - }, "field": { - "name": { - "label": "Tên" - }, "interval": { "label": "Khoảng thời gian lập lịch" }, @@ -4781,11 +6823,6 @@ "table": { "search": "Tìm kiếm {count} tác vụ..." }, - "action": { - "refresh": { - "label": "Làm mới" - } - }, "refresh": { "success": { "message": "Đã làm mới tác vụ thành công" @@ -4819,7 +6856,6 @@ } }, "api": { - "title": "API", "modal": { "createApiToken": { "title": "Đã tạo mã thông báo API", @@ -4845,7 +6881,6 @@ }, "table": { "header": { - "id": "NHẬN DẠNG", "createdBy": "Người tạo", "actions": "Thao tác" } @@ -4901,43 +6936,12 @@ "availableTools": { "title": "Công cụ khả dụng", "description": "Có {count} công cụ khả dụng. Mở rộng một danh mục để xem từng công cụ và mô tả của chúng.", - "columnType": "Loại", - "columnName": "Công cụ", - "columnDescription": "Mô tả" - }, - "troubleshooting": { - "title": "Khắc phục sự cố", - "missingHeader": { - "title": "\"Thiếu header ApiKey\"", - "description": "Máy khách của bạn không gửi header {header}. Hãy xác minh phần {section} trong cấu hình MCP là chính xác. Một số máy khách yêu cầu khởi động lại sau khi thay đổi cấu hình." - }, - "invalidFormat": { - "title": "\"Định dạng ApiKey không hợp lệ\"", - "description": "Hãy đảm bảo bạn đã sao chép toàn bộ khóa API, không chỉ một phần." - }, - "invalidKey": { - "title": "\"Khóa API không hợp lệ\"", - "description": "Không tìm thấy ID khóa hoặc token không đúng. Chỉ có thể xem khóa API một lần khi tạo. Nếu làm mất khóa, hãy xóa khóa cũ và tạo khóa mới." - }, - "connectionRefused": { - "title": "Từ chối kết nối / hết thời gian chờ", - "description": "Đảm bảo URL có thể truy cập từ máy khách AI của bạn. Nếu Homarr chạy sau reverse proxy hoặc trong Docker, hãy sử dụng URL bên ngoài (không phải {localhost}). Xác minh cổng chính xác (mặc định: 7575 cho Docker)." - }, - "toolsNotAppearing": { - "title": "Công cụ không xuất hiện", - "description": "Một số công cụ yêu cầu cấu hình các tích hợp cụ thể (ví dụ: Docker, Overseerr). Danh sách công cụ phụ thuộc vào những gì có sẵn trong phiên bản Homarr của bạn." + "filteredDescription": "{count} công cụ phù hợp trong các danh mục mở rộng.", + "search": "Tìm kiếm công cụ", + "noResults": { + "title": "Không có công cụ nào khớp với tìm kiếm này", + "description": "Không có công cụ MCP nào khớp với \"{search}\". Hãy thử không gian tên, tên công cụ hoặc mô tả." } - }, - "copy": "Sao chép", - "oneClick": { - "title": "Cài đặt bằng một cú nhấp", - "subtitle": "Sử dụng OAuth — xác thực trong trình duyệt ở lần sử dụng đầu tiên", - "vsCode": "Cài đặt trong VS Code", - "cursor": "Cài đặt trong Cursor", - "copyUrl": "Sao chép URL MCP", - "copied": "Đã sao chép!", - "copyHint": "Dành cho ChatGPT, Claude Code hoặc bất kỳ máy khách MCP nào", - "manualConfig": "Cấu hình thủ công" } } } @@ -4954,47 +6958,12 @@ "title": "Xuất dữ liệu nhạy cảm", "warningTitle": "Bản xuất này chứa toàn bộ cơ sở dữ liệu của bạn.", "warningBody": "Bản sao lưu bao gồm tất cả người dùng, bí mật tích hợp (đã mã hóa), khóa API, cấu hình bảng và dữ liệu ứng dụng. Lưu trữ tệp đã xuất an toàn và không chia sẻ.", - "typePrompt": "Nhập \"{phrase}\" để tiếp tục", - "submit": "Xuất cơ sở dữ liệu", - "cancel": "Hủy" + "submit": "Xuất cơ sở dữ liệu" } }, "import": { "title": "Khôi phục cơ sở dữ liệu", - "description": "Tải lên tệp ZIP sao lưu đã xuất trước đó để khôi phục cơ sở dữ liệu. Điều này sẽ thay thế toàn bộ cơ sở dữ liệu của bạn. Nếu bản sao lưu được tạo với khóa mã hóa khác, bí mật sẽ được tự động mã hóa lại.", - "warning": "Khôi phục bản sao lưu sẽ thay thế hoàn toàn cơ sở dữ liệu hiện tại và khởi động lại ứng dụng. Hành động này không thể hoàn tác.", - "dropzone": { - "title": "Kéo tệp ZIP sao lưu vào đây hoặc nhấp để duyệt", - "description": "Chỉ chấp nhận tệp .zip từ bản sao lưu SQLite của Homarr" - }, - "changeFile": "Thay đổi tập tin", - "button": "Khôi phục cơ sở dữ liệu", - "success": { - "title": "Khôi phục hoàn tất", - "message": "Cơ sở dữ liệu đã được khôi phục thành công. Ứng dụng đang khởi động lại..." - }, - "error": "Nhập thất bại" - }, - "preview": { - "title": "Nội dung bản sao lưu", - "exported": "Đã xuất {date}", - "loading": "Đang phân tích tệp sao lưu...", - "errorTitle": "Lỗi xem trước", - "entity": "Thực thể", - "count": "Số lượng", - "boards": "Bảng", - "entities": { - "board": "Bảng", - "user": "Người dùng", - "app": "Ứng dụng", - "integration": "Tích hợp", - "item": "Widget", - "media": "Phương tiện", - "search_engine": "Công cụ tìm kiếm" - }, - "analyzeError": "Không thể phân tích tệp sao lưu", - "invalidMissingMetadata": "Sao lưu không hợp lệ: thiếu metadata.json", - "invalidMissingDb": "Sao lưu không hợp lệ: thiếu db.sqlite" + "description": "Tải lên tệp ZIP sao lưu đã xuất trước đó để khôi phục cơ sở dữ liệu. Điều này sẽ thay thế toàn bộ cơ sở dữ liệu của bạn. Nếu bản sao lưu được tạo với khóa mã hóa khác, bí mật sẽ được tự động mã hóa lại." }, "restore": { "dropzone": { @@ -5004,29 +6973,20 @@ "analyzing": "Đang phân tích bản sao lưu...", "changeFile": "Thay đổi tập tin", "continueToRestore": "Tiếp tục khôi phục", - "tryAgain": "Thử lại", "analysisError": "Lỗi phân tích", "preview": { "title": "Nội dung bản sao lưu", "exported": "Đã xuất {date}", "entity": "Thực thể", "count": "Số lượng", - "boards": "Bảng", "entities": { - "board": "Bảng", - "user": "Người dùng", - "app": "Ứng dụng", - "integration": "Tích hợp", - "item": "Widget", - "media": "Phương tiện", - "search_engine": "Công cụ tìm kiếm" + "item": "Widget" }, "migrationsApplied": "{count} di chuyển đã áp dụng", "migrationsAppliedPlural": "{count} di chuyển đã áp dụng", "migrationsOlderVersion": "Bản sao lưu này từ phiên bản Homarr cũ hơn. {count} lần di chuyển lược đồ đã được áp dụng để cập nhật.", "migrationsOlderVersionPlural": "Bản sao lưu này từ phiên bản Homarr cũ hơn. {count} lần di chuyển lược đồ đã được áp dụng để cập nhật.", "migrationsUpToDate": "Lược đồ cơ sở dữ liệu đã cập nhật ({count} lần di chuyển đã áp dụng)", - "upToDate": "Đã cập nhật", "migrationsPending": "{count} đang chờ" }, "migration": { @@ -5037,21 +6997,21 @@ "title": "Hành động hủy diệt", "warningTitle": "Điều này sẽ thay thế vĩnh viễn toàn bộ cơ sở dữ liệu của bạn.", "warningBody": "Tất cả bảng, người dùng, ứng dụng, tích hợp, cài đặt và phiên hiện tại sẽ bị mất. Hành động này không thể hoàn tác. Ứng dụng sẽ khởi động lại sau khi khôi phục.", - "typePrompt": "Nhập \"{phrase}\" để tiếp tục", - "cancel": "Hủy", "submit": "Khôi phục cơ sở dữ liệu" }, "progress": { "title": "Đang khôi phục cơ sở dữ liệu...", - "extracting": "Đang giải nén lưu trữ sao lưu", - "migrating": "Đang áp dụng di chuyển cơ sở dữ liệu", - "encrypting": "Đang mã hóa lại bí mật tích hợp", - "swapping": "Đang thay thế tệp cơ sở dữ liệu", - "restarting": "Đang khởi động lại máy chủ" + "restarting": "Đang khởi động lại máy chủ", + "relogin": "Việc khôi phục cơ sở dữ liệu đã làm mất hiệu lực phiên hiện tại. Homarr sẽ đưa bạn đến trang đăng nhập khi máy chủ sẵn sàng." }, "complete": { "title": "Khôi phục hoàn tất", - "message": "Cơ sở dữ liệu đã được khôi phục thành công. Máy chủ đang khởi động lại — vui lòng làm mới trang sau vài giây." + "message": "Cơ sở dữ liệu đã được khôi phục thành công. Máy chủ đang khởi động lại — vui lòng làm mới trang sau vài giây.", + "button": "Đăng nhập ngay" + }, + "timeout": { + "title": "Máy chủ không trực tuyến trở lại", + "message": "Đã hoàn tất khôi phục cơ sở dữ liệu nhưng Homarr chưa sẵn sàng trở lại. Hãy thử kiểm tra kết nối hoặc tự làm mới trang này." }, "failed": { "title": "Khôi phục thất bại" @@ -5059,6 +7019,9 @@ "invalidMissingMetadata": "Sao lưu không hợp lệ: thiếu metadata.json", "invalidMissingDb": "Sao lưu không hợp lệ: thiếu db.sqlite", "analyzeError": "Không thể phân tích bản sao lưu" + }, + "confirm": { + "typePrompt": "Nhập \"{phrase}\" để tiếp tục" } } }, @@ -5093,7 +7056,11 @@ "toggleBoardEdit": "Bật/tắt chế độ chỉnh sửa bảng", "toggleColorScheme": "Bật/tắt chế độ sáng/tối", "saveNotebook": "Lưu sổ ghi chép (chỉ trong tiện ích sổ ghi chép)", - "openSpotlight": "Mở tìm kiếm" + "openSpotlight": "Mở tìm kiếm", + "openSpotlightApps": "Mở tìm kiếm ứng dụng", + "openSpotlightAssistant": "Mở chế độ Trợ lý", + "openSpotlightPreferences": "Mở chế độ tùy chọn", + "openAssistant": "Mở Trợ lý" }, "note": "Mẹo: Mod dùng cho cả phím Ctrl và phím ⌘ trên macOS" } @@ -5103,6 +7070,63 @@ }, "docker": { "title": "Container", + "reconciliation": { + "title": "Trợ lý thiết lập Docker", + "suggestions": "", + "attention": "{count} mục cần chú ý", + "endpointUnavailable": "Không thể kiểm tra một số dịch vụ vì các điểm cuối này không khả dụng: {names}", + "empty": "Không tìm thấy dịch vụ Docker nào hiển thị.", + "emptyFilter": "Không có dịch vụ nào khớp với chế độ xem này.", + "ambiguous": "Có thể có nhiều hơn một mục hiện có khớp với dịch vụ này. Homarr sẽ không tự động chọn mục nào.", + "filter": { + "attention": "Cần chú ý", + "represented": "Đã thiết lập", + "all": "Tất cả" + }, + "state": { + "newRecognized": "Sẵn sàng kết nối", + "newApp": "Dịch vụ mới", + "represented": "Đã được đại diện", + "linked": "Đã liên kết", + "moved": "Địa chỉ đã thay đổi" + }, + "url": { + "manual": "Nhập địa chỉ thủ công" + }, + "health": { + "layer": { + "docker": "Nền tảng Docker", + "integrationConfiguration": "Tích hợp", + "authentication": "Xác thực", + "apiRequest": "Giao diện lập trình ứng dụng (API)", + "appRepresentation": "Ứng dụng", + "widgetConfiguration": "Tiện ích", + "widgetQuery": "Truy vấn tiện ích" + }, + "status": { + "available": "Khả dụng", + "configured": "Đã cấu hình", + "linked": "Đã liên kết", + "missing": "Thiếu", + "changed": "Đã thay đổi", + "unused": "Không được sử dụng", + "notApplicable": "Không áp dụng", + "notObserved": "Chưa quan sát" + } + }, + "action": { + "review": "Xem xét", + "dismiss": "Bỏ qua", + "restoreDismissed": "Khôi phục mục đã bỏ qua ({count})", + "setupIntegration": "Thiết lập tích hợp", + "reviewIntegration": "Xem xét tích hợp", + "viewRepresentation": "Xem thiết lập" + }, + "loadError": { + "title": "Không thể tải trợ lý thiết lập Docker", + "message": "Thông tin dịch vụ Docker không khả dụng. Hãy thử lại mà không rời trang này." + } + }, "table": { "updated": "Đã cập nhật {when}", "refresh": { @@ -5115,9 +7139,6 @@ "totalMemory": "Tổng bộ nhớ: {memory}" }, "field": { - "name": { - "label": "Tên" - }, "state": { "label": "Trạng thái", "option": { @@ -5131,9 +7152,6 @@ } }, "stats": { - "cpu": { - "label": "CPU" - }, "memory": { "label": "Bộ nhớ" } @@ -5196,8 +7214,11 @@ } }, "remove": { - "label": "Xóa", "confirm": "Nhấp lần nữa để xóa vĩnh viễn", + "confirmation": { + "title": "{count, plural, other {Xóa # container?}}", + "message": "{count, plural, other {Thao tác này sẽ xóa vĩnh viễn # container: {names}}}" + }, "notification": { "success": { "title": "Đã xóa container", @@ -5209,8 +7230,13 @@ } } }, + "result": { + "failure": { + "title": "Một số thao tác container thất bại", + "message": "{total, plural, other {{failed} trên # thao tác không thành công: {names}}}" + } + }, "refresh": { - "label": "Làm mới", "notification": { "success": { "title": "Đã làm mới container", @@ -5241,18 +7267,33 @@ }, "error": { "internalServerError": "Không thể tải các container Docker", + "endpointUnavailable": "{count, plural, other {# endpoint Docker không khả dụng: {names}}}", "noColumns": "Chọn ít nhất một cột trong cài đặt tiện ích" } }, "kubernetes": { + "context": { + "label": "Ngữ cảnh Kubernetes", + "loadError": { + "title": "Không thể tải các ngữ cảnh Kubernetes", + "message": "Thông tin ngữ cảnh không khả dụng. Hãy thử lại mà không rời trang này." + }, + "status": { + "available": "Khả dụng", + "degraded": "Chỉ số không khả dụng", + "unavailable": "Không khả dụng" + }, + "unavailable": "Không thể truy cập ngữ cảnh Kubernetes này. Hãy chọn ngữ cảnh khác hoặc xác minh thông tin xác thực và điểm cuối.", + "metricsUnavailable": "Có thể truy cập ngữ cảnh này nhưng Metrics Server không khả dụng. Kho dữ liệu vẫn khả dụng mà không có mức sử dụng CPU và bộ nhớ trực tiếp." + }, "cluster": { "title": "Bảng điều khiển cụm", "label": "Cụm", "providers": "Nhà cung cấp", "version": "Phiên bản", - "architecture": "Kiến trúc", "capacity": { "title": "Dung lượng", + "metricsUnavailable": "Metrics Server không khả dụng. Kho dữ liệu và dung lượng dành riêng vẫn hiển thị nhưng không thể hiển thị mức sử dụng CPU và bộ nhớ trực tiếp.", "resource": { "reserved": "Đã dành riêng", "used": "Đã dùng" @@ -5271,38 +7312,10 @@ } }, "nodes": { - "label": "Node", "field": { - "name": { - "label": "Tên" - }, - "state": { - "label": "", - "option": { - "ready": "Sẵn sàng", - "NotReady": "Chưa sẵn sàng" - } - }, - "cpu": { - "label": "CPU" - }, - "memory": { - "label": "RAM" - }, - "pods": { - "label": "Pod" - }, - "operatingSystem": { - "label": "HĐH" - }, - "architecture": { - "label": "Kiến trúc" - }, + "metricsUnavailable": "Không khả dụng", "kubernetesVersion": { "label": "Phiên bản Kubernetes" - }, - "creationTimestamp": { - "label": "Đã tạo" } }, "table": { @@ -5310,43 +7323,17 @@ } }, "namespaces": { - "label": "Namespace", - "field": { - "name": { - "label": "Tên" - }, - "state": { - "label": "", - "option": { - "active": "Hoạt động", - "terminating": "Đang kết thúc" - } - }, - "creationTimestamp": { - "label": "Đã tạo" - } - }, "table": { "search": "Tìm kiếm {count} namespace" } }, "ingresses": { - "label": "Ingress", "field": { - "name": { - "label": "Tên" - }, - "namespace": { - "label": "Namespace" - }, "className": { "label": "Tên lớp" }, "rulesAndPaths": { "label": "Quy tắc & đường dẫn" - }, - "creationTimestamp": { - "label": "Đã tạo" } }, "table": { @@ -5354,17 +7341,7 @@ } }, "services": { - "label": "Dịch vụ", "field": { - "name": { - "label": "Tên" - }, - "namespace": { - "label": "Namespace" - }, - "type": { - "label": "Loại" - }, "ports": { "label": "Cổng" }, @@ -5373,9 +7350,6 @@ }, "clusterIP": { "label": "IP cụm" - }, - "creationTimestamp": { - "label": "Đã tạo" } }, "table": { @@ -5383,25 +7357,12 @@ } }, "pods": { - "label": "Pod", "field": { - "name": { - "label": "Tên" - }, - "namespace": { - "label": "Namespace" - }, "image": { "label": "Hình ảnh" }, "applicationType": { "label": "Loại ứng dụng" - }, - "status": { - "label": "Trạng thái" - }, - "creationTimestamp": { - "label": "Đã tạo" } }, "table": { @@ -5409,51 +7370,17 @@ } }, "secrets": { - "label": "Bí mật", - "field": { - "name": { - "label": "Tên" - }, - "namespace": { - "label": "namespace" - }, - "type": { - "label": "loại" - }, - "creationTimestamp": { - "label": "Đã tạo" - } - }, "table": { "search": "Tìm kiếm {count} bí mật" } }, "configmaps": { - "label": "ConfigMap", - "field": { - "name": { - "label": "Tên" - }, - "namespace": { - "label": "namespace" - }, - "creationTimestamp": { - "label": "Đã tạo" - } - }, "table": { "search": "Tìm kiếm {count} ConfigMap" } }, "volumes": { - "label": "Ổ đĩa", "field": { - "name": { - "label": "Tên" - }, - "namespace": { - "label": "Namespace" - }, "accessModes": { "label": "Chế độ truy cập" }, @@ -5468,12 +7395,6 @@ }, "volumeName": { "label": "Tên ổ đĩa" - }, - "status": { - "label": "Trạng thái" - }, - "creationTimestamp": { - "label": "Đã tạo" } }, "table": { @@ -5482,6 +7403,29 @@ }, "error": { "internalServerError": "Không thể tải dữ liệu Kubernetes" + }, + "field": { + "name": { + "label": "Tên công việc" + }, + "namespace": { + "label": "Không gian tên" + }, + "creationTimestamp": { + "label": "Đã tạo" + }, + "state": { + "label": "Trạng thái công việc" + }, + "status": { + "label": "Trạng thái" + }, + "type": { + "label": "Loại Trình tải xuống" + }, + "architecture": { + "label": "Kiến trúc" + } } }, "permission": { @@ -5515,71 +7459,27 @@ }, "navigationStructure": { "manage": { - "workshop": { - "label": "Workshop" - }, "label": "Quản lý", - "boards": { - "label": "Bảng" - }, - "integrations": { - "label": "Tích hợp", + "custom-widgets": { "edit": { - "label": "Sửa" + "flow": { + "label": "Luồng" + } }, - "new": { - "label": "Mới" - } - }, - "search-engines": { - "label": "Công cụ tìm kiếm", - "new": { - "label": "Mới" + "workshop": { + "label": "Xưởng" }, - "edit": { - "label": "Sửa" - } - }, - "medias": { - "label": "Media" - }, - "apps": { - "label": "Ứng dụng", - "new": { - "label": "Mới" - }, - "edit": { - "label": "Sửa" + "publish": { + "label": "Đăng lên Workshop" } }, "users": { - "label": "Người dùng", - "create": { - "label": "Tạo nên" - }, "general": "Chung", - "security": "Bảo mật", - "board": "Bảng", - "groups": { - "label": "Các nhóm" - }, - "invites": { - "label": "Mời" - } + "security": "Bảo mật" }, "tools": { "label": "Công cụ", - "tasks": { - "label": "Tác vụ" - }, - "docker": { - "label": "Docker", - "logs": { - "label": "Nhật ký" - } - }, "kubernetes": { - "label": "Kubernetes", "nodes": { "label": "Node" }, @@ -5605,11 +7505,7 @@ "label": "Ổ đĩa" } }, - "logs": { - "label": "Nhật ký" - }, "certificates": { - "label": "Chứng chỉ", "hostnames": { "label": "Tên máy chủ" } @@ -5620,12 +7516,60 @@ }, "about": { "label": "Về chúng tôi" + }, + "assistant": { + "label": "Trợ lý" } } }, "search": { "placeholder": "Tìm kiếm mọi thứ", "nothingFound": "Không tìm được gì cả", + "modePicker": { + "search": { + "label": "Tìm", + "placeholder": "Tìm kiếm ứng dụng, bảng, trang, lệnh và tùy chọn" + }, + "apps": { + "label": "Ứng dụng", + "placeholder": "Tìm kiếm ứng dụng, bảng và tích hợp" + }, + "command": { + "label": "Lệnh", + "placeholder": "Tìm kiếm thao tác và lệnh" + }, + "preferences": { + "label": "Tùy chọn", + "placeholder": "Tìm kiếm và thay đổi tùy chọn" + }, + "assistant": { + "label": "Trợ lý", + "placeholder": "Hỏi Trợ lý" + }, + "external": { + "label": "Trang web", + "placeholder": "Tìm kiếm bằng công cụ tìm kiếm bên ngoài" + }, + "media": { + "label": "Phương tiện", + "placeholder": "Tìm kiếm phim hoặc chương trình", + "fallback": "Tìm kiếm phương tiện cho \"{query}\"" + }, + "userGroup": { + "label": "Mọi người", + "placeholder": "Tìm kiếm người dùng và nhóm" + }, + "continueWith": "Tiếp tục với", + "dialogAriaLabel": "Menu lệnh {mode}", + "navigationLabel": "Chế độ tìm kiếm", + "modeAriaLabel": "Chế độ {mode}", + "resultsAriaLabel": "Kết quả {mode}", + "footer": { + "navigate": "Điều hướng", + "open": "Mở", + "close": "Đóng" + } + }, "error": { "fetch": "Đã xảy ra lỗi khi tải dữ liệu" }, @@ -5634,7 +7578,6 @@ "help": "Tìm kiếm ứng dụng, tích hợp hoặc bảng", "group": { "app": { - "title": "Ứng dụng", "children": { "action": { "open": { @@ -5650,7 +7593,6 @@ } }, "board": { - "title": "Bảng", "children": { "action": { "open": { @@ -5670,9 +7612,6 @@ "title": "Chọn thao tác cho bảng" } } - }, - "integration": { - "title": "Tích hợp" } } }, @@ -5701,9 +7640,6 @@ "newBoard": { "label": "Tạo bảng mới" }, - "importBoard": { - "label": "Nhập bảng" - }, "newApp": { "label": "Tạo ứng dụng mới" }, @@ -5773,7 +7709,6 @@ } }, "defaultSearchEngineId": { - "label": "Công cụ tìm kiếm mặc định", "children": { "detail": { "title": "Chọn công cụ tìm kiếm mặc định" @@ -5781,7 +7716,6 @@ } }, "openSearchInNewTab": { - "label": "Mở kết quả tìm kiếm trong thẻ mới", "children": { "detail": { "title": "Mở kết quả tìm kiếm trong thẻ mới" @@ -5789,7 +7723,6 @@ } }, "ddgBangs": { - "label": "Bật DuckDuckGo bangs", "children": { "detail": { "title": "Bật DuckDuckGo bangs" @@ -5804,6 +7737,13 @@ } } }, + "byteUnitSystem": { + "children": { + "detail": { + "title": "Chọn đơn vị kích thước dữ liệu" + } + } + }, "homeBoardId": { "label": "Bảng chính", "children": { @@ -5821,7 +7761,6 @@ } }, "pingIconsEnabled": { - "label": "Dùng biểu tượng cho ping", "children": { "detail": { "title": "Dùng biểu tượng cho ping" @@ -5829,7 +7768,6 @@ } }, "enableRightClickOnWidgets": { - "label": "Bật nhấp chuột phải trên tiện ích", "children": { "detail": { "title": "Bật nhấp chuột phải trên tiện ích" @@ -5857,6 +7795,7 @@ "description": "Bắt đầu nhập để tìm kiếm tích hợp yêu cầu phương tiện của bạn", "disabled": { "noIntegration": "Thêm tích hợp Overseerr, Jellyseerr, hoặc Seerr để bật tìm kiếm phương tiện.", + "signInRequired": "Đăng nhập để tìm kiếm các tích hợp yêu cầu phương tiện.", "scoped": "Widget này không có tích hợp yêu cầu phương tiện có thể truy cập." } } @@ -5873,7 +7812,6 @@ "help": "Sử dụng công cụ tìm kiếm bên ngoài", "group": { "searchEngine": { - "title": "Công cụ tìm kiếm", "tipDdgBangs": "Mẹo: Bạn có thể dùng bất kỳ DuckDuckGo bang nào ở đây, ví dụ: !something", "bang": { "searchWithQuery": "Tìm kiếm \"{query}\" với {label}", @@ -5924,20 +7862,6 @@ "group": { "mode": { "title": "Chế độ" - }, - "help": { - "title": "Giúp đỡ", - "option": { - "documentation": { - "label": "Tài liệu" - }, - "submitIssue": { - "label": "Gửi báo cáo sự cố" - }, - "discord": { - "label": "Discord" - } - } } } }, @@ -5949,9 +7873,10 @@ "other": { "label": "Tìm kiếm bằng công cụ tìm kiếm khác" }, - "no-default": { - "label": "Không có công cụ tìm kiếm mặc định", - "description": "Đặt công cụ tìm kiếm mặc định trong tùy chọn" + "no-engines": { + "label": "Chưa cấu hình công cụ tìm kiếm", + "descriptionCreate": "Thêm công cụ tìm kiếm để tìm kiếm từ menu lệnh", + "descriptionUnavailable": "Yêu cầu quản trị viên cấu hình công cụ tìm kiếm" }, "search": { "label": "Tìm “{query}” bằng {name}" @@ -6031,7 +7956,6 @@ "help": "Tìm kiếm người dùng hoặc nhóm", "group": { "user": { - "title": "Người dùng", "children": { "action": { "detail": { @@ -6044,7 +7968,6 @@ } }, "group": { - "title": "Các nhóm", "children": { "action": { "detail": { @@ -6068,9 +7991,6 @@ "engine": { "search": "Tìm công cụ tìm kiếm", "field": { - "name": { - "label": "Tên" - }, "short": { "label": "Ngắn" }, @@ -6083,12 +8003,19 @@ }, "page": { "list": { - "title": "Công cụ tìm kiếm", + "ariaLabel": "Các công cụ tìm kiếm đã cấu hình", "noResults": { "title": "Chưa có công cụ tìm kiếm nào", - "action": "Tạo công cụ tìm kiếm đầu tiên" + "description": "Công cụ tìm kiếm cho phép Spotlight gửi truy vấn đến một trang web hoặc dịch vụ đã kết nối.", + "action": "Tạo công cụ tìm kiếm đầu tiên", + "filteredTitle": "Không có công cụ tìm kiếm nào khớp với tìm kiếm của bạn", + "filteredDescription": "Không có công cụ tìm kiếm nào khớp với \"{search}\". Hãy thử tên hoặc URL khác." }, - "interactive": "Tương tác, sử dụng một tích hợp" + "interactive": "Tương tác, sử dụng một tích hợp", + "type": { + "generic": "Mẫu URL", + "fromIntegration": "Tích hợp" + } }, "create": { "title": "Công cụ tìm kiếm mới", @@ -6107,11 +8034,9 @@ "title": "Chỉnh sửa công cụ tìm kiếm", "notification": { "success": { - "title": "Đã áp dụng thay đổi thành công", "message": "Công cụ tìm kiếm đã được lưu thành công" }, "error": { - "title": "Không thể áp dụng thay đổi", "message": "Không thể lưu công cụ tìm kiếm" } }, @@ -6250,6 +8175,10 @@ } }, "log": { + "context": { + "widgetError": "Tiện ích đã báo lỗi vào khoảng thời gian này", + "expiredWidgetError": "Nhật ký xung quanh lỗi tiện ích này không còn được lưu giữ" + }, "level": { "option": { "debug": "Gỡ lỗi", @@ -6261,7 +8190,6 @@ }, "onboardingTour": { "learnMore": "Đọc tài liệu", - "next": "Kế tiếp", "prev": "Quay lại", "done": "Xong", "skip": "Bỏ qua hướng dẫn", @@ -6325,5 +8253,359 @@ "description": "Thay đổi bảng màu, ngôn ngữ, bảng chính và tùy chọn. Bạn cũng có thể chuyển đến khu vực quản lý từ đây." } } + }, + "metadata": { + "description": "Bảng điều khiển tự lưu trữ cho hệ thống *arr và toàn bộ homelab của bạn. Tích hợp hơn 50 dịch vụ, tiện ích theo thời gian thực, không cần tệp cấu hình.", + "dashboardTitle": "Bảng điều khiển {appName}" + }, + "assistant": { + "title": "Trợ lý", + "open": "Mở Trợ lý", + "close": "Đóng trợ lý", + "minimize": "Thu nhỏ trợ lý", + "spotlight": "Hỏi Trợ lý", + "spotlightDescription": "Nhập và gửi lời nhắc mà không rời menu lệnh.", + "spotlightPrompt": { + "title": "Hỏi Trợ lý", + "description": "Nhập lời nhắc ở trên. Nhấn Enter để gửi ở chế độ nền.", + "send": "Gửi lời nhắc", + "empty": "Nhập lời nhắc ở trên" + }, + "unavailable": { + "checking": "Đang kiểm tra tính khả dụng của trợ lý…", + "error": "Không thể kiểm tra tính khả dụng của trợ lý. Hãy thử lại.", + "notConfigured": "Quản trị viên phải cấu hình và bật trợ lý trước.", + "signIn": "Đăng nhập để sử dụng Trợ lý." + }, + "newConversation": "Cuộc trò chuyện mới", + "conversations": "Các cuộc trò chuyện", + "conversationActions": "Thao tác cuộc trò chuyện", + "searchConversations": "Tìm kiếm cuộc trò chuyện", + "noMatchingConversations": "Không có cuộc trò chuyện phù hợp", + "moreActions": "Thao tác phản hồi khác", + "renameConversation": { + "action": "Đổi tên", + "label": "Tên cuộc trò chuyện", + "save": "Lưu tên", + "failedTitle": "Không thể đổi tên cuộc trò chuyện", + "failedDescription": "Homarr không thể đổi tên cuộc trò chuyện này. Hãy thử lại." + }, + "deleteConversation": { + "title": "Xóa cuộc trò chuyện?", + "description": "“{title}” và các tin nhắn của cuộc trò chuyện sẽ bị xóa vĩnh viễn.", + "failedTitle": "Không thể xóa cuộc trò chuyện", + "failedDescription": "Homarr không thể xóa cuộc trò chuyện này. Hãy thử lại." + }, + "closeHistory": "Đóng lịch sử trò chuyện", + "openHistory": "Mở lịch sử trò chuyện", + "emptyTitle": "Tôi có thể giúp gì?", + "emptyDescription": "Hỏi về thiết lập Homarr, kiểm tra dữ liệu trực tiếp của phiên bản hoặc phê duyệt thao tác khi bạn muốn tôi thực hiện thay đổi.", + "suggestions": { + "health": { + "label": "Kiểm tra tình trạng dịch vụ", + "prompt": "Kiểm tra các tích hợp của tôi và tóm tắt mọi vấn đề cần chú ý." + }, + "explore": { + "label": "Khám phá Homarr của tôi", + "prompt": "Cho tôi biết những gì tôi có thể xem và quản lý trong phiên bản Homarr này." + }, + "media": { + "label": "Tìm phương tiện để yêu cầu", + "prompt": "Giúp tôi tìm một bộ phim hoặc loạt phim để yêu cầu." + }, + "style": { + "label": "Cải thiện bảng điều khiển", + "prompt": "Giúp tôi cải thiện giao diện hoặc CSS tùy chỉnh của bảng. Trước tiên hãy hiển thị các bảng của tôi, sau đó giữ nguyên cài đặt hiện tại trong khi thực hiện thay đổi." + }, + "designWidget": { + "label": "Thiết kế tiện ích", + "prompt": "Tạo và cài đặt Tiện ích tùy chỉnh cho " + } + }, + "composerPlaceholder": "Hỏi Trợ lý…", + "runtime": { + "model": "Mô hình", + "searchModels": "Tìm kiếm mô hình", + "noModels": "Không có mô hình khả dụng", + "otherModels": "Mô hình khác", + "imageInput": "Hỗ trợ đầu vào hình ảnh", + "thinking": "Chế độ suy nghĩ", + "reasoning": { + "auto": "Tự động", + "none": "Tắt", + "minimal": "Tối thiểu", + "low": "Thấp", + "medium": "Trung bình", + "high": "Cao" + } + }, + "providerQuota": { + "title": "Nhà cung cấp Homarr", + "communityWorkshop": "Workshop cộng đồng", + "dailyAllowance": "Hạn mức yêu cầu hằng ngày", + "remainingLabel": "Còn {remaining} trên {limit} yêu cầu của nhà cung cấp Homarr", + "loading": "Đang tải hạn mức nhà cung cấp Homarr", + "signInRequired": "Yêu cầu đăng nhập Workshop cho nhà cung cấp Homarr", + "signInDescription": "Đăng nhập bằng GitHub qua Workshop cộng đồng để nhận hạn mức hằng ngày riêng của bạn.", + "exhaustedDescription": "Bạn đã sử dụng hết hạn mức nhà cung cấp Homarr hôm nay. Hạn mức sẽ đặt lại vào nửa đêm UTC.", + "unavailableDescription": "Đăng nhập Workshop hoặc chờ hạn mức nhà cung cấp Homarr được đặt lại.", + "signIn": "Đăng nhập bằng GitHub", + "signInError": "Đăng nhập GitHub thất bại. Hãy thử lại sau ít phút.", + "loadError": "Không thể tải hạn mức nhà cung cấp Homarr.", + "reset": "Đặt lại {relative} lúc ", + "toolCalls": "Mỗi yêu cầu mô hình và lệnh gọi công cụ hoàn tất sử dụng một yêu cầu.", + "retry": "Tải lại hạn mức", + "level": { + "ok": "Đồng ý", + "warning": "Cảnh báo", + "bad": "Thấp", + "dead": "Đã sử dụng" + } + }, + "stop": "Dừng phản hồi", + "send": "Gửi tin nhắn", + "copy": "Sao chép phản hồi", + "copyMessage": "Sao chép tin nhắn", + "editMessage": "Chỉnh sửa tin nhắn", + "updateMessage": "Cập nhật tin nhắn", + "regenerate": "Tạo lại phản hồi", + "helpful": "Hữu ích", + "notHelpful": "Không hữu ích", + "readAloud": "Đọc phản hồi thành tiếng", + "stopReading": "Dừng đọc phản hồi", + "feedbackError": "Không thể lưu phản hồi của bạn. Hãy thử lại.", + "exportMarkdown": "Xuất dưới dạng Markdown", + "exportConversation": { + "action": "Xuất cuộc trò chuyện dưới dạng Markdown", + "failedTitle": "Không thể xuất cuộc trò chuyện", + "failedDescription": "Homarr không thể tải cuộc trò chuyện này. Hãy thử lại." + }, + "reasoning": "Đang suy nghĩ", + "previousResponse": "Phản hồi trước", + "nextResponse": "Phản hồi tiếp theo", + "removeAttachment": "Xóa tệp đính kèm", + "downloadFile": "Tải xuống {name}", + "attachedImage": "Hình ảnh đính kèm", + "externalImageBlocked": "Hình ảnh bên ngoài bị chặn vì quyền riêng tư", + "image": { + "loading": "Đang tải hình ảnh", + "failed": "Không thể tải hình ảnh này.", + "retry": "Thử lại hình ảnh" + }, + "quoteSelection": "Trích dẫn", + "dismissQuote": "Xóa trích dẫn", + "attachments": { + "add": "Đính kèm hình ảnh hoặc tài liệu", + "errorTitle": "Không thể thêm tệp đính kèm", + "imageUnsupported": "Mô hình đã chọn không hỗ trợ đầu vào hình ảnh." + }, + "mentions": { + "menu": "Thêm ngữ cảnh Homarr", + "context": "Ngữ cảnh", + "app": "Ứng dụng", + "integration": "Tích hợp", + "board": "Bảng", + "widget": "Tiện ích", + "tools": "Công cụ khả dụng" + }, + "markdown": { + "diagram": "Sơ đồ", + "renderingDiagram": "Đang kết xuất sơ đồ…", + "diagramUnavailable": "Không thể kết xuất sơ đồ này." + }, + "commands": { + "menu": "Lệnh Trợ lý", + "health": "Chuẩn bị kiểm tra tình trạng dịch vụ", + "explore": "Chuẩn bị tổng quan về phiên bản Homarr này", + "media": "Chuẩn bị tìm kiếm phương tiện", + "style": "Chuẩn bị thay đổi giao diện bảng hoặc CSS tùy chỉnh", + "designWidget": "Chuẩn bị xây dựng Tiện ích tùy chỉnh bằng một lời nhắc" + }, + "usage": { + "tokens": "mã thông báo", + "contextWindow": "Cửa sổ ngữ cảnh", + "requestDetails": "Chi tiết yêu cầu", + "used": "Bước mới nhất", + "remaining": "Còn lại", + "capacity": "Dung lượng", + "input": "Đầu vào", + "output": "Đầu ra", + "cached": "Đầu vào đã lưu trong bộ nhớ đệm", + "cacheWrite": "Ghi bộ nhớ đệm", + "reasoning": "Suy luận", + "inputShort": "vào", + "outputShort": "ra", + "cachedShort": "đã lưu trong bộ nhớ đệm", + "reasoningShort": "suy luận", + "firstOutput": "Đầu ra đầu tiên", + "homarrTiming": "Homarr ghi nhận", + "endToEnd": "Đầu-cuối", + "observedThroughput": "Thông lượng ghi nhận", + "providerTiming": "Do nhà cung cấp báo cáo", + "loadingProviderDetails": "Đang tải chi tiết tạo…", + "providerDetailsPending": "OpenRouter vẫn đang xử lý một số chi tiết tạo. Mở lại để thử lại.", + "providerLatency": "Độ trễ nhà cung cấp", + "generationTime": "Thời gian tạo", + "moderationLatency": "Kiểm duyệt", + "providerThroughput": "Thông lượng nhà cung cấp", + "fallbacks": "Phương án dự phòng", + "fallbackLatency": "Độ trễ phương án dự phòng", + "cacheDiscount": "Chiết khấu bộ nhớ đệm", + "normalizedTokens": "Đầu vào / đầu ra đã chuẩn hóa của OpenRouter", + "byok": "Tự mang khóa (BYOK)", + "cost": "Chi phí", + "reported": "Do nhà cung cấp báo cáo", + "estimated": "Ước tính từ giá mô hình", + "upstreamCost": "Suy luận thượng nguồn", + "webSearches": "Tìm kiếm web", + "finishReason": "Lý do kết thúc", + "notReported": "Chưa báo cáo", + "agentSteps": "Các bước của tác nhân", + "step": "Bước {number}", + "generation": "Sinh nội dung" + }, + "toolInput": "Đầu vào", + "toolOutput": "Đầu ra", + "toolActivity": { + "iconSearch": "Đang tìm biểu tượng “{query}”", + "iconBrowse": "Đang duyệt các biểu tượng khả dụng" + }, + "toolNavigation": { + "openPreview": "Mở bản xem trước", + "openWidget": "Mở tiện ích" + }, + "webSearch": { + "title": "Tìm kiếm trên web", + "completed": "OpenRouter đã tìm kiếm web trực tiếp cho phản hồi này.", + "searches": "{count, plural, other {# lượt tìm kiếm}}", + "sources": "{count, plural, other {# nguồn}}" + }, + "responseError": { + "title": "Trợ lý không thể hoàn tất", + "description": "Hãy thử lại. Nếu sự cố vẫn tiếp diễn, hãy yêu cầu quản trị viên xác minh điểm cuối mô hình đã cấu hình." + }, + "toolPreparationError": { + "title": "Không thể chuẩn bị yêu cầu này", + "description": "Mô hình đã dừng trước khi cung cấp đầy đủ thông tin. Hãy thử lại phản hồi hoặc mô tả lại yêu cầu. Không có thay đổi nào được thực hiện." + }, + "busy": { + "title": "Trợ lý đang bận xử lý", + "description": "Hãy chờ phản hồi hiện tại hoặc mở phản hồi đó để dừng tiến trình." + }, + "pendingAction": { + "answerTitle": "Cần có câu trả lời", + "answerFallback": "Chọn câu trả lời để tiếp tục", + "formTitle": "Xem xét chi tiết ứng dụng", + "boardFormTitle": "Xem xét các thay đổi của bảng", + "review": "Xem xét", + "sendBlocked": "Giải quyết yêu cầu đang chờ trước khi gửi" + }, + "activity": { + "thinking": "Trợ lý đang suy nghĩ", + "working": "Đang xử lý lời nhắc của bạn", + "ready": "Phản hồi đã sẵn sàng", + "completed": "Mở phản hồi", + "approval": "Cần phê duyệt", + "failed": "Trợ lý cần được chú ý", + "expand": "Mở phản hồi của trợ lý", + "dismiss": "Bỏ qua hoạt động của trợ lý" + }, + "scrollToLatest": "Cuộn đến mới nhất", + "refresh": { + "action": "Làm mới chế độ xem hiện tại", + "working": "Đang làm mới chế độ xem hiện tại", + "completeTitle": "Đã làm mới chế độ xem", + "completeDescription": "Dữ liệu Homarr hiển thị đã được tải lại.", + "failedTitle": "Không thể làm mới chế độ xem", + "failedDescription": "Thay đổi có thể vẫn đã được lưu. Hãy thử lại thao tác làm mới." + }, + "askUser": { + "preparing": "Đang chuẩn bị câu hỏi", + "answered": "Câu trả lời của bạn", + "other": "Khác", + "otherLabel": "Câu trả lời của bạn", + "otherPlaceholder": "Nhập câu trả lời khác…", + "submit": "Gửi câu trả lời", + "cancelOther": "Hủy câu trả lời khác", + "optionKind": { + "affirmative": "Xác nhận", + "negative": "Từ chối", + "alternative": "Tùy chọn", + "custom": "Tùy chỉnh" + } + }, + "configureApp": { + "title": "Xem xét chi tiết ứng dụng", + "description": "Chọn biểu tượng cục bộ và điều chỉnh mọi thứ trước khi trợ lý yêu cầu phê duyệt tạo ứng dụng.", + "preparing": "Đang chuẩn bị chi tiết ứng dụng", + "continue": "Sử dụng các chi tiết này", + "ready": "Chi tiết ứng dụng đã sẵn sàng", + "automaticContinue": "Tự động sử dụng các chi tiết ứng dụng này" + }, + "configureBoardSettings": { + "title": "Xem xét các thay đổi của bảng", + "loading": "Đang tải cài đặt bảng hiện tại", + "loadErrorTitle": "Không thể tải cài đặt bảng", + "loadErrorDescription": "Bảng có thể không còn tồn tại hoặc bạn không có quyền sửa đổi bảng.", + "proposedCount": "Trợ lý đã đề xuất {count} trường", + "changeCount": "Đã sẵn sàng {count} thay đổi", + "ready": "Các thay đổi của bảng đã sẵn sàng", + "cancelled": "Đã giữ lại cài đặt bảng hiện tại", + "noChanges": "Không có cài đặt nào sẽ thay đổi", + "keepCurrent": "Giữ cài đặt hiện tại", + "continue": "Tiếp tục phê duyệt", + "automaticContinue": "Tự động chấp nhận các thay đổi bảng được đề xuất", + "resetAll": "Đặt lại tất cả thay đổi", + "tabs": { + "css": "CSS tùy chỉnh", + "appearance": "Hiển thị", + "background": "Hình nền", + "general": "Chung" + }, + "cssDescription": "Chỉnh sửa toàn bộ biểu định kiểu. Các quy tắc hiện có sẽ được giữ lại trừ khi bị xóa tại đây.", + "cssCharacters": "{count} trên 16384 ký tự", + "copyCss": "Sao chép CSS", + "copied": "Đã sao chép", + "restoreCss": "Khôi phục CSS hiện tại", + "remoteCssTitle": "CSS này tải một tài nguyên từ xa", + "remoteCssDescription": "Các biểu định kiểu đã nhập và URL từ xa sẽ liên hệ với máy chủ khác khi bảng tải. Hãy xem xét chúng trước khi tiếp tục." + }, + "configureWidget": { + "title": "Xem xét tiện ích", + "preparing": "Đang chuẩn bị cài đặt tiện ích", + "review": "Xem xét tiện ích và các tích hợp", + "ready": "Cấu hình tiện ích đã sẵn sàng", + "cancelled": "Tiện ích chưa được thêm", + "automaticContinue": "Tự động chấp nhận cấu hình tiện ích được đề xuất", + "definitionLoadErrorTitle": "Không thể tải cài đặt tiện ích", + "definitionLoadErrorDescription": "Homarr không thể tải cài đặt của tiện ích này. Hãy thử lại.", + "loadErrorTitle": "Không thể tải các tích hợp", + "loadErrorDescription": "Homarr không thể tải các tích hợp khả dụng cho tiện ích này.", + "noIntegrationTitle": "Cần có tích hợp tương thích", + "noIntegrationDescription": "Hãy cấu hình một tích hợp được tiện ích này hỗ trợ trước khi thêm tiện ích vào bảng điều khiển.", + "connectIntegration": "Kết nối dịch vụ", + "manageIntegrations": "Quản lý các tích hợp", + "skip": "Không thêm", + "errorTitle": "Không thể chuẩn bị cài đặt tiện ích", + "errorDescription": "Mô hình không cung cấp cấu hình tiện ích hoàn chỉnh. Không có tiện ích nào được thêm." + }, + "approvalRequired": "Yêu cầu phê duyệt", + "complete": "Hoàn tất", + "denied": "Bị từ chối", + "failed": "Không thành công", + "working": "Đang thực hiện", + "approvalDescription": "Xem xét thay đổi này trước khi chạy.", + "approveAndRun": "Phê duyệt và chạy", + "deny": "Từ chối", + "autoApproval": { + "label": "Phê duyệt tự động", + "composerLabel": "Phê duyệt thay tôi", + "title": "Phê duyệt tự động", + "description": "Tự động chuẩn bị biểu mẫu và phê duyệt các thay đổi được bảo vệ cho cuộc trò chuyện này. Các câu hỏi vẫn chờ câu trả lời của bạn và quyền Homarr của bạn vẫn được áp dụng. Tính năng này sẽ tắt khi bạn chuyển cuộc trò chuyện.", + "enable": "Bật cho cuộc trò chuyện này", + "disable": "Tắt phê duyệt tự động", + "enabled": "Phê duyệt tự động đang bật", + "approving": "Đang phê duyệt tự động" + } } } diff --git a/packages/translation/src/lang/zh.json b/packages/translation/src/lang/zh.json index 01dce3411..ef090d9bc 100644 --- a/packages/translation/src/lang/zh.json +++ b/packages/translation/src/lang/zh.json @@ -1,156 +1,246 @@ { "init": { - "step": { - "start": { - "title": "歡迎使用 Homarr", - "subtitle": "讓我們開始設定 Homarr", - "description": "請選擇設定 Homarr 方式", - "action": { - "scratch": "重新開始", - "importOldmarr": "從 1.0 版本的 Homarr 匯入設定", - "restoreSqlite": "從 SQLite 備份還原", - "restoreSqliteDescription": "上傳先前 Homarr 執行個體的完整 SQLite 資料庫備份。這將還原所有面板、使用者、應用程式、整合和設定。", - "backToOptions": "← 返回設定選項" + "studio": { + "navigationLabel": "入門區段", + "back": "返回", + "buildBoard": "建立我的面板", + "common": { + "unknownError": "發生錯誤。您的選擇仍保留在此,請再試一次。" + }, + "claim": { + "checking": "正在保護此初始設定工作階段……", + "checkingTitle": "正在準備安全設定", + "lockedTitle": "設定已在其他瀏覽器中開啟", + "lockedDescription": "請在該處繼續,或等待其安全的首次執行工作階段過期後再試一次。", + "signInTitle": "需要管理員登入", + "signInDescription": "管理員已存在。請登入以繼續設定,無須公開憑證或服務存取權。", + "signIn": "登入並繼續", + "errorTitle": "設定無法受到保護", + "errorDescription": "重新載入頁面以重試安全的首次執行工作階段。" + }, + "navigation": { + "essentials": "必要項目", + "discover": "探索", + "connect": "連線", + "board": "面板", + "extend": "擴充", + "review": "預覽" + }, + "welcome": { + "title": "歡迎回家。", + "description": "歡迎使用 Homarr v{version}。我們將引導您了解必要項目,並協助您建立第一個面板。", + "start": "開始使用", + "restore": "還原備份", + "restoreTitle": "從備份還原", + "restoreDescription": "完整的 SQLite 備份會還原面板、人員、應用程式、整合和設定。Homarr 會先驗證備份,再替換任何內容。", + "errorTitle": "設定無法開始", + "errorDescription": "您的設定選擇仍保留在此。請再試一次;如果問題持續發生,請重新載入頁面。" + }, + "account": { + "title": "建立您的管理員帳戶", + "description": "指定管理員的使用者憑證", + "username": "管理員使用者名稱", + "passwordHint": "只需要符合至少 8 個字元的要求。其他密碼強度檢查僅供參考。", + "create": "建立管理員", + "errorTitle": "無法建立管理員", + "recoveryTitle": "已建立管理員帳戶", + "recoveryDescription": "自動登入未完成。請使用剛建立的管理員憑證登入,以繼續設定。", + "recoveryAction": "登入並繼續", + "unknownError": "無法建立管理員。" + }, + "externalGroup": { + "title": "連線您的管理員群組", + "description": "請使用 LDAP 或 OIDC 傳送的完整群組名稱。此群組的成員將取得管理員存取權。", + "name": "外部管理員群組", + "nameDescription": "此名稱區分大小寫,且必須符合您的身分識別提供者。", + "continue": "儲存群組並繼續", + "errorTitle": "無法儲存群組", + "unknownError": "無法儲存管理員群組。" + }, + "essentials": { + "title": "從熟悉的預設值開始", + "description": "先設定所有人看到的語言和外觀,然後提供服務所使用的位址模式給 Homarr。", + "language": "預設語言", + "theme": "預設佈景主題", + "themeAuto": "系統", + "themeLight": "日間", + "themeDark": "暗黑", + "serverOriginHelp": "Homarr 會使用此位址預先填入偵測到的服務 URL。您仍可個別編輯每項服務。", + "serverDescription": "這是捷徑,而非限制。每項偵測到的服務仍可編輯。", + "serverOrigin": "網域、IP 或反向代理路徑", + "serverOriginDescription": "範例:home.lan、192.168.1.10 或 https://home.example.com/services。請選擇下方附加各項服務的方式。", + "analytics": "分享匿名產品分析資料", + "analyticsDescription": "協助 Homarr 提升功能可靠性。不會傳送服務憑證或儀表板內容。" + }, + "discover": { + "title": "查看此安裝實際能存取的內容", + "description": "Homarr 會就地檢查功能。缺少 Docker 通訊端或 Kubernetes 內容不會阻礙手動設定。", + "database": "資料庫", + "docker": "Docker 和相容的通訊端", + "kubernetes": "Kubernetes", + "assistantWorkshop": "助理與工作坊", + "found": "找到 {integrations} 個整合和 {apps} 個其他應用程式", + "retryKubernetes": "再次檢查 Kubernetes", + "retryWorkshop": "再次檢查工作坊", + "unknownVersion": "未知版本", + "kubernetesAvailable": "已連線至 Kubernetes {version}", + "kubernetesDisabled": "未啟用;請繼續使用 Docker 或手動服務", + "kubernetesUnavailable": "Kubernetes 已啟用,但無法從此 Homarr 程序存取", + "workshopAvailable": "可存取社群工作坊和託管的助理服務", + "workshopUnavailable": "本機和自訂助理提供者仍可使用", + "partialTitle": "部分來源無法掃描", + "partialDescription": "已保留可存取主機的結果。請檢查通訊端權限,或在下一節手動新增服務。", + "status": { + "checking": "正在檢查可用性……", + "available": "待定", + "partial": "部分可用", + "empty": "可存取,但沒有符合的執行中服務", + "disabled": "已由伺服器設定停用", + "unavailable": "無法從此 Homarr 程序存取" } }, - "import": { - "title": "匯入數據", - "subtitle": "從現有的 Homarr 匯入數據", - "dropzone": { - "title": "將 ZIP 壓縮檔拖曳至此處或點擊瀏覽", - "description": "上傳的壓縮檔將被處理,您可以選擇要匯入的內容" + "connect": { + "title": "連線讓面板實用的內容", + "description": "一次選取多項服務。Docker 標籤優先,映像檔比對會填補缺漏,而每個 URL 和憑證都可供檢查。", + "discoveredIntegrations": "已偵測到的整合執行個體 ({count})", + "detectedIntegrationLabel": "匯入 {name},偵測為 {kind}", + "detectedAppLabel": "匯入偵測到的應用程式 {name}", + "otherIntegrations": "新增其他整合", + "configureIntegrations": "設定整合", + "discoveredApps": "已偵測到的應用程式 ({count})", + "appAddressRequired": "請為 {name} 新增位址,或將其從選取項目中移除。", + "empty": "未選取任何整合。Homarr 仍會建立包含一般小工具的實用入門面板。", + "dockerSource": "Docker", + "manualSource": "手動", + "url": "服務 URL", + "noCredentials": "沒有憑證", + "noCredentialsDescription": "此整合不需要憑證。", + "credentialMethod": "憑證方式", + "getApiKey": "開啟此服務的 API 金鑰設定", + "openGuide": "開啟 Homarr 此服務的設定指南", + "testConnection": "測試連線", + "testSuccess": "連線成功", + "testSuccessDescription": "Homarr 已使用目前的位址和憑證連線。", + "testError": "連線失敗", + "testErrorDescription": "請檢查服務位址和憑證,然後再試一次。", + "needsConfiguration": "需要設定", + "tested": "連線已測試", + "testFailed": "連線測試失敗", + "incompleteConfirmation": "未完成的整合將會略過。要在沒有這些整合的情況下繼續嗎?" + }, + "board": { + "title": "在建立面板前先規劃其外觀", + "description": "Homarr 會建立受保護的 Mobile 和 Base 版面配置,然後放置您所選服務中的應用程式和相容小工具。", + "target": "要設定的面板", + "targetDescription": "選擇此設定應更新的確切現有面板。", + "targetPlaceholder": "選取面板", + "targetRequired": "請先選取要設定的面板,再繼續操作。", + "name": "面板名稱", + "nameDescription": "用於面板 URL;僅限字母、數字、連字號和底線。", + "nameRequired": "請先輸入面板名稱再繼續。", + "primaryColor": "主體色", + "secondaryColor": "輔助色", + "resetColors": "重設顏色", + "radius": "小工具圓角半徑", + "radiusOptions": { + "xs": "緊密", + "sm": "微妙", + "md": "平衡", + "lg": "圓潤", + "xl": "柔和" }, - "fileInfo": { - "action": { - "change": "更改檔案" - } + "columns": "面板欄數", + "columnsDescription": "欄數定義用於調整項目大小和位置的水平網格。對大多數人來說,12 欄已經足夠。", + "columnCount": "{count, plural, other {# 欄}}", + "leftSidebar": "左側邊欄", + "rightSidebar": "右側邊欄", + "previewLabel": "第一個面板版面的即時預覽" + }, + "extend": { + "title": "進階功能", + "tabsLabel": "助理、Workshop 與 MCP 設定", + "assistant": "助理", + "workshop": "需要管理員登入", + "assistantSetup": { + "loginTitle": "需要管理員登入", + "loginDescription": "供應商金鑰與模型存取權限屬於特權功能。完成設定並登入後,Homarr 將直接開啟助理設定。", + "loginAction": "登入以設定助理" }, - "importSettings": { - "title": "匯入設定", - "description": "設定匯入方式" + "workshopSetup": { + "title": "Homarr 工作坊", + "description": "瀏覽社群自訂小工具、檢視其要求的功能、安裝小工具,並發佈您自己的作品,無需在伺服器之間複製程式碼。", + "available": "待定", + "checking": "檢查中……", + "unavailable": "無法使用", + "discoverTitle": "探索", + "discoverDescription": "尋找為實際自託管工作流程打造的小工具。", + "installTitle": "檢視並安裝", + "installDescription": "在新增任何內容前檢視中繼資料和設定。", + "publishTitle": "分享", + "publishDescription": "將可重複使用的小工具發佈回社群。", + "browse": "瀏覽 Workshop" }, - "boardSelection": { - "title": "找到 {count} 個面板", - "description": "選擇要匯入的面板", - "action": { - "selectAll": "選擇全部", - "unselectAll": "取消全選" - } - }, - "summary": { - "title": "匯入概況", - "description": "於下方的概況中,可以看到即將匯入的內容", - "action": { - "import": "確認匯入並繼續" - }, - "entities": { - "apps": "應用程式", - "boards": "面板", - "integrations": "集成", - "credentialUsers": "使用者憑證" - } - }, - "tokenModal": { - "title": "輸入匯入密鑰", - "field": { - "token": { - "label": "密鑰", - "description": "輸入之前 Homarr 中顯示導入之密鑰匙" - } - }, - "notification": { - "error": { - "title": "無效密鑰", - "message": "輸入的密鑰無效" - } - } + "mcpSetup": { + "title": "Homarr MCP", + "description": "將 Claude、Codex 或其他 MCP 用戶端連線至 Homarr 的類型化工具。API 金鑰可讓存取權限明確且可撤銷。", + "endpoint": "可串流的 HTTP 端點", + "keyTitle": "立即複製此金鑰", + "keyDescription": "為了安全起見,Homarr 無法再次顯示此 API 金鑰。", + "copyKey": "複製 API 金鑰", + "createKey": "建立 MCP API 金鑰", + "errorTitle": "無法建立 MCP API 金鑰", + "loginRequired": "設定完成後,請以管理員身分登入以建立 API 金鑰。", + "configuration": "用戶端設定", + "copy": "複製設定", + "copied": "已複製", + "advanced": "開啟 MCP 工具、權限和設定詳細資料" } }, - "user": { - "title": "管理員", - "subtitle": "指定管理員的使用者憑證", - "notification": { - "success": { - "title": "創建使用者", - "message": "使用者已成功創建" - }, - "error": { - "title": "使用者創建失敗" - } - } - }, - "group": { - "title": "外部使用者", - "subtitle": "指定用於外部使用者的用戶組", - "form": { - "name": { - "label": "用戶組名稱", - "description": "名稱必須與外部提供者的管理員匹配" - } - } - }, - "settings": { - "title": "設定", - "subtitle": "設定伺服器的設定" - }, - "integrations": { - "title": "整合", - "subtitle": "選取你使用的服務。", - "description": "選擇你要連接的整合。我們將會自動為你的儀表板設定相符的小工具。", - "action": { - "continue": "繼續", - "skip": "暫時略過" - }, - "configure": { - "progress": "{current}/{total}", - "skip": "略過此整合", - "finishing": "正在設定你的儀表板……", - "error": { - "title": "設定失敗", - "message": "設定儀表板時發生錯誤。請再試一次。" - }, - "helpers": { - "tooltip": "URL 幫手", - "description": "這些幫手會嘗試猜測你的服務 URL。如果無效,請手動輸入位址。" - } - }, - "urlTemplate": { - "label": "基礎 URL", - "placeholder": "homelab.local 或 192.168.1.1", - "hint": "輸入你的基礎網域或 IP 以自動填寫整合 URL", - "warning": "現在設定你的基礎 URL 將會自動填寫所有整合 URL,在設定過程中節省你的時間", - "preview": "例如 {example}", - "mode": { - "subdomain": "子網域", - "hostPort": "主機:連接埠" - } - }, - "docker": { - "detected": "Docker 偵測到 {count} 個服務", - "detectedBreakdown": "{integrations} 個整合 · {apps} 個應用程式", - "summary": "Homarr 偵測到 {apps} 個應用程式,其中 {integrations} 個具有內建整合", - "appBadge": "應用程式", - "appSectionLabel": "要新增至儀表板的應用程式(已選取 {count} 個)", - "scanning": "正在掃描 Docker……", - "scanningDescription": "正在尋找系統上執行的容器" + "review": { + "title": "以您的服務為核心打造的單一面板", + "description": "Homarr 會測試未儲存的連線、匯入選取的應用程式、套用外觀和版面配置,然後開啟其設定的確切面板。", + "board": "第一個面板", + "columns": "面板欄數", + "columnsValue": "{count, plural, other {# 欄}}", + "sidebars": "側邊欄", + "sidebarsValue": "", + "layouts": "響應式佈局", + "layoutsValue": "行動版 + 基本版", + "integrations": "集成", + "integrationsValue": "", + "apps": "應用程式圖塊", + "appsValue": "", + "language": "語言", + "theme": "佈景主題", + "themeAuto": "系統偏好設定", + "themeLight": "日間", + "themeDark": "暗黑", + "colors": "面板顏色", + "radius": "小工具圓角", + "automaticTitle": "Homarr 將建立的內容", + "automaticDescription": "相容的小工具、圖示、應用程式連結、整合關係和回應式配置來自共用的 Homarr 目錄。您稍後可以編輯每項結果。", + "dockerWarningTitle": "設定期間部分 Docker 標籤已變更", + "dockerWarningDescription": "{count, plural, other {# 個選取的 Docker 結果無法套用,因為其服務已變更、指定了其他面板,或其小工具不相容。}}。", + "errorTitle": "無法建立面板", + "progress": { + "applying": "正在測試連線並建立您的面板", + "done": "您的面板已準備就緒" } }, "finish": { - "title": "設定完成", - "subtitle": "已設定完成", - "description": "已成功完成設定,開始使用 Homarr,請選擇下一步操作", - "action": { - "goToBoard": "進入 {name} 面板", - "createBoard": "創建第一個面板", - "inviteUser": "邀請其他使用者", - "docs": "閱讀說明書" - } + "title": "您的第一個面板已準備就緒。", + "description": "Homarr 已連線您選取的元件,並保留其餘內容供您編輯。現在開啟面板;產品內的簡短導覽可向您展示編輯模式、小工具、版面配置和搜尋功能。", + "openBoard": "開啟我的面板", + "manageTitle": "管理", + "manageDescription": "微調應用程式、整合、面板、使用者和伺服器設定。", + "workshopTitle": "工作坊", + "workshopDescription": "探索並安裝社群自訂小工具。", + "docsTitle": "瞭解 Homarr", + "docsDescription": "閱讀面板、小工具、整合和工具的專題指南。" } - }, - "backToStart": "返回起點" + } }, "user": { - "title": "使用者", "name": "使用者", "page": { "login": { @@ -159,12 +249,10 @@ }, "invite": { "title": "加入 Homarr", + "titleWithAppName": "加入 {appName}", "subtitle": "歡迎來到 Homarr!請創建帳戶", + "subtitleWithAppName": "歡迎來到 {appName}!請建立您的帳戶", "description": "您受到 {username} 的邀請" - }, - "init": { - "title": "新建 Homarr 安裝", - "subtitle": "請創建初始管理員" } }, "field": { @@ -192,12 +280,17 @@ "previousPassword": { "label": "過去的密碼" }, - "homeBoard": { - "label": "主面板" - }, "pingIconsEnabled": { "label": "為 Pings 使用 icon" }, + "byteUnitSystem": { + "label": "資料大小單位", + "description": "選擇 Homarr 顯示位元組大小和位元組速率的方式。位元速率一律使用十進位單位。", + "options": { + "binary": "二進位", + "decimal": "十進位" + } + }, "enableRightClickOnWidgets": { "label": "啟用小工具右鍵選單", "description": "在右鍵點擊小工具時顯示 Homarr 的上下文選單。停用以使用瀏覽器的預設選單 (例如「在新分頁中開啟連結」)。" @@ -247,7 +340,6 @@ } } }, - "create": "創建使用者", "changePassword": { "label": "更改密碼", "notification": { @@ -259,56 +351,6 @@ } } }, - "changeHomeBoard": { - "notification": { - "success": { - "message": "主面板已更改成功" - }, - "error": { - "message": "無法更改主面板" - } - } - }, - "changeSearchPreferences": { - "notification": { - "success": { - "message": "搜尋設定更改成功" - }, - "error": { - "message": "無法更改搜尋設定" - } - } - }, - "changeFirstDayOfWeek": { - "notification": { - "success": { - "message": "成功編輯一周的第一天" - }, - "error": { - "message": "無法編輯一周的第一天" - } - } - }, - "changePingIconsEnabled": { - "notification": { - "success": { - "message": "Pings icon 切換成功" - }, - "error": { - "message": "無法切換 Pings icon" - } - } - }, - "changeDdgBangs": { - "notification": { - "success": { - "message": "DuckDuckGo bangs 切換成功" - }, - "error": { - "message": "無法切換 DuckDuckGo bangs" - } - } - }, "manageAvatar": { "changeImage": { "label": "更改圖案", @@ -338,16 +380,6 @@ } } }, - "editProfile": { - "notification": { - "success": { - "message": "數據更新成功" - }, - "error": { - "message": "數據無法更新" - } - } - }, "delete": { "label": "永久移除使用者", "description": "移除此使用者,包括其偏好設定,這不會移除任何面板,且用戶不會收到通知", @@ -356,18 +388,13 @@ "select": { "label": "選擇使用者", "notFound": "使用者不存在" - }, - "transfer": { - "label": "選擇新的所有者" } } }, "group": { - "title": "用戶組", "name": "組", "search": "尋找用戶組", "field": { - "name": "名稱", "members": "成員", "homeBoard": { "label": "主面板", @@ -388,6 +415,19 @@ } } }, + "custom-widget": { + "title": "自訂小工具", + "item": { + "manage": { + "label": "管理自訂小工具", + "description": "允許成員建立、編輯和刪除自訂小工具定義" + }, + "secret-write": { + "label": "設定自訂小工具密鑰", + "description": "允許成員及其 API 金鑰設定加密的自訂小工具認證資料" + } + } + }, "app": { "title": "應用程式", "item": { @@ -493,6 +533,35 @@ "description": "允許使用者管理、移除任何搜尋引擎" } } + }, + "matrix": { + "none": "無存取權", + "impliedHint": "另授予:{permissions}", + "grantedViaAdmin": "管理員已擁有此權限。將管理員設定為「無存取權」以個別設定。", + "preset": { + "label": "預設集", + "viewer": "檢視者", + "viewerDescription": "唯讀:檢視面板和媒體,使用現有的應用程式和整合。", + "editor": "編輯者", + "editorDescription": "日常管理:建立和編輯面板、應用程式、整合和搜尋引擎。", + "admin": "管理員", + "adminDescription": "不受限制地存取所有功能和設定,包括使用者管理。", + "custom": "自訂" + }, + "effective": { + "title": "有效權限", + "description": "此群組成員可執行的完整、不重複操作集合,包括間接授予的權限。", + "empty": "未選取權限" + }, + "noneDescription": "成員無法存取此區域。", + "level": { + "view": "檢視", + "use": "使用", + "interact": "互動", + "modify": "修改", + "full": "完整" + }, + "capabilityIncluded": "已包含在「{level}」中" } }, "memberNotice": { @@ -607,21 +676,24 @@ "search": "尋找應用程式", "page": { "list": { - "title": "應用程式", + "ariaLabel": "已設定的應用程式", "noResults": { "title": "尚無應用程式", - "action": "創建第一個應用程式" + "description": "應用程式是您希望放在面板上的服務和工具連結。", + "action": "創建第一個應用程式", + "filteredTitle": "沒有應用程式符合您的搜尋", + "filteredDescription": "沒有應用程式符合「{search}」。請嘗試其他名稱或 URL。", + "createOnlyTitle": "您只能新增應用程式", + "createOnlyDescription": "您的權限允許您建立應用程式,但無法瀏覽現有應用程式。請向管理員要求應用程式管理權限,以查看完整清單。" } }, "create": { "title": "創建應用程式", "notification": { "success": { - "title": "創建成功", "message": "應用程式已創建成功" }, "error": { - "title": "創建失敗", "message": "應用程式無法創建" } } @@ -630,11 +702,9 @@ "title": "編輯應用程式", "notification": { "success": { - "title": "應用程式編輯成功", "message": "應用程式儲存成功" }, "error": { - "title": "無法更改", "message": "應用程式無法儲存" } } @@ -644,26 +714,18 @@ "message": "確認移除此應用程式 {name} 嗎?", "notification": { "success": { - "title": "移除成功", "message": "應用程式已移除成功" }, "error": { - "title": "移除失敗", "message": "無法移除應用程式" } } } }, "field": { - "name": { - "label": "名稱" - }, "description": { "label": "描述" }, - "url": { - "label": "網址" - }, "useDifferentUrlForPing": { "checkbox": { "label": "使用不同的 URL 進行 Ping", @@ -678,34 +740,582 @@ "search": "搜尋應用程式", "noResults": "無結果", "action": "選擇 {app}", - "title": "選擇應用程式加入進此面板" + "title": "選擇應用程式加入進此面板", + "toggle": "點選以選取", + "selected": "已選取", + "multiple": "新增 {count}", + "selectedCount": "{count, plural, other {已選取 # 個}}", + "appsSelected": "{count, plural, other {已選取 # 個應用程式}}", + "selectMultiple": "選取多個", + "cancelMultiple": "退出多重選取", + "customApplication": "自訂應用程式", + "application": "應用程式" }, "create": { "title": "建立新應用程式", "description": "建立一個新的應用程式", "action": "開啟應用程式創建" + } + } + }, + "tips": { + "dismiss": "關閉提示", + "multiSelectApps": "提示:按住 Ctrl / ⌘ 可一次選取多個應用程式" + }, + "customWidget": { + "secretEntry": { + "title": "設定 API 來源", + "description": "確認伺服器 URL 並輸入認證資料。密鑰值由 Homarr 加密,且永遠不會回傳給請求代理程式。", + "loading": "正在載入安全請求……", + "applying": "正在套用此設定…請保持此頁面開啟。", + "saved": "API 來源已設定。您可以關閉此頁面。", + "unavailable": "請求無法使用", + "saveError": "無法設定 API 來源", + "source": "API 來源:{name}", + "baseUrl": "伺服器 URL", + "networkScope": "網路存取", + "save": "儲存 API 設定", + "expires": "此一次性請求將於 {time} 到期。" + }, + "page": { + "list": { + "noResults": "尚無自訂小工具。建立您的第一個!", + "noDescription": "沒有描述", + "enabled": "已啟用", + "disabled": "已停用", + "disabledDescription": "此小工具仍會保留設定,但不會載入到任何面板。", + "requestCount": "{count, plural, other {# 個請求}}", + "invalidDefinition": "定義無效", + "migrationRequired": "需要移轉", + "migrationInstructions": "開啟「操作」以複製或匯出原始 v1 定義,手動重新建立。您也可以使用 LLM 的移轉提示。移轉後,現有的面板配置仍可正常運作。", + "missingCredentials": "{count, plural, other {缺少 # 個認證資料}}", + "missingCredentialsDescription": "{count, plural, other {此小工具仍需要 # 個認證資料。}}選取此徽章以設定 URL 和加密值。" }, - "add": "新增應用程式" + "create": { + "title": "建立自訂小工具", + "subtitle": "定義 API URL、驗證方式以及如何顯示回應資料。" + }, + "tabs": { + "ariaLabel": "自訂小工具區段", + "installed": "已安裝", + "workshop": "工作坊" + } + }, + "action": { + "pasteImportHint": "使用 Ctrl+V 或 Command+V 貼上完整的自訂小工具 JSON", + "delete": "刪除自訂小工具", + "deleteConfirm": "確定要刪除 \"{name}\" 嗎?此動作無法復原。", + "export": "匯出", + "duplicate": "複製", + "aiPrompt": "使用 AI 設計", + "copyAiPrompt": "複製 AI 提示", + "enable": "啟用", + "disable": "停用", + "menu": "動作", + "downloadSkill": "檢視自訂小工具技能", + "publishWorkshop": "發佈至 Workshop", + "migrate": "移轉自訂小工具", + "configureSources": "設定來源", + "copyLegacyDefinition": "複製原始小工具內容", + "exportLegacyDefinition": "匯出原始小工具內容", + "copyMigrationPrompt": "複製 LLM 移轉提示", + "pasteMigration": "貼上已移轉的小工具", + "importMigration": "匯入移轉後的 JSON 檔案" + }, + "sourceSetupDialog": { + "title": "設定小工具來源", + "description": "檢視此小工具的連線位置,並新增或取代其加密認證資料。", + "credentialsRequired": "在新增必要的認證資料前,請求將會失敗。", + "save": "儲存設定" + }, + "field": { + "description": "描述" + }, + "editor": { + "errorBoundary": { + "title": "發生錯誤" + }, + "action": { + "components": "元件", + "format": "格式化", + "insertStarter": "插入入門範例", + "redo": "重做", + "copied": "已複製", + "schema": "結構描述" + }, + "reference": { + "minimal": "最小範例", + "full": "完整範例" + }, + "componentReference": { + "search": "搜尋元件", + "empty": "沒有符合的元件", + "count": "可用的 {count, number} 個元件" + }, + "status": { + "errors": "{count, number} 個錯誤", + "warnings": "{count, number} 個警告", + "ready": "未發現問題", + "position": "第 {line, number} 行,第 {column, number} 列", + "characters": "{count, number} 個字元", + "charactersWithLimit": "{count, number} / {limit, number}" + }, + "diagnostics": { + "title": "範本診斷", + "line": "第 {line, number} 行", + "ast": "{value}", + "bindingTypeConflict": "輸入「{value}」由值類型不相容的控制項共用。", + "runtimeBindingTypeConflict": "輸入「{value}」同時繫結為 {firstType} 和 {secondType}。", + "dynamicRequestId": "必須使用字面值 requestId。不接受動態 request ID。", + "dynamicInputBinding": "bind 需要使用字面值輸入名稱。", + "inlineRequestProps": "網路元件接受 requestId 和 params;禁止使用內嵌的 URL、方法、標頭和本文屬性。", + "invalidRequestManifest": "具名請求必須是有效的請求對映。{value}", + "missingRequestId": "此網路元件需要字面值 requestId。", + "templateEmpty": "請輸入 JSX 範本。", + "templateTooLong": "範本超過 50,000 個字元的限制。", + "unknownRequest": "不存在 ID 為「{value}」的具名請求。" + } + }, + "workbench": { + "configure": "設定", + "sectionNavigation": "自訂小工具區段", + "widgetPreview": "小工具預覽", + "generalInformation": "一般資訊", + "invalidWidget": "無效的小工具", + "section": { + "general": "一般", + "sources": "API 來源", + "requests": "請求數", + "options": "選項", + "jsx": "JSX", + "preview": "預覽" + }, + "status": { + "unsaved": "未儲存編輯", + "invalid": "需要注意", + "ready": "準備" + }, + "saveError": { + "title": "小工具未儲存", + "description": "請修正這些驗證錯誤後再儲存。", + "more": "工作台中還顯示了 +{count} 個錯誤。", + "errors": "驗證錯誤", + "copy": "複製錯誤", + "copied": "錯誤已複製" + }, + "action": { + "preview": "測試並預覽", + "previewLoading": "正在測試請求" + }, + "requests": { + "title": "具名查詢和動作", + "label": "請求數", + "description": "查詢會載入資料;動作只會在使用者互動後執行。兩者都可使用任何 HTTP 方法。" + }, + "options": { + "title": "小工具選項" + }, + "builder": { + "advancedManifest": "進階原始資訊清單", + "advancedJson": "進階資訊清單 JSON", + "manifestFilename": "widget.json", + "request": "請求 {count, number}", + "requestId": "請求 ID", + "type": "下載器類型", + "method": "方法", + "source": "API 來源", + "run": "執行", + "runLoad": "小工具載入時", + "runManual": "來自 SubFetch", + "permission": "權限", + "path": "路徑", + "pathDescription": "小工具選項使用 '{option:name}',呼叫值使用 '{param:name}'。", + "requestDetails": "查詢、本文和行為", + "queryValues": "查詢值", + "queryKey": "查詢鍵", + "queryKeyInvalid": "請使用以字母開頭、只包含字母、數字、- 或 _ 的唯一 ID。", + "valueSource": "值來源", + "literal": "字面值", + "widgetOption": "小工具選項", + "invocationParameter": "呼叫參數", + "option": "選項", + "parameterName": "參數名稱", + "value": "值", + "removeQueryValue": "移除查詢值", + "addQueryValue": "新增查詢值", + "jsonBody": "JSON 本文", + "jsonBodyDescription": "選填。在任意深度插入 $option 和 $param 參照。", + "insertOptionReference": "插入選項參照", + "insertParameterReference": "插入參數參照", + "confirmation": "確認訊息", + "invalidation": "成功後重新整理", + "invalidationDescription": "以逗號分隔的查詢 ID", + "noAuth": "不使用來源驗證傳送", + "moveRequestUp": "將請求上移", + "moveRequestDown": "將請求下移", + "removeRequest": "移除請求", + "addRequest": "新增請求", + "optionName": "選項名稱", + "label": "標籤", + "control": "控制項", + "description": "描述", + "default": "預設值", + "optionDetails": "限制和動態選項", + "minimum": "最小值", + "maximum": "最大值", + "step": "步進值", + "choiceLabel": "選項標籤", + "choiceValue": "選項值", + "newChoice": "新選項", + "addChoice": "新增選項", + "removeChoice": "移除選項", + "choicesRequest": "從請求載入選項", + "itemsPath": "項目路徑", + "itemsPathPlaceholder": "項目(選填)", + "valuePath": "值路徑", + "labelPath": "標籤路徑", + "group": "用戶組", + "advancedOption": "進階選項", + "moveOptionUp": "將選項上移", + "moveOptionDown": "將選項下移", + "removeOption": "移除選項", + "addOption": "新增選項", + "invalidJson": "無效的 JSON", + "invalidWidget": "無效的小工具" + }, + "jsx": { + "title": "JSX 範本", + "label": "範本" + }, + "sources": { + "title": "API 來源和憑證", + "newName": "API {count, number}", + "duplicateSourceId": "API 來源 ID 必須是唯一的。", + "credentialRemoved": "憑證已移除", + "credentialRemovedDescription": "儲存的值已刪除。", + "primary": "主要 API", + "id": "來源 ID", + "name": "工作名稱", + "baseUrl": "基底 URL", + "baseUrlError": { + "invalid": "請輸入完整的 URL。", + "protocol": "請使用 HTTP 或 HTTPS URL。", + "credentials": "請從此 URL 移除使用者名稱和密碼,改在下方設定憑證。", + "queryOrFragment": "請從此基底 URL 移除查詢字串或片段,並將查詢值新增至具名請求。" + }, + "networkScope": "網路存取", + "authentication": "認證", + "headerName": "標頭名稱", + "queryParameter": "查詢參數", + "configured": "已設定 — 請輸入替代值", + "clear": "晴朗", + "remove": "移除來源及其請求", + "advanced": "進階", + "add": "新增其他 API 來源", + "sourceType": "集成", + "manualSource": "HTTP API", + "existingIntegration": "現有整合", + "integrationType": "整合類型", + "selectIntegration": "已設定的整合", + "noIntegrations": "沒有可用的相符整合", + "integrationUnavailable": "所選整合已不再可用。請選擇其他整合。", + "integrationDescription": "使用已儲存的整合 URL 和憑證。變更會自動套用。執行請求需要完整的整合存取權。" + }, + "ai": { + "title": "使用任何 AI 建立或修正", + "description": "如果有 API 文件 URL,請先新增。若要修正問題,請盡可能執行預覽。將提示複製到任何 AI;它可能會要求缺少的詳細資料。將其最終 JSON 貼到此處。", + "request": "您希望此小工具執行什麼操作?", + "documentationUrl": "API 文件 URL(選填)", + "paste": "貼上", + "response": "AI 回應", + "manualCopyDescription": "剪貼簿存取不可用。請選取下方提示並手動複製。", + "manualPasteDescription": "剪貼簿存取不可用,或複製的回應需要修正。請將 AI 的 JSON 回應貼到此處。", + "selectAll": "選擇全部", + "loadResponse": "載入回應", + "loaded": "小工具已載入編輯器", + "invalidResponse": "剪貼簿不包含有效的 v2 小工具", + "invalidResponseDetail": "AI 回應無效:{message}" + }, + "preview": { + "invalid": "請修正驗證錯誤以預覽此小工具。", + "fixtureError": "預覽固定資料錯誤", + "requestData": "請求資料", + "status": { + "idle": "尚未測試請求", + "loading": "正在測試請求", + "success": "所有載入請求皆成功", + "error": "一或多個載入請求失敗" + }, + "result": { + "loading": { + "title": "正在測試 API 請求", + "description": "Homarr 正在建立預覽工作階段並載入小工具資料。" + }, + "success": { + "title": "預覽就緒", + "description": "" + }, + "error": { + "title": "預覽完成,但請求發生錯誤", + "description": "{succeeded, number} 個成功、{failed, number} 個失敗。開啟「資料」以查看回應和錯誤詳細資料。" + } + }, + "instanceOptions": "執行個體選項", + "liveActions": "針對已設定的 API 執行動作", + "liveActionsDescription": "關閉是安全的模擬模式。開啟此選項會影響實際服務。", + "noActions": "未定義任何動作。", + "containedFailures": "執行階段錯誤會限制在此小工具內。請求日誌絕不會包含秘密值。", + "validation": { + "title": "驗證", + "ready": "小工具定義有效。" + }, + "accessibility": { + "title": "無障礙檢查", + "ready": "未偵測到常見的無障礙遺漏。", + "pending": "小工具定義有效後,才會執行無障礙檢查。", + "imageAlt": "為每個 Image 新增替代文字;只有裝飾性圖片可使用空白 alt。", + "actionIconLabel": "為每個 ActionIcon 新增 aria-label 或 title。", + "inputLabel": "為每個輸入欄位新增可見標籤或無障礙名稱。" + }, + "journal": "已遮蔽的請求日誌", + "actionParameters": "動作參數(JSON)", + "invalidParameters": "請使用宣告的字串、數字和布林值參數類型。", + "runDestructive": "執行破壞性動作", + "runAction": "執行动作", + "deleteConfirmation": "此預覽動作會透過已設定的 API 變更遠端資料。", + "simulated": "動作已模擬", + "httpStatus": "HTTP {status, number}", + "tab": { + "widget": "小工具", + "data": "資料", + "options": "選項", + "state": "工作狀態", + "actions": "控制", + "diagnostics": "診斷" + }, + "size": { + "compact": "精簡", + "standard": "標準", + "wide": "寬版" + }, + "fixture": { + "live": "即時", + "loading": "正在讀取", + "empty": "空", + "error": "錯誤" + } + } + }, + "preview": { + "request": { + "permission": { + "view": "檢視", + "modify": "修改", + "full": "完整" + } + } + }, + "notification": { + "created": "小工具 \"{name}\" 建立成功。", + "updated": "小工具 \"{name}\" 更新成功。", + "deleted": "小工具 \"{name}\" 已刪除。", + "imported": "小工具匯入成功。", + "migrated": "舊版小工具已成功遷移。現有面板配置現在使用 v2 定義。", + "migrationError": "舊版小工具遷移失敗。請確認檔案使用 homarr-custom-widget-v2 結構描述。", + "legacyDefinitionCopied": "已複製原始小工具內容。不包含儲存的憑證值。", + "legacyDefinitionCopyError": "複製原始小工具內容失敗。", + "migrationPromptCopied": "已複製遮蔽後的遷移提示。請將其貼到 LLM,複製其單一 JSON 回應,然後選擇「在此貼上已遷移的小工具」。", + "migrationPromptCopyError": "複製遷移提示失敗。", + "sourcesConfigured": "小工具來源和憑證已儲存。", + "sourceConfigurationError": "設定小工具來源失敗。", + "aiPromptCopiedWithCount": "AI 提示已複製到剪貼簿({count, number} 個字元)。", + "aiPromptCopyError": "無法將提示複製到剪貼簿。您的瀏覽器可能不支援此功能。", + "aiPromptSent": "提示已傳送。助理在背景處理時,您可以繼續編輯。", + "updateError": "更新小工具失敗。您的變更未被儲存。", + "importError": "匯入小工具失敗。請確保檔案是有效的自訂小工具 JSON 匯出。", + "exportError": "匯出小工具失敗。", + "duplicated": "小工具 \"{name}\" 已複製。", + "duplicateError": "複製小工具失敗。", + "toggleError": "切換小工具狀態失敗。", + "deleteError": "刪除小工具失敗。", + "previewError": "無法取得預覽。請檢查網址並重試。" + }, + "importReview": { + "title": "檢查自訂小工具匯入", + "description": "匯入前,請檢查此小工具連線的位置,以及其控制項需要哪些面板存取權。", + "migrationTitle": "檢查遷移後的 v2 替代項目", + "migrationDescription": "檢查並確認此產生的 v2 定義。確認後會以原子方式取代保留的 v1 記錄,同時讓現有面板配置繼續連結至相同的小工具 ID。", + "fileLabel": "選擇自訂小工具 JSON 檔案", + "name": "工作名稱", + "origin": "基底來源", + "authentication": "認證", + "networkScope": "網路範圍", + "methods": "HTTP 方法", + "permissions": "所需的面板權限", + "sourceSetup": { + "title": "設定 API 來源", + "description": "確認此小工具的連線位置並新增憑證。私人和迴路位址 URL 僅適用於您的 Homarr 安裝。", + "suggestedUrl": "建議的 URL", + "confirmUrl": "我確認此伺服器 URL 對我的 Homarr 安裝是正確的", + "ready": "URL 就緒", + "needsUrl": "確認 URL", + "credentialsMissing": "缺少憑證", + "credentialsOptional": "您可以在沒有憑證的情況下安裝並稍後設定,但在新增憑證前請求會失敗。" + }, + "actionWarning": { + "title": "此小工具可以變更遠端資料", + "description": "匯入後,請檢查每個具名動作、繼承的憑證和破壞性確認。檔案不包含秘密。" + }, + "cancel": "取消匯入", + "confirm": "匯入小工具", + "confirmMigration": "確認 v2 替代項目" + }, + "secret": { + "apiKey": "API 金鑰或權杖", + "username": "使用者名稱", + "password": "密碼", + "savedPlaceholder": "••••••• (已儲存,留空則保持不變)" + } + }, + "workshop": { + "title": "工作坊", + "browseWorkshop": "瀏覽 Workshop", + "openCommunity": "開啟 Workshop", + "openOnWorkshop": "在 Workshop 網站上開啟 {title}", + "back": "返回 Workshop", + "search": "搜尋小工具", + "searchCss": "搜尋 CSS 主題", + "sort": "排序", + "sortTop": "評分最高", + "sortNewest": "最新", + "listAriaLabel": "Workshop 小工具", + "listAriaLabelCss": "Workshop CSS 主題", + "empty": "沒有小工具符合此搜尋。", + "emptyDescription": "發佈至 Workshop 的社群小工具會顯示在此處。", + "emptyFilteredTitle": "沒有小工具符合此搜尋", + "emptyFilteredDescription": "沒有 Workshop 小工具符合「{search}」。", + "emptyCss": "沒有 CSS 主題符合此搜尋。", + "unavailableTitle": "Homarr Workshop 似乎無法使用", + "unavailable": "社群服務可能暫時停止運作。請稍後再試。您已安裝的小工具不受影響。", + "loadError": "無法載入此投稿。", + "noDescription": "沒有描述", + "author": "作者:{name}", + "communityMember": "社群成員", + "outdated": "已過時", + "outdatedWarning": "作者已將此投稿標記為過時。匯入前請仔細檢查。", + "score": "分數:{count, number}", + "upvote": "支持", + "downvote": "反對", + "voteError": "無法儲存投票。", + "signIn": "使用 GitHub 登入", + "signInError": "GitHub 登入失敗。請確認 Workshop OAuth 提供者已設定,且允許彈出視窗。", + "signOut": "登出", + "signInHint": "登入即可投票或檢舉。安裝不需要 Workshop 帳戶。", + "securityNotice": "Workshop 小工具可以呼叫其宣告的 API 來源,並使用您在本機設定的憑證執行宣告的動作。絕不會包含秘密。", + "securityNoticeCss": "社群 CSS 可以變更面板的外觀和可用性。匯入前請先檢查;在儲存面板設定前不會儲存任何內容。", + "install": "安裝", + "installReviewTitle": "安裝前檢查", + "installError": "無法安裝此小工具", + "installErrorDescription": "Workshop 投稿不是有效的自訂 JSX v2 小工具。", + "useCss": "匯入 CSS", + "importCss": "從 Workshop 匯入 CSS", + "importCssConfirm": "以「{title}」取代目前的自訂 CSS?在儲存面板設定前,不會儲存任何內容。", + "screenshotAlt": "{title} 螢幕截圖 {count, number}", + "screenshotViewer": "{title} 螢幕截圖檢視器", + "screenshotsLabel": "{title} 螢幕截圖", + "zoomScreenshot": "檢視完整大小", + "previousScreenshot": "上一張螢幕截圖", + "nextScreenshot": "下一張螢幕截圖", + "showScreenshotThumbnails": "顯示螢幕截圖縮圖", + "hideScreenshotThumbnails": "隱藏螢幕截圖縮圖", + "closeScreenshotViewer": "關閉螢幕截圖檢視器", + "technicalDetails": "技術詳細資料", + "sourceCode": "Workshop 項目", + "export": "匯出", + "report": "檢舉", + "reportTitle": "檢舉投稿", + "reportReason": "原因", + "reportExplanation": "Workshop 管理員需要知道什麼?", + "reportSend": "傳送檢舉", + "reportSent": "檢舉已傳送", + "reportSentDescription": "Workshop 管理員現在可以檢查此投稿。", + "reportCount": "{count, plural, other {# 個檢舉}}", + "reportWarning": "{count, plural, other {此投稿有 # 個未處理的社群檢舉。}} 投稿仍可安裝,但您應先檢查其內容。", + "reportVisibility": "檢舉詳細資料僅對此投稿的作者和 Workshop 管理員可見。", + "reportCategory": { + "outdated": "過時或不再運作", + "malicious": "惡意內容", + "spam": "垃圾內容", + "copyright": "著作權", + "inappropriate": "不當內容", + "other": "其他" + }, + "publish": { + "title": "發佈至 Workshop", + "introTitle": "與社群分享此小工具", + "introDescription": "Homarr 會匯出目前小工具的不含憑證副本。請新增清楚的清單詳細資料,讓使用者在安裝前瞭解其用途。", + "listingDetails": "Workshop 清單", + "listingDetailsDescription": "這些詳細資料會與匯出的小工具定義一同公開顯示。", + "success": "已立即發佈。社群成員現在可以安裝並檢舉此小工具。", + "successTitle": "您的小工具已上線", + "manageDescription": "開啟投稿即可更新其清單、檢查檢舉、標記為過時或刪除。投稿管理直接在 Workshop 網站上處理。", + "viewSubmission": "檢視並管理投稿", + "done": "完成", + "signInHint": "登入即可使用您的 Workshop 身分發佈。", + "titleField": "標題", + "descriptionField": "描述", + "screenshots": "螢幕截圖", + "screenshotsDescription": "最多五張 PNG、JPEG 或 WebP 圖片", + "screenshotsPlaceholder": "選擇螢幕截圖", + "invalidScreenshot": "使用 PNG、JPEG 或 WebP 圖片,每張大小不得超過 {maxSize}。", + "privateSourceWarning": "此小工具包含以下項目的私人來源 URL:{sources}。發佈前,請將個人主機或 IP 位址替換為安全的服務預留位置。", + "reviewSourcesTitle": "檢查私人來源 URL", + "privateSourceConfirmation": "我已檢查這些來源 URL,確認它們不會公開私人基礎架構詳細資料", + "action": "立即發佈", + "publicationNote": "發佈會立即完成。之後您可以在 Workshop 上管理投稿。", + "definitionChanged": "準備發佈時小工具有所變更。請再次檢查其私人來源 URL,然後重試。", + "error": "發佈失敗" } }, "integration": { + "completion": { + "modalTitle": "服務就緒", + "title": "{name} 已連線", + "description": "連線測試成功。接下來請選擇要在此面板上顯示的內容。", + "connectionReady": "服務連線就緒", + "appReady": "應用程式捷徑就緒", + "compatibleWidgets": "", + "chooseWidget": "選擇小工具", + "recipes": { + "title": "此面板推薦", + "description": "根據已連線的服務和此面板上已有的小工具。", + "newConnectionReason": "現在可透過 {integration} 使用", + "existingConnectionReason": "可搭配您已連線的服務", + "dismiss": "忽略此面板對此服務的推薦" + } + }, "page": { "list": { - "title": "集成", + "ariaLabel": "已設定的整合", "search": "選擇集成", + "scopedNote": "僅顯示您有權管理的整合。", "noResults": { - "title": "尚無集成" + "title": "尚無集成", + "description": "連線服務即可在 Homarr 小工具中使用其資料和動作。", + "action": "建立您的第一個整合", + "filteredTitle": "沒有整合符合您的搜尋", + "filteredDescription": "沒有整合符合「{search}」。請嘗試其他名稱、類型或 URL。", + "createOnlyTitle": "您只能新增整合", + "createOnlyDescription": "您的權限允許您建立整合,但無法管理現有整合。請向管理員要求所需的存取權。" } }, "create": { "title": "創建 {name} 集成", "notification": { "success": { - "title": "創建成功", "message": "集成創建成功" }, "error": { - "title": "創建失敗", "message": "此集成無法被創建" } }, @@ -729,11 +1339,9 @@ "title": "編輯 {name} 集成", "notification": { "success": { - "title": "編輯成功", "message": "集成已儲存成功" }, "error": { - "title": "無法應用變更", "message": "集成無法被儲存" } }, @@ -750,23 +1358,15 @@ "message": "確認移除集成 {name} 嗎?", "notification": { "success": { - "title": "移除成功", "message": "集成移除成功" }, "error": { - "title": "移除失敗", "message": "集成移除失敗" } } } }, "field": { - "name": { - "label": "名稱" - }, - "url": { - "label": "網址" - }, "attemptSearchEngineCreation": { "label": "創建搜尋引擎", "description": "集成 {kind} 可以與搜尋引擎共同使用,勾選此選項可自動設定搜尋引擎" @@ -778,6 +1378,10 @@ "label": "創建應用程式", "description": "建立一個與集成相同名稱和圖示的應用程式,將下方輸入欄位留空,以使用集成網址創建應用程式" }, + "linkApp": { + "label": "連結現有應用程式", + "description": "將此整合連線至您已可使用的應用程式。" + }, "appHref": { "placeholder": "自訂應用程式網址" }, @@ -791,7 +1395,11 @@ "grid": { "widgetCount": "{count} 個小工具", "noWidgets": "無小工具", - "detected": "透過 Docker 偵測到" + "detected": "透過 Docker 偵測到", + "connected": "{count, plural, other {已連線:#}}", + "tiedWidgets": "已繫結的小工具", + "more": "還有 +{count} 個", + "loadError": "無法載入整合。建立新連線前請重試。" }, "category": { "dnsHole": "DNS", @@ -823,7 +1431,9 @@ "vpn": "VPN", "mediaLibrary": "媒體庫", "uptimeMonitoring": "運作時間監控", - "systemMonitoring": "系統監控" + "beszel": "Beszel", + "systemMonitoring": "系統監控", + "security": "安全" }, "testConnection": { "action": { @@ -1108,6 +1718,22 @@ "slug": { "label": "狀態頁面 slug", "newLabel": "新狀態頁面 slug" + }, + "wazuhIndexerUrl": { + "label": "索引器 URL", + "newLabel": "新的 Indexer URL" + }, + "wazuhIndexerUsername": { + "label": "Indexer 使用者名稱", + "newLabel": "新的 Indexer 使用者名稱" + }, + "wazuhIndexerPassword": { + "label": "Indexer 密碼", + "newLabel": "新的 Indexer 密碼" + }, + "wazuhDashboardUrl": { + "label": "儀表板 URL(選填)", + "newLabel": "新的儀表板 URL" } } }, @@ -1116,58 +1742,19 @@ "interact": "與集成進行互動", "full": "完整的集成訪問權限" }, - "audiobookshelf": { - "name": "Audiobookshelf", - "description": "自託管有聲書和播客伺服器" - }, - "navidrome": { - "name": "Navidrome", - "description": "具有 Subsonic API 相容性的自託管音樂串流伺服器" - }, - "uptimeKuma": { - "name": "Uptime Kuma", - "description": "帶有公開狀態頁面的自託管運作時間監控", - "secret": { - "slug": { - "description": "你的公開狀態頁面的 slug。如果未設定,預設為 \"default\"。" - }, - "apiKey": { - "description": "用於已驗證 /metrics 存取的可選 API 金鑰" - } - } - }, - "traefik": { - "name": "Traefik", - "description": "雲原生反向代理和負載平衡器" - }, - "paperlessNgx": { - "name": "Paperless-ngx", - "description": "用於歸檔和組織掃描文件的文件管理系統" - }, - "patchmon": { - "name": "PatchMon", - "description": "Linux 主機的修補程式管理和監控" - }, - "bazarr": { - "name": "Bazarr", - "description": "Sonarr 和 Radarr 的配套應用程式,管理和下載字幕" - }, "llamacpp": { "name": "llama.cpp", "description": "監控本地 llama.cpp llama-server:健康狀態、模型與生成指標" - }, - "wud": { - "name": "What's Up Docker", - "description": "監控您的 Docker 容器中哪些有可用的映像更新" } }, "media": { "plural": "多媒體", "search": "尋找多媒體", "field": { - "name": "名稱", + "preview": "預覽", "size": "大小", - "creator": "創建者" + "creator": "創建者", + "actions": "控制" }, "action": { "upload": { @@ -1195,10 +1782,12 @@ } }, "copy": { - "label": "複製網址" + "label": "複製網址", + "labelNamed": "複製 {name} 的 URL" }, "open": { - "label": "開啟多媒體" + "label": "開啟多媒體", + "labelNamed": "開啟 {name}" } }, "noResults": { @@ -1213,7 +1802,6 @@ "add": "新增", "apply": "應用", "backToOverview": "返回總覽", - "skip": "略過", "change": "", "create": "創建", "createAnother": "創建並重新開始", @@ -1236,16 +1824,31 @@ "tryAgain": "重試", "loading": "正在讀取", "show": "顯示", - "hide": "隱藏" + "hide": "隱藏", + "undo": "復原", + "editNamed": "編輯 {name}", + "deleteNamed": "刪除 {name}", + "clearSearch": "清除搜尋", + "copy": "複製", + "copied": "已複製", + "refresh": "刷新" + }, + "pagination": { + "pageOf": "第 {page} 頁,共 {totalPages} 頁" }, "here": "此處", + "serviceUrlTemplate": { + "serverTitle": "一般伺服器位址", + "urlModeLabel": "服務位址模式", + "hostPort": "相同主機、不同連接埠", + "subdomain": "每項服務使用一個子網域", + "path": "每項服務使用一個路徑" + }, "iconPicker": { "label": "Icon 網址", + "description": "搜尋圖庫、貼上圖片網址或上傳檔案。", "header": "輸入名稱或物件來篩選 icons,Homarr 會自動搜尋 {countIcons}", "headerLoading": "輸入以搜尋圖示", - "noResults": "沒有符合 \"{search}\" 的圖示。", - "error": "無法載入圖示。", - "description": "搜尋圖庫、貼上圖片網址或上傳檔案。", "clear": "清除圖片", "uploadImage": "上傳圖片", "results": "圖片搜尋結果", @@ -1254,7 +1857,9 @@ "otherImages": "其他圖像", "urlLoading": "正在檢查圖片…", "urlReady": "圖片已可使用", - "urlError": "無法載入此圖片。請檢查網址後再試一次。" + "urlError": "無法載入此圖片。請檢查網址後再試一次。", + "noResults": "沒有符合 \"{search}\" 的圖示。", + "error": "無法載入圖示。" }, "colorScheme": { "options": { @@ -1266,7 +1871,6 @@ "information": { "min": "最小", "max": "最大", - "days": "天", "hours": "時", "minutes": "分" }, @@ -1303,16 +1907,16 @@ }, "userAvatar": { "menu": { - "switchToDarkMode": "切換至暗黑模式", - "switchToLightMode": "切換至日間模式", + "open": "開啟使用者頭像選單", "management": "管理中心", - "docker": "Docker", "preferences": "偏好設定", "logout": "登出", "login": "登入", "homeBoard": "首頁", - "loggedOut": "已登出", - "updateAvailable": "{countUpdates} 可用更新:{tag}" + "updateAvailable": "{countUpdates} 可用更新:{tag}", + "assistant": "助理", + "assistantThinking": "思考中", + "modifier": "修改器" } }, "dangerZone": "危險區域", @@ -1360,75 +1964,85 @@ "kilometersPerHour": "", "milesPerHour": "" } + }, + "widgetQuery": { + "loading": "正在載入小工具資料" + }, + "total": "總計", + "filesystemUsage": "{count, plural, other {顯示 # 個檔案系統的使用量}}", + "field": { + "name": "工作名稱" + }, + "label": { + "new": "創建" + }, + "entity": { + "apps": "應用程式", + "boards": "面板", + "certificates": "憑證", + "customWidgets": "自訂小工具", + "groups": "群組", + "integrations": "集成", + "invites": "邀請", + "logs": "Logs", + "media": "多媒體", + "searchEngines": "搜尋引擎", + "tasks": "任務", + "users": "使用者" } }, "section": { - "dynamic": { + "option": { + "showLabel": { + "label": "顯示標籤", + "description": "在內容上方顯示容器標籤。" + }, + "collapsible": { + "label": "允許摺疊", + "description": "讓檢視者展開和摺疊此容器。" + }, + "showOpenAll": { + "label": "顯示全部開啟動作", + "description": "顯示可在新分頁中開啟此容器內每個應用程式的動作。" + }, + "scrollable": { + "label": "可捲動", + "description": "讓此容器維持設定的大小,捲動其內容而不是隨內容增長。" + } + }, + "action": { + "openAllInNewTabsFor": "在分頁中開啟 {name} 中的所有應用程式" + }, + "openAllInNewTabs": { + "title": "於分頁中開啟全部", + "text": "某些瀏覽器可能會因安全性考量而阻止批量開啟分頁,Homarr 無法開啟所有視窗,因為您的瀏覽器已封鎖此操作,請允許「開啟彈出式視窗」,然後重試" + }, + "container": { + "untitled": "未命名容器", "action": { - "create": "創建動態區段", - "remove": "移除動態區段" + "create": "新容器", + "remove": "移除容器", + "expand": "展開", + "collapse": "摺疊" }, "option": { "title": { "label": "標題" }, "customCssClasses": { - "label": "" + "label": "自定義 CSS html" }, "borderColor": { "label": "邊框顏色" } }, "remove": { - "title": "移除動態區段", - "message": "確認要移除此動態區段嗎?項目將移動到父區段的相同位置" - } - }, - "category": { - "field": { - "name": { - "label": "名稱" - } - }, - "action": { - "create": "創建分類", - "edit": "移除分類", - "remove": "移除分類", - "moveUp": "上移", - "moveDown": "下移", - "createAbove": "新分類之上", - "createBelow": "新分類之下", - "openAllInNewTabs": "於分頁中開啟全部" - }, - "create": { - "title": "創建分類", - "submit": "創建分類" - }, - "remove": { - "title": "移除分類", - "message": "確認移除分類 {name} 嗎?" - }, - "edit": { - "title": "重新命名分類", - "submit": "重新命名分類" - }, - "menu": { - "label": { - "create": "創建分類", - "changePosition": "變更位置", - "settings": "設定" - } - }, - "openAllInNewTabs": { - "title": "於分頁中開啟全部", - "text": "某些瀏覽器可能會因安全性考量而阻止批量開啟分頁,Homarr 無法開啟所有視窗,因為您的瀏覽器已封鎖此操作,請允許「開啟彈出式視窗」,然後重試" + "message": "要移除此容器嗎?其內容將移至周圍區域。" } } }, "item": { "action": { - "create": "創建項目", - "import": "匯入項目", "edit": "編輯項目", "moveResize": "移動 / 調整大小項目", "duplicate": "複製項目", @@ -1437,7 +2051,7 @@ "menu": { "label": { "settings": "設定", - "refresh": "重新整理", + "settingsFor": "{name} 的設定", "options": "選項", "actions": "動作" }, @@ -1446,21 +2060,96 @@ "error": "錯誤", "loading": "正在讀取", "idle": "閒置" + }, + "notification": { + "saveError": { + "title": "無法儲存小工具", + "message": "小工具變更已復原" + } } }, "create": { "title": "選擇要新增的項目", "search": "篩選項目", - "addToBoard": "新增至面板" + "addToBoard": "新增至面板", + "addAtPosition": "在此新增項目", + "destination": { + "label": "新增至", + "description": "選擇小工具應顯示的位置。之後仍可移動。", + "mainCanvas": "主要畫布", + "leftRail": "左側欄", + "rightRail": "右側欄" + }, + "connectionStatus": { + "ready": "準備", + "needsSetup": "需要設定", + "noConnectionRequired": "不需要連線" + }, + "customWidget": "自訂小工具", + "standalone": "獨立", + "missingIntegration": { + "title": "請先連線服務", + "noPermission": "此小工具需要相容的服務連線。請管理員先連線服務,然後再試。" + }, + "notification": { + "success": { + "title": "小工具已新增", + "message": "{name} 已新增至此面板。", + "relocatedMessage": "由於選取的目的地無法使用,{name} 已新增至 {destination}。" + }, + "error": { + "title": "無法新增項目", + "message": "無法將項目新增至此面板" + } + } + }, + "selection": { + "summary": "{count, plural, other {已選取 # 個項目}}", + "selected": "{count, plural, other {已選取 # 個}}", + "copy": "複製", + "copied": "{count, plural, other {已將 # 個項目複製到剪貼簿}}", + "copyError": "無法複製所選項目。您的瀏覽器可能不允許存取剪貼簿。", + "paste": "貼上", + "pasteShortcut": "在此貼上已複製的項目(Ctrl / ⌘ + V)", + "pasted": "{count, plural, other {已貼上 # 個項目}}", + "pasteError": "無法讀取剪貼簿。您的瀏覽器可能不允許存取剪貼簿。", + "pasteInvalid": "剪貼簿不包含有效的 Homarr 面板項目。", + "pasteUnavailable": "已複製的項目無法放入此面板。", + "removed": "{count, plural, other {已移除 # 個項目}}", + "move": "移動", + "moveTo": "移動所選項目", + "delete": "移除", + "clear": "清除選取項目", + "clearShortcut": "清除選取項目(Escape)", + "saveErrorTitle": "無法更新項目", + "saveErrorMessage": "無法儲存變更。面板已重新整理。", + "moveUnavailableTitle": "無法移動所選項目", + "moveUnavailableMessage": "目的地沒有足夠空間容納整個選取範圍。" }, "moveResize": { "title": "移動 / 調整大小項目", + "entryLabel": "{name},第 {column} 欄、第 {row} 列", + "target": { + "numbered": "{name},目的地 {index}", + "located": "{name},{location},目的地 {index}" + }, + "keyboard": { + "instructions": "按 Enter 或 Space 開始鍵盤編輯。使用方向鍵移動,按住 Shift 加方向鍵調整大小,按 Escape 停止。", + "started": "已開始鍵盤編輯。使用方向鍵移動,按住 Shift 加方向鍵調整大小,按 Escape 停止。", + "stopped": "已停止鍵盤編輯。", + "boundary": "此變更無法容納在此區段內。" + }, "field": { + "section": { + "label": "區段或欄" + }, "width": { - "label": "寬度" + "label": "寬度", + "shortLabel": "寬" }, "height": { - "label": "高度" + "label": "高度", + "shortLabel": "高" }, "xOffset": { "label": "X 軸" @@ -1474,18 +2163,36 @@ "title": "編輯項目", "tab": { "widget": "編輯小工具", - "app": "編輯應用程式" + "app": "編輯應用程式", + "integration": "編輯整合" }, "app": { "propagationNotice": "對此應用程式的變更將會套用到所有使用它的儀表板。" }, + "integration": { + "action": "編輯連線", + "description": "不離開此小工具即可測試或修復所選連線。", + "editLabel": "編輯 {name} 集成", + "fullAccessRequired": "需要完整存取權", + "propagationNotice": "對此整合的變更會套用至所有使用位置。儲存前會先測試連線。", + "loading": "正在載入整合", + "loadError": "無法載入此整合。變更連線設定前請重試。" + }, + "preview": { + "integrationRequired": "請選擇連線以預覽此小工具。", + "size": "檔案大小" + }, + "settings": { + "label": "小工具設定" + }, "advancedOptions": { "label": "進階選項", "title": "進階項目選項" }, "field": { "integrations": { - "label": "集成" + "label": "集成", + "removeLabel": "移除 {name} 整合" }, "title": { "label": "標題" @@ -1499,17 +2206,18 @@ } }, "remove": { - "title": "移除項目", "message": "確認要移除此項目嗎?" + }, + "advancedFocus": { + "open": "開啟進階檢視", + "close": "關閉進階檢視", + "label": "{widget} 進階檢視" } }, "widget": { "integrationSelect": { "configureIntegrationFirst": "先連線整合", - "loading": "正在讀取……", - "placeholder": "選擇一個選項", - "noResults": "未找到結果", - "loadError": "載入選項失敗" + "placeholder": "選擇一個選項" }, "app": { "name": "應用程式", @@ -1518,9 +2226,6 @@ "appId": { "label": "選擇應用程式" }, - "openInNewTab": { - "label": "於新分頁中開啟" - }, "showTitle": { "label": "顯示應用程式名稱" }, @@ -1528,11 +2233,8 @@ "label": "啟用簡單的 Ping" }, "layout": { - "label": "", "option": { - "row": "", "row-reverse": "", - "column": "", "column-reverse": "" } }, @@ -1557,23 +2259,60 @@ "name": "書籤", "description": "顯示多個應用程式鏈結", "option": { - "title": { - "label": "標題" + "showTitle": { + "label": "顯示小工具標題" + }, + "titleSize": { + "label": "小工具標題大小(px)" }, "layout": { "label": "顯示布局", "option": { - "row": { - "label": "橫向" - }, - "column": { - "label": "垂直" - }, - "grid": { - "label": "網格" + "adaptive": { + "label": "自適應" }, "gridHorizontal": { "label": "網格水平間距" + }, + "icons": { + "label": "圖示" + } + } + }, + "variant": { + "label": "外觀", + "option": { + "soft": { + "label": "柔和" + }, + "filled": { + "label": "填滿" + }, + "outline": { + "label": "外框" + }, + "plain": { + "label": "純文字" + } + } + }, + "spacing": { + "label": "卡片間距", + "option": { + "xs": { + "label": "特小" + }, + "sm": { + "label": "小" + }, + "md": { + "label": "中" + }, + "lg": { + "label": "大" + }, + "xl": { + "label": "特大" } } }, @@ -1586,17 +2325,28 @@ "hideHostname": { "label": "隱藏 hostname" }, - "openNewTab": { - "label": "於新分頁開啟" - }, "withBorder": { "label": "顯示邊框" }, + "grow": { + "label": "展開卡片以填滿列" + }, + "customUrls": { + "label": "自訂連結" + }, "items": { "label": "書籤", - "add": "新增書籤" + "remove": "移除書籤", + "apps": { + "label": "新增書籤", + "description": "貼上 URL 或尋找現有應用程式。拖曳下方書籤以重新排序。", + "placeholder": "貼上 URL 或搜尋應用程式", + "addUrl": "新增此 URL", + "hint": "按 Enter 新增 URL。貼上以逗號分隔或每行一個的 URL,即可新增多個。" + } } - } + }, + "empty": "在小工具設定中新增 URL 或應用程式" }, "archiveTeamWarrior": { "name": "ArchiveTeam Warrior", @@ -1605,33 +2355,61 @@ "showBroadcastMessage": { "label": "顯示廣播訊息" } + }, + "noProjectSelected": "未選取專案", + "runnerStatus": "執行器:{status}", + "projectId": "專案:{id}", + "sessionReceived": "已接收工作階段:{value}", + "sessionSent": "已傳送工作階段:{value}", + "sessionId": "工作階段:{id}", + "startedAt": "於 {date} 開始", + "emptyItems": "此快照中沒有進行中或最近的工作", + "metric": { + "running": "運行中", + "completed": "完成", + "failed": "失敗", + "canceled": "已取消", + "download": "下載", + "upload": "上傳" + }, + "status": { + "running": "運行中", + "completed": "已完成", + "failed": "失敗", + "canceled": "已取消", + "stopped": "已停止", + "idle": "閒置", + "unknown": "未知" + } + }, + "wud": { + "name": "What's Up Docker", + "description": "顯示有多少受監控的容器有可用更新。", + "title": "What's Up Docker", + "monitored": "已監控", + "updatesAvailable": "{count, plural, other {# 個可用更新}}", + "updateAvailable": "有可用更新", + "openReleaseNotes": "開啟發佈說明", + "option": { + "showRing": { + "label": "顯示更新環" + }, + "showUpdateList": { + "label": "顯示容器更新清單", + "description": "列出每個具有可用映像更新的受監控容器" + } } }, "dnsHoleSummary": { "name": "DNS Hole 概況", "description": "顯示 DNS Hole 的概況", "option": { - "layout": { - "label": "顯示布局", - "option": { - "row": { - "label": "橫向" - }, - "column": { - "label": "垂直" - }, - "grid": { - "label": "網格" - } - } - }, "usePiHoleColors": { "label": "使用 Pi-Hole 顏色" } }, "error": { - "internalServerError": "取得 DNS Hole 概況失敗", - "integrationsDisconnected": "無可用的數據,所有集成已斷線" + "internalServerError": "取得 DNS Hole 概況失敗" }, "data": { "adsBlockedToday": "今日封鎖", @@ -1639,32 +2417,24 @@ "dnsQueriesToday": "今日查詢", "domainsBeingBlocked": "黑名單的網域" }, - "domainsTooltip": "由於多個集成,Homarr 無法精準計算被阻擋的網域數量" + "domainsTooltip": "由於多個集成,Homarr 無法精準計算被阻擋的網域數量", + "status": { + "enabled": "已啟用", + "disabled": "已停用", + "unknown": "未知" + } }, "dnsHoleControls": { "name": "DNS Hole 控制", "description": "從面板控制 Pi-Hole 或 AdGuard", "option": { - "layout": { - "label": "顯示布局", - "option": { - "row": { - "label": "橫向" - }, - "column": { - "label": "垂直" - }, - "grid": { - "label": "網格" - } - } - }, "showToggleAllButtons": { "label": "顯示全部按鈕" } }, "error": { - "internalServerError": "無法控制 DNS Hole" + "internalServerError": "無法控制 DNS Hole", + "bulkActionsFailed": "{count, plural, other {# 個動作失敗}}" }, "controls": { "enableAll": "啟用全部", @@ -1675,8 +2445,6 @@ "disabled": "已停用", "processing": "處理中", "disconnected": "斷線", - "hours": "時", - "minutes": "分", "unlimited": "留空表示無限制" } }, @@ -1688,16 +2456,10 @@ "label": "自定義標題/城市顯示\n", "description": "在時鐘上顯示自定義的標題或城市/國家名稱" }, - "customTitle": { - "label": "標題" - }, "is24HourFormat": { "label": "24 小時制", "description": "使用 24 小時制替代 12 小時制" }, - "showSeconds": { - "label": "顯示秒數" - }, "useCustomTimezone": { "label": "使用固定時區" }, @@ -1716,29 +2478,295 @@ "label": "自訂時間格式", "description": "使用 ISO 8601 格式化時間 (此操作將覆蓋其他選項)" }, - "customDateFormat": { - "label": "自訂日期格式", - "description": "使用 ISO 8601 格式化日期 (此操作將覆蓋其他選項)" - }, "showWeather": { "label": "顯示天氣", "description": "在卡片角落顯示小型動畫天氣圖示和溫度" }, - "weatherLocation": { - "label": "天氣位置" - }, "isWeatherFormatFahrenheit": { "label": "使用華氏溫度" + }, + "animateWeatherIcon": { + "label": "動畫天氣圖示", + "description": "動畫天氣圖示。預設為停用,且在要求減少動態效果時一律停用。" + }, + "colorWeatherByDayNight": { + "label": "依日夜顯示天氣顏色", + "description": "根據所選位置目前是白天還是夜晚,為天氣圖示和溫度套用日間或夜間顏色。" + }, + "dayWeatherColor": { + "label": "日間顏色" + }, + "nightWeatherColor": { + "label": "夜間顏色" + }, + "worldClockCities": { + "label": "世界時鐘城市", + "description": "新增並排序最多六個城市,以使用進階檢視。" } + }, + "timezoneList": { + "timezone": "時區", + "cityLabel": "城市標籤", + "searchPlaceholder": "搜尋時區", + "noResults": "找不到時區", + "unsupportedOption": "不支援:{timeZone}", + "add": "新增城市", + "remove": "移除 {city}", + "reorder": "重新排列 {city}", + "limit": "已設定 {count} / {maximum} 個城市" + }, + "worldClock": { + "primary": "主要時鐘", + "local": "當地時間", + "today": "今天", + "tomorrow": "明天", + "yesterday": "昨天", + "noSecondaryCities": "在小工具選項中新增城市,即可在此比較。", + "unsupportedPrimaryTitle": "主要時區無法使用", + "unsupportedPrimary": "此瀏覽器不支援 {timeZone}。顯示 UTC 作為明確標示的備用選項。", + "unsupportedTimeZone": "不支援的時區:{timeZone}", + "accessibleTime": "{city}:{time}、{date}、{timeZone}", + "advancedLabel": "進階世界時鐘", + "cities": "世界時鐘", + "cityCount": "{count} 個時區", + "timeBarLabel": "{city} 的 24 小時制時間位置", + "dayProgress": "已經過 {percent}% · 剩餘 {hours} 小時 {minutes} 分鐘", + "phaseLegend": "時段圖例", + "tick": { + "midnight": "00", + "morning": "06", + "noon": "12", + "evening": "18", + "end": "24" + }, + "phaseRange": { + "night": "00–05 · 21–24", + "dawn": "05–08", + "day": "08–18", + "dusk": "18–21" + }, + "phase": { + "night": "夜間", + "dawn": "黎明", + "day": "白天", + "dusk": "黃昏" + } + } + }, + "airQuality": { + "name": "空氣品質與紫外線", + "description": "顯示某個位置的空氣品質、紫外線指數、污染物和花粉。", + "option": { + "location": { + "label": "空氣品質位置" + }, + "aqiStandard": { + "label": "空氣品質指數標準", + "options": { + "auto": "依地區設定自動選擇", + "european": "歐洲空氣品質指數", + "us": "美國空氣品質指數" + } + }, + "showUv": { + "label": "顯示紫外線指數" + }, + "showPollutants": { + "label": "顯示污染物濃度" + }, + "showPollen": { + "label": "顯示花粉濃度" + } + }, + "category": { + "good": "良好", + "fair": "尚可", + "moderate": "中等", + "unhealthySensitive": "對敏感族群不健康", + "unhealthy": "不良", + "poor": "不佳", + "veryPoor": "非常不佳", + "veryUnhealthy": "非常不健康", + "extremelyPoor": "極差", + "hazardous": "危險", + "unknown": "沒有空氣品質指數讀數" + }, + "uv": { + "label": "紫外線指數", + "category": { + "low": "低", + "moderate": "中等", + "high": "高", + "veryHigh": "非常高", + "extreme": "極高", + "unknown": "沒有讀數" + } + }, + "dominantPollutant": "主要污染物", + "aqiLabel": "空氣品質指數", + "strongestPollen": "最高花粉濃度", + "unit": { + "concentration": "{value} µg/m³", + "pollen": "{value} 格令/m³" + }, + "pollutant": { + "pm2_5": "細懸浮微粒(PM2.5)", + "pm10": "懸浮微粒(PM10)", + "ozone": "臭氧", + "nitrogenDioxide": "二氧化氮", + "sulphurDioxide": "二氧化硫", + "carbonMonoxide": "一氧化碳" + }, + "pollen": { + "alder": "赤楊", + "birch": "樺樹", + "grass": "草", + "mugwort": "艾草", + "olive": "橄欖", + "ragweed": "豚草" + }, + "compact": { + "sixHourTrend": "未來六小時的空氣品質指數趨勢" + }, + "advanced": { + "observedAt": "更新於 {time}", + "next24Hours": "未來 24 小時", + "pollutants": "污染物濃度", + "pollen": "花粉濃度", + "sevenDayForecast": "7 天最高預報", + "aqiValue": "AQI {value}", + "uvValue": "UV {value}", + "uvShort": "UV {value}", + "noForecast": "沒有可用的預報資料" + } + }, + "countdown": { + "name": "倒數計時", + "description": "追蹤即將到來的事件和週年紀念日。", + "option": { + "events": { + "label": "事件", + "description": "新增並排序最多 20 個一次性或每年重複的倒數計時。日期會以所選時區輸入。" + }, + "showProgress": { + "label": "顯示進度" + }, + "showSeconds": { + "label": "顯示秒數", + "description": "讓每個即將到來的事件都持續顯示秒數。" + } + }, + "dateTimeEventList": { + "newEvent": "新增事件", + "add": "新增事件", + "remove": "移除 {event}", + "reorder": "重新排列 {event}", + "eventLabel": "事件標籤", + "timezone": "時區", + "unsupportedOption": "不支援:{timeZone}", + "recurrence": "重複", + "recurrenceOption": { + "none": "不重複", + "yearly": "每年" + }, + "target": "事件日期與時間", + "trackProgress": "從開始日期追蹤進度", + "start": "進度開始日期與時間", + "confirmDateTime": "確認日期與時間", + "limit": "已設定 {count} / {maximum} 個事件" + }, + "empty": { + "title": "尚無倒數計時", + "description": "在小工具選項中新增事件,即可開始倒數。" + }, + "completed": "已完成", + "yearly": "每年", + "progress": "事件進度", + "upcoming": "即將到來", + "completedEvents": "已完成的事件", + "invalid": { + "title": "部分事件無法顯示", + "description": "{count, plural, other {# 個事件的日期無效或時區不受支援。}}", + "value": "無法使用" + }, + "alert": { + "notifications": "瀏覽器通知", + "permissionDenied": "此瀏覽器已封鎖通知。", + "reached": "倒數計時已達到目標。" + } + }, + "timer": { + "name": "計時器/番茄鐘", + "description": "執行簡單計時器或可設定的番茄鐘流程。", + "option": { + "mode": { + "label": "模式", + "options": { + "timer": "計時器", + "pomodoro": "番茄鐘" + } + }, + "timerMinutes": { + "label": "計時器分鐘數" + }, + "focusMinutes": { + "label": "專注分鐘數" + }, + "shortBreakMinutes": { + "label": "短休息分鐘數" + }, + "longBreakMinutes": { + "label": "長休息分鐘數" + }, + "sessionsBeforeLongBreak": { + "label": "長休息前的專注次數" + }, + "autoStartBreaks": { + "label": "自動開始休息" + }, + "autoStartFocus": { + "label": "自動開始專注階段" + } + }, + "phase": { + "timer": "計時器", + "focus": "專注", + "shortBreak": "短休息", + "longBreak": "長休息" + }, + "action": { + "start": "啟動", + "pause": "暫停", + "reset": "重設" + }, + "attention": { + "timerComplete": "計時器完成", + "phaseReady": "{phase} 已準備就緒" + }, + "progress": "計時器進度:{progress}%", + "compact": { + "completedFocus": "" + }, + "alert": { + "title": "計時器完成", + "completed": "{phase} 已完成。" + }, + "advanced": { + "sequence": "番茄鐘流程", + "focusSession": "專注 {session}", + "settings": "永久設定", + "settingsHint": "使用小工具內容選單編輯這些看板設定。", + "localAlerts": "本機提醒", + "notifications": "瀏覽器通知", + "sound": "計時器音效", + "localAlertsHint": "計時器音效預設為啟用。音效和通知僅套用至此瀏覽器中的此小工具。", + "notificationsDenied": "此瀏覽器已封鎖通知。" } }, "minecraftServerStatus": { "name": "Minecraft 伺服器狀態", "description": "顯示 Minecraft 伺服器狀態", "option": { - "title": { - "label": "標題" - }, "domain": { "label": "伺服器地址" }, @@ -1758,11 +2786,21 @@ "noStation": "", "option": { "baseUrl": { - "label": "Search.ch 網址" + "label": "Search.ch 網址", + "description": "自訂 URL 必須解析為公開 IP 位址。私人和本機主機將被拒絕。" }, "station": { - "label": "" + "label": "", + "placeholder": "搜尋車站" } + }, + "error": { + "customSourceUnavailable": "時刻表來源無法使用。請確認其 URL 能解析為公開 IP 位址。", + "stationSearch": "無法搜尋車站。請確認自訂 URL 和看板存取權限。" + }, + "warning": { + "stale": "無法重新整理時刻表。顯示上次於 {time} 更新的出發資訊。", + "staleCompact": "資料過時" } }, "notebook": { @@ -1794,6 +2832,9 @@ "directionRtl": "將文字方向設為由右至左", "blockquote": "引用", "horizontalLine": "橫線", + "details": "切換可摺疊區段", + "expandDetails": "展開可摺疊區段", + "collapseDetails": "摺疊可摺疊區段", "bulletList": "符號列表", "orderedList": "順序列表", "checkList": "檢查列表", @@ -1802,16 +2843,20 @@ "link": "鏈結", "unlink": "移除鏈結", "image": "崁入圖案", - "addTable": "新增表格", + "insertTable": "插入表格", + "insertTableSize": "插入 {columns} × {rows} 表格", "deleteTable": "移除表格", "colorCell": "單元格顏色", - "mergeCell": "切換單元格合併", + "mergeCells": "合併儲存格", + "splitCell": "分割儲存格", "addColumnLeft": "於前方新增列", "addColumnRight": "於後方新增列", "deleteColumn": "移除整列", "addRowTop": "於前方新增行", "addRowBelow": "於後方新增行", - "deleteRow": "移除整行" + "deleteRow": "移除整行", + "toggleHeaderRow": "切換標題列", + "toggleHeaderColumn": "切換標題欄" }, "align": { "left": "左方", @@ -1822,8 +2867,6 @@ "clearColor": "清除顏色", "source": "來源", "widthPlaceholder": "百分比或像素值", - "columns": "列數", - "rows": "行數", "width": "寬度", "height": "高度" }, @@ -1835,7 +2878,9 @@ "discard": "", "keepEditing": "" } - } + }, + "saveFailed": "無法儲存筆記", + "documentStats": "{words, plural, other {# 個字詞}} · {characters, plural, other {# 個字元}}" }, "anchorNote": { "name": "", @@ -1844,9 +2889,6 @@ "noteId": { "label": "" }, - "showTitle": { - "label": "" - }, "showUpdatedAt": { "label": "" } @@ -1856,14 +2898,20 @@ "notFound": "", "noNotes": "", "integrationRequired": "", - "updatedAt": "", "untitled": "", - "edit": "", - "save": "", - "cancel": "", "readOnlyViewer": "", "saveForbidden": "", - "saveFailed": "" + "saveFailed": "", + "createdAt": "建立於 {date}", + "permission": { + "owner": "所有者", + "editor": "編輯者", + "viewer": "檢視者" + }, + "status": { + "pinned": "已釘選", + "archived": "已歸檔" + } }, "iframe": { "name": "iFrame", @@ -1922,6 +2970,25 @@ "clickable": { "label": "可點擊" } + }, + "state": { + "on": "開啟", + "off": "關閉", + "unavailable": "無法使用", + "unknown": "未知" + }, + "advanced": { + "entityId": "實體 ID:{id}", + "lastChanged": "變更於 {date}", + "attribute": { + "unit": "單位", + "deviceClass": "裝置類別", + "icon": "圖示" + } + }, + "error": { + "loadFailed": "無法載入實體", + "toggleFailed": "無法更新實體" } }, "smartHome-executeAutomation": { @@ -1937,11 +3004,31 @@ }, "spotlightAction": { "run": "執行 {name}" + }, + "advanced": { + "lastExecuted": "上次執行於 {time}", + "automationId": "自動化 ID:{id}", + "ready": "準備執行", + "noPermission": "沒有執行此自動化的權限" + }, + "status": { + "running": "正在執行自動化", + "success": "自動化已完成" + }, + "error": { + "executeFailed": "無法執行自動化" } }, "stockPrice": { "name": "股票價格", "description": "顯示公司當前股票價格", + "advanced": { + "currentPrice": "目前價格", + "previousClose": "前次收盤價", + "changePercentage": "變動 (%)", + "minimum": "最低", + "maximum": "最高" + }, "option": { "stock": { "label": "股票代碼" @@ -2012,6 +3099,10 @@ "label": "一月" } } + }, + "showDetails": { + "label": "顯示詳細資料", + "description": "在精簡檢視中顯示名稱、變動和時間範圍。關閉後僅顯示代號和價格。" } } }, @@ -2039,6 +3130,13 @@ "showUnmonitored": { "label": "顯示未監控項目" } + }, + "advanced": { + "previousMonth": "顯示上個月", + "nextMonth": "顯示下個月", + "eventCount": "{count, plural, other {# 個事件}}", + "loading": "正在載入行事曆事件……", + "noEvents": "本月沒有事件" } }, "weather": { @@ -2051,16 +3149,18 @@ "disableTemperatureDecimals": { "label": "關閉溫度小數點" }, + "animateIcons": { + "label": "動畫天氣圖示" + }, + "showHumidity": { + "label": "顯示濕度" + }, "showCurrentWindSpeed": { - "label": "顯示當前風速", - "description": "僅限當前天氣" + "label": "顯示當前風速" }, "useImperialSpeed": { "label": "" }, - "location": { - "label": "天氣位置" - }, "showCity": { "label": "顯示城市" }, @@ -2070,13 +3170,10 @@ "forecastDayCount": { "label": "預報天數", "description": "當小工具寬度不足時,顯示的天數將減少" - }, - "dateFormat": { - "label": "日期格式", - "description": "日期應該是什麼樣式" } }, "currentWindSpeed": "{currentWindSpeed} {unit}", + "disabled": "由於已停用對外連線,天氣資料無法使用", "dailyForecast": { "sunrise": "日出", "sunset": "日落", @@ -2099,6 +3196,47 @@ "thunderstorm": "雷暴", "thunderstormWithHail": "雷暴伴冰雹", "unknown": "未知" + }, + "details": "顯示天氣詳細資料", + "detailsFor": "顯示 {date} 的天氣詳細資料", + "advanced": { + "forecast": "7 天預報", + "hourlyForecast": "未來 24 小時", + "day": "日期", + "time": "時間", + "conditions": "狀況", + "temperature": "溫度", + "feelsLike": "體感溫度 {temperature}", + "feelsLikeLabel": "體感", + "feelsLikeRange": "體感溫度:{maximum} / {minimum}", + "highLow": "最高 {maximum} · 最低 {minimum}", + "observedAt": "更新於 {time}", + "humidity": "濕度", + "averageHumidity": "平均濕度:{humidity}%", + "currentHumidity": "目前濕度", + "wind": "風速 / 陣風({unit})", + "currentWind": "目前風速/陣風", + "windValue": "{speed} / {gusts} {unit}", + "windDetail": "最大風速 / 陣風:{speed} / {gusts} {unit}", + "nextHourPrecipitation": "未來一小時降水量", + "precipitationChance": "降水機率", + "precipitationValue": "{probability}% · {amount} mm", + "precipitationDetail": "降水量:{probability}% · {amount} mm", + "todayUv": "今日最高紫外線指數", + "uvIndex": "最大 UV 指數:{value}", + "daylight": "日照時間:{duration}", + "hourlyTooltip": "體感溫度 {feelsLike}{temperatureUnit} · {amount} mm · 濕度 {humidity}% · 風速 {speed} {speedUnit}", + "hourlyTooltipWithoutHumidity": "體感溫度 {feelsLike}{temperatureUnit} · {amount} mm · 風速 {speed} {speedUnit}", + "detailLabel": { + "feelsLike": "體感", + "precipitation": "降水量", + "humidity": "平均濕度", + "wind": "最大風速/陣風", + "uv": "最高紫外線指數", + "daylight": "日照時間" + }, + "sun": "日出/日落", + "noForecast": "沒有可用的預報資料" } }, "indexerManager": { @@ -2111,8 +3249,15 @@ }, "title": "索引器管理器", "testAll": "測試全部", + "status": { + "healthy": "健康", + "unhealthy": "不良", + "disabled": "已停用", + "unknown": "健康狀態無法使用" + }, "error": { - "internalServerError": "無法取得索引器狀態" + "internalServerError": "無法取得索引器狀態", + "testAll": "索引器測試失敗。請再試一次。" } }, "healthMonitoring": { @@ -2141,11 +3286,6 @@ "fileSystem": { "label": "顯示檔案系統訊息" }, - "visibleStorageVolumes": { - "label": "可見儲存磁碟區", - "description": "僅在所有選取的整合均為 Synology 時可用。留空則顯示所有偵測到的儲存磁碟區。", - "placeholder": "選擇儲存磁碟區" - }, "defaultTab": { "label": "預設頁面" }, @@ -2168,17 +3308,27 @@ "minutes": "{count} 分鐘", "used": "已使用", "available": "可用", - "lastSeen": "最後狀態更新:{lastSeen}" + "lastSeen": "最後狀態更新:{lastSeen}", + "updatesAvailable": "{count, plural, other {有 # 個可用更新}}", + "rebootRequired": "需要重新啟動", + "rebootNotRequired": "不需要重新啟動" + }, + "smartStatus": { + "attributesWithinThresholds": "SMART:屬性均在臨界值內", + "attributesFailed": "SMART:{attributes} 失敗", + "noCriticalWarning": "SMART:SSD 未回報警告", + "criticalWarning": "SMART:SSD 回報重大警告" + }, + "gauge": { + "cpuUsage": "CPU 使用率", + "cpuTemperature": "CPU 溫度", + "memoryUsage": "記憶體使用率", + "gpuUsage": "{name} GPU 使用量" }, - "memory": {}, "error": { "internalServerError": "取得健康狀態失敗" }, "cluster": { - "summary": { - "cpu": "處理器", - "memory": "記憶體" - }, "resource": { "node": { "name": "節點數" @@ -2214,8 +3364,6 @@ "table": { "header": { "name": "名稱", - "cpu": "處理器", - "memory": "記憶體", "node": "節點" } } @@ -2225,33 +3373,29 @@ "name": "", "description": "", "option": { - "columns": { - "label": "要顯示的欄" + "endpointIds": { + "label": "Docker 環境", + "description": "留白即可顯示所有 Docker 環境中的容器", + "placeholder": "所有 Docker 環境" }, - "enableRowSorting": { - "label": "" + "containerFilter": { + "label": "要篩選的容器" + }, + "filterIsWhitelist": { + "label": "以白名單篩選" }, "defaultSort": { - "label": "", "option": { "name": "", "state": "", "cpuUsage": "", "memoryUsage": "" } - }, - "descendingDefaultSort": { - "label": "" - }, - "columnOrder": { - "label": "欄位順序" - }, - "columnWidths": { - "label": "欄位寬度" } }, "error": { "internalServerError": "", + "endpointsUnavailable": "Docker 端點無法使用", "layoutSaveTitle": "表格版面配置未儲存", "layoutSaveMessage": "無法儲存 Docker 表格版面配置。請再次移動或調整欄位大小。" }, @@ -2260,7 +3404,6 @@ } }, "coolify": { - "name": "", "description": "", "option": { "showServers": { @@ -2286,17 +3429,49 @@ "internalServerError": "" }, "server": { - "buildServer": "" + "buildServer": "", + "resourceCounts": "{applications, plural, other {# 個應用程式}} / {services, plural, other {# 個服務}}", + "reachability": "可連線性", + "usability": "可用性" + }, + "source": { + "url": "來源:{url}", + "unavailable": "{source}:無法使用" }, "instances": { "title": "" + }, + "action": { + "openResource": "開啟 {name}", + "openLogs": "開啟 {name} 記錄", + "showIp": "顯示 IP 位址", + "hideIp": "隱藏 IP 位址" + }, + "status": { + "running": "運行中", + "stopped": "已停止", + "exited": "已退出", + "starting": "正在啟動", + "restarting": "正在重啟", + "unknown": "未知", + "online": "在線", + "offline": "離線", + "reachable": "可連線", + "unreachable": "無法連線", + "usable": "可使用", + "unusable": "不可使用" } }, "vpn": { "name": "VPN", "description": "VPN 連線概覽", "serviceUnavailable": "VPN 不可用", - "option": {} + "status": { + "running": "運行中", + "notRunning": "未執行", + "unavailable": "無法使用", + "vpn": "VPN:{status}" + } }, "ups": { "name": "UPS", @@ -2323,14 +3498,19 @@ "runtime": "執行時間", "load": "負載", "input": "輸入", - "output": "輸出" + "output": "輸出", + "batteryVoltage": "電池電壓", + "power": "功率", + "temperature": "溫度", + "manufacturer": "製造商", + "model": "模型", + "serial": "序號" }, "error": { "internalServerError": "無法取得 UPS 資料" } }, "tracearr": { - "name": "", "description": "", "option": { "showStreams": { @@ -2418,10 +3598,7 @@ "label": "事件", "description": "顯示特定事件的總出現次數", "placeholder": "選擇一個事件", - "loading": "正在載入事件……", - "noEvents": "未找到事件", - "none": "無事件", - "configureWebsiteFirst": "請先選擇網站以載入事件" + "none": "無事件" }, "chartType": { "label": "圖表類型", @@ -2452,26 +3629,21 @@ "eventNames": { "label": "事件", "description": "選取一或多個事件來繪製圖表", - "placeholder": "選取事件……", - "loading": "正在載入事件……", - "noEvents": "未找到事件", - "configureWebsiteFirst": "請先選擇網站以載入事件" + "placeholder": "選取事件……" }, "topCount": { "label": "顯示項目數", "description": "要顯示的熱門項目數量(最多 500)" + }, + "events": { + "loading": "正在載入事件……", + "noEvents": "找不到事件", + "configureWebsiteFirst": "請先選取網站以載入事件" } }, "event": { - "occurrences": "事件", "label": "事件" }, - "topPages": { - "direct": "直接" - }, - "topReferrers": { - "direct": "直接" - }, "events": { "selectPrompt": "選取要繪製圖表的事件" }, @@ -2480,6 +3652,9 @@ "noWebsite": "未設定網站", "noData": "無可用資料", "internalServerError": "無法取得 Umami 資料" + }, + "top": { + "direct": "直接" } }, "common": { @@ -2507,7 +3682,8 @@ }, "integration": { "noData": "未找到集成", - "description": "點擊 創建新的集成" + "description": "點擊 創建新的集成", + "manage": "管理集成" }, "app": { "noData": "未找到應用程式", @@ -2518,7 +3694,61 @@ "noIntegration": "未選擇集成", "noData": "無可用的集成數據" }, - "option": {} + "integrationDisconnected": "無可用數據,所有集成皆已斷開連線", + "updatedAt": "已更新於 {date}", + "title": { + "label": "標題" + }, + "openInNewTab": { + "label": "於新分頁開啟" + }, + "showTitle": { + "label": "顯示標題" + }, + "weatherLocation": { + "label": "天氣位置" + }, + "layout": { + "label": "顯示布局", + "option": { + "horizontal": "橫向", + "vertical": "垂直", + "grid": "網格" + } + }, + "select": { + "loading": "正在載入……", + "loadError": "無法載入選項" + }, + "dateFormat": { + "label": "日期格式", + "description": "日期應該是什麼樣式" + }, + "visibleStorageVolumes": { + "label": "可見儲存區", + "description": "只有在所有選取的整合都是 OpenMediaVault 或 Synology 時才能使用。留白即可顯示所有偵測到的儲存區。", + "placeholder": "選取儲存區" + }, + "tableOptions": { + "columns": { + "label": "顯示的列" + }, + "columnOrder": { + "label": "欄順序" + }, + "columnWidths": { + "label": "欄寬" + }, + "enableRowSorting": { + "label": "啟用項目排序" + }, + "defaultSort": { + "label": "默認排序列" + }, + "invertSorting": { + "label": "倒序" + } + } }, "video": { "name": "串流影音", @@ -2577,6 +3807,7 @@ "transcoding": "轉碼中", "paused": "已暫停", "remaining": "剩餘 {minutes} 分鐘", + "seasonEpisode": "S{season} E{episode}", "metadata": { "title": "", "video": { @@ -2594,11 +3825,16 @@ "resolution": "", "target": "" } - } + }, + "unknownUser": "未知使用者" + }, + "summary": { + "sessions": "{count, plural, other {# 個工作階段}}", + "playing": "{count} 個播放中", + "transcoding": "{count} 個轉碼中" } }, "paperlessNgx": { - "name": "Paperless-ngx", "description": "你的 Paperless-ngx 文件歸檔概覽", "documentsTotal": "文件總數", "documentsInbox": "收件匣", @@ -2642,6 +3878,192 @@ "internalServerError": "無法取得 Paperless-ngx 資料" } }, + "patchmon": { + "description": "來自 PatchMon 的主機修補狀態概覽", + "title": "PatchMon 統計", + "totalHosts": "主機總數", + "hostsNeedingUpdates": "需要更新", + "securityUpdates": "安全性更新", + "upToDateHosts": "已更新至最新", + "hostsWithSecurityUpdates": "有安全性更新的主機", + "recentUpdates24h": "更新 (24h)", + "totalOutdatedPackages": "過時套件", + "totalRepos": "儲存庫", + "osDistribution": "作業系統分佈", + "compliance": "修補合規性", + "complianceRatio": "{upToDate} / {total}", + "lastUpdated": "更新於 {time}", + "option": { + "showTotalHosts": { + "label": "顯示主機總數", + "description": "顯示受監控的主機總數" + }, + "showHostsNeedingUpdates": { + "label": "顯示需要更新的主機", + "description": "顯示至少有一個過時套件的主機" + }, + "showSecurityUpdates": { + "label": "顯示安全性更新總數", + "description": "顯示可用的安全性更新總數" + }, + "showUpToDateHosts": { + "label": "顯示已更新至最新主機", + "description": "顯示沒有任何過時套件的主機" + }, + "showHostsWithSecurityUpdates": { + "label": "顯示有安全性更新的主機", + "description": "顯示需要安全性修補的主機" + }, + "showRecentUpdates24h": { + "label": "顯示近期更新 (24h)", + "description": "顯示過去 24 小時內已套用的更新數量" + }, + "showTotalOutdatedPackages": { + "label": "顯示過時套件總數", + "description": "顯示所有主機上過時套件的總數" + }, + "showTotalRepos": { + "label": "顯示儲存庫數量", + "description": "顯示正在監控的活躍儲存庫數量" + }, + "enableThresholdColors": { + "label": "啟用閾值顏色", + "description": "根據嚴重性預設將統計值著色為綠色、黃色或紅色" + }, + "useCustomThresholds": { + "label": "進階閾值", + "description": "使用絕對計數或主機總數百分比,對每個統計值自訂警告和嚴重閾值" + }, + "thresholdMode": { + "option": { + "absolute": "絕對計數", + "percent": "主機總數百分比" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "需要更新閾值模式", + "description": "以絕對值或主機總數百分比比較需要更新的計數" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "需要更新警告閾值" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "需要更新嚴重閾值" + }, + "securityUpdatesThresholdMode": { + "label": "安全性更新閾值模式", + "description": "以絕對值或主機總數百分比比較安全性更新的計數" + }, + "securityUpdatesWarningAt": { + "label": "安全性更新警告閾值" + }, + "securityUpdatesCriticalAt": { + "label": "安全性更新嚴重閾值" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "有安全性更新主機閾值模式", + "description": "以絕對值或主機總數百分比比較主機計數" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "有安全性更新主機警告閾值" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "有安全性更新主機嚴重閾值" + }, + "upToDateHostsThresholdMode": { + "label": "已更新至最新主機閾值模式", + "description": "以絕對值或主機總數百分比比較已更新至最新主機計數" + }, + "upToDateHostsWarningAt": { + "label": "已更新至最新主機警告閾值", + "description": "數值達到或高於此閾值但低於全覆蓋時轉為黃色" + }, + "upToDateHostsCriticalAt": { + "label": "已更新至最新主機嚴重閾值", + "description": "數值低於此閾值時轉為紅色" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "過時套件閾值模式", + "description": "以絕對值或主機總數百分比比較過時套件計數" + }, + "totalOutdatedPackagesWarningAt": { + "label": "過時套件警告閾值" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "過時套件嚴重閾值" + }, + "showOsDistribution": { + "label": "顯示作業系統分佈", + "description": "顯示按作業系統細分的受監控主機" + }, + "osDistributionLimit": { + "label": "作業系統分佈限制", + "description": "最多顯示的作業系統數量", + "option": { + "3": "前 3 名", + "5": "前 5 名", + "10": "前 10 名", + "all": "全部" + } + }, + "showOsVersion": { + "label": "顯示作業系統版本", + "description": "當可用時,在每個分佈標籤後附加作業系統版本" + }, + "showComplianceHero": { + "label": "顯示合規性英雄", + "description": "顯示一個合規性環,展示已更新至最新主機的百分比" + }, + "osDisplayMode": { + "label": "作業系統顯示模式", + "description": "選擇如何顯示作業系統分佈", + "option": { + "bars": "水平長條", + "donut": "甜甜圈圖" + } + }, + "threshold": { + "warningAt": { + "description": "數值達到此臨界值時顯示黃色" + }, + "criticalAt": { + "description": "數值達到此臨界值時顯示紅色" + } + } + }, + "error": { + "internalServerError": "無法擷取 PatchMon 資料" + } + }, + "bazarr": { + "description": "來自 Bazarr 實例的缺少字幕和健康狀態概覽", + "episodes": "缺少的集數", + "movies": "缺少的電影", + "providers": "提供者問題", + "status": "健康問題", + "announcements": "公告", + "option": { + "showMissingEpisodes": { + "label": "顯示缺少的集數", + "description": "顯示缺少字幕的集數數量" + }, + "showMissingMovies": { + "label": "顯示缺少的電影", + "description": "顯示缺少字幕的電影數量" + }, + "showProviderIssues": { + "label": "顯示提供者問題", + "description": "顯示有問題的字幕提供者數量" + }, + "showHealthIssues": { + "label": "顯示健康問題", + "description": "顯示 Bazarr 健康問題的數量" + } + }, + "error": { + "internalServerError": "無法擷取 Bazarr 資料" + } + }, "immich-serverStats": { "name": "", "description": "", @@ -2666,7 +4088,8 @@ "users": "", "photos": "", "videos": "", - "storage": "" + "storage": "", + "albumLimit": "最大相簿(最多顯示 {count} 個)" }, "immich-albumCarousel": { "name": "", @@ -2690,24 +4113,21 @@ } }, "description": "來自 Immich 相簿或完整圖庫的照片幻燈片", - "noPhotos": "找不到照片" + "noPhotos": "找不到照片", + "albumPhoto": "相簿照片", + "actions": { + "previousPhoto": "上一張照片", + "nextPhoto": "下一張照片", + "pauseSlideshow": "暫停投影片放映", + "resumeSlideshow": "繼續投影片放映", + "toggleSlideshow": "暫停或繼續投影片放映", + "photo": "相片 {number}" + } }, "downloads": { "name": "下載器", "description": "允許查看和管理來自 Torrent 和 Usenet 的下載器", "option": { - "columns": { - "label": "顯示的列" - }, - "enableRowSorting": { - "label": "啟用項目排序" - }, - "defaultSort": { - "label": "默認排序列" - }, - "descendingDefaultSort": { - "label": "倒序" - }, "showCompletedUsenet": { "label": "顯示標記為已完成的 Usenet 項目" }, @@ -2732,12 +4152,6 @@ "limitPerIntegration": { "label": "", "description": "" - }, - "columnOrder": { - "label": "欄位順序" - }, - "columnWidths": { - "label": "欄位寬度" } }, "errors": { @@ -2768,7 +4182,7 @@ "detailsTitle": "下載器中的當前索引" }, "id": { - "columnTitle": "ID", + "columnTitle": "項目 ID", "detailsTitle": "項目 ID" }, "integration": { @@ -2898,6 +4312,10 @@ "mediaRequests-requestList": { "name": "多媒體請求列表", "description": "查看 Overrseerr 或 Jellyseerr 中所有多媒體請求列表", + "empty": { + "title": "尚無媒體請求", + "description": "搜尋電影或節目以開始請求。" + }, "option": { "linksTargetNewTab": { "label": "於新分頁中開啟鏈結" @@ -2931,12 +4349,16 @@ "failed": "失敗", "completed": "已完成" }, + "unknown": "未知", "toBeDetermined": "多媒體請求狀態" }, "mediaRequests-requestStats": { "name": "多媒體請求狀態", "description": "多媒體請求統計", - "option": {}, + "empty": { + "title": "尚無請求活動", + "description": "第一個媒體請求完成後會顯示統計資料。" + }, "titles": { "stats": { "main": "多媒體狀態", @@ -2946,8 +4368,7 @@ "declined": "已拒絕", "available": "已可用", "tv": "電視劇請求", - "movie": "電影請求", - "total": "總計" + "movie": "電影請求" }, "users": { "main": "使用者排行", @@ -2973,7 +4394,6 @@ }, "currentIndex": "{total} 的 {start} - {end}", "healthCheck": { - "title": "健康檢查", "queued": "隊列中", "status": { "healthy": "健康", @@ -2982,38 +4402,63 @@ }, "panel": { "statistics": { - "empty": "空", - "transcodes": "轉碼", - "transcodesCount": "轉碼:{value}", - "healthChecksCount": "健康檢查:{value}", "filesCount": "檔案:{value}", "savedSpace": "節省空間:{value}", - "healthChecks": "健康檢查", "videoCodecs": "編碼", "videoContainers": "容器", "videoResolutions": "解析度" }, "workers": { - "empty": "空", "table": { - "file": "檔案", "eta": "剩餘時間", - "progress": "進度", - "transcode": "轉碼", - "healthCheck": "健康檢查" + "progress": "進度" } }, "queue": { - "empty": "空", "table": { - "file": "檔案", - "size": "大小", - "transcode": "轉碼", - "healthCheck": "健康檢查" + "size": "大小" } + }, + "common": { + "empty": "空", + "file": "檔案", + "healthCheck": "健康檢查", + "transcode": "轉碼", + "transcodes": "轉碼:{value}", + "healthChecks": "健康檢查:{value}" } } }, + "mediaMissing": { + "name": "缺少和佇列中的媒體", + "description": "顯示來自 Radarr 和 Sonarr 的缺少和佇列中的電影及影集", + "option": { + "showMissing": { + "label": "顯示缺少的項目" + }, + "showQueued": { + "label": "顯示佇列中的項目" + }, + "pageSize": { + "label": "每頁項目數" + } + }, + "tab": { + "missing": "缺少", + "queued": "佇列中" + }, + "type": { + "movie": "電影", + "episode": "集數", + "book": "書籍" + }, + "empty": { + "missing": "沒有缺少的項目", + "queued": "沒有佇列中的項目", + "noTabsEnabled": "在小工具設定中至少啟用一個分頁" + }, + "timeLeft": "剩餘時間" + }, "rssFeed": { "name": "RSS 訂閱", "description": "顯示一個或多個 RSS、ATOM、JSON 源", @@ -3036,6 +4481,13 @@ "showPosterImage": { "label": "" } + }, + "error": { + "allFeedsFailed": "無法載入 RSS 摘要。請檢查摘要 URL 並再試一次。" + }, + "warning": { + "partial": "{count, plural, other {# 個 RSS 訂閱來源無法載入}}", + "stale": "RSS 摘要無法重新整理。顯示先前載入的項目。" } }, "releases": { @@ -3111,17 +4563,8 @@ "label": "正則表達式" } }, - "edit": { - "label": "編輯" - }, "editForm": { - "title": "編輯儲存庫", - "cancel": { - "label": "取消" - }, - "confirm": { - "label": "確認" - } + "title": "編輯儲存庫" }, "importForm": { "title": "" @@ -3138,8 +4581,7 @@ "label": "提供者令牌", "token": "令牌", "configured": "令牌已設定", - "notConfigured": "未設定令牌", - "save": "儲存" + "notConfigured": "未設定令牌" } } }, @@ -3166,17 +4608,32 @@ "noProviderResponse": "", "unexpected": "未預期的提供者錯誤" } - } + }, + "expandDetails": "顯示 {name} 的詳細資料", + "collapseDetails": "隱藏 {name} 的詳細資料" }, "networkControllerSummary": { - "option": {}, - "card": { - "vpn": { - "countConnected": "{count} 已連線" + "advanced": { + "updated": "已更新", + "metric": { + "latency": "延遲", + "ping": "連線延遲", + "uptime": "運行時間", + "users": "使用者", + "guests": "訪客" } }, + "card": { + "vpn": { + "countConnected": "{count, plural, other {# 個已連線}}", + "label": "虛擬私人網路(VPN)" + }, + "wan": "廣域網路(WAN)", + "web": "網頁", + "wifi": "無線網路", + "lan": "區域網路(LAN)" + }, "error": { - "integrationsDisconnected": "無可用的數據,所有集成皆已斷開連線", "unknownContentOption": "網路控制總覽小工具出現未知的內容選項:" }, "name": "網路控制總覽", @@ -3213,7 +4670,6 @@ } }, "error": { - "integrationsDisconnected": "無可用數據,所有集成皆已斷開連線", "unknownContentOption": "網路狀態小工具的未知內容選項:" }, "name": "網路狀態", @@ -3243,7 +4699,6 @@ "versiontitle": "", "cputitle": "", "memorytitle": "", - "cpu": "", "memory": "", "interfaces": { "name": "", @@ -3251,6 +4706,16 @@ "recv": "", "title": "" } + }, + "empty": { + "noInterfaces": "尚無網路介面資料" + }, + "versionUnknown": "未知版本", + "metricAccessible": "{metric}:{value}%、{status}", + "status": { + "normal": "正常", + "warning": "警告", + "critical": "嚴重" } }, "notifications": { @@ -3260,8 +4725,21 @@ "option": { "hideLogos": { "label": "隱藏標誌" + }, + "messageFormat": { + "label": "訊息格式", + "option": { + "auto": "自動", + "plain": "純文字", + "markdown": "Markdown 格式", + "html": "HTML 格式" + } } - } + }, + "openService": "開啟通知服務", + "deleteNotification": "從 Gotify 刪除通知", + "deleteFailed": "無法刪除通知", + "deleteFailedMessage": "無法刪除通知。請再試一次。" }, "speedtestTracker": { "name": "", @@ -3303,7 +4781,6 @@ } }, "uptimeKuma": { - "name": "Uptime Kuma", "description": "從你的 Uptime Kuma 狀態頁面監控運作時間統計資料", "option": { "showAverageUptime": { @@ -3340,8 +4817,58 @@ }, "error": { "internalServerError": "無法取得運作時間資料" + }, + "status": { + "up": "總上傳", + "down": "下載速度", + "paused": "已暫停" } }, + "traefik": { + "description": "Traefik 路由器、服務、中間件和入口點概覽", + "option": { + "showTcp": { + "label": "顯示 TCP" + }, + "showUdp": { + "label": "顯示 UDP" + }, + "showEntryPoints": { + "label": "顯示入口點" + } + }, + "instances": "Traefik 實例", + "versionUnknown": "版本未知", + "summary": { + "routers": "路由器", + "entryPoints": "入口點" + }, + "resource": { + "routers": "路由器", + "middlewares": "中間件" + }, + "status": { + "healthy": "健康", + "errors": "{count} 個錯誤", + "warnings": "{count} 個警告" + }, + "error": { + "internalServerError": "無法擷取 Traefik 資料" + }, + "resourceType": { + "router": "路由器", + "service": "服務", + "middleware": "中介軟體" + }, + "resourceStatus": { + "enabled": "已啟用", + "disabled": "已停用", + "warning": "警告", + "error": "錯誤", + "unknown": "未知" + }, + "failedEndpoint": "失敗:{endpoint}" + }, "audioStats": { "name": "音訊統計", "description": "來自 Navidrome 或 Audiobookshelf 的資料庫和播放統計資料", @@ -3406,9 +4933,7 @@ "label": "", "description": "", "option": { - "cpu": "", "memory": "", - "gpu": "", "network": "" } }, @@ -3423,12 +4948,11 @@ } }, "card": { - "cpu": "", "memory": "", - "gpu": "", "network": "", "up": "", - "down": "" + "down": "", + "memoryTooltip": "{used} / {available}({percent}%)" } }, "systemDisks": { @@ -3445,7 +4969,7 @@ "label": "" }, "absolute": { - "label": "" + "label": "絕對值" }, "free": { "label": "" @@ -3454,151 +4978,88 @@ }, "showBackgroundBar": { "label": "" - }, - "visibleStorageVolumes": { - "label": "可見儲存磁碟區", - "description": "僅在所有選取的整合均為 Synology 時可用。留空則顯示所有偵測到的儲存磁碟區。", - "placeholder": "選擇儲存磁碟區" } }, "status": { - "unhealthy": "" + "unhealthy": "", + "smart": "自我監測、分析與報告技術(SMART)", + "free": "剩餘 {percentage}%" + } + }, + "customApi": { + "name": "自訂小工具", + "description": "呈現已設定的自訂 JSX 定義。", + "customJsx": { + "noTemplate": "尚未設定 JSX 範本。", + "templateWarnings": "{count} 個範本警告:", + "requestIdRequired": "此網路控制項需要具名的 requestId。", + "unsavedPreview": "請先在編輯器中執行初始請求測試,再測試具名請求。", + "invalidParams": "請求參數無效。", + "loading": "正在載入請求……", + "loadRequest": "載入請求", + "requestFailed": "請求失敗。", + "retry": "重試請求", + "actionCompleted": "動作已成功完成。", + "actionSimulated": "動作已模擬;未傳送請求。", + "actionsDisabledEditMode": "看板處於編輯模式時,動作已停用。", + "widgetItemUnavailable": "此小工具項目無法使用。", + "toggle": "切換", + "copied": "已複製", + "confirmDelete": "確認此破壞性動作。" + }, + "option": { + "definitionId": { + "label": "自訂小工具" + }, + "refreshInterval": { + "label": "重新整理間隔", + "description": "從 API 重新擷取資料的頻率 (秒)" + } + }, + "noDefinition": "未選擇定義", + "definitionNotFound": "自訂小工具無法使用", + "migrationRequired": "此舊版自訂小工具已保留,但必須從「管理自訂小工具」遷移至 Custom JSX v2 後才能執行。", + "manageMigration": "開啟「管理自訂小工具」", + "contactAdmin": "請聯絡管理員。", + "configurationNeedsRepair": "此小工具的選項已變更。請編輯小工具以修復其設定。", + "removeFromBoard": "從看板移除", + "editModePending": "儲存看板以載入此小工具。", + "picker": { + "group": "自訂 JSX 小工具", + "empty": "找不到自訂小工具", + "preview": "預覽", + "sources": "{count, plural, other {# 個來源}}", + "requests": "{count, plural, other {# 個請求}}", + "migrationRequired": "需要遷移", + "migrationDescription": "此已放置的 v1 小工具目前無法執行。請將其已遮蔽的提示複製到 LLM,然後將單一 JSON 回應貼回 Homarr。", + "manageMigration": "開啟「管理自訂小工具」", + "contactAdmin": "請聯絡管理員。" + }, + "configuration": { + "needsAttention": "設定需要注意:{message}", + "advancedOptions": "進階選項", + "invalidJson": "無效的 JSON" } }, "beszelSystemTable": { "name": "Beszel 系統(表格)", "description": "所有 Beszel 監控系統的表格檢視,帶有可排序的欄位和狀態指示器", "option": { - "statusFilter": { - "label": "狀態篩選" - }, "sortBy": { "label": "排序依據" }, "sortDirection": { "label": "排序方向" - }, - "showCpu": { - "label": "顯示 CPU" - }, - "showMemory": { - "label": "顯示記憶體" - }, - "showDisk": { - "label": "顯示磁碟" - }, - "showGpu": { - "label": "顯示 GPU" - }, - "showLoadAvg": { - "label": "顯示平均負載" - }, - "showNet": { - "label": "顯示網路" - }, - "showTemp": { - "label": "顯示溫度" - }, - "showBattery": { - "label": "顯示電池" - }, - "showServices": { - "label": "顯示服務" - }, - "showUptime": { - "label": "顯示運作時間" - }, - "showAgent": { - "label": "顯示代理版本" - }, - "columnOrder": { - "label": "欄位順序" - }, - "columnWidths": { - "label": "欄位寬度" } }, - "noRecords": "找不到系統", "error": { - "internalServerError": "無法連線到 Beszel。請檢查整合設定。", "layoutSaveTitle": "無法儲存表格版面配置", "layoutSaveMessage": "無法儲存您的欄位順序或寬度。請再試一次。" - }, - "column": { - "system": "系統", - "cpu": "處理器", - "memory": "記憶體", - "disk": "磁碟", - "gpu": "GPU", - "loadAvg": "平均負載", - "net": "網路", - "temp": "溫度", - "battery": "電池", - "services": "服務", - "uptime": "運作時間", - "agent": "代理" } }, "beszelSystemGrid": { "name": "Beszel 系統(網格)", - "description": "所有 Beszel 監控系統的卡片網格檢視,帶有即時指標", - "option": { - "statusFilter": { - "label": "狀態篩選" - }, - "showCpu": { - "label": "顯示 CPU" - }, - "showMemory": { - "label": "顯示記憶體" - }, - "showDisk": { - "label": "顯示磁碟" - }, - "showGpu": { - "label": "顯示 GPU" - }, - "showLoadAvg": { - "label": "顯示平均負載" - }, - "showNet": { - "label": "顯示網路" - }, - "showTemp": { - "label": "顯示溫度" - }, - "showBattery": { - "label": "顯示電池" - }, - "showServices": { - "label": "顯示服務" - }, - "showUptime": { - "label": "顯示運作時間" - }, - "showAgent": { - "label": "顯示代理版本" - } - }, - "error": { - "internalServerError": "無法連線到 Beszel。請檢查整合設定。" - }, - "empty": { - "noSystems": "找不到系統" - }, - "metric": { - "cpu": "處理器", - "memory": "記憶體", - "disk": "磁碟", - "gpu": "GPU", - "loadAvg": "平均負載", - "net": "網路", - "temp": "溫度", - "battery": "電池", - "services": "服務", - "uptime": "運作時間", - "agent": "代理" - } + "description": "所有 Beszel 監控系統的卡片網格檢視,帶有即時指標" }, "beszelAlerts": { "name": "Beszel 警報", @@ -3612,11 +5073,12 @@ } }, "empty": "未設定警報", - "error": { - "internalServerError": "無法連線到 Beszel。請檢查整合設定。" - }, "history": "歷程記錄", "resolved": "已解決", + "alertDescription": { + "statusDuration": "已中斷 {minutes} 分鐘", + "threshold": "在 {minutes} 分鐘內超過 {value}" + }, "status": { "triggered": "已觸發", "ok": "正常" @@ -3663,16 +5125,16 @@ "noSystems": "找不到系統" }, "error": { - "internalServerError": "無法連線到 Beszel。請檢查整合設定。", "liveConnectionFailed": "即時連線失敗。您的 Beszel 實例可能不支援即時串流。", "switchToHistorical": "切換到歷史檢視", - "systemNotFound": "找不到所選的系統。請選擇其他系統。" + "systemNotFound": "找不到所選的系統。請選擇其他系統。", + "selectionSaveTitle": "無法儲存選取項目", + "selectionSaveMessage": "無法儲存您的系統或時間範圍選取項目。請再試一次。" }, "chart": { "cpu": { "title": "CPU 使用率", - "subtitle": "平均系統範圍 CPU 使用率", - "series": "處理器" + "subtitle": "平均系統範圍 CPU 使用率" }, "memory": { "title": "記憶體使用率", @@ -3714,256 +5176,95 @@ "title": "Docker 網路 I/O", "subtitle": "Docker 容器的網路流量" } + }, + "period": { + "live": "即時", + "oneHour": "1 小時", + "twelveHours": "12 小時", + "oneDay": "24 小時", + "oneWeek": "1 週", + "thirtyDays": "30 天" } }, - "patchmon": { - "name": "PatchMon", - "description": "來自 PatchMon 的主機修補狀態概覽", - "title": "PatchMon 統計", - "totalHosts": "主機總數", - "hostsNeedingUpdates": "需要更新", - "securityUpdates": "安全性更新", - "upToDateHosts": "已更新至最新", - "hostsWithSecurityUpdates": "有安全性更新的主機", - "recentUpdates24h": "更新 (24h)", - "totalOutdatedPackages": "過時套件", - "totalRepos": "儲存庫", - "osDistribution": "作業系統分佈", - "compliance": "修補合規性", - "complianceRatio": "{upToDate} / {total}", - "lastUpdated": "更新於 {time}", - "option": { - "showTotalHosts": { - "label": "顯示主機總數", - "description": "顯示受監控的主機總數" - }, - "showHostsNeedingUpdates": { - "label": "顯示需要更新的主機", - "description": "顯示至少有一個過時套件的主機" - }, - "showSecurityUpdates": { - "label": "顯示安全性更新總數", - "description": "顯示可用的安全性更新總數" - }, - "showUpToDateHosts": { - "label": "顯示已更新至最新主機", - "description": "顯示沒有任何過時套件的主機" - }, - "showHostsWithSecurityUpdates": { - "label": "顯示有安全性更新的主機", - "description": "顯示需要安全性修補的主機" - }, - "showRecentUpdates24h": { - "label": "顯示近期更新 (24h)", - "description": "顯示過去 24 小時內已套用的更新數量" - }, - "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": "前 3 名", - "5": "前 5 名", - "10": "前 10 名", - "all": "全部" - } - }, - "showOsVersion": { - "label": "顯示作業系統版本", - "description": "當可用時,在每個分佈標籤後附加作業系統版本" - }, - "showComplianceHero": { - "label": "顯示合規性英雄", - "description": "顯示一個合規性環,展示已更新至最新主機的百分比" - }, - "osDisplayMode": { - "label": "作業系統顯示模式", - "description": "選擇如何顯示作業系統分佈", - "option": { - "bars": "水平長條", - "donut": "甜甜圈圖" - } - } + "assistant": { + "name": "助理", + "description": "直接在您的看板上進行完整的助理對話。", + "unavailable": { + "title": "助理無法使用", + "description": "請登入並要求管理員從管理面板設定助理。" }, + "compact": { + "title": "助理", + "description": "調整此小工具大小即可在此聊天,或開啟完整對話。", + "open": "開啟助理", + "openTitle": "助理已在側邊面板開啟", + "openDescription": "對話會保留在一個作用中的介面中。", + "returnToWidget": "將對話返回此小工具", + "otherWidgetTitle": "助理已在其他小工具中啟用", + "otherWidgetDescription": "同一時間只會有一個對話介面保持啟用。", + "useHere": "在此小工具中使用助理" + } + }, + "beszel": { "error": { - "internalServerError": "無法擷取 PatchMon 資料" - } - }, - "bazarr": { - "name": "Bazarr", - "description": "來自 Bazarr 實例的缺少字幕和健康狀態概覽", - "episodes": "缺少的集數", - "movies": "缺少的電影", - "providers": "提供者問題", - "status": "健康問題", - "option": { - "showMissingEpisodes": { - "label": "顯示缺少的集數", - "description": "顯示缺少字幕的集數數量" - }, - "showMissingMovies": { - "label": "顯示缺少的電影", - "description": "顯示缺少字幕的電影數量" - }, - "showProviderIssues": { - "label": "顯示提供者問題", - "description": "顯示有問題的字幕提供者數量" - }, - "showHealthIssues": { - "label": "顯示健康問題", - "description": "顯示 Bazarr 健康問題的數量" - } - }, - "error": { - "internalServerError": "無法擷取 Bazarr 資料" - } - }, - "mediaMissing": { - "name": "缺少和佇列中的媒體", - "description": "顯示來自 Radarr 和 Sonarr 的缺少和佇列中的電影及影集", - "option": { - "showMissing": { - "label": "顯示缺少的項目" - }, - "showQueued": { - "label": "顯示佇列中的項目" - }, - "pageSize": { - "label": "每頁項目數" - } - }, - "tab": { - "missing": "缺少", - "queued": "佇列中" - }, - "type": { - "movie": "電影", - "episode": "集數" + "internalServerError": "無法連線至 Beszel。請檢查整合設定。" }, "empty": { - "missing": "沒有缺少的項目", - "queued": "沒有佇列中的項目", - "noTabsEnabled": "在小工具設定中至少啟用一個分頁" + "noSystems": "找不到系統" }, - "timeLeft": "剩餘時間" - }, - "traefik": { - "name": "Traefik", - "description": "Traefik 路由器、服務、中間件和入口點概覽", - "option": { - "showTcp": { - "label": "顯示 TCP" + "options": { + "statusFilter": { + "label": "狀態篩選器" }, - "showUdp": { - "label": "顯示 UDP" + "showCpu": { + "label": "顯示 CPU" }, - "showEntryPoints": { - "label": "顯示入口點" + "showMemory": { + "label": "顯示記憶體" + }, + "showDisk": { + "label": "顯示磁碟" + }, + "showGpu": { + "label": "顯示 GPU" + }, + "showLoadAvg": { + "label": "顯示平均負載" + }, + "showNet": { + "label": "顯示網路" + }, + "showTemp": { + "label": "顯示溫度" + }, + "showBattery": { + "label": "顯示電池" + }, + "showServices": { + "label": "顯示服務" + }, + "showUptime": { + "label": "顯示運作時間" + }, + "showAgent": { + "label": "顯示代理程式版本" } }, - "instances": "Traefik 實例", - "versionUnknown": "版本未知", - "summary": { - "routers": "路由器", - "entryPoints": "入口點" - }, - "resource": { - "routers": "路由器", - "services": "服務", - "middlewares": "中間件" - }, - "status": { - "healthy": "健康", - "errors": "{count} 個錯誤", - "warnings": "{count} 個警告" - }, - "error": { - "internalServerError": "無法擷取 Traefik 資料" + "metric": { + "system": "系統", + "source": "集成", + "hostname": "主機名稱", + "cpuModel": "CPU 型號", + "cores": "核心數", + "memoryTotal": "記憶體總量", + "memory": "記憶體", + "disk": "磁碟", + "loadAvg": "平均負載", + "net": "網路", + "temp": "溫度", + "battery": "電池", + "uptime": "運行時間", + "agent": "代理程式" } }, "llamacpp": { @@ -4041,37 +5342,384 @@ "specDraftTokens": "投機草稿 Token" } }, - "wud": { - "name": "What's Up Docker", - "description": "顯示有多少受監控的容器有可用更新。", - "title": "What's Up Docker", - "monitored": "已監控", - "updatesAvailable": "{count, plural, other {# 個可用更新}}", - "updateAvailable": "有可用更新", - "openReleaseNotes": "開啟發佈說明", + "stats": { + "name": "統計", + "description": "在一個可設定的小工具中整合來自各項整合的統計資料。", + "configure": "設定指標", + "refresh": "重新整理統計資料", + "empty": "開啟小工具設定,選取整合,然後新增指標。", + "editorHelp": "從為此小工具選取的整合中新增指標。變更會與您的儀表板一同儲存。", + "source": "集成", + "metric": "指標", + "noMetrics": "此整合沒有可用的統計資料", + "add": "新增指標", + "label": "自訂標籤", + "hidden": "已隱藏", + "compact": "精簡數字", + "moveUp": "上移", + "moveDown": "下移", + "remove": "移除指標", + "loading": "正在載入……", + "unavailable": "無法使用", + "refreshFailed": "重新整理失敗 — 顯示已儲存的資料", + "stale": "已儲存的資料 — 重新整理以更新", + "table": { + "value": "數值", + "status": "狀態" + }, "option": { - "showTitle": { - "label": "顯示標題" + "table": { + "label": "表格檢視" }, - "showRing": { - "label": "顯示更新環" + "rows": { + "label": "精簡列" }, - "layout": { - "label": "顯示布局", + "showIcon": { + "label": "顯示來源圖示" + }, + "spacing": { + "label": "間距", "option": { - "horizontal": { - "label": "橫向" + "xs": { + "label": "精簡" }, - "vertical": { - "label": "垂直" + "sm": { + "label": "舒適" + }, + "md": { + "label": "寬敞" } } }, - "showUpdateList": { - "label": "顯示容器更新清單", - "description": "列出每個具有可用映像更新的受監控容器" + "entries": { + "label": "指標" + }, + "plain": { + "label": "移除卡片背景" } - } + }, + "fetchFailed": "無法擷取統計資料", + "viewOptions": "自訂此檢視", + "moreMetrics": "進階檢視中還有 {count} 個指標", + "localHelp": "版面配置、格式和可見性僅套用至此檢視。共用的看板設定維持不變。", + "plain": "移除卡片背景", + "resetView": "重設檢視", + "allHidden": "此檢視中的所有指標均已隱藏。使用「自訂此檢視」以還原。" + }, + "wazuh": { + "target": { + "api": "Wazuh 伺服器 API", + "indexer": "Wazuh 索引器", + "wazuh": "Wazuh" + }, + "severity": { + "low": "低", + "medium": "中", + "high": "高", + "critical": "嚴重" + }, + "error": { + "unauthorized": { + "title": "{target} 拒絕了認證資料", + "description": "請檢查 Wazuh 整合中儲存的使用者名稱和密碼。伺服器 API(連接埠 55000)和索引器(連接埠 9200)使用不同的使用者。" + }, + "certificate": { + "title": "{target} 的憑證不受信任", + "description": "Wazuh 預設使用自我簽署的憑證。在整合上執行「測試連線」並信任該憑證,或在「設定 → 憑證」中新增您的 CA。" + }, + "unreachable": { + "title": "無法連線至 {target}", + "description": "主機拒絕或中斷了連線。請檢查 URL、連接埠和防火牆。在預設的一體式安裝中,索引器只監聽 localhost。" + }, + "timeout": { + "title": "{target} 請求逾時", + "description": "15 秒內沒有回應。服務可能超載,或位址可能不正確。" + }, + "status": { + "title": "{target} 回傳錯誤", + "description": "請求失敗,HTTP 狀態為 {status}。" + }, + "invalidResponse": { + "title": "{target} 回應異常", + "description": "請確認 URL 指向 Wazuh 伺服器 API 或索引器,而不是儀表板。" + }, + "indexerRequired": { + "title": "需要 Wazuh 索引器憑證", + "description": "警示、漏洞和檔案完整性事件會從 Wazuh 索引器讀取。請在整合中新增索引器 URL、使用者名稱和密碼。" + }, + "unknown": { + "title": "無法從 {target} 載入資料", + "description": "請查看 Homarr 記錄以取得詳細資料。" + } + }, + "range": { + "1h": "1 小時", + "24h": "24 小時", + "7d": "7 天", + "30d": "30 天" + }, + "levelTooltip": "規則層級 {level}({severity})" + }, + "wazuhAgents": { + "name": "Wazuh 代理程式", + "description": "可排序的 Wazuh 代理程式清單,包含狀態、作業系統、版本和最後保持連線時間", + "option": { + "statusFilter": { + "label": "顯示代理程式" + }, + "sortBy": { + "label": "排序依據" + }, + "showVersion": { + "label": "顯示 Wazuh 版本欄" + }, + "showGroups": { + "label": "顯示群組欄" + } + }, + "title": "代理程式", + "total": "{count} 個代理程式", + "status": { + "active": "活動中", + "disconnected": "斷線", + "neverConnected": "從未連線", + "pending": "待處理" + }, + "statusLabel": { + "active": "活動中", + "disconnected": "斷線", + "never_connected": "從未連線", + "pending": "待處理", + "unknown": "未知" + }, + "live": "即時", + "snapshot": "快照已存在 {age}", + "snapshotHint": "從 Wazuh 儀表板的代理程式快照(wazuh-monitoring)讀取,快照建立於 {time}。新增伺服器 API 認證資料以取得即時資料。", + "staleSnapshot": "{time} 的代理程式快照已過時。請確認 Wazuh 儀表板監控工作正在執行,或新增伺服器 API 認證資料。", + "noDisconnected": "所有代理程式都已連線", + "empty": "沒有代理程式符合此篩選條件", + "column": { + "status": "狀態", + "name": "工作名稱", + "ip": "IP 位址", + "os": "系統", + "version": "版本", + "lastKeepAlive": "保持連線", + "groups": "群組" + }, + "outdated": "比最新代理程式版本({version})舊" + }, + "wazuhAlerts": { + "name": "Wazuh 警示摘要", + "description": "包含等級、MITRE ATT&CK 技術、代理程式和來源 IP 的近期 Wazuh 警示", + "option": { + "minLevel": { + "label": "最低規則等級", + "description": "Wazuh 等級:0–6 低,7–11 中,12–14 高,15 以上嚴重" + }, + "hours": { + "label": "時間範圍(小時)" + }, + "limit": { + "label": "警示數量" + }, + "showMitre": { + "label": "顯示 MITRE ATT&CK 技術" + }, + "showAgent": { + "label": "顯示代理程式" + }, + "showSourceIp": { + "label": "顯示來源 IP" + }, + "showRuleId": { + "label": "顯示規則 ID" + } + }, + "title": "警示 · 層級 {level}+ · {hours} 小時", + "empty": "此等級沒有警示。一切平靜。", + "rule": "規則 {id}", + "openInDashboard": "在 Wazuh 儀表板中開啟此警示" + }, + "wazuhSummary": { + "name": "Wazuh 警示嚴重性", + "description": "警示嚴重性明細,並與上一個期間的趨勢比較", + "option": { + "range": { + "label": "時間範圍" + }, + "showTrend": { + "label": "顯示與上一個期間比較的趨勢" + }, + "showFooter": { + "label": "顯示頁尾" + } + }, + "title": "警示嚴重性 · {range}", + "alerts": "警示", + "none": "沒有警示", + "trend": { + "new": "創建", + "tooltip": "上一期間:{previous}" + }, + "previous": "上一個 {range}:{count}", + "maxLevel": "最高層級 {level}", + "health": "索引器健康狀態:{status}", + "manager": "管理器 {version}" + }, + "wazuhTimeline": { + "name": "Wazuh 警示時間軸", + "description": "依嚴重性顯示一段時間內 Wazuh 警示的堆疊圖表", + "option": { + "range": { + "label": "時間範圍" + }, + "interval": { + "label": "時間間隔" + }, + "chartType": { + "label": "圖表類型" + }, + "yScale": { + "label": "Y 軸刻度", + "description": "平方根刻度可讓高嚴重性和嚴重警示在數千個低嚴重性警示旁仍清楚可見" + }, + "minLevel": { + "label": "最低規則等級" + }, + "showLegend": { + "label": "顯示包含總數的圖例" + } + }, + "title": "警示時間軸 · {range}", + "total": "{count} 個警示", + "interval": "每 {interval}" + }, + "wazuhTopList": { + "name": "Wazuh 排行清單", + "description": "依警示數量排列的熱門規則、代理程式、來源 IP,或 MITRE ATT&CK 戰術與技術", + "option": { + "kind": { + "label": "排名" + }, + "range": { + "label": "時間範圍" + }, + "limit": { + "label": "項目數量" + }, + "minLevel": { + "label": "最低規則等級" + }, + "showBars": { + "label": "顯示長條" + } + }, + "title": { + "rules": "熱門規則 · {range}", + "agents": "熱門代理程式 · {range}", + "sourceIps": "熱門來源 IP · {range}", + "mitreTactics": "MITRE 戰術 · {range}", + "mitreTechniques": "MITRE 技術 · {range}" + }, + "empty": { + "rules": "此期間沒有警示", + "agents": "此期間沒有警示", + "sourceIps": "此期間沒有帶來源 IP 的警示", + "mitreTactics": "此期間沒有對應至 MITRE ATT&CK 的警示", + "mitreTechniques": "此期間沒有對應至 MITRE ATT&CK 的警示" + }, + "totalTooltip": "符合條件的警示數:{count}", + "private": "區域網路", + "public": "公開", + "agents": "在 {count} 個代理程式上看見", + "others": "其他項目中還有 {count} 個警示" + }, + "wazuhVulnerabilities": { + "name": "Wazuh 弱點", + "description": "弱點數量、熱門 CVE 與最易受攻擊的代理程式", + "option": { + "cveOrder": { + "label": "CVE 排序依據" + }, + "minSeverity": { + "label": "CVE 嚴重性" + }, + "cveLimit": { + "label": "CVE 數量" + }, + "agentLimit": { + "label": "代理程式數量" + }, + "showAgents": { + "label": "顯示最易受攻擊的代理程式" + } + }, + "title": "弱點", + "topCves": "熱門 CVE", + "score": "分數", + "agentsShort": "代理程式", + "topAgents": "最易受攻擊的代理程式", + "criticalHigh": "嚴重/高", + "totalTooltip": "{agents} 個代理程式上有 {count} 個發現項目", + "affected": "{count} 個代理程式", + "empty": "未偵測到弱點", + "distribution": "嚴重性分佈。沒有分數的 {unscored} 個發現項目不會顯示。", + "worst": "最嚴重:{id}({score}),位於 {agents} 個代理程式上" + }, + "wazuhFim": { + "name": "Wazuh 檔案完整性", + "description": "最近的檔案完整性監控(syscheck)事件", + "option": { + "range": { + "label": "時間範圍" + }, + "event": { + "label": "事件" + }, + "limit": { + "label": "事件數量" + }, + "includeRegistry": { + "label": "包含 Windows 登錄檔事件" + } + }, + "title": "檔案完整性 · {range}", + "event": { + "added": "日期已新增", + "modified": "已修改", + "deleted": "已刪除", + "unknown": "已變更" + }, + "empty": "此期間沒有檔案完整性事件", + "user": "由 {user}", + "registry": "登錄檔" + }, + "wazuhAuthFailures": { + "name": "Wazuh 驗證失敗", + "description": "依代理程式顯示失敗登入與暴力破解警示,並附上每小時迷你圖", + "option": { + "hours": { + "label": "時間視窗(小時)" + }, + "limit": { + "label": "代理程式數量" + }, + "showSourceIps": { + "label": "顯示熱門來源 IP" + } + }, + "title": "驗證失敗 · {hours} 小時", + "seriesTooltip": "過去 {hours} 小時內的所有代理程式", + "peak": "峰值 {count}/區段", + "empty": "此期間沒有失敗登入", + "failed": "失敗登入", + "failedHint": "單次驗證失敗(sshd、PAM、Windows 登入、無效使用者)", + "bruteForce": "暴力破解", + "bruteForceHint": "相關聯的暴力破解規則(短時間內多次失敗,MITRE T1110)", + "sourceIps": "來源 IP", + "ipTooltip": "{ip}:{count} 次失敗", + "bruteForceCount": "{count} 次暴力破解" } }, "widgetPreview": { @@ -4084,7 +5732,76 @@ } }, "board": { + "emptyState": { + "title": "建立您的第一個檢視畫面", + "description": "新增小工具或應用程式,或連線服務並在此面板上使用其資料。", + "addWidget": "新增小工具", + "addApp": "新增應用程式", + "connectService": "連線服務" + }, + "setupChecklist": { + "title": "讓此面板發揮作用", + "description": "從上次離開的地方繼續。進度會根據此面板上已有的內容更新。", + "collapse": "收合設定檢查清單", + "dismiss": "", + "resume": "繼續設定({completed}/{total})", + "progress": "面板設定進度", + "step": { + "content": { + "label": "新增實用內容", + "description": "選擇並設定小工具後,才會將其放置到面板上。" + }, + "app": { + "label": "釘選應用程式", + "description": "讓服務或工具在此面板上一鍵即可存取。" + }, + "service": { + "label": "連線服務", + "description": "解鎖相容小工具的即時資料與操作。", + "permissionDescription": "管理員可以連線服務以解鎖即時資料。", + "action": "連線" + } + } + }, "action": { + "addContent": "新增面板內容", + "settings": "面板設定", + "switch": "切換面板", + "switcher": { + "title": "切換面板", + "search": { + "empty": "沒有符合「{search}」的面板。" + }, + "results": "可用面板", + "preview": "{name} 的預覽,包含 {count} 個項目", + "currentHidden": "目前面板:{name}", + "keyboard": { + "navigate": "導覽", + "open": "開啟", + "instructions": "輸入文字以篩選面板。使用方向鍵瀏覽結果,按 Enter 開啟面板。" + }, + "empty": { + "title": "沒有其他面板", + "description": "您無法存取其他面板。" + }, + "error": "無法載入面板。" + }, + "create": { + "availability": { + "checking": "正在檢查可用性……", + "available": "{name} 可用" + }, + "notification": { + "success": { + "title": "面板已建立", + "message": "面板 {name} 已建立" + }, + "error": { + "title": "無法建立面板", + "message": "無法建立面板 {name}" + } + } + }, "duplicate": { "title": "複製面板", "message": "這將複製看板 {name} 及其所有內容。如果小工具引用了無法使用的集成,它們將被移除", @@ -4100,14 +5817,19 @@ } }, "edit": { + "enter": "編輯面板", + "save": "儲存面板", + "exit": "離開編輯模式", "notification": { "success": { - "title": "成功應用編輯", "message": "面板儲存成功" }, "error": { - "title": "無法應用編輯", "message": "面板無法儲存" + }, + "loadError": { + "title": "無法開始編輯", + "message": "無法載入面板編輯器。您的儀表板仍可在檢視模式中使用。" } }, "confirmLeave": { @@ -4115,62 +5837,6 @@ "message": "尚未保存編輯,確認要離開嗎?" } }, - "oldImport": { - "label": "從 1.0.0 之前的 Homarr 匯入", - "notification": { - "success": { - "title": "匯入成功", - "message": "面板匯入成功" - }, - "error": { - "title": "匯入失敗", - "message": "無法匯入面板,請查閱 Logs 以取得更多詳情" - } - }, - "form": { - "file": { - "label": "選擇 JSON 檔案", - "invalidError": "無效的設定檔案" - }, - "apps": { - "label": "應用程式", - "avoidDuplicates": { - "label": "避免重複", - "description": "忽略已存在具有相同鏈結的應用程式" - }, - "onlyImportApps": { - "label": "僅匯入應用程式", - "description": "僅新增應用程式,面板需要手動重新創建" - } - }, - "name": { - "label": "面板名稱" - }, - "screenSize": { - "label": "螢幕大小", - "description": "在 1.0 之前的版本中,有三種不同的模式,因此可以根據螢幕大小選擇列的數量", - "option": { - "sm": "小號", - "md": "中等", - "lg": "大號" - } - }, - "sidebarBehavior": { - "label": "側邊欄行為", - "description": "側邊欄在 1.0 中被移除了,你可以選擇該怎麼處理其中的項目", - "option": { - "lastSection": { - "label": "最後區段", - "description": "側邊欄將顯示在最後區段的下方" - }, - "removeItems": { - "label": "移除項目", - "description": "側邊欄中包含的項目將被移除" - } - } - } - } - }, "quickCreateApp": { "modal": { "title": "快速建立應用程式", @@ -4178,6 +5844,12 @@ } } }, + "landmark": { + "canvas": "儀表板畫布", + "leftRail": "儀表板左側列", + "rightRail": "儀表板右側列", + "items": "儀表板項目" + }, "field": { "pageTitle": { "label": "頁面標題" @@ -4247,7 +5919,8 @@ } }, "primaryColor": { - "label": "主體色" + "label": "主體色", + "locked": "您的管理員會在每個面板上保留執行個體品牌色。" }, "secondaryColor": { "label": "輔助色" @@ -4287,9 +5960,6 @@ "xl": "非常大" } }, - "name": { - "label": "名稱" - }, "isPublic": { "label": "公開", "description": "每個人皆可訪問公共面板,即使沒有帳號" @@ -4309,9 +5979,44 @@ "title": "顯示布局", "responsive": { "title": "響應式佈局", + "description": "每個版面配置都會保留自己的小工具位置與大小。行動版與基礎版面配置永遠可用;您也可以在其他斷點新增自訂版面配置。", "action": { "add": "新增佈局" } + }, + "role": { + "mobile": "移動裝置", + "base": "基礎", + "custom": "自訂" + }, + "custom": { + "defaultName": "自訂版面配置" + }, + "mobile": { + "breakpointDescription": "行動版會從 0px 使用到下一個版面配置斷點。" + }, + "preview": { + "columns": "列數", + "empty": "此版面配置為空", + "dynamicSection": "動態區段", + "editorWidthLabel": "{layoutName} · {width}px" + }, + "reset": { + "action": "從基礎版面配置重設", + "confirm": { + "title": "重設 {layoutName}?", + "message": "這會以從基礎版面配置產生的新版面配置,取代此版面配置中所有已儲存的位置與大小。此操作無法復原。" + } + }, + "edit": { + "action": "編輯版面配置", + "saveAndEdit": "儲存並編輯", + "save": "儲存版面配置", + "cancel": { + "action": "取消版面配置編輯", + "title": "捨棄版面配置變更?", + "message": "您對此版面配置所做的未儲存變更將會被捨棄。" + } } }, "background": { @@ -4348,10 +6053,7 @@ "rename": { "label": "重新命名面板", "description": "更改面板可見性", - "button": "更改名稱", - "modal": { - "title": "重新命名面板" - } + "button": "更改名稱" }, "visibility": { "label": "更改面板可見性", @@ -4375,9 +6077,7 @@ } }, "delete": { - "label": "移除此面板", "description": "面板一旦移除就無法恢復,請謹慎操作", - "button": "移除此面板", "confirm": { "title": "移除面板", "description": "確認要移除此面板嗎?這將永久移除面板及其所有內容" @@ -4422,28 +6122,41 @@ }, "layout": { "field": { - "name": { - "label": "名稱" - }, "columnCount": { "label": "欄數" }, "breakpoint": { "label": "斷點", "description": "此佈局將用於所有大於此斷點的螢幕,直到達到下一個更大的斷點為止" + }, + "gutters": { + "label": "固定側邊欄", + "description": "在兩側各保留最多三個儀表板欄位。剩餘畫布會自動重新排列。", + "left": { + "label": "左側邊欄", + "description": "儀表板捲動時保持此區域可見。", + "thumbLabel": "左側邊欄寬度" + }, + "right": { + "label": "右側邊欄", + "description": "儀表板捲動時保持此區域可見。", + "thumbLabel": "右側邊欄寬度" + }, + "width": { + "label": "欄位寬度" + }, + "preview": { + "label": "儀表板版面配置預覽" + } } } }, "management": { "metaTitle": "管理中心", - "title": { - "morning": "早安,{username}", - "afternoon": "午安,{username}", - "evening": "晚安,{username}" - }, "notFound": { "title": "不存在", - "text": "找不到請求的資源" + "text": "找不到請求的資源", + "backToHome": "返回管理首頁" }, "error": { "title": "此頁面無法載入", @@ -4452,19 +6165,10 @@ }, "navbar": { "items": { - "workshop": "Workshop", "home": "首頁", - "boards": "面板", - "apps": "應用程式", - "integrations": "集成", - "searchEngies": "搜尋引擎", - "medias": "多媒體", "users": { - "label": "使用者", "items": { - "manage": "管理", - "invites": "邀情", - "groups": "群組" + "manage": "管理" } }, "tools": { @@ -4472,10 +6176,7 @@ "items": { "docker": "Docker", "kubernetes": "Kubernetes", - "logs": "Logs", "api": "API", - "certificates": "憑證", - "tasks": "任務", "backup": "備份" } }, @@ -4489,21 +6190,12 @@ "sourceCode": "源碼" } }, - "about": "關於" + "about": "關於", + "assistant": "助理" } }, "page": { "home": { - "statistic": { - "board": "面板", - "user": "使用者", - "invite": "邀請", - "integration": "集成", - "app": "應用程式", - "group": "群組", - "searchEngine": "", - "media": "" - }, "statisticLabel": { "boards": "面板", "resources": "資源", @@ -4541,13 +6233,8 @@ "tooltip": "此面板將顯示為移動裝置主面板" } }, - "duplicate": { - "label": "複製面板" - }, "delete": { - "label": "永久移除", "confirm": { - "title": "移除面板", "description": "確認移除此面板 {name} 嗎?" } } @@ -4556,28 +6243,82 @@ "public": "此面板是公開的", "private": "此面板是私人的" }, - "noResults": { - "title": "尚無面板" + "preview": { + "label": "{name} 的版面配置預覽,包含 {count} 個項目", + "unknownCreator": "未知建立者" }, - "modal": { - "createBoard": { - "field": { - "name": { - "label": "名稱" - } - } - } + "noResults": { + "title": "尚無面板", + "description": "建立面板,將您的應用程式與小工具集中於一處。" } }, "media": { "includeFromAllUsers": "包含來自全部使用者的多媒體" }, "user": { - "back": "返回使用者", "fieldsDisabledExternalProvider": "某些字段被進用,因為它們是由外部認證提供者管理的", "setting": { "general": { "title": "一般", + "header": { + "title": "標頭工作室", + "badge": "個人", + "description": "拖曳控制項至列中的任意位置。左側、中央與右側會固定,而控制項會在其周圍移動。", + "device": { + "desktop": "桌面版", + "mobile": "移動裝置" + }, + "zones": { + "left": "左方", + "center": "置中", + "right": "右方" + }, + "action": { + "hide": "隱藏標頭", + "show": "顯示標頭", + "configure": "移動或設定 {item}", + "remove": "移除 {item}", + "dropIntoZone": "移至 {zone} 區段" + }, + "preview": { + "board": "{name} 的儀表板預覽", + "empty": "沒有可用的儀表板版面配置" + }, + "available": { + "title": "可用控制項", + "description": "新增控制項,然後將其完整按鈕拖曳至上方的位置。", + "requiredAlways": "此控制項為必要項目,但您可以將它移至標頭中的任意位置。", + "allAdded": "所有內建控制項都已在您的標頭中。", + "add": "新增 {item}", + "boardShortcut": "面板捷徑", + "chooseBoard": "選擇面板" + }, + "configuration": { + "description": "此控制項會維持與即時標頭中相同的大小。", + "searchDisplay": { + "input": "搜尋列", + "icon": "僅圖示" + }, + "logoDisplay": { + "logo": "僅標誌", + "logoAndText": "標誌 + 文字" + } + }, + "items": { + "logo": "標誌", + "search": "搜尋", + "home": "主面板", + "boardSwitcher": "面板", + "assistant": "助理", + "docker": "Docker", + "boardEdit": "編輯面板", + "boardSettings": "面板設定", + "settings": "您的設定", + "themeToggle": "切換主題", + "user": "帳戶", + "boardUnavailable": "面板無法使用" + } + }, "item": { "language": "語言與地區", "board": { @@ -4611,14 +6352,10 @@ }, "security": { "title": "安全" - }, - "board": { - "title": "面板" } }, "list": { - "metaTitle": "管理使用者", - "title": "使用者" + "metaTitle": "管理使用者" }, "edit": { "metaTitle": "編輯使用者 {username}" @@ -4672,9 +6409,6 @@ } }, "field": { - "id": { - "label": "ID" - }, "creator": { "label": "創建者" }, @@ -4698,10 +6432,7 @@ }, "setting": { "title": "設定", - "alert": "群組設定的優先順序由群組在列表中的順序決定,位於上方的設定會覆蓋下方的設定", - "board": { - "title": "面板" - } + "alert": "群組設定的優先順序由群組在列表中的順序決定,位於上方的設定會覆蓋下方的設定" }, "members": { "title": "成員", @@ -4709,10 +6440,7 @@ "notFound": "不存在的成員" }, "permissions": { - "title": "權限", - "form": { - "unsavedChanges": "尚有未儲存的變更" - } + "title": "權限" } } }, @@ -4721,12 +6449,10 @@ "notification": { "success": { "message": "設定儲存成功" - }, - "error": { - "message": "設定儲存失敗" } }, "section": { + "analyticsDocumentation": "查看 Homarr 收集的確切分析資料", "analytics": { "title": "分析", "general": { @@ -4755,7 +6481,6 @@ } }, "board": { - "title": "面板", "homeBoard": { "label": "全局主面板", "mobileLabel": "全局移動裝置主面板", @@ -4774,7 +6499,6 @@ } }, "user": { - "title": "", "enableGravatar": { "label": "", "description": "" @@ -4790,12 +6514,86 @@ "appearance": { "title": "外觀", "defaultColorScheme": { - "label": "預設配色方案", + "label": "預設配色方案" + } + }, + "branding": { + "title": "執行個體品牌", + "groups": { + "identity": "識別", + "appearance": "外觀", + "customCss": "自訂 CSS", + "authentication": "認證" + }, + "identity": { + "description": "應用程式標誌是應用程式內、登入頁面及已安裝應用程式中使用的較大標誌。瀏覽器圖示(favicon)是分頁與書籤中使用的小方形圖示;留空時會使用應用程式標誌。" + }, + "appName": { + "label": "應用程式名稱" + }, + "greeting": { + "label": "自訂問候語" + }, + "logo": { + "label": "應用程式標誌", + "placeholder": "/logo/logo.png" + }, + "favicon": { + "label": "瀏覽器圖示(favicon)", + "placeholder": "使用應用程式標誌" + }, + "primaryColor": { + "label": "主體色" + }, + "secondaryColor": { + "label": "輔助色" + }, + "lockPrimaryColor": { + "label": "在每個面板上保留此色彩", + "description": "防止面板色彩取代應用程式輔助色。" + }, + "signInBackground": { + "label": "驗證背景", + "placeholder": "https://example.com/background.jpg" + }, + "signInOverlay": { + "label": "背景覆蓋層" + }, + "defaultRadius": { + "label": "圓角樣式", "options": { - "auto": "自動", - "light": "日間", - "dark": "暗黑" + "xs": "緊湊", + "sm": "細微", + "md": "平衡", + "lg": "圓潤", + "xl": "柔和" } + }, + "customCss": { + "label": "全域自訂 CSS", + "description": "套用至每個頁面。面板自訂 CSS 可以覆寫此設定。" + }, + "authVisibility": { + "description": "選擇每個驗證頁面上顯示的內容。", + "appName": "應用程式名稱", + "logo": "應用程式標誌", + "greeting": "問候語" + }, + "summary": { + "title": "目前品牌設定", + "cornerStyle": "圓角樣式", + "palette": "色盤", + "backgroundConfigured": "自訂背景 · {overlay}% 覆蓋層", + "backgroundDefault": "預設背景", + "greetingConfigured": "自訂問候語", + "greetingDefault": "預設問候語", + "boardColorLocked": "面板色彩已鎖定", + "boardColorFlexible": "允許面板色彩變更", + "appName": "工作名稱", + "logo": "標誌", + "greeting": "問候語", + "on": "開啟", + "off": "關閉" } }, "culture": { @@ -4803,12 +6601,177 @@ "defaultLocale": { "label": "預設語言" } + }, + "assistant": { + "loading": "正在載入助理設定", + "title": "助理", + "description": "連線至相容 OpenAI 的模型端點,以使用執行個體範圍的助理。", + "security": { + "description": "API 金鑰與其他標頭值會在 Homarr 資料庫中加密。它們絕不會傳回瀏覽器。模型請求會直接從 Homarr 伺服器傳送至設定的端點。" + }, + "overview": { + "connectionReady": "連線就緒", + "unsavedChanges": "未儲存編輯", + "setupRequired": "需要設定", + "disabled": "已停用", + "noModel": "未選取模型" + }, + "connection": { + "endpointTitle": "提供者與端點", + "description": "選擇預設集,或連線至任何實作 OpenAI Chat Completions API 的服務。", + "save": "儲存提供者連線" + }, + "credentials": { + "title": "憑證", + "description": "新增此端點所需的密密。儲存的值會保持加密,且無法讀取。", + "required": "需要金鑰", + "optional": "選用金鑰", + "workshop": "每位使用者的 GitHub 登入" + }, + "provider": { + "title": "提供者", + "groups": { + "free": "Homarr 免費提供", + "hosted": "託管提供者", + "local": "本機提供者", + "custom": "自訂" + }, + "options": { + "homarr": { + "description": "每天提供有限次數的免費助理使用額度,由 Homarr 團隊支付。使用 Community Workshop 登入即可使用您的額度。" + }, + "openrouter": { + "description": "託管模型路由,提供大量支援工具的模型目錄。" + }, + "openai": { + "description": "透過官方 API 端點使用 OpenAI Chat Completions。" + }, + "anthropic": { + "description": "透過 Anthropic 的 OpenAI SDK 相容端點使用 Claude。" + }, + "google-gemini": { + "description": "透過 Google 的 OpenAI 相容 API 端點使用 Gemini。" + }, + "xai": { + "description": "透過 xAI 的 OpenAI 相容 API 使用 Grok 模型。" + }, + "groq": { + "description": "透過 Groq 的 OpenAI 相容 API 進行快速託管推論。" + }, + "mistral": { + "description": "透過官方 API 使用 Mistral 模型。" + }, + "deepseek": { + "description": "透過其 OpenAI 相容 API 使用 DeepSeek 模型。" + }, + "together": { + "description": "透過 Together 的 OpenAI 相容 API 使用託管開放模型。" + }, + "ollama": { + "description": "使用其 OpenAI 相容 API 的本機或網路 Ollama 伺服器。" + }, + "lm-studio": { + "description": "已啟用 OpenAI 相容性的 LM Studio 本機伺服器。" + }, + "llama-cpp": { + "description": "使用其 OpenAI 相容 API 的本機或網路 llama.cpp 伺服器。" + }, + "custom": { + "label": "自訂端點", + "description": "任何其他相容於 OpenAI Chat Completions 的端點。" + } + }, + "homarrAuth": { + "title": "包含每日免費助理使用額度", + "description": "不需要 API 金鑰。Homarr 團隊每天為您提供有限次數的助理使用額度。使用 Community Workshop 登入,可讓您的額度獨立管理。" + } + }, + "baseUrl": { + "title": "API 基底 URL", + "description": "包含 API 前綴,通常為 /v1。在容器中,localhost 指的是 Homarr 容器。" + }, + "apiKey": { + "title": "API 金鑰", + "required": "此提供者要求此項目。值會加密且只能寫入。", + "optional": "本機端點可選填。服務不需要 bearer 驗證時請留空。", + "placeholder": "輸入 API 金鑰", + "savedTitle": "已儲存加密的 API 金鑰", + "savedDescription": "Homarr 可以使用此金鑰,但無法顯示或復原其值。", + "remove": "移除已儲存的 API 金鑰", + "removeFlow": { + "title": "移除已儲存的 API 金鑰?", + "description": "此提供者需要 API 金鑰。移除後,在儲存其他金鑰之前,可能會停止模型探索與助理回應。", + "optionalDescription": "移除此金鑰後,端點將停止接收 bearer 驗證。請確認它接受未驗證的請求,或使用其他已儲存的標頭。", + "cancel": "保留已儲存的金鑰", + "confirm": "移除 API 金鑰" + } + }, + "headers": { + "title": "其他請求標頭", + "description": "選用的驗證或路由標頭。標頭值會加密且只能寫入。", + "add": "新增標頭", + "name": "標頭名稱", + "value": "標頭值", + "valuePlaceholder": "密密或路由值", + "remove": "移除標頭", + "configured": "已設定其他加密標頭。新增標頭會取代完整的已儲存集合。", + "empty": "此提供者沒有儲存其他標頭。", + "savedBadge": "標頭已儲存", + "pendingRemoval": "等待移除", + "clear": "儲存時移除已儲存的標頭", + "keep": "保留已儲存的標頭" + }, + "model": { + "title": "模型", + "description": "選擇已探索的模型,或輸入確切的端點模型 ID。", + "placeholder": "模型 ID", + "refresh": "重新整理模型", + "chooseModel": "選擇新對話使用的模型。", + "discoveryPath": "模型探索路徑", + "discoveryPathDescription": "附加至 API 基底 URL。留空可停用探索,並使用手動模型 ID。", + "manual": "手動輸入模型 ID,或儲存連線以探索模型。", + "manualFallback": "探索功能無法使用。您仍可手動輸入模型 ID。", + "saveConnectionFirst": "請先儲存提供者連線,再選擇模型。", + "discovering": "正在重新整理此提供者可用的模型……", + "discovered": "{count, plural, other {已探索到 # 個模型。工具支援取決於所選端點與模型。}}", + "discoveryFailed": "模型探索未完成", + "context": "{count} 個內容視窗", + "toolsConfirmed": "已宣告的工具", + "toolsUnknown": "驗證工具支援" + }, + "serverTools": { + "title": "伺服器工具", + "webSearch": { + "label": "網路搜尋", + "description": "當請求需要最新資訊時,允許模型透過 OpenRouter 搜尋即時網路。搜尋使用量由 OpenRouter 另行收費。", + "proxyDescription": "將 OpenRouter 的網路搜尋伺服器工具傳送至此端點。只有在自訂端點轉送 OpenRouter 伺服器工具格式時才啟用,例如 Homarr Router Proxy。", + "limit": "模型會決定何時搜尋;每個請求最多搜尋 3 次,每次搜尋最多取得 5 項結果。" + } + }, + "enabled": { + "label": "啟用助理", + "description": "向所有已登入使用者顯示助理。現有的 Homarr 權限仍適用於每次內部工具呼叫。" + }, + "save": "儲存助理", + "notification": { + "connectionSaved": { + "title": "提供者連線已儲存", + "message": "端點與加密憑證已準備好,可選擇模型。", + "credentialsCleared": "端點已變更,因此先前的憑證已清除。如有需要,請為新的目的地新增憑證。" + }, + "saved": { + "title": "助理設定已儲存", + "message": "新的模型與可用性設定已啟用。" + }, + "error": { + "title": "無法儲存助理設定" + } + } } } }, "tool": { "tasks": { - "title": "任務", "status": { "idle": "空閒", "running": "運行中", @@ -4826,6 +6789,11 @@ "label": "Pings" } }, + "action": { + "run": "立即執行 {name}", + "enable": "啟用 {name}", + "disable": "停用 {name}" + }, "interval": { "seconds": "", "minutes": "", @@ -4841,13 +6809,7 @@ } } }, - "settings": { - "title": "" - }, "field": { - "name": { - "label": "" - }, "interval": { "label": "" }, @@ -4861,11 +6823,6 @@ "table": { "search": "" }, - "action": { - "refresh": { - "label": "" - } - }, "refresh": { "success": { "message": "" @@ -4899,7 +6856,6 @@ } }, "api": { - "title": "API", "modal": { "createApiToken": { "title": "API 密鑰已創建", @@ -4925,7 +6881,6 @@ }, "table": { "header": { - "id": "ID", "createdBy": "創建者", "actions": "動作" } @@ -4981,43 +6936,12 @@ "availableTools": { "title": "可用工具", "description": "{count} 個工具可用。展開類別以查看個別工具及其描述。", - "columnType": "類型", - "columnName": "工具", - "columnDescription": "描述" - }, - "troubleshooting": { - "title": "疑難排解", - "missingHeader": { - "title": "\"缺少 ApiKey 標頭\"", - "description": "您的客戶端未傳送 {header} 標頭。請確認 MCP 設定中的 {section} 區段是否正確。某些客戶端在設定變更後需要重新啟動。" - }, - "invalidFormat": { - "title": "\"無效的 ApiKey 格式\"", - "description": "請確保您完整複製了 API 金鑰,而非僅複製一部分。" - }, - "invalidKey": { - "title": "\"無效的 API 金鑰\"", - "description": "找不到金鑰 ID 或令牌錯誤。API 金鑰在建立時僅顯示一次。如果遺失,請刪除舊金鑰並建立一個新的。" - }, - "connectionRefused": { - "title": "連線拒絕 / 逾時", - "description": "請確保該 URL 可從您的 AI 客戶端存取。如果 Homarr 在反向代理或 Docker 後執行,請使用外部 URL (而非 {localhost})。確認連接埠正確 (預設: Docker 為 7575)。" - }, - "toolsNotAppearing": { - "title": "工具未顯示", - "description": "某些工具需要設定特定的整合 (例如 Docker、Overseerr)。工具清單取決於您 Homarr 實例中可用的內容。" + "filteredDescription": "展開的類別中有 {count} 個符合條件的工具。", + "search": "搜尋工具", + "noResults": { + "title": "沒有工具符合此搜尋", + "description": "沒有 MCP 工具符合「{search}」。請嘗試命名空間、工具名稱或描述。" } - }, - "copy": "複製", - "oneClick": { - "title": "一鍵安裝", - "subtitle": "使用 OAuth — 首次使用時在瀏覽器中進行驗證", - "vsCode": "在 VS Code 中安裝", - "cursor": "在 Cursor 中安裝", - "copyUrl": "複製 MCP 網址", - "copied": "已複製!", - "copyHint": "適用於 ChatGPT、Claude Code 或任何 MCP 客戶端", - "manualConfig": "手動設定" } } } @@ -5034,47 +6958,12 @@ "title": "敏感資料匯出", "warningTitle": "此匯出包含你的整個資料庫。", "warningBody": "備份包含所有使用者、整合密鑰(已加密)、API 金鑰、面板設定和應用程式資料。請安全儲存匯出的檔案,且不要分享它。", - "typePrompt": "輸入 \"{phrase}\" 以繼續", - "submit": "匯出資料庫", - "cancel": "取消" + "submit": "匯出資料庫" } }, "import": { "title": "還原資料庫", - "description": "上傳先前匯出的備份 ZIP 以還原你的資料庫。這將取代你的整個資料庫。如果備份是使用不同的加密金鑰建立的,密鑰將會自動重新加密。", - "warning": "還原備份將會完全取代你目前的資料庫並重新啟動應用程式。此動作無法復原。", - "dropzone": { - "title": "將備份 ZIP 拖曳至此處,或點擊以瀏覽", - "description": "僅接受來自 Homarr SQLite 備份的 .zip 檔案" - }, - "changeFile": "更換檔案", - "button": "還原資料庫", - "success": { - "title": "還原完成", - "message": "資料庫已成功還原。應用程式正在重新啟動……" - }, - "error": "匯入失敗" - }, - "preview": { - "title": "備份內容", - "exported": "匯出於 {date}", - "loading": "正在分析備份檔案……", - "errorTitle": "預覽錯誤", - "entity": "實體", - "count": "計數", - "boards": "面板", - "entities": { - "board": "面板", - "user": "使用者", - "app": "應用程式", - "integration": "整合", - "item": "小工具", - "media": "媒體", - "search_engine": "搜尋引擎" - }, - "analyzeError": "無法分析備份檔案", - "invalidMissingMetadata": "無效備份:缺少 metadata.json", - "invalidMissingDb": "無效備份:缺少 db.sqlite" + "description": "上傳先前匯出的備份 ZIP 以還原你的資料庫。這將取代你的整個資料庫。如果備份是使用不同的加密金鑰建立的,密鑰將會自動重新加密。" }, "restore": { "dropzone": { @@ -5084,29 +6973,20 @@ "analyzing": "正在分析備份……", "changeFile": "更換檔案", "continueToRestore": "繼續還原", - "tryAgain": "再試一次", "analysisError": "分析錯誤", "preview": { "title": "備份內容", "exported": "匯出於 {date}", "entity": "實體", "count": "計數", - "boards": "面板", "entities": { - "board": "面板", - "user": "使用者", - "app": "應用程式", - "integration": "整合", - "item": "小工具", - "media": "媒體", - "search_engine": "搜尋引擎" + "item": "小工具" }, "migrationsApplied": "已套用 {count} 個遷移", "migrationsAppliedPlural": "已套用 {count} 個遷移", "migrationsOlderVersion": "此備份來自較舊的 Homarr 版本。已套用 {count} 個結構遷移以使其更新。", "migrationsOlderVersionPlural": "此備份來自較舊的 Homarr 版本。已套用 {count} 個結構遷移以使其更新。", "migrationsUpToDate": "資料庫結構為最新(已套用 {count} 個遷移)", - "upToDate": "最新", "migrationsPending": "{count} 個待處理" }, "migration": { @@ -5117,21 +6997,21 @@ "title": "破壞性動作", "warningTitle": "這將永久取代你的整個資料庫。", "warningBody": "所有當前的面板、使用者、應用程式、整合、設定和工作階段都將遺失。此動作無法復原。應用程式將在還原後重新啟動。", - "typePrompt": "輸入 \"{phrase}\" 以繼續", - "cancel": "取消", "submit": "還原資料庫" }, "progress": { "title": "正在還原資料庫……", - "extracting": "正在解壓縮備份檔案", - "migrating": "正在套用資料庫遷移", - "encrypting": "正在重新加密整合密鑰", - "swapping": "正在取代資料庫檔案", - "restarting": "重新啟動伺服器" + "restarting": "重新啟動伺服器", + "relogin": "還原資料庫使您目前的工作階段失效。伺服器就緒後,Homarr 會將您導向登入頁面。" }, "complete": { "title": "還原完成", - "message": "資料庫已成功還原。伺服器正在重新啟動 — 請在幾秒後重新整理頁面。" + "message": "資料庫已成功還原。伺服器正在重新啟動 — 請在幾秒後重新整理頁面。", + "button": "立即登入" + }, + "timeout": { + "title": "伺服器未重新上線", + "message": "資料庫還原已完成,但 Homarr 未再次就緒。請重試連線檢查,或手動重新整理此頁面。" }, "failed": { "title": "還原失敗" @@ -5139,6 +7019,9 @@ "invalidMissingMetadata": "無效備份:缺少 metadata.json", "invalidMissingDb": "無效備份:缺少 db.sqlite", "analyzeError": "無法分析備份" + }, + "confirm": { + "typePrompt": "輸入「{phrase}」以繼續" } } }, @@ -5173,7 +7056,11 @@ "toggleBoardEdit": "", "toggleColorScheme": "", "saveNotebook": "", - "openSpotlight": "" + "openSpotlight": "", + "openSpotlightApps": "開啟應用程式搜尋", + "openSpotlightAssistant": "開啟助理模式", + "openSpotlightPreferences": "開啟偏好設定模式", + "openAssistant": "開啟助理" }, "note": "" } @@ -5183,6 +7070,63 @@ }, "docker": { "title": "容器", + "reconciliation": { + "title": "Docker 設定助理", + "suggestions": "", + "attention": "{count} 個需要注意", + "endpointUnavailable": "無法檢查部分服務,因為以下端點無法使用:{names}", + "empty": "找不到可見的 Docker 服務。", + "emptyFilter": "沒有服務符合此檢視畫面。", + "ambiguous": "可能有一個以上的現有項目符合此服務。Homarr 不會自動選擇。", + "filter": { + "attention": "需要注意", + "represented": "已設定", + "all": "全部" + }, + "state": { + "newRecognized": "準備連線", + "newApp": "新服務", + "represented": "已有代表項目", + "linked": "已連結", + "moved": "位址已變更" + }, + "url": { + "manual": "手動輸入位址" + }, + "health": { + "layer": { + "docker": "Docker", + "integrationConfiguration": "集成", + "authentication": "認證", + "apiRequest": "API", + "appRepresentation": "應用程式", + "widgetConfiguration": "小工具", + "widgetQuery": "小工具查詢" + }, + "status": { + "available": "待定", + "configured": "已設定", + "linked": "已連結", + "missing": "遺失", + "changed": "已變更", + "unused": "未使用", + "notApplicable": "不適用", + "notObserved": "未觀察到" + } + }, + "action": { + "review": "預覽", + "dismiss": "關閉", + "restoreDismissed": "還原已關閉項目({count})", + "setupIntegration": "設定整合", + "reviewIntegration": "檢閱整合", + "viewRepresentation": "檢視設定" + }, + "loadError": { + "title": "無法載入 Docker 設定助理", + "message": "Docker 服務資訊無法使用。請留在此頁面並重試。" + } + }, "table": { "updated": "已更新於 {when}", "refresh": { @@ -5195,9 +7139,6 @@ "totalMemory": "總記憶體: {memory}" }, "field": { - "name": { - "label": "名稱" - }, "state": { "label": "狀態", "option": { @@ -5211,9 +7152,6 @@ } }, "stats": { - "cpu": { - "label": "" - }, "memory": { "label": "" } @@ -5276,8 +7214,11 @@ } }, "remove": { - "label": "移除", "confirm": "再次點擊以永久移除", + "confirmation": { + "title": "{count, plural, other {移除 # 個容器?}}", + "message": "{count, plural, other {這會永久移除 # 個容器:{names}}}" + }, "notification": { "success": { "title": "容器已移除", @@ -5289,8 +7230,13 @@ } } }, + "result": { + "failure": { + "title": "部分容器操作失敗", + "message": "{total, plural, other {{failed} 個操作中有 # 個失敗:{names}}}" + } + }, "refresh": { - "label": "刷新", "notification": { "success": { "title": "容器已刷新", @@ -5321,18 +7267,33 @@ }, "error": { "internalServerError": "取得 Docker 容器失敗", + "endpointUnavailable": "{count, plural, other {# 個 Docker 端點無法使用:{names}}}", "noColumns": "在小工具設定中至少選擇一欄" } }, "kubernetes": { + "context": { + "label": "Kubernetes 內容", + "loadError": { + "title": "無法載入 Kubernetes 內容", + "message": "內容資訊無法使用。請留在此頁面並重試。" + }, + "status": { + "available": "待定", + "degraded": "指標無法使用", + "unavailable": "無法使用" + }, + "unavailable": "無法連線至此 Kubernetes 內容。請選擇其他內容,或確認其憑證與端點。", + "metricsUnavailable": "此內容可連線,但 Metrics Server 無法使用。即使沒有即時 CPU 與記憶體使用量,清單仍可使用。" + }, "cluster": { "title": "叢集儀表板", "label": "叢集", "providers": "提供者", "version": "版本", - "architecture": "架構", "capacity": { "title": "容量", + "metricsUnavailable": "Metrics Server 無法使用。清單與保留容量仍會顯示,但無法顯示即時 CPU 與記憶體使用量。", "resource": { "reserved": "已保留", "used": "已使用" @@ -5351,38 +7312,10 @@ } }, "nodes": { - "label": "節點", "field": { - "name": { - "label": "名稱" - }, - "state": { - "label": "狀態", - "option": { - "ready": "準備", - "NotReady": "未準備" - } - }, - "cpu": { - "label": "處理器" - }, - "memory": { - "label": "記憶體" - }, - "pods": { - "label": "容器組" - }, - "operatingSystem": { - "label": "系統" - }, - "architecture": { - "label": "架構" - }, + "metricsUnavailable": "無法使用", "kubernetesVersion": { "label": "Kubernetes 版本" - }, - "creationTimestamp": { - "label": "已創建" } }, "table": { @@ -5390,43 +7323,17 @@ } }, "namespaces": { - "label": "命名空間", - "field": { - "name": { - "label": "名稱" - }, - "state": { - "label": "狀態", - "option": { - "active": "活動中", - "terminating": "終止中" - } - }, - "creationTimestamp": { - "label": "已創建" - } - }, "table": { "search": "搜尋 {count} 命名空間" } }, "ingresses": { - "label": "進入點", "field": { - "name": { - "label": "名稱" - }, - "namespace": { - "label": "命名空間" - }, "className": { "label": "類別名稱" }, "rulesAndPaths": { "label": "規則與路徑" - }, - "creationTimestamp": { - "label": "已創建" } }, "table": { @@ -5434,17 +7341,7 @@ } }, "services": { - "label": "服務", "field": { - "name": { - "label": "名稱" - }, - "namespace": { - "label": "命名空間" - }, - "type": { - "label": "類別" - }, "ports": { "label": "Ports" }, @@ -5453,9 +7350,6 @@ }, "clusterIP": { "label": "叢集 IP" - }, - "creationTimestamp": { - "label": "已創建" } }, "table": { @@ -5463,25 +7357,12 @@ } }, "pods": { - "label": "容器組", "field": { - "name": { - "label": "名稱" - }, - "namespace": { - "label": "命名空間" - }, "image": { "label": "Image" }, "applicationType": { "label": "應用程式類別" - }, - "status": { - "label": "狀態" - }, - "creationTimestamp": { - "label": "已創建" } }, "table": { @@ -5489,51 +7370,17 @@ } }, "secrets": { - "label": "密鑰", - "field": { - "name": { - "label": "名稱" - }, - "namespace": { - "label": "命名空間" - }, - "type": { - "label": "類別" - }, - "creationTimestamp": { - "label": "已創建" - } - }, "table": { "search": "搜尋 {count} 密鑰" } }, "configmaps": { - "label": "配置映射", - "field": { - "name": { - "label": "名稱" - }, - "namespace": { - "label": "命名空間" - }, - "creationTimestamp": { - "label": "已創建" - } - }, "table": { "search": "搜尋 {count} 配置映射" } }, "volumes": { - "label": "卷", "field": { - "name": { - "label": "名稱" - }, - "namespace": { - "label": "命名空間" - }, "accessModes": { "label": "存取模式" }, @@ -5548,12 +7395,6 @@ }, "volumeName": { "label": "卷名稱" - }, - "status": { - "label": "狀態" - }, - "creationTimestamp": { - "label": "已創建" } }, "table": { @@ -5562,6 +7403,29 @@ }, "error": { "internalServerError": "無法擷取 Kubernetes 資料" + }, + "field": { + "name": { + "label": "工作名稱" + }, + "namespace": { + "label": "命名空間" + }, + "creationTimestamp": { + "label": "已創建" + }, + "state": { + "label": "工作狀態" + }, + "status": { + "label": "狀態" + }, + "type": { + "label": "下載器類型" + }, + "architecture": { + "label": "架構" + } } }, "permission": { @@ -5595,71 +7459,27 @@ }, "navigationStructure": { "manage": { - "workshop": { - "label": "Workshop" - }, "label": "管理", - "boards": { - "label": "面板" - }, - "integrations": { - "label": "集成", + "custom-widgets": { "edit": { - "label": "編輯" + "flow": { + "label": "流程" + } }, - "new": { - "label": "創建" - } - }, - "search-engines": { - "label": "搜尋引擎", - "new": { - "label": "創建" + "workshop": { + "label": "工作坊" }, - "edit": { - "label": "編輯" - } - }, - "medias": { - "label": "多媒體" - }, - "apps": { - "label": "應用程式", - "new": { - "label": "創建" - }, - "edit": { - "label": "編輯" + "publish": { + "label": "發佈至 Workshop" } }, "users": { - "label": "使用者", - "create": { - "label": "創建" - }, "general": "一般", - "security": "安全", - "board": "面板", - "groups": { - "label": "用戶組" - }, - "invites": { - "label": "邀請" - } + "security": "安全" }, "tools": { "label": "工具", - "tasks": { - "label": "" - }, - "docker": { - "label": "Docker", - "logs": { - "label": "日誌" - } - }, "kubernetes": { - "label": "Kubernetes", "nodes": { "label": "節點" }, @@ -5685,11 +7505,7 @@ "label": "卷" } }, - "logs": { - "label": "Logs" - }, "certificates": { - "label": "憑證", "hostnames": { "label": "" } @@ -5700,12 +7516,60 @@ }, "about": { "label": "關於" + }, + "assistant": { + "label": "助理" } } }, "search": { "placeholder": "搜尋任意內容", "nothingFound": "不存在", + "modePicker": { + "search": { + "label": "搜尋", + "placeholder": "搜尋應用程式、面板、頁面、命令與偏好設定" + }, + "apps": { + "label": "應用程式", + "placeholder": "搜尋應用程式、面板與整合" + }, + "command": { + "label": "命令", + "placeholder": "搜尋操作與命令" + }, + "preferences": { + "label": "偏好設定", + "placeholder": "搜尋並變更偏好設定" + }, + "assistant": { + "label": "助理", + "placeholder": "詢問助理" + }, + "external": { + "label": "網路", + "placeholder": "使用外部搜尋引擎搜尋" + }, + "media": { + "label": "多媒體", + "placeholder": "搜尋電影或節目", + "fallback": "搜尋媒體「{query}」" + }, + "userGroup": { + "label": "人員", + "placeholder": "搜尋使用者與群組" + }, + "continueWith": "繼續使用", + "dialogAriaLabel": "{mode} 命令選單", + "navigationLabel": "搜尋模式", + "modeAriaLabel": "{mode} 模式", + "resultsAriaLabel": "{mode} 結果", + "footer": { + "navigate": "導覽", + "open": "開啟", + "close": "關閉" + } + }, "error": { "fetch": "取得數據時發生錯誤" }, @@ -5714,7 +7578,6 @@ "help": "搜尋應用程式,集成或面板", "group": { "app": { - "title": "應用程式", "children": { "action": { "open": { @@ -5730,7 +7593,6 @@ } }, "board": { - "title": "面板", "children": { "action": { "open": { @@ -5750,9 +7612,6 @@ "title": "為面板選擇一個動作" } } - }, - "integration": { - "title": "集成" } } }, @@ -5781,9 +7640,6 @@ "newBoard": { "label": "創建新面板" }, - "importBoard": { - "label": "匯入面板" - }, "newApp": { "label": "創建新應用程式" }, @@ -5853,7 +7709,6 @@ } }, "defaultSearchEngineId": { - "label": "預設搜尋引擎", "children": { "detail": { "title": "選取你的預設搜尋引擎" @@ -5861,7 +7716,6 @@ } }, "openSearchInNewTab": { - "label": "在新分頁中開啟搜尋結果", "children": { "detail": { "title": "在新分頁中開啟搜尋結果" @@ -5869,7 +7723,6 @@ } }, "ddgBangs": { - "label": "啟用 DuckDuckGo bangs", "children": { "detail": { "title": "啟用 DuckDuckGo bangs" @@ -5884,6 +7737,13 @@ } } }, + "byteUnitSystem": { + "children": { + "detail": { + "title": "選擇資料大小單位" + } + } + }, "homeBoardId": { "label": "首頁面板", "children": { @@ -5901,7 +7761,6 @@ } }, "pingIconsEnabled": { - "label": "使用圖示顯示 Ping", "children": { "detail": { "title": "使用圖示顯示 Ping" @@ -5909,7 +7768,6 @@ } }, "enableRightClickOnWidgets": { - "label": "啟用小工具右鍵選單", "children": { "detail": { "title": "啟用小工具右鍵選單" @@ -5937,6 +7795,7 @@ "description": "開始輸入以搜尋你的媒體請求整合", "disabled": { "noIntegration": "新增 Overseerr、Jellyseerr 或 Seerr 整合以啟用媒體搜尋。", + "signInRequired": "登入以搜尋媒體請求整合。", "scoped": "此小工具沒有可存取的媒體請求整合。" } } @@ -5953,7 +7812,6 @@ "help": "使用外部搜尋引擎", "group": { "searchEngine": { - "title": "搜尋引擎", "tipDdgBangs": "提示:你也可以在此使用任何 DuckDuckGo bangs,例如 !something", "bang": { "searchWithQuery": "使用 {label} 搜尋 \"{query}\"", @@ -6004,20 +7862,6 @@ "group": { "mode": { "title": "模式" - }, - "help": { - "title": "幫助", - "option": { - "documentation": { - "label": "說明書" - }, - "submitIssue": { - "label": "提交問題" - }, - "discord": { - "label": "Discord 社群" - } - } } } }, @@ -6029,9 +7873,10 @@ "other": { "label": "使用其他搜尋引擎進行搜尋" }, - "no-default": { - "label": "無預設搜尋引擎", - "description": "於偏好設定中設定預設搜尋引擎" + "no-engines": { + "label": "未設定搜尋引擎", + "descriptionCreate": "新增搜尋引擎,以便從命令選單進行搜尋", + "descriptionUnavailable": "請管理員設定搜尋引擎" }, "search": { "label": "使用 {name} 搜尋 {query}" @@ -6111,7 +7956,6 @@ "help": "搜尋使用者或用戶組", "group": { "user": { - "title": "使用者", "children": { "action": { "detail": { @@ -6124,7 +7968,6 @@ } }, "group": { - "title": "用戶組", "children": { "action": { "detail": { @@ -6148,9 +7991,6 @@ "engine": { "search": "尋找搜尋引擎", "field": { - "name": { - "label": "名稱" - }, "short": { "label": "不足" }, @@ -6163,12 +8003,19 @@ }, "page": { "list": { - "title": "搜尋引擎", + "ariaLabel": "已設定的搜尋引擎", "noResults": { "title": "尚未設定搜尋引擎", - "action": "創建搜尋引情" + "description": "搜尋引擎讓 Spotlight 將查詢傳送至網站或已連線的服務。", + "action": "創建搜尋引情", + "filteredTitle": "沒有搜尋引擎符合您的搜尋", + "filteredDescription": "沒有搜尋引擎符合「{search}」。請嘗試其他名稱或 URL。" }, - "interactive": "交互,使用集成" + "interactive": "交互,使用集成", + "type": { + "generic": "URL 範本", + "fromIntegration": "集成" + } }, "create": { "title": "創建搜尋引擎", @@ -6187,11 +8034,9 @@ "title": "編輯搜尋引擎", "notification": { "success": { - "title": "應用編輯成功", "message": "搜尋引擎已儲存成功" }, "error": { - "title": "無法應用變更", "message": "搜尋引擎無法儲存" } }, @@ -6330,6 +8175,10 @@ } }, "log": { + "context": { + "widgetError": "小工具在此時間附近回報錯誤", + "expiredWidgetError": "不再保留此小工具錯誤附近的記錄" + }, "level": { "option": { "debug": "", @@ -6341,7 +8190,6 @@ }, "onboardingTour": { "learnMore": "閱讀文件", - "next": "下一步", "prev": "返回", "done": "完成", "skip": "略過導覽", @@ -6405,5 +8253,359 @@ "description": "變更你的色彩方案、語言、首頁面板和偏好設定。你也可以從這裡跳轉到管理區域。" } } + }, + "metadata": { + "description": "適用於 *arr 堆疊與完整家庭實驗室的自架儀表板。整合 50 多項服務、即時小工具,無需設定檔。", + "dashboardTitle": "{appName} 儀表板" + }, + "assistant": { + "title": "助理", + "open": "開啟助理", + "close": "關閉助理", + "minimize": "最小化助理", + "spotlight": "詢問助理", + "spotlightDescription": "無需離開命令選單即可輸入並傳送提示。", + "spotlightPrompt": { + "title": "詢問助理", + "description": "在上方輸入提示。按 Enter 在背景中傳送。", + "send": "傳送提示", + "empty": "在上方輸入提示" + }, + "unavailable": { + "checking": "正在檢查助理是否可用……", + "error": "無法檢查助理是否可用。請重試。", + "notConfigured": "管理員必須先設定並啟用助理。", + "signIn": "登入以使用助理。" + }, + "newConversation": "新對話", + "conversations": "對話", + "conversationActions": "對話操作", + "searchConversations": "搜尋對話", + "noMatchingConversations": "沒有符合條件的對話", + "moreActions": "更多回應操作", + "renameConversation": { + "action": "重新命名", + "label": "對話名稱", + "save": "儲存名稱", + "failedTitle": "無法重新命名對話", + "failedDescription": "Homarr 無法重新命名此對話。請重試。" + }, + "deleteConversation": { + "title": "刪除對話?", + "description": "「{title}」及其訊息將永久刪除。", + "failedTitle": "無法刪除對話", + "failedDescription": "Homarr 無法刪除此對話。請重試。" + }, + "closeHistory": "關閉對話記錄", + "openHistory": "開啟對話記錄", + "emptyTitle": "我可以如何協助?", + "emptyDescription": "詢問 Homarr 設定、檢查即時執行個體資料,或在您希望我進行變更時核准操作。", + "suggestions": { + "health": { + "label": "檢查服務健康狀態", + "prompt": "檢查我的整合,並摘要任何需要注意的事項。" + }, + "explore": { + "label": "探索我的 Homarr", + "prompt": "向我展示此 Homarr 執行個體中可檢視和管理的內容。" + }, + "media": { + "label": "尋找要請求的媒體", + "prompt": "幫我尋找要請求的電影或影集。" + }, + "style": { + "label": "改善儀表板", + "prompt": "幫我改善面板的外觀或自訂 CSS。先顯示我的面板,然後在變更時保留目前設定。" + }, + "designWidget": { + "label": "設計小工具", + "prompt": "建立並安裝自訂小工具,用於 " + } + }, + "composerPlaceholder": "詢問助理……", + "runtime": { + "model": "模型", + "searchModels": "搜尋模型", + "noModels": "沒有可用的模型", + "otherModels": "其他模型", + "imageInput": "接受影像輸入", + "thinking": "思考模式", + "reasoning": { + "auto": "自動", + "none": "關閉", + "minimal": "最小", + "low": "低", + "medium": "中", + "high": "高" + } + }, + "providerQuota": { + "title": "Homarr 供應商", + "communityWorkshop": "社群 Workshop", + "dailyAllowance": "每日請求額度", + "remainingLabel": "剩餘 {remaining} / {limit} 個 Homarr 供應商請求", + "loading": "正在載入 Homarr 供應商額度", + "signInRequired": "使用 Homarr 供應商需要登入 Workshop", + "signInDescription": "透過社群 Workshop 使用 GitHub 登入,即可獲得獨立的每日額度。", + "exhaustedDescription": "今日的 Homarr 供應商額度已用完。額度將於 UTC 午夜重設。", + "unavailableDescription": "請登入 Workshop,或等待 Homarr 供應商額度重設。", + "signIn": "使用 GitHub 登入", + "signInError": "GitHub 登入失敗。請稍後再試。", + "loadError": "無法載入 Homarr 供應商額度。", + "reset": "於 後 {relative} 重設", + "toolCalls": "每次模型請求和完成的工具呼叫都會使用一個請求額度。", + "retry": "重新載入額度", + "level": { + "ok": "正常", + "warning": "警告", + "bad": "低", + "dead": "已使用" + } + }, + "stop": "停止回應", + "send": "傳送訊息", + "copy": "複製回應", + "copyMessage": "複製訊息", + "editMessage": "編輯訊息", + "updateMessage": "更新訊息", + "regenerate": "重新產生回應", + "helpful": "有幫助", + "notHelpful": "沒有幫助", + "readAloud": "朗讀回應", + "stopReading": "停止朗讀回應", + "feedbackError": "無法儲存您的意見回饋。請再試一次。", + "exportMarkdown": "匯出為 Markdown", + "exportConversation": { + "action": "將對話匯出為 Markdown", + "failedTitle": "無法匯出對話", + "failedDescription": "Homarr 無法載入此對話。請再試一次。" + }, + "reasoning": "思考中", + "previousResponse": "上一個回應", + "nextResponse": "下一個回應", + "removeAttachment": "移除附件", + "downloadFile": "下載 {name}", + "attachedImage": "附加的影像", + "externalImageBlocked": "基於隱私考量,已封鎖外部影像", + "image": { + "loading": "正在載入影像", + "failed": "無法載入此影像。", + "retry": "再次嘗試載入影像" + }, + "quoteSelection": "引用", + "dismissQuote": "移除引用", + "attachments": { + "add": "附加影像或文件", + "errorTitle": "無法新增附件", + "imageUnsupported": "選取的模型不支援影像輸入。" + }, + "mentions": { + "menu": "新增 Homarr 內容", + "context": "上下文", + "app": "應用程式", + "integration": "集成", + "board": "面板", + "widget": "小工具", + "tools": "可用工具" + }, + "markdown": { + "diagram": "圖表", + "renderingDiagram": "正在轉譯圖表……", + "diagramUnavailable": "無法轉譯此圖表。" + }, + "commands": { + "menu": "助理指令", + "health": "準備服務健康狀態檢查", + "explore": "準備此 Homarr 執行個體的概覽", + "media": "準備媒體搜尋", + "style": "準備面板外觀或自訂 CSS 變更", + "designWidget": "準備以單一提示建立自訂小工具" + }, + "usage": { + "tokens": "權杖", + "contextWindow": "內容視窗", + "requestDetails": "請求詳細資料", + "used": "最新步驟", + "remaining": "剩餘", + "capacity": "容量", + "input": "輸入", + "output": "輸出", + "cached": "已快取的輸入", + "cacheWrite": "快取寫入", + "reasoning": "推理", + "inputShort": "輸入", + "outputShort": "輸出", + "cachedShort": "已快取", + "reasoningShort": "推理", + "firstOutput": "第一個輸出", + "homarrTiming": "Homarr 觀測值", + "endToEnd": "端對端", + "observedThroughput": "觀測到的輸送量", + "providerTiming": "供應商回報", + "loadingProviderDetails": "正在載入產生詳細資料……", + "providerDetailsPending": "OpenRouter 仍在處理部分產生詳細資料。重新開啟以重試。", + "providerLatency": "供應商延遲", + "generationTime": "產生時間", + "moderationLatency": "審核", + "providerThroughput": "供應商輸送量", + "fallbacks": "備援", + "fallbackLatency": "備援延遲", + "cacheDiscount": "快取折扣", + "normalizedTokens": "OpenRouter 正規化輸入 / 輸出", + "byok": "BYOK", + "cost": "費用", + "reported": "由供應商回報", + "estimated": "根據模型定價估算", + "upstreamCost": "上游推理", + "webSearches": "網路搜尋", + "finishReason": "完成原因", + "notReported": "未回報", + "agentSteps": "代理程式步驟", + "step": "步驟 {number}", + "generation": "生成" + }, + "toolInput": "輸入", + "toolOutput": "輸出", + "toolActivity": { + "iconSearch": "正在尋找「{query}」圖示", + "iconBrowse": "瀏覽可用圖示" + }, + "toolNavigation": { + "openPreview": "開啟預覽", + "openWidget": "開啟小工具" + }, + "webSearch": { + "title": "網頁搜尋", + "completed": "OpenRouter 已為此回應搜尋即時網頁。", + "searches": "{count, plural, other {# 次搜尋}}", + "sources": "{count, plural, other {# 個來源}}" + }, + "responseError": { + "title": "助理無法完成操作", + "description": "請再試一次。如果問題持續,請要求管理員確認已設定的模型端點。" + }, + "toolPreparationError": { + "title": "無法準備此請求", + "description": "模型在提供完整詳細資料前便停止了。請重試回應,或再次描述請求。未進行任何變更。" + }, + "busy": { + "title": "助理目前已在處理中", + "description": "請等待目前的回應,或開啟它以停止執行。" + }, + "pendingAction": { + "answerTitle": "需要回答", + "answerFallback": "選擇回答以繼續", + "formTitle": "檢視應用程式詳細資料", + "boardFormTitle": "檢視看板變更", + "review": "預覽", + "sendBlocked": "請先解決待處理的請求再傳送" + }, + "activity": { + "thinking": "助理正在思考", + "working": "正在處理您的提示", + "ready": "回應已準備就緒", + "completed": "開啟回應", + "approval": "需要核准", + "failed": "助理需要您的注意", + "expand": "開啟助理回應", + "dismiss": "關閉助理活動" + }, + "scrollToLatest": "捲動至最新內容", + "refresh": { + "action": "重新整理目前檢視畫面", + "working": "正在重新整理目前檢視畫面", + "completeTitle": "檢視畫面已重新整理", + "completeDescription": "可見的 Homarr 資料已重新載入。", + "failedTitle": "無法重新整理檢視畫面", + "failedDescription": "變更可能仍已儲存。請再次嘗試重新整理。" + }, + "askUser": { + "preparing": "正在準備問題", + "answered": "您的回答", + "other": "其他", + "otherLabel": "您的回答", + "otherPlaceholder": "輸入其他答案……", + "submit": "傳送回答", + "cancelOther": "取消其他回答", + "optionKind": { + "affirmative": "確認", + "negative": "拒絕", + "alternative": "選項", + "custom": "自訂" + } + }, + "configureApp": { + "title": "檢視應用程式詳細資料", + "description": "選擇本機圖示,並在助理要求建立核准前調整任何設定。", + "preparing": "正在準備應用程式詳細資料", + "continue": "使用這些詳細資料", + "ready": "應用程式詳細資料已準備就緒", + "automaticContinue": "自動使用這些應用程式詳細資料" + }, + "configureBoardSettings": { + "title": "檢視看板變更", + "loading": "正在載入目前的看板設定", + "loadErrorTitle": "無法載入看板設定", + "loadErrorDescription": "看板可能已不存在,或您沒有修改它的權限。", + "proposedCount": "助理提出了 {count} 個欄位", + "changeCount": "{count} 項變更已準備就緒", + "ready": "看板變更已準備就緒", + "cancelled": "已保留目前的看板設定", + "noChanges": "不會變更任何設定", + "keepCurrent": "保留目前設定", + "continue": "繼續進行核准", + "automaticContinue": "自動接受建議的看板變更", + "resetAll": "重設所有變更", + "tabs": { + "css": "自訂 CSS", + "appearance": "外觀", + "background": "背景", + "general": "一般" + }, + "cssDescription": "編輯完整樣式表。除非在此移除,否則現有規則都會保留。", + "cssCharacters": "{count} / 16384 個字元", + "copyCss": "複製 CSS", + "copied": "已複製", + "restoreCss": "還原目前的 CSS", + "remoteCssTitle": "此 CSS 會載入遠端資源", + "remoteCssDescription": "匯入的樣式表和遠端網址會在看板載入時連線至其他伺服器。請在繼續前先檢視。" + }, + "configureWidget": { + "title": "檢視小工具", + "preparing": "正在準備小工具設定", + "review": "檢視小工具和整合", + "ready": "小工具設定已準備就緒", + "cancelled": "未新增小工具", + "automaticContinue": "自動接受建議的小工具設定", + "definitionLoadErrorTitle": "無法載入小工具設定", + "definitionLoadErrorDescription": "Homarr 無法載入此小工具的設定。請再試一次。", + "loadErrorTitle": "無法載入整合", + "loadErrorDescription": "Homarr 無法載入此小工具可用的整合。", + "noIntegrationTitle": "需要相容的整合", + "noIntegrationDescription": "請先設定此小工具支援的整合,再將其新增至儀表板。", + "connectIntegration": "連線服務", + "manageIntegrations": "管理集成", + "skip": "不要新增", + "errorTitle": "無法準備小工具設定", + "errorDescription": "模型未提供完整的小工具設定。未新增任何小工具。" + }, + "approvalRequired": "需要核准", + "complete": "完成", + "denied": "已拒絕", + "failed": "失敗", + "working": "處理中", + "approvalDescription": "執行前請檢視此變更。", + "approveAndRun": "核准並執行", + "deny": "拒絕", + "autoApproval": { + "label": "自動核准", + "composerLabel": "代我核准", + "title": "自動核准", + "description": "自動準備表單,並核准此對話中的受保護變更。問題仍會等待您的回答,且仍會套用您的 Homarr 權限。切換對話時,此功能會關閉。", + "enable": "為此對話啟用", + "disable": "關閉自動核准", + "enabled": "自動核准已開啟", + "approving": "正在自動核准" + } } } From 177fa97b76b23512301a43e4ea494cd480914cbb Mon Sep 17 00:00:00 2001 From: Thomas Date: Mon, 5 Oct 2026 14:51:48 +0200 Subject: [PATCH 6/9] feat: support Unraid storage pools (#7038) --- apps/docs/docs/integrations/unraid/index.mdx | 2 + .../src/unraid/unraid-integration.ts | 42 ++++++++++++++----- .../integrations/src/unraid/unraid-types.ts | 28 ++++++++----- 3 files changed, 52 insertions(+), 20 deletions(-) diff --git a/apps/docs/docs/integrations/unraid/index.mdx b/apps/docs/docs/integrations/unraid/index.mdx index 60c97d9a2..aedc0da9d 100644 --- a/apps/docs/docs/integrations/unraid/index.mdx +++ b/apps/docs/docs/integrations/unraid/index.mdx @@ -25,6 +25,8 @@ import imgSelectApikeyPreset from "./imgs/unraid-select-api-key-preset.png"; CPU usage is averaged across logical processors, including SMT threads. +Storage includes array data disks and storage pools, including pool-only setups. Pool capacity is shown for the member reporting filesystem statistics; members with missing statistics and zero-size filesystems are omitted. Parity and boot devices are excluded. + ### Adding the integration diff --git a/packages/integrations/src/unraid/unraid-integration.ts b/packages/integrations/src/unraid/unraid-integration.ts index 0c26b8134..25b26d0ba 100644 --- a/packages/integrations/src/unraid/unraid-integration.ts +++ b/packages/integrations/src/unraid/unraid-integration.ts @@ -46,6 +46,21 @@ export class UnraidIntegration extends Integration implements ISystemHealthMonit const totalMemory = systemInfo.metrics.memory.total; const usedMemory = Math.max(totalMemory - systemInfo.metrics.memory.available, 0); const uptime = dayjs(systemInfo.info.os.uptime); + const disks = [...systemInfo.array.disks, ...systemInfo.array.caches]; + const fileSystem = disks.flatMap((disk) => { + // Only the pool member reporting filesystem statistics represents its capacity. + if (disk.fsSize === null || disk.fsFree === null || disk.fsUsed === null) return []; + if (disk.fsSize === 0) return []; + + return [ + { + deviceName: disk.name ?? disk.device ?? disk.id, + used: `${disk.fsUsed * 1024}`, // API filesystem sizes are in KiB. + available: `${disk.fsFree * 1024}`, + percentage: (disk.fsUsed / disk.fsSize) * 100, + }, + ]; + }); return { version: systemInfo.info.os.release, @@ -59,16 +74,11 @@ export class UnraidIntegration extends Integration implements ISystemHealthMonit rebootRequired: false, availablePkgUpdates: 0, cpuTemp: undefined, // Not implemented, see https://github.com/unraid/api/issues/1597 - fileSystem: systemInfo.array.disks.map((disk) => ({ - deviceName: disk.name, - used: `${disk.fsUsed * 1024}`, // API is in KiB (kibibytes), convert to bytes - available: `${(disk.size - disk.fsUsed) * 1024}`, // free space left on the disk, API is in KiB (kibibytes) - percentage: (disk.fsUsed / disk.size) * 100, // The units are the same, therefore the actual unit is irrelevant - })), - smart: systemInfo.array.disks.map((disk) => ({ - deviceName: disk.name, + fileSystem, + smart: disks.map((disk) => ({ + deviceName: disk.name ?? disk.device ?? disk.id, temperature: disk.temp ?? null, - overallStatus: disk.status, + overallStatus: disk.status ?? "UNKNOWN", // See ArrayDiskStatus from https://studio.apollographql.com/public/Unraid-API/variant/current/explorer healthy: disk.status === "DISK_OK", })), @@ -111,8 +121,20 @@ export class UnraidIntegration extends Integration implements ISystemHealthMonit } } disks { + id name - size + device + fsSize + fsFree + fsUsed + status + temp + } + caches { + id + name + device + fsSize fsFree fsUsed status diff --git a/packages/integrations/src/unraid/unraid-types.ts b/packages/integrations/src/unraid/unraid-types.ts index 877c364ff..119fd8202 100644 --- a/packages/integrations/src/unraid/unraid-types.ts +++ b/packages/integrations/src/unraid/unraid-types.ts @@ -1,5 +1,21 @@ import z from "zod"; +const filesystemSizeSchema = z + .union([z.number(), z.string().regex(/^\d+$/).transform(Number)]) + .pipe(z.number().int().min(0).max(Number.MAX_SAFE_INTEGER)) + .nullable(); + +const unraidDiskSchema = z.object({ + id: z.string(), + name: z.string().nullable(), + device: z.string().nullable(), + fsSize: filesystemSizeSchema, + fsFree: filesystemSizeSchema, + fsUsed: filesystemSizeSchema, + status: z.string().nullable(), + temp: z.number().nullish(), +}); + export const unraidSystemInfoSchema = z.object({ metrics: z.object({ cpu: z.object({ @@ -27,16 +43,8 @@ export const unraidSystemInfoSchema = z.object({ used: z.coerce.number(), }), }), - disks: z.array( - z.object({ - name: z.string(), - size: z.number(), - fsFree: z.number(), - fsUsed: z.number(), - status: z.string(), - temp: z.number().nullish(), - }), - ), + disks: z.array(unraidDiskSchema), + caches: z.array(unraidDiskSchema), }), info: z.object({ devices: z.object({ From df6410d56c1c383ac0996b8eafce30b6134d4a84 Mon Sep 17 00:00:00 2001 From: SmilingJoe <204793+SmilingJoe@users.noreply.github.com> Date: Mon, 5 Oct 2026 08:53:23 -0400 Subject: [PATCH 7/9] feat(widgets): add GPU metrics to Beszel system stats (#6645) Co-authored-by: ajnart --- .../widgets/beszel-system-stats/index.mdx | 4 +- .../docs/widgets/beszel-system-stats/index.ts | 20 ++- .../integrations/src/beszel/beszel-types.ts | 4 +- packages/translation/src/lang/en.json | 23 ++- .../src/beszel-system-stats/component.tsx | 3 + .../widgets/src/beszel-system-stats/index.ts | 3 + .../widgets/src/beszel/_shared/chart.spec.ts | 80 +++++++++- packages/widgets/src/beszel/_shared/chart.tsx | 68 +++++++- packages/widgets/src/beszel/_shared/format.ts | 2 + .../src/beszel/_shared/stats-view.spec.ts | 148 ++++++++++++++++++ .../widgets/src/beszel/_shared/stats-view.tsx | 94 ++++++++++- .../src/beszel/_shared/system-stats-modal.tsx | 3 + 12 files changed, 443 insertions(+), 9 deletions(-) create mode 100644 packages/widgets/src/beszel/_shared/stats-view.spec.ts diff --git a/apps/docs/docs/widgets/beszel-system-stats/index.mdx b/apps/docs/docs/widgets/beszel-system-stats/index.mdx index 0cccd1e8d..c9170ddbf 100644 --- a/apps/docs/docs/widgets/beszel-system-stats/index.mdx +++ b/apps/docs/docs/widgets/beszel-system-stats/index.mdx @@ -1,6 +1,6 @@ --- title: "Beszel System Stats" -description: "Time-series charts for CPU, memory, disk, network, and Docker container metrics from Beszel." +description: "Time-series charts for CPU, memory, disk, network, GPU, and Docker container metrics from Beszel." hide_title: true --- @@ -17,7 +17,7 @@ import beszelSystemStats from "./img/beszel-system-stats.png"; -This widget displays time-series charts for a selected Beszel system, including CPU, memory, disk, network, and Docker container metrics. The Disk Usage and Disk I/O charts combine the root disk and every extra filesystem reported by Beszel, with separate read and write series for each filesystem in the I/O chart. Use the widget controls to switch between the realtime Live view and historical periods 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. +This widget displays time-series charts for a selected Beszel system, including CPU, memory, disk, network, GPU, and Docker container metrics. GPU utilization is shown for every GPU reported by Beszel; used VRAM and power draw are shown when Beszel reports those metrics. The Disk Usage and Disk I/O charts combine the root disk and every extra filesystem reported by Beszel, with separate read and write series for each filesystem in the I/O chart. Use the widget controls to switch between the realtime Live view and historical periods 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 diff --git a/apps/docs/docs/widgets/beszel-system-stats/index.ts b/apps/docs/docs/widgets/beszel-system-stats/index.ts index 2f48019e4..507143bf7 100644 --- a/apps/docs/docs/widgets/beszel-system-stats/index.ts +++ b/apps/docs/docs/widgets/beszel-system-stats/index.ts @@ -4,7 +4,7 @@ import { IconChartAreaLine } from "@tabler/icons-react"; export const beszelSystemStatsWidget: WidgetDefinition = { icon: IconChartAreaLine, name: "Beszel System Stats", - description: "Time-series charts for CPU, memory, disk, network, and Docker container metrics from Beszel.", + description: "Time-series charts for CPU, memory, disk, network, GPU, and Docker container metrics from Beszel.", path: "../../widgets/beszel-system-stats", configuration: { items: [ @@ -54,6 +54,24 @@ export const beszelSystemStatsWidget: WidgetDefinition = { values: { type: "boolean" }, defaultValue: "yes", }, + { + name: "Show GPU usage", + description: "Displays GPU utilization for each GPU reported by Beszel", + values: { type: "boolean" }, + defaultValue: "yes", + }, + { + name: "Show GPU memory", + description: "Displays used VRAM for each GPU when reported by Beszel, in standard storage units", + values: { type: "boolean" }, + defaultValue: "yes", + }, + { + name: "Show GPU power", + description: "Displays power draw for each GPU when reported by Beszel", + values: { type: "boolean" }, + defaultValue: "yes", + }, { name: "Show Docker CPU", description: "Displays Docker container CPU usage chart", diff --git a/packages/integrations/src/beszel/beszel-types.ts b/packages/integrations/src/beszel/beszel-types.ts index 81398d04c..d53c8aa0e 100644 --- a/packages/integrations/src/beszel/beszel-types.ts +++ b/packages/integrations/src/beszel/beszel-types.ts @@ -194,9 +194,9 @@ export interface BeszelExtraFsStats { export interface BeszelGPUData { /** GPU name/model */ n: string; - /** memory used (bytes) */ + /** memory used (MB) */ mu?: number; - /** memory total (bytes) */ + /** memory total (MB) */ mt?: number; /** GPU utilization (%) */ u: number; diff --git a/packages/translation/src/lang/en.json b/packages/translation/src/lang/en.json index 64de699b7..6aeed451f 100644 --- a/packages/translation/src/lang/en.json +++ b/packages/translation/src/lang/en.json @@ -5094,7 +5094,7 @@ }, "beszelSystemStats": { "name": "Beszel System Stats", - "description": "Time-series charts for CPU, memory, disk, network, and Docker container metrics", + "description": "Time-series charts for CPU, memory, disk, network, GPU, and Docker container metrics", "option": { "systemId": { "label": "System", @@ -5118,6 +5118,15 @@ "showNetwork": { "label": "Show network chart" }, + "showGpuUsage": { + "label": "Show GPU usage chart" + }, + "showGpuMemory": { + "label": "Show GPU memory chart" + }, + "showGpuPower": { + "label": "Show GPU power chart" + }, "showDockerCpu": { "label": "Show Docker CPU chart" }, @@ -5172,6 +5181,18 @@ "sent": "Sent", "recv": "Received" }, + "gpuUsage": { + "title": "GPU Usage", + "subtitle": "Utilization by GPU" + }, + "gpuMemory": { + "title": "GPU Memory", + "subtitle": "VRAM used by GPU" + }, + "gpuPower": { + "title": "GPU Power", + "subtitle": "Power draw by GPU" + }, "dockerCpu": { "title": "Docker CPU Usage", "subtitle": "Average CPU utilization of containers" diff --git a/packages/widgets/src/beszel-system-stats/component.tsx b/packages/widgets/src/beszel-system-stats/component.tsx index 8c5f90da5..0031f37d5 100644 --- a/packages/widgets/src/beszel-system-stats/component.tsx +++ b/packages/widgets/src/beszel-system-stats/component.tsx @@ -271,6 +271,9 @@ export default function BeszelSystemStatsWidget({ disk: options.showDisk, diskIO: options.showDiskIO, network: options.showNetwork, + gpuUsage: options.showGpuUsage, + gpuMemory: options.showGpuMemory, + gpuPower: options.showGpuPower, dockerCpu: options.showDockerCpu, dockerMemory: options.showDockerMemory, dockerNetwork: options.showDockerNetwork, diff --git a/packages/widgets/src/beszel-system-stats/index.ts b/packages/widgets/src/beszel-system-stats/index.ts index 4479bd274..ef8756117 100644 --- a/packages/widgets/src/beszel-system-stats/index.ts +++ b/packages/widgets/src/beszel-system-stats/index.ts @@ -66,6 +66,9 @@ export const { definition, componentLoader } = createWidgetDefinition("beszelSys showDisk: factory.switch({ defaultValue: true }), showDiskIO: factory.switch({ defaultValue: true }), showNetwork: factory.switch({ defaultValue: true }), + showGpuUsage: factory.switch({ defaultValue: true }), + showGpuMemory: factory.switch({ defaultValue: true }), + showGpuPower: factory.switch({ defaultValue: true }), showDockerCpu: factory.switch({ defaultValue: true }), showDockerMemory: factory.switch({ defaultValue: true }), showDockerNetwork: factory.switch({ defaultValue: true }), diff --git a/packages/widgets/src/beszel/_shared/chart.spec.ts b/packages/widgets/src/beszel/_shared/chart.spec.ts index 575588526..7785d0634 100644 --- a/packages/widgets/src/beszel/_shared/chart.spec.ts +++ b/packages/widgets/src/beszel/_shared/chart.spec.ts @@ -2,7 +2,14 @@ import { describe, expect, test } from "vitest"; import type { BeszelSystemStatsRecord } from "@homarr/integrations/types"; -import { buildDiskChartData, normalizeBeszelByteRate, padLiveTimeGrid } from "./chart"; +import { + buildDiskChartData, + buildGpuChartData, + buildGpuDevices, + hasGpuMetric, + normalizeBeszelByteRate, + padLiveTimeGrid, +} from "./chart"; const GIBIBYTE = 1024 ** 3; @@ -103,3 +110,74 @@ describe("padLiveTimeGrid", () => { expect(data.slice(-3).map((point) => point.CPU)).toEqual([10, undefined, 20]); }); }); + +describe("buildGpuChartData", () => { + test("uses stable GPU ID and model labels across samples", () => { + const first = record("2026-07-11T13:46:00.000Z", 0, undefined); + first.stats.g = { + "0": { n: "RTX 3090", u: 10, mu: 1024, p: 150 }, + "1": { n: "RTX 3090", u: 20, mu: 2048, p: 175 }, + }; + const second = record("2026-07-11T13:47:00.000Z", 0, undefined); + second.stats.g = { "0": { n: "RTX 3090", u: 30, mu: 4096, p: 200 } }; + + const devices = [ + { id: "0", seriesName: "RTX 3090 (0)" }, + { id: "1", seriesName: "RTX 3090 (1)" }, + ]; + const data = buildGpuChartData([second, first], devices, "usage", "1h"); + + expect(data.map((point) => ({ zero: point["RTX 3090 (0)"], one: point["RTX 3090 (1)"] }))).toEqual([ + { zero: 10, one: 20 }, + { zero: 30, one: 0 }, + ]); + expect(buildGpuChartData([second, first], devices, "memory", "1h").map((point) => point["RTX 3090 (0)"])).toEqual([ + 1024 * 1024 * 1024, + 4096 * 1024 * 1024, + ]); + expect(buildGpuChartData([second, first], devices, "power", "1h").map((point) => point["RTX 3090 (0)"])).toEqual([ + 150, 200, + ]); + }); + + test("returns no data when no GPU stats are available", () => { + expect(buildGpuDevices(undefined)).toEqual([]); + expect(buildGpuChartData(undefined, [], "usage")).toEqual([]); + }); + + test("keeps same-model GPUs distinct and orders them by device ID", () => { + const sample = record("2026-07-11T13:46:00.000Z", 0, undefined); + sample.stats.g = { + "1": { n: "RTX 3090", u: 20 }, + "0": { n: "RTX 3090", u: 10 }, + }; + + expect(buildGpuDevices([sample])).toEqual([ + { id: "0", seriesName: "RTX 3090 (0)" }, + { id: "1", seriesName: "RTX 3090 (1)" }, + ]); + }); + + test("uses zero for unavailable optional metrics and preserves the live window", () => { + const sample = record("2026-07-11T13:51:30.000Z", 0, undefined); + sample.stats.g = { "0": { n: "RTX 3090", u: 10 } }; + const devices = [{ id: "0", seriesName: "RTX 3090 (0)" }]; + + expect(buildGpuChartData([sample], devices, "memory", "1m").at(-1)?.["RTX 3090 (0)"]).toBe(0); + expect(buildGpuChartData([sample], devices, "power", "1m").at(-1)?.["RTX 3090 (0)"]).toBe(0); + expect(buildGpuChartData([sample], devices, "usage", "1m")).toHaveLength(60); + }); + + test("distinguishes missing optional GPU metrics from reported zero values", () => { + const sample = record("2026-07-11T13:51:30.000Z", 0, undefined); + sample.stats.g = { "0": { n: "RTX 3090", u: 0 } }; + + expect(hasGpuMetric([sample], "memory")).toBe(false); + expect(hasGpuMetric([sample], "power")).toBe(false); + + sample.stats.g = { "0": { n: "RTX 3090", u: 0, mu: 0, p: 0 } }; + + expect(hasGpuMetric([sample], "memory")).toBe(true); + expect(hasGpuMetric([sample], "power")).toBe(true); + }); +}); diff --git a/packages/widgets/src/beszel/_shared/chart.tsx b/packages/widgets/src/beszel/_shared/chart.tsx index 9057022d8..e461371a6 100644 --- a/packages/widgets/src/beszel/_shared/chart.tsx +++ b/packages/widgets/src/beszel/_shared/chart.tsx @@ -6,7 +6,7 @@ import type { AreaChartProps } from "@mantine/charts"; import { AreaChart } from "@mantine/charts"; import dayjs from "dayjs"; -import type { BeszelContainerStatsRecord, BeszelSystemStatsRecord } from "@homarr/integrations/types"; +import type { BeszelContainerStatsRecord, BeszelGPUData, BeszelSystemStatsRecord } from "@homarr/integrations/types"; import { formatLocalizedDate } from "../../common/locale"; @@ -324,3 +324,69 @@ export const useDockerChartData = ( }); return padTimeGrid(mapped, timePeriod, locale); }, [containerStats, containerNames, metric, timePeriod, locale]); + +export interface BeszelGpuDevice { + id: string; + seriesName: string; +} + +export type BeszelGpuMetric = "usage" | "memory" | "power"; + +export const buildGpuDevices = (systemStats: BeszelSystemStatsRecord[] | undefined) => { + const devices = new Map(); + for (const record of systemStats ?? []) { + for (const [id, gpu] of Object.entries(record.stats.g ?? {})) { + if (!devices.has(id)) devices.set(id, { id, seriesName: `${gpu.n} (${id})` }); + } + } + return [...devices.values()].toSorted((a, b) => a.id.localeCompare(b.id)); +}; + +export const useGpuDevices = (systemStats: BeszelSystemStatsRecord[] | undefined) => + useMemo(() => buildGpuDevices(systemStats), [systemStats]); + +export const hasGpuMetric = (systemStats: BeszelSystemStatsRecord[] | undefined, metric: BeszelGpuMetric) => { + if (metric === "usage") return (systemStats ?? []).some((record) => Object.keys(record.stats.g ?? {}).length > 0); + + return (systemStats ?? []).some((record) => + Object.values(record.stats.g ?? {}).some((device) => (metric === "memory" ? device.mu : device.p) !== undefined), + ); +}; + +const gpuExtractors: Record number> = { + usage: (device) => device?.u ?? 0, + memory: (device) => (device?.mu ?? 0) * 1024 * 1024, + power: (device) => device?.p ?? 0, +}; + +export const useGpuChartData = ( + systemStats: BeszelSystemStatsRecord[] | undefined, + devices: BeszelGpuDevice[], + metric: BeszelGpuMetric, + timePeriod: BeszelTimePeriod = "1h", + locale = "en-US", +) => + useMemo( + () => buildGpuChartData(systemStats, devices, metric, timePeriod, locale), + [systemStats, devices, metric, timePeriod, locale], + ); + +export const buildGpuChartData = ( + systemStats: BeszelSystemStatsRecord[] | undefined, + devices: BeszelGpuDevice[], + metric: BeszelGpuMetric, + timePeriod: BeszelTimePeriod = "1h", + locale = "en-US", +) => { + if (!systemStats?.length) return []; + const extract = gpuExtractors[metric]; + const { fmt, ordered } = prepareRecords(systemStats, timePeriod, locale); + const mapped = ordered.map((record) => { + const point: Record = { time: fmt(record.created), rawTime: record.created }; + for (const device of devices) { + point[device.seriesName] = extract(record.stats.g?.[device.id]); + } + return point; + }); + return padTimeGrid(mapped, timePeriod, locale); +}; diff --git a/packages/widgets/src/beszel/_shared/format.ts b/packages/widgets/src/beszel/_shared/format.ts index 3f78315db..e792a74cd 100644 --- a/packages/widgets/src/beszel/_shared/format.ts +++ b/packages/widgets/src/beszel/_shared/format.ts @@ -20,6 +20,8 @@ export const createByteChartAxisFormatters = ( export const formatPercent = (value: number): string => `${value.toFixed(1)}%`; +export const formatWatts = (value: number): string => `${value.toFixed(1)} W`; + export const getProgressTrackSize = (size: "xs" | "sm"): number => (size === "xs" ? 6 : 9); export const formatUptime = (seconds: number): string => dayjs.duration(seconds, "seconds").humanize(); diff --git a/packages/widgets/src/beszel/_shared/stats-view.spec.ts b/packages/widgets/src/beszel/_shared/stats-view.spec.ts new file mode 100644 index 000000000..b25c328b6 --- /dev/null +++ b/packages/widgets/src/beszel/_shared/stats-view.spec.ts @@ -0,0 +1,148 @@ +import { act, createElement } from "react"; +import { createRoot } from "react-dom/client"; +import { MantineProvider } from "@mantine/core"; +import { afterEach, describe, expect, test, vi } from "vitest"; + +import type { BeszelSystemStatsRecord } from "@homarr/integrations/types"; +import type * as ChartModule from "./chart"; + +import { BeszelStatsView } from "./stats-view"; +import type { BeszelStatsVisibility } from "./stats-view"; + +const systemStats: BeszelSystemStatsRecord[] = [ + { + id: "gpu-sample", + system: "llama01", + type: "1m", + created: "2026-07-11T13:51:30.000Z", + updated: "2026-07-11T13:51:30.000Z", + stats: { + cpu: 0, + m: 0, + mu: 0, + mp: 0, + mb: 0, + s: 0, + su: 0, + d: 0, + du: 0, + dp: 0, + g: { "0": { n: "RTX 3090", u: 10, mu: 1024, p: 150 } }, + }, + }, +]; + +Object.assign(globalThis, { IS_REACT_ACT_ENVIRONMENT: true }); +Object.defineProperty(window, "matchMedia", { + writable: true, + value: vi.fn().mockImplementation(() => ({ + matches: false, + addEventListener: vi.fn(), + removeEventListener: vi.fn(), + addListener: vi.fn(), + removeListener: vi.fn(), + dispatchEvent: vi.fn(), + })), +}); + +vi.mock("@homarr/api/client", () => ({ + clientApi: { + widget: { + beszel: { + getSystemStats: { useQuery: () => ({ data: { systemStats, containerStats: [] } }) }, + }, + }, + }, +})); + +vi.mock("@homarr/translation/client", () => ({ + useI18n: () => (key: string) => key, + useCurrentIntlLocale: () => "en-US", +})); +vi.mock("@homarr/settings", () => ({ + useByteFormatter: () => ({ formatBytes: String, formatByteRate: String }), +})); +vi.mock("./use-live-stats", () => ({ useLiveStats: () => ({ data: undefined }) })); +vi.mock("./chart", async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + BeszelChartPanel: ({ title }: { title: string }) => createElement("div", { "data-chart": title }), + }; +}); + +const hiddenCharts: BeszelStatsVisibility = { + cpu: false, + memory: false, + disk: false, + diskIO: false, + network: false, + gpuUsage: false, + gpuMemory: false, + gpuPower: false, + dockerCpu: false, + dockerMemory: false, + dockerNetwork: false, +}; + +const roots: ReturnType[] = []; + +const setGpuStats = (gpu: BeszelSystemStatsRecord["stats"]["g"]) => { + const sample = systemStats[0]; + if (!sample) throw new Error("Expected a GPU test sample"); + sample.stats.g = gpu; +}; + +afterEach(() => { + for (const root of roots.splice(0)) root.unmount(); + document.body.replaceChildren(); + setGpuStats({ "0": { n: "RTX 3090", u: 10, mu: 1024, p: 150 } }); +}); + +const renderStatsView = async (visibility: BeszelStatsVisibility) => { + const container = document.createElement("div"); + document.body.append(container); + const root = createRoot(container); + roots.push(root); + await act(async () => { + root.render( + createElement( + MantineProvider, + null, + createElement(BeszelStatsView, { + integrationIds: ["beszel"], + systemId: "llama01", + timePeriod: "1h", + visibility, + columns: 1, + }), + ), + ); + }); + return container; +}; + +describe("BeszelStatsView GPU charts", () => { + test("renders only the GPU charts enabled by widget options", async () => { + const container = await renderStatsView({ ...hiddenCharts, gpuUsage: true, gpuPower: true }); + + expect(container.querySelector('[data-chart="chart.gpuUsage.title"]')).not.toBeNull(); + expect(container.querySelector('[data-chart="chart.gpuPower.title"]')).not.toBeNull(); + expect(container.querySelector('[data-chart="chart.gpuMemory.title"]')).toBeNull(); + }); + + test("does not render GPU charts for a non-GPU system", async () => { + setGpuStats(undefined); + const container = await renderStatsView({ ...hiddenCharts, gpuUsage: true, gpuMemory: true, gpuPower: true }); + + expect(container.querySelectorAll("[data-chart]")).toHaveLength(0); + }); + + test("does not render optional GPU charts when Beszel does not report their metrics", async () => { + setGpuStats({ "0": { n: "RTX 3090", u: 10 } }); + const container = await renderStatsView({ ...hiddenCharts, gpuMemory: true, gpuPower: true }); + + expect(container.querySelector('[data-chart="chart.gpuMemory.title"]')).toBeNull(); + expect(container.querySelector('[data-chart="chart.gpuPower.title"]')).toBeNull(); + }); +}); diff --git a/packages/widgets/src/beszel/_shared/stats-view.tsx b/packages/widgets/src/beszel/_shared/stats-view.tsx index 93ddaed28..b29207f7c 100644 --- a/packages/widgets/src/beszel/_shared/stats-view.tsx +++ b/packages/widgets/src/beszel/_shared/stats-view.tsx @@ -18,14 +18,17 @@ import type { BeszelTimePeriod } from "./chart"; import { BeszelChartPanel, CPU_Y_AXIS_DOMAIN, + hasGpuMetric, normalizeBeszelByteRate, useContainerNames, useDiskChartData, useDiskIOChartData, useDockerChartData, + useGpuChartData, + useGpuDevices, useSystemChartData, } from "./chart"; -import { createByteChartAxisFormatters, formatPercent } from "./format"; +import { createByteChartAxisFormatters, formatPercent, formatWatts } from "./format"; import { makeTooltipProps } from "./tooltip"; import { useLiveStats } from "./use-live-stats"; import { useDemoReadOnly } from "../../demo-read-only"; @@ -40,6 +43,9 @@ export interface BeszelStatsVisibility { disk: boolean; diskIO: boolean; network: boolean; + gpuUsage: boolean; + gpuMemory: boolean; + gpuPower: boolean; dockerCpu: boolean; dockerMemory: boolean; dockerNetwork: boolean; @@ -93,6 +99,7 @@ export function BeszelStatsView({ rate: makeTooltipProps(formatByteRate, true), percentTotal: makeTooltipProps(formatPercent, true), bytesTotal: makeTooltipProps(formatBytes, true), + watts: makeTooltipProps(formatWatts), }), [formatByteRate, formatBytes], ); @@ -157,6 +164,41 @@ export function BeszelStatsView({ locale, ); + const gpuDevices = useGpuDevices( + whenVisible(visibility.gpuUsage || visibility.gpuMemory || visibility.gpuPower, systemStats), + ); + const gpuSeries = useMemo( + () => + gpuDevices.map((device, index) => ({ + name: device.seriesName, + color: containerColors[index % containerColors.length] as string, + })), + [gpuDevices], + ); + const gpuUsageData = useGpuChartData( + whenVisible(visibility.gpuUsage, systemStats), + gpuDevices, + "usage", + timePeriod, + locale, + ); + const gpuMemoryData = useGpuChartData( + whenVisible(visibility.gpuMemory, systemStats), + gpuDevices, + "memory", + timePeriod, + locale, + ); + const gpuPowerData = useGpuChartData( + whenVisible(visibility.gpuPower, systemStats), + gpuDevices, + "power", + timePeriod, + locale, + ); + const hasGpuMemory = hasGpuMetric(systemStats, "memory"); + const hasGpuPower = hasGpuMetric(systemStats, "power"); + const efsPaths = useMemo(() => { const paths = new Set(); for (const record of systemStats ?? []) { @@ -283,6 +325,9 @@ export function BeszelStatsView({ (visibility.disk && diskData.length > 0 ? 1 : 0) + (visibility.diskIO && diskIOData.length > 0 ? 1 : 0) + (visibility.network && networkData.length > 0 ? 1 : 0) + + (visibility.gpuUsage && gpuSeries.length > 0 && gpuUsageData.length > 0 ? 1 : 0) + + (visibility.gpuMemory && hasGpuMemory && gpuMemoryData.length > 0 ? 1 : 0) + + (visibility.gpuPower && hasGpuPower && gpuPowerData.length > 0 ? 1 : 0) + (showDocker && containerSeries.length > 0 ? (visibility.dockerCpu && dockerCpuData.length > 0 ? 1 : 0) + (visibility.dockerMemory && dockerMemoryData.length > 0 ? 1 : 0) + @@ -367,6 +412,53 @@ export function BeszelStatsView({ }} /> )} + {gpuSeries.length > 0 && ( + <> + {visibility.gpuUsage && gpuUsageData.length > 0 && ( + + )} + {visibility.gpuMemory && hasGpuMemory && gpuMemoryData.length > 0 && ( + + )} + {visibility.gpuPower && hasGpuPower && gpuPowerData.length > 0 && ( + + )} + + )} {showDocker && containerSeries.length > 0 && ( <> {visibility.dockerCpu && dockerCpuData.length > 0 && ( diff --git a/packages/widgets/src/beszel/_shared/system-stats-modal.tsx b/packages/widgets/src/beszel/_shared/system-stats-modal.tsx index fda3146d2..d734e3ebc 100644 --- a/packages/widgets/src/beszel/_shared/system-stats-modal.tsx +++ b/packages/widgets/src/beszel/_shared/system-stats-modal.tsx @@ -23,6 +23,9 @@ const allCharts = { disk: true, diskIO: true, network: true, + gpuUsage: true, + gpuMemory: true, + gpuPower: true, dockerCpu: true, dockerMemory: true, dockerNetwork: true, From 837b382227f2c8ddfde5a7c1d145a05c70e9655a Mon Sep 17 00:00:00 2001 From: "homarr-releases[bot]" <175486441+homarr-releases[bot]@users.noreply.github.com> Date: Mon, 5 Oct 2026 14:53:48 +0200 Subject: [PATCH 8/9] chore: update bug report template (#7028) --- .github/ISSUE_TEMPLATE/bug_report.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 6b2e73482..d247f133b 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -45,6 +45,7 @@ body: options: # The below comment is used to insert a new version with on-release.yml #NEXT_VERSION# + - 2.1.2 - 2.0.0 - 1.77.0 - 1.76.2 From f39bb15d79c57086ab26ee6657242253f168fa44 Mon Sep 17 00:00:00 2001 From: Thomas Date: Mon, 5 Oct 2026 14:56:02 +0200 Subject: [PATCH 9/9] fix: report GitHub icon indexing failures clearly (#7008) --- apps/docs/docs/advanced/icons/index.mdx | 2 ++ .../repositories/github.icon-repository.ts | 22 ++++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/apps/docs/docs/advanced/icons/index.mdx b/apps/docs/docs/advanced/icons/index.mdx index 0931c6e43..294c39f65 100644 --- a/apps/docs/docs/advanced/icons/index.mdx +++ b/apps/docs/docs/advanced/icons/index.mdx @@ -23,6 +23,8 @@ Icons in Homarr are automatically requested from multiple sources: Using these icon sources, Homarr provides a total collection of over 11,000 icons at your fingertips. The image picker searches this collection after a short typing delay. When a name is available, such as an app or search engine name, the picker uses it as the initial search. Results show your locally uploaded images first, followed by SVG icons and then other image formats. +GitHub icon indexes are refreshed on startup and weekly. A GitHub rate limit can temporarily prevent Dashboard Icons, selfh.st, and Simple Icons from refreshing; previously cached icons remain available. Invalid or incomplete GitHub tree responses also leave the cached provider icons intact. The server log reports the HTTP status and, when GitHub provides them, remaining request quota and reset time (Unix seconds). After the limit resets, an administrator can rerun **Icons Updater** under **Manage → Tools → Tasks**. Direct image URLs and local uploads remain usable while indexing is unavailable. + ### Finding Missing Icons If you can't find the icon you're looking for in Homarr's built-in picker, we strongly recommend checking [Dashboard Icons](https://dashboardicons.com/). It offers a modern, user-friendly interface and a curated collection of high-quality icons specifically designed for dashboards and app directories. diff --git a/packages/icons/src/repositories/github.icon-repository.ts b/packages/icons/src/repositories/github.icon-repository.ts index afa9d51a7..7cf998de0 100644 --- a/packages/icons/src/repositories/github.icon-repository.ts +++ b/packages/icons/src/repositories/github.icon-repository.ts @@ -2,6 +2,7 @@ import { parse } from "path"; import { fetchWithTrustedCertificatesAsync } from "@homarr/core/infrastructure/http"; import { withTimeoutAsync } from "@homarr/core/infrastructure/http/timeout"; +import { ErrorWithMetadata } from "@homarr/core/infrastructure/logs/error"; import type { IconRepositoryLicense } from "../types/icon-repository-license"; import type { RepositoryIconGroup } from "../types/repository-icon-group"; @@ -26,7 +27,26 @@ export class GitHubIconRepository extends IconRepository { } const response = await withTimeoutAsync(async (signal) => fetchWithTrustedCertificatesAsync(url, { signal })); - const listOfFiles = (await response.json()) as GitHubApiResponse; + if (!response.ok) { + await response.body?.cancel(); + throw new ErrorWithMetadata("GitHub icon index request failed", { + status: response.status, + rateLimitRemaining: response.headers.get("x-ratelimit-remaining"), + rateLimitReset: response.headers.get("x-ratelimit-reset"), + retryAfter: response.headers.get("retry-after"), + }); + } + + const listOfFiles = (await response.json()) as GitHubApiResponse | null; + if (!listOfFiles || !Array.isArray(listOfFiles.tree)) { + throw new Error("GitHub icon index response does not contain a file tree"); + } + if (typeof listOfFiles.truncated !== "boolean") { + throw new Error("GitHub icon index response does not contain a boolean truncated flag"); + } + if (listOfFiles.truncated) { + throw new Error("GitHub icon index response contains a truncated file tree"); + } return { success: true,